<?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>136446</bug_id>
          
          <creation_ts>2014-09-02 00:43:14 -0700</creation_ts>
          <short_desc>Clean up naming for and slightly refactor legacy video fullscreen support</short_desc>
          <delta_ts>2014-09-03 17:27:38 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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="Maciej Stachowiak">mjs</reporter>
          <assigned_to name="Maciej Stachowiak">mjs</assigned_to>
          <cc>calvaris</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jeremyj-wk</cc>
    
    <cc>jer.noble</cc>
    
    <cc>jonlee</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1032574</commentid>
    <comment_count>0</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2014-09-02 00:43:14 -0700</bug_when>
    <thetext>Clean up naming for and slightly refactor legacy video fullscreen support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032577</commentid>
    <comment_count>1</comment_count>
      <attachid>237481</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2014-09-02 01:17:11 -0700</bug_when>
    <thetext>Created attachment 237481
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032578</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-02 01:18:47 -0700</bug_when>
    <thetext>Attachment 237481 did not pass style-queue:


ERROR: Source/WebCore/platform/ios/WebVideoFullscreenModelVideoElement.mm:41:  &quot;WebCore/HTMLVideoElement.h&quot; already included at Source/WebCore/platform/ios/WebVideoFullscreenModelVideoElement.mm:40  [build/include] [4]
ERROR: Source/WebCore/platform/ios/WebVideoFullscreenModelVideoElement.mm:47:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/platform/ios/WebVideoFullscreenModelVideoElement.mm:57:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebKit/mac/WebView/WebView.mm:137:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/html/HTMLMediaElement.h:819:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
Total errors found: 5 in 31 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>1032702</commentid>
    <comment_count>3</comment_count>
      <attachid>237507</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2014-09-02 11:09:40 -0700</bug_when>
    <thetext>Created attachment 237507
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032726</commentid>
    <comment_count>4</comment_count>
      <attachid>237510</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2014-09-02 13:18:09 -0700</bug_when>
    <thetext>Created attachment 237510
Rebaselined to newer trunk</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032727</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-02 13:19:43 -0700</bug_when>
    <thetext>Attachment 237510 did not pass style-queue:


ERROR: Source/WebKit/mac/WebView/WebView.mm:137:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/html/HTMLMediaElement.h:819:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
Total errors found: 2 in 31 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>1032767</commentid>
    <comment_count>6</comment_count>
      <attachid>237523</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2014-09-02 15:47:49 -0700</bug_when>
    <thetext>Created attachment 237523
Attempt to fix Windows build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032769</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-02 15:49:20 -0700</bug_when>
    <thetext>Attachment 237523 did not pass style-queue:


ERROR: Source/WebKit/mac/WebView/WebView.mm:137:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/html/HTMLMediaElement.h:819:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
Total errors found: 2 in 31 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>1032809</commentid>
    <comment_count>8</comment_count>
      <attachid>237538</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2014-09-02 18:21:46 -0700</bug_when>
    <thetext>Created attachment 237538
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032811</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-02 18:24:15 -0700</bug_when>
    <thetext>Attachment 237538 did not pass style-queue:


ERROR: Source/WebCore/WebCore.exp.in:0:  Source/WebCore/WebCore.exp.in should be sorted, use Tools/Scripts/sort-export-file script  [list/order] [5]
ERROR: Source/WebCore/html/HTMLMediaElement.h:819:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
Total errors found: 2 in 33 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>1032863</commentid>
    <comment_count>10</comment_count>
      <attachid>237549</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2014-09-03 00:15:56 -0700</bug_when>
    <thetext>Created attachment 237549
Try to fix Windows build again</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032864</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-03 00:17:28 -0700</bug_when>
    <thetext>Attachment 237549 did not pass style-queue:


ERROR: Source/WebCore/WebCore.exp.in:0:  Source/WebCore/WebCore.exp.in should be sorted, use Tools/Scripts/sort-export-file script  [list/order] [5]
ERROR: Source/WebCore/html/HTMLMediaElement.h:819:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
Total errors found: 2 in 33 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>1032994</commentid>
    <comment_count>12</comment_count>
      <attachid>237549</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2014-09-03 13:21:04 -0700</bug_when>
    <thetext>Comment on attachment 237549
Try to fix Windows build again

There&apos;s a lot of really good refactoring in here. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033028</commentid>
    <comment_count>13</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2014-09-03 14:32:49 -0700</bug_when>
    <thetext>Committed r173230: &lt;http://trac.webkit.org/changeset/173230&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033104</commentid>
    <comment_count>14</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-09-03 17:27:38 -0700</bug_when>
    <thetext>Slightly weird iOS build fix in http://trac.webkit.org/changeset/173243</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237481</attachid>
            <date>2014-09-02 01:17:11 -0700</date>
            <delta_ts>2014-09-02 11:09:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-136446-20140902011705.patch</filename>
            <type>text/plain</type>
            <size>120128</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MzE2NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMCBAQAorMjAxNC0wOS0wMiAgTWFjaWVq
IFN0YWNob3dpYWsgIDxtanNAYXBwbGUuY29tPgorCisgICAgICAgIENsZWFuIHVwIG5hbWluZyBm
b3IgYW5kIHNsaWdodGx5IHJlZmFjdG9yIGxlZ2FjeSB2aWRlbyBmdWxsc2NyZWVuIHN1cHBvcnQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjQ0Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEtleSBjaGFu
Z2VzOgorICAgICAgICBzdXBwb3J0c0Z1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqKSAtLT4gc3VwcG9y
dHNWaWRlb0Z1bGxzY3JlZW4oKQorICAgICAgICBlbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUq
KSAtLT4gZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoSFRNTFZpZGVvRWxlbWVu
dCopCisgICAgICAgIGV4aXRGdWxsc2NyZWVuRm9yTm9kZShOb2RlKikgLS0+IGV4aXRWaWRlb0Z1
bGxzY3JlZW4oKQorICAgICAgICAKKyAgICAgICAgVGhlIG9sZCB2ZXJzaW9ucyBoYWQgdW5uZWNl
c3NhcnkgcGFyYW1ldGVycywgZGlkIG5vdCBjbGVhcmx5IGRpc3Rpbmd1aXNoIHRoZWlyIHB1cnBv
c2UKKyAgICAgICAgZnJvbSBlbnRlckZ1bGxzY3JlZW5Gb3JFbGVtZW50IGFuZCBmcmllbmRzLCBh
bmQgd3JvbmdseSBjbGFpbWVkIGdlbmVyYWxpdHkgdG8gYWxsIE5vZGVzLgorICAgICAgICBBbHNv
IGNoYW5nZWQgbWFueSBvdGhlciBwbGFjZXMgdG8gdXNlIEhUTUxWaWRlb0VsZW1lbnQqIGluc3Rl
YWQgb2YgTm9kZSogb3IgCisgICAgICAgIEhUTUxNZWRpYUVsZW1lbnQqIHdoZW4gdGhleSB3ZXJl
IGluIGZhY3Qgb25seSB1c2VkIGZvciB2aWRlbyBlbGVtZW50cyBhbmQgd291bGQgb25seQorICAg
ICAgICB3b3JrIGZvciBzdWNoLgorCisgICAgICAgIFRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBp
bmNsdWRlIGEgYnVuY2ggb2YgcmVuYW1pbmcgaW4gc29tZSBpT1MgZnVsbHNjcmVlbiBjb2RlLgor
CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxNZWRpYUVsZW1lbnQ6OkhUTUxNZWRpYUVsZW1lbnQpOiBSZW5hbWUgbV9pc0Z1bGxzY3Jl
ZW4gZmxhZyB0byAKKyAgICAgICAgbV9pc0luVmlkZW9GdWxsc2NyZWVuLCBzaW5jZSBpdCBvbmx5
IGNvdmVycyB0aGUgY2FzZSBvZiBsZWdhY3kgdmlkZW8gZnVsbHNjcmVlbiwKKyAgICAgICAgbm90
IGVsZW1lbnQgZnVsbHNjcmVlbi4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6
OnN0b3ApOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6cmVxdWly
ZXNUZXh0VHJhY2tSZXByZXNlbnRhdGlvbik6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50Ojppc0Z1bGxzY3JlZW4pOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6SFRN
TE1lZGlhRWxlbWVudDo6ZW50ZXJGdWxsc2NyZWVuKTogUmVuYW1lIG1faXNGdWxsc2NyZWVuIGZs
YWcgdG8KKyAgICAgICAgbV9pc0luVmlkZW9GdWxsc2NyZWVuLiBIb2lzdCB2aWRlbyBlbGVtZW50
IGNoZWNrIGhlcmUgZnJvbSBhbGwgc3VwcG9ydHNGdWxsc2NyZW5Gb3JOb2RlCisgICAgICAgIGNs
aWVudHMuIEFkanVzdCBmb3IgcmVsZXZhbnQgQ2hyb21lQ2xpZW50IHJlZmFjdG9yaW5ncy4KKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmVudGVyRnVsbHNjcmVlbik6IGRpdHRv
IGFib3ZlCisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50Lmg6CisgICAgICAgICogaHRt
bC9IVE1MVmlkZW9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1l
bnQ6OnN1cHBvcnRzRnVsbHNjcmVlbik6IEFkanVzdCBmb3IgcmVsZXZhbnQgQ2hyb21lQ2xpZW50
IAorICAgICAgICByZWZhY3RvcmluZ3MuCisgICAgICAgICogcGFnZS9DaHJvbWVDbGllbnQuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6c3VwcG9ydHNWaWRlb0Z1bGxzY3JlZW4p
OiBSZW5hbWVkIGZyb20gCisgICAgICAgIHN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUsIGFuZCBy
ZW1vdmVkIE5vZGUqIHBhcmFtZXRlci4KKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6
ZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQpOiBSZW5hbWVkIGZyb20KKyAgICAg
ICAgZW50ZXJGdWxzY3JlZW5Gb3JOb2RlIGFuZCBjaGFuZ2VkIE5vZGUqIHBhcmFtZXRlciB0byBI
VE1MVmlkZW9FbGVtZW50Ki4KKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6ZXhpdFZp
ZGVvRnVsbHNjcmVlbik6IFJlbmFtZWQgZnJvbSAKKyAgICAgICAgZXhpdEZ1bGxzY3JlZW5Gb3JO
b2RlLCBhbmQgcmVtb3ZlZCBOb2RlKiBwYXJhbWV0ZXIuCisgICAgICAgICogcGxhdGZvcm0vaW9z
L1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW06CisgICAgICAgICgtW1dl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIgdmlkZW9FbGVtZW50XSk6IFJlbmFtZWQgZnJvbSBt
ZWRpYUVsZW1lbnQ7CisgICAgICAgIHJldHVybiBhIHZpZGVvIGVsZW1lbnQgYW5kIG5vdCBqdXN0
IGEgbWVkaWEgZWxlbWVudC4KKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ciBkZWFsbG9jXSk6IFJlbmFtZWQgX21lZGlhRWxlbWVudCBkYXRhIG1lbWJlcgorICAgICAgICB0
byBfdmlkZW9FbGVtZW50IGFuZCBjaGFuZ2VkIHR5cGUgYWNjb3JkaW5nbHkuCisgICAgICAgICgt
W1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIgc2V0VmlkZW9FbGVtZW50Ol0pOiBSZW5hbWVk
IGZyb20gc2V0TWVkaWFFbGVtZW50OgorICAgICAgICBhbmQgYWRqdXN0IHBhcmFtZXRlciB0eXBl
IGFjY29yZGluZ2x5LgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIGVu
dGVyRnVsbHNjcmVlbjpdKTogVmlkZW8gZWxlbWVudHMsIG5vdCBtZWRpYQorICAgICAgICBlbGVt
ZW50cy4KKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciBleGl0RnVsbHNj
cmVlbl0pOiBkaXR0bworICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIGRp
ZENsZWFudXBGdWxsc2NyZWVuXSk6IGRpdHRvCisgICAgICAgICogcGxhdGZvcm0vaW9zL1dlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9XZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oOiBSZW1vdmUgZ3JhdHVpdG91cyBIVE1MTUVkaWFF
bGVtZW50LmggaW5jbHVkZQorICAgICAgICBhbmQgZml4IGRlY2xhcmF0aW9ucyBhY2NvcmRpbmds
eS4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQubW06IEluY2x1ZGUgV1RGU3RyaW5nLmgKKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5oLgor
ICAgICAgICAqIHBsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dC5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5tbS4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50KSBSZW5hbWVkIGZyb20gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxN
ZWRpYUVsZW1lbnQKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
OjpzZXRWaWRlb0VsZW1lbnQpOiBSZW5hbWVkIGZyb20gc2V0TWVkaWFFbGVtZW50IGFuZAorICAg
ICAgICBjaGFuZ2UgcGFyYW0gdHlwZSBhY2NvcmRpbmdseS4gQWxzbyBubyBuZWVkIHRvIGNoZWNr
IGZvciBhY3R1YWwgdmlkZW9uZXNzIG9mIHRoZSBlbGVtZW50LgorICAgICAgICAoV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnVwZGF0ZUZvckV2ZW50TmFtZSk6IFJlbmFtZSBk
YXRhIG1lbWJlciBmcm9tIG1fbWVkaWFFbGVtZW50CisgICAgICAgIHRvIG1fdmlkZW9FbGVtZW50
IGFuZCBjaGFuZ2UgdHlwZSBhY2NvcmRpbmdseS4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0Z1bGxzY3JlZW5MYXllcik6IGRpdHRvCisgICAg
ICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6cGxheSk6IGRpdHRvCisg
ICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6cGF1c2UpOiBkaXR0
bworICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnRvZ2dsZVBs
YXlTdGF0ZSk6IGRpdHRvCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudDo6YmVnaW5TY3J1YmJpbmcpOiBkaXR0bworICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQ6OmVuZFNjcnViYmluZyk6IGRpdHRvCisgICAgICAgIChXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2Vla1RvVGltZSk6IGRpdHRvCisgICAgICAg
IChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6ZmFzdFNlZWspOiBkaXR0bwor
ICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmJlZ2luU2Nhbm5p
bmdGb3J3YXJkKTogZGl0dG8KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9F
bGVtZW50OjpiZWdpblNjYW5uaW5nQmFja3dhcmQpOiBkaXR0bworICAgICAgICAoV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmVuZFNjYW5uaW5nKTogZGl0dG8KKyAgICAgICAg
KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpyZXF1ZXN0RXhpdEZ1bGxzY3Jl
ZW4pOiBkaXR0bworICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6
OnNldFZpZGVvTGF5ZXJGcmFtZSk6IGRpdHRvCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9MYXllckdyYXZpdHkpOiBkaXR0bworICAgICAgICAo
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnVwZGF0ZUxlZ2libGVPcHRpb25z
KTogZGl0dG8KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlci5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyLm1tOgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIHZpZGVvRWxl
bWVudF0pOiBSZW5hbWVkIGZyb20gbWVkaWFFbGVtZW50CisgICAgICAgIGFuZCB1cGRhdGUgcmV0
dXJuIHR5cGUgYWNjb3JkaW5nbHkuCisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXIgc2V0VmlkZW9FbGVtZW50Ol0pOiBSZW5hbWVkIGZyb20gCisgICAgICAgIHNldE1lZGlh
RWxlbWVudCBhbmQgdXBkYXRlIHJldHVybiB0eXBlIGFjY29yZGluZ2x5LgorICAgICAgICAoLVtX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIHZpZGVvRWxlbWVudFJlY3RdKTogUmVuYW1lZAor
ICAgICAgICBmcm9tIG1lZGlhRWxlbWVudFJlY3QuCisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXIgZW50ZXJGdWxsc2NyZWVuOl0pOiBVcGRhdGUgZm9yCisgICAgICAgIHJl
bmFtZS4KKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciBleGl0RnVsbHNj
cmVlbl0pOiBkaXR0bworICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIHVw
ZGF0ZVBvd2VyQXNzZXJ0aW9uc10pOiBSZW5hbWUKKyAgICAgICAgbWVtYmVyIGZyb20gX21lZGlh
RWxlbWVudCB0byBfdmlkZW9FbGVtZW50CisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXIgX3JlcXVlc3RFeGl0XSk6IGRpdHRvCisgICAgICAgICogV2ViQ29yZS5leHAuaW46
IEFkanVzdCBmb3IgZnVuY3Rpb24gYW5kIGNsYXNzIHJlbmFtZXMuCisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGp1c3QgZm9yIGZpbGUgcmVuYW1lcy4KKwog
MjAxNC0wOS0wMSAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZW5kZXJUaGVtZU1hYzo6cGFpbnRQcm9ncmVzc0JhciBjcmVhdGVzIGEgYnVmZmVyIHdp
dGhvdXQgcmVzcGVjdGluZyB0aGUgZGVzdGluYXRpb24ncyBhY2NlbGVyYXRpb24gc2V0dGluZwpJ
bmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDE3MzE2MSkKKysrIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0zNDI2LDMwICszNDI2LDI5IEBA
IF9fWk5LN1dlYkNvcmUxNkhUTUxNZWRpYUVsZW1lbnQ4ZHVyYXRpb24KICNlbmRpZgogCiAjaWYg
RU5BQkxFKFZJREVPKSAmJiBQTEFURk9STShJT1MpCi1fX1pON1dlYkNvcmUzNVdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50MTBzZWVrVG9UaW1lRWQKLV9fWk43V2ViQ29yZTM1V2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQxMWVuZFNjYW5uaW5nRXYKLV9fWk43V2Vi
Q29yZTM1V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQxMWhhbmRsZUV2ZW50RVBO
U18yMlNjcmlwdEV4ZWN1dGlvbkNvbnRleHRFUE5TXzVFdmVudEUKLV9fWk43V2ViQ29yZTM1V2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQxMmVuZFNjcnViYmluZ0V2Ci1fX1pON1dl
YkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50MTRiZWdpblNjcnViYmlu
Z0V2Ci1fX1pON1dlYkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50MTVz
ZXRNZWRpYUVsZW1lbnRFUE5TXzE2SFRNTE1lZGlhRWxlbWVudEUKLV9fWk43V2ViQ29yZTM1V2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQxNXRvZ2dsZVBsYXlTdGF0ZUV2Ci1fX1pO
N1dlYkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50MThzZXRWaWRlb0xh
eWVyRnJhbWVFTlNfOUZsb2F0UmVjdEUKLV9fWk43V2ViQ29yZTM1V2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxNZWRpYUVsZW1lbnQyMGJlZ2luU2Nhbm5pbmdGb3J3YXJkRXYKLV9fWk43V2ViQ29yZTM1
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQyMHNldFZpZGVvTGF5ZXJHcmF2aXR5
RU5TXzIzV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwxMlZpZGVvR3Jhdml0eUUKLV9fWk43V2ViQ29y
ZTM1V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQyMWJlZ2luU2Nhbm5pbmdCYWNr
d2FyZEV2Ci1fX1pON1dlYkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50
MjFyZXF1ZXN0RXhpdEZ1bGxzY3JlZW5FdgotX19aTjdXZWJDb3JlMzVXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbE1lZGlhRWxlbWVudDIyc2VsZWN0QXVkaW9NZWRpYU9wdGlvbkV5Ci1fX1pON1dlYkNv
cmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50MjNzZXRWaWRlb0Z1bGxzY3Jl
ZW5MYXllckVQN0NBTGF5ZXIKLV9fWk43V2ViQ29yZTM1V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxN
ZWRpYUVsZW1lbnQyNHNlbGVjdExlZ2libGVNZWRpYU9wdGlvbkV5Ci1fX1pON1dlYkNvcmUzNVdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50NHBsYXlFdgotX19aTjdXZWJDb3JlMzVX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDVwYXVzZUV2Ci1fX1pON1dlYkNvcmUz
NVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OGZhc3RTZWVrRWQKLV9fWk43V2Vi
Q29yZTM1V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnRDMkV2Ci1fX1pON1dlYkNv
cmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50RDJFdgorX19aTjdXZWJDb3Jl
MzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDEwc2Vla1RvVGltZUVkCitfX1pO
N1dlYkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50MTFlbmRTY2Fubmlu
Z0V2CitfX1pON1dlYkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50MTFo
YW5kbGVFdmVudEVQTlNfMjJTY3JpcHRFeGVjdXRpb25Db250ZXh0RVBOU181RXZlbnRFCitfX1pO
N1dlYkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50MTJlbmRTY3J1YmJp
bmdFdgorX19aTjdXZWJDb3JlMzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDE0
YmVnaW5TY3J1YmJpbmdFdgorX19aTjdXZWJDb3JlMzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZp
ZGVvRWxlbWVudDE1c2V0VmlkZW9FbGVtZW50RVBOU18xNkhUTUxWaWRlb0VsZW1lbnRFCitfX1pO
N1dlYkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50MTV0b2dnbGVQbGF5
U3RhdGVFdgorX19aTjdXZWJDb3JlMzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dDE4c2V0VmlkZW9MYXllckZyYW1lRU5TXzlGbG9hdFJlY3RFCitfX1pON1dlYkNvcmUzNVdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50MjBiZWdpblNjYW5uaW5nRm9yd2FyZEV2Citf
X1pON1dlYkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50MjBzZXRWaWRl
b0xheWVyR3Jhdml0eUVOU18yM1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsMTJWaWRlb0dyYXZpdHlF
CitfX1pON1dlYkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50MjFiZWdp
blNjYW5uaW5nQmFja3dhcmRFdgorX19aTjdXZWJDb3JlMzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bFZpZGVvRWxlbWVudDIxcmVxdWVzdEV4aXRGdWxsc2NyZWVuRXYKK19fWk43V2ViQ29yZTM1V2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQyMnNlbGVjdEF1ZGlvTWVkaWFPcHRpb25F
eQorX19aTjdXZWJDb3JlMzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDIzc2V0
VmlkZW9GdWxsc2NyZWVuTGF5ZXJFUDdDQUxheWVyCitfX1pON1dlYkNvcmUzNVdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50MjRzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb25FeQorX19a
TjdXZWJDb3JlMzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDRwbGF5RXYKK19f
Wk43V2ViQ29yZTM1V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ1cGF1c2VFdgor
X19aTjdXZWJDb3JlMzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDhmYXN0U2Vl
a0VkCitfX1pON1dlYkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50QzJF
dgorX19aTjdXZWJDb3JlMzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudEQyRXYK
IF9fWk5LN1dlYkNvcmUxNkhUTUxWaWRlb0VsZW1lbnQxMHZpZGVvV2lkdGhFdgogX19aTks3V2Vi
Q29yZTE2SFRNTFZpZGVvRWxlbWVudDExdmlkZW9IZWlnaHRFdgotX19aVFZON1dlYkNvcmUzNVdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50RQotX19aVGhuP19ON1dlYkNvcmUzNVdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50MTFoYW5kbGVFdmVudEVQTlNfMjJTY3Jp
cHRFeGVjdXRpb25Db250ZXh0RVBOU181RXZlbnRFCitfX1pUaG40X043V2ViQ29yZTM1V2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQxMWhhbmRsZUV2ZW50RVBOU18yMlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRFUE5TXzVFdmVudEUKICNlbmRpZgogCiAjaWYgRU5BQkxFKFZJREVPKSAm
JiBQTEFURk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDgw
MDAwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiAxNzMxNjEpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEzNjMsOCArMTM2Myw2
IEBACiAJCTNGNDJCMzFFMTg4MTE5MUIwMDI3OEFBQyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQVZLaXQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzRjQyQjMxQzE4ODExOTFCMDAyNzhBQUMgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckFWS2l0Lm1tICovOyB9OwogCQkzRkJDNEFFQTE4OTg4MEVGMDA0NkVFMzggLyogV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDNGQkM0QUU5MTg5ODgwRUYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTNGQkM0QUVDMTg5ODgxMEUwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGQkM0QUVC
MTg5ODgxMEUwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkzRkJDNEFFRjE4OTg4
MTM4MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRkJDNEFFRDE4OTg4
MTM4MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQubW0gKi87
IH07Ci0JCTNGQkM0QUYwMTg5ODgxMzgwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bE1lZGlhRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gM0ZCQzRBRUUxODk4ODEzODAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
TWVkaWFFbGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJM0ZCQzRBRjMxODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gM0ZCQzRBRjExODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0Lm1tICovOyB9OwogCQkzRkJDNEFGNDE4OTg4MTU2MDA0NkVFMzggLyogV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDNGQkM0QUYyMTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTNGRkZGOUE4MTU5RDlBNTUwMDIwQkJENSAvKiBXZWJLaXRDU1NW
aWV3cG9ydFJ1bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gM0ZGRkY5QTYxNTlEOUE1NTAwMjBCQkQ1IC8qIFdlYktpdENTU1ZpZXdwb3J0UnVsZS5j
cHAgKi87IH07CkBAIC0yMjA5LDYgKzIyMDcsOCBAQAogCQk2NURGMzIzQzA5RDFERTY1MDAxQkUz
MjUgLyogSlNDYW52YXNQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNjVERjMyMzYwOUQxREU2NTAwMUJFMzI1IC8qIEpTQ2FudmFzUHJveHkuaCAq
LzsgfTsKIAkJNjVERjMyNjEwOUQxRTE5OTAwMEJFMzI1IC8qIFVzZXJBZ2VudFN0eWxlU2hlZXRz
RGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2
NTY1ODFBRjA5RDE0RUU2MDAwRTYxRDcgLyogVXNlckFnZW50U3R5bGVTaGVldHNEYXRhLmNwcCAq
LzsgfTsKIAkJNjVFMEU5NDQxMTMzQzg5RjAwQjRDQjEwIC8qIEpTRE9NV3JhcHBlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVFMEU5NDMxMTMzQzg5
RjAwQjRDQjEwIC8qIEpTRE9NV3JhcHBlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTY1RkQ0NjY1MTlCNTk2RjAwMDFFMkI0RCAvKiBXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNjU4NkZFM0MxOUI1NDhCRDAwNUMzQzgyIC8qIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNjVGRDQ2NjYxOUI1OTZGNjAwMUUyQjREIC8qIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU4NkZFM0QxOUI1NDhCRDAwNUMzQzgyIC8qIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tICovOyB9OwogCQk2NUZFQTg2OTA5ODMz
QURFMDBCRUQ0QUIgLyogUGFnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA2NUZFQTg2ODA5ODMzQURFMDBCRUQ0QUIgLyogUGFnZS5jcHAgKi87IH07
CiAJCTZCMzQ4MDk0MEVFRjUwRDQwMEFDMUI0MSAvKiBOYXRpdmVJbWFnZVB0ci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkIzNDgwOTIwRUVGNTBENDAw
QUMxQjQxIC8qIE5hdGl2ZUltYWdlUHRyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkM2Mzg4OTVBOTZDQ0VFNTBDOEM5NDZDIC8qIENhY2hlZFJl
c291cmNlUmVxdWVzdEluaXRpYXRvcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZDNjM4ODkzQTk2Q0NFRTUwQzhDOTQ2QyAvKiBDYWNoZWRSZXNvdXJj
ZVJlcXVlc3RJbml0aWF0b3JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTgzNjYsOCArODM2Niw2IEBACiAJCTNGNDJCMzFDMTg4MTE5MUIwMDI3
OEFBQyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
QVZLaXQubW07IHBhdGggPSBpb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzRkJDNEFFOTE4OTg4MEVGMDA0NkVFMzgg
LyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaDsgcGF0aCA9IGlvcy9XZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzRkJDNEFFQjE4OTg4
MTBFMDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS5oOyBwYXRo
ID0gaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkzRkJDNEFFRDE4OTg4MTM4MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxNZWRpYUVsZW1lbnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5h
bWUgPSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5tbTsgcGF0aCA9IGlvcy9X
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJM0ZCQzRBRUUxODk4ODEzODAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsTWVkaWFFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50Lmg7IHBhdGggPSBpb3MvV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJM0ZCQzRBRjExODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW07IHBhdGggPSBpb3MvV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNGQkM0
QUYyMTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdC5oOyBwYXRoID0gaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNGRkZGOUE2MTU5RDlBNTUwMDIwQkJE
NSAvKiBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV2ViS2l0Q1NTVmlld3BvcnRSdWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTkyNzYsNiArOTI3NCw4IEBACiAJCTY1N0VEQTA2MTM4NUNCOTcwMDRFMDY0
NSAvKiBNZW1vcnlQcmVzc3VyZUhhbmRsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNjU3RURBMDcxMzg1Q0I5NzAwNEUwNjQ1IC8qIE1lbW9yeVByZXNzdXJlSGFu
ZGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZW1vcnlQcmVzc3VyZUhh
bmRsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjU4NDM2ODUwQUUwMUI3NDAw
RTUzNzUzIC8qIEZyYW1lTG9hZFJlcXVlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEZyYW1lTG9hZFJlcXVlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NjU4NkZFM0MxOUI1NDhCRDAwNUMzQzgyIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9F
bGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50Lmg7IHBhdGggPSBpb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjU4NkZFM0Qx
OUI1NDhCRDAwNUMzQzgyIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxWaWRlb0VsZW1lbnQubW07IHBhdGggPSBpb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1OTM5MjM1
MDlBRTQzNDYwMDJDNTMxRiAvKiBVUkwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFVSTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1OTM5MjM2
MDlBRTQzNDYwMDJDNTMxRiAvKiBVUkwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFVSTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTkzOTIzOTA5QUU0MzVD
MDAyQzUzMUYgLyogVVJMTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
bGluZUVuZGluZyA9IDA7IHBhdGggPSBVUkxNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IHhjTGFuZ3VhZ2VTcGVjaWZpY2F0aW9uSWRlbnRpZmllciA9IHhjb2RlLmxhbmcub2JqY3BwOyB9
OwpAQCAtMTg0NzQsOCArMTg0NzQsOCBAQAogCQkJCTNGQkM0QUYyMTg5ODgxNTYwMDQ2RUUzOCAv
KiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oICovLAogCQkJCTNGQkM0QUYxMTg5
ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbSAqLywK
IAkJCQkzRkJDNEFFOTE4OTg4MEVGMDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwu
aCAqLywKLQkJCQkzRkJDNEFFRTE4OTg4MTM4MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxNZWRpYUVsZW1lbnQuaCAqLywKLQkJCQkzRkJDNEFFRDE4OTg4MTM4MDA0NkVFMzggLyog
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQubW0gKi8sCisJCQkJNjU4NkZFM0Mx
OUI1NDhCRDAwNUMzQzgyIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lmgg
Ki8sCisJCQkJNjU4NkZFM0QxOUI1NDhCRDAwNUMzQzgyIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50Lm1tICovLAogCQkJCUU0NTM5MDNDMEVBRkQ2MzcwMDM2OTVDOCAvKiBX
aWRnZXRJT1MubW0gKi8sCiAJCQkpOwogCQkJbmFtZSA9IGlvczsKQEAgLTI1NjEwLDYgKzI1NjEw
LDcgQEAKIAkJCQk1QTU3NEYyNTEzMURCOTM5MDA0NzFCODggLyogUmVuZGVyUXVvdGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUQ3MEFENjU4MTNFMTM0MkIwMDVCNTBCNCAvKiBSZW5kZXJSZWdpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDRTkzRjQ1MTUxN0M1NjcwMDhDQ0Y3NCAvKiBSZW5kZXJS
ZWdpb25TZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTY1RkQ0NjY1MTlCNTk2RjAwMDFFMkI0RCAv
KiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTg3MURGRTMwQTE1Mzc2QjAwQjEyQTY4IC8qIFJlbmRlclJlcGxhY2VkLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQ0E4NDZENzBEQzY3QTM1MDAyNkMzMDkgLyogUmVuZGVyUmVwbGljYS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMTQ3OUZBRUUxMDlBRTM3NTAwREVENjU1IC8qIFJlbmRlclJ1Ynku
aCBpbiBIZWFkZXJzICovLApAQCAtMjY1NDMsNyArMjY1NDQsNiBAQAogCQkJCTNGQkM0QUVDMTg5
ODgxMEUwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTNGQkM0QUY0MTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJM0ZCQzRBRUExODk4ODBFRjAwNDZF
RTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmggaW4gSGVhZGVycyAqLywKLQkJCQkzRkJD
NEFGMDE4OTg4MTM4MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1l
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUYxMjE3MUY2MTZBOENGMEIwMDAwNTNDQSAvKiBXZWJW
VFRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1RDIxQTgwMzEzRUNFNURGMDBCQjcwNjQg
LyogV2ViVlRUUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMTBCNjk4MDE0MEMxNzQwMDBC
QzFDMjYgLyogV2ViVlRUVG9rZW4uaCBpbiBIZWFkZXJzICovLApAQCAtMjc1NzMsNiArMjc1NzMs
NyBAQAogCQkJCUZEMTc2MkUzMTc2Njg2RUEwMEQ4MzZBOCAvKiBEb3duU2FtcGxlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBN0NBNTk1RTBCMjdCRDlFMDBGQTAyMUQgLyogRHJhZ0NvbnRyb2xs
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcxODc4OTAwQjJEMDRBQzAwQTE2RUNFIC8qIERy
YWdDb250cm9sbGVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNjVGRDQ2NjYxOUI1OTZGNjAw
MUUyQjREIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTc5NTQ2NDMwQjVDNENCNDAwN0I0MzhGIC8qIERyYWdEYXRhLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE3OTU0NjNFMEI1QzRDODAwMDdCNDM4RiAvKiBEcmFnRGF0YU1hYy5t
bSBpbiBTb3VyY2VzICovLAogCQkJCUE3Q0ZCM0QxMEI3RUQxMEEwMDcwQzMyRCAvKiBEcmFnSW1h
Z2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yOTgyMiw3ICsyOTgyMyw2IEBACiAJCQkJQ0Q4MjAz
MEQxMzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xs
ZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQk3QzczRkIwQzE5MUVGNUE4MDA3REUwNjEgLyogSlNV
c2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTNGQkM0
QUYzMTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5t
bSBpbiBTb3VyY2VzICovLAotCQkJCTNGQkM0QUVGMTg5ODgxMzgwMDQ2RUUzOCAvKiBXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUYxMjE3
MUY1MTZBOENFRDIwMDAwNTNDQSAvKiBXZWJWVFRFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTVEMjFBODAyMTNFQ0U1REYwMEJCNzA2NCAvKiBXZWJWVFRQYXJzZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQjEwQjY5ODExNDBDMTc0MDAwQkMxQzI2IC8qIFdlYlZUVFRva2VuaXplci5j
cHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmNwcAkocmV2aXNpb24gMTczMTYxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVk
aWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA1LDcgKzMwNSw3IEBAIEhUTUxNZWRp
YUVsZW1lbnQ6OkhUTUxNZWRpYUVsZW1lbnQoY29uc3QKICAgICAsIG1fc2VudEVuZEV2ZW50KGZh
bHNlKQogICAgICwgbV9wYXVzZWRJbnRlcm5hbChmYWxzZSkKICAgICAsIG1fc2VuZFByb2dyZXNz
RXZlbnRzKHRydWUpCi0gICAgLCBtX2lzRnVsbHNjcmVlbihmYWxzZSkKKyAgICAsIG1faXNJblZp
ZGVvRnVsbHNjcmVlbihmYWxzZSkKICAgICAsIG1fY2xvc2VkQ2FwdGlvbnNWaXNpYmxlKGZhbHNl
KQogICAgICwgbV93ZWJraXRMZWdhY3lDbG9zZWRDYXB0aW9uT3ZlcnJpZGUoZmFsc2UpCiAgICAg
LCBtX2NvbXBsZXRlbHlMb2FkZWQoZmFsc2UpCkBAIC02ODIsNyArNjgyLDcgQEAgdm9pZCBIVE1M
TWVkaWFFbGVtZW50OjpyZW1vdmVkRnJvbShDb250YQogICAgICAgICAgICAgbWVkaWFDb250cm9s
cygpLT5oaWRlKCk7CiAgICAgICAgIGlmIChtX25ldHdvcmtTdGF0ZSA+IE5FVFdPUktfRU1QVFkp
CiAgICAgICAgICAgICBwYXVzZSgpOwotICAgICAgICBpZiAobV9pc0Z1bGxzY3JlZW4pCisgICAg
ICAgIGlmIChtX2lzSW5WaWRlb0Z1bGxzY3JlZW4pCiAgICAgICAgICAgICBleGl0RnVsbHNjcmVl
bigpOwogCiAgICAgICAgIGlmIChtX3BsYXllcikgewpAQCAtNDY0Nyw3ICs0NjQ3LDcgQEAgYm9v
bCBIVE1MTWVkaWFFbGVtZW50OjpjYW5TdXNwZW5kKCkgY29ucwogdm9pZCBIVE1MTWVkaWFFbGVt
ZW50OjpzdG9wKCkKIHsKICAgICBMT0coTWVkaWEsICJIVE1MTWVkaWFFbGVtZW50OjpzdG9wIik7
Ci0gICAgaWYgKG1faXNGdWxsc2NyZWVuKQorICAgIGlmIChtX2lzSW5WaWRlb0Z1bGxzY3JlZW4p
CiAgICAgICAgIGV4aXRGdWxsc2NyZWVuKCk7CiAgICAgCiAgICAgbV9pbkFjdGl2ZURvY3VtZW50
ID0gZmFsc2U7CkBAIC00NzQxLDcgKzQ3NDEsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnZp
c2liaWxpdHlTdGF0ZUNoCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogYm9vbCBIVE1MTWVkaWFF
bGVtZW50OjpyZXF1aXJlc1RleHRUcmFja1JlcHJlc2VudGF0aW9uKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gbV9pc0Z1bGxzY3JlZW4gJiYgbV9wbGF5ZXIgPyBtX3BsYXllci0+cmVxdWlyZXNUZXh0
VHJhY2tSZXByZXNlbnRhdGlvbigpIDogZmFsc2U7CisgICAgcmV0dXJuIG1faXNJblZpZGVvRnVs
bHNjcmVlbiAmJiBtX3BsYXllciA/IG1fcGxheWVyLT5yZXF1aXJlc1RleHRUcmFja1JlcHJlc2Vu
dGF0aW9uKCkgOiBmYWxzZTsKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRUZXh0VHJh
Y2tSZXByZXNlbnRhdGlvbihUZXh0VHJhY2tSZXByZXNlbnRhdGlvbiogcmVwcmVzZW50YXRpb24p
CkBAIC00ODMzLDcgKzQ4MzMsNyBAQCBkb3VibGUgSFRNTE1lZGlhRWxlbWVudDo6bWF4RmFzdEZv
cndhcmRSCiAgICAgCiBib29sIEhUTUxNZWRpYUVsZW1lbnQ6OmlzRnVsbHNjcmVlbigpIGNvbnN0
CiB7Ci0gICAgaWYgKG1faXNGdWxsc2NyZWVuKQorICAgIGlmIChtX2lzSW5WaWRlb0Z1bGxzY3Jl
ZW4pCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQ
SSkKQEAgLTQ4NTcsNyArNDg1Nyw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dG9nZ2xlRnVs
bHNjcmVlblMKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZW50ZXJGdWxsc2NyZWVuKCkKIHsKICAg
ICBMT0coTWVkaWEsICJIVE1MTWVkaWFFbGVtZW50OjplbnRlckZ1bGxzY3JlZW4iKTsKLSAgICBp
ZiAobV9pc0Z1bGxzY3JlZW4pCisgICAgaWYgKG1faXNJblZpZGVvRnVsbHNjcmVlbikKICAgICAg
ICAgcmV0dXJuOwogCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQpAQCAtNDg2NywxMiArNDg2
NywxMyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmVudGVyRnVsbHNjcmVlbigpCiAgICAgfQog
I2VuZGlmCiAKLSAgICBtX2lzRnVsbHNjcmVlbiA9IHRydWU7CisgICAgbV9pc0luVmlkZW9GdWxs
c2NyZWVuID0gdHJ1ZTsKICAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQogICAgICAgICBtZWRp
YUNvbnRyb2xzKCktPmVudGVyZWRGdWxsc2NyZWVuKCk7Ci0gICAgaWYgKGRvY3VtZW50KCkucGFn
ZSgpKSB7Ci0gICAgICAgIGlmIChkb2N1bWVudCgpLnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50KCku
c3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZSh0aGlzKSkgewotICAgICAgICAgICAgZG9jdW1lbnQo
KS5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLmVudGVyRnVsbHNjcmVlbkZvck5vZGUodGhpcyk7
CisgICAgaWYgKGRvY3VtZW50KCkucGFnZSgpICYmIGlzSFRNTFZpZGVvRWxlbWVudCh0aGlzKSkg
eworICAgICAgICBIVE1MVmlkZW9FbGVtZW50KiBhc1ZpZGVvID0gdG9IVE1MVmlkZW9FbGVtZW50
KHRoaXMpOworICAgICAgICBpZiAoZG9jdW1lbnQoKS5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgp
LnN1cHBvcnRzVmlkZW9GdWxsc2NyZWVuKCkpIHsKKyAgICAgICAgICAgIGRvY3VtZW50KCkucGFn
ZSgpLT5jaHJvbWUoKS5jbGllbnQoKS5lbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVu
dChhc1ZpZGVvKTsKICAgICAgICAgICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1lcygpLndlYmtp
dGJlZ2luZnVsbHNjcmVlbkV2ZW50KTsKICAgICAgICAgfQogICAgIH0KQEAgLTQ4ODksMTYgKzQ4
OTAsMTYgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpleGl0RnVsbHNjcmVlbigpCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAjZW5kaWYKLSAgICBBU1NFUlQobV9pc0Z1bGxzY3JlZW4pOwotICAg
IG1faXNGdWxsc2NyZWVuID0gZmFsc2U7CisgICAgQVNTRVJUKG1faXNJblZpZGVvRnVsbHNjcmVl
bik7CisgICAgbV9pc0luVmlkZW9GdWxsc2NyZWVuID0gZmFsc2U7CiAgICAgaWYgKGhhc01lZGlh
Q29udHJvbHMoKSkKICAgICAgICAgbWVkaWFDb250cm9scygpLT5leGl0ZWRGdWxsc2NyZWVuKCk7
Ci0gICAgaWYgKGRvY3VtZW50KCkucGFnZSgpKSB7CisgICAgaWYgKGRvY3VtZW50KCkucGFnZSgp
ICYmIGlzSFRNTFZpZGVvRWxlbWVudCh0aGlzKSkgewogICAgICAgICBpZiAobV9tZWRpYVNlc3Np
b24tPnJlcXVpcmVzRnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2soKnRoaXMpKQogICAgICAgICAg
ICAgcGF1c2VJbnRlcm5hbCgpOwogCi0gICAgICAgIGlmIChkb2N1bWVudCgpLnBhZ2UoKS0+Y2hy
b21lKCkuY2xpZW50KCkuc3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZSh0aGlzKSkgewotICAgICAg
ICAgICAgZG9jdW1lbnQoKS5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLmV4aXRGdWxsc2NyZWVu
Rm9yTm9kZSh0aGlzKTsKKyAgICAgICAgaWYgKGRvY3VtZW50KCkucGFnZSgpLT5jaHJvbWUoKS5j
bGllbnQoKS5zdXBwb3J0c1ZpZGVvRnVsbHNjcmVlbigpKSB7CisgICAgICAgICAgICBkb2N1bWVu
dCgpLnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50KCkuZXhpdFZpZGVvRnVsbHNjcmVlbigpOwogICAg
ICAgICAgICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVzKCkud2Via2l0ZW5kZnVsbHNjcmVlbkV2
ZW50KTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1l
ZGlhRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlh
RWxlbWVudC5oCShyZXZpc2lvbiAxNzMxNjEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
ZWRpYUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtODE2LDcgKzgxNiw3IEBAIHByaXZhdGU6
CiAgICAgLy8gc3VwcG9ydCBwcm9ncmVzcyBldmVudHMgc28gc2V0dGluZyBtX3NlbmRQcm9ncmVz
c0V2ZW50cyBkaXNhYmxlcyB0aGVtIAogICAgIGJvb2wgbV9zZW5kUHJvZ3Jlc3NFdmVudHMgOiAx
OwogCi0gICAgYm9vbCBtX2lzRnVsbHNjcmVlbiA6IDE7CisgICAgYm9vbCBtX2lzSW5WaWRlb0Z1
bGxzY3JlZW4gOiAxOwogICAgIGJvb2wgbV9jbG9zZWRDYXB0aW9uc1Zpc2libGUgOiAxOwogICAg
IGJvb2wgbV93ZWJraXRMZWdhY3lDbG9zZWRDYXB0aW9uT3ZlcnJpZGUgOiAxOwogICAgIGJvb2wg
bV9jb21wbGV0ZWx5TG9hZGVkIDogMTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZp
ZGVvRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlk
ZW9FbGVtZW50LmNwcAkocmV2aXNpb24gMTczMTYxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MVmlkZW9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU3LDcgKzE1Nyw3IEBAIGJv
b2wgSFRNTFZpZGVvRWxlbWVudDo6c3VwcG9ydHNGdWxsc2NyZWUKICAgICBpZiAoIXBsYXllcigp
LT5oYXNWaWRlbygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gcGFnZS0+
Y2hyb21lKCkuY2xpZW50KCkuc3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZSh0aGlzKTsKKyAgICBy
ZXR1cm4gcGFnZS0+Y2hyb21lKCkuY2xpZW50KCkuc3VwcG9ydHNWaWRlb0Z1bGxzY3JlZW4oKTsK
ICNlbmRpZiAvLyBQTEFURk9STShJT1MpCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
Q2hyb21lQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVD
bGllbnQuaAkocmV2aXNpb24gMTczMTYxKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVD
bGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzM5LDkgKzMzOSw5IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIEdyYXBoaWNzRGV2aWNlQWRhcHRlciogZ3JhcGhpY3NEZXZpY2VBZGFwdGVyKCkgY29u
c3QgeyByZXR1cm4gMDsgfQogI2VuZGlmCiAKLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGdWxs
c2NyZWVuRm9yTm9kZShjb25zdCBOb2RlKikgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgZW50ZXJGdWxsc2NyZWVuRm9yTm9kZShOb2RlKikgeyB9Ci0gICAgdmlydHVhbCB2b2lk
IGV4aXRGdWxsc2NyZWVuRm9yTm9kZShOb2RlKikgeyB9CisgICAgdmlydHVhbCBib29sIHN1cHBv
cnRzVmlkZW9GdWxsc2NyZWVuKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
ZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoSFRNTFZpZGVvRWxlbWVudCopIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBleGl0VmlkZW9GdWxsc2NyZWVuKCkgeyB9CiAgICAgdmlydHVh
bCBib29sIHJlcXVpcmVzRnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2soKSB7IHJldHVybiBmYWxz
ZTsgfSAKIAogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckFWS2l0LmgJKHJldmlzaW9uIDE3MzE2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQuaAkod29ya2luZyBjb3B5
KQpAQCAtMjgsMTMgKzI4LDEzIEBACiAKICNpZiBQTEFURk9STShJT1MpCiAKLSNpbXBvcnQgPFdl
YkNvcmUvSFRNTE1lZGlhRWxlbWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9IVE1MVmlkZW9FbGVt
ZW50Lmg+CiAKIE9CSkNfQ0xBU1MgVUlWaWV3OwogCiBAaW50ZXJmYWNlIFdlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXIgOiBOU09iamVjdAotLSAodm9pZClzZXRNZWRpYUVsZW1lbnQ6KFdlYkNv
cmU6OkhUTUxNZWRpYUVsZW1lbnQqKW1lZGlhRWxlbWVudDsKLS0gKFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnQqKW1lZGlhRWxlbWVudDsKKy0gKHZvaWQpc2V0VmlkZW9FbGVtZW50OihXZWJDb3Jl
OjpIVE1MVmlkZW9FbGVtZW50Kil2aWRlb0VsZW1lbnQ7CistIChXZWJDb3JlOjpIVE1MVmlkZW9F
bGVtZW50Kil2aWRlb0VsZW1lbnQ7CiAtICh2b2lkKWVudGVyRnVsbHNjcmVlbjooVUlWaWV3ICop
dmlldzsKIC0gKHZvaWQpZXhpdEZ1bGxzY3JlZW47CiAtICh2b2lkKXJlcXVlc3RIaWRlQW5kRXhp
dEZ1bGxzY3JlZW47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW0JKHJldmlz
aW9uIDE3MzE2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQVZLaXQubW0JKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAK
IAogI2ltcG9ydCAiTG9nZ2luZy5oIgogI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50
LmgiCisjaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oIgogI2lt
cG9ydCA8UXVhcnR6Q29yZS9Db3JlQW5pbWF0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNv
cmVUaHJlYWRSdW4uaD4KIApAQCAtNDAsMTIgKzQwLDEyIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogI2lmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEIDwgODAwMDAKIAogQGlt
cGxlbWVudGF0aW9uIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIKLS0gKHZvaWQpc2V0TWVk
aWFFbGVtZW50OihXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50KiltZWRpYUVsZW1lbnQKKy0gKHZv
aWQpc2V0VmlkZW9FbGVtZW50OihXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50Kil2aWRlb0VsZW1l
bnQKIHsKLSAgICBVTlVTRURfUEFSQU0obWVkaWFFbGVtZW50KTsKKyAgICBVTlVTRURfUEFSQU0o
dmlkZW9FbGVtZW50KTsKIH0KIAotLSAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCopbWVkaWFF
bGVtZW50CistIChXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50Kil2aWRlb0VsZW1lbnQKIHsKICAg
ICByZXR1cm4gbnVsbHB0cjsKIH0KQEAgLTgxLDkgKzgxLDkgQEAgcHVibGljOgogCiBAaW1wbGVt
ZW50YXRpb24gV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlcgogewotICAgIFJlZlB0cjxIVE1M
TWVkaWFFbGVtZW50PiBfbWVkaWFFbGVtZW50OworICAgIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50
PiBfdmlkZW9FbGVtZW50OwogICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdD4gX2ludGVyZmFjZTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRp
YUVsZW1lbnQ+IF9tb2RlbDsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRl
b0VsZW1lbnQ+IF9tb2RlbDsKICAgICBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ2hhbmdl
T2JzZXJ2ZXIgX2NoYW5nZU9ic2VydmVyOwogICAgIFJldGFpblB0cjxQbGF0Zm9ybUxheWVyPiBf
dmlkZW9GdWxsc2NyZWVuTGF5ZXI7CiB9CkBAIC0xMDAsMTggKzEwMCwxOCBAQCAtIChpbnN0YW5j
ZXR5cGUpaW5pdAogCiAtICh2b2lkKWRlYWxsb2MKIHsKLSAgICBfbWVkaWFFbGVtZW50ID0gbnVs
bHB0cjsKKyAgICBfdmlkZW9FbGVtZW50ID0gbnVsbHB0cjsKICAgICBbc3VwZXIgZGVhbGxvY107
CiB9CiAKLS0gKHZvaWQpc2V0TWVkaWFFbGVtZW50OihIVE1MTWVkaWFFbGVtZW50KiltZWRpYUVs
ZW1lbnQKKy0gKHZvaWQpc2V0VmlkZW9FbGVtZW50OihIVE1MVmlkZW9FbGVtZW50Kil2aWRlb0Vs
ZW1lbnQKIHsKLSAgICBfbWVkaWFFbGVtZW50ID0gbWVkaWFFbGVtZW50OworICAgIF92aWRlb0Vs
ZW1lbnQgPSB2aWRlb0VsZW1lbnQ7CiB9CiAKLS0gKEhUTUxNZWRpYUVsZW1lbnQqKW1lZGlhRWxl
bWVudAorLSAoSFRNTFZpZGVvRWxlbWVudCopdmlkZW9FbGVtZW50CiB7Ci0gICAgcmV0dXJuIF9t
ZWRpYUVsZW1lbnQuZ2V0KCk7CisgICAgcmV0dXJuIF92aWRlb0VsZW1lbnQuZ2V0KCk7CiB9CiAK
IC0gKHZvaWQpZW50ZXJGdWxsc2NyZWVuOihVSVZpZXcgKil2aWV3CkBAIC0xMjAsMTcgKzEyMCwx
NyBAQCAtICh2b2lkKWVudGVyRnVsbHNjcmVlbjooVUlWaWV3ICopdmlldwogICAgIAogICAgIF9p
bnRlcmZhY2UgPSBhZG9wdFJlZihuZXcgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQp
OwogICAgIF9pbnRlcmZhY2UtPnNldFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKCZf
Y2hhbmdlT2JzZXJ2ZXIpOwotICAgIF9tb2RlbCA9IGFkb3B0UmVmKG5ldyBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbE1lZGlhRWxlbWVudCk7CisgICAgX21vZGVsID0gYWRvcHRSZWYobmV3IFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KTsKICAgICBfbW9kZWwtPnNldFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZShfaW50ZXJmYWNlLmdldCgpKTsKICAgICBfaW50ZXJmYWNlLT5z
ZXRXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbChfbW9kZWwuZ2V0KCkpOwotICAgIF9tb2RlbC0+c2V0
TWVkaWFFbGVtZW50KF9tZWRpYUVsZW1lbnQuZ2V0KCkpOworICAgIF9tb2RlbC0+c2V0VmlkZW9F
bGVtZW50KF92aWRlb0VsZW1lbnQuZ2V0KCkpOwogICAgIF92aWRlb0Z1bGxzY3JlZW5MYXllciA9
IFtDQUxheWVyIGxheWVyXTsKLSAgICBfaW50ZXJmYWNlLT5zZXR1cEZ1bGxzY3JlZW4oKl92aWRl
b0Z1bGxzY3JlZW5MYXllci5nZXQoKSwgX21lZGlhRWxlbWVudC0+Y2xpZW50UmVjdCgpLCB2aWV3
KTsKKyAgICBfaW50ZXJmYWNlLT5zZXR1cEZ1bGxzY3JlZW4oKl92aWRlb0Z1bGxzY3JlZW5MYXll
ci5nZXQoKSwgX3ZpZGVvRWxlbWVudC0+Y2xpZW50UmVjdCgpLCB2aWV3KTsKIH0KIAogLSAodm9p
ZClleGl0RnVsbHNjcmVlbgogewotICAgIF9pbnRlcmZhY2UtPmV4aXRGdWxsc2NyZWVuKF9tZWRp
YUVsZW1lbnQtPnNjcmVlblJlY3QoKSk7CisgICAgX2ludGVyZmFjZS0+ZXhpdEZ1bGxzY3JlZW4o
X3ZpZGVvRWxlbWVudC0+c2NyZWVuUmVjdCgpKTsKIH0KIAogLSAodm9pZClyZXF1ZXN0SGlkZUFu
ZEV4aXRGdWxsc2NyZWVuCkBAIC0xNjMsNyArMTYzLDcgQEAgLSAodm9pZClkaWRDbGVhbnVwRnVs
bHNjcmVlbgogICAgICAgICBfbW9kZWwtPnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKG5pbCk7CiAg
ICAgICAgIF9pbnRlcmZhY2UtPnNldFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKG51bGxwdHIpOwog
ICAgICAgICBfbW9kZWwtPnNldFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZShudWxscHRyKTsK
LSAgICAgICAgX21vZGVsLT5zZXRNZWRpYUVsZW1lbnQobnVsbHB0cik7CisgICAgICAgIF9tb2Rl
bC0+c2V0VmlkZW9FbGVtZW50KG51bGxwdHIpOwogICAgICAgICBfaW50ZXJmYWNlLT5zZXRXZWJW
aWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcihudWxscHRyKTsKICAgICAgICAgX21vZGVsID0g
bnVsbHB0cjsKICAgICAgICAgX2ludGVyZmFjZSA9IG51bGxwdHI7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZS5oCShyZXZpc2lvbiAxNzMxNjEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDkgKzUw
LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRWaWRlb0RpbWVuc2lvbnMoYm9vbCBo
YXNWaWRlbywgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXRTZWVrYWJsZVJhbmdlcyhjb25zdCBUaW1lUmFuZ2VzJikgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCBzZXRDYW5QbGF5RmFzdFJldmVyc2UoYm9vbCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBz
ZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgb3B0aW9u
cywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRMZWdp
YmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBvcHRpb25zLCB1
aW50NjRfdCBzZWxlY3RlZEluZGV4KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldEV4dGVybmFs
UGxheWJhY2soYm9vbCBlbmFibGVkLCBFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgU3RyaW5n
IGxvY2FsaXplZERldmljZU5hbWUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QXVkaW9NZWRp
YVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPFdURjo6U3RyaW5nPiYgb3B0aW9ucywgdWlu
dDY0X3Qgc2VsZWN0ZWRJbmRleCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRMZWdpYmxlTWVk
aWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZlY3RvcjxXVEY6OlN0cmluZz4mIG9wdGlvbnMsIHVp
bnQ2NF90IHNlbGVjdGVkSW5kZXgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RXh0ZXJuYWxQ
bGF5YmFjayhib29sIGVuYWJsZWQsIEV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBXVEY6OlN0
cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKSA9IDA7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQuaAkocmV2aXNpb24gMTczMTYxKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDcgKzMwLDYgQEAKICNpZiBQTEFURk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZF
UlNJT05fTUlOX1JFUVVJUkVEID49IDgwMDAwCiAKICNpbmNsdWRlIDxXZWJDb3JlL0V2ZW50TGlz
dGVuZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0hUTUxNZWRpYUVsZW1lbnQuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1BsYXRmb3JtTGF5ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1dlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTQ0LDcgKzQz
LDEyIEBAIE9CSkNfQ0xBU1MgVUlWaWV3OwogT0JKQ19DTEFTUyBDQUxheWVyOwogT0JKQ19DTEFT
UyBXZWJBVlZpZGVvTGF5ZXI7CiAKK25hbWVzcGFjZSBXVEYgeworY2xhc3MgU3RyaW5nOworfQor
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBJbnRSZWN0OwogY2xhc3MgV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWw7CiAgICAgCiBjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZl
ciB7CkBAIC01NSw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkRXhpdEZ1
bGxzY3JlZW4oKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZENsZWFudXBGdWxsc2NyZWVuKCkg
PSAwOwogfTsKLSAgICAKKwogY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQK
ICAgICA6IHB1YmxpYyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UKICAgICAsIHB1YmxpYyBS
ZWZDb3VudGVkPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiB7CkBAIC04OCwxMyAr
OTIsMTMgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXRWaWRl
b0RpbWVuc2lvbnMoYm9vbCBoYXNWaWRlbywgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkgb3Zl
cnJpZGU7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNldFNlZWthYmxlUmFuZ2Vz
KGNvbnN0IFRpbWVSYW5nZXMmKSBvdmVycmlkZTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IHZvaWQgc2V0Q2FuUGxheUZhc3RSZXZlcnNlKGJvb2wpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgdm9pZCBzZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyhjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgb3ZlcnJpZGU7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNldExlZ2libGVNZWRpYVNlbGVjdGlv
bk9wdGlvbnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVk
SW5kZXgpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXRFeHRl
cm5hbFBsYXliYWNrKGJvb2wgZW5hYmxlZCwgRXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIFN0
cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIHZvaWQgc2V0QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPFdU
Rjo6U3RyaW5nPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgb3ZlcnJpZGU7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9w
dGlvbnMoY29uc3QgVmVjdG9yPFdURjo6U3RyaW5nPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0
ZWRJbmRleCkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNldEV4
dGVybmFsUGxheWJhY2soYm9vbCBlbmFibGVkLCBFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwg
V1RGOjpTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSkgb3ZlcnJpZGU7CiAKLSAgICBXRUJDT1JF
X0VYUE9SVCB2aXJ0dWFsIHZvaWQgc2V0dXBGdWxsc2NyZWVuKFBsYXRmb3JtTGF5ZXImLCBXZWJD
b3JlOjpJbnRSZWN0IGluaXRpYWxSZWN0LCBVSVZpZXcgKik7CisgICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCB2b2lkIHNldHVwRnVsbHNjcmVlbihQbGF0Zm9ybUxheWVyJiwgSW50UmVjdCBpbml0
aWFsUmVjdCwgVUlWaWV3ICopOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBlbnRl
ckZ1bGxzY3JlZW4oKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxz
Y3JlZW4oV2ViQ29yZTo6SW50UmVjdCBmaW5hbFJlY3QpOworICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgdm9pZCBleGl0RnVsbHNjcmVlbihJbnRSZWN0IGZpbmFsUmVjdCk7CiAgICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB2b2lkIGNsZWFudXBGdWxsc2NyZWVuKCk7CiAgICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB2b2lkIGludmFsaWRhdGUoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIHZvaWQgcmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdC5tbQkocmV2aXNpb24gMTczMTYxKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tCSh3b3JraW5n
IGNvcHkpCkBAIC00OCw2ICs0OCw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVUaHJlYWRS
dW4uaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50LmgJKHJldmlz
aW9uIDE3MzE2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDkyICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0KLSNpZm5kZWYg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnRfaAotI2RlZmluZSBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudF9oCi0KLSNpZiBQTEFURk9STShJT1MpCi0KLSNpbmNs
dWRlIDxXZWJDb3JlL0V2ZW50TGlzdGVuZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVj
dC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1MYXllci5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgSFRNTE1lZGlhRWxlbWVudDsKLWNsYXNzIFRleHRUcmFj
azsKLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZTsKLQotY2xhc3MgV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQgOiBwdWJsaWMgV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWwsIHB1YmxpYyBFdmVudExpc3RlbmVyIHsKLXB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudCgpOwotICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50KCk7Ci0gICAgdm9p
ZCBzZXRXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlKiBpbnRlcmZhY2UpIHttX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSA9IGludGVyZmFjZTt9
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRNZWRpYUVsZW1lbnQoSFRNTE1lZGlhRWxlbWVu
dCopOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIoUGxh
dGZvcm1MYXllciopOwotICAgIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBoYW5k
bGVFdmVudChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29yZTo6RXZlbnQq
KSBvdmVycmlkZTsKLSAgICB2b2lkIHVwZGF0ZUZvckV2ZW50TmFtZShjb25zdCBXVEY6OkF0b21p
Y1N0cmluZyYpOwotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBFdmVudExpc3RlbmVyJiByaHMp
IG92ZXJyaWRlCi0gICAgICAgIHtyZXR1cm4gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RXZlbnRMaXN0
ZW5lcio+KHRoaXMpID09ICZyaHM7fQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lk
IHBsYXkoKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcGF1c2Uo
KSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgdG9nZ2xlUGxheVN0
YXRlKCkgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGJlZ2luU2Ny
dWJiaW5nKCkgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGVuZFNj
cnViYmluZygpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZWVr
VG9UaW1lKGRvdWJsZSB0aW1lKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IHZvaWQgZmFzdFNlZWsoZG91YmxlIHRpbWUpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgdm9pZCBiZWdpblNjYW5uaW5nRm9yd2FyZCgpIG92ZXJyaWRlOwotICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBiZWdpblNjYW5uaW5nQmFja3dhcmQoKSBvdmVycmlkZTsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZW5kU2Nhbm5pbmcoKSBvdmVycmlkZTsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcmVxdWVzdEV4aXRGdWxsc2NyZWVuKCkg
b3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNldFZpZGVvTGF5ZXJG
cmFtZShGbG9hdFJlY3QpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9p
ZCBzZXRWaWRlb0xheWVyR3Jhdml0eShXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2
aXR5KSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc2VsZWN0QXVk
aW9NZWRpYU9wdGlvbih1aW50NjRfdCBpbmRleCkgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB2b2lkIHNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBpbmRleCkg
b3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIGNvbnN0IFZlY3RvcjxXVEY6OkF0b21p
Y1N0cmluZz4mIG9ic2VydmVkRXZlbnROYW1lcygpOwotICAgIGNvbnN0IFdURjo6QXRvbWljU3Ry
aW5nJiBldmVudE5hbWVBbGwoKTsKLSAgICAKLSAgICBSZWZQdHI8SFRNTE1lZGlhRWxlbWVudD4g
bV9tZWRpYUVsZW1lbnQ7Ci0gICAgUmV0YWluUHRyPFBsYXRmb3JtTGF5ZXI+IG1fdmlkZW9GdWxs
c2NyZWVuTGF5ZXI7Ci0gICAgYm9vbCBtX2lzTGlzdGVuaW5nOwotICAgIFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZSogbV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U7Ci0gICAgRmxvYXRSZWN0
IG1fdmlkZW9GcmFtZTsKLSAgICBWZWN0b3I8UmVmUHRyPFRleHRUcmFjaz4+IG1fbGVnaWJsZVRy
YWNrc0Zvck1lbnU7Ci0KLSAgICB2b2lkIHVwZGF0ZUxlZ2libGVPcHRpb25zKCk7Ci19OwotCi19
Ci0KLSNlbmRpZgotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9X
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1l
bnQubW0JKHJldmlzaW9uIDE3MzE2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9X
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAt
MSwzODUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotCi0jaWYgUExBVEZPUk0oSU9TKQotCi0jaW1wb3J0ICJX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5oIgotCi0jaW1wb3J0ICJET01FdmVu
dEludGVybmFsLmgiCi0jaW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1wb3J0ICJNZWRpYUNvbnRyb2xz
SG9zdC5oIgotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLmgiCi0jaW1wb3J0
IDxXZWJDb3JlL0RPTUV2ZW50TGlzdGVuZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRXZlbnQuaD4K
LSNpbXBvcnQgPFdlYkNvcmUvRXZlbnRMaXN0ZW5lci5oPgotI2ltcG9ydCA8V2ViQ29yZS9FdmVu
dE5hbWVzLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0hUTUxFbGVtZW50Lmg+Ci0jaW1wb3J0IDxXZWJD
b3JlL0hUTUxNZWRpYUVsZW1lbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvSFRNTFZpZGVvRWxlbWVu
dC5oPgotI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1BhZ2VHcm91
cC5oPgotI2ltcG9ydCA8V2ViQ29yZS9Tb2Z0TGlua2luZy5oPgotI2ltcG9ydCA8V2ViQ29yZS9U
ZXh0VHJhY2tMaXN0Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1RpbWVSYW5nZXMuaD4KLSNpbXBvcnQg
PFdlYkNvcmUvV2ViQ29yZVRocmVhZFJ1bi5oPgotI2ltcG9ydCA8UXVhcnR6Q29yZS9Db3JlQW5p
bWF0aW9uLmg+Ci0jaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbXBvcnQgPHd0Zi9S
ZXRhaW5QdHIuaD4KLQotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVt
ZW50KCkKLSAgICA6IEV2ZW50TGlzdGVuZXIoRXZlbnRMaXN0ZW5lcjo6Q1BQRXZlbnRMaXN0ZW5l
clR5cGUpCi0gICAgLCBtX2lzTGlzdGVuaW5ne2ZhbHNlfQotewotfQotCi1XZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6fldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVt
ZW50KCkKLXsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6
c2V0TWVkaWFFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKLXsKLSAgICBp
ZiAobV9tZWRpYUVsZW1lbnQgPT0gbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAobV9tZWRpYUVsZW1lbnQgJiYgbV9pc0xpc3RlbmluZykgewotICAgICAgICBmb3IgKGF1
dG8gZXZlbnROYW1lIDogb2JzZXJ2ZWRFdmVudE5hbWVzKCkpCi0gICAgICAgICAgICBtX21lZGlh
RWxlbWVudC0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIHRoaXMsIGZhbHNlKTsKLSAg
ICB9Ci0gICAgbV9pc0xpc3RlbmluZyA9IGZhbHNlOwotCi0gICAgbV9tZWRpYUVsZW1lbnQgPSBt
ZWRpYUVsZW1lbnQ7Ci0KLSAgICBpZiAoIW1fbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm47
Ci0KLSAgICBmb3IgKGF1dG8gZXZlbnROYW1lIDogb2JzZXJ2ZWRFdmVudE5hbWVzKCkpCi0gICAg
ICAgIG1fbWVkaWFFbGVtZW50LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgdGhpcywgZmFs
c2UpOwotICAgIG1faXNMaXN0ZW5pbmcgPSB0cnVlOwotCi0gICAgdXBkYXRlRm9yRXZlbnROYW1l
KGV2ZW50TmFtZUFsbCgpKTsKLQotICAgIGlmIChpc0hUTUxWaWRlb0VsZW1lbnQobV9tZWRpYUVs
ZW1lbnQuZ2V0KCkpKSB7Ci0gICAgICAgIEhUTUxWaWRlb0VsZW1lbnQgKnZpZGVvRWxlbWVudCA9
IHRvSFRNTFZpZGVvRWxlbWVudChtX21lZGlhRWxlbWVudC5nZXQoKSk7Ci0gICAgICAgIG1fdmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRWaWRlb0RpbWVuc2lvbnModHJ1ZSwgdmlkZW9FbGVt
ZW50LT52aWRlb1dpZHRoKCksIHZpZGVvRWxlbWVudC0+dmlkZW9IZWlnaHQoKSk7Ci0gICAgfSBl
bHNlCi0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRWaWRlb0RpbWVuc2lv
bnMoZmFsc2UsIDAsIDApOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFF
bGVtZW50OjpoYW5kbGVFdmVudChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2Vi
Q29yZTo6RXZlbnQqIGV2ZW50KQotewotICAgIExPRyhNZWRpYSwgImhhbmRsZUV2ZW50ICVzIiwg
ZXZlbnQtPnR5cGUoKS5jaGFyYWN0ZXJzOCgpKTsKLSAgICB1cGRhdGVGb3JFdmVudE5hbWUoZXZl
bnQtPnR5cGUoKSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1l
bnQ6OnVwZGF0ZUZvckV2ZW50TmFtZShjb25zdCBXVEY6OkF0b21pY1N0cmluZyYgZXZlbnROYW1l
KQotewotICAgIGlmICghbV9tZWRpYUVsZW1lbnQgfHwgIW1fdmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYm9vbCBhbGwgPSBldmVudE5hbWUgPT0g
ZXZlbnROYW1lQWxsKCk7Ci0KLSAgICBpZiAoYWxsCi0gICAgICAgIHx8IGV2ZW50TmFtZSA9PSBl
dmVudE5hbWVzKCkuZHVyYXRpb25jaGFuZ2VFdmVudCkgewotICAgICAgICBtX3ZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZS0+c2V0RHVyYXRpb24obV9tZWRpYUVsZW1lbnQtPmR1cmF0aW9uKCkpOwot
ICAgICAgICAvLyBUaGVzZSBpcyBubyBzdGFuZGFyZCBldmVudCBmb3IgbWluRmFzdFJldmVyc2VS
YXRlQ2hhbmdlOyBkdXJhdGlvbiBjaGFuZ2UgaXMgYSByZWFzb25hYmxlIHByb3h5IGZvciBpdC4K
LSAgICAgICAgLy8gSXQgaGFwcGVucyBldmVyeSB0aW1lIGEgbmV3IGl0ZW0gYmVjb21lcyByZWFk
eSB0byBwbGF5LgotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0Q2FuUGxh
eUZhc3RSZXZlcnNlKG1fbWVkaWFFbGVtZW50LT5taW5GYXN0UmV2ZXJzZVJhdGUoKSA8IDAuMCk7
Ci0gICAgfQotCi0gICAgaWYgKGFsbAotICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1l
cygpLnBhdXNlRXZlbnQKLSAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5wbGF5
RXZlbnQKLSAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5yYXRlY2hhbmdlRXZl
bnQpCi0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRSYXRlKCFtX21lZGlh
RWxlbWVudC0+cGF1c2VkKCksIG1fbWVkaWFFbGVtZW50LT5wbGF5YmFja1JhdGUoKSk7Ci0KLSAg
ICBpZiAoYWxsCi0gICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkudGltZXVwZGF0
ZUV2ZW50KSB7Ci0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRDdXJyZW50
VGltZShtX21lZGlhRWxlbWVudC0+Y3VycmVudFRpbWUoKSwgW1tOU1Byb2Nlc3NJbmZvIHByb2Nl
c3NJbmZvXSBzeXN0ZW1VcHRpbWVdKTsKLSAgICAgICAgLy8gRklYTUU6IDEzMDc4OCAtIGZpbmQg
YSBiZXR0ZXIgZXZlbnQgdG8gdXBkYXRlIHNlZWthYmxlIHJhbmdlcyBmcm9tLgotICAgICAgICBt
X3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0U2Vla2FibGVSYW5nZXMoKm1fbWVkaWFFbGVt
ZW50LT5zZWVrYWJsZSgpKTsKLSAgICB9Ci0KLSAgICBpZiAoYWxsCi0gICAgICAgIHx8IGV2ZW50
TmFtZSA9PSBldmVudE5hbWVzKCkuYWRkdHJhY2tFdmVudAotICAgICAgICB8fCBldmVudE5hbWUg
PT0gZXZlbnROYW1lcygpLnJlbW92ZXRyYWNrRXZlbnQpCi0gICAgICAgIHVwZGF0ZUxlZ2libGVP
cHRpb25zKCk7Ci0KLSAgICBpZiAoYWxsCi0gICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5h
bWVzKCkud2Via2l0Y3VycmVudHBsYXliYWNrdGFyZ2V0aXN3aXJlbGVzc2NoYW5nZWRFdmVudCkg
ewotICAgICAgICBib29sIGVuYWJsZWQgPSBtX21lZGlhRWxlbWVudC0+bWVkaWFTZXNzaW9uKCku
Y3VycmVudFBsYXliYWNrVGFyZ2V0SXNXaXJlbGVzcygqbV9tZWRpYUVsZW1lbnQpOwotICAgICAg
ICBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBl
IHRhcmdldFR5cGUgPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U6OlRhcmdldFR5cGVOb25l
OwotICAgICAgICBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZTsKLQotICAgICAgICBpZiAobV9t
ZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCkpIHsKLSAgICAgICAgICAgIERFUFJFQ0FU
RURfREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGFpcnBsYXksIChBU0NJSUxpdGVyYWwoImFp
cnBsYXkiKSkpOwotICAgICAgICAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKFN0
cmluZywgdHZvdXQsIChBU0NJSUxpdGVyYWwoInR2b3V0IikpKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgU3RyaW5nIHR5cGUgPSBtX21lZGlhRWxlbWVudC0+bWVkaWFDb250cm9sc0hvc3Qo
KS0+ZXh0ZXJuYWxEZXZpY2VUeXBlKCk7Ci0gICAgICAgICAgICBpZiAodHlwZSA9PSBhaXJwbGF5
KQotICAgICAgICAgICAgICAgIHRhcmdldFR5cGUgPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2U6OlRhcmdldFR5cGVBaXJQbGF5OwotICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSB0dm91
dCkKLSAgICAgICAgICAgICAgICB0YXJnZXRUeXBlID0gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlOjpUYXJnZXRUeXBlVFZPdXQ7Ci0gICAgICAgICAgICBsb2NhbGl6ZWREZXZpY2VOYW1lID0g
bV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCktPmV4dGVybmFsRGV2aWNlRGlzcGxh
eU5hbWUoKTsKLSAgICAgICAgfQotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+
c2V0RXh0ZXJuYWxQbGF5YmFjayhlbmFibGVkLCB0YXJnZXRUeXBlLCBsb2NhbGl6ZWREZXZpY2VO
YW1lKTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1l
bnQ6OnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKFBsYXRmb3JtTGF5ZXIqIHZpZGVvTGF5ZXIpCi17
Ci0gICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIgPT0gdmlkZW9MYXllcikKLSAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIgPSB2aWRlb0xheWVyOwot
ICAgIFttX3ZpZGVvRnVsbHNjcmVlbkxheWVyIHNldEZyYW1lOm1fdmlkZW9GcmFtZV07Ci0gICAg
Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+
IHByb3RlY3QodGhpcyk7Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgIGlmIChtX21lZGlh
RWxlbWVudCkKLSAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5zZXRWaWRlb0Z1bGxzY3JlZW5M
YXllcihtX3ZpZGVvRnVsbHNjcmVlbkxheWVyLmdldCgpKTsKLSAgICAgICAgcHJvdGVjdC5jbGVh
cigpOwotICAgIH0pOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVt
ZW50OjpwbGF5KCkgewotICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
TWVkaWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOwotICAgIFdlYlRocmVhZFJ1biheewotICAgICAg
ICBpZiAobV9tZWRpYUVsZW1lbnQpCi0gICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+cGxheSgp
OwotICAgICAgICBwcm90ZWN0LmNsZWFyKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnBhdXNlKCkKLXsKLSAgICBfX2Jsb2NrIFJlZlB0
cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKLSAg
ICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICAg
ICAgbV9tZWRpYUVsZW1lbnQtPnBhdXNlKCk7Ci0gICAgICAgIHByb3RlY3QuY2xlYXIoKTsKLSAg
ICB9KTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6dG9n
Z2xlUGxheVN0YXRlKCkKLXsKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKLSAgICBXZWJUaHJlYWRSdW4oXnsKLSAg
ICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnRv
Z2dsZVBsYXlTdGF0ZSgpOwotICAgICAgICBwcm90ZWN0LmNsZWFyKCk7Ci0gICAgfSk7Ci19Ci0K
LXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OmJlZ2luU2NydWJiaW5n
KCkKLXsKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxl
bWVudD4gcHJvdGVjdCh0aGlzKTsKLSAgICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgaWYgKG1f
bWVkaWFFbGVtZW50KQotICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmJlZ2luU2NydWJiaW5n
KCk7Ci0gICAgICAgIHByb3RlY3QuY2xlYXIoKTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6ZW5kU2NydWJiaW5nKCkKLXsKLSAgICBfX2Js
b2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0
aGlzKTsKLSAgICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQot
ICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmVuZFNjcnViYmluZygpOwotICAgICAgICBwcm90
ZWN0LmNsZWFyKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxN
ZWRpYUVsZW1lbnQ6OnNlZWtUb1RpbWUoZG91YmxlIHRpbWUpCi17Ci0gICAgX19ibG9jayBSZWZQ
dHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7Ci0g
ICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAg
ICAgIG1fbWVkaWFFbGVtZW50LT5zZXRDdXJyZW50VGltZSh0aW1lKTsKLSAgICAgICAgcHJvdGVj
dC5jbGVhcigpOwotICAgIH0pOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVk
aWFFbGVtZW50OjpmYXN0U2Vlayhkb3VibGUgdGltZSkKLXsKLSAgICBfX2Jsb2NrIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKLSAgICBX
ZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICAgICAg
bV9tZWRpYUVsZW1lbnQtPmZhc3RTZWVrKHRpbWUpOwotICAgICAgICBwcm90ZWN0LmNsZWFyKCk7
Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6
OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkKLXsKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKLSAgICBXZWJUaHJlYWRS
dW4oXnsKLSAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICAgICAgbV9tZWRpYUVs
ZW1lbnQtPmJlZ2luU2Nhbm5pbmcoTWVkaWFDb250cm9sbGVySW50ZXJmYWNlOjpGb3J3YXJkKTsK
LSAgICAgICAgcHJvdGVjdC5jbGVhcigpOwotICAgIH0pOwotfQotCi12b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpiZWdpblNjYW5uaW5nQmFja3dhcmQoKQotewotICAg
IF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50PiBwcm90
ZWN0KHRoaXMpOwotICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICBpZiAobV9tZWRpYUVsZW1l
bnQpCi0gICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+YmVnaW5TY2FubmluZyhNZWRpYUNvbnRy
b2xsZXJJbnRlcmZhY2U6OkJhY2t3YXJkKTsKLSAgICAgICAgcHJvdGVjdC5jbGVhcigpOwotICAg
IH0pOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjplbmRT
Y2FubmluZygpCi17Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxN
ZWRpYUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAg
IGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5lbmRTY2Fu
bmluZygpOwotICAgICAgICBwcm90ZWN0LmNsZWFyKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnJlcXVlc3RFeGl0RnVsbHNjcmVlbigp
Ci17Ci0gICAgaWYgKCFtX21lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgX19i
bG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+IHByb3RlY3Qo
dGhpcyk7Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgIGlmIChtX21lZGlhRWxlbWVudCAm
JiBtX21lZGlhRWxlbWVudC0+aXNGdWxsc2NyZWVuKCkpCi0gICAgICAgICAgICBtX21lZGlhRWxl
bWVudC0+ZXhpdEZ1bGxzY3JlZW4oKTsKLSAgICAgICAgcHJvdGVjdC5jbGVhcigpOwotICAgIH0p
OwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpzZXRWaWRl
b0xheWVyRnJhbWUoRmxvYXRSZWN0IHJlY3QpCi17Ci0gICAgbV92aWRlb0ZyYW1lID0gcmVjdDsK
LSAgICBbbV92aWRlb0Z1bGxzY3JlZW5MYXllciBzZXRGcmFtZTpDR1JlY3QocmVjdCldOwotICAg
IG1fbWVkaWFFbGVtZW50LT5zZXRWaWRlb0Z1bGxzY3JlZW5GcmFtZShyZWN0KTsKLX0KLQotdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6c2V0VmlkZW9MYXllckdyYXZp
dHkoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSBncmF2aXR5KQotewotICAg
IE1lZGlhUGxheWVyOjpWaWRlb0dyYXZpdHkgdmlkZW9HcmF2aXR5ID0gTWVkaWFQbGF5ZXI6OlZp
ZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdDsKLSAgICBpZiAoZ3Jhdml0eSA9PSBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplKQotICAgICAgICB2aWRlb0dyYXZpdHkgPSBN
ZWRpYVBsYXllcjo6VmlkZW9HcmF2aXR5UmVzaXplOwotICAgIGVsc2UgaWYgKGdyYXZpdHkgPT0g
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCkKLSAgICAg
ICAgdmlkZW9HcmF2aXR5ID0gTWVkaWFQbGF5ZXI6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdDsK
LSAgICBlbHNlIGlmIChncmF2aXR5ID09IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dy
YXZpdHlSZXNpemVBc3BlY3RGaWxsKQotICAgICAgICB2aWRlb0dyYXZpdHkgPSBNZWRpYVBsYXll
cjo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbDsKLSAgICBlbHNlCi0gICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIAotICAgIG1fbWVkaWFFbGVtZW50LT5zZXRWaWRlb0Z1bGxz
Y3JlZW5HcmF2aXR5KHZpZGVvR3Jhdml0eSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxNZWRpYUVsZW1lbnQ6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QpCi17Ci0g
ICAgLy8gRklYTUU6IDEzMTIzNiBJbXBsZW1lbnQgYXVkaW8gdHJhY2sgc2VsZWN0aW9uLgotfQot
Ci12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpzZWxlY3RMZWdpYmxl
TWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpCi17Ci0gICAgVGV4dFRyYWNrKiB0ZXh0VHJhY2sg
PSBudWxscHRyOwotICAgIAotICAgIGlmIChpbmRleCA8IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnUu
c2l6ZSgpKQotICAgICAgICB0ZXh0VHJhY2sgPSBtX2xlZ2libGVUcmFja3NGb3JNZW51W3N0YXRp
Y19jYXN0PHNpemVfdD4oaW5kZXgpXS5nZXQoKTsKLSAgICAKLSAgICBtX21lZGlhRWxlbWVudC0+
c2V0U2VsZWN0ZWRUZXh0VHJhY2sodGV4dFRyYWNrKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6dXBkYXRlTGVnaWJsZU9wdGlvbnMoKQotewotICAgIFRl
eHRUcmFja0xpc3QqIHRyYWNrTGlzdCA9IG1fbWVkaWFFbGVtZW50LT50ZXh0VHJhY2tzKCk7Ci0g
ICAgaWYgKCF0cmFja0xpc3QgfHwgIW1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSB8
fCAhbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCkpCi0gICAgICAgIHJldHVybjsK
LSAgICAKLSAgICBXVEY6OkF0b21pY1N0cmluZyBkaXNwbGF5TW9kZSA9IG1fbWVkaWFFbGVtZW50
LT5tZWRpYUNvbnRyb2xzSG9zdCgpLT5jYXB0aW9uRGlzcGxheU1vZGUoKTsKLSAgICBUZXh0VHJh
Y2sqIG9mZkl0ZW0gPSBtX21lZGlhRWxlbWVudC0+bWVkaWFDb250cm9sc0hvc3QoKS0+Y2FwdGlv
bk1lbnVPZmZJdGVtKCk7Ci0gICAgVGV4dFRyYWNrKiBhdXRvbWF0aWNJdGVtID0gbV9tZWRpYUVs
ZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCktPmNhcHRpb25NZW51QXV0b21hdGljSXRlbSgpOwot
ICAgIENhcHRpb25Vc2VyUHJlZmVyZW5jZXMmIGNhcHRpb25QcmVmZXJlbmNlcyA9ICptX21lZGlh
RWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCktPmdyb3VwKCkuY2FwdGlvblByZWZlcmVuY2VzKCk7
Ci0gICAgbV9sZWdpYmxlVHJhY2tzRm9yTWVudSA9IGNhcHRpb25QcmVmZXJlbmNlcy5zb3J0ZWRU
cmFja0xpc3RGb3JNZW51KHRyYWNrTGlzdCk7Ci0gICAgVmVjdG9yPFN0cmluZz4gdHJhY2tEaXNw
bGF5TmFtZXM7Ci0gICAgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCA9IDA7Ci0gICAgdWludDY0X3Qg
b2ZmSW5kZXggPSAwOwotICAgIGJvb2wgdHJhY2tNZW51SXRlbVNlbGVjdGVkID0gZmFsc2U7Ci0g
ICAgCi0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG1fbGVnaWJsZVRyYWNrc0Zv
ck1lbnUuc2l6ZSgpOyBpbmRleCsrKSB7Ci0gICAgICAgIGF1dG8mIHRyYWNrID0gbV9sZWdpYmxl
VHJhY2tzRm9yTWVudVtpbmRleF07Ci0gICAgICAgIHRyYWNrRGlzcGxheU5hbWVzLmFwcGVuZChj
YXB0aW9uUHJlZmVyZW5jZXMuZGlzcGxheU5hbWVGb3JUcmFjayh0cmFjay5nZXQoKSkpOwotICAg
ICAgICAKLSAgICAgICAgaWYgKHRyYWNrID09IG9mZkl0ZW0pCi0gICAgICAgICAgICBvZmZJbmRl
eCA9IGluZGV4OwotICAgICAgICAKLSAgICAgICAgaWYgKHRyYWNrID09IGF1dG9tYXRpY0l0ZW0g
JiYgZGlzcGxheU1vZGUgPT0gTWVkaWFDb250cm9sc0hvc3Q6OmF1dG9tYXRpY0tleXdvcmQoKSkg
ewotICAgICAgICAgICAgc2VsZWN0ZWRJbmRleCA9IGluZGV4OwotICAgICAgICAgICAgdHJhY2tN
ZW51SXRlbVNlbGVjdGVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYg
KGRpc3BsYXlNb2RlICE9IE1lZGlhQ29udHJvbHNIb3N0OjphdXRvbWF0aWNLZXl3b3JkKCkgJiYg
dHJhY2stPm1vZGUoKSA9PSBUZXh0VHJhY2s6OnNob3dpbmdLZXl3b3JkKCkpIHsKLSAgICAgICAg
ICAgIHNlbGVjdGVkSW5kZXggPSBpbmRleDsKLSAgICAgICAgICAgIHRyYWNrTWVudUl0ZW1TZWxl
Y3RlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYgKG9mZkluZGV4ICYm
ICF0cmFja01lbnVJdGVtU2VsZWN0ZWQgJiYgZGlzcGxheU1vZGUgPT0gTWVkaWFDb250cm9sc0hv
c3Q6OmZvcmNlZE9ubHlLZXl3b3JkKCkpIHsKLSAgICAgICAgc2VsZWN0ZWRJbmRleCA9IG9mZklu
ZGV4OwotICAgICAgICB0cmFja01lbnVJdGVtU2VsZWN0ZWQgPSB0cnVlOwotICAgIH0KLSAgICAK
LSAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9u
T3B0aW9ucyh0cmFja0Rpc3BsYXlOYW1lcywgc2VsZWN0ZWRJbmRleCk7Ci19Ci0KLWNvbnN0IFZl
Y3RvcjxBdG9taWNTdHJpbmc+JiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6
b2JzZXJ2ZWRFdmVudE5hbWVzKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VmVjdG9y
PEF0b21pY1N0cmluZz4+IHNFdmVudE5hbWVzOwotCi0gICAgaWYgKCFzRXZlbnROYW1lcy5nZXQo
KS5zaXplKCkpIHsKLSAgICAgICAgc0V2ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFtZXMo
KS5kdXJhdGlvbmNoYW5nZUV2ZW50KTsKLSAgICAgICAgc0V2ZW50TmFtZXMuZ2V0KCkuYXBwZW5k
KGV2ZW50TmFtZXMoKS5wYXVzZUV2ZW50KTsKLSAgICAgICAgc0V2ZW50TmFtZXMuZ2V0KCkuYXBw
ZW5kKGV2ZW50TmFtZXMoKS5wbGF5RXZlbnQpOwotICAgICAgICBzRXZlbnROYW1lcy5nZXQoKS5h
cHBlbmQoZXZlbnROYW1lcygpLnJhdGVjaGFuZ2VFdmVudCk7Ci0gICAgICAgIHNFdmVudE5hbWVz
LmdldCgpLmFwcGVuZChldmVudE5hbWVzKCkudGltZXVwZGF0ZUV2ZW50KTsKLSAgICAgICAgc0V2
ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFtZXMoKS5hZGR0cmFja0V2ZW50KTsKLSAgICAg
ICAgc0V2ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFtZXMoKS5yZW1vdmV0cmFja0V2ZW50
KTsKLSAgICAgICAgc0V2ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFtZXMoKS53ZWJraXRj
dXJyZW50cGxheWJhY2t0YXJnZXRpc3dpcmVsZXNzY2hhbmdlZEV2ZW50KTsKLSAgICB9Ci0gICAg
cmV0dXJuIHNFdmVudE5hbWVzLmdldCgpOwotfQotCi1jb25zdCBBdG9taWNTdHJpbmcmIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpldmVudE5hbWVBbGwoKQotewotICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHNFdmVudE5hbWVBbGwgPSAiYWxsRXZl
bnRzIjsKLSAgICByZXR1cm4gc0V2ZW50TmFtZUFsbDsKLX0KLQotI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaAkocmV2aXNpb24gMTczMTYxKQkoZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1l
bnQuaDoxNzMxNjEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVm
IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50X2gKKyNkZWZpbmUgV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnRfaAorCisjaWYgUExBVEZPUk0oSU9TKQorCisjaW5j
bHVkZSA8V2ViQ29yZS9FdmVudExpc3RlbmVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFJl
Y3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEhUTUxNZWRpYUVsZW1lbnQ7CitjbGFzcyBUZXh0VHJh
Y2s7CitjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U7CisKK2NsYXNzIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50IDogcHVibGljIFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsLCBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7CitwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBPUlQg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQoKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudCgpOworICAgIHZv
aWQgc2V0V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZSogaW50ZXJmYWNlKSB7bV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UgPSBpbnRlcmZhY2U7
fQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TWVkaWFFbGVtZW50KEhUTUxNZWRpYUVsZW1l
bnQqKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFZpZGVvRnVsbHNjcmVlbkxheWVyKFBs
YXRmb3JtTGF5ZXIqKTsKKyAgICAKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgaGFu
ZGxlRXZlbnQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkNvcmU6OkV2ZW50
Kikgb3ZlcnJpZGU7CisgICAgdm9pZCB1cGRhdGVGb3JFdmVudE5hbWUoY29uc3QgV1RGOjpBdG9t
aWNTdHJpbmcmKTsKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRXZlbnRMaXN0ZW5lciYgcmhz
KSBvdmVycmlkZQorICAgICAgICB7cmV0dXJuIHN0YXRpY19jYXN0PFdlYkNvcmU6OkV2ZW50TGlz
dGVuZXIqPih0aGlzKSA9PSAmcmhzO30KKworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9p
ZCBwbGF5KCkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHBhdXNl
KCkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHRvZ2dsZVBsYXlT
dGF0ZSgpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBiZWdpblNj
cnViYmluZygpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBlbmRT
Y3J1YmJpbmcoKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc2Vl
a1RvVGltZShkb3VibGUgdGltZSkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCB2b2lkIGZhc3RTZWVrKGRvdWJsZSB0aW1lKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIHZvaWQgYmVnaW5TY2FubmluZ0ZvcndhcmQoKSBvdmVycmlkZTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgYmVnaW5TY2FubmluZ0JhY2t3YXJkKCkgb3ZlcnJpZGU7
CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGVuZFNjYW5uaW5nKCkgb3ZlcnJpZGU7
CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHJlcXVlc3RFeGl0RnVsbHNjcmVlbigp
IG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXRWaWRlb0xheWVy
RnJhbWUoRmxvYXRSZWN0KSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZv
aWQgc2V0VmlkZW9MYXllckdyYXZpdHkoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jh
dml0eSkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNlbGVjdEF1
ZGlvTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgdm9pZCBzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgp
IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8V1RGOjpBdG9t
aWNTdHJpbmc+JiBvYnNlcnZlZEV2ZW50TmFtZXMoKTsKKyAgICBjb25zdCBXVEY6OkF0b21pY1N0
cmluZyYgZXZlbnROYW1lQWxsKCk7CisgICAgCisgICAgUmVmUHRyPEhUTUxNZWRpYUVsZW1lbnQ+
IG1fbWVkaWFFbGVtZW50OworICAgIFJldGFpblB0cjxQbGF0Zm9ybUxheWVyPiBtX3ZpZGVvRnVs
bHNjcmVlbkxheWVyOworICAgIGJvb2wgbV9pc0xpc3RlbmluZzsKKyAgICBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2UqIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOworICAgIEZsb2F0UmVj
dCBtX3ZpZGVvRnJhbWU7CisgICAgVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2s+PiBtX2xlZ2libGVU
cmFja3NGb3JNZW51OworCisgICAgdm9pZCB1cGRhdGVMZWdpYmxlT3B0aW9ucygpOworfTsKKwor
fQorCisjZW5kaWYKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQuaAkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDgg
KzI0LDggQEAKICAqLwogCiAKLSNpZm5kZWYgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVs
ZW1lbnRfaAotI2RlZmluZSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudF9oCisj
aWZuZGVmIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50X2gKKyNkZWZpbmUgV2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnRfaAogCiAjaWYgUExBVEZPUk0oSU9TKQog
CkBAIC0zOCwxNiArMzgsMTYgQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKLWNsYXNzIEhUTUxNZWRpYUVsZW1lbnQ7CitjbGFzcyBIVE1MVmlkZW9FbGVt
ZW50OwogY2xhc3MgVGV4dFRyYWNrOwogY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
OwogCi1jbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudCA6IHB1YmxpYyBX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCwgcHVibGljIEV2ZW50TGlzdGVuZXIgeworY2xhc3MgV2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQgOiBwdWJsaWMgV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWwsIHB1YmxpYyBFdmVudExpc3RlbmVyIHsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VY
UE9SVCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudCgpOwotICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50KCk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQoKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVv
RWxlbWVudCgpOwogICAgIHZvaWQgc2V0V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZSogaW50ZXJmYWNlKSB7bV92aWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2UgPSBpbnRlcmZhY2U7fQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TWVkaWFFbGVt
ZW50KEhUTUxNZWRpYUVsZW1lbnQqKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFZpZGVv
RWxlbWVudChIVE1MVmlkZW9FbGVtZW50Kik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRW
aWRlb0Z1bGxzY3JlZW5MYXllcihQbGF0Zm9ybUxheWVyKik7CiAgICAgCiAgICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBXZWJDb3JlOjpFdmVudCopIG92ZXJyaWRlOwpAQCAtNzUsNyArNzUsNyBAQCBwcml2
YXRlOgogICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8V1RGOjpBdG9taWNTdHJpbmc+JiBvYnNlcnZl
ZEV2ZW50TmFtZXMoKTsKICAgICBjb25zdCBXVEY6OkF0b21pY1N0cmluZyYgZXZlbnROYW1lQWxs
KCk7CiAgICAgCi0gICAgUmVmUHRyPEhUTUxNZWRpYUVsZW1lbnQ+IG1fbWVkaWFFbGVtZW50Owor
ICAgIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50PiBtX3ZpZGVvRWxlbWVudDsKICAgICBSZXRhaW5Q
dHI8UGxhdGZvcm1MYXllcj4gbV92aWRlb0Z1bGxzY3JlZW5MYXllcjsKICAgICBib29sIG1faXNM
aXN0ZW5pbmc7CiAgICAgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKiBtX3ZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0J
KHJldmlzaW9uIDE3MzE2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50Lm1tOjE3MzE2MSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbQko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorCisjaWYgUExBVEZPUk0o
SU9TKQorCisjaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5oIgor
CisjaW1wb3J0ICJET01FdmVudEludGVybmFsLmgiCisjaW1wb3J0ICJMb2dnaW5nLmgiCisjaW1w
b3J0ICJNZWRpYUNvbnRyb2xzSG9zdC5oIgorI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlLmgiCisjaW1wb3J0IDxXZWJDb3JlL0RPTUV2ZW50TGlzdGVuZXIuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvRXZlbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRXZlbnRMaXN0ZW5lci5oPgorI2lt
cG9ydCA8V2ViQ29yZS9FdmVudE5hbWVzLmg+CisjaW1wb3J0IDxXZWJDb3JlL0hUTUxFbGVtZW50
Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0hUTUxNZWRpYUVsZW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvSFRNTFZpZGVvRWxlbWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+CisjaW1wb3J0
IDxXZWJDb3JlL1BhZ2VHcm91cC5oPgorI2ltcG9ydCA8V2ViQ29yZS9Tb2Z0TGlua2luZy5oPgor
I2ltcG9ydCA8V2ViQ29yZS9UZXh0VHJhY2tMaXN0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1RpbWVS
YW5nZXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZVRocmVhZFJ1bi5oPgorI2ltcG9ydCA8
UXVhcnR6Q29yZS9Db3JlQW5pbWF0aW9uLmg+CisjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKworV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OldlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsTWVkaWFFbGVtZW50KCkKKyAgICA6IEV2ZW50TGlzdGVuZXIoRXZlbnRMaXN0ZW5l
cjo6Q1BQRXZlbnRMaXN0ZW5lclR5cGUpCisgICAgLCBtX2lzTGlzdGVuaW5ne2ZhbHNlfQorewor
fQorCitXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6fldlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsTWVkaWFFbGVtZW50KCkKK3sKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbE1lZGlhRWxlbWVudDo6c2V0TWVkaWFFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlh
RWxlbWVudCkKK3sKKyAgICBpZiAobV9tZWRpYUVsZW1lbnQgPT0gbWVkaWFFbGVtZW50KQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAobV9tZWRpYUVsZW1lbnQgJiYgbV9pc0xpc3RlbmluZykg
eworICAgICAgICBmb3IgKGF1dG8gZXZlbnROYW1lIDogb2JzZXJ2ZWRFdmVudE5hbWVzKCkpCisg
ICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUs
IHRoaXMsIGZhbHNlKTsKKyAgICB9CisgICAgbV9pc0xpc3RlbmluZyA9IGZhbHNlOworCisgICAg
bV9tZWRpYUVsZW1lbnQgPSBtZWRpYUVsZW1lbnQ7CisKKyAgICBpZiAoIW1fbWVkaWFFbGVtZW50
KQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGF1dG8gZXZlbnROYW1lIDogb2JzZXJ2ZWRF
dmVudE5hbWVzKCkpCisgICAgICAgIG1fbWVkaWFFbGVtZW50LT5hZGRFdmVudExpc3RlbmVyKGV2
ZW50TmFtZSwgdGhpcywgZmFsc2UpOworICAgIG1faXNMaXN0ZW5pbmcgPSB0cnVlOworCisgICAg
dXBkYXRlRm9yRXZlbnROYW1lKGV2ZW50TmFtZUFsbCgpKTsKKworICAgIGlmIChpc0hUTUxWaWRl
b0VsZW1lbnQobV9tZWRpYUVsZW1lbnQuZ2V0KCkpKSB7CisgICAgICAgIEhUTUxWaWRlb0VsZW1l
bnQgKnZpZGVvRWxlbWVudCA9IHRvSFRNTFZpZGVvRWxlbWVudChtX21lZGlhRWxlbWVudC5nZXQo
KSk7CisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRWaWRlb0RpbWVuc2lv
bnModHJ1ZSwgdmlkZW9FbGVtZW50LT52aWRlb1dpZHRoKCksIHZpZGVvRWxlbWVudC0+dmlkZW9I
ZWlnaHQoKSk7CisgICAgfSBlbHNlCisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
LT5zZXRWaWRlb0RpbWVuc2lvbnMoZmFsc2UsIDAsIDApOworfQorCit2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpoYW5kbGVFdmVudChXZWJDb3JlOjpTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgV2ViQ29yZTo6RXZlbnQqIGV2ZW50KQoreworICAgIExPRyhNZWRpYSwg
ImhhbmRsZUV2ZW50ICVzIiwgZXZlbnQtPnR5cGUoKS5jaGFyYWN0ZXJzOCgpKTsKKyAgICB1cGRh
dGVGb3JFdmVudE5hbWUoZXZlbnQtPnR5cGUoKSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnVwZGF0ZUZvckV2ZW50TmFtZShjb25zdCBXVEY6OkF0b21p
Y1N0cmluZyYgZXZlbnROYW1lKQoreworICAgIGlmICghbV9tZWRpYUVsZW1lbnQgfHwgIW1fdmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYm9vbCBh
bGwgPSBldmVudE5hbWUgPT0gZXZlbnROYW1lQWxsKCk7CisKKyAgICBpZiAoYWxsCisgICAgICAg
IHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkuZHVyYXRpb25jaGFuZ2VFdmVudCkgeworICAg
ICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0RHVyYXRpb24obV9tZWRpYUVsZW1l
bnQtPmR1cmF0aW9uKCkpOworICAgICAgICAvLyBUaGVzZSBpcyBubyBzdGFuZGFyZCBldmVudCBm
b3IgbWluRmFzdFJldmVyc2VSYXRlQ2hhbmdlOyBkdXJhdGlvbiBjaGFuZ2UgaXMgYSByZWFzb25h
YmxlIHByb3h5IGZvciBpdC4KKyAgICAgICAgLy8gSXQgaGFwcGVucyBldmVyeSB0aW1lIGEgbmV3
IGl0ZW0gYmVjb21lcyByZWFkeSB0byBwbGF5LgorICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZS0+c2V0Q2FuUGxheUZhc3RSZXZlcnNlKG1fbWVkaWFFbGVtZW50LT5taW5GYXN0UmV2
ZXJzZVJhdGUoKSA8IDAuMCk7CisgICAgfQorCisgICAgaWYgKGFsbAorICAgICAgICB8fCBldmVu
dE5hbWUgPT0gZXZlbnROYW1lcygpLnBhdXNlRXZlbnQKKyAgICAgICAgfHwgZXZlbnROYW1lID09
IGV2ZW50TmFtZXMoKS5wbGF5RXZlbnQKKyAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFt
ZXMoKS5yYXRlY2hhbmdlRXZlbnQpCisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
LT5zZXRSYXRlKCFtX21lZGlhRWxlbWVudC0+cGF1c2VkKCksIG1fbWVkaWFFbGVtZW50LT5wbGF5
YmFja1JhdGUoKSk7CisKKyAgICBpZiAoYWxsCisgICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVu
dE5hbWVzKCkudGltZXVwZGF0ZUV2ZW50KSB7CisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlLT5zZXRDdXJyZW50VGltZShtX21lZGlhRWxlbWVudC0+Y3VycmVudFRpbWUoKSwgW1tO
U1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBzeXN0ZW1VcHRpbWVdKTsKKyAgICAgICAgLy8gRklY
TUU6IDEzMDc4OCAtIGZpbmQgYSBiZXR0ZXIgZXZlbnQgdG8gdXBkYXRlIHNlZWthYmxlIHJhbmdl
cyBmcm9tLgorICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0U2Vla2FibGVS
YW5nZXMoKm1fbWVkaWFFbGVtZW50LT5zZWVrYWJsZSgpKTsKKyAgICB9CisKKyAgICBpZiAoYWxs
CisgICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkuYWRkdHJhY2tFdmVudAorICAg
ICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnJlbW92ZXRyYWNrRXZlbnQpCisgICAg
ICAgIHVwZGF0ZUxlZ2libGVPcHRpb25zKCk7CisKKyAgICBpZiAoYWxsCisgICAgICAgIHx8IGV2
ZW50TmFtZSA9PSBldmVudE5hbWVzKCkud2Via2l0Y3VycmVudHBsYXliYWNrdGFyZ2V0aXN3aXJl
bGVzc2NoYW5nZWRFdmVudCkgeworICAgICAgICBib29sIGVuYWJsZWQgPSBtX21lZGlhRWxlbWVu
dC0+bWVkaWFTZXNzaW9uKCkuY3VycmVudFBsYXliYWNrVGFyZ2V0SXNXaXJlbGVzcygqbV9tZWRp
YUVsZW1lbnQpOworICAgICAgICBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U6OkV4dGVybmFs
UGxheWJhY2tUYXJnZXRUeXBlIHRhcmdldFR5cGUgPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2U6OlRhcmdldFR5cGVOb25lOworICAgICAgICBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZTsK
KworICAgICAgICBpZiAobV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCkpIHsKKyAg
ICAgICAgICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGFpcnBsYXks
IChBU0NJSUxpdGVyYWwoImFpcnBsYXkiKSkpOworICAgICAgICAgICAgREVQUkVDQVRFRF9ERUZJ
TkVfU1RBVElDX0xPQ0FMKFN0cmluZywgdHZvdXQsIChBU0NJSUxpdGVyYWwoInR2b3V0IikpKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgU3RyaW5nIHR5cGUgPSBtX21lZGlhRWxlbWVudC0+
bWVkaWFDb250cm9sc0hvc3QoKS0+ZXh0ZXJuYWxEZXZpY2VUeXBlKCk7CisgICAgICAgICAgICBp
ZiAodHlwZSA9PSBhaXJwbGF5KQorICAgICAgICAgICAgICAgIHRhcmdldFR5cGUgPSBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2U6OlRhcmdldFR5cGVBaXJQbGF5OworICAgICAgICAgICAgZWxz
ZSBpZiAodHlwZSA9PSB0dm91dCkKKyAgICAgICAgICAgICAgICB0YXJnZXRUeXBlID0gV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlOjpUYXJnZXRUeXBlVFZPdXQ7CisgICAgICAgICAgICBsb2Nh
bGl6ZWREZXZpY2VOYW1lID0gbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCktPmV4
dGVybmFsRGV2aWNlRGlzcGxheU5hbWUoKTsKKyAgICAgICAgfQorICAgICAgICBtX3ZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZS0+c2V0RXh0ZXJuYWxQbGF5YmFjayhlbmFibGVkLCB0YXJnZXRUeXBl
LCBsb2NhbGl6ZWREZXZpY2VOYW1lKTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKFBsYXRmb3JtTGF5
ZXIqIHZpZGVvTGF5ZXIpCit7CisgICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIgPT0gdmlk
ZW9MYXllcikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fdmlkZW9GdWxsc2NyZWVuTGF5
ZXIgPSB2aWRlb0xheWVyOworICAgIFttX3ZpZGVvRnVsbHNjcmVlbkxheWVyIHNldEZyYW1lOm1f
dmlkZW9GcmFtZV07CisgICAgCisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxNZWRpYUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7CisgICAgV2ViVGhyZWFkUnVuKF57Cisg
ICAgICAgIGlmIChtX21lZGlhRWxlbWVudCkKKyAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5z
ZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihtX3ZpZGVvRnVsbHNjcmVlbkxheWVyLmdldCgpKTsKKyAg
ICAgICAgcHJvdGVjdC5jbGVhcigpOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsTWVkaWFFbGVtZW50OjpwbGF5KCkgeworICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOworICAgIFdlYlRo
cmVhZFJ1biheeworICAgICAgICBpZiAobV9tZWRpYUVsZW1lbnQpCisgICAgICAgICAgICBtX21l
ZGlhRWxlbWVudC0+cGxheSgpOworICAgICAgICBwcm90ZWN0LmNsZWFyKCk7CisgICAgfSk7Cit9
CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnBhdXNlKCkKK3sK
KyAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4g
cHJvdGVjdCh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgaWYgKG1fbWVkaWFF
bGVtZW50KQorICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnBhdXNlKCk7CisgICAgICAgIHBy
b3RlY3QuY2xlYXIoKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bE1lZGlhRWxlbWVudDo6dG9nZ2xlUGxheVN0YXRlKCkKK3sKKyAgICBfX2Jsb2NrIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKKyAgICBX
ZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQorICAgICAgICAgICAg
bV9tZWRpYUVsZW1lbnQtPnRvZ2dsZVBsYXlTdGF0ZSgpOworICAgICAgICBwcm90ZWN0LmNsZWFy
KCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1l
bnQ6OmJlZ2luU2NydWJiaW5nKCkKK3sKKyAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4o
XnsKKyAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQorICAgICAgICAgICAgbV9tZWRpYUVsZW1l
bnQtPmJlZ2luU2NydWJiaW5nKCk7CisgICAgICAgIHByb3RlY3QuY2xlYXIoKTsKKyAgICB9KTsK
K30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6ZW5kU2NydWJi
aW5nKCkKK3sKKyAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlh
RWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgaWYg
KG1fbWVkaWFFbGVtZW50KQorICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmVuZFNjcnViYmlu
ZygpOworICAgICAgICBwcm90ZWN0LmNsZWFyKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnNlZWtUb1RpbWUoZG91YmxlIHRpbWUpCit7
CisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+
IHByb3RlY3QodGhpcyk7CisgICAgV2ViVGhyZWFkUnVuKF57CisgICAgICAgIGlmIChtX21lZGlh
RWxlbWVudCkKKyAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5zZXRDdXJyZW50VGltZSh0aW1l
KTsKKyAgICAgICAgcHJvdGVjdC5jbGVhcigpOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpmYXN0U2Vlayhkb3VibGUgdGltZSkKK3sKKyAg
ICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJv
dGVjdCh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgaWYgKG1fbWVkaWFFbGVt
ZW50KQorICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmZhc3RTZWVrKHRpbWUpOworICAgICAg
ICBwcm90ZWN0LmNsZWFyKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxNZWRpYUVsZW1lbnQ6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkKK3sKKyAgICBfX2Jsb2Nr
IFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlz
KTsKKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQorICAg
ICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmJlZ2luU2Nhbm5pbmcoTWVkaWFDb250cm9sbGVySW50
ZXJmYWNlOjpGb3J3YXJkKTsKKyAgICAgICAgcHJvdGVjdC5jbGVhcigpOworICAgIH0pOworfQor
Cit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpiZWdpblNjYW5uaW5n
QmFja3dhcmQoKQoreworICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
TWVkaWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOworICAgIFdlYlRocmVhZFJ1biheeworICAgICAg
ICBpZiAobV9tZWRpYUVsZW1lbnQpCisgICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+YmVnaW5T
Y2FubmluZyhNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2U6OkJhY2t3YXJkKTsKKyAgICAgICAgcHJv
dGVjdC5jbGVhcigpOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
TWVkaWFFbGVtZW50OjplbmRTY2FubmluZygpCit7CisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7CisgICAgV2ViVGhy
ZWFkUnVuKF57CisgICAgICAgIGlmIChtX21lZGlhRWxlbWVudCkKKyAgICAgICAgICAgIG1fbWVk
aWFFbGVtZW50LT5lbmRTY2FubmluZygpOworICAgICAgICBwcm90ZWN0LmNsZWFyKCk7CisgICAg
fSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnJlcXVl
c3RFeGl0RnVsbHNjcmVlbigpCit7CisgICAgaWYgKCFtX21lZGlhRWxlbWVudCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRp
YUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7CisgICAgV2ViVGhyZWFkUnVuKF57CisgICAgICAgIGlm
IChtX21lZGlhRWxlbWVudCAmJiBtX21lZGlhRWxlbWVudC0+aXNGdWxsc2NyZWVuKCkpCisgICAg
ICAgICAgICBtX21lZGlhRWxlbWVudC0+ZXhpdEZ1bGxzY3JlZW4oKTsKKyAgICAgICAgcHJvdGVj
dC5jbGVhcigpOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVk
aWFFbGVtZW50OjpzZXRWaWRlb0xheWVyRnJhbWUoRmxvYXRSZWN0IHJlY3QpCit7CisgICAgbV92
aWRlb0ZyYW1lID0gcmVjdDsKKyAgICBbbV92aWRlb0Z1bGxzY3JlZW5MYXllciBzZXRGcmFtZTpD
R1JlY3QocmVjdCldOworICAgIG1fbWVkaWFFbGVtZW50LT5zZXRWaWRlb0Z1bGxzY3JlZW5GcmFt
ZShyZWN0KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6
c2V0VmlkZW9MYXllckdyYXZpdHkoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0
eSBncmF2aXR5KQoreworICAgIE1lZGlhUGxheWVyOjpWaWRlb0dyYXZpdHkgdmlkZW9HcmF2aXR5
ID0gTWVkaWFQbGF5ZXI6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdDsKKyAgICBpZiAoZ3Jhdml0
eSA9PSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplKQorICAgICAg
ICB2aWRlb0dyYXZpdHkgPSBNZWRpYVBsYXllcjo6VmlkZW9HcmF2aXR5UmVzaXplOworICAgIGVs
c2UgaWYgKGdyYXZpdHkgPT0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJl
c2l6ZUFzcGVjdCkKKyAgICAgICAgdmlkZW9HcmF2aXR5ID0gTWVkaWFQbGF5ZXI6OlZpZGVvR3Jh
dml0eVJlc2l6ZUFzcGVjdDsKKyAgICBlbHNlIGlmIChncmF2aXR5ID09IFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsKQorICAgICAgICB2aWRlb0dy
YXZpdHkgPSBNZWRpYVBsYXllcjo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbDsKKyAgICBl
bHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIAorICAgIG1fbWVkaWFFbGVt
ZW50LT5zZXRWaWRlb0Z1bGxzY3JlZW5HcmF2aXR5KHZpZGVvR3Jhdml0eSk7Cit9CisKK3ZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnNlbGVjdEF1ZGlvTWVkaWFPcHRp
b24odWludDY0X3QpCit7CisgICAgLy8gRklYTUU6IDEzMTIzNiBJbXBsZW1lbnQgYXVkaW8gdHJh
Y2sgc2VsZWN0aW9uLgorfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVt
ZW50OjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpCit7CisgICAgVGV4
dFRyYWNrKiB0ZXh0VHJhY2sgPSBudWxscHRyOworICAgIAorICAgIGlmIChpbmRleCA8IG1fbGVn
aWJsZVRyYWNrc0Zvck1lbnUuc2l6ZSgpKQorICAgICAgICB0ZXh0VHJhY2sgPSBtX2xlZ2libGVU
cmFja3NGb3JNZW51W3N0YXRpY19jYXN0PHNpemVfdD4oaW5kZXgpXS5nZXQoKTsKKyAgICAKKyAg
ICBtX21lZGlhRWxlbWVudC0+c2V0U2VsZWN0ZWRUZXh0VHJhY2sodGV4dFRyYWNrKTsKK30KKwor
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6dXBkYXRlTGVnaWJsZU9w
dGlvbnMoKQoreworICAgIFRleHRUcmFja0xpc3QqIHRyYWNrTGlzdCA9IG1fbWVkaWFFbGVtZW50
LT50ZXh0VHJhY2tzKCk7CisgICAgaWYgKCF0cmFja0xpc3QgfHwgIW1fbWVkaWFFbGVtZW50LT5k
b2N1bWVudCgpLnBhZ2UoKSB8fCAhbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCkp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBXVEY6OkF0b21pY1N0cmluZyBkaXNwbGF5TW9k
ZSA9IG1fbWVkaWFFbGVtZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgpLT5jYXB0aW9uRGlzcGxheU1v
ZGUoKTsKKyAgICBUZXh0VHJhY2sqIG9mZkl0ZW0gPSBtX21lZGlhRWxlbWVudC0+bWVkaWFDb250
cm9sc0hvc3QoKS0+Y2FwdGlvbk1lbnVPZmZJdGVtKCk7CisgICAgVGV4dFRyYWNrKiBhdXRvbWF0
aWNJdGVtID0gbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCktPmNhcHRpb25NZW51
QXV0b21hdGljSXRlbSgpOworICAgIENhcHRpb25Vc2VyUHJlZmVyZW5jZXMmIGNhcHRpb25QcmVm
ZXJlbmNlcyA9ICptX21lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCktPmdyb3VwKCkuY2Fw
dGlvblByZWZlcmVuY2VzKCk7CisgICAgbV9sZWdpYmxlVHJhY2tzRm9yTWVudSA9IGNhcHRpb25Q
cmVmZXJlbmNlcy5zb3J0ZWRUcmFja0xpc3RGb3JNZW51KHRyYWNrTGlzdCk7CisgICAgVmVjdG9y
PFN0cmluZz4gdHJhY2tEaXNwbGF5TmFtZXM7CisgICAgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCA9
IDA7CisgICAgdWludDY0X3Qgb2ZmSW5kZXggPSAwOworICAgIGJvb2wgdHJhY2tNZW51SXRlbVNl
bGVjdGVkID0gZmFsc2U7CisgICAgCisgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8
IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnUuc2l6ZSgpOyBpbmRleCsrKSB7CisgICAgICAgIGF1dG8m
IHRyYWNrID0gbV9sZWdpYmxlVHJhY2tzRm9yTWVudVtpbmRleF07CisgICAgICAgIHRyYWNrRGlz
cGxheU5hbWVzLmFwcGVuZChjYXB0aW9uUHJlZmVyZW5jZXMuZGlzcGxheU5hbWVGb3JUcmFjayh0
cmFjay5nZXQoKSkpOworICAgICAgICAKKyAgICAgICAgaWYgKHRyYWNrID09IG9mZkl0ZW0pCisg
ICAgICAgICAgICBvZmZJbmRleCA9IGluZGV4OworICAgICAgICAKKyAgICAgICAgaWYgKHRyYWNr
ID09IGF1dG9tYXRpY0l0ZW0gJiYgZGlzcGxheU1vZGUgPT0gTWVkaWFDb250cm9sc0hvc3Q6OmF1
dG9tYXRpY0tleXdvcmQoKSkgeworICAgICAgICAgICAgc2VsZWN0ZWRJbmRleCA9IGluZGV4Owor
ICAgICAgICAgICAgdHJhY2tNZW51SXRlbVNlbGVjdGVkID0gdHJ1ZTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgaWYgKGRpc3BsYXlNb2RlICE9IE1lZGlhQ29udHJvbHNIb3N0OjphdXRv
bWF0aWNLZXl3b3JkKCkgJiYgdHJhY2stPm1vZGUoKSA9PSBUZXh0VHJhY2s6OnNob3dpbmdLZXl3
b3JkKCkpIHsKKyAgICAgICAgICAgIHNlbGVjdGVkSW5kZXggPSBpbmRleDsKKyAgICAgICAgICAg
IHRyYWNrTWVudUl0ZW1TZWxlY3RlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgCisg
ICAgaWYgKG9mZkluZGV4ICYmICF0cmFja01lbnVJdGVtU2VsZWN0ZWQgJiYgZGlzcGxheU1vZGUg
PT0gTWVkaWFDb250cm9sc0hvc3Q6OmZvcmNlZE9ubHlLZXl3b3JkKCkpIHsKKyAgICAgICAgc2Vs
ZWN0ZWRJbmRleCA9IG9mZkluZGV4OworICAgICAgICB0cmFja01lbnVJdGVtU2VsZWN0ZWQgPSB0
cnVlOworICAgIH0KKyAgICAKKyAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0TGVn
aWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyh0cmFja0Rpc3BsYXlOYW1lcywgc2VsZWN0ZWRJbmRl
eCk7Cit9CisKK2NvbnN0IFZlY3RvcjxBdG9taWNTdHJpbmc+JiBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbE1lZGlhRWxlbWVudDo6b2JzZXJ2ZWRFdmVudE5hbWVzKCkKK3sKKyAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8VmVjdG9yPEF0b21pY1N0cmluZz4+IHNFdmVudE5hbWVzOworCisgICAgaWYg
KCFzRXZlbnROYW1lcy5nZXQoKS5zaXplKCkpIHsKKyAgICAgICAgc0V2ZW50TmFtZXMuZ2V0KCku
YXBwZW5kKGV2ZW50TmFtZXMoKS5kdXJhdGlvbmNoYW5nZUV2ZW50KTsKKyAgICAgICAgc0V2ZW50
TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFtZXMoKS5wYXVzZUV2ZW50KTsKKyAgICAgICAgc0V2
ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFtZXMoKS5wbGF5RXZlbnQpOworICAgICAgICBz
RXZlbnROYW1lcy5nZXQoKS5hcHBlbmQoZXZlbnROYW1lcygpLnJhdGVjaGFuZ2VFdmVudCk7Cisg
ICAgICAgIHNFdmVudE5hbWVzLmdldCgpLmFwcGVuZChldmVudE5hbWVzKCkudGltZXVwZGF0ZUV2
ZW50KTsKKyAgICAgICAgc0V2ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFtZXMoKS5hZGR0
cmFja0V2ZW50KTsKKyAgICAgICAgc0V2ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFtZXMo
KS5yZW1vdmV0cmFja0V2ZW50KTsKKyAgICAgICAgc0V2ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2
ZW50TmFtZXMoKS53ZWJraXRjdXJyZW50cGxheWJhY2t0YXJnZXRpc3dpcmVsZXNzY2hhbmdlZEV2
ZW50KTsKKyAgICB9CisgICAgcmV0dXJuIHNFdmVudE5hbWVzLmdldCgpOworfQorCitjb25zdCBB
dG9taWNTdHJpbmcmIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpldmVudE5h
bWVBbGwoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHNFdmVu
dE5hbWVBbGwgPSAiYWxsRXZlbnRzIjsKKyAgICByZXR1cm4gc0V2ZW50TmFtZUFsbDsKK30KKwor
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tCSh3b3JraW5n
IGNvcHkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDcgQEAKICNp
bXBvcnQgImNvbmZpZy5oIgogCiAjaWYgUExBVEZPUk0oSU9TKQotCi0jaW1wb3J0ICJXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5oIgorI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCIKIAogI2ltcG9ydCAiRE9NRXZlbnRJbnRlcm5hbC5oIgog
I2ltcG9ydCAiTG9nZ2luZy5oIgpAQCAtMzgsNyArMzcsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9F
dmVudExpc3RlbmVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0V2ZW50TmFtZXMuaD4KICNpbXBvcnQg
PFdlYkNvcmUvSFRNTEVsZW1lbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvSFRNTE1lZGlhRWxlbWVu
dC5oPgorI2ltcG9ydCA8V2ViQ29yZS9IVE1MVmlkZW9FbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJD
b3JlL0hUTUxWaWRlb0VsZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGFnZS5oPgogI2ltcG9y
dCA8V2ViQ29yZS9QYWdlR3JvdXAuaD4KQEAgLTUzLDc3ICs1Miw3MyBAQAogCiB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIAotV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6Oldl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50KCkKK1dlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCgpCiAg
ICAgOiBFdmVudExpc3RlbmVyKEV2ZW50TGlzdGVuZXI6OkNQUEV2ZW50TGlzdGVuZXJUeXBlKQog
ICAgICwgbV9pc0xpc3RlbmluZ3tmYWxzZX0KIHsKIH0KIAotV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxNZWRpYUVsZW1lbnQ6On5XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudCgpCitX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6fldlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50KCkKIHsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1l
ZGlhRWxlbWVudDo6c2V0TWVkaWFFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVu
dCkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvRWxl
bWVudChIVE1MVmlkZW9FbGVtZW50KiB2aWRlb0VsZW1lbnQpCiB7Ci0gICAgaWYgKG1fbWVkaWFF
bGVtZW50ID09IG1lZGlhRWxlbWVudCkKKyAgICBpZiAobV92aWRlb0VsZW1lbnQgPT0gdmlkZW9F
bGVtZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9tZWRpYUVsZW1lbnQgJiYgbV9p
c0xpc3RlbmluZykgeworICAgIGlmIChtX3ZpZGVvRWxlbWVudCAmJiBtX2lzTGlzdGVuaW5nKSB7
CiAgICAgICAgIGZvciAoYXV0byBldmVudE5hbWUgOiBvYnNlcnZlZEV2ZW50TmFtZXMoKSkKLSAg
ICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwg
dGhpcywgZmFsc2UpOworICAgICAgICAgICAgbV92aWRlb0VsZW1lbnQtPnJlbW92ZUV2ZW50TGlz
dGVuZXIoZXZlbnROYW1lLCB0aGlzLCBmYWxzZSk7CiAgICAgfQogICAgIG1faXNMaXN0ZW5pbmcg
PSBmYWxzZTsKIAotICAgIG1fbWVkaWFFbGVtZW50ID0gbWVkaWFFbGVtZW50OworICAgIG1fdmlk
ZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50OwogCi0gICAgaWYgKCFtX21lZGlhRWxlbWVudCkKKyAg
ICBpZiAoIW1fdmlkZW9FbGVtZW50KQogICAgICAgICByZXR1cm47CiAKICAgICBmb3IgKGF1dG8g
ZXZlbnROYW1lIDogb2JzZXJ2ZWRFdmVudE5hbWVzKCkpCi0gICAgICAgIG1fbWVkaWFFbGVtZW50
LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgdGhpcywgZmFsc2UpOworICAgICAgICBtX3Zp
ZGVvRWxlbWVudC0+YWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIHRoaXMsIGZhbHNlKTsKICAg
ICBtX2lzTGlzdGVuaW5nID0gdHJ1ZTsKIAogICAgIHVwZGF0ZUZvckV2ZW50TmFtZShldmVudE5h
bWVBbGwoKSk7CiAKLSAgICBpZiAoaXNIVE1MVmlkZW9FbGVtZW50KG1fbWVkaWFFbGVtZW50Lmdl
dCgpKSkgewotICAgICAgICBIVE1MVmlkZW9FbGVtZW50ICp2aWRlb0VsZW1lbnQgPSB0b0hUTUxW
aWRlb0VsZW1lbnQobV9tZWRpYUVsZW1lbnQuZ2V0KCkpOwotICAgICAgICBtX3ZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZS0+c2V0VmlkZW9EaW1lbnNpb25zKHRydWUsIHZpZGVvRWxlbWVudC0+dmlk
ZW9XaWR0aCgpLCB2aWRlb0VsZW1lbnQtPnZpZGVvSGVpZ2h0KCkpOwotICAgIH0gZWxzZQotICAg
ICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0VmlkZW9EaW1lbnNpb25zKGZhbHNl
LCAwLCAwKTsKKyAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0VmlkZW9EaW1lbnNp
b25zKHRydWUsIHZpZGVvRWxlbWVudC0+dmlkZW9XaWR0aCgpLCB2aWRlb0VsZW1lbnQtPnZpZGVv
SGVpZ2h0KCkpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50
OjpoYW5kbGVFdmVudChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29yZTo6
RXZlbnQqIGV2ZW50KQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6
aGFuZGxlRXZlbnQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkNvcmU6OkV2
ZW50KiBldmVudCkKIHsKICAgICBMT0coTWVkaWEsICJoYW5kbGVFdmVudCAlcyIsIGV2ZW50LT50
eXBlKCkuY2hhcmFjdGVyczgoKSk7CiAgICAgdXBkYXRlRm9yRXZlbnROYW1lKGV2ZW50LT50eXBl
KCkpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50Ojp1cGRh
dGVGb3JFdmVudE5hbWUoY29uc3QgV1RGOjpBdG9taWNTdHJpbmcmIGV2ZW50TmFtZSkKK3ZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnVwZGF0ZUZvckV2ZW50TmFtZShj
b25zdCBXVEY6OkF0b21pY1N0cmluZyYgZXZlbnROYW1lKQogewotICAgIGlmICghbV9tZWRpYUVs
ZW1lbnQgfHwgIW1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKQorICAgIGlmICghbV92aWRlb0Vs
ZW1lbnQgfHwgIW1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKQogICAgICAgICByZXR1cm47CiAg
ICAgCiAgICAgYm9vbCBhbGwgPSBldmVudE5hbWUgPT0gZXZlbnROYW1lQWxsKCk7CiAKICAgICBp
ZiAoYWxsCiAgICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkuZHVyYXRpb25jaGFu
Z2VFdmVudCkgewotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0RHVyYXRp
b24obV9tZWRpYUVsZW1lbnQtPmR1cmF0aW9uKCkpOworICAgICAgICBtX3ZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZS0+c2V0RHVyYXRpb24obV92aWRlb0VsZW1lbnQtPmR1cmF0aW9uKCkpOwogICAg
ICAgICAvLyBUaGVzZSBpcyBubyBzdGFuZGFyZCBldmVudCBmb3IgbWluRmFzdFJldmVyc2VSYXRl
Q2hhbmdlOyBkdXJhdGlvbiBjaGFuZ2UgaXMgYSByZWFzb25hYmxlIHByb3h5IGZvciBpdC4KICAg
ICAgICAgLy8gSXQgaGFwcGVucyBldmVyeSB0aW1lIGEgbmV3IGl0ZW0gYmVjb21lcyByZWFkeSB0
byBwbGF5LgotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0Q2FuUGxheUZh
c3RSZXZlcnNlKG1fbWVkaWFFbGVtZW50LT5taW5GYXN0UmV2ZXJzZVJhdGUoKSA8IDAuMCk7Cisg
ICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRDYW5QbGF5RmFzdFJldmVyc2Uo
bV92aWRlb0VsZW1lbnQtPm1pbkZhc3RSZXZlcnNlUmF0ZSgpIDwgMC4wKTsKICAgICB9CiAKICAg
ICBpZiAoYWxsCiAgICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkucGF1c2VFdmVu
dAogICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnBsYXlFdmVudAogICAgICAg
ICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnJhdGVjaGFuZ2VFdmVudCkKLSAgICAgICAg
bV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UtPnNldFJhdGUoIW1fbWVkaWFFbGVtZW50LT5wYXVz
ZWQoKSwgbV9tZWRpYUVsZW1lbnQtPnBsYXliYWNrUmF0ZSgpKTsKKyAgICAgICAgbV92aWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2UtPnNldFJhdGUoIW1fdmlkZW9FbGVtZW50LT5wYXVzZWQoKSwgbV92
aWRlb0VsZW1lbnQtPnBsYXliYWNrUmF0ZSgpKTsKIAogICAgIGlmIChhbGwKICAgICAgICAgfHwg
ZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS50aW1ldXBkYXRlRXZlbnQpIHsKLSAgICAgICAgbV92
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UtPnNldEN1cnJlbnRUaW1lKG1fbWVkaWFFbGVtZW50LT5j
dXJyZW50VGltZSgpLCBbW05TUHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9dIHN5c3RlbVVwdGltZV0p
OworICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0Q3VycmVudFRpbWUobV92
aWRlb0VsZW1lbnQtPmN1cnJlbnRUaW1lKCksIFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10g
c3lzdGVtVXB0aW1lXSk7CiAgICAgICAgIC8vIEZJWE1FOiAxMzA3ODggLSBmaW5kIGEgYmV0dGVy
IGV2ZW50IHRvIHVwZGF0ZSBzZWVrYWJsZSByYW5nZXMgZnJvbS4KLSAgICAgICAgbV92aWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2UtPnNldFNlZWthYmxlUmFuZ2VzKCptX21lZGlhRWxlbWVudC0+c2Vl
a2FibGUoKSk7CisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRTZWVrYWJs
ZVJhbmdlcygqbV92aWRlb0VsZW1lbnQtPnNlZWthYmxlKCkpOwogICAgIH0KIAogICAgIGlmIChh
bGwKQEAgLTEzMywyNiArMTI4LDI2IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRp
YUVsZW1lbnQKIAogICAgIGlmIChhbGwKICAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFt
ZXMoKS53ZWJraXRjdXJyZW50cGxheWJhY2t0YXJnZXRpc3dpcmVsZXNzY2hhbmdlZEV2ZW50KSB7
Ci0gICAgICAgIGJvb2wgZW5hYmxlZCA9IG1fbWVkaWFFbGVtZW50LT5tZWRpYVNlc3Npb24oKS5j
dXJyZW50UGxheWJhY2tUYXJnZXRJc1dpcmVsZXNzKCptX21lZGlhRWxlbWVudCk7CisgICAgICAg
IGJvb2wgZW5hYmxlZCA9IG1fdmlkZW9FbGVtZW50LT5tZWRpYVNlc3Npb24oKS5jdXJyZW50UGxh
eWJhY2tUYXJnZXRJc1dpcmVsZXNzKCptX3ZpZGVvRWxlbWVudCk7CiAgICAgICAgIFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZTo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdGFyZ2V0VHlw
ZSA9IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZTo6VGFyZ2V0VHlwZU5vbmU7CiAgICAgICAg
IFN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lOwogCi0gICAgICAgIGlmIChtX21lZGlhRWxlbWVu
dC0+bWVkaWFDb250cm9sc0hvc3QoKSkgeworICAgICAgICBpZiAobV92aWRlb0VsZW1lbnQtPm1l
ZGlhQ29udHJvbHNIb3N0KCkpIHsKICAgICAgICAgICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJ
Q19MT0NBTChTdHJpbmcsIGFpcnBsYXksIChBU0NJSUxpdGVyYWwoImFpcnBsYXkiKSkpOwogICAg
ICAgICAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgdHZvdXQsIChB
U0NJSUxpdGVyYWwoInR2b3V0IikpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgU3RyaW5n
IHR5cGUgPSBtX21lZGlhRWxlbWVudC0+bWVkaWFDb250cm9sc0hvc3QoKS0+ZXh0ZXJuYWxEZXZp
Y2VUeXBlKCk7CisgICAgICAgICAgICBTdHJpbmcgdHlwZSA9IG1fdmlkZW9FbGVtZW50LT5tZWRp
YUNvbnRyb2xzSG9zdCgpLT5leHRlcm5hbERldmljZVR5cGUoKTsKICAgICAgICAgICAgIGlmICh0
eXBlID09IGFpcnBsYXkpCiAgICAgICAgICAgICAgICAgdGFyZ2V0VHlwZSA9IFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZTo6VGFyZ2V0VHlwZUFpclBsYXk7CiAgICAgICAgICAgICBlbHNlIGlm
ICh0eXBlID09IHR2b3V0KQogICAgICAgICAgICAgICAgIHRhcmdldFR5cGUgPSBXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2U6OlRhcmdldFR5cGVUVk91dDsKLSAgICAgICAgICAgIGxvY2FsaXpl
ZERldmljZU5hbWUgPSBtX21lZGlhRWxlbWVudC0+bWVkaWFDb250cm9sc0hvc3QoKS0+ZXh0ZXJu
YWxEZXZpY2VEaXNwbGF5TmFtZSgpOworICAgICAgICAgICAgbG9jYWxpemVkRGV2aWNlTmFtZSA9
IG1fdmlkZW9FbGVtZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgpLT5leHRlcm5hbERldmljZURpc3Bs
YXlOYW1lKCk7CiAgICAgICAgIH0KICAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2Ut
PnNldEV4dGVybmFsUGxheWJhY2soZW5hYmxlZCwgdGFyZ2V0VHlwZSwgbG9jYWxpemVkRGV2aWNl
TmFtZSk7CiAgICAgfQogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVt
ZW50OjpzZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihQbGF0Zm9ybUxheWVyKiB2aWRlb0xheWVyKQor
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9GdWxsc2Ny
ZWVuTGF5ZXIoUGxhdGZvcm1MYXllciogdmlkZW9MYXllcikKIHsKICAgICBpZiAobV92aWRlb0Z1
bGxzY3JlZW5MYXllciA9PSB2aWRlb0xheWVyKQogICAgICAgICByZXR1cm47CkBAIC0xNjAsMTM0
ICsxNTUsMTM1IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQKICAg
ICBtX3ZpZGVvRnVsbHNjcmVlbkxheWVyID0gdmlkZW9MYXllcjsKICAgICBbbV92aWRlb0Z1bGxz
Y3JlZW5MYXllciBzZXRGcmFtZTptX3ZpZGVvRnJhbWVdOwogICAgIAotICAgIF9fYmxvY2sgUmVm
UHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOwor
ICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBw
cm90ZWN0KHRoaXMpOwogICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICBpZiAobV9tZWRpYUVs
ZW1lbnQpCi0gICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+c2V0VmlkZW9GdWxsc2NyZWVuTGF5
ZXIobV92aWRlb0Z1bGxzY3JlZW5MYXllci5nZXQoKSk7CisgICAgICAgIGlmIChtX3ZpZGVvRWxl
bWVudCkKKyAgICAgICAgICAgIG1fdmlkZW9FbGVtZW50LT5zZXRWaWRlb0Z1bGxzY3JlZW5MYXll
cihtX3ZpZGVvRnVsbHNjcmVlbkxheWVyLmdldCgpKTsKICAgICAgICAgcHJvdGVjdC5jbGVhcigp
OwogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50
OjpwbGF5KCkgewotICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVk
aWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZp
ZGVvRWxlbWVudDo6cGxheSgpCit7CisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKF57
Ci0gICAgICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50
LT5wbGF5KCk7CisgICAgICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKKyAgICAgICAgICAgIG1fdmlk
ZW9FbGVtZW50LT5wbGF5KCk7CiAgICAgICAgIHByb3RlY3QuY2xlYXIoKTsKICAgICB9KTsKIH0K
IAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6cGF1c2UoKQordm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6cGF1c2UoKQogewotICAgIF9f
YmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50PiBwcm90ZWN0
KHRoaXMpOworICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9F
bGVtZW50PiBwcm90ZWN0KHRoaXMpOwogICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICBpZiAo
bV9tZWRpYUVsZW1lbnQpCi0gICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+cGF1c2UoKTsKKyAg
ICAgICAgaWYgKG1fdmlkZW9FbGVtZW50KQorICAgICAgICAgICAgbV92aWRlb0VsZW1lbnQtPnBh
dXNlKCk7CiAgICAgICAgIHByb3RlY3QuY2xlYXIoKTsKICAgICB9KTsKIH0KIAotdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6dG9nZ2xlUGxheVN0YXRlKCkKK3ZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnRvZ2dsZVBsYXlTdGF0ZSgpCiB7
Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+
IHByb3RlY3QodGhpcyk7CisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKF57Ci0gICAg
ICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT50b2dn
bGVQbGF5U3RhdGUoKTsKKyAgICAgICAgaWYgKG1fdmlkZW9FbGVtZW50KQorICAgICAgICAgICAg
bV92aWRlb0VsZW1lbnQtPnRvZ2dsZVBsYXlTdGF0ZSgpOwogICAgICAgICBwcm90ZWN0LmNsZWFy
KCk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1l
bnQ6OmJlZ2luU2NydWJiaW5nKCkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQ6OmJlZ2luU2NydWJiaW5nKCkKIHsKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKKyAgICBfX2Jsb2NrIFJl
ZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsK
ICAgICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAg
ICAgICAgbV9tZWRpYUVsZW1lbnQtPmJlZ2luU2NydWJiaW5nKCk7CisgICAgICAgIGlmIChtX3Zp
ZGVvRWxlbWVudCkKKyAgICAgICAgICAgIG1fdmlkZW9FbGVtZW50LT5iZWdpblNjcnViYmluZygp
OwogICAgICAgICBwcm90ZWN0LmNsZWFyKCk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OmVuZFNjcnViYmluZygpCit2b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjplbmRTY3J1YmJpbmcoKQogewotICAgIF9fYmxv
Y2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50PiBwcm90ZWN0KHRo
aXMpOworICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVt
ZW50PiBwcm90ZWN0KHRoaXMpOwogICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICBpZiAobV9t
ZWRpYUVsZW1lbnQpCi0gICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+ZW5kU2NydWJiaW5nKCk7
CisgICAgICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKKyAgICAgICAgICAgIG1fdmlkZW9FbGVtZW50
LT5lbmRTY3J1YmJpbmcoKTsKICAgICAgICAgcHJvdGVjdC5jbGVhcigpOwogICAgIH0pOwogfQog
Ci12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpzZWVrVG9UaW1lKGRv
dWJsZSB0aW1lKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2Vl
a1RvVGltZShkb3VibGUgdGltZSkKIHsKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKKyAgICBfX2Jsb2NrIFJlZlB0
cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKICAg
ICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICAg
ICAgbV9tZWRpYUVsZW1lbnQtPnNldEN1cnJlbnRUaW1lKHRpbWUpOworICAgICAgICBpZiAobV92
aWRlb0VsZW1lbnQpCisgICAgICAgICAgICBtX3ZpZGVvRWxlbWVudC0+c2V0Q3VycmVudFRpbWUo
dGltZSk7CiAgICAgICAgIHByb3RlY3QuY2xlYXIoKTsKICAgICB9KTsKIH0KIAotdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6ZmFzdFNlZWsoZG91YmxlIHRpbWUpCit2
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpmYXN0U2Vlayhkb3VibGUg
dGltZSkKIHsKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlh
RWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKKyAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKICAgICBXZWJUaHJlYWRSdW4o
XnsKLSAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICAgICAgbV9tZWRpYUVsZW1l
bnQtPmZhc3RTZWVrKHRpbWUpOworICAgICAgICBpZiAobV92aWRlb0VsZW1lbnQpCisgICAgICAg
ICAgICBtX3ZpZGVvRWxlbWVudC0+ZmFzdFNlZWsodGltZSk7CiAgICAgICAgIHByb3RlY3QuY2xl
YXIoKTsKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxl
bWVudDo6YmVnaW5TY2FubmluZ0ZvcndhcmQoKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bFZpZGVvRWxlbWVudDo6YmVnaW5TY2FubmluZ0ZvcndhcmQoKQogewotICAgIF9fYmxvY2sgUmVm
UHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOwor
ICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBw
cm90ZWN0KHRoaXMpOwogICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICBpZiAobV9tZWRpYUVs
ZW1lbnQpCi0gICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+YmVnaW5TY2FubmluZyhNZWRpYUNv
bnRyb2xsZXJJbnRlcmZhY2U6OkZvcndhcmQpOworICAgICAgICBpZiAobV92aWRlb0VsZW1lbnQp
CisgICAgICAgICAgICBtX3ZpZGVvRWxlbWVudC0+YmVnaW5TY2FubmluZyhNZWRpYUNvbnRyb2xs
ZXJJbnRlcmZhY2U6OkZvcndhcmQpOwogICAgICAgICBwcm90ZWN0LmNsZWFyKCk7CiAgICAgfSk7
CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OmJlZ2luU2Nh
bm5pbmdCYWNrd2FyZCgpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
OjpiZWdpblNjYW5uaW5nQmFja3dhcmQoKQogewotICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOworICAgIF9fYmxvY2sg
UmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBwcm90ZWN0KHRoaXMp
OwogICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICBpZiAobV9tZWRpYUVsZW1lbnQpCi0gICAg
ICAgICAgICBtX21lZGlhRWxlbWVudC0+YmVnaW5TY2FubmluZyhNZWRpYUNvbnRyb2xsZXJJbnRl
cmZhY2U6OkJhY2t3YXJkKTsKKyAgICAgICAgaWYgKG1fdmlkZW9FbGVtZW50KQorICAgICAgICAg
ICAgbV92aWRlb0VsZW1lbnQtPmJlZ2luU2Nhbm5pbmcoTWVkaWFDb250cm9sbGVySW50ZXJmYWNl
OjpCYWNrd2FyZCk7CiAgICAgICAgIHByb3RlY3QuY2xlYXIoKTsKICAgICB9KTsKIH0KIAotdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6ZW5kU2Nhbm5pbmcoKQordm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6ZW5kU2Nhbm5pbmcoKQogewot
ICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50PiBw
cm90ZWN0KHRoaXMpOworICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50PiBwcm90ZWN0KHRoaXMpOwogICAgIFdlYlRocmVhZFJ1biheewotICAgICAg
ICBpZiAobV9tZWRpYUVsZW1lbnQpCi0gICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+ZW5kU2Nh
bm5pbmcoKTsKKyAgICAgICAgaWYgKG1fdmlkZW9FbGVtZW50KQorICAgICAgICAgICAgbV92aWRl
b0VsZW1lbnQtPmVuZFNjYW5uaW5nKCk7CiAgICAgICAgIHByb3RlY3QuY2xlYXIoKTsKICAgICB9
KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6cmVxdWVz
dEV4aXRGdWxsc2NyZWVuKCkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQ6OnJlcXVlc3RFeGl0RnVsbHNjcmVlbigpCiB7Ci0gICAgaWYgKCFtX21lZGlhRWxlbWVudCkK
KyAgICBpZiAoIW1fdmlkZW9FbGVtZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBfX2Jsb2Nr
IFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlz
KTsKKyAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dD4gcHJvdGVjdCh0aGlzKTsKICAgICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgaWYgKG1fbWVk
aWFFbGVtZW50ICYmIG1fbWVkaWFFbGVtZW50LT5pc0Z1bGxzY3JlZW4oKSkKLSAgICAgICAgICAg
IG1fbWVkaWFFbGVtZW50LT5leGl0RnVsbHNjcmVlbigpOworICAgICAgICBpZiAobV92aWRlb0Vs
ZW1lbnQgJiYgbV92aWRlb0VsZW1lbnQtPmlzRnVsbHNjcmVlbigpKQorICAgICAgICAgICAgbV92
aWRlb0VsZW1lbnQtPmV4aXRGdWxsc2NyZWVuKCk7CiAgICAgICAgIHByb3RlY3QuY2xlYXIoKTsK
ICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6
c2V0VmlkZW9MYXllckZyYW1lKEZsb2F0UmVjdCByZWN0KQordm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9MYXllckZyYW1lKEZsb2F0UmVjdCByZWN0KQog
ewogICAgIG1fdmlkZW9GcmFtZSA9IHJlY3Q7CiAgICAgW21fdmlkZW9GdWxsc2NyZWVuTGF5ZXIg
c2V0RnJhbWU6Q0dSZWN0KHJlY3QpXTsKLSAgICBtX21lZGlhRWxlbWVudC0+c2V0VmlkZW9GdWxs
c2NyZWVuRnJhbWUocmVjdCk7CisgICAgbV92aWRlb0VsZW1lbnQtPnNldFZpZGVvRnVsbHNjcmVl
bkZyYW1lKHJlY3QpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVt
ZW50OjpzZXRWaWRlb0xheWVyR3Jhdml0eShXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9H
cmF2aXR5IGdyYXZpdHkpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
OjpzZXRWaWRlb0xheWVyR3Jhdml0eShXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2
aXR5IGdyYXZpdHkpCiB7CiAgICAgTWVkaWFQbGF5ZXI6OlZpZGVvR3Jhdml0eSB2aWRlb0dyYXZp
dHkgPSBNZWRpYVBsYXllcjo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0OwogICAgIGlmIChncmF2
aXR5ID09IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemUpCkBAIC0y
OTksMzQgKzI5NSwzNCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50
CiAgICAgZWxzZQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAKLSAgICBtX21l
ZGlhRWxlbWVudC0+c2V0VmlkZW9GdWxsc2NyZWVuR3Jhdml0eSh2aWRlb0dyYXZpdHkpOworICAg
IG1fdmlkZW9FbGVtZW50LT5zZXRWaWRlb0Z1bGxzY3JlZW5HcmF2aXR5KHZpZGVvR3Jhdml0eSk7
CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnNlbGVjdEF1
ZGlvTWVkaWFPcHRpb24odWludDY0X3QpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlk
ZW9FbGVtZW50OjpzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90KQogewogICAgIC8vIEZJ
WE1FOiAxMzEyMzYgSW1wbGVtZW50IGF1ZGlvIHRyYWNrIHNlbGVjdGlvbi4KIH0KIAotdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0
aW9uKHVpbnQ2NF90IGluZGV4KQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudDo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4KQogewogICAgIFRl
eHRUcmFjayogdGV4dFRyYWNrID0gbnVsbHB0cjsKICAgICAKICAgICBpZiAoaW5kZXggPCBtX2xl
Z2libGVUcmFja3NGb3JNZW51LnNpemUoKSkKICAgICAgICAgdGV4dFRyYWNrID0gbV9sZWdpYmxl
VHJhY2tzRm9yTWVudVtzdGF0aWNfY2FzdDxzaXplX3Q+KGluZGV4KV0uZ2V0KCk7CiAgICAgCi0g
ICAgbV9tZWRpYUVsZW1lbnQtPnNldFNlbGVjdGVkVGV4dFRyYWNrKHRleHRUcmFjayk7CisgICAg
bV92aWRlb0VsZW1lbnQtPnNldFNlbGVjdGVkVGV4dFRyYWNrKHRleHRUcmFjayk7CiB9CiAKLXZv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnVwZGF0ZUxlZ2libGVPcHRp
b25zKCkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnVwZGF0ZUxl
Z2libGVPcHRpb25zKCkKIHsKLSAgICBUZXh0VHJhY2tMaXN0KiB0cmFja0xpc3QgPSBtX21lZGlh
RWxlbWVudC0+dGV4dFRyYWNrcygpOwotICAgIGlmICghdHJhY2tMaXN0IHx8ICFtX21lZGlhRWxl
bWVudC0+ZG9jdW1lbnQoKS5wYWdlKCkgfHwgIW1fbWVkaWFFbGVtZW50LT5tZWRpYUNvbnRyb2xz
SG9zdCgpKQorICAgIFRleHRUcmFja0xpc3QqIHRyYWNrTGlzdCA9IG1fdmlkZW9FbGVtZW50LT50
ZXh0VHJhY2tzKCk7CisgICAgaWYgKCF0cmFja0xpc3QgfHwgIW1fdmlkZW9FbGVtZW50LT5kb2N1
bWVudCgpLnBhZ2UoKSB8fCAhbV92aWRlb0VsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCkpCiAg
ICAgICAgIHJldHVybjsKICAgICAKLSAgICBXVEY6OkF0b21pY1N0cmluZyBkaXNwbGF5TW9kZSA9
IG1fbWVkaWFFbGVtZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgpLT5jYXB0aW9uRGlzcGxheU1vZGUo
KTsKLSAgICBUZXh0VHJhY2sqIG9mZkl0ZW0gPSBtX21lZGlhRWxlbWVudC0+bWVkaWFDb250cm9s
c0hvc3QoKS0+Y2FwdGlvbk1lbnVPZmZJdGVtKCk7Ci0gICAgVGV4dFRyYWNrKiBhdXRvbWF0aWNJ
dGVtID0gbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCktPmNhcHRpb25NZW51QXV0
b21hdGljSXRlbSgpOwotICAgIENhcHRpb25Vc2VyUHJlZmVyZW5jZXMmIGNhcHRpb25QcmVmZXJl
bmNlcyA9ICptX21lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCktPmdyb3VwKCkuY2FwdGlv
blByZWZlcmVuY2VzKCk7CisgICAgV1RGOjpBdG9taWNTdHJpbmcgZGlzcGxheU1vZGUgPSBtX3Zp
ZGVvRWxlbWVudC0+bWVkaWFDb250cm9sc0hvc3QoKS0+Y2FwdGlvbkRpc3BsYXlNb2RlKCk7Cisg
ICAgVGV4dFRyYWNrKiBvZmZJdGVtID0gbV92aWRlb0VsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0
KCktPmNhcHRpb25NZW51T2ZmSXRlbSgpOworICAgIFRleHRUcmFjayogYXV0b21hdGljSXRlbSA9
IG1fdmlkZW9FbGVtZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgpLT5jYXB0aW9uTWVudUF1dG9tYXRp
Y0l0ZW0oKTsKKyAgICBDYXB0aW9uVXNlclByZWZlcmVuY2VzJiBjYXB0aW9uUHJlZmVyZW5jZXMg
PSAqbV92aWRlb0VsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpLT5ncm91cCgpLmNhcHRpb25QcmVm
ZXJlbmNlcygpOwogICAgIG1fbGVnaWJsZVRyYWNrc0Zvck1lbnUgPSBjYXB0aW9uUHJlZmVyZW5j
ZXMuc29ydGVkVHJhY2tMaXN0Rm9yTWVudSh0cmFja0xpc3QpOwogICAgIFZlY3RvcjxTdHJpbmc+
IHRyYWNrRGlzcGxheU5hbWVzOwogICAgIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXggPSAwOwpAQCAt
MzU5LDcgKzM1NSw3IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQK
ICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9u
T3B0aW9ucyh0cmFja0Rpc3BsYXlOYW1lcywgc2VsZWN0ZWRJbmRleCk7CiB9CiAKLWNvbnN0IFZl
Y3RvcjxBdG9taWNTdHJpbmc+JiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6
b2JzZXJ2ZWRFdmVudE5hbWVzKCkKK2NvbnN0IFZlY3RvcjxBdG9taWNTdHJpbmc+JiBXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6b2JzZXJ2ZWRFdmVudE5hbWVzKCkKIHsKICAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VmVjdG9yPEF0b21pY1N0cmluZz4+IHNFdmVudE5hbWVz
OwogCkBAIC0zNzYsNyArMzcyLDcgQEAgY29uc3QgVmVjdG9yPEF0b21pY1N0cmluZz4mIFdlYlZp
ZGVvRnVsbAogICAgIHJldHVybiBzRXZlbnROYW1lcy5nZXQoKTsKIH0KIAotY29uc3QgQXRvbWlj
U3RyaW5nJiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6ZXZlbnROYW1lQWxs
KCkKK2NvbnN0IEF0b21pY1N0cmluZyYgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQ6OmV2ZW50TmFtZUFsbCgpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0
cmluZz4gc0V2ZW50TmFtZUFsbCA9ICJhbGxFdmVudHMiOwogICAgIHJldHVybiBzRXZlbnROYW1l
QWxsOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5oCShyZXZpc2lvbiAxNzMxNjEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICBjbGFzcyBEaXNwbGF5U2xlZXBEaXNhYmxlcjsKLSAgICBjbGFzcyBIVE1MTWVkaWFFbGVtZW50
OworICAgIGNsYXNzIEhUTUxWaWRlb0VsZW1lbnQ7CiB9CiAKIEBwcm90b2NvbCBXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyRGVsZWdhdGU7CkBAIC00Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogQGludGVyZmFjZSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIDogTlNX
aW5kb3dDb250cm9sbGVyIHsKIEBwcml2YXRlCi0gICAgUmVmUHRyPFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnQ+IF9tZWRpYUVsZW1lbnQ7IC8vIChyZXRhaW4pCisgICAgUmVmUHRyPFdlYkNvcmU6
OkhUTUxWaWRlb0VsZW1lbnQ+IF92aWRlb0VsZW1lbnQ7IC8vIChyZXRhaW4pCiAgICAgaWQgPFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJEZWxlZ2F0ZT4gX2RlbGVnYXRlOyAvLyAoYXNzaWdu
KQogCiAgICAgTlNXaW5kb3cgKl9iYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdzsgLy8gKHJldGFp
bikKQEAgLTYwLDggKzYwLDggQEAgQGludGVyZmFjZSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyIAogLSAodm9pZClzZXREZWxlZ2F0ZTooaWQgPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJEZWxlZ2F0ZT4pZGVsZWdhdGU7CiAKIC0gKHZvaWQpc2V0dXBWaWRlb092ZXJsYXk6KENBTGF5
ZXIqKWxheWVyOwotLSAodm9pZClzZXRNZWRpYUVsZW1lbnQ6KFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnQqKW1lZGlhRWxlbWVudDsKLS0gKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqKW1lZGlh
RWxlbWVudDsKKy0gKHZvaWQpc2V0VmlkZW9FbGVtZW50OihXZWJDb3JlOjpIVE1MVmlkZW9FbGVt
ZW50Kil2aWRlb0VsZW1lbnQ7CistIChXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50Kil2aWRlb0Vs
ZW1lbnQ7CiAKIC0gKHZvaWQpZW50ZXJGdWxsc2NyZWVuOihOU1NjcmVlbiAqKXNjcmVlbjsKIC0g
KHZvaWQpZXhpdEZ1bGxzY3JlZW47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbQkocmV2aXNp
b24gMTczMTYxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAKICNpbXBv
cnQgPENhcmJvbi9DYXJib24uaD4KICNpbXBvcnQgPFFUS2l0L1FUS2l0Lmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL0Rpc3BsYXlTbGVlcERpc2FibGVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0hUTUxNZWRp
YUVsZW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSFRNTFZpZGVvRWxlbWVudC5oPgogI2ltcG9y
dCA8V2ViQ29yZS9Tb2Z0TGlua2luZy5oPgogI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+CiAKQEAg
LTExNCwyMSArMTE0LDIxIEBAIC0gKHZvaWQpd2luZG93RGlkTG9hZAogICAgIFtbTlNOb3RpZmlj
YXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2Vs
ZWN0b3IoYXBwbGljYXRpb25EaWRDaGFuZ2VTY3JlZW5QYXJhbWV0ZXJzOikgbmFtZTpOU0FwcGxp
Y2F0aW9uRGlkQ2hhbmdlU2NyZWVuUGFyYW1ldGVyc05vdGlmaWNhdGlvbiBvYmplY3Q6TlNBcHBd
OwogfQogCi0tIChIVE1MTWVkaWFFbGVtZW50KiltZWRpYUVsZW1lbnQKKy0gKEhUTUxWaWRlb0Vs
ZW1lbnQqKXZpZGVvRWxlbWVudAogewotICAgIHJldHVybiBfbWVkaWFFbGVtZW50LmdldCgpOwor
ICAgIHJldHVybiBfdmlkZW9FbGVtZW50LmdldCgpOwogfQogCi0tICh2b2lkKXNldE1lZGlhRWxl
bWVudDooSFRNTE1lZGlhRWxlbWVudCopbWVkaWFFbGVtZW50CistICh2b2lkKXNldFZpZGVvRWxl
bWVudDooSFRNTFZpZGVvRWxlbWVudCopdmlkZW9FbGVtZW50CiB7Ci0gICAgX21lZGlhRWxlbWVu
dCA9IG1lZGlhRWxlbWVudDsKKyAgICBfdmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50OwogCi0g
ICAgaWYgKCFfbWVkaWFFbGVtZW50KQorICAgIGlmICghX3ZpZGVvRWxlbWVudCkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgaWYgKFtzZWxmIGlzV2luZG93TG9hZGVkXSkgewotICAgICAgICBpZiAo
X21lZGlhRWxlbWVudC0+cGxhdGZvcm1NZWRpYSgpLnR5cGUgPT0gUGxhdGZvcm1NZWRpYTo6UVRN
b3ZpZVR5cGUpIHsKLSAgICAgICAgICAgIFFUTW92aWUgKm1vdmllID0gX21lZGlhRWxlbWVudC0+
cGxhdGZvcm1NZWRpYSgpLm1lZGlhLnF0TW92aWU7CisgICAgICAgIGlmIChfdmlkZW9FbGVtZW50
LT5wbGF0Zm9ybU1lZGlhKCkudHlwZSA9PSBQbGF0Zm9ybU1lZGlhOjpRVE1vdmllVHlwZSkgewor
ICAgICAgICAgICAgUVRNb3ZpZSAqbW92aWUgPSBfdmlkZW9FbGVtZW50LT5wbGF0Zm9ybU1lZGlh
KCkubWVkaWEucXRNb3ZpZTsKICAgICAgICAgICAgIFFUTW92aWVMYXllciAqbGF5ZXIgPSBbW2dl
dFFUTW92aWVMYXllckNsYXNzKCkgYWxsb2NdIGluaXRdOwogICAgICAgICAgICAgW2xheWVyIHNl
dE1vdmllOm1vdmllXTsKICAgICAgICAgICAgIFtzZWxmIHNldHVwVmlkZW9PdmVybGF5OmxheWVy
XTsKQEAgLTEzOCw4ICsxMzgsOCBAQCAtICh2b2lkKXNldE1lZGlhRWxlbWVudDooSFRNTE1lZGlh
RWxlbWVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuYW1lOlFUTW92aWVSYXRlRGlkQ2hhbmdlTm90aWZpY2F0aW9uCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0Om1vdmll
XTsKIAotICAgICAgICB9IGVsc2UgaWYgKF9tZWRpYUVsZW1lbnQtPnBsYXRmb3JtTWVkaWEoKS50
eXBlID09IFBsYXRmb3JtTWVkaWE6OkFWRm91bmRhdGlvbk1lZGlhUGxheWVyVHlwZSkgewotICAg
ICAgICAgICAgQVZQbGF5ZXIgKnBsYXllciA9IF9tZWRpYUVsZW1lbnQtPnBsYXRmb3JtTWVkaWEo
KS5tZWRpYS5hdmZNZWRpYVBsYXllcjsKKyAgICAgICAgfSBlbHNlIGlmIChfdmlkZW9FbGVtZW50
LT5wbGF0Zm9ybU1lZGlhKCkudHlwZSA9PSBQbGF0Zm9ybU1lZGlhOjpBVkZvdW5kYXRpb25NZWRp
YVBsYXllclR5cGUpIHsKKyAgICAgICAgICAgIEFWUGxheWVyICpwbGF5ZXIgPSBfdmlkZW9FbGVt
ZW50LT5wbGF0Zm9ybU1lZGlhKCkubWVkaWEuYXZmTWVkaWFQbGF5ZXI7CiAgICAgICAgICAgICBB
VlBsYXllckxheWVyICpsYXllciA9IFtbZ2V0QVZQbGF5ZXJMYXllckNsYXNzKCkgYWxsb2NdIGlu
aXRdOwogICAgICAgICAgICAgW3NlbGYgc2V0dXBWaWRlb092ZXJsYXk6bGF5ZXJdOwogICAgICAg
ICAgICAgW2xheWVyIHNldFBsYXllcjpwbGF5ZXJdOwpAQCAtMjA3LDkgKzIwNyw5IEBAIC0gKHZv
aWQpd2luZG93RGlkRW50ZXJGdWxsc2NyZWVuCiAgICAgW19odWRDb250cm9sbGVyIGZhZGVXaW5k
b3dJbl07CiB9CiAKLS0gKE5TUmVjdCltZWRpYUVsZW1lbnRSZWN0CistIChOU1JlY3QpdmlkZW9F
bGVtZW50UmVjdAogewotICAgIHJldHVybiBfbWVkaWFFbGVtZW50LT5zY3JlZW5SZWN0KCk7Cisg
ICAgcmV0dXJuIF92aWRlb0VsZW1lbnQtPnNjcmVlblJlY3QoKTsKIH0KIAogLSAodm9pZClhcHBs
aWNhdGlvbkRpZFJlc2lnbkFjdGl2ZTooTlNOb3RpZmljYXRpb24qKW5vdGlmaWNhdGlvbgpAQCAt
Mjc2LDcgKzI3Niw3IEBAIC0gKHZvaWQpZW50ZXJGdWxsc2NyZWVuOihOU1NjcmVlbiAqKXNjcmUK
ICAgICBpZiAoIXNjcmVlbikKICAgICAgICAgc2NyZWVuID0gW05TU2NyZWVuIG1haW5TY3JlZW5d
OwogCi0gICAgTlNSZWN0IGZyYW1lID0gW3NlbGYgbWVkaWFFbGVtZW50UmVjdF07CisgICAgTlNS
ZWN0IGZyYW1lID0gW3NlbGYgdmlkZW9FbGVtZW50UmVjdF07CiAgICAgTlNSZWN0IGVuZEZyYW1l
ID0gW3NjcmVlbiBmcmFtZV07CiAgICAgY29uc3RyYWluRnJhbWVUb1JhdGlvT2ZGcmFtZSgmZW5k
RnJhbWUsICZmcmFtZSk7CiAKQEAgLTMwMyw3ICszMDMsNyBAQCAtICh2b2lkKWV4aXRGdWxsc2Ny
ZWVuCiAgICAgX2lzRW5kaW5nRnVsbHNjcmVlbiA9IFlFUzsKICAgICBbX2h1ZENvbnRyb2xsZXIg
Y2xvc2VXaW5kb3ddOwogCi0gICAgTlNSZWN0IGVuZEZyYW1lID0gW3NlbGYgbWVkaWFFbGVtZW50
UmVjdF07CisgICAgTlNSZWN0IGVuZEZyYW1lID0gW3NlbGYgdmlkZW9FbGVtZW50UmVjdF07CiAK
ICAgICBbc2VsZiBzZXR1cEZhZGVBbmltYXRpb25JZk5lZWRlZEFuZEZhZGVJbjpOT107CiAgICAg
aWYgKF9mb3JjZURpc2FibGVBbmltYXRpb24pIHsKQEAgLTM1OCw4ICszNTgsOCBAQCAtICh2b2lk
KXVwZGF0ZU1lbnVBbmREb2NrRm9yRnVsbHNjcmVlbgogLSAodm9pZCl1cGRhdGVQb3dlckFzc2Vy
dGlvbnMKIHsKICAgICBmbG9hdCByYXRlID0gMDsKLSAgICBpZiAoX21lZGlhRWxlbWVudCAmJiBf
bWVkaWFFbGVtZW50LT5wbGF0Zm9ybU1lZGlhKCkudHlwZSA9PSBQbGF0Zm9ybU1lZGlhOjpRVE1v
dmllVHlwZSkKLSAgICAgICAgcmF0ZSA9IFtfbWVkaWFFbGVtZW50LT5wbGF0Zm9ybU1lZGlhKCku
bWVkaWEucXRNb3ZpZSByYXRlXTsKKyAgICBpZiAoX3ZpZGVvRWxlbWVudCAmJiBfdmlkZW9FbGVt
ZW50LT5wbGF0Zm9ybU1lZGlhKCkudHlwZSA9PSBQbGF0Zm9ybU1lZGlhOjpRVE1vdmllVHlwZSkK
KyAgICAgICAgcmF0ZSA9IFtfdmlkZW9FbGVtZW50LT5wbGF0Zm9ybU1lZGlhKCkubWVkaWEucXRN
b3ZpZSByYXRlXTsKICAgICAKICAgICBpZiAocmF0ZSAmJiAhX2lzRW5kaW5nRnVsbHNjcmVlbikg
ewogICAgICAgICBpZiAoIV9kaXNwbGF5U2xlZXBEaXNhYmxlcikKQEAgLTM3Myw4ICszNzMsOCBA
QCAtICh2b2lkKXVwZGF0ZVBvd2VyQXNzZXJ0aW9ucwogCiAtICh2b2lkKV9yZXF1ZXN0RXhpdAog
ewotICAgIGlmIChfbWVkaWFFbGVtZW50KQotICAgICAgICBfbWVkaWFFbGVtZW50LT5leGl0RnVs
bHNjcmVlbigpOworICAgIGlmIChfdmlkZW9FbGVtZW50KQorICAgICAgICBfdmlkZW9FbGVtZW50
LT5leGl0RnVsbHNjcmVlbigpOwogICAgIF9mb3JjZURpc2FibGVBbmltYXRpb24gPSBOTzsKIH0K
IApJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTczMTY3KQorKysgU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTQtMDktMDIgIE1hY2ll
aiBTdGFjaG93aWFrICA8bWpzQGFwcGxlLmNvbT4KKworICAgICAgICBDbGVhbiB1cCBuYW1pbmcg
Zm9yIGFuZCBzbGlnaHRseSByZWZhY3RvciBsZWdhY3kgdmlkZW8gZnVsbHNjcmVlbiBzdXBwb3J0
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY0NDYK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBLZXkgY2hh
bmdlczoKKyAgICAgICAgc3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZShOb2RlKikgLS0+IHN1cHBv
cnRzVmlkZW9GdWxsc2NyZWVuKCkKKyAgICAgICAgZW50ZXJGdWxsc2NyZWVuRm9yTm9kZShOb2Rl
KikgLS0+IGVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KEhUTUxWaWRlb0VsZW1l
bnQqKQorICAgICAgICBleGl0RnVsbHNjcmVlbkZvck5vZGUoTm9kZSopIC0tPiBleGl0VmlkZW9G
dWxsc2NyZWVuKCkKKyAgICAgICAgCisgICAgICAgIFRoZSBvbGQgdmVyc2lvbnMgaGFkIHVubmVj
ZXNzYXJ5IHBhcmFtZXRlcnMsIGRpZCBub3QgY2xlYXJseSBkaXN0aW5ndWlzaCB0aGVpciBwdXJw
b3NlCisgICAgICAgIGZyb20gZW50ZXJGdWxsc2NyZWVuRm9yRWxlbWVudCBhbmQgZnJpZW5kcywg
YW5kIHdyb25nbHkgY2xhaW1lZCBnZW5lcmFsaXR5IHRvIGFsbCBOb2Rlcy4KKyAgICAgICAgQWxz
byBjaGFuZ2VkIG1hbnkgb3RoZXIgcGxhY2VzIHRvIHVzZSBIVE1MVmlkZW9FbGVtZW50KiBpbnN0
ZWFkIG9mIE5vZGUqIG9yIAorICAgICAgICBIVE1MTWVkaWFFbGVtZW50KiB3aGVuIHRoZXkgd2Vy
ZSBpbiBmYWN0IG9ubHkgdXNlZCBmb3IgdmlkZW8gZWxlbWVudHMgYW5kIHdvdWxkIG9ubHkKKyAg
ICAgICAgd29yayBmb3Igc3VjaC4KKworICAgICAgICBMZWdhY3kgdmlkZW8gZnVsbHNjcmVlbiBp
biBXZWJLaXQyIGlzIG9ubHkgc3VwcG9ydGVkIG9uIGlPUyAoZm9yIG90aGVyIHBvcnRzIHRoYXQg
c3VwcG9ydAorICAgICAgICBpdCwgaXQncyBXSzEgb25seSkuCisgICAgICAgIAorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjpzdXBwb3J0c1ZpZGVvRnVsbHNjcmVlbik6IEFkanVz
dCBmb3IgcmVuYW1lcyBhcworICAgICAgICBtZW50aW9uZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YkNocm9tZUNsaWVudDo6ZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQpOiBkaXR0
bworICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OmV4aXRWaWRlb0Z1bGxzY3JlZW4p
OiBkaXR0bworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xp
ZW50Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
ci5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIu
bW06CisgICAgICAgIChXZWJLaXQ6OmNsaWVudFJlY3RGb3JFbGVtZW50KTogTm8gbmVlZCB0byBi
ZSBnZW5lcmljIHRvIG5vZGUuCisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6OnN1cHBvcnRzVmlkZW9GdWxsc2NyZWVuKTogQWRqdXN0IGZvciB0aGUKKyAgICAgICAg
bWFpbiByZWZhY3RvcmluZy4gQWxzbyBjaGFuZ2UgbV9ub2RlIHRvIG1fdmlkZW9FbGVtZW50IHdp
dGggYXBwcm9wcmlhdGUgdHlwZSBjaGFuZ2UuCisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI6OmVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KTogZGl0
dG8KKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZXhpdFZpZGVv
RnVsbHNjcmVlbik6IGRpdHRvCisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6OmRpZEVudGVyRnVsbHNjcmVlbik6IGRpdHRvIAorICAgICAgICAoV2ViS2l0OjpXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRFeGl0RnVsbHNjcmVlbik6IGRpdHRvCisgICAgICAg
IChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZENsZWFudXBGdWxsc2NyZWVu
KTogZGl0dG8KKwogMjAxNC0wOS0wMSAgVGltb3RoeSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBh
cHBsZS5jb20+CiAKICAgICAgICAgRml4IHRoZSBpT1MgYnVpbGQuCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQuY3BwCShyZXZpc2lvbiAxNzMxNjEpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTkwMiwxOSArOTAyLDE5IEBAIFBhc3NSZWZQdHI8U2Nyb2xsaW5nQ29vcmRpbmF0b3I+IFdlYkNo
cm8KICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TKQotYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnN1
cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUoY29uc3QgV2ViQ29yZTo6Tm9kZSogbm9kZSkKK2Jvb2wg
V2ViQ2hyb21lQ2xpZW50OjpzdXBwb3J0c1ZpZGVvRnVsbHNjcmVlbigpCiB7Ci0gICAgcmV0dXJu
IG1fcGFnZS0+dmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpLT5zdXBwb3J0c0Z1bGxzY3JlZW4obm9k
ZSk7CisgICAgcmV0dXJuIG1fcGFnZS0+dmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpLT5zdXBwb3J0
c1ZpZGVvRnVsbHNjcmVlbigpOwogfQogCi12b2lkIFdlYkNocm9tZUNsaWVudDo6ZW50ZXJGdWxs
c2NyZWVuRm9yTm9kZShXZWJDb3JlOjpOb2RlKiBub2RlKQordm9pZCBXZWJDaHJvbWVDbGllbnQ6
OmVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KFdlYkNvcmU6OkhUTUxWaWRlb0Vs
ZW1lbnQqIHZpZGVvRWxlbWVudCkKIHsKLSAgICBtX3BhZ2UtPnZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXIoKS0+ZW50ZXJGdWxsc2NyZWVuRm9yTm9kZShub2RlKTsKKyAgICBtX3BhZ2UtPnZpZGVvRnVs
bHNjcmVlbk1hbmFnZXIoKS0+ZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQodmlk
ZW9FbGVtZW50KTsKIH0KIAotdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmV4aXRGdWxsc2NyZWVuRm9y
Tm9kZShXZWJDb3JlOjpOb2RlKiBub2RlKQordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmV4aXRWaWRl
b0Z1bGxzY3JlZW4oKQogewotICAgIG1fcGFnZS0+dmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpLT5l
eGl0RnVsbHNjcmVlbkZvck5vZGUobm9kZSk7CisgICAgbV9wYWdlLT52aWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyKCktPmV4aXRWaWRlb0Z1bGxzY3JlZW4oKTsKIH0KICNlbmRpZgogICAgIApJbmRleDog
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5oCShyZXZpc2lvbiAxNzMxNjEpCisrKyBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNTMsOSArMjUzLDkgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9T
KQotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Z1bGxzY3JlZW5Gb3JOb2RlKGNvbnN0IFdlYkNv
cmU6Ok5vZGUqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZW50ZXJGdWxsc2NyZWVuRm9yTm9kZShXZWJD
b3JlOjpOb2RlKik7Ci0gICAgdmlydHVhbCB2b2lkIGV4aXRGdWxsc2NyZWVuRm9yTm9kZShXZWJD
b3JlOjpOb2RlKik7CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzVmlkZW9GdWxsc2NyZWVuKCk7
CisgICAgdmlydHVhbCB2b2lkIGVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KFdl
YkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZXhpdFZpZGVvRnVs
bHNjcmVlbigpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlci5oCShyZXZpc2lvbiAxNzMxNjEpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0V2ZW50TGlzdGVuZXIuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1BsYXRmb3JtQ0FMYXllci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9XZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIApAQCAtNTAsMTYgKzUwLDE2IEBAIG5hbWVzcGFjZSBX
ZWJLaXQgewogY2xhc3MgTGF5ZXJIb3N0aW5nQ29udGV4dDsKIGNsYXNzIFdlYlBhZ2U7CiAKLWNs
YXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIgOiBwdWJsaWMgV2ViQ29yZTo6V2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQsIHB1YmxpYyBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2UsIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworY2xhc3MgV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlciA6IHB1YmxpYyBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudCwgcHVibGljIFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZSwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CiBwdWJsaWM6CiAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4gY3JlYXRlKFBhc3NSZWZQ
dHI8V2ViUGFnZT4pOwogICAgIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoKTsK
ICAgICAKICAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiosIElQQzo6
TWVzc2FnZURlY29kZXImKTsKICAgICAKLSAgICBib29sIHN1cHBvcnRzRnVsbHNjcmVlbihjb25z
dCBXZWJDb3JlOjpOb2RlKikgY29uc3Q7Ci0gICAgdm9pZCBlbnRlckZ1bGxzY3JlZW5Gb3JOb2Rl
KFdlYkNvcmU6Ok5vZGUqKTsKLSAgICB2b2lkIGV4aXRGdWxsc2NyZWVuRm9yTm9kZShXZWJDb3Jl
OjpOb2RlKik7CisgICAgYm9vbCBzdXBwb3J0c1ZpZGVvRnVsbHNjcmVlbigpIGNvbnN0OworICAg
IHZvaWQgZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoV2ViQ29yZTo6SFRNTFZp
ZGVvRWxlbWVudCopOworICAgIHZvaWQgZXhpdFZpZGVvRnVsbHNjcmVlbigpOwogICAgIAogcHJv
dGVjdGVkOgogICAgIGV4cGxpY2l0IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoUGFzc1JlZlB0
cjxXZWJQYWdlPik7CkBAIC04NSw3ICs4NSw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZv
aWQgc2V0VmlkZW9MYXllckdyYXZpdHlFbnVtKHVuc2lnbmVkKTsKICAgICAKICAgICBXZWJQYWdl
KiBtX3BhZ2U7Ci0gICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IG1fbm9kZTsKKyAgICBSZWZQdHI8
V2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudD4gbV92aWRlb0VsZW1lbnQ7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPExheWVySG9zdGluZ0NvbnRleHQ+IG1fbGF5ZXJIb3N0aW5nQ29udGV4dDsKICAgICAK
ICAgICBib29sIG1faXNBbmltYXRpbmc7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0JKHJldmlz
aW9uIDE3MzE2MSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvaW9zL1dlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTUwLDEyICs1MCwxMiBAQCB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLXN0YXRpYyBJbnRS
ZWN0IGNsaWVudFJlY3RGb3JOb2RlKE5vZGUqIG5vZGUpCitzdGF0aWMgSW50UmVjdCBjbGllbnRS
ZWN0Rm9yRWxlbWVudChIVE1MRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBpZiAoIW5vZGUgfHwg
IW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICBpZiAoIWVsZW1lbnQpCiAgICAgICAgIHJldHVy
biBJbnRSZWN0KCk7CiAKLSAgICByZXR1cm4gdG9FbGVtZW50KG5vZGUpLT5jbGllbnRSZWN0KCk7
CisgICAgcmV0dXJuIGVsZW1lbnQtPmNsaWVudFJlY3QoKTsKIH0KIAogUGFzc1JlZlB0cjxXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyPiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpjcmVhdGUo
UGFzc1JlZlB0cjxXZWJQYWdlPiBwYWdlKQpAQCAtNzgsMzggKzc4LDM4IEBAIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI6On5XZWJWaWRlb0Z1bGwKICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5y
ZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6
Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLWJvb2wgV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c3VwcG9ydHNGdWxsc2NyZWVuKGNvbnN0IE5vZGUqIG5v
ZGUpIGNvbnN0Citib29sIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnN1cHBvcnRzVmlkZW9G
dWxsc2NyZWVuKCkgY29uc3QKIHsKLSAgICByZXR1cm4gU2V0dGluZ3M6OmF2S2l0RW5hYmxlZCgp
ICYmIGlzSFRNTFZpZGVvRWxlbWVudChub2RlKTsKKyAgICByZXR1cm4gU2V0dGluZ3M6OmF2S2l0
RW5hYmxlZCgpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVudGVyRnVs
bHNjcmVlbkZvck5vZGUoTm9kZSogbm9kZSkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
cjo6ZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoSFRNTFZpZGVvRWxlbWVudCog
dmlkZW9FbGVtZW50KQogewotICAgIEFTU0VSVChub2RlKTsKLSAgICBtX25vZGUgPSBub2RlOwor
ICAgIG1fdmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50OworCiAgICAgbV90YXJnZXRJc0Z1bGxz
Y3JlZW4gPSB0cnVlOwogCiAgICAgaWYgKG1faXNBbmltYXRpbmcpCiAgICAgICAgIHJldHVybjsK
IAogICAgIG1faXNBbmltYXRpbmcgPSB0cnVlOwotICAgIHNldE1lZGlhRWxlbWVudCh0b0hUTUxN
ZWRpYUVsZW1lbnQobm9kZSkpOworICAgIHNldFZpZGVvRWxlbWVudCh2aWRlb0VsZW1lbnQpOwog
CiAgICAgbV9sYXllckhvc3RpbmdDb250ZXh0ID0gTGF5ZXJIb3N0aW5nQ29udGV4dDo6Y3JlYXRl
Rm9yRXh0ZXJuYWxIb3N0aW5nUHJvY2VzcygpOwogICAgIAotICAgIG1fcGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpTZXR1cEZ1bGxzY3JlZW5XaXRo
SUQobV9sYXllckhvc3RpbmdDb250ZXh0LT5jb250ZXh0SUQoKSwgY2xpZW50UmVjdEZvck5vZGUo
bm9kZSkpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6U2V0dXBGdWxsc2NyZWVuV2l0aElEKG1fbGF5
ZXJIb3N0aW5nQ29udGV4dC0+Y29udGV4dElEKCksIGNsaWVudFJlY3RGb3JFbGVtZW50KHZpZGVv
RWxlbWVudCkpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyOjpleGl0RnVsbHNjcmVlbkZvck5vZGUoTm9kZSogbm9kZSkKK3ZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZXhpdFZpZGVvRnVsbHNjcmVlbigpCiB7Ci0gICAgbV9ub2Rl
LmNsZWFyKCk7CisgICAgUmVmUHRyPEhUTUxWaWRlb0VsZW1lbnQ+IHZpZGVvRWxlbWVudCA9IG1f
dmlkZW9FbGVtZW50LnJlbGVhc2UoKTsKICAgICBtX3RhcmdldElzRnVsbHNjcmVlbiA9IGZhbHNl
OwogCiAgICAgaWYgKG1faXNBbmltYXRpbmcpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1faXNB
bmltYXRpbmcgPSB0cnVlOwotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5OjpFeGl0RnVsbHNjcmVlbihjbGllbnRSZWN0Rm9yTm9kZShub2Rl
KSksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpFeGl0RnVsbHNjcmVlbihjbGllbnRSZWN0Rm9yRWxl
bWVudCh2aWRlb0VsZW1lbnQuZ2V0KCkpKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKIHZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0RHVyYXRpb24oZG91YmxlIGR1cmF0aW9uKQpA
QCAtMTkxLDkgKzE5MSw5IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRW50
ZXIKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gZXhpdCBmdWxsc2NyZWVuIG5vdyBpZiBpdCB3
YXMgcHJldmlvdXNseSByZXF1ZXN0ZWQgZHVyaW5nIGFuIGFuaW1hdGlvbi4KLSAgICBfX2Jsb2Nr
IFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlz
KTsKKyAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dD4gcHJvdGVjdCh0aGlzKTsKICAgICBXZWJUaHJlYWRSdW4oXiB7Ci0gICAgICAgIGV4aXRGdWxs
c2NyZWVuRm9yTm9kZShtX25vZGUuZ2V0KCkpOworICAgICAgICBleGl0VmlkZW9GdWxsc2NyZWVu
KCk7CiAgICAgICAgIHByb3RlY3QuY2xlYXIoKTsKICAgICB9KTsKIH0KQEAgLTIwMSw3ICsyMDEs
NyBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZEVudGVyCiB2b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZEV4aXRGdWxsc2NyZWVuKCkKIHsKICAgICBzZXRWaWRl
b0Z1bGxzY3JlZW5MYXllcihuaWwpOwotICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsTWVkaWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOworICAgIF9fYmxvY2sgUmVmUHRy
PFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBwcm90ZWN0KHRoaXMpOwogCiAg
ICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKICAgICAgICAg
bV9sYXllckhvc3RpbmdDb250ZXh0LT5zZXRSb290TGF5ZXIobnVsbHB0cik7CkBAIC0yMTYsMTUg
KzIxNiwxNSBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZENsZWFuCiAgICAg
bV9pc0FuaW1hdGluZyA9IGZhbHNlOwogICAgIG1faXNGdWxsc2NyZWVuID0gZmFsc2U7CiAgICAg
Ci0gICAgc2V0TWVkaWFFbGVtZW50KG51bGxwdHIpOworICAgIHNldFZpZGVvRWxlbWVudChudWxs
cHRyKTsKIAogICAgIGlmICghbV90YXJnZXRJc0Z1bGxzY3JlZW4pCiAgICAgICAgIHJldHVybjsK
IAogICAgIC8vIGVudGVyIGZ1bGxzY3JlZW4gbm93IGlmIGl0IHdhcyBwcmV2aW91c2x5IHJlcXVl
c3RlZCBkdXJpbmcgYW4gYW5pbWF0aW9uLgotICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOworICAgIF9fYmxvY2sgUmVm
UHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBwcm90ZWN0KHRoaXMpOwog
ICAgIFdlYlRocmVhZFJ1biheIHsKLSAgICAgICAgZW50ZXJGdWxsc2NyZWVuRm9yTm9kZShtX25v
ZGUuZ2V0KCkpOworICAgICAgICBlbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudCht
X3ZpZGVvRWxlbWVudC5nZXQoKSk7CiAgICAgICAgIHByb3RlY3QuY2xlYXIoKTsKICAgICB9KTsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MzE2NykKKysrIFNvdXJjZS9XZWJL
aXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDE0LTA5
LTAyICBNYWNpZWogU3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CisKKyAgICAgICAgQ2xlYW4g
dXAgbmFtaW5nIGZvciBhbmQgc2xpZ2h0bHkgcmVmYWN0b3IgbGVnYWN5IHZpZGVvIGZ1bGxzY3Jl
ZW4gc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTM2NDQ2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgS2V5IGNoYW5nZXM6CisgICAgICAgIHN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUoTm9kZSop
IC0tPiBzdXBwb3J0c1ZpZGVvRnVsbHNjcmVlbigpCisgICAgICAgIGVudGVyRnVsbHNjcmVlbkZv
ck5vZGUoTm9kZSopIC0tPiBlbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChIVE1M
VmlkZW9FbGVtZW50KikKKyAgICAgICAgZXhpdEZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqKSAtLT4g
ZXhpdFZpZGVvRnVsbHNjcmVlbigpCisgICAgICAgIAorICAgICAgICBUaGUgb2xkIHZlcnNpb25z
IGhhZCB1bm5lY2Vzc2FyeSBwYXJhbWV0ZXJzLCBkaWQgbm90IGNsZWFybHkgZGlzdGluZ3Vpc2gg
dGhlaXIgcHVycG9zZQorICAgICAgICBmcm9tIGVudGVyRnVsbHNjcmVlbkZvckVsZW1lbnQgYW5k
IGZyaWVuZHMsIGFuZCB3cm9uZ2x5IGNsYWltZWQgZ2VuZXJhbGl0eSB0byBhbGwgTm9kZXMuCisg
ICAgICAgIEFsc28gY2hhbmdlZCBtYW55IG90aGVyIHBsYWNlcyB0byB1c2UgSFRNTFZpZGVvRWxl
bWVudCogaW5zdGVhZCBvZiBOb2RlKiBvciAKKyAgICAgICAgSFRNTE1lZGlhRWxlbWVudCogd2hl
biB0aGV5IHdlcmUgaW4gZmFjdCBvbmx5IHVzZWQgZm9yIHZpZGVvIGVsZW1lbnRzIGFuZCB3b3Vs
ZCBvbmx5CisgICAgICAgIHdvcmsgZm9yIHN1Y2guCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVD
bGllbnQubW06CisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OnN1cHBvcnRzVmlkZW9GdWxsc2Ny
ZWVuKTogQWRqdXN0IGZvciBtYWluIHJlZmFjdG9yaW5nLgorICAgICAgICBBbHNvIG5vIG1vcmUg
bmVlZCB0byBjaGVjayBmb3IgdmlkZW8gZWxlbWVudG5lc3MuCisgICAgICAgIChXZWJDaHJvbWVD
bGllbnQ6OmVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KTogQWRqdXN0IGZvciBt
YWluIHJlZmFjdG9yaW5nLgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50OjpleGl0VmlkZW9GdWxs
c2NyZWVuKTogZGl0dG8KKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAgICgt
W1dlYlZpZXcgX2VudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50Ol0pOiBBZGp1c3Qg
Zm9yIG1haW4KKyAgICAgICAgcmVmYWN0b3JpbmcuCisgICAgICAgICgtW1dlYlZpZXcgX2V4aXRW
aWRlb0Z1bGxzY3JlZW5dKTogZGl0dG8KKyAgICAgICAgKC1bV2ViVmlldyBfY2xvc2VdKTogZGl0
dG8KKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXdJbnRlcm5hbC5oOgorCiAyMDE0LTA4LTMxICBU
aW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSB1
bm5lY2Vzc2FyeSAoYW5kIHVubmVjZXNzYXJpbHkgaU9TLXNwZWNpZmljKSBzZXRTdHJva2VBbmRG
aWxsQ29sb3IKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5oCShyZXZpc2lvbiAxNzMxNjEpCisrKyBTb3VyY2UvV2ViS2l0L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTgw
LDkgKzE4MCw5IEBAIHB1YmxpYzoKICAgICB9CiAKICNpZiBFTkFCTEUoVklERU8pCi0gICAgdmly
dHVhbCBib29sIHN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUoY29uc3QgV2ViQ29yZTo6Tm9kZSop
IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKFdlYkNv
cmU6Ok5vZGUqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxzY3JlZW5Gb3JO
b2RlKFdlYkNvcmU6Ok5vZGUqKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNW
aWRlb0Z1bGxzY3JlZW4oKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJWaWRlb0Z1
bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCopIG92ZXJy
aWRlOworICAgIHZpcnR1YWwgdm9pZCBleGl0VmlkZW9GdWxsc2NyZWVuKCkgb3ZlcnJpZGU7CiAj
ZW5kaWYKICAgICAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCShyZXZp
c2lvbiAxNzMxNjEpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTk0MCwyNiArOTQwLDI2IEBAIHZvaWQgV2Vi
Q2hyb21lQ2xpZW50OjpzY2hlZHVsZUNvbXBvc2l0aW4KIAogI2lmIEVOQUJMRShWSURFTykKIAot
Ym9vbCBXZWJDaHJvbWVDbGllbnQ6OnN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUoY29uc3QgTm9k
ZSogbm9kZSkKK2Jvb2wgV2ViQ2hyb21lQ2xpZW50OjpzdXBwb3J0c1ZpZGVvRnVsbHNjcmVlbigp
CiB7CiAjaWYgUExBVEZPUk0oSU9TKQogICAgIGlmICghU2V0dGluZ3M6OmF2S2l0RW5hYmxlZCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKLSAgICByZXR1cm4gaXNIVE1MVmlkZW9F
bGVtZW50KG5vZGUpOworICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFdlYkNocm9tZUNsaWVu
dDo6ZW50ZXJGdWxsc2NyZWVuRm9yTm9kZShOb2RlKiBub2RlKQordm9pZCBXZWJDaHJvbWVDbGll
bnQ6OmVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KEhUTUxWaWRlb0VsZW1lbnQq
IHZpZGVvRWxlbWVudCkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAg
W21fd2ViVmlldyBfZW50ZXJGdWxsc2NyZWVuRm9yTm9kZTpub2RlXTsKKyAgICBbbV93ZWJWaWV3
IF9lbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudDp2aWRlb0VsZW1lbnRdOwogICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKLXZvaWQgV2ViQ2hyb21lQ2xpZW50Ojpl
eGl0RnVsbHNjcmVlbkZvck5vZGUoTm9kZSopCit2b2lkIFdlYkNocm9tZUNsaWVudDo6ZXhpdFZp
ZGVvRnVsbHNjcmVlbigpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAg
IFttX3dlYlZpZXcgX2V4aXRGdWxsc2NyZWVuXTsKKyAgICBbbV93ZWJWaWV3IF9leGl0VmlkZW9G
dWxsc2NyZWVuXTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOyAgICAKIH0KIApJbmRl
eDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkocmV2aXNpb24gMTczMTYxKQorKysg
U291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzQsNyArMTM0LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvR0NDb250cm9sbGVyLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL0dlb2xvY2F0aW9uQ29udHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9HZW9s
b2NhdGlvbkVycm9yLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0hUTUxNZWRpYUVsZW1lbnQuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvSFRNTFZpZGVvRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1M
TmFtZXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvSGlzdG9yeUNvbnRyb2xsZXIuaD4KICNpbXBvcnQg
PFdlYkNvcmUvSGlzdG9yeUl0ZW0uaD4KQEAgLTE2OTksNyArMTY5OSw3IEBAIC0gKHZvaWQpX2Ns
b3NlCiAgICAgfQogCiAjaWYgRU5BQkxFKFZJREVPKSAmJiAhUExBVEZPUk0oSU9TKQotICAgIFtz
ZWxmIF9leGl0RnVsbHNjcmVlbl07CisgICAgW3NlbGYgX2V4aXRWaWRlb0Z1bGxzY3JlZW5dOwog
I2VuZGlmCiAKICNpZiBQTEFURk9STShJT1MpCkBAIC04Mzg4LDI4ICs4Mzg4LDI1IEBAIC0gKHZv
aWQpX3NjaGVkdWxlTGF5ZXJGbHVzaEZvclBlbmRpbmdUaWwKICNlbmRpZgogCiAjaWYgRU5BQkxF
KFZJREVPKQotLSAodm9pZClfZW50ZXJGdWxsc2NyZWVuRm9yTm9kZTooV2ViQ29yZTo6Tm9kZSop
bm9kZQorLSAodm9pZClfZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQ6KFdlYkNv
cmU6OkhUTUxWaWRlb0VsZW1lbnQqKXZpZGVvRWxlbWVudAogewotICAgIEFTU0VSVChpc0hUTUxW
aWRlb0VsZW1lbnQobm9kZSkpOwotICAgIEhUTUxNZWRpYUVsZW1lbnQqIHZpZGVvRWxlbWVudCA9
IHRvSFRNTE1lZGlhRWxlbWVudChub2RlKTsKLQogICAgIGlmIChfcHJpdmF0ZS0+ZnVsbHNjcmVl
bkNvbnRyb2xsZXIpIHsKLSAgICAgICAgaWYgKFtfcHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRyb2xs
ZXIgbWVkaWFFbGVtZW50XSA9PSB2aWRlb0VsZW1lbnQpIHsKKyAgICAgICAgaWYgKFtfcHJpdmF0
ZS0+ZnVsbHNjcmVlbkNvbnRyb2xsZXIgdmlkZW9FbGVtZW50XSA9PSB2aWRlb0VsZW1lbnQpIHsK
ICAgICAgICAgICAgIC8vIFRoZSBiYWNrZW5kIG1heSBqdXN0IHdhcm4gdXMgdGhhdCB0aGUgdW5k
ZXJsYXlpbmcgcGxhZnRvcm1Nb3ZpZSgpCiAgICAgICAgICAgICAvLyBoYXMgY2hhbmdlZC4gSnVz
dCBmb3JjZSBhbiB1cGRhdGUuCi0gICAgICAgICAgICBbX3ByaXZhdGUtPmZ1bGxzY3JlZW5Db250
cm9sbGVyIHNldE1lZGlhRWxlbWVudDp2aWRlb0VsZW1lbnRdOworICAgICAgICAgICAgW19wcml2
YXRlLT5mdWxsc2NyZWVuQ29udHJvbGxlciBzZXRWaWRlb0VsZW1lbnQ6dmlkZW9FbGVtZW50XTsK
ICAgICAgICAgICAgIHJldHVybjsgLy8gTm8gbW9yZSB0byBkby4KICAgICAgICAgfQogCi0gICAg
ICAgIC8vIEZpcnN0IGV4aXQgRnVsbHNjcmVlbiBmb3IgdGhlIG9sZCBtZWRpYUVsZW1lbnQuCi0g
ICAgICAgIFtfcHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRyb2xsZXIgbWVkaWFFbGVtZW50XS0+ZXhp
dEZ1bGxzY3JlZW4oKTsKKyAgICAgICAgLy8gRmlyc3QgZXhpdCBGdWxsc2NyZWVuIGZvciB0aGUg
b2xkIHZpZGVvRWxlbWVudC4KKyAgICAgICAgW19wcml2YXRlLT5mdWxsc2NyZWVuQ29udHJvbGxl
ciB2aWRlb0VsZW1lbnRdLT5leGl0RnVsbHNjcmVlbigpOwogICAgICAgICAvLyBUaGlzIHByZXZp
b3VzIGNhbGwgaGFzIHRvIHRyaWdnZXIgX2V4aXRGdWxsc2NyZWVuLAogICAgICAgICAvLyB3aGlj
aCBoYXMgdG8gY2xlYXIgX3ByaXZhdGUtPmZ1bGxzY3JlZW5Db250cm9sbGVyLgogICAgICAgICBB
U1NFUlQoIV9wcml2YXRlLT5mdWxsc2NyZWVuQ29udHJvbGxlcik7CiAgICAgfQogICAgIGlmICgh
X3ByaXZhdGUtPmZ1bGxzY3JlZW5Db250cm9sbGVyKSB7CiAgICAgICAgIF9wcml2YXRlLT5mdWxs
c2NyZWVuQ29udHJvbGxlciA9IFtbV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciBhbGxvY10g
aW5pdF07Ci0gICAgICAgIFtfcHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRyb2xsZXIgc2V0TWVkaWFF
bGVtZW50OnZpZGVvRWxlbWVudF07CisgICAgICAgIFtfcHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRy
b2xsZXIgc2V0VmlkZW9FbGVtZW50OnZpZGVvRWxlbWVudF07CiAjaWYgUExBVEZPUk0oSU9TKQog
ICAgICAgICBbX3ByaXZhdGUtPmZ1bGxzY3JlZW5Db250cm9sbGVyIGVudGVyRnVsbHNjcmVlbjoo
VUlWaWV3ICopW1tbc2VsZiB3aW5kb3ddIGhvc3RMYXllcl0gZGVsZWdhdGVdXTsKICNlbHNlCkBA
IC04NDE3LDEwICs4NDE0LDEwIEBAIC0gKHZvaWQpX2VudGVyRnVsbHNjcmVlbkZvck5vZGU6KFdl
YkNvcmUKICNlbmRpZgogICAgIH0KICAgICBlbHNlCi0gICAgICAgIFtfcHJpdmF0ZS0+ZnVsbHNj
cmVlbkNvbnRyb2xsZXIgc2V0TWVkaWFFbGVtZW50OnZpZGVvRWxlbWVudF07CisgICAgICAgIFtf
cHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRyb2xsZXIgc2V0VmlkZW9FbGVtZW50OnZpZGVvRWxlbWVu
dF07CiB9CiAKLS0gKHZvaWQpX2V4aXRGdWxsc2NyZWVuCistICh2b2lkKV9leGl0VmlkZW9GdWxs
c2NyZWVuCiB7CiAgICAgaWYgKCFfcHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRyb2xsZXIpCiAgICAg
ICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0ludGVy
bmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3SW50
ZXJuYWwuaAkocmV2aXNpb24gMTczMTYxKQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJWaWV3SW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBjbGFzcyBV
Ukw7CiBjbGFzcyBLZXlib2FyZEV2ZW50OwogY2xhc3MgUGFnZTsKIGNsYXNzIFJlbmRlckJveDsK
LWNsYXNzIE5vZGU7CitjbGFzcyBIVE1MVmlkZW9FbGVtZW50Owogc3RydWN0IERpY3RhdGlvbkFs
dGVybmF0aXZlOwogfQogI2VuZGlmCkBAIC0yMzMsOCArMjMzLDggQEAgQGludGVyZmFjZSBXZWJW
aWV3IChXZWJWaWV3T3RoZXJJbnRlcm5hbAogLSAodm9pZClfcHJlZmVyZW5jZXNDaGFuZ2VkOihX
ZWJQcmVmZXJlbmNlcyAqKXByZWZlcmVuY2VzOwogCiAjaWYgRU5BQkxFKFZJREVPKSAmJiBkZWZp
bmVkKF9fY3BsdXNwbHVzKQotLSAodm9pZClfZW50ZXJGdWxsc2NyZWVuRm9yTm9kZTooV2ViQ29y
ZTo6Tm9kZSopbm9kZTsKLS0gKHZvaWQpX2V4aXRGdWxsc2NyZWVuOworLSAodm9pZClfZW50ZXJW
aWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQ6KFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQq
KXZpZGVvRWxlbWVudDsKKy0gKHZvaWQpX2V4aXRWaWRlb0Z1bGxzY3JlZW47CiAjZW5kaWYKIAog
I2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkgJiYgIVBMQVRGT1JNKElPUykgJiYgZGVmaW5lZChf
X2NwbHVzcGx1cykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MzE2NykKKysrIFNv
dXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBA
CisyMDE0LTA5LTAyICBNYWNpZWogU3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CisKKyAgICAg
ICAgQ2xlYW4gdXAgbmFtaW5nIGZvciBhbmQgc2xpZ2h0bHkgcmVmYWN0b3IgbGVnYWN5IHZpZGVv
IGZ1bGxzY3JlZW4gc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTM2NDQ2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgS2V5IGNoYW5nZXM6CisgICAgICAgIHN1cHBvcnRzRnVsbHNjcmVlbkZvck5v
ZGUoTm9kZSopIC0tPiBzdXBwb3J0c1ZpZGVvRnVsbHNjcmVlbigpCisgICAgICAgIGVudGVyRnVs
bHNjcmVlbkZvck5vZGUoTm9kZSopIC0tPiBlbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxl
bWVudChIVE1MVmlkZW9FbGVtZW50KikKKyAgICAgICAgZXhpdEZ1bGxzY3JlZW5Gb3JOb2RlKE5v
ZGUqKSAtLT4gZXhpdFZpZGVvRnVsbHNjcmVlbigpCisgICAgICAgIAorICAgICAgICBUaGUgb2xk
IHZlcnNpb25zIGhhZCB1bm5lY2Vzc2FyeSBwYXJhbWV0ZXJzLCBkaWQgbm90IGNsZWFybHkgZGlz
dGluZ3Vpc2ggdGhlaXIgcHVycG9zZQorICAgICAgICBmcm9tIGVudGVyRnVsbHNjcmVlbkZvckVs
ZW1lbnQgYW5kIGZyaWVuZHMsIGFuZCB3cm9uZ2x5IGNsYWltZWQgZ2VuZXJhbGl0eSB0byBhbGwg
Tm9kZXMuCisgICAgICAgIEFsc28gY2hhbmdlZCBtYW55IG90aGVyIHBsYWNlcyB0byB1c2UgSFRN
TFZpZGVvRWxlbWVudCogaW5zdGVhZCBvZiBOb2RlKiBvciAKKyAgICAgICAgSFRNTE1lZGlhRWxl
bWVudCogd2hlbiB0aGV5IHdlcmUgaW4gZmFjdCBvbmx5IHVzZWQgZm9yIHZpZGVvIGVsZW1lbnRz
IGFuZCB3b3VsZCBvbmx5CisgICAgICAgIHdvcmsgZm9yIHN1Y2guCisKKyAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwOgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50
OjpzdXBwb3J0c1ZpZGVvRnVsbHNjcmVlbik6IEFkanVzdCBmb3IgdGhlCisgICAgICAgIG1haW4g
cmVmYWN0b3JpbmcuCisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OmVudGVyVmlkZW9GdWxsc2Ny
ZWVuRm9yVmlkZW9FbGVtZW50KTogZGl0dG8KKyAgICAgICAgKFdlYkNocm9tZUNsaWVudDo6ZXhp
dFZpZGVvRnVsbHNjcmVlbik6IGRpdHRvCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50Lmg6CisgICAgICAgICogV2ViVmlldy5jcHA6CisgICAgICAgIChXZWJWaWV3Ojpl
bnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudCk6IEFkanVzdCBmb3IgdGhlIAorICAg
ICAgICBtYWluIHJlZmFjdG9yaW5nLgorICAgICAgICAoV2ViVmlldzo6ZXhpdFZpZGVvRnVsbHNj
cmVlbik6IGRpdHRvLgorICAgICAgICAqIFdlYlZpZXcuaDoKKwogMjAxNC0wOC0yNiAgQnJlbnQg
RnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2luXSBXZWJLaXQgSURM
IGluY29ycmVjdGx5IHBhc3NlcyBIV05EIGFzIE9MRV9IQU5ETEUKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvd2luL1dlYlZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYlZp
ZXcuY3BwCShyZXZpc2lvbiAxNzMxNjEpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjI2NywxNiArNjI2Nyw5IEBAIEhSRVNVTFQgV2ViVmlldzo6
c2V0Q2FuU3RhcnRQbHVnaW5zKEJPT0wKICAgICByZXR1cm4gU19PSzsKIH0KIAotdm9pZCBXZWJW
aWV3OjplbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqIG5vZGUpCit2b2lkIFdlYlZpZXc6OmVu
dGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVv
RWxlbWVudCkKIHsKICNpZiBFTkFCTEUoVklERU8pICYmICFVU0UoR1NUUkVBTUVSKSAmJiAhVVNF
KE1FRElBX0ZPVU5EQVRJT04pCi0gICAgaWYgKCFpc0hUTUxWaWRlb0VsZW1lbnQobm9kZSkgfHwg
IW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCF0b0Vs
ZW1lbnQobm9kZSktPmlzTWVkaWFFbGVtZW50KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBIVE1M
TWVkaWFFbGVtZW50KiB2aWRlb0VsZW1lbnQgPSB0b0hUTUxNZWRpYUVsZW1lbnQobm9kZSk7Ci0K
ICAgICBpZiAobV9mdWxsU2NyZWVuVmlkZW9Db250cm9sbGVyKSB7CiAgICAgICAgIGlmIChtX2Z1
bGxTY3JlZW5WaWRlb0NvbnRyb2xsZXItPm1lZGlhRWxlbWVudCgpID09IHZpZGVvRWxlbWVudCkg
ewogICAgICAgICAgICAgLy8gVGhlIGJhY2tlbmQgbWF5IGp1c3Qgd2FybiB1cyB0aGF0IHRoZSB1
bmRlcmxheWluZyBwbGFmdG9ybU1vdmllKCkKQEAgLTYyOTgsNyArNjI5MSw3IEBAIHZvaWQgV2Vi
Vmlldzo6ZW50ZXJGdWxsc2NyZWVuRm9yTm9kZShOb2QKICNlbmRpZgogfQogCi12b2lkIFdlYlZp
ZXc6OmV4aXRGdWxsc2NyZWVuKCkKK3ZvaWQgV2ViVmlldzo6ZXhpdFZpZGVvRnVsbHNjcmVlbigp
CiB7CiAjaWYgRU5BQkxFKFZJREVPKSAmJiAhVVNFKEdTVFJFQU1FUikgJiYgIVVTRShNRURJQV9G
T1VOREFUSU9OKQogICAgIGlmICghbV9mdWxsU2NyZWVuVmlkZW9Db250cm9sbGVyKQpJbmRleDog
U291cmNlL1dlYktpdC93aW4vV2ViVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
d2luL1dlYlZpZXcuaAkocmV2aXNpb24gMTczMTYxKQorKysgU291cmNlL1dlYktpdC93aW4vV2Vi
Vmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC05NDAsOCArOTQwLDggQEAgcHVibGljOgogICAgIFdl
YkNvcmU6OkdyYXBoaWNzRGV2aWNlQWRhcHRlciogZ3JhcGhpY3NEZXZpY2VBZGFwdGVyKCkgY29u
c3Q7CiAjZW5kaWYKIAotICAgIHZvaWQgZW50ZXJGdWxsc2NyZWVuRm9yTm9kZShXZWJDb3JlOjpO
b2RlKik7Ci0gICAgdm9pZCBleGl0RnVsbHNjcmVlbigpOworICAgIHZvaWQgZW50ZXJWaWRlb0Z1
bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCopOworICAg
IHZvaWQgZXhpdFZpZGVvRnVsbHNjcmVlbigpOwogCiAgICAgdm9pZCBzZXRMYXN0Q3Vyc29yKEhD
VVJTT1IgY3Vyc29yKSB7IG1fbGFzdFNldEN1cnNvciA9IGN1cnNvcjsgfQogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5j
cHAJKHJldmlzaW9uIDE3MzE2MSkKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3MywxOSArNzczLDE5IEBA
IENPTVB0cjxJV2ViVUlEZWxlZ2F0ZT4gV2ViQ2hyb21lQ2xpZW50OjoKIAogI2lmIEVOQUJMRShW
SURFTykKIAotYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUo
Y29uc3QgTm9kZSogbm9kZSkKK2Jvb2wgV2ViQ2hyb21lQ2xpZW50OjpzdXBwb3J0c1ZpZGVvRnVs
bHNjcmVlbigpCiB7Ci0gICAgcmV0dXJuIGlzSFRNTFZpZGVvRWxlbWVudChub2RlKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmVudGVyRnVsbHNjcmVlbkZv
ck5vZGUoTm9kZSogbm9kZSkKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50OjplbnRlclZpZGVvRnVsbHNj
cmVlbkZvclZpZGVvRWxlbWVudChIVE1MVmlkZW9FbGVtZW50KiB2aWRlb0VsZW1lbnQpCiB7Ci0g
ICAgbV93ZWJWaWV3LT5lbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKG5vZGUpOworICAgIG1fd2ViVmll
dy0+ZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQodmlkZW9FbGVtZW50KTsKIH0K
IAotdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmV4aXRGdWxsc2NyZWVuRm9yTm9kZShOb2RlKikKK3Zv
aWQgV2ViQ2hyb21lQ2xpZW50OjpleGl0VmlkZW9GdWxsc2NyZWVuKCkKIHsKLSAgICBtX3dlYlZp
ZXctPmV4aXRGdWxsc2NyZWVuKCk7CisgICAgbV93ZWJWaWV3LT5leGl0VmlkZW9GdWxsc2NyZWVu
KCk7CiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQv
V2ViQ2hyb21lQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHJldmlzaW9uIDE3MzE2MSkKKysrIFNvdXJjZS9X
ZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDgsOSArMTQ4LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxSZWN0
SW50b1ZpZXcoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIGNvbnN0IHsgfQogCiAjaWYgRU5BQkxF
KFZJREVPKQotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Z1bGxzY3JlZW5Gb3JOb2RlKGNvbnN0
IFdlYkNvcmU6Ok5vZGUqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZW50ZXJGdWxsc2NyZWVuRm9yTm9k
ZShXZWJDb3JlOjpOb2RlKik7Ci0gICAgdmlydHVhbCB2b2lkIGV4aXRGdWxsc2NyZWVuRm9yTm9k
ZShXZWJDb3JlOjpOb2RlKik7CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzVmlkZW9GdWxsc2Ny
ZWVuKCk7CisgICAgdmlydHVhbCB2b2lkIGVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVt
ZW50KFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZXhpdFZp
ZGVvRnVsbHNjcmVlbigpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykgfHwg
RU5BQkxFKExFR0FDWV9OT1RJRklDQVRJT05TKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237507</attachid>
            <date>2014-09-02 11:09:40 -0700</date>
            <delta_ts>2014-09-02 13:18:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-136446-20140902110934.patch</filename>
            <type>text/plain</type>
            <size>120481</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MzE2NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMCBAQAorMjAxNC0wOS0wMiAgTWFjaWVq
IFN0YWNob3dpYWsgIDxtanNAYXBwbGUuY29tPgorCisgICAgICAgIENsZWFuIHVwIG5hbWluZyBm
b3IgYW5kIHNsaWdodGx5IHJlZmFjdG9yIGxlZ2FjeSB2aWRlbyBmdWxsc2NyZWVuIHN1cHBvcnQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjQ0Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEtleSBjaGFu
Z2VzOgorICAgICAgICBzdXBwb3J0c0Z1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqKSAtLT4gc3VwcG9y
dHNWaWRlb0Z1bGxzY3JlZW4oKQorICAgICAgICBlbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUq
KSAtLT4gZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoSFRNTFZpZGVvRWxlbWVu
dCopCisgICAgICAgIGV4aXRGdWxsc2NyZWVuRm9yTm9kZShOb2RlKikgLS0+IGV4aXRWaWRlb0Z1
bGxzY3JlZW4oKQorICAgICAgICAKKyAgICAgICAgVGhlIG9sZCB2ZXJzaW9ucyBoYWQgdW5uZWNl
c3NhcnkgcGFyYW1ldGVycywgZGlkIG5vdCBjbGVhcmx5IGRpc3Rpbmd1aXNoIHRoZWlyIHB1cnBv
c2UKKyAgICAgICAgZnJvbSBlbnRlckZ1bGxzY3JlZW5Gb3JFbGVtZW50IGFuZCBmcmllbmRzLCBh
bmQgd3JvbmdseSBjbGFpbWVkIGdlbmVyYWxpdHkgdG8gYWxsIE5vZGVzLgorICAgICAgICBBbHNv
IGNoYW5nZWQgbWFueSBvdGhlciBwbGFjZXMgdG8gdXNlIEhUTUxWaWRlb0VsZW1lbnQqIGluc3Rl
YWQgb2YgTm9kZSogb3IgCisgICAgICAgIEhUTUxNZWRpYUVsZW1lbnQqIHdoZW4gdGhleSB3ZXJl
IGluIGZhY3Qgb25seSB1c2VkIGZvciB2aWRlbyBlbGVtZW50cyBhbmQgd291bGQgb25seQorICAg
ICAgICB3b3JrIGZvciBzdWNoLgorCisgICAgICAgIFRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBp
bmNsdWRlIGEgYnVuY2ggb2YgcmVuYW1pbmcgaW4gc29tZSBpT1MgZnVsbHNjcmVlbiBjb2RlLgor
CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxNZWRpYUVsZW1lbnQ6OkhUTUxNZWRpYUVsZW1lbnQpOiBSZW5hbWUgbV9pc0Z1bGxzY3Jl
ZW4gZmxhZyB0byAKKyAgICAgICAgbV9pc0luVmlkZW9GdWxsc2NyZWVuLCBzaW5jZSBpdCBvbmx5
IGNvdmVycyB0aGUgY2FzZSBvZiBsZWdhY3kgdmlkZW8gZnVsbHNjcmVlbiwKKyAgICAgICAgbm90
IGVsZW1lbnQgZnVsbHNjcmVlbi4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6
OnN0b3ApOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6cmVxdWly
ZXNUZXh0VHJhY2tSZXByZXNlbnRhdGlvbik6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50Ojppc0Z1bGxzY3JlZW4pOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6SFRN
TE1lZGlhRWxlbWVudDo6ZW50ZXJGdWxsc2NyZWVuKTogUmVuYW1lIG1faXNGdWxsc2NyZWVuIGZs
YWcgdG8KKyAgICAgICAgbV9pc0luVmlkZW9GdWxsc2NyZWVuLiBIb2lzdCB2aWRlbyBlbGVtZW50
IGNoZWNrIGhlcmUgZnJvbSBhbGwgc3VwcG9ydHNGdWxsc2NyZW5Gb3JOb2RlCisgICAgICAgIGNs
aWVudHMuIEFkanVzdCBmb3IgcmVsZXZhbnQgQ2hyb21lQ2xpZW50IHJlZmFjdG9yaW5ncy4KKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmVudGVyRnVsbHNjcmVlbik6IGRpdHRv
IGFib3ZlCisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50Lmg6CisgICAgICAgICogaHRt
bC9IVE1MVmlkZW9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1l
bnQ6OnN1cHBvcnRzRnVsbHNjcmVlbik6IEFkanVzdCBmb3IgcmVsZXZhbnQgQ2hyb21lQ2xpZW50
IAorICAgICAgICByZWZhY3RvcmluZ3MuCisgICAgICAgICogcGFnZS9DaHJvbWVDbGllbnQuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6c3VwcG9ydHNWaWRlb0Z1bGxzY3JlZW4p
OiBSZW5hbWVkIGZyb20gCisgICAgICAgIHN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUsIGFuZCBy
ZW1vdmVkIE5vZGUqIHBhcmFtZXRlci4KKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6
ZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQpOiBSZW5hbWVkIGZyb20KKyAgICAg
ICAgZW50ZXJGdWxzY3JlZW5Gb3JOb2RlIGFuZCBjaGFuZ2VkIE5vZGUqIHBhcmFtZXRlciB0byBI
VE1MVmlkZW9FbGVtZW50Ki4KKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6ZXhpdFZp
ZGVvRnVsbHNjcmVlbik6IFJlbmFtZWQgZnJvbSAKKyAgICAgICAgZXhpdEZ1bGxzY3JlZW5Gb3JO
b2RlLCBhbmQgcmVtb3ZlZCBOb2RlKiBwYXJhbWV0ZXIuCisgICAgICAgICogcGxhdGZvcm0vaW9z
L1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW06CisgICAgICAgICgtW1dl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIgdmlkZW9FbGVtZW50XSk6IFJlbmFtZWQgZnJvbSBt
ZWRpYUVsZW1lbnQ7CisgICAgICAgIHJldHVybiBhIHZpZGVvIGVsZW1lbnQgYW5kIG5vdCBqdXN0
IGEgbWVkaWEgZWxlbWVudC4KKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ciBkZWFsbG9jXSk6IFJlbmFtZWQgX21lZGlhRWxlbWVudCBkYXRhIG1lbWJlcgorICAgICAgICB0
byBfdmlkZW9FbGVtZW50IGFuZCBjaGFuZ2VkIHR5cGUgYWNjb3JkaW5nbHkuCisgICAgICAgICgt
W1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIgc2V0VmlkZW9FbGVtZW50Ol0pOiBSZW5hbWVk
IGZyb20gc2V0TWVkaWFFbGVtZW50OgorICAgICAgICBhbmQgYWRqdXN0IHBhcmFtZXRlciB0eXBl
IGFjY29yZGluZ2x5LgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIGVu
dGVyRnVsbHNjcmVlbjpdKTogVmlkZW8gZWxlbWVudHMsIG5vdCBtZWRpYQorICAgICAgICBlbGVt
ZW50cy4KKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciBleGl0RnVsbHNj
cmVlbl0pOiBkaXR0bworICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIGRp
ZENsZWFudXBGdWxsc2NyZWVuXSk6IGRpdHRvCisgICAgICAgICogcGxhdGZvcm0vaW9zL1dlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9XZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oOiBSZW1vdmUgZ3JhdHVpdG91cyBIVE1MTUVkaWFF
bGVtZW50LmggaW5jbHVkZQorICAgICAgICBhbmQgZml4IGRlY2xhcmF0aW9ucyBhY2NvcmRpbmds
eS4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQubW06IEluY2x1ZGUgV1RGU3RyaW5nLmgKKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5oLgor
ICAgICAgICAqIHBsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dC5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5tbS4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50KSBSZW5hbWVkIGZyb20gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxN
ZWRpYUVsZW1lbnQKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
OjpzZXRWaWRlb0VsZW1lbnQpOiBSZW5hbWVkIGZyb20gc2V0TWVkaWFFbGVtZW50IGFuZAorICAg
ICAgICBjaGFuZ2UgcGFyYW0gdHlwZSBhY2NvcmRpbmdseS4gQWxzbyBubyBuZWVkIHRvIGNoZWNr
IGZvciBhY3R1YWwgdmlkZW9uZXNzIG9mIHRoZSBlbGVtZW50LgorICAgICAgICAoV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnVwZGF0ZUZvckV2ZW50TmFtZSk6IFJlbmFtZSBk
YXRhIG1lbWJlciBmcm9tIG1fbWVkaWFFbGVtZW50CisgICAgICAgIHRvIG1fdmlkZW9FbGVtZW50
IGFuZCBjaGFuZ2UgdHlwZSBhY2NvcmRpbmdseS4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0Z1bGxzY3JlZW5MYXllcik6IGRpdHRvCisgICAg
ICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6cGxheSk6IGRpdHRvCisg
ICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6cGF1c2UpOiBkaXR0
bworICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnRvZ2dsZVBs
YXlTdGF0ZSk6IGRpdHRvCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudDo6YmVnaW5TY3J1YmJpbmcpOiBkaXR0bworICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQ6OmVuZFNjcnViYmluZyk6IGRpdHRvCisgICAgICAgIChXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2Vla1RvVGltZSk6IGRpdHRvCisgICAgICAg
IChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6ZmFzdFNlZWspOiBkaXR0bwor
ICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmJlZ2luU2Nhbm5p
bmdGb3J3YXJkKTogZGl0dG8KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9F
bGVtZW50OjpiZWdpblNjYW5uaW5nQmFja3dhcmQpOiBkaXR0bworICAgICAgICAoV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmVuZFNjYW5uaW5nKTogZGl0dG8KKyAgICAgICAg
KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpyZXF1ZXN0RXhpdEZ1bGxzY3Jl
ZW4pOiBkaXR0bworICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6
OnNldFZpZGVvTGF5ZXJGcmFtZSk6IGRpdHRvCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9MYXllckdyYXZpdHkpOiBkaXR0bworICAgICAgICAo
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnVwZGF0ZUxlZ2libGVPcHRpb25z
KTogZGl0dG8KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlci5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyLm1tOgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIHZpZGVvRWxl
bWVudF0pOiBSZW5hbWVkIGZyb20gbWVkaWFFbGVtZW50CisgICAgICAgIGFuZCB1cGRhdGUgcmV0
dXJuIHR5cGUgYWNjb3JkaW5nbHkuCisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXIgc2V0VmlkZW9FbGVtZW50Ol0pOiBSZW5hbWVkIGZyb20gCisgICAgICAgIHNldE1lZGlh
RWxlbWVudCBhbmQgdXBkYXRlIHJldHVybiB0eXBlIGFjY29yZGluZ2x5LgorICAgICAgICAoLVtX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIHZpZGVvRWxlbWVudFJlY3RdKTogUmVuYW1lZAor
ICAgICAgICBmcm9tIG1lZGlhRWxlbWVudFJlY3QuCisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXIgZW50ZXJGdWxsc2NyZWVuOl0pOiBVcGRhdGUgZm9yCisgICAgICAgIHJl
bmFtZS4KKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciBleGl0RnVsbHNj
cmVlbl0pOiBkaXR0bworICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIHVw
ZGF0ZVBvd2VyQXNzZXJ0aW9uc10pOiBSZW5hbWUKKyAgICAgICAgbWVtYmVyIGZyb20gX21lZGlh
RWxlbWVudCB0byBfdmlkZW9FbGVtZW50CisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXIgX3JlcXVlc3RFeGl0XSk6IGRpdHRvCisgICAgICAgICogV2ViQ29yZS5leHAuaW46
IEFkanVzdCBmb3IgZnVuY3Rpb24gYW5kIGNsYXNzIHJlbmFtZXMuCisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGp1c3QgZm9yIGZpbGUgcmVuYW1lcy4KKwog
MjAxNC0wOS0wMSAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZW5kZXJUaGVtZU1hYzo6cGFpbnRQcm9ncmVzc0JhciBjcmVhdGVzIGEgYnVmZmVyIHdp
dGhvdXQgcmVzcGVjdGluZyB0aGUgZGVzdGluYXRpb24ncyBhY2NlbGVyYXRpb24gc2V0dGluZwpJ
bmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDE3MzE2MSkKKysrIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0zNDI2LDMwICszNDI2LDI5IEBA
IF9fWk5LN1dlYkNvcmUxNkhUTUxNZWRpYUVsZW1lbnQ4ZHVyYXRpb24KICNlbmRpZgogCiAjaWYg
RU5BQkxFKFZJREVPKSAmJiBQTEFURk9STShJT1MpCi1fX1pON1dlYkNvcmUzNVdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50MTBzZWVrVG9UaW1lRWQKLV9fWk43V2ViQ29yZTM1V2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQxMWVuZFNjYW5uaW5nRXYKLV9fWk43V2Vi
Q29yZTM1V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQxMWhhbmRsZUV2ZW50RVBO
U18yMlNjcmlwdEV4ZWN1dGlvbkNvbnRleHRFUE5TXzVFdmVudEUKLV9fWk43V2ViQ29yZTM1V2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQxMmVuZFNjcnViYmluZ0V2Ci1fX1pON1dl
YkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50MTRiZWdpblNjcnViYmlu
Z0V2Ci1fX1pON1dlYkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50MTVz
ZXRNZWRpYUVsZW1lbnRFUE5TXzE2SFRNTE1lZGlhRWxlbWVudEUKLV9fWk43V2ViQ29yZTM1V2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQxNXRvZ2dsZVBsYXlTdGF0ZUV2Ci1fX1pO
N1dlYkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50MThzZXRWaWRlb0xh
eWVyRnJhbWVFTlNfOUZsb2F0UmVjdEUKLV9fWk43V2ViQ29yZTM1V2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxNZWRpYUVsZW1lbnQyMGJlZ2luU2Nhbm5pbmdGb3J3YXJkRXYKLV9fWk43V2ViQ29yZTM1
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQyMHNldFZpZGVvTGF5ZXJHcmF2aXR5
RU5TXzIzV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwxMlZpZGVvR3Jhdml0eUUKLV9fWk43V2ViQ29y
ZTM1V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQyMWJlZ2luU2Nhbm5pbmdCYWNr
d2FyZEV2Ci1fX1pON1dlYkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50
MjFyZXF1ZXN0RXhpdEZ1bGxzY3JlZW5FdgotX19aTjdXZWJDb3JlMzVXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbE1lZGlhRWxlbWVudDIyc2VsZWN0QXVkaW9NZWRpYU9wdGlvbkV5Ci1fX1pON1dlYkNv
cmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50MjNzZXRWaWRlb0Z1bGxzY3Jl
ZW5MYXllckVQN0NBTGF5ZXIKLV9fWk43V2ViQ29yZTM1V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxN
ZWRpYUVsZW1lbnQyNHNlbGVjdExlZ2libGVNZWRpYU9wdGlvbkV5Ci1fX1pON1dlYkNvcmUzNVdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50NHBsYXlFdgotX19aTjdXZWJDb3JlMzVX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDVwYXVzZUV2Ci1fX1pON1dlYkNvcmUz
NVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OGZhc3RTZWVrRWQKLV9fWk43V2Vi
Q29yZTM1V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnRDMkV2Ci1fX1pON1dlYkNv
cmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50RDJFdgorX19aTjdXZWJDb3Jl
MzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDEwc2Vla1RvVGltZUVkCitfX1pO
N1dlYkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50MTFlbmRTY2Fubmlu
Z0V2CitfX1pON1dlYkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50MTFo
YW5kbGVFdmVudEVQTlNfMjJTY3JpcHRFeGVjdXRpb25Db250ZXh0RVBOU181RXZlbnRFCitfX1pO
N1dlYkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50MTJlbmRTY3J1YmJp
bmdFdgorX19aTjdXZWJDb3JlMzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDE0
YmVnaW5TY3J1YmJpbmdFdgorX19aTjdXZWJDb3JlMzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZp
ZGVvRWxlbWVudDE1c2V0VmlkZW9FbGVtZW50RVBOU18xNkhUTUxWaWRlb0VsZW1lbnRFCitfX1pO
N1dlYkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50MTV0b2dnbGVQbGF5
U3RhdGVFdgorX19aTjdXZWJDb3JlMzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dDE4c2V0VmlkZW9MYXllckZyYW1lRU5TXzlGbG9hdFJlY3RFCitfX1pON1dlYkNvcmUzNVdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50MjBiZWdpblNjYW5uaW5nRm9yd2FyZEV2Citf
X1pON1dlYkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50MjBzZXRWaWRl
b0xheWVyR3Jhdml0eUVOU18yM1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsMTJWaWRlb0dyYXZpdHlF
CitfX1pON1dlYkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50MjFiZWdp
blNjYW5uaW5nQmFja3dhcmRFdgorX19aTjdXZWJDb3JlMzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bFZpZGVvRWxlbWVudDIxcmVxdWVzdEV4aXRGdWxsc2NyZWVuRXYKK19fWk43V2ViQ29yZTM1V2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQyMnNlbGVjdEF1ZGlvTWVkaWFPcHRpb25F
eQorX19aTjdXZWJDb3JlMzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDIzc2V0
VmlkZW9GdWxsc2NyZWVuTGF5ZXJFUDdDQUxheWVyCitfX1pON1dlYkNvcmUzNVdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50MjRzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb25FeQorX19a
TjdXZWJDb3JlMzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDRwbGF5RXYKK19f
Wk43V2ViQ29yZTM1V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ1cGF1c2VFdgor
X19aTjdXZWJDb3JlMzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDhmYXN0U2Vl
a0VkCitfX1pON1dlYkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50QzJF
dgorX19aTjdXZWJDb3JlMzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudEQyRXYK
IF9fWk5LN1dlYkNvcmUxNkhUTUxWaWRlb0VsZW1lbnQxMHZpZGVvV2lkdGhFdgogX19aTks3V2Vi
Q29yZTE2SFRNTFZpZGVvRWxlbWVudDExdmlkZW9IZWlnaHRFdgotX19aVFZON1dlYkNvcmUzNVdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50RQotX19aVGhuP19ON1dlYkNvcmUzNVdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50MTFoYW5kbGVFdmVudEVQTlNfMjJTY3Jp
cHRFeGVjdXRpb25Db250ZXh0RVBOU181RXZlbnRFCitfX1pUaG40X043V2ViQ29yZTM1V2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQxMWhhbmRsZUV2ZW50RVBOU18yMlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRFUE5TXzVFdmVudEUKICNlbmRpZgogCiAjaWYgRU5BQkxFKFZJREVPKSAm
JiBQTEFURk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDgw
MDAwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiAxNzMxNjEpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEzNjMsOCArMTM2Myw2
IEBACiAJCTNGNDJCMzFFMTg4MTE5MUIwMDI3OEFBQyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQVZLaXQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzRjQyQjMxQzE4ODExOTFCMDAyNzhBQUMgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckFWS2l0Lm1tICovOyB9OwogCQkzRkJDNEFFQTE4OTg4MEVGMDA0NkVFMzggLyogV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDNGQkM0QUU5MTg5ODgwRUYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTNGQkM0QUVDMTg5ODgxMEUwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGQkM0QUVC
MTg5ODgxMEUwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkzRkJDNEFFRjE4OTg4
MTM4MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRkJDNEFFRDE4OTg4
MTM4MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQubW0gKi87
IH07Ci0JCTNGQkM0QUYwMTg5ODgxMzgwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bE1lZGlhRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gM0ZCQzRBRUUxODk4ODEzODAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
TWVkaWFFbGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJM0ZCQzRBRjMxODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gM0ZCQzRBRjExODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0Lm1tICovOyB9OwogCQkzRkJDNEFGNDE4OTg4MTU2MDA0NkVFMzggLyogV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDNGQkM0QUYyMTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTNGRkZGOUE4MTU5RDlBNTUwMDIwQkJENSAvKiBXZWJLaXRDU1NW
aWV3cG9ydFJ1bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gM0ZGRkY5QTYxNTlEOUE1NTAwMjBCQkQ1IC8qIFdlYktpdENTU1ZpZXdwb3J0UnVsZS5j
cHAgKi87IH07CkBAIC0yMjA5LDYgKzIyMDcsOCBAQAogCQk2NURGMzIzQzA5RDFERTY1MDAxQkUz
MjUgLyogSlNDYW52YXNQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNjVERjMyMzYwOUQxREU2NTAwMUJFMzI1IC8qIEpTQ2FudmFzUHJveHkuaCAq
LzsgfTsKIAkJNjVERjMyNjEwOUQxRTE5OTAwMEJFMzI1IC8qIFVzZXJBZ2VudFN0eWxlU2hlZXRz
RGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2
NTY1ODFBRjA5RDE0RUU2MDAwRTYxRDcgLyogVXNlckFnZW50U3R5bGVTaGVldHNEYXRhLmNwcCAq
LzsgfTsKIAkJNjVFMEU5NDQxMTMzQzg5RjAwQjRDQjEwIC8qIEpTRE9NV3JhcHBlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVFMEU5NDMxMTMzQzg5
RjAwQjRDQjEwIC8qIEpTRE9NV3JhcHBlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTY1RkQ0NjY1MTlCNTk2RjAwMDFFMkI0RCAvKiBXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNjU4NkZFM0MxOUI1NDhCRDAwNUMzQzgyIC8qIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNjVGRDQ2NjYxOUI1OTZGNjAwMUUyQjREIC8qIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU4NkZFM0QxOUI1NDhCRDAwNUMzQzgyIC8qIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tICovOyB9OwogCQk2NUZFQTg2OTA5ODMz
QURFMDBCRUQ0QUIgLyogUGFnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA2NUZFQTg2ODA5ODMzQURFMDBCRUQ0QUIgLyogUGFnZS5jcHAgKi87IH07
CiAJCTZCMzQ4MDk0MEVFRjUwRDQwMEFDMUI0MSAvKiBOYXRpdmVJbWFnZVB0ci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkIzNDgwOTIwRUVGNTBENDAw
QUMxQjQxIC8qIE5hdGl2ZUltYWdlUHRyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkM2Mzg4OTVBOTZDQ0VFNTBDOEM5NDZDIC8qIENhY2hlZFJl
c291cmNlUmVxdWVzdEluaXRpYXRvcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZDNjM4ODkzQTk2Q0NFRTUwQzhDOTQ2QyAvKiBDYWNoZWRSZXNvdXJj
ZVJlcXVlc3RJbml0aWF0b3JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTgzNjYsOCArODM2Niw2IEBACiAJCTNGNDJCMzFDMTg4MTE5MUIwMDI3
OEFBQyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
QVZLaXQubW07IHBhdGggPSBpb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzRkJDNEFFOTE4OTg4MEVGMDA0NkVFMzgg
LyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaDsgcGF0aCA9IGlvcy9XZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzRkJDNEFFQjE4OTg4
MTBFMDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS5oOyBwYXRo
ID0gaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkzRkJDNEFFRDE4OTg4MTM4MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxNZWRpYUVsZW1lbnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5h
bWUgPSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5tbTsgcGF0aCA9IGlvcy9X
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJM0ZCQzRBRUUxODk4ODEzODAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsTWVkaWFFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50Lmg7IHBhdGggPSBpb3MvV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJM0ZCQzRBRjExODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW07IHBhdGggPSBpb3MvV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNGQkM0
QUYyMTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdC5oOyBwYXRoID0gaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNGRkZGOUE2MTU5RDlBNTUwMDIwQkJE
NSAvKiBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV2ViS2l0Q1NTVmlld3BvcnRSdWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTkyNzYsNiArOTI3NCw4IEBACiAJCTY1N0VEQTA2MTM4NUNCOTcwMDRFMDY0
NSAvKiBNZW1vcnlQcmVzc3VyZUhhbmRsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNjU3RURBMDcxMzg1Q0I5NzAwNEUwNjQ1IC8qIE1lbW9yeVByZXNzdXJlSGFu
ZGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZW1vcnlQcmVzc3VyZUhh
bmRsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjU4NDM2ODUwQUUwMUI3NDAw
RTUzNzUzIC8qIEZyYW1lTG9hZFJlcXVlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEZyYW1lTG9hZFJlcXVlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NjU4NkZFM0MxOUI1NDhCRDAwNUMzQzgyIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9F
bGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50Lmg7IHBhdGggPSBpb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjU4NkZFM0Qx
OUI1NDhCRDAwNUMzQzgyIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxWaWRlb0VsZW1lbnQubW07IHBhdGggPSBpb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1OTM5MjM1
MDlBRTQzNDYwMDJDNTMxRiAvKiBVUkwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFVSTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1OTM5MjM2
MDlBRTQzNDYwMDJDNTMxRiAvKiBVUkwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFVSTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTkzOTIzOTA5QUU0MzVD
MDAyQzUzMUYgLyogVVJMTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
bGluZUVuZGluZyA9IDA7IHBhdGggPSBVUkxNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IHhjTGFuZ3VhZ2VTcGVjaWZpY2F0aW9uSWRlbnRpZmllciA9IHhjb2RlLmxhbmcub2JqY3BwOyB9
OwpAQCAtMTg0NzQsOCArMTg0NzQsOCBAQAogCQkJCTNGQkM0QUYyMTg5ODgxNTYwMDQ2RUUzOCAv
KiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oICovLAogCQkJCTNGQkM0QUYxMTg5
ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbSAqLywK
IAkJCQkzRkJDNEFFOTE4OTg4MEVGMDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwu
aCAqLywKLQkJCQkzRkJDNEFFRTE4OTg4MTM4MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxNZWRpYUVsZW1lbnQuaCAqLywKLQkJCQkzRkJDNEFFRDE4OTg4MTM4MDA0NkVFMzggLyog
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQubW0gKi8sCisJCQkJNjU4NkZFM0Mx
OUI1NDhCRDAwNUMzQzgyIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lmgg
Ki8sCisJCQkJNjU4NkZFM0QxOUI1NDhCRDAwNUMzQzgyIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50Lm1tICovLAogCQkJCUU0NTM5MDNDMEVBRkQ2MzcwMDM2OTVDOCAvKiBX
aWRnZXRJT1MubW0gKi8sCiAJCQkpOwogCQkJbmFtZSA9IGlvczsKQEAgLTI1NjEwLDYgKzI1NjEw
LDcgQEAKIAkJCQk1QTU3NEYyNTEzMURCOTM5MDA0NzFCODggLyogUmVuZGVyUXVvdGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUQ3MEFENjU4MTNFMTM0MkIwMDVCNTBCNCAvKiBSZW5kZXJSZWdpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDRTkzRjQ1MTUxN0M1NjcwMDhDQ0Y3NCAvKiBSZW5kZXJS
ZWdpb25TZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTY1RkQ0NjY1MTlCNTk2RjAwMDFFMkI0RCAv
KiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTg3MURGRTMwQTE1Mzc2QjAwQjEyQTY4IC8qIFJlbmRlclJlcGxhY2VkLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQ0E4NDZENzBEQzY3QTM1MDAyNkMzMDkgLyogUmVuZGVyUmVwbGljYS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMTQ3OUZBRUUxMDlBRTM3NTAwREVENjU1IC8qIFJlbmRlclJ1Ynku
aCBpbiBIZWFkZXJzICovLApAQCAtMjY1NDMsNyArMjY1NDQsNiBAQAogCQkJCTNGQkM0QUVDMTg5
ODgxMEUwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTNGQkM0QUY0MTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJM0ZCQzRBRUExODk4ODBFRjAwNDZF
RTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmggaW4gSGVhZGVycyAqLywKLQkJCQkzRkJD
NEFGMDE4OTg4MTM4MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1l
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUYxMjE3MUY2MTZBOENGMEIwMDAwNTNDQSAvKiBXZWJW
VFRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1RDIxQTgwMzEzRUNFNURGMDBCQjcwNjQg
LyogV2ViVlRUUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMTBCNjk4MDE0MEMxNzQwMDBC
QzFDMjYgLyogV2ViVlRUVG9rZW4uaCBpbiBIZWFkZXJzICovLApAQCAtMjc1NzMsNiArMjc1NzMs
NyBAQAogCQkJCUZEMTc2MkUzMTc2Njg2RUEwMEQ4MzZBOCAvKiBEb3duU2FtcGxlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBN0NBNTk1RTBCMjdCRDlFMDBGQTAyMUQgLyogRHJhZ0NvbnRyb2xs
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcxODc4OTAwQjJEMDRBQzAwQTE2RUNFIC8qIERy
YWdDb250cm9sbGVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNjVGRDQ2NjYxOUI1OTZGNjAw
MUUyQjREIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTc5NTQ2NDMwQjVDNENCNDAwN0I0MzhGIC8qIERyYWdEYXRhLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE3OTU0NjNFMEI1QzRDODAwMDdCNDM4RiAvKiBEcmFnRGF0YU1hYy5t
bSBpbiBTb3VyY2VzICovLAogCQkJCUE3Q0ZCM0QxMEI3RUQxMEEwMDcwQzMyRCAvKiBEcmFnSW1h
Z2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yOTgyMiw3ICsyOTgyMyw2IEBACiAJCQkJQ0Q4MjAz
MEQxMzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xs
ZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQk3QzczRkIwQzE5MUVGNUE4MDA3REUwNjEgLyogSlNV
c2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTNGQkM0
QUYzMTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5t
bSBpbiBTb3VyY2VzICovLAotCQkJCTNGQkM0QUVGMTg5ODgxMzgwMDQ2RUUzOCAvKiBXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUYxMjE3
MUY1MTZBOENFRDIwMDAwNTNDQSAvKiBXZWJWVFRFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTVEMjFBODAyMTNFQ0U1REYwMEJCNzA2NCAvKiBXZWJWVFRQYXJzZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQjEwQjY5ODExNDBDMTc0MDAwQkMxQzI2IC8qIFdlYlZUVFRva2VuaXplci5j
cHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmNwcAkocmV2aXNpb24gMTczMTYxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVk
aWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA1LDcgKzMwNSw3IEBAIEhUTUxNZWRp
YUVsZW1lbnQ6OkhUTUxNZWRpYUVsZW1lbnQoY29uc3QKICAgICAsIG1fc2VudEVuZEV2ZW50KGZh
bHNlKQogICAgICwgbV9wYXVzZWRJbnRlcm5hbChmYWxzZSkKICAgICAsIG1fc2VuZFByb2dyZXNz
RXZlbnRzKHRydWUpCi0gICAgLCBtX2lzRnVsbHNjcmVlbihmYWxzZSkKKyAgICAsIG1faXNJblZp
ZGVvRnVsbHNjcmVlbihmYWxzZSkKICAgICAsIG1fY2xvc2VkQ2FwdGlvbnNWaXNpYmxlKGZhbHNl
KQogICAgICwgbV93ZWJraXRMZWdhY3lDbG9zZWRDYXB0aW9uT3ZlcnJpZGUoZmFsc2UpCiAgICAg
LCBtX2NvbXBsZXRlbHlMb2FkZWQoZmFsc2UpCkBAIC02ODIsNyArNjgyLDcgQEAgdm9pZCBIVE1M
TWVkaWFFbGVtZW50OjpyZW1vdmVkRnJvbShDb250YQogICAgICAgICAgICAgbWVkaWFDb250cm9s
cygpLT5oaWRlKCk7CiAgICAgICAgIGlmIChtX25ldHdvcmtTdGF0ZSA+IE5FVFdPUktfRU1QVFkp
CiAgICAgICAgICAgICBwYXVzZSgpOwotICAgICAgICBpZiAobV9pc0Z1bGxzY3JlZW4pCisgICAg
ICAgIGlmIChtX2lzSW5WaWRlb0Z1bGxzY3JlZW4pCiAgICAgICAgICAgICBleGl0RnVsbHNjcmVl
bigpOwogCiAgICAgICAgIGlmIChtX3BsYXllcikgewpAQCAtNDY0Nyw3ICs0NjQ3LDcgQEAgYm9v
bCBIVE1MTWVkaWFFbGVtZW50OjpjYW5TdXNwZW5kKCkgY29ucwogdm9pZCBIVE1MTWVkaWFFbGVt
ZW50OjpzdG9wKCkKIHsKICAgICBMT0coTWVkaWEsICJIVE1MTWVkaWFFbGVtZW50OjpzdG9wIik7
Ci0gICAgaWYgKG1faXNGdWxsc2NyZWVuKQorICAgIGlmIChtX2lzSW5WaWRlb0Z1bGxzY3JlZW4p
CiAgICAgICAgIGV4aXRGdWxsc2NyZWVuKCk7CiAgICAgCiAgICAgbV9pbkFjdGl2ZURvY3VtZW50
ID0gZmFsc2U7CkBAIC00NzQxLDcgKzQ3NDEsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnZp
c2liaWxpdHlTdGF0ZUNoCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogYm9vbCBIVE1MTWVkaWFF
bGVtZW50OjpyZXF1aXJlc1RleHRUcmFja1JlcHJlc2VudGF0aW9uKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gbV9pc0Z1bGxzY3JlZW4gJiYgbV9wbGF5ZXIgPyBtX3BsYXllci0+cmVxdWlyZXNUZXh0
VHJhY2tSZXByZXNlbnRhdGlvbigpIDogZmFsc2U7CisgICAgcmV0dXJuIG1faXNJblZpZGVvRnVs
bHNjcmVlbiAmJiBtX3BsYXllciA/IG1fcGxheWVyLT5yZXF1aXJlc1RleHRUcmFja1JlcHJlc2Vu
dGF0aW9uKCkgOiBmYWxzZTsKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRUZXh0VHJh
Y2tSZXByZXNlbnRhdGlvbihUZXh0VHJhY2tSZXByZXNlbnRhdGlvbiogcmVwcmVzZW50YXRpb24p
CkBAIC00ODMzLDcgKzQ4MzMsNyBAQCBkb3VibGUgSFRNTE1lZGlhRWxlbWVudDo6bWF4RmFzdEZv
cndhcmRSCiAgICAgCiBib29sIEhUTUxNZWRpYUVsZW1lbnQ6OmlzRnVsbHNjcmVlbigpIGNvbnN0
CiB7Ci0gICAgaWYgKG1faXNGdWxsc2NyZWVuKQorICAgIGlmIChtX2lzSW5WaWRlb0Z1bGxzY3Jl
ZW4pCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQ
SSkKQEAgLTQ4NTcsNyArNDg1Nyw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dG9nZ2xlRnVs
bHNjcmVlblMKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZW50ZXJGdWxsc2NyZWVuKCkKIHsKICAg
ICBMT0coTWVkaWEsICJIVE1MTWVkaWFFbGVtZW50OjplbnRlckZ1bGxzY3JlZW4iKTsKLSAgICBp
ZiAobV9pc0Z1bGxzY3JlZW4pCisgICAgaWYgKG1faXNJblZpZGVvRnVsbHNjcmVlbikKICAgICAg
ICAgcmV0dXJuOwogCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQpAQCAtNDg2NywxMiArNDg2
NywxMyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmVudGVyRnVsbHNjcmVlbigpCiAgICAgfQog
I2VuZGlmCiAKLSAgICBtX2lzRnVsbHNjcmVlbiA9IHRydWU7CisgICAgbV9pc0luVmlkZW9GdWxs
c2NyZWVuID0gdHJ1ZTsKICAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQogICAgICAgICBtZWRp
YUNvbnRyb2xzKCktPmVudGVyZWRGdWxsc2NyZWVuKCk7Ci0gICAgaWYgKGRvY3VtZW50KCkucGFn
ZSgpKSB7Ci0gICAgICAgIGlmIChkb2N1bWVudCgpLnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50KCku
c3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZSh0aGlzKSkgewotICAgICAgICAgICAgZG9jdW1lbnQo
KS5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLmVudGVyRnVsbHNjcmVlbkZvck5vZGUodGhpcyk7
CisgICAgaWYgKGRvY3VtZW50KCkucGFnZSgpICYmIGlzSFRNTFZpZGVvRWxlbWVudCh0aGlzKSkg
eworICAgICAgICBIVE1MVmlkZW9FbGVtZW50KiBhc1ZpZGVvID0gdG9IVE1MVmlkZW9FbGVtZW50
KHRoaXMpOworICAgICAgICBpZiAoZG9jdW1lbnQoKS5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgp
LnN1cHBvcnRzVmlkZW9GdWxsc2NyZWVuKCkpIHsKKyAgICAgICAgICAgIGRvY3VtZW50KCkucGFn
ZSgpLT5jaHJvbWUoKS5jbGllbnQoKS5lbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVu
dChhc1ZpZGVvKTsKICAgICAgICAgICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1lcygpLndlYmtp
dGJlZ2luZnVsbHNjcmVlbkV2ZW50KTsKICAgICAgICAgfQogICAgIH0KQEAgLTQ4ODksMTYgKzQ4
OTAsMTYgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpleGl0RnVsbHNjcmVlbigpCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAjZW5kaWYKLSAgICBBU1NFUlQobV9pc0Z1bGxzY3JlZW4pOwotICAg
IG1faXNGdWxsc2NyZWVuID0gZmFsc2U7CisgICAgQVNTRVJUKG1faXNJblZpZGVvRnVsbHNjcmVl
bik7CisgICAgbV9pc0luVmlkZW9GdWxsc2NyZWVuID0gZmFsc2U7CiAgICAgaWYgKGhhc01lZGlh
Q29udHJvbHMoKSkKICAgICAgICAgbWVkaWFDb250cm9scygpLT5leGl0ZWRGdWxsc2NyZWVuKCk7
Ci0gICAgaWYgKGRvY3VtZW50KCkucGFnZSgpKSB7CisgICAgaWYgKGRvY3VtZW50KCkucGFnZSgp
ICYmIGlzSFRNTFZpZGVvRWxlbWVudCh0aGlzKSkgewogICAgICAgICBpZiAobV9tZWRpYVNlc3Np
b24tPnJlcXVpcmVzRnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2soKnRoaXMpKQogICAgICAgICAg
ICAgcGF1c2VJbnRlcm5hbCgpOwogCi0gICAgICAgIGlmIChkb2N1bWVudCgpLnBhZ2UoKS0+Y2hy
b21lKCkuY2xpZW50KCkuc3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZSh0aGlzKSkgewotICAgICAg
ICAgICAgZG9jdW1lbnQoKS5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLmV4aXRGdWxsc2NyZWVu
Rm9yTm9kZSh0aGlzKTsKKyAgICAgICAgaWYgKGRvY3VtZW50KCkucGFnZSgpLT5jaHJvbWUoKS5j
bGllbnQoKS5zdXBwb3J0c1ZpZGVvRnVsbHNjcmVlbigpKSB7CisgICAgICAgICAgICBkb2N1bWVu
dCgpLnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50KCkuZXhpdFZpZGVvRnVsbHNjcmVlbigpOwogICAg
ICAgICAgICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVzKCkud2Via2l0ZW5kZnVsbHNjcmVlbkV2
ZW50KTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1l
ZGlhRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlh
RWxlbWVudC5oCShyZXZpc2lvbiAxNzMxNjEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
ZWRpYUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtODE2LDcgKzgxNiw3IEBAIHByaXZhdGU6
CiAgICAgLy8gc3VwcG9ydCBwcm9ncmVzcyBldmVudHMgc28gc2V0dGluZyBtX3NlbmRQcm9ncmVz
c0V2ZW50cyBkaXNhYmxlcyB0aGVtIAogICAgIGJvb2wgbV9zZW5kUHJvZ3Jlc3NFdmVudHMgOiAx
OwogCi0gICAgYm9vbCBtX2lzRnVsbHNjcmVlbiA6IDE7CisgICAgYm9vbCBtX2lzSW5WaWRlb0Z1
bGxzY3JlZW4gOiAxOwogICAgIGJvb2wgbV9jbG9zZWRDYXB0aW9uc1Zpc2libGUgOiAxOwogICAg
IGJvb2wgbV93ZWJraXRMZWdhY3lDbG9zZWRDYXB0aW9uT3ZlcnJpZGUgOiAxOwogICAgIGJvb2wg
bV9jb21wbGV0ZWx5TG9hZGVkIDogMTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZp
ZGVvRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlk
ZW9FbGVtZW50LmNwcAkocmV2aXNpb24gMTczMTYxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MVmlkZW9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU3LDcgKzE1Nyw3IEBAIGJv
b2wgSFRNTFZpZGVvRWxlbWVudDo6c3VwcG9ydHNGdWxsc2NyZWUKICAgICBpZiAoIXBsYXllcigp
LT5oYXNWaWRlbygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gcGFnZS0+
Y2hyb21lKCkuY2xpZW50KCkuc3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZSh0aGlzKTsKKyAgICBy
ZXR1cm4gcGFnZS0+Y2hyb21lKCkuY2xpZW50KCkuc3VwcG9ydHNWaWRlb0Z1bGxzY3JlZW4oKTsK
ICNlbmRpZiAvLyBQTEFURk9STShJT1MpCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
Q2hyb21lQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVD
bGllbnQuaAkocmV2aXNpb24gMTczMTYxKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVD
bGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzM5LDkgKzMzOSw5IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIEdyYXBoaWNzRGV2aWNlQWRhcHRlciogZ3JhcGhpY3NEZXZpY2VBZGFwdGVyKCkgY29u
c3QgeyByZXR1cm4gMDsgfQogI2VuZGlmCiAKLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGdWxs
c2NyZWVuRm9yTm9kZShjb25zdCBOb2RlKikgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgZW50ZXJGdWxsc2NyZWVuRm9yTm9kZShOb2RlKikgeyB9Ci0gICAgdmlydHVhbCB2b2lk
IGV4aXRGdWxsc2NyZWVuRm9yTm9kZShOb2RlKikgeyB9CisgICAgdmlydHVhbCBib29sIHN1cHBv
cnRzVmlkZW9GdWxsc2NyZWVuKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
ZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoSFRNTFZpZGVvRWxlbWVudCopIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBleGl0VmlkZW9GdWxsc2NyZWVuKCkgeyB9CiAgICAgdmlydHVh
bCBib29sIHJlcXVpcmVzRnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2soKSB7IHJldHVybiBmYWxz
ZTsgfSAKIAogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckFWS2l0LmgJKHJldmlzaW9uIDE3MzE2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQuaAkod29ya2luZyBjb3B5
KQpAQCAtMjgsMTMgKzI4LDEzIEBACiAKICNpZiBQTEFURk9STShJT1MpCiAKLSNpbXBvcnQgPFdl
YkNvcmUvSFRNTE1lZGlhRWxlbWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9IVE1MVmlkZW9FbGVt
ZW50Lmg+CiAKIE9CSkNfQ0xBU1MgVUlWaWV3OwogCiBAaW50ZXJmYWNlIFdlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXIgOiBOU09iamVjdAotLSAodm9pZClzZXRNZWRpYUVsZW1lbnQ6KFdlYkNv
cmU6OkhUTUxNZWRpYUVsZW1lbnQqKW1lZGlhRWxlbWVudDsKLS0gKFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnQqKW1lZGlhRWxlbWVudDsKKy0gKHZvaWQpc2V0VmlkZW9FbGVtZW50OihXZWJDb3Jl
OjpIVE1MVmlkZW9FbGVtZW50Kil2aWRlb0VsZW1lbnQ7CistIChXZWJDb3JlOjpIVE1MVmlkZW9F
bGVtZW50Kil2aWRlb0VsZW1lbnQ7CiAtICh2b2lkKWVudGVyRnVsbHNjcmVlbjooVUlWaWV3ICop
dmlldzsKIC0gKHZvaWQpZXhpdEZ1bGxzY3JlZW47CiAtICh2b2lkKXJlcXVlc3RIaWRlQW5kRXhp
dEZ1bGxzY3JlZW47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW0JKHJldmlz
aW9uIDE3MzE2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQVZLaXQubW0JKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAK
IAogI2ltcG9ydCAiTG9nZ2luZy5oIgogI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50
LmgiCisjaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oIgogI2lt
cG9ydCA8UXVhcnR6Q29yZS9Db3JlQW5pbWF0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNv
cmVUaHJlYWRSdW4uaD4KIApAQCAtNDAsMTIgKzQwLDEyIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogI2lmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEIDwgODAwMDAKIAogQGlt
cGxlbWVudGF0aW9uIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIKLS0gKHZvaWQpc2V0TWVk
aWFFbGVtZW50OihXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50KiltZWRpYUVsZW1lbnQKKy0gKHZv
aWQpc2V0VmlkZW9FbGVtZW50OihXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50Kil2aWRlb0VsZW1l
bnQKIHsKLSAgICBVTlVTRURfUEFSQU0obWVkaWFFbGVtZW50KTsKKyAgICBVTlVTRURfUEFSQU0o
dmlkZW9FbGVtZW50KTsKIH0KIAotLSAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCopbWVkaWFF
bGVtZW50CistIChXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50Kil2aWRlb0VsZW1lbnQKIHsKICAg
ICByZXR1cm4gbnVsbHB0cjsKIH0KQEAgLTgxLDkgKzgxLDkgQEAgcHVibGljOgogCiBAaW1wbGVt
ZW50YXRpb24gV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlcgogewotICAgIFJlZlB0cjxIVE1M
TWVkaWFFbGVtZW50PiBfbWVkaWFFbGVtZW50OworICAgIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50
PiBfdmlkZW9FbGVtZW50OwogICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdD4gX2ludGVyZmFjZTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRp
YUVsZW1lbnQ+IF9tb2RlbDsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRl
b0VsZW1lbnQ+IF9tb2RlbDsKICAgICBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ2hhbmdl
T2JzZXJ2ZXIgX2NoYW5nZU9ic2VydmVyOwogICAgIFJldGFpblB0cjxQbGF0Zm9ybUxheWVyPiBf
dmlkZW9GdWxsc2NyZWVuTGF5ZXI7CiB9CkBAIC0xMDAsMTggKzEwMCwxOCBAQCAtIChpbnN0YW5j
ZXR5cGUpaW5pdAogCiAtICh2b2lkKWRlYWxsb2MKIHsKLSAgICBfbWVkaWFFbGVtZW50ID0gbnVs
bHB0cjsKKyAgICBfdmlkZW9FbGVtZW50ID0gbnVsbHB0cjsKICAgICBbc3VwZXIgZGVhbGxvY107
CiB9CiAKLS0gKHZvaWQpc2V0TWVkaWFFbGVtZW50OihIVE1MTWVkaWFFbGVtZW50KiltZWRpYUVs
ZW1lbnQKKy0gKHZvaWQpc2V0VmlkZW9FbGVtZW50OihIVE1MVmlkZW9FbGVtZW50Kil2aWRlb0Vs
ZW1lbnQKIHsKLSAgICBfbWVkaWFFbGVtZW50ID0gbWVkaWFFbGVtZW50OworICAgIF92aWRlb0Vs
ZW1lbnQgPSB2aWRlb0VsZW1lbnQ7CiB9CiAKLS0gKEhUTUxNZWRpYUVsZW1lbnQqKW1lZGlhRWxl
bWVudAorLSAoSFRNTFZpZGVvRWxlbWVudCopdmlkZW9FbGVtZW50CiB7Ci0gICAgcmV0dXJuIF9t
ZWRpYUVsZW1lbnQuZ2V0KCk7CisgICAgcmV0dXJuIF92aWRlb0VsZW1lbnQuZ2V0KCk7CiB9CiAK
IC0gKHZvaWQpZW50ZXJGdWxsc2NyZWVuOihVSVZpZXcgKil2aWV3CkBAIC0xMjAsMTcgKzEyMCwx
NyBAQCAtICh2b2lkKWVudGVyRnVsbHNjcmVlbjooVUlWaWV3ICopdmlldwogICAgIAogICAgIF9p
bnRlcmZhY2UgPSBhZG9wdFJlZihuZXcgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQp
OwogICAgIF9pbnRlcmZhY2UtPnNldFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKCZf
Y2hhbmdlT2JzZXJ2ZXIpOwotICAgIF9tb2RlbCA9IGFkb3B0UmVmKG5ldyBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbE1lZGlhRWxlbWVudCk7CisgICAgX21vZGVsID0gYWRvcHRSZWYobmV3IFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KTsKICAgICBfbW9kZWwtPnNldFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZShfaW50ZXJmYWNlLmdldCgpKTsKICAgICBfaW50ZXJmYWNlLT5z
ZXRXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbChfbW9kZWwuZ2V0KCkpOwotICAgIF9tb2RlbC0+c2V0
TWVkaWFFbGVtZW50KF9tZWRpYUVsZW1lbnQuZ2V0KCkpOworICAgIF9tb2RlbC0+c2V0VmlkZW9F
bGVtZW50KF92aWRlb0VsZW1lbnQuZ2V0KCkpOwogICAgIF92aWRlb0Z1bGxzY3JlZW5MYXllciA9
IFtDQUxheWVyIGxheWVyXTsKLSAgICBfaW50ZXJmYWNlLT5zZXR1cEZ1bGxzY3JlZW4oKl92aWRl
b0Z1bGxzY3JlZW5MYXllci5nZXQoKSwgX21lZGlhRWxlbWVudC0+Y2xpZW50UmVjdCgpLCB2aWV3
KTsKKyAgICBfaW50ZXJmYWNlLT5zZXR1cEZ1bGxzY3JlZW4oKl92aWRlb0Z1bGxzY3JlZW5MYXll
ci5nZXQoKSwgX3ZpZGVvRWxlbWVudC0+Y2xpZW50UmVjdCgpLCB2aWV3KTsKIH0KIAogLSAodm9p
ZClleGl0RnVsbHNjcmVlbgogewotICAgIF9pbnRlcmZhY2UtPmV4aXRGdWxsc2NyZWVuKF9tZWRp
YUVsZW1lbnQtPnNjcmVlblJlY3QoKSk7CisgICAgX2ludGVyZmFjZS0+ZXhpdEZ1bGxzY3JlZW4o
X3ZpZGVvRWxlbWVudC0+c2NyZWVuUmVjdCgpKTsKIH0KIAogLSAodm9pZClyZXF1ZXN0SGlkZUFu
ZEV4aXRGdWxsc2NyZWVuCkBAIC0xNjMsNyArMTYzLDcgQEAgLSAodm9pZClkaWRDbGVhbnVwRnVs
bHNjcmVlbgogICAgICAgICBfbW9kZWwtPnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKG5pbCk7CiAg
ICAgICAgIF9pbnRlcmZhY2UtPnNldFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKG51bGxwdHIpOwog
ICAgICAgICBfbW9kZWwtPnNldFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZShudWxscHRyKTsK
LSAgICAgICAgX21vZGVsLT5zZXRNZWRpYUVsZW1lbnQobnVsbHB0cik7CisgICAgICAgIF9tb2Rl
bC0+c2V0VmlkZW9FbGVtZW50KG51bGxwdHIpOwogICAgICAgICBfaW50ZXJmYWNlLT5zZXRXZWJW
aWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcihudWxscHRyKTsKICAgICAgICAgX21vZGVsID0g
bnVsbHB0cjsKICAgICAgICAgX2ludGVyZmFjZSA9IG51bGxwdHI7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZS5oCShyZXZpc2lvbiAxNzMxNjEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDkgKzUw
LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRWaWRlb0RpbWVuc2lvbnMoYm9vbCBo
YXNWaWRlbywgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXRTZWVrYWJsZVJhbmdlcyhjb25zdCBUaW1lUmFuZ2VzJikgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCBzZXRDYW5QbGF5RmFzdFJldmVyc2UoYm9vbCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBz
ZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgb3B0aW9u
cywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRMZWdp
YmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBvcHRpb25zLCB1
aW50NjRfdCBzZWxlY3RlZEluZGV4KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldEV4dGVybmFs
UGxheWJhY2soYm9vbCBlbmFibGVkLCBFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgU3RyaW5n
IGxvY2FsaXplZERldmljZU5hbWUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QXVkaW9NZWRp
YVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPFdURjo6U3RyaW5nPiYgb3B0aW9ucywgdWlu
dDY0X3Qgc2VsZWN0ZWRJbmRleCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRMZWdpYmxlTWVk
aWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZlY3RvcjxXVEY6OlN0cmluZz4mIG9wdGlvbnMsIHVp
bnQ2NF90IHNlbGVjdGVkSW5kZXgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RXh0ZXJuYWxQ
bGF5YmFjayhib29sIGVuYWJsZWQsIEV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBXVEY6OlN0
cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKSA9IDA7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQuaAkocmV2aXNpb24gMTczMTYxKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDcgKzMwLDYgQEAKICNpZiBQTEFURk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZF
UlNJT05fTUlOX1JFUVVJUkVEID49IDgwMDAwCiAKICNpbmNsdWRlIDxXZWJDb3JlL0V2ZW50TGlz
dGVuZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0hUTUxNZWRpYUVsZW1lbnQuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1BsYXRmb3JtTGF5ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1dlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTQ0LDcgKzQz
LDEyIEBAIE9CSkNfQ0xBU1MgVUlWaWV3OwogT0JKQ19DTEFTUyBDQUxheWVyOwogT0JKQ19DTEFT
UyBXZWJBVlZpZGVvTGF5ZXI7CiAKK25hbWVzcGFjZSBXVEYgeworY2xhc3MgU3RyaW5nOworfQor
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBJbnRSZWN0OwogY2xhc3MgV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWw7CiAgICAgCiBjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZl
ciB7CkBAIC01NSw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkRXhpdEZ1
bGxzY3JlZW4oKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZENsZWFudXBGdWxsc2NyZWVuKCkg
PSAwOwogfTsKLSAgICAKKwogY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQK
ICAgICA6IHB1YmxpYyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UKICAgICAsIHB1YmxpYyBS
ZWZDb3VudGVkPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiB7CkBAIC04OCwxMyAr
OTIsMTMgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXRWaWRl
b0RpbWVuc2lvbnMoYm9vbCBoYXNWaWRlbywgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkgb3Zl
cnJpZGU7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNldFNlZWthYmxlUmFuZ2Vz
KGNvbnN0IFRpbWVSYW5nZXMmKSBvdmVycmlkZTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IHZvaWQgc2V0Q2FuUGxheUZhc3RSZXZlcnNlKGJvb2wpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgdm9pZCBzZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyhjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgb3ZlcnJpZGU7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNldExlZ2libGVNZWRpYVNlbGVjdGlv
bk9wdGlvbnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVk
SW5kZXgpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXRFeHRl
cm5hbFBsYXliYWNrKGJvb2wgZW5hYmxlZCwgRXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIFN0
cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIHZvaWQgc2V0QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPFdU
Rjo6U3RyaW5nPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgb3ZlcnJpZGU7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9w
dGlvbnMoY29uc3QgVmVjdG9yPFdURjo6U3RyaW5nPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0
ZWRJbmRleCkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNldEV4
dGVybmFsUGxheWJhY2soYm9vbCBlbmFibGVkLCBFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwg
V1RGOjpTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSkgb3ZlcnJpZGU7CiAKLSAgICBXRUJDT1JF
X0VYUE9SVCB2aXJ0dWFsIHZvaWQgc2V0dXBGdWxsc2NyZWVuKFBsYXRmb3JtTGF5ZXImLCBXZWJD
b3JlOjpJbnRSZWN0IGluaXRpYWxSZWN0LCBVSVZpZXcgKik7CisgICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCB2b2lkIHNldHVwRnVsbHNjcmVlbihQbGF0Zm9ybUxheWVyJiwgSW50UmVjdCBpbml0
aWFsUmVjdCwgVUlWaWV3ICopOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBlbnRl
ckZ1bGxzY3JlZW4oKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxz
Y3JlZW4oV2ViQ29yZTo6SW50UmVjdCBmaW5hbFJlY3QpOworICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgdm9pZCBleGl0RnVsbHNjcmVlbihJbnRSZWN0IGZpbmFsUmVjdCk7CiAgICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB2b2lkIGNsZWFudXBGdWxsc2NyZWVuKCk7CiAgICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB2b2lkIGludmFsaWRhdGUoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIHZvaWQgcmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdC5tbQkocmV2aXNpb24gMTczMTYxKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tCSh3b3JraW5n
IGNvcHkpCkBAIC00OCw2ICs0OCw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVUaHJlYWRS
dW4uaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50LmgJKHJldmlz
aW9uIDE3MzE2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDkyICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0KLSNpZm5kZWYg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnRfaAotI2RlZmluZSBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudF9oCi0KLSNpZiBQTEFURk9STShJT1MpCi0KLSNpbmNs
dWRlIDxXZWJDb3JlL0V2ZW50TGlzdGVuZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVj
dC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1MYXllci5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgSFRNTE1lZGlhRWxlbWVudDsKLWNsYXNzIFRleHRUcmFj
azsKLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZTsKLQotY2xhc3MgV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQgOiBwdWJsaWMgV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWwsIHB1YmxpYyBFdmVudExpc3RlbmVyIHsKLXB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudCgpOwotICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50KCk7Ci0gICAgdm9p
ZCBzZXRXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlKiBpbnRlcmZhY2UpIHttX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSA9IGludGVyZmFjZTt9
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRNZWRpYUVsZW1lbnQoSFRNTE1lZGlhRWxlbWVu
dCopOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIoUGxh
dGZvcm1MYXllciopOwotICAgIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBoYW5k
bGVFdmVudChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29yZTo6RXZlbnQq
KSBvdmVycmlkZTsKLSAgICB2b2lkIHVwZGF0ZUZvckV2ZW50TmFtZShjb25zdCBXVEY6OkF0b21p
Y1N0cmluZyYpOwotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBFdmVudExpc3RlbmVyJiByaHMp
IG92ZXJyaWRlCi0gICAgICAgIHtyZXR1cm4gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RXZlbnRMaXN0
ZW5lcio+KHRoaXMpID09ICZyaHM7fQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lk
IHBsYXkoKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcGF1c2Uo
KSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgdG9nZ2xlUGxheVN0
YXRlKCkgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGJlZ2luU2Ny
dWJiaW5nKCkgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGVuZFNj
cnViYmluZygpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZWVr
VG9UaW1lKGRvdWJsZSB0aW1lKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IHZvaWQgZmFzdFNlZWsoZG91YmxlIHRpbWUpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgdm9pZCBiZWdpblNjYW5uaW5nRm9yd2FyZCgpIG92ZXJyaWRlOwotICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBiZWdpblNjYW5uaW5nQmFja3dhcmQoKSBvdmVycmlkZTsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZW5kU2Nhbm5pbmcoKSBvdmVycmlkZTsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcmVxdWVzdEV4aXRGdWxsc2NyZWVuKCkg
b3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNldFZpZGVvTGF5ZXJG
cmFtZShGbG9hdFJlY3QpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9p
ZCBzZXRWaWRlb0xheWVyR3Jhdml0eShXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2
aXR5KSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc2VsZWN0QXVk
aW9NZWRpYU9wdGlvbih1aW50NjRfdCBpbmRleCkgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB2b2lkIHNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBpbmRleCkg
b3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIGNvbnN0IFZlY3RvcjxXVEY6OkF0b21p
Y1N0cmluZz4mIG9ic2VydmVkRXZlbnROYW1lcygpOwotICAgIGNvbnN0IFdURjo6QXRvbWljU3Ry
aW5nJiBldmVudE5hbWVBbGwoKTsKLSAgICAKLSAgICBSZWZQdHI8SFRNTE1lZGlhRWxlbWVudD4g
bV9tZWRpYUVsZW1lbnQ7Ci0gICAgUmV0YWluUHRyPFBsYXRmb3JtTGF5ZXI+IG1fdmlkZW9GdWxs
c2NyZWVuTGF5ZXI7Ci0gICAgYm9vbCBtX2lzTGlzdGVuaW5nOwotICAgIFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZSogbV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U7Ci0gICAgRmxvYXRSZWN0
IG1fdmlkZW9GcmFtZTsKLSAgICBWZWN0b3I8UmVmUHRyPFRleHRUcmFjaz4+IG1fbGVnaWJsZVRy
YWNrc0Zvck1lbnU7Ci0KLSAgICB2b2lkIHVwZGF0ZUxlZ2libGVPcHRpb25zKCk7Ci19OwotCi19
Ci0KLSNlbmRpZgotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9X
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1l
bnQubW0JKHJldmlzaW9uIDE3MzE2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9X
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAt
MSwzODUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotCi0jaWYgUExBVEZPUk0oSU9TKQotCi0jaW1wb3J0ICJX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5oIgotCi0jaW1wb3J0ICJET01FdmVu
dEludGVybmFsLmgiCi0jaW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1wb3J0ICJNZWRpYUNvbnRyb2xz
SG9zdC5oIgotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLmgiCi0jaW1wb3J0
IDxXZWJDb3JlL0RPTUV2ZW50TGlzdGVuZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRXZlbnQuaD4K
LSNpbXBvcnQgPFdlYkNvcmUvRXZlbnRMaXN0ZW5lci5oPgotI2ltcG9ydCA8V2ViQ29yZS9FdmVu
dE5hbWVzLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0hUTUxFbGVtZW50Lmg+Ci0jaW1wb3J0IDxXZWJD
b3JlL0hUTUxNZWRpYUVsZW1lbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvSFRNTFZpZGVvRWxlbWVu
dC5oPgotI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1BhZ2VHcm91
cC5oPgotI2ltcG9ydCA8V2ViQ29yZS9Tb2Z0TGlua2luZy5oPgotI2ltcG9ydCA8V2ViQ29yZS9U
ZXh0VHJhY2tMaXN0Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1RpbWVSYW5nZXMuaD4KLSNpbXBvcnQg
PFdlYkNvcmUvV2ViQ29yZVRocmVhZFJ1bi5oPgotI2ltcG9ydCA8UXVhcnR6Q29yZS9Db3JlQW5p
bWF0aW9uLmg+Ci0jaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbXBvcnQgPHd0Zi9S
ZXRhaW5QdHIuaD4KLQotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVt
ZW50KCkKLSAgICA6IEV2ZW50TGlzdGVuZXIoRXZlbnRMaXN0ZW5lcjo6Q1BQRXZlbnRMaXN0ZW5l
clR5cGUpCi0gICAgLCBtX2lzTGlzdGVuaW5ne2ZhbHNlfQotewotfQotCi1XZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6fldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVt
ZW50KCkKLXsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6
c2V0TWVkaWFFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKLXsKLSAgICBp
ZiAobV9tZWRpYUVsZW1lbnQgPT0gbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAobV9tZWRpYUVsZW1lbnQgJiYgbV9pc0xpc3RlbmluZykgewotICAgICAgICBmb3IgKGF1
dG8gZXZlbnROYW1lIDogb2JzZXJ2ZWRFdmVudE5hbWVzKCkpCi0gICAgICAgICAgICBtX21lZGlh
RWxlbWVudC0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIHRoaXMsIGZhbHNlKTsKLSAg
ICB9Ci0gICAgbV9pc0xpc3RlbmluZyA9IGZhbHNlOwotCi0gICAgbV9tZWRpYUVsZW1lbnQgPSBt
ZWRpYUVsZW1lbnQ7Ci0KLSAgICBpZiAoIW1fbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm47
Ci0KLSAgICBmb3IgKGF1dG8gZXZlbnROYW1lIDogb2JzZXJ2ZWRFdmVudE5hbWVzKCkpCi0gICAg
ICAgIG1fbWVkaWFFbGVtZW50LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgdGhpcywgZmFs
c2UpOwotICAgIG1faXNMaXN0ZW5pbmcgPSB0cnVlOwotCi0gICAgdXBkYXRlRm9yRXZlbnROYW1l
KGV2ZW50TmFtZUFsbCgpKTsKLQotICAgIGlmIChpc0hUTUxWaWRlb0VsZW1lbnQobV9tZWRpYUVs
ZW1lbnQuZ2V0KCkpKSB7Ci0gICAgICAgIEhUTUxWaWRlb0VsZW1lbnQgKnZpZGVvRWxlbWVudCA9
IHRvSFRNTFZpZGVvRWxlbWVudChtX21lZGlhRWxlbWVudC5nZXQoKSk7Ci0gICAgICAgIG1fdmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRWaWRlb0RpbWVuc2lvbnModHJ1ZSwgdmlkZW9FbGVt
ZW50LT52aWRlb1dpZHRoKCksIHZpZGVvRWxlbWVudC0+dmlkZW9IZWlnaHQoKSk7Ci0gICAgfSBl
bHNlCi0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRWaWRlb0RpbWVuc2lv
bnMoZmFsc2UsIDAsIDApOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFF
bGVtZW50OjpoYW5kbGVFdmVudChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2Vi
Q29yZTo6RXZlbnQqIGV2ZW50KQotewotICAgIExPRyhNZWRpYSwgImhhbmRsZUV2ZW50ICVzIiwg
ZXZlbnQtPnR5cGUoKS5jaGFyYWN0ZXJzOCgpKTsKLSAgICB1cGRhdGVGb3JFdmVudE5hbWUoZXZl
bnQtPnR5cGUoKSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1l
bnQ6OnVwZGF0ZUZvckV2ZW50TmFtZShjb25zdCBXVEY6OkF0b21pY1N0cmluZyYgZXZlbnROYW1l
KQotewotICAgIGlmICghbV9tZWRpYUVsZW1lbnQgfHwgIW1fdmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYm9vbCBhbGwgPSBldmVudE5hbWUgPT0g
ZXZlbnROYW1lQWxsKCk7Ci0KLSAgICBpZiAoYWxsCi0gICAgICAgIHx8IGV2ZW50TmFtZSA9PSBl
dmVudE5hbWVzKCkuZHVyYXRpb25jaGFuZ2VFdmVudCkgewotICAgICAgICBtX3ZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZS0+c2V0RHVyYXRpb24obV9tZWRpYUVsZW1lbnQtPmR1cmF0aW9uKCkpOwot
ICAgICAgICAvLyBUaGVzZSBpcyBubyBzdGFuZGFyZCBldmVudCBmb3IgbWluRmFzdFJldmVyc2VS
YXRlQ2hhbmdlOyBkdXJhdGlvbiBjaGFuZ2UgaXMgYSByZWFzb25hYmxlIHByb3h5IGZvciBpdC4K
LSAgICAgICAgLy8gSXQgaGFwcGVucyBldmVyeSB0aW1lIGEgbmV3IGl0ZW0gYmVjb21lcyByZWFk
eSB0byBwbGF5LgotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0Q2FuUGxh
eUZhc3RSZXZlcnNlKG1fbWVkaWFFbGVtZW50LT5taW5GYXN0UmV2ZXJzZVJhdGUoKSA8IDAuMCk7
Ci0gICAgfQotCi0gICAgaWYgKGFsbAotICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1l
cygpLnBhdXNlRXZlbnQKLSAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5wbGF5
RXZlbnQKLSAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5yYXRlY2hhbmdlRXZl
bnQpCi0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRSYXRlKCFtX21lZGlh
RWxlbWVudC0+cGF1c2VkKCksIG1fbWVkaWFFbGVtZW50LT5wbGF5YmFja1JhdGUoKSk7Ci0KLSAg
ICBpZiAoYWxsCi0gICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkudGltZXVwZGF0
ZUV2ZW50KSB7Ci0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRDdXJyZW50
VGltZShtX21lZGlhRWxlbWVudC0+Y3VycmVudFRpbWUoKSwgW1tOU1Byb2Nlc3NJbmZvIHByb2Nl
c3NJbmZvXSBzeXN0ZW1VcHRpbWVdKTsKLSAgICAgICAgLy8gRklYTUU6IDEzMDc4OCAtIGZpbmQg
YSBiZXR0ZXIgZXZlbnQgdG8gdXBkYXRlIHNlZWthYmxlIHJhbmdlcyBmcm9tLgotICAgICAgICBt
X3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0U2Vla2FibGVSYW5nZXMoKm1fbWVkaWFFbGVt
ZW50LT5zZWVrYWJsZSgpKTsKLSAgICB9Ci0KLSAgICBpZiAoYWxsCi0gICAgICAgIHx8IGV2ZW50
TmFtZSA9PSBldmVudE5hbWVzKCkuYWRkdHJhY2tFdmVudAotICAgICAgICB8fCBldmVudE5hbWUg
PT0gZXZlbnROYW1lcygpLnJlbW92ZXRyYWNrRXZlbnQpCi0gICAgICAgIHVwZGF0ZUxlZ2libGVP
cHRpb25zKCk7Ci0KLSAgICBpZiAoYWxsCi0gICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5h
bWVzKCkud2Via2l0Y3VycmVudHBsYXliYWNrdGFyZ2V0aXN3aXJlbGVzc2NoYW5nZWRFdmVudCkg
ewotICAgICAgICBib29sIGVuYWJsZWQgPSBtX21lZGlhRWxlbWVudC0+bWVkaWFTZXNzaW9uKCku
Y3VycmVudFBsYXliYWNrVGFyZ2V0SXNXaXJlbGVzcygqbV9tZWRpYUVsZW1lbnQpOwotICAgICAg
ICBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBl
IHRhcmdldFR5cGUgPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U6OlRhcmdldFR5cGVOb25l
OwotICAgICAgICBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZTsKLQotICAgICAgICBpZiAobV9t
ZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCkpIHsKLSAgICAgICAgICAgIERFUFJFQ0FU
RURfREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGFpcnBsYXksIChBU0NJSUxpdGVyYWwoImFp
cnBsYXkiKSkpOwotICAgICAgICAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKFN0
cmluZywgdHZvdXQsIChBU0NJSUxpdGVyYWwoInR2b3V0IikpKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgU3RyaW5nIHR5cGUgPSBtX21lZGlhRWxlbWVudC0+bWVkaWFDb250cm9sc0hvc3Qo
KS0+ZXh0ZXJuYWxEZXZpY2VUeXBlKCk7Ci0gICAgICAgICAgICBpZiAodHlwZSA9PSBhaXJwbGF5
KQotICAgICAgICAgICAgICAgIHRhcmdldFR5cGUgPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2U6OlRhcmdldFR5cGVBaXJQbGF5OwotICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSB0dm91
dCkKLSAgICAgICAgICAgICAgICB0YXJnZXRUeXBlID0gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlOjpUYXJnZXRUeXBlVFZPdXQ7Ci0gICAgICAgICAgICBsb2NhbGl6ZWREZXZpY2VOYW1lID0g
bV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCktPmV4dGVybmFsRGV2aWNlRGlzcGxh
eU5hbWUoKTsKLSAgICAgICAgfQotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+
c2V0RXh0ZXJuYWxQbGF5YmFjayhlbmFibGVkLCB0YXJnZXRUeXBlLCBsb2NhbGl6ZWREZXZpY2VO
YW1lKTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1l
bnQ6OnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKFBsYXRmb3JtTGF5ZXIqIHZpZGVvTGF5ZXIpCi17
Ci0gICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIgPT0gdmlkZW9MYXllcikKLSAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIgPSB2aWRlb0xheWVyOwot
ICAgIFttX3ZpZGVvRnVsbHNjcmVlbkxheWVyIHNldEZyYW1lOm1fdmlkZW9GcmFtZV07Ci0gICAg
Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+
IHByb3RlY3QodGhpcyk7Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgIGlmIChtX21lZGlh
RWxlbWVudCkKLSAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5zZXRWaWRlb0Z1bGxzY3JlZW5M
YXllcihtX3ZpZGVvRnVsbHNjcmVlbkxheWVyLmdldCgpKTsKLSAgICAgICAgcHJvdGVjdC5jbGVh
cigpOwotICAgIH0pOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVt
ZW50OjpwbGF5KCkgewotICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
TWVkaWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOwotICAgIFdlYlRocmVhZFJ1biheewotICAgICAg
ICBpZiAobV9tZWRpYUVsZW1lbnQpCi0gICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+cGxheSgp
OwotICAgICAgICBwcm90ZWN0LmNsZWFyKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnBhdXNlKCkKLXsKLSAgICBfX2Jsb2NrIFJlZlB0
cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKLSAg
ICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICAg
ICAgbV9tZWRpYUVsZW1lbnQtPnBhdXNlKCk7Ci0gICAgICAgIHByb3RlY3QuY2xlYXIoKTsKLSAg
ICB9KTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6dG9n
Z2xlUGxheVN0YXRlKCkKLXsKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKLSAgICBXZWJUaHJlYWRSdW4oXnsKLSAg
ICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnRv
Z2dsZVBsYXlTdGF0ZSgpOwotICAgICAgICBwcm90ZWN0LmNsZWFyKCk7Ci0gICAgfSk7Ci19Ci0K
LXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OmJlZ2luU2NydWJiaW5n
KCkKLXsKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxl
bWVudD4gcHJvdGVjdCh0aGlzKTsKLSAgICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgaWYgKG1f
bWVkaWFFbGVtZW50KQotICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmJlZ2luU2NydWJiaW5n
KCk7Ci0gICAgICAgIHByb3RlY3QuY2xlYXIoKTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6ZW5kU2NydWJiaW5nKCkKLXsKLSAgICBfX2Js
b2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0
aGlzKTsKLSAgICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQot
ICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmVuZFNjcnViYmluZygpOwotICAgICAgICBwcm90
ZWN0LmNsZWFyKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxN
ZWRpYUVsZW1lbnQ6OnNlZWtUb1RpbWUoZG91YmxlIHRpbWUpCi17Ci0gICAgX19ibG9jayBSZWZQ
dHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7Ci0g
ICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAg
ICAgIG1fbWVkaWFFbGVtZW50LT5zZXRDdXJyZW50VGltZSh0aW1lKTsKLSAgICAgICAgcHJvdGVj
dC5jbGVhcigpOwotICAgIH0pOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVk
aWFFbGVtZW50OjpmYXN0U2Vlayhkb3VibGUgdGltZSkKLXsKLSAgICBfX2Jsb2NrIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKLSAgICBX
ZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICAgICAg
bV9tZWRpYUVsZW1lbnQtPmZhc3RTZWVrKHRpbWUpOwotICAgICAgICBwcm90ZWN0LmNsZWFyKCk7
Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6
OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkKLXsKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKLSAgICBXZWJUaHJlYWRS
dW4oXnsKLSAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICAgICAgbV9tZWRpYUVs
ZW1lbnQtPmJlZ2luU2Nhbm5pbmcoTWVkaWFDb250cm9sbGVySW50ZXJmYWNlOjpGb3J3YXJkKTsK
LSAgICAgICAgcHJvdGVjdC5jbGVhcigpOwotICAgIH0pOwotfQotCi12b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpiZWdpblNjYW5uaW5nQmFja3dhcmQoKQotewotICAg
IF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50PiBwcm90
ZWN0KHRoaXMpOwotICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICBpZiAobV9tZWRpYUVsZW1l
bnQpCi0gICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+YmVnaW5TY2FubmluZyhNZWRpYUNvbnRy
b2xsZXJJbnRlcmZhY2U6OkJhY2t3YXJkKTsKLSAgICAgICAgcHJvdGVjdC5jbGVhcigpOwotICAg
IH0pOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjplbmRT
Y2FubmluZygpCi17Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxN
ZWRpYUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAg
IGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5lbmRTY2Fu
bmluZygpOwotICAgICAgICBwcm90ZWN0LmNsZWFyKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnJlcXVlc3RFeGl0RnVsbHNjcmVlbigp
Ci17Ci0gICAgaWYgKCFtX21lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgX19i
bG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+IHByb3RlY3Qo
dGhpcyk7Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgIGlmIChtX21lZGlhRWxlbWVudCAm
JiBtX21lZGlhRWxlbWVudC0+aXNGdWxsc2NyZWVuKCkpCi0gICAgICAgICAgICBtX21lZGlhRWxl
bWVudC0+ZXhpdEZ1bGxzY3JlZW4oKTsKLSAgICAgICAgcHJvdGVjdC5jbGVhcigpOwotICAgIH0p
OwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpzZXRWaWRl
b0xheWVyRnJhbWUoRmxvYXRSZWN0IHJlY3QpCi17Ci0gICAgbV92aWRlb0ZyYW1lID0gcmVjdDsK
LSAgICBbbV92aWRlb0Z1bGxzY3JlZW5MYXllciBzZXRGcmFtZTpDR1JlY3QocmVjdCldOwotICAg
IG1fbWVkaWFFbGVtZW50LT5zZXRWaWRlb0Z1bGxzY3JlZW5GcmFtZShyZWN0KTsKLX0KLQotdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6c2V0VmlkZW9MYXllckdyYXZp
dHkoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSBncmF2aXR5KQotewotICAg
IE1lZGlhUGxheWVyOjpWaWRlb0dyYXZpdHkgdmlkZW9HcmF2aXR5ID0gTWVkaWFQbGF5ZXI6OlZp
ZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdDsKLSAgICBpZiAoZ3Jhdml0eSA9PSBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplKQotICAgICAgICB2aWRlb0dyYXZpdHkgPSBN
ZWRpYVBsYXllcjo6VmlkZW9HcmF2aXR5UmVzaXplOwotICAgIGVsc2UgaWYgKGdyYXZpdHkgPT0g
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCkKLSAgICAg
ICAgdmlkZW9HcmF2aXR5ID0gTWVkaWFQbGF5ZXI6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdDsK
LSAgICBlbHNlIGlmIChncmF2aXR5ID09IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dy
YXZpdHlSZXNpemVBc3BlY3RGaWxsKQotICAgICAgICB2aWRlb0dyYXZpdHkgPSBNZWRpYVBsYXll
cjo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbDsKLSAgICBlbHNlCi0gICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIAotICAgIG1fbWVkaWFFbGVtZW50LT5zZXRWaWRlb0Z1bGxz
Y3JlZW5HcmF2aXR5KHZpZGVvR3Jhdml0eSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxNZWRpYUVsZW1lbnQ6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QpCi17Ci0g
ICAgLy8gRklYTUU6IDEzMTIzNiBJbXBsZW1lbnQgYXVkaW8gdHJhY2sgc2VsZWN0aW9uLgotfQot
Ci12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpzZWxlY3RMZWdpYmxl
TWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpCi17Ci0gICAgVGV4dFRyYWNrKiB0ZXh0VHJhY2sg
PSBudWxscHRyOwotICAgIAotICAgIGlmIChpbmRleCA8IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnUu
c2l6ZSgpKQotICAgICAgICB0ZXh0VHJhY2sgPSBtX2xlZ2libGVUcmFja3NGb3JNZW51W3N0YXRp
Y19jYXN0PHNpemVfdD4oaW5kZXgpXS5nZXQoKTsKLSAgICAKLSAgICBtX21lZGlhRWxlbWVudC0+
c2V0U2VsZWN0ZWRUZXh0VHJhY2sodGV4dFRyYWNrKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6dXBkYXRlTGVnaWJsZU9wdGlvbnMoKQotewotICAgIFRl
eHRUcmFja0xpc3QqIHRyYWNrTGlzdCA9IG1fbWVkaWFFbGVtZW50LT50ZXh0VHJhY2tzKCk7Ci0g
ICAgaWYgKCF0cmFja0xpc3QgfHwgIW1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSB8
fCAhbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCkpCi0gICAgICAgIHJldHVybjsK
LSAgICAKLSAgICBXVEY6OkF0b21pY1N0cmluZyBkaXNwbGF5TW9kZSA9IG1fbWVkaWFFbGVtZW50
LT5tZWRpYUNvbnRyb2xzSG9zdCgpLT5jYXB0aW9uRGlzcGxheU1vZGUoKTsKLSAgICBUZXh0VHJh
Y2sqIG9mZkl0ZW0gPSBtX21lZGlhRWxlbWVudC0+bWVkaWFDb250cm9sc0hvc3QoKS0+Y2FwdGlv
bk1lbnVPZmZJdGVtKCk7Ci0gICAgVGV4dFRyYWNrKiBhdXRvbWF0aWNJdGVtID0gbV9tZWRpYUVs
ZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCktPmNhcHRpb25NZW51QXV0b21hdGljSXRlbSgpOwot
ICAgIENhcHRpb25Vc2VyUHJlZmVyZW5jZXMmIGNhcHRpb25QcmVmZXJlbmNlcyA9ICptX21lZGlh
RWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCktPmdyb3VwKCkuY2FwdGlvblByZWZlcmVuY2VzKCk7
Ci0gICAgbV9sZWdpYmxlVHJhY2tzRm9yTWVudSA9IGNhcHRpb25QcmVmZXJlbmNlcy5zb3J0ZWRU
cmFja0xpc3RGb3JNZW51KHRyYWNrTGlzdCk7Ci0gICAgVmVjdG9yPFN0cmluZz4gdHJhY2tEaXNw
bGF5TmFtZXM7Ci0gICAgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCA9IDA7Ci0gICAgdWludDY0X3Qg
b2ZmSW5kZXggPSAwOwotICAgIGJvb2wgdHJhY2tNZW51SXRlbVNlbGVjdGVkID0gZmFsc2U7Ci0g
ICAgCi0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG1fbGVnaWJsZVRyYWNrc0Zv
ck1lbnUuc2l6ZSgpOyBpbmRleCsrKSB7Ci0gICAgICAgIGF1dG8mIHRyYWNrID0gbV9sZWdpYmxl
VHJhY2tzRm9yTWVudVtpbmRleF07Ci0gICAgICAgIHRyYWNrRGlzcGxheU5hbWVzLmFwcGVuZChj
YXB0aW9uUHJlZmVyZW5jZXMuZGlzcGxheU5hbWVGb3JUcmFjayh0cmFjay5nZXQoKSkpOwotICAg
ICAgICAKLSAgICAgICAgaWYgKHRyYWNrID09IG9mZkl0ZW0pCi0gICAgICAgICAgICBvZmZJbmRl
eCA9IGluZGV4OwotICAgICAgICAKLSAgICAgICAgaWYgKHRyYWNrID09IGF1dG9tYXRpY0l0ZW0g
JiYgZGlzcGxheU1vZGUgPT0gTWVkaWFDb250cm9sc0hvc3Q6OmF1dG9tYXRpY0tleXdvcmQoKSkg
ewotICAgICAgICAgICAgc2VsZWN0ZWRJbmRleCA9IGluZGV4OwotICAgICAgICAgICAgdHJhY2tN
ZW51SXRlbVNlbGVjdGVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYg
KGRpc3BsYXlNb2RlICE9IE1lZGlhQ29udHJvbHNIb3N0OjphdXRvbWF0aWNLZXl3b3JkKCkgJiYg
dHJhY2stPm1vZGUoKSA9PSBUZXh0VHJhY2s6OnNob3dpbmdLZXl3b3JkKCkpIHsKLSAgICAgICAg
ICAgIHNlbGVjdGVkSW5kZXggPSBpbmRleDsKLSAgICAgICAgICAgIHRyYWNrTWVudUl0ZW1TZWxl
Y3RlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYgKG9mZkluZGV4ICYm
ICF0cmFja01lbnVJdGVtU2VsZWN0ZWQgJiYgZGlzcGxheU1vZGUgPT0gTWVkaWFDb250cm9sc0hv
c3Q6OmZvcmNlZE9ubHlLZXl3b3JkKCkpIHsKLSAgICAgICAgc2VsZWN0ZWRJbmRleCA9IG9mZklu
ZGV4OwotICAgICAgICB0cmFja01lbnVJdGVtU2VsZWN0ZWQgPSB0cnVlOwotICAgIH0KLSAgICAK
LSAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9u
T3B0aW9ucyh0cmFja0Rpc3BsYXlOYW1lcywgc2VsZWN0ZWRJbmRleCk7Ci19Ci0KLWNvbnN0IFZl
Y3RvcjxBdG9taWNTdHJpbmc+JiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6
b2JzZXJ2ZWRFdmVudE5hbWVzKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VmVjdG9y
PEF0b21pY1N0cmluZz4+IHNFdmVudE5hbWVzOwotCi0gICAgaWYgKCFzRXZlbnROYW1lcy5nZXQo
KS5zaXplKCkpIHsKLSAgICAgICAgc0V2ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFtZXMo
KS5kdXJhdGlvbmNoYW5nZUV2ZW50KTsKLSAgICAgICAgc0V2ZW50TmFtZXMuZ2V0KCkuYXBwZW5k
KGV2ZW50TmFtZXMoKS5wYXVzZUV2ZW50KTsKLSAgICAgICAgc0V2ZW50TmFtZXMuZ2V0KCkuYXBw
ZW5kKGV2ZW50TmFtZXMoKS5wbGF5RXZlbnQpOwotICAgICAgICBzRXZlbnROYW1lcy5nZXQoKS5h
cHBlbmQoZXZlbnROYW1lcygpLnJhdGVjaGFuZ2VFdmVudCk7Ci0gICAgICAgIHNFdmVudE5hbWVz
LmdldCgpLmFwcGVuZChldmVudE5hbWVzKCkudGltZXVwZGF0ZUV2ZW50KTsKLSAgICAgICAgc0V2
ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFtZXMoKS5hZGR0cmFja0V2ZW50KTsKLSAgICAg
ICAgc0V2ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFtZXMoKS5yZW1vdmV0cmFja0V2ZW50
KTsKLSAgICAgICAgc0V2ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFtZXMoKS53ZWJraXRj
dXJyZW50cGxheWJhY2t0YXJnZXRpc3dpcmVsZXNzY2hhbmdlZEV2ZW50KTsKLSAgICB9Ci0gICAg
cmV0dXJuIHNFdmVudE5hbWVzLmdldCgpOwotfQotCi1jb25zdCBBdG9taWNTdHJpbmcmIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpldmVudE5hbWVBbGwoKQotewotICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHNFdmVudE5hbWVBbGwgPSAiYWxsRXZl
bnRzIjsKLSAgICByZXR1cm4gc0V2ZW50TmFtZUFsbDsKLX0KLQotI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaAkocmV2aXNpb24gMTczMTYxKQkoZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1l
bnQuaDoxNzMxNjEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVm
IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50X2gKKyNkZWZpbmUgV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnRfaAorCisjaWYgUExBVEZPUk0oSU9TKQorCisjaW5j
bHVkZSA8V2ViQ29yZS9FdmVudExpc3RlbmVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFJl
Y3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEhUTUxNZWRpYUVsZW1lbnQ7CitjbGFzcyBUZXh0VHJh
Y2s7CitjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U7CisKK2NsYXNzIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50IDogcHVibGljIFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsLCBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7CitwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBPUlQg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQoKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudCgpOworICAgIHZv
aWQgc2V0V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZSogaW50ZXJmYWNlKSB7bV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UgPSBpbnRlcmZhY2U7
fQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TWVkaWFFbGVtZW50KEhUTUxNZWRpYUVsZW1l
bnQqKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFZpZGVvRnVsbHNjcmVlbkxheWVyKFBs
YXRmb3JtTGF5ZXIqKTsKKyAgICAKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgaGFu
ZGxlRXZlbnQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkNvcmU6OkV2ZW50
Kikgb3ZlcnJpZGU7CisgICAgdm9pZCB1cGRhdGVGb3JFdmVudE5hbWUoY29uc3QgV1RGOjpBdG9t
aWNTdHJpbmcmKTsKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRXZlbnRMaXN0ZW5lciYgcmhz
KSBvdmVycmlkZQorICAgICAgICB7cmV0dXJuIHN0YXRpY19jYXN0PFdlYkNvcmU6OkV2ZW50TGlz
dGVuZXIqPih0aGlzKSA9PSAmcmhzO30KKworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9p
ZCBwbGF5KCkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHBhdXNl
KCkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHRvZ2dsZVBsYXlT
dGF0ZSgpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBiZWdpblNj
cnViYmluZygpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBlbmRT
Y3J1YmJpbmcoKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc2Vl
a1RvVGltZShkb3VibGUgdGltZSkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCB2b2lkIGZhc3RTZWVrKGRvdWJsZSB0aW1lKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIHZvaWQgYmVnaW5TY2FubmluZ0ZvcndhcmQoKSBvdmVycmlkZTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgYmVnaW5TY2FubmluZ0JhY2t3YXJkKCkgb3ZlcnJpZGU7
CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGVuZFNjYW5uaW5nKCkgb3ZlcnJpZGU7
CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHJlcXVlc3RFeGl0RnVsbHNjcmVlbigp
IG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXRWaWRlb0xheWVy
RnJhbWUoRmxvYXRSZWN0KSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZv
aWQgc2V0VmlkZW9MYXllckdyYXZpdHkoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jh
dml0eSkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNlbGVjdEF1
ZGlvTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgdm9pZCBzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgp
IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8V1RGOjpBdG9t
aWNTdHJpbmc+JiBvYnNlcnZlZEV2ZW50TmFtZXMoKTsKKyAgICBjb25zdCBXVEY6OkF0b21pY1N0
cmluZyYgZXZlbnROYW1lQWxsKCk7CisgICAgCisgICAgUmVmUHRyPEhUTUxNZWRpYUVsZW1lbnQ+
IG1fbWVkaWFFbGVtZW50OworICAgIFJldGFpblB0cjxQbGF0Zm9ybUxheWVyPiBtX3ZpZGVvRnVs
bHNjcmVlbkxheWVyOworICAgIGJvb2wgbV9pc0xpc3RlbmluZzsKKyAgICBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2UqIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOworICAgIEZsb2F0UmVj
dCBtX3ZpZGVvRnJhbWU7CisgICAgVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2s+PiBtX2xlZ2libGVU
cmFja3NGb3JNZW51OworCisgICAgdm9pZCB1cGRhdGVMZWdpYmxlT3B0aW9ucygpOworfTsKKwor
fQorCisjZW5kaWYKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQuaAkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDgg
KzI0LDggQEAKICAqLwogCiAKLSNpZm5kZWYgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVs
ZW1lbnRfaAotI2RlZmluZSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudF9oCisj
aWZuZGVmIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50X2gKKyNkZWZpbmUgV2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnRfaAogCiAjaWYgUExBVEZPUk0oSU9TKQog
CkBAIC0zOCwxNiArMzgsMTYgQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKLWNsYXNzIEhUTUxNZWRpYUVsZW1lbnQ7CitjbGFzcyBIVE1MVmlkZW9FbGVt
ZW50OwogY2xhc3MgVGV4dFRyYWNrOwogY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
OwogCi1jbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudCA6IHB1YmxpYyBX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCwgcHVibGljIEV2ZW50TGlzdGVuZXIgeworY2xhc3MgV2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQgOiBwdWJsaWMgV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWwsIHB1YmxpYyBFdmVudExpc3RlbmVyIHsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VY
UE9SVCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudCgpOwotICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50KCk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQoKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVv
RWxlbWVudCgpOwogICAgIHZvaWQgc2V0V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZSogaW50ZXJmYWNlKSB7bV92aWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2UgPSBpbnRlcmZhY2U7fQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TWVkaWFFbGVt
ZW50KEhUTUxNZWRpYUVsZW1lbnQqKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFZpZGVv
RWxlbWVudChIVE1MVmlkZW9FbGVtZW50Kik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRW
aWRlb0Z1bGxzY3JlZW5MYXllcihQbGF0Zm9ybUxheWVyKik7CiAgICAgCiAgICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBXZWJDb3JlOjpFdmVudCopIG92ZXJyaWRlOwpAQCAtNzUsNyArNzUsNyBAQCBwcml2
YXRlOgogICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8V1RGOjpBdG9taWNTdHJpbmc+JiBvYnNlcnZl
ZEV2ZW50TmFtZXMoKTsKICAgICBjb25zdCBXVEY6OkF0b21pY1N0cmluZyYgZXZlbnROYW1lQWxs
KCk7CiAgICAgCi0gICAgUmVmUHRyPEhUTUxNZWRpYUVsZW1lbnQ+IG1fbWVkaWFFbGVtZW50Owor
ICAgIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50PiBtX3ZpZGVvRWxlbWVudDsKICAgICBSZXRhaW5Q
dHI8UGxhdGZvcm1MYXllcj4gbV92aWRlb0Z1bGxzY3JlZW5MYXllcjsKICAgICBib29sIG1faXNM
aXN0ZW5pbmc7CiAgICAgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKiBtX3ZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0J
KHJldmlzaW9uIDE3MzE2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50Lm1tOjE3MzE2MSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbQko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorCisjaWYgUExBVEZPUk0o
SU9TKQorCisjaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5oIgor
CisjaW1wb3J0ICJET01FdmVudEludGVybmFsLmgiCisjaW1wb3J0ICJMb2dnaW5nLmgiCisjaW1w
b3J0ICJNZWRpYUNvbnRyb2xzSG9zdC5oIgorI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlLmgiCisjaW1wb3J0IDxXZWJDb3JlL0RPTUV2ZW50TGlzdGVuZXIuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvRXZlbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRXZlbnRMaXN0ZW5lci5oPgorI2lt
cG9ydCA8V2ViQ29yZS9FdmVudE5hbWVzLmg+CisjaW1wb3J0IDxXZWJDb3JlL0hUTUxFbGVtZW50
Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0hUTUxNZWRpYUVsZW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvSFRNTFZpZGVvRWxlbWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+CisjaW1wb3J0
IDxXZWJDb3JlL1BhZ2VHcm91cC5oPgorI2ltcG9ydCA8V2ViQ29yZS9Tb2Z0TGlua2luZy5oPgor
I2ltcG9ydCA8V2ViQ29yZS9UZXh0VHJhY2tMaXN0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1RpbWVS
YW5nZXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZVRocmVhZFJ1bi5oPgorI2ltcG9ydCA8
UXVhcnR6Q29yZS9Db3JlQW5pbWF0aW9uLmg+CisjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKworV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OldlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsTWVkaWFFbGVtZW50KCkKKyAgICA6IEV2ZW50TGlzdGVuZXIoRXZlbnRMaXN0ZW5l
cjo6Q1BQRXZlbnRMaXN0ZW5lclR5cGUpCisgICAgLCBtX2lzTGlzdGVuaW5ne2ZhbHNlfQorewor
fQorCitXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6fldlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsTWVkaWFFbGVtZW50KCkKK3sKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbE1lZGlhRWxlbWVudDo6c2V0TWVkaWFFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlh
RWxlbWVudCkKK3sKKyAgICBpZiAobV9tZWRpYUVsZW1lbnQgPT0gbWVkaWFFbGVtZW50KQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAobV9tZWRpYUVsZW1lbnQgJiYgbV9pc0xpc3RlbmluZykg
eworICAgICAgICBmb3IgKGF1dG8gZXZlbnROYW1lIDogb2JzZXJ2ZWRFdmVudE5hbWVzKCkpCisg
ICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUs
IHRoaXMsIGZhbHNlKTsKKyAgICB9CisgICAgbV9pc0xpc3RlbmluZyA9IGZhbHNlOworCisgICAg
bV9tZWRpYUVsZW1lbnQgPSBtZWRpYUVsZW1lbnQ7CisKKyAgICBpZiAoIW1fbWVkaWFFbGVtZW50
KQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGF1dG8gZXZlbnROYW1lIDogb2JzZXJ2ZWRF
dmVudE5hbWVzKCkpCisgICAgICAgIG1fbWVkaWFFbGVtZW50LT5hZGRFdmVudExpc3RlbmVyKGV2
ZW50TmFtZSwgdGhpcywgZmFsc2UpOworICAgIG1faXNMaXN0ZW5pbmcgPSB0cnVlOworCisgICAg
dXBkYXRlRm9yRXZlbnROYW1lKGV2ZW50TmFtZUFsbCgpKTsKKworICAgIGlmIChpc0hUTUxWaWRl
b0VsZW1lbnQobV9tZWRpYUVsZW1lbnQuZ2V0KCkpKSB7CisgICAgICAgIEhUTUxWaWRlb0VsZW1l
bnQgKnZpZGVvRWxlbWVudCA9IHRvSFRNTFZpZGVvRWxlbWVudChtX21lZGlhRWxlbWVudC5nZXQo
KSk7CisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRWaWRlb0RpbWVuc2lv
bnModHJ1ZSwgdmlkZW9FbGVtZW50LT52aWRlb1dpZHRoKCksIHZpZGVvRWxlbWVudC0+dmlkZW9I
ZWlnaHQoKSk7CisgICAgfSBlbHNlCisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
LT5zZXRWaWRlb0RpbWVuc2lvbnMoZmFsc2UsIDAsIDApOworfQorCit2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpoYW5kbGVFdmVudChXZWJDb3JlOjpTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgV2ViQ29yZTo6RXZlbnQqIGV2ZW50KQoreworICAgIExPRyhNZWRpYSwg
ImhhbmRsZUV2ZW50ICVzIiwgZXZlbnQtPnR5cGUoKS5jaGFyYWN0ZXJzOCgpKTsKKyAgICB1cGRh
dGVGb3JFdmVudE5hbWUoZXZlbnQtPnR5cGUoKSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnVwZGF0ZUZvckV2ZW50TmFtZShjb25zdCBXVEY6OkF0b21p
Y1N0cmluZyYgZXZlbnROYW1lKQoreworICAgIGlmICghbV9tZWRpYUVsZW1lbnQgfHwgIW1fdmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYm9vbCBh
bGwgPSBldmVudE5hbWUgPT0gZXZlbnROYW1lQWxsKCk7CisKKyAgICBpZiAoYWxsCisgICAgICAg
IHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkuZHVyYXRpb25jaGFuZ2VFdmVudCkgeworICAg
ICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0RHVyYXRpb24obV9tZWRpYUVsZW1l
bnQtPmR1cmF0aW9uKCkpOworICAgICAgICAvLyBUaGVzZSBpcyBubyBzdGFuZGFyZCBldmVudCBm
b3IgbWluRmFzdFJldmVyc2VSYXRlQ2hhbmdlOyBkdXJhdGlvbiBjaGFuZ2UgaXMgYSByZWFzb25h
YmxlIHByb3h5IGZvciBpdC4KKyAgICAgICAgLy8gSXQgaGFwcGVucyBldmVyeSB0aW1lIGEgbmV3
IGl0ZW0gYmVjb21lcyByZWFkeSB0byBwbGF5LgorICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZS0+c2V0Q2FuUGxheUZhc3RSZXZlcnNlKG1fbWVkaWFFbGVtZW50LT5taW5GYXN0UmV2
ZXJzZVJhdGUoKSA8IDAuMCk7CisgICAgfQorCisgICAgaWYgKGFsbAorICAgICAgICB8fCBldmVu
dE5hbWUgPT0gZXZlbnROYW1lcygpLnBhdXNlRXZlbnQKKyAgICAgICAgfHwgZXZlbnROYW1lID09
IGV2ZW50TmFtZXMoKS5wbGF5RXZlbnQKKyAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFt
ZXMoKS5yYXRlY2hhbmdlRXZlbnQpCisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
LT5zZXRSYXRlKCFtX21lZGlhRWxlbWVudC0+cGF1c2VkKCksIG1fbWVkaWFFbGVtZW50LT5wbGF5
YmFja1JhdGUoKSk7CisKKyAgICBpZiAoYWxsCisgICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVu
dE5hbWVzKCkudGltZXVwZGF0ZUV2ZW50KSB7CisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlLT5zZXRDdXJyZW50VGltZShtX21lZGlhRWxlbWVudC0+Y3VycmVudFRpbWUoKSwgW1tO
U1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBzeXN0ZW1VcHRpbWVdKTsKKyAgICAgICAgLy8gRklY
TUU6IDEzMDc4OCAtIGZpbmQgYSBiZXR0ZXIgZXZlbnQgdG8gdXBkYXRlIHNlZWthYmxlIHJhbmdl
cyBmcm9tLgorICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0U2Vla2FibGVS
YW5nZXMoKm1fbWVkaWFFbGVtZW50LT5zZWVrYWJsZSgpKTsKKyAgICB9CisKKyAgICBpZiAoYWxs
CisgICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkuYWRkdHJhY2tFdmVudAorICAg
ICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnJlbW92ZXRyYWNrRXZlbnQpCisgICAg
ICAgIHVwZGF0ZUxlZ2libGVPcHRpb25zKCk7CisKKyAgICBpZiAoYWxsCisgICAgICAgIHx8IGV2
ZW50TmFtZSA9PSBldmVudE5hbWVzKCkud2Via2l0Y3VycmVudHBsYXliYWNrdGFyZ2V0aXN3aXJl
bGVzc2NoYW5nZWRFdmVudCkgeworICAgICAgICBib29sIGVuYWJsZWQgPSBtX21lZGlhRWxlbWVu
dC0+bWVkaWFTZXNzaW9uKCkuY3VycmVudFBsYXliYWNrVGFyZ2V0SXNXaXJlbGVzcygqbV9tZWRp
YUVsZW1lbnQpOworICAgICAgICBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U6OkV4dGVybmFs
UGxheWJhY2tUYXJnZXRUeXBlIHRhcmdldFR5cGUgPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2U6OlRhcmdldFR5cGVOb25lOworICAgICAgICBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZTsK
KworICAgICAgICBpZiAobV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCkpIHsKKyAg
ICAgICAgICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGFpcnBsYXks
IChBU0NJSUxpdGVyYWwoImFpcnBsYXkiKSkpOworICAgICAgICAgICAgREVQUkVDQVRFRF9ERUZJ
TkVfU1RBVElDX0xPQ0FMKFN0cmluZywgdHZvdXQsIChBU0NJSUxpdGVyYWwoInR2b3V0IikpKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgU3RyaW5nIHR5cGUgPSBtX21lZGlhRWxlbWVudC0+
bWVkaWFDb250cm9sc0hvc3QoKS0+ZXh0ZXJuYWxEZXZpY2VUeXBlKCk7CisgICAgICAgICAgICBp
ZiAodHlwZSA9PSBhaXJwbGF5KQorICAgICAgICAgICAgICAgIHRhcmdldFR5cGUgPSBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2U6OlRhcmdldFR5cGVBaXJQbGF5OworICAgICAgICAgICAgZWxz
ZSBpZiAodHlwZSA9PSB0dm91dCkKKyAgICAgICAgICAgICAgICB0YXJnZXRUeXBlID0gV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlOjpUYXJnZXRUeXBlVFZPdXQ7CisgICAgICAgICAgICBsb2Nh
bGl6ZWREZXZpY2VOYW1lID0gbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCktPmV4
dGVybmFsRGV2aWNlRGlzcGxheU5hbWUoKTsKKyAgICAgICAgfQorICAgICAgICBtX3ZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZS0+c2V0RXh0ZXJuYWxQbGF5YmFjayhlbmFibGVkLCB0YXJnZXRUeXBl
LCBsb2NhbGl6ZWREZXZpY2VOYW1lKTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKFBsYXRmb3JtTGF5
ZXIqIHZpZGVvTGF5ZXIpCit7CisgICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIgPT0gdmlk
ZW9MYXllcikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fdmlkZW9GdWxsc2NyZWVuTGF5
ZXIgPSB2aWRlb0xheWVyOworICAgIFttX3ZpZGVvRnVsbHNjcmVlbkxheWVyIHNldEZyYW1lOm1f
dmlkZW9GcmFtZV07CisgICAgCisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxNZWRpYUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7CisgICAgV2ViVGhyZWFkUnVuKF57Cisg
ICAgICAgIGlmIChtX21lZGlhRWxlbWVudCkKKyAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5z
ZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihtX3ZpZGVvRnVsbHNjcmVlbkxheWVyLmdldCgpKTsKKyAg
ICAgICAgcHJvdGVjdC5jbGVhcigpOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsTWVkaWFFbGVtZW50OjpwbGF5KCkgeworICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOworICAgIFdlYlRo
cmVhZFJ1biheeworICAgICAgICBpZiAobV9tZWRpYUVsZW1lbnQpCisgICAgICAgICAgICBtX21l
ZGlhRWxlbWVudC0+cGxheSgpOworICAgICAgICBwcm90ZWN0LmNsZWFyKCk7CisgICAgfSk7Cit9
CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnBhdXNlKCkKK3sK
KyAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4g
cHJvdGVjdCh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgaWYgKG1fbWVkaWFF
bGVtZW50KQorICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnBhdXNlKCk7CisgICAgICAgIHBy
b3RlY3QuY2xlYXIoKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bE1lZGlhRWxlbWVudDo6dG9nZ2xlUGxheVN0YXRlKCkKK3sKKyAgICBfX2Jsb2NrIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKKyAgICBX
ZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQorICAgICAgICAgICAg
bV9tZWRpYUVsZW1lbnQtPnRvZ2dsZVBsYXlTdGF0ZSgpOworICAgICAgICBwcm90ZWN0LmNsZWFy
KCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1l
bnQ6OmJlZ2luU2NydWJiaW5nKCkKK3sKKyAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4o
XnsKKyAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQorICAgICAgICAgICAgbV9tZWRpYUVsZW1l
bnQtPmJlZ2luU2NydWJiaW5nKCk7CisgICAgICAgIHByb3RlY3QuY2xlYXIoKTsKKyAgICB9KTsK
K30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6ZW5kU2NydWJi
aW5nKCkKK3sKKyAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlh
RWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgaWYg
KG1fbWVkaWFFbGVtZW50KQorICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmVuZFNjcnViYmlu
ZygpOworICAgICAgICBwcm90ZWN0LmNsZWFyKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnNlZWtUb1RpbWUoZG91YmxlIHRpbWUpCit7
CisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+
IHByb3RlY3QodGhpcyk7CisgICAgV2ViVGhyZWFkUnVuKF57CisgICAgICAgIGlmIChtX21lZGlh
RWxlbWVudCkKKyAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5zZXRDdXJyZW50VGltZSh0aW1l
KTsKKyAgICAgICAgcHJvdGVjdC5jbGVhcigpOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpmYXN0U2Vlayhkb3VibGUgdGltZSkKK3sKKyAg
ICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJv
dGVjdCh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgaWYgKG1fbWVkaWFFbGVt
ZW50KQorICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmZhc3RTZWVrKHRpbWUpOworICAgICAg
ICBwcm90ZWN0LmNsZWFyKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxNZWRpYUVsZW1lbnQ6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkKK3sKKyAgICBfX2Jsb2Nr
IFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlz
KTsKKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQorICAg
ICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmJlZ2luU2Nhbm5pbmcoTWVkaWFDb250cm9sbGVySW50
ZXJmYWNlOjpGb3J3YXJkKTsKKyAgICAgICAgcHJvdGVjdC5jbGVhcigpOworICAgIH0pOworfQor
Cit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpiZWdpblNjYW5uaW5n
QmFja3dhcmQoKQoreworICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
TWVkaWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOworICAgIFdlYlRocmVhZFJ1biheeworICAgICAg
ICBpZiAobV9tZWRpYUVsZW1lbnQpCisgICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+YmVnaW5T
Y2FubmluZyhNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2U6OkJhY2t3YXJkKTsKKyAgICAgICAgcHJv
dGVjdC5jbGVhcigpOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
TWVkaWFFbGVtZW50OjplbmRTY2FubmluZygpCit7CisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7CisgICAgV2ViVGhy
ZWFkUnVuKF57CisgICAgICAgIGlmIChtX21lZGlhRWxlbWVudCkKKyAgICAgICAgICAgIG1fbWVk
aWFFbGVtZW50LT5lbmRTY2FubmluZygpOworICAgICAgICBwcm90ZWN0LmNsZWFyKCk7CisgICAg
fSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnJlcXVl
c3RFeGl0RnVsbHNjcmVlbigpCit7CisgICAgaWYgKCFtX21lZGlhRWxlbWVudCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRp
YUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7CisgICAgV2ViVGhyZWFkUnVuKF57CisgICAgICAgIGlm
IChtX21lZGlhRWxlbWVudCAmJiBtX21lZGlhRWxlbWVudC0+aXNGdWxsc2NyZWVuKCkpCisgICAg
ICAgICAgICBtX21lZGlhRWxlbWVudC0+ZXhpdEZ1bGxzY3JlZW4oKTsKKyAgICAgICAgcHJvdGVj
dC5jbGVhcigpOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVk
aWFFbGVtZW50OjpzZXRWaWRlb0xheWVyRnJhbWUoRmxvYXRSZWN0IHJlY3QpCit7CisgICAgbV92
aWRlb0ZyYW1lID0gcmVjdDsKKyAgICBbbV92aWRlb0Z1bGxzY3JlZW5MYXllciBzZXRGcmFtZTpD
R1JlY3QocmVjdCldOworICAgIG1fbWVkaWFFbGVtZW50LT5zZXRWaWRlb0Z1bGxzY3JlZW5GcmFt
ZShyZWN0KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6
c2V0VmlkZW9MYXllckdyYXZpdHkoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0
eSBncmF2aXR5KQoreworICAgIE1lZGlhUGxheWVyOjpWaWRlb0dyYXZpdHkgdmlkZW9HcmF2aXR5
ID0gTWVkaWFQbGF5ZXI6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdDsKKyAgICBpZiAoZ3Jhdml0
eSA9PSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplKQorICAgICAg
ICB2aWRlb0dyYXZpdHkgPSBNZWRpYVBsYXllcjo6VmlkZW9HcmF2aXR5UmVzaXplOworICAgIGVs
c2UgaWYgKGdyYXZpdHkgPT0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJl
c2l6ZUFzcGVjdCkKKyAgICAgICAgdmlkZW9HcmF2aXR5ID0gTWVkaWFQbGF5ZXI6OlZpZGVvR3Jh
dml0eVJlc2l6ZUFzcGVjdDsKKyAgICBlbHNlIGlmIChncmF2aXR5ID09IFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsKQorICAgICAgICB2aWRlb0dy
YXZpdHkgPSBNZWRpYVBsYXllcjo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbDsKKyAgICBl
bHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIAorICAgIG1fbWVkaWFFbGVt
ZW50LT5zZXRWaWRlb0Z1bGxzY3JlZW5HcmF2aXR5KHZpZGVvR3Jhdml0eSk7Cit9CisKK3ZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnNlbGVjdEF1ZGlvTWVkaWFPcHRp
b24odWludDY0X3QpCit7CisgICAgLy8gRklYTUU6IDEzMTIzNiBJbXBsZW1lbnQgYXVkaW8gdHJh
Y2sgc2VsZWN0aW9uLgorfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVt
ZW50OjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpCit7CisgICAgVGV4
dFRyYWNrKiB0ZXh0VHJhY2sgPSBudWxscHRyOworICAgIAorICAgIGlmIChpbmRleCA8IG1fbGVn
aWJsZVRyYWNrc0Zvck1lbnUuc2l6ZSgpKQorICAgICAgICB0ZXh0VHJhY2sgPSBtX2xlZ2libGVU
cmFja3NGb3JNZW51W3N0YXRpY19jYXN0PHNpemVfdD4oaW5kZXgpXS5nZXQoKTsKKyAgICAKKyAg
ICBtX21lZGlhRWxlbWVudC0+c2V0U2VsZWN0ZWRUZXh0VHJhY2sodGV4dFRyYWNrKTsKK30KKwor
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6dXBkYXRlTGVnaWJsZU9w
dGlvbnMoKQoreworICAgIFRleHRUcmFja0xpc3QqIHRyYWNrTGlzdCA9IG1fbWVkaWFFbGVtZW50
LT50ZXh0VHJhY2tzKCk7CisgICAgaWYgKCF0cmFja0xpc3QgfHwgIW1fbWVkaWFFbGVtZW50LT5k
b2N1bWVudCgpLnBhZ2UoKSB8fCAhbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCkp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBXVEY6OkF0b21pY1N0cmluZyBkaXNwbGF5TW9k
ZSA9IG1fbWVkaWFFbGVtZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgpLT5jYXB0aW9uRGlzcGxheU1v
ZGUoKTsKKyAgICBUZXh0VHJhY2sqIG9mZkl0ZW0gPSBtX21lZGlhRWxlbWVudC0+bWVkaWFDb250
cm9sc0hvc3QoKS0+Y2FwdGlvbk1lbnVPZmZJdGVtKCk7CisgICAgVGV4dFRyYWNrKiBhdXRvbWF0
aWNJdGVtID0gbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCktPmNhcHRpb25NZW51
QXV0b21hdGljSXRlbSgpOworICAgIENhcHRpb25Vc2VyUHJlZmVyZW5jZXMmIGNhcHRpb25QcmVm
ZXJlbmNlcyA9ICptX21lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCktPmdyb3VwKCkuY2Fw
dGlvblByZWZlcmVuY2VzKCk7CisgICAgbV9sZWdpYmxlVHJhY2tzRm9yTWVudSA9IGNhcHRpb25Q
cmVmZXJlbmNlcy5zb3J0ZWRUcmFja0xpc3RGb3JNZW51KHRyYWNrTGlzdCk7CisgICAgVmVjdG9y
PFN0cmluZz4gdHJhY2tEaXNwbGF5TmFtZXM7CisgICAgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCA9
IDA7CisgICAgdWludDY0X3Qgb2ZmSW5kZXggPSAwOworICAgIGJvb2wgdHJhY2tNZW51SXRlbVNl
bGVjdGVkID0gZmFsc2U7CisgICAgCisgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8
IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnUuc2l6ZSgpOyBpbmRleCsrKSB7CisgICAgICAgIGF1dG8m
IHRyYWNrID0gbV9sZWdpYmxlVHJhY2tzRm9yTWVudVtpbmRleF07CisgICAgICAgIHRyYWNrRGlz
cGxheU5hbWVzLmFwcGVuZChjYXB0aW9uUHJlZmVyZW5jZXMuZGlzcGxheU5hbWVGb3JUcmFjayh0
cmFjay5nZXQoKSkpOworICAgICAgICAKKyAgICAgICAgaWYgKHRyYWNrID09IG9mZkl0ZW0pCisg
ICAgICAgICAgICBvZmZJbmRleCA9IGluZGV4OworICAgICAgICAKKyAgICAgICAgaWYgKHRyYWNr
ID09IGF1dG9tYXRpY0l0ZW0gJiYgZGlzcGxheU1vZGUgPT0gTWVkaWFDb250cm9sc0hvc3Q6OmF1
dG9tYXRpY0tleXdvcmQoKSkgeworICAgICAgICAgICAgc2VsZWN0ZWRJbmRleCA9IGluZGV4Owor
ICAgICAgICAgICAgdHJhY2tNZW51SXRlbVNlbGVjdGVkID0gdHJ1ZTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgaWYgKGRpc3BsYXlNb2RlICE9IE1lZGlhQ29udHJvbHNIb3N0OjphdXRv
bWF0aWNLZXl3b3JkKCkgJiYgdHJhY2stPm1vZGUoKSA9PSBUZXh0VHJhY2s6OnNob3dpbmdLZXl3
b3JkKCkpIHsKKyAgICAgICAgICAgIHNlbGVjdGVkSW5kZXggPSBpbmRleDsKKyAgICAgICAgICAg
IHRyYWNrTWVudUl0ZW1TZWxlY3RlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgCisg
ICAgaWYgKG9mZkluZGV4ICYmICF0cmFja01lbnVJdGVtU2VsZWN0ZWQgJiYgZGlzcGxheU1vZGUg
PT0gTWVkaWFDb250cm9sc0hvc3Q6OmZvcmNlZE9ubHlLZXl3b3JkKCkpIHsKKyAgICAgICAgc2Vs
ZWN0ZWRJbmRleCA9IG9mZkluZGV4OworICAgICAgICB0cmFja01lbnVJdGVtU2VsZWN0ZWQgPSB0
cnVlOworICAgIH0KKyAgICAKKyAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0TGVn
aWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyh0cmFja0Rpc3BsYXlOYW1lcywgc2VsZWN0ZWRJbmRl
eCk7Cit9CisKK2NvbnN0IFZlY3RvcjxBdG9taWNTdHJpbmc+JiBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbE1lZGlhRWxlbWVudDo6b2JzZXJ2ZWRFdmVudE5hbWVzKCkKK3sKKyAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8VmVjdG9yPEF0b21pY1N0cmluZz4+IHNFdmVudE5hbWVzOworCisgICAgaWYg
KCFzRXZlbnROYW1lcy5nZXQoKS5zaXplKCkpIHsKKyAgICAgICAgc0V2ZW50TmFtZXMuZ2V0KCku
YXBwZW5kKGV2ZW50TmFtZXMoKS5kdXJhdGlvbmNoYW5nZUV2ZW50KTsKKyAgICAgICAgc0V2ZW50
TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFtZXMoKS5wYXVzZUV2ZW50KTsKKyAgICAgICAgc0V2
ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFtZXMoKS5wbGF5RXZlbnQpOworICAgICAgICBz
RXZlbnROYW1lcy5nZXQoKS5hcHBlbmQoZXZlbnROYW1lcygpLnJhdGVjaGFuZ2VFdmVudCk7Cisg
ICAgICAgIHNFdmVudE5hbWVzLmdldCgpLmFwcGVuZChldmVudE5hbWVzKCkudGltZXVwZGF0ZUV2
ZW50KTsKKyAgICAgICAgc0V2ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFtZXMoKS5hZGR0
cmFja0V2ZW50KTsKKyAgICAgICAgc0V2ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFtZXMo
KS5yZW1vdmV0cmFja0V2ZW50KTsKKyAgICAgICAgc0V2ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2
ZW50TmFtZXMoKS53ZWJraXRjdXJyZW50cGxheWJhY2t0YXJnZXRpc3dpcmVsZXNzY2hhbmdlZEV2
ZW50KTsKKyAgICB9CisgICAgcmV0dXJuIHNFdmVudE5hbWVzLmdldCgpOworfQorCitjb25zdCBB
dG9taWNTdHJpbmcmIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpldmVudE5h
bWVBbGwoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHNFdmVu
dE5hbWVBbGwgPSAiYWxsRXZlbnRzIjsKKyAgICByZXR1cm4gc0V2ZW50TmFtZUFsbDsKK30KKwor
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tCSh3b3JraW5n
IGNvcHkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTI2LDE5ICsyNiwxOCBAQAog
I2ltcG9ydCAiY29uZmlnLmgiCiAKICNpZiBQTEFURk9STShJT1MpCi0KLSNpbXBvcnQgIldlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50LmgiCisjaW1wb3J0ICJXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oIgogCiAjaW1wb3J0ICJET01FdmVudEludGVybmFsLmgi
CiAjaW1wb3J0ICJMb2dnaW5nLmgiCiAjaW1wb3J0ICJNZWRpYUNvbnRyb2xzSG9zdC5oIgogI2lt
cG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLmgiCisjaW1wb3J0IDxRdWFydHpDb3Jl
L0NvcmVBbmltYXRpb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvRE9NRXZlbnRMaXN0ZW5lci5oPgog
I2ltcG9ydCA8V2ViQ29yZS9FdmVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9FdmVudExpc3RlbmVy
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0V2ZW50TmFtZXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvSFRN
TEVsZW1lbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvSFRNTE1lZGlhRWxlbWVudC5oPgogI2ltcG9y
dCA8V2ViQ29yZS9IVE1MVmlkZW9FbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BhZ2UuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvUGFnZUdyb3VwLmg+CkBAIC00Niw4NCArNDUsNzkgQEAKICNpbXBv
cnQgPFdlYkNvcmUvVGV4dFRyYWNrTGlzdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9UaW1lUmFuZ2Vz
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVUaHJlYWRSdW4uaD4KLSNpbXBvcnQgPFF1YXJ0
ekNvcmUvQ29yZUFuaW1hdGlvbi5oPgogI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAj
aW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
LVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbE1lZGlhRWxlbWVudCgpCitXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQoKQogICAgIDogRXZlbnRMaXN0ZW5l
cihFdmVudExpc3RlbmVyOjpDUFBFdmVudExpc3RlbmVyVHlwZSkKLSAgICAsIG1faXNMaXN0ZW5p
bmd7ZmFsc2V9CisgICAgLCBtX2lzTGlzdGVuaW5nKGZhbHNlKQogewogfQogCi1XZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6fldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFF
bGVtZW50KCkKK1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojp+V2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQoKQogewogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsTWVkaWFFbGVtZW50OjpzZXRNZWRpYUVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCog
bWVkaWFFbGVtZW50KQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6
c2V0VmlkZW9FbGVtZW50KEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvRWxlbWVudCkKIHsKLSAgICBp
ZiAobV9tZWRpYUVsZW1lbnQgPT0gbWVkaWFFbGVtZW50KQorICAgIGlmIChtX3ZpZGVvRWxlbWVu
dCA9PSB2aWRlb0VsZW1lbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX21lZGlhRWxl
bWVudCAmJiBtX2lzTGlzdGVuaW5nKSB7CisgICAgaWYgKG1fdmlkZW9FbGVtZW50ICYmIG1faXNM
aXN0ZW5pbmcpIHsKICAgICAgICAgZm9yIChhdXRvIGV2ZW50TmFtZSA6IG9ic2VydmVkRXZlbnRO
YW1lcygpKQotICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnJlbW92ZUV2ZW50TGlzdGVuZXIo
ZXZlbnROYW1lLCB0aGlzLCBmYWxzZSk7CisgICAgICAgICAgICBtX3ZpZGVvRWxlbWVudC0+cmVt
b3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIHRoaXMsIGZhbHNlKTsKICAgICB9CiAgICAgbV9p
c0xpc3RlbmluZyA9IGZhbHNlOwogCi0gICAgbV9tZWRpYUVsZW1lbnQgPSBtZWRpYUVsZW1lbnQ7
CisgICAgbV92aWRlb0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7CiAKLSAgICBpZiAoIW1fbWVkaWFF
bGVtZW50KQorICAgIGlmICghbV92aWRlb0VsZW1lbnQpCiAgICAgICAgIHJldHVybjsKIAogICAg
IGZvciAoYXV0byBldmVudE5hbWUgOiBvYnNlcnZlZEV2ZW50TmFtZXMoKSkKLSAgICAgICAgbV9t
ZWRpYUVsZW1lbnQtPmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCB0aGlzLCBmYWxzZSk7Cisg
ICAgICAgIG1fdmlkZW9FbGVtZW50LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgdGhpcywg
ZmFsc2UpOwogICAgIG1faXNMaXN0ZW5pbmcgPSB0cnVlOwogCiAgICAgdXBkYXRlRm9yRXZlbnRO
YW1lKGV2ZW50TmFtZUFsbCgpKTsKIAotICAgIGlmIChpc0hUTUxWaWRlb0VsZW1lbnQobV9tZWRp
YUVsZW1lbnQuZ2V0KCkpKSB7Ci0gICAgICAgIEhUTUxWaWRlb0VsZW1lbnQgKnZpZGVvRWxlbWVu
dCA9IHRvSFRNTFZpZGVvRWxlbWVudChtX21lZGlhRWxlbWVudC5nZXQoKSk7Ci0gICAgICAgIG1f
dmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRWaWRlb0RpbWVuc2lvbnModHJ1ZSwgdmlkZW9F
bGVtZW50LT52aWRlb1dpZHRoKCksIHZpZGVvRWxlbWVudC0+dmlkZW9IZWlnaHQoKSk7Ci0gICAg
fSBlbHNlCi0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRWaWRlb0RpbWVu
c2lvbnMoZmFsc2UsIDAsIDApOworICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRW
aWRlb0RpbWVuc2lvbnModHJ1ZSwgdmlkZW9FbGVtZW50LT52aWRlb1dpZHRoKCksIHZpZGVvRWxl
bWVudC0+dmlkZW9IZWlnaHQoKSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxN
ZWRpYUVsZW1lbnQ6OmhhbmRsZUV2ZW50KFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBXZWJDb3JlOjpFdmVudCogZXZlbnQpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlk
ZW9FbGVtZW50OjpoYW5kbGVFdmVudChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
V2ViQ29yZTo6RXZlbnQqIGV2ZW50KQogewogICAgIExPRyhNZWRpYSwgImhhbmRsZUV2ZW50ICVz
IiwgZXZlbnQtPnR5cGUoKS5jaGFyYWN0ZXJzOCgpKTsKICAgICB1cGRhdGVGb3JFdmVudE5hbWUo
ZXZlbnQtPnR5cGUoKSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVs
ZW1lbnQ6OnVwZGF0ZUZvckV2ZW50TmFtZShjb25zdCBXVEY6OkF0b21pY1N0cmluZyYgZXZlbnRO
YW1lKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6dXBkYXRlRm9y
RXZlbnROYW1lKGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJiBldmVudE5hbWUpCiB7Ci0gICAgaWYg
KCFtX21lZGlhRWxlbWVudCB8fCAhbV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UpCisgICAgaWYg
KCFtX3ZpZGVvRWxlbWVudCB8fCAhbV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UpCiAgICAgICAg
IHJldHVybjsKICAgICAKICAgICBib29sIGFsbCA9IGV2ZW50TmFtZSA9PSBldmVudE5hbWVBbGwo
KTsKIAogICAgIGlmIChhbGwKICAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5k
dXJhdGlvbmNoYW5nZUV2ZW50KSB7Ci0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
LT5zZXREdXJhdGlvbihtX21lZGlhRWxlbWVudC0+ZHVyYXRpb24oKSk7CisgICAgICAgIG1fdmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXREdXJhdGlvbihtX3ZpZGVvRWxlbWVudC0+ZHVyYXRp
b24oKSk7CiAgICAgICAgIC8vIFRoZXNlIGlzIG5vIHN0YW5kYXJkIGV2ZW50IGZvciBtaW5GYXN0
UmV2ZXJzZVJhdGVDaGFuZ2U7IGR1cmF0aW9uIGNoYW5nZSBpcyBhIHJlYXNvbmFibGUgcHJveHkg
Zm9yIGl0LgogICAgICAgICAvLyBJdCBoYXBwZW5zIGV2ZXJ5IHRpbWUgYSBuZXcgaXRlbSBiZWNv
bWVzIHJlYWR5IHRvIHBsYXkuCi0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5z
ZXRDYW5QbGF5RmFzdFJldmVyc2UobV9tZWRpYUVsZW1lbnQtPm1pbkZhc3RSZXZlcnNlUmF0ZSgp
IDwgMC4wKTsKKyAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UtPnNldENhblBsYXlG
YXN0UmV2ZXJzZShtX3ZpZGVvRWxlbWVudC0+bWluRmFzdFJldmVyc2VSYXRlKCkgPCAwLjApOwog
ICAgIH0KIAogICAgIGlmIChhbGwKICAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMo
KS5wYXVzZUV2ZW50CiAgICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkucGxheUV2
ZW50CiAgICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkucmF0ZWNoYW5nZUV2ZW50
KQotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0UmF0ZSghbV9tZWRpYUVs
ZW1lbnQtPnBhdXNlZCgpLCBtX21lZGlhRWxlbWVudC0+cGxheWJhY2tSYXRlKCkpOworICAgICAg
ICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0UmF0ZSghbV92aWRlb0VsZW1lbnQtPnBh
dXNlZCgpLCBtX3ZpZGVvRWxlbWVudC0+cGxheWJhY2tSYXRlKCkpOwogCiAgICAgaWYgKGFsbAog
ICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnRpbWV1cGRhdGVFdmVudCkgewot
ICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0Q3VycmVudFRpbWUobV9tZWRp
YUVsZW1lbnQtPmN1cnJlbnRUaW1lKCksIFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gc3lz
dGVtVXB0aW1lXSk7CisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRDdXJy
ZW50VGltZShtX3ZpZGVvRWxlbWVudC0+Y3VycmVudFRpbWUoKSwgW1tOU1Byb2Nlc3NJbmZvIHBy
b2Nlc3NJbmZvXSBzeXN0ZW1VcHRpbWVdKTsKICAgICAgICAgLy8gRklYTUU6IDEzMDc4OCAtIGZp
bmQgYSBiZXR0ZXIgZXZlbnQgdG8gdXBkYXRlIHNlZWthYmxlIHJhbmdlcyBmcm9tLgotICAgICAg
ICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0U2Vla2FibGVSYW5nZXMoKm1fbWVkaWFF
bGVtZW50LT5zZWVrYWJsZSgpKTsKKyAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2Ut
PnNldFNlZWthYmxlUmFuZ2VzKCptX3ZpZGVvRWxlbWVudC0+c2Vla2FibGUoKSk7CiAgICAgfQog
CiAgICAgaWYgKGFsbApAQCAtMTMzLDI2ICsxMjcsMjYgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbE1lZGlhRWxlbWVudAogCiAgICAgaWYgKGFsbAogICAgICAgICB8fCBldmVudE5hbWUg
PT0gZXZlbnROYW1lcygpLndlYmtpdGN1cnJlbnRwbGF5YmFja3RhcmdldGlzd2lyZWxlc3NjaGFu
Z2VkRXZlbnQpIHsKLSAgICAgICAgYm9vbCBlbmFibGVkID0gbV9tZWRpYUVsZW1lbnQtPm1lZGlh
U2Vzc2lvbigpLmN1cnJlbnRQbGF5YmFja1RhcmdldElzV2lyZWxlc3MoKm1fbWVkaWFFbGVtZW50
KTsKKyAgICAgICAgYm9vbCBlbmFibGVkID0gbV92aWRlb0VsZW1lbnQtPm1lZGlhU2Vzc2lvbigp
LmN1cnJlbnRQbGF5YmFja1RhcmdldElzV2lyZWxlc3MoKm1fdmlkZW9FbGVtZW50KTsKICAgICAg
ICAgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlw
ZSB0YXJnZXRUeXBlID0gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOjpUYXJnZXRUeXBlTm9u
ZTsKICAgICAgICAgU3RyaW5nIGxvY2FsaXplZERldmljZU5hbWU7CiAKLSAgICAgICAgaWYgKG1f
bWVkaWFFbGVtZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgpKSB7CisgICAgICAgIGlmIChtX3ZpZGVv
RWxlbWVudC0+bWVkaWFDb250cm9sc0hvc3QoKSkgewogICAgICAgICAgICAgREVQUkVDQVRFRF9E
RUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYWlycGxheSwgKEFTQ0lJTGl0ZXJhbCgiYWlycGxh
eSIpKSk7CiAgICAgICAgICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5n
LCB0dm91dCwgKEFTQ0lJTGl0ZXJhbCgidHZvdXQiKSkpOwogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBTdHJpbmcgdHlwZSA9IG1fbWVkaWFFbGVtZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgpLT5l
eHRlcm5hbERldmljZVR5cGUoKTsKKyAgICAgICAgICAgIFN0cmluZyB0eXBlID0gbV92aWRlb0Vs
ZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCktPmV4dGVybmFsRGV2aWNlVHlwZSgpOwogICAgICAg
ICAgICAgaWYgKHR5cGUgPT0gYWlycGxheSkKICAgICAgICAgICAgICAgICB0YXJnZXRUeXBlID0g
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOjpUYXJnZXRUeXBlQWlyUGxheTsKICAgICAgICAg
ICAgIGVsc2UgaWYgKHR5cGUgPT0gdHZvdXQpCiAgICAgICAgICAgICAgICAgdGFyZ2V0VHlwZSA9
IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZTo6VGFyZ2V0VHlwZVRWT3V0OwotICAgICAgICAg
ICAgbG9jYWxpemVkRGV2aWNlTmFtZSA9IG1fbWVkaWFFbGVtZW50LT5tZWRpYUNvbnRyb2xzSG9z
dCgpLT5leHRlcm5hbERldmljZURpc3BsYXlOYW1lKCk7CisgICAgICAgICAgICBsb2NhbGl6ZWRE
ZXZpY2VOYW1lID0gbV92aWRlb0VsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCktPmV4dGVybmFs
RGV2aWNlRGlzcGxheU5hbWUoKTsKICAgICAgICAgfQogICAgICAgICBtX3ZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZS0+c2V0RXh0ZXJuYWxQbGF5YmFjayhlbmFibGVkLCB0YXJnZXRUeXBlLCBsb2Nh
bGl6ZWREZXZpY2VOYW1lKTsKICAgICB9CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxNZWRpYUVsZW1lbnQ6OnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKFBsYXRmb3JtTGF5ZXIqIHZp
ZGVvTGF5ZXIpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRW
aWRlb0Z1bGxzY3JlZW5MYXllcihQbGF0Zm9ybUxheWVyKiB2aWRlb0xheWVyKQogewogICAgIGlm
IChtX3ZpZGVvRnVsbHNjcmVlbkxheWVyID09IHZpZGVvTGF5ZXIpCiAgICAgICAgIHJldHVybjsK
QEAgLTE2MCwxMzQgKzE1NCwxMzUgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlh
RWxlbWVudAogICAgIG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIgPSB2aWRlb0xheWVyOwogICAgIFtt
X3ZpZGVvRnVsbHNjcmVlbkxheWVyIHNldEZyYW1lOm1fdmlkZW9GcmFtZV07CiAgICAgCi0gICAg
X19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+IHByb3Rl
Y3QodGhpcyk7CisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRl
b0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgIGlm
IChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5zZXRWaWRlb0Z1
bGxzY3JlZW5MYXllcihtX3ZpZGVvRnVsbHNjcmVlbkxheWVyLmdldCgpKTsKKyAgICAgICAgaWYg
KG1fdmlkZW9FbGVtZW50KQorICAgICAgICAgICAgbV92aWRlb0VsZW1lbnQtPnNldFZpZGVvRnVs
bHNjcmVlbkxheWVyKG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIuZ2V0KCkpOwogICAgICAgICBwcm90
ZWN0LmNsZWFyKCk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxN
ZWRpYUVsZW1lbnQ6OnBsYXkoKSB7Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxNZWRpYUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7Cit2b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50OjpwbGF5KCkKK3sKKyAgICBfX2Jsb2NrIFJlZlB0cjxXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKICAgICBXZWJU
aHJlYWRSdW4oXnsKLSAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICAgICAgbV9t
ZWRpYUVsZW1lbnQtPnBsYXkoKTsKKyAgICAgICAgaWYgKG1fdmlkZW9FbGVtZW50KQorICAgICAg
ICAgICAgbV92aWRlb0VsZW1lbnQtPnBsYXkoKTsKICAgICAgICAgcHJvdGVjdC5jbGVhcigpOwog
ICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50Ojpw
YXVzZSgpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpwYXVzZSgp
CiB7Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1l
bnQ+IHByb3RlY3QodGhpcyk7CisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKF57Ci0g
ICAgICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5w
YXVzZSgpOworICAgICAgICBpZiAobV92aWRlb0VsZW1lbnQpCisgICAgICAgICAgICBtX3ZpZGVv
RWxlbWVudC0+cGF1c2UoKTsKICAgICAgICAgcHJvdGVjdC5jbGVhcigpOwogICAgIH0pOwogfQog
Ci12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50Ojp0b2dnbGVQbGF5U3Rh
dGUoKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6dG9nZ2xlUGxh
eVN0YXRlKCkKIHsKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1l
ZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKKyAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKICAgICBXZWJUaHJlYWRS
dW4oXnsKLSAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICAgICAgbV9tZWRpYUVs
ZW1lbnQtPnRvZ2dsZVBsYXlTdGF0ZSgpOworICAgICAgICBpZiAobV92aWRlb0VsZW1lbnQpCisg
ICAgICAgICAgICBtX3ZpZGVvRWxlbWVudC0+dG9nZ2xlUGxheVN0YXRlKCk7CiAgICAgICAgIHBy
b3RlY3QuY2xlYXIoKTsKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bE1lZGlhRWxlbWVudDo6YmVnaW5TY3J1YmJpbmcoKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudDo6YmVnaW5TY3J1YmJpbmcoKQogewotICAgIF9fYmxvY2sgUmVmUHRy
PFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOworICAg
IF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBwcm90
ZWN0KHRoaXMpOwogICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICBpZiAobV9tZWRpYUVsZW1l
bnQpCi0gICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+YmVnaW5TY3J1YmJpbmcoKTsKKyAgICAg
ICAgaWYgKG1fdmlkZW9FbGVtZW50KQorICAgICAgICAgICAgbV92aWRlb0VsZW1lbnQtPmJlZ2lu
U2NydWJiaW5nKCk7CiAgICAgICAgIHByb3RlY3QuY2xlYXIoKTsKICAgICB9KTsKIH0KIAotdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6ZW5kU2NydWJiaW5nKCkKK3Zv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmVuZFNjcnViYmluZygpCiB7
Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+
IHByb3RlY3QodGhpcyk7CisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKF57Ci0gICAg
ICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5lbmRT
Y3J1YmJpbmcoKTsKKyAgICAgICAgaWYgKG1fdmlkZW9FbGVtZW50KQorICAgICAgICAgICAgbV92
aWRlb0VsZW1lbnQtPmVuZFNjcnViYmluZygpOwogICAgICAgICBwcm90ZWN0LmNsZWFyKCk7CiAg
ICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnNl
ZWtUb1RpbWUoZG91YmxlIHRpbWUpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9F
bGVtZW50OjpzZWVrVG9UaW1lKGRvdWJsZSB0aW1lKQogewotICAgIF9fYmxvY2sgUmVmUHRyPFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOworICAgIF9f
YmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBwcm90ZWN0
KHRoaXMpOwogICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICBpZiAobV9tZWRpYUVsZW1lbnQp
Ci0gICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+c2V0Q3VycmVudFRpbWUodGltZSk7CisgICAg
ICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKKyAgICAgICAgICAgIG1fdmlkZW9FbGVtZW50LT5zZXRD
dXJyZW50VGltZSh0aW1lKTsKICAgICAgICAgcHJvdGVjdC5jbGVhcigpOwogICAgIH0pOwogfQog
Ci12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpmYXN0U2Vlayhkb3Vi
bGUgdGltZSkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmZhc3RT
ZWVrKGRvdWJsZSB0aW1lKQogewotICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsTWVkaWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOworICAgIF9fYmxvY2sgUmVmUHRyPFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBwcm90ZWN0KHRoaXMpOwogICAgIFdl
YlRocmVhZFJ1biheewotICAgICAgICBpZiAobV9tZWRpYUVsZW1lbnQpCi0gICAgICAgICAgICBt
X21lZGlhRWxlbWVudC0+ZmFzdFNlZWsodGltZSk7CisgICAgICAgIGlmIChtX3ZpZGVvRWxlbWVu
dCkKKyAgICAgICAgICAgIG1fdmlkZW9FbGVtZW50LT5mYXN0U2Vlayh0aW1lKTsKICAgICAgICAg
cHJvdGVjdC5jbGVhcigpOwogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsTWVkaWFFbGVtZW50OjpiZWdpblNjYW5uaW5nRm9yd2FyZCgpCit2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpiZWdpblNjYW5uaW5nRm9yd2FyZCgpCiB7Ci0gICAg
X19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+IHByb3Rl
Y3QodGhpcyk7CisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRl
b0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgIGlm
IChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5iZWdpblNjYW5u
aW5nKE1lZGlhQ29udHJvbGxlckludGVyZmFjZTo6Rm9yd2FyZCk7CisgICAgICAgIGlmIChtX3Zp
ZGVvRWxlbWVudCkKKyAgICAgICAgICAgIG1fdmlkZW9FbGVtZW50LT5iZWdpblNjYW5uaW5nKE1l
ZGlhQ29udHJvbGxlckludGVyZmFjZTo6Rm9yd2FyZCk7CiAgICAgICAgIHByb3RlY3QuY2xlYXIo
KTsKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVu
dDo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKCkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ6OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpCiB7Ci0gICAgX19ibG9jayBSZWZQ
dHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7Cisg
ICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IHBy
b3RlY3QodGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgIGlmIChtX21lZGlhRWxl
bWVudCkKLSAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5iZWdpblNjYW5uaW5nKE1lZGlhQ29u
dHJvbGxlckludGVyZmFjZTo6QmFja3dhcmQpOworICAgICAgICBpZiAobV92aWRlb0VsZW1lbnQp
CisgICAgICAgICAgICBtX3ZpZGVvRWxlbWVudC0+YmVnaW5TY2FubmluZyhNZWRpYUNvbnRyb2xs
ZXJJbnRlcmZhY2U6OkJhY2t3YXJkKTsKICAgICAgICAgcHJvdGVjdC5jbGVhcigpOwogICAgIH0p
OwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjplbmRTY2Fu
bmluZygpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjplbmRTY2Fu
bmluZygpCiB7Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRp
YUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7CisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7CiAgICAgV2ViVGhyZWFkUnVu
KF57Ci0gICAgICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgICAgIG1fbWVkaWFFbGVt
ZW50LT5lbmRTY2FubmluZygpOworICAgICAgICBpZiAobV92aWRlb0VsZW1lbnQpCisgICAgICAg
ICAgICBtX3ZpZGVvRWxlbWVudC0+ZW5kU2Nhbm5pbmcoKTsKICAgICAgICAgcHJvdGVjdC5jbGVh
cigpOwogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVt
ZW50OjpyZXF1ZXN0RXhpdEZ1bGxzY3JlZW4oKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bFZpZGVvRWxlbWVudDo6cmVxdWVzdEV4aXRGdWxsc2NyZWVuKCkKIHsKLSAgICBpZiAoIW1fbWVk
aWFFbGVtZW50KQorICAgIGlmICghbV92aWRlb0VsZW1lbnQpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50PiBw
cm90ZWN0KHRoaXMpOworICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50PiBwcm90ZWN0KHRoaXMpOwogICAgIFdlYlRocmVhZFJ1biheewotICAgICAg
ICBpZiAobV9tZWRpYUVsZW1lbnQgJiYgbV9tZWRpYUVsZW1lbnQtPmlzRnVsbHNjcmVlbigpKQot
ICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmV4aXRGdWxsc2NyZWVuKCk7CisgICAgICAgIGlm
IChtX3ZpZGVvRWxlbWVudCAmJiBtX3ZpZGVvRWxlbWVudC0+aXNGdWxsc2NyZWVuKCkpCisgICAg
ICAgICAgICBtX3ZpZGVvRWxlbWVudC0+ZXhpdEZ1bGxzY3JlZW4oKTsKICAgICAgICAgcHJvdGVj
dC5jbGVhcigpOwogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVk
aWFFbGVtZW50OjpzZXRWaWRlb0xheWVyRnJhbWUoRmxvYXRSZWN0IHJlY3QpCit2b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0xheWVyRnJhbWUoRmxvYXRS
ZWN0IHJlY3QpCiB7CiAgICAgbV92aWRlb0ZyYW1lID0gcmVjdDsKICAgICBbbV92aWRlb0Z1bGxz
Y3JlZW5MYXllciBzZXRGcmFtZTpDR1JlY3QocmVjdCldOwotICAgIG1fbWVkaWFFbGVtZW50LT5z
ZXRWaWRlb0Z1bGxzY3JlZW5GcmFtZShyZWN0KTsKKyAgICBtX3ZpZGVvRWxlbWVudC0+c2V0Vmlk
ZW9GdWxsc2NyZWVuRnJhbWUocmVjdCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxNZWRpYUVsZW1lbnQ6OnNldFZpZGVvTGF5ZXJHcmF2aXR5KFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsOjpWaWRlb0dyYXZpdHkgZ3Jhdml0eSkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ6OnNldFZpZGVvTGF5ZXJHcmF2aXR5KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
OjpWaWRlb0dyYXZpdHkgZ3Jhdml0eSkKIHsKICAgICBNZWRpYVBsYXllcjo6VmlkZW9HcmF2aXR5
IHZpZGVvR3Jhdml0eSA9IE1lZGlhUGxheWVyOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3Q7CiAg
ICAgaWYgKGdyYXZpdHkgPT0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJl
c2l6ZSkKQEAgLTI5OSwzNCArMjk0LDM0IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxN
ZWRpYUVsZW1lbnQKICAgICBlbHNlCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
IAotICAgIG1fbWVkaWFFbGVtZW50LT5zZXRWaWRlb0Z1bGxzY3JlZW5HcmF2aXR5KHZpZGVvR3Jh
dml0eSk7CisgICAgbV92aWRlb0VsZW1lbnQtPnNldFZpZGVvRnVsbHNjcmVlbkdyYXZpdHkodmlk
ZW9HcmF2aXR5KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVu
dDo6c2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCkKK3ZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QpCiB7
CiAgICAgLy8gRklYTUU6IDEzMTIzNiBJbXBsZW1lbnQgYXVkaW8gdHJhY2sgc2VsZWN0aW9uLgog
fQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpzZWxlY3RMZWdp
YmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50OjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgp
CiB7CiAgICAgVGV4dFRyYWNrKiB0ZXh0VHJhY2sgPSBudWxscHRyOwogICAgIAogICAgIGlmIChp
bmRleCA8IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnUuc2l6ZSgpKQogICAgICAgICB0ZXh0VHJhY2sg
PSBtX2xlZ2libGVUcmFja3NGb3JNZW51W3N0YXRpY19jYXN0PHNpemVfdD4oaW5kZXgpXS5nZXQo
KTsKICAgICAKLSAgICBtX21lZGlhRWxlbWVudC0+c2V0U2VsZWN0ZWRUZXh0VHJhY2sodGV4dFRy
YWNrKTsKKyAgICBtX3ZpZGVvRWxlbWVudC0+c2V0U2VsZWN0ZWRUZXh0VHJhY2sodGV4dFRyYWNr
KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6dXBkYXRl
TGVnaWJsZU9wdGlvbnMoKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dDo6dXBkYXRlTGVnaWJsZU9wdGlvbnMoKQogewotICAgIFRleHRUcmFja0xpc3QqIHRyYWNrTGlz
dCA9IG1fbWVkaWFFbGVtZW50LT50ZXh0VHJhY2tzKCk7Ci0gICAgaWYgKCF0cmFja0xpc3QgfHwg
IW1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSB8fCAhbV9tZWRpYUVsZW1lbnQtPm1l
ZGlhQ29udHJvbHNIb3N0KCkpCisgICAgVGV4dFRyYWNrTGlzdCogdHJhY2tMaXN0ID0gbV92aWRl
b0VsZW1lbnQtPnRleHRUcmFja3MoKTsKKyAgICBpZiAoIXRyYWNrTGlzdCB8fCAhbV92aWRlb0Vs
ZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpIHx8ICFtX3ZpZGVvRWxlbWVudC0+bWVkaWFDb250cm9s
c0hvc3QoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFdURjo6QXRvbWljU3RyaW5nIGRp
c3BsYXlNb2RlID0gbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCktPmNhcHRpb25E
aXNwbGF5TW9kZSgpOwotICAgIFRleHRUcmFjayogb2ZmSXRlbSA9IG1fbWVkaWFFbGVtZW50LT5t
ZWRpYUNvbnRyb2xzSG9zdCgpLT5jYXB0aW9uTWVudU9mZkl0ZW0oKTsKLSAgICBUZXh0VHJhY2sq
IGF1dG9tYXRpY0l0ZW0gPSBtX21lZGlhRWxlbWVudC0+bWVkaWFDb250cm9sc0hvc3QoKS0+Y2Fw
dGlvbk1lbnVBdXRvbWF0aWNJdGVtKCk7Ci0gICAgQ2FwdGlvblVzZXJQcmVmZXJlbmNlcyYgY2Fw
dGlvblByZWZlcmVuY2VzID0gKm1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKS0+Z3Jv
dXAoKS5jYXB0aW9uUHJlZmVyZW5jZXMoKTsKKyAgICBXVEY6OkF0b21pY1N0cmluZyBkaXNwbGF5
TW9kZSA9IG1fdmlkZW9FbGVtZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgpLT5jYXB0aW9uRGlzcGxh
eU1vZGUoKTsKKyAgICBUZXh0VHJhY2sqIG9mZkl0ZW0gPSBtX3ZpZGVvRWxlbWVudC0+bWVkaWFD
b250cm9sc0hvc3QoKS0+Y2FwdGlvbk1lbnVPZmZJdGVtKCk7CisgICAgVGV4dFRyYWNrKiBhdXRv
bWF0aWNJdGVtID0gbV92aWRlb0VsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCktPmNhcHRpb25N
ZW51QXV0b21hdGljSXRlbSgpOworICAgIENhcHRpb25Vc2VyUHJlZmVyZW5jZXMmIGNhcHRpb25Q
cmVmZXJlbmNlcyA9ICptX3ZpZGVvRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCktPmdyb3VwKCku
Y2FwdGlvblByZWZlcmVuY2VzKCk7CiAgICAgbV9sZWdpYmxlVHJhY2tzRm9yTWVudSA9IGNhcHRp
b25QcmVmZXJlbmNlcy5zb3J0ZWRUcmFja0xpc3RGb3JNZW51KHRyYWNrTGlzdCk7CiAgICAgVmVj
dG9yPFN0cmluZz4gdHJhY2tEaXNwbGF5TmFtZXM7CiAgICAgdWludDY0X3Qgc2VsZWN0ZWRJbmRl
eCA9IDA7CkBAIC0zNTksNyArMzU0LDcgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1l
ZGlhRWxlbWVudAogICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRMZWdpYmxlTWVk
aWFTZWxlY3Rpb25PcHRpb25zKHRyYWNrRGlzcGxheU5hbWVzLCBzZWxlY3RlZEluZGV4KTsKIH0K
IAotY29uc3QgVmVjdG9yPEF0b21pY1N0cmluZz4mIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVk
aWFFbGVtZW50OjpvYnNlcnZlZEV2ZW50TmFtZXMoKQorY29uc3QgVmVjdG9yPEF0b21pY1N0cmlu
Zz4mIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpvYnNlcnZlZEV2ZW50TmFt
ZXMoKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxWZWN0b3I8QXRvbWljU3RyaW5nPj4g
c0V2ZW50TmFtZXM7CiAKQEAgLTM3Niw3ICszNzEsNyBAQCBjb25zdCBWZWN0b3I8QXRvbWljU3Ry
aW5nPiYgV2ViVmlkZW9GdWxsCiAgICAgcmV0dXJuIHNFdmVudE5hbWVzLmdldCgpOwogfQogCi1j
b25zdCBBdG9taWNTdHJpbmcmIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50Ojpl
dmVudE5hbWVBbGwoKQorY29uc3QgQXRvbWljU3RyaW5nJiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bFZpZGVvRWxlbWVudDo6ZXZlbnROYW1lQWxsKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8QXRvbWljU3RyaW5nPiBzRXZlbnROYW1lQWxsID0gImFsbEV2ZW50cyI7CiAgICAgcmV0dXJu
IHNFdmVudE5hbWVBbGw7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLmgJKHJldmlzaW9uIDE3MzE2
MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgIGNsYXNzIERpc3BsYXlTbGVlcERpc2FibGVyOwotICAgIGNsYXNzIEhUTUxN
ZWRpYUVsZW1lbnQ7CisgICAgY2xhc3MgSFRNTFZpZGVvRWxlbWVudDsKIH0KIAogQHByb3RvY29s
IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJEZWxlZ2F0ZTsKQEAgLTQyLDcgKzQyLDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBAaW50ZXJmYWNlIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXIgOiBOU1dpbmRvd0NvbnRyb2xsZXIgewogQHByaXZhdGUKLSAgICBSZWZQdHI8V2ViQ29y
ZTo6SFRNTE1lZGlhRWxlbWVudD4gX21lZGlhRWxlbWVudDsgLy8gKHJldGFpbikKKyAgICBSZWZQ
dHI8V2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudD4gX3ZpZGVvRWxlbWVudDsgLy8gKHJldGFpbikK
ICAgICBpZCA8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckRlbGVnYXRlPiBfZGVsZWdhdGU7
IC8vIChhc3NpZ24pCiAKICAgICBOU1dpbmRvdyAqX2JhY2tncm91bmRGdWxsc2NyZWVuV2luZG93
OyAvLyAocmV0YWluKQpAQCAtNjAsOCArNjAsOCBAQCBAaW50ZXJmYWNlIFdlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXIgCiAtICh2b2lkKXNldERlbGVnYXRlOihpZCA8V2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckRlbGVnYXRlPilkZWxlZ2F0ZTsKIAogLSAodm9pZClzZXR1cFZpZGVvT3Zl
cmxheTooQ0FMYXllciopbGF5ZXI7Ci0tICh2b2lkKXNldE1lZGlhRWxlbWVudDooV2ViQ29yZTo6
SFRNTE1lZGlhRWxlbWVudCopbWVkaWFFbGVtZW50OwotLSAoV2ViQ29yZTo6SFRNTE1lZGlhRWxl
bWVudCopbWVkaWFFbGVtZW50OworLSAodm9pZClzZXRWaWRlb0VsZW1lbnQ6KFdlYkNvcmU6OkhU
TUxWaWRlb0VsZW1lbnQqKXZpZGVvRWxlbWVudDsKKy0gKFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1l
bnQqKXZpZGVvRWxlbWVudDsKIAogLSAodm9pZCllbnRlckZ1bGxzY3JlZW46KE5TU2NyZWVuICop
c2NyZWVuOwogLSAodm9pZClleGl0RnVsbHNjcmVlbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Lm1tCShyZXZpc2lvbiAxNzMxNjEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUs
NyBAQAogI2ltcG9ydCA8Q2FyYm9uL0NhcmJvbi5oPgogI2ltcG9ydCA8UVRLaXQvUVRLaXQuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvRGlzcGxheVNsZWVwRGlzYWJsZXIuaD4KLSNpbXBvcnQgPFdlYkNv
cmUvSFRNTE1lZGlhRWxlbWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9IVE1MVmlkZW9FbGVtZW50
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NvZnRMaW5raW5nLmg+CiAjaW1wb3J0IDxvYmpjL3J1bnRp
bWUuaD4KIApAQCAtMTE0LDIxICsxMTQsMjEgQEAgLSAodm9pZCl3aW5kb3dEaWRMb2FkCiAgICAg
W1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjpzZWxmIHNl
bGVjdG9yOkBzZWxlY3RvcihhcHBsaWNhdGlvbkRpZENoYW5nZVNjcmVlblBhcmFtZXRlcnM6KSBu
YW1lOk5TQXBwbGljYXRpb25EaWRDaGFuZ2VTY3JlZW5QYXJhbWV0ZXJzTm90aWZpY2F0aW9uIG9i
amVjdDpOU0FwcF07CiB9CiAKLS0gKEhUTUxNZWRpYUVsZW1lbnQqKW1lZGlhRWxlbWVudAorLSAo
SFRNTFZpZGVvRWxlbWVudCopdmlkZW9FbGVtZW50CiB7Ci0gICAgcmV0dXJuIF9tZWRpYUVsZW1l
bnQuZ2V0KCk7CisgICAgcmV0dXJuIF92aWRlb0VsZW1lbnQuZ2V0KCk7CiB9CiAKLS0gKHZvaWQp
c2V0TWVkaWFFbGVtZW50OihIVE1MTWVkaWFFbGVtZW50KiltZWRpYUVsZW1lbnQKKy0gKHZvaWQp
c2V0VmlkZW9FbGVtZW50OihIVE1MVmlkZW9FbGVtZW50Kil2aWRlb0VsZW1lbnQKIHsKLSAgICBf
bWVkaWFFbGVtZW50ID0gbWVkaWFFbGVtZW50OworICAgIF92aWRlb0VsZW1lbnQgPSB2aWRlb0Vs
ZW1lbnQ7CiAKLSAgICBpZiAoIV9tZWRpYUVsZW1lbnQpCisgICAgaWYgKCFfdmlkZW9FbGVtZW50
KQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoW3NlbGYgaXNXaW5kb3dMb2FkZWRdKSB7Ci0g
ICAgICAgIGlmIChfbWVkaWFFbGVtZW50LT5wbGF0Zm9ybU1lZGlhKCkudHlwZSA9PSBQbGF0Zm9y
bU1lZGlhOjpRVE1vdmllVHlwZSkgewotICAgICAgICAgICAgUVRNb3ZpZSAqbW92aWUgPSBfbWVk
aWFFbGVtZW50LT5wbGF0Zm9ybU1lZGlhKCkubWVkaWEucXRNb3ZpZTsKKyAgICAgICAgaWYgKF92
aWRlb0VsZW1lbnQtPnBsYXRmb3JtTWVkaWEoKS50eXBlID09IFBsYXRmb3JtTWVkaWE6OlFUTW92
aWVUeXBlKSB7CisgICAgICAgICAgICBRVE1vdmllICptb3ZpZSA9IF92aWRlb0VsZW1lbnQtPnBs
YXRmb3JtTWVkaWEoKS5tZWRpYS5xdE1vdmllOwogICAgICAgICAgICAgUVRNb3ZpZUxheWVyICps
YXllciA9IFtbZ2V0UVRNb3ZpZUxheWVyQ2xhc3MoKSBhbGxvY10gaW5pdF07CiAgICAgICAgICAg
ICBbbGF5ZXIgc2V0TW92aWU6bW92aWVdOwogICAgICAgICAgICAgW3NlbGYgc2V0dXBWaWRlb092
ZXJsYXk6bGF5ZXJdOwpAQCAtMTM4LDggKzEzOCw4IEBAIC0gKHZvaWQpc2V0TWVkaWFFbGVtZW50
OihIVE1MTWVkaWFFbGVtZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5hbWU6UVRNb3ZpZVJhdGVEaWRDaGFuZ2VOb3RpZmljYXRpb24K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
YmplY3Q6bW92aWVdOwogCi0gICAgICAgIH0gZWxzZSBpZiAoX21lZGlhRWxlbWVudC0+cGxhdGZv
cm1NZWRpYSgpLnR5cGUgPT0gUGxhdGZvcm1NZWRpYTo6QVZGb3VuZGF0aW9uTWVkaWFQbGF5ZXJU
eXBlKSB7Ci0gICAgICAgICAgICBBVlBsYXllciAqcGxheWVyID0gX21lZGlhRWxlbWVudC0+cGxh
dGZvcm1NZWRpYSgpLm1lZGlhLmF2Zk1lZGlhUGxheWVyOworICAgICAgICB9IGVsc2UgaWYgKF92
aWRlb0VsZW1lbnQtPnBsYXRmb3JtTWVkaWEoKS50eXBlID09IFBsYXRmb3JtTWVkaWE6OkFWRm91
bmRhdGlvbk1lZGlhUGxheWVyVHlwZSkgeworICAgICAgICAgICAgQVZQbGF5ZXIgKnBsYXllciA9
IF92aWRlb0VsZW1lbnQtPnBsYXRmb3JtTWVkaWEoKS5tZWRpYS5hdmZNZWRpYVBsYXllcjsKICAg
ICAgICAgICAgIEFWUGxheWVyTGF5ZXIgKmxheWVyID0gW1tnZXRBVlBsYXllckxheWVyQ2xhc3Mo
KSBhbGxvY10gaW5pdF07CiAgICAgICAgICAgICBbc2VsZiBzZXR1cFZpZGVvT3ZlcmxheTpsYXll
cl07CiAgICAgICAgICAgICBbbGF5ZXIgc2V0UGxheWVyOnBsYXllcl07CkBAIC0yMDcsOSArMjA3
LDkgQEAgLSAodm9pZCl3aW5kb3dEaWRFbnRlckZ1bGxzY3JlZW4KICAgICBbX2h1ZENvbnRyb2xs
ZXIgZmFkZVdpbmRvd0luXTsKIH0KIAotLSAoTlNSZWN0KW1lZGlhRWxlbWVudFJlY3QKKy0gKE5T
UmVjdCl2aWRlb0VsZW1lbnRSZWN0CiB7Ci0gICAgcmV0dXJuIF9tZWRpYUVsZW1lbnQtPnNjcmVl
blJlY3QoKTsKKyAgICByZXR1cm4gX3ZpZGVvRWxlbWVudC0+c2NyZWVuUmVjdCgpOwogfQogCiAt
ICh2b2lkKWFwcGxpY2F0aW9uRGlkUmVzaWduQWN0aXZlOihOU05vdGlmaWNhdGlvbiopbm90aWZp
Y2F0aW9uCkBAIC0yNzYsNyArMjc2LDcgQEAgLSAodm9pZCllbnRlckZ1bGxzY3JlZW46KE5TU2Ny
ZWVuICopc2NyZQogICAgIGlmICghc2NyZWVuKQogICAgICAgICBzY3JlZW4gPSBbTlNTY3JlZW4g
bWFpblNjcmVlbl07CiAKLSAgICBOU1JlY3QgZnJhbWUgPSBbc2VsZiBtZWRpYUVsZW1lbnRSZWN0
XTsKKyAgICBOU1JlY3QgZnJhbWUgPSBbc2VsZiB2aWRlb0VsZW1lbnRSZWN0XTsKICAgICBOU1Jl
Y3QgZW5kRnJhbWUgPSBbc2NyZWVuIGZyYW1lXTsKICAgICBjb25zdHJhaW5GcmFtZVRvUmF0aW9P
ZkZyYW1lKCZlbmRGcmFtZSwgJmZyYW1lKTsKIApAQCAtMzAzLDcgKzMwMyw3IEBAIC0gKHZvaWQp
ZXhpdEZ1bGxzY3JlZW4KICAgICBfaXNFbmRpbmdGdWxsc2NyZWVuID0gWUVTOwogICAgIFtfaHVk
Q29udHJvbGxlciBjbG9zZVdpbmRvd107CiAKLSAgICBOU1JlY3QgZW5kRnJhbWUgPSBbc2VsZiBt
ZWRpYUVsZW1lbnRSZWN0XTsKKyAgICBOU1JlY3QgZW5kRnJhbWUgPSBbc2VsZiB2aWRlb0VsZW1l
bnRSZWN0XTsKIAogICAgIFtzZWxmIHNldHVwRmFkZUFuaW1hdGlvbklmTmVlZGVkQW5kRmFkZUlu
Ok5PXTsKICAgICBpZiAoX2ZvcmNlRGlzYWJsZUFuaW1hdGlvbikgewpAQCAtMzU4LDggKzM1OCw4
IEBAIC0gKHZvaWQpdXBkYXRlTWVudUFuZERvY2tGb3JGdWxsc2NyZWVuCiAtICh2b2lkKXVwZGF0
ZVBvd2VyQXNzZXJ0aW9ucwogewogICAgIGZsb2F0IHJhdGUgPSAwOwotICAgIGlmIChfbWVkaWFF
bGVtZW50ICYmIF9tZWRpYUVsZW1lbnQtPnBsYXRmb3JtTWVkaWEoKS50eXBlID09IFBsYXRmb3Jt
TWVkaWE6OlFUTW92aWVUeXBlKQotICAgICAgICByYXRlID0gW19tZWRpYUVsZW1lbnQtPnBsYXRm
b3JtTWVkaWEoKS5tZWRpYS5xdE1vdmllIHJhdGVdOworICAgIGlmIChfdmlkZW9FbGVtZW50ICYm
IF92aWRlb0VsZW1lbnQtPnBsYXRmb3JtTWVkaWEoKS50eXBlID09IFBsYXRmb3JtTWVkaWE6OlFU
TW92aWVUeXBlKQorICAgICAgICByYXRlID0gW192aWRlb0VsZW1lbnQtPnBsYXRmb3JtTWVkaWEo
KS5tZWRpYS5xdE1vdmllIHJhdGVdOwogICAgIAogICAgIGlmIChyYXRlICYmICFfaXNFbmRpbmdG
dWxsc2NyZWVuKSB7CiAgICAgICAgIGlmICghX2Rpc3BsYXlTbGVlcERpc2FibGVyKQpAQCAtMzcz
LDggKzM3Myw4IEBAIC0gKHZvaWQpdXBkYXRlUG93ZXJBc3NlcnRpb25zCiAKIC0gKHZvaWQpX3Jl
cXVlc3RFeGl0CiB7Ci0gICAgaWYgKF9tZWRpYUVsZW1lbnQpCi0gICAgICAgIF9tZWRpYUVsZW1l
bnQtPmV4aXRGdWxsc2NyZWVuKCk7CisgICAgaWYgKF92aWRlb0VsZW1lbnQpCisgICAgICAgIF92
aWRlb0VsZW1lbnQtPmV4aXRGdWxsc2NyZWVuKCk7CiAgICAgX2ZvcmNlRGlzYWJsZUFuaW1hdGlv
biA9IE5POwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNzMxNjcpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0MSBAQAorMjAxNC0w
OS0wMiAgTWFjaWVqIFN0YWNob3dpYWsgIDxtanNAYXBwbGUuY29tPgorCisgICAgICAgIENsZWFu
IHVwIG5hbWluZyBmb3IgYW5kIHNsaWdodGx5IHJlZmFjdG9yIGxlZ2FjeSB2aWRlbyBmdWxsc2Ny
ZWVuIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEzNjQ0NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEtleSBjaGFuZ2VzOgorICAgICAgICBzdXBwb3J0c0Z1bGxzY3JlZW5Gb3JOb2RlKE5vZGUq
KSAtLT4gc3VwcG9ydHNWaWRlb0Z1bGxzY3JlZW4oKQorICAgICAgICBlbnRlckZ1bGxzY3JlZW5G
b3JOb2RlKE5vZGUqKSAtLT4gZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoSFRN
TFZpZGVvRWxlbWVudCopCisgICAgICAgIGV4aXRGdWxsc2NyZWVuRm9yTm9kZShOb2RlKikgLS0+
IGV4aXRWaWRlb0Z1bGxzY3JlZW4oKQorICAgICAgICAKKyAgICAgICAgVGhlIG9sZCB2ZXJzaW9u
cyBoYWQgdW5uZWNlc3NhcnkgcGFyYW1ldGVycywgZGlkIG5vdCBjbGVhcmx5IGRpc3Rpbmd1aXNo
IHRoZWlyIHB1cnBvc2UKKyAgICAgICAgZnJvbSBlbnRlckZ1bGxzY3JlZW5Gb3JFbGVtZW50IGFu
ZCBmcmllbmRzLCBhbmQgd3JvbmdseSBjbGFpbWVkIGdlbmVyYWxpdHkgdG8gYWxsIE5vZGVzLgor
ICAgICAgICBBbHNvIGNoYW5nZWQgbWFueSBvdGhlciBwbGFjZXMgdG8gdXNlIEhUTUxWaWRlb0Vs
ZW1lbnQqIGluc3RlYWQgb2YgTm9kZSogb3IgCisgICAgICAgIEhUTUxNZWRpYUVsZW1lbnQqIHdo
ZW4gdGhleSB3ZXJlIGluIGZhY3Qgb25seSB1c2VkIGZvciB2aWRlbyBlbGVtZW50cyBhbmQgd291
bGQgb25seQorICAgICAgICB3b3JrIGZvciBzdWNoLgorCisgICAgICAgIExlZ2FjeSB2aWRlbyBm
dWxsc2NyZWVuIGluIFdlYktpdDIgaXMgb25seSBzdXBwb3J0ZWQgb24gaU9TIChmb3Igb3RoZXIg
cG9ydHMgdGhhdCBzdXBwb3J0CisgICAgICAgIGl0LCBpdCdzIFdLMSBvbmx5KS4KKyAgICAgICAg
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OnN1cHBvcnRzVmlkZW9GdWxsc2Ny
ZWVuKTogQWRqdXN0IGZvciByZW5hbWVzIGFzCisgICAgICAgIG1lbnRpb25lZC4KKyAgICAgICAg
KFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjplbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxl
bWVudCk6IGRpdHRvCisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6ZXhpdFZpZGVv
RnVsbHNjcmVlbik6IGRpdHRvCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL2lvcy9XZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlci5tbToKKyAgICAgICAgKFdlYktpdDo6Y2xpZW50UmVjdEZvckVsZW1lbnQpOiBO
byBuZWVkIHRvIGJlIGdlbmVyaWMgdG8gbm9kZS4KKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6c3VwcG9ydHNWaWRlb0Z1bGxzY3JlZW4pOiBBZGp1c3QgZm9yIHRo
ZQorICAgICAgICBtYWluIHJlZmFjdG9yaW5nLiBBbHNvIGNoYW5nZSBtX25vZGUgdG8gbV92aWRl
b0VsZW1lbnQgd2l0aCBhcHByb3ByaWF0ZSB0eXBlIGNoYW5nZS4KKyAgICAgICAgKFdlYktpdDo6
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0Vs
ZW1lbnQpOiBkaXR0bworICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
OjpleGl0VmlkZW9GdWxsc2NyZWVuKTogZGl0dG8KKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6ZGlkRW50ZXJGdWxsc2NyZWVuKTogZGl0dG8gCisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZEV4aXRGdWxsc2NyZWVuKTogZGl0
dG8KKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkQ2xlYW51
cEZ1bGxzY3JlZW4pOiBkaXR0bworCiAyMDE0LTA5LTAxICBUaW1vdGh5IEhvcnRvbiAgPHRpbW90
aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggdGhlIGlPUyBidWlsZC4KSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5jcHAJKHJldmlzaW9uIDE3MzE2MSkKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTAyLDE5ICs5MDIsMTkgQEAgUGFzc1JlZlB0cjxTY3JvbGxpbmdDb29yZGlu
YXRvcj4gV2ViQ2hybwogI2VuZGlmCiAKICNpZiBQTEFURk9STShJT1MpCi1ib29sIFdlYkNocm9t
ZUNsaWVudDo6c3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZShjb25zdCBXZWJDb3JlOjpOb2RlKiBu
b2RlKQorYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnN1cHBvcnRzVmlkZW9GdWxsc2NyZWVuKCkKIHsK
LSAgICByZXR1cm4gbV9wYWdlLT52aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCktPnN1cHBvcnRzRnVs
bHNjcmVlbihub2RlKTsKKyAgICByZXR1cm4gbV9wYWdlLT52aWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
KCktPnN1cHBvcnRzVmlkZW9GdWxsc2NyZWVuKCk7CiB9CiAKLXZvaWQgV2ViQ2hyb21lQ2xpZW50
OjplbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKFdlYkNvcmU6Ok5vZGUqIG5vZGUpCit2b2lkIFdlYkNo
cm9tZUNsaWVudDo6ZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoV2ViQ29yZTo6
SFRNTFZpZGVvRWxlbWVudCogdmlkZW9FbGVtZW50KQogewotICAgIG1fcGFnZS0+dmlkZW9GdWxs
c2NyZWVuTWFuYWdlcigpLT5lbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKG5vZGUpOworICAgIG1fcGFn
ZS0+dmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpLT5lbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVv
RWxlbWVudCh2aWRlb0VsZW1lbnQpOwogfQogCi12b2lkIFdlYkNocm9tZUNsaWVudDo6ZXhpdEZ1
bGxzY3JlZW5Gb3JOb2RlKFdlYkNvcmU6Ok5vZGUqIG5vZGUpCit2b2lkIFdlYkNocm9tZUNsaWVu
dDo6ZXhpdFZpZGVvRnVsbHNjcmVlbigpCiB7Ci0gICAgbV9wYWdlLT52aWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyKCktPmV4aXRGdWxsc2NyZWVuRm9yTm9kZShub2RlKTsKKyAgICBtX3BhZ2UtPnZpZGVv
RnVsbHNjcmVlbk1hbmFnZXIoKS0+ZXhpdFZpZGVvRnVsbHNjcmVlbigpOwogfQogI2VuZGlmCiAg
ICAgCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNo
cm9tZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHJldmlzaW9uIDE3MzE2MSkKKysrIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTI1Myw5ICsyNTMsOSBAQCBwcml2YXRlOgogI2VuZGlmCiAKICNpZiBQ
TEFURk9STShJT1MpCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUo
Y29uc3QgV2ViQ29yZTo6Tm9kZSopOwotICAgIHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxzY3JlZW5G
b3JOb2RlKFdlYkNvcmU6Ok5vZGUqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxzY3JlZW5G
b3JOb2RlKFdlYkNvcmU6Ok5vZGUqKTsKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNWaWRlb0Z1
bGxzY3JlZW4oKTsKKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRl
b0VsZW1lbnQoV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCopOworICAgIHZpcnR1YWwgdm9pZCBl
eGl0VmlkZW9GdWxsc2NyZWVuKCk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQ
SSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2lvcy9X
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmgJKHJldmlzaW9uIDE3MzE2MSkKKysrIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvRXZlbnRMaXN0ZW5l
ci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1DQUxheWVyLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1dl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9X
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCkBAIC01MCwxNiArNTAsMTYgQEAg
bmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBMYXllckhvc3RpbmdDb250ZXh0OwogY2xhc3MgV2Vi
UGFnZTsKIAotY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlciA6IHB1YmxpYyBXZWJDb3Jl
OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudCwgcHVibGljIFdlYkNvcmU6Oldl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7
CitjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyIDogcHVibGljIFdlYkNvcmU6OldlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LCBwdWJsaWMgV2ViQ29yZTo6V2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlLCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyPiBjcmVh
dGUoUGFzc1JlZlB0cjxXZWJQYWdlPik7CiAgICAgdmlydHVhbCB+V2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlcigpOwogICAgIAogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0
aW9uKiwgSVBDOjpNZXNzYWdlRGVjb2RlciYpOwogICAgIAotICAgIGJvb2wgc3VwcG9ydHNGdWxs
c2NyZWVuKGNvbnN0IFdlYkNvcmU6Ok5vZGUqKSBjb25zdDsKLSAgICB2b2lkIGVudGVyRnVsbHNj
cmVlbkZvck5vZGUoV2ViQ29yZTo6Tm9kZSopOwotICAgIHZvaWQgZXhpdEZ1bGxzY3JlZW5Gb3JO
b2RlKFdlYkNvcmU6Ok5vZGUqKTsKKyAgICBib29sIHN1cHBvcnRzVmlkZW9GdWxsc2NyZWVuKCkg
Y29uc3Q7CisgICAgdm9pZCBlbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChXZWJD
b3JlOjpIVE1MVmlkZW9FbGVtZW50Kik7CisgICAgdm9pZCBleGl0VmlkZW9GdWxsc2NyZWVuKCk7
CiAgICAgCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
cihQYXNzUmVmUHRyPFdlYlBhZ2U+KTsKQEAgLTg1LDcgKzg1LDcgQEAgcHJvdGVjdGVkOgogICAg
IHZpcnR1YWwgdm9pZCBzZXRWaWRlb0xheWVyR3Jhdml0eUVudW0odW5zaWduZWQpOwogICAgIAog
ICAgIFdlYlBhZ2UqIG1fcGFnZTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gbV9ub2RlOwor
ICAgIFJlZlB0cjxXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50PiBtX3ZpZGVvRWxlbWVudDsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8TGF5ZXJIb3N0aW5nQ29udGV4dD4gbV9sYXllckhvc3RpbmdDb250
ZXh0OwogICAgIAogICAgIGJvb2wgbV9pc0FuaW1hdGluZzsKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
ci5tbQkocmV2aXNpb24gMTczMTYxKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9pb3Mv
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbQkod29ya2luZyBjb3B5KQpAQCAtNTAsMTIgKzUw
LDEyIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAot
c3RhdGljIEludFJlY3QgY2xpZW50UmVjdEZvck5vZGUoTm9kZSogbm9kZSkKK3N0YXRpYyBJbnRS
ZWN0IGNsaWVudFJlY3RGb3JFbGVtZW50KEhUTUxFbGVtZW50KiBlbGVtZW50KQogewotICAgIGlm
ICghbm9kZSB8fCAhbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgIGlmICghZWxlbWVudCkKICAg
ICAgICAgcmV0dXJuIEludFJlY3QoKTsKIAotICAgIHJldHVybiB0b0VsZW1lbnQobm9kZSktPmNs
aWVudFJlY3QoKTsKKyAgICByZXR1cm4gZWxlbWVudC0+Y2xpZW50UmVjdCgpOwogfQogCiBQYXNz
UmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI+IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OmNyZWF0ZShQYXNzUmVmUHRyPFdlYlBhZ2U+IHBhZ2UpCkBAIC03OCwzOCArNzgsMzggQEAg
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6fldlYlZpZGVvRnVsbAogICAgIFdlYlByb2Nlc3M6
OnNoYXJlZCgpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0K
IAotYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzdXBwb3J0c0Z1bGxzY3JlZW4oY29u
c3QgTm9kZSogbm9kZSkgY29uc3QKK2Jvb2wgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c3Vw
cG9ydHNWaWRlb0Z1bGxzY3JlZW4oKSBjb25zdAogewotICAgIHJldHVybiBTZXR0aW5nczo6YXZL
aXRFbmFibGVkKCkgJiYgaXNIVE1MVmlkZW9FbGVtZW50KG5vZGUpOworICAgIHJldHVybiBTZXR0
aW5nczo6YXZLaXRFbmFibGVkKCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
cjo6ZW50ZXJGdWxsc2NyZWVuRm9yTm9kZShOb2RlKiBub2RlKQordm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyOjplbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChIVE1MVmlk
ZW9FbGVtZW50KiB2aWRlb0VsZW1lbnQpCiB7Ci0gICAgQVNTRVJUKG5vZGUpOwotICAgIG1fbm9k
ZSA9IG5vZGU7CisgICAgbV92aWRlb0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7CisKICAgICBtX3Rh
cmdldElzRnVsbHNjcmVlbiA9IHRydWU7CiAKICAgICBpZiAobV9pc0FuaW1hdGluZykKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgbV9pc0FuaW1hdGluZyA9IHRydWU7Ci0gICAgc2V0TWVkaWFFbGVt
ZW50KHRvSFRNTE1lZGlhRWxlbWVudChub2RlKSk7CisgICAgc2V0VmlkZW9FbGVtZW50KHZpZGVv
RWxlbWVudCk7CiAKICAgICBtX2xheWVySG9zdGluZ0NvbnRleHQgPSBMYXllckhvc3RpbmdDb250
ZXh0OjpjcmVhdGVGb3JFeHRlcm5hbEhvc3RpbmdQcm9jZXNzKCk7CiAgICAgCi0gICAgbV9wYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNldHVwRnVs
bHNjcmVlbldpdGhJRChtX2xheWVySG9zdGluZ0NvbnRleHQtPmNvbnRleHRJRCgpLCBjbGllbnRS
ZWN0Rm9yTm9kZShub2RlKSksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpTZXR1cEZ1bGxzY3JlZW5X
aXRoSUQobV9sYXllckhvc3RpbmdDb250ZXh0LT5jb250ZXh0SUQoKSwgY2xpZW50UmVjdEZvckVs
ZW1lbnQodmlkZW9FbGVtZW50KSksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmV4aXRGdWxsc2NyZWVuRm9yTm9kZShOb2RlKiBub2RlKQor
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpleGl0VmlkZW9GdWxsc2NyZWVuKCkKIHsK
LSAgICBtX25vZGUuY2xlYXIoKTsKKyAgICBSZWZQdHI8SFRNTFZpZGVvRWxlbWVudD4gdmlkZW9F
bGVtZW50ID0gbV92aWRlb0VsZW1lbnQucmVsZWFzZSgpOwogICAgIG1fdGFyZ2V0SXNGdWxsc2Ny
ZWVuID0gZmFsc2U7CiAKICAgICBpZiAobV9pc0FuaW1hdGluZykKICAgICAgICAgcmV0dXJuOwog
CiAgICAgbV9pc0FuaW1hdGluZyA9IHRydWU7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OkV4aXRGdWxsc2NyZWVuKGNsaWVudFJlY3RG
b3JOb2RlKG5vZGUpKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OkV4aXRGdWxsc2NyZWVuKGNsaWVu
dFJlY3RGb3JFbGVtZW50KHZpZGVvRWxlbWVudC5nZXQoKSkpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsK
IH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXREdXJhdGlvbihkb3VibGUg
ZHVyYXRpb24pCkBAIC0xOTEsOSArMTkxLDkgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjpkaWRFbnRlcgogICAgICAgICByZXR1cm47CiAKICAgICAvLyBleGl0IGZ1bGxzY3JlZW4g
bm93IGlmIGl0IHdhcyBwcmV2aW91c2x5IHJlcXVlc3RlZCBkdXJpbmcgYW4gYW5pbWF0aW9uLgot
ICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50PiBw
cm90ZWN0KHRoaXMpOworICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50PiBwcm90ZWN0KHRoaXMpOwogICAgIFdlYlRocmVhZFJ1biheIHsKLSAgICAg
ICAgZXhpdEZ1bGxzY3JlZW5Gb3JOb2RlKG1fbm9kZS5nZXQoKSk7CisgICAgICAgIGV4aXRWaWRl
b0Z1bGxzY3JlZW4oKTsKICAgICAgICAgcHJvdGVjdC5jbGVhcigpOwogICAgIH0pOwogfQpAQCAt
MjAxLDcgKzIwMSw3IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRW50ZXIK
IHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRXhpdEZ1bGxzY3JlZW4oKQogewog
ICAgIHNldFZpZGVvRnVsbHNjcmVlbkxheWVyKG5pbCk7Ci0gICAgX19ibG9jayBSZWZQdHI8V2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7CisgICAgX19i
bG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IHByb3RlY3Qo
dGhpcyk7CiAKICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBe
ewogICAgICAgICBtX2xheWVySG9zdGluZ0NvbnRleHQtPnNldFJvb3RMYXllcihudWxscHRyKTsK
QEAgLTIxNiwxNSArMjE2LDE1IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlk
Q2xlYW4KICAgICBtX2lzQW5pbWF0aW5nID0gZmFsc2U7CiAgICAgbV9pc0Z1bGxzY3JlZW4gPSBm
YWxzZTsKICAgICAKLSAgICBzZXRNZWRpYUVsZW1lbnQobnVsbHB0cik7CisgICAgc2V0VmlkZW9F
bGVtZW50KG51bGxwdHIpOwogCiAgICAgaWYgKCFtX3RhcmdldElzRnVsbHNjcmVlbikKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgLy8gZW50ZXIgZnVsbHNjcmVlbiBub3cgaWYgaXQgd2FzIHByZXZp
b3VzbHkgcmVxdWVzdGVkIGR1cmluZyBhbiBhbmltYXRpb24uCi0gICAgX19ibG9jayBSZWZQdHI8
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7CisgICAg
X19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IHByb3Rl
Y3QodGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKF4gewotICAgICAgICBlbnRlckZ1bGxzY3JlZW5G
b3JOb2RlKG1fbm9kZS5nZXQoKSk7CisgICAgICAgIGVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlk
ZW9FbGVtZW50KG1fdmlkZW9FbGVtZW50LmdldCgpKTsKICAgICAgICAgcHJvdGVjdC5jbGVhcigp
OwogICAgIH0pOwogfQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMTczMTY3KQorKysg
U291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzQg
QEAKKzIwMTQtMDktMDIgIE1hY2llaiBTdGFjaG93aWFrICA8bWpzQGFwcGxlLmNvbT4KKworICAg
ICAgICBDbGVhbiB1cCBuYW1pbmcgZm9yIGFuZCBzbGlnaHRseSByZWZhY3RvciBsZWdhY3kgdmlk
ZW8gZnVsbHNjcmVlbiBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMzY0NDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBLZXkgY2hhbmdlczoKKyAgICAgICAgc3VwcG9ydHNGdWxsc2NyZWVuRm9y
Tm9kZShOb2RlKikgLS0+IHN1cHBvcnRzVmlkZW9GdWxsc2NyZWVuKCkKKyAgICAgICAgZW50ZXJG
dWxsc2NyZWVuRm9yTm9kZShOb2RlKikgLS0+IGVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9F
bGVtZW50KEhUTUxWaWRlb0VsZW1lbnQqKQorICAgICAgICBleGl0RnVsbHNjcmVlbkZvck5vZGUo
Tm9kZSopIC0tPiBleGl0VmlkZW9GdWxsc2NyZWVuKCkKKyAgICAgICAgCisgICAgICAgIFRoZSBv
bGQgdmVyc2lvbnMgaGFkIHVubmVjZXNzYXJ5IHBhcmFtZXRlcnMsIGRpZCBub3QgY2xlYXJseSBk
aXN0aW5ndWlzaCB0aGVpciBwdXJwb3NlCisgICAgICAgIGZyb20gZW50ZXJGdWxsc2NyZWVuRm9y
RWxlbWVudCBhbmQgZnJpZW5kcywgYW5kIHdyb25nbHkgY2xhaW1lZCBnZW5lcmFsaXR5IHRvIGFs
bCBOb2Rlcy4KKyAgICAgICAgQWxzbyBjaGFuZ2VkIG1hbnkgb3RoZXIgcGxhY2VzIHRvIHVzZSBI
VE1MVmlkZW9FbGVtZW50KiBpbnN0ZWFkIG9mIE5vZGUqIG9yIAorICAgICAgICBIVE1MTWVkaWFF
bGVtZW50KiB3aGVuIHRoZXkgd2VyZSBpbiBmYWN0IG9ubHkgdXNlZCBmb3IgdmlkZW8gZWxlbWVu
dHMgYW5kIHdvdWxkIG9ubHkKKyAgICAgICAgd29yayBmb3Igc3VjaC4KKworICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5tbToKKyAgICAgICAgKFdlYkNocm9tZUNsaWVudDo6c3VwcG9ydHNW
aWRlb0Z1bGxzY3JlZW4pOiBBZGp1c3QgZm9yIG1haW4gcmVmYWN0b3JpbmcuCisgICAgICAgIEFs
c28gbm8gbW9yZSBuZWVkIHRvIGNoZWNrIGZvciB2aWRlbyBlbGVtZW50bmVzcy4KKyAgICAgICAg
KFdlYkNocm9tZUNsaWVudDo6ZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQpOiBB
ZGp1c3QgZm9yIG1haW4gcmVmYWN0b3JpbmcuCisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OmV4
aXRWaWRlb0Z1bGxzY3JlZW4pOiBkaXR0bworICAgICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToK
KyAgICAgICAgKC1bV2ViVmlldyBfZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQ6
XSk6IEFkanVzdCBmb3IgbWFpbgorICAgICAgICByZWZhY3RvcmluZy4KKyAgICAgICAgKC1bV2Vi
VmlldyBfZXhpdFZpZGVvRnVsbHNjcmVlbl0pOiBkaXR0bworICAgICAgICAoLVtXZWJWaWV3IF9j
bG9zZV0pOiBkaXR0bworICAgICAgICAqIFdlYlZpZXcvV2ViVmlld0ludGVybmFsLmg6CisKIDIw
MTQtMDgtMzEgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmVtb3ZlIHVubmVjZXNzYXJ5IChhbmQgdW5uZWNlc3NhcmlseSBpT1Mtc3BlY2lmaWMpIHNl
dFN0cm9rZUFuZEZpbGxDb2xvcgpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHJldmlzaW9uIDE3MzE2MSkKKysrIFNvdXJj
ZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xODAsOSArMTgwLDkgQEAgcHVibGljOgogICAgIH0KIAogI2lmIEVOQUJMRShWSURF
TykKLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZShjb25zdCBXZWJD
b3JlOjpOb2RlKikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGVudGVyRnVsbHNjcmVlbkZv
ck5vZGUoV2ViQ29yZTo6Tm9kZSopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBleGl0RnVs
bHNjcmVlbkZvck5vZGUoV2ViQ29yZTo6Tm9kZSopIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9v
bCBzdXBwb3J0c1ZpZGVvRnVsbHNjcmVlbigpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBl
bnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChXZWJDb3JlOjpIVE1MVmlkZW9FbGVt
ZW50Kikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGV4aXRWaWRlb0Z1bGxzY3JlZW4oKSBv
dmVycmlkZTsKICNlbmRpZgogICAgIAogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQubW0JKHJldmlzaW9uIDE3MzE2MSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtOTQwLDI2ICs5NDAsMjYg
QEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNjaGVkdWxlQ29tcG9zaXRpbgogCiAjaWYgRU5BQkxF
KFZJREVPKQogCi1ib29sIFdlYkNocm9tZUNsaWVudDo6c3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9k
ZShjb25zdCBOb2RlKiBub2RlKQorYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnN1cHBvcnRzVmlkZW9G
dWxsc2NyZWVuKCkKIHsKICNpZiBQTEFURk9STShJT1MpCiAgICAgaWYgKCFTZXR0aW5nczo6YXZL
aXRFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgotICAgIHJldHVybiBp
c0hUTUxWaWRlb0VsZW1lbnQobm9kZSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgV2Vi
Q2hyb21lQ2xpZW50OjplbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqIG5vZGUpCit2b2lkIFdl
YkNocm9tZUNsaWVudDo6ZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoSFRNTFZp
ZGVvRWxlbWVudCogdmlkZW9FbGVtZW50KQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBU
SU9OUzsKLSAgICBbbV93ZWJWaWV3IF9lbnRlckZ1bGxzY3JlZW5Gb3JOb2RlOm5vZGVdOworICAg
IFttX3dlYlZpZXcgX2VudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50OnZpZGVvRWxl
bWVudF07CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KIAotdm9pZCBXZWJDaHJv
bWVDbGllbnQ6OmV4aXRGdWxsc2NyZWVuRm9yTm9kZShOb2RlKikKK3ZvaWQgV2ViQ2hyb21lQ2xp
ZW50OjpleGl0VmlkZW9GdWxsc2NyZWVuKCkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQ
VElPTlM7Ci0gICAgW21fd2ViVmlldyBfZXhpdEZ1bGxzY3JlZW5dOworICAgIFttX3dlYlZpZXcg
X2V4aXRWaWRlb0Z1bGxzY3JlZW5dOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7ICAg
IAogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCShyZXZpc2lvbiAx
NzMxNjEpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTEzNCw3ICsxMzQsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9HQ0NvbnRyb2xsZXIu
aD4KICNpbXBvcnQgPFdlYkNvcmUvR2VvbG9jYXRpb25Db250cm9sbGVyLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL0dlb2xvY2F0aW9uRXJyb3IuaD4KLSNpbXBvcnQgPFdlYkNvcmUvSFRNTE1lZGlhRWxl
bWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9IVE1MVmlkZW9FbGVtZW50Lmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL0hUTUxOYW1lcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9IaXN0b3J5Q29udHJvbGxlci5o
PgogI2ltcG9ydCA8V2ViQ29yZS9IaXN0b3J5SXRlbS5oPgpAQCAtMTY5OSw3ICsxNjk5LDcgQEAg
LSAodm9pZClfY2xvc2UKICAgICB9CiAKICNpZiBFTkFCTEUoVklERU8pICYmICFQTEFURk9STShJ
T1MpCi0gICAgW3NlbGYgX2V4aXRGdWxsc2NyZWVuXTsKKyAgICBbc2VsZiBfZXhpdFZpZGVvRnVs
bHNjcmVlbl07CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKElPUykKQEAgLTgzODgsMjggKzgzODgs
MjUgQEAgLSAodm9pZClfc2NoZWR1bGVMYXllckZsdXNoRm9yUGVuZGluZ1RpbAogI2VuZGlmCiAK
ICNpZiBFTkFCTEUoVklERU8pCi0tICh2b2lkKV9lbnRlckZ1bGxzY3JlZW5Gb3JOb2RlOihXZWJD
b3JlOjpOb2RlKilub2RlCistICh2b2lkKV9lbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxl
bWVudDooV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCopdmlkZW9FbGVtZW50CiB7Ci0gICAgQVNT
RVJUKGlzSFRNTFZpZGVvRWxlbWVudChub2RlKSk7Ci0gICAgSFRNTE1lZGlhRWxlbWVudCogdmlk
ZW9FbGVtZW50ID0gdG9IVE1MTWVkaWFFbGVtZW50KG5vZGUpOwotCiAgICAgaWYgKF9wcml2YXRl
LT5mdWxsc2NyZWVuQ29udHJvbGxlcikgewotICAgICAgICBpZiAoW19wcml2YXRlLT5mdWxsc2Ny
ZWVuQ29udHJvbGxlciBtZWRpYUVsZW1lbnRdID09IHZpZGVvRWxlbWVudCkgeworICAgICAgICBp
ZiAoW19wcml2YXRlLT5mdWxsc2NyZWVuQ29udHJvbGxlciB2aWRlb0VsZW1lbnRdID09IHZpZGVv
RWxlbWVudCkgewogICAgICAgICAgICAgLy8gVGhlIGJhY2tlbmQgbWF5IGp1c3Qgd2FybiB1cyB0
aGF0IHRoZSB1bmRlcmxheWluZyBwbGFmdG9ybU1vdmllKCkKICAgICAgICAgICAgIC8vIGhhcyBj
aGFuZ2VkLiBKdXN0IGZvcmNlIGFuIHVwZGF0ZS4KLSAgICAgICAgICAgIFtfcHJpdmF0ZS0+ZnVs
bHNjcmVlbkNvbnRyb2xsZXIgc2V0TWVkaWFFbGVtZW50OnZpZGVvRWxlbWVudF07CisgICAgICAg
ICAgICBbX3ByaXZhdGUtPmZ1bGxzY3JlZW5Db250cm9sbGVyIHNldFZpZGVvRWxlbWVudDp2aWRl
b0VsZW1lbnRdOwogICAgICAgICAgICAgcmV0dXJuOyAvLyBObyBtb3JlIHRvIGRvLgogICAgICAg
ICB9CiAKLSAgICAgICAgLy8gRmlyc3QgZXhpdCBGdWxsc2NyZWVuIGZvciB0aGUgb2xkIG1lZGlh
RWxlbWVudC4KLSAgICAgICAgW19wcml2YXRlLT5mdWxsc2NyZWVuQ29udHJvbGxlciBtZWRpYUVs
ZW1lbnRdLT5leGl0RnVsbHNjcmVlbigpOworICAgICAgICAvLyBGaXJzdCBleGl0IEZ1bGxzY3Jl
ZW4gZm9yIHRoZSBvbGQgdmlkZW9FbGVtZW50LgorICAgICAgICBbX3ByaXZhdGUtPmZ1bGxzY3Jl
ZW5Db250cm9sbGVyIHZpZGVvRWxlbWVudF0tPmV4aXRGdWxsc2NyZWVuKCk7CiAgICAgICAgIC8v
IFRoaXMgcHJldmlvdXMgY2FsbCBoYXMgdG8gdHJpZ2dlciBfZXhpdEZ1bGxzY3JlZW4sCiAgICAg
ICAgIC8vIHdoaWNoIGhhcyB0byBjbGVhciBfcHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRyb2xsZXIu
CiAgICAgICAgIEFTU0VSVCghX3ByaXZhdGUtPmZ1bGxzY3JlZW5Db250cm9sbGVyKTsKICAgICB9
CiAgICAgaWYgKCFfcHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRyb2xsZXIpIHsKICAgICAgICAgX3By
aXZhdGUtPmZ1bGxzY3JlZW5Db250cm9sbGVyID0gW1tXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyIGFsbG9jXSBpbml0XTsKLSAgICAgICAgW19wcml2YXRlLT5mdWxsc2NyZWVuQ29udHJvbGxl
ciBzZXRNZWRpYUVsZW1lbnQ6dmlkZW9FbGVtZW50XTsKKyAgICAgICAgW19wcml2YXRlLT5mdWxs
c2NyZWVuQ29udHJvbGxlciBzZXRWaWRlb0VsZW1lbnQ6dmlkZW9FbGVtZW50XTsKICNpZiBQTEFU
Rk9STShJT1MpCiAgICAgICAgIFtfcHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRyb2xsZXIgZW50ZXJG
dWxsc2NyZWVuOihVSVZpZXcgKilbW1tzZWxmIHdpbmRvd10gaG9zdExheWVyXSBkZWxlZ2F0ZV1d
OwogI2Vsc2UKQEAgLTg0MTcsMTAgKzg0MTQsMTAgQEAgLSAodm9pZClfZW50ZXJGdWxsc2NyZWVu
Rm9yTm9kZTooV2ViQ29yZQogI2VuZGlmCiAgICAgfQogICAgIGVsc2UKLSAgICAgICAgW19wcml2
YXRlLT5mdWxsc2NyZWVuQ29udHJvbGxlciBzZXRNZWRpYUVsZW1lbnQ6dmlkZW9FbGVtZW50XTsK
KyAgICAgICAgW19wcml2YXRlLT5mdWxsc2NyZWVuQ29udHJvbGxlciBzZXRWaWRlb0VsZW1lbnQ6
dmlkZW9FbGVtZW50XTsKIH0KIAotLSAodm9pZClfZXhpdEZ1bGxzY3JlZW4KKy0gKHZvaWQpX2V4
aXRWaWRlb0Z1bGxzY3JlZW4KIHsKICAgICBpZiAoIV9wcml2YXRlLT5mdWxsc2NyZWVuQ29udHJv
bGxlcikKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJWaWV3SW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlZpZXdJbnRlcm5hbC5oCShyZXZpc2lvbiAxNzMxNjEpCisrKyBTb3VyY2UvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYlZpZXdJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3
IEBAIGNsYXNzIFVSTDsKIGNsYXNzIEtleWJvYXJkRXZlbnQ7CiBjbGFzcyBQYWdlOwogY2xhc3Mg
UmVuZGVyQm94OwotY2xhc3MgTm9kZTsKK2NsYXNzIEhUTUxWaWRlb0VsZW1lbnQ7CiBzdHJ1Y3Qg
RGljdGF0aW9uQWx0ZXJuYXRpdmU7CiB9CiAjZW5kaWYKQEAgLTIzMyw4ICsyMzMsOCBAQCBAaW50
ZXJmYWNlIFdlYlZpZXcgKFdlYlZpZXdPdGhlckludGVybmFsCiAtICh2b2lkKV9wcmVmZXJlbmNl
c0NoYW5nZWQ6KFdlYlByZWZlcmVuY2VzICopcHJlZmVyZW5jZXM7CiAKICNpZiBFTkFCTEUoVklE
RU8pICYmIGRlZmluZWQoX19jcGx1c3BsdXMpCi0tICh2b2lkKV9lbnRlckZ1bGxzY3JlZW5Gb3JO
b2RlOihXZWJDb3JlOjpOb2RlKilub2RlOwotLSAodm9pZClfZXhpdEZ1bGxzY3JlZW47CistICh2
b2lkKV9lbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudDooV2ViQ29yZTo6SFRNTFZp
ZGVvRWxlbWVudCopdmlkZW9FbGVtZW50OworLSAodm9pZClfZXhpdFZpZGVvRnVsbHNjcmVlbjsK
ICNlbmRpZgogCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKSAmJiAhUExBVEZPUk0oSU9TKSAm
JiBkZWZpbmVkKF9fY3BsdXNwbHVzKQpJbmRleDogU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwkocmV2aXNpb24gMTcz
MTY3KQorKysgU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMzMgQEAKKzIwMTQtMDktMDIgIE1hY2llaiBTdGFjaG93aWFrICA8bWpzQGFwcGxlLmNv
bT4KKworICAgICAgICBDbGVhbiB1cCBuYW1pbmcgZm9yIGFuZCBzbGlnaHRseSByZWZhY3RvciBs
ZWdhY3kgdmlkZW8gZnVsbHNjcmVlbiBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY0NDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBLZXkgY2hhbmdlczoKKyAgICAgICAgc3VwcG9ydHNGdWxs
c2NyZWVuRm9yTm9kZShOb2RlKikgLS0+IHN1cHBvcnRzVmlkZW9GdWxsc2NyZWVuKCkKKyAgICAg
ICAgZW50ZXJGdWxsc2NyZWVuRm9yTm9kZShOb2RlKikgLS0+IGVudGVyVmlkZW9GdWxsc2NyZWVu
Rm9yVmlkZW9FbGVtZW50KEhUTUxWaWRlb0VsZW1lbnQqKQorICAgICAgICBleGl0RnVsbHNjcmVl
bkZvck5vZGUoTm9kZSopIC0tPiBleGl0VmlkZW9GdWxsc2NyZWVuKCkKKyAgICAgICAgCisgICAg
ICAgIFRoZSBvbGQgdmVyc2lvbnMgaGFkIHVubmVjZXNzYXJ5IHBhcmFtZXRlcnMsIGRpZCBub3Qg
Y2xlYXJseSBkaXN0aW5ndWlzaCB0aGVpciBwdXJwb3NlCisgICAgICAgIGZyb20gZW50ZXJGdWxs
c2NyZWVuRm9yRWxlbWVudCBhbmQgZnJpZW5kcywgYW5kIHdyb25nbHkgY2xhaW1lZCBnZW5lcmFs
aXR5IHRvIGFsbCBOb2Rlcy4KKyAgICAgICAgQWxzbyBjaGFuZ2VkIG1hbnkgb3RoZXIgcGxhY2Vz
IHRvIHVzZSBIVE1MVmlkZW9FbGVtZW50KiBpbnN0ZWFkIG9mIE5vZGUqIG9yIAorICAgICAgICBI
VE1MTWVkaWFFbGVtZW50KiB3aGVuIHRoZXkgd2VyZSBpbiBmYWN0IG9ubHkgdXNlZCBmb3Igdmlk
ZW8gZWxlbWVudHMgYW5kIHdvdWxkIG9ubHkKKyAgICAgICAgd29yayBmb3Igc3VjaC4KKworICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJD
aHJvbWVDbGllbnQ6OnN1cHBvcnRzVmlkZW9GdWxsc2NyZWVuKTogQWRqdXN0IGZvciB0aGUKKyAg
ICAgICAgbWFpbiByZWZhY3RvcmluZy4KKyAgICAgICAgKFdlYkNocm9tZUNsaWVudDo6ZW50ZXJW
aWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQpOiBkaXR0bworICAgICAgICAoV2ViQ2hyb21l
Q2xpZW50OjpleGl0VmlkZW9GdWxsc2NyZWVuKTogZGl0dG8KKyAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9XZWJDaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKiBXZWJWaWV3LmNwcDoKKyAgICAgICAg
KFdlYlZpZXc6OmVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KTogQWRqdXN0IGZv
ciB0aGUgCisgICAgICAgIG1haW4gcmVmYWN0b3JpbmcuCisgICAgICAgIChXZWJWaWV3OjpleGl0
VmlkZW9GdWxsc2NyZWVuKTogZGl0dG8uCisgICAgICAgICogV2ViVmlldy5oOgorCiAyMDE0LTA4
LTI2ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFtXaW5d
IFdlYktpdCBJREwgaW5jb3JyZWN0bHkgcGFzc2VzIEhXTkQgYXMgT0xFX0hBTkRMRQpJbmRleDog
U291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC93aW4vV2ViVmlldy5jcHAJKHJldmlzaW9uIDE3MzE2MSkKKysrIFNvdXJjZS9XZWJLaXQvd2lu
L1dlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MjY3LDE2ICs2MjY3LDkgQEAgSFJFU1VM
VCBXZWJWaWV3OjpzZXRDYW5TdGFydFBsdWdpbnMoQk9PTAogICAgIHJldHVybiBTX09LOwogfQog
Ci12b2lkIFdlYlZpZXc6OmVudGVyRnVsbHNjcmVlbkZvck5vZGUoTm9kZSogbm9kZSkKK3ZvaWQg
V2ViVmlldzo6ZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoSFRNTFZpZGVvRWxl
bWVudCogdmlkZW9FbGVtZW50KQogewogI2lmIEVOQUJMRShWSURFTykgJiYgIVVTRShHU1RSRUFN
RVIpICYmICFVU0UoTUVESUFfRk9VTkRBVElPTikKLSAgICBpZiAoIWlzSFRNTFZpZGVvRWxlbWVu
dChub2RlKSB8fCAhbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAoIXRvRWxlbWVudChub2RlKS0+aXNNZWRpYUVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIEhUTUxNZWRpYUVsZW1lbnQqIHZpZGVvRWxlbWVudCA9IHRvSFRNTE1lZGlhRWxlbWVu
dChub2RlKTsKLQogICAgIGlmIChtX2Z1bGxTY3JlZW5WaWRlb0NvbnRyb2xsZXIpIHsKICAgICAg
ICAgaWYgKG1fZnVsbFNjcmVlblZpZGVvQ29udHJvbGxlci0+bWVkaWFFbGVtZW50KCkgPT0gdmlk
ZW9FbGVtZW50KSB7CiAgICAgICAgICAgICAvLyBUaGUgYmFja2VuZCBtYXkganVzdCB3YXJuIHVz
IHRoYXQgdGhlIHVuZGVybGF5aW5nIHBsYWZ0b3JtTW92aWUoKQpAQCAtNjI5OCw3ICs2MjkxLDcg
QEAgdm9pZCBXZWJWaWV3OjplbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKE5vZAogI2VuZGlmCiB9CiAK
LXZvaWQgV2ViVmlldzo6ZXhpdEZ1bGxzY3JlZW4oKQordm9pZCBXZWJWaWV3OjpleGl0VmlkZW9G
dWxsc2NyZWVuKCkKIHsKICNpZiBFTkFCTEUoVklERU8pICYmICFVU0UoR1NUUkVBTUVSKSAmJiAh
VVNFKE1FRElBX0ZPVU5EQVRJT04pCiAgICAgaWYgKCFtX2Z1bGxTY3JlZW5WaWRlb0NvbnRyb2xs
ZXIpCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC93aW4vV2ViVmlldy5oCShyZXZpc2lvbiAxNzMxNjEpCisrKyBTb3VyY2UvV2Vi
S2l0L3dpbi9XZWJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTk0MCw4ICs5NDAsOCBAQCBwdWJs
aWM6CiAgICAgV2ViQ29yZTo6R3JhcGhpY3NEZXZpY2VBZGFwdGVyKiBncmFwaGljc0RldmljZUFk
YXB0ZXIoKSBjb25zdDsKICNlbmRpZgogCi0gICAgdm9pZCBlbnRlckZ1bGxzY3JlZW5Gb3JOb2Rl
KFdlYkNvcmU6Ok5vZGUqKTsKLSAgICB2b2lkIGV4aXRGdWxsc2NyZWVuKCk7CisgICAgdm9pZCBl
bnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChXZWJDb3JlOjpIVE1MVmlkZW9FbGVt
ZW50Kik7CisgICAgdm9pZCBleGl0VmlkZW9GdWxsc2NyZWVuKCk7CiAKICAgICB2b2lkIHNldExh
c3RDdXJzb3IoSENVUlNPUiBjdXJzb3IpIHsgbV9sYXN0U2V0Q3Vyc29yID0gY3Vyc29yOyB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50LmNwcAkocmV2aXNpb24gMTczMTYxKQorKysgU291cmNlL1dlYktpdC93aW4vV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzczLDE5
ICs3NzMsMTkgQEAgQ09NUHRyPElXZWJVSURlbGVnYXRlPiBXZWJDaHJvbWVDbGllbnQ6OgogCiAj
aWYgRU5BQkxFKFZJREVPKQogCi1ib29sIFdlYkNocm9tZUNsaWVudDo6c3VwcG9ydHNGdWxsc2Ny
ZWVuRm9yTm9kZShjb25zdCBOb2RlKiBub2RlKQorYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnN1cHBv
cnRzVmlkZW9GdWxsc2NyZWVuKCkKIHsKLSAgICByZXR1cm4gaXNIVE1MVmlkZW9FbGVtZW50KG5v
ZGUpOworICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFdlYkNocm9tZUNsaWVudDo6ZW50ZXJG
dWxsc2NyZWVuRm9yTm9kZShOb2RlKiBub2RlKQordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmVudGVy
VmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvRWxl
bWVudCkKIHsKLSAgICBtX3dlYlZpZXctPmVudGVyRnVsbHNjcmVlbkZvck5vZGUobm9kZSk7Cisg
ICAgbV93ZWJWaWV3LT5lbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudCh2aWRlb0Vs
ZW1lbnQpOwogfQogCi12b2lkIFdlYkNocm9tZUNsaWVudDo6ZXhpdEZ1bGxzY3JlZW5Gb3JOb2Rl
KE5vZGUqKQordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmV4aXRWaWRlb0Z1bGxzY3JlZW4oKQogewot
ICAgIG1fd2ViVmlldy0+ZXhpdEZ1bGxzY3JlZW4oKTsKKyAgICBtX3dlYlZpZXctPmV4aXRWaWRl
b0Z1bGxzY3JlZW4oKTsKIH0KIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJD
b3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAkocmV2aXNpb24gMTczMTYxKQor
KysgU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTE0OCw5ICsxNDgsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IHNjcm9sbFJlY3RJbnRvVmlldyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3QgeyB9CiAK
ICNpZiBFTkFCTEUoVklERU8pCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzRnVsbHNjcmVlbkZv
ck5vZGUoY29uc3QgV2ViQ29yZTo6Tm9kZSopOwotICAgIHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxz
Y3JlZW5Gb3JOb2RlKFdlYkNvcmU6Ok5vZGUqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxz
Y3JlZW5Gb3JOb2RlKFdlYkNvcmU6Ok5vZGUqKTsKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNW
aWRlb0Z1bGxzY3JlZW4oKTsKKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJWaWRlb0Z1bGxzY3JlZW5G
b3JWaWRlb0VsZW1lbnQoV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCopOworICAgIHZpcnR1YWwg
dm9pZCBleGl0VmlkZW9GdWxsc2NyZWVuKCk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShOT1RJRklD
QVRJT05TKSB8fCBFTkFCTEUoTEVHQUNZX05PVElGSUNBVElPTlMpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237510</attachid>
            <date>2014-09-02 13:18:09 -0700</date>
            <delta_ts>2014-09-02 15:47:45 -0700</delta_ts>
            <desc>Rebaselined to newer trunk</desc>
            <filename>bug-136446-20140902131803.patch</filename>
            <type>text/plain</type>
            <size>120461</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MzE4MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMCBAQAorMjAxNC0wOS0wMiAgTWFjaWVq
IFN0YWNob3dpYWsgIDxtanNAYXBwbGUuY29tPgorCisgICAgICAgIENsZWFuIHVwIG5hbWluZyBm
b3IgYW5kIHNsaWdodGx5IHJlZmFjdG9yIGxlZ2FjeSB2aWRlbyBmdWxsc2NyZWVuIHN1cHBvcnQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjQ0Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEtleSBjaGFu
Z2VzOgorICAgICAgICBzdXBwb3J0c0Z1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqKSAtLT4gc3VwcG9y
dHNWaWRlb0Z1bGxzY3JlZW4oKQorICAgICAgICBlbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUq
KSAtLT4gZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoSFRNTFZpZGVvRWxlbWVu
dCopCisgICAgICAgIGV4aXRGdWxsc2NyZWVuRm9yTm9kZShOb2RlKikgLS0+IGV4aXRWaWRlb0Z1
bGxzY3JlZW4oKQorICAgICAgICAKKyAgICAgICAgVGhlIG9sZCB2ZXJzaW9ucyBoYWQgdW5uZWNl
c3NhcnkgcGFyYW1ldGVycywgZGlkIG5vdCBjbGVhcmx5IGRpc3Rpbmd1aXNoIHRoZWlyIHB1cnBv
c2UKKyAgICAgICAgZnJvbSBlbnRlckZ1bGxzY3JlZW5Gb3JFbGVtZW50IGFuZCBmcmllbmRzLCBh
bmQgd3JvbmdseSBjbGFpbWVkIGdlbmVyYWxpdHkgdG8gYWxsIE5vZGVzLgorICAgICAgICBBbHNv
IGNoYW5nZWQgbWFueSBvdGhlciBwbGFjZXMgdG8gdXNlIEhUTUxWaWRlb0VsZW1lbnQqIGluc3Rl
YWQgb2YgTm9kZSogb3IgCisgICAgICAgIEhUTUxNZWRpYUVsZW1lbnQqIHdoZW4gdGhleSB3ZXJl
IGluIGZhY3Qgb25seSB1c2VkIGZvciB2aWRlbyBlbGVtZW50cyBhbmQgd291bGQgb25seQorICAg
ICAgICB3b3JrIGZvciBzdWNoLgorCisgICAgICAgIFRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBp
bmNsdWRlIGEgYnVuY2ggb2YgcmVuYW1pbmcgaW4gc29tZSBpT1MgZnVsbHNjcmVlbiBjb2RlLgor
CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxNZWRpYUVsZW1lbnQ6OkhUTUxNZWRpYUVsZW1lbnQpOiBSZW5hbWUgbV9pc0Z1bGxzY3Jl
ZW4gZmxhZyB0byAKKyAgICAgICAgbV9pc0luVmlkZW9GdWxsc2NyZWVuLCBzaW5jZSBpdCBvbmx5
IGNvdmVycyB0aGUgY2FzZSBvZiBsZWdhY3kgdmlkZW8gZnVsbHNjcmVlbiwKKyAgICAgICAgbm90
IGVsZW1lbnQgZnVsbHNjcmVlbi4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6
OnN0b3ApOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6cmVxdWly
ZXNUZXh0VHJhY2tSZXByZXNlbnRhdGlvbik6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50Ojppc0Z1bGxzY3JlZW4pOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6SFRN
TE1lZGlhRWxlbWVudDo6ZW50ZXJGdWxsc2NyZWVuKTogUmVuYW1lIG1faXNGdWxsc2NyZWVuIGZs
YWcgdG8KKyAgICAgICAgbV9pc0luVmlkZW9GdWxsc2NyZWVuLiBIb2lzdCB2aWRlbyBlbGVtZW50
IGNoZWNrIGhlcmUgZnJvbSBhbGwgc3VwcG9ydHNGdWxsc2NyZW5Gb3JOb2RlCisgICAgICAgIGNs
aWVudHMuIEFkanVzdCBmb3IgcmVsZXZhbnQgQ2hyb21lQ2xpZW50IHJlZmFjdG9yaW5ncy4KKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmVudGVyRnVsbHNjcmVlbik6IGRpdHRv
IGFib3ZlCisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50Lmg6CisgICAgICAgICogaHRt
bC9IVE1MVmlkZW9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1l
bnQ6OnN1cHBvcnRzRnVsbHNjcmVlbik6IEFkanVzdCBmb3IgcmVsZXZhbnQgQ2hyb21lQ2xpZW50
IAorICAgICAgICByZWZhY3RvcmluZ3MuCisgICAgICAgICogcGFnZS9DaHJvbWVDbGllbnQuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6c3VwcG9ydHNWaWRlb0Z1bGxzY3JlZW4p
OiBSZW5hbWVkIGZyb20gCisgICAgICAgIHN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUsIGFuZCBy
ZW1vdmVkIE5vZGUqIHBhcmFtZXRlci4KKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6
ZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQpOiBSZW5hbWVkIGZyb20KKyAgICAg
ICAgZW50ZXJGdWxzY3JlZW5Gb3JOb2RlIGFuZCBjaGFuZ2VkIE5vZGUqIHBhcmFtZXRlciB0byBI
VE1MVmlkZW9FbGVtZW50Ki4KKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6ZXhpdFZp
ZGVvRnVsbHNjcmVlbik6IFJlbmFtZWQgZnJvbSAKKyAgICAgICAgZXhpdEZ1bGxzY3JlZW5Gb3JO
b2RlLCBhbmQgcmVtb3ZlZCBOb2RlKiBwYXJhbWV0ZXIuCisgICAgICAgICogcGxhdGZvcm0vaW9z
L1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW06CisgICAgICAgICgtW1dl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIgdmlkZW9FbGVtZW50XSk6IFJlbmFtZWQgZnJvbSBt
ZWRpYUVsZW1lbnQ7CisgICAgICAgIHJldHVybiBhIHZpZGVvIGVsZW1lbnQgYW5kIG5vdCBqdXN0
IGEgbWVkaWEgZWxlbWVudC4KKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ciBkZWFsbG9jXSk6IFJlbmFtZWQgX21lZGlhRWxlbWVudCBkYXRhIG1lbWJlcgorICAgICAgICB0
byBfdmlkZW9FbGVtZW50IGFuZCBjaGFuZ2VkIHR5cGUgYWNjb3JkaW5nbHkuCisgICAgICAgICgt
W1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIgc2V0VmlkZW9FbGVtZW50Ol0pOiBSZW5hbWVk
IGZyb20gc2V0TWVkaWFFbGVtZW50OgorICAgICAgICBhbmQgYWRqdXN0IHBhcmFtZXRlciB0eXBl
IGFjY29yZGluZ2x5LgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIGVu
dGVyRnVsbHNjcmVlbjpdKTogVmlkZW8gZWxlbWVudHMsIG5vdCBtZWRpYQorICAgICAgICBlbGVt
ZW50cy4KKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciBleGl0RnVsbHNj
cmVlbl0pOiBkaXR0bworICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIGRp
ZENsZWFudXBGdWxsc2NyZWVuXSk6IGRpdHRvCisgICAgICAgICogcGxhdGZvcm0vaW9zL1dlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9XZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oOiBSZW1vdmUgZ3JhdHVpdG91cyBIVE1MTUVkaWFF
bGVtZW50LmggaW5jbHVkZQorICAgICAgICBhbmQgZml4IGRlY2xhcmF0aW9ucyBhY2NvcmRpbmds
eS4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQubW06IEluY2x1ZGUgV1RGU3RyaW5nLmgKKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5oLgor
ICAgICAgICAqIHBsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dC5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5tbS4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50KSBSZW5hbWVkIGZyb20gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxN
ZWRpYUVsZW1lbnQKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
OjpzZXRWaWRlb0VsZW1lbnQpOiBSZW5hbWVkIGZyb20gc2V0TWVkaWFFbGVtZW50IGFuZAorICAg
ICAgICBjaGFuZ2UgcGFyYW0gdHlwZSBhY2NvcmRpbmdseS4gQWxzbyBubyBuZWVkIHRvIGNoZWNr
IGZvciBhY3R1YWwgdmlkZW9uZXNzIG9mIHRoZSBlbGVtZW50LgorICAgICAgICAoV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnVwZGF0ZUZvckV2ZW50TmFtZSk6IFJlbmFtZSBk
YXRhIG1lbWJlciBmcm9tIG1fbWVkaWFFbGVtZW50CisgICAgICAgIHRvIG1fdmlkZW9FbGVtZW50
IGFuZCBjaGFuZ2UgdHlwZSBhY2NvcmRpbmdseS4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0Z1bGxzY3JlZW5MYXllcik6IGRpdHRvCisgICAg
ICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6cGxheSk6IGRpdHRvCisg
ICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6cGF1c2UpOiBkaXR0
bworICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnRvZ2dsZVBs
YXlTdGF0ZSk6IGRpdHRvCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudDo6YmVnaW5TY3J1YmJpbmcpOiBkaXR0bworICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQ6OmVuZFNjcnViYmluZyk6IGRpdHRvCisgICAgICAgIChXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2Vla1RvVGltZSk6IGRpdHRvCisgICAgICAg
IChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6ZmFzdFNlZWspOiBkaXR0bwor
ICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmJlZ2luU2Nhbm5p
bmdGb3J3YXJkKTogZGl0dG8KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9F
bGVtZW50OjpiZWdpblNjYW5uaW5nQmFja3dhcmQpOiBkaXR0bworICAgICAgICAoV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmVuZFNjYW5uaW5nKTogZGl0dG8KKyAgICAgICAg
KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpyZXF1ZXN0RXhpdEZ1bGxzY3Jl
ZW4pOiBkaXR0bworICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6
OnNldFZpZGVvTGF5ZXJGcmFtZSk6IGRpdHRvCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9MYXllckdyYXZpdHkpOiBkaXR0bworICAgICAgICAo
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnVwZGF0ZUxlZ2libGVPcHRpb25z
KTogZGl0dG8KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlci5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyLm1tOgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIHZpZGVvRWxl
bWVudF0pOiBSZW5hbWVkIGZyb20gbWVkaWFFbGVtZW50CisgICAgICAgIGFuZCB1cGRhdGUgcmV0
dXJuIHR5cGUgYWNjb3JkaW5nbHkuCisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXIgc2V0VmlkZW9FbGVtZW50Ol0pOiBSZW5hbWVkIGZyb20gCisgICAgICAgIHNldE1lZGlh
RWxlbWVudCBhbmQgdXBkYXRlIHJldHVybiB0eXBlIGFjY29yZGluZ2x5LgorICAgICAgICAoLVtX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIHZpZGVvRWxlbWVudFJlY3RdKTogUmVuYW1lZAor
ICAgICAgICBmcm9tIG1lZGlhRWxlbWVudFJlY3QuCisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXIgZW50ZXJGdWxsc2NyZWVuOl0pOiBVcGRhdGUgZm9yCisgICAgICAgIHJl
bmFtZS4KKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciBleGl0RnVsbHNj
cmVlbl0pOiBkaXR0bworICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIHVw
ZGF0ZVBvd2VyQXNzZXJ0aW9uc10pOiBSZW5hbWUKKyAgICAgICAgbWVtYmVyIGZyb20gX21lZGlh
RWxlbWVudCB0byBfdmlkZW9FbGVtZW50CisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXIgX3JlcXVlc3RFeGl0XSk6IGRpdHRvCisgICAgICAgICogV2ViQ29yZS5leHAuaW46
IEFkanVzdCBmb3IgZnVuY3Rpb24gYW5kIGNsYXNzIHJlbmFtZXMuCisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGp1c3QgZm9yIGZpbGUgcmVuYW1lcy4KKwog
MjAxNC0wOS0wMiAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgog
CiAgICAgICAgIEZpeCBiaW5kaW5ncyB0ZXN0cyBhZnRlciByMTczMTc2LgpJbmRleDogU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5leHAuaW4JKHJldmlzaW9uIDE3MzE4MikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
ZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0zNDI2LDMwICszNDI2LDI5IEBAIF9fWk5LN1dlYkNv
cmUxNkhUTUxNZWRpYUVsZW1lbnQ4ZHVyYXRpb24KICNlbmRpZgogCiAjaWYgRU5BQkxFKFZJREVP
KSAmJiBQTEFURk9STShJT1MpCi1fX1pON1dlYkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
TWVkaWFFbGVtZW50MTBzZWVrVG9UaW1lRWQKLV9fWk43V2ViQ29yZTM1V2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxNZWRpYUVsZW1lbnQxMWVuZFNjYW5uaW5nRXYKLV9fWk43V2ViQ29yZTM1V2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQxMWhhbmRsZUV2ZW50RVBOU18yMlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRFUE5TXzVFdmVudEUKLV9fWk43V2ViQ29yZTM1V2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxNZWRpYUVsZW1lbnQxMmVuZFNjcnViYmluZ0V2Ci1fX1pON1dlYkNvcmUzNVdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50MTRiZWdpblNjcnViYmluZ0V2Ci1fX1pON1dl
YkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50MTVzZXRNZWRpYUVsZW1l
bnRFUE5TXzE2SFRNTE1lZGlhRWxlbWVudEUKLV9fWk43V2ViQ29yZTM1V2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxNZWRpYUVsZW1lbnQxNXRvZ2dsZVBsYXlTdGF0ZUV2Ci1fX1pON1dlYkNvcmUzNVdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50MThzZXRWaWRlb0xheWVyRnJhbWVFTlNf
OUZsb2F0UmVjdEUKLV9fWk43V2ViQ29yZTM1V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVs
ZW1lbnQyMGJlZ2luU2Nhbm5pbmdGb3J3YXJkRXYKLV9fWk43V2ViQ29yZTM1V2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQyMHNldFZpZGVvTGF5ZXJHcmF2aXR5RU5TXzIzV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWwxMlZpZGVvR3Jhdml0eUUKLV9fWk43V2ViQ29yZTM1V2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQyMWJlZ2luU2Nhbm5pbmdCYWNrd2FyZEV2Ci1fX1pO
N1dlYkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50MjFyZXF1ZXN0RXhp
dEZ1bGxzY3JlZW5FdgotX19aTjdXZWJDb3JlMzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlh
RWxlbWVudDIyc2VsZWN0QXVkaW9NZWRpYU9wdGlvbkV5Ci1fX1pON1dlYkNvcmUzNVdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50MjNzZXRWaWRlb0Z1bGxzY3JlZW5MYXllckVQN0NB
TGF5ZXIKLV9fWk43V2ViQ29yZTM1V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQy
NHNlbGVjdExlZ2libGVNZWRpYU9wdGlvbkV5Ci1fX1pON1dlYkNvcmUzNVdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsTWVkaWFFbGVtZW50NHBsYXlFdgotX19aTjdXZWJDb3JlMzVXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbE1lZGlhRWxlbWVudDVwYXVzZUV2Ci1fX1pON1dlYkNvcmUzNVdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OGZhc3RTZWVrRWQKLV9fWk43V2ViQ29yZTM1V2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnRDMkV2Ci1fX1pON1dlYkNvcmUzNVdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50RDJFdgorX19aTjdXZWJDb3JlMzVXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDEwc2Vla1RvVGltZUVkCitfX1pON1dlYkNvcmUzNVdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50MTFlbmRTY2FubmluZ0V2CitfX1pON1dl
YkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50MTFoYW5kbGVFdmVudEVQ
TlNfMjJTY3JpcHRFeGVjdXRpb25Db250ZXh0RVBOU181RXZlbnRFCitfX1pON1dlYkNvcmUzNVdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50MTJlbmRTY3J1YmJpbmdFdgorX19aTjdX
ZWJDb3JlMzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDE0YmVnaW5TY3J1YmJp
bmdFdgorX19aTjdXZWJDb3JlMzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDE1
c2V0VmlkZW9FbGVtZW50RVBOU18xNkhUTUxWaWRlb0VsZW1lbnRFCitfX1pON1dlYkNvcmUzNVdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50MTV0b2dnbGVQbGF5U3RhdGVFdgorX19a
TjdXZWJDb3JlMzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDE4c2V0VmlkZW9M
YXllckZyYW1lRU5TXzlGbG9hdFJlY3RFCitfX1pON1dlYkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50MjBiZWdpblNjYW5uaW5nRm9yd2FyZEV2CitfX1pON1dlYkNvcmUz
NVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50MjBzZXRWaWRlb0xheWVyR3Jhdml0
eUVOU18yM1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsMTJWaWRlb0dyYXZpdHlFCitfX1pON1dlYkNv
cmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50MjFiZWdpblNjYW5uaW5nQmFj
a3dhcmRFdgorX19aTjdXZWJDb3JlMzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dDIxcmVxdWVzdEV4aXRGdWxsc2NyZWVuRXYKK19fWk43V2ViQ29yZTM1V2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxWaWRlb0VsZW1lbnQyMnNlbGVjdEF1ZGlvTWVkaWFPcHRpb25FeQorX19aTjdXZWJD
b3JlMzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDIzc2V0VmlkZW9GdWxsc2Ny
ZWVuTGF5ZXJFUDdDQUxheWVyCitfX1pON1dlYkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50MjRzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb25FeQorX19aTjdXZWJDb3JlMzVX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDRwbGF5RXYKK19fWk43V2ViQ29yZTM1
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ1cGF1c2VFdgorX19aTjdXZWJDb3Jl
MzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDhmYXN0U2Vla0VkCitfX1pON1dl
YkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50QzJFdgorX19aTjdXZWJD
b3JlMzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudEQyRXYKIF9fWk5LN1dlYkNv
cmUxNkhUTUxWaWRlb0VsZW1lbnQxMHZpZGVvV2lkdGhFdgogX19aTks3V2ViQ29yZTE2SFRNTFZp
ZGVvRWxlbWVudDExdmlkZW9IZWlnaHRFdgotX19aVFZON1dlYkNvcmUzNVdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsTWVkaWFFbGVtZW50RQotX19aVGhuP19ON1dlYkNvcmUzNVdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsTWVkaWFFbGVtZW50MTFoYW5kbGVFdmVudEVQTlNfMjJTY3JpcHRFeGVjdXRpb25D
b250ZXh0RVBOU181RXZlbnRFCitfX1pUaG40X043V2ViQ29yZTM1V2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQxMWhhbmRsZUV2ZW50RVBOU18yMlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRFUE5TXzVFdmVudEUKICNlbmRpZgogCiAjaWYgRU5BQkxFKFZJREVPKSAmJiBQTEFURk9STShJ
T1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDgwMDAwCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiAxNzMxODIpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEzNjMsOCArMTM2Myw2IEBACiAJCTNGNDJC
MzFFMTg4MTE5MUIwMDI3OEFBQyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRjQyQjMx
QzE4ODExOTFCMDAyNzhBQUMgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1t
ICovOyB9OwogCQkzRkJDNEFFQTE4OTg4MEVGMDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNG
QkM0QUU5MTg5ODgwRUYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTNGQkM0QUVDMTg5
ODgxMEUwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGQkM0QUVCMTg5ODgxMEUwMDQ2
RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkzRkJDNEFFRjE4OTg4MTM4MDA0NkVFMzgg
LyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRkJDNEFFRDE4OTg4MTM4MDA0NkVFMzgg
LyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQubW0gKi87IH07Ci0JCTNGQkM0
QUYwMTg5ODgxMzgwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0ZCQzRB
RUUxODk4ODEzODAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJM0ZC
QzRBRjMxODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0ZCQzRB
RjExODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1t
ICovOyB9OwogCQkzRkJDNEFGNDE4OTg4MTU2MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDNGQkM0QUYyMTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTNGRkZGOUE4MTU5RDlBNTUwMDIwQkJENSAvKiBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0ZGRkY5
QTYxNTlEOUE1NTAwMjBCQkQ1IC8qIFdlYktpdENTU1ZpZXdwb3J0UnVsZS5jcHAgKi87IH07CkBA
IC0yMjA5LDYgKzIyMDcsOCBAQAogCQk2NURGMzIzQzA5RDFERTY1MDAxQkUzMjUgLyogSlNDYW52
YXNQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NjVERjMyMzYwOUQxREU2NTAwMUJFMzI1IC8qIEpTQ2FudmFzUHJveHkuaCAqLzsgfTsKIAkJNjVE
RjMyNjEwOUQxRTE5OTAwMEJFMzI1IC8qIFVzZXJBZ2VudFN0eWxlU2hlZXRzRGF0YS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTY1ODFBRjA5RDE0
RUU2MDAwRTYxRDcgLyogVXNlckFnZW50U3R5bGVTaGVldHNEYXRhLmNwcCAqLzsgfTsKIAkJNjVF
MEU5NDQxMTMzQzg5RjAwQjRDQjEwIC8qIEpTRE9NV3JhcHBlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVFMEU5NDMxMTMzQzg5RjAwQjRDQjEwIC8q
IEpTRE9NV3JhcHBlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTY1RkQ0NjY1MTlCNTk2RjAwMDFFMkI0RCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNjU4NkZFM0MxOUI1NDhCRDAwNUMzQzgyIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJNjVGRDQ2NjYxOUI1OTZGNjAwMUUyQjREIC8qIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNjU4NkZFM0QxOUI1NDhCRDAwNUMzQzgyIC8qIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50Lm1tICovOyB9OwogCQk2NUZFQTg2OTA5ODMzQURFMDBCRUQ0QUIg
LyogUGFnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA2NUZFQTg2ODA5ODMzQURFMDBCRUQ0QUIgLyogUGFnZS5jcHAgKi87IH07CiAJCTZCMzQ4MDk0
MEVFRjUwRDQwMEFDMUI0MSAvKiBOYXRpdmVJbWFnZVB0ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkIzNDgwOTIwRUVGNTBENDAwQUMxQjQxIC8qIE5h
dGl2ZUltYWdlUHRyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNkM2Mzg4OTVBOTZDQ0VFNTBDOEM5NDZDIC8qIENhY2hlZFJlc291cmNlUmVxdWVz
dEluaXRpYXRvcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDZDNjM4ODkzQTk2Q0NFRTUwQzhDOTQ2QyAvKiBDYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0
aWF0b3JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTgzNjYsOCArODM2Niw2IEBACiAJCTNGNDJCMzFDMTg4MTE5MUIwMDI3OEFBQyAvKiBXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IG5hbWUgPSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW07IHBh
dGggPSBpb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkzRkJDNEFFOTE4OTg4MEVGMDA0NkVFMzggLyogV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWwuaDsgcGF0aCA9IGlvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzRkJDNEFFQjE4OTg4MTBFMDA0NkVFMzgg
LyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS5oOyBwYXRoID0gaW9zL1dlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkz
RkJDNEFFRDE4OTg4MTM4MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVs
ZW1lbnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5tbTsgcGF0aCA9IGlvcy9XZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
M0ZCQzRBRUUxODk4ODEzODAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFF
bGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsTWVkaWFFbGVtZW50Lmg7IHBhdGggPSBpb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxNZWRpYUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0ZCQzRBRjEx
ODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQubW07IHBhdGggPSBpb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNGQkM0QUYyMTg5ODgxNTYw
MDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5o
OyBwYXRoID0gaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNGRkZGOUE2MTU5RDlBNTUwMDIwQkJENSAvKiBXZWJLaXRD
U1NWaWV3cG9ydFJ1bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2ViS2l0Q1NTVmlld3BvcnRSdWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTkyNzYsNiArOTI3NCw4IEBACiAJCTY1N0VEQTA2MTM4NUNCOTcwMDRFMDY0NSAvKiBNZW1vcnlQ
cmVzc3VyZUhhbmRsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
TWVtb3J5UHJlc3N1cmVIYW5kbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NjU3RURBMDcxMzg1Q0I5NzAwNEUwNjQ1IC8qIE1lbW9yeVByZXNzdXJlSGFuZGxlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZW1vcnlQcmVzc3VyZUhhbmRsZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjU4NDM2ODUwQUUwMUI3NDAwRTUzNzUzIC8qIEZy
YW1lTG9hZFJlcXVlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZyYW1l
TG9hZFJlcXVlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjU4NkZFM0MxOUI1
NDhCRDAwNUMzQzgyIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlk
ZW9FbGVtZW50Lmg7IHBhdGggPSBpb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjU4NkZFM0QxOUI1NDhCRDAwNUMz
QzgyIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRl
b0VsZW1lbnQubW07IHBhdGggPSBpb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1OTM5MjM1MDlBRTQzNDYwMDJD
NTMxRiAvKiBVUkwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVS
TC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1OTM5MjM2MDlBRTQzNDYwMDJD
NTMxRiAvKiBVUkwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVSTC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTkzOTIzOTA5QUU0MzVDMDAyQzUzMUYgLyog
VVJMTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbGluZUVuZGluZyA9
IDA7IHBhdGggPSBVUkxNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHhjTGFuZ3VhZ2VT
cGVjaWZpY2F0aW9uSWRlbnRpZmllciA9IHhjb2RlLmxhbmcub2JqY3BwOyB9OwpAQCAtMTg0NzQs
OCArMTg0NzQsOCBAQAogCQkJCTNGQkM0QUYyMTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oICovLAogCQkJCTNGQkM0QUYxMTg5ODgxNTYwMDQ2RUUz
OCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbSAqLywKIAkJCQkzRkJDNEFF
OTE4OTg4MEVGMDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCAqLywKLQkJCQkz
RkJDNEFFRTE4OTg4MTM4MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVs
ZW1lbnQuaCAqLywKLQkJCQkzRkJDNEFFRDE4OTg4MTM4MDA0NkVFMzggLyogV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQubW0gKi8sCisJCQkJNjU4NkZFM0MxOUI1NDhCRDAwNUMz
QzgyIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmggKi8sCisJCQkJNjU4
NkZFM0QxOUI1NDhCRDAwNUMzQzgyIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVt
ZW50Lm1tICovLAogCQkJCUU0NTM5MDNDMEVBRkQ2MzcwMDM2OTVDOCAvKiBXaWRnZXRJT1MubW0g
Ki8sCiAJCQkpOwogCQkJbmFtZSA9IGlvczsKQEAgLTI1NjEwLDYgKzI1NjEwLDcgQEAKIAkJCQk1
QTU3NEYyNTEzMURCOTM5MDA0NzFCODggLyogUmVuZGVyUXVvdGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUQ3MEFENjU4MTNFMTM0MkIwMDVCNTBCNCAvKiBSZW5kZXJSZWdpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDRTkzRjQ1MTUxN0M1NjcwMDhDQ0Y3NCAvKiBSZW5kZXJSZWdpb25TZXQuaCBp
biBIZWFkZXJzICovLAorCQkJCTY1RkQ0NjY1MTlCNTk2RjAwMDFFMkI0RCAvKiBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg3MURGRTMw
QTE1Mzc2QjAwQjEyQTY4IC8qIFJlbmRlclJlcGxhY2VkLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
Q0E4NDZENzBEQzY3QTM1MDAyNkMzMDkgLyogUmVuZGVyUmVwbGljYS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTQ3OUZBRUUxMDlBRTM3NTAwREVENjU1IC8qIFJlbmRlclJ1YnkuaCBpbiBIZWFkZXJz
ICovLApAQCAtMjY1NDMsNyArMjY1NDQsNiBAQAogCQkJCTNGQkM0QUVDMTg5ODgxMEUwMDQ2RUUz
OCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTNG
QkM0QUY0MTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJM0ZCQzRBRUExODk4ODBFRjAwNDZFRTM4IC8qIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsLmggaW4gSGVhZGVycyAqLywKLQkJCQkzRkJDNEFGMDE4OTg4MTM4
MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUYxMjE3MUY2MTZBOENGMEIwMDAwNTNDQSAvKiBXZWJWVFRFbGVtZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1RDIxQTgwMzEzRUNFNURGMDBCQjcwNjQgLyogV2ViVlRUUGFy
c2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMTBCNjk4MDE0MEMxNzQwMDBCQzFDMjYgLyogV2Vi
VlRUVG9rZW4uaCBpbiBIZWFkZXJzICovLApAQCAtMjc1NzMsNiArMjc1NzMsNyBAQAogCQkJCUZE
MTc2MkUzMTc2Njg2RUEwMEQ4MzZBOCAvKiBEb3duU2FtcGxlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBN0NBNTk1RTBCMjdCRDlFMDBGQTAyMUQgLyogRHJhZ0NvbnRyb2xsZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTcxODc4OTAwQjJEMDRBQzAwQTE2RUNFIC8qIERyYWdDb250cm9sbGVy
TWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNjVGRDQ2NjYxOUI1OTZGNjAwMUUyQjREIC8qIFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTc5NTQ2NDMwQjVDNENCNDAwN0I0MzhGIC8qIERyYWdEYXRhLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE3OTU0NjNFMEI1QzRDODAwMDdCNDM4RiAvKiBEcmFnRGF0YU1hYy5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCUE3Q0ZCM0QxMEI3RUQxMEEwMDcwQzMyRCAvKiBEcmFnSW1hZ2UuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC0yOTgyMiw3ICsyOTgyMyw2IEBACiAJCQkJQ0Q4MjAzMEQxMzk1QUI2QTAw
Rjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW0gaW4gU291
cmNlcyAqLywKIAkJCQk3QzczRkIwQzE5MUVGNUE4MDA3REUwNjEgLyogSlNVc2VyTWVzc2FnZUhh
bmRsZXJzTmFtZXNwYWNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTNGQkM0QUYzMTg5ODgxNTYw
MDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbSBpbiBTb3VyY2Vz
ICovLAotCQkJCTNGQkM0QUVGMTg5ODgxMzgwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbE1lZGlhRWxlbWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUYxMjE3MUY1MTZBOENFRDIw
MDAwNTNDQSAvKiBXZWJWVFRFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVEMjFBODAy
MTNFQ0U1REYwMEJCNzA2NCAvKiBXZWJWVFRQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QjEwQjY5ODExNDBDMTc0MDAwQkMxQzI2IC8qIFdlYlZUVFRva2VuaXplci5jcHAgaW4gU291cmNl
cyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkocmV2
aXNpb24gMTczMTgyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzA1LDcgKzMwNSw3IEBAIEhUTUxNZWRpYUVsZW1lbnQ6OkhU
TUxNZWRpYUVsZW1lbnQoY29uc3QKICAgICAsIG1fc2VudEVuZEV2ZW50KGZhbHNlKQogICAgICwg
bV9wYXVzZWRJbnRlcm5hbChmYWxzZSkKICAgICAsIG1fc2VuZFByb2dyZXNzRXZlbnRzKHRydWUp
Ci0gICAgLCBtX2lzRnVsbHNjcmVlbihmYWxzZSkKKyAgICAsIG1faXNJblZpZGVvRnVsbHNjcmVl
bihmYWxzZSkKICAgICAsIG1fY2xvc2VkQ2FwdGlvbnNWaXNpYmxlKGZhbHNlKQogICAgICwgbV93
ZWJraXRMZWdhY3lDbG9zZWRDYXB0aW9uT3ZlcnJpZGUoZmFsc2UpCiAgICAgLCBtX2NvbXBsZXRl
bHlMb2FkZWQoZmFsc2UpCkBAIC02ODIsNyArNjgyLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50
OjpyZW1vdmVkRnJvbShDb250YQogICAgICAgICAgICAgbWVkaWFDb250cm9scygpLT5oaWRlKCk7
CiAgICAgICAgIGlmIChtX25ldHdvcmtTdGF0ZSA+IE5FVFdPUktfRU1QVFkpCiAgICAgICAgICAg
ICBwYXVzZSgpOwotICAgICAgICBpZiAobV9pc0Z1bGxzY3JlZW4pCisgICAgICAgIGlmIChtX2lz
SW5WaWRlb0Z1bGxzY3JlZW4pCiAgICAgICAgICAgICBleGl0RnVsbHNjcmVlbigpOwogCiAgICAg
ICAgIGlmIChtX3BsYXllcikgewpAQCAtNDY0Nyw3ICs0NjQ3LDcgQEAgYm9vbCBIVE1MTWVkaWFF
bGVtZW50OjpjYW5TdXNwZW5kKCkgY29ucwogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzdG9wKCkK
IHsKICAgICBMT0coTWVkaWEsICJIVE1MTWVkaWFFbGVtZW50OjpzdG9wIik7Ci0gICAgaWYgKG1f
aXNGdWxsc2NyZWVuKQorICAgIGlmIChtX2lzSW5WaWRlb0Z1bGxzY3JlZW4pCiAgICAgICAgIGV4
aXRGdWxsc2NyZWVuKCk7CiAgICAgCiAgICAgbV9pbkFjdGl2ZURvY3VtZW50ID0gZmFsc2U7CkBA
IC00NzQxLDcgKzQ3NDEsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnZpc2liaWxpdHlTdGF0
ZUNoCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogYm9vbCBIVE1MTWVkaWFFbGVtZW50OjpyZXF1
aXJlc1RleHRUcmFja1JlcHJlc2VudGF0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9pc0Z1
bGxzY3JlZW4gJiYgbV9wbGF5ZXIgPyBtX3BsYXllci0+cmVxdWlyZXNUZXh0VHJhY2tSZXByZXNl
bnRhdGlvbigpIDogZmFsc2U7CisgICAgcmV0dXJuIG1faXNJblZpZGVvRnVsbHNjcmVlbiAmJiBt
X3BsYXllciA/IG1fcGxheWVyLT5yZXF1aXJlc1RleHRUcmFja1JlcHJlc2VudGF0aW9uKCkgOiBm
YWxzZTsKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRUZXh0VHJhY2tSZXByZXNlbnRh
dGlvbihUZXh0VHJhY2tSZXByZXNlbnRhdGlvbiogcmVwcmVzZW50YXRpb24pCkBAIC00ODMzLDcg
KzQ4MzMsNyBAQCBkb3VibGUgSFRNTE1lZGlhRWxlbWVudDo6bWF4RmFzdEZvcndhcmRSCiAgICAg
CiBib29sIEhUTUxNZWRpYUVsZW1lbnQ6OmlzRnVsbHNjcmVlbigpIGNvbnN0CiB7Ci0gICAgaWYg
KG1faXNGdWxsc2NyZWVuKQorICAgIGlmIChtX2lzSW5WaWRlb0Z1bGxzY3JlZW4pCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIAogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKQEAgLTQ4NTcs
NyArNDg1Nyw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dG9nZ2xlRnVsbHNjcmVlblMKIHZv
aWQgSFRNTE1lZGlhRWxlbWVudDo6ZW50ZXJGdWxsc2NyZWVuKCkKIHsKICAgICBMT0coTWVkaWEs
ICJIVE1MTWVkaWFFbGVtZW50OjplbnRlckZ1bGxzY3JlZW4iKTsKLSAgICBpZiAobV9pc0Z1bGxz
Y3JlZW4pCisgICAgaWYgKG1faXNJblZpZGVvRnVsbHNjcmVlbikKICAgICAgICAgcmV0dXJuOwog
CiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQpAQCAtNDg2NywxMiArNDg2NywxMyBAQCB2b2lk
IEhUTUxNZWRpYUVsZW1lbnQ6OmVudGVyRnVsbHNjcmVlbigpCiAgICAgfQogI2VuZGlmCiAKLSAg
ICBtX2lzRnVsbHNjcmVlbiA9IHRydWU7CisgICAgbV9pc0luVmlkZW9GdWxsc2NyZWVuID0gdHJ1
ZTsKICAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQogICAgICAgICBtZWRpYUNvbnRyb2xzKCkt
PmVudGVyZWRGdWxsc2NyZWVuKCk7Ci0gICAgaWYgKGRvY3VtZW50KCkucGFnZSgpKSB7Ci0gICAg
ICAgIGlmIChkb2N1bWVudCgpLnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50KCkuc3VwcG9ydHNGdWxs
c2NyZWVuRm9yTm9kZSh0aGlzKSkgewotICAgICAgICAgICAgZG9jdW1lbnQoKS5wYWdlKCktPmNo
cm9tZSgpLmNsaWVudCgpLmVudGVyRnVsbHNjcmVlbkZvck5vZGUodGhpcyk7CisgICAgaWYgKGRv
Y3VtZW50KCkucGFnZSgpICYmIGlzSFRNTFZpZGVvRWxlbWVudCh0aGlzKSkgeworICAgICAgICBI
VE1MVmlkZW9FbGVtZW50KiBhc1ZpZGVvID0gdG9IVE1MVmlkZW9FbGVtZW50KHRoaXMpOworICAg
ICAgICBpZiAoZG9jdW1lbnQoKS5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLnN1cHBvcnRzVmlk
ZW9GdWxsc2NyZWVuKCkpIHsKKyAgICAgICAgICAgIGRvY3VtZW50KCkucGFnZSgpLT5jaHJvbWUo
KS5jbGllbnQoKS5lbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChhc1ZpZGVvKTsK
ICAgICAgICAgICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1lcygpLndlYmtpdGJlZ2luZnVsbHNj
cmVlbkV2ZW50KTsKICAgICAgICAgfQogICAgIH0KQEAgLTQ4ODksMTYgKzQ4OTAsMTYgQEAgdm9p
ZCBIVE1MTWVkaWFFbGVtZW50OjpleGl0RnVsbHNjcmVlbigpCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAjZW5kaWYKLSAgICBBU1NFUlQobV9pc0Z1bGxzY3JlZW4pOwotICAgIG1faXNGdWxsc2Ny
ZWVuID0gZmFsc2U7CisgICAgQVNTRVJUKG1faXNJblZpZGVvRnVsbHNjcmVlbik7CisgICAgbV9p
c0luVmlkZW9GdWxsc2NyZWVuID0gZmFsc2U7CiAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkK
ICAgICAgICAgbWVkaWFDb250cm9scygpLT5leGl0ZWRGdWxsc2NyZWVuKCk7Ci0gICAgaWYgKGRv
Y3VtZW50KCkucGFnZSgpKSB7CisgICAgaWYgKGRvY3VtZW50KCkucGFnZSgpICYmIGlzSFRNTFZp
ZGVvRWxlbWVudCh0aGlzKSkgewogICAgICAgICBpZiAobV9tZWRpYVNlc3Npb24tPnJlcXVpcmVz
RnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2soKnRoaXMpKQogICAgICAgICAgICAgcGF1c2VJbnRl
cm5hbCgpOwogCi0gICAgICAgIGlmIChkb2N1bWVudCgpLnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50
KCkuc3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZSh0aGlzKSkgewotICAgICAgICAgICAgZG9jdW1l
bnQoKS5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLmV4aXRGdWxsc2NyZWVuRm9yTm9kZSh0aGlz
KTsKKyAgICAgICAgaWYgKGRvY3VtZW50KCkucGFnZSgpLT5jaHJvbWUoKS5jbGllbnQoKS5zdXBw
b3J0c1ZpZGVvRnVsbHNjcmVlbigpKSB7CisgICAgICAgICAgICBkb2N1bWVudCgpLnBhZ2UoKS0+
Y2hyb21lKCkuY2xpZW50KCkuZXhpdFZpZGVvRnVsbHNjcmVlbigpOwogICAgICAgICAgICAgc2No
ZWR1bGVFdmVudChldmVudE5hbWVzKCkud2Via2l0ZW5kZnVsbHNjcmVlbkV2ZW50KTsKICAgICAg
ICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCShy
ZXZpc2lvbiAxNzMxODIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtODE2LDcgKzgxNiw3IEBAIHByaXZhdGU6CiAgICAgLy8gc3Vw
cG9ydCBwcm9ncmVzcyBldmVudHMgc28gc2V0dGluZyBtX3NlbmRQcm9ncmVzc0V2ZW50cyBkaXNh
YmxlcyB0aGVtIAogICAgIGJvb2wgbV9zZW5kUHJvZ3Jlc3NFdmVudHMgOiAxOwogCi0gICAgYm9v
bCBtX2lzRnVsbHNjcmVlbiA6IDE7CisgICAgYm9vbCBtX2lzSW5WaWRlb0Z1bGxzY3JlZW4gOiAx
OwogICAgIGJvb2wgbV9jbG9zZWRDYXB0aW9uc1Zpc2libGUgOiAxOwogICAgIGJvb2wgbV93ZWJr
aXRMZWdhY3lDbG9zZWRDYXB0aW9uT3ZlcnJpZGUgOiAxOwogICAgIGJvb2wgbV9jb21wbGV0ZWx5
TG9hZGVkIDogMTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNw
cAkocmV2aXNpb24gMTczMTgyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU3LDcgKzE1Nyw3IEBAIGJvb2wgSFRNTFZpZGVv
RWxlbWVudDo6c3VwcG9ydHNGdWxsc2NyZWUKICAgICBpZiAoIXBsYXllcigpLT5oYXNWaWRlbygp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gcGFnZS0+Y2hyb21lKCkuY2xp
ZW50KCkuc3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZSh0aGlzKTsKKyAgICByZXR1cm4gcGFnZS0+
Y2hyb21lKCkuY2xpZW50KCkuc3VwcG9ydHNWaWRlb0Z1bGxzY3JlZW4oKTsKICNlbmRpZiAvLyBQ
TEFURk9STShJT1MpCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAkocmV2
aXNpb24gMTczMTgyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMzM5LDkgKzMzOSw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEdyYXBo
aWNzRGV2aWNlQWRhcHRlciogZ3JhcGhpY3NEZXZpY2VBZGFwdGVyKCkgY29uc3QgeyByZXR1cm4g
MDsgfQogI2VuZGlmCiAKLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9k
ZShjb25zdCBOb2RlKikgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZW50ZXJG
dWxsc2NyZWVuRm9yTm9kZShOb2RlKikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGV4aXRGdWxsc2Ny
ZWVuRm9yTm9kZShOb2RlKikgeyB9CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzVmlkZW9GdWxs
c2NyZWVuKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJWaWRlb0Z1
bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoSFRNTFZpZGVvRWxlbWVudCopIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBleGl0VmlkZW9GdWxsc2NyZWVuKCkgeyB9CiAgICAgdmlydHVhbCBib29sIHJlcXVp
cmVzRnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2soKSB7IHJldHVybiBmYWxzZTsgfSAKIAogI2lm
IEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lv
cy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0
LmgJKHJldmlzaW9uIDE3MzE4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTMg
KzI4LDEzIEBACiAKICNpZiBQTEFURk9STShJT1MpCiAKLSNpbXBvcnQgPFdlYkNvcmUvSFRNTE1l
ZGlhRWxlbWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9IVE1MVmlkZW9FbGVtZW50Lmg+CiAKIE9C
SkNfQ0xBU1MgVUlWaWV3OwogCiBXRUJDT1JFX0VYUE9SVCBAaW50ZXJmYWNlIFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXIgOiBOU09iamVjdAotLSAodm9pZClzZXRNZWRpYUVsZW1lbnQ6KFdl
YkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqKW1lZGlhRWxlbWVudDsKLS0gKFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnQqKW1lZGlhRWxlbWVudDsKKy0gKHZvaWQpc2V0VmlkZW9FbGVtZW50OihXZWJD
b3JlOjpIVE1MVmlkZW9FbGVtZW50Kil2aWRlb0VsZW1lbnQ7CistIChXZWJDb3JlOjpIVE1MVmlk
ZW9FbGVtZW50Kil2aWRlb0VsZW1lbnQ7CiAtICh2b2lkKWVudGVyRnVsbHNjcmVlbjooVUlWaWV3
ICopdmlldzsKIC0gKHZvaWQpZXhpdEZ1bGxzY3JlZW47CiAtICh2b2lkKXJlcXVlc3RIaWRlQW5k
RXhpdEZ1bGxzY3JlZW47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW0JKHJl
dmlzaW9uIDE3MzE4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW0JKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcg
QEAKIAogI2ltcG9ydCAiTG9nZ2luZy5oIgogI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVt
ZW50LmgiCisjaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oIgog
I2ltcG9ydCA8UXVhcnR6Q29yZS9Db3JlQW5pbWF0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dl
YkNvcmVUaHJlYWRSdW4uaD4KIApAQCAtNDAsMTIgKzQwLDEyIEBAIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogI2lmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEIDwgODAwMDAKIAog
QGltcGxlbWVudGF0aW9uIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIKLS0gKHZvaWQpc2V0
TWVkaWFFbGVtZW50OihXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50KiltZWRpYUVsZW1lbnQKKy0g
KHZvaWQpc2V0VmlkZW9FbGVtZW50OihXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50Kil2aWRlb0Vs
ZW1lbnQKIHsKLSAgICBVTlVTRURfUEFSQU0obWVkaWFFbGVtZW50KTsKKyAgICBVTlVTRURfUEFS
QU0odmlkZW9FbGVtZW50KTsKIH0KIAotLSAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCopbWVk
aWFFbGVtZW50CistIChXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50Kil2aWRlb0VsZW1lbnQKIHsK
ICAgICByZXR1cm4gbnVsbHB0cjsKIH0KQEAgLTgxLDkgKzgxLDkgQEAgcHVibGljOgogCiBAaW1w
bGVtZW50YXRpb24gV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlcgogewotICAgIFJlZlB0cjxI
VE1MTWVkaWFFbGVtZW50PiBfbWVkaWFFbGVtZW50OworICAgIFJlZlB0cjxIVE1MVmlkZW9FbGVt
ZW50PiBfdmlkZW9FbGVtZW50OwogICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdD4gX2ludGVyZmFjZTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxN
ZWRpYUVsZW1lbnQ+IF9tb2RlbDsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ+IF9tb2RlbDsKICAgICBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ2hh
bmdlT2JzZXJ2ZXIgX2NoYW5nZU9ic2VydmVyOwogICAgIFJldGFpblB0cjxQbGF0Zm9ybUxheWVy
PiBfdmlkZW9GdWxsc2NyZWVuTGF5ZXI7CiB9CkBAIC0xMDAsMTggKzEwMCwxOCBAQCAtIChpbnN0
YW5jZXR5cGUpaW5pdAogCiAtICh2b2lkKWRlYWxsb2MKIHsKLSAgICBfbWVkaWFFbGVtZW50ID0g
bnVsbHB0cjsKKyAgICBfdmlkZW9FbGVtZW50ID0gbnVsbHB0cjsKICAgICBbc3VwZXIgZGVhbGxv
Y107CiB9CiAKLS0gKHZvaWQpc2V0TWVkaWFFbGVtZW50OihIVE1MTWVkaWFFbGVtZW50KiltZWRp
YUVsZW1lbnQKKy0gKHZvaWQpc2V0VmlkZW9FbGVtZW50OihIVE1MVmlkZW9FbGVtZW50Kil2aWRl
b0VsZW1lbnQKIHsKLSAgICBfbWVkaWFFbGVtZW50ID0gbWVkaWFFbGVtZW50OworICAgIF92aWRl
b0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7CiB9CiAKLS0gKEhUTUxNZWRpYUVsZW1lbnQqKW1lZGlh
RWxlbWVudAorLSAoSFRNTFZpZGVvRWxlbWVudCopdmlkZW9FbGVtZW50CiB7Ci0gICAgcmV0dXJu
IF9tZWRpYUVsZW1lbnQuZ2V0KCk7CisgICAgcmV0dXJuIF92aWRlb0VsZW1lbnQuZ2V0KCk7CiB9
CiAKIC0gKHZvaWQpZW50ZXJGdWxsc2NyZWVuOihVSVZpZXcgKil2aWV3CkBAIC0xMjAsMTcgKzEy
MCwxNyBAQCAtICh2b2lkKWVudGVyRnVsbHNjcmVlbjooVUlWaWV3ICopdmlldwogICAgIAogICAg
IF9pbnRlcmZhY2UgPSBhZG9wdFJlZihuZXcgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQpOwogICAgIF9pbnRlcmZhY2UtPnNldFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVy
KCZfY2hhbmdlT2JzZXJ2ZXIpOwotICAgIF9tb2RlbCA9IGFkb3B0UmVmKG5ldyBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudCk7CisgICAgX21vZGVsID0gYWRvcHRSZWYobmV3IFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KTsKICAgICBfbW9kZWwtPnNldFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZShfaW50ZXJmYWNlLmdldCgpKTsKICAgICBfaW50ZXJmYWNl
LT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbChfbW9kZWwuZ2V0KCkpOwotICAgIF9tb2RlbC0+
c2V0TWVkaWFFbGVtZW50KF9tZWRpYUVsZW1lbnQuZ2V0KCkpOworICAgIF9tb2RlbC0+c2V0Vmlk
ZW9FbGVtZW50KF92aWRlb0VsZW1lbnQuZ2V0KCkpOwogICAgIF92aWRlb0Z1bGxzY3JlZW5MYXll
ciA9IFtDQUxheWVyIGxheWVyXTsKLSAgICBfaW50ZXJmYWNlLT5zZXR1cEZ1bGxzY3JlZW4oKl92
aWRlb0Z1bGxzY3JlZW5MYXllci5nZXQoKSwgX21lZGlhRWxlbWVudC0+Y2xpZW50UmVjdCgpLCB2
aWV3KTsKKyAgICBfaW50ZXJmYWNlLT5zZXR1cEZ1bGxzY3JlZW4oKl92aWRlb0Z1bGxzY3JlZW5M
YXllci5nZXQoKSwgX3ZpZGVvRWxlbWVudC0+Y2xpZW50UmVjdCgpLCB2aWV3KTsKIH0KIAogLSAo
dm9pZClleGl0RnVsbHNjcmVlbgogewotICAgIF9pbnRlcmZhY2UtPmV4aXRGdWxsc2NyZWVuKF9t
ZWRpYUVsZW1lbnQtPnNjcmVlblJlY3QoKSk7CisgICAgX2ludGVyZmFjZS0+ZXhpdEZ1bGxzY3Jl
ZW4oX3ZpZGVvRWxlbWVudC0+c2NyZWVuUmVjdCgpKTsKIH0KIAogLSAodm9pZClyZXF1ZXN0SGlk
ZUFuZEV4aXRGdWxsc2NyZWVuCkBAIC0xNjMsNyArMTYzLDcgQEAgLSAodm9pZClkaWRDbGVhbnVw
RnVsbHNjcmVlbgogICAgICAgICBfbW9kZWwtPnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKG5pbCk7
CiAgICAgICAgIF9pbnRlcmZhY2UtPnNldFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKG51bGxwdHIp
OwogICAgICAgICBfbW9kZWwtPnNldFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZShudWxscHRy
KTsKLSAgICAgICAgX21vZGVsLT5zZXRNZWRpYUVsZW1lbnQobnVsbHB0cik7CisgICAgICAgIF9t
b2RlbC0+c2V0VmlkZW9FbGVtZW50KG51bGxwdHIpOwogICAgICAgICBfaW50ZXJmYWNlLT5zZXRX
ZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcihudWxscHRyKTsKICAgICAgICAgX21vZGVs
ID0gbnVsbHB0cjsKICAgICAgICAgX2ludGVyZmFjZSA9IG51bGxwdHI7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZS5oCShyZXZpc2lvbiAxNzMxODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDkg
KzUwLDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRWaWRlb0RpbWVuc2lvbnMoYm9v
bCBoYXNWaWRlbywgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCBzZXRTZWVrYWJsZVJhbmdlcyhjb25zdCBUaW1lUmFuZ2VzJikgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBzZXRDYW5QbGF5RmFzdFJldmVyc2UoYm9vbCkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBzZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgb3B0
aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRM
ZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBvcHRpb25z
LCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldEV4dGVy
bmFsUGxheWJhY2soYm9vbCBlbmFibGVkLCBFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgU3Ry
aW5nIGxvY2FsaXplZERldmljZU5hbWUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QXVkaW9N
ZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPFdURjo6U3RyaW5nPiYgb3B0aW9ucywg
dWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRMZWdpYmxl
TWVkaWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZlY3RvcjxXVEY6OlN0cmluZz4mIG9wdGlvbnMs
IHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RXh0ZXJu
YWxQbGF5YmFjayhib29sIGVuYWJsZWQsIEV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBXVEY6
OlN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKSA9IDA7CiB9OwogCiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQuaAkocmV2aXNpb24gMTczMTgyKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDcgKzMwLDYgQEAKICNpZiBQTEFURk9STShJT1MpICYmIF9fSVBIT05FX09T
X1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDgwMDAwCiAKICNpbmNsdWRlIDxXZWJDb3JlL0V2ZW50
TGlzdGVuZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0hUTUxNZWRpYUVsZW1lbnQuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1BsYXRmb3JtTGF5ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1dlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTQ0LDcg
KzQzLDEyIEBAIE9CSkNfQ0xBU1MgVUlWaWV3OwogT0JKQ19DTEFTUyBDQUxheWVyOwogT0JKQ19D
TEFTUyBXZWJBVlZpZGVvTGF5ZXI7CiAKK25hbWVzcGFjZSBXVEYgeworY2xhc3MgU3RyaW5nOwor
fQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBJbnRSZWN0OwogY2xhc3MgV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWw7CiAgICAgCiBjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNl
cnZlciB7CkBAIC01NSw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkRXhp
dEZ1bGxzY3JlZW4oKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZENsZWFudXBGdWxsc2NyZWVu
KCkgPSAwOwogfTsKLSAgICAKKwogY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQKICAgICA6IHB1YmxpYyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UKICAgICAsIHB1Ymxp
YyBSZWZDb3VudGVkPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiB7CkBAIC04OCwx
MyArOTIsMTMgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXRW
aWRlb0RpbWVuc2lvbnMoYm9vbCBoYXNWaWRlbywgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkg
b3ZlcnJpZGU7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNldFNlZWthYmxlUmFu
Z2VzKGNvbnN0IFRpbWVSYW5nZXMmKSBvdmVycmlkZTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIHZvaWQgc2V0Q2FuUGxheUZhc3RSZXZlcnNlKGJvb2wpIG92ZXJyaWRlOwotICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyhjb25z
dCBWZWN0b3I8U3RyaW5nPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgb3ZlcnJp
ZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNldExlZ2libGVNZWRpYVNlbGVj
dGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVj
dGVkSW5kZXgpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXRF
eHRlcm5hbFBsYXliYWNrKGJvb2wgZW5hYmxlZCwgRXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUs
IFN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIHZvaWQgc2V0QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9y
PFdURjo6U3RyaW5nPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgb3ZlcnJpZGU7
CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNldExlZ2libGVNZWRpYVNlbGVjdGlv
bk9wdGlvbnMoY29uc3QgVmVjdG9yPFdURjo6U3RyaW5nPiYgb3B0aW9ucywgdWludDY0X3Qgc2Vs
ZWN0ZWRJbmRleCkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNl
dEV4dGVybmFsUGxheWJhY2soYm9vbCBlbmFibGVkLCBFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlw
ZSwgV1RGOjpTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSkgb3ZlcnJpZGU7CiAKLSAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc2V0dXBGdWxsc2NyZWVuKFBsYXRmb3JtTGF5ZXImLCBX
ZWJDb3JlOjpJbnRSZWN0IGluaXRpYWxSZWN0LCBVSVZpZXcgKik7CisgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB2b2lkIHNldHVwRnVsbHNjcmVlbihQbGF0Zm9ybUxheWVyJiwgSW50UmVjdCBp
bml0aWFsUmVjdCwgVUlWaWV3ICopOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBl
bnRlckZ1bGxzY3JlZW4oKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZXhpdEZ1
bGxzY3JlZW4oV2ViQ29yZTo6SW50UmVjdCBmaW5hbFJlY3QpOworICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgdm9pZCBleGl0RnVsbHNjcmVlbihJbnRSZWN0IGZpbmFsUmVjdCk7CiAgICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNsZWFudXBGdWxsc2NyZWVuKCk7CiAgICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB2b2lkIGludmFsaWRhdGUoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIHZvaWQgcmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdC5tbQkocmV2aXNpb24gMTczMTgyKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVUaHJl
YWRSdW4uaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50LmgJKHJl
dmlzaW9uIDE3MzE4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDkyICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0KLSNpZm5k
ZWYgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnRfaAotI2RlZmluZSBXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudF9oCi0KLSNpZiBQTEFURk9STShJT1MpCi0KLSNp
bmNsdWRlIDxXZWJDb3JlL0V2ZW50TGlzdGVuZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0
UmVjdC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1MYXllci5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgSFRNTE1lZGlhRWxlbWVudDsKLWNsYXNzIFRleHRU
cmFjazsKLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZTsKLQotY2xhc3MgV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQgOiBwdWJsaWMgV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWwsIHB1YmxpYyBFdmVudExpc3RlbmVyIHsKLXB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9S
VCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudCgpOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50KCk7Ci0gICAg
dm9pZCBzZXRXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UoV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlKiBpbnRlcmZhY2UpIHttX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSA9IGludGVyZmFj
ZTt9Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRNZWRpYUVsZW1lbnQoSFRNTE1lZGlhRWxl
bWVudCopOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIo
UGxhdGZvcm1MYXllciopOwotICAgIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBo
YW5kbGVFdmVudChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29yZTo6RXZl
bnQqKSBvdmVycmlkZTsKLSAgICB2b2lkIHVwZGF0ZUZvckV2ZW50TmFtZShjb25zdCBXVEY6OkF0
b21pY1N0cmluZyYpOwotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBFdmVudExpc3RlbmVyJiBy
aHMpIG92ZXJyaWRlCi0gICAgICAgIHtyZXR1cm4gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RXZlbnRM
aXN0ZW5lcio+KHRoaXMpID09ICZyaHM7fQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2
b2lkIHBsYXkoKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcGF1
c2UoKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgdG9nZ2xlUGxh
eVN0YXRlKCkgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGJlZ2lu
U2NydWJiaW5nKCkgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGVu
ZFNjcnViYmluZygpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBz
ZWVrVG9UaW1lKGRvdWJsZSB0aW1lKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIHZvaWQgZmFzdFNlZWsoZG91YmxlIHRpbWUpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgdm9pZCBiZWdpblNjYW5uaW5nRm9yd2FyZCgpIG92ZXJyaWRlOwotICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBiZWdpblNjYW5uaW5nQmFja3dhcmQoKSBvdmVycmlk
ZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZW5kU2Nhbm5pbmcoKSBvdmVycmlk
ZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcmVxdWVzdEV4aXRGdWxsc2NyZWVu
KCkgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNldFZpZGVvTGF5
ZXJGcmFtZShGbG9hdFJlY3QpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
dm9pZCBzZXRWaWRlb0xheWVyR3Jhdml0eShXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9H
cmF2aXR5KSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc2VsZWN0
QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBpbmRleCkgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB2b2lkIHNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBpbmRl
eCkgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIGNvbnN0IFZlY3RvcjxXVEY6OkF0
b21pY1N0cmluZz4mIG9ic2VydmVkRXZlbnROYW1lcygpOwotICAgIGNvbnN0IFdURjo6QXRvbWlj
U3RyaW5nJiBldmVudE5hbWVBbGwoKTsKLSAgICAKLSAgICBSZWZQdHI8SFRNTE1lZGlhRWxlbWVu
dD4gbV9tZWRpYUVsZW1lbnQ7Ci0gICAgUmV0YWluUHRyPFBsYXRmb3JtTGF5ZXI+IG1fdmlkZW9G
dWxsc2NyZWVuTGF5ZXI7Ci0gICAgYm9vbCBtX2lzTGlzdGVuaW5nOwotICAgIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZSogbV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U7Ci0gICAgRmxvYXRS
ZWN0IG1fdmlkZW9GcmFtZTsKLSAgICBWZWN0b3I8UmVmUHRyPFRleHRUcmFjaz4+IG1fbGVnaWJs
ZVRyYWNrc0Zvck1lbnU7Ci0KLSAgICB2b2lkIHVwZGF0ZUxlZ2libGVPcHRpb25zKCk7Ci19Owot
Ci19Ci0KLSNlbmRpZgotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lv
cy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVs
ZW1lbnQubW0JKHJldmlzaW9uIDE3MzE4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lv
cy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5tbQkod29ya2luZyBjb3B5KQpA
QCAtMSwzODUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotCi0jaWYgUExBVEZPUk0oSU9TKQotCi0jaW1wb3J0
ICJXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5oIgotCi0jaW1wb3J0ICJET01F
dmVudEludGVybmFsLmgiCi0jaW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1wb3J0ICJNZWRpYUNvbnRy
b2xzSG9zdC5oIgotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLmgiCi0jaW1w
b3J0IDxXZWJDb3JlL0RPTUV2ZW50TGlzdGVuZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRXZlbnQu
aD4KLSNpbXBvcnQgPFdlYkNvcmUvRXZlbnRMaXN0ZW5lci5oPgotI2ltcG9ydCA8V2ViQ29yZS9F
dmVudE5hbWVzLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0hUTUxFbGVtZW50Lmg+Ci0jaW1wb3J0IDxX
ZWJDb3JlL0hUTUxNZWRpYUVsZW1lbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvSFRNTFZpZGVvRWxl
bWVudC5oPgotI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1BhZ2VH
cm91cC5oPgotI2ltcG9ydCA8V2ViQ29yZS9Tb2Z0TGlua2luZy5oPgotI2ltcG9ydCA8V2ViQ29y
ZS9UZXh0VHJhY2tMaXN0Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1RpbWVSYW5nZXMuaD4KLSNpbXBv
cnQgPFdlYkNvcmUvV2ViQ29yZVRocmVhZFJ1bi5oPgotI2ltcG9ydCA8UXVhcnR6Q29yZS9Db3Jl
QW5pbWF0aW9uLmg+Ci0jaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbXBvcnQgPHd0
Zi9SZXRhaW5QdHIuaD4KLQotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFF
bGVtZW50KCkKLSAgICA6IEV2ZW50TGlzdGVuZXIoRXZlbnRMaXN0ZW5lcjo6Q1BQRXZlbnRMaXN0
ZW5lclR5cGUpCi0gICAgLCBtX2lzTGlzdGVuaW5ne2ZhbHNlfQotewotfQotCi1XZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6fldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFF
bGVtZW50KCkKLXsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVu
dDo6c2V0TWVkaWFFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKLXsKLSAg
ICBpZiAobV9tZWRpYUVsZW1lbnQgPT0gbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9tZWRpYUVsZW1lbnQgJiYgbV9pc0xpc3RlbmluZykgewotICAgICAgICBmb3Ig
KGF1dG8gZXZlbnROYW1lIDogb2JzZXJ2ZWRFdmVudE5hbWVzKCkpCi0gICAgICAgICAgICBtX21l
ZGlhRWxlbWVudC0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIHRoaXMsIGZhbHNlKTsK
LSAgICB9Ci0gICAgbV9pc0xpc3RlbmluZyA9IGZhbHNlOwotCi0gICAgbV9tZWRpYUVsZW1lbnQg
PSBtZWRpYUVsZW1lbnQ7Ci0KLSAgICBpZiAoIW1fbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1
cm47Ci0KLSAgICBmb3IgKGF1dG8gZXZlbnROYW1lIDogb2JzZXJ2ZWRFdmVudE5hbWVzKCkpCi0g
ICAgICAgIG1fbWVkaWFFbGVtZW50LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgdGhpcywg
ZmFsc2UpOwotICAgIG1faXNMaXN0ZW5pbmcgPSB0cnVlOwotCi0gICAgdXBkYXRlRm9yRXZlbnRO
YW1lKGV2ZW50TmFtZUFsbCgpKTsKLQotICAgIGlmIChpc0hUTUxWaWRlb0VsZW1lbnQobV9tZWRp
YUVsZW1lbnQuZ2V0KCkpKSB7Ci0gICAgICAgIEhUTUxWaWRlb0VsZW1lbnQgKnZpZGVvRWxlbWVu
dCA9IHRvSFRNTFZpZGVvRWxlbWVudChtX21lZGlhRWxlbWVudC5nZXQoKSk7Ci0gICAgICAgIG1f
dmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRWaWRlb0RpbWVuc2lvbnModHJ1ZSwgdmlkZW9F
bGVtZW50LT52aWRlb1dpZHRoKCksIHZpZGVvRWxlbWVudC0+dmlkZW9IZWlnaHQoKSk7Ci0gICAg
fSBlbHNlCi0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRWaWRlb0RpbWVu
c2lvbnMoZmFsc2UsIDAsIDApOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVk
aWFFbGVtZW50OjpoYW5kbGVFdmVudChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
V2ViQ29yZTo6RXZlbnQqIGV2ZW50KQotewotICAgIExPRyhNZWRpYSwgImhhbmRsZUV2ZW50ICVz
IiwgZXZlbnQtPnR5cGUoKS5jaGFyYWN0ZXJzOCgpKTsKLSAgICB1cGRhdGVGb3JFdmVudE5hbWUo
ZXZlbnQtPnR5cGUoKSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVs
ZW1lbnQ6OnVwZGF0ZUZvckV2ZW50TmFtZShjb25zdCBXVEY6OkF0b21pY1N0cmluZyYgZXZlbnRO
YW1lKQotewotICAgIGlmICghbV9tZWRpYUVsZW1lbnQgfHwgIW1fdmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYm9vbCBhbGwgPSBldmVudE5hbWUg
PT0gZXZlbnROYW1lQWxsKCk7Ci0KLSAgICBpZiAoYWxsCi0gICAgICAgIHx8IGV2ZW50TmFtZSA9
PSBldmVudE5hbWVzKCkuZHVyYXRpb25jaGFuZ2VFdmVudCkgewotICAgICAgICBtX3ZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZS0+c2V0RHVyYXRpb24obV9tZWRpYUVsZW1lbnQtPmR1cmF0aW9uKCkp
OwotICAgICAgICAvLyBUaGVzZSBpcyBubyBzdGFuZGFyZCBldmVudCBmb3IgbWluRmFzdFJldmVy
c2VSYXRlQ2hhbmdlOyBkdXJhdGlvbiBjaGFuZ2UgaXMgYSByZWFzb25hYmxlIHByb3h5IGZvciBp
dC4KLSAgICAgICAgLy8gSXQgaGFwcGVucyBldmVyeSB0aW1lIGEgbmV3IGl0ZW0gYmVjb21lcyBy
ZWFkeSB0byBwbGF5LgotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0Q2Fu
UGxheUZhc3RSZXZlcnNlKG1fbWVkaWFFbGVtZW50LT5taW5GYXN0UmV2ZXJzZVJhdGUoKSA8IDAu
MCk7Ci0gICAgfQotCi0gICAgaWYgKGFsbAotICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnRO
YW1lcygpLnBhdXNlRXZlbnQKLSAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5w
bGF5RXZlbnQKLSAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5yYXRlY2hhbmdl
RXZlbnQpCi0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRSYXRlKCFtX21l
ZGlhRWxlbWVudC0+cGF1c2VkKCksIG1fbWVkaWFFbGVtZW50LT5wbGF5YmFja1JhdGUoKSk7Ci0K
LSAgICBpZiAoYWxsCi0gICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkudGltZXVw
ZGF0ZUV2ZW50KSB7Ci0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRDdXJy
ZW50VGltZShtX21lZGlhRWxlbWVudC0+Y3VycmVudFRpbWUoKSwgW1tOU1Byb2Nlc3NJbmZvIHBy
b2Nlc3NJbmZvXSBzeXN0ZW1VcHRpbWVdKTsKLSAgICAgICAgLy8gRklYTUU6IDEzMDc4OCAtIGZp
bmQgYSBiZXR0ZXIgZXZlbnQgdG8gdXBkYXRlIHNlZWthYmxlIHJhbmdlcyBmcm9tLgotICAgICAg
ICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0U2Vla2FibGVSYW5nZXMoKm1fbWVkaWFF
bGVtZW50LT5zZWVrYWJsZSgpKTsKLSAgICB9Ci0KLSAgICBpZiAoYWxsCi0gICAgICAgIHx8IGV2
ZW50TmFtZSA9PSBldmVudE5hbWVzKCkuYWRkdHJhY2tFdmVudAotICAgICAgICB8fCBldmVudE5h
bWUgPT0gZXZlbnROYW1lcygpLnJlbW92ZXRyYWNrRXZlbnQpCi0gICAgICAgIHVwZGF0ZUxlZ2li
bGVPcHRpb25zKCk7Ci0KLSAgICBpZiAoYWxsCi0gICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVu
dE5hbWVzKCkud2Via2l0Y3VycmVudHBsYXliYWNrdGFyZ2V0aXN3aXJlbGVzc2NoYW5nZWRFdmVu
dCkgewotICAgICAgICBib29sIGVuYWJsZWQgPSBtX21lZGlhRWxlbWVudC0+bWVkaWFTZXNzaW9u
KCkuY3VycmVudFBsYXliYWNrVGFyZ2V0SXNXaXJlbGVzcygqbV9tZWRpYUVsZW1lbnQpOwotICAg
ICAgICBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRU
eXBlIHRhcmdldFR5cGUgPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U6OlRhcmdldFR5cGVO
b25lOwotICAgICAgICBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZTsKLQotICAgICAgICBpZiAo
bV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCkpIHsKLSAgICAgICAgICAgIERFUFJF
Q0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGFpcnBsYXksIChBU0NJSUxpdGVyYWwo
ImFpcnBsYXkiKSkpOwotICAgICAgICAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FM
KFN0cmluZywgdHZvdXQsIChBU0NJSUxpdGVyYWwoInR2b3V0IikpKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgU3RyaW5nIHR5cGUgPSBtX21lZGlhRWxlbWVudC0+bWVkaWFDb250cm9sc0hv
c3QoKS0+ZXh0ZXJuYWxEZXZpY2VUeXBlKCk7Ci0gICAgICAgICAgICBpZiAodHlwZSA9PSBhaXJw
bGF5KQotICAgICAgICAgICAgICAgIHRhcmdldFR5cGUgPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2U6OlRhcmdldFR5cGVBaXJQbGF5OwotICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSB0
dm91dCkKLSAgICAgICAgICAgICAgICB0YXJnZXRUeXBlID0gV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlOjpUYXJnZXRUeXBlVFZPdXQ7Ci0gICAgICAgICAgICBsb2NhbGl6ZWREZXZpY2VOYW1l
ID0gbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCktPmV4dGVybmFsRGV2aWNlRGlz
cGxheU5hbWUoKTsKLSAgICAgICAgfQotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZS0+c2V0RXh0ZXJuYWxQbGF5YmFjayhlbmFibGVkLCB0YXJnZXRUeXBlLCBsb2NhbGl6ZWREZXZp
Y2VOYW1lKTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVs
ZW1lbnQ6OnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKFBsYXRmb3JtTGF5ZXIqIHZpZGVvTGF5ZXIp
Ci17Ci0gICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIgPT0gdmlkZW9MYXllcikKLSAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIgPSB2aWRlb0xheWVy
OwotICAgIFttX3ZpZGVvRnVsbHNjcmVlbkxheWVyIHNldEZyYW1lOm1fdmlkZW9GcmFtZV07Ci0g
ICAgCi0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1l
bnQ+IHByb3RlY3QodGhpcyk7Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgIGlmIChtX21l
ZGlhRWxlbWVudCkKLSAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5zZXRWaWRlb0Z1bGxzY3Jl
ZW5MYXllcihtX3ZpZGVvRnVsbHNjcmVlbkxheWVyLmdldCgpKTsKLSAgICAgICAgcHJvdGVjdC5j
bGVhcigpOwotICAgIH0pOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFF
bGVtZW50OjpwbGF5KCkgewotICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsTWVkaWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOwotICAgIFdlYlRocmVhZFJ1biheewotICAg
ICAgICBpZiAobV9tZWRpYUVsZW1lbnQpCi0gICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+cGxh
eSgpOwotICAgICAgICBwcm90ZWN0LmNsZWFyKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnBhdXNlKCkKLXsKLSAgICBfX2Jsb2NrIFJl
ZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsK
LSAgICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAg
ICAgICAgbV9tZWRpYUVsZW1lbnQtPnBhdXNlKCk7Ci0gICAgICAgIHByb3RlY3QuY2xlYXIoKTsK
LSAgICB9KTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6
dG9nZ2xlUGxheVN0YXRlKCkKLXsKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKLSAgICBXZWJUaHJlYWRSdW4oXnsK
LSAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQt
PnRvZ2dsZVBsYXlTdGF0ZSgpOwotICAgICAgICBwcm90ZWN0LmNsZWFyKCk7Ci0gICAgfSk7Ci19
Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OmJlZ2luU2NydWJi
aW5nKCkKLXsKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlh
RWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKLSAgICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgaWYg
KG1fbWVkaWFFbGVtZW50KQotICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmJlZ2luU2NydWJi
aW5nKCk7Ci0gICAgICAgIHByb3RlY3QuY2xlYXIoKTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6ZW5kU2NydWJiaW5nKCkKLXsKLSAgICBf
X2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVj
dCh0aGlzKTsKLSAgICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50
KQotICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmVuZFNjcnViYmluZygpOwotICAgICAgICBw
cm90ZWN0LmNsZWFyKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxNZWRpYUVsZW1lbnQ6OnNlZWtUb1RpbWUoZG91YmxlIHRpbWUpCi17Ci0gICAgX19ibG9jayBS
ZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7
Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAg
ICAgICAgIG1fbWVkaWFFbGVtZW50LT5zZXRDdXJyZW50VGltZSh0aW1lKTsKLSAgICAgICAgcHJv
dGVjdC5jbGVhcigpOwotICAgIH0pOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
TWVkaWFFbGVtZW50OjpmYXN0U2Vlayhkb3VibGUgdGltZSkKLXsKLSAgICBfX2Jsb2NrIFJlZlB0
cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKLSAg
ICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICAg
ICAgbV9tZWRpYUVsZW1lbnQtPmZhc3RTZWVrKHRpbWUpOwotICAgICAgICBwcm90ZWN0LmNsZWFy
KCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1l
bnQ6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkKLXsKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKLSAgICBXZWJUaHJl
YWRSdW4oXnsKLSAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICAgICAgbV9tZWRp
YUVsZW1lbnQtPmJlZ2luU2Nhbm5pbmcoTWVkaWFDb250cm9sbGVySW50ZXJmYWNlOjpGb3J3YXJk
KTsKLSAgICAgICAgcHJvdGVjdC5jbGVhcigpOwotICAgIH0pOwotfQotCi12b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpiZWdpblNjYW5uaW5nQmFja3dhcmQoKQotewot
ICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50PiBw
cm90ZWN0KHRoaXMpOwotICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICBpZiAobV9tZWRpYUVs
ZW1lbnQpCi0gICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+YmVnaW5TY2FubmluZyhNZWRpYUNv
bnRyb2xsZXJJbnRlcmZhY2U6OkJhY2t3YXJkKTsKLSAgICAgICAgcHJvdGVjdC5jbGVhcigpOwot
ICAgIH0pOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50Ojpl
bmRTY2FubmluZygpCi17Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxNZWRpYUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0gICAg
ICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5lbmRT
Y2FubmluZygpOwotICAgICAgICBwcm90ZWN0LmNsZWFyKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnJlcXVlc3RFeGl0RnVsbHNjcmVl
bigpCi17Ci0gICAgaWYgKCFtX21lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
X19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+IHByb3Rl
Y3QodGhpcyk7Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgIGlmIChtX21lZGlhRWxlbWVu
dCAmJiBtX21lZGlhRWxlbWVudC0+aXNGdWxsc2NyZWVuKCkpCi0gICAgICAgICAgICBtX21lZGlh
RWxlbWVudC0+ZXhpdEZ1bGxzY3JlZW4oKTsKLSAgICAgICAgcHJvdGVjdC5jbGVhcigpOwotICAg
IH0pOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpzZXRW
aWRlb0xheWVyRnJhbWUoRmxvYXRSZWN0IHJlY3QpCi17Ci0gICAgbV92aWRlb0ZyYW1lID0gcmVj
dDsKLSAgICBbbV92aWRlb0Z1bGxzY3JlZW5MYXllciBzZXRGcmFtZTpDR1JlY3QocmVjdCldOwot
ICAgIG1fbWVkaWFFbGVtZW50LT5zZXRWaWRlb0Z1bGxzY3JlZW5GcmFtZShyZWN0KTsKLX0KLQot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6c2V0VmlkZW9MYXllckdy
YXZpdHkoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSBncmF2aXR5KQotewot
ICAgIE1lZGlhUGxheWVyOjpWaWRlb0dyYXZpdHkgdmlkZW9HcmF2aXR5ID0gTWVkaWFQbGF5ZXI6
OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdDsKLSAgICBpZiAoZ3Jhdml0eSA9PSBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplKQotICAgICAgICB2aWRlb0dyYXZpdHkg
PSBNZWRpYVBsYXllcjo6VmlkZW9HcmF2aXR5UmVzaXplOwotICAgIGVsc2UgaWYgKGdyYXZpdHkg
PT0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCkKLSAg
ICAgICAgdmlkZW9HcmF2aXR5ID0gTWVkaWFQbGF5ZXI6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVj
dDsKLSAgICBlbHNlIGlmIChncmF2aXR5ID09IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRl
b0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsKQotICAgICAgICB2aWRlb0dyYXZpdHkgPSBNZWRpYVBs
YXllcjo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbDsKLSAgICBlbHNlCi0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIAotICAgIG1fbWVkaWFFbGVtZW50LT5zZXRWaWRlb0Z1
bGxzY3JlZW5HcmF2aXR5KHZpZGVvR3Jhdml0eSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QpCi17
Ci0gICAgLy8gRklYTUU6IDEzMTIzNiBJbXBsZW1lbnQgYXVkaW8gdHJhY2sgc2VsZWN0aW9uLgot
fQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpzZWxlY3RMZWdp
YmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpCi17Ci0gICAgVGV4dFRyYWNrKiB0ZXh0VHJh
Y2sgPSBudWxscHRyOwotICAgIAotICAgIGlmIChpbmRleCA8IG1fbGVnaWJsZVRyYWNrc0Zvck1l
bnUuc2l6ZSgpKQotICAgICAgICB0ZXh0VHJhY2sgPSBtX2xlZ2libGVUcmFja3NGb3JNZW51W3N0
YXRpY19jYXN0PHNpemVfdD4oaW5kZXgpXS5nZXQoKTsKLSAgICAKLSAgICBtX21lZGlhRWxlbWVu
dC0+c2V0U2VsZWN0ZWRUZXh0VHJhY2sodGV4dFRyYWNrKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6dXBkYXRlTGVnaWJsZU9wdGlvbnMoKQotewotICAg
IFRleHRUcmFja0xpc3QqIHRyYWNrTGlzdCA9IG1fbWVkaWFFbGVtZW50LT50ZXh0VHJhY2tzKCk7
Ci0gICAgaWYgKCF0cmFja0xpc3QgfHwgIW1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2Uo
KSB8fCAhbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICAKLSAgICBXVEY6OkF0b21pY1N0cmluZyBkaXNwbGF5TW9kZSA9IG1fbWVkaWFFbGVt
ZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgpLT5jYXB0aW9uRGlzcGxheU1vZGUoKTsKLSAgICBUZXh0
VHJhY2sqIG9mZkl0ZW0gPSBtX21lZGlhRWxlbWVudC0+bWVkaWFDb250cm9sc0hvc3QoKS0+Y2Fw
dGlvbk1lbnVPZmZJdGVtKCk7Ci0gICAgVGV4dFRyYWNrKiBhdXRvbWF0aWNJdGVtID0gbV9tZWRp
YUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCktPmNhcHRpb25NZW51QXV0b21hdGljSXRlbSgp
OwotICAgIENhcHRpb25Vc2VyUHJlZmVyZW5jZXMmIGNhcHRpb25QcmVmZXJlbmNlcyA9ICptX21l
ZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCktPmdyb3VwKCkuY2FwdGlvblByZWZlcmVuY2Vz
KCk7Ci0gICAgbV9sZWdpYmxlVHJhY2tzRm9yTWVudSA9IGNhcHRpb25QcmVmZXJlbmNlcy5zb3J0
ZWRUcmFja0xpc3RGb3JNZW51KHRyYWNrTGlzdCk7Ci0gICAgVmVjdG9yPFN0cmluZz4gdHJhY2tE
aXNwbGF5TmFtZXM7Ci0gICAgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCA9IDA7Ci0gICAgdWludDY0
X3Qgb2ZmSW5kZXggPSAwOwotICAgIGJvb2wgdHJhY2tNZW51SXRlbVNlbGVjdGVkID0gZmFsc2U7
Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG1fbGVnaWJsZVRyYWNr
c0Zvck1lbnUuc2l6ZSgpOyBpbmRleCsrKSB7Ci0gICAgICAgIGF1dG8mIHRyYWNrID0gbV9sZWdp
YmxlVHJhY2tzRm9yTWVudVtpbmRleF07Ci0gICAgICAgIHRyYWNrRGlzcGxheU5hbWVzLmFwcGVu
ZChjYXB0aW9uUHJlZmVyZW5jZXMuZGlzcGxheU5hbWVGb3JUcmFjayh0cmFjay5nZXQoKSkpOwot
ICAgICAgICAKLSAgICAgICAgaWYgKHRyYWNrID09IG9mZkl0ZW0pCi0gICAgICAgICAgICBvZmZJ
bmRleCA9IGluZGV4OwotICAgICAgICAKLSAgICAgICAgaWYgKHRyYWNrID09IGF1dG9tYXRpY0l0
ZW0gJiYgZGlzcGxheU1vZGUgPT0gTWVkaWFDb250cm9sc0hvc3Q6OmF1dG9tYXRpY0tleXdvcmQo
KSkgewotICAgICAgICAgICAgc2VsZWN0ZWRJbmRleCA9IGluZGV4OwotICAgICAgICAgICAgdHJh
Y2tNZW51SXRlbVNlbGVjdGVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
aWYgKGRpc3BsYXlNb2RlICE9IE1lZGlhQ29udHJvbHNIb3N0OjphdXRvbWF0aWNLZXl3b3JkKCkg
JiYgdHJhY2stPm1vZGUoKSA9PSBUZXh0VHJhY2s6OnNob3dpbmdLZXl3b3JkKCkpIHsKLSAgICAg
ICAgICAgIHNlbGVjdGVkSW5kZXggPSBpbmRleDsKLSAgICAgICAgICAgIHRyYWNrTWVudUl0ZW1T
ZWxlY3RlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYgKG9mZkluZGV4
ICYmICF0cmFja01lbnVJdGVtU2VsZWN0ZWQgJiYgZGlzcGxheU1vZGUgPT0gTWVkaWFDb250cm9s
c0hvc3Q6OmZvcmNlZE9ubHlLZXl3b3JkKCkpIHsKLSAgICAgICAgc2VsZWN0ZWRJbmRleCA9IG9m
ZkluZGV4OwotICAgICAgICB0cmFja01lbnVJdGVtU2VsZWN0ZWQgPSB0cnVlOwotICAgIH0KLSAg
ICAKLSAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0TGVnaWJsZU1lZGlhU2VsZWN0
aW9uT3B0aW9ucyh0cmFja0Rpc3BsYXlOYW1lcywgc2VsZWN0ZWRJbmRleCk7Ci19Ci0KLWNvbnN0
IFZlY3RvcjxBdG9taWNTdHJpbmc+JiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVu
dDo6b2JzZXJ2ZWRFdmVudE5hbWVzKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VmVj
dG9yPEF0b21pY1N0cmluZz4+IHNFdmVudE5hbWVzOwotCi0gICAgaWYgKCFzRXZlbnROYW1lcy5n
ZXQoKS5zaXplKCkpIHsKLSAgICAgICAgc0V2ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFt
ZXMoKS5kdXJhdGlvbmNoYW5nZUV2ZW50KTsKLSAgICAgICAgc0V2ZW50TmFtZXMuZ2V0KCkuYXBw
ZW5kKGV2ZW50TmFtZXMoKS5wYXVzZUV2ZW50KTsKLSAgICAgICAgc0V2ZW50TmFtZXMuZ2V0KCku
YXBwZW5kKGV2ZW50TmFtZXMoKS5wbGF5RXZlbnQpOwotICAgICAgICBzRXZlbnROYW1lcy5nZXQo
KS5hcHBlbmQoZXZlbnROYW1lcygpLnJhdGVjaGFuZ2VFdmVudCk7Ci0gICAgICAgIHNFdmVudE5h
bWVzLmdldCgpLmFwcGVuZChldmVudE5hbWVzKCkudGltZXVwZGF0ZUV2ZW50KTsKLSAgICAgICAg
c0V2ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFtZXMoKS5hZGR0cmFja0V2ZW50KTsKLSAg
ICAgICAgc0V2ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFtZXMoKS5yZW1vdmV0cmFja0V2
ZW50KTsKLSAgICAgICAgc0V2ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFtZXMoKS53ZWJr
aXRjdXJyZW50cGxheWJhY2t0YXJnZXRpc3dpcmVsZXNzY2hhbmdlZEV2ZW50KTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHNFdmVudE5hbWVzLmdldCgpOwotfQotCi1jb25zdCBBdG9taWNTdHJpbmcmIFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpldmVudE5hbWVBbGwoKQotewotICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHNFdmVudE5hbWVBbGwgPSAiYWxs
RXZlbnRzIjsKLSAgICByZXR1cm4gc0V2ZW50TmFtZUFsbDsKLX0KLQotI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaAkocmV2aXNpb24gMTczMTYxKQkoZnJvbSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVs
ZW1lbnQuaDoxNzMxNjEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDky
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZu
ZGVmIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50X2gKKyNkZWZpbmUgV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnRfaAorCisjaWYgUExBVEZPUk0oSU9TKQorCisj
aW5jbHVkZSA8V2ViQ29yZS9FdmVudExpc3RlbmVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GbG9h
dFJlY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtTGF5ZXIuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEhUTUxNZWRpYUVsZW1lbnQ7CitjbGFzcyBUZXh0
VHJhY2s7CitjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U7CisKK2NsYXNzIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50IDogcHVibGljIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsLCBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7CitwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBP
UlQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQoKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudCgpOworICAg
IHZvaWQgc2V0V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZSogaW50ZXJmYWNlKSB7bV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UgPSBpbnRlcmZh
Y2U7fQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TWVkaWFFbGVtZW50KEhUTUxNZWRpYUVs
ZW1lbnQqKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFZpZGVvRnVsbHNjcmVlbkxheWVy
KFBsYXRmb3JtTGF5ZXIqKTsKKyAgICAKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQg
aGFuZGxlRXZlbnQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkNvcmU6OkV2
ZW50Kikgb3ZlcnJpZGU7CisgICAgdm9pZCB1cGRhdGVGb3JFdmVudE5hbWUoY29uc3QgV1RGOjpB
dG9taWNTdHJpbmcmKTsKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRXZlbnRMaXN0ZW5lciYg
cmhzKSBvdmVycmlkZQorICAgICAgICB7cmV0dXJuIHN0YXRpY19jYXN0PFdlYkNvcmU6OkV2ZW50
TGlzdGVuZXIqPih0aGlzKSA9PSAmcmhzO30KKworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
dm9pZCBwbGF5KCkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHBh
dXNlKCkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHRvZ2dsZVBs
YXlTdGF0ZSgpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBiZWdp
blNjcnViYmluZygpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBl
bmRTY3J1YmJpbmcoKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQg
c2Vla1RvVGltZShkb3VibGUgdGltZSkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCB2b2lkIGZhc3RTZWVrKGRvdWJsZSB0aW1lKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIHZvaWQgYmVnaW5TY2FubmluZ0ZvcndhcmQoKSBvdmVycmlkZTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgYmVnaW5TY2FubmluZ0JhY2t3YXJkKCkgb3ZlcnJp
ZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGVuZFNjYW5uaW5nKCkgb3ZlcnJp
ZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHJlcXVlc3RFeGl0RnVsbHNjcmVl
bigpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXRWaWRlb0xh
eWVyRnJhbWUoRmxvYXRSZWN0KSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IHZvaWQgc2V0VmlkZW9MYXllckdyYXZpdHkoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVv
R3Jhdml0eSkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNlbGVj
dEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpIG92ZXJyaWRlOworICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgdm9pZCBzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5k
ZXgpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8V1RGOjpB
dG9taWNTdHJpbmc+JiBvYnNlcnZlZEV2ZW50TmFtZXMoKTsKKyAgICBjb25zdCBXVEY6OkF0b21p
Y1N0cmluZyYgZXZlbnROYW1lQWxsKCk7CisgICAgCisgICAgUmVmUHRyPEhUTUxNZWRpYUVsZW1l
bnQ+IG1fbWVkaWFFbGVtZW50OworICAgIFJldGFpblB0cjxQbGF0Zm9ybUxheWVyPiBtX3ZpZGVv
RnVsbHNjcmVlbkxheWVyOworICAgIGJvb2wgbV9pc0xpc3RlbmluZzsKKyAgICBXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2UqIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOworICAgIEZsb2F0
UmVjdCBtX3ZpZGVvRnJhbWU7CisgICAgVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2s+PiBtX2xlZ2li
bGVUcmFja3NGb3JNZW51OworCisgICAgdm9pZCB1cGRhdGVMZWdpYmxlT3B0aW9ucygpOworfTsK
KworfQorCisjZW5kaWYKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0
LDggKzI0LDggQEAKICAqLwogCiAKLSNpZm5kZWYgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRp
YUVsZW1lbnRfaAotI2RlZmluZSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudF9o
CisjaWZuZGVmIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50X2gKKyNkZWZpbmUg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnRfaAogCiAjaWYgUExBVEZPUk0oSU9T
KQogCkBAIC0zOCwxNiArMzgsMTYgQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKLWNsYXNzIEhUTUxNZWRpYUVsZW1lbnQ7CitjbGFzcyBIVE1MVmlkZW9F
bGVtZW50OwogY2xhc3MgVGV4dFRyYWNrOwogY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlOwogCi1jbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudCA6IHB1Ymxp
YyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCwgcHVibGljIEV2ZW50TGlzdGVuZXIgeworY2xhc3Mg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQgOiBwdWJsaWMgV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWwsIHB1YmxpYyBFdmVudExpc3RlbmVyIHsKIHB1YmxpYzoKLSAgICBXRUJDT1JF
X0VYUE9SVCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudCgpOwotICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50KCk7
CisgICAgV0VCQ09SRV9FWFBPUlQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQo
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZp
ZGVvRWxlbWVudCgpOwogICAgIHZvaWQgc2V0V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSogaW50ZXJmYWNlKSB7bV92aWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2UgPSBpbnRlcmZhY2U7fQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TWVkaWFF
bGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFZp
ZGVvRWxlbWVudChIVE1MVmlkZW9FbGVtZW50Kik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBz
ZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihQbGF0Zm9ybUxheWVyKik7CiAgICAgCiAgICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBXZWJDb3JlOjpFdmVudCopIG92ZXJyaWRlOwpAQCAtNzUsNyArNzUsNyBAQCBw
cml2YXRlOgogICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8V1RGOjpBdG9taWNTdHJpbmc+JiBvYnNl
cnZlZEV2ZW50TmFtZXMoKTsKICAgICBjb25zdCBXVEY6OkF0b21pY1N0cmluZyYgZXZlbnROYW1l
QWxsKCk7CiAgICAgCi0gICAgUmVmUHRyPEhUTUxNZWRpYUVsZW1lbnQ+IG1fbWVkaWFFbGVtZW50
OworICAgIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50PiBtX3ZpZGVvRWxlbWVudDsKICAgICBSZXRh
aW5QdHI8UGxhdGZvcm1MYXllcj4gbV92aWRlb0Z1bGxzY3JlZW5MYXllcjsKICAgICBib29sIG1f
aXNMaXN0ZW5pbmc7CiAgICAgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKiBtX3ZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQu
bW0JKHJldmlzaW9uIDE3MzE2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50Lm1tOjE3MzE2MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5t
bQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorCisjaWYgUExBVEZP
Uk0oSU9TKQorCisjaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5o
IgorCisjaW1wb3J0ICJET01FdmVudEludGVybmFsLmgiCisjaW1wb3J0ICJMb2dnaW5nLmgiCisj
aW1wb3J0ICJNZWRpYUNvbnRyb2xzSG9zdC5oIgorI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlLmgiCisjaW1wb3J0IDxXZWJDb3JlL0RPTUV2ZW50TGlzdGVuZXIuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvRXZlbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRXZlbnRMaXN0ZW5lci5oPgor
I2ltcG9ydCA8V2ViQ29yZS9FdmVudE5hbWVzLmg+CisjaW1wb3J0IDxXZWJDb3JlL0hUTUxFbGVt
ZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0hUTUxNZWRpYUVsZW1lbnQuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvSFRNTFZpZGVvRWxlbWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+CisjaW1w
b3J0IDxXZWJDb3JlL1BhZ2VHcm91cC5oPgorI2ltcG9ydCA8V2ViQ29yZS9Tb2Z0TGlua2luZy5o
PgorI2ltcG9ydCA8V2ViQ29yZS9UZXh0VHJhY2tMaXN0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1Rp
bWVSYW5nZXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZVRocmVhZFJ1bi5oPgorI2ltcG9y
dCA8UXVhcnR6Q29yZS9Db3JlQW5pbWF0aW9uLmg+CisjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95
ZWQuaD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKworCit1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKKworV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OldlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50KCkKKyAgICA6IEV2ZW50TGlzdGVuZXIoRXZlbnRMaXN0
ZW5lcjo6Q1BQRXZlbnRMaXN0ZW5lclR5cGUpCisgICAgLCBtX2lzTGlzdGVuaW5ne2ZhbHNlfQor
eworfQorCitXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6fldlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50KCkKK3sKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbE1lZGlhRWxlbWVudDo6c2V0TWVkaWFFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1l
ZGlhRWxlbWVudCkKK3sKKyAgICBpZiAobV9tZWRpYUVsZW1lbnQgPT0gbWVkaWFFbGVtZW50KQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9tZWRpYUVsZW1lbnQgJiYgbV9pc0xpc3Rlbmlu
ZykgeworICAgICAgICBmb3IgKGF1dG8gZXZlbnROYW1lIDogb2JzZXJ2ZWRFdmVudE5hbWVzKCkp
CisgICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5h
bWUsIHRoaXMsIGZhbHNlKTsKKyAgICB9CisgICAgbV9pc0xpc3RlbmluZyA9IGZhbHNlOworCisg
ICAgbV9tZWRpYUVsZW1lbnQgPSBtZWRpYUVsZW1lbnQ7CisKKyAgICBpZiAoIW1fbWVkaWFFbGVt
ZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGF1dG8gZXZlbnROYW1lIDogb2JzZXJ2
ZWRFdmVudE5hbWVzKCkpCisgICAgICAgIG1fbWVkaWFFbGVtZW50LT5hZGRFdmVudExpc3RlbmVy
KGV2ZW50TmFtZSwgdGhpcywgZmFsc2UpOworICAgIG1faXNMaXN0ZW5pbmcgPSB0cnVlOworCisg
ICAgdXBkYXRlRm9yRXZlbnROYW1lKGV2ZW50TmFtZUFsbCgpKTsKKworICAgIGlmIChpc0hUTUxW
aWRlb0VsZW1lbnQobV9tZWRpYUVsZW1lbnQuZ2V0KCkpKSB7CisgICAgICAgIEhUTUxWaWRlb0Vs
ZW1lbnQgKnZpZGVvRWxlbWVudCA9IHRvSFRNTFZpZGVvRWxlbWVudChtX21lZGlhRWxlbWVudC5n
ZXQoKSk7CisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRWaWRlb0RpbWVu
c2lvbnModHJ1ZSwgdmlkZW9FbGVtZW50LT52aWRlb1dpZHRoKCksIHZpZGVvRWxlbWVudC0+dmlk
ZW9IZWlnaHQoKSk7CisgICAgfSBlbHNlCisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlLT5zZXRWaWRlb0RpbWVuc2lvbnMoZmFsc2UsIDAsIDApOworfQorCit2b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpoYW5kbGVFdmVudChXZWJDb3JlOjpTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgV2ViQ29yZTo6RXZlbnQqIGV2ZW50KQoreworICAgIExPRyhNZWRp
YSwgImhhbmRsZUV2ZW50ICVzIiwgZXZlbnQtPnR5cGUoKS5jaGFyYWN0ZXJzOCgpKTsKKyAgICB1
cGRhdGVGb3JFdmVudE5hbWUoZXZlbnQtPnR5cGUoKSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnVwZGF0ZUZvckV2ZW50TmFtZShjb25zdCBXVEY6OkF0
b21pY1N0cmluZyYgZXZlbnROYW1lKQoreworICAgIGlmICghbV9tZWRpYUVsZW1lbnQgfHwgIW1f
dmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYm9v
bCBhbGwgPSBldmVudE5hbWUgPT0gZXZlbnROYW1lQWxsKCk7CisKKyAgICBpZiAoYWxsCisgICAg
ICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkuZHVyYXRpb25jaGFuZ2VFdmVudCkgewor
ICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0RHVyYXRpb24obV9tZWRpYUVs
ZW1lbnQtPmR1cmF0aW9uKCkpOworICAgICAgICAvLyBUaGVzZSBpcyBubyBzdGFuZGFyZCBldmVu
dCBmb3IgbWluRmFzdFJldmVyc2VSYXRlQ2hhbmdlOyBkdXJhdGlvbiBjaGFuZ2UgaXMgYSByZWFz
b25hYmxlIHByb3h5IGZvciBpdC4KKyAgICAgICAgLy8gSXQgaGFwcGVucyBldmVyeSB0aW1lIGEg
bmV3IGl0ZW0gYmVjb21lcyByZWFkeSB0byBwbGF5LgorICAgICAgICBtX3ZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZS0+c2V0Q2FuUGxheUZhc3RSZXZlcnNlKG1fbWVkaWFFbGVtZW50LT5taW5GYXN0
UmV2ZXJzZVJhdGUoKSA8IDAuMCk7CisgICAgfQorCisgICAgaWYgKGFsbAorICAgICAgICB8fCBl
dmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnBhdXNlRXZlbnQKKyAgICAgICAgfHwgZXZlbnROYW1l
ID09IGV2ZW50TmFtZXMoKS5wbGF5RXZlbnQKKyAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50
TmFtZXMoKS5yYXRlY2hhbmdlRXZlbnQpCisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlLT5zZXRSYXRlKCFtX21lZGlhRWxlbWVudC0+cGF1c2VkKCksIG1fbWVkaWFFbGVtZW50LT5w
bGF5YmFja1JhdGUoKSk7CisKKyAgICBpZiAoYWxsCisgICAgICAgIHx8IGV2ZW50TmFtZSA9PSBl
dmVudE5hbWVzKCkudGltZXVwZGF0ZUV2ZW50KSB7CisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlLT5zZXRDdXJyZW50VGltZShtX21lZGlhRWxlbWVudC0+Y3VycmVudFRpbWUoKSwg
W1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBzeXN0ZW1VcHRpbWVdKTsKKyAgICAgICAgLy8g
RklYTUU6IDEzMDc4OCAtIGZpbmQgYSBiZXR0ZXIgZXZlbnQgdG8gdXBkYXRlIHNlZWthYmxlIHJh
bmdlcyBmcm9tLgorICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0U2Vla2Fi
bGVSYW5nZXMoKm1fbWVkaWFFbGVtZW50LT5zZWVrYWJsZSgpKTsKKyAgICB9CisKKyAgICBpZiAo
YWxsCisgICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkuYWRkdHJhY2tFdmVudAor
ICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnJlbW92ZXRyYWNrRXZlbnQpCisg
ICAgICAgIHVwZGF0ZUxlZ2libGVPcHRpb25zKCk7CisKKyAgICBpZiAoYWxsCisgICAgICAgIHx8
IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkud2Via2l0Y3VycmVudHBsYXliYWNrdGFyZ2V0aXN3
aXJlbGVzc2NoYW5nZWRFdmVudCkgeworICAgICAgICBib29sIGVuYWJsZWQgPSBtX21lZGlhRWxl
bWVudC0+bWVkaWFTZXNzaW9uKCkuY3VycmVudFBsYXliYWNrVGFyZ2V0SXNXaXJlbGVzcygqbV9t
ZWRpYUVsZW1lbnQpOworICAgICAgICBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U6OkV4dGVy
bmFsUGxheWJhY2tUYXJnZXRUeXBlIHRhcmdldFR5cGUgPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2U6OlRhcmdldFR5cGVOb25lOworICAgICAgICBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFt
ZTsKKworICAgICAgICBpZiAobV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCkpIHsK
KyAgICAgICAgICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGFpcnBs
YXksIChBU0NJSUxpdGVyYWwoImFpcnBsYXkiKSkpOworICAgICAgICAgICAgREVQUkVDQVRFRF9E
RUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgdHZvdXQsIChBU0NJSUxpdGVyYWwoInR2b3V0Iikp
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3RyaW5nIHR5cGUgPSBtX21lZGlhRWxlbWVu
dC0+bWVkaWFDb250cm9sc0hvc3QoKS0+ZXh0ZXJuYWxEZXZpY2VUeXBlKCk7CisgICAgICAgICAg
ICBpZiAodHlwZSA9PSBhaXJwbGF5KQorICAgICAgICAgICAgICAgIHRhcmdldFR5cGUgPSBXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U6OlRhcmdldFR5cGVBaXJQbGF5OworICAgICAgICAgICAg
ZWxzZSBpZiAodHlwZSA9PSB0dm91dCkKKyAgICAgICAgICAgICAgICB0YXJnZXRUeXBlID0gV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOjpUYXJnZXRUeXBlVFZPdXQ7CisgICAgICAgICAgICBs
b2NhbGl6ZWREZXZpY2VOYW1lID0gbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCkt
PmV4dGVybmFsRGV2aWNlRGlzcGxheU5hbWUoKTsKKyAgICAgICAgfQorICAgICAgICBtX3ZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZS0+c2V0RXh0ZXJuYWxQbGF5YmFjayhlbmFibGVkLCB0YXJnZXRU
eXBlLCBsb2NhbGl6ZWREZXZpY2VOYW1lKTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKFBsYXRmb3Jt
TGF5ZXIqIHZpZGVvTGF5ZXIpCit7CisgICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIgPT0g
dmlkZW9MYXllcikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fdmlkZW9GdWxsc2NyZWVu
TGF5ZXIgPSB2aWRlb0xheWVyOworICAgIFttX3ZpZGVvRnVsbHNjcmVlbkxheWVyIHNldEZyYW1l
Om1fdmlkZW9GcmFtZV07CisgICAgCisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxNZWRpYUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7CisgICAgV2ViVGhyZWFkUnVuKF57
CisgICAgICAgIGlmIChtX21lZGlhRWxlbWVudCkKKyAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50
LT5zZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihtX3ZpZGVvRnVsbHNjcmVlbkxheWVyLmdldCgpKTsK
KyAgICAgICAgcHJvdGVjdC5jbGVhcigpOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpwbGF5KCkgeworICAgIF9fYmxvY2sgUmVmUHRyPFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOworICAgIFdl
YlRocmVhZFJ1biheeworICAgICAgICBpZiAobV9tZWRpYUVsZW1lbnQpCisgICAgICAgICAgICBt
X21lZGlhRWxlbWVudC0+cGxheSgpOworICAgICAgICBwcm90ZWN0LmNsZWFyKCk7CisgICAgfSk7
Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnBhdXNlKCkK
K3sKKyAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVu
dD4gcHJvdGVjdCh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgaWYgKG1fbWVk
aWFFbGVtZW50KQorICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnBhdXNlKCk7CisgICAgICAg
IHByb3RlY3QuY2xlYXIoKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbE1lZGlhRWxlbWVudDo6dG9nZ2xlUGxheVN0YXRlKCkKK3sKKyAgICBfX2Jsb2NrIFJlZlB0
cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKKyAg
ICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQorICAgICAgICAg
ICAgbV9tZWRpYUVsZW1lbnQtPnRvZ2dsZVBsYXlTdGF0ZSgpOworICAgICAgICBwcm90ZWN0LmNs
ZWFyKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVs
ZW1lbnQ6OmJlZ2luU2NydWJiaW5nKCkKK3sKKyAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKKyAgICBXZWJUaHJlYWRS
dW4oXnsKKyAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQorICAgICAgICAgICAgbV9tZWRpYUVs
ZW1lbnQtPmJlZ2luU2NydWJiaW5nKCk7CisgICAgICAgIHByb3RlY3QuY2xlYXIoKTsKKyAgICB9
KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6ZW5kU2Ny
dWJiaW5nKCkKK3sKKyAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1l
ZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAg
aWYgKG1fbWVkaWFFbGVtZW50KQorICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmVuZFNjcnVi
YmluZygpOworICAgICAgICBwcm90ZWN0LmNsZWFyKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnNlZWtUb1RpbWUoZG91YmxlIHRpbWUp
Cit7CisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1l
bnQ+IHByb3RlY3QodGhpcyk7CisgICAgV2ViVGhyZWFkUnVuKF57CisgICAgICAgIGlmIChtX21l
ZGlhRWxlbWVudCkKKyAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5zZXRDdXJyZW50VGltZSh0
aW1lKTsKKyAgICAgICAgcHJvdGVjdC5jbGVhcigpOworICAgIH0pOworfQorCit2b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpmYXN0U2Vlayhkb3VibGUgdGltZSkKK3sK
KyAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4g
cHJvdGVjdCh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgaWYgKG1fbWVkaWFF
bGVtZW50KQorICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmZhc3RTZWVrKHRpbWUpOworICAg
ICAgICBwcm90ZWN0LmNsZWFyKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkKK3sKKyAgICBfX2Js
b2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0
aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQor
ICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmJlZ2luU2Nhbm5pbmcoTWVkaWFDb250cm9sbGVy
SW50ZXJmYWNlOjpGb3J3YXJkKTsKKyAgICAgICAgcHJvdGVjdC5jbGVhcigpOworICAgIH0pOwor
fQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpiZWdpblNjYW5u
aW5nQmFja3dhcmQoKQoreworICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsTWVkaWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOworICAgIFdlYlRocmVhZFJ1biheeworICAg
ICAgICBpZiAobV9tZWRpYUVsZW1lbnQpCisgICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+YmVn
aW5TY2FubmluZyhNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2U6OkJhY2t3YXJkKTsKKyAgICAgICAg
cHJvdGVjdC5jbGVhcigpOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsTWVkaWFFbGVtZW50OjplbmRTY2FubmluZygpCit7CisgICAgX19ibG9jayBSZWZQdHI8V2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7CisgICAgV2Vi
VGhyZWFkUnVuKF57CisgICAgICAgIGlmIChtX21lZGlhRWxlbWVudCkKKyAgICAgICAgICAgIG1f
bWVkaWFFbGVtZW50LT5lbmRTY2FubmluZygpOworICAgICAgICBwcm90ZWN0LmNsZWFyKCk7Cisg
ICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnJl
cXVlc3RFeGl0RnVsbHNjcmVlbigpCit7CisgICAgaWYgKCFtX21lZGlhRWxlbWVudCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxN
ZWRpYUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7CisgICAgV2ViVGhyZWFkUnVuKF57CisgICAgICAg
IGlmIChtX21lZGlhRWxlbWVudCAmJiBtX21lZGlhRWxlbWVudC0+aXNGdWxsc2NyZWVuKCkpCisg
ICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+ZXhpdEZ1bGxzY3JlZW4oKTsKKyAgICAgICAgcHJv
dGVjdC5jbGVhcigpOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
TWVkaWFFbGVtZW50OjpzZXRWaWRlb0xheWVyRnJhbWUoRmxvYXRSZWN0IHJlY3QpCit7CisgICAg
bV92aWRlb0ZyYW1lID0gcmVjdDsKKyAgICBbbV92aWRlb0Z1bGxzY3JlZW5MYXllciBzZXRGcmFt
ZTpDR1JlY3QocmVjdCldOworICAgIG1fbWVkaWFFbGVtZW50LT5zZXRWaWRlb0Z1bGxzY3JlZW5G
cmFtZShyZWN0KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVu
dDo6c2V0VmlkZW9MYXllckdyYXZpdHkoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jh
dml0eSBncmF2aXR5KQoreworICAgIE1lZGlhUGxheWVyOjpWaWRlb0dyYXZpdHkgdmlkZW9HcmF2
aXR5ID0gTWVkaWFQbGF5ZXI6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdDsKKyAgICBpZiAoZ3Jh
dml0eSA9PSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplKQorICAg
ICAgICB2aWRlb0dyYXZpdHkgPSBNZWRpYVBsYXllcjo6VmlkZW9HcmF2aXR5UmVzaXplOworICAg
IGVsc2UgaWYgKGdyYXZpdHkgPT0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0
eVJlc2l6ZUFzcGVjdCkKKyAgICAgICAgdmlkZW9HcmF2aXR5ID0gTWVkaWFQbGF5ZXI6OlZpZGVv
R3Jhdml0eVJlc2l6ZUFzcGVjdDsKKyAgICBlbHNlIGlmIChncmF2aXR5ID09IFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsKQorICAgICAgICB2aWRl
b0dyYXZpdHkgPSBNZWRpYVBsYXllcjo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbDsKKyAg
ICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIAorICAgIG1fbWVkaWFF
bGVtZW50LT5zZXRWaWRlb0Z1bGxzY3JlZW5HcmF2aXR5KHZpZGVvR3Jhdml0eSk7Cit9CisKK3Zv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnNlbGVjdEF1ZGlvTWVkaWFP
cHRpb24odWludDY0X3QpCit7CisgICAgLy8gRklYTUU6IDEzMTIzNiBJbXBsZW1lbnQgYXVkaW8g
dHJhY2sgc2VsZWN0aW9uLgorfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFF
bGVtZW50OjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpCit7CisgICAg
VGV4dFRyYWNrKiB0ZXh0VHJhY2sgPSBudWxscHRyOworICAgIAorICAgIGlmIChpbmRleCA8IG1f
bGVnaWJsZVRyYWNrc0Zvck1lbnUuc2l6ZSgpKQorICAgICAgICB0ZXh0VHJhY2sgPSBtX2xlZ2li
bGVUcmFja3NGb3JNZW51W3N0YXRpY19jYXN0PHNpemVfdD4oaW5kZXgpXS5nZXQoKTsKKyAgICAK
KyAgICBtX21lZGlhRWxlbWVudC0+c2V0U2VsZWN0ZWRUZXh0VHJhY2sodGV4dFRyYWNrKTsKK30K
Kwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6dXBkYXRlTGVnaWJs
ZU9wdGlvbnMoKQoreworICAgIFRleHRUcmFja0xpc3QqIHRyYWNrTGlzdCA9IG1fbWVkaWFFbGVt
ZW50LT50ZXh0VHJhY2tzKCk7CisgICAgaWYgKCF0cmFja0xpc3QgfHwgIW1fbWVkaWFFbGVtZW50
LT5kb2N1bWVudCgpLnBhZ2UoKSB8fCAhbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0
KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBXVEY6OkF0b21pY1N0cmluZyBkaXNwbGF5
TW9kZSA9IG1fbWVkaWFFbGVtZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgpLT5jYXB0aW9uRGlzcGxh
eU1vZGUoKTsKKyAgICBUZXh0VHJhY2sqIG9mZkl0ZW0gPSBtX21lZGlhRWxlbWVudC0+bWVkaWFD
b250cm9sc0hvc3QoKS0+Y2FwdGlvbk1lbnVPZmZJdGVtKCk7CisgICAgVGV4dFRyYWNrKiBhdXRv
bWF0aWNJdGVtID0gbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCktPmNhcHRpb25N
ZW51QXV0b21hdGljSXRlbSgpOworICAgIENhcHRpb25Vc2VyUHJlZmVyZW5jZXMmIGNhcHRpb25Q
cmVmZXJlbmNlcyA9ICptX21lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCktPmdyb3VwKCku
Y2FwdGlvblByZWZlcmVuY2VzKCk7CisgICAgbV9sZWdpYmxlVHJhY2tzRm9yTWVudSA9IGNhcHRp
b25QcmVmZXJlbmNlcy5zb3J0ZWRUcmFja0xpc3RGb3JNZW51KHRyYWNrTGlzdCk7CisgICAgVmVj
dG9yPFN0cmluZz4gdHJhY2tEaXNwbGF5TmFtZXM7CisgICAgdWludDY0X3Qgc2VsZWN0ZWRJbmRl
eCA9IDA7CisgICAgdWludDY0X3Qgb2ZmSW5kZXggPSAwOworICAgIGJvb2wgdHJhY2tNZW51SXRl
bVNlbGVjdGVkID0gZmFsc2U7CisgICAgCisgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRl
eCA8IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnUuc2l6ZSgpOyBpbmRleCsrKSB7CisgICAgICAgIGF1
dG8mIHRyYWNrID0gbV9sZWdpYmxlVHJhY2tzRm9yTWVudVtpbmRleF07CisgICAgICAgIHRyYWNr
RGlzcGxheU5hbWVzLmFwcGVuZChjYXB0aW9uUHJlZmVyZW5jZXMuZGlzcGxheU5hbWVGb3JUcmFj
ayh0cmFjay5nZXQoKSkpOworICAgICAgICAKKyAgICAgICAgaWYgKHRyYWNrID09IG9mZkl0ZW0p
CisgICAgICAgICAgICBvZmZJbmRleCA9IGluZGV4OworICAgICAgICAKKyAgICAgICAgaWYgKHRy
YWNrID09IGF1dG9tYXRpY0l0ZW0gJiYgZGlzcGxheU1vZGUgPT0gTWVkaWFDb250cm9sc0hvc3Q6
OmF1dG9tYXRpY0tleXdvcmQoKSkgeworICAgICAgICAgICAgc2VsZWN0ZWRJbmRleCA9IGluZGV4
OworICAgICAgICAgICAgdHJhY2tNZW51SXRlbVNlbGVjdGVkID0gdHJ1ZTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgaWYgKGRpc3BsYXlNb2RlICE9IE1lZGlhQ29udHJvbHNIb3N0Ojph
dXRvbWF0aWNLZXl3b3JkKCkgJiYgdHJhY2stPm1vZGUoKSA9PSBUZXh0VHJhY2s6OnNob3dpbmdL
ZXl3b3JkKCkpIHsKKyAgICAgICAgICAgIHNlbGVjdGVkSW5kZXggPSBpbmRleDsKKyAgICAgICAg
ICAgIHRyYWNrTWVudUl0ZW1TZWxlY3RlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgaWYgKG9mZkluZGV4ICYmICF0cmFja01lbnVJdGVtU2VsZWN0ZWQgJiYgZGlzcGxheU1v
ZGUgPT0gTWVkaWFDb250cm9sc0hvc3Q6OmZvcmNlZE9ubHlLZXl3b3JkKCkpIHsKKyAgICAgICAg
c2VsZWN0ZWRJbmRleCA9IG9mZkluZGV4OworICAgICAgICB0cmFja01lbnVJdGVtU2VsZWN0ZWQg
PSB0cnVlOworICAgIH0KKyAgICAKKyAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0
TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyh0cmFja0Rpc3BsYXlOYW1lcywgc2VsZWN0ZWRJ
bmRleCk7Cit9CisKK2NvbnN0IFZlY3RvcjxBdG9taWNTdHJpbmc+JiBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbE1lZGlhRWxlbWVudDo6b2JzZXJ2ZWRFdmVudE5hbWVzKCkKK3sKKyAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8VmVjdG9yPEF0b21pY1N0cmluZz4+IHNFdmVudE5hbWVzOworCisgICAg
aWYgKCFzRXZlbnROYW1lcy5nZXQoKS5zaXplKCkpIHsKKyAgICAgICAgc0V2ZW50TmFtZXMuZ2V0
KCkuYXBwZW5kKGV2ZW50TmFtZXMoKS5kdXJhdGlvbmNoYW5nZUV2ZW50KTsKKyAgICAgICAgc0V2
ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFtZXMoKS5wYXVzZUV2ZW50KTsKKyAgICAgICAg
c0V2ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFtZXMoKS5wbGF5RXZlbnQpOworICAgICAg
ICBzRXZlbnROYW1lcy5nZXQoKS5hcHBlbmQoZXZlbnROYW1lcygpLnJhdGVjaGFuZ2VFdmVudCk7
CisgICAgICAgIHNFdmVudE5hbWVzLmdldCgpLmFwcGVuZChldmVudE5hbWVzKCkudGltZXVwZGF0
ZUV2ZW50KTsKKyAgICAgICAgc0V2ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFtZXMoKS5h
ZGR0cmFja0V2ZW50KTsKKyAgICAgICAgc0V2ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFt
ZXMoKS5yZW1vdmV0cmFja0V2ZW50KTsKKyAgICAgICAgc0V2ZW50TmFtZXMuZ2V0KCkuYXBwZW5k
KGV2ZW50TmFtZXMoKS53ZWJraXRjdXJyZW50cGxheWJhY2t0YXJnZXRpc3dpcmVsZXNzY2hhbmdl
ZEV2ZW50KTsKKyAgICB9CisgICAgcmV0dXJuIHNFdmVudE5hbWVzLmdldCgpOworfQorCitjb25z
dCBBdG9taWNTdHJpbmcmIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpldmVu
dE5hbWVBbGwoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHNF
dmVudE5hbWVBbGwgPSAiYWxsRXZlbnRzIjsKKyAgICByZXR1cm4gc0V2ZW50TmFtZUFsbDsKK30K
KworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tCSh3b3Jr
aW5nIGNvcHkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTI2LDE5ICsyNiwxOCBA
QAogI2ltcG9ydCAiY29uZmlnLmgiCiAKICNpZiBQTEFURk9STShJT1MpCi0KLSNpbXBvcnQgIldl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50LmgiCisjaW1wb3J0ICJXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oIgogCiAjaW1wb3J0ICJET01FdmVudEludGVybmFs
LmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgiCiAjaW1wb3J0ICJNZWRpYUNvbnRyb2xzSG9zdC5oIgog
I2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLmgiCisjaW1wb3J0IDxRdWFydHpD
b3JlL0NvcmVBbmltYXRpb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvRE9NRXZlbnRMaXN0ZW5lci5o
PgogI2ltcG9ydCA8V2ViQ29yZS9FdmVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9FdmVudExpc3Rl
bmVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0V2ZW50TmFtZXMuaD4KICNpbXBvcnQgPFdlYkNvcmUv
SFRNTEVsZW1lbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvSFRNTE1lZGlhRWxlbWVudC5oPgogI2lt
cG9ydCA8V2ViQ29yZS9IVE1MVmlkZW9FbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BhZ2Uu
aD4KICNpbXBvcnQgPFdlYkNvcmUvUGFnZUdyb3VwLmg+CkBAIC00Niw4NCArNDUsNzkgQEAKICNp
bXBvcnQgPFdlYkNvcmUvVGV4dFRyYWNrTGlzdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9UaW1lUmFu
Z2VzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVUaHJlYWRSdW4uaD4KLSNpbXBvcnQgPFF1
YXJ0ekNvcmUvQ29yZUFuaW1hdGlvbi5oPgogI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+
CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CiAKLVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbE1lZGlhRWxlbWVudCgpCitXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQoKQogICAgIDogRXZlbnRMaXN0
ZW5lcihFdmVudExpc3RlbmVyOjpDUFBFdmVudExpc3RlbmVyVHlwZSkKLSAgICAsIG1faXNMaXN0
ZW5pbmd7ZmFsc2V9CisgICAgLCBtX2lzTGlzdGVuaW5nKGZhbHNlKQogewogfQogCi1XZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6fldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVk
aWFFbGVtZW50KCkKK1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojp+V2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQoKQogewogfQogCi12b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpzZXRNZWRpYUVsZW1lbnQoSFRNTE1lZGlhRWxlbWVu
dCogbWVkaWFFbGVtZW50KQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dDo6c2V0VmlkZW9FbGVtZW50KEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvRWxlbWVudCkKIHsKLSAg
ICBpZiAobV9tZWRpYUVsZW1lbnQgPT0gbWVkaWFFbGVtZW50KQorICAgIGlmIChtX3ZpZGVvRWxl
bWVudCA9PSB2aWRlb0VsZW1lbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX21lZGlh
RWxlbWVudCAmJiBtX2lzTGlzdGVuaW5nKSB7CisgICAgaWYgKG1fdmlkZW9FbGVtZW50ICYmIG1f
aXNMaXN0ZW5pbmcpIHsKICAgICAgICAgZm9yIChhdXRvIGV2ZW50TmFtZSA6IG9ic2VydmVkRXZl
bnROYW1lcygpKQotICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnJlbW92ZUV2ZW50TGlzdGVu
ZXIoZXZlbnROYW1lLCB0aGlzLCBmYWxzZSk7CisgICAgICAgICAgICBtX3ZpZGVvRWxlbWVudC0+
cmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIHRoaXMsIGZhbHNlKTsKICAgICB9CiAgICAg
bV9pc0xpc3RlbmluZyA9IGZhbHNlOwogCi0gICAgbV9tZWRpYUVsZW1lbnQgPSBtZWRpYUVsZW1l
bnQ7CisgICAgbV92aWRlb0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7CiAKLSAgICBpZiAoIW1fbWVk
aWFFbGVtZW50KQorICAgIGlmICghbV92aWRlb0VsZW1lbnQpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGZvciAoYXV0byBldmVudE5hbWUgOiBvYnNlcnZlZEV2ZW50TmFtZXMoKSkKLSAgICAgICAg
bV9tZWRpYUVsZW1lbnQtPmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCB0aGlzLCBmYWxzZSk7
CisgICAgICAgIG1fdmlkZW9FbGVtZW50LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgdGhp
cywgZmFsc2UpOwogICAgIG1faXNMaXN0ZW5pbmcgPSB0cnVlOwogCiAgICAgdXBkYXRlRm9yRXZl
bnROYW1lKGV2ZW50TmFtZUFsbCgpKTsKIAotICAgIGlmIChpc0hUTUxWaWRlb0VsZW1lbnQobV9t
ZWRpYUVsZW1lbnQuZ2V0KCkpKSB7Ci0gICAgICAgIEhUTUxWaWRlb0VsZW1lbnQgKnZpZGVvRWxl
bWVudCA9IHRvSFRNTFZpZGVvRWxlbWVudChtX21lZGlhRWxlbWVudC5nZXQoKSk7Ci0gICAgICAg
IG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRWaWRlb0RpbWVuc2lvbnModHJ1ZSwgdmlk
ZW9FbGVtZW50LT52aWRlb1dpZHRoKCksIHZpZGVvRWxlbWVudC0+dmlkZW9IZWlnaHQoKSk7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRWaWRlb0Rp
bWVuc2lvbnMoZmFsc2UsIDAsIDApOworICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5z
ZXRWaWRlb0RpbWVuc2lvbnModHJ1ZSwgdmlkZW9FbGVtZW50LT52aWRlb1dpZHRoKCksIHZpZGVv
RWxlbWVudC0+dmlkZW9IZWlnaHQoKSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxNZWRpYUVsZW1lbnQ6OmhhbmRsZUV2ZW50KFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBXZWJDb3JlOjpFdmVudCogZXZlbnQpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50OjpoYW5kbGVFdmVudChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgV2ViQ29yZTo6RXZlbnQqIGV2ZW50KQogewogICAgIExPRyhNZWRpYSwgImhhbmRsZUV2ZW50
ICVzIiwgZXZlbnQtPnR5cGUoKS5jaGFyYWN0ZXJzOCgpKTsKICAgICB1cGRhdGVGb3JFdmVudE5h
bWUoZXZlbnQtPnR5cGUoKSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRp
YUVsZW1lbnQ6OnVwZGF0ZUZvckV2ZW50TmFtZShjb25zdCBXVEY6OkF0b21pY1N0cmluZyYgZXZl
bnROYW1lKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6dXBkYXRl
Rm9yRXZlbnROYW1lKGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJiBldmVudE5hbWUpCiB7Ci0gICAg
aWYgKCFtX21lZGlhRWxlbWVudCB8fCAhbV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UpCisgICAg
aWYgKCFtX3ZpZGVvRWxlbWVudCB8fCAhbV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UpCiAgICAg
ICAgIHJldHVybjsKICAgICAKICAgICBib29sIGFsbCA9IGV2ZW50TmFtZSA9PSBldmVudE5hbWVB
bGwoKTsKIAogICAgIGlmIChhbGwKICAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMo
KS5kdXJhdGlvbmNoYW5nZUV2ZW50KSB7Ci0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlLT5zZXREdXJhdGlvbihtX21lZGlhRWxlbWVudC0+ZHVyYXRpb24oKSk7CisgICAgICAgIG1f
dmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXREdXJhdGlvbihtX3ZpZGVvRWxlbWVudC0+ZHVy
YXRpb24oKSk7CiAgICAgICAgIC8vIFRoZXNlIGlzIG5vIHN0YW5kYXJkIGV2ZW50IGZvciBtaW5G
YXN0UmV2ZXJzZVJhdGVDaGFuZ2U7IGR1cmF0aW9uIGNoYW5nZSBpcyBhIHJlYXNvbmFibGUgcHJv
eHkgZm9yIGl0LgogICAgICAgICAvLyBJdCBoYXBwZW5zIGV2ZXJ5IHRpbWUgYSBuZXcgaXRlbSBi
ZWNvbWVzIHJlYWR5IHRvIHBsYXkuCi0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
LT5zZXRDYW5QbGF5RmFzdFJldmVyc2UobV9tZWRpYUVsZW1lbnQtPm1pbkZhc3RSZXZlcnNlUmF0
ZSgpIDwgMC4wKTsKKyAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UtPnNldENhblBs
YXlGYXN0UmV2ZXJzZShtX3ZpZGVvRWxlbWVudC0+bWluRmFzdFJldmVyc2VSYXRlKCkgPCAwLjAp
OwogICAgIH0KIAogICAgIGlmIChhbGwKICAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFt
ZXMoKS5wYXVzZUV2ZW50CiAgICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkucGxh
eUV2ZW50CiAgICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkucmF0ZWNoYW5nZUV2
ZW50KQotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0UmF0ZSghbV9tZWRp
YUVsZW1lbnQtPnBhdXNlZCgpLCBtX21lZGlhRWxlbWVudC0+cGxheWJhY2tSYXRlKCkpOworICAg
ICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0UmF0ZSghbV92aWRlb0VsZW1lbnQt
PnBhdXNlZCgpLCBtX3ZpZGVvRWxlbWVudC0+cGxheWJhY2tSYXRlKCkpOwogCiAgICAgaWYgKGFs
bAogICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnRpbWV1cGRhdGVFdmVudCkg
ewotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0Q3VycmVudFRpbWUobV9t
ZWRpYUVsZW1lbnQtPmN1cnJlbnRUaW1lKCksIFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10g
c3lzdGVtVXB0aW1lXSk7CisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRD
dXJyZW50VGltZShtX3ZpZGVvRWxlbWVudC0+Y3VycmVudFRpbWUoKSwgW1tOU1Byb2Nlc3NJbmZv
IHByb2Nlc3NJbmZvXSBzeXN0ZW1VcHRpbWVdKTsKICAgICAgICAgLy8gRklYTUU6IDEzMDc4OCAt
IGZpbmQgYSBiZXR0ZXIgZXZlbnQgdG8gdXBkYXRlIHNlZWthYmxlIHJhbmdlcyBmcm9tLgotICAg
ICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0U2Vla2FibGVSYW5nZXMoKm1fbWVk
aWFFbGVtZW50LT5zZWVrYWJsZSgpKTsKKyAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2UtPnNldFNlZWthYmxlUmFuZ2VzKCptX3ZpZGVvRWxlbWVudC0+c2Vla2FibGUoKSk7CiAgICAg
fQogCiAgICAgaWYgKGFsbApAQCAtMTMzLDI2ICsxMjcsMjYgQEAgdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbE1lZGlhRWxlbWVudAogCiAgICAgaWYgKGFsbAogICAgICAgICB8fCBldmVudE5h
bWUgPT0gZXZlbnROYW1lcygpLndlYmtpdGN1cnJlbnRwbGF5YmFja3RhcmdldGlzd2lyZWxlc3Nj
aGFuZ2VkRXZlbnQpIHsKLSAgICAgICAgYm9vbCBlbmFibGVkID0gbV9tZWRpYUVsZW1lbnQtPm1l
ZGlhU2Vzc2lvbigpLmN1cnJlbnRQbGF5YmFja1RhcmdldElzV2lyZWxlc3MoKm1fbWVkaWFFbGVt
ZW50KTsKKyAgICAgICAgYm9vbCBlbmFibGVkID0gbV92aWRlb0VsZW1lbnQtPm1lZGlhU2Vzc2lv
bigpLmN1cnJlbnRQbGF5YmFja1RhcmdldElzV2lyZWxlc3MoKm1fdmlkZW9FbGVtZW50KTsKICAg
ICAgICAgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0
VHlwZSB0YXJnZXRUeXBlID0gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOjpUYXJnZXRUeXBl
Tm9uZTsKICAgICAgICAgU3RyaW5nIGxvY2FsaXplZERldmljZU5hbWU7CiAKLSAgICAgICAgaWYg
KG1fbWVkaWFFbGVtZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgpKSB7CisgICAgICAgIGlmIChtX3Zp
ZGVvRWxlbWVudC0+bWVkaWFDb250cm9sc0hvc3QoKSkgewogICAgICAgICAgICAgREVQUkVDQVRF
RF9ERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYWlycGxheSwgKEFTQ0lJTGl0ZXJhbCgiYWly
cGxheSIpKSk7CiAgICAgICAgICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoU3Ry
aW5nLCB0dm91dCwgKEFTQ0lJTGl0ZXJhbCgidHZvdXQiKSkpOwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBTdHJpbmcgdHlwZSA9IG1fbWVkaWFFbGVtZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgp
LT5leHRlcm5hbERldmljZVR5cGUoKTsKKyAgICAgICAgICAgIFN0cmluZyB0eXBlID0gbV92aWRl
b0VsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCktPmV4dGVybmFsRGV2aWNlVHlwZSgpOwogICAg
ICAgICAgICAgaWYgKHR5cGUgPT0gYWlycGxheSkKICAgICAgICAgICAgICAgICB0YXJnZXRUeXBl
ID0gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOjpUYXJnZXRUeXBlQWlyUGxheTsKICAgICAg
ICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gdHZvdXQpCiAgICAgICAgICAgICAgICAgdGFyZ2V0VHlw
ZSA9IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZTo6VGFyZ2V0VHlwZVRWT3V0OwotICAgICAg
ICAgICAgbG9jYWxpemVkRGV2aWNlTmFtZSA9IG1fbWVkaWFFbGVtZW50LT5tZWRpYUNvbnRyb2xz
SG9zdCgpLT5leHRlcm5hbERldmljZURpc3BsYXlOYW1lKCk7CisgICAgICAgICAgICBsb2NhbGl6
ZWREZXZpY2VOYW1lID0gbV92aWRlb0VsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCktPmV4dGVy
bmFsRGV2aWNlRGlzcGxheU5hbWUoKTsKICAgICAgICAgfQogICAgICAgICBtX3ZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZS0+c2V0RXh0ZXJuYWxQbGF5YmFjayhlbmFibGVkLCB0YXJnZXRUeXBlLCBs
b2NhbGl6ZWREZXZpY2VOYW1lKTsKICAgICB9CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxNZWRpYUVsZW1lbnQ6OnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKFBsYXRmb3JtTGF5ZXIq
IHZpZGVvTGF5ZXIpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojpz
ZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihQbGF0Zm9ybUxheWVyKiB2aWRlb0xheWVyKQogewogICAg
IGlmIChtX3ZpZGVvRnVsbHNjcmVlbkxheWVyID09IHZpZGVvTGF5ZXIpCiAgICAgICAgIHJldHVy
bjsKQEAgLTE2MCwxMzQgKzE1NCwxMzUgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1l
ZGlhRWxlbWVudAogICAgIG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIgPSB2aWRlb0xheWVyOwogICAg
IFttX3ZpZGVvRnVsbHNjcmVlbkxheWVyIHNldEZyYW1lOm1fdmlkZW9GcmFtZV07CiAgICAgCi0g
ICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+IHBy
b3RlY3QodGhpcyk7CisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAg
IGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5zZXRWaWRl
b0Z1bGxzY3JlZW5MYXllcihtX3ZpZGVvRnVsbHNjcmVlbkxheWVyLmdldCgpKTsKKyAgICAgICAg
aWYgKG1fdmlkZW9FbGVtZW50KQorICAgICAgICAgICAgbV92aWRlb0VsZW1lbnQtPnNldFZpZGVv
RnVsbHNjcmVlbkxheWVyKG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIuZ2V0KCkpOwogICAgICAgICBw
cm90ZWN0LmNsZWFyKCk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxNZWRpYUVsZW1lbnQ6OnBsYXkoKSB7Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7Cit2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpwbGF5KCkKK3sKKyAgICBfX2Jsb2NrIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKICAgICBX
ZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICAgICAg
bV9tZWRpYUVsZW1lbnQtPnBsYXkoKTsKKyAgICAgICAgaWYgKG1fdmlkZW9FbGVtZW50KQorICAg
ICAgICAgICAgbV92aWRlb0VsZW1lbnQtPnBsYXkoKTsKICAgICAgICAgcHJvdGVjdC5jbGVhcigp
OwogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50
OjpwYXVzZSgpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpwYXVz
ZSgpCiB7Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVs
ZW1lbnQ+IHByb3RlY3QodGhpcyk7CisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKF57
Ci0gICAgICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50
LT5wYXVzZSgpOworICAgICAgICBpZiAobV92aWRlb0VsZW1lbnQpCisgICAgICAgICAgICBtX3Zp
ZGVvRWxlbWVudC0+cGF1c2UoKTsKICAgICAgICAgcHJvdGVjdC5jbGVhcigpOwogICAgIH0pOwog
fQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50Ojp0b2dnbGVQbGF5
U3RhdGUoKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6dG9nZ2xl
UGxheVN0YXRlKCkKIHsKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKKyAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKICAgICBXZWJUaHJl
YWRSdW4oXnsKLSAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICAgICAgbV9tZWRp
YUVsZW1lbnQtPnRvZ2dsZVBsYXlTdGF0ZSgpOworICAgICAgICBpZiAobV92aWRlb0VsZW1lbnQp
CisgICAgICAgICAgICBtX3ZpZGVvRWxlbWVudC0+dG9nZ2xlUGxheVN0YXRlKCk7CiAgICAgICAg
IHByb3RlY3QuY2xlYXIoKTsKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbE1lZGlhRWxlbWVudDo6YmVnaW5TY3J1YmJpbmcoKQordm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudDo6YmVnaW5TY3J1YmJpbmcoKQogewotICAgIF9fYmxvY2sgUmVm
UHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOwor
ICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBw
cm90ZWN0KHRoaXMpOwogICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICBpZiAobV9tZWRpYUVs
ZW1lbnQpCi0gICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+YmVnaW5TY3J1YmJpbmcoKTsKKyAg
ICAgICAgaWYgKG1fdmlkZW9FbGVtZW50KQorICAgICAgICAgICAgbV92aWRlb0VsZW1lbnQtPmJl
Z2luU2NydWJiaW5nKCk7CiAgICAgICAgIHByb3RlY3QuY2xlYXIoKTsKICAgICB9KTsKIH0KIAot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6ZW5kU2NydWJiaW5nKCkK
K3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmVuZFNjcnViYmluZygp
CiB7Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1l
bnQ+IHByb3RlY3QodGhpcyk7CisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKF57Ci0g
ICAgICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5l
bmRTY3J1YmJpbmcoKTsKKyAgICAgICAgaWYgKG1fdmlkZW9FbGVtZW50KQorICAgICAgICAgICAg
bV92aWRlb0VsZW1lbnQtPmVuZFNjcnViYmluZygpOwogICAgICAgICBwcm90ZWN0LmNsZWFyKCk7
CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6
OnNlZWtUb1RpbWUoZG91YmxlIHRpbWUpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlk
ZW9FbGVtZW50OjpzZWVrVG9UaW1lKGRvdWJsZSB0aW1lKQogewotICAgIF9fYmxvY2sgUmVmUHRy
PFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOworICAg
IF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBwcm90
ZWN0KHRoaXMpOwogICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICBpZiAobV9tZWRpYUVsZW1l
bnQpCi0gICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+c2V0Q3VycmVudFRpbWUodGltZSk7Cisg
ICAgICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKKyAgICAgICAgICAgIG1fdmlkZW9FbGVtZW50LT5z
ZXRDdXJyZW50VGltZSh0aW1lKTsKICAgICAgICAgcHJvdGVjdC5jbGVhcigpOwogICAgIH0pOwog
fQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpmYXN0U2Vlayhk
b3VibGUgdGltZSkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmZh
c3RTZWVrKGRvdWJsZSB0aW1lKQogewotICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsTWVkaWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOworICAgIF9fYmxvY2sgUmVmUHRy
PFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBwcm90ZWN0KHRoaXMpOwogICAg
IFdlYlRocmVhZFJ1biheewotICAgICAgICBpZiAobV9tZWRpYUVsZW1lbnQpCi0gICAgICAgICAg
ICBtX21lZGlhRWxlbWVudC0+ZmFzdFNlZWsodGltZSk7CisgICAgICAgIGlmIChtX3ZpZGVvRWxl
bWVudCkKKyAgICAgICAgICAgIG1fdmlkZW9FbGVtZW50LT5mYXN0U2Vlayh0aW1lKTsKICAgICAg
ICAgcHJvdGVjdC5jbGVhcigpOwogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsTWVkaWFFbGVtZW50OjpiZWdpblNjYW5uaW5nRm9yd2FyZCgpCit2b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpiZWdpblNjYW5uaW5nRm9yd2FyZCgpCiB7Ci0g
ICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+IHBy
b3RlY3QodGhpcyk7CisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAg
IGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5iZWdpblNj
YW5uaW5nKE1lZGlhQ29udHJvbGxlckludGVyZmFjZTo6Rm9yd2FyZCk7CisgICAgICAgIGlmICht
X3ZpZGVvRWxlbWVudCkKKyAgICAgICAgICAgIG1fdmlkZW9FbGVtZW50LT5iZWdpblNjYW5uaW5n
KE1lZGlhQ29udHJvbGxlckludGVyZmFjZTo6Rm9yd2FyZCk7CiAgICAgICAgIHByb3RlY3QuY2xl
YXIoKTsKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxl
bWVudDo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKCkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQ6OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpCiB7Ci0gICAgX19ibG9jayBS
ZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7
CisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+
IHByb3RlY3QodGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgIGlmIChtX21lZGlh
RWxlbWVudCkKLSAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5iZWdpblNjYW5uaW5nKE1lZGlh
Q29udHJvbGxlckludGVyZmFjZTo6QmFja3dhcmQpOworICAgICAgICBpZiAobV92aWRlb0VsZW1l
bnQpCisgICAgICAgICAgICBtX3ZpZGVvRWxlbWVudC0+YmVnaW5TY2FubmluZyhNZWRpYUNvbnRy
b2xsZXJJbnRlcmZhY2U6OkJhY2t3YXJkKTsKICAgICAgICAgcHJvdGVjdC5jbGVhcigpOwogICAg
IH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjplbmRT
Y2FubmluZygpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjplbmRT
Y2FubmluZygpCiB7Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxN
ZWRpYUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7CisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7CiAgICAgV2ViVGhyZWFk
UnVuKF57Ci0gICAgICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgICAgIG1fbWVkaWFF
bGVtZW50LT5lbmRTY2FubmluZygpOworICAgICAgICBpZiAobV92aWRlb0VsZW1lbnQpCisgICAg
ICAgICAgICBtX3ZpZGVvRWxlbWVudC0+ZW5kU2Nhbm5pbmcoKTsKICAgICAgICAgcHJvdGVjdC5j
bGVhcigpOwogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFF
bGVtZW50OjpyZXF1ZXN0RXhpdEZ1bGxzY3JlZW4oKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudDo6cmVxdWVzdEV4aXRGdWxsc2NyZWVuKCkKIHsKLSAgICBpZiAoIW1f
bWVkaWFFbGVtZW50KQorICAgIGlmICghbV92aWRlb0VsZW1lbnQpCiAgICAgICAgIHJldHVybjsK
IAotICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50
PiBwcm90ZWN0KHRoaXMpOworICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50PiBwcm90ZWN0KHRoaXMpOwogICAgIFdlYlRocmVhZFJ1biheewotICAg
ICAgICBpZiAobV9tZWRpYUVsZW1lbnQgJiYgbV9tZWRpYUVsZW1lbnQtPmlzRnVsbHNjcmVlbigp
KQotICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmV4aXRGdWxsc2NyZWVuKCk7CisgICAgICAg
IGlmIChtX3ZpZGVvRWxlbWVudCAmJiBtX3ZpZGVvRWxlbWVudC0+aXNGdWxsc2NyZWVuKCkpCisg
ICAgICAgICAgICBtX3ZpZGVvRWxlbWVudC0+ZXhpdEZ1bGxzY3JlZW4oKTsKICAgICAgICAgcHJv
dGVjdC5jbGVhcigpOwogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
TWVkaWFFbGVtZW50OjpzZXRWaWRlb0xheWVyRnJhbWUoRmxvYXRSZWN0IHJlY3QpCit2b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0xheWVyRnJhbWUoRmxv
YXRSZWN0IHJlY3QpCiB7CiAgICAgbV92aWRlb0ZyYW1lID0gcmVjdDsKICAgICBbbV92aWRlb0Z1
bGxzY3JlZW5MYXllciBzZXRGcmFtZTpDR1JlY3QocmVjdCldOwotICAgIG1fbWVkaWFFbGVtZW50
LT5zZXRWaWRlb0Z1bGxzY3JlZW5GcmFtZShyZWN0KTsKKyAgICBtX3ZpZGVvRWxlbWVudC0+c2V0
VmlkZW9GdWxsc2NyZWVuRnJhbWUocmVjdCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxNZWRpYUVsZW1lbnQ6OnNldFZpZGVvTGF5ZXJHcmF2aXR5KFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsOjpWaWRlb0dyYXZpdHkgZ3Jhdml0eSkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvTGF5ZXJHcmF2aXR5KFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsOjpWaWRlb0dyYXZpdHkgZ3Jhdml0eSkKIHsKICAgICBNZWRpYVBsYXllcjo6VmlkZW9HcmF2
aXR5IHZpZGVvR3Jhdml0eSA9IE1lZGlhUGxheWVyOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3Q7
CiAgICAgaWYgKGdyYXZpdHkgPT0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0
eVJlc2l6ZSkKQEAgLTI5OSwzNCArMjk0LDM0IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxNZWRpYUVsZW1lbnQKICAgICBlbHNlCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgIAotICAgIG1fbWVkaWFFbGVtZW50LT5zZXRWaWRlb0Z1bGxzY3JlZW5HcmF2aXR5KHZpZGVv
R3Jhdml0eSk7CisgICAgbV92aWRlb0VsZW1lbnQtPnNldFZpZGVvRnVsbHNjcmVlbkdyYXZpdHko
dmlkZW9HcmF2aXR5KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxl
bWVudDo6c2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCkKK3ZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3Qp
CiB7CiAgICAgLy8gRklYTUU6IDEzMTIzNiBJbXBsZW1lbnQgYXVkaW8gdHJhY2sgc2VsZWN0aW9u
LgogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpzZWxlY3RM
ZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50OjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5k
ZXgpCiB7CiAgICAgVGV4dFRyYWNrKiB0ZXh0VHJhY2sgPSBudWxscHRyOwogICAgIAogICAgIGlm
IChpbmRleCA8IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnUuc2l6ZSgpKQogICAgICAgICB0ZXh0VHJh
Y2sgPSBtX2xlZ2libGVUcmFja3NGb3JNZW51W3N0YXRpY19jYXN0PHNpemVfdD4oaW5kZXgpXS5n
ZXQoKTsKICAgICAKLSAgICBtX21lZGlhRWxlbWVudC0+c2V0U2VsZWN0ZWRUZXh0VHJhY2sodGV4
dFRyYWNrKTsKKyAgICBtX3ZpZGVvRWxlbWVudC0+c2V0U2VsZWN0ZWRUZXh0VHJhY2sodGV4dFRy
YWNrKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6dXBk
YXRlTGVnaWJsZU9wdGlvbnMoKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudDo6dXBkYXRlTGVnaWJsZU9wdGlvbnMoKQogewotICAgIFRleHRUcmFja0xpc3QqIHRyYWNr
TGlzdCA9IG1fbWVkaWFFbGVtZW50LT50ZXh0VHJhY2tzKCk7Ci0gICAgaWYgKCF0cmFja0xpc3Qg
fHwgIW1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSB8fCAhbV9tZWRpYUVsZW1lbnQt
Pm1lZGlhQ29udHJvbHNIb3N0KCkpCisgICAgVGV4dFRyYWNrTGlzdCogdHJhY2tMaXN0ID0gbV92
aWRlb0VsZW1lbnQtPnRleHRUcmFja3MoKTsKKyAgICBpZiAoIXRyYWNrTGlzdCB8fCAhbV92aWRl
b0VsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpIHx8ICFtX3ZpZGVvRWxlbWVudC0+bWVkaWFDb250
cm9sc0hvc3QoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFdURjo6QXRvbWljU3RyaW5n
IGRpc3BsYXlNb2RlID0gbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCktPmNhcHRp
b25EaXNwbGF5TW9kZSgpOwotICAgIFRleHRUcmFjayogb2ZmSXRlbSA9IG1fbWVkaWFFbGVtZW50
LT5tZWRpYUNvbnRyb2xzSG9zdCgpLT5jYXB0aW9uTWVudU9mZkl0ZW0oKTsKLSAgICBUZXh0VHJh
Y2sqIGF1dG9tYXRpY0l0ZW0gPSBtX21lZGlhRWxlbWVudC0+bWVkaWFDb250cm9sc0hvc3QoKS0+
Y2FwdGlvbk1lbnVBdXRvbWF0aWNJdGVtKCk7Ci0gICAgQ2FwdGlvblVzZXJQcmVmZXJlbmNlcyYg
Y2FwdGlvblByZWZlcmVuY2VzID0gKm1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKS0+
Z3JvdXAoKS5jYXB0aW9uUHJlZmVyZW5jZXMoKTsKKyAgICBXVEY6OkF0b21pY1N0cmluZyBkaXNw
bGF5TW9kZSA9IG1fdmlkZW9FbGVtZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgpLT5jYXB0aW9uRGlz
cGxheU1vZGUoKTsKKyAgICBUZXh0VHJhY2sqIG9mZkl0ZW0gPSBtX3ZpZGVvRWxlbWVudC0+bWVk
aWFDb250cm9sc0hvc3QoKS0+Y2FwdGlvbk1lbnVPZmZJdGVtKCk7CisgICAgVGV4dFRyYWNrKiBh
dXRvbWF0aWNJdGVtID0gbV92aWRlb0VsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCktPmNhcHRp
b25NZW51QXV0b21hdGljSXRlbSgpOworICAgIENhcHRpb25Vc2VyUHJlZmVyZW5jZXMmIGNhcHRp
b25QcmVmZXJlbmNlcyA9ICptX3ZpZGVvRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCktPmdyb3Vw
KCkuY2FwdGlvblByZWZlcmVuY2VzKCk7CiAgICAgbV9sZWdpYmxlVHJhY2tzRm9yTWVudSA9IGNh
cHRpb25QcmVmZXJlbmNlcy5zb3J0ZWRUcmFja0xpc3RGb3JNZW51KHRyYWNrTGlzdCk7CiAgICAg
VmVjdG9yPFN0cmluZz4gdHJhY2tEaXNwbGF5TmFtZXM7CiAgICAgdWludDY0X3Qgc2VsZWN0ZWRJ
bmRleCA9IDA7CkBAIC0zNTksNyArMzU0LDcgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bE1lZGlhRWxlbWVudAogICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRMZWdpYmxl
TWVkaWFTZWxlY3Rpb25PcHRpb25zKHRyYWNrRGlzcGxheU5hbWVzLCBzZWxlY3RlZEluZGV4KTsK
IH0KIAotY29uc3QgVmVjdG9yPEF0b21pY1N0cmluZz4mIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
TWVkaWFFbGVtZW50OjpvYnNlcnZlZEV2ZW50TmFtZXMoKQorY29uc3QgVmVjdG9yPEF0b21pY1N0
cmluZz4mIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpvYnNlcnZlZEV2ZW50
TmFtZXMoKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxWZWN0b3I8QXRvbWljU3RyaW5n
Pj4gc0V2ZW50TmFtZXM7CiAKQEAgLTM3Niw3ICszNzEsNyBAQCBjb25zdCBWZWN0b3I8QXRvbWlj
U3RyaW5nPiYgV2ViVmlkZW9GdWxsCiAgICAgcmV0dXJuIHNFdmVudE5hbWVzLmdldCgpOwogfQog
Ci1jb25zdCBBdG9taWNTdHJpbmcmIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50
OjpldmVudE5hbWVBbGwoKQorY29uc3QgQXRvbWljU3RyaW5nJiBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudDo6ZXZlbnROYW1lQWxsKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8QXRvbWljU3RyaW5nPiBzRXZlbnROYW1lQWxsID0gImFsbEV2ZW50cyI7CiAgICAgcmV0
dXJuIHNFdmVudE5hbWVBbGw7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLmgJKHJldmlzaW9uIDE3
MzE4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgIGNsYXNzIERpc3BsYXlTbGVlcERpc2FibGVyOwotICAgIGNsYXNzIEhU
TUxNZWRpYUVsZW1lbnQ7CisgICAgY2xhc3MgSFRNTFZpZGVvRWxlbWVudDsKIH0KIAogQHByb3Rv
Y29sIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJEZWxlZ2F0ZTsKQEAgLTQyLDcgKzQyLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBXRUJDT1JFX0VYUE9SVCBAaW50ZXJmYWNlIFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIgOiBOU1dpbmRvd0NvbnRyb2xsZXIgewogQHByaXZhdGUK
LSAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudD4gX21lZGlhRWxlbWVudDsgLy8g
KHJldGFpbikKKyAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudD4gX3ZpZGVvRWxl
bWVudDsgLy8gKHJldGFpbikKICAgICBpZCA8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckRl
bGVnYXRlPiBfZGVsZWdhdGU7IC8vIChhc3NpZ24pCiAKICAgICBOU1dpbmRvdyAqX2JhY2tncm91
bmRGdWxsc2NyZWVuV2luZG93OyAvLyAocmV0YWluKQpAQCAtNjAsOCArNjAsOCBAQCBXRUJDT1JF
X0VYUE9SVCBAaW50ZXJmYWNlIFdlYlZpZGVvRnVsbHNjCiAtICh2b2lkKXNldERlbGVnYXRlOihp
ZCA8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckRlbGVnYXRlPilkZWxlZ2F0ZTsKIAogLSAo
dm9pZClzZXR1cFZpZGVvT3ZlcmxheTooQ0FMYXllciopbGF5ZXI7Ci0tICh2b2lkKXNldE1lZGlh
RWxlbWVudDooV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCopbWVkaWFFbGVtZW50OwotLSAoV2Vi
Q29yZTo6SFRNTE1lZGlhRWxlbWVudCopbWVkaWFFbGVtZW50OworLSAodm9pZClzZXRWaWRlb0Vs
ZW1lbnQ6KFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQqKXZpZGVvRWxlbWVudDsKKy0gKFdlYkNv
cmU6OkhUTUxWaWRlb0VsZW1lbnQqKXZpZGVvRWxlbWVudDsKIAogLSAodm9pZCllbnRlckZ1bGxz
Y3JlZW46KE5TU2NyZWVuICopc2NyZWVuOwogLSAodm9pZClleGl0RnVsbHNjcmVlbjsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyLm1tCShyZXZpc2lvbiAxNzMxODIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbQkod29ya2luZyBj
b3B5KQpAQCAtMzUsNyArMzUsNyBAQAogI2ltcG9ydCA8Q2FyYm9uL0NhcmJvbi5oPgogI2ltcG9y
dCA8UVRLaXQvUVRLaXQuaD4KICNpbXBvcnQgPFdlYkNvcmUvRGlzcGxheVNsZWVwRGlzYWJsZXIu
aD4KLSNpbXBvcnQgPFdlYkNvcmUvSFRNTE1lZGlhRWxlbWVudC5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9IVE1MVmlkZW9FbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NvZnRMaW5raW5nLmg+CiAj
aW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KIApAQCAtMTE0LDIxICsxMTQsMjEgQEAgLSAodm9pZCl3
aW5kb3dEaWRMb2FkCiAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBh
ZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihhcHBsaWNhdGlvbkRpZENoYW5nZVNj
cmVlblBhcmFtZXRlcnM6KSBuYW1lOk5TQXBwbGljYXRpb25EaWRDaGFuZ2VTY3JlZW5QYXJhbWV0
ZXJzTm90aWZpY2F0aW9uIG9iamVjdDpOU0FwcF07CiB9CiAKLS0gKEhUTUxNZWRpYUVsZW1lbnQq
KW1lZGlhRWxlbWVudAorLSAoSFRNTFZpZGVvRWxlbWVudCopdmlkZW9FbGVtZW50CiB7Ci0gICAg
cmV0dXJuIF9tZWRpYUVsZW1lbnQuZ2V0KCk7CisgICAgcmV0dXJuIF92aWRlb0VsZW1lbnQuZ2V0
KCk7CiB9CiAKLS0gKHZvaWQpc2V0TWVkaWFFbGVtZW50OihIVE1MTWVkaWFFbGVtZW50KiltZWRp
YUVsZW1lbnQKKy0gKHZvaWQpc2V0VmlkZW9FbGVtZW50OihIVE1MVmlkZW9FbGVtZW50Kil2aWRl
b0VsZW1lbnQKIHsKLSAgICBfbWVkaWFFbGVtZW50ID0gbWVkaWFFbGVtZW50OworICAgIF92aWRl
b0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7CiAKLSAgICBpZiAoIV9tZWRpYUVsZW1lbnQpCisgICAg
aWYgKCFfdmlkZW9FbGVtZW50KQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoW3NlbGYgaXNX
aW5kb3dMb2FkZWRdKSB7Ci0gICAgICAgIGlmIChfbWVkaWFFbGVtZW50LT5wbGF0Zm9ybU1lZGlh
KCkudHlwZSA9PSBQbGF0Zm9ybU1lZGlhOjpRVE1vdmllVHlwZSkgewotICAgICAgICAgICAgUVRN
b3ZpZSAqbW92aWUgPSBfbWVkaWFFbGVtZW50LT5wbGF0Zm9ybU1lZGlhKCkubWVkaWEucXRNb3Zp
ZTsKKyAgICAgICAgaWYgKF92aWRlb0VsZW1lbnQtPnBsYXRmb3JtTWVkaWEoKS50eXBlID09IFBs
YXRmb3JtTWVkaWE6OlFUTW92aWVUeXBlKSB7CisgICAgICAgICAgICBRVE1vdmllICptb3ZpZSA9
IF92aWRlb0VsZW1lbnQtPnBsYXRmb3JtTWVkaWEoKS5tZWRpYS5xdE1vdmllOwogICAgICAgICAg
ICAgUVRNb3ZpZUxheWVyICpsYXllciA9IFtbZ2V0UVRNb3ZpZUxheWVyQ2xhc3MoKSBhbGxvY10g
aW5pdF07CiAgICAgICAgICAgICBbbGF5ZXIgc2V0TW92aWU6bW92aWVdOwogICAgICAgICAgICAg
W3NlbGYgc2V0dXBWaWRlb092ZXJsYXk6bGF5ZXJdOwpAQCAtMTM4LDggKzEzOCw4IEBAIC0gKHZv
aWQpc2V0TWVkaWFFbGVtZW50OihIVE1MTWVkaWFFbGVtZW4KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6UVRNb3ZpZVJhdGVEaWRD
aGFuZ2VOb3RpZmljYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvYmplY3Q6bW92aWVdOwogCi0gICAgICAgIH0gZWxzZSBpZiAoX21l
ZGlhRWxlbWVudC0+cGxhdGZvcm1NZWRpYSgpLnR5cGUgPT0gUGxhdGZvcm1NZWRpYTo6QVZGb3Vu
ZGF0aW9uTWVkaWFQbGF5ZXJUeXBlKSB7Ci0gICAgICAgICAgICBBVlBsYXllciAqcGxheWVyID0g
X21lZGlhRWxlbWVudC0+cGxhdGZvcm1NZWRpYSgpLm1lZGlhLmF2Zk1lZGlhUGxheWVyOworICAg
ICAgICB9IGVsc2UgaWYgKF92aWRlb0VsZW1lbnQtPnBsYXRmb3JtTWVkaWEoKS50eXBlID09IFBs
YXRmb3JtTWVkaWE6OkFWRm91bmRhdGlvbk1lZGlhUGxheWVyVHlwZSkgeworICAgICAgICAgICAg
QVZQbGF5ZXIgKnBsYXllciA9IF92aWRlb0VsZW1lbnQtPnBsYXRmb3JtTWVkaWEoKS5tZWRpYS5h
dmZNZWRpYVBsYXllcjsKICAgICAgICAgICAgIEFWUGxheWVyTGF5ZXIgKmxheWVyID0gW1tnZXRB
VlBsYXllckxheWVyQ2xhc3MoKSBhbGxvY10gaW5pdF07CiAgICAgICAgICAgICBbc2VsZiBzZXR1
cFZpZGVvT3ZlcmxheTpsYXllcl07CiAgICAgICAgICAgICBbbGF5ZXIgc2V0UGxheWVyOnBsYXll
cl07CkBAIC0yMDcsOSArMjA3LDkgQEAgLSAodm9pZCl3aW5kb3dEaWRFbnRlckZ1bGxzY3JlZW4K
ICAgICBbX2h1ZENvbnRyb2xsZXIgZmFkZVdpbmRvd0luXTsKIH0KIAotLSAoTlNSZWN0KW1lZGlh
RWxlbWVudFJlY3QKKy0gKE5TUmVjdCl2aWRlb0VsZW1lbnRSZWN0CiB7Ci0gICAgcmV0dXJuIF9t
ZWRpYUVsZW1lbnQtPnNjcmVlblJlY3QoKTsKKyAgICByZXR1cm4gX3ZpZGVvRWxlbWVudC0+c2Ny
ZWVuUmVjdCgpOwogfQogCiAtICh2b2lkKWFwcGxpY2F0aW9uRGlkUmVzaWduQWN0aXZlOihOU05v
dGlmaWNhdGlvbiopbm90aWZpY2F0aW9uCkBAIC0yNzYsNyArMjc2LDcgQEAgLSAodm9pZCllbnRl
ckZ1bGxzY3JlZW46KE5TU2NyZWVuICopc2NyZQogICAgIGlmICghc2NyZWVuKQogICAgICAgICBz
Y3JlZW4gPSBbTlNTY3JlZW4gbWFpblNjcmVlbl07CiAKLSAgICBOU1JlY3QgZnJhbWUgPSBbc2Vs
ZiBtZWRpYUVsZW1lbnRSZWN0XTsKKyAgICBOU1JlY3QgZnJhbWUgPSBbc2VsZiB2aWRlb0VsZW1l
bnRSZWN0XTsKICAgICBOU1JlY3QgZW5kRnJhbWUgPSBbc2NyZWVuIGZyYW1lXTsKICAgICBjb25z
dHJhaW5GcmFtZVRvUmF0aW9PZkZyYW1lKCZlbmRGcmFtZSwgJmZyYW1lKTsKIApAQCAtMzAzLDcg
KzMwMyw3IEBAIC0gKHZvaWQpZXhpdEZ1bGxzY3JlZW4KICAgICBfaXNFbmRpbmdGdWxsc2NyZWVu
ID0gWUVTOwogICAgIFtfaHVkQ29udHJvbGxlciBjbG9zZVdpbmRvd107CiAKLSAgICBOU1JlY3Qg
ZW5kRnJhbWUgPSBbc2VsZiBtZWRpYUVsZW1lbnRSZWN0XTsKKyAgICBOU1JlY3QgZW5kRnJhbWUg
PSBbc2VsZiB2aWRlb0VsZW1lbnRSZWN0XTsKIAogICAgIFtzZWxmIHNldHVwRmFkZUFuaW1hdGlv
bklmTmVlZGVkQW5kRmFkZUluOk5PXTsKICAgICBpZiAoX2ZvcmNlRGlzYWJsZUFuaW1hdGlvbikg
ewpAQCAtMzU4LDggKzM1OCw4IEBAIC0gKHZvaWQpdXBkYXRlTWVudUFuZERvY2tGb3JGdWxsc2Ny
ZWVuCiAtICh2b2lkKXVwZGF0ZVBvd2VyQXNzZXJ0aW9ucwogewogICAgIGZsb2F0IHJhdGUgPSAw
OwotICAgIGlmIChfbWVkaWFFbGVtZW50ICYmIF9tZWRpYUVsZW1lbnQtPnBsYXRmb3JtTWVkaWEo
KS50eXBlID09IFBsYXRmb3JtTWVkaWE6OlFUTW92aWVUeXBlKQotICAgICAgICByYXRlID0gW19t
ZWRpYUVsZW1lbnQtPnBsYXRmb3JtTWVkaWEoKS5tZWRpYS5xdE1vdmllIHJhdGVdOworICAgIGlm
IChfdmlkZW9FbGVtZW50ICYmIF92aWRlb0VsZW1lbnQtPnBsYXRmb3JtTWVkaWEoKS50eXBlID09
IFBsYXRmb3JtTWVkaWE6OlFUTW92aWVUeXBlKQorICAgICAgICByYXRlID0gW192aWRlb0VsZW1l
bnQtPnBsYXRmb3JtTWVkaWEoKS5tZWRpYS5xdE1vdmllIHJhdGVdOwogICAgIAogICAgIGlmIChy
YXRlICYmICFfaXNFbmRpbmdGdWxsc2NyZWVuKSB7CiAgICAgICAgIGlmICghX2Rpc3BsYXlTbGVl
cERpc2FibGVyKQpAQCAtMzczLDggKzM3Myw4IEBAIC0gKHZvaWQpdXBkYXRlUG93ZXJBc3NlcnRp
b25zCiAKIC0gKHZvaWQpX3JlcXVlc3RFeGl0CiB7Ci0gICAgaWYgKF9tZWRpYUVsZW1lbnQpCi0g
ICAgICAgIF9tZWRpYUVsZW1lbnQtPmV4aXRGdWxsc2NyZWVuKCk7CisgICAgaWYgKF92aWRlb0Vs
ZW1lbnQpCisgICAgICAgIF92aWRlb0VsZW1lbnQtPmV4aXRGdWxsc2NyZWVuKCk7CiAgICAgX2Zv
cmNlRGlzYWJsZUFuaW1hdGlvbiA9IE5POwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAx
NzMxODIpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSw0MSBAQAorMjAxNC0wOS0wMiAgTWFjaWVqIFN0YWNob3dpYWsgIDxtanNAYXBwbGUuY29t
PgorCisgICAgICAgIENsZWFuIHVwIG5hbWluZyBmb3IgYW5kIHNsaWdodGx5IHJlZmFjdG9yIGxl
Z2FjeSB2aWRlbyBmdWxsc2NyZWVuIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjQ0NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEtleSBjaGFuZ2VzOgorICAgICAgICBzdXBwb3J0c0Z1bGxz
Y3JlZW5Gb3JOb2RlKE5vZGUqKSAtLT4gc3VwcG9ydHNWaWRlb0Z1bGxzY3JlZW4oKQorICAgICAg
ICBlbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqKSAtLT4gZW50ZXJWaWRlb0Z1bGxzY3JlZW5G
b3JWaWRlb0VsZW1lbnQoSFRNTFZpZGVvRWxlbWVudCopCisgICAgICAgIGV4aXRGdWxsc2NyZWVu
Rm9yTm9kZShOb2RlKikgLS0+IGV4aXRWaWRlb0Z1bGxzY3JlZW4oKQorICAgICAgICAKKyAgICAg
ICAgVGhlIG9sZCB2ZXJzaW9ucyBoYWQgdW5uZWNlc3NhcnkgcGFyYW1ldGVycywgZGlkIG5vdCBj
bGVhcmx5IGRpc3Rpbmd1aXNoIHRoZWlyIHB1cnBvc2UKKyAgICAgICAgZnJvbSBlbnRlckZ1bGxz
Y3JlZW5Gb3JFbGVtZW50IGFuZCBmcmllbmRzLCBhbmQgd3JvbmdseSBjbGFpbWVkIGdlbmVyYWxp
dHkgdG8gYWxsIE5vZGVzLgorICAgICAgICBBbHNvIGNoYW5nZWQgbWFueSBvdGhlciBwbGFjZXMg
dG8gdXNlIEhUTUxWaWRlb0VsZW1lbnQqIGluc3RlYWQgb2YgTm9kZSogb3IgCisgICAgICAgIEhU
TUxNZWRpYUVsZW1lbnQqIHdoZW4gdGhleSB3ZXJlIGluIGZhY3Qgb25seSB1c2VkIGZvciB2aWRl
byBlbGVtZW50cyBhbmQgd291bGQgb25seQorICAgICAgICB3b3JrIGZvciBzdWNoLgorCisgICAg
ICAgIExlZ2FjeSB2aWRlbyBmdWxsc2NyZWVuIGluIFdlYktpdDIgaXMgb25seSBzdXBwb3J0ZWQg
b24gaU9TIChmb3Igb3RoZXIgcG9ydHMgdGhhdCBzdXBwb3J0CisgICAgICAgIGl0LCBpdCdzIFdL
MSBvbmx5KS4KKyAgICAgICAgCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OnN1
cHBvcnRzVmlkZW9GdWxsc2NyZWVuKTogQWRqdXN0IGZvciByZW5hbWVzIGFzCisgICAgICAgIG1l
bnRpb25lZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjplbnRlclZpZGVvRnVs
bHNjcmVlbkZvclZpZGVvRWxlbWVudCk6IGRpdHRvCisgICAgICAgIChXZWJLaXQ6OldlYkNocm9t
ZUNsaWVudDo6ZXhpdFZpZGVvRnVsbHNjcmVlbik6IGRpdHRvCisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNz
L2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9p
b3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbToKKyAgICAgICAgKFdlYktpdDo6Y2xpZW50
UmVjdEZvckVsZW1lbnQpOiBObyBuZWVkIHRvIGJlIGdlbmVyaWMgdG8gbm9kZS4KKyAgICAgICAg
KFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c3VwcG9ydHNWaWRlb0Z1bGxzY3Jl
ZW4pOiBBZGp1c3QgZm9yIHRoZQorICAgICAgICBtYWluIHJlZmFjdG9yaW5nLiBBbHNvIGNoYW5n
ZSBtX25vZGUgdG8gbV92aWRlb0VsZW1lbnQgd2l0aCBhcHByb3ByaWF0ZSB0eXBlIGNoYW5nZS4K
KyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW50ZXJWaWRlb0Z1
bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQpOiBkaXR0bworICAgICAgICAoV2ViS2l0OjpXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOjpleGl0VmlkZW9GdWxsc2NyZWVuKTogZGl0dG8KKyAgICAgICAg
KFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRW50ZXJGdWxsc2NyZWVuKTog
ZGl0dG8gCisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZEV4
aXRGdWxsc2NyZWVuKTogZGl0dG8KKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlcjo6ZGlkQ2xlYW51cEZ1bGxzY3JlZW4pOiBkaXR0bworCiAyMDE0LTA5LTAyICBQaGls
aXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
LCBHVEsgYnVpbGQgZml4IGFmdGVyIHIxNzMxNjMuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
Y3BwCShyZXZpc2lvbiAxNzMxODIpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwMiwxOSAr
OTAyLDE5IEBAIFBhc3NSZWZQdHI8U2Nyb2xsaW5nQ29vcmRpbmF0b3I+IFdlYkNocm8KICNlbmRp
ZgogCiAjaWYgUExBVEZPUk0oSU9TKQotYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnN1cHBvcnRzRnVs
bHNjcmVlbkZvck5vZGUoY29uc3QgV2ViQ29yZTo6Tm9kZSogbm9kZSkKK2Jvb2wgV2ViQ2hyb21l
Q2xpZW50OjpzdXBwb3J0c1ZpZGVvRnVsbHNjcmVlbigpCiB7Ci0gICAgcmV0dXJuIG1fcGFnZS0+
dmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpLT5zdXBwb3J0c0Z1bGxzY3JlZW4obm9kZSk7CisgICAg
cmV0dXJuIG1fcGFnZS0+dmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpLT5zdXBwb3J0c1ZpZGVvRnVs
bHNjcmVlbigpOwogfQogCi12b2lkIFdlYkNocm9tZUNsaWVudDo6ZW50ZXJGdWxsc2NyZWVuRm9y
Tm9kZShXZWJDb3JlOjpOb2RlKiBub2RlKQordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmVudGVyVmlk
ZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQqIHZp
ZGVvRWxlbWVudCkKIHsKLSAgICBtX3BhZ2UtPnZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoKS0+ZW50
ZXJGdWxsc2NyZWVuRm9yTm9kZShub2RlKTsKKyAgICBtX3BhZ2UtPnZpZGVvRnVsbHNjcmVlbk1h
bmFnZXIoKS0+ZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQodmlkZW9FbGVtZW50
KTsKIH0KIAotdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmV4aXRGdWxsc2NyZWVuRm9yTm9kZShXZWJD
b3JlOjpOb2RlKiBub2RlKQordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmV4aXRWaWRlb0Z1bGxzY3Jl
ZW4oKQogewotICAgIG1fcGFnZS0+dmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpLT5leGl0RnVsbHNj
cmVlbkZvck5vZGUobm9kZSk7CisgICAgbV9wYWdlLT52aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCkt
PmV4aXRWaWRlb0Z1bGxzY3JlZW4oKTsKIH0KICNlbmRpZgogICAgIApJbmRleDogU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5oCShyZXZpc2lvbiAxNzMxODIpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMs
OSArMjUzLDkgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TKQotICAgIHZp
cnR1YWwgYm9vbCBzdXBwb3J0c0Z1bGxzY3JlZW5Gb3JOb2RlKGNvbnN0IFdlYkNvcmU6Ok5vZGUq
KTsKLSAgICB2aXJ0dWFsIHZvaWQgZW50ZXJGdWxsc2NyZWVuRm9yTm9kZShXZWJDb3JlOjpOb2Rl
Kik7Ci0gICAgdmlydHVhbCB2b2lkIGV4aXRGdWxsc2NyZWVuRm9yTm9kZShXZWJDb3JlOjpOb2Rl
Kik7CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzVmlkZW9GdWxsc2NyZWVuKCk7CisgICAgdmly
dHVhbCB2b2lkIGVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KFdlYkNvcmU6OkhU
TUxWaWRlb0VsZW1lbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZXhpdFZpZGVvRnVsbHNjcmVlbigp
OwogI2VuZGlmCiAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlci5oCShyZXZpc2lvbiAxNzMxODIpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2lv
cy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMx
LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0V2ZW50TGlzdGVuZXIuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1BsYXRmb3JtQ0FMYXllci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bE1lZGlhRWxlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KIApAQCAtNTAsMTYgKzUwLDE2IEBAIG5hbWVzcGFjZSBXZWJLaXQgewog
Y2xhc3MgTGF5ZXJIb3N0aW5nQ29udGV4dDsKIGNsYXNzIFdlYlBhZ2U7CiAKLWNsYXNzIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXIgOiBwdWJsaWMgV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxNZWRpYUVsZW1lbnQsIHB1YmxpYyBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2UsIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworY2xhc3MgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlciA6IHB1YmxpYyBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZp
ZGVvRWxlbWVudCwgcHVibGljIFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSwg
cHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4gY3JlYXRlKFBhc3NSZWZQdHI8V2ViUGFn
ZT4pOwogICAgIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoKTsKICAgICAKICAg
ICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiosIElQQzo6TWVzc2FnZURl
Y29kZXImKTsKICAgICAKLSAgICBib29sIHN1cHBvcnRzRnVsbHNjcmVlbihjb25zdCBXZWJDb3Jl
OjpOb2RlKikgY29uc3Q7Ci0gICAgdm9pZCBlbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKFdlYkNvcmU6
Ok5vZGUqKTsKLSAgICB2b2lkIGV4aXRGdWxsc2NyZWVuRm9yTm9kZShXZWJDb3JlOjpOb2RlKik7
CisgICAgYm9vbCBzdXBwb3J0c1ZpZGVvRnVsbHNjcmVlbigpIGNvbnN0OworICAgIHZvaWQgZW50
ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVu
dCopOworICAgIHZvaWQgZXhpdFZpZGVvRnVsbHNjcmVlbigpOwogICAgIAogcHJvdGVjdGVkOgog
ICAgIGV4cGxpY2l0IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoUGFzc1JlZlB0cjxXZWJQYWdl
Pik7CkBAIC04NSw3ICs4NSw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgc2V0Vmlk
ZW9MYXllckdyYXZpdHlFbnVtKHVuc2lnbmVkKTsKICAgICAKICAgICBXZWJQYWdlKiBtX3BhZ2U7
Ci0gICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IG1fbm9kZTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6
SFRNTFZpZGVvRWxlbWVudD4gbV92aWRlb0VsZW1lbnQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPExh
eWVySG9zdGluZ0NvbnRleHQ+IG1fbGF5ZXJIb3N0aW5nQ29udGV4dDsKICAgICAKICAgICBib29s
IG1faXNBbmltYXRpbmc7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2lvcy9XZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0JKHJldmlzaW9uIDE3MzE4
MikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTUwLDEyICs1MCwxMiBAQCB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLXN0YXRpYyBJbnRSZWN0IGNsaWVu
dFJlY3RGb3JOb2RlKE5vZGUqIG5vZGUpCitzdGF0aWMgSW50UmVjdCBjbGllbnRSZWN0Rm9yRWxl
bWVudChIVE1MRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlz
RWxlbWVudE5vZGUoKSkKKyAgICBpZiAoIWVsZW1lbnQpCiAgICAgICAgIHJldHVybiBJbnRSZWN0
KCk7CiAKLSAgICByZXR1cm4gdG9FbGVtZW50KG5vZGUpLT5jbGllbnRSZWN0KCk7CisgICAgcmV0
dXJuIGVsZW1lbnQtPmNsaWVudFJlY3QoKTsKIH0KIAogUGFzc1JlZlB0cjxXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyPiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpjcmVhdGUoUGFzc1JlZlB0
cjxXZWJQYWdlPiBwYWdlKQpAQCAtNzgsMzggKzc4LDM4IEBAIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6On5XZWJWaWRlb0Z1bGwKICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5yZW1vdmVNZXNz
YWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Om1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLWJvb2wgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6c3VwcG9ydHNGdWxsc2NyZWVuKGNvbnN0IE5vZGUqIG5vZGUpIGNvbnN0
Citib29sIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnN1cHBvcnRzVmlkZW9GdWxsc2NyZWVu
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gU2V0dGluZ3M6OmF2S2l0RW5hYmxlZCgpICYmIGlzSFRN
TFZpZGVvRWxlbWVudChub2RlKTsKKyAgICByZXR1cm4gU2V0dGluZ3M6OmF2S2l0RW5hYmxlZCgp
OwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVudGVyRnVsbHNjcmVlbkZv
ck5vZGUoTm9kZSogbm9kZSkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW50ZXJW
aWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoSFRNTFZpZGVvRWxlbWVudCogdmlkZW9FbGVt
ZW50KQogewotICAgIEFTU0VSVChub2RlKTsKLSAgICBtX25vZGUgPSBub2RlOworICAgIG1fdmlk
ZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50OworCiAgICAgbV90YXJnZXRJc0Z1bGxzY3JlZW4gPSB0
cnVlOwogCiAgICAgaWYgKG1faXNBbmltYXRpbmcpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1f
aXNBbmltYXRpbmcgPSB0cnVlOwotICAgIHNldE1lZGlhRWxlbWVudCh0b0hUTUxNZWRpYUVsZW1l
bnQobm9kZSkpOworICAgIHNldFZpZGVvRWxlbWVudCh2aWRlb0VsZW1lbnQpOwogCiAgICAgbV9s
YXllckhvc3RpbmdDb250ZXh0ID0gTGF5ZXJIb3N0aW5nQ29udGV4dDo6Y3JlYXRlRm9yRXh0ZXJu
YWxIb3N0aW5nUHJvY2VzcygpOwogICAgIAotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpTZXR1cEZ1bGxzY3JlZW5XaXRoSUQobV9sYXll
ckhvc3RpbmdDb250ZXh0LT5jb250ZXh0SUQoKSwgY2xpZW50UmVjdEZvck5vZGUobm9kZSkpLCBt
X3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eTo6U2V0dXBGdWxsc2NyZWVuV2l0aElEKG1fbGF5ZXJIb3N0aW5n
Q29udGV4dC0+Y29udGV4dElEKCksIGNsaWVudFJlY3RGb3JFbGVtZW50KHZpZGVvRWxlbWVudCkp
LCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
OjpleGl0RnVsbHNjcmVlbkZvck5vZGUoTm9kZSogbm9kZSkKK3ZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcjo6ZXhpdFZpZGVvRnVsbHNjcmVlbigpCiB7Ci0gICAgbV9ub2RlLmNsZWFyKCk7
CisgICAgUmVmUHRyPEhUTUxWaWRlb0VsZW1lbnQ+IHZpZGVvRWxlbWVudCA9IG1fdmlkZW9FbGVt
ZW50LnJlbGVhc2UoKTsKICAgICBtX3RhcmdldElzRnVsbHNjcmVlbiA9IGZhbHNlOwogCiAgICAg
aWYgKG1faXNBbmltYXRpbmcpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1faXNBbmltYXRpbmcg
PSB0cnVlOwotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpFeGl0RnVsbHNjcmVlbihjbGllbnRSZWN0Rm9yTm9kZShub2RlKSksIG1fcGFn
ZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjpFeGl0RnVsbHNjcmVlbihjbGllbnRSZWN0Rm9yRWxlbWVudCh2aWRl
b0VsZW1lbnQuZ2V0KCkpKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKIHZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6c2V0RHVyYXRpb24oZG91YmxlIGR1cmF0aW9uKQpAQCAtMTkxLDkg
KzE5MSw5IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRW50ZXIKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgLy8gZXhpdCBmdWxsc2NyZWVuIG5vdyBpZiBpdCB3YXMgcHJldmlv
dXNseSByZXF1ZXN0ZWQgZHVyaW5nIGFuIGFuaW1hdGlvbi4KLSAgICBfX2Jsb2NrIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKKyAgICBf
X2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gcHJvdGVj
dCh0aGlzKTsKICAgICBXZWJUaHJlYWRSdW4oXiB7Ci0gICAgICAgIGV4aXRGdWxsc2NyZWVuRm9y
Tm9kZShtX25vZGUuZ2V0KCkpOworICAgICAgICBleGl0VmlkZW9GdWxsc2NyZWVuKCk7CiAgICAg
ICAgIHByb3RlY3QuY2xlYXIoKTsKICAgICB9KTsKIH0KQEAgLTIwMSw3ICsyMDEsNyBAQCB2b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZEVudGVyCiB2b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6OmRpZEV4aXRGdWxsc2NyZWVuKCkKIHsKICAgICBzZXRWaWRlb0Z1bGxzY3Jl
ZW5MYXllcihuaWwpOwotICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
TWVkaWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOworICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBwcm90ZWN0KHRoaXMpOwogCiAgICAgZGlzcGF0
Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKICAgICAgICAgbV9sYXllckhv
c3RpbmdDb250ZXh0LT5zZXRSb290TGF5ZXIobnVsbHB0cik7CkBAIC0yMTYsMTUgKzIxNiwxNSBA
QCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZENsZWFuCiAgICAgbV9pc0FuaW1h
dGluZyA9IGZhbHNlOwogICAgIG1faXNGdWxsc2NyZWVuID0gZmFsc2U7CiAgICAgCi0gICAgc2V0
TWVkaWFFbGVtZW50KG51bGxwdHIpOworICAgIHNldFZpZGVvRWxlbWVudChudWxscHRyKTsKIAog
ICAgIGlmICghbV90YXJnZXRJc0Z1bGxzY3JlZW4pCiAgICAgICAgIHJldHVybjsKIAogICAgIC8v
IGVudGVyIGZ1bGxzY3JlZW4gbm93IGlmIGl0IHdhcyBwcmV2aW91c2x5IHJlcXVlc3RlZCBkdXJp
bmcgYW4gYW5pbWF0aW9uLgotICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsTWVkaWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOworICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBwcm90ZWN0KHRoaXMpOwogICAgIFdlYlRo
cmVhZFJ1biheIHsKLSAgICAgICAgZW50ZXJGdWxsc2NyZWVuRm9yTm9kZShtX25vZGUuZ2V0KCkp
OworICAgICAgICBlbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChtX3ZpZGVvRWxl
bWVudC5nZXQoKSk7CiAgICAgICAgIHByb3RlY3QuY2xlYXIoKTsKICAgICB9KTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MzE4MikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDE0LTA5LTAyICBNYWNp
ZWogU3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CisKKyAgICAgICAgQ2xlYW4gdXAgbmFtaW5n
IGZvciBhbmQgc2xpZ2h0bHkgcmVmYWN0b3IgbGVnYWN5IHZpZGVvIGZ1bGxzY3JlZW4gc3VwcG9y
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2NDQ2
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgS2V5IGNo
YW5nZXM6CisgICAgICAgIHN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUoTm9kZSopIC0tPiBzdXBw
b3J0c1ZpZGVvRnVsbHNjcmVlbigpCisgICAgICAgIGVudGVyRnVsbHNjcmVlbkZvck5vZGUoTm9k
ZSopIC0tPiBlbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChIVE1MVmlkZW9FbGVt
ZW50KikKKyAgICAgICAgZXhpdEZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqKSAtLT4gZXhpdFZpZGVv
RnVsbHNjcmVlbigpCisgICAgICAgIAorICAgICAgICBUaGUgb2xkIHZlcnNpb25zIGhhZCB1bm5l
Y2Vzc2FyeSBwYXJhbWV0ZXJzLCBkaWQgbm90IGNsZWFybHkgZGlzdGluZ3Vpc2ggdGhlaXIgcHVy
cG9zZQorICAgICAgICBmcm9tIGVudGVyRnVsbHNjcmVlbkZvckVsZW1lbnQgYW5kIGZyaWVuZHMs
IGFuZCB3cm9uZ2x5IGNsYWltZWQgZ2VuZXJhbGl0eSB0byBhbGwgTm9kZXMuCisgICAgICAgIEFs
c28gY2hhbmdlZCBtYW55IG90aGVyIHBsYWNlcyB0byB1c2UgSFRNTFZpZGVvRWxlbWVudCogaW5z
dGVhZCBvZiBOb2RlKiBvciAKKyAgICAgICAgSFRNTE1lZGlhRWxlbWVudCogd2hlbiB0aGV5IHdl
cmUgaW4gZmFjdCBvbmx5IHVzZWQgZm9yIHZpZGVvIGVsZW1lbnRzIGFuZCB3b3VsZCBvbmx5Cisg
ICAgICAgIHdvcmsgZm9yIHN1Y2guCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQuaDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW06
CisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OnN1cHBvcnRzVmlkZW9GdWxsc2NyZWVuKTogQWRq
dXN0IGZvciBtYWluIHJlZmFjdG9yaW5nLgorICAgICAgICBBbHNvIG5vIG1vcmUgbmVlZCB0byBj
aGVjayBmb3IgdmlkZW8gZWxlbWVudG5lc3MuCisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OmVu
dGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KTogQWRqdXN0IGZvciBtYWluIHJlZmFj
dG9yaW5nLgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50OjpleGl0VmlkZW9GdWxsc2NyZWVuKTog
ZGl0dG8KKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAgICgtW1dlYlZpZXcg
X2VudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50Ol0pOiBBZGp1c3QgZm9yIG1haW4K
KyAgICAgICAgcmVmYWN0b3JpbmcuCisgICAgICAgICgtW1dlYlZpZXcgX2V4aXRWaWRlb0Z1bGxz
Y3JlZW5dKTogZGl0dG8KKyAgICAgICAgKC1bV2ViVmlldyBfY2xvc2VdKTogZGl0dG8KKyAgICAg
ICAgKiBXZWJWaWV3L1dlYlZpZXdJbnRlcm5hbC5oOgorCiAyMDE0LTA4LTMxICBUaW0gSG9ydG9u
ICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSB1bm5lY2Vzc2Fy
eSAoYW5kIHVubmVjZXNzYXJpbHkgaU9TLXNwZWNpZmljKSBzZXRTdHJva2VBbmRGaWxsQ29sb3IK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5oCShyZXZpc2lvbiAxNzMxODIpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTgwLDkgKzE4MCw5
IEBAIHB1YmxpYzoKICAgICB9CiAKICNpZiBFTkFCTEUoVklERU8pCi0gICAgdmlydHVhbCBib29s
IHN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUoY29uc3QgV2ViQ29yZTo6Tm9kZSopIG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKFdlYkNvcmU6Ok5vZGUq
KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxzY3JlZW5Gb3JOb2RlKFdlYkNv
cmU6Ok5vZGUqKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNWaWRlb0Z1bGxz
Y3JlZW4oKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJWaWRlb0Z1bGxzY3JlZW5G
b3JWaWRlb0VsZW1lbnQoV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCopIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCBleGl0VmlkZW9GdWxsc2NyZWVuKCkgb3ZlcnJpZGU7CiAjZW5kaWYKICAg
ICAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCShyZXZpc2lvbiAxNzMx
ODIpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTk0MCwyNiArOTQwLDI2IEBAIHZvaWQgV2ViQ2hyb21lQ2xp
ZW50OjpzY2hlZHVsZUNvbXBvc2l0aW4KIAogI2lmIEVOQUJMRShWSURFTykKIAotYm9vbCBXZWJD
aHJvbWVDbGllbnQ6OnN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUoY29uc3QgTm9kZSogbm9kZSkK
K2Jvb2wgV2ViQ2hyb21lQ2xpZW50OjpzdXBwb3J0c1ZpZGVvRnVsbHNjcmVlbigpCiB7CiAjaWYg
UExBVEZPUk0oSU9TKQogICAgIGlmICghU2V0dGluZ3M6OmF2S2l0RW5hYmxlZCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKLSAgICByZXR1cm4gaXNIVE1MVmlkZW9FbGVtZW50KG5v
ZGUpOworICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFdlYkNocm9tZUNsaWVudDo6ZW50ZXJG
dWxsc2NyZWVuRm9yTm9kZShOb2RlKiBub2RlKQordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmVudGVy
VmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvRWxl
bWVudCkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgW21fd2ViVmll
dyBfZW50ZXJGdWxsc2NyZWVuRm9yTm9kZTpub2RlXTsKKyAgICBbbV93ZWJWaWV3IF9lbnRlclZp
ZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudDp2aWRlb0VsZW1lbnRdOwogICAgIEVORF9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKLXZvaWQgV2ViQ2hyb21lQ2xpZW50OjpleGl0RnVsbHNj
cmVlbkZvck5vZGUoTm9kZSopCit2b2lkIFdlYkNocm9tZUNsaWVudDo6ZXhpdFZpZGVvRnVsbHNj
cmVlbigpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIFttX3dlYlZp
ZXcgX2V4aXRGdWxsc2NyZWVuXTsKKyAgICBbbV93ZWJWaWV3IF9leGl0VmlkZW9GdWxsc2NyZWVu
XTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOyAgICAKIH0KIApJbmRleDogU291cmNl
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkocmV2aXNpb24gMTczMTgyKQorKysgU291cmNlL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNyArMTM0
LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvR0NDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L0dlb2xvY2F0aW9uQ29udHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9HZW9sb2NhdGlvbkVy
cm9yLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0hUTUxNZWRpYUVsZW1lbnQuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvSFRNTFZpZGVvRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MTmFtZXMuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvSGlzdG9yeUNvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUv
SGlzdG9yeUl0ZW0uaD4KQEAgLTE2OTksNyArMTY5OSw3IEBAIC0gKHZvaWQpX2Nsb3NlCiAgICAg
fQogCiAjaWYgRU5BQkxFKFZJREVPKSAmJiAhUExBVEZPUk0oSU9TKQotICAgIFtzZWxmIF9leGl0
RnVsbHNjcmVlbl07CisgICAgW3NlbGYgX2V4aXRWaWRlb0Z1bGxzY3JlZW5dOwogI2VuZGlmCiAK
ICNpZiBQTEFURk9STShJT1MpCkBAIC04Mzg4LDI4ICs4Mzg4LDI1IEBAIC0gKHZvaWQpX3NjaGVk
dWxlTGF5ZXJGbHVzaEZvclBlbmRpbmdUaWwKICNlbmRpZgogCiAjaWYgRU5BQkxFKFZJREVPKQot
LSAodm9pZClfZW50ZXJGdWxsc2NyZWVuRm9yTm9kZTooV2ViQ29yZTo6Tm9kZSopbm9kZQorLSAo
dm9pZClfZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQ6KFdlYkNvcmU6OkhUTUxW
aWRlb0VsZW1lbnQqKXZpZGVvRWxlbWVudAogewotICAgIEFTU0VSVChpc0hUTUxWaWRlb0VsZW1l
bnQobm9kZSkpOwotICAgIEhUTUxNZWRpYUVsZW1lbnQqIHZpZGVvRWxlbWVudCA9IHRvSFRNTE1l
ZGlhRWxlbWVudChub2RlKTsKLQogICAgIGlmIChfcHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRyb2xs
ZXIpIHsKLSAgICAgICAgaWYgKFtfcHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRyb2xsZXIgbWVkaWFF
bGVtZW50XSA9PSB2aWRlb0VsZW1lbnQpIHsKKyAgICAgICAgaWYgKFtfcHJpdmF0ZS0+ZnVsbHNj
cmVlbkNvbnRyb2xsZXIgdmlkZW9FbGVtZW50XSA9PSB2aWRlb0VsZW1lbnQpIHsKICAgICAgICAg
ICAgIC8vIFRoZSBiYWNrZW5kIG1heSBqdXN0IHdhcm4gdXMgdGhhdCB0aGUgdW5kZXJsYXlpbmcg
cGxhZnRvcm1Nb3ZpZSgpCiAgICAgICAgICAgICAvLyBoYXMgY2hhbmdlZC4gSnVzdCBmb3JjZSBh
biB1cGRhdGUuCi0gICAgICAgICAgICBbX3ByaXZhdGUtPmZ1bGxzY3JlZW5Db250cm9sbGVyIHNl
dE1lZGlhRWxlbWVudDp2aWRlb0VsZW1lbnRdOworICAgICAgICAgICAgW19wcml2YXRlLT5mdWxs
c2NyZWVuQ29udHJvbGxlciBzZXRWaWRlb0VsZW1lbnQ6dmlkZW9FbGVtZW50XTsKICAgICAgICAg
ICAgIHJldHVybjsgLy8gTm8gbW9yZSB0byBkby4KICAgICAgICAgfQogCi0gICAgICAgIC8vIEZp
cnN0IGV4aXQgRnVsbHNjcmVlbiBmb3IgdGhlIG9sZCBtZWRpYUVsZW1lbnQuCi0gICAgICAgIFtf
cHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRyb2xsZXIgbWVkaWFFbGVtZW50XS0+ZXhpdEZ1bGxzY3Jl
ZW4oKTsKKyAgICAgICAgLy8gRmlyc3QgZXhpdCBGdWxsc2NyZWVuIGZvciB0aGUgb2xkIHZpZGVv
RWxlbWVudC4KKyAgICAgICAgW19wcml2YXRlLT5mdWxsc2NyZWVuQ29udHJvbGxlciB2aWRlb0Vs
ZW1lbnRdLT5leGl0RnVsbHNjcmVlbigpOwogICAgICAgICAvLyBUaGlzIHByZXZpb3VzIGNhbGwg
aGFzIHRvIHRyaWdnZXIgX2V4aXRGdWxsc2NyZWVuLAogICAgICAgICAvLyB3aGljaCBoYXMgdG8g
Y2xlYXIgX3ByaXZhdGUtPmZ1bGxzY3JlZW5Db250cm9sbGVyLgogICAgICAgICBBU1NFUlQoIV9w
cml2YXRlLT5mdWxsc2NyZWVuQ29udHJvbGxlcik7CiAgICAgfQogICAgIGlmICghX3ByaXZhdGUt
PmZ1bGxzY3JlZW5Db250cm9sbGVyKSB7CiAgICAgICAgIF9wcml2YXRlLT5mdWxsc2NyZWVuQ29u
dHJvbGxlciA9IFtbV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciBhbGxvY10gaW5pdF07Ci0g
ICAgICAgIFtfcHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRyb2xsZXIgc2V0TWVkaWFFbGVtZW50OnZp
ZGVvRWxlbWVudF07CisgICAgICAgIFtfcHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRyb2xsZXIgc2V0
VmlkZW9FbGVtZW50OnZpZGVvRWxlbWVudF07CiAjaWYgUExBVEZPUk0oSU9TKQogICAgICAgICBb
X3ByaXZhdGUtPmZ1bGxzY3JlZW5Db250cm9sbGVyIGVudGVyRnVsbHNjcmVlbjooVUlWaWV3ICop
W1tbc2VsZiB3aW5kb3ddIGhvc3RMYXllcl0gZGVsZWdhdGVdXTsKICNlbHNlCkBAIC04NDE3LDEw
ICs4NDE0LDEwIEBAIC0gKHZvaWQpX2VudGVyRnVsbHNjcmVlbkZvck5vZGU6KFdlYkNvcmUKICNl
bmRpZgogICAgIH0KICAgICBlbHNlCi0gICAgICAgIFtfcHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRy
b2xsZXIgc2V0TWVkaWFFbGVtZW50OnZpZGVvRWxlbWVudF07CisgICAgICAgIFtfcHJpdmF0ZS0+
ZnVsbHNjcmVlbkNvbnRyb2xsZXIgc2V0VmlkZW9FbGVtZW50OnZpZGVvRWxlbWVudF07CiB9CiAK
LS0gKHZvaWQpX2V4aXRGdWxsc2NyZWVuCistICh2b2lkKV9leGl0VmlkZW9GdWxsc2NyZWVuCiB7
CiAgICAgaWYgKCFfcHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRyb2xsZXIpCiAgICAgICAgIHJldHVy
bjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0ludGVybmFsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3SW50ZXJuYWwuaAko
cmV2aXNpb24gMTczMTgyKQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3SW50
ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBjbGFzcyBVUkw7CiBjbGFz
cyBLZXlib2FyZEV2ZW50OwogY2xhc3MgUGFnZTsKIGNsYXNzIFJlbmRlckJveDsKLWNsYXNzIE5v
ZGU7CitjbGFzcyBIVE1MVmlkZW9FbGVtZW50Owogc3RydWN0IERpY3RhdGlvbkFsdGVybmF0aXZl
OwogfQogI2VuZGlmCkBAIC0yMzMsOCArMjMzLDggQEAgQGludGVyZmFjZSBXZWJWaWV3IChXZWJW
aWV3T3RoZXJJbnRlcm5hbAogLSAodm9pZClfcHJlZmVyZW5jZXNDaGFuZ2VkOihXZWJQcmVmZXJl
bmNlcyAqKXByZWZlcmVuY2VzOwogCiAjaWYgRU5BQkxFKFZJREVPKSAmJiBkZWZpbmVkKF9fY3Bs
dXNwbHVzKQotLSAodm9pZClfZW50ZXJGdWxsc2NyZWVuRm9yTm9kZTooV2ViQ29yZTo6Tm9kZSop
bm9kZTsKLS0gKHZvaWQpX2V4aXRGdWxsc2NyZWVuOworLSAodm9pZClfZW50ZXJWaWRlb0Z1bGxz
Y3JlZW5Gb3JWaWRlb0VsZW1lbnQ6KFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQqKXZpZGVvRWxl
bWVudDsKKy0gKHZvaWQpX2V4aXRWaWRlb0Z1bGxzY3JlZW47CiAjZW5kaWYKIAogI2lmIEVOQUJM
RShGVUxMU0NSRUVOX0FQSSkgJiYgIVBMQVRGT1JNKElPUykgJiYgZGVmaW5lZChfX2NwbHVzcGx1
cykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MzE4MikKKysrIFNvdXJjZS9XZWJL
aXQvd2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBACisyMDE0LTA5
LTAyICBNYWNpZWogU3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CisKKyAgICAgICAgQ2xlYW4g
dXAgbmFtaW5nIGZvciBhbmQgc2xpZ2h0bHkgcmVmYWN0b3IgbGVnYWN5IHZpZGVvIGZ1bGxzY3Jl
ZW4gc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTM2NDQ2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgS2V5IGNoYW5nZXM6CisgICAgICAgIHN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUoTm9kZSop
IC0tPiBzdXBwb3J0c1ZpZGVvRnVsbHNjcmVlbigpCisgICAgICAgIGVudGVyRnVsbHNjcmVlbkZv
ck5vZGUoTm9kZSopIC0tPiBlbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChIVE1M
VmlkZW9FbGVtZW50KikKKyAgICAgICAgZXhpdEZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqKSAtLT4g
ZXhpdFZpZGVvRnVsbHNjcmVlbigpCisgICAgICAgIAorICAgICAgICBUaGUgb2xkIHZlcnNpb25z
IGhhZCB1bm5lY2Vzc2FyeSBwYXJhbWV0ZXJzLCBkaWQgbm90IGNsZWFybHkgZGlzdGluZ3Vpc2gg
dGhlaXIgcHVycG9zZQorICAgICAgICBmcm9tIGVudGVyRnVsbHNjcmVlbkZvckVsZW1lbnQgYW5k
IGZyaWVuZHMsIGFuZCB3cm9uZ2x5IGNsYWltZWQgZ2VuZXJhbGl0eSB0byBhbGwgTm9kZXMuCisg
ICAgICAgIEFsc28gY2hhbmdlZCBtYW55IG90aGVyIHBsYWNlcyB0byB1c2UgSFRNTFZpZGVvRWxl
bWVudCogaW5zdGVhZCBvZiBOb2RlKiBvciAKKyAgICAgICAgSFRNTE1lZGlhRWxlbWVudCogd2hl
biB0aGV5IHdlcmUgaW4gZmFjdCBvbmx5IHVzZWQgZm9yIHZpZGVvIGVsZW1lbnRzIGFuZCB3b3Vs
ZCBvbmx5CisgICAgICAgIHdvcmsgZm9yIHN1Y2guCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQuY3BwOgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50OjpzdXBwb3J0
c1ZpZGVvRnVsbHNjcmVlbik6IEFkanVzdCBmb3IgdGhlCisgICAgICAgIG1haW4gcmVmYWN0b3Jp
bmcuCisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OmVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlk
ZW9FbGVtZW50KTogZGl0dG8KKyAgICAgICAgKFdlYkNocm9tZUNsaWVudDo6ZXhpdFZpZGVvRnVs
bHNjcmVlbik6IGRpdHRvCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
Lmg6CisgICAgICAgICogV2ViVmlldy5jcHA6CisgICAgICAgIChXZWJWaWV3OjplbnRlclZpZGVv
RnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudCk6IEFkanVzdCBmb3IgdGhlIAorICAgICAgICBtYWlu
IHJlZmFjdG9yaW5nLgorICAgICAgICAoV2ViVmlldzo6ZXhpdFZpZGVvRnVsbHNjcmVlbik6IGRp
dHRvLgorICAgICAgICAqIFdlYlZpZXcuaDoKKwogMjAxNC0wOC0yNiAgQnJlbnQgRnVsZ2hhbSAg
PGJmdWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2luXSBXZWJLaXQgSURMIGluY29ycmVj
dGx5IHBhc3NlcyBIV05EIGFzIE9MRV9IQU5ETEUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dl
YlZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCShy
ZXZpc2lvbiAxNzMxODIpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjI2NywxNiArNjI2Nyw5IEBAIEhSRVNVTFQgV2ViVmlldzo6c2V0Q2FuU3Rh
cnRQbHVnaW5zKEJPT0wKICAgICByZXR1cm4gU19PSzsKIH0KIAotdm9pZCBXZWJWaWV3OjplbnRl
ckZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqIG5vZGUpCit2b2lkIFdlYlZpZXc6OmVudGVyVmlkZW9G
dWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvRWxlbWVudCkK
IHsKICNpZiBFTkFCTEUoVklERU8pICYmICFVU0UoR1NUUkVBTUVSKSAmJiAhVVNFKE1FRElBX0ZP
VU5EQVRJT04pCi0gICAgaWYgKCFpc0hUTUxWaWRlb0VsZW1lbnQobm9kZSkgfHwgIW5vZGUtPmlz
RWxlbWVudE5vZGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCF0b0VsZW1lbnQobm9k
ZSktPmlzTWVkaWFFbGVtZW50KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBIVE1MTWVkaWFFbGVt
ZW50KiB2aWRlb0VsZW1lbnQgPSB0b0hUTUxNZWRpYUVsZW1lbnQobm9kZSk7Ci0KICAgICBpZiAo
bV9mdWxsU2NyZWVuVmlkZW9Db250cm9sbGVyKSB7CiAgICAgICAgIGlmIChtX2Z1bGxTY3JlZW5W
aWRlb0NvbnRyb2xsZXItPm1lZGlhRWxlbWVudCgpID09IHZpZGVvRWxlbWVudCkgewogICAgICAg
ICAgICAgLy8gVGhlIGJhY2tlbmQgbWF5IGp1c3Qgd2FybiB1cyB0aGF0IHRoZSB1bmRlcmxheWlu
ZyBwbGFmdG9ybU1vdmllKCkKQEAgLTYyOTgsNyArNjI5MSw3IEBAIHZvaWQgV2ViVmlldzo6ZW50
ZXJGdWxsc2NyZWVuRm9yTm9kZShOb2QKICNlbmRpZgogfQogCi12b2lkIFdlYlZpZXc6OmV4aXRG
dWxsc2NyZWVuKCkKK3ZvaWQgV2ViVmlldzo6ZXhpdFZpZGVvRnVsbHNjcmVlbigpCiB7CiAjaWYg
RU5BQkxFKFZJREVPKSAmJiAhVVNFKEdTVFJFQU1FUikgJiYgIVVTRShNRURJQV9GT1VOREFUSU9O
KQogICAgIGlmICghbV9mdWxsU2NyZWVuVmlkZW9Db250cm9sbGVyKQpJbmRleDogU291cmNlL1dl
YktpdC93aW4vV2ViVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYlZp
ZXcuaAkocmV2aXNpb24gMTczMTgyKQorKysgU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5oCSh3
b3JraW5nIGNvcHkpCkBAIC05NDAsOCArOTQwLDggQEAgcHVibGljOgogICAgIFdlYkNvcmU6Okdy
YXBoaWNzRGV2aWNlQWRhcHRlciogZ3JhcGhpY3NEZXZpY2VBZGFwdGVyKCkgY29uc3Q7CiAjZW5k
aWYKIAotICAgIHZvaWQgZW50ZXJGdWxsc2NyZWVuRm9yTm9kZShXZWJDb3JlOjpOb2RlKik7Ci0g
ICAgdm9pZCBleGl0RnVsbHNjcmVlbigpOworICAgIHZvaWQgZW50ZXJWaWRlb0Z1bGxzY3JlZW5G
b3JWaWRlb0VsZW1lbnQoV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCopOworICAgIHZvaWQgZXhp
dFZpZGVvRnVsbHNjcmVlbigpOwogCiAgICAgdm9pZCBzZXRMYXN0Q3Vyc29yKEhDVVJTT1IgY3Vy
c29yKSB7IG1fbGFzdFNldEN1cnNvciA9IGN1cnNvcjsgfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0
L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAJKHJldmlz
aW9uIDE3MzE4MikKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3MywxOSArNzczLDE5IEBAIENPTVB0cjxJ
V2ViVUlEZWxlZ2F0ZT4gV2ViQ2hyb21lQ2xpZW50OjoKIAogI2lmIEVOQUJMRShWSURFTykKIAot
Ym9vbCBXZWJDaHJvbWVDbGllbnQ6OnN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUoY29uc3QgTm9k
ZSogbm9kZSkKK2Jvb2wgV2ViQ2hyb21lQ2xpZW50OjpzdXBwb3J0c1ZpZGVvRnVsbHNjcmVlbigp
CiB7Ci0gICAgcmV0dXJuIGlzSFRNTFZpZGVvRWxlbWVudChub2RlKTsKKyAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmVudGVyRnVsbHNjcmVlbkZvck5vZGUoTm9k
ZSogbm9kZSkKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50OjplbnRlclZpZGVvRnVsbHNjcmVlbkZvclZp
ZGVvRWxlbWVudChIVE1MVmlkZW9FbGVtZW50KiB2aWRlb0VsZW1lbnQpCiB7Ci0gICAgbV93ZWJW
aWV3LT5lbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKG5vZGUpOworICAgIG1fd2ViVmlldy0+ZW50ZXJW
aWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQodmlkZW9FbGVtZW50KTsKIH0KIAotdm9pZCBX
ZWJDaHJvbWVDbGllbnQ6OmV4aXRGdWxsc2NyZWVuRm9yTm9kZShOb2RlKikKK3ZvaWQgV2ViQ2hy
b21lQ2xpZW50OjpleGl0VmlkZW9GdWxsc2NyZWVuKCkKIHsKLSAgICBtX3dlYlZpZXctPmV4aXRG
dWxsc2NyZWVuKCk7CisgICAgbV93ZWJWaWV3LT5leGl0VmlkZW9GdWxsc2NyZWVuKCk7CiB9CiAK
ICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21l
Q2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQv
V2ViQ2hyb21lQ2xpZW50LmgJKHJldmlzaW9uIDE3MzE4MikKKysrIFNvdXJjZS9XZWJLaXQvd2lu
L1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgs
OSArMTQ4LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxSZWN0SW50b1ZpZXco
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIGNvbnN0IHsgfQogCiAjaWYgRU5BQkxFKFZJREVPKQot
ICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Z1bGxzY3JlZW5Gb3JOb2RlKGNvbnN0IFdlYkNvcmU6
Ok5vZGUqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZW50ZXJGdWxsc2NyZWVuRm9yTm9kZShXZWJDb3Jl
OjpOb2RlKik7Ci0gICAgdmlydHVhbCB2b2lkIGV4aXRGdWxsc2NyZWVuRm9yTm9kZShXZWJDb3Jl
OjpOb2RlKik7CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzVmlkZW9GdWxsc2NyZWVuKCk7Cisg
ICAgdmlydHVhbCB2b2lkIGVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KFdlYkNv
cmU6OkhUTUxWaWRlb0VsZW1lbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZXhpdFZpZGVvRnVsbHNj
cmVlbigpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykgfHwgRU5BQkxFKExF
R0FDWV9OT1RJRklDQVRJT05TKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237523</attachid>
            <date>2014-09-02 15:47:49 -0700</date>
            <delta_ts>2014-09-02 18:21:39 -0700</delta_ts>
            <desc>Attempt to fix Windows build</desc>
            <filename>bug-136446-20140902154743.patch</filename>
            <type>text/plain</type>
            <size>120637</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MzE4MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMCBAQAorMjAxNC0wOS0wMiAgTWFjaWVq
IFN0YWNob3dpYWsgIDxtanNAYXBwbGUuY29tPgorCisgICAgICAgIENsZWFuIHVwIG5hbWluZyBm
b3IgYW5kIHNsaWdodGx5IHJlZmFjdG9yIGxlZ2FjeSB2aWRlbyBmdWxsc2NyZWVuIHN1cHBvcnQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjQ0Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEtleSBjaGFu
Z2VzOgorICAgICAgICBzdXBwb3J0c0Z1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqKSAtLT4gc3VwcG9y
dHNWaWRlb0Z1bGxzY3JlZW4oKQorICAgICAgICBlbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUq
KSAtLT4gZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoSFRNTFZpZGVvRWxlbWVu
dCopCisgICAgICAgIGV4aXRGdWxsc2NyZWVuRm9yTm9kZShOb2RlKikgLS0+IGV4aXRWaWRlb0Z1
bGxzY3JlZW4oKQorICAgICAgICAKKyAgICAgICAgVGhlIG9sZCB2ZXJzaW9ucyBoYWQgdW5uZWNl
c3NhcnkgcGFyYW1ldGVycywgZGlkIG5vdCBjbGVhcmx5IGRpc3Rpbmd1aXNoIHRoZWlyIHB1cnBv
c2UKKyAgICAgICAgZnJvbSBlbnRlckZ1bGxzY3JlZW5Gb3JFbGVtZW50IGFuZCBmcmllbmRzLCBh
bmQgd3JvbmdseSBjbGFpbWVkIGdlbmVyYWxpdHkgdG8gYWxsIE5vZGVzLgorICAgICAgICBBbHNv
IGNoYW5nZWQgbWFueSBvdGhlciBwbGFjZXMgdG8gdXNlIEhUTUxWaWRlb0VsZW1lbnQqIGluc3Rl
YWQgb2YgTm9kZSogb3IgCisgICAgICAgIEhUTUxNZWRpYUVsZW1lbnQqIHdoZW4gdGhleSB3ZXJl
IGluIGZhY3Qgb25seSB1c2VkIGZvciB2aWRlbyBlbGVtZW50cyBhbmQgd291bGQgb25seQorICAg
ICAgICB3b3JrIGZvciBzdWNoLgorCisgICAgICAgIFRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBp
bmNsdWRlIGEgYnVuY2ggb2YgcmVuYW1pbmcgaW4gc29tZSBpT1MgZnVsbHNjcmVlbiBjb2RlLgor
CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxNZWRpYUVsZW1lbnQ6OkhUTUxNZWRpYUVsZW1lbnQpOiBSZW5hbWUgbV9pc0Z1bGxzY3Jl
ZW4gZmxhZyB0byAKKyAgICAgICAgbV9pc0luVmlkZW9GdWxsc2NyZWVuLCBzaW5jZSBpdCBvbmx5
IGNvdmVycyB0aGUgY2FzZSBvZiBsZWdhY3kgdmlkZW8gZnVsbHNjcmVlbiwKKyAgICAgICAgbm90
IGVsZW1lbnQgZnVsbHNjcmVlbi4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6
OnN0b3ApOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6cmVxdWly
ZXNUZXh0VHJhY2tSZXByZXNlbnRhdGlvbik6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50Ojppc0Z1bGxzY3JlZW4pOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6SFRN
TE1lZGlhRWxlbWVudDo6ZW50ZXJGdWxsc2NyZWVuKTogUmVuYW1lIG1faXNGdWxsc2NyZWVuIGZs
YWcgdG8KKyAgICAgICAgbV9pc0luVmlkZW9GdWxsc2NyZWVuLiBIb2lzdCB2aWRlbyBlbGVtZW50
IGNoZWNrIGhlcmUgZnJvbSBhbGwgc3VwcG9ydHNGdWxsc2NyZW5Gb3JOb2RlCisgICAgICAgIGNs
aWVudHMuIEFkanVzdCBmb3IgcmVsZXZhbnQgQ2hyb21lQ2xpZW50IHJlZmFjdG9yaW5ncy4KKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmVudGVyRnVsbHNjcmVlbik6IGRpdHRv
IGFib3ZlCisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50Lmg6CisgICAgICAgICogaHRt
bC9IVE1MVmlkZW9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1l
bnQ6OnN1cHBvcnRzRnVsbHNjcmVlbik6IEFkanVzdCBmb3IgcmVsZXZhbnQgQ2hyb21lQ2xpZW50
IAorICAgICAgICByZWZhY3RvcmluZ3MuCisgICAgICAgICogcGFnZS9DaHJvbWVDbGllbnQuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6c3VwcG9ydHNWaWRlb0Z1bGxzY3JlZW4p
OiBSZW5hbWVkIGZyb20gCisgICAgICAgIHN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUsIGFuZCBy
ZW1vdmVkIE5vZGUqIHBhcmFtZXRlci4KKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6
ZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQpOiBSZW5hbWVkIGZyb20KKyAgICAg
ICAgZW50ZXJGdWxzY3JlZW5Gb3JOb2RlIGFuZCBjaGFuZ2VkIE5vZGUqIHBhcmFtZXRlciB0byBI
VE1MVmlkZW9FbGVtZW50Ki4KKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6ZXhpdFZp
ZGVvRnVsbHNjcmVlbik6IFJlbmFtZWQgZnJvbSAKKyAgICAgICAgZXhpdEZ1bGxzY3JlZW5Gb3JO
b2RlLCBhbmQgcmVtb3ZlZCBOb2RlKiBwYXJhbWV0ZXIuCisgICAgICAgICogcGxhdGZvcm0vaW9z
L1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW06CisgICAgICAgICgtW1dl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIgdmlkZW9FbGVtZW50XSk6IFJlbmFtZWQgZnJvbSBt
ZWRpYUVsZW1lbnQ7CisgICAgICAgIHJldHVybiBhIHZpZGVvIGVsZW1lbnQgYW5kIG5vdCBqdXN0
IGEgbWVkaWEgZWxlbWVudC4KKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ciBkZWFsbG9jXSk6IFJlbmFtZWQgX21lZGlhRWxlbWVudCBkYXRhIG1lbWJlcgorICAgICAgICB0
byBfdmlkZW9FbGVtZW50IGFuZCBjaGFuZ2VkIHR5cGUgYWNjb3JkaW5nbHkuCisgICAgICAgICgt
W1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIgc2V0VmlkZW9FbGVtZW50Ol0pOiBSZW5hbWVk
IGZyb20gc2V0TWVkaWFFbGVtZW50OgorICAgICAgICBhbmQgYWRqdXN0IHBhcmFtZXRlciB0eXBl
IGFjY29yZGluZ2x5LgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIGVu
dGVyRnVsbHNjcmVlbjpdKTogVmlkZW8gZWxlbWVudHMsIG5vdCBtZWRpYQorICAgICAgICBlbGVt
ZW50cy4KKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciBleGl0RnVsbHNj
cmVlbl0pOiBkaXR0bworICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIGRp
ZENsZWFudXBGdWxsc2NyZWVuXSk6IGRpdHRvCisgICAgICAgICogcGxhdGZvcm0vaW9zL1dlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9XZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oOiBSZW1vdmUgZ3JhdHVpdG91cyBIVE1MTUVkaWFF
bGVtZW50LmggaW5jbHVkZQorICAgICAgICBhbmQgZml4IGRlY2xhcmF0aW9ucyBhY2NvcmRpbmds
eS4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQubW06IEluY2x1ZGUgV1RGU3RyaW5nLmgKKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5oLgor
ICAgICAgICAqIHBsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dC5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5tbS4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50KSBSZW5hbWVkIGZyb20gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxN
ZWRpYUVsZW1lbnQKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
OjpzZXRWaWRlb0VsZW1lbnQpOiBSZW5hbWVkIGZyb20gc2V0TWVkaWFFbGVtZW50IGFuZAorICAg
ICAgICBjaGFuZ2UgcGFyYW0gdHlwZSBhY2NvcmRpbmdseS4gQWxzbyBubyBuZWVkIHRvIGNoZWNr
IGZvciBhY3R1YWwgdmlkZW9uZXNzIG9mIHRoZSBlbGVtZW50LgorICAgICAgICAoV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnVwZGF0ZUZvckV2ZW50TmFtZSk6IFJlbmFtZSBk
YXRhIG1lbWJlciBmcm9tIG1fbWVkaWFFbGVtZW50CisgICAgICAgIHRvIG1fdmlkZW9FbGVtZW50
IGFuZCBjaGFuZ2UgdHlwZSBhY2NvcmRpbmdseS4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0Z1bGxzY3JlZW5MYXllcik6IGRpdHRvCisgICAg
ICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6cGxheSk6IGRpdHRvCisg
ICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6cGF1c2UpOiBkaXR0
bworICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnRvZ2dsZVBs
YXlTdGF0ZSk6IGRpdHRvCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudDo6YmVnaW5TY3J1YmJpbmcpOiBkaXR0bworICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQ6OmVuZFNjcnViYmluZyk6IGRpdHRvCisgICAgICAgIChXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2Vla1RvVGltZSk6IGRpdHRvCisgICAgICAg
IChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6ZmFzdFNlZWspOiBkaXR0bwor
ICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmJlZ2luU2Nhbm5p
bmdGb3J3YXJkKTogZGl0dG8KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9F
bGVtZW50OjpiZWdpblNjYW5uaW5nQmFja3dhcmQpOiBkaXR0bworICAgICAgICAoV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmVuZFNjYW5uaW5nKTogZGl0dG8KKyAgICAgICAg
KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpyZXF1ZXN0RXhpdEZ1bGxzY3Jl
ZW4pOiBkaXR0bworICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6
OnNldFZpZGVvTGF5ZXJGcmFtZSk6IGRpdHRvCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9MYXllckdyYXZpdHkpOiBkaXR0bworICAgICAgICAo
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnVwZGF0ZUxlZ2libGVPcHRpb25z
KTogZGl0dG8KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlci5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyLm1tOgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIHZpZGVvRWxl
bWVudF0pOiBSZW5hbWVkIGZyb20gbWVkaWFFbGVtZW50CisgICAgICAgIGFuZCB1cGRhdGUgcmV0
dXJuIHR5cGUgYWNjb3JkaW5nbHkuCisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXIgc2V0VmlkZW9FbGVtZW50Ol0pOiBSZW5hbWVkIGZyb20gCisgICAgICAgIHNldE1lZGlh
RWxlbWVudCBhbmQgdXBkYXRlIHJldHVybiB0eXBlIGFjY29yZGluZ2x5LgorICAgICAgICAoLVtX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIHZpZGVvRWxlbWVudFJlY3RdKTogUmVuYW1lZAor
ICAgICAgICBmcm9tIG1lZGlhRWxlbWVudFJlY3QuCisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXIgZW50ZXJGdWxsc2NyZWVuOl0pOiBVcGRhdGUgZm9yCisgICAgICAgIHJl
bmFtZS4KKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciBleGl0RnVsbHNj
cmVlbl0pOiBkaXR0bworICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIHVw
ZGF0ZVBvd2VyQXNzZXJ0aW9uc10pOiBSZW5hbWUKKyAgICAgICAgbWVtYmVyIGZyb20gX21lZGlh
RWxlbWVudCB0byBfdmlkZW9FbGVtZW50CisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXIgX3JlcXVlc3RFeGl0XSk6IGRpdHRvCisgICAgICAgICogV2ViQ29yZS5leHAuaW46
IEFkanVzdCBmb3IgZnVuY3Rpb24gYW5kIGNsYXNzIHJlbmFtZXMuCisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGp1c3QgZm9yIGZpbGUgcmVuYW1lcy4KKwog
MjAxNC0wOS0wMiAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgog
CiAgICAgICAgIEZpeCBiaW5kaW5ncyB0ZXN0cyBhZnRlciByMTczMTc2LgpJbmRleDogU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5leHAuaW4JKHJldmlzaW9uIDE3MzE4MikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
ZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0zNDI2LDMwICszNDI2LDI5IEBAIF9fWk5LN1dlYkNv
cmUxNkhUTUxNZWRpYUVsZW1lbnQ4ZHVyYXRpb24KICNlbmRpZgogCiAjaWYgRU5BQkxFKFZJREVP
KSAmJiBQTEFURk9STShJT1MpCi1fX1pON1dlYkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
TWVkaWFFbGVtZW50MTBzZWVrVG9UaW1lRWQKLV9fWk43V2ViQ29yZTM1V2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxNZWRpYUVsZW1lbnQxMWVuZFNjYW5uaW5nRXYKLV9fWk43V2ViQ29yZTM1V2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQxMWhhbmRsZUV2ZW50RVBOU18yMlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRFUE5TXzVFdmVudEUKLV9fWk43V2ViQ29yZTM1V2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxNZWRpYUVsZW1lbnQxMmVuZFNjcnViYmluZ0V2Ci1fX1pON1dlYkNvcmUzNVdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50MTRiZWdpblNjcnViYmluZ0V2Ci1fX1pON1dl
YkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50MTVzZXRNZWRpYUVsZW1l
bnRFUE5TXzE2SFRNTE1lZGlhRWxlbWVudEUKLV9fWk43V2ViQ29yZTM1V2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxNZWRpYUVsZW1lbnQxNXRvZ2dsZVBsYXlTdGF0ZUV2Ci1fX1pON1dlYkNvcmUzNVdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50MThzZXRWaWRlb0xheWVyRnJhbWVFTlNf
OUZsb2F0UmVjdEUKLV9fWk43V2ViQ29yZTM1V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVs
ZW1lbnQyMGJlZ2luU2Nhbm5pbmdGb3J3YXJkRXYKLV9fWk43V2ViQ29yZTM1V2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQyMHNldFZpZGVvTGF5ZXJHcmF2aXR5RU5TXzIzV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWwxMlZpZGVvR3Jhdml0eUUKLV9fWk43V2ViQ29yZTM1V2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQyMWJlZ2luU2Nhbm5pbmdCYWNrd2FyZEV2Ci1fX1pO
N1dlYkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50MjFyZXF1ZXN0RXhp
dEZ1bGxzY3JlZW5FdgotX19aTjdXZWJDb3JlMzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlh
RWxlbWVudDIyc2VsZWN0QXVkaW9NZWRpYU9wdGlvbkV5Ci1fX1pON1dlYkNvcmUzNVdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50MjNzZXRWaWRlb0Z1bGxzY3JlZW5MYXllckVQN0NB
TGF5ZXIKLV9fWk43V2ViQ29yZTM1V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQy
NHNlbGVjdExlZ2libGVNZWRpYU9wdGlvbkV5Ci1fX1pON1dlYkNvcmUzNVdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsTWVkaWFFbGVtZW50NHBsYXlFdgotX19aTjdXZWJDb3JlMzVXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbE1lZGlhRWxlbWVudDVwYXVzZUV2Ci1fX1pON1dlYkNvcmUzNVdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OGZhc3RTZWVrRWQKLV9fWk43V2ViQ29yZTM1V2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnRDMkV2Ci1fX1pON1dlYkNvcmUzNVdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50RDJFdgorX19aTjdXZWJDb3JlMzVXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDEwc2Vla1RvVGltZUVkCitfX1pON1dlYkNvcmUzNVdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50MTFlbmRTY2FubmluZ0V2CitfX1pON1dl
YkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50MTFoYW5kbGVFdmVudEVQ
TlNfMjJTY3JpcHRFeGVjdXRpb25Db250ZXh0RVBOU181RXZlbnRFCitfX1pON1dlYkNvcmUzNVdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50MTJlbmRTY3J1YmJpbmdFdgorX19aTjdX
ZWJDb3JlMzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDE0YmVnaW5TY3J1YmJp
bmdFdgorX19aTjdXZWJDb3JlMzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDE1
c2V0VmlkZW9FbGVtZW50RVBOU18xNkhUTUxWaWRlb0VsZW1lbnRFCitfX1pON1dlYkNvcmUzNVdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50MTV0b2dnbGVQbGF5U3RhdGVFdgorX19a
TjdXZWJDb3JlMzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDE4c2V0VmlkZW9M
YXllckZyYW1lRU5TXzlGbG9hdFJlY3RFCitfX1pON1dlYkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50MjBiZWdpblNjYW5uaW5nRm9yd2FyZEV2CitfX1pON1dlYkNvcmUz
NVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50MjBzZXRWaWRlb0xheWVyR3Jhdml0
eUVOU18yM1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsMTJWaWRlb0dyYXZpdHlFCitfX1pON1dlYkNv
cmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50MjFiZWdpblNjYW5uaW5nQmFj
a3dhcmRFdgorX19aTjdXZWJDb3JlMzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dDIxcmVxdWVzdEV4aXRGdWxsc2NyZWVuRXYKK19fWk43V2ViQ29yZTM1V2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxWaWRlb0VsZW1lbnQyMnNlbGVjdEF1ZGlvTWVkaWFPcHRpb25FeQorX19aTjdXZWJD
b3JlMzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDIzc2V0VmlkZW9GdWxsc2Ny
ZWVuTGF5ZXJFUDdDQUxheWVyCitfX1pON1dlYkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50MjRzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb25FeQorX19aTjdXZWJDb3JlMzVX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDRwbGF5RXYKK19fWk43V2ViQ29yZTM1
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ1cGF1c2VFdgorX19aTjdXZWJDb3Jl
MzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDhmYXN0U2Vla0VkCitfX1pON1dl
YkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50QzJFdgorX19aTjdXZWJD
b3JlMzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudEQyRXYKIF9fWk5LN1dlYkNv
cmUxNkhUTUxWaWRlb0VsZW1lbnQxMHZpZGVvV2lkdGhFdgogX19aTks3V2ViQ29yZTE2SFRNTFZp
ZGVvRWxlbWVudDExdmlkZW9IZWlnaHRFdgotX19aVFZON1dlYkNvcmUzNVdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsTWVkaWFFbGVtZW50RQotX19aVGhuP19ON1dlYkNvcmUzNVdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsTWVkaWFFbGVtZW50MTFoYW5kbGVFdmVudEVQTlNfMjJTY3JpcHRFeGVjdXRpb25D
b250ZXh0RVBOU181RXZlbnRFCitfX1pUaG40X043V2ViQ29yZTM1V2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQxMWhhbmRsZUV2ZW50RVBOU18yMlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRFUE5TXzVFdmVudEUKICNlbmRpZgogCiAjaWYgRU5BQkxFKFZJREVPKSAmJiBQTEFURk9STShJ
T1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDgwMDAwCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiAxNzMxODIpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEzNjMsOCArMTM2Myw2IEBACiAJCTNGNDJC
MzFFMTg4MTE5MUIwMDI3OEFBQyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRjQyQjMx
QzE4ODExOTFCMDAyNzhBQUMgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1t
ICovOyB9OwogCQkzRkJDNEFFQTE4OTg4MEVGMDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNG
QkM0QUU5MTg5ODgwRUYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTNGQkM0QUVDMTg5
ODgxMEUwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGQkM0QUVCMTg5ODgxMEUwMDQ2
RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkzRkJDNEFFRjE4OTg4MTM4MDA0NkVFMzgg
LyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRkJDNEFFRDE4OTg4MTM4MDA0NkVFMzgg
LyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQubW0gKi87IH07Ci0JCTNGQkM0
QUYwMTg5ODgxMzgwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0ZCQzRB
RUUxODk4ODEzODAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJM0ZC
QzRBRjMxODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0ZCQzRB
RjExODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1t
ICovOyB9OwogCQkzRkJDNEFGNDE4OTg4MTU2MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDNGQkM0QUYyMTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTNGRkZGOUE4MTU5RDlBNTUwMDIwQkJENSAvKiBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0ZGRkY5
QTYxNTlEOUE1NTAwMjBCQkQ1IC8qIFdlYktpdENTU1ZpZXdwb3J0UnVsZS5jcHAgKi87IH07CkBA
IC0yMjA5LDYgKzIyMDcsOCBAQAogCQk2NURGMzIzQzA5RDFERTY1MDAxQkUzMjUgLyogSlNDYW52
YXNQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NjVERjMyMzYwOUQxREU2NTAwMUJFMzI1IC8qIEpTQ2FudmFzUHJveHkuaCAqLzsgfTsKIAkJNjVE
RjMyNjEwOUQxRTE5OTAwMEJFMzI1IC8qIFVzZXJBZ2VudFN0eWxlU2hlZXRzRGF0YS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTY1ODFBRjA5RDE0
RUU2MDAwRTYxRDcgLyogVXNlckFnZW50U3R5bGVTaGVldHNEYXRhLmNwcCAqLzsgfTsKIAkJNjVF
MEU5NDQxMTMzQzg5RjAwQjRDQjEwIC8qIEpTRE9NV3JhcHBlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVFMEU5NDMxMTMzQzg5RjAwQjRDQjEwIC8q
IEpTRE9NV3JhcHBlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTY1RkQ0NjY1MTlCNTk2RjAwMDFFMkI0RCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNjU4NkZFM0MxOUI1NDhCRDAwNUMzQzgyIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJNjVGRDQ2NjYxOUI1OTZGNjAwMUUyQjREIC8qIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNjU4NkZFM0QxOUI1NDhCRDAwNUMzQzgyIC8qIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50Lm1tICovOyB9OwogCQk2NUZFQTg2OTA5ODMzQURFMDBCRUQ0QUIg
LyogUGFnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA2NUZFQTg2ODA5ODMzQURFMDBCRUQ0QUIgLyogUGFnZS5jcHAgKi87IH07CiAJCTZCMzQ4MDk0
MEVFRjUwRDQwMEFDMUI0MSAvKiBOYXRpdmVJbWFnZVB0ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkIzNDgwOTIwRUVGNTBENDAwQUMxQjQxIC8qIE5h
dGl2ZUltYWdlUHRyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNkM2Mzg4OTVBOTZDQ0VFNTBDOEM5NDZDIC8qIENhY2hlZFJlc291cmNlUmVxdWVz
dEluaXRpYXRvcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDZDNjM4ODkzQTk2Q0NFRTUwQzhDOTQ2QyAvKiBDYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0
aWF0b3JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTgzNjYsOCArODM2Niw2IEBACiAJCTNGNDJCMzFDMTg4MTE5MUIwMDI3OEFBQyAvKiBXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IG5hbWUgPSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW07IHBh
dGggPSBpb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkzRkJDNEFFOTE4OTg4MEVGMDA0NkVFMzggLyogV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWwuaDsgcGF0aCA9IGlvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzRkJDNEFFQjE4OTg4MTBFMDA0NkVFMzgg
LyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS5oOyBwYXRoID0gaW9zL1dlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkz
RkJDNEFFRDE4OTg4MTM4MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVs
ZW1lbnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5tbTsgcGF0aCA9IGlvcy9XZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
M0ZCQzRBRUUxODk4ODEzODAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFF
bGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsTWVkaWFFbGVtZW50Lmg7IHBhdGggPSBpb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxNZWRpYUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0ZCQzRBRjEx
ODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQubW07IHBhdGggPSBpb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNGQkM0QUYyMTg5ODgxNTYw
MDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5o
OyBwYXRoID0gaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNGRkZGOUE2MTU5RDlBNTUwMDIwQkJENSAvKiBXZWJLaXRD
U1NWaWV3cG9ydFJ1bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2ViS2l0Q1NTVmlld3BvcnRSdWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTkyNzYsNiArOTI3NCw4IEBACiAJCTY1N0VEQTA2MTM4NUNCOTcwMDRFMDY0NSAvKiBNZW1vcnlQ
cmVzc3VyZUhhbmRsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
TWVtb3J5UHJlc3N1cmVIYW5kbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NjU3RURBMDcxMzg1Q0I5NzAwNEUwNjQ1IC8qIE1lbW9yeVByZXNzdXJlSGFuZGxlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZW1vcnlQcmVzc3VyZUhhbmRsZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjU4NDM2ODUwQUUwMUI3NDAwRTUzNzUzIC8qIEZy
YW1lTG9hZFJlcXVlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZyYW1l
TG9hZFJlcXVlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjU4NkZFM0MxOUI1
NDhCRDAwNUMzQzgyIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlk
ZW9FbGVtZW50Lmg7IHBhdGggPSBpb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjU4NkZFM0QxOUI1NDhCRDAwNUMz
QzgyIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRl
b0VsZW1lbnQubW07IHBhdGggPSBpb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1OTM5MjM1MDlBRTQzNDYwMDJD
NTMxRiAvKiBVUkwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVS
TC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1OTM5MjM2MDlBRTQzNDYwMDJD
NTMxRiAvKiBVUkwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVSTC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTkzOTIzOTA5QUU0MzVDMDAyQzUzMUYgLyog
VVJMTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbGluZUVuZGluZyA9
IDA7IHBhdGggPSBVUkxNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHhjTGFuZ3VhZ2VT
cGVjaWZpY2F0aW9uSWRlbnRpZmllciA9IHhjb2RlLmxhbmcub2JqY3BwOyB9OwpAQCAtMTg0NzQs
OCArMTg0NzQsOCBAQAogCQkJCTNGQkM0QUYyMTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oICovLAogCQkJCTNGQkM0QUYxMTg5ODgxNTYwMDQ2RUUz
OCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbSAqLywKIAkJCQkzRkJDNEFF
OTE4OTg4MEVGMDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCAqLywKLQkJCQkz
RkJDNEFFRTE4OTg4MTM4MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVs
ZW1lbnQuaCAqLywKLQkJCQkzRkJDNEFFRDE4OTg4MTM4MDA0NkVFMzggLyogV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQubW0gKi8sCisJCQkJNjU4NkZFM0MxOUI1NDhCRDAwNUMz
QzgyIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmggKi8sCisJCQkJNjU4
NkZFM0QxOUI1NDhCRDAwNUMzQzgyIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVt
ZW50Lm1tICovLAogCQkJCUU0NTM5MDNDMEVBRkQ2MzcwMDM2OTVDOCAvKiBXaWRnZXRJT1MubW0g
Ki8sCiAJCQkpOwogCQkJbmFtZSA9IGlvczsKQEAgLTI1NjEwLDYgKzI1NjEwLDcgQEAKIAkJCQk1
QTU3NEYyNTEzMURCOTM5MDA0NzFCODggLyogUmVuZGVyUXVvdGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUQ3MEFENjU4MTNFMTM0MkIwMDVCNTBCNCAvKiBSZW5kZXJSZWdpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDRTkzRjQ1MTUxN0M1NjcwMDhDQ0Y3NCAvKiBSZW5kZXJSZWdpb25TZXQuaCBp
biBIZWFkZXJzICovLAorCQkJCTY1RkQ0NjY1MTlCNTk2RjAwMDFFMkI0RCAvKiBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg3MURGRTMw
QTE1Mzc2QjAwQjEyQTY4IC8qIFJlbmRlclJlcGxhY2VkLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
Q0E4NDZENzBEQzY3QTM1MDAyNkMzMDkgLyogUmVuZGVyUmVwbGljYS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTQ3OUZBRUUxMDlBRTM3NTAwREVENjU1IC8qIFJlbmRlclJ1YnkuaCBpbiBIZWFkZXJz
ICovLApAQCAtMjY1NDMsNyArMjY1NDQsNiBAQAogCQkJCTNGQkM0QUVDMTg5ODgxMEUwMDQ2RUUz
OCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTNG
QkM0QUY0MTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJM0ZCQzRBRUExODk4ODBFRjAwNDZFRTM4IC8qIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsLmggaW4gSGVhZGVycyAqLywKLQkJCQkzRkJDNEFGMDE4OTg4MTM4
MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUYxMjE3MUY2MTZBOENGMEIwMDAwNTNDQSAvKiBXZWJWVFRFbGVtZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1RDIxQTgwMzEzRUNFNURGMDBCQjcwNjQgLyogV2ViVlRUUGFy
c2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMTBCNjk4MDE0MEMxNzQwMDBCQzFDMjYgLyogV2Vi
VlRUVG9rZW4uaCBpbiBIZWFkZXJzICovLApAQCAtMjc1NzMsNiArMjc1NzMsNyBAQAogCQkJCUZE
MTc2MkUzMTc2Njg2RUEwMEQ4MzZBOCAvKiBEb3duU2FtcGxlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBN0NBNTk1RTBCMjdCRDlFMDBGQTAyMUQgLyogRHJhZ0NvbnRyb2xsZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTcxODc4OTAwQjJEMDRBQzAwQTE2RUNFIC8qIERyYWdDb250cm9sbGVy
TWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNjVGRDQ2NjYxOUI1OTZGNjAwMUUyQjREIC8qIFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTc5NTQ2NDMwQjVDNENCNDAwN0I0MzhGIC8qIERyYWdEYXRhLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE3OTU0NjNFMEI1QzRDODAwMDdCNDM4RiAvKiBEcmFnRGF0YU1hYy5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCUE3Q0ZCM0QxMEI3RUQxMEEwMDcwQzMyRCAvKiBEcmFnSW1hZ2UuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC0yOTgyMiw3ICsyOTgyMyw2IEBACiAJCQkJQ0Q4MjAzMEQxMzk1QUI2QTAw
Rjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW0gaW4gU291
cmNlcyAqLywKIAkJCQk3QzczRkIwQzE5MUVGNUE4MDA3REUwNjEgLyogSlNVc2VyTWVzc2FnZUhh
bmRsZXJzTmFtZXNwYWNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTNGQkM0QUYzMTg5ODgxNTYw
MDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbSBpbiBTb3VyY2Vz
ICovLAotCQkJCTNGQkM0QUVGMTg5ODgxMzgwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbE1lZGlhRWxlbWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUYxMjE3MUY1MTZBOENFRDIw
MDAwNTNDQSAvKiBXZWJWVFRFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVEMjFBODAy
MTNFQ0U1REYwMEJCNzA2NCAvKiBXZWJWVFRQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QjEwQjY5ODExNDBDMTc0MDAwQkMxQzI2IC8qIFdlYlZUVFRva2VuaXplci5jcHAgaW4gU291cmNl
cyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkocmV2
aXNpb24gMTczMTgyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzA1LDcgKzMwNSw3IEBAIEhUTUxNZWRpYUVsZW1lbnQ6OkhU
TUxNZWRpYUVsZW1lbnQoY29uc3QKICAgICAsIG1fc2VudEVuZEV2ZW50KGZhbHNlKQogICAgICwg
bV9wYXVzZWRJbnRlcm5hbChmYWxzZSkKICAgICAsIG1fc2VuZFByb2dyZXNzRXZlbnRzKHRydWUp
Ci0gICAgLCBtX2lzRnVsbHNjcmVlbihmYWxzZSkKKyAgICAsIG1faXNJblZpZGVvRnVsbHNjcmVl
bihmYWxzZSkKICAgICAsIG1fY2xvc2VkQ2FwdGlvbnNWaXNpYmxlKGZhbHNlKQogICAgICwgbV93
ZWJraXRMZWdhY3lDbG9zZWRDYXB0aW9uT3ZlcnJpZGUoZmFsc2UpCiAgICAgLCBtX2NvbXBsZXRl
bHlMb2FkZWQoZmFsc2UpCkBAIC02ODIsNyArNjgyLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50
OjpyZW1vdmVkRnJvbShDb250YQogICAgICAgICAgICAgbWVkaWFDb250cm9scygpLT5oaWRlKCk7
CiAgICAgICAgIGlmIChtX25ldHdvcmtTdGF0ZSA+IE5FVFdPUktfRU1QVFkpCiAgICAgICAgICAg
ICBwYXVzZSgpOwotICAgICAgICBpZiAobV9pc0Z1bGxzY3JlZW4pCisgICAgICAgIGlmIChtX2lz
SW5WaWRlb0Z1bGxzY3JlZW4pCiAgICAgICAgICAgICBleGl0RnVsbHNjcmVlbigpOwogCiAgICAg
ICAgIGlmIChtX3BsYXllcikgewpAQCAtNDY0Nyw3ICs0NjQ3LDcgQEAgYm9vbCBIVE1MTWVkaWFF
bGVtZW50OjpjYW5TdXNwZW5kKCkgY29ucwogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzdG9wKCkK
IHsKICAgICBMT0coTWVkaWEsICJIVE1MTWVkaWFFbGVtZW50OjpzdG9wIik7Ci0gICAgaWYgKG1f
aXNGdWxsc2NyZWVuKQorICAgIGlmIChtX2lzSW5WaWRlb0Z1bGxzY3JlZW4pCiAgICAgICAgIGV4
aXRGdWxsc2NyZWVuKCk7CiAgICAgCiAgICAgbV9pbkFjdGl2ZURvY3VtZW50ID0gZmFsc2U7CkBA
IC00NzQxLDcgKzQ3NDEsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnZpc2liaWxpdHlTdGF0
ZUNoCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogYm9vbCBIVE1MTWVkaWFFbGVtZW50OjpyZXF1
aXJlc1RleHRUcmFja1JlcHJlc2VudGF0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9pc0Z1
bGxzY3JlZW4gJiYgbV9wbGF5ZXIgPyBtX3BsYXllci0+cmVxdWlyZXNUZXh0VHJhY2tSZXByZXNl
bnRhdGlvbigpIDogZmFsc2U7CisgICAgcmV0dXJuIG1faXNJblZpZGVvRnVsbHNjcmVlbiAmJiBt
X3BsYXllciA/IG1fcGxheWVyLT5yZXF1aXJlc1RleHRUcmFja1JlcHJlc2VudGF0aW9uKCkgOiBm
YWxzZTsKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRUZXh0VHJhY2tSZXByZXNlbnRh
dGlvbihUZXh0VHJhY2tSZXByZXNlbnRhdGlvbiogcmVwcmVzZW50YXRpb24pCkBAIC00ODMzLDcg
KzQ4MzMsNyBAQCBkb3VibGUgSFRNTE1lZGlhRWxlbWVudDo6bWF4RmFzdEZvcndhcmRSCiAgICAg
CiBib29sIEhUTUxNZWRpYUVsZW1lbnQ6OmlzRnVsbHNjcmVlbigpIGNvbnN0CiB7Ci0gICAgaWYg
KG1faXNGdWxsc2NyZWVuKQorICAgIGlmIChtX2lzSW5WaWRlb0Z1bGxzY3JlZW4pCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIAogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKQEAgLTQ4NTcs
NyArNDg1Nyw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dG9nZ2xlRnVsbHNjcmVlblMKIHZv
aWQgSFRNTE1lZGlhRWxlbWVudDo6ZW50ZXJGdWxsc2NyZWVuKCkKIHsKICAgICBMT0coTWVkaWEs
ICJIVE1MTWVkaWFFbGVtZW50OjplbnRlckZ1bGxzY3JlZW4iKTsKLSAgICBpZiAobV9pc0Z1bGxz
Y3JlZW4pCisgICAgaWYgKG1faXNJblZpZGVvRnVsbHNjcmVlbikKICAgICAgICAgcmV0dXJuOwog
CiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQpAQCAtNDg2NywxMiArNDg2NywxMyBAQCB2b2lk
IEhUTUxNZWRpYUVsZW1lbnQ6OmVudGVyRnVsbHNjcmVlbigpCiAgICAgfQogI2VuZGlmCiAKLSAg
ICBtX2lzRnVsbHNjcmVlbiA9IHRydWU7CisgICAgbV9pc0luVmlkZW9GdWxsc2NyZWVuID0gdHJ1
ZTsKICAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQogICAgICAgICBtZWRpYUNvbnRyb2xzKCkt
PmVudGVyZWRGdWxsc2NyZWVuKCk7Ci0gICAgaWYgKGRvY3VtZW50KCkucGFnZSgpKSB7Ci0gICAg
ICAgIGlmIChkb2N1bWVudCgpLnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50KCkuc3VwcG9ydHNGdWxs
c2NyZWVuRm9yTm9kZSh0aGlzKSkgewotICAgICAgICAgICAgZG9jdW1lbnQoKS5wYWdlKCktPmNo
cm9tZSgpLmNsaWVudCgpLmVudGVyRnVsbHNjcmVlbkZvck5vZGUodGhpcyk7CisgICAgaWYgKGRv
Y3VtZW50KCkucGFnZSgpICYmIGlzSFRNTFZpZGVvRWxlbWVudCh0aGlzKSkgeworICAgICAgICBI
VE1MVmlkZW9FbGVtZW50KiBhc1ZpZGVvID0gdG9IVE1MVmlkZW9FbGVtZW50KHRoaXMpOworICAg
ICAgICBpZiAoZG9jdW1lbnQoKS5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLnN1cHBvcnRzVmlk
ZW9GdWxsc2NyZWVuKCkpIHsKKyAgICAgICAgICAgIGRvY3VtZW50KCkucGFnZSgpLT5jaHJvbWUo
KS5jbGllbnQoKS5lbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChhc1ZpZGVvKTsK
ICAgICAgICAgICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1lcygpLndlYmtpdGJlZ2luZnVsbHNj
cmVlbkV2ZW50KTsKICAgICAgICAgfQogICAgIH0KQEAgLTQ4ODksMTYgKzQ4OTAsMTYgQEAgdm9p
ZCBIVE1MTWVkaWFFbGVtZW50OjpleGl0RnVsbHNjcmVlbigpCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAjZW5kaWYKLSAgICBBU1NFUlQobV9pc0Z1bGxzY3JlZW4pOwotICAgIG1faXNGdWxsc2Ny
ZWVuID0gZmFsc2U7CisgICAgQVNTRVJUKG1faXNJblZpZGVvRnVsbHNjcmVlbik7CisgICAgbV9p
c0luVmlkZW9GdWxsc2NyZWVuID0gZmFsc2U7CiAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkK
ICAgICAgICAgbWVkaWFDb250cm9scygpLT5leGl0ZWRGdWxsc2NyZWVuKCk7Ci0gICAgaWYgKGRv
Y3VtZW50KCkucGFnZSgpKSB7CisgICAgaWYgKGRvY3VtZW50KCkucGFnZSgpICYmIGlzSFRNTFZp
ZGVvRWxlbWVudCh0aGlzKSkgewogICAgICAgICBpZiAobV9tZWRpYVNlc3Npb24tPnJlcXVpcmVz
RnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2soKnRoaXMpKQogICAgICAgICAgICAgcGF1c2VJbnRl
cm5hbCgpOwogCi0gICAgICAgIGlmIChkb2N1bWVudCgpLnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50
KCkuc3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZSh0aGlzKSkgewotICAgICAgICAgICAgZG9jdW1l
bnQoKS5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLmV4aXRGdWxsc2NyZWVuRm9yTm9kZSh0aGlz
KTsKKyAgICAgICAgaWYgKGRvY3VtZW50KCkucGFnZSgpLT5jaHJvbWUoKS5jbGllbnQoKS5zdXBw
b3J0c1ZpZGVvRnVsbHNjcmVlbigpKSB7CisgICAgICAgICAgICBkb2N1bWVudCgpLnBhZ2UoKS0+
Y2hyb21lKCkuY2xpZW50KCkuZXhpdFZpZGVvRnVsbHNjcmVlbigpOwogICAgICAgICAgICAgc2No
ZWR1bGVFdmVudChldmVudE5hbWVzKCkud2Via2l0ZW5kZnVsbHNjcmVlbkV2ZW50KTsKICAgICAg
ICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCShy
ZXZpc2lvbiAxNzMxODIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtODE2LDcgKzgxNiw3IEBAIHByaXZhdGU6CiAgICAgLy8gc3Vw
cG9ydCBwcm9ncmVzcyBldmVudHMgc28gc2V0dGluZyBtX3NlbmRQcm9ncmVzc0V2ZW50cyBkaXNh
YmxlcyB0aGVtIAogICAgIGJvb2wgbV9zZW5kUHJvZ3Jlc3NFdmVudHMgOiAxOwogCi0gICAgYm9v
bCBtX2lzRnVsbHNjcmVlbiA6IDE7CisgICAgYm9vbCBtX2lzSW5WaWRlb0Z1bGxzY3JlZW4gOiAx
OwogICAgIGJvb2wgbV9jbG9zZWRDYXB0aW9uc1Zpc2libGUgOiAxOwogICAgIGJvb2wgbV93ZWJr
aXRMZWdhY3lDbG9zZWRDYXB0aW9uT3ZlcnJpZGUgOiAxOwogICAgIGJvb2wgbV9jb21wbGV0ZWx5
TG9hZGVkIDogMTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNw
cAkocmV2aXNpb24gMTczMTgyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU3LDcgKzE1Nyw3IEBAIGJvb2wgSFRNTFZpZGVv
RWxlbWVudDo6c3VwcG9ydHNGdWxsc2NyZWUKICAgICBpZiAoIXBsYXllcigpLT5oYXNWaWRlbygp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gcGFnZS0+Y2hyb21lKCkuY2xp
ZW50KCkuc3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZSh0aGlzKTsKKyAgICByZXR1cm4gcGFnZS0+
Y2hyb21lKCkuY2xpZW50KCkuc3VwcG9ydHNWaWRlb0Z1bGxzY3JlZW4oKTsKICNlbmRpZiAvLyBQ
TEFURk9STShJT1MpCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAkocmV2
aXNpb24gMTczMTgyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMzM5LDkgKzMzOSw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEdyYXBo
aWNzRGV2aWNlQWRhcHRlciogZ3JhcGhpY3NEZXZpY2VBZGFwdGVyKCkgY29uc3QgeyByZXR1cm4g
MDsgfQogI2VuZGlmCiAKLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9k
ZShjb25zdCBOb2RlKikgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZW50ZXJG
dWxsc2NyZWVuRm9yTm9kZShOb2RlKikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGV4aXRGdWxsc2Ny
ZWVuRm9yTm9kZShOb2RlKikgeyB9CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzVmlkZW9GdWxs
c2NyZWVuKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJWaWRlb0Z1
bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoSFRNTFZpZGVvRWxlbWVudCopIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBleGl0VmlkZW9GdWxsc2NyZWVuKCkgeyB9CiAgICAgdmlydHVhbCBib29sIHJlcXVp
cmVzRnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2soKSB7IHJldHVybiBmYWxzZTsgfSAKIAogI2lm
IEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lv
cy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0
LmgJKHJldmlzaW9uIDE3MzE4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTMg
KzI4LDEzIEBACiAKICNpZiBQTEFURk9STShJT1MpCiAKLSNpbXBvcnQgPFdlYkNvcmUvSFRNTE1l
ZGlhRWxlbWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9IVE1MVmlkZW9FbGVtZW50Lmg+CiAKIE9C
SkNfQ0xBU1MgVUlWaWV3OwogCiBXRUJDT1JFX0VYUE9SVCBAaW50ZXJmYWNlIFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXIgOiBOU09iamVjdAotLSAodm9pZClzZXRNZWRpYUVsZW1lbnQ6KFdl
YkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqKW1lZGlhRWxlbWVudDsKLS0gKFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnQqKW1lZGlhRWxlbWVudDsKKy0gKHZvaWQpc2V0VmlkZW9FbGVtZW50OihXZWJD
b3JlOjpIVE1MVmlkZW9FbGVtZW50Kil2aWRlb0VsZW1lbnQ7CistIChXZWJDb3JlOjpIVE1MVmlk
ZW9FbGVtZW50Kil2aWRlb0VsZW1lbnQ7CiAtICh2b2lkKWVudGVyRnVsbHNjcmVlbjooVUlWaWV3
ICopdmlldzsKIC0gKHZvaWQpZXhpdEZ1bGxzY3JlZW47CiAtICh2b2lkKXJlcXVlc3RIaWRlQW5k
RXhpdEZ1bGxzY3JlZW47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW0JKHJl
dmlzaW9uIDE3MzE4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW0JKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcg
QEAKIAogI2ltcG9ydCAiTG9nZ2luZy5oIgogI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVt
ZW50LmgiCisjaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oIgog
I2ltcG9ydCA8UXVhcnR6Q29yZS9Db3JlQW5pbWF0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dl
YkNvcmVUaHJlYWRSdW4uaD4KIApAQCAtNDAsMTIgKzQwLDEyIEBAIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogI2lmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEIDwgODAwMDAKIAog
QGltcGxlbWVudGF0aW9uIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIKLS0gKHZvaWQpc2V0
TWVkaWFFbGVtZW50OihXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50KiltZWRpYUVsZW1lbnQKKy0g
KHZvaWQpc2V0VmlkZW9FbGVtZW50OihXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50Kil2aWRlb0Vs
ZW1lbnQKIHsKLSAgICBVTlVTRURfUEFSQU0obWVkaWFFbGVtZW50KTsKKyAgICBVTlVTRURfUEFS
QU0odmlkZW9FbGVtZW50KTsKIH0KIAotLSAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCopbWVk
aWFFbGVtZW50CistIChXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50Kil2aWRlb0VsZW1lbnQKIHsK
ICAgICByZXR1cm4gbnVsbHB0cjsKIH0KQEAgLTgxLDkgKzgxLDkgQEAgcHVibGljOgogCiBAaW1w
bGVtZW50YXRpb24gV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlcgogewotICAgIFJlZlB0cjxI
VE1MTWVkaWFFbGVtZW50PiBfbWVkaWFFbGVtZW50OworICAgIFJlZlB0cjxIVE1MVmlkZW9FbGVt
ZW50PiBfdmlkZW9FbGVtZW50OwogICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdD4gX2ludGVyZmFjZTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxN
ZWRpYUVsZW1lbnQ+IF9tb2RlbDsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ+IF9tb2RlbDsKICAgICBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ2hh
bmdlT2JzZXJ2ZXIgX2NoYW5nZU9ic2VydmVyOwogICAgIFJldGFpblB0cjxQbGF0Zm9ybUxheWVy
PiBfdmlkZW9GdWxsc2NyZWVuTGF5ZXI7CiB9CkBAIC0xMDAsMTggKzEwMCwxOCBAQCAtIChpbnN0
YW5jZXR5cGUpaW5pdAogCiAtICh2b2lkKWRlYWxsb2MKIHsKLSAgICBfbWVkaWFFbGVtZW50ID0g
bnVsbHB0cjsKKyAgICBfdmlkZW9FbGVtZW50ID0gbnVsbHB0cjsKICAgICBbc3VwZXIgZGVhbGxv
Y107CiB9CiAKLS0gKHZvaWQpc2V0TWVkaWFFbGVtZW50OihIVE1MTWVkaWFFbGVtZW50KiltZWRp
YUVsZW1lbnQKKy0gKHZvaWQpc2V0VmlkZW9FbGVtZW50OihIVE1MVmlkZW9FbGVtZW50Kil2aWRl
b0VsZW1lbnQKIHsKLSAgICBfbWVkaWFFbGVtZW50ID0gbWVkaWFFbGVtZW50OworICAgIF92aWRl
b0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7CiB9CiAKLS0gKEhUTUxNZWRpYUVsZW1lbnQqKW1lZGlh
RWxlbWVudAorLSAoSFRNTFZpZGVvRWxlbWVudCopdmlkZW9FbGVtZW50CiB7Ci0gICAgcmV0dXJu
IF9tZWRpYUVsZW1lbnQuZ2V0KCk7CisgICAgcmV0dXJuIF92aWRlb0VsZW1lbnQuZ2V0KCk7CiB9
CiAKIC0gKHZvaWQpZW50ZXJGdWxsc2NyZWVuOihVSVZpZXcgKil2aWV3CkBAIC0xMjAsMTcgKzEy
MCwxNyBAQCAtICh2b2lkKWVudGVyRnVsbHNjcmVlbjooVUlWaWV3ICopdmlldwogICAgIAogICAg
IF9pbnRlcmZhY2UgPSBhZG9wdFJlZihuZXcgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQpOwogICAgIF9pbnRlcmZhY2UtPnNldFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVy
KCZfY2hhbmdlT2JzZXJ2ZXIpOwotICAgIF9tb2RlbCA9IGFkb3B0UmVmKG5ldyBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudCk7CisgICAgX21vZGVsID0gYWRvcHRSZWYobmV3IFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KTsKICAgICBfbW9kZWwtPnNldFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZShfaW50ZXJmYWNlLmdldCgpKTsKICAgICBfaW50ZXJmYWNl
LT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbChfbW9kZWwuZ2V0KCkpOwotICAgIF9tb2RlbC0+
c2V0TWVkaWFFbGVtZW50KF9tZWRpYUVsZW1lbnQuZ2V0KCkpOworICAgIF9tb2RlbC0+c2V0Vmlk
ZW9FbGVtZW50KF92aWRlb0VsZW1lbnQuZ2V0KCkpOwogICAgIF92aWRlb0Z1bGxzY3JlZW5MYXll
ciA9IFtDQUxheWVyIGxheWVyXTsKLSAgICBfaW50ZXJmYWNlLT5zZXR1cEZ1bGxzY3JlZW4oKl92
aWRlb0Z1bGxzY3JlZW5MYXllci5nZXQoKSwgX21lZGlhRWxlbWVudC0+Y2xpZW50UmVjdCgpLCB2
aWV3KTsKKyAgICBfaW50ZXJmYWNlLT5zZXR1cEZ1bGxzY3JlZW4oKl92aWRlb0Z1bGxzY3JlZW5M
YXllci5nZXQoKSwgX3ZpZGVvRWxlbWVudC0+Y2xpZW50UmVjdCgpLCB2aWV3KTsKIH0KIAogLSAo
dm9pZClleGl0RnVsbHNjcmVlbgogewotICAgIF9pbnRlcmZhY2UtPmV4aXRGdWxsc2NyZWVuKF9t
ZWRpYUVsZW1lbnQtPnNjcmVlblJlY3QoKSk7CisgICAgX2ludGVyZmFjZS0+ZXhpdEZ1bGxzY3Jl
ZW4oX3ZpZGVvRWxlbWVudC0+c2NyZWVuUmVjdCgpKTsKIH0KIAogLSAodm9pZClyZXF1ZXN0SGlk
ZUFuZEV4aXRGdWxsc2NyZWVuCkBAIC0xNjMsNyArMTYzLDcgQEAgLSAodm9pZClkaWRDbGVhbnVw
RnVsbHNjcmVlbgogICAgICAgICBfbW9kZWwtPnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKG5pbCk7
CiAgICAgICAgIF9pbnRlcmZhY2UtPnNldFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKG51bGxwdHIp
OwogICAgICAgICBfbW9kZWwtPnNldFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZShudWxscHRy
KTsKLSAgICAgICAgX21vZGVsLT5zZXRNZWRpYUVsZW1lbnQobnVsbHB0cik7CisgICAgICAgIF9t
b2RlbC0+c2V0VmlkZW9FbGVtZW50KG51bGxwdHIpOwogICAgICAgICBfaW50ZXJmYWNlLT5zZXRX
ZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcihudWxscHRyKTsKICAgICAgICAgX21vZGVs
ID0gbnVsbHB0cjsKICAgICAgICAgX2ludGVyZmFjZSA9IG51bGxwdHI7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZS5oCShyZXZpc2lvbiAxNzMxODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDkg
KzUwLDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRWaWRlb0RpbWVuc2lvbnMoYm9v
bCBoYXNWaWRlbywgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCBzZXRTZWVrYWJsZVJhbmdlcyhjb25zdCBUaW1lUmFuZ2VzJikgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBzZXRDYW5QbGF5RmFzdFJldmVyc2UoYm9vbCkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBzZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgb3B0
aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRM
ZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBvcHRpb25z
LCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldEV4dGVy
bmFsUGxheWJhY2soYm9vbCBlbmFibGVkLCBFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgU3Ry
aW5nIGxvY2FsaXplZERldmljZU5hbWUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QXVkaW9N
ZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPFdURjo6U3RyaW5nPiYgb3B0aW9ucywg
dWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRMZWdpYmxl
TWVkaWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZlY3RvcjxXVEY6OlN0cmluZz4mIG9wdGlvbnMs
IHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RXh0ZXJu
YWxQbGF5YmFjayhib29sIGVuYWJsZWQsIEV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBXVEY6
OlN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKSA9IDA7CiB9OwogCiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQuaAkocmV2aXNpb24gMTczMTgyKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDcgKzMwLDYgQEAKICNpZiBQTEFURk9STShJT1MpICYmIF9fSVBIT05FX09T
X1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDgwMDAwCiAKICNpbmNsdWRlIDxXZWJDb3JlL0V2ZW50
TGlzdGVuZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0hUTUxNZWRpYUVsZW1lbnQuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1BsYXRmb3JtTGF5ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1dlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTQ0LDcg
KzQzLDEyIEBAIE9CSkNfQ0xBU1MgVUlWaWV3OwogT0JKQ19DTEFTUyBDQUxheWVyOwogT0JKQ19D
TEFTUyBXZWJBVlZpZGVvTGF5ZXI7CiAKK25hbWVzcGFjZSBXVEYgeworY2xhc3MgU3RyaW5nOwor
fQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBJbnRSZWN0OwogY2xhc3MgV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWw7CiAgICAgCiBjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNl
cnZlciB7CkBAIC01NSw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkRXhp
dEZ1bGxzY3JlZW4oKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZENsZWFudXBGdWxsc2NyZWVu
KCkgPSAwOwogfTsKLSAgICAKKwogY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQKICAgICA6IHB1YmxpYyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UKICAgICAsIHB1Ymxp
YyBSZWZDb3VudGVkPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiB7CkBAIC04OCwx
MyArOTIsMTMgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXRW
aWRlb0RpbWVuc2lvbnMoYm9vbCBoYXNWaWRlbywgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkg
b3ZlcnJpZGU7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNldFNlZWthYmxlUmFu
Z2VzKGNvbnN0IFRpbWVSYW5nZXMmKSBvdmVycmlkZTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIHZvaWQgc2V0Q2FuUGxheUZhc3RSZXZlcnNlKGJvb2wpIG92ZXJyaWRlOwotICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyhjb25z
dCBWZWN0b3I8U3RyaW5nPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgb3ZlcnJp
ZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNldExlZ2libGVNZWRpYVNlbGVj
dGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVj
dGVkSW5kZXgpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXRF
eHRlcm5hbFBsYXliYWNrKGJvb2wgZW5hYmxlZCwgRXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUs
IFN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIHZvaWQgc2V0QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9y
PFdURjo6U3RyaW5nPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgb3ZlcnJpZGU7
CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNldExlZ2libGVNZWRpYVNlbGVjdGlv
bk9wdGlvbnMoY29uc3QgVmVjdG9yPFdURjo6U3RyaW5nPiYgb3B0aW9ucywgdWludDY0X3Qgc2Vs
ZWN0ZWRJbmRleCkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNl
dEV4dGVybmFsUGxheWJhY2soYm9vbCBlbmFibGVkLCBFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlw
ZSwgV1RGOjpTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSkgb3ZlcnJpZGU7CiAKLSAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc2V0dXBGdWxsc2NyZWVuKFBsYXRmb3JtTGF5ZXImLCBX
ZWJDb3JlOjpJbnRSZWN0IGluaXRpYWxSZWN0LCBVSVZpZXcgKik7CisgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB2b2lkIHNldHVwRnVsbHNjcmVlbihQbGF0Zm9ybUxheWVyJiwgSW50UmVjdCBp
bml0aWFsUmVjdCwgVUlWaWV3ICopOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBl
bnRlckZ1bGxzY3JlZW4oKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZXhpdEZ1
bGxzY3JlZW4oV2ViQ29yZTo6SW50UmVjdCBmaW5hbFJlY3QpOworICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgdm9pZCBleGl0RnVsbHNjcmVlbihJbnRSZWN0IGZpbmFsUmVjdCk7CiAgICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNsZWFudXBGdWxsc2NyZWVuKCk7CiAgICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB2b2lkIGludmFsaWRhdGUoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIHZvaWQgcmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdC5tbQkocmV2aXNpb24gMTczMTgyKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVUaHJl
YWRSdW4uaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50LmgJKHJl
dmlzaW9uIDE3MzE4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDkyICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0KLSNpZm5k
ZWYgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnRfaAotI2RlZmluZSBXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudF9oCi0KLSNpZiBQTEFURk9STShJT1MpCi0KLSNp
bmNsdWRlIDxXZWJDb3JlL0V2ZW50TGlzdGVuZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0
UmVjdC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1MYXllci5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgSFRNTE1lZGlhRWxlbWVudDsKLWNsYXNzIFRleHRU
cmFjazsKLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZTsKLQotY2xhc3MgV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQgOiBwdWJsaWMgV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWwsIHB1YmxpYyBFdmVudExpc3RlbmVyIHsKLXB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9S
VCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudCgpOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50KCk7Ci0gICAg
dm9pZCBzZXRXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UoV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlKiBpbnRlcmZhY2UpIHttX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSA9IGludGVyZmFj
ZTt9Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRNZWRpYUVsZW1lbnQoSFRNTE1lZGlhRWxl
bWVudCopOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIo
UGxhdGZvcm1MYXllciopOwotICAgIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBo
YW5kbGVFdmVudChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29yZTo6RXZl
bnQqKSBvdmVycmlkZTsKLSAgICB2b2lkIHVwZGF0ZUZvckV2ZW50TmFtZShjb25zdCBXVEY6OkF0
b21pY1N0cmluZyYpOwotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBFdmVudExpc3RlbmVyJiBy
aHMpIG92ZXJyaWRlCi0gICAgICAgIHtyZXR1cm4gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RXZlbnRM
aXN0ZW5lcio+KHRoaXMpID09ICZyaHM7fQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2
b2lkIHBsYXkoKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcGF1
c2UoKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgdG9nZ2xlUGxh
eVN0YXRlKCkgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGJlZ2lu
U2NydWJiaW5nKCkgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGVu
ZFNjcnViYmluZygpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBz
ZWVrVG9UaW1lKGRvdWJsZSB0aW1lKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIHZvaWQgZmFzdFNlZWsoZG91YmxlIHRpbWUpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgdm9pZCBiZWdpblNjYW5uaW5nRm9yd2FyZCgpIG92ZXJyaWRlOwotICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBiZWdpblNjYW5uaW5nQmFja3dhcmQoKSBvdmVycmlk
ZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZW5kU2Nhbm5pbmcoKSBvdmVycmlk
ZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcmVxdWVzdEV4aXRGdWxsc2NyZWVu
KCkgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNldFZpZGVvTGF5
ZXJGcmFtZShGbG9hdFJlY3QpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
dm9pZCBzZXRWaWRlb0xheWVyR3Jhdml0eShXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9H
cmF2aXR5KSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc2VsZWN0
QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBpbmRleCkgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB2b2lkIHNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBpbmRl
eCkgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIGNvbnN0IFZlY3RvcjxXVEY6OkF0
b21pY1N0cmluZz4mIG9ic2VydmVkRXZlbnROYW1lcygpOwotICAgIGNvbnN0IFdURjo6QXRvbWlj
U3RyaW5nJiBldmVudE5hbWVBbGwoKTsKLSAgICAKLSAgICBSZWZQdHI8SFRNTE1lZGlhRWxlbWVu
dD4gbV9tZWRpYUVsZW1lbnQ7Ci0gICAgUmV0YWluUHRyPFBsYXRmb3JtTGF5ZXI+IG1fdmlkZW9G
dWxsc2NyZWVuTGF5ZXI7Ci0gICAgYm9vbCBtX2lzTGlzdGVuaW5nOwotICAgIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZSogbV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U7Ci0gICAgRmxvYXRS
ZWN0IG1fdmlkZW9GcmFtZTsKLSAgICBWZWN0b3I8UmVmUHRyPFRleHRUcmFjaz4+IG1fbGVnaWJs
ZVRyYWNrc0Zvck1lbnU7Ci0KLSAgICB2b2lkIHVwZGF0ZUxlZ2libGVPcHRpb25zKCk7Ci19Owot
Ci19Ci0KLSNlbmRpZgotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lv
cy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVs
ZW1lbnQubW0JKHJldmlzaW9uIDE3MzE4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lv
cy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5tbQkod29ya2luZyBjb3B5KQpA
QCAtMSwzODUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotCi0jaWYgUExBVEZPUk0oSU9TKQotCi0jaW1wb3J0
ICJXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5oIgotCi0jaW1wb3J0ICJET01F
dmVudEludGVybmFsLmgiCi0jaW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1wb3J0ICJNZWRpYUNvbnRy
b2xzSG9zdC5oIgotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLmgiCi0jaW1w
b3J0IDxXZWJDb3JlL0RPTUV2ZW50TGlzdGVuZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRXZlbnQu
aD4KLSNpbXBvcnQgPFdlYkNvcmUvRXZlbnRMaXN0ZW5lci5oPgotI2ltcG9ydCA8V2ViQ29yZS9F
dmVudE5hbWVzLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0hUTUxFbGVtZW50Lmg+Ci0jaW1wb3J0IDxX
ZWJDb3JlL0hUTUxNZWRpYUVsZW1lbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvSFRNTFZpZGVvRWxl
bWVudC5oPgotI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1BhZ2VH
cm91cC5oPgotI2ltcG9ydCA8V2ViQ29yZS9Tb2Z0TGlua2luZy5oPgotI2ltcG9ydCA8V2ViQ29y
ZS9UZXh0VHJhY2tMaXN0Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1RpbWVSYW5nZXMuaD4KLSNpbXBv
cnQgPFdlYkNvcmUvV2ViQ29yZVRocmVhZFJ1bi5oPgotI2ltcG9ydCA8UXVhcnR6Q29yZS9Db3Jl
QW5pbWF0aW9uLmg+Ci0jaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbXBvcnQgPHd0
Zi9SZXRhaW5QdHIuaD4KLQotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFF
bGVtZW50KCkKLSAgICA6IEV2ZW50TGlzdGVuZXIoRXZlbnRMaXN0ZW5lcjo6Q1BQRXZlbnRMaXN0
ZW5lclR5cGUpCi0gICAgLCBtX2lzTGlzdGVuaW5ne2ZhbHNlfQotewotfQotCi1XZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6fldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFF
bGVtZW50KCkKLXsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVu
dDo6c2V0TWVkaWFFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKLXsKLSAg
ICBpZiAobV9tZWRpYUVsZW1lbnQgPT0gbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9tZWRpYUVsZW1lbnQgJiYgbV9pc0xpc3RlbmluZykgewotICAgICAgICBmb3Ig
KGF1dG8gZXZlbnROYW1lIDogb2JzZXJ2ZWRFdmVudE5hbWVzKCkpCi0gICAgICAgICAgICBtX21l
ZGlhRWxlbWVudC0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIHRoaXMsIGZhbHNlKTsK
LSAgICB9Ci0gICAgbV9pc0xpc3RlbmluZyA9IGZhbHNlOwotCi0gICAgbV9tZWRpYUVsZW1lbnQg
PSBtZWRpYUVsZW1lbnQ7Ci0KLSAgICBpZiAoIW1fbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1
cm47Ci0KLSAgICBmb3IgKGF1dG8gZXZlbnROYW1lIDogb2JzZXJ2ZWRFdmVudE5hbWVzKCkpCi0g
ICAgICAgIG1fbWVkaWFFbGVtZW50LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgdGhpcywg
ZmFsc2UpOwotICAgIG1faXNMaXN0ZW5pbmcgPSB0cnVlOwotCi0gICAgdXBkYXRlRm9yRXZlbnRO
YW1lKGV2ZW50TmFtZUFsbCgpKTsKLQotICAgIGlmIChpc0hUTUxWaWRlb0VsZW1lbnQobV9tZWRp
YUVsZW1lbnQuZ2V0KCkpKSB7Ci0gICAgICAgIEhUTUxWaWRlb0VsZW1lbnQgKnZpZGVvRWxlbWVu
dCA9IHRvSFRNTFZpZGVvRWxlbWVudChtX21lZGlhRWxlbWVudC5nZXQoKSk7Ci0gICAgICAgIG1f
dmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRWaWRlb0RpbWVuc2lvbnModHJ1ZSwgdmlkZW9F
bGVtZW50LT52aWRlb1dpZHRoKCksIHZpZGVvRWxlbWVudC0+dmlkZW9IZWlnaHQoKSk7Ci0gICAg
fSBlbHNlCi0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRWaWRlb0RpbWVu
c2lvbnMoZmFsc2UsIDAsIDApOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVk
aWFFbGVtZW50OjpoYW5kbGVFdmVudChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
V2ViQ29yZTo6RXZlbnQqIGV2ZW50KQotewotICAgIExPRyhNZWRpYSwgImhhbmRsZUV2ZW50ICVz
IiwgZXZlbnQtPnR5cGUoKS5jaGFyYWN0ZXJzOCgpKTsKLSAgICB1cGRhdGVGb3JFdmVudE5hbWUo
ZXZlbnQtPnR5cGUoKSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVs
ZW1lbnQ6OnVwZGF0ZUZvckV2ZW50TmFtZShjb25zdCBXVEY6OkF0b21pY1N0cmluZyYgZXZlbnRO
YW1lKQotewotICAgIGlmICghbV9tZWRpYUVsZW1lbnQgfHwgIW1fdmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYm9vbCBhbGwgPSBldmVudE5hbWUg
PT0gZXZlbnROYW1lQWxsKCk7Ci0KLSAgICBpZiAoYWxsCi0gICAgICAgIHx8IGV2ZW50TmFtZSA9
PSBldmVudE5hbWVzKCkuZHVyYXRpb25jaGFuZ2VFdmVudCkgewotICAgICAgICBtX3ZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZS0+c2V0RHVyYXRpb24obV9tZWRpYUVsZW1lbnQtPmR1cmF0aW9uKCkp
OwotICAgICAgICAvLyBUaGVzZSBpcyBubyBzdGFuZGFyZCBldmVudCBmb3IgbWluRmFzdFJldmVy
c2VSYXRlQ2hhbmdlOyBkdXJhdGlvbiBjaGFuZ2UgaXMgYSByZWFzb25hYmxlIHByb3h5IGZvciBp
dC4KLSAgICAgICAgLy8gSXQgaGFwcGVucyBldmVyeSB0aW1lIGEgbmV3IGl0ZW0gYmVjb21lcyBy
ZWFkeSB0byBwbGF5LgotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0Q2Fu
UGxheUZhc3RSZXZlcnNlKG1fbWVkaWFFbGVtZW50LT5taW5GYXN0UmV2ZXJzZVJhdGUoKSA8IDAu
MCk7Ci0gICAgfQotCi0gICAgaWYgKGFsbAotICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnRO
YW1lcygpLnBhdXNlRXZlbnQKLSAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5w
bGF5RXZlbnQKLSAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5yYXRlY2hhbmdl
RXZlbnQpCi0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRSYXRlKCFtX21l
ZGlhRWxlbWVudC0+cGF1c2VkKCksIG1fbWVkaWFFbGVtZW50LT5wbGF5YmFja1JhdGUoKSk7Ci0K
LSAgICBpZiAoYWxsCi0gICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkudGltZXVw
ZGF0ZUV2ZW50KSB7Ci0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRDdXJy
ZW50VGltZShtX21lZGlhRWxlbWVudC0+Y3VycmVudFRpbWUoKSwgW1tOU1Byb2Nlc3NJbmZvIHBy
b2Nlc3NJbmZvXSBzeXN0ZW1VcHRpbWVdKTsKLSAgICAgICAgLy8gRklYTUU6IDEzMDc4OCAtIGZp
bmQgYSBiZXR0ZXIgZXZlbnQgdG8gdXBkYXRlIHNlZWthYmxlIHJhbmdlcyBmcm9tLgotICAgICAg
ICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0U2Vla2FibGVSYW5nZXMoKm1fbWVkaWFF
bGVtZW50LT5zZWVrYWJsZSgpKTsKLSAgICB9Ci0KLSAgICBpZiAoYWxsCi0gICAgICAgIHx8IGV2
ZW50TmFtZSA9PSBldmVudE5hbWVzKCkuYWRkdHJhY2tFdmVudAotICAgICAgICB8fCBldmVudE5h
bWUgPT0gZXZlbnROYW1lcygpLnJlbW92ZXRyYWNrRXZlbnQpCi0gICAgICAgIHVwZGF0ZUxlZ2li
bGVPcHRpb25zKCk7Ci0KLSAgICBpZiAoYWxsCi0gICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVu
dE5hbWVzKCkud2Via2l0Y3VycmVudHBsYXliYWNrdGFyZ2V0aXN3aXJlbGVzc2NoYW5nZWRFdmVu
dCkgewotICAgICAgICBib29sIGVuYWJsZWQgPSBtX21lZGlhRWxlbWVudC0+bWVkaWFTZXNzaW9u
KCkuY3VycmVudFBsYXliYWNrVGFyZ2V0SXNXaXJlbGVzcygqbV9tZWRpYUVsZW1lbnQpOwotICAg
ICAgICBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRU
eXBlIHRhcmdldFR5cGUgPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U6OlRhcmdldFR5cGVO
b25lOwotICAgICAgICBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZTsKLQotICAgICAgICBpZiAo
bV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCkpIHsKLSAgICAgICAgICAgIERFUFJF
Q0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGFpcnBsYXksIChBU0NJSUxpdGVyYWwo
ImFpcnBsYXkiKSkpOwotICAgICAgICAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FM
KFN0cmluZywgdHZvdXQsIChBU0NJSUxpdGVyYWwoInR2b3V0IikpKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgU3RyaW5nIHR5cGUgPSBtX21lZGlhRWxlbWVudC0+bWVkaWFDb250cm9sc0hv
c3QoKS0+ZXh0ZXJuYWxEZXZpY2VUeXBlKCk7Ci0gICAgICAgICAgICBpZiAodHlwZSA9PSBhaXJw
bGF5KQotICAgICAgICAgICAgICAgIHRhcmdldFR5cGUgPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2U6OlRhcmdldFR5cGVBaXJQbGF5OwotICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSB0
dm91dCkKLSAgICAgICAgICAgICAgICB0YXJnZXRUeXBlID0gV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlOjpUYXJnZXRUeXBlVFZPdXQ7Ci0gICAgICAgICAgICBsb2NhbGl6ZWREZXZpY2VOYW1l
ID0gbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCktPmV4dGVybmFsRGV2aWNlRGlz
cGxheU5hbWUoKTsKLSAgICAgICAgfQotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZS0+c2V0RXh0ZXJuYWxQbGF5YmFjayhlbmFibGVkLCB0YXJnZXRUeXBlLCBsb2NhbGl6ZWREZXZp
Y2VOYW1lKTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVs
ZW1lbnQ6OnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKFBsYXRmb3JtTGF5ZXIqIHZpZGVvTGF5ZXIp
Ci17Ci0gICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIgPT0gdmlkZW9MYXllcikKLSAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIgPSB2aWRlb0xheWVy
OwotICAgIFttX3ZpZGVvRnVsbHNjcmVlbkxheWVyIHNldEZyYW1lOm1fdmlkZW9GcmFtZV07Ci0g
ICAgCi0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1l
bnQ+IHByb3RlY3QodGhpcyk7Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgIGlmIChtX21l
ZGlhRWxlbWVudCkKLSAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5zZXRWaWRlb0Z1bGxzY3Jl
ZW5MYXllcihtX3ZpZGVvRnVsbHNjcmVlbkxheWVyLmdldCgpKTsKLSAgICAgICAgcHJvdGVjdC5j
bGVhcigpOwotICAgIH0pOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFF
bGVtZW50OjpwbGF5KCkgewotICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsTWVkaWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOwotICAgIFdlYlRocmVhZFJ1biheewotICAg
ICAgICBpZiAobV9tZWRpYUVsZW1lbnQpCi0gICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+cGxh
eSgpOwotICAgICAgICBwcm90ZWN0LmNsZWFyKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnBhdXNlKCkKLXsKLSAgICBfX2Jsb2NrIFJl
ZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsK
LSAgICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAg
ICAgICAgbV9tZWRpYUVsZW1lbnQtPnBhdXNlKCk7Ci0gICAgICAgIHByb3RlY3QuY2xlYXIoKTsK
LSAgICB9KTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6
dG9nZ2xlUGxheVN0YXRlKCkKLXsKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKLSAgICBXZWJUaHJlYWRSdW4oXnsK
LSAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQt
PnRvZ2dsZVBsYXlTdGF0ZSgpOwotICAgICAgICBwcm90ZWN0LmNsZWFyKCk7Ci0gICAgfSk7Ci19
Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OmJlZ2luU2NydWJi
aW5nKCkKLXsKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlh
RWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKLSAgICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgaWYg
KG1fbWVkaWFFbGVtZW50KQotICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmJlZ2luU2NydWJi
aW5nKCk7Ci0gICAgICAgIHByb3RlY3QuY2xlYXIoKTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6ZW5kU2NydWJiaW5nKCkKLXsKLSAgICBf
X2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVj
dCh0aGlzKTsKLSAgICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50
KQotICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmVuZFNjcnViYmluZygpOwotICAgICAgICBw
cm90ZWN0LmNsZWFyKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxNZWRpYUVsZW1lbnQ6OnNlZWtUb1RpbWUoZG91YmxlIHRpbWUpCi17Ci0gICAgX19ibG9jayBS
ZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7
Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAg
ICAgICAgIG1fbWVkaWFFbGVtZW50LT5zZXRDdXJyZW50VGltZSh0aW1lKTsKLSAgICAgICAgcHJv
dGVjdC5jbGVhcigpOwotICAgIH0pOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
TWVkaWFFbGVtZW50OjpmYXN0U2Vlayhkb3VibGUgdGltZSkKLXsKLSAgICBfX2Jsb2NrIFJlZlB0
cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKLSAg
ICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICAg
ICAgbV9tZWRpYUVsZW1lbnQtPmZhc3RTZWVrKHRpbWUpOwotICAgICAgICBwcm90ZWN0LmNsZWFy
KCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1l
bnQ6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkKLXsKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKLSAgICBXZWJUaHJl
YWRSdW4oXnsKLSAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICAgICAgbV9tZWRp
YUVsZW1lbnQtPmJlZ2luU2Nhbm5pbmcoTWVkaWFDb250cm9sbGVySW50ZXJmYWNlOjpGb3J3YXJk
KTsKLSAgICAgICAgcHJvdGVjdC5jbGVhcigpOwotICAgIH0pOwotfQotCi12b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpiZWdpblNjYW5uaW5nQmFja3dhcmQoKQotewot
ICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50PiBw
cm90ZWN0KHRoaXMpOwotICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICBpZiAobV9tZWRpYUVs
ZW1lbnQpCi0gICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+YmVnaW5TY2FubmluZyhNZWRpYUNv
bnRyb2xsZXJJbnRlcmZhY2U6OkJhY2t3YXJkKTsKLSAgICAgICAgcHJvdGVjdC5jbGVhcigpOwot
ICAgIH0pOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50Ojpl
bmRTY2FubmluZygpCi17Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxNZWRpYUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0gICAg
ICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5lbmRT
Y2FubmluZygpOwotICAgICAgICBwcm90ZWN0LmNsZWFyKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnJlcXVlc3RFeGl0RnVsbHNjcmVl
bigpCi17Ci0gICAgaWYgKCFtX21lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
X19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+IHByb3Rl
Y3QodGhpcyk7Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgIGlmIChtX21lZGlhRWxlbWVu
dCAmJiBtX21lZGlhRWxlbWVudC0+aXNGdWxsc2NyZWVuKCkpCi0gICAgICAgICAgICBtX21lZGlh
RWxlbWVudC0+ZXhpdEZ1bGxzY3JlZW4oKTsKLSAgICAgICAgcHJvdGVjdC5jbGVhcigpOwotICAg
IH0pOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpzZXRW
aWRlb0xheWVyRnJhbWUoRmxvYXRSZWN0IHJlY3QpCi17Ci0gICAgbV92aWRlb0ZyYW1lID0gcmVj
dDsKLSAgICBbbV92aWRlb0Z1bGxzY3JlZW5MYXllciBzZXRGcmFtZTpDR1JlY3QocmVjdCldOwot
ICAgIG1fbWVkaWFFbGVtZW50LT5zZXRWaWRlb0Z1bGxzY3JlZW5GcmFtZShyZWN0KTsKLX0KLQot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6c2V0VmlkZW9MYXllckdy
YXZpdHkoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSBncmF2aXR5KQotewot
ICAgIE1lZGlhUGxheWVyOjpWaWRlb0dyYXZpdHkgdmlkZW9HcmF2aXR5ID0gTWVkaWFQbGF5ZXI6
OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdDsKLSAgICBpZiAoZ3Jhdml0eSA9PSBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplKQotICAgICAgICB2aWRlb0dyYXZpdHkg
PSBNZWRpYVBsYXllcjo6VmlkZW9HcmF2aXR5UmVzaXplOwotICAgIGVsc2UgaWYgKGdyYXZpdHkg
PT0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCkKLSAg
ICAgICAgdmlkZW9HcmF2aXR5ID0gTWVkaWFQbGF5ZXI6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVj
dDsKLSAgICBlbHNlIGlmIChncmF2aXR5ID09IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRl
b0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsKQotICAgICAgICB2aWRlb0dyYXZpdHkgPSBNZWRpYVBs
YXllcjo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbDsKLSAgICBlbHNlCi0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIAotICAgIG1fbWVkaWFFbGVtZW50LT5zZXRWaWRlb0Z1
bGxzY3JlZW5HcmF2aXR5KHZpZGVvR3Jhdml0eSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QpCi17
Ci0gICAgLy8gRklYTUU6IDEzMTIzNiBJbXBsZW1lbnQgYXVkaW8gdHJhY2sgc2VsZWN0aW9uLgot
fQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpzZWxlY3RMZWdp
YmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpCi17Ci0gICAgVGV4dFRyYWNrKiB0ZXh0VHJh
Y2sgPSBudWxscHRyOwotICAgIAotICAgIGlmIChpbmRleCA8IG1fbGVnaWJsZVRyYWNrc0Zvck1l
bnUuc2l6ZSgpKQotICAgICAgICB0ZXh0VHJhY2sgPSBtX2xlZ2libGVUcmFja3NGb3JNZW51W3N0
YXRpY19jYXN0PHNpemVfdD4oaW5kZXgpXS5nZXQoKTsKLSAgICAKLSAgICBtX21lZGlhRWxlbWVu
dC0+c2V0U2VsZWN0ZWRUZXh0VHJhY2sodGV4dFRyYWNrKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6dXBkYXRlTGVnaWJsZU9wdGlvbnMoKQotewotICAg
IFRleHRUcmFja0xpc3QqIHRyYWNrTGlzdCA9IG1fbWVkaWFFbGVtZW50LT50ZXh0VHJhY2tzKCk7
Ci0gICAgaWYgKCF0cmFja0xpc3QgfHwgIW1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2Uo
KSB8fCAhbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICAKLSAgICBXVEY6OkF0b21pY1N0cmluZyBkaXNwbGF5TW9kZSA9IG1fbWVkaWFFbGVt
ZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgpLT5jYXB0aW9uRGlzcGxheU1vZGUoKTsKLSAgICBUZXh0
VHJhY2sqIG9mZkl0ZW0gPSBtX21lZGlhRWxlbWVudC0+bWVkaWFDb250cm9sc0hvc3QoKS0+Y2Fw
dGlvbk1lbnVPZmZJdGVtKCk7Ci0gICAgVGV4dFRyYWNrKiBhdXRvbWF0aWNJdGVtID0gbV9tZWRp
YUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCktPmNhcHRpb25NZW51QXV0b21hdGljSXRlbSgp
OwotICAgIENhcHRpb25Vc2VyUHJlZmVyZW5jZXMmIGNhcHRpb25QcmVmZXJlbmNlcyA9ICptX21l
ZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCktPmdyb3VwKCkuY2FwdGlvblByZWZlcmVuY2Vz
KCk7Ci0gICAgbV9sZWdpYmxlVHJhY2tzRm9yTWVudSA9IGNhcHRpb25QcmVmZXJlbmNlcy5zb3J0
ZWRUcmFja0xpc3RGb3JNZW51KHRyYWNrTGlzdCk7Ci0gICAgVmVjdG9yPFN0cmluZz4gdHJhY2tE
aXNwbGF5TmFtZXM7Ci0gICAgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCA9IDA7Ci0gICAgdWludDY0
X3Qgb2ZmSW5kZXggPSAwOwotICAgIGJvb2wgdHJhY2tNZW51SXRlbVNlbGVjdGVkID0gZmFsc2U7
Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG1fbGVnaWJsZVRyYWNr
c0Zvck1lbnUuc2l6ZSgpOyBpbmRleCsrKSB7Ci0gICAgICAgIGF1dG8mIHRyYWNrID0gbV9sZWdp
YmxlVHJhY2tzRm9yTWVudVtpbmRleF07Ci0gICAgICAgIHRyYWNrRGlzcGxheU5hbWVzLmFwcGVu
ZChjYXB0aW9uUHJlZmVyZW5jZXMuZGlzcGxheU5hbWVGb3JUcmFjayh0cmFjay5nZXQoKSkpOwot
ICAgICAgICAKLSAgICAgICAgaWYgKHRyYWNrID09IG9mZkl0ZW0pCi0gICAgICAgICAgICBvZmZJ
bmRleCA9IGluZGV4OwotICAgICAgICAKLSAgICAgICAgaWYgKHRyYWNrID09IGF1dG9tYXRpY0l0
ZW0gJiYgZGlzcGxheU1vZGUgPT0gTWVkaWFDb250cm9sc0hvc3Q6OmF1dG9tYXRpY0tleXdvcmQo
KSkgewotICAgICAgICAgICAgc2VsZWN0ZWRJbmRleCA9IGluZGV4OwotICAgICAgICAgICAgdHJh
Y2tNZW51SXRlbVNlbGVjdGVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
aWYgKGRpc3BsYXlNb2RlICE9IE1lZGlhQ29udHJvbHNIb3N0OjphdXRvbWF0aWNLZXl3b3JkKCkg
JiYgdHJhY2stPm1vZGUoKSA9PSBUZXh0VHJhY2s6OnNob3dpbmdLZXl3b3JkKCkpIHsKLSAgICAg
ICAgICAgIHNlbGVjdGVkSW5kZXggPSBpbmRleDsKLSAgICAgICAgICAgIHRyYWNrTWVudUl0ZW1T
ZWxlY3RlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYgKG9mZkluZGV4
ICYmICF0cmFja01lbnVJdGVtU2VsZWN0ZWQgJiYgZGlzcGxheU1vZGUgPT0gTWVkaWFDb250cm9s
c0hvc3Q6OmZvcmNlZE9ubHlLZXl3b3JkKCkpIHsKLSAgICAgICAgc2VsZWN0ZWRJbmRleCA9IG9m
ZkluZGV4OwotICAgICAgICB0cmFja01lbnVJdGVtU2VsZWN0ZWQgPSB0cnVlOwotICAgIH0KLSAg
ICAKLSAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0TGVnaWJsZU1lZGlhU2VsZWN0
aW9uT3B0aW9ucyh0cmFja0Rpc3BsYXlOYW1lcywgc2VsZWN0ZWRJbmRleCk7Ci19Ci0KLWNvbnN0
IFZlY3RvcjxBdG9taWNTdHJpbmc+JiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVu
dDo6b2JzZXJ2ZWRFdmVudE5hbWVzKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VmVj
dG9yPEF0b21pY1N0cmluZz4+IHNFdmVudE5hbWVzOwotCi0gICAgaWYgKCFzRXZlbnROYW1lcy5n
ZXQoKS5zaXplKCkpIHsKLSAgICAgICAgc0V2ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFt
ZXMoKS5kdXJhdGlvbmNoYW5nZUV2ZW50KTsKLSAgICAgICAgc0V2ZW50TmFtZXMuZ2V0KCkuYXBw
ZW5kKGV2ZW50TmFtZXMoKS5wYXVzZUV2ZW50KTsKLSAgICAgICAgc0V2ZW50TmFtZXMuZ2V0KCku
YXBwZW5kKGV2ZW50TmFtZXMoKS5wbGF5RXZlbnQpOwotICAgICAgICBzRXZlbnROYW1lcy5nZXQo
KS5hcHBlbmQoZXZlbnROYW1lcygpLnJhdGVjaGFuZ2VFdmVudCk7Ci0gICAgICAgIHNFdmVudE5h
bWVzLmdldCgpLmFwcGVuZChldmVudE5hbWVzKCkudGltZXVwZGF0ZUV2ZW50KTsKLSAgICAgICAg
c0V2ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFtZXMoKS5hZGR0cmFja0V2ZW50KTsKLSAg
ICAgICAgc0V2ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFtZXMoKS5yZW1vdmV0cmFja0V2
ZW50KTsKLSAgICAgICAgc0V2ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFtZXMoKS53ZWJr
aXRjdXJyZW50cGxheWJhY2t0YXJnZXRpc3dpcmVsZXNzY2hhbmdlZEV2ZW50KTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHNFdmVudE5hbWVzLmdldCgpOwotfQotCi1jb25zdCBBdG9taWNTdHJpbmcmIFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpldmVudE5hbWVBbGwoKQotewotICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHNFdmVudE5hbWVBbGwgPSAiYWxs
RXZlbnRzIjsKLSAgICByZXR1cm4gc0V2ZW50TmFtZUFsbDsKLX0KLQotI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaAkocmV2aXNpb24gMTczMTYxKQkoZnJvbSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVs
ZW1lbnQuaDoxNzMxNjEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDky
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZu
ZGVmIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50X2gKKyNkZWZpbmUgV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnRfaAorCisjaWYgUExBVEZPUk0oSU9TKQorCisj
aW5jbHVkZSA8V2ViQ29yZS9FdmVudExpc3RlbmVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GbG9h
dFJlY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtTGF5ZXIuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEhUTUxNZWRpYUVsZW1lbnQ7CitjbGFzcyBUZXh0
VHJhY2s7CitjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U7CisKK2NsYXNzIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50IDogcHVibGljIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsLCBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7CitwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBP
UlQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQoKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudCgpOworICAg
IHZvaWQgc2V0V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZSogaW50ZXJmYWNlKSB7bV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UgPSBpbnRlcmZh
Y2U7fQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TWVkaWFFbGVtZW50KEhUTUxNZWRpYUVs
ZW1lbnQqKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFZpZGVvRnVsbHNjcmVlbkxheWVy
KFBsYXRmb3JtTGF5ZXIqKTsKKyAgICAKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQg
aGFuZGxlRXZlbnQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkNvcmU6OkV2
ZW50Kikgb3ZlcnJpZGU7CisgICAgdm9pZCB1cGRhdGVGb3JFdmVudE5hbWUoY29uc3QgV1RGOjpB
dG9taWNTdHJpbmcmKTsKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRXZlbnRMaXN0ZW5lciYg
cmhzKSBvdmVycmlkZQorICAgICAgICB7cmV0dXJuIHN0YXRpY19jYXN0PFdlYkNvcmU6OkV2ZW50
TGlzdGVuZXIqPih0aGlzKSA9PSAmcmhzO30KKworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
dm9pZCBwbGF5KCkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHBh
dXNlKCkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHRvZ2dsZVBs
YXlTdGF0ZSgpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBiZWdp
blNjcnViYmluZygpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBl
bmRTY3J1YmJpbmcoKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQg
c2Vla1RvVGltZShkb3VibGUgdGltZSkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCB2b2lkIGZhc3RTZWVrKGRvdWJsZSB0aW1lKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIHZvaWQgYmVnaW5TY2FubmluZ0ZvcndhcmQoKSBvdmVycmlkZTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgYmVnaW5TY2FubmluZ0JhY2t3YXJkKCkgb3ZlcnJp
ZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGVuZFNjYW5uaW5nKCkgb3ZlcnJp
ZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHJlcXVlc3RFeGl0RnVsbHNjcmVl
bigpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXRWaWRlb0xh
eWVyRnJhbWUoRmxvYXRSZWN0KSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IHZvaWQgc2V0VmlkZW9MYXllckdyYXZpdHkoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVv
R3Jhdml0eSkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNlbGVj
dEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpIG92ZXJyaWRlOworICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgdm9pZCBzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5k
ZXgpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8V1RGOjpB
dG9taWNTdHJpbmc+JiBvYnNlcnZlZEV2ZW50TmFtZXMoKTsKKyAgICBjb25zdCBXVEY6OkF0b21p
Y1N0cmluZyYgZXZlbnROYW1lQWxsKCk7CisgICAgCisgICAgUmVmUHRyPEhUTUxNZWRpYUVsZW1l
bnQ+IG1fbWVkaWFFbGVtZW50OworICAgIFJldGFpblB0cjxQbGF0Zm9ybUxheWVyPiBtX3ZpZGVv
RnVsbHNjcmVlbkxheWVyOworICAgIGJvb2wgbV9pc0xpc3RlbmluZzsKKyAgICBXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2UqIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOworICAgIEZsb2F0
UmVjdCBtX3ZpZGVvRnJhbWU7CisgICAgVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2s+PiBtX2xlZ2li
bGVUcmFja3NGb3JNZW51OworCisgICAgdm9pZCB1cGRhdGVMZWdpYmxlT3B0aW9ucygpOworfTsK
KworfQorCisjZW5kaWYKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0
LDggKzI0LDggQEAKICAqLwogCiAKLSNpZm5kZWYgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRp
YUVsZW1lbnRfaAotI2RlZmluZSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudF9o
CisjaWZuZGVmIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50X2gKKyNkZWZpbmUg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnRfaAogCiAjaWYgUExBVEZPUk0oSU9T
KQogCkBAIC0zOCwxNiArMzgsMTYgQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKLWNsYXNzIEhUTUxNZWRpYUVsZW1lbnQ7CitjbGFzcyBIVE1MVmlkZW9F
bGVtZW50OwogY2xhc3MgVGV4dFRyYWNrOwogY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlOwogCi1jbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudCA6IHB1Ymxp
YyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCwgcHVibGljIEV2ZW50TGlzdGVuZXIgeworY2xhc3Mg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQgOiBwdWJsaWMgV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWwsIHB1YmxpYyBFdmVudExpc3RlbmVyIHsKIHB1YmxpYzoKLSAgICBXRUJDT1JF
X0VYUE9SVCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudCgpOwotICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50KCk7
CisgICAgV0VCQ09SRV9FWFBPUlQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQo
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZp
ZGVvRWxlbWVudCgpOwogICAgIHZvaWQgc2V0V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSogaW50ZXJmYWNlKSB7bV92aWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2UgPSBpbnRlcmZhY2U7fQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TWVkaWFF
bGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFZp
ZGVvRWxlbWVudChIVE1MVmlkZW9FbGVtZW50Kik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBz
ZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihQbGF0Zm9ybUxheWVyKik7CiAgICAgCiAgICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBXZWJDb3JlOjpFdmVudCopIG92ZXJyaWRlOwpAQCAtNzUsNyArNzUsNyBAQCBw
cml2YXRlOgogICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8V1RGOjpBdG9taWNTdHJpbmc+JiBvYnNl
cnZlZEV2ZW50TmFtZXMoKTsKICAgICBjb25zdCBXVEY6OkF0b21pY1N0cmluZyYgZXZlbnROYW1l
QWxsKCk7CiAgICAgCi0gICAgUmVmUHRyPEhUTUxNZWRpYUVsZW1lbnQ+IG1fbWVkaWFFbGVtZW50
OworICAgIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50PiBtX3ZpZGVvRWxlbWVudDsKICAgICBSZXRh
aW5QdHI8UGxhdGZvcm1MYXllcj4gbV92aWRlb0Z1bGxzY3JlZW5MYXllcjsKICAgICBib29sIG1f
aXNMaXN0ZW5pbmc7CiAgICAgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKiBtX3ZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQu
bW0JKHJldmlzaW9uIDE3MzE2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50Lm1tOjE3MzE2MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5t
bQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorCisjaWYgUExBVEZP
Uk0oSU9TKQorCisjaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5o
IgorCisjaW1wb3J0ICJET01FdmVudEludGVybmFsLmgiCisjaW1wb3J0ICJMb2dnaW5nLmgiCisj
aW1wb3J0ICJNZWRpYUNvbnRyb2xzSG9zdC5oIgorI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlLmgiCisjaW1wb3J0IDxXZWJDb3JlL0RPTUV2ZW50TGlzdGVuZXIuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvRXZlbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRXZlbnRMaXN0ZW5lci5oPgor
I2ltcG9ydCA8V2ViQ29yZS9FdmVudE5hbWVzLmg+CisjaW1wb3J0IDxXZWJDb3JlL0hUTUxFbGVt
ZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0hUTUxNZWRpYUVsZW1lbnQuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvSFRNTFZpZGVvRWxlbWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+CisjaW1w
b3J0IDxXZWJDb3JlL1BhZ2VHcm91cC5oPgorI2ltcG9ydCA8V2ViQ29yZS9Tb2Z0TGlua2luZy5o
PgorI2ltcG9ydCA8V2ViQ29yZS9UZXh0VHJhY2tMaXN0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1Rp
bWVSYW5nZXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZVRocmVhZFJ1bi5oPgorI2ltcG9y
dCA8UXVhcnR6Q29yZS9Db3JlQW5pbWF0aW9uLmg+CisjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95
ZWQuaD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKworCit1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKKworV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OldlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50KCkKKyAgICA6IEV2ZW50TGlzdGVuZXIoRXZlbnRMaXN0
ZW5lcjo6Q1BQRXZlbnRMaXN0ZW5lclR5cGUpCisgICAgLCBtX2lzTGlzdGVuaW5ne2ZhbHNlfQor
eworfQorCitXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6fldlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50KCkKK3sKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbE1lZGlhRWxlbWVudDo6c2V0TWVkaWFFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1l
ZGlhRWxlbWVudCkKK3sKKyAgICBpZiAobV9tZWRpYUVsZW1lbnQgPT0gbWVkaWFFbGVtZW50KQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9tZWRpYUVsZW1lbnQgJiYgbV9pc0xpc3Rlbmlu
ZykgeworICAgICAgICBmb3IgKGF1dG8gZXZlbnROYW1lIDogb2JzZXJ2ZWRFdmVudE5hbWVzKCkp
CisgICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5h
bWUsIHRoaXMsIGZhbHNlKTsKKyAgICB9CisgICAgbV9pc0xpc3RlbmluZyA9IGZhbHNlOworCisg
ICAgbV9tZWRpYUVsZW1lbnQgPSBtZWRpYUVsZW1lbnQ7CisKKyAgICBpZiAoIW1fbWVkaWFFbGVt
ZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGF1dG8gZXZlbnROYW1lIDogb2JzZXJ2
ZWRFdmVudE5hbWVzKCkpCisgICAgICAgIG1fbWVkaWFFbGVtZW50LT5hZGRFdmVudExpc3RlbmVy
KGV2ZW50TmFtZSwgdGhpcywgZmFsc2UpOworICAgIG1faXNMaXN0ZW5pbmcgPSB0cnVlOworCisg
ICAgdXBkYXRlRm9yRXZlbnROYW1lKGV2ZW50TmFtZUFsbCgpKTsKKworICAgIGlmIChpc0hUTUxW
aWRlb0VsZW1lbnQobV9tZWRpYUVsZW1lbnQuZ2V0KCkpKSB7CisgICAgICAgIEhUTUxWaWRlb0Vs
ZW1lbnQgKnZpZGVvRWxlbWVudCA9IHRvSFRNTFZpZGVvRWxlbWVudChtX21lZGlhRWxlbWVudC5n
ZXQoKSk7CisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRWaWRlb0RpbWVu
c2lvbnModHJ1ZSwgdmlkZW9FbGVtZW50LT52aWRlb1dpZHRoKCksIHZpZGVvRWxlbWVudC0+dmlk
ZW9IZWlnaHQoKSk7CisgICAgfSBlbHNlCisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlLT5zZXRWaWRlb0RpbWVuc2lvbnMoZmFsc2UsIDAsIDApOworfQorCit2b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpoYW5kbGVFdmVudChXZWJDb3JlOjpTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgV2ViQ29yZTo6RXZlbnQqIGV2ZW50KQoreworICAgIExPRyhNZWRp
YSwgImhhbmRsZUV2ZW50ICVzIiwgZXZlbnQtPnR5cGUoKS5jaGFyYWN0ZXJzOCgpKTsKKyAgICB1
cGRhdGVGb3JFdmVudE5hbWUoZXZlbnQtPnR5cGUoKSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnVwZGF0ZUZvckV2ZW50TmFtZShjb25zdCBXVEY6OkF0
b21pY1N0cmluZyYgZXZlbnROYW1lKQoreworICAgIGlmICghbV9tZWRpYUVsZW1lbnQgfHwgIW1f
dmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYm9v
bCBhbGwgPSBldmVudE5hbWUgPT0gZXZlbnROYW1lQWxsKCk7CisKKyAgICBpZiAoYWxsCisgICAg
ICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkuZHVyYXRpb25jaGFuZ2VFdmVudCkgewor
ICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0RHVyYXRpb24obV9tZWRpYUVs
ZW1lbnQtPmR1cmF0aW9uKCkpOworICAgICAgICAvLyBUaGVzZSBpcyBubyBzdGFuZGFyZCBldmVu
dCBmb3IgbWluRmFzdFJldmVyc2VSYXRlQ2hhbmdlOyBkdXJhdGlvbiBjaGFuZ2UgaXMgYSByZWFz
b25hYmxlIHByb3h5IGZvciBpdC4KKyAgICAgICAgLy8gSXQgaGFwcGVucyBldmVyeSB0aW1lIGEg
bmV3IGl0ZW0gYmVjb21lcyByZWFkeSB0byBwbGF5LgorICAgICAgICBtX3ZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZS0+c2V0Q2FuUGxheUZhc3RSZXZlcnNlKG1fbWVkaWFFbGVtZW50LT5taW5GYXN0
UmV2ZXJzZVJhdGUoKSA8IDAuMCk7CisgICAgfQorCisgICAgaWYgKGFsbAorICAgICAgICB8fCBl
dmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnBhdXNlRXZlbnQKKyAgICAgICAgfHwgZXZlbnROYW1l
ID09IGV2ZW50TmFtZXMoKS5wbGF5RXZlbnQKKyAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50
TmFtZXMoKS5yYXRlY2hhbmdlRXZlbnQpCisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlLT5zZXRSYXRlKCFtX21lZGlhRWxlbWVudC0+cGF1c2VkKCksIG1fbWVkaWFFbGVtZW50LT5w
bGF5YmFja1JhdGUoKSk7CisKKyAgICBpZiAoYWxsCisgICAgICAgIHx8IGV2ZW50TmFtZSA9PSBl
dmVudE5hbWVzKCkudGltZXVwZGF0ZUV2ZW50KSB7CisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlLT5zZXRDdXJyZW50VGltZShtX21lZGlhRWxlbWVudC0+Y3VycmVudFRpbWUoKSwg
W1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBzeXN0ZW1VcHRpbWVdKTsKKyAgICAgICAgLy8g
RklYTUU6IDEzMDc4OCAtIGZpbmQgYSBiZXR0ZXIgZXZlbnQgdG8gdXBkYXRlIHNlZWthYmxlIHJh
bmdlcyBmcm9tLgorICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0U2Vla2Fi
bGVSYW5nZXMoKm1fbWVkaWFFbGVtZW50LT5zZWVrYWJsZSgpKTsKKyAgICB9CisKKyAgICBpZiAo
YWxsCisgICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkuYWRkdHJhY2tFdmVudAor
ICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnJlbW92ZXRyYWNrRXZlbnQpCisg
ICAgICAgIHVwZGF0ZUxlZ2libGVPcHRpb25zKCk7CisKKyAgICBpZiAoYWxsCisgICAgICAgIHx8
IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkud2Via2l0Y3VycmVudHBsYXliYWNrdGFyZ2V0aXN3
aXJlbGVzc2NoYW5nZWRFdmVudCkgeworICAgICAgICBib29sIGVuYWJsZWQgPSBtX21lZGlhRWxl
bWVudC0+bWVkaWFTZXNzaW9uKCkuY3VycmVudFBsYXliYWNrVGFyZ2V0SXNXaXJlbGVzcygqbV9t
ZWRpYUVsZW1lbnQpOworICAgICAgICBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U6OkV4dGVy
bmFsUGxheWJhY2tUYXJnZXRUeXBlIHRhcmdldFR5cGUgPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2U6OlRhcmdldFR5cGVOb25lOworICAgICAgICBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFt
ZTsKKworICAgICAgICBpZiAobV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCkpIHsK
KyAgICAgICAgICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGFpcnBs
YXksIChBU0NJSUxpdGVyYWwoImFpcnBsYXkiKSkpOworICAgICAgICAgICAgREVQUkVDQVRFRF9E
RUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgdHZvdXQsIChBU0NJSUxpdGVyYWwoInR2b3V0Iikp
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3RyaW5nIHR5cGUgPSBtX21lZGlhRWxlbWVu
dC0+bWVkaWFDb250cm9sc0hvc3QoKS0+ZXh0ZXJuYWxEZXZpY2VUeXBlKCk7CisgICAgICAgICAg
ICBpZiAodHlwZSA9PSBhaXJwbGF5KQorICAgICAgICAgICAgICAgIHRhcmdldFR5cGUgPSBXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U6OlRhcmdldFR5cGVBaXJQbGF5OworICAgICAgICAgICAg
ZWxzZSBpZiAodHlwZSA9PSB0dm91dCkKKyAgICAgICAgICAgICAgICB0YXJnZXRUeXBlID0gV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOjpUYXJnZXRUeXBlVFZPdXQ7CisgICAgICAgICAgICBs
b2NhbGl6ZWREZXZpY2VOYW1lID0gbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCkt
PmV4dGVybmFsRGV2aWNlRGlzcGxheU5hbWUoKTsKKyAgICAgICAgfQorICAgICAgICBtX3ZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZS0+c2V0RXh0ZXJuYWxQbGF5YmFjayhlbmFibGVkLCB0YXJnZXRU
eXBlLCBsb2NhbGl6ZWREZXZpY2VOYW1lKTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKFBsYXRmb3Jt
TGF5ZXIqIHZpZGVvTGF5ZXIpCit7CisgICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIgPT0g
dmlkZW9MYXllcikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fdmlkZW9GdWxsc2NyZWVu
TGF5ZXIgPSB2aWRlb0xheWVyOworICAgIFttX3ZpZGVvRnVsbHNjcmVlbkxheWVyIHNldEZyYW1l
Om1fdmlkZW9GcmFtZV07CisgICAgCisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxNZWRpYUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7CisgICAgV2ViVGhyZWFkUnVuKF57
CisgICAgICAgIGlmIChtX21lZGlhRWxlbWVudCkKKyAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50
LT5zZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihtX3ZpZGVvRnVsbHNjcmVlbkxheWVyLmdldCgpKTsK
KyAgICAgICAgcHJvdGVjdC5jbGVhcigpOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpwbGF5KCkgeworICAgIF9fYmxvY2sgUmVmUHRyPFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOworICAgIFdl
YlRocmVhZFJ1biheeworICAgICAgICBpZiAobV9tZWRpYUVsZW1lbnQpCisgICAgICAgICAgICBt
X21lZGlhRWxlbWVudC0+cGxheSgpOworICAgICAgICBwcm90ZWN0LmNsZWFyKCk7CisgICAgfSk7
Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnBhdXNlKCkK
K3sKKyAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVu
dD4gcHJvdGVjdCh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgaWYgKG1fbWVk
aWFFbGVtZW50KQorICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnBhdXNlKCk7CisgICAgICAg
IHByb3RlY3QuY2xlYXIoKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbE1lZGlhRWxlbWVudDo6dG9nZ2xlUGxheVN0YXRlKCkKK3sKKyAgICBfX2Jsb2NrIFJlZlB0
cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKKyAg
ICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQorICAgICAgICAg
ICAgbV9tZWRpYUVsZW1lbnQtPnRvZ2dsZVBsYXlTdGF0ZSgpOworICAgICAgICBwcm90ZWN0LmNs
ZWFyKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVs
ZW1lbnQ6OmJlZ2luU2NydWJiaW5nKCkKK3sKKyAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKKyAgICBXZWJUaHJlYWRS
dW4oXnsKKyAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQorICAgICAgICAgICAgbV9tZWRpYUVs
ZW1lbnQtPmJlZ2luU2NydWJiaW5nKCk7CisgICAgICAgIHByb3RlY3QuY2xlYXIoKTsKKyAgICB9
KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6ZW5kU2Ny
dWJiaW5nKCkKK3sKKyAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1l
ZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAg
aWYgKG1fbWVkaWFFbGVtZW50KQorICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmVuZFNjcnVi
YmluZygpOworICAgICAgICBwcm90ZWN0LmNsZWFyKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnNlZWtUb1RpbWUoZG91YmxlIHRpbWUp
Cit7CisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1l
bnQ+IHByb3RlY3QodGhpcyk7CisgICAgV2ViVGhyZWFkUnVuKF57CisgICAgICAgIGlmIChtX21l
ZGlhRWxlbWVudCkKKyAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5zZXRDdXJyZW50VGltZSh0
aW1lKTsKKyAgICAgICAgcHJvdGVjdC5jbGVhcigpOworICAgIH0pOworfQorCit2b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpmYXN0U2Vlayhkb3VibGUgdGltZSkKK3sK
KyAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4g
cHJvdGVjdCh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgaWYgKG1fbWVkaWFF
bGVtZW50KQorICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmZhc3RTZWVrKHRpbWUpOworICAg
ICAgICBwcm90ZWN0LmNsZWFyKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkKK3sKKyAgICBfX2Js
b2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0
aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQor
ICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmJlZ2luU2Nhbm5pbmcoTWVkaWFDb250cm9sbGVy
SW50ZXJmYWNlOjpGb3J3YXJkKTsKKyAgICAgICAgcHJvdGVjdC5jbGVhcigpOworICAgIH0pOwor
fQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpiZWdpblNjYW5u
aW5nQmFja3dhcmQoKQoreworICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsTWVkaWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOworICAgIFdlYlRocmVhZFJ1biheeworICAg
ICAgICBpZiAobV9tZWRpYUVsZW1lbnQpCisgICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+YmVn
aW5TY2FubmluZyhNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2U6OkJhY2t3YXJkKTsKKyAgICAgICAg
cHJvdGVjdC5jbGVhcigpOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsTWVkaWFFbGVtZW50OjplbmRTY2FubmluZygpCit7CisgICAgX19ibG9jayBSZWZQdHI8V2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7CisgICAgV2Vi
VGhyZWFkUnVuKF57CisgICAgICAgIGlmIChtX21lZGlhRWxlbWVudCkKKyAgICAgICAgICAgIG1f
bWVkaWFFbGVtZW50LT5lbmRTY2FubmluZygpOworICAgICAgICBwcm90ZWN0LmNsZWFyKCk7Cisg
ICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnJl
cXVlc3RFeGl0RnVsbHNjcmVlbigpCit7CisgICAgaWYgKCFtX21lZGlhRWxlbWVudCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxN
ZWRpYUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7CisgICAgV2ViVGhyZWFkUnVuKF57CisgICAgICAg
IGlmIChtX21lZGlhRWxlbWVudCAmJiBtX21lZGlhRWxlbWVudC0+aXNGdWxsc2NyZWVuKCkpCisg
ICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+ZXhpdEZ1bGxzY3JlZW4oKTsKKyAgICAgICAgcHJv
dGVjdC5jbGVhcigpOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
TWVkaWFFbGVtZW50OjpzZXRWaWRlb0xheWVyRnJhbWUoRmxvYXRSZWN0IHJlY3QpCit7CisgICAg
bV92aWRlb0ZyYW1lID0gcmVjdDsKKyAgICBbbV92aWRlb0Z1bGxzY3JlZW5MYXllciBzZXRGcmFt
ZTpDR1JlY3QocmVjdCldOworICAgIG1fbWVkaWFFbGVtZW50LT5zZXRWaWRlb0Z1bGxzY3JlZW5G
cmFtZShyZWN0KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVu
dDo6c2V0VmlkZW9MYXllckdyYXZpdHkoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jh
dml0eSBncmF2aXR5KQoreworICAgIE1lZGlhUGxheWVyOjpWaWRlb0dyYXZpdHkgdmlkZW9HcmF2
aXR5ID0gTWVkaWFQbGF5ZXI6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdDsKKyAgICBpZiAoZ3Jh
dml0eSA9PSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplKQorICAg
ICAgICB2aWRlb0dyYXZpdHkgPSBNZWRpYVBsYXllcjo6VmlkZW9HcmF2aXR5UmVzaXplOworICAg
IGVsc2UgaWYgKGdyYXZpdHkgPT0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0
eVJlc2l6ZUFzcGVjdCkKKyAgICAgICAgdmlkZW9HcmF2aXR5ID0gTWVkaWFQbGF5ZXI6OlZpZGVv
R3Jhdml0eVJlc2l6ZUFzcGVjdDsKKyAgICBlbHNlIGlmIChncmF2aXR5ID09IFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsKQorICAgICAgICB2aWRl
b0dyYXZpdHkgPSBNZWRpYVBsYXllcjo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbDsKKyAg
ICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIAorICAgIG1fbWVkaWFF
bGVtZW50LT5zZXRWaWRlb0Z1bGxzY3JlZW5HcmF2aXR5KHZpZGVvR3Jhdml0eSk7Cit9CisKK3Zv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnNlbGVjdEF1ZGlvTWVkaWFP
cHRpb24odWludDY0X3QpCit7CisgICAgLy8gRklYTUU6IDEzMTIzNiBJbXBsZW1lbnQgYXVkaW8g
dHJhY2sgc2VsZWN0aW9uLgorfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFF
bGVtZW50OjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpCit7CisgICAg
VGV4dFRyYWNrKiB0ZXh0VHJhY2sgPSBudWxscHRyOworICAgIAorICAgIGlmIChpbmRleCA8IG1f
bGVnaWJsZVRyYWNrc0Zvck1lbnUuc2l6ZSgpKQorICAgICAgICB0ZXh0VHJhY2sgPSBtX2xlZ2li
bGVUcmFja3NGb3JNZW51W3N0YXRpY19jYXN0PHNpemVfdD4oaW5kZXgpXS5nZXQoKTsKKyAgICAK
KyAgICBtX21lZGlhRWxlbWVudC0+c2V0U2VsZWN0ZWRUZXh0VHJhY2sodGV4dFRyYWNrKTsKK30K
Kwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6dXBkYXRlTGVnaWJs
ZU9wdGlvbnMoKQoreworICAgIFRleHRUcmFja0xpc3QqIHRyYWNrTGlzdCA9IG1fbWVkaWFFbGVt
ZW50LT50ZXh0VHJhY2tzKCk7CisgICAgaWYgKCF0cmFja0xpc3QgfHwgIW1fbWVkaWFFbGVtZW50
LT5kb2N1bWVudCgpLnBhZ2UoKSB8fCAhbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0
KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBXVEY6OkF0b21pY1N0cmluZyBkaXNwbGF5
TW9kZSA9IG1fbWVkaWFFbGVtZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgpLT5jYXB0aW9uRGlzcGxh
eU1vZGUoKTsKKyAgICBUZXh0VHJhY2sqIG9mZkl0ZW0gPSBtX21lZGlhRWxlbWVudC0+bWVkaWFD
b250cm9sc0hvc3QoKS0+Y2FwdGlvbk1lbnVPZmZJdGVtKCk7CisgICAgVGV4dFRyYWNrKiBhdXRv
bWF0aWNJdGVtID0gbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCktPmNhcHRpb25N
ZW51QXV0b21hdGljSXRlbSgpOworICAgIENhcHRpb25Vc2VyUHJlZmVyZW5jZXMmIGNhcHRpb25Q
cmVmZXJlbmNlcyA9ICptX21lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCktPmdyb3VwKCku
Y2FwdGlvblByZWZlcmVuY2VzKCk7CisgICAgbV9sZWdpYmxlVHJhY2tzRm9yTWVudSA9IGNhcHRp
b25QcmVmZXJlbmNlcy5zb3J0ZWRUcmFja0xpc3RGb3JNZW51KHRyYWNrTGlzdCk7CisgICAgVmVj
dG9yPFN0cmluZz4gdHJhY2tEaXNwbGF5TmFtZXM7CisgICAgdWludDY0X3Qgc2VsZWN0ZWRJbmRl
eCA9IDA7CisgICAgdWludDY0X3Qgb2ZmSW5kZXggPSAwOworICAgIGJvb2wgdHJhY2tNZW51SXRl
bVNlbGVjdGVkID0gZmFsc2U7CisgICAgCisgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRl
eCA8IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnUuc2l6ZSgpOyBpbmRleCsrKSB7CisgICAgICAgIGF1
dG8mIHRyYWNrID0gbV9sZWdpYmxlVHJhY2tzRm9yTWVudVtpbmRleF07CisgICAgICAgIHRyYWNr
RGlzcGxheU5hbWVzLmFwcGVuZChjYXB0aW9uUHJlZmVyZW5jZXMuZGlzcGxheU5hbWVGb3JUcmFj
ayh0cmFjay5nZXQoKSkpOworICAgICAgICAKKyAgICAgICAgaWYgKHRyYWNrID09IG9mZkl0ZW0p
CisgICAgICAgICAgICBvZmZJbmRleCA9IGluZGV4OworICAgICAgICAKKyAgICAgICAgaWYgKHRy
YWNrID09IGF1dG9tYXRpY0l0ZW0gJiYgZGlzcGxheU1vZGUgPT0gTWVkaWFDb250cm9sc0hvc3Q6
OmF1dG9tYXRpY0tleXdvcmQoKSkgeworICAgICAgICAgICAgc2VsZWN0ZWRJbmRleCA9IGluZGV4
OworICAgICAgICAgICAgdHJhY2tNZW51SXRlbVNlbGVjdGVkID0gdHJ1ZTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgaWYgKGRpc3BsYXlNb2RlICE9IE1lZGlhQ29udHJvbHNIb3N0Ojph
dXRvbWF0aWNLZXl3b3JkKCkgJiYgdHJhY2stPm1vZGUoKSA9PSBUZXh0VHJhY2s6OnNob3dpbmdL
ZXl3b3JkKCkpIHsKKyAgICAgICAgICAgIHNlbGVjdGVkSW5kZXggPSBpbmRleDsKKyAgICAgICAg
ICAgIHRyYWNrTWVudUl0ZW1TZWxlY3RlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgaWYgKG9mZkluZGV4ICYmICF0cmFja01lbnVJdGVtU2VsZWN0ZWQgJiYgZGlzcGxheU1v
ZGUgPT0gTWVkaWFDb250cm9sc0hvc3Q6OmZvcmNlZE9ubHlLZXl3b3JkKCkpIHsKKyAgICAgICAg
c2VsZWN0ZWRJbmRleCA9IG9mZkluZGV4OworICAgICAgICB0cmFja01lbnVJdGVtU2VsZWN0ZWQg
PSB0cnVlOworICAgIH0KKyAgICAKKyAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0
TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyh0cmFja0Rpc3BsYXlOYW1lcywgc2VsZWN0ZWRJ
bmRleCk7Cit9CisKK2NvbnN0IFZlY3RvcjxBdG9taWNTdHJpbmc+JiBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbE1lZGlhRWxlbWVudDo6b2JzZXJ2ZWRFdmVudE5hbWVzKCkKK3sKKyAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8VmVjdG9yPEF0b21pY1N0cmluZz4+IHNFdmVudE5hbWVzOworCisgICAg
aWYgKCFzRXZlbnROYW1lcy5nZXQoKS5zaXplKCkpIHsKKyAgICAgICAgc0V2ZW50TmFtZXMuZ2V0
KCkuYXBwZW5kKGV2ZW50TmFtZXMoKS5kdXJhdGlvbmNoYW5nZUV2ZW50KTsKKyAgICAgICAgc0V2
ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFtZXMoKS5wYXVzZUV2ZW50KTsKKyAgICAgICAg
c0V2ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFtZXMoKS5wbGF5RXZlbnQpOworICAgICAg
ICBzRXZlbnROYW1lcy5nZXQoKS5hcHBlbmQoZXZlbnROYW1lcygpLnJhdGVjaGFuZ2VFdmVudCk7
CisgICAgICAgIHNFdmVudE5hbWVzLmdldCgpLmFwcGVuZChldmVudE5hbWVzKCkudGltZXVwZGF0
ZUV2ZW50KTsKKyAgICAgICAgc0V2ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFtZXMoKS5h
ZGR0cmFja0V2ZW50KTsKKyAgICAgICAgc0V2ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFt
ZXMoKS5yZW1vdmV0cmFja0V2ZW50KTsKKyAgICAgICAgc0V2ZW50TmFtZXMuZ2V0KCkuYXBwZW5k
KGV2ZW50TmFtZXMoKS53ZWJraXRjdXJyZW50cGxheWJhY2t0YXJnZXRpc3dpcmVsZXNzY2hhbmdl
ZEV2ZW50KTsKKyAgICB9CisgICAgcmV0dXJuIHNFdmVudE5hbWVzLmdldCgpOworfQorCitjb25z
dCBBdG9taWNTdHJpbmcmIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpldmVu
dE5hbWVBbGwoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHNF
dmVudE5hbWVBbGwgPSAiYWxsRXZlbnRzIjsKKyAgICByZXR1cm4gc0V2ZW50TmFtZUFsbDsKK30K
KworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tCSh3b3Jr
aW5nIGNvcHkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTI2LDE5ICsyNiwxOCBA
QAogI2ltcG9ydCAiY29uZmlnLmgiCiAKICNpZiBQTEFURk9STShJT1MpCi0KLSNpbXBvcnQgIldl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50LmgiCisjaW1wb3J0ICJXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oIgogCiAjaW1wb3J0ICJET01FdmVudEludGVybmFs
LmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgiCiAjaW1wb3J0ICJNZWRpYUNvbnRyb2xzSG9zdC5oIgog
I2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLmgiCisjaW1wb3J0IDxRdWFydHpD
b3JlL0NvcmVBbmltYXRpb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvRE9NRXZlbnRMaXN0ZW5lci5o
PgogI2ltcG9ydCA8V2ViQ29yZS9FdmVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9FdmVudExpc3Rl
bmVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0V2ZW50TmFtZXMuaD4KICNpbXBvcnQgPFdlYkNvcmUv
SFRNTEVsZW1lbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvSFRNTE1lZGlhRWxlbWVudC5oPgogI2lt
cG9ydCA8V2ViQ29yZS9IVE1MVmlkZW9FbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BhZ2Uu
aD4KICNpbXBvcnQgPFdlYkNvcmUvUGFnZUdyb3VwLmg+CkBAIC00Niw4NCArNDUsNzkgQEAKICNp
bXBvcnQgPFdlYkNvcmUvVGV4dFRyYWNrTGlzdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9UaW1lUmFu
Z2VzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVUaHJlYWRSdW4uaD4KLSNpbXBvcnQgPFF1
YXJ0ekNvcmUvQ29yZUFuaW1hdGlvbi5oPgogI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+
CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CiAKLVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbE1lZGlhRWxlbWVudCgpCitXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQoKQogICAgIDogRXZlbnRMaXN0
ZW5lcihFdmVudExpc3RlbmVyOjpDUFBFdmVudExpc3RlbmVyVHlwZSkKLSAgICAsIG1faXNMaXN0
ZW5pbmd7ZmFsc2V9CisgICAgLCBtX2lzTGlzdGVuaW5nKGZhbHNlKQogewogfQogCi1XZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6fldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVk
aWFFbGVtZW50KCkKK1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojp+V2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQoKQogewogfQogCi12b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpzZXRNZWRpYUVsZW1lbnQoSFRNTE1lZGlhRWxlbWVu
dCogbWVkaWFFbGVtZW50KQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dDo6c2V0VmlkZW9FbGVtZW50KEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvRWxlbWVudCkKIHsKLSAg
ICBpZiAobV9tZWRpYUVsZW1lbnQgPT0gbWVkaWFFbGVtZW50KQorICAgIGlmIChtX3ZpZGVvRWxl
bWVudCA9PSB2aWRlb0VsZW1lbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX21lZGlh
RWxlbWVudCAmJiBtX2lzTGlzdGVuaW5nKSB7CisgICAgaWYgKG1fdmlkZW9FbGVtZW50ICYmIG1f
aXNMaXN0ZW5pbmcpIHsKICAgICAgICAgZm9yIChhdXRvIGV2ZW50TmFtZSA6IG9ic2VydmVkRXZl
bnROYW1lcygpKQotICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnJlbW92ZUV2ZW50TGlzdGVu
ZXIoZXZlbnROYW1lLCB0aGlzLCBmYWxzZSk7CisgICAgICAgICAgICBtX3ZpZGVvRWxlbWVudC0+
cmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIHRoaXMsIGZhbHNlKTsKICAgICB9CiAgICAg
bV9pc0xpc3RlbmluZyA9IGZhbHNlOwogCi0gICAgbV9tZWRpYUVsZW1lbnQgPSBtZWRpYUVsZW1l
bnQ7CisgICAgbV92aWRlb0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7CiAKLSAgICBpZiAoIW1fbWVk
aWFFbGVtZW50KQorICAgIGlmICghbV92aWRlb0VsZW1lbnQpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGZvciAoYXV0byBldmVudE5hbWUgOiBvYnNlcnZlZEV2ZW50TmFtZXMoKSkKLSAgICAgICAg
bV9tZWRpYUVsZW1lbnQtPmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCB0aGlzLCBmYWxzZSk7
CisgICAgICAgIG1fdmlkZW9FbGVtZW50LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgdGhp
cywgZmFsc2UpOwogICAgIG1faXNMaXN0ZW5pbmcgPSB0cnVlOwogCiAgICAgdXBkYXRlRm9yRXZl
bnROYW1lKGV2ZW50TmFtZUFsbCgpKTsKIAotICAgIGlmIChpc0hUTUxWaWRlb0VsZW1lbnQobV9t
ZWRpYUVsZW1lbnQuZ2V0KCkpKSB7Ci0gICAgICAgIEhUTUxWaWRlb0VsZW1lbnQgKnZpZGVvRWxl
bWVudCA9IHRvSFRNTFZpZGVvRWxlbWVudChtX21lZGlhRWxlbWVudC5nZXQoKSk7Ci0gICAgICAg
IG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRWaWRlb0RpbWVuc2lvbnModHJ1ZSwgdmlk
ZW9FbGVtZW50LT52aWRlb1dpZHRoKCksIHZpZGVvRWxlbWVudC0+dmlkZW9IZWlnaHQoKSk7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRWaWRlb0Rp
bWVuc2lvbnMoZmFsc2UsIDAsIDApOworICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5z
ZXRWaWRlb0RpbWVuc2lvbnModHJ1ZSwgdmlkZW9FbGVtZW50LT52aWRlb1dpZHRoKCksIHZpZGVv
RWxlbWVudC0+dmlkZW9IZWlnaHQoKSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxNZWRpYUVsZW1lbnQ6OmhhbmRsZUV2ZW50KFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBXZWJDb3JlOjpFdmVudCogZXZlbnQpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50OjpoYW5kbGVFdmVudChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgV2ViQ29yZTo6RXZlbnQqIGV2ZW50KQogewogICAgIExPRyhNZWRpYSwgImhhbmRsZUV2ZW50
ICVzIiwgZXZlbnQtPnR5cGUoKS5jaGFyYWN0ZXJzOCgpKTsKICAgICB1cGRhdGVGb3JFdmVudE5h
bWUoZXZlbnQtPnR5cGUoKSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRp
YUVsZW1lbnQ6OnVwZGF0ZUZvckV2ZW50TmFtZShjb25zdCBXVEY6OkF0b21pY1N0cmluZyYgZXZl
bnROYW1lKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6dXBkYXRl
Rm9yRXZlbnROYW1lKGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJiBldmVudE5hbWUpCiB7Ci0gICAg
aWYgKCFtX21lZGlhRWxlbWVudCB8fCAhbV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UpCisgICAg
aWYgKCFtX3ZpZGVvRWxlbWVudCB8fCAhbV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UpCiAgICAg
ICAgIHJldHVybjsKICAgICAKICAgICBib29sIGFsbCA9IGV2ZW50TmFtZSA9PSBldmVudE5hbWVB
bGwoKTsKIAogICAgIGlmIChhbGwKICAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMo
KS5kdXJhdGlvbmNoYW5nZUV2ZW50KSB7Ci0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlLT5zZXREdXJhdGlvbihtX21lZGlhRWxlbWVudC0+ZHVyYXRpb24oKSk7CisgICAgICAgIG1f
dmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXREdXJhdGlvbihtX3ZpZGVvRWxlbWVudC0+ZHVy
YXRpb24oKSk7CiAgICAgICAgIC8vIFRoZXNlIGlzIG5vIHN0YW5kYXJkIGV2ZW50IGZvciBtaW5G
YXN0UmV2ZXJzZVJhdGVDaGFuZ2U7IGR1cmF0aW9uIGNoYW5nZSBpcyBhIHJlYXNvbmFibGUgcHJv
eHkgZm9yIGl0LgogICAgICAgICAvLyBJdCBoYXBwZW5zIGV2ZXJ5IHRpbWUgYSBuZXcgaXRlbSBi
ZWNvbWVzIHJlYWR5IHRvIHBsYXkuCi0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
LT5zZXRDYW5QbGF5RmFzdFJldmVyc2UobV9tZWRpYUVsZW1lbnQtPm1pbkZhc3RSZXZlcnNlUmF0
ZSgpIDwgMC4wKTsKKyAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UtPnNldENhblBs
YXlGYXN0UmV2ZXJzZShtX3ZpZGVvRWxlbWVudC0+bWluRmFzdFJldmVyc2VSYXRlKCkgPCAwLjAp
OwogICAgIH0KIAogICAgIGlmIChhbGwKICAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFt
ZXMoKS5wYXVzZUV2ZW50CiAgICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkucGxh
eUV2ZW50CiAgICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkucmF0ZWNoYW5nZUV2
ZW50KQotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0UmF0ZSghbV9tZWRp
YUVsZW1lbnQtPnBhdXNlZCgpLCBtX21lZGlhRWxlbWVudC0+cGxheWJhY2tSYXRlKCkpOworICAg
ICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0UmF0ZSghbV92aWRlb0VsZW1lbnQt
PnBhdXNlZCgpLCBtX3ZpZGVvRWxlbWVudC0+cGxheWJhY2tSYXRlKCkpOwogCiAgICAgaWYgKGFs
bAogICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnRpbWV1cGRhdGVFdmVudCkg
ewotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0Q3VycmVudFRpbWUobV9t
ZWRpYUVsZW1lbnQtPmN1cnJlbnRUaW1lKCksIFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10g
c3lzdGVtVXB0aW1lXSk7CisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRD
dXJyZW50VGltZShtX3ZpZGVvRWxlbWVudC0+Y3VycmVudFRpbWUoKSwgW1tOU1Byb2Nlc3NJbmZv
IHByb2Nlc3NJbmZvXSBzeXN0ZW1VcHRpbWVdKTsKICAgICAgICAgLy8gRklYTUU6IDEzMDc4OCAt
IGZpbmQgYSBiZXR0ZXIgZXZlbnQgdG8gdXBkYXRlIHNlZWthYmxlIHJhbmdlcyBmcm9tLgotICAg
ICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0U2Vla2FibGVSYW5nZXMoKm1fbWVk
aWFFbGVtZW50LT5zZWVrYWJsZSgpKTsKKyAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2UtPnNldFNlZWthYmxlUmFuZ2VzKCptX3ZpZGVvRWxlbWVudC0+c2Vla2FibGUoKSk7CiAgICAg
fQogCiAgICAgaWYgKGFsbApAQCAtMTMzLDI2ICsxMjcsMjYgQEAgdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbE1lZGlhRWxlbWVudAogCiAgICAgaWYgKGFsbAogICAgICAgICB8fCBldmVudE5h
bWUgPT0gZXZlbnROYW1lcygpLndlYmtpdGN1cnJlbnRwbGF5YmFja3RhcmdldGlzd2lyZWxlc3Nj
aGFuZ2VkRXZlbnQpIHsKLSAgICAgICAgYm9vbCBlbmFibGVkID0gbV9tZWRpYUVsZW1lbnQtPm1l
ZGlhU2Vzc2lvbigpLmN1cnJlbnRQbGF5YmFja1RhcmdldElzV2lyZWxlc3MoKm1fbWVkaWFFbGVt
ZW50KTsKKyAgICAgICAgYm9vbCBlbmFibGVkID0gbV92aWRlb0VsZW1lbnQtPm1lZGlhU2Vzc2lv
bigpLmN1cnJlbnRQbGF5YmFja1RhcmdldElzV2lyZWxlc3MoKm1fdmlkZW9FbGVtZW50KTsKICAg
ICAgICAgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0
VHlwZSB0YXJnZXRUeXBlID0gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOjpUYXJnZXRUeXBl
Tm9uZTsKICAgICAgICAgU3RyaW5nIGxvY2FsaXplZERldmljZU5hbWU7CiAKLSAgICAgICAgaWYg
KG1fbWVkaWFFbGVtZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgpKSB7CisgICAgICAgIGlmIChtX3Zp
ZGVvRWxlbWVudC0+bWVkaWFDb250cm9sc0hvc3QoKSkgewogICAgICAgICAgICAgREVQUkVDQVRF
RF9ERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYWlycGxheSwgKEFTQ0lJTGl0ZXJhbCgiYWly
cGxheSIpKSk7CiAgICAgICAgICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoU3Ry
aW5nLCB0dm91dCwgKEFTQ0lJTGl0ZXJhbCgidHZvdXQiKSkpOwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBTdHJpbmcgdHlwZSA9IG1fbWVkaWFFbGVtZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgp
LT5leHRlcm5hbERldmljZVR5cGUoKTsKKyAgICAgICAgICAgIFN0cmluZyB0eXBlID0gbV92aWRl
b0VsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCktPmV4dGVybmFsRGV2aWNlVHlwZSgpOwogICAg
ICAgICAgICAgaWYgKHR5cGUgPT0gYWlycGxheSkKICAgICAgICAgICAgICAgICB0YXJnZXRUeXBl
ID0gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOjpUYXJnZXRUeXBlQWlyUGxheTsKICAgICAg
ICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gdHZvdXQpCiAgICAgICAgICAgICAgICAgdGFyZ2V0VHlw
ZSA9IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZTo6VGFyZ2V0VHlwZVRWT3V0OwotICAgICAg
ICAgICAgbG9jYWxpemVkRGV2aWNlTmFtZSA9IG1fbWVkaWFFbGVtZW50LT5tZWRpYUNvbnRyb2xz
SG9zdCgpLT5leHRlcm5hbERldmljZURpc3BsYXlOYW1lKCk7CisgICAgICAgICAgICBsb2NhbGl6
ZWREZXZpY2VOYW1lID0gbV92aWRlb0VsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCktPmV4dGVy
bmFsRGV2aWNlRGlzcGxheU5hbWUoKTsKICAgICAgICAgfQogICAgICAgICBtX3ZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZS0+c2V0RXh0ZXJuYWxQbGF5YmFjayhlbmFibGVkLCB0YXJnZXRUeXBlLCBs
b2NhbGl6ZWREZXZpY2VOYW1lKTsKICAgICB9CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxNZWRpYUVsZW1lbnQ6OnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKFBsYXRmb3JtTGF5ZXIq
IHZpZGVvTGF5ZXIpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojpz
ZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihQbGF0Zm9ybUxheWVyKiB2aWRlb0xheWVyKQogewogICAg
IGlmIChtX3ZpZGVvRnVsbHNjcmVlbkxheWVyID09IHZpZGVvTGF5ZXIpCiAgICAgICAgIHJldHVy
bjsKQEAgLTE2MCwxMzQgKzE1NCwxMzUgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1l
ZGlhRWxlbWVudAogICAgIG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIgPSB2aWRlb0xheWVyOwogICAg
IFttX3ZpZGVvRnVsbHNjcmVlbkxheWVyIHNldEZyYW1lOm1fdmlkZW9GcmFtZV07CiAgICAgCi0g
ICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+IHBy
b3RlY3QodGhpcyk7CisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAg
IGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5zZXRWaWRl
b0Z1bGxzY3JlZW5MYXllcihtX3ZpZGVvRnVsbHNjcmVlbkxheWVyLmdldCgpKTsKKyAgICAgICAg
aWYgKG1fdmlkZW9FbGVtZW50KQorICAgICAgICAgICAgbV92aWRlb0VsZW1lbnQtPnNldFZpZGVv
RnVsbHNjcmVlbkxheWVyKG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIuZ2V0KCkpOwogICAgICAgICBw
cm90ZWN0LmNsZWFyKCk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxNZWRpYUVsZW1lbnQ6OnBsYXkoKSB7Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7Cit2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpwbGF5KCkKK3sKKyAgICBfX2Jsb2NrIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKICAgICBX
ZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICAgICAg
bV9tZWRpYUVsZW1lbnQtPnBsYXkoKTsKKyAgICAgICAgaWYgKG1fdmlkZW9FbGVtZW50KQorICAg
ICAgICAgICAgbV92aWRlb0VsZW1lbnQtPnBsYXkoKTsKICAgICAgICAgcHJvdGVjdC5jbGVhcigp
OwogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50
OjpwYXVzZSgpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpwYXVz
ZSgpCiB7Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVs
ZW1lbnQ+IHByb3RlY3QodGhpcyk7CisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKF57
Ci0gICAgICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50
LT5wYXVzZSgpOworICAgICAgICBpZiAobV92aWRlb0VsZW1lbnQpCisgICAgICAgICAgICBtX3Zp
ZGVvRWxlbWVudC0+cGF1c2UoKTsKICAgICAgICAgcHJvdGVjdC5jbGVhcigpOwogICAgIH0pOwog
fQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50Ojp0b2dnbGVQbGF5
U3RhdGUoKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6dG9nZ2xl
UGxheVN0YXRlKCkKIHsKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKKyAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKICAgICBXZWJUaHJl
YWRSdW4oXnsKLSAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICAgICAgbV9tZWRp
YUVsZW1lbnQtPnRvZ2dsZVBsYXlTdGF0ZSgpOworICAgICAgICBpZiAobV92aWRlb0VsZW1lbnQp
CisgICAgICAgICAgICBtX3ZpZGVvRWxlbWVudC0+dG9nZ2xlUGxheVN0YXRlKCk7CiAgICAgICAg
IHByb3RlY3QuY2xlYXIoKTsKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbE1lZGlhRWxlbWVudDo6YmVnaW5TY3J1YmJpbmcoKQordm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudDo6YmVnaW5TY3J1YmJpbmcoKQogewotICAgIF9fYmxvY2sgUmVm
UHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOwor
ICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBw
cm90ZWN0KHRoaXMpOwogICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICBpZiAobV9tZWRpYUVs
ZW1lbnQpCi0gICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+YmVnaW5TY3J1YmJpbmcoKTsKKyAg
ICAgICAgaWYgKG1fdmlkZW9FbGVtZW50KQorICAgICAgICAgICAgbV92aWRlb0VsZW1lbnQtPmJl
Z2luU2NydWJiaW5nKCk7CiAgICAgICAgIHByb3RlY3QuY2xlYXIoKTsKICAgICB9KTsKIH0KIAot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6ZW5kU2NydWJiaW5nKCkK
K3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmVuZFNjcnViYmluZygp
CiB7Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1l
bnQ+IHByb3RlY3QodGhpcyk7CisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKF57Ci0g
ICAgICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5l
bmRTY3J1YmJpbmcoKTsKKyAgICAgICAgaWYgKG1fdmlkZW9FbGVtZW50KQorICAgICAgICAgICAg
bV92aWRlb0VsZW1lbnQtPmVuZFNjcnViYmluZygpOwogICAgICAgICBwcm90ZWN0LmNsZWFyKCk7
CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6
OnNlZWtUb1RpbWUoZG91YmxlIHRpbWUpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlk
ZW9FbGVtZW50OjpzZWVrVG9UaW1lKGRvdWJsZSB0aW1lKQogewotICAgIF9fYmxvY2sgUmVmUHRy
PFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOworICAg
IF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBwcm90
ZWN0KHRoaXMpOwogICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICBpZiAobV9tZWRpYUVsZW1l
bnQpCi0gICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+c2V0Q3VycmVudFRpbWUodGltZSk7Cisg
ICAgICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKKyAgICAgICAgICAgIG1fdmlkZW9FbGVtZW50LT5z
ZXRDdXJyZW50VGltZSh0aW1lKTsKICAgICAgICAgcHJvdGVjdC5jbGVhcigpOwogICAgIH0pOwog
fQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpmYXN0U2Vlayhk
b3VibGUgdGltZSkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmZh
c3RTZWVrKGRvdWJsZSB0aW1lKQogewotICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsTWVkaWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOworICAgIF9fYmxvY2sgUmVmUHRy
PFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBwcm90ZWN0KHRoaXMpOwogICAg
IFdlYlRocmVhZFJ1biheewotICAgICAgICBpZiAobV9tZWRpYUVsZW1lbnQpCi0gICAgICAgICAg
ICBtX21lZGlhRWxlbWVudC0+ZmFzdFNlZWsodGltZSk7CisgICAgICAgIGlmIChtX3ZpZGVvRWxl
bWVudCkKKyAgICAgICAgICAgIG1fdmlkZW9FbGVtZW50LT5mYXN0U2Vlayh0aW1lKTsKICAgICAg
ICAgcHJvdGVjdC5jbGVhcigpOwogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsTWVkaWFFbGVtZW50OjpiZWdpblNjYW5uaW5nRm9yd2FyZCgpCit2b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpiZWdpblNjYW5uaW5nRm9yd2FyZCgpCiB7Ci0g
ICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+IHBy
b3RlY3QodGhpcyk7CisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAg
IGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5iZWdpblNj
YW5uaW5nKE1lZGlhQ29udHJvbGxlckludGVyZmFjZTo6Rm9yd2FyZCk7CisgICAgICAgIGlmICht
X3ZpZGVvRWxlbWVudCkKKyAgICAgICAgICAgIG1fdmlkZW9FbGVtZW50LT5iZWdpblNjYW5uaW5n
KE1lZGlhQ29udHJvbGxlckludGVyZmFjZTo6Rm9yd2FyZCk7CiAgICAgICAgIHByb3RlY3QuY2xl
YXIoKTsKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxl
bWVudDo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKCkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQ6OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpCiB7Ci0gICAgX19ibG9jayBS
ZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7
CisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+
IHByb3RlY3QodGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgIGlmIChtX21lZGlh
RWxlbWVudCkKLSAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5iZWdpblNjYW5uaW5nKE1lZGlh
Q29udHJvbGxlckludGVyZmFjZTo6QmFja3dhcmQpOworICAgICAgICBpZiAobV92aWRlb0VsZW1l
bnQpCisgICAgICAgICAgICBtX3ZpZGVvRWxlbWVudC0+YmVnaW5TY2FubmluZyhNZWRpYUNvbnRy
b2xsZXJJbnRlcmZhY2U6OkJhY2t3YXJkKTsKICAgICAgICAgcHJvdGVjdC5jbGVhcigpOwogICAg
IH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjplbmRT
Y2FubmluZygpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjplbmRT
Y2FubmluZygpCiB7Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxN
ZWRpYUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7CisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7CiAgICAgV2ViVGhyZWFk
UnVuKF57Ci0gICAgICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgICAgIG1fbWVkaWFF
bGVtZW50LT5lbmRTY2FubmluZygpOworICAgICAgICBpZiAobV92aWRlb0VsZW1lbnQpCisgICAg
ICAgICAgICBtX3ZpZGVvRWxlbWVudC0+ZW5kU2Nhbm5pbmcoKTsKICAgICAgICAgcHJvdGVjdC5j
bGVhcigpOwogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFF
bGVtZW50OjpyZXF1ZXN0RXhpdEZ1bGxzY3JlZW4oKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudDo6cmVxdWVzdEV4aXRGdWxsc2NyZWVuKCkKIHsKLSAgICBpZiAoIW1f
bWVkaWFFbGVtZW50KQorICAgIGlmICghbV92aWRlb0VsZW1lbnQpCiAgICAgICAgIHJldHVybjsK
IAotICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50
PiBwcm90ZWN0KHRoaXMpOworICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50PiBwcm90ZWN0KHRoaXMpOwogICAgIFdlYlRocmVhZFJ1biheewotICAg
ICAgICBpZiAobV9tZWRpYUVsZW1lbnQgJiYgbV9tZWRpYUVsZW1lbnQtPmlzRnVsbHNjcmVlbigp
KQotICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmV4aXRGdWxsc2NyZWVuKCk7CisgICAgICAg
IGlmIChtX3ZpZGVvRWxlbWVudCAmJiBtX3ZpZGVvRWxlbWVudC0+aXNGdWxsc2NyZWVuKCkpCisg
ICAgICAgICAgICBtX3ZpZGVvRWxlbWVudC0+ZXhpdEZ1bGxzY3JlZW4oKTsKICAgICAgICAgcHJv
dGVjdC5jbGVhcigpOwogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
TWVkaWFFbGVtZW50OjpzZXRWaWRlb0xheWVyRnJhbWUoRmxvYXRSZWN0IHJlY3QpCit2b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0xheWVyRnJhbWUoRmxv
YXRSZWN0IHJlY3QpCiB7CiAgICAgbV92aWRlb0ZyYW1lID0gcmVjdDsKICAgICBbbV92aWRlb0Z1
bGxzY3JlZW5MYXllciBzZXRGcmFtZTpDR1JlY3QocmVjdCldOwotICAgIG1fbWVkaWFFbGVtZW50
LT5zZXRWaWRlb0Z1bGxzY3JlZW5GcmFtZShyZWN0KTsKKyAgICBtX3ZpZGVvRWxlbWVudC0+c2V0
VmlkZW9GdWxsc2NyZWVuRnJhbWUocmVjdCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxNZWRpYUVsZW1lbnQ6OnNldFZpZGVvTGF5ZXJHcmF2aXR5KFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsOjpWaWRlb0dyYXZpdHkgZ3Jhdml0eSkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvTGF5ZXJHcmF2aXR5KFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsOjpWaWRlb0dyYXZpdHkgZ3Jhdml0eSkKIHsKICAgICBNZWRpYVBsYXllcjo6VmlkZW9HcmF2
aXR5IHZpZGVvR3Jhdml0eSA9IE1lZGlhUGxheWVyOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3Q7
CiAgICAgaWYgKGdyYXZpdHkgPT0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0
eVJlc2l6ZSkKQEAgLTI5OSwzNCArMjk0LDM0IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxNZWRpYUVsZW1lbnQKICAgICBlbHNlCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgIAotICAgIG1fbWVkaWFFbGVtZW50LT5zZXRWaWRlb0Z1bGxzY3JlZW5HcmF2aXR5KHZpZGVv
R3Jhdml0eSk7CisgICAgbV92aWRlb0VsZW1lbnQtPnNldFZpZGVvRnVsbHNjcmVlbkdyYXZpdHko
dmlkZW9HcmF2aXR5KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxl
bWVudDo6c2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCkKK3ZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3Qp
CiB7CiAgICAgLy8gRklYTUU6IDEzMTIzNiBJbXBsZW1lbnQgYXVkaW8gdHJhY2sgc2VsZWN0aW9u
LgogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpzZWxlY3RM
ZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50OjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5k
ZXgpCiB7CiAgICAgVGV4dFRyYWNrKiB0ZXh0VHJhY2sgPSBudWxscHRyOwogICAgIAogICAgIGlm
IChpbmRleCA8IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnUuc2l6ZSgpKQogICAgICAgICB0ZXh0VHJh
Y2sgPSBtX2xlZ2libGVUcmFja3NGb3JNZW51W3N0YXRpY19jYXN0PHNpemVfdD4oaW5kZXgpXS5n
ZXQoKTsKICAgICAKLSAgICBtX21lZGlhRWxlbWVudC0+c2V0U2VsZWN0ZWRUZXh0VHJhY2sodGV4
dFRyYWNrKTsKKyAgICBtX3ZpZGVvRWxlbWVudC0+c2V0U2VsZWN0ZWRUZXh0VHJhY2sodGV4dFRy
YWNrKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6dXBk
YXRlTGVnaWJsZU9wdGlvbnMoKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudDo6dXBkYXRlTGVnaWJsZU9wdGlvbnMoKQogewotICAgIFRleHRUcmFja0xpc3QqIHRyYWNr
TGlzdCA9IG1fbWVkaWFFbGVtZW50LT50ZXh0VHJhY2tzKCk7Ci0gICAgaWYgKCF0cmFja0xpc3Qg
fHwgIW1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSB8fCAhbV9tZWRpYUVsZW1lbnQt
Pm1lZGlhQ29udHJvbHNIb3N0KCkpCisgICAgVGV4dFRyYWNrTGlzdCogdHJhY2tMaXN0ID0gbV92
aWRlb0VsZW1lbnQtPnRleHRUcmFja3MoKTsKKyAgICBpZiAoIXRyYWNrTGlzdCB8fCAhbV92aWRl
b0VsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpIHx8ICFtX3ZpZGVvRWxlbWVudC0+bWVkaWFDb250
cm9sc0hvc3QoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFdURjo6QXRvbWljU3RyaW5n
IGRpc3BsYXlNb2RlID0gbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCktPmNhcHRp
b25EaXNwbGF5TW9kZSgpOwotICAgIFRleHRUcmFjayogb2ZmSXRlbSA9IG1fbWVkaWFFbGVtZW50
LT5tZWRpYUNvbnRyb2xzSG9zdCgpLT5jYXB0aW9uTWVudU9mZkl0ZW0oKTsKLSAgICBUZXh0VHJh
Y2sqIGF1dG9tYXRpY0l0ZW0gPSBtX21lZGlhRWxlbWVudC0+bWVkaWFDb250cm9sc0hvc3QoKS0+
Y2FwdGlvbk1lbnVBdXRvbWF0aWNJdGVtKCk7Ci0gICAgQ2FwdGlvblVzZXJQcmVmZXJlbmNlcyYg
Y2FwdGlvblByZWZlcmVuY2VzID0gKm1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKS0+
Z3JvdXAoKS5jYXB0aW9uUHJlZmVyZW5jZXMoKTsKKyAgICBXVEY6OkF0b21pY1N0cmluZyBkaXNw
bGF5TW9kZSA9IG1fdmlkZW9FbGVtZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgpLT5jYXB0aW9uRGlz
cGxheU1vZGUoKTsKKyAgICBUZXh0VHJhY2sqIG9mZkl0ZW0gPSBtX3ZpZGVvRWxlbWVudC0+bWVk
aWFDb250cm9sc0hvc3QoKS0+Y2FwdGlvbk1lbnVPZmZJdGVtKCk7CisgICAgVGV4dFRyYWNrKiBh
dXRvbWF0aWNJdGVtID0gbV92aWRlb0VsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCktPmNhcHRp
b25NZW51QXV0b21hdGljSXRlbSgpOworICAgIENhcHRpb25Vc2VyUHJlZmVyZW5jZXMmIGNhcHRp
b25QcmVmZXJlbmNlcyA9ICptX3ZpZGVvRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCktPmdyb3Vw
KCkuY2FwdGlvblByZWZlcmVuY2VzKCk7CiAgICAgbV9sZWdpYmxlVHJhY2tzRm9yTWVudSA9IGNh
cHRpb25QcmVmZXJlbmNlcy5zb3J0ZWRUcmFja0xpc3RGb3JNZW51KHRyYWNrTGlzdCk7CiAgICAg
VmVjdG9yPFN0cmluZz4gdHJhY2tEaXNwbGF5TmFtZXM7CiAgICAgdWludDY0X3Qgc2VsZWN0ZWRJ
bmRleCA9IDA7CkBAIC0zNTksNyArMzU0LDcgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bE1lZGlhRWxlbWVudAogICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRMZWdpYmxl
TWVkaWFTZWxlY3Rpb25PcHRpb25zKHRyYWNrRGlzcGxheU5hbWVzLCBzZWxlY3RlZEluZGV4KTsK
IH0KIAotY29uc3QgVmVjdG9yPEF0b21pY1N0cmluZz4mIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
TWVkaWFFbGVtZW50OjpvYnNlcnZlZEV2ZW50TmFtZXMoKQorY29uc3QgVmVjdG9yPEF0b21pY1N0
cmluZz4mIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpvYnNlcnZlZEV2ZW50
TmFtZXMoKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxWZWN0b3I8QXRvbWljU3RyaW5n
Pj4gc0V2ZW50TmFtZXM7CiAKQEAgLTM3Niw3ICszNzEsNyBAQCBjb25zdCBWZWN0b3I8QXRvbWlj
U3RyaW5nPiYgV2ViVmlkZW9GdWxsCiAgICAgcmV0dXJuIHNFdmVudE5hbWVzLmdldCgpOwogfQog
Ci1jb25zdCBBdG9taWNTdHJpbmcmIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50
OjpldmVudE5hbWVBbGwoKQorY29uc3QgQXRvbWljU3RyaW5nJiBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudDo6ZXZlbnROYW1lQWxsKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8QXRvbWljU3RyaW5nPiBzRXZlbnROYW1lQWxsID0gImFsbEV2ZW50cyI7CiAgICAgcmV0
dXJuIHNFdmVudE5hbWVBbGw7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLmgJKHJldmlzaW9uIDE3
MzE4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgIGNsYXNzIERpc3BsYXlTbGVlcERpc2FibGVyOwotICAgIGNsYXNzIEhU
TUxNZWRpYUVsZW1lbnQ7CisgICAgY2xhc3MgSFRNTFZpZGVvRWxlbWVudDsKIH0KIAogQHByb3Rv
Y29sIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJEZWxlZ2F0ZTsKQEAgLTQyLDcgKzQyLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBXRUJDT1JFX0VYUE9SVCBAaW50ZXJmYWNlIFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIgOiBOU1dpbmRvd0NvbnRyb2xsZXIgewogQHByaXZhdGUK
LSAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudD4gX21lZGlhRWxlbWVudDsgLy8g
KHJldGFpbikKKyAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudD4gX3ZpZGVvRWxl
bWVudDsgLy8gKHJldGFpbikKICAgICBpZCA8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckRl
bGVnYXRlPiBfZGVsZWdhdGU7IC8vIChhc3NpZ24pCiAKICAgICBOU1dpbmRvdyAqX2JhY2tncm91
bmRGdWxsc2NyZWVuV2luZG93OyAvLyAocmV0YWluKQpAQCAtNjAsOCArNjAsOCBAQCBXRUJDT1JF
X0VYUE9SVCBAaW50ZXJmYWNlIFdlYlZpZGVvRnVsbHNjCiAtICh2b2lkKXNldERlbGVnYXRlOihp
ZCA8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckRlbGVnYXRlPilkZWxlZ2F0ZTsKIAogLSAo
dm9pZClzZXR1cFZpZGVvT3ZlcmxheTooQ0FMYXllciopbGF5ZXI7Ci0tICh2b2lkKXNldE1lZGlh
RWxlbWVudDooV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCopbWVkaWFFbGVtZW50OwotLSAoV2Vi
Q29yZTo6SFRNTE1lZGlhRWxlbWVudCopbWVkaWFFbGVtZW50OworLSAodm9pZClzZXRWaWRlb0Vs
ZW1lbnQ6KFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQqKXZpZGVvRWxlbWVudDsKKy0gKFdlYkNv
cmU6OkhUTUxWaWRlb0VsZW1lbnQqKXZpZGVvRWxlbWVudDsKIAogLSAodm9pZCllbnRlckZ1bGxz
Y3JlZW46KE5TU2NyZWVuICopc2NyZWVuOwogLSAodm9pZClleGl0RnVsbHNjcmVlbjsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyLm1tCShyZXZpc2lvbiAxNzMxODIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbQkod29ya2luZyBj
b3B5KQpAQCAtMzUsNyArMzUsNyBAQAogI2ltcG9ydCA8Q2FyYm9uL0NhcmJvbi5oPgogI2ltcG9y
dCA8UVRLaXQvUVRLaXQuaD4KICNpbXBvcnQgPFdlYkNvcmUvRGlzcGxheVNsZWVwRGlzYWJsZXIu
aD4KLSNpbXBvcnQgPFdlYkNvcmUvSFRNTE1lZGlhRWxlbWVudC5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9IVE1MVmlkZW9FbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NvZnRMaW5raW5nLmg+CiAj
aW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KIApAQCAtMTE0LDIxICsxMTQsMjEgQEAgLSAodm9pZCl3
aW5kb3dEaWRMb2FkCiAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBh
ZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihhcHBsaWNhdGlvbkRpZENoYW5nZVNj
cmVlblBhcmFtZXRlcnM6KSBuYW1lOk5TQXBwbGljYXRpb25EaWRDaGFuZ2VTY3JlZW5QYXJhbWV0
ZXJzTm90aWZpY2F0aW9uIG9iamVjdDpOU0FwcF07CiB9CiAKLS0gKEhUTUxNZWRpYUVsZW1lbnQq
KW1lZGlhRWxlbWVudAorLSAoSFRNTFZpZGVvRWxlbWVudCopdmlkZW9FbGVtZW50CiB7Ci0gICAg
cmV0dXJuIF9tZWRpYUVsZW1lbnQuZ2V0KCk7CisgICAgcmV0dXJuIF92aWRlb0VsZW1lbnQuZ2V0
KCk7CiB9CiAKLS0gKHZvaWQpc2V0TWVkaWFFbGVtZW50OihIVE1MTWVkaWFFbGVtZW50KiltZWRp
YUVsZW1lbnQKKy0gKHZvaWQpc2V0VmlkZW9FbGVtZW50OihIVE1MVmlkZW9FbGVtZW50Kil2aWRl
b0VsZW1lbnQKIHsKLSAgICBfbWVkaWFFbGVtZW50ID0gbWVkaWFFbGVtZW50OworICAgIF92aWRl
b0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7CiAKLSAgICBpZiAoIV9tZWRpYUVsZW1lbnQpCisgICAg
aWYgKCFfdmlkZW9FbGVtZW50KQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoW3NlbGYgaXNX
aW5kb3dMb2FkZWRdKSB7Ci0gICAgICAgIGlmIChfbWVkaWFFbGVtZW50LT5wbGF0Zm9ybU1lZGlh
KCkudHlwZSA9PSBQbGF0Zm9ybU1lZGlhOjpRVE1vdmllVHlwZSkgewotICAgICAgICAgICAgUVRN
b3ZpZSAqbW92aWUgPSBfbWVkaWFFbGVtZW50LT5wbGF0Zm9ybU1lZGlhKCkubWVkaWEucXRNb3Zp
ZTsKKyAgICAgICAgaWYgKF92aWRlb0VsZW1lbnQtPnBsYXRmb3JtTWVkaWEoKS50eXBlID09IFBs
YXRmb3JtTWVkaWE6OlFUTW92aWVUeXBlKSB7CisgICAgICAgICAgICBRVE1vdmllICptb3ZpZSA9
IF92aWRlb0VsZW1lbnQtPnBsYXRmb3JtTWVkaWEoKS5tZWRpYS5xdE1vdmllOwogICAgICAgICAg
ICAgUVRNb3ZpZUxheWVyICpsYXllciA9IFtbZ2V0UVRNb3ZpZUxheWVyQ2xhc3MoKSBhbGxvY10g
aW5pdF07CiAgICAgICAgICAgICBbbGF5ZXIgc2V0TW92aWU6bW92aWVdOwogICAgICAgICAgICAg
W3NlbGYgc2V0dXBWaWRlb092ZXJsYXk6bGF5ZXJdOwpAQCAtMTM4LDggKzEzOCw4IEBAIC0gKHZv
aWQpc2V0TWVkaWFFbGVtZW50OihIVE1MTWVkaWFFbGVtZW4KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6UVRNb3ZpZVJhdGVEaWRD
aGFuZ2VOb3RpZmljYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvYmplY3Q6bW92aWVdOwogCi0gICAgICAgIH0gZWxzZSBpZiAoX21l
ZGlhRWxlbWVudC0+cGxhdGZvcm1NZWRpYSgpLnR5cGUgPT0gUGxhdGZvcm1NZWRpYTo6QVZGb3Vu
ZGF0aW9uTWVkaWFQbGF5ZXJUeXBlKSB7Ci0gICAgICAgICAgICBBVlBsYXllciAqcGxheWVyID0g
X21lZGlhRWxlbWVudC0+cGxhdGZvcm1NZWRpYSgpLm1lZGlhLmF2Zk1lZGlhUGxheWVyOworICAg
ICAgICB9IGVsc2UgaWYgKF92aWRlb0VsZW1lbnQtPnBsYXRmb3JtTWVkaWEoKS50eXBlID09IFBs
YXRmb3JtTWVkaWE6OkFWRm91bmRhdGlvbk1lZGlhUGxheWVyVHlwZSkgeworICAgICAgICAgICAg
QVZQbGF5ZXIgKnBsYXllciA9IF92aWRlb0VsZW1lbnQtPnBsYXRmb3JtTWVkaWEoKS5tZWRpYS5h
dmZNZWRpYVBsYXllcjsKICAgICAgICAgICAgIEFWUGxheWVyTGF5ZXIgKmxheWVyID0gW1tnZXRB
VlBsYXllckxheWVyQ2xhc3MoKSBhbGxvY10gaW5pdF07CiAgICAgICAgICAgICBbc2VsZiBzZXR1
cFZpZGVvT3ZlcmxheTpsYXllcl07CiAgICAgICAgICAgICBbbGF5ZXIgc2V0UGxheWVyOnBsYXll
cl07CkBAIC0yMDcsOSArMjA3LDkgQEAgLSAodm9pZCl3aW5kb3dEaWRFbnRlckZ1bGxzY3JlZW4K
ICAgICBbX2h1ZENvbnRyb2xsZXIgZmFkZVdpbmRvd0luXTsKIH0KIAotLSAoTlNSZWN0KW1lZGlh
RWxlbWVudFJlY3QKKy0gKE5TUmVjdCl2aWRlb0VsZW1lbnRSZWN0CiB7Ci0gICAgcmV0dXJuIF9t
ZWRpYUVsZW1lbnQtPnNjcmVlblJlY3QoKTsKKyAgICByZXR1cm4gX3ZpZGVvRWxlbWVudC0+c2Ny
ZWVuUmVjdCgpOwogfQogCiAtICh2b2lkKWFwcGxpY2F0aW9uRGlkUmVzaWduQWN0aXZlOihOU05v
dGlmaWNhdGlvbiopbm90aWZpY2F0aW9uCkBAIC0yNzYsNyArMjc2LDcgQEAgLSAodm9pZCllbnRl
ckZ1bGxzY3JlZW46KE5TU2NyZWVuICopc2NyZQogICAgIGlmICghc2NyZWVuKQogICAgICAgICBz
Y3JlZW4gPSBbTlNTY3JlZW4gbWFpblNjcmVlbl07CiAKLSAgICBOU1JlY3QgZnJhbWUgPSBbc2Vs
ZiBtZWRpYUVsZW1lbnRSZWN0XTsKKyAgICBOU1JlY3QgZnJhbWUgPSBbc2VsZiB2aWRlb0VsZW1l
bnRSZWN0XTsKICAgICBOU1JlY3QgZW5kRnJhbWUgPSBbc2NyZWVuIGZyYW1lXTsKICAgICBjb25z
dHJhaW5GcmFtZVRvUmF0aW9PZkZyYW1lKCZlbmRGcmFtZSwgJmZyYW1lKTsKIApAQCAtMzAzLDcg
KzMwMyw3IEBAIC0gKHZvaWQpZXhpdEZ1bGxzY3JlZW4KICAgICBfaXNFbmRpbmdGdWxsc2NyZWVu
ID0gWUVTOwogICAgIFtfaHVkQ29udHJvbGxlciBjbG9zZVdpbmRvd107CiAKLSAgICBOU1JlY3Qg
ZW5kRnJhbWUgPSBbc2VsZiBtZWRpYUVsZW1lbnRSZWN0XTsKKyAgICBOU1JlY3QgZW5kRnJhbWUg
PSBbc2VsZiB2aWRlb0VsZW1lbnRSZWN0XTsKIAogICAgIFtzZWxmIHNldHVwRmFkZUFuaW1hdGlv
bklmTmVlZGVkQW5kRmFkZUluOk5PXTsKICAgICBpZiAoX2ZvcmNlRGlzYWJsZUFuaW1hdGlvbikg
ewpAQCAtMzU4LDggKzM1OCw4IEBAIC0gKHZvaWQpdXBkYXRlTWVudUFuZERvY2tGb3JGdWxsc2Ny
ZWVuCiAtICh2b2lkKXVwZGF0ZVBvd2VyQXNzZXJ0aW9ucwogewogICAgIGZsb2F0IHJhdGUgPSAw
OwotICAgIGlmIChfbWVkaWFFbGVtZW50ICYmIF9tZWRpYUVsZW1lbnQtPnBsYXRmb3JtTWVkaWEo
KS50eXBlID09IFBsYXRmb3JtTWVkaWE6OlFUTW92aWVUeXBlKQotICAgICAgICByYXRlID0gW19t
ZWRpYUVsZW1lbnQtPnBsYXRmb3JtTWVkaWEoKS5tZWRpYS5xdE1vdmllIHJhdGVdOworICAgIGlm
IChfdmlkZW9FbGVtZW50ICYmIF92aWRlb0VsZW1lbnQtPnBsYXRmb3JtTWVkaWEoKS50eXBlID09
IFBsYXRmb3JtTWVkaWE6OlFUTW92aWVUeXBlKQorICAgICAgICByYXRlID0gW192aWRlb0VsZW1l
bnQtPnBsYXRmb3JtTWVkaWEoKS5tZWRpYS5xdE1vdmllIHJhdGVdOwogICAgIAogICAgIGlmIChy
YXRlICYmICFfaXNFbmRpbmdGdWxsc2NyZWVuKSB7CiAgICAgICAgIGlmICghX2Rpc3BsYXlTbGVl
cERpc2FibGVyKQpAQCAtMzczLDggKzM3Myw4IEBAIC0gKHZvaWQpdXBkYXRlUG93ZXJBc3NlcnRp
b25zCiAKIC0gKHZvaWQpX3JlcXVlc3RFeGl0CiB7Ci0gICAgaWYgKF9tZWRpYUVsZW1lbnQpCi0g
ICAgICAgIF9tZWRpYUVsZW1lbnQtPmV4aXRGdWxsc2NyZWVuKCk7CisgICAgaWYgKF92aWRlb0Vs
ZW1lbnQpCisgICAgICAgIF92aWRlb0VsZW1lbnQtPmV4aXRGdWxsc2NyZWVuKCk7CiAgICAgX2Zv
cmNlRGlzYWJsZUFuaW1hdGlvbiA9IE5POwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAx
NzMxODIpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSw0MSBAQAorMjAxNC0wOS0wMiAgTWFjaWVqIFN0YWNob3dpYWsgIDxtanNAYXBwbGUuY29t
PgorCisgICAgICAgIENsZWFuIHVwIG5hbWluZyBmb3IgYW5kIHNsaWdodGx5IHJlZmFjdG9yIGxl
Z2FjeSB2aWRlbyBmdWxsc2NyZWVuIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjQ0NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEtleSBjaGFuZ2VzOgorICAgICAgICBzdXBwb3J0c0Z1bGxz
Y3JlZW5Gb3JOb2RlKE5vZGUqKSAtLT4gc3VwcG9ydHNWaWRlb0Z1bGxzY3JlZW4oKQorICAgICAg
ICBlbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqKSAtLT4gZW50ZXJWaWRlb0Z1bGxzY3JlZW5G
b3JWaWRlb0VsZW1lbnQoSFRNTFZpZGVvRWxlbWVudCopCisgICAgICAgIGV4aXRGdWxsc2NyZWVu
Rm9yTm9kZShOb2RlKikgLS0+IGV4aXRWaWRlb0Z1bGxzY3JlZW4oKQorICAgICAgICAKKyAgICAg
ICAgVGhlIG9sZCB2ZXJzaW9ucyBoYWQgdW5uZWNlc3NhcnkgcGFyYW1ldGVycywgZGlkIG5vdCBj
bGVhcmx5IGRpc3Rpbmd1aXNoIHRoZWlyIHB1cnBvc2UKKyAgICAgICAgZnJvbSBlbnRlckZ1bGxz
Y3JlZW5Gb3JFbGVtZW50IGFuZCBmcmllbmRzLCBhbmQgd3JvbmdseSBjbGFpbWVkIGdlbmVyYWxp
dHkgdG8gYWxsIE5vZGVzLgorICAgICAgICBBbHNvIGNoYW5nZWQgbWFueSBvdGhlciBwbGFjZXMg
dG8gdXNlIEhUTUxWaWRlb0VsZW1lbnQqIGluc3RlYWQgb2YgTm9kZSogb3IgCisgICAgICAgIEhU
TUxNZWRpYUVsZW1lbnQqIHdoZW4gdGhleSB3ZXJlIGluIGZhY3Qgb25seSB1c2VkIGZvciB2aWRl
byBlbGVtZW50cyBhbmQgd291bGQgb25seQorICAgICAgICB3b3JrIGZvciBzdWNoLgorCisgICAg
ICAgIExlZ2FjeSB2aWRlbyBmdWxsc2NyZWVuIGluIFdlYktpdDIgaXMgb25seSBzdXBwb3J0ZWQg
b24gaU9TIChmb3Igb3RoZXIgcG9ydHMgdGhhdCBzdXBwb3J0CisgICAgICAgIGl0LCBpdCdzIFdL
MSBvbmx5KS4KKyAgICAgICAgCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OnN1
cHBvcnRzVmlkZW9GdWxsc2NyZWVuKTogQWRqdXN0IGZvciByZW5hbWVzIGFzCisgICAgICAgIG1l
bnRpb25lZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjplbnRlclZpZGVvRnVs
bHNjcmVlbkZvclZpZGVvRWxlbWVudCk6IGRpdHRvCisgICAgICAgIChXZWJLaXQ6OldlYkNocm9t
ZUNsaWVudDo6ZXhpdFZpZGVvRnVsbHNjcmVlbik6IGRpdHRvCisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNz
L2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9p
b3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbToKKyAgICAgICAgKFdlYktpdDo6Y2xpZW50
UmVjdEZvckVsZW1lbnQpOiBObyBuZWVkIHRvIGJlIGdlbmVyaWMgdG8gbm9kZS4KKyAgICAgICAg
KFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c3VwcG9ydHNWaWRlb0Z1bGxzY3Jl
ZW4pOiBBZGp1c3QgZm9yIHRoZQorICAgICAgICBtYWluIHJlZmFjdG9yaW5nLiBBbHNvIGNoYW5n
ZSBtX25vZGUgdG8gbV92aWRlb0VsZW1lbnQgd2l0aCBhcHByb3ByaWF0ZSB0eXBlIGNoYW5nZS4K
KyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW50ZXJWaWRlb0Z1
bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQpOiBkaXR0bworICAgICAgICAoV2ViS2l0OjpXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOjpleGl0VmlkZW9GdWxsc2NyZWVuKTogZGl0dG8KKyAgICAgICAg
KFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRW50ZXJGdWxsc2NyZWVuKTog
ZGl0dG8gCisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZEV4
aXRGdWxsc2NyZWVuKTogZGl0dG8KKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlcjo6ZGlkQ2xlYW51cEZ1bGxzY3JlZW4pOiBkaXR0bworCiAyMDE0LTA5LTAyICBQaGls
aXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
LCBHVEsgYnVpbGQgZml4IGFmdGVyIHIxNzMxNjMuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
Y3BwCShyZXZpc2lvbiAxNzMxODIpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwMiwxOSAr
OTAyLDE5IEBAIFBhc3NSZWZQdHI8U2Nyb2xsaW5nQ29vcmRpbmF0b3I+IFdlYkNocm8KICNlbmRp
ZgogCiAjaWYgUExBVEZPUk0oSU9TKQotYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnN1cHBvcnRzRnVs
bHNjcmVlbkZvck5vZGUoY29uc3QgV2ViQ29yZTo6Tm9kZSogbm9kZSkKK2Jvb2wgV2ViQ2hyb21l
Q2xpZW50OjpzdXBwb3J0c1ZpZGVvRnVsbHNjcmVlbigpCiB7Ci0gICAgcmV0dXJuIG1fcGFnZS0+
dmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpLT5zdXBwb3J0c0Z1bGxzY3JlZW4obm9kZSk7CisgICAg
cmV0dXJuIG1fcGFnZS0+dmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpLT5zdXBwb3J0c1ZpZGVvRnVs
bHNjcmVlbigpOwogfQogCi12b2lkIFdlYkNocm9tZUNsaWVudDo6ZW50ZXJGdWxsc2NyZWVuRm9y
Tm9kZShXZWJDb3JlOjpOb2RlKiBub2RlKQordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmVudGVyVmlk
ZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQqIHZp
ZGVvRWxlbWVudCkKIHsKLSAgICBtX3BhZ2UtPnZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoKS0+ZW50
ZXJGdWxsc2NyZWVuRm9yTm9kZShub2RlKTsKKyAgICBtX3BhZ2UtPnZpZGVvRnVsbHNjcmVlbk1h
bmFnZXIoKS0+ZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQodmlkZW9FbGVtZW50
KTsKIH0KIAotdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmV4aXRGdWxsc2NyZWVuRm9yTm9kZShXZWJD
b3JlOjpOb2RlKiBub2RlKQordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmV4aXRWaWRlb0Z1bGxzY3Jl
ZW4oKQogewotICAgIG1fcGFnZS0+dmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpLT5leGl0RnVsbHNj
cmVlbkZvck5vZGUobm9kZSk7CisgICAgbV9wYWdlLT52aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCkt
PmV4aXRWaWRlb0Z1bGxzY3JlZW4oKTsKIH0KICNlbmRpZgogICAgIApJbmRleDogU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5oCShyZXZpc2lvbiAxNzMxODIpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMs
OSArMjUzLDkgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TKQotICAgIHZp
cnR1YWwgYm9vbCBzdXBwb3J0c0Z1bGxzY3JlZW5Gb3JOb2RlKGNvbnN0IFdlYkNvcmU6Ok5vZGUq
KTsKLSAgICB2aXJ0dWFsIHZvaWQgZW50ZXJGdWxsc2NyZWVuRm9yTm9kZShXZWJDb3JlOjpOb2Rl
Kik7Ci0gICAgdmlydHVhbCB2b2lkIGV4aXRGdWxsc2NyZWVuRm9yTm9kZShXZWJDb3JlOjpOb2Rl
Kik7CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzVmlkZW9GdWxsc2NyZWVuKCk7CisgICAgdmly
dHVhbCB2b2lkIGVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KFdlYkNvcmU6OkhU
TUxWaWRlb0VsZW1lbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZXhpdFZpZGVvRnVsbHNjcmVlbigp
OwogI2VuZGlmCiAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlci5oCShyZXZpc2lvbiAxNzMxODIpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2lv
cy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMx
LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0V2ZW50TGlzdGVuZXIuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1BsYXRmb3JtQ0FMYXllci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bE1lZGlhRWxlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KIApAQCAtNTAsMTYgKzUwLDE2IEBAIG5hbWVzcGFjZSBXZWJLaXQgewog
Y2xhc3MgTGF5ZXJIb3N0aW5nQ29udGV4dDsKIGNsYXNzIFdlYlBhZ2U7CiAKLWNsYXNzIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXIgOiBwdWJsaWMgV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxNZWRpYUVsZW1lbnQsIHB1YmxpYyBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2UsIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworY2xhc3MgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlciA6IHB1YmxpYyBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZp
ZGVvRWxlbWVudCwgcHVibGljIFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSwg
cHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4gY3JlYXRlKFBhc3NSZWZQdHI8V2ViUGFn
ZT4pOwogICAgIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoKTsKICAgICAKICAg
ICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiosIElQQzo6TWVzc2FnZURl
Y29kZXImKTsKICAgICAKLSAgICBib29sIHN1cHBvcnRzRnVsbHNjcmVlbihjb25zdCBXZWJDb3Jl
OjpOb2RlKikgY29uc3Q7Ci0gICAgdm9pZCBlbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKFdlYkNvcmU6
Ok5vZGUqKTsKLSAgICB2b2lkIGV4aXRGdWxsc2NyZWVuRm9yTm9kZShXZWJDb3JlOjpOb2RlKik7
CisgICAgYm9vbCBzdXBwb3J0c1ZpZGVvRnVsbHNjcmVlbigpIGNvbnN0OworICAgIHZvaWQgZW50
ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVu
dCopOworICAgIHZvaWQgZXhpdFZpZGVvRnVsbHNjcmVlbigpOwogICAgIAogcHJvdGVjdGVkOgog
ICAgIGV4cGxpY2l0IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoUGFzc1JlZlB0cjxXZWJQYWdl
Pik7CkBAIC04NSw3ICs4NSw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgc2V0Vmlk
ZW9MYXllckdyYXZpdHlFbnVtKHVuc2lnbmVkKTsKICAgICAKICAgICBXZWJQYWdlKiBtX3BhZ2U7
Ci0gICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IG1fbm9kZTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6
SFRNTFZpZGVvRWxlbWVudD4gbV92aWRlb0VsZW1lbnQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPExh
eWVySG9zdGluZ0NvbnRleHQ+IG1fbGF5ZXJIb3N0aW5nQ29udGV4dDsKICAgICAKICAgICBib29s
IG1faXNBbmltYXRpbmc7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2lvcy9XZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0JKHJldmlzaW9uIDE3MzE4
MikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTUwLDEyICs1MCwxMiBAQCB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLXN0YXRpYyBJbnRSZWN0IGNsaWVu
dFJlY3RGb3JOb2RlKE5vZGUqIG5vZGUpCitzdGF0aWMgSW50UmVjdCBjbGllbnRSZWN0Rm9yRWxl
bWVudChIVE1MRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlz
RWxlbWVudE5vZGUoKSkKKyAgICBpZiAoIWVsZW1lbnQpCiAgICAgICAgIHJldHVybiBJbnRSZWN0
KCk7CiAKLSAgICByZXR1cm4gdG9FbGVtZW50KG5vZGUpLT5jbGllbnRSZWN0KCk7CisgICAgcmV0
dXJuIGVsZW1lbnQtPmNsaWVudFJlY3QoKTsKIH0KIAogUGFzc1JlZlB0cjxXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyPiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpjcmVhdGUoUGFzc1JlZlB0
cjxXZWJQYWdlPiBwYWdlKQpAQCAtNzgsMzggKzc4LDM4IEBAIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6On5XZWJWaWRlb0Z1bGwKICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5yZW1vdmVNZXNz
YWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Om1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLWJvb2wgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6c3VwcG9ydHNGdWxsc2NyZWVuKGNvbnN0IE5vZGUqIG5vZGUpIGNvbnN0
Citib29sIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnN1cHBvcnRzVmlkZW9GdWxsc2NyZWVu
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gU2V0dGluZ3M6OmF2S2l0RW5hYmxlZCgpICYmIGlzSFRN
TFZpZGVvRWxlbWVudChub2RlKTsKKyAgICByZXR1cm4gU2V0dGluZ3M6OmF2S2l0RW5hYmxlZCgp
OwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVudGVyRnVsbHNjcmVlbkZv
ck5vZGUoTm9kZSogbm9kZSkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW50ZXJW
aWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoSFRNTFZpZGVvRWxlbWVudCogdmlkZW9FbGVt
ZW50KQogewotICAgIEFTU0VSVChub2RlKTsKLSAgICBtX25vZGUgPSBub2RlOworICAgIG1fdmlk
ZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50OworCiAgICAgbV90YXJnZXRJc0Z1bGxzY3JlZW4gPSB0
cnVlOwogCiAgICAgaWYgKG1faXNBbmltYXRpbmcpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1f
aXNBbmltYXRpbmcgPSB0cnVlOwotICAgIHNldE1lZGlhRWxlbWVudCh0b0hUTUxNZWRpYUVsZW1l
bnQobm9kZSkpOworICAgIHNldFZpZGVvRWxlbWVudCh2aWRlb0VsZW1lbnQpOwogCiAgICAgbV9s
YXllckhvc3RpbmdDb250ZXh0ID0gTGF5ZXJIb3N0aW5nQ29udGV4dDo6Y3JlYXRlRm9yRXh0ZXJu
YWxIb3N0aW5nUHJvY2VzcygpOwogICAgIAotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpTZXR1cEZ1bGxzY3JlZW5XaXRoSUQobV9sYXll
ckhvc3RpbmdDb250ZXh0LT5jb250ZXh0SUQoKSwgY2xpZW50UmVjdEZvck5vZGUobm9kZSkpLCBt
X3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eTo6U2V0dXBGdWxsc2NyZWVuV2l0aElEKG1fbGF5ZXJIb3N0aW5n
Q29udGV4dC0+Y29udGV4dElEKCksIGNsaWVudFJlY3RGb3JFbGVtZW50KHZpZGVvRWxlbWVudCkp
LCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
OjpleGl0RnVsbHNjcmVlbkZvck5vZGUoTm9kZSogbm9kZSkKK3ZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcjo6ZXhpdFZpZGVvRnVsbHNjcmVlbigpCiB7Ci0gICAgbV9ub2RlLmNsZWFyKCk7
CisgICAgUmVmUHRyPEhUTUxWaWRlb0VsZW1lbnQ+IHZpZGVvRWxlbWVudCA9IG1fdmlkZW9FbGVt
ZW50LnJlbGVhc2UoKTsKICAgICBtX3RhcmdldElzRnVsbHNjcmVlbiA9IGZhbHNlOwogCiAgICAg
aWYgKG1faXNBbmltYXRpbmcpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1faXNBbmltYXRpbmcg
PSB0cnVlOwotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpFeGl0RnVsbHNjcmVlbihjbGllbnRSZWN0Rm9yTm9kZShub2RlKSksIG1fcGFn
ZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjpFeGl0RnVsbHNjcmVlbihjbGllbnRSZWN0Rm9yRWxlbWVudCh2aWRl
b0VsZW1lbnQuZ2V0KCkpKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKIHZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6c2V0RHVyYXRpb24oZG91YmxlIGR1cmF0aW9uKQpAQCAtMTkxLDkg
KzE5MSw5IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRW50ZXIKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgLy8gZXhpdCBmdWxsc2NyZWVuIG5vdyBpZiBpdCB3YXMgcHJldmlv
dXNseSByZXF1ZXN0ZWQgZHVyaW5nIGFuIGFuaW1hdGlvbi4KLSAgICBfX2Jsb2NrIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKKyAgICBf
X2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gcHJvdGVj
dCh0aGlzKTsKICAgICBXZWJUaHJlYWRSdW4oXiB7Ci0gICAgICAgIGV4aXRGdWxsc2NyZWVuRm9y
Tm9kZShtX25vZGUuZ2V0KCkpOworICAgICAgICBleGl0VmlkZW9GdWxsc2NyZWVuKCk7CiAgICAg
ICAgIHByb3RlY3QuY2xlYXIoKTsKICAgICB9KTsKIH0KQEAgLTIwMSw3ICsyMDEsNyBAQCB2b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZEVudGVyCiB2b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6OmRpZEV4aXRGdWxsc2NyZWVuKCkKIHsKICAgICBzZXRWaWRlb0Z1bGxzY3Jl
ZW5MYXllcihuaWwpOwotICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
TWVkaWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOworICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBwcm90ZWN0KHRoaXMpOwogCiAgICAgZGlzcGF0
Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKICAgICAgICAgbV9sYXllckhv
c3RpbmdDb250ZXh0LT5zZXRSb290TGF5ZXIobnVsbHB0cik7CkBAIC0yMTYsMTUgKzIxNiwxNSBA
QCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZENsZWFuCiAgICAgbV9pc0FuaW1h
dGluZyA9IGZhbHNlOwogICAgIG1faXNGdWxsc2NyZWVuID0gZmFsc2U7CiAgICAgCi0gICAgc2V0
TWVkaWFFbGVtZW50KG51bGxwdHIpOworICAgIHNldFZpZGVvRWxlbWVudChudWxscHRyKTsKIAog
ICAgIGlmICghbV90YXJnZXRJc0Z1bGxzY3JlZW4pCiAgICAgICAgIHJldHVybjsKIAogICAgIC8v
IGVudGVyIGZ1bGxzY3JlZW4gbm93IGlmIGl0IHdhcyBwcmV2aW91c2x5IHJlcXVlc3RlZCBkdXJp
bmcgYW4gYW5pbWF0aW9uLgotICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsTWVkaWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOworICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBwcm90ZWN0KHRoaXMpOwogICAgIFdlYlRo
cmVhZFJ1biheIHsKLSAgICAgICAgZW50ZXJGdWxsc2NyZWVuRm9yTm9kZShtX25vZGUuZ2V0KCkp
OworICAgICAgICBlbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChtX3ZpZGVvRWxl
bWVudC5nZXQoKSk7CiAgICAgICAgIHByb3RlY3QuY2xlYXIoKTsKICAgICB9KTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MzE4MikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDE0LTA5LTAyICBNYWNp
ZWogU3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CisKKyAgICAgICAgQ2xlYW4gdXAgbmFtaW5n
IGZvciBhbmQgc2xpZ2h0bHkgcmVmYWN0b3IgbGVnYWN5IHZpZGVvIGZ1bGxzY3JlZW4gc3VwcG9y
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2NDQ2
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgS2V5IGNo
YW5nZXM6CisgICAgICAgIHN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUoTm9kZSopIC0tPiBzdXBw
b3J0c1ZpZGVvRnVsbHNjcmVlbigpCisgICAgICAgIGVudGVyRnVsbHNjcmVlbkZvck5vZGUoTm9k
ZSopIC0tPiBlbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChIVE1MVmlkZW9FbGVt
ZW50KikKKyAgICAgICAgZXhpdEZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqKSAtLT4gZXhpdFZpZGVv
RnVsbHNjcmVlbigpCisgICAgICAgIAorICAgICAgICBUaGUgb2xkIHZlcnNpb25zIGhhZCB1bm5l
Y2Vzc2FyeSBwYXJhbWV0ZXJzLCBkaWQgbm90IGNsZWFybHkgZGlzdGluZ3Vpc2ggdGhlaXIgcHVy
cG9zZQorICAgICAgICBmcm9tIGVudGVyRnVsbHNjcmVlbkZvckVsZW1lbnQgYW5kIGZyaWVuZHMs
IGFuZCB3cm9uZ2x5IGNsYWltZWQgZ2VuZXJhbGl0eSB0byBhbGwgTm9kZXMuCisgICAgICAgIEFs
c28gY2hhbmdlZCBtYW55IG90aGVyIHBsYWNlcyB0byB1c2UgSFRNTFZpZGVvRWxlbWVudCogaW5z
dGVhZCBvZiBOb2RlKiBvciAKKyAgICAgICAgSFRNTE1lZGlhRWxlbWVudCogd2hlbiB0aGV5IHdl
cmUgaW4gZmFjdCBvbmx5IHVzZWQgZm9yIHZpZGVvIGVsZW1lbnRzIGFuZCB3b3VsZCBvbmx5Cisg
ICAgICAgIHdvcmsgZm9yIHN1Y2guCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQuaDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW06
CisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OnN1cHBvcnRzVmlkZW9GdWxsc2NyZWVuKTogQWRq
dXN0IGZvciBtYWluIHJlZmFjdG9yaW5nLgorICAgICAgICBBbHNvIG5vIG1vcmUgbmVlZCB0byBj
aGVjayBmb3IgdmlkZW8gZWxlbWVudG5lc3MuCisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OmVu
dGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KTogQWRqdXN0IGZvciBtYWluIHJlZmFj
dG9yaW5nLgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50OjpleGl0VmlkZW9GdWxsc2NyZWVuKTog
ZGl0dG8KKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAgICgtW1dlYlZpZXcg
X2VudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50Ol0pOiBBZGp1c3QgZm9yIG1haW4K
KyAgICAgICAgcmVmYWN0b3JpbmcuCisgICAgICAgICgtW1dlYlZpZXcgX2V4aXRWaWRlb0Z1bGxz
Y3JlZW5dKTogZGl0dG8KKyAgICAgICAgKC1bV2ViVmlldyBfY2xvc2VdKTogZGl0dG8KKyAgICAg
ICAgKiBXZWJWaWV3L1dlYlZpZXdJbnRlcm5hbC5oOgorCiAyMDE0LTA4LTMxICBUaW0gSG9ydG9u
ICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSB1bm5lY2Vzc2Fy
eSAoYW5kIHVubmVjZXNzYXJpbHkgaU9TLXNwZWNpZmljKSBzZXRTdHJva2VBbmRGaWxsQ29sb3IK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5oCShyZXZpc2lvbiAxNzMxODIpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTgwLDkgKzE4MCw5
IEBAIHB1YmxpYzoKICAgICB9CiAKICNpZiBFTkFCTEUoVklERU8pCi0gICAgdmlydHVhbCBib29s
IHN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUoY29uc3QgV2ViQ29yZTo6Tm9kZSopIG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKFdlYkNvcmU6Ok5vZGUq
KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxzY3JlZW5Gb3JOb2RlKFdlYkNv
cmU6Ok5vZGUqKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNWaWRlb0Z1bGxz
Y3JlZW4oKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJWaWRlb0Z1bGxzY3JlZW5G
b3JWaWRlb0VsZW1lbnQoV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCopIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCBleGl0VmlkZW9GdWxsc2NyZWVuKCkgb3ZlcnJpZGU7CiAjZW5kaWYKICAg
ICAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCShyZXZpc2lvbiAxNzMx
ODIpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTk0MCwyNiArOTQwLDI2IEBAIHZvaWQgV2ViQ2hyb21lQ2xp
ZW50OjpzY2hlZHVsZUNvbXBvc2l0aW4KIAogI2lmIEVOQUJMRShWSURFTykKIAotYm9vbCBXZWJD
aHJvbWVDbGllbnQ6OnN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUoY29uc3QgTm9kZSogbm9kZSkK
K2Jvb2wgV2ViQ2hyb21lQ2xpZW50OjpzdXBwb3J0c1ZpZGVvRnVsbHNjcmVlbigpCiB7CiAjaWYg
UExBVEZPUk0oSU9TKQogICAgIGlmICghU2V0dGluZ3M6OmF2S2l0RW5hYmxlZCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKLSAgICByZXR1cm4gaXNIVE1MVmlkZW9FbGVtZW50KG5v
ZGUpOworICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFdlYkNocm9tZUNsaWVudDo6ZW50ZXJG
dWxsc2NyZWVuRm9yTm9kZShOb2RlKiBub2RlKQordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmVudGVy
VmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvRWxl
bWVudCkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgW21fd2ViVmll
dyBfZW50ZXJGdWxsc2NyZWVuRm9yTm9kZTpub2RlXTsKKyAgICBbbV93ZWJWaWV3IF9lbnRlclZp
ZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudDp2aWRlb0VsZW1lbnRdOwogICAgIEVORF9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKLXZvaWQgV2ViQ2hyb21lQ2xpZW50OjpleGl0RnVsbHNj
cmVlbkZvck5vZGUoTm9kZSopCit2b2lkIFdlYkNocm9tZUNsaWVudDo6ZXhpdFZpZGVvRnVsbHNj
cmVlbigpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIFttX3dlYlZp
ZXcgX2V4aXRGdWxsc2NyZWVuXTsKKyAgICBbbV93ZWJWaWV3IF9leGl0VmlkZW9GdWxsc2NyZWVu
XTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOyAgICAKIH0KIApJbmRleDogU291cmNl
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkocmV2aXNpb24gMTczMTgyKQorKysgU291cmNlL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNyArMTM0
LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvR0NDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L0dlb2xvY2F0aW9uQ29udHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9HZW9sb2NhdGlvbkVy
cm9yLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0hUTUxNZWRpYUVsZW1lbnQuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvSFRNTFZpZGVvRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MTmFtZXMuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvSGlzdG9yeUNvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUv
SGlzdG9yeUl0ZW0uaD4KQEAgLTE2OTksNyArMTY5OSw3IEBAIC0gKHZvaWQpX2Nsb3NlCiAgICAg
fQogCiAjaWYgRU5BQkxFKFZJREVPKSAmJiAhUExBVEZPUk0oSU9TKQotICAgIFtzZWxmIF9leGl0
RnVsbHNjcmVlbl07CisgICAgW3NlbGYgX2V4aXRWaWRlb0Z1bGxzY3JlZW5dOwogI2VuZGlmCiAK
ICNpZiBQTEFURk9STShJT1MpCkBAIC04Mzg4LDI4ICs4Mzg4LDI1IEBAIC0gKHZvaWQpX3NjaGVk
dWxlTGF5ZXJGbHVzaEZvclBlbmRpbmdUaWwKICNlbmRpZgogCiAjaWYgRU5BQkxFKFZJREVPKQot
LSAodm9pZClfZW50ZXJGdWxsc2NyZWVuRm9yTm9kZTooV2ViQ29yZTo6Tm9kZSopbm9kZQorLSAo
dm9pZClfZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQ6KFdlYkNvcmU6OkhUTUxW
aWRlb0VsZW1lbnQqKXZpZGVvRWxlbWVudAogewotICAgIEFTU0VSVChpc0hUTUxWaWRlb0VsZW1l
bnQobm9kZSkpOwotICAgIEhUTUxNZWRpYUVsZW1lbnQqIHZpZGVvRWxlbWVudCA9IHRvSFRNTE1l
ZGlhRWxlbWVudChub2RlKTsKLQogICAgIGlmIChfcHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRyb2xs
ZXIpIHsKLSAgICAgICAgaWYgKFtfcHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRyb2xsZXIgbWVkaWFF
bGVtZW50XSA9PSB2aWRlb0VsZW1lbnQpIHsKKyAgICAgICAgaWYgKFtfcHJpdmF0ZS0+ZnVsbHNj
cmVlbkNvbnRyb2xsZXIgdmlkZW9FbGVtZW50XSA9PSB2aWRlb0VsZW1lbnQpIHsKICAgICAgICAg
ICAgIC8vIFRoZSBiYWNrZW5kIG1heSBqdXN0IHdhcm4gdXMgdGhhdCB0aGUgdW5kZXJsYXlpbmcg
cGxhZnRvcm1Nb3ZpZSgpCiAgICAgICAgICAgICAvLyBoYXMgY2hhbmdlZC4gSnVzdCBmb3JjZSBh
biB1cGRhdGUuCi0gICAgICAgICAgICBbX3ByaXZhdGUtPmZ1bGxzY3JlZW5Db250cm9sbGVyIHNl
dE1lZGlhRWxlbWVudDp2aWRlb0VsZW1lbnRdOworICAgICAgICAgICAgW19wcml2YXRlLT5mdWxs
c2NyZWVuQ29udHJvbGxlciBzZXRWaWRlb0VsZW1lbnQ6dmlkZW9FbGVtZW50XTsKICAgICAgICAg
ICAgIHJldHVybjsgLy8gTm8gbW9yZSB0byBkby4KICAgICAgICAgfQogCi0gICAgICAgIC8vIEZp
cnN0IGV4aXQgRnVsbHNjcmVlbiBmb3IgdGhlIG9sZCBtZWRpYUVsZW1lbnQuCi0gICAgICAgIFtf
cHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRyb2xsZXIgbWVkaWFFbGVtZW50XS0+ZXhpdEZ1bGxzY3Jl
ZW4oKTsKKyAgICAgICAgLy8gRmlyc3QgZXhpdCBGdWxsc2NyZWVuIGZvciB0aGUgb2xkIHZpZGVv
RWxlbWVudC4KKyAgICAgICAgW19wcml2YXRlLT5mdWxsc2NyZWVuQ29udHJvbGxlciB2aWRlb0Vs
ZW1lbnRdLT5leGl0RnVsbHNjcmVlbigpOwogICAgICAgICAvLyBUaGlzIHByZXZpb3VzIGNhbGwg
aGFzIHRvIHRyaWdnZXIgX2V4aXRGdWxsc2NyZWVuLAogICAgICAgICAvLyB3aGljaCBoYXMgdG8g
Y2xlYXIgX3ByaXZhdGUtPmZ1bGxzY3JlZW5Db250cm9sbGVyLgogICAgICAgICBBU1NFUlQoIV9w
cml2YXRlLT5mdWxsc2NyZWVuQ29udHJvbGxlcik7CiAgICAgfQogICAgIGlmICghX3ByaXZhdGUt
PmZ1bGxzY3JlZW5Db250cm9sbGVyKSB7CiAgICAgICAgIF9wcml2YXRlLT5mdWxsc2NyZWVuQ29u
dHJvbGxlciA9IFtbV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciBhbGxvY10gaW5pdF07Ci0g
ICAgICAgIFtfcHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRyb2xsZXIgc2V0TWVkaWFFbGVtZW50OnZp
ZGVvRWxlbWVudF07CisgICAgICAgIFtfcHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRyb2xsZXIgc2V0
VmlkZW9FbGVtZW50OnZpZGVvRWxlbWVudF07CiAjaWYgUExBVEZPUk0oSU9TKQogICAgICAgICBb
X3ByaXZhdGUtPmZ1bGxzY3JlZW5Db250cm9sbGVyIGVudGVyRnVsbHNjcmVlbjooVUlWaWV3ICop
W1tbc2VsZiB3aW5kb3ddIGhvc3RMYXllcl0gZGVsZWdhdGVdXTsKICNlbHNlCkBAIC04NDE3LDEw
ICs4NDE0LDEwIEBAIC0gKHZvaWQpX2VudGVyRnVsbHNjcmVlbkZvck5vZGU6KFdlYkNvcmUKICNl
bmRpZgogICAgIH0KICAgICBlbHNlCi0gICAgICAgIFtfcHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRy
b2xsZXIgc2V0TWVkaWFFbGVtZW50OnZpZGVvRWxlbWVudF07CisgICAgICAgIFtfcHJpdmF0ZS0+
ZnVsbHNjcmVlbkNvbnRyb2xsZXIgc2V0VmlkZW9FbGVtZW50OnZpZGVvRWxlbWVudF07CiB9CiAK
LS0gKHZvaWQpX2V4aXRGdWxsc2NyZWVuCistICh2b2lkKV9leGl0VmlkZW9GdWxsc2NyZWVuCiB7
CiAgICAgaWYgKCFfcHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRyb2xsZXIpCiAgICAgICAgIHJldHVy
bjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0ludGVybmFsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3SW50ZXJuYWwuaAko
cmV2aXNpb24gMTczMTgyKQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3SW50
ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBjbGFzcyBVUkw7CiBjbGFz
cyBLZXlib2FyZEV2ZW50OwogY2xhc3MgUGFnZTsKIGNsYXNzIFJlbmRlckJveDsKLWNsYXNzIE5v
ZGU7CitjbGFzcyBIVE1MVmlkZW9FbGVtZW50Owogc3RydWN0IERpY3RhdGlvbkFsdGVybmF0aXZl
OwogfQogI2VuZGlmCkBAIC0yMzMsOCArMjMzLDggQEAgQGludGVyZmFjZSBXZWJWaWV3IChXZWJW
aWV3T3RoZXJJbnRlcm5hbAogLSAodm9pZClfcHJlZmVyZW5jZXNDaGFuZ2VkOihXZWJQcmVmZXJl
bmNlcyAqKXByZWZlcmVuY2VzOwogCiAjaWYgRU5BQkxFKFZJREVPKSAmJiBkZWZpbmVkKF9fY3Bs
dXNwbHVzKQotLSAodm9pZClfZW50ZXJGdWxsc2NyZWVuRm9yTm9kZTooV2ViQ29yZTo6Tm9kZSop
bm9kZTsKLS0gKHZvaWQpX2V4aXRGdWxsc2NyZWVuOworLSAodm9pZClfZW50ZXJWaWRlb0Z1bGxz
Y3JlZW5Gb3JWaWRlb0VsZW1lbnQ6KFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQqKXZpZGVvRWxl
bWVudDsKKy0gKHZvaWQpX2V4aXRWaWRlb0Z1bGxzY3JlZW47CiAjZW5kaWYKIAogI2lmIEVOQUJM
RShGVUxMU0NSRUVOX0FQSSkgJiYgIVBMQVRGT1JNKElPUykgJiYgZGVmaW5lZChfX2NwbHVzcGx1
cykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MzE4MikKKysrIFNvdXJjZS9XZWJL
aXQvd2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBACisyMDE0LTA5
LTAyICBNYWNpZWogU3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CisKKyAgICAgICAgQ2xlYW4g
dXAgbmFtaW5nIGZvciBhbmQgc2xpZ2h0bHkgcmVmYWN0b3IgbGVnYWN5IHZpZGVvIGZ1bGxzY3Jl
ZW4gc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTM2NDQ2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgS2V5IGNoYW5nZXM6CisgICAgICAgIHN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUoTm9kZSop
IC0tPiBzdXBwb3J0c1ZpZGVvRnVsbHNjcmVlbigpCisgICAgICAgIGVudGVyRnVsbHNjcmVlbkZv
ck5vZGUoTm9kZSopIC0tPiBlbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChIVE1M
VmlkZW9FbGVtZW50KikKKyAgICAgICAgZXhpdEZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqKSAtLT4g
ZXhpdFZpZGVvRnVsbHNjcmVlbigpCisgICAgICAgIAorICAgICAgICBUaGUgb2xkIHZlcnNpb25z
IGhhZCB1bm5lY2Vzc2FyeSBwYXJhbWV0ZXJzLCBkaWQgbm90IGNsZWFybHkgZGlzdGluZ3Vpc2gg
dGhlaXIgcHVycG9zZQorICAgICAgICBmcm9tIGVudGVyRnVsbHNjcmVlbkZvckVsZW1lbnQgYW5k
IGZyaWVuZHMsIGFuZCB3cm9uZ2x5IGNsYWltZWQgZ2VuZXJhbGl0eSB0byBhbGwgTm9kZXMuCisg
ICAgICAgIEFsc28gY2hhbmdlZCBtYW55IG90aGVyIHBsYWNlcyB0byB1c2UgSFRNTFZpZGVvRWxl
bWVudCogaW5zdGVhZCBvZiBOb2RlKiBvciAKKyAgICAgICAgSFRNTE1lZGlhRWxlbWVudCogd2hl
biB0aGV5IHdlcmUgaW4gZmFjdCBvbmx5IHVzZWQgZm9yIHZpZGVvIGVsZW1lbnRzIGFuZCB3b3Vs
ZCBvbmx5CisgICAgICAgIHdvcmsgZm9yIHN1Y2guCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQuY3BwOgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50OjpzdXBwb3J0
c1ZpZGVvRnVsbHNjcmVlbik6IEFkanVzdCBmb3IgdGhlCisgICAgICAgIG1haW4gcmVmYWN0b3Jp
bmcuCisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OmVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlk
ZW9FbGVtZW50KTogZGl0dG8KKyAgICAgICAgKFdlYkNocm9tZUNsaWVudDo6ZXhpdFZpZGVvRnVs
bHNjcmVlbik6IGRpdHRvCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
Lmg6CisgICAgICAgICogV2ViVmlldy5jcHA6CisgICAgICAgIChXZWJWaWV3OjplbnRlclZpZGVv
RnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudCk6IEFkanVzdCBmb3IgdGhlIAorICAgICAgICBtYWlu
IHJlZmFjdG9yaW5nLgorICAgICAgICAoV2ViVmlldzo6ZXhpdFZpZGVvRnVsbHNjcmVlbik6IGRp
dHRvLgorICAgICAgICAqIFdlYlZpZXcuaDoKKwogMjAxNC0wOC0yNiAgQnJlbnQgRnVsZ2hhbSAg
PGJmdWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2luXSBXZWJLaXQgSURMIGluY29ycmVj
dGx5IHBhc3NlcyBIV05EIGFzIE9MRV9IQU5ETEUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dl
YlZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCShy
ZXZpc2lvbiAxNzMxODIpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjI2NywxNiArNjI2Nyw5IEBAIEhSRVNVTFQgV2ViVmlldzo6c2V0Q2FuU3Rh
cnRQbHVnaW5zKEJPT0wKICAgICByZXR1cm4gU19PSzsKIH0KIAotdm9pZCBXZWJWaWV3OjplbnRl
ckZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqIG5vZGUpCit2b2lkIFdlYlZpZXc6OmVudGVyVmlkZW9G
dWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvRWxlbWVudCkK
IHsKICNpZiBFTkFCTEUoVklERU8pICYmICFVU0UoR1NUUkVBTUVSKSAmJiAhVVNFKE1FRElBX0ZP
VU5EQVRJT04pCi0gICAgaWYgKCFpc0hUTUxWaWRlb0VsZW1lbnQobm9kZSkgfHwgIW5vZGUtPmlz
RWxlbWVudE5vZGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCF0b0VsZW1lbnQobm9k
ZSktPmlzTWVkaWFFbGVtZW50KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBIVE1MTWVkaWFFbGVt
ZW50KiB2aWRlb0VsZW1lbnQgPSB0b0hUTUxNZWRpYUVsZW1lbnQobm9kZSk7Ci0KICAgICBpZiAo
bV9mdWxsU2NyZWVuVmlkZW9Db250cm9sbGVyKSB7CiAgICAgICAgIGlmIChtX2Z1bGxTY3JlZW5W
aWRlb0NvbnRyb2xsZXItPm1lZGlhRWxlbWVudCgpID09IHZpZGVvRWxlbWVudCkgewogICAgICAg
ICAgICAgLy8gVGhlIGJhY2tlbmQgbWF5IGp1c3Qgd2FybiB1cyB0aGF0IHRoZSB1bmRlcmxheWlu
ZyBwbGFmdG9ybU1vdmllKCkKQEAgLTYyOTgsNyArNjI5MSw3IEBAIHZvaWQgV2ViVmlldzo6ZW50
ZXJGdWxsc2NyZWVuRm9yTm9kZShOb2QKICNlbmRpZgogfQogCi12b2lkIFdlYlZpZXc6OmV4aXRG
dWxsc2NyZWVuKCkKK3ZvaWQgV2ViVmlldzo6ZXhpdFZpZGVvRnVsbHNjcmVlbigpCiB7CiAjaWYg
RU5BQkxFKFZJREVPKSAmJiAhVVNFKEdTVFJFQU1FUikgJiYgIVVTRShNRURJQV9GT1VOREFUSU9O
KQogICAgIGlmICghbV9mdWxsU2NyZWVuVmlkZW9Db250cm9sbGVyKQpJbmRleDogU291cmNlL1dl
YktpdC93aW4vV2ViVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYlZp
ZXcuaAkocmV2aXNpb24gMTczMTgyKQorKysgU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5oCSh3
b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNpZiBQ
TEFURk9STShXSU4pICYmIFVTRShBVkZPVU5EQVRJT04pCiAgICAgc3RydWN0IEdyYXBoaWNzRGV2
aWNlQWRhcHRlcjsKICNlbmRpZgorICAgIGNsYXNzIEhUTUxWaWRlb0VsZW1lbnQ7CiB9CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTk0MCw4ICs5NDEsOCBAQCBwdWJsaWM6CiAgICAgV2ViQ29y
ZTo6R3JhcGhpY3NEZXZpY2VBZGFwdGVyKiBncmFwaGljc0RldmljZUFkYXB0ZXIoKSBjb25zdDsK
ICNlbmRpZgogCi0gICAgdm9pZCBlbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKFdlYkNvcmU6Ok5vZGUq
KTsKLSAgICB2b2lkIGV4aXRGdWxsc2NyZWVuKCk7CisgICAgdm9pZCBlbnRlclZpZGVvRnVsbHNj
cmVlbkZvclZpZGVvRWxlbWVudChXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50Kik7CisgICAgdm9p
ZCBleGl0VmlkZW9GdWxsc2NyZWVuKCk7CiAKICAgICB2b2lkIHNldExhc3RDdXJzb3IoSENVUlNP
UiBjdXJzb3IpIHsgbV9sYXN0U2V0Q3Vyc29yID0gY3Vyc29yOyB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAko
cmV2aXNpb24gMTczMTgyKQorKysgU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzczLDE5ICs3NzMsMTkgQEAgQ09N
UHRyPElXZWJVSURlbGVnYXRlPiBXZWJDaHJvbWVDbGllbnQ6OgogCiAjaWYgRU5BQkxFKFZJREVP
KQogCi1ib29sIFdlYkNocm9tZUNsaWVudDo6c3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZShjb25z
dCBOb2RlKiBub2RlKQorYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnN1cHBvcnRzVmlkZW9GdWxsc2Ny
ZWVuKCkKIHsKLSAgICByZXR1cm4gaXNIVE1MVmlkZW9FbGVtZW50KG5vZGUpOworICAgIHJldHVy
biB0cnVlOwogfQogCi12b2lkIFdlYkNocm9tZUNsaWVudDo6ZW50ZXJGdWxsc2NyZWVuRm9yTm9k
ZShOb2RlKiBub2RlKQordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmVudGVyVmlkZW9GdWxsc2NyZWVu
Rm9yVmlkZW9FbGVtZW50KEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvRWxlbWVudCkKIHsKLSAgICBt
X3dlYlZpZXctPmVudGVyRnVsbHNjcmVlbkZvck5vZGUobm9kZSk7CisgICAgbV93ZWJWaWV3LT5l
bnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudCh2aWRlb0VsZW1lbnQpOwogfQogCi12
b2lkIFdlYkNocm9tZUNsaWVudDo6ZXhpdEZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqKQordm9pZCBX
ZWJDaHJvbWVDbGllbnQ6OmV4aXRWaWRlb0Z1bGxzY3JlZW4oKQogewotICAgIG1fd2ViVmlldy0+
ZXhpdEZ1bGxzY3JlZW4oKTsKKyAgICBtX3dlYlZpZXctPmV4aXRWaWRlb0Z1bGxzY3JlZW4oKTsK
IH0KIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJD
aHJvbWVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3Vw
cG9ydC9XZWJDaHJvbWVDbGllbnQuaAkocmV2aXNpb24gMTczMTgyKQorKysgU291cmNlL1dlYktp
dC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTE0OCw5ICsxNDgsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNjcm9sbFJlY3RJbnRv
Vmlldyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3QgeyB9CiAKICNpZiBFTkFCTEUoVklE
RU8pCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUoY29uc3QgV2Vi
Q29yZTo6Tm9kZSopOwotICAgIHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKFdl
YkNvcmU6Ok5vZGUqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxzY3JlZW5Gb3JOb2RlKFdl
YkNvcmU6Ok5vZGUqKTsKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNWaWRlb0Z1bGxzY3JlZW4o
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQo
V2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCopOworICAgIHZpcnR1YWwgdm9pZCBleGl0VmlkZW9G
dWxsc2NyZWVuKCk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKSB8fCBFTkFC
TEUoTEVHQUNZX05PVElGSUNBVElPTlMpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237538</attachid>
            <date>2014-09-02 18:21:46 -0700</date>
            <delta_ts>2014-09-03 00:15:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-136446-20140902182138.patch</filename>
            <type>text/plain</type>
            <size>130909</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MzE4MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMCBAQAorMjAxNC0wOS0wMiAgTWFjaWVq
IFN0YWNob3dpYWsgIDxtanNAYXBwbGUuY29tPgorCisgICAgICAgIENsZWFuIHVwIG5hbWluZyBm
b3IgYW5kIHNsaWdodGx5IHJlZmFjdG9yIGxlZ2FjeSB2aWRlbyBmdWxsc2NyZWVuIHN1cHBvcnQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjQ0Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEtleSBjaGFu
Z2VzOgorICAgICAgICBzdXBwb3J0c0Z1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqKSAtLT4gc3VwcG9y
dHNWaWRlb0Z1bGxzY3JlZW4oKQorICAgICAgICBlbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUq
KSAtLT4gZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoSFRNTFZpZGVvRWxlbWVu
dCopCisgICAgICAgIGV4aXRGdWxsc2NyZWVuRm9yTm9kZShOb2RlKikgLS0+IGV4aXRWaWRlb0Z1
bGxzY3JlZW4oKQorICAgICAgICAKKyAgICAgICAgVGhlIG9sZCB2ZXJzaW9ucyBoYWQgdW5uZWNl
c3NhcnkgcGFyYW1ldGVycywgZGlkIG5vdCBjbGVhcmx5IGRpc3Rpbmd1aXNoIHRoZWlyIHB1cnBv
c2UKKyAgICAgICAgZnJvbSBlbnRlckZ1bGxzY3JlZW5Gb3JFbGVtZW50IGFuZCBmcmllbmRzLCBh
bmQgd3JvbmdseSBjbGFpbWVkIGdlbmVyYWxpdHkgdG8gYWxsIE5vZGVzLgorICAgICAgICBBbHNv
IGNoYW5nZWQgbWFueSBvdGhlciBwbGFjZXMgdG8gdXNlIEhUTUxWaWRlb0VsZW1lbnQqIGluc3Rl
YWQgb2YgTm9kZSogb3IgCisgICAgICAgIEhUTUxNZWRpYUVsZW1lbnQqIHdoZW4gdGhleSB3ZXJl
IGluIGZhY3Qgb25seSB1c2VkIGZvciB2aWRlbyBlbGVtZW50cyBhbmQgd291bGQgb25seQorICAg
ICAgICB3b3JrIGZvciBzdWNoLgorCisgICAgICAgIFRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBp
bmNsdWRlIGEgYnVuY2ggb2YgcmVuYW1pbmcgaW4gc29tZSBpT1MgZnVsbHNjcmVlbiBjb2RlLgor
CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxNZWRpYUVsZW1lbnQ6OkhUTUxNZWRpYUVsZW1lbnQpOiBSZW5hbWUgbV9pc0Z1bGxzY3Jl
ZW4gZmxhZyB0byAKKyAgICAgICAgbV9pc0luVmlkZW9GdWxsc2NyZWVuLCBzaW5jZSBpdCBvbmx5
IGNvdmVycyB0aGUgY2FzZSBvZiBsZWdhY3kgdmlkZW8gZnVsbHNjcmVlbiwKKyAgICAgICAgbm90
IGVsZW1lbnQgZnVsbHNjcmVlbi4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6
OnN0b3ApOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6cmVxdWly
ZXNUZXh0VHJhY2tSZXByZXNlbnRhdGlvbik6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50Ojppc0Z1bGxzY3JlZW4pOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6SFRN
TE1lZGlhRWxlbWVudDo6ZW50ZXJGdWxsc2NyZWVuKTogUmVuYW1lIG1faXNGdWxsc2NyZWVuIGZs
YWcgdG8KKyAgICAgICAgbV9pc0luVmlkZW9GdWxsc2NyZWVuLiBIb2lzdCB2aWRlbyBlbGVtZW50
IGNoZWNrIGhlcmUgZnJvbSBhbGwgc3VwcG9ydHNGdWxsc2NyZW5Gb3JOb2RlCisgICAgICAgIGNs
aWVudHMuIEFkanVzdCBmb3IgcmVsZXZhbnQgQ2hyb21lQ2xpZW50IHJlZmFjdG9yaW5ncy4KKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmVudGVyRnVsbHNjcmVlbik6IGRpdHRv
IGFib3ZlCisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50Lmg6CisgICAgICAgICogaHRt
bC9IVE1MVmlkZW9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1l
bnQ6OnN1cHBvcnRzRnVsbHNjcmVlbik6IEFkanVzdCBmb3IgcmVsZXZhbnQgQ2hyb21lQ2xpZW50
IAorICAgICAgICByZWZhY3RvcmluZ3MuCisgICAgICAgICogcGFnZS9DaHJvbWVDbGllbnQuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6c3VwcG9ydHNWaWRlb0Z1bGxzY3JlZW4p
OiBSZW5hbWVkIGZyb20gCisgICAgICAgIHN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUsIGFuZCBy
ZW1vdmVkIE5vZGUqIHBhcmFtZXRlci4KKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6
ZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQpOiBSZW5hbWVkIGZyb20KKyAgICAg
ICAgZW50ZXJGdWxzY3JlZW5Gb3JOb2RlIGFuZCBjaGFuZ2VkIE5vZGUqIHBhcmFtZXRlciB0byBI
VE1MVmlkZW9FbGVtZW50Ki4KKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6ZXhpdFZp
ZGVvRnVsbHNjcmVlbik6IFJlbmFtZWQgZnJvbSAKKyAgICAgICAgZXhpdEZ1bGxzY3JlZW5Gb3JO
b2RlLCBhbmQgcmVtb3ZlZCBOb2RlKiBwYXJhbWV0ZXIuCisgICAgICAgICogcGxhdGZvcm0vaW9z
L1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW06CisgICAgICAgICgtW1dl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIgdmlkZW9FbGVtZW50XSk6IFJlbmFtZWQgZnJvbSBt
ZWRpYUVsZW1lbnQ7CisgICAgICAgIHJldHVybiBhIHZpZGVvIGVsZW1lbnQgYW5kIG5vdCBqdXN0
IGEgbWVkaWEgZWxlbWVudC4KKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ciBkZWFsbG9jXSk6IFJlbmFtZWQgX21lZGlhRWxlbWVudCBkYXRhIG1lbWJlcgorICAgICAgICB0
byBfdmlkZW9FbGVtZW50IGFuZCBjaGFuZ2VkIHR5cGUgYWNjb3JkaW5nbHkuCisgICAgICAgICgt
W1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIgc2V0VmlkZW9FbGVtZW50Ol0pOiBSZW5hbWVk
IGZyb20gc2V0TWVkaWFFbGVtZW50OgorICAgICAgICBhbmQgYWRqdXN0IHBhcmFtZXRlciB0eXBl
IGFjY29yZGluZ2x5LgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIGVu
dGVyRnVsbHNjcmVlbjpdKTogVmlkZW8gZWxlbWVudHMsIG5vdCBtZWRpYQorICAgICAgICBlbGVt
ZW50cy4KKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciBleGl0RnVsbHNj
cmVlbl0pOiBkaXR0bworICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIGRp
ZENsZWFudXBGdWxsc2NyZWVuXSk6IGRpdHRvCisgICAgICAgICogcGxhdGZvcm0vaW9zL1dlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9XZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oOiBSZW1vdmUgZ3JhdHVpdG91cyBIVE1MTUVkaWFF
bGVtZW50LmggaW5jbHVkZQorICAgICAgICBhbmQgZml4IGRlY2xhcmF0aW9ucyBhY2NvcmRpbmds
eS4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQubW06IEluY2x1ZGUgV1RGU3RyaW5nLmgKKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5oLgor
ICAgICAgICAqIHBsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dC5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5tbS4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50KSBSZW5hbWVkIGZyb20gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxN
ZWRpYUVsZW1lbnQKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
OjpzZXRWaWRlb0VsZW1lbnQpOiBSZW5hbWVkIGZyb20gc2V0TWVkaWFFbGVtZW50IGFuZAorICAg
ICAgICBjaGFuZ2UgcGFyYW0gdHlwZSBhY2NvcmRpbmdseS4gQWxzbyBubyBuZWVkIHRvIGNoZWNr
IGZvciBhY3R1YWwgdmlkZW9uZXNzIG9mIHRoZSBlbGVtZW50LgorICAgICAgICAoV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnVwZGF0ZUZvckV2ZW50TmFtZSk6IFJlbmFtZSBk
YXRhIG1lbWJlciBmcm9tIG1fbWVkaWFFbGVtZW50CisgICAgICAgIHRvIG1fdmlkZW9FbGVtZW50
IGFuZCBjaGFuZ2UgdHlwZSBhY2NvcmRpbmdseS4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0Z1bGxzY3JlZW5MYXllcik6IGRpdHRvCisgICAg
ICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6cGxheSk6IGRpdHRvCisg
ICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6cGF1c2UpOiBkaXR0
bworICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnRvZ2dsZVBs
YXlTdGF0ZSk6IGRpdHRvCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudDo6YmVnaW5TY3J1YmJpbmcpOiBkaXR0bworICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQ6OmVuZFNjcnViYmluZyk6IGRpdHRvCisgICAgICAgIChXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2Vla1RvVGltZSk6IGRpdHRvCisgICAgICAg
IChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6ZmFzdFNlZWspOiBkaXR0bwor
ICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmJlZ2luU2Nhbm5p
bmdGb3J3YXJkKTogZGl0dG8KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9F
bGVtZW50OjpiZWdpblNjYW5uaW5nQmFja3dhcmQpOiBkaXR0bworICAgICAgICAoV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmVuZFNjYW5uaW5nKTogZGl0dG8KKyAgICAgICAg
KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpyZXF1ZXN0RXhpdEZ1bGxzY3Jl
ZW4pOiBkaXR0bworICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6
OnNldFZpZGVvTGF5ZXJGcmFtZSk6IGRpdHRvCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9MYXllckdyYXZpdHkpOiBkaXR0bworICAgICAgICAo
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnVwZGF0ZUxlZ2libGVPcHRpb25z
KTogZGl0dG8KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlci5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyLm1tOgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIHZpZGVvRWxl
bWVudF0pOiBSZW5hbWVkIGZyb20gbWVkaWFFbGVtZW50CisgICAgICAgIGFuZCB1cGRhdGUgcmV0
dXJuIHR5cGUgYWNjb3JkaW5nbHkuCisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXIgc2V0VmlkZW9FbGVtZW50Ol0pOiBSZW5hbWVkIGZyb20gCisgICAgICAgIHNldE1lZGlh
RWxlbWVudCBhbmQgdXBkYXRlIHJldHVybiB0eXBlIGFjY29yZGluZ2x5LgorICAgICAgICAoLVtX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIHZpZGVvRWxlbWVudFJlY3RdKTogUmVuYW1lZAor
ICAgICAgICBmcm9tIG1lZGlhRWxlbWVudFJlY3QuCisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXIgZW50ZXJGdWxsc2NyZWVuOl0pOiBVcGRhdGUgZm9yCisgICAgICAgIHJl
bmFtZS4KKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciBleGl0RnVsbHNj
cmVlbl0pOiBkaXR0bworICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIHVw
ZGF0ZVBvd2VyQXNzZXJ0aW9uc10pOiBSZW5hbWUKKyAgICAgICAgbWVtYmVyIGZyb20gX21lZGlh
RWxlbWVudCB0byBfdmlkZW9FbGVtZW50CisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXIgX3JlcXVlc3RFeGl0XSk6IGRpdHRvCisgICAgICAgICogV2ViQ29yZS5leHAuaW46
IEFkanVzdCBmb3IgZnVuY3Rpb24gYW5kIGNsYXNzIHJlbmFtZXMuCisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGp1c3QgZm9yIGZpbGUgcmVuYW1lcy4KKwog
MjAxNC0wOS0wMiAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgog
CiAgICAgICAgIEZpeCBiaW5kaW5ncyB0ZXN0cyBhZnRlciByMTczMTc2LgpJbmRleDogU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5leHAuaW4JKHJldmlzaW9uIDE3MzE4MikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
ZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0zNDI2LDMwICszNDI2LDI5IEBAIF9fWk5LN1dlYkNv
cmUxNkhUTUxNZWRpYUVsZW1lbnQ4ZHVyYXRpb24KICNlbmRpZgogCiAjaWYgRU5BQkxFKFZJREVP
KSAmJiBQTEFURk9STShJT1MpCi1fX1pON1dlYkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
TWVkaWFFbGVtZW50MTBzZWVrVG9UaW1lRWQKLV9fWk43V2ViQ29yZTM1V2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxNZWRpYUVsZW1lbnQxMWVuZFNjYW5uaW5nRXYKLV9fWk43V2ViQ29yZTM1V2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQxMWhhbmRsZUV2ZW50RVBOU18yMlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRFUE5TXzVFdmVudEUKLV9fWk43V2ViQ29yZTM1V2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxNZWRpYUVsZW1lbnQxMmVuZFNjcnViYmluZ0V2Ci1fX1pON1dlYkNvcmUzNVdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50MTRiZWdpblNjcnViYmluZ0V2Ci1fX1pON1dl
YkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50MTVzZXRNZWRpYUVsZW1l
bnRFUE5TXzE2SFRNTE1lZGlhRWxlbWVudEUKLV9fWk43V2ViQ29yZTM1V2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxNZWRpYUVsZW1lbnQxNXRvZ2dsZVBsYXlTdGF0ZUV2Ci1fX1pON1dlYkNvcmUzNVdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50MThzZXRWaWRlb0xheWVyRnJhbWVFTlNf
OUZsb2F0UmVjdEUKLV9fWk43V2ViQ29yZTM1V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVs
ZW1lbnQyMGJlZ2luU2Nhbm5pbmdGb3J3YXJkRXYKLV9fWk43V2ViQ29yZTM1V2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQyMHNldFZpZGVvTGF5ZXJHcmF2aXR5RU5TXzIzV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWwxMlZpZGVvR3Jhdml0eUUKLV9fWk43V2ViQ29yZTM1V2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQyMWJlZ2luU2Nhbm5pbmdCYWNrd2FyZEV2Ci1fX1pO
N1dlYkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50MjFyZXF1ZXN0RXhp
dEZ1bGxzY3JlZW5FdgotX19aTjdXZWJDb3JlMzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlh
RWxlbWVudDIyc2VsZWN0QXVkaW9NZWRpYU9wdGlvbkV5Ci1fX1pON1dlYkNvcmUzNVdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50MjNzZXRWaWRlb0Z1bGxzY3JlZW5MYXllckVQN0NB
TGF5ZXIKLV9fWk43V2ViQ29yZTM1V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQy
NHNlbGVjdExlZ2libGVNZWRpYU9wdGlvbkV5Ci1fX1pON1dlYkNvcmUzNVdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsTWVkaWFFbGVtZW50NHBsYXlFdgotX19aTjdXZWJDb3JlMzVXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbE1lZGlhRWxlbWVudDVwYXVzZUV2Ci1fX1pON1dlYkNvcmUzNVdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OGZhc3RTZWVrRWQKLV9fWk43V2ViQ29yZTM1V2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnRDMkV2Ci1fX1pON1dlYkNvcmUzNVdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50RDJFdgorX19aTjdXZWJDb3JlMzVXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDEwc2Vla1RvVGltZUVkCitfX1pON1dlYkNvcmUzNVdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50MTFlbmRTY2FubmluZ0V2CitfX1pON1dl
YkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50MTFoYW5kbGVFdmVudEVQ
TlNfMjJTY3JpcHRFeGVjdXRpb25Db250ZXh0RVBOU181RXZlbnRFCitfX1pON1dlYkNvcmUzNVdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50MTJlbmRTY3J1YmJpbmdFdgorX19aTjdX
ZWJDb3JlMzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDE0YmVnaW5TY3J1YmJp
bmdFdgorX19aTjdXZWJDb3JlMzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDE1
c2V0VmlkZW9FbGVtZW50RVBOU18xNkhUTUxWaWRlb0VsZW1lbnRFCitfX1pON1dlYkNvcmUzNVdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50MTV0b2dnbGVQbGF5U3RhdGVFdgorX19a
TjdXZWJDb3JlMzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDE4c2V0VmlkZW9M
YXllckZyYW1lRU5TXzlGbG9hdFJlY3RFCitfX1pON1dlYkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50MjBiZWdpblNjYW5uaW5nRm9yd2FyZEV2CitfX1pON1dlYkNvcmUz
NVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50MjBzZXRWaWRlb0xheWVyR3Jhdml0
eUVOU18yM1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsMTJWaWRlb0dyYXZpdHlFCitfX1pON1dlYkNv
cmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50MjFiZWdpblNjYW5uaW5nQmFj
a3dhcmRFdgorX19aTjdXZWJDb3JlMzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dDIxcmVxdWVzdEV4aXRGdWxsc2NyZWVuRXYKK19fWk43V2ViQ29yZTM1V2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxWaWRlb0VsZW1lbnQyMnNlbGVjdEF1ZGlvTWVkaWFPcHRpb25FeQorX19aTjdXZWJD
b3JlMzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDIzc2V0VmlkZW9GdWxsc2Ny
ZWVuTGF5ZXJFUDdDQUxheWVyCitfX1pON1dlYkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50MjRzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb25FeQorX19aTjdXZWJDb3JlMzVX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDRwbGF5RXYKK19fWk43V2ViQ29yZTM1
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ1cGF1c2VFdgorX19aTjdXZWJDb3Jl
MzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDhmYXN0U2Vla0VkCitfX1pON1dl
YkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50QzJFdgorX19aTjdXZWJD
b3JlMzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudEQyRXYKIF9fWk5LN1dlYkNv
cmUxNkhUTUxWaWRlb0VsZW1lbnQxMHZpZGVvV2lkdGhFdgogX19aTks3V2ViQ29yZTE2SFRNTFZp
ZGVvRWxlbWVudDExdmlkZW9IZWlnaHRFdgotX19aVFZON1dlYkNvcmUzNVdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsTWVkaWFFbGVtZW50RQotX19aVGhuP19ON1dlYkNvcmUzNVdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsTWVkaWFFbGVtZW50MTFoYW5kbGVFdmVudEVQTlNfMjJTY3JpcHRFeGVjdXRpb25D
b250ZXh0RVBOU181RXZlbnRFCitfX1pUaG40X043V2ViQ29yZTM1V2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQxMWhhbmRsZUV2ZW50RVBOU18yMlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRFUE5TXzVFdmVudEUKICNlbmRpZgogCiAjaWYgRU5BQkxFKFZJREVPKSAmJiBQTEFURk9STShJ
T1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDgwMDAwCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiAxNzMxODIpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEzNjMsOCArMTM2Myw2IEBACiAJCTNGNDJC
MzFFMTg4MTE5MUIwMDI3OEFBQyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRjQyQjMx
QzE4ODExOTFCMDAyNzhBQUMgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1t
ICovOyB9OwogCQkzRkJDNEFFQTE4OTg4MEVGMDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNG
QkM0QUU5MTg5ODgwRUYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTNGQkM0QUVDMTg5
ODgxMEUwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGQkM0QUVCMTg5ODgxMEUwMDQ2
RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkzRkJDNEFFRjE4OTg4MTM4MDA0NkVFMzgg
LyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRkJDNEFFRDE4OTg4MTM4MDA0NkVFMzgg
LyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQubW0gKi87IH07Ci0JCTNGQkM0
QUYwMTg5ODgxMzgwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0ZCQzRB
RUUxODk4ODEzODAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJM0ZC
QzRBRjMxODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0ZCQzRB
RjExODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1t
ICovOyB9OwogCQkzRkJDNEFGNDE4OTg4MTU2MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDNGQkM0QUYyMTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTNGRkZGOUE4MTU5RDlBNTUwMDIwQkJENSAvKiBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0ZGRkY5
QTYxNTlEOUE1NTAwMjBCQkQ1IC8qIFdlYktpdENTU1ZpZXdwb3J0UnVsZS5jcHAgKi87IH07CkBA
IC0yMjA5LDYgKzIyMDcsOCBAQAogCQk2NURGMzIzQzA5RDFERTY1MDAxQkUzMjUgLyogSlNDYW52
YXNQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NjVERjMyMzYwOUQxREU2NTAwMUJFMzI1IC8qIEpTQ2FudmFzUHJveHkuaCAqLzsgfTsKIAkJNjVE
RjMyNjEwOUQxRTE5OTAwMEJFMzI1IC8qIFVzZXJBZ2VudFN0eWxlU2hlZXRzRGF0YS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTY1ODFBRjA5RDE0
RUU2MDAwRTYxRDcgLyogVXNlckFnZW50U3R5bGVTaGVldHNEYXRhLmNwcCAqLzsgfTsKIAkJNjVF
MEU5NDQxMTMzQzg5RjAwQjRDQjEwIC8qIEpTRE9NV3JhcHBlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVFMEU5NDMxMTMzQzg5RjAwQjRDQjEwIC8q
IEpTRE9NV3JhcHBlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTY1RkQ0NjY1MTlCNTk2RjAwMDFFMkI0RCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNjU4NkZFM0MxOUI1NDhCRDAwNUMzQzgyIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJNjVGRDQ2NjYxOUI1OTZGNjAwMUUyQjREIC8qIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNjU4NkZFM0QxOUI1NDhCRDAwNUMzQzgyIC8qIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50Lm1tICovOyB9OwogCQk2NUZFQTg2OTA5ODMzQURFMDBCRUQ0QUIg
LyogUGFnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA2NUZFQTg2ODA5ODMzQURFMDBCRUQ0QUIgLyogUGFnZS5jcHAgKi87IH07CiAJCTZCMzQ4MDk0
MEVFRjUwRDQwMEFDMUI0MSAvKiBOYXRpdmVJbWFnZVB0ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkIzNDgwOTIwRUVGNTBENDAwQUMxQjQxIC8qIE5h
dGl2ZUltYWdlUHRyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNkM2Mzg4OTVBOTZDQ0VFNTBDOEM5NDZDIC8qIENhY2hlZFJlc291cmNlUmVxdWVz
dEluaXRpYXRvcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDZDNjM4ODkzQTk2Q0NFRTUwQzhDOTQ2QyAvKiBDYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0
aWF0b3JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTgzNjYsOCArODM2Niw2IEBACiAJCTNGNDJCMzFDMTg4MTE5MUIwMDI3OEFBQyAvKiBXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IG5hbWUgPSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW07IHBh
dGggPSBpb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkzRkJDNEFFOTE4OTg4MEVGMDA0NkVFMzggLyogV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWwuaDsgcGF0aCA9IGlvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzRkJDNEFFQjE4OTg4MTBFMDA0NkVFMzgg
LyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS5oOyBwYXRoID0gaW9zL1dlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkz
RkJDNEFFRDE4OTg4MTM4MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVs
ZW1lbnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5tbTsgcGF0aCA9IGlvcy9XZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
M0ZCQzRBRUUxODk4ODEzODAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFF
bGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsTWVkaWFFbGVtZW50Lmg7IHBhdGggPSBpb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxNZWRpYUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0ZCQzRBRjEx
ODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQubW07IHBhdGggPSBpb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNGQkM0QUYyMTg5ODgxNTYw
MDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5o
OyBwYXRoID0gaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNGRkZGOUE2MTU5RDlBNTUwMDIwQkJENSAvKiBXZWJLaXRD
U1NWaWV3cG9ydFJ1bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2ViS2l0Q1NTVmlld3BvcnRSdWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTkyNzYsNiArOTI3NCw4IEBACiAJCTY1N0VEQTA2MTM4NUNCOTcwMDRFMDY0NSAvKiBNZW1vcnlQ
cmVzc3VyZUhhbmRsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
TWVtb3J5UHJlc3N1cmVIYW5kbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NjU3RURBMDcxMzg1Q0I5NzAwNEUwNjQ1IC8qIE1lbW9yeVByZXNzdXJlSGFuZGxlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZW1vcnlQcmVzc3VyZUhhbmRsZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjU4NDM2ODUwQUUwMUI3NDAwRTUzNzUzIC8qIEZy
YW1lTG9hZFJlcXVlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZyYW1l
TG9hZFJlcXVlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjU4NkZFM0MxOUI1
NDhCRDAwNUMzQzgyIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlk
ZW9FbGVtZW50Lmg7IHBhdGggPSBpb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjU4NkZFM0QxOUI1NDhCRDAwNUMz
QzgyIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRl
b0VsZW1lbnQubW07IHBhdGggPSBpb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1OTM5MjM1MDlBRTQzNDYwMDJD
NTMxRiAvKiBVUkwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVS
TC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1OTM5MjM2MDlBRTQzNDYwMDJD
NTMxRiAvKiBVUkwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVSTC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTkzOTIzOTA5QUU0MzVDMDAyQzUzMUYgLyog
VVJMTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbGluZUVuZGluZyA9
IDA7IHBhdGggPSBVUkxNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHhjTGFuZ3VhZ2VT
cGVjaWZpY2F0aW9uSWRlbnRpZmllciA9IHhjb2RlLmxhbmcub2JqY3BwOyB9OwpAQCAtMTg0NzQs
OCArMTg0NzQsOCBAQAogCQkJCTNGQkM0QUYyMTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oICovLAogCQkJCTNGQkM0QUYxMTg5ODgxNTYwMDQ2RUUz
OCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbSAqLywKIAkJCQkzRkJDNEFF
OTE4OTg4MEVGMDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCAqLywKLQkJCQkz
RkJDNEFFRTE4OTg4MTM4MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVs
ZW1lbnQuaCAqLywKLQkJCQkzRkJDNEFFRDE4OTg4MTM4MDA0NkVFMzggLyogV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQubW0gKi8sCisJCQkJNjU4NkZFM0MxOUI1NDhCRDAwNUMz
QzgyIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmggKi8sCisJCQkJNjU4
NkZFM0QxOUI1NDhCRDAwNUMzQzgyIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVt
ZW50Lm1tICovLAogCQkJCUU0NTM5MDNDMEVBRkQ2MzcwMDM2OTVDOCAvKiBXaWRnZXRJT1MubW0g
Ki8sCiAJCQkpOwogCQkJbmFtZSA9IGlvczsKQEAgLTI1NjEwLDYgKzI1NjEwLDcgQEAKIAkJCQk1
QTU3NEYyNTEzMURCOTM5MDA0NzFCODggLyogUmVuZGVyUXVvdGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUQ3MEFENjU4MTNFMTM0MkIwMDVCNTBCNCAvKiBSZW5kZXJSZWdpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDRTkzRjQ1MTUxN0M1NjcwMDhDQ0Y3NCAvKiBSZW5kZXJSZWdpb25TZXQuaCBp
biBIZWFkZXJzICovLAorCQkJCTY1RkQ0NjY1MTlCNTk2RjAwMDFFMkI0RCAvKiBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg3MURGRTMw
QTE1Mzc2QjAwQjEyQTY4IC8qIFJlbmRlclJlcGxhY2VkLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
Q0E4NDZENzBEQzY3QTM1MDAyNkMzMDkgLyogUmVuZGVyUmVwbGljYS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTQ3OUZBRUUxMDlBRTM3NTAwREVENjU1IC8qIFJlbmRlclJ1YnkuaCBpbiBIZWFkZXJz
ICovLApAQCAtMjY1NDMsNyArMjY1NDQsNiBAQAogCQkJCTNGQkM0QUVDMTg5ODgxMEUwMDQ2RUUz
OCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTNG
QkM0QUY0MTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJM0ZCQzRBRUExODk4ODBFRjAwNDZFRTM4IC8qIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsLmggaW4gSGVhZGVycyAqLywKLQkJCQkzRkJDNEFGMDE4OTg4MTM4
MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUYxMjE3MUY2MTZBOENGMEIwMDAwNTNDQSAvKiBXZWJWVFRFbGVtZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1RDIxQTgwMzEzRUNFNURGMDBCQjcwNjQgLyogV2ViVlRUUGFy
c2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMTBCNjk4MDE0MEMxNzQwMDBCQzFDMjYgLyogV2Vi
VlRUVG9rZW4uaCBpbiBIZWFkZXJzICovLApAQCAtMjc1NzMsNiArMjc1NzMsNyBAQAogCQkJCUZE
MTc2MkUzMTc2Njg2RUEwMEQ4MzZBOCAvKiBEb3duU2FtcGxlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBN0NBNTk1RTBCMjdCRDlFMDBGQTAyMUQgLyogRHJhZ0NvbnRyb2xsZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTcxODc4OTAwQjJEMDRBQzAwQTE2RUNFIC8qIERyYWdDb250cm9sbGVy
TWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNjVGRDQ2NjYxOUI1OTZGNjAwMUUyQjREIC8qIFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTc5NTQ2NDMwQjVDNENCNDAwN0I0MzhGIC8qIERyYWdEYXRhLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE3OTU0NjNFMEI1QzRDODAwMDdCNDM4RiAvKiBEcmFnRGF0YU1hYy5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCUE3Q0ZCM0QxMEI3RUQxMEEwMDcwQzMyRCAvKiBEcmFnSW1hZ2UuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC0yOTgyMiw3ICsyOTgyMyw2IEBACiAJCQkJQ0Q4MjAzMEQxMzk1QUI2QTAw
Rjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW0gaW4gU291
cmNlcyAqLywKIAkJCQk3QzczRkIwQzE5MUVGNUE4MDA3REUwNjEgLyogSlNVc2VyTWVzc2FnZUhh
bmRsZXJzTmFtZXNwYWNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTNGQkM0QUYzMTg5ODgxNTYw
MDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbSBpbiBTb3VyY2Vz
ICovLAotCQkJCTNGQkM0QUVGMTg5ODgxMzgwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbE1lZGlhRWxlbWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUYxMjE3MUY1MTZBOENFRDIw
MDAwNTNDQSAvKiBXZWJWVFRFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVEMjFBODAy
MTNFQ0U1REYwMEJCNzA2NCAvKiBXZWJWVFRQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QjEwQjY5ODExNDBDMTc0MDAwQkMxQzI2IC8qIFdlYlZUVFRva2VuaXplci5jcHAgaW4gU291cmNl
cyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkocmV2
aXNpb24gMTczMTgyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzA1LDcgKzMwNSw3IEBAIEhUTUxNZWRpYUVsZW1lbnQ6OkhU
TUxNZWRpYUVsZW1lbnQoY29uc3QKICAgICAsIG1fc2VudEVuZEV2ZW50KGZhbHNlKQogICAgICwg
bV9wYXVzZWRJbnRlcm5hbChmYWxzZSkKICAgICAsIG1fc2VuZFByb2dyZXNzRXZlbnRzKHRydWUp
Ci0gICAgLCBtX2lzRnVsbHNjcmVlbihmYWxzZSkKKyAgICAsIG1faXNJblZpZGVvRnVsbHNjcmVl
bihmYWxzZSkKICAgICAsIG1fY2xvc2VkQ2FwdGlvbnNWaXNpYmxlKGZhbHNlKQogICAgICwgbV93
ZWJraXRMZWdhY3lDbG9zZWRDYXB0aW9uT3ZlcnJpZGUoZmFsc2UpCiAgICAgLCBtX2NvbXBsZXRl
bHlMb2FkZWQoZmFsc2UpCkBAIC02ODIsNyArNjgyLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50
OjpyZW1vdmVkRnJvbShDb250YQogICAgICAgICAgICAgbWVkaWFDb250cm9scygpLT5oaWRlKCk7
CiAgICAgICAgIGlmIChtX25ldHdvcmtTdGF0ZSA+IE5FVFdPUktfRU1QVFkpCiAgICAgICAgICAg
ICBwYXVzZSgpOwotICAgICAgICBpZiAobV9pc0Z1bGxzY3JlZW4pCisgICAgICAgIGlmIChtX2lz
SW5WaWRlb0Z1bGxzY3JlZW4pCiAgICAgICAgICAgICBleGl0RnVsbHNjcmVlbigpOwogCiAgICAg
ICAgIGlmIChtX3BsYXllcikgewpAQCAtNDY0Nyw3ICs0NjQ3LDcgQEAgYm9vbCBIVE1MTWVkaWFF
bGVtZW50OjpjYW5TdXNwZW5kKCkgY29ucwogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzdG9wKCkK
IHsKICAgICBMT0coTWVkaWEsICJIVE1MTWVkaWFFbGVtZW50OjpzdG9wIik7Ci0gICAgaWYgKG1f
aXNGdWxsc2NyZWVuKQorICAgIGlmIChtX2lzSW5WaWRlb0Z1bGxzY3JlZW4pCiAgICAgICAgIGV4
aXRGdWxsc2NyZWVuKCk7CiAgICAgCiAgICAgbV9pbkFjdGl2ZURvY3VtZW50ID0gZmFsc2U7CkBA
IC00NzQxLDcgKzQ3NDEsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnZpc2liaWxpdHlTdGF0
ZUNoCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogYm9vbCBIVE1MTWVkaWFFbGVtZW50OjpyZXF1
aXJlc1RleHRUcmFja1JlcHJlc2VudGF0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9pc0Z1
bGxzY3JlZW4gJiYgbV9wbGF5ZXIgPyBtX3BsYXllci0+cmVxdWlyZXNUZXh0VHJhY2tSZXByZXNl
bnRhdGlvbigpIDogZmFsc2U7CisgICAgcmV0dXJuIG1faXNJblZpZGVvRnVsbHNjcmVlbiAmJiBt
X3BsYXllciA/IG1fcGxheWVyLT5yZXF1aXJlc1RleHRUcmFja1JlcHJlc2VudGF0aW9uKCkgOiBm
YWxzZTsKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRUZXh0VHJhY2tSZXByZXNlbnRh
dGlvbihUZXh0VHJhY2tSZXByZXNlbnRhdGlvbiogcmVwcmVzZW50YXRpb24pCkBAIC00ODMzLDcg
KzQ4MzMsNyBAQCBkb3VibGUgSFRNTE1lZGlhRWxlbWVudDo6bWF4RmFzdEZvcndhcmRSCiAgICAg
CiBib29sIEhUTUxNZWRpYUVsZW1lbnQ6OmlzRnVsbHNjcmVlbigpIGNvbnN0CiB7Ci0gICAgaWYg
KG1faXNGdWxsc2NyZWVuKQorICAgIGlmIChtX2lzSW5WaWRlb0Z1bGxzY3JlZW4pCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIAogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKQEAgLTQ4NTcs
NyArNDg1Nyw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dG9nZ2xlRnVsbHNjcmVlblMKIHZv
aWQgSFRNTE1lZGlhRWxlbWVudDo6ZW50ZXJGdWxsc2NyZWVuKCkKIHsKICAgICBMT0coTWVkaWEs
ICJIVE1MTWVkaWFFbGVtZW50OjplbnRlckZ1bGxzY3JlZW4iKTsKLSAgICBpZiAobV9pc0Z1bGxz
Y3JlZW4pCisgICAgaWYgKG1faXNJblZpZGVvRnVsbHNjcmVlbikKICAgICAgICAgcmV0dXJuOwog
CiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQpAQCAtNDg2NywxMiArNDg2NywxMyBAQCB2b2lk
IEhUTUxNZWRpYUVsZW1lbnQ6OmVudGVyRnVsbHNjcmVlbigpCiAgICAgfQogI2VuZGlmCiAKLSAg
ICBtX2lzRnVsbHNjcmVlbiA9IHRydWU7CisgICAgbV9pc0luVmlkZW9GdWxsc2NyZWVuID0gdHJ1
ZTsKICAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQogICAgICAgICBtZWRpYUNvbnRyb2xzKCkt
PmVudGVyZWRGdWxsc2NyZWVuKCk7Ci0gICAgaWYgKGRvY3VtZW50KCkucGFnZSgpKSB7Ci0gICAg
ICAgIGlmIChkb2N1bWVudCgpLnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50KCkuc3VwcG9ydHNGdWxs
c2NyZWVuRm9yTm9kZSh0aGlzKSkgewotICAgICAgICAgICAgZG9jdW1lbnQoKS5wYWdlKCktPmNo
cm9tZSgpLmNsaWVudCgpLmVudGVyRnVsbHNjcmVlbkZvck5vZGUodGhpcyk7CisgICAgaWYgKGRv
Y3VtZW50KCkucGFnZSgpICYmIGlzSFRNTFZpZGVvRWxlbWVudCh0aGlzKSkgeworICAgICAgICBI
VE1MVmlkZW9FbGVtZW50KiBhc1ZpZGVvID0gdG9IVE1MVmlkZW9FbGVtZW50KHRoaXMpOworICAg
ICAgICBpZiAoZG9jdW1lbnQoKS5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLnN1cHBvcnRzVmlk
ZW9GdWxsc2NyZWVuKCkpIHsKKyAgICAgICAgICAgIGRvY3VtZW50KCkucGFnZSgpLT5jaHJvbWUo
KS5jbGllbnQoKS5lbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChhc1ZpZGVvKTsK
ICAgICAgICAgICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1lcygpLndlYmtpdGJlZ2luZnVsbHNj
cmVlbkV2ZW50KTsKICAgICAgICAgfQogICAgIH0KQEAgLTQ4ODksMTYgKzQ4OTAsMTYgQEAgdm9p
ZCBIVE1MTWVkaWFFbGVtZW50OjpleGl0RnVsbHNjcmVlbigpCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAjZW5kaWYKLSAgICBBU1NFUlQobV9pc0Z1bGxzY3JlZW4pOwotICAgIG1faXNGdWxsc2Ny
ZWVuID0gZmFsc2U7CisgICAgQVNTRVJUKG1faXNJblZpZGVvRnVsbHNjcmVlbik7CisgICAgbV9p
c0luVmlkZW9GdWxsc2NyZWVuID0gZmFsc2U7CiAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkK
ICAgICAgICAgbWVkaWFDb250cm9scygpLT5leGl0ZWRGdWxsc2NyZWVuKCk7Ci0gICAgaWYgKGRv
Y3VtZW50KCkucGFnZSgpKSB7CisgICAgaWYgKGRvY3VtZW50KCkucGFnZSgpICYmIGlzSFRNTFZp
ZGVvRWxlbWVudCh0aGlzKSkgewogICAgICAgICBpZiAobV9tZWRpYVNlc3Npb24tPnJlcXVpcmVz
RnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2soKnRoaXMpKQogICAgICAgICAgICAgcGF1c2VJbnRl
cm5hbCgpOwogCi0gICAgICAgIGlmIChkb2N1bWVudCgpLnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50
KCkuc3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZSh0aGlzKSkgewotICAgICAgICAgICAgZG9jdW1l
bnQoKS5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLmV4aXRGdWxsc2NyZWVuRm9yTm9kZSh0aGlz
KTsKKyAgICAgICAgaWYgKGRvY3VtZW50KCkucGFnZSgpLT5jaHJvbWUoKS5jbGllbnQoKS5zdXBw
b3J0c1ZpZGVvRnVsbHNjcmVlbigpKSB7CisgICAgICAgICAgICBkb2N1bWVudCgpLnBhZ2UoKS0+
Y2hyb21lKCkuY2xpZW50KCkuZXhpdFZpZGVvRnVsbHNjcmVlbigpOwogICAgICAgICAgICAgc2No
ZWR1bGVFdmVudChldmVudE5hbWVzKCkud2Via2l0ZW5kZnVsbHNjcmVlbkV2ZW50KTsKICAgICAg
ICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCShy
ZXZpc2lvbiAxNzMxODIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtODE2LDcgKzgxNiw3IEBAIHByaXZhdGU6CiAgICAgLy8gc3Vw
cG9ydCBwcm9ncmVzcyBldmVudHMgc28gc2V0dGluZyBtX3NlbmRQcm9ncmVzc0V2ZW50cyBkaXNh
YmxlcyB0aGVtIAogICAgIGJvb2wgbV9zZW5kUHJvZ3Jlc3NFdmVudHMgOiAxOwogCi0gICAgYm9v
bCBtX2lzRnVsbHNjcmVlbiA6IDE7CisgICAgYm9vbCBtX2lzSW5WaWRlb0Z1bGxzY3JlZW4gOiAx
OwogICAgIGJvb2wgbV9jbG9zZWRDYXB0aW9uc1Zpc2libGUgOiAxOwogICAgIGJvb2wgbV93ZWJr
aXRMZWdhY3lDbG9zZWRDYXB0aW9uT3ZlcnJpZGUgOiAxOwogICAgIGJvb2wgbV9jb21wbGV0ZWx5
TG9hZGVkIDogMTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNw
cAkocmV2aXNpb24gMTczMTgyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU3LDcgKzE1Nyw3IEBAIGJvb2wgSFRNTFZpZGVv
RWxlbWVudDo6c3VwcG9ydHNGdWxsc2NyZWUKICAgICBpZiAoIXBsYXllcigpLT5oYXNWaWRlbygp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gcGFnZS0+Y2hyb21lKCkuY2xp
ZW50KCkuc3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZSh0aGlzKTsKKyAgICByZXR1cm4gcGFnZS0+
Y2hyb21lKCkuY2xpZW50KCkuc3VwcG9ydHNWaWRlb0Z1bGxzY3JlZW4oKTsKICNlbmRpZiAvLyBQ
TEFURk9STShJT1MpCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAkocmV2
aXNpb24gMTczMTgyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMzM5LDkgKzMzOSw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEdyYXBo
aWNzRGV2aWNlQWRhcHRlciogZ3JhcGhpY3NEZXZpY2VBZGFwdGVyKCkgY29uc3QgeyByZXR1cm4g
MDsgfQogI2VuZGlmCiAKLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9k
ZShjb25zdCBOb2RlKikgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZW50ZXJG
dWxsc2NyZWVuRm9yTm9kZShOb2RlKikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGV4aXRGdWxsc2Ny
ZWVuRm9yTm9kZShOb2RlKikgeyB9CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzVmlkZW9GdWxs
c2NyZWVuKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJWaWRlb0Z1
bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoSFRNTFZpZGVvRWxlbWVudCopIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBleGl0VmlkZW9GdWxsc2NyZWVuKCkgeyB9CiAgICAgdmlydHVhbCBib29sIHJlcXVp
cmVzRnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2soKSB7IHJldHVybiBmYWxzZTsgfSAKIAogI2lm
IEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lv
cy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0
LmgJKHJldmlzaW9uIDE3MzE4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTMg
KzI4LDEzIEBACiAKICNpZiBQTEFURk9STShJT1MpCiAKLSNpbXBvcnQgPFdlYkNvcmUvSFRNTE1l
ZGlhRWxlbWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9IVE1MVmlkZW9FbGVtZW50Lmg+CiAKIE9C
SkNfQ0xBU1MgVUlWaWV3OwogCiBXRUJDT1JFX0VYUE9SVCBAaW50ZXJmYWNlIFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXIgOiBOU09iamVjdAotLSAodm9pZClzZXRNZWRpYUVsZW1lbnQ6KFdl
YkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqKW1lZGlhRWxlbWVudDsKLS0gKFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnQqKW1lZGlhRWxlbWVudDsKKy0gKHZvaWQpc2V0VmlkZW9FbGVtZW50OihXZWJD
b3JlOjpIVE1MVmlkZW9FbGVtZW50Kil2aWRlb0VsZW1lbnQ7CistIChXZWJDb3JlOjpIVE1MVmlk
ZW9FbGVtZW50Kil2aWRlb0VsZW1lbnQ7CiAtICh2b2lkKWVudGVyRnVsbHNjcmVlbjooVUlWaWV3
ICopdmlldzsKIC0gKHZvaWQpZXhpdEZ1bGxzY3JlZW47CiAtICh2b2lkKXJlcXVlc3RIaWRlQW5k
RXhpdEZ1bGxzY3JlZW47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW0JKHJl
dmlzaW9uIDE3MzE4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW0JKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcg
QEAKIAogI2ltcG9ydCAiTG9nZ2luZy5oIgogI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVt
ZW50LmgiCisjaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oIgog
I2ltcG9ydCA8UXVhcnR6Q29yZS9Db3JlQW5pbWF0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dl
YkNvcmVUaHJlYWRSdW4uaD4KIApAQCAtNDAsMTIgKzQwLDEyIEBAIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogI2lmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEIDwgODAwMDAKIAog
QGltcGxlbWVudGF0aW9uIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIKLS0gKHZvaWQpc2V0
TWVkaWFFbGVtZW50OihXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50KiltZWRpYUVsZW1lbnQKKy0g
KHZvaWQpc2V0VmlkZW9FbGVtZW50OihXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50Kil2aWRlb0Vs
ZW1lbnQKIHsKLSAgICBVTlVTRURfUEFSQU0obWVkaWFFbGVtZW50KTsKKyAgICBVTlVTRURfUEFS
QU0odmlkZW9FbGVtZW50KTsKIH0KIAotLSAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCopbWVk
aWFFbGVtZW50CistIChXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50Kil2aWRlb0VsZW1lbnQKIHsK
ICAgICByZXR1cm4gbnVsbHB0cjsKIH0KQEAgLTgxLDkgKzgxLDkgQEAgcHVibGljOgogCiBAaW1w
bGVtZW50YXRpb24gV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlcgogewotICAgIFJlZlB0cjxI
VE1MTWVkaWFFbGVtZW50PiBfbWVkaWFFbGVtZW50OworICAgIFJlZlB0cjxIVE1MVmlkZW9FbGVt
ZW50PiBfdmlkZW9FbGVtZW50OwogICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdD4gX2ludGVyZmFjZTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxN
ZWRpYUVsZW1lbnQ+IF9tb2RlbDsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ+IF9tb2RlbDsKICAgICBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ2hh
bmdlT2JzZXJ2ZXIgX2NoYW5nZU9ic2VydmVyOwogICAgIFJldGFpblB0cjxQbGF0Zm9ybUxheWVy
PiBfdmlkZW9GdWxsc2NyZWVuTGF5ZXI7CiB9CkBAIC0xMDAsMTggKzEwMCwxOCBAQCAtIChpbnN0
YW5jZXR5cGUpaW5pdAogCiAtICh2b2lkKWRlYWxsb2MKIHsKLSAgICBfbWVkaWFFbGVtZW50ID0g
bnVsbHB0cjsKKyAgICBfdmlkZW9FbGVtZW50ID0gbnVsbHB0cjsKICAgICBbc3VwZXIgZGVhbGxv
Y107CiB9CiAKLS0gKHZvaWQpc2V0TWVkaWFFbGVtZW50OihIVE1MTWVkaWFFbGVtZW50KiltZWRp
YUVsZW1lbnQKKy0gKHZvaWQpc2V0VmlkZW9FbGVtZW50OihIVE1MVmlkZW9FbGVtZW50Kil2aWRl
b0VsZW1lbnQKIHsKLSAgICBfbWVkaWFFbGVtZW50ID0gbWVkaWFFbGVtZW50OworICAgIF92aWRl
b0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7CiB9CiAKLS0gKEhUTUxNZWRpYUVsZW1lbnQqKW1lZGlh
RWxlbWVudAorLSAoSFRNTFZpZGVvRWxlbWVudCopdmlkZW9FbGVtZW50CiB7Ci0gICAgcmV0dXJu
IF9tZWRpYUVsZW1lbnQuZ2V0KCk7CisgICAgcmV0dXJuIF92aWRlb0VsZW1lbnQuZ2V0KCk7CiB9
CiAKIC0gKHZvaWQpZW50ZXJGdWxsc2NyZWVuOihVSVZpZXcgKil2aWV3CkBAIC0xMjAsMTcgKzEy
MCwxNyBAQCAtICh2b2lkKWVudGVyRnVsbHNjcmVlbjooVUlWaWV3ICopdmlldwogICAgIAogICAg
IF9pbnRlcmZhY2UgPSBhZG9wdFJlZihuZXcgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQpOwogICAgIF9pbnRlcmZhY2UtPnNldFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVy
KCZfY2hhbmdlT2JzZXJ2ZXIpOwotICAgIF9tb2RlbCA9IGFkb3B0UmVmKG5ldyBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudCk7CisgICAgX21vZGVsID0gYWRvcHRSZWYobmV3IFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KTsKICAgICBfbW9kZWwtPnNldFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZShfaW50ZXJmYWNlLmdldCgpKTsKICAgICBfaW50ZXJmYWNl
LT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbChfbW9kZWwuZ2V0KCkpOwotICAgIF9tb2RlbC0+
c2V0TWVkaWFFbGVtZW50KF9tZWRpYUVsZW1lbnQuZ2V0KCkpOworICAgIF9tb2RlbC0+c2V0Vmlk
ZW9FbGVtZW50KF92aWRlb0VsZW1lbnQuZ2V0KCkpOwogICAgIF92aWRlb0Z1bGxzY3JlZW5MYXll
ciA9IFtDQUxheWVyIGxheWVyXTsKLSAgICBfaW50ZXJmYWNlLT5zZXR1cEZ1bGxzY3JlZW4oKl92
aWRlb0Z1bGxzY3JlZW5MYXllci5nZXQoKSwgX21lZGlhRWxlbWVudC0+Y2xpZW50UmVjdCgpLCB2
aWV3KTsKKyAgICBfaW50ZXJmYWNlLT5zZXR1cEZ1bGxzY3JlZW4oKl92aWRlb0Z1bGxzY3JlZW5M
YXllci5nZXQoKSwgX3ZpZGVvRWxlbWVudC0+Y2xpZW50UmVjdCgpLCB2aWV3KTsKIH0KIAogLSAo
dm9pZClleGl0RnVsbHNjcmVlbgogewotICAgIF9pbnRlcmZhY2UtPmV4aXRGdWxsc2NyZWVuKF9t
ZWRpYUVsZW1lbnQtPnNjcmVlblJlY3QoKSk7CisgICAgX2ludGVyZmFjZS0+ZXhpdEZ1bGxzY3Jl
ZW4oX3ZpZGVvRWxlbWVudC0+c2NyZWVuUmVjdCgpKTsKIH0KIAogLSAodm9pZClyZXF1ZXN0SGlk
ZUFuZEV4aXRGdWxsc2NyZWVuCkBAIC0xNjMsNyArMTYzLDcgQEAgLSAodm9pZClkaWRDbGVhbnVw
RnVsbHNjcmVlbgogICAgICAgICBfbW9kZWwtPnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKG5pbCk7
CiAgICAgICAgIF9pbnRlcmZhY2UtPnNldFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKG51bGxwdHIp
OwogICAgICAgICBfbW9kZWwtPnNldFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZShudWxscHRy
KTsKLSAgICAgICAgX21vZGVsLT5zZXRNZWRpYUVsZW1lbnQobnVsbHB0cik7CisgICAgICAgIF9t
b2RlbC0+c2V0VmlkZW9FbGVtZW50KG51bGxwdHIpOwogICAgICAgICBfaW50ZXJmYWNlLT5zZXRX
ZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcihudWxscHRyKTsKICAgICAgICAgX21vZGVs
ID0gbnVsbHB0cjsKICAgICAgICAgX2ludGVyZmFjZSA9IG51bGxwdHI7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZS5oCShyZXZpc2lvbiAxNzMxODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDkg
KzUwLDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRWaWRlb0RpbWVuc2lvbnMoYm9v
bCBoYXNWaWRlbywgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCBzZXRTZWVrYWJsZVJhbmdlcyhjb25zdCBUaW1lUmFuZ2VzJikgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBzZXRDYW5QbGF5RmFzdFJldmVyc2UoYm9vbCkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBzZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgb3B0
aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRM
ZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBvcHRpb25z
LCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldEV4dGVy
bmFsUGxheWJhY2soYm9vbCBlbmFibGVkLCBFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgU3Ry
aW5nIGxvY2FsaXplZERldmljZU5hbWUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QXVkaW9N
ZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPFdURjo6U3RyaW5nPiYgb3B0aW9ucywg
dWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRMZWdpYmxl
TWVkaWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZlY3RvcjxXVEY6OlN0cmluZz4mIG9wdGlvbnMs
IHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RXh0ZXJu
YWxQbGF5YmFjayhib29sIGVuYWJsZWQsIEV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBXVEY6
OlN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKSA9IDA7CiB9OwogCiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQuaAkocmV2aXNpb24gMTczMTgyKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDcgKzMwLDYgQEAKICNpZiBQTEFURk9STShJT1MpICYmIF9fSVBIT05FX09T
X1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDgwMDAwCiAKICNpbmNsdWRlIDxXZWJDb3JlL0V2ZW50
TGlzdGVuZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0hUTUxNZWRpYUVsZW1lbnQuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1BsYXRmb3JtTGF5ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1dlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTQ0LDcg
KzQzLDEyIEBAIE9CSkNfQ0xBU1MgVUlWaWV3OwogT0JKQ19DTEFTUyBDQUxheWVyOwogT0JKQ19D
TEFTUyBXZWJBVlZpZGVvTGF5ZXI7CiAKK25hbWVzcGFjZSBXVEYgeworY2xhc3MgU3RyaW5nOwor
fQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBJbnRSZWN0OwogY2xhc3MgV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWw7CiAgICAgCiBjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNl
cnZlciB7CkBAIC01NSw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkRXhp
dEZ1bGxzY3JlZW4oKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZENsZWFudXBGdWxsc2NyZWVu
KCkgPSAwOwogfTsKLSAgICAKKwogY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQKICAgICA6IHB1YmxpYyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UKICAgICAsIHB1Ymxp
YyBSZWZDb3VudGVkPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiB7CkBAIC04OCwx
MyArOTIsMTMgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXRW
aWRlb0RpbWVuc2lvbnMoYm9vbCBoYXNWaWRlbywgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkg
b3ZlcnJpZGU7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNldFNlZWthYmxlUmFu
Z2VzKGNvbnN0IFRpbWVSYW5nZXMmKSBvdmVycmlkZTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIHZvaWQgc2V0Q2FuUGxheUZhc3RSZXZlcnNlKGJvb2wpIG92ZXJyaWRlOwotICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyhjb25z
dCBWZWN0b3I8U3RyaW5nPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgb3ZlcnJp
ZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNldExlZ2libGVNZWRpYVNlbGVj
dGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVj
dGVkSW5kZXgpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXRF
eHRlcm5hbFBsYXliYWNrKGJvb2wgZW5hYmxlZCwgRXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUs
IFN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIHZvaWQgc2V0QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9y
PFdURjo6U3RyaW5nPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgb3ZlcnJpZGU7
CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNldExlZ2libGVNZWRpYVNlbGVjdGlv
bk9wdGlvbnMoY29uc3QgVmVjdG9yPFdURjo6U3RyaW5nPiYgb3B0aW9ucywgdWludDY0X3Qgc2Vs
ZWN0ZWRJbmRleCkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNl
dEV4dGVybmFsUGxheWJhY2soYm9vbCBlbmFibGVkLCBFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlw
ZSwgV1RGOjpTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSkgb3ZlcnJpZGU7CiAKLSAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc2V0dXBGdWxsc2NyZWVuKFBsYXRmb3JtTGF5ZXImLCBX
ZWJDb3JlOjpJbnRSZWN0IGluaXRpYWxSZWN0LCBVSVZpZXcgKik7CisgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB2b2lkIHNldHVwRnVsbHNjcmVlbihQbGF0Zm9ybUxheWVyJiwgSW50UmVjdCBp
bml0aWFsUmVjdCwgVUlWaWV3ICopOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBl
bnRlckZ1bGxzY3JlZW4oKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZXhpdEZ1
bGxzY3JlZW4oV2ViQ29yZTo6SW50UmVjdCBmaW5hbFJlY3QpOworICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgdm9pZCBleGl0RnVsbHNjcmVlbihJbnRSZWN0IGZpbmFsUmVjdCk7CiAgICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNsZWFudXBGdWxsc2NyZWVuKCk7CiAgICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB2b2lkIGludmFsaWRhdGUoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIHZvaWQgcmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdC5tbQkocmV2aXNpb24gMTczMTgyKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVUaHJl
YWRSdW4uaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50LmgJKHJl
dmlzaW9uIDE3MzE4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDkyICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0KLSNpZm5k
ZWYgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnRfaAotI2RlZmluZSBXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudF9oCi0KLSNpZiBQTEFURk9STShJT1MpCi0KLSNp
bmNsdWRlIDxXZWJDb3JlL0V2ZW50TGlzdGVuZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0
UmVjdC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1MYXllci5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgSFRNTE1lZGlhRWxlbWVudDsKLWNsYXNzIFRleHRU
cmFjazsKLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZTsKLQotY2xhc3MgV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQgOiBwdWJsaWMgV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWwsIHB1YmxpYyBFdmVudExpc3RlbmVyIHsKLXB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9S
VCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudCgpOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50KCk7Ci0gICAg
dm9pZCBzZXRXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UoV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlKiBpbnRlcmZhY2UpIHttX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSA9IGludGVyZmFj
ZTt9Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRNZWRpYUVsZW1lbnQoSFRNTE1lZGlhRWxl
bWVudCopOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIo
UGxhdGZvcm1MYXllciopOwotICAgIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBo
YW5kbGVFdmVudChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29yZTo6RXZl
bnQqKSBvdmVycmlkZTsKLSAgICB2b2lkIHVwZGF0ZUZvckV2ZW50TmFtZShjb25zdCBXVEY6OkF0
b21pY1N0cmluZyYpOwotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBFdmVudExpc3RlbmVyJiBy
aHMpIG92ZXJyaWRlCi0gICAgICAgIHtyZXR1cm4gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RXZlbnRM
aXN0ZW5lcio+KHRoaXMpID09ICZyaHM7fQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2
b2lkIHBsYXkoKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcGF1
c2UoKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgdG9nZ2xlUGxh
eVN0YXRlKCkgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGJlZ2lu
U2NydWJiaW5nKCkgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGVu
ZFNjcnViYmluZygpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBz
ZWVrVG9UaW1lKGRvdWJsZSB0aW1lKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIHZvaWQgZmFzdFNlZWsoZG91YmxlIHRpbWUpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgdm9pZCBiZWdpblNjYW5uaW5nRm9yd2FyZCgpIG92ZXJyaWRlOwotICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBiZWdpblNjYW5uaW5nQmFja3dhcmQoKSBvdmVycmlk
ZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZW5kU2Nhbm5pbmcoKSBvdmVycmlk
ZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcmVxdWVzdEV4aXRGdWxsc2NyZWVu
KCkgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNldFZpZGVvTGF5
ZXJGcmFtZShGbG9hdFJlY3QpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
dm9pZCBzZXRWaWRlb0xheWVyR3Jhdml0eShXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9H
cmF2aXR5KSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc2VsZWN0
QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBpbmRleCkgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB2b2lkIHNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBpbmRl
eCkgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIGNvbnN0IFZlY3RvcjxXVEY6OkF0
b21pY1N0cmluZz4mIG9ic2VydmVkRXZlbnROYW1lcygpOwotICAgIGNvbnN0IFdURjo6QXRvbWlj
U3RyaW5nJiBldmVudE5hbWVBbGwoKTsKLSAgICAKLSAgICBSZWZQdHI8SFRNTE1lZGlhRWxlbWVu
dD4gbV9tZWRpYUVsZW1lbnQ7Ci0gICAgUmV0YWluUHRyPFBsYXRmb3JtTGF5ZXI+IG1fdmlkZW9G
dWxsc2NyZWVuTGF5ZXI7Ci0gICAgYm9vbCBtX2lzTGlzdGVuaW5nOwotICAgIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZSogbV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U7Ci0gICAgRmxvYXRS
ZWN0IG1fdmlkZW9GcmFtZTsKLSAgICBWZWN0b3I8UmVmUHRyPFRleHRUcmFjaz4+IG1fbGVnaWJs
ZVRyYWNrc0Zvck1lbnU7Ci0KLSAgICB2b2lkIHVwZGF0ZUxlZ2libGVPcHRpb25zKCk7Ci19Owot
Ci19Ci0KLSNlbmRpZgotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lv
cy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVs
ZW1lbnQubW0JKHJldmlzaW9uIDE3MzE4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lv
cy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5tbQkod29ya2luZyBjb3B5KQpA
QCAtMSwzODUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotCi0jaWYgUExBVEZPUk0oSU9TKQotCi0jaW1wb3J0
ICJXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5oIgotCi0jaW1wb3J0ICJET01F
dmVudEludGVybmFsLmgiCi0jaW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1wb3J0ICJNZWRpYUNvbnRy
b2xzSG9zdC5oIgotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLmgiCi0jaW1w
b3J0IDxXZWJDb3JlL0RPTUV2ZW50TGlzdGVuZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRXZlbnQu
aD4KLSNpbXBvcnQgPFdlYkNvcmUvRXZlbnRMaXN0ZW5lci5oPgotI2ltcG9ydCA8V2ViQ29yZS9F
dmVudE5hbWVzLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0hUTUxFbGVtZW50Lmg+Ci0jaW1wb3J0IDxX
ZWJDb3JlL0hUTUxNZWRpYUVsZW1lbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvSFRNTFZpZGVvRWxl
bWVudC5oPgotI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1BhZ2VH
cm91cC5oPgotI2ltcG9ydCA8V2ViQ29yZS9Tb2Z0TGlua2luZy5oPgotI2ltcG9ydCA8V2ViQ29y
ZS9UZXh0VHJhY2tMaXN0Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1RpbWVSYW5nZXMuaD4KLSNpbXBv
cnQgPFdlYkNvcmUvV2ViQ29yZVRocmVhZFJ1bi5oPgotI2ltcG9ydCA8UXVhcnR6Q29yZS9Db3Jl
QW5pbWF0aW9uLmg+Ci0jaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbXBvcnQgPHd0
Zi9SZXRhaW5QdHIuaD4KLQotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFF
bGVtZW50KCkKLSAgICA6IEV2ZW50TGlzdGVuZXIoRXZlbnRMaXN0ZW5lcjo6Q1BQRXZlbnRMaXN0
ZW5lclR5cGUpCi0gICAgLCBtX2lzTGlzdGVuaW5ne2ZhbHNlfQotewotfQotCi1XZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6fldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFF
bGVtZW50KCkKLXsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVu
dDo6c2V0TWVkaWFFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKLXsKLSAg
ICBpZiAobV9tZWRpYUVsZW1lbnQgPT0gbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9tZWRpYUVsZW1lbnQgJiYgbV9pc0xpc3RlbmluZykgewotICAgICAgICBmb3Ig
KGF1dG8gZXZlbnROYW1lIDogb2JzZXJ2ZWRFdmVudE5hbWVzKCkpCi0gICAgICAgICAgICBtX21l
ZGlhRWxlbWVudC0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIHRoaXMsIGZhbHNlKTsK
LSAgICB9Ci0gICAgbV9pc0xpc3RlbmluZyA9IGZhbHNlOwotCi0gICAgbV9tZWRpYUVsZW1lbnQg
PSBtZWRpYUVsZW1lbnQ7Ci0KLSAgICBpZiAoIW1fbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1
cm47Ci0KLSAgICBmb3IgKGF1dG8gZXZlbnROYW1lIDogb2JzZXJ2ZWRFdmVudE5hbWVzKCkpCi0g
ICAgICAgIG1fbWVkaWFFbGVtZW50LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgdGhpcywg
ZmFsc2UpOwotICAgIG1faXNMaXN0ZW5pbmcgPSB0cnVlOwotCi0gICAgdXBkYXRlRm9yRXZlbnRO
YW1lKGV2ZW50TmFtZUFsbCgpKTsKLQotICAgIGlmIChpc0hUTUxWaWRlb0VsZW1lbnQobV9tZWRp
YUVsZW1lbnQuZ2V0KCkpKSB7Ci0gICAgICAgIEhUTUxWaWRlb0VsZW1lbnQgKnZpZGVvRWxlbWVu
dCA9IHRvSFRNTFZpZGVvRWxlbWVudChtX21lZGlhRWxlbWVudC5nZXQoKSk7Ci0gICAgICAgIG1f
dmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRWaWRlb0RpbWVuc2lvbnModHJ1ZSwgdmlkZW9F
bGVtZW50LT52aWRlb1dpZHRoKCksIHZpZGVvRWxlbWVudC0+dmlkZW9IZWlnaHQoKSk7Ci0gICAg
fSBlbHNlCi0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRWaWRlb0RpbWVu
c2lvbnMoZmFsc2UsIDAsIDApOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVk
aWFFbGVtZW50OjpoYW5kbGVFdmVudChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
V2ViQ29yZTo6RXZlbnQqIGV2ZW50KQotewotICAgIExPRyhNZWRpYSwgImhhbmRsZUV2ZW50ICVz
IiwgZXZlbnQtPnR5cGUoKS5jaGFyYWN0ZXJzOCgpKTsKLSAgICB1cGRhdGVGb3JFdmVudE5hbWUo
ZXZlbnQtPnR5cGUoKSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVs
ZW1lbnQ6OnVwZGF0ZUZvckV2ZW50TmFtZShjb25zdCBXVEY6OkF0b21pY1N0cmluZyYgZXZlbnRO
YW1lKQotewotICAgIGlmICghbV9tZWRpYUVsZW1lbnQgfHwgIW1fdmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYm9vbCBhbGwgPSBldmVudE5hbWUg
PT0gZXZlbnROYW1lQWxsKCk7Ci0KLSAgICBpZiAoYWxsCi0gICAgICAgIHx8IGV2ZW50TmFtZSA9
PSBldmVudE5hbWVzKCkuZHVyYXRpb25jaGFuZ2VFdmVudCkgewotICAgICAgICBtX3ZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZS0+c2V0RHVyYXRpb24obV9tZWRpYUVsZW1lbnQtPmR1cmF0aW9uKCkp
OwotICAgICAgICAvLyBUaGVzZSBpcyBubyBzdGFuZGFyZCBldmVudCBmb3IgbWluRmFzdFJldmVy
c2VSYXRlQ2hhbmdlOyBkdXJhdGlvbiBjaGFuZ2UgaXMgYSByZWFzb25hYmxlIHByb3h5IGZvciBp
dC4KLSAgICAgICAgLy8gSXQgaGFwcGVucyBldmVyeSB0aW1lIGEgbmV3IGl0ZW0gYmVjb21lcyBy
ZWFkeSB0byBwbGF5LgotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0Q2Fu
UGxheUZhc3RSZXZlcnNlKG1fbWVkaWFFbGVtZW50LT5taW5GYXN0UmV2ZXJzZVJhdGUoKSA8IDAu
MCk7Ci0gICAgfQotCi0gICAgaWYgKGFsbAotICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnRO
YW1lcygpLnBhdXNlRXZlbnQKLSAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5w
bGF5RXZlbnQKLSAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5yYXRlY2hhbmdl
RXZlbnQpCi0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRSYXRlKCFtX21l
ZGlhRWxlbWVudC0+cGF1c2VkKCksIG1fbWVkaWFFbGVtZW50LT5wbGF5YmFja1JhdGUoKSk7Ci0K
LSAgICBpZiAoYWxsCi0gICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkudGltZXVw
ZGF0ZUV2ZW50KSB7Ci0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRDdXJy
ZW50VGltZShtX21lZGlhRWxlbWVudC0+Y3VycmVudFRpbWUoKSwgW1tOU1Byb2Nlc3NJbmZvIHBy
b2Nlc3NJbmZvXSBzeXN0ZW1VcHRpbWVdKTsKLSAgICAgICAgLy8gRklYTUU6IDEzMDc4OCAtIGZp
bmQgYSBiZXR0ZXIgZXZlbnQgdG8gdXBkYXRlIHNlZWthYmxlIHJhbmdlcyBmcm9tLgotICAgICAg
ICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0U2Vla2FibGVSYW5nZXMoKm1fbWVkaWFF
bGVtZW50LT5zZWVrYWJsZSgpKTsKLSAgICB9Ci0KLSAgICBpZiAoYWxsCi0gICAgICAgIHx8IGV2
ZW50TmFtZSA9PSBldmVudE5hbWVzKCkuYWRkdHJhY2tFdmVudAotICAgICAgICB8fCBldmVudE5h
bWUgPT0gZXZlbnROYW1lcygpLnJlbW92ZXRyYWNrRXZlbnQpCi0gICAgICAgIHVwZGF0ZUxlZ2li
bGVPcHRpb25zKCk7Ci0KLSAgICBpZiAoYWxsCi0gICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVu
dE5hbWVzKCkud2Via2l0Y3VycmVudHBsYXliYWNrdGFyZ2V0aXN3aXJlbGVzc2NoYW5nZWRFdmVu
dCkgewotICAgICAgICBib29sIGVuYWJsZWQgPSBtX21lZGlhRWxlbWVudC0+bWVkaWFTZXNzaW9u
KCkuY3VycmVudFBsYXliYWNrVGFyZ2V0SXNXaXJlbGVzcygqbV9tZWRpYUVsZW1lbnQpOwotICAg
ICAgICBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRU
eXBlIHRhcmdldFR5cGUgPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U6OlRhcmdldFR5cGVO
b25lOwotICAgICAgICBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZTsKLQotICAgICAgICBpZiAo
bV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCkpIHsKLSAgICAgICAgICAgIERFUFJF
Q0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGFpcnBsYXksIChBU0NJSUxpdGVyYWwo
ImFpcnBsYXkiKSkpOwotICAgICAgICAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FM
KFN0cmluZywgdHZvdXQsIChBU0NJSUxpdGVyYWwoInR2b3V0IikpKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgU3RyaW5nIHR5cGUgPSBtX21lZGlhRWxlbWVudC0+bWVkaWFDb250cm9sc0hv
c3QoKS0+ZXh0ZXJuYWxEZXZpY2VUeXBlKCk7Ci0gICAgICAgICAgICBpZiAodHlwZSA9PSBhaXJw
bGF5KQotICAgICAgICAgICAgICAgIHRhcmdldFR5cGUgPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2U6OlRhcmdldFR5cGVBaXJQbGF5OwotICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSB0
dm91dCkKLSAgICAgICAgICAgICAgICB0YXJnZXRUeXBlID0gV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlOjpUYXJnZXRUeXBlVFZPdXQ7Ci0gICAgICAgICAgICBsb2NhbGl6ZWREZXZpY2VOYW1l
ID0gbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCktPmV4dGVybmFsRGV2aWNlRGlz
cGxheU5hbWUoKTsKLSAgICAgICAgfQotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZS0+c2V0RXh0ZXJuYWxQbGF5YmFjayhlbmFibGVkLCB0YXJnZXRUeXBlLCBsb2NhbGl6ZWREZXZp
Y2VOYW1lKTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVs
ZW1lbnQ6OnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKFBsYXRmb3JtTGF5ZXIqIHZpZGVvTGF5ZXIp
Ci17Ci0gICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIgPT0gdmlkZW9MYXllcikKLSAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIgPSB2aWRlb0xheWVy
OwotICAgIFttX3ZpZGVvRnVsbHNjcmVlbkxheWVyIHNldEZyYW1lOm1fdmlkZW9GcmFtZV07Ci0g
ICAgCi0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1l
bnQ+IHByb3RlY3QodGhpcyk7Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgIGlmIChtX21l
ZGlhRWxlbWVudCkKLSAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5zZXRWaWRlb0Z1bGxzY3Jl
ZW5MYXllcihtX3ZpZGVvRnVsbHNjcmVlbkxheWVyLmdldCgpKTsKLSAgICAgICAgcHJvdGVjdC5j
bGVhcigpOwotICAgIH0pOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFF
bGVtZW50OjpwbGF5KCkgewotICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsTWVkaWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOwotICAgIFdlYlRocmVhZFJ1biheewotICAg
ICAgICBpZiAobV9tZWRpYUVsZW1lbnQpCi0gICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+cGxh
eSgpOwotICAgICAgICBwcm90ZWN0LmNsZWFyKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnBhdXNlKCkKLXsKLSAgICBfX2Jsb2NrIFJl
ZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsK
LSAgICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAg
ICAgICAgbV9tZWRpYUVsZW1lbnQtPnBhdXNlKCk7Ci0gICAgICAgIHByb3RlY3QuY2xlYXIoKTsK
LSAgICB9KTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6
dG9nZ2xlUGxheVN0YXRlKCkKLXsKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKLSAgICBXZWJUaHJlYWRSdW4oXnsK
LSAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQt
PnRvZ2dsZVBsYXlTdGF0ZSgpOwotICAgICAgICBwcm90ZWN0LmNsZWFyKCk7Ci0gICAgfSk7Ci19
Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OmJlZ2luU2NydWJi
aW5nKCkKLXsKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlh
RWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKLSAgICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgaWYg
KG1fbWVkaWFFbGVtZW50KQotICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmJlZ2luU2NydWJi
aW5nKCk7Ci0gICAgICAgIHByb3RlY3QuY2xlYXIoKTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6ZW5kU2NydWJiaW5nKCkKLXsKLSAgICBf
X2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVj
dCh0aGlzKTsKLSAgICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50
KQotICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmVuZFNjcnViYmluZygpOwotICAgICAgICBw
cm90ZWN0LmNsZWFyKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxNZWRpYUVsZW1lbnQ6OnNlZWtUb1RpbWUoZG91YmxlIHRpbWUpCi17Ci0gICAgX19ibG9jayBS
ZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7
Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAg
ICAgICAgIG1fbWVkaWFFbGVtZW50LT5zZXRDdXJyZW50VGltZSh0aW1lKTsKLSAgICAgICAgcHJv
dGVjdC5jbGVhcigpOwotICAgIH0pOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
TWVkaWFFbGVtZW50OjpmYXN0U2Vlayhkb3VibGUgdGltZSkKLXsKLSAgICBfX2Jsb2NrIFJlZlB0
cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKLSAg
ICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICAg
ICAgbV9tZWRpYUVsZW1lbnQtPmZhc3RTZWVrKHRpbWUpOwotICAgICAgICBwcm90ZWN0LmNsZWFy
KCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1l
bnQ6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkKLXsKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKLSAgICBXZWJUaHJl
YWRSdW4oXnsKLSAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICAgICAgbV9tZWRp
YUVsZW1lbnQtPmJlZ2luU2Nhbm5pbmcoTWVkaWFDb250cm9sbGVySW50ZXJmYWNlOjpGb3J3YXJk
KTsKLSAgICAgICAgcHJvdGVjdC5jbGVhcigpOwotICAgIH0pOwotfQotCi12b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpiZWdpblNjYW5uaW5nQmFja3dhcmQoKQotewot
ICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50PiBw
cm90ZWN0KHRoaXMpOwotICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICBpZiAobV9tZWRpYUVs
ZW1lbnQpCi0gICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+YmVnaW5TY2FubmluZyhNZWRpYUNv
bnRyb2xsZXJJbnRlcmZhY2U6OkJhY2t3YXJkKTsKLSAgICAgICAgcHJvdGVjdC5jbGVhcigpOwot
ICAgIH0pOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50Ojpl
bmRTY2FubmluZygpCi17Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxNZWRpYUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0gICAg
ICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5lbmRT
Y2FubmluZygpOwotICAgICAgICBwcm90ZWN0LmNsZWFyKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnJlcXVlc3RFeGl0RnVsbHNjcmVl
bigpCi17Ci0gICAgaWYgKCFtX21lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
X19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+IHByb3Rl
Y3QodGhpcyk7Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgIGlmIChtX21lZGlhRWxlbWVu
dCAmJiBtX21lZGlhRWxlbWVudC0+aXNGdWxsc2NyZWVuKCkpCi0gICAgICAgICAgICBtX21lZGlh
RWxlbWVudC0+ZXhpdEZ1bGxzY3JlZW4oKTsKLSAgICAgICAgcHJvdGVjdC5jbGVhcigpOwotICAg
IH0pOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpzZXRW
aWRlb0xheWVyRnJhbWUoRmxvYXRSZWN0IHJlY3QpCi17Ci0gICAgbV92aWRlb0ZyYW1lID0gcmVj
dDsKLSAgICBbbV92aWRlb0Z1bGxzY3JlZW5MYXllciBzZXRGcmFtZTpDR1JlY3QocmVjdCldOwot
ICAgIG1fbWVkaWFFbGVtZW50LT5zZXRWaWRlb0Z1bGxzY3JlZW5GcmFtZShyZWN0KTsKLX0KLQot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6c2V0VmlkZW9MYXllckdy
YXZpdHkoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSBncmF2aXR5KQotewot
ICAgIE1lZGlhUGxheWVyOjpWaWRlb0dyYXZpdHkgdmlkZW9HcmF2aXR5ID0gTWVkaWFQbGF5ZXI6
OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdDsKLSAgICBpZiAoZ3Jhdml0eSA9PSBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplKQotICAgICAgICB2aWRlb0dyYXZpdHkg
PSBNZWRpYVBsYXllcjo6VmlkZW9HcmF2aXR5UmVzaXplOwotICAgIGVsc2UgaWYgKGdyYXZpdHkg
PT0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCkKLSAg
ICAgICAgdmlkZW9HcmF2aXR5ID0gTWVkaWFQbGF5ZXI6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVj
dDsKLSAgICBlbHNlIGlmIChncmF2aXR5ID09IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRl
b0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsKQotICAgICAgICB2aWRlb0dyYXZpdHkgPSBNZWRpYVBs
YXllcjo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbDsKLSAgICBlbHNlCi0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIAotICAgIG1fbWVkaWFFbGVtZW50LT5zZXRWaWRlb0Z1
bGxzY3JlZW5HcmF2aXR5KHZpZGVvR3Jhdml0eSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QpCi17
Ci0gICAgLy8gRklYTUU6IDEzMTIzNiBJbXBsZW1lbnQgYXVkaW8gdHJhY2sgc2VsZWN0aW9uLgot
fQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpzZWxlY3RMZWdp
YmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpCi17Ci0gICAgVGV4dFRyYWNrKiB0ZXh0VHJh
Y2sgPSBudWxscHRyOwotICAgIAotICAgIGlmIChpbmRleCA8IG1fbGVnaWJsZVRyYWNrc0Zvck1l
bnUuc2l6ZSgpKQotICAgICAgICB0ZXh0VHJhY2sgPSBtX2xlZ2libGVUcmFja3NGb3JNZW51W3N0
YXRpY19jYXN0PHNpemVfdD4oaW5kZXgpXS5nZXQoKTsKLSAgICAKLSAgICBtX21lZGlhRWxlbWVu
dC0+c2V0U2VsZWN0ZWRUZXh0VHJhY2sodGV4dFRyYWNrKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6dXBkYXRlTGVnaWJsZU9wdGlvbnMoKQotewotICAg
IFRleHRUcmFja0xpc3QqIHRyYWNrTGlzdCA9IG1fbWVkaWFFbGVtZW50LT50ZXh0VHJhY2tzKCk7
Ci0gICAgaWYgKCF0cmFja0xpc3QgfHwgIW1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2Uo
KSB8fCAhbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICAKLSAgICBXVEY6OkF0b21pY1N0cmluZyBkaXNwbGF5TW9kZSA9IG1fbWVkaWFFbGVt
ZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgpLT5jYXB0aW9uRGlzcGxheU1vZGUoKTsKLSAgICBUZXh0
VHJhY2sqIG9mZkl0ZW0gPSBtX21lZGlhRWxlbWVudC0+bWVkaWFDb250cm9sc0hvc3QoKS0+Y2Fw
dGlvbk1lbnVPZmZJdGVtKCk7Ci0gICAgVGV4dFRyYWNrKiBhdXRvbWF0aWNJdGVtID0gbV9tZWRp
YUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCktPmNhcHRpb25NZW51QXV0b21hdGljSXRlbSgp
OwotICAgIENhcHRpb25Vc2VyUHJlZmVyZW5jZXMmIGNhcHRpb25QcmVmZXJlbmNlcyA9ICptX21l
ZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCktPmdyb3VwKCkuY2FwdGlvblByZWZlcmVuY2Vz
KCk7Ci0gICAgbV9sZWdpYmxlVHJhY2tzRm9yTWVudSA9IGNhcHRpb25QcmVmZXJlbmNlcy5zb3J0
ZWRUcmFja0xpc3RGb3JNZW51KHRyYWNrTGlzdCk7Ci0gICAgVmVjdG9yPFN0cmluZz4gdHJhY2tE
aXNwbGF5TmFtZXM7Ci0gICAgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCA9IDA7Ci0gICAgdWludDY0
X3Qgb2ZmSW5kZXggPSAwOwotICAgIGJvb2wgdHJhY2tNZW51SXRlbVNlbGVjdGVkID0gZmFsc2U7
Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG1fbGVnaWJsZVRyYWNr
c0Zvck1lbnUuc2l6ZSgpOyBpbmRleCsrKSB7Ci0gICAgICAgIGF1dG8mIHRyYWNrID0gbV9sZWdp
YmxlVHJhY2tzRm9yTWVudVtpbmRleF07Ci0gICAgICAgIHRyYWNrRGlzcGxheU5hbWVzLmFwcGVu
ZChjYXB0aW9uUHJlZmVyZW5jZXMuZGlzcGxheU5hbWVGb3JUcmFjayh0cmFjay5nZXQoKSkpOwot
ICAgICAgICAKLSAgICAgICAgaWYgKHRyYWNrID09IG9mZkl0ZW0pCi0gICAgICAgICAgICBvZmZJ
bmRleCA9IGluZGV4OwotICAgICAgICAKLSAgICAgICAgaWYgKHRyYWNrID09IGF1dG9tYXRpY0l0
ZW0gJiYgZGlzcGxheU1vZGUgPT0gTWVkaWFDb250cm9sc0hvc3Q6OmF1dG9tYXRpY0tleXdvcmQo
KSkgewotICAgICAgICAgICAgc2VsZWN0ZWRJbmRleCA9IGluZGV4OwotICAgICAgICAgICAgdHJh
Y2tNZW51SXRlbVNlbGVjdGVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
aWYgKGRpc3BsYXlNb2RlICE9IE1lZGlhQ29udHJvbHNIb3N0OjphdXRvbWF0aWNLZXl3b3JkKCkg
JiYgdHJhY2stPm1vZGUoKSA9PSBUZXh0VHJhY2s6OnNob3dpbmdLZXl3b3JkKCkpIHsKLSAgICAg
ICAgICAgIHNlbGVjdGVkSW5kZXggPSBpbmRleDsKLSAgICAgICAgICAgIHRyYWNrTWVudUl0ZW1T
ZWxlY3RlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYgKG9mZkluZGV4
ICYmICF0cmFja01lbnVJdGVtU2VsZWN0ZWQgJiYgZGlzcGxheU1vZGUgPT0gTWVkaWFDb250cm9s
c0hvc3Q6OmZvcmNlZE9ubHlLZXl3b3JkKCkpIHsKLSAgICAgICAgc2VsZWN0ZWRJbmRleCA9IG9m
ZkluZGV4OwotICAgICAgICB0cmFja01lbnVJdGVtU2VsZWN0ZWQgPSB0cnVlOwotICAgIH0KLSAg
ICAKLSAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0TGVnaWJsZU1lZGlhU2VsZWN0
aW9uT3B0aW9ucyh0cmFja0Rpc3BsYXlOYW1lcywgc2VsZWN0ZWRJbmRleCk7Ci19Ci0KLWNvbnN0
IFZlY3RvcjxBdG9taWNTdHJpbmc+JiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVu
dDo6b2JzZXJ2ZWRFdmVudE5hbWVzKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VmVj
dG9yPEF0b21pY1N0cmluZz4+IHNFdmVudE5hbWVzOwotCi0gICAgaWYgKCFzRXZlbnROYW1lcy5n
ZXQoKS5zaXplKCkpIHsKLSAgICAgICAgc0V2ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFt
ZXMoKS5kdXJhdGlvbmNoYW5nZUV2ZW50KTsKLSAgICAgICAgc0V2ZW50TmFtZXMuZ2V0KCkuYXBw
ZW5kKGV2ZW50TmFtZXMoKS5wYXVzZUV2ZW50KTsKLSAgICAgICAgc0V2ZW50TmFtZXMuZ2V0KCku
YXBwZW5kKGV2ZW50TmFtZXMoKS5wbGF5RXZlbnQpOwotICAgICAgICBzRXZlbnROYW1lcy5nZXQo
KS5hcHBlbmQoZXZlbnROYW1lcygpLnJhdGVjaGFuZ2VFdmVudCk7Ci0gICAgICAgIHNFdmVudE5h
bWVzLmdldCgpLmFwcGVuZChldmVudE5hbWVzKCkudGltZXVwZGF0ZUV2ZW50KTsKLSAgICAgICAg
c0V2ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFtZXMoKS5hZGR0cmFja0V2ZW50KTsKLSAg
ICAgICAgc0V2ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFtZXMoKS5yZW1vdmV0cmFja0V2
ZW50KTsKLSAgICAgICAgc0V2ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFtZXMoKS53ZWJr
aXRjdXJyZW50cGxheWJhY2t0YXJnZXRpc3dpcmVsZXNzY2hhbmdlZEV2ZW50KTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHNFdmVudE5hbWVzLmdldCgpOwotfQotCi1jb25zdCBBdG9taWNTdHJpbmcmIFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpldmVudE5hbWVBbGwoKQotewotICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHNFdmVudE5hbWVBbGwgPSAiYWxs
RXZlbnRzIjsKLSAgICByZXR1cm4gc0V2ZW50TmFtZUFsbDsKLX0KLQotI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaAkocmV2aXNpb24gMTczMTYxKQkoZnJvbSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVs
ZW1lbnQuaDoxNzMxNjEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDky
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZu
ZGVmIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50X2gKKyNkZWZpbmUgV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnRfaAorCisjaWYgUExBVEZPUk0oSU9TKQorCisj
aW5jbHVkZSA8V2ViQ29yZS9FdmVudExpc3RlbmVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GbG9h
dFJlY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtTGF5ZXIuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEhUTUxNZWRpYUVsZW1lbnQ7CitjbGFzcyBUZXh0
VHJhY2s7CitjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U7CisKK2NsYXNzIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50IDogcHVibGljIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsLCBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7CitwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBP
UlQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQoKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudCgpOworICAg
IHZvaWQgc2V0V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZSogaW50ZXJmYWNlKSB7bV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UgPSBpbnRlcmZh
Y2U7fQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TWVkaWFFbGVtZW50KEhUTUxNZWRpYUVs
ZW1lbnQqKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFZpZGVvRnVsbHNjcmVlbkxheWVy
KFBsYXRmb3JtTGF5ZXIqKTsKKyAgICAKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQg
aGFuZGxlRXZlbnQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkNvcmU6OkV2
ZW50Kikgb3ZlcnJpZGU7CisgICAgdm9pZCB1cGRhdGVGb3JFdmVudE5hbWUoY29uc3QgV1RGOjpB
dG9taWNTdHJpbmcmKTsKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRXZlbnRMaXN0ZW5lciYg
cmhzKSBvdmVycmlkZQorICAgICAgICB7cmV0dXJuIHN0YXRpY19jYXN0PFdlYkNvcmU6OkV2ZW50
TGlzdGVuZXIqPih0aGlzKSA9PSAmcmhzO30KKworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
dm9pZCBwbGF5KCkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHBh
dXNlKCkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHRvZ2dsZVBs
YXlTdGF0ZSgpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBiZWdp
blNjcnViYmluZygpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBl
bmRTY3J1YmJpbmcoKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQg
c2Vla1RvVGltZShkb3VibGUgdGltZSkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCB2b2lkIGZhc3RTZWVrKGRvdWJsZSB0aW1lKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIHZvaWQgYmVnaW5TY2FubmluZ0ZvcndhcmQoKSBvdmVycmlkZTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgYmVnaW5TY2FubmluZ0JhY2t3YXJkKCkgb3ZlcnJp
ZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGVuZFNjYW5uaW5nKCkgb3ZlcnJp
ZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHJlcXVlc3RFeGl0RnVsbHNjcmVl
bigpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXRWaWRlb0xh
eWVyRnJhbWUoRmxvYXRSZWN0KSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IHZvaWQgc2V0VmlkZW9MYXllckdyYXZpdHkoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVv
R3Jhdml0eSkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNlbGVj
dEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpIG92ZXJyaWRlOworICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgdm9pZCBzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5k
ZXgpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8V1RGOjpB
dG9taWNTdHJpbmc+JiBvYnNlcnZlZEV2ZW50TmFtZXMoKTsKKyAgICBjb25zdCBXVEY6OkF0b21p
Y1N0cmluZyYgZXZlbnROYW1lQWxsKCk7CisgICAgCisgICAgUmVmUHRyPEhUTUxNZWRpYUVsZW1l
bnQ+IG1fbWVkaWFFbGVtZW50OworICAgIFJldGFpblB0cjxQbGF0Zm9ybUxheWVyPiBtX3ZpZGVv
RnVsbHNjcmVlbkxheWVyOworICAgIGJvb2wgbV9pc0xpc3RlbmluZzsKKyAgICBXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2UqIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOworICAgIEZsb2F0
UmVjdCBtX3ZpZGVvRnJhbWU7CisgICAgVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2s+PiBtX2xlZ2li
bGVUcmFja3NGb3JNZW51OworCisgICAgdm9pZCB1cGRhdGVMZWdpYmxlT3B0aW9ucygpOworfTsK
KworfQorCisjZW5kaWYKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0
LDggKzI0LDggQEAKICAqLwogCiAKLSNpZm5kZWYgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRp
YUVsZW1lbnRfaAotI2RlZmluZSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudF9o
CisjaWZuZGVmIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50X2gKKyNkZWZpbmUg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnRfaAogCiAjaWYgUExBVEZPUk0oSU9T
KQogCkBAIC0zOCwxNiArMzgsMTYgQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKLWNsYXNzIEhUTUxNZWRpYUVsZW1lbnQ7CitjbGFzcyBIVE1MVmlkZW9F
bGVtZW50OwogY2xhc3MgVGV4dFRyYWNrOwogY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlOwogCi1jbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudCA6IHB1Ymxp
YyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCwgcHVibGljIEV2ZW50TGlzdGVuZXIgeworY2xhc3Mg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQgOiBwdWJsaWMgV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWwsIHB1YmxpYyBFdmVudExpc3RlbmVyIHsKIHB1YmxpYzoKLSAgICBXRUJDT1JF
X0VYUE9SVCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudCgpOwotICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50KCk7
CisgICAgV0VCQ09SRV9FWFBPUlQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQo
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZp
ZGVvRWxlbWVudCgpOwogICAgIHZvaWQgc2V0V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSogaW50ZXJmYWNlKSB7bV92aWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2UgPSBpbnRlcmZhY2U7fQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TWVkaWFF
bGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFZp
ZGVvRWxlbWVudChIVE1MVmlkZW9FbGVtZW50Kik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBz
ZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihQbGF0Zm9ybUxheWVyKik7CiAgICAgCiAgICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBXZWJDb3JlOjpFdmVudCopIG92ZXJyaWRlOwpAQCAtNzUsNyArNzUsNyBAQCBw
cml2YXRlOgogICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8V1RGOjpBdG9taWNTdHJpbmc+JiBvYnNl
cnZlZEV2ZW50TmFtZXMoKTsKICAgICBjb25zdCBXVEY6OkF0b21pY1N0cmluZyYgZXZlbnROYW1l
QWxsKCk7CiAgICAgCi0gICAgUmVmUHRyPEhUTUxNZWRpYUVsZW1lbnQ+IG1fbWVkaWFFbGVtZW50
OworICAgIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50PiBtX3ZpZGVvRWxlbWVudDsKICAgICBSZXRh
aW5QdHI8UGxhdGZvcm1MYXllcj4gbV92aWRlb0Z1bGxzY3JlZW5MYXllcjsKICAgICBib29sIG1f
aXNMaXN0ZW5pbmc7CiAgICAgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKiBtX3ZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQu
bW0JKHJldmlzaW9uIDE3MzE2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50Lm1tOjE3MzE2MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5t
bQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorCisjaWYgUExBVEZP
Uk0oSU9TKQorCisjaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5o
IgorCisjaW1wb3J0ICJET01FdmVudEludGVybmFsLmgiCisjaW1wb3J0ICJMb2dnaW5nLmgiCisj
aW1wb3J0ICJNZWRpYUNvbnRyb2xzSG9zdC5oIgorI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlLmgiCisjaW1wb3J0IDxXZWJDb3JlL0RPTUV2ZW50TGlzdGVuZXIuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvRXZlbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRXZlbnRMaXN0ZW5lci5oPgor
I2ltcG9ydCA8V2ViQ29yZS9FdmVudE5hbWVzLmg+CisjaW1wb3J0IDxXZWJDb3JlL0hUTUxFbGVt
ZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0hUTUxNZWRpYUVsZW1lbnQuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvSFRNTFZpZGVvRWxlbWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+CisjaW1w
b3J0IDxXZWJDb3JlL1BhZ2VHcm91cC5oPgorI2ltcG9ydCA8V2ViQ29yZS9Tb2Z0TGlua2luZy5o
PgorI2ltcG9ydCA8V2ViQ29yZS9UZXh0VHJhY2tMaXN0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1Rp
bWVSYW5nZXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZVRocmVhZFJ1bi5oPgorI2ltcG9y
dCA8UXVhcnR6Q29yZS9Db3JlQW5pbWF0aW9uLmg+CisjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95
ZWQuaD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKworCit1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKKworV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OldlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50KCkKKyAgICA6IEV2ZW50TGlzdGVuZXIoRXZlbnRMaXN0
ZW5lcjo6Q1BQRXZlbnRMaXN0ZW5lclR5cGUpCisgICAgLCBtX2lzTGlzdGVuaW5ne2ZhbHNlfQor
eworfQorCitXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6fldlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50KCkKK3sKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbE1lZGlhRWxlbWVudDo6c2V0TWVkaWFFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1l
ZGlhRWxlbWVudCkKK3sKKyAgICBpZiAobV9tZWRpYUVsZW1lbnQgPT0gbWVkaWFFbGVtZW50KQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9tZWRpYUVsZW1lbnQgJiYgbV9pc0xpc3Rlbmlu
ZykgeworICAgICAgICBmb3IgKGF1dG8gZXZlbnROYW1lIDogb2JzZXJ2ZWRFdmVudE5hbWVzKCkp
CisgICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5h
bWUsIHRoaXMsIGZhbHNlKTsKKyAgICB9CisgICAgbV9pc0xpc3RlbmluZyA9IGZhbHNlOworCisg
ICAgbV9tZWRpYUVsZW1lbnQgPSBtZWRpYUVsZW1lbnQ7CisKKyAgICBpZiAoIW1fbWVkaWFFbGVt
ZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGF1dG8gZXZlbnROYW1lIDogb2JzZXJ2
ZWRFdmVudE5hbWVzKCkpCisgICAgICAgIG1fbWVkaWFFbGVtZW50LT5hZGRFdmVudExpc3RlbmVy
KGV2ZW50TmFtZSwgdGhpcywgZmFsc2UpOworICAgIG1faXNMaXN0ZW5pbmcgPSB0cnVlOworCisg
ICAgdXBkYXRlRm9yRXZlbnROYW1lKGV2ZW50TmFtZUFsbCgpKTsKKworICAgIGlmIChpc0hUTUxW
aWRlb0VsZW1lbnQobV9tZWRpYUVsZW1lbnQuZ2V0KCkpKSB7CisgICAgICAgIEhUTUxWaWRlb0Vs
ZW1lbnQgKnZpZGVvRWxlbWVudCA9IHRvSFRNTFZpZGVvRWxlbWVudChtX21lZGlhRWxlbWVudC5n
ZXQoKSk7CisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRWaWRlb0RpbWVu
c2lvbnModHJ1ZSwgdmlkZW9FbGVtZW50LT52aWRlb1dpZHRoKCksIHZpZGVvRWxlbWVudC0+dmlk
ZW9IZWlnaHQoKSk7CisgICAgfSBlbHNlCisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlLT5zZXRWaWRlb0RpbWVuc2lvbnMoZmFsc2UsIDAsIDApOworfQorCit2b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpoYW5kbGVFdmVudChXZWJDb3JlOjpTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgV2ViQ29yZTo6RXZlbnQqIGV2ZW50KQoreworICAgIExPRyhNZWRp
YSwgImhhbmRsZUV2ZW50ICVzIiwgZXZlbnQtPnR5cGUoKS5jaGFyYWN0ZXJzOCgpKTsKKyAgICB1
cGRhdGVGb3JFdmVudE5hbWUoZXZlbnQtPnR5cGUoKSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnVwZGF0ZUZvckV2ZW50TmFtZShjb25zdCBXVEY6OkF0
b21pY1N0cmluZyYgZXZlbnROYW1lKQoreworICAgIGlmICghbV9tZWRpYUVsZW1lbnQgfHwgIW1f
dmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYm9v
bCBhbGwgPSBldmVudE5hbWUgPT0gZXZlbnROYW1lQWxsKCk7CisKKyAgICBpZiAoYWxsCisgICAg
ICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkuZHVyYXRpb25jaGFuZ2VFdmVudCkgewor
ICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0RHVyYXRpb24obV9tZWRpYUVs
ZW1lbnQtPmR1cmF0aW9uKCkpOworICAgICAgICAvLyBUaGVzZSBpcyBubyBzdGFuZGFyZCBldmVu
dCBmb3IgbWluRmFzdFJldmVyc2VSYXRlQ2hhbmdlOyBkdXJhdGlvbiBjaGFuZ2UgaXMgYSByZWFz
b25hYmxlIHByb3h5IGZvciBpdC4KKyAgICAgICAgLy8gSXQgaGFwcGVucyBldmVyeSB0aW1lIGEg
bmV3IGl0ZW0gYmVjb21lcyByZWFkeSB0byBwbGF5LgorICAgICAgICBtX3ZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZS0+c2V0Q2FuUGxheUZhc3RSZXZlcnNlKG1fbWVkaWFFbGVtZW50LT5taW5GYXN0
UmV2ZXJzZVJhdGUoKSA8IDAuMCk7CisgICAgfQorCisgICAgaWYgKGFsbAorICAgICAgICB8fCBl
dmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnBhdXNlRXZlbnQKKyAgICAgICAgfHwgZXZlbnROYW1l
ID09IGV2ZW50TmFtZXMoKS5wbGF5RXZlbnQKKyAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50
TmFtZXMoKS5yYXRlY2hhbmdlRXZlbnQpCisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlLT5zZXRSYXRlKCFtX21lZGlhRWxlbWVudC0+cGF1c2VkKCksIG1fbWVkaWFFbGVtZW50LT5w
bGF5YmFja1JhdGUoKSk7CisKKyAgICBpZiAoYWxsCisgICAgICAgIHx8IGV2ZW50TmFtZSA9PSBl
dmVudE5hbWVzKCkudGltZXVwZGF0ZUV2ZW50KSB7CisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlLT5zZXRDdXJyZW50VGltZShtX21lZGlhRWxlbWVudC0+Y3VycmVudFRpbWUoKSwg
W1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBzeXN0ZW1VcHRpbWVdKTsKKyAgICAgICAgLy8g
RklYTUU6IDEzMDc4OCAtIGZpbmQgYSBiZXR0ZXIgZXZlbnQgdG8gdXBkYXRlIHNlZWthYmxlIHJh
bmdlcyBmcm9tLgorICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0U2Vla2Fi
bGVSYW5nZXMoKm1fbWVkaWFFbGVtZW50LT5zZWVrYWJsZSgpKTsKKyAgICB9CisKKyAgICBpZiAo
YWxsCisgICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkuYWRkdHJhY2tFdmVudAor
ICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnJlbW92ZXRyYWNrRXZlbnQpCisg
ICAgICAgIHVwZGF0ZUxlZ2libGVPcHRpb25zKCk7CisKKyAgICBpZiAoYWxsCisgICAgICAgIHx8
IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkud2Via2l0Y3VycmVudHBsYXliYWNrdGFyZ2V0aXN3
aXJlbGVzc2NoYW5nZWRFdmVudCkgeworICAgICAgICBib29sIGVuYWJsZWQgPSBtX21lZGlhRWxl
bWVudC0+bWVkaWFTZXNzaW9uKCkuY3VycmVudFBsYXliYWNrVGFyZ2V0SXNXaXJlbGVzcygqbV9t
ZWRpYUVsZW1lbnQpOworICAgICAgICBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U6OkV4dGVy
bmFsUGxheWJhY2tUYXJnZXRUeXBlIHRhcmdldFR5cGUgPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2U6OlRhcmdldFR5cGVOb25lOworICAgICAgICBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFt
ZTsKKworICAgICAgICBpZiAobV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCkpIHsK
KyAgICAgICAgICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGFpcnBs
YXksIChBU0NJSUxpdGVyYWwoImFpcnBsYXkiKSkpOworICAgICAgICAgICAgREVQUkVDQVRFRF9E
RUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgdHZvdXQsIChBU0NJSUxpdGVyYWwoInR2b3V0Iikp
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3RyaW5nIHR5cGUgPSBtX21lZGlhRWxlbWVu
dC0+bWVkaWFDb250cm9sc0hvc3QoKS0+ZXh0ZXJuYWxEZXZpY2VUeXBlKCk7CisgICAgICAgICAg
ICBpZiAodHlwZSA9PSBhaXJwbGF5KQorICAgICAgICAgICAgICAgIHRhcmdldFR5cGUgPSBXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U6OlRhcmdldFR5cGVBaXJQbGF5OworICAgICAgICAgICAg
ZWxzZSBpZiAodHlwZSA9PSB0dm91dCkKKyAgICAgICAgICAgICAgICB0YXJnZXRUeXBlID0gV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOjpUYXJnZXRUeXBlVFZPdXQ7CisgICAgICAgICAgICBs
b2NhbGl6ZWREZXZpY2VOYW1lID0gbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCkt
PmV4dGVybmFsRGV2aWNlRGlzcGxheU5hbWUoKTsKKyAgICAgICAgfQorICAgICAgICBtX3ZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZS0+c2V0RXh0ZXJuYWxQbGF5YmFjayhlbmFibGVkLCB0YXJnZXRU
eXBlLCBsb2NhbGl6ZWREZXZpY2VOYW1lKTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKFBsYXRmb3Jt
TGF5ZXIqIHZpZGVvTGF5ZXIpCit7CisgICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIgPT0g
dmlkZW9MYXllcikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fdmlkZW9GdWxsc2NyZWVu
TGF5ZXIgPSB2aWRlb0xheWVyOworICAgIFttX3ZpZGVvRnVsbHNjcmVlbkxheWVyIHNldEZyYW1l
Om1fdmlkZW9GcmFtZV07CisgICAgCisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxNZWRpYUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7CisgICAgV2ViVGhyZWFkUnVuKF57
CisgICAgICAgIGlmIChtX21lZGlhRWxlbWVudCkKKyAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50
LT5zZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihtX3ZpZGVvRnVsbHNjcmVlbkxheWVyLmdldCgpKTsK
KyAgICAgICAgcHJvdGVjdC5jbGVhcigpOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpwbGF5KCkgeworICAgIF9fYmxvY2sgUmVmUHRyPFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOworICAgIFdl
YlRocmVhZFJ1biheeworICAgICAgICBpZiAobV9tZWRpYUVsZW1lbnQpCisgICAgICAgICAgICBt
X21lZGlhRWxlbWVudC0+cGxheSgpOworICAgICAgICBwcm90ZWN0LmNsZWFyKCk7CisgICAgfSk7
Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnBhdXNlKCkK
K3sKKyAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVu
dD4gcHJvdGVjdCh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgaWYgKG1fbWVk
aWFFbGVtZW50KQorICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnBhdXNlKCk7CisgICAgICAg
IHByb3RlY3QuY2xlYXIoKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbE1lZGlhRWxlbWVudDo6dG9nZ2xlUGxheVN0YXRlKCkKK3sKKyAgICBfX2Jsb2NrIFJlZlB0
cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKKyAg
ICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQorICAgICAgICAg
ICAgbV9tZWRpYUVsZW1lbnQtPnRvZ2dsZVBsYXlTdGF0ZSgpOworICAgICAgICBwcm90ZWN0LmNs
ZWFyKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVs
ZW1lbnQ6OmJlZ2luU2NydWJiaW5nKCkKK3sKKyAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKKyAgICBXZWJUaHJlYWRS
dW4oXnsKKyAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQorICAgICAgICAgICAgbV9tZWRpYUVs
ZW1lbnQtPmJlZ2luU2NydWJiaW5nKCk7CisgICAgICAgIHByb3RlY3QuY2xlYXIoKTsKKyAgICB9
KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6ZW5kU2Ny
dWJiaW5nKCkKK3sKKyAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1l
ZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAg
aWYgKG1fbWVkaWFFbGVtZW50KQorICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmVuZFNjcnVi
YmluZygpOworICAgICAgICBwcm90ZWN0LmNsZWFyKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnNlZWtUb1RpbWUoZG91YmxlIHRpbWUp
Cit7CisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1l
bnQ+IHByb3RlY3QodGhpcyk7CisgICAgV2ViVGhyZWFkUnVuKF57CisgICAgICAgIGlmIChtX21l
ZGlhRWxlbWVudCkKKyAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5zZXRDdXJyZW50VGltZSh0
aW1lKTsKKyAgICAgICAgcHJvdGVjdC5jbGVhcigpOworICAgIH0pOworfQorCit2b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpmYXN0U2Vlayhkb3VibGUgdGltZSkKK3sK
KyAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4g
cHJvdGVjdCh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgaWYgKG1fbWVkaWFF
bGVtZW50KQorICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmZhc3RTZWVrKHRpbWUpOworICAg
ICAgICBwcm90ZWN0LmNsZWFyKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkKK3sKKyAgICBfX2Js
b2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0
aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQor
ICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmJlZ2luU2Nhbm5pbmcoTWVkaWFDb250cm9sbGVy
SW50ZXJmYWNlOjpGb3J3YXJkKTsKKyAgICAgICAgcHJvdGVjdC5jbGVhcigpOworICAgIH0pOwor
fQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpiZWdpblNjYW5u
aW5nQmFja3dhcmQoKQoreworICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsTWVkaWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOworICAgIFdlYlRocmVhZFJ1biheeworICAg
ICAgICBpZiAobV9tZWRpYUVsZW1lbnQpCisgICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+YmVn
aW5TY2FubmluZyhNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2U6OkJhY2t3YXJkKTsKKyAgICAgICAg
cHJvdGVjdC5jbGVhcigpOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsTWVkaWFFbGVtZW50OjplbmRTY2FubmluZygpCit7CisgICAgX19ibG9jayBSZWZQdHI8V2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7CisgICAgV2Vi
VGhyZWFkUnVuKF57CisgICAgICAgIGlmIChtX21lZGlhRWxlbWVudCkKKyAgICAgICAgICAgIG1f
bWVkaWFFbGVtZW50LT5lbmRTY2FubmluZygpOworICAgICAgICBwcm90ZWN0LmNsZWFyKCk7Cisg
ICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnJl
cXVlc3RFeGl0RnVsbHNjcmVlbigpCit7CisgICAgaWYgKCFtX21lZGlhRWxlbWVudCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxN
ZWRpYUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7CisgICAgV2ViVGhyZWFkUnVuKF57CisgICAgICAg
IGlmIChtX21lZGlhRWxlbWVudCAmJiBtX21lZGlhRWxlbWVudC0+aXNGdWxsc2NyZWVuKCkpCisg
ICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+ZXhpdEZ1bGxzY3JlZW4oKTsKKyAgICAgICAgcHJv
dGVjdC5jbGVhcigpOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
TWVkaWFFbGVtZW50OjpzZXRWaWRlb0xheWVyRnJhbWUoRmxvYXRSZWN0IHJlY3QpCit7CisgICAg
bV92aWRlb0ZyYW1lID0gcmVjdDsKKyAgICBbbV92aWRlb0Z1bGxzY3JlZW5MYXllciBzZXRGcmFt
ZTpDR1JlY3QocmVjdCldOworICAgIG1fbWVkaWFFbGVtZW50LT5zZXRWaWRlb0Z1bGxzY3JlZW5G
cmFtZShyZWN0KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVu
dDo6c2V0VmlkZW9MYXllckdyYXZpdHkoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jh
dml0eSBncmF2aXR5KQoreworICAgIE1lZGlhUGxheWVyOjpWaWRlb0dyYXZpdHkgdmlkZW9HcmF2
aXR5ID0gTWVkaWFQbGF5ZXI6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdDsKKyAgICBpZiAoZ3Jh
dml0eSA9PSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplKQorICAg
ICAgICB2aWRlb0dyYXZpdHkgPSBNZWRpYVBsYXllcjo6VmlkZW9HcmF2aXR5UmVzaXplOworICAg
IGVsc2UgaWYgKGdyYXZpdHkgPT0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0
eVJlc2l6ZUFzcGVjdCkKKyAgICAgICAgdmlkZW9HcmF2aXR5ID0gTWVkaWFQbGF5ZXI6OlZpZGVv
R3Jhdml0eVJlc2l6ZUFzcGVjdDsKKyAgICBlbHNlIGlmIChncmF2aXR5ID09IFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsKQorICAgICAgICB2aWRl
b0dyYXZpdHkgPSBNZWRpYVBsYXllcjo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbDsKKyAg
ICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIAorICAgIG1fbWVkaWFF
bGVtZW50LT5zZXRWaWRlb0Z1bGxzY3JlZW5HcmF2aXR5KHZpZGVvR3Jhdml0eSk7Cit9CisKK3Zv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnNlbGVjdEF1ZGlvTWVkaWFP
cHRpb24odWludDY0X3QpCit7CisgICAgLy8gRklYTUU6IDEzMTIzNiBJbXBsZW1lbnQgYXVkaW8g
dHJhY2sgc2VsZWN0aW9uLgorfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFF
bGVtZW50OjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpCit7CisgICAg
VGV4dFRyYWNrKiB0ZXh0VHJhY2sgPSBudWxscHRyOworICAgIAorICAgIGlmIChpbmRleCA8IG1f
bGVnaWJsZVRyYWNrc0Zvck1lbnUuc2l6ZSgpKQorICAgICAgICB0ZXh0VHJhY2sgPSBtX2xlZ2li
bGVUcmFja3NGb3JNZW51W3N0YXRpY19jYXN0PHNpemVfdD4oaW5kZXgpXS5nZXQoKTsKKyAgICAK
KyAgICBtX21lZGlhRWxlbWVudC0+c2V0U2VsZWN0ZWRUZXh0VHJhY2sodGV4dFRyYWNrKTsKK30K
Kwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6dXBkYXRlTGVnaWJs
ZU9wdGlvbnMoKQoreworICAgIFRleHRUcmFja0xpc3QqIHRyYWNrTGlzdCA9IG1fbWVkaWFFbGVt
ZW50LT50ZXh0VHJhY2tzKCk7CisgICAgaWYgKCF0cmFja0xpc3QgfHwgIW1fbWVkaWFFbGVtZW50
LT5kb2N1bWVudCgpLnBhZ2UoKSB8fCAhbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0
KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBXVEY6OkF0b21pY1N0cmluZyBkaXNwbGF5
TW9kZSA9IG1fbWVkaWFFbGVtZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgpLT5jYXB0aW9uRGlzcGxh
eU1vZGUoKTsKKyAgICBUZXh0VHJhY2sqIG9mZkl0ZW0gPSBtX21lZGlhRWxlbWVudC0+bWVkaWFD
b250cm9sc0hvc3QoKS0+Y2FwdGlvbk1lbnVPZmZJdGVtKCk7CisgICAgVGV4dFRyYWNrKiBhdXRv
bWF0aWNJdGVtID0gbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCktPmNhcHRpb25N
ZW51QXV0b21hdGljSXRlbSgpOworICAgIENhcHRpb25Vc2VyUHJlZmVyZW5jZXMmIGNhcHRpb25Q
cmVmZXJlbmNlcyA9ICptX21lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCktPmdyb3VwKCku
Y2FwdGlvblByZWZlcmVuY2VzKCk7CisgICAgbV9sZWdpYmxlVHJhY2tzRm9yTWVudSA9IGNhcHRp
b25QcmVmZXJlbmNlcy5zb3J0ZWRUcmFja0xpc3RGb3JNZW51KHRyYWNrTGlzdCk7CisgICAgVmVj
dG9yPFN0cmluZz4gdHJhY2tEaXNwbGF5TmFtZXM7CisgICAgdWludDY0X3Qgc2VsZWN0ZWRJbmRl
eCA9IDA7CisgICAgdWludDY0X3Qgb2ZmSW5kZXggPSAwOworICAgIGJvb2wgdHJhY2tNZW51SXRl
bVNlbGVjdGVkID0gZmFsc2U7CisgICAgCisgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRl
eCA8IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnUuc2l6ZSgpOyBpbmRleCsrKSB7CisgICAgICAgIGF1
dG8mIHRyYWNrID0gbV9sZWdpYmxlVHJhY2tzRm9yTWVudVtpbmRleF07CisgICAgICAgIHRyYWNr
RGlzcGxheU5hbWVzLmFwcGVuZChjYXB0aW9uUHJlZmVyZW5jZXMuZGlzcGxheU5hbWVGb3JUcmFj
ayh0cmFjay5nZXQoKSkpOworICAgICAgICAKKyAgICAgICAgaWYgKHRyYWNrID09IG9mZkl0ZW0p
CisgICAgICAgICAgICBvZmZJbmRleCA9IGluZGV4OworICAgICAgICAKKyAgICAgICAgaWYgKHRy
YWNrID09IGF1dG9tYXRpY0l0ZW0gJiYgZGlzcGxheU1vZGUgPT0gTWVkaWFDb250cm9sc0hvc3Q6
OmF1dG9tYXRpY0tleXdvcmQoKSkgeworICAgICAgICAgICAgc2VsZWN0ZWRJbmRleCA9IGluZGV4
OworICAgICAgICAgICAgdHJhY2tNZW51SXRlbVNlbGVjdGVkID0gdHJ1ZTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgaWYgKGRpc3BsYXlNb2RlICE9IE1lZGlhQ29udHJvbHNIb3N0Ojph
dXRvbWF0aWNLZXl3b3JkKCkgJiYgdHJhY2stPm1vZGUoKSA9PSBUZXh0VHJhY2s6OnNob3dpbmdL
ZXl3b3JkKCkpIHsKKyAgICAgICAgICAgIHNlbGVjdGVkSW5kZXggPSBpbmRleDsKKyAgICAgICAg
ICAgIHRyYWNrTWVudUl0ZW1TZWxlY3RlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgaWYgKG9mZkluZGV4ICYmICF0cmFja01lbnVJdGVtU2VsZWN0ZWQgJiYgZGlzcGxheU1v
ZGUgPT0gTWVkaWFDb250cm9sc0hvc3Q6OmZvcmNlZE9ubHlLZXl3b3JkKCkpIHsKKyAgICAgICAg
c2VsZWN0ZWRJbmRleCA9IG9mZkluZGV4OworICAgICAgICB0cmFja01lbnVJdGVtU2VsZWN0ZWQg
PSB0cnVlOworICAgIH0KKyAgICAKKyAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0
TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyh0cmFja0Rpc3BsYXlOYW1lcywgc2VsZWN0ZWRJ
bmRleCk7Cit9CisKK2NvbnN0IFZlY3RvcjxBdG9taWNTdHJpbmc+JiBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbE1lZGlhRWxlbWVudDo6b2JzZXJ2ZWRFdmVudE5hbWVzKCkKK3sKKyAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8VmVjdG9yPEF0b21pY1N0cmluZz4+IHNFdmVudE5hbWVzOworCisgICAg
aWYgKCFzRXZlbnROYW1lcy5nZXQoKS5zaXplKCkpIHsKKyAgICAgICAgc0V2ZW50TmFtZXMuZ2V0
KCkuYXBwZW5kKGV2ZW50TmFtZXMoKS5kdXJhdGlvbmNoYW5nZUV2ZW50KTsKKyAgICAgICAgc0V2
ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFtZXMoKS5wYXVzZUV2ZW50KTsKKyAgICAgICAg
c0V2ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFtZXMoKS5wbGF5RXZlbnQpOworICAgICAg
ICBzRXZlbnROYW1lcy5nZXQoKS5hcHBlbmQoZXZlbnROYW1lcygpLnJhdGVjaGFuZ2VFdmVudCk7
CisgICAgICAgIHNFdmVudE5hbWVzLmdldCgpLmFwcGVuZChldmVudE5hbWVzKCkudGltZXVwZGF0
ZUV2ZW50KTsKKyAgICAgICAgc0V2ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFtZXMoKS5h
ZGR0cmFja0V2ZW50KTsKKyAgICAgICAgc0V2ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFt
ZXMoKS5yZW1vdmV0cmFja0V2ZW50KTsKKyAgICAgICAgc0V2ZW50TmFtZXMuZ2V0KCkuYXBwZW5k
KGV2ZW50TmFtZXMoKS53ZWJraXRjdXJyZW50cGxheWJhY2t0YXJnZXRpc3dpcmVsZXNzY2hhbmdl
ZEV2ZW50KTsKKyAgICB9CisgICAgcmV0dXJuIHNFdmVudE5hbWVzLmdldCgpOworfQorCitjb25z
dCBBdG9taWNTdHJpbmcmIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpldmVu
dE5hbWVBbGwoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHNF
dmVudE5hbWVBbGwgPSAiYWxsRXZlbnRzIjsKKyAgICByZXR1cm4gc0V2ZW50TmFtZUFsbDsKK30K
KworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tCSh3b3Jr
aW5nIGNvcHkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTI2LDE5ICsyNiwxOCBA
QAogI2ltcG9ydCAiY29uZmlnLmgiCiAKICNpZiBQTEFURk9STShJT1MpCi0KLSNpbXBvcnQgIldl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50LmgiCisjaW1wb3J0ICJXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oIgogCiAjaW1wb3J0ICJET01FdmVudEludGVybmFs
LmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgiCiAjaW1wb3J0ICJNZWRpYUNvbnRyb2xzSG9zdC5oIgog
I2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLmgiCisjaW1wb3J0IDxRdWFydHpD
b3JlL0NvcmVBbmltYXRpb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvRE9NRXZlbnRMaXN0ZW5lci5o
PgogI2ltcG9ydCA8V2ViQ29yZS9FdmVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9FdmVudExpc3Rl
bmVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0V2ZW50TmFtZXMuaD4KICNpbXBvcnQgPFdlYkNvcmUv
SFRNTEVsZW1lbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvSFRNTE1lZGlhRWxlbWVudC5oPgogI2lt
cG9ydCA8V2ViQ29yZS9IVE1MVmlkZW9FbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BhZ2Uu
aD4KICNpbXBvcnQgPFdlYkNvcmUvUGFnZUdyb3VwLmg+CkBAIC00Niw4NCArNDUsNzkgQEAKICNp
bXBvcnQgPFdlYkNvcmUvVGV4dFRyYWNrTGlzdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9UaW1lUmFu
Z2VzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVUaHJlYWRSdW4uaD4KLSNpbXBvcnQgPFF1
YXJ0ekNvcmUvQ29yZUFuaW1hdGlvbi5oPgogI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+
CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CiAKLVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbE1lZGlhRWxlbWVudCgpCitXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQoKQogICAgIDogRXZlbnRMaXN0
ZW5lcihFdmVudExpc3RlbmVyOjpDUFBFdmVudExpc3RlbmVyVHlwZSkKLSAgICAsIG1faXNMaXN0
ZW5pbmd7ZmFsc2V9CisgICAgLCBtX2lzTGlzdGVuaW5nKGZhbHNlKQogewogfQogCi1XZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6fldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVk
aWFFbGVtZW50KCkKK1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojp+V2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQoKQogewogfQogCi12b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpzZXRNZWRpYUVsZW1lbnQoSFRNTE1lZGlhRWxlbWVu
dCogbWVkaWFFbGVtZW50KQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dDo6c2V0VmlkZW9FbGVtZW50KEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvRWxlbWVudCkKIHsKLSAg
ICBpZiAobV9tZWRpYUVsZW1lbnQgPT0gbWVkaWFFbGVtZW50KQorICAgIGlmIChtX3ZpZGVvRWxl
bWVudCA9PSB2aWRlb0VsZW1lbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX21lZGlh
RWxlbWVudCAmJiBtX2lzTGlzdGVuaW5nKSB7CisgICAgaWYgKG1fdmlkZW9FbGVtZW50ICYmIG1f
aXNMaXN0ZW5pbmcpIHsKICAgICAgICAgZm9yIChhdXRvIGV2ZW50TmFtZSA6IG9ic2VydmVkRXZl
bnROYW1lcygpKQotICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnJlbW92ZUV2ZW50TGlzdGVu
ZXIoZXZlbnROYW1lLCB0aGlzLCBmYWxzZSk7CisgICAgICAgICAgICBtX3ZpZGVvRWxlbWVudC0+
cmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIHRoaXMsIGZhbHNlKTsKICAgICB9CiAgICAg
bV9pc0xpc3RlbmluZyA9IGZhbHNlOwogCi0gICAgbV9tZWRpYUVsZW1lbnQgPSBtZWRpYUVsZW1l
bnQ7CisgICAgbV92aWRlb0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7CiAKLSAgICBpZiAoIW1fbWVk
aWFFbGVtZW50KQorICAgIGlmICghbV92aWRlb0VsZW1lbnQpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGZvciAoYXV0byBldmVudE5hbWUgOiBvYnNlcnZlZEV2ZW50TmFtZXMoKSkKLSAgICAgICAg
bV9tZWRpYUVsZW1lbnQtPmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCB0aGlzLCBmYWxzZSk7
CisgICAgICAgIG1fdmlkZW9FbGVtZW50LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgdGhp
cywgZmFsc2UpOwogICAgIG1faXNMaXN0ZW5pbmcgPSB0cnVlOwogCiAgICAgdXBkYXRlRm9yRXZl
bnROYW1lKGV2ZW50TmFtZUFsbCgpKTsKIAotICAgIGlmIChpc0hUTUxWaWRlb0VsZW1lbnQobV9t
ZWRpYUVsZW1lbnQuZ2V0KCkpKSB7Ci0gICAgICAgIEhUTUxWaWRlb0VsZW1lbnQgKnZpZGVvRWxl
bWVudCA9IHRvSFRNTFZpZGVvRWxlbWVudChtX21lZGlhRWxlbWVudC5nZXQoKSk7Ci0gICAgICAg
IG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRWaWRlb0RpbWVuc2lvbnModHJ1ZSwgdmlk
ZW9FbGVtZW50LT52aWRlb1dpZHRoKCksIHZpZGVvRWxlbWVudC0+dmlkZW9IZWlnaHQoKSk7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRWaWRlb0Rp
bWVuc2lvbnMoZmFsc2UsIDAsIDApOworICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5z
ZXRWaWRlb0RpbWVuc2lvbnModHJ1ZSwgdmlkZW9FbGVtZW50LT52aWRlb1dpZHRoKCksIHZpZGVv
RWxlbWVudC0+dmlkZW9IZWlnaHQoKSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxNZWRpYUVsZW1lbnQ6OmhhbmRsZUV2ZW50KFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBXZWJDb3JlOjpFdmVudCogZXZlbnQpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50OjpoYW5kbGVFdmVudChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgV2ViQ29yZTo6RXZlbnQqIGV2ZW50KQogewogICAgIExPRyhNZWRpYSwgImhhbmRsZUV2ZW50
ICVzIiwgZXZlbnQtPnR5cGUoKS5jaGFyYWN0ZXJzOCgpKTsKICAgICB1cGRhdGVGb3JFdmVudE5h
bWUoZXZlbnQtPnR5cGUoKSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRp
YUVsZW1lbnQ6OnVwZGF0ZUZvckV2ZW50TmFtZShjb25zdCBXVEY6OkF0b21pY1N0cmluZyYgZXZl
bnROYW1lKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6dXBkYXRl
Rm9yRXZlbnROYW1lKGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJiBldmVudE5hbWUpCiB7Ci0gICAg
aWYgKCFtX21lZGlhRWxlbWVudCB8fCAhbV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UpCisgICAg
aWYgKCFtX3ZpZGVvRWxlbWVudCB8fCAhbV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UpCiAgICAg
ICAgIHJldHVybjsKICAgICAKICAgICBib29sIGFsbCA9IGV2ZW50TmFtZSA9PSBldmVudE5hbWVB
bGwoKTsKIAogICAgIGlmIChhbGwKICAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMo
KS5kdXJhdGlvbmNoYW5nZUV2ZW50KSB7Ci0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlLT5zZXREdXJhdGlvbihtX21lZGlhRWxlbWVudC0+ZHVyYXRpb24oKSk7CisgICAgICAgIG1f
dmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXREdXJhdGlvbihtX3ZpZGVvRWxlbWVudC0+ZHVy
YXRpb24oKSk7CiAgICAgICAgIC8vIFRoZXNlIGlzIG5vIHN0YW5kYXJkIGV2ZW50IGZvciBtaW5G
YXN0UmV2ZXJzZVJhdGVDaGFuZ2U7IGR1cmF0aW9uIGNoYW5nZSBpcyBhIHJlYXNvbmFibGUgcHJv
eHkgZm9yIGl0LgogICAgICAgICAvLyBJdCBoYXBwZW5zIGV2ZXJ5IHRpbWUgYSBuZXcgaXRlbSBi
ZWNvbWVzIHJlYWR5IHRvIHBsYXkuCi0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
LT5zZXRDYW5QbGF5RmFzdFJldmVyc2UobV9tZWRpYUVsZW1lbnQtPm1pbkZhc3RSZXZlcnNlUmF0
ZSgpIDwgMC4wKTsKKyAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UtPnNldENhblBs
YXlGYXN0UmV2ZXJzZShtX3ZpZGVvRWxlbWVudC0+bWluRmFzdFJldmVyc2VSYXRlKCkgPCAwLjAp
OwogICAgIH0KIAogICAgIGlmIChhbGwKICAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFt
ZXMoKS5wYXVzZUV2ZW50CiAgICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkucGxh
eUV2ZW50CiAgICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkucmF0ZWNoYW5nZUV2
ZW50KQotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0UmF0ZSghbV9tZWRp
YUVsZW1lbnQtPnBhdXNlZCgpLCBtX21lZGlhRWxlbWVudC0+cGxheWJhY2tSYXRlKCkpOworICAg
ICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0UmF0ZSghbV92aWRlb0VsZW1lbnQt
PnBhdXNlZCgpLCBtX3ZpZGVvRWxlbWVudC0+cGxheWJhY2tSYXRlKCkpOwogCiAgICAgaWYgKGFs
bAogICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnRpbWV1cGRhdGVFdmVudCkg
ewotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0Q3VycmVudFRpbWUobV9t
ZWRpYUVsZW1lbnQtPmN1cnJlbnRUaW1lKCksIFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10g
c3lzdGVtVXB0aW1lXSk7CisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRD
dXJyZW50VGltZShtX3ZpZGVvRWxlbWVudC0+Y3VycmVudFRpbWUoKSwgW1tOU1Byb2Nlc3NJbmZv
IHByb2Nlc3NJbmZvXSBzeXN0ZW1VcHRpbWVdKTsKICAgICAgICAgLy8gRklYTUU6IDEzMDc4OCAt
IGZpbmQgYSBiZXR0ZXIgZXZlbnQgdG8gdXBkYXRlIHNlZWthYmxlIHJhbmdlcyBmcm9tLgotICAg
ICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0U2Vla2FibGVSYW5nZXMoKm1fbWVk
aWFFbGVtZW50LT5zZWVrYWJsZSgpKTsKKyAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2UtPnNldFNlZWthYmxlUmFuZ2VzKCptX3ZpZGVvRWxlbWVudC0+c2Vla2FibGUoKSk7CiAgICAg
fQogCiAgICAgaWYgKGFsbApAQCAtMTMzLDI2ICsxMjcsMjYgQEAgdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbE1lZGlhRWxlbWVudAogCiAgICAgaWYgKGFsbAogICAgICAgICB8fCBldmVudE5h
bWUgPT0gZXZlbnROYW1lcygpLndlYmtpdGN1cnJlbnRwbGF5YmFja3RhcmdldGlzd2lyZWxlc3Nj
aGFuZ2VkRXZlbnQpIHsKLSAgICAgICAgYm9vbCBlbmFibGVkID0gbV9tZWRpYUVsZW1lbnQtPm1l
ZGlhU2Vzc2lvbigpLmN1cnJlbnRQbGF5YmFja1RhcmdldElzV2lyZWxlc3MoKm1fbWVkaWFFbGVt
ZW50KTsKKyAgICAgICAgYm9vbCBlbmFibGVkID0gbV92aWRlb0VsZW1lbnQtPm1lZGlhU2Vzc2lv
bigpLmN1cnJlbnRQbGF5YmFja1RhcmdldElzV2lyZWxlc3MoKm1fdmlkZW9FbGVtZW50KTsKICAg
ICAgICAgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0
VHlwZSB0YXJnZXRUeXBlID0gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOjpUYXJnZXRUeXBl
Tm9uZTsKICAgICAgICAgU3RyaW5nIGxvY2FsaXplZERldmljZU5hbWU7CiAKLSAgICAgICAgaWYg
KG1fbWVkaWFFbGVtZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgpKSB7CisgICAgICAgIGlmIChtX3Zp
ZGVvRWxlbWVudC0+bWVkaWFDb250cm9sc0hvc3QoKSkgewogICAgICAgICAgICAgREVQUkVDQVRF
RF9ERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYWlycGxheSwgKEFTQ0lJTGl0ZXJhbCgiYWly
cGxheSIpKSk7CiAgICAgICAgICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoU3Ry
aW5nLCB0dm91dCwgKEFTQ0lJTGl0ZXJhbCgidHZvdXQiKSkpOwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBTdHJpbmcgdHlwZSA9IG1fbWVkaWFFbGVtZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgp
LT5leHRlcm5hbERldmljZVR5cGUoKTsKKyAgICAgICAgICAgIFN0cmluZyB0eXBlID0gbV92aWRl
b0VsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCktPmV4dGVybmFsRGV2aWNlVHlwZSgpOwogICAg
ICAgICAgICAgaWYgKHR5cGUgPT0gYWlycGxheSkKICAgICAgICAgICAgICAgICB0YXJnZXRUeXBl
ID0gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOjpUYXJnZXRUeXBlQWlyUGxheTsKICAgICAg
ICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gdHZvdXQpCiAgICAgICAgICAgICAgICAgdGFyZ2V0VHlw
ZSA9IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZTo6VGFyZ2V0VHlwZVRWT3V0OwotICAgICAg
ICAgICAgbG9jYWxpemVkRGV2aWNlTmFtZSA9IG1fbWVkaWFFbGVtZW50LT5tZWRpYUNvbnRyb2xz
SG9zdCgpLT5leHRlcm5hbERldmljZURpc3BsYXlOYW1lKCk7CisgICAgICAgICAgICBsb2NhbGl6
ZWREZXZpY2VOYW1lID0gbV92aWRlb0VsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCktPmV4dGVy
bmFsRGV2aWNlRGlzcGxheU5hbWUoKTsKICAgICAgICAgfQogICAgICAgICBtX3ZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZS0+c2V0RXh0ZXJuYWxQbGF5YmFjayhlbmFibGVkLCB0YXJnZXRUeXBlLCBs
b2NhbGl6ZWREZXZpY2VOYW1lKTsKICAgICB9CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxNZWRpYUVsZW1lbnQ6OnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKFBsYXRmb3JtTGF5ZXIq
IHZpZGVvTGF5ZXIpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojpz
ZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihQbGF0Zm9ybUxheWVyKiB2aWRlb0xheWVyKQogewogICAg
IGlmIChtX3ZpZGVvRnVsbHNjcmVlbkxheWVyID09IHZpZGVvTGF5ZXIpCiAgICAgICAgIHJldHVy
bjsKQEAgLTE2MCwxMzQgKzE1NCwxMzUgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1l
ZGlhRWxlbWVudAogICAgIG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIgPSB2aWRlb0xheWVyOwogICAg
IFttX3ZpZGVvRnVsbHNjcmVlbkxheWVyIHNldEZyYW1lOm1fdmlkZW9GcmFtZV07CiAgICAgCi0g
ICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+IHBy
b3RlY3QodGhpcyk7CisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAg
IGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5zZXRWaWRl
b0Z1bGxzY3JlZW5MYXllcihtX3ZpZGVvRnVsbHNjcmVlbkxheWVyLmdldCgpKTsKKyAgICAgICAg
aWYgKG1fdmlkZW9FbGVtZW50KQorICAgICAgICAgICAgbV92aWRlb0VsZW1lbnQtPnNldFZpZGVv
RnVsbHNjcmVlbkxheWVyKG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIuZ2V0KCkpOwogICAgICAgICBw
cm90ZWN0LmNsZWFyKCk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxNZWRpYUVsZW1lbnQ6OnBsYXkoKSB7Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7Cit2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpwbGF5KCkKK3sKKyAgICBfX2Jsb2NrIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKICAgICBX
ZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICAgICAg
bV9tZWRpYUVsZW1lbnQtPnBsYXkoKTsKKyAgICAgICAgaWYgKG1fdmlkZW9FbGVtZW50KQorICAg
ICAgICAgICAgbV92aWRlb0VsZW1lbnQtPnBsYXkoKTsKICAgICAgICAgcHJvdGVjdC5jbGVhcigp
OwogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50
OjpwYXVzZSgpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpwYXVz
ZSgpCiB7Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVs
ZW1lbnQ+IHByb3RlY3QodGhpcyk7CisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKF57
Ci0gICAgICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50
LT5wYXVzZSgpOworICAgICAgICBpZiAobV92aWRlb0VsZW1lbnQpCisgICAgICAgICAgICBtX3Zp
ZGVvRWxlbWVudC0+cGF1c2UoKTsKICAgICAgICAgcHJvdGVjdC5jbGVhcigpOwogICAgIH0pOwog
fQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50Ojp0b2dnbGVQbGF5
U3RhdGUoKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6dG9nZ2xl
UGxheVN0YXRlKCkKIHsKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKKyAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKICAgICBXZWJUaHJl
YWRSdW4oXnsKLSAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICAgICAgbV9tZWRp
YUVsZW1lbnQtPnRvZ2dsZVBsYXlTdGF0ZSgpOworICAgICAgICBpZiAobV92aWRlb0VsZW1lbnQp
CisgICAgICAgICAgICBtX3ZpZGVvRWxlbWVudC0+dG9nZ2xlUGxheVN0YXRlKCk7CiAgICAgICAg
IHByb3RlY3QuY2xlYXIoKTsKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbE1lZGlhRWxlbWVudDo6YmVnaW5TY3J1YmJpbmcoKQordm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudDo6YmVnaW5TY3J1YmJpbmcoKQogewotICAgIF9fYmxvY2sgUmVm
UHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOwor
ICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBw
cm90ZWN0KHRoaXMpOwogICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICBpZiAobV9tZWRpYUVs
ZW1lbnQpCi0gICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+YmVnaW5TY3J1YmJpbmcoKTsKKyAg
ICAgICAgaWYgKG1fdmlkZW9FbGVtZW50KQorICAgICAgICAgICAgbV92aWRlb0VsZW1lbnQtPmJl
Z2luU2NydWJiaW5nKCk7CiAgICAgICAgIHByb3RlY3QuY2xlYXIoKTsKICAgICB9KTsKIH0KIAot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6ZW5kU2NydWJiaW5nKCkK
K3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmVuZFNjcnViYmluZygp
CiB7Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1l
bnQ+IHByb3RlY3QodGhpcyk7CisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKF57Ci0g
ICAgICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5l
bmRTY3J1YmJpbmcoKTsKKyAgICAgICAgaWYgKG1fdmlkZW9FbGVtZW50KQorICAgICAgICAgICAg
bV92aWRlb0VsZW1lbnQtPmVuZFNjcnViYmluZygpOwogICAgICAgICBwcm90ZWN0LmNsZWFyKCk7
CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6
OnNlZWtUb1RpbWUoZG91YmxlIHRpbWUpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlk
ZW9FbGVtZW50OjpzZWVrVG9UaW1lKGRvdWJsZSB0aW1lKQogewotICAgIF9fYmxvY2sgUmVmUHRy
PFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOworICAg
IF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBwcm90
ZWN0KHRoaXMpOwogICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICBpZiAobV9tZWRpYUVsZW1l
bnQpCi0gICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+c2V0Q3VycmVudFRpbWUodGltZSk7Cisg
ICAgICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKKyAgICAgICAgICAgIG1fdmlkZW9FbGVtZW50LT5z
ZXRDdXJyZW50VGltZSh0aW1lKTsKICAgICAgICAgcHJvdGVjdC5jbGVhcigpOwogICAgIH0pOwog
fQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpmYXN0U2Vlayhk
b3VibGUgdGltZSkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmZh
c3RTZWVrKGRvdWJsZSB0aW1lKQogewotICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsTWVkaWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOworICAgIF9fYmxvY2sgUmVmUHRy
PFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBwcm90ZWN0KHRoaXMpOwogICAg
IFdlYlRocmVhZFJ1biheewotICAgICAgICBpZiAobV9tZWRpYUVsZW1lbnQpCi0gICAgICAgICAg
ICBtX21lZGlhRWxlbWVudC0+ZmFzdFNlZWsodGltZSk7CisgICAgICAgIGlmIChtX3ZpZGVvRWxl
bWVudCkKKyAgICAgICAgICAgIG1fdmlkZW9FbGVtZW50LT5mYXN0U2Vlayh0aW1lKTsKICAgICAg
ICAgcHJvdGVjdC5jbGVhcigpOwogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsTWVkaWFFbGVtZW50OjpiZWdpblNjYW5uaW5nRm9yd2FyZCgpCit2b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpiZWdpblNjYW5uaW5nRm9yd2FyZCgpCiB7Ci0g
ICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+IHBy
b3RlY3QodGhpcyk7CisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAg
IGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5iZWdpblNj
YW5uaW5nKE1lZGlhQ29udHJvbGxlckludGVyZmFjZTo6Rm9yd2FyZCk7CisgICAgICAgIGlmICht
X3ZpZGVvRWxlbWVudCkKKyAgICAgICAgICAgIG1fdmlkZW9FbGVtZW50LT5iZWdpblNjYW5uaW5n
KE1lZGlhQ29udHJvbGxlckludGVyZmFjZTo6Rm9yd2FyZCk7CiAgICAgICAgIHByb3RlY3QuY2xl
YXIoKTsKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxl
bWVudDo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKCkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQ6OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpCiB7Ci0gICAgX19ibG9jayBS
ZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7
CisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+
IHByb3RlY3QodGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgIGlmIChtX21lZGlh
RWxlbWVudCkKLSAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5iZWdpblNjYW5uaW5nKE1lZGlh
Q29udHJvbGxlckludGVyZmFjZTo6QmFja3dhcmQpOworICAgICAgICBpZiAobV92aWRlb0VsZW1l
bnQpCisgICAgICAgICAgICBtX3ZpZGVvRWxlbWVudC0+YmVnaW5TY2FubmluZyhNZWRpYUNvbnRy
b2xsZXJJbnRlcmZhY2U6OkJhY2t3YXJkKTsKICAgICAgICAgcHJvdGVjdC5jbGVhcigpOwogICAg
IH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjplbmRT
Y2FubmluZygpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjplbmRT
Y2FubmluZygpCiB7Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxN
ZWRpYUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7CisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7CiAgICAgV2ViVGhyZWFk
UnVuKF57Ci0gICAgICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgICAgIG1fbWVkaWFF
bGVtZW50LT5lbmRTY2FubmluZygpOworICAgICAgICBpZiAobV92aWRlb0VsZW1lbnQpCisgICAg
ICAgICAgICBtX3ZpZGVvRWxlbWVudC0+ZW5kU2Nhbm5pbmcoKTsKICAgICAgICAgcHJvdGVjdC5j
bGVhcigpOwogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFF
bGVtZW50OjpyZXF1ZXN0RXhpdEZ1bGxzY3JlZW4oKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudDo6cmVxdWVzdEV4aXRGdWxsc2NyZWVuKCkKIHsKLSAgICBpZiAoIW1f
bWVkaWFFbGVtZW50KQorICAgIGlmICghbV92aWRlb0VsZW1lbnQpCiAgICAgICAgIHJldHVybjsK
IAotICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50
PiBwcm90ZWN0KHRoaXMpOworICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50PiBwcm90ZWN0KHRoaXMpOwogICAgIFdlYlRocmVhZFJ1biheewotICAg
ICAgICBpZiAobV9tZWRpYUVsZW1lbnQgJiYgbV9tZWRpYUVsZW1lbnQtPmlzRnVsbHNjcmVlbigp
KQotICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmV4aXRGdWxsc2NyZWVuKCk7CisgICAgICAg
IGlmIChtX3ZpZGVvRWxlbWVudCAmJiBtX3ZpZGVvRWxlbWVudC0+aXNGdWxsc2NyZWVuKCkpCisg
ICAgICAgICAgICBtX3ZpZGVvRWxlbWVudC0+ZXhpdEZ1bGxzY3JlZW4oKTsKICAgICAgICAgcHJv
dGVjdC5jbGVhcigpOwogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
TWVkaWFFbGVtZW50OjpzZXRWaWRlb0xheWVyRnJhbWUoRmxvYXRSZWN0IHJlY3QpCit2b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0xheWVyRnJhbWUoRmxv
YXRSZWN0IHJlY3QpCiB7CiAgICAgbV92aWRlb0ZyYW1lID0gcmVjdDsKICAgICBbbV92aWRlb0Z1
bGxzY3JlZW5MYXllciBzZXRGcmFtZTpDR1JlY3QocmVjdCldOwotICAgIG1fbWVkaWFFbGVtZW50
LT5zZXRWaWRlb0Z1bGxzY3JlZW5GcmFtZShyZWN0KTsKKyAgICBtX3ZpZGVvRWxlbWVudC0+c2V0
VmlkZW9GdWxsc2NyZWVuRnJhbWUocmVjdCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxNZWRpYUVsZW1lbnQ6OnNldFZpZGVvTGF5ZXJHcmF2aXR5KFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsOjpWaWRlb0dyYXZpdHkgZ3Jhdml0eSkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvTGF5ZXJHcmF2aXR5KFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsOjpWaWRlb0dyYXZpdHkgZ3Jhdml0eSkKIHsKICAgICBNZWRpYVBsYXllcjo6VmlkZW9HcmF2
aXR5IHZpZGVvR3Jhdml0eSA9IE1lZGlhUGxheWVyOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3Q7
CiAgICAgaWYgKGdyYXZpdHkgPT0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0
eVJlc2l6ZSkKQEAgLTI5OSwzNCArMjk0LDM0IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxNZWRpYUVsZW1lbnQKICAgICBlbHNlCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgIAotICAgIG1fbWVkaWFFbGVtZW50LT5zZXRWaWRlb0Z1bGxzY3JlZW5HcmF2aXR5KHZpZGVv
R3Jhdml0eSk7CisgICAgbV92aWRlb0VsZW1lbnQtPnNldFZpZGVvRnVsbHNjcmVlbkdyYXZpdHko
dmlkZW9HcmF2aXR5KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxl
bWVudDo6c2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCkKK3ZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3Qp
CiB7CiAgICAgLy8gRklYTUU6IDEzMTIzNiBJbXBsZW1lbnQgYXVkaW8gdHJhY2sgc2VsZWN0aW9u
LgogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpzZWxlY3RM
ZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50OjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5k
ZXgpCiB7CiAgICAgVGV4dFRyYWNrKiB0ZXh0VHJhY2sgPSBudWxscHRyOwogICAgIAogICAgIGlm
IChpbmRleCA8IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnUuc2l6ZSgpKQogICAgICAgICB0ZXh0VHJh
Y2sgPSBtX2xlZ2libGVUcmFja3NGb3JNZW51W3N0YXRpY19jYXN0PHNpemVfdD4oaW5kZXgpXS5n
ZXQoKTsKICAgICAKLSAgICBtX21lZGlhRWxlbWVudC0+c2V0U2VsZWN0ZWRUZXh0VHJhY2sodGV4
dFRyYWNrKTsKKyAgICBtX3ZpZGVvRWxlbWVudC0+c2V0U2VsZWN0ZWRUZXh0VHJhY2sodGV4dFRy
YWNrKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6dXBk
YXRlTGVnaWJsZU9wdGlvbnMoKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudDo6dXBkYXRlTGVnaWJsZU9wdGlvbnMoKQogewotICAgIFRleHRUcmFja0xpc3QqIHRyYWNr
TGlzdCA9IG1fbWVkaWFFbGVtZW50LT50ZXh0VHJhY2tzKCk7Ci0gICAgaWYgKCF0cmFja0xpc3Qg
fHwgIW1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSB8fCAhbV9tZWRpYUVsZW1lbnQt
Pm1lZGlhQ29udHJvbHNIb3N0KCkpCisgICAgVGV4dFRyYWNrTGlzdCogdHJhY2tMaXN0ID0gbV92
aWRlb0VsZW1lbnQtPnRleHRUcmFja3MoKTsKKyAgICBpZiAoIXRyYWNrTGlzdCB8fCAhbV92aWRl
b0VsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpIHx8ICFtX3ZpZGVvRWxlbWVudC0+bWVkaWFDb250
cm9sc0hvc3QoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFdURjo6QXRvbWljU3RyaW5n
IGRpc3BsYXlNb2RlID0gbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCktPmNhcHRp
b25EaXNwbGF5TW9kZSgpOwotICAgIFRleHRUcmFjayogb2ZmSXRlbSA9IG1fbWVkaWFFbGVtZW50
LT5tZWRpYUNvbnRyb2xzSG9zdCgpLT5jYXB0aW9uTWVudU9mZkl0ZW0oKTsKLSAgICBUZXh0VHJh
Y2sqIGF1dG9tYXRpY0l0ZW0gPSBtX21lZGlhRWxlbWVudC0+bWVkaWFDb250cm9sc0hvc3QoKS0+
Y2FwdGlvbk1lbnVBdXRvbWF0aWNJdGVtKCk7Ci0gICAgQ2FwdGlvblVzZXJQcmVmZXJlbmNlcyYg
Y2FwdGlvblByZWZlcmVuY2VzID0gKm1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKS0+
Z3JvdXAoKS5jYXB0aW9uUHJlZmVyZW5jZXMoKTsKKyAgICBXVEY6OkF0b21pY1N0cmluZyBkaXNw
bGF5TW9kZSA9IG1fdmlkZW9FbGVtZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgpLT5jYXB0aW9uRGlz
cGxheU1vZGUoKTsKKyAgICBUZXh0VHJhY2sqIG9mZkl0ZW0gPSBtX3ZpZGVvRWxlbWVudC0+bWVk
aWFDb250cm9sc0hvc3QoKS0+Y2FwdGlvbk1lbnVPZmZJdGVtKCk7CisgICAgVGV4dFRyYWNrKiBh
dXRvbWF0aWNJdGVtID0gbV92aWRlb0VsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCktPmNhcHRp
b25NZW51QXV0b21hdGljSXRlbSgpOworICAgIENhcHRpb25Vc2VyUHJlZmVyZW5jZXMmIGNhcHRp
b25QcmVmZXJlbmNlcyA9ICptX3ZpZGVvRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCktPmdyb3Vw
KCkuY2FwdGlvblByZWZlcmVuY2VzKCk7CiAgICAgbV9sZWdpYmxlVHJhY2tzRm9yTWVudSA9IGNh
cHRpb25QcmVmZXJlbmNlcy5zb3J0ZWRUcmFja0xpc3RGb3JNZW51KHRyYWNrTGlzdCk7CiAgICAg
VmVjdG9yPFN0cmluZz4gdHJhY2tEaXNwbGF5TmFtZXM7CiAgICAgdWludDY0X3Qgc2VsZWN0ZWRJ
bmRleCA9IDA7CkBAIC0zNTksNyArMzU0LDcgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bE1lZGlhRWxlbWVudAogICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRMZWdpYmxl
TWVkaWFTZWxlY3Rpb25PcHRpb25zKHRyYWNrRGlzcGxheU5hbWVzLCBzZWxlY3RlZEluZGV4KTsK
IH0KIAotY29uc3QgVmVjdG9yPEF0b21pY1N0cmluZz4mIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
TWVkaWFFbGVtZW50OjpvYnNlcnZlZEV2ZW50TmFtZXMoKQorY29uc3QgVmVjdG9yPEF0b21pY1N0
cmluZz4mIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpvYnNlcnZlZEV2ZW50
TmFtZXMoKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxWZWN0b3I8QXRvbWljU3RyaW5n
Pj4gc0V2ZW50TmFtZXM7CiAKQEAgLTM3Niw3ICszNzEsNyBAQCBjb25zdCBWZWN0b3I8QXRvbWlj
U3RyaW5nPiYgV2ViVmlkZW9GdWxsCiAgICAgcmV0dXJuIHNFdmVudE5hbWVzLmdldCgpOwogfQog
Ci1jb25zdCBBdG9taWNTdHJpbmcmIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50
OjpldmVudE5hbWVBbGwoKQorY29uc3QgQXRvbWljU3RyaW5nJiBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudDo6ZXZlbnROYW1lQWxsKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8QXRvbWljU3RyaW5nPiBzRXZlbnROYW1lQWxsID0gImFsbEV2ZW50cyI7CiAgICAgcmV0
dXJuIHNFdmVudE5hbWVBbGw7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLmgJKHJldmlzaW9uIDE3
MzE4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgIGNsYXNzIERpc3BsYXlTbGVlcERpc2FibGVyOwotICAgIGNsYXNzIEhU
TUxNZWRpYUVsZW1lbnQ7CisgICAgY2xhc3MgSFRNTFZpZGVvRWxlbWVudDsKIH0KIAogQHByb3Rv
Y29sIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJEZWxlZ2F0ZTsKQEAgLTQyLDcgKzQyLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBXRUJDT1JFX0VYUE9SVCBAaW50ZXJmYWNlIFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIgOiBOU1dpbmRvd0NvbnRyb2xsZXIgewogQHByaXZhdGUK
LSAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudD4gX21lZGlhRWxlbWVudDsgLy8g
KHJldGFpbikKKyAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudD4gX3ZpZGVvRWxl
bWVudDsgLy8gKHJldGFpbikKICAgICBpZCA8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckRl
bGVnYXRlPiBfZGVsZWdhdGU7IC8vIChhc3NpZ24pCiAKICAgICBOU1dpbmRvdyAqX2JhY2tncm91
bmRGdWxsc2NyZWVuV2luZG93OyAvLyAocmV0YWluKQpAQCAtNjAsOCArNjAsOCBAQCBXRUJDT1JF
X0VYUE9SVCBAaW50ZXJmYWNlIFdlYlZpZGVvRnVsbHNjCiAtICh2b2lkKXNldERlbGVnYXRlOihp
ZCA8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckRlbGVnYXRlPilkZWxlZ2F0ZTsKIAogLSAo
dm9pZClzZXR1cFZpZGVvT3ZlcmxheTooQ0FMYXllciopbGF5ZXI7Ci0tICh2b2lkKXNldE1lZGlh
RWxlbWVudDooV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCopbWVkaWFFbGVtZW50OwotLSAoV2Vi
Q29yZTo6SFRNTE1lZGlhRWxlbWVudCopbWVkaWFFbGVtZW50OworLSAodm9pZClzZXRWaWRlb0Vs
ZW1lbnQ6KFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQqKXZpZGVvRWxlbWVudDsKKy0gKFdlYkNv
cmU6OkhUTUxWaWRlb0VsZW1lbnQqKXZpZGVvRWxlbWVudDsKIAogLSAodm9pZCllbnRlckZ1bGxz
Y3JlZW46KE5TU2NyZWVuICopc2NyZWVuOwogLSAodm9pZClleGl0RnVsbHNjcmVlbjsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyLm1tCShyZXZpc2lvbiAxNzMxODIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbQkod29ya2luZyBj
b3B5KQpAQCAtMzUsNyArMzUsNyBAQAogI2ltcG9ydCA8Q2FyYm9uL0NhcmJvbi5oPgogI2ltcG9y
dCA8UVRLaXQvUVRLaXQuaD4KICNpbXBvcnQgPFdlYkNvcmUvRGlzcGxheVNsZWVwRGlzYWJsZXIu
aD4KLSNpbXBvcnQgPFdlYkNvcmUvSFRNTE1lZGlhRWxlbWVudC5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9IVE1MVmlkZW9FbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NvZnRMaW5raW5nLmg+CiAj
aW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KIApAQCAtMTE0LDIxICsxMTQsMjEgQEAgLSAodm9pZCl3
aW5kb3dEaWRMb2FkCiAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBh
ZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihhcHBsaWNhdGlvbkRpZENoYW5nZVNj
cmVlblBhcmFtZXRlcnM6KSBuYW1lOk5TQXBwbGljYXRpb25EaWRDaGFuZ2VTY3JlZW5QYXJhbWV0
ZXJzTm90aWZpY2F0aW9uIG9iamVjdDpOU0FwcF07CiB9CiAKLS0gKEhUTUxNZWRpYUVsZW1lbnQq
KW1lZGlhRWxlbWVudAorLSAoSFRNTFZpZGVvRWxlbWVudCopdmlkZW9FbGVtZW50CiB7Ci0gICAg
cmV0dXJuIF9tZWRpYUVsZW1lbnQuZ2V0KCk7CisgICAgcmV0dXJuIF92aWRlb0VsZW1lbnQuZ2V0
KCk7CiB9CiAKLS0gKHZvaWQpc2V0TWVkaWFFbGVtZW50OihIVE1MTWVkaWFFbGVtZW50KiltZWRp
YUVsZW1lbnQKKy0gKHZvaWQpc2V0VmlkZW9FbGVtZW50OihIVE1MVmlkZW9FbGVtZW50Kil2aWRl
b0VsZW1lbnQKIHsKLSAgICBfbWVkaWFFbGVtZW50ID0gbWVkaWFFbGVtZW50OworICAgIF92aWRl
b0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7CiAKLSAgICBpZiAoIV9tZWRpYUVsZW1lbnQpCisgICAg
aWYgKCFfdmlkZW9FbGVtZW50KQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoW3NlbGYgaXNX
aW5kb3dMb2FkZWRdKSB7Ci0gICAgICAgIGlmIChfbWVkaWFFbGVtZW50LT5wbGF0Zm9ybU1lZGlh
KCkudHlwZSA9PSBQbGF0Zm9ybU1lZGlhOjpRVE1vdmllVHlwZSkgewotICAgICAgICAgICAgUVRN
b3ZpZSAqbW92aWUgPSBfbWVkaWFFbGVtZW50LT5wbGF0Zm9ybU1lZGlhKCkubWVkaWEucXRNb3Zp
ZTsKKyAgICAgICAgaWYgKF92aWRlb0VsZW1lbnQtPnBsYXRmb3JtTWVkaWEoKS50eXBlID09IFBs
YXRmb3JtTWVkaWE6OlFUTW92aWVUeXBlKSB7CisgICAgICAgICAgICBRVE1vdmllICptb3ZpZSA9
IF92aWRlb0VsZW1lbnQtPnBsYXRmb3JtTWVkaWEoKS5tZWRpYS5xdE1vdmllOwogICAgICAgICAg
ICAgUVRNb3ZpZUxheWVyICpsYXllciA9IFtbZ2V0UVRNb3ZpZUxheWVyQ2xhc3MoKSBhbGxvY10g
aW5pdF07CiAgICAgICAgICAgICBbbGF5ZXIgc2V0TW92aWU6bW92aWVdOwogICAgICAgICAgICAg
W3NlbGYgc2V0dXBWaWRlb092ZXJsYXk6bGF5ZXJdOwpAQCAtMTM4LDggKzEzOCw4IEBAIC0gKHZv
aWQpc2V0TWVkaWFFbGVtZW50OihIVE1MTWVkaWFFbGVtZW4KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6UVRNb3ZpZVJhdGVEaWRD
aGFuZ2VOb3RpZmljYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvYmplY3Q6bW92aWVdOwogCi0gICAgICAgIH0gZWxzZSBpZiAoX21l
ZGlhRWxlbWVudC0+cGxhdGZvcm1NZWRpYSgpLnR5cGUgPT0gUGxhdGZvcm1NZWRpYTo6QVZGb3Vu
ZGF0aW9uTWVkaWFQbGF5ZXJUeXBlKSB7Ci0gICAgICAgICAgICBBVlBsYXllciAqcGxheWVyID0g
X21lZGlhRWxlbWVudC0+cGxhdGZvcm1NZWRpYSgpLm1lZGlhLmF2Zk1lZGlhUGxheWVyOworICAg
ICAgICB9IGVsc2UgaWYgKF92aWRlb0VsZW1lbnQtPnBsYXRmb3JtTWVkaWEoKS50eXBlID09IFBs
YXRmb3JtTWVkaWE6OkFWRm91bmRhdGlvbk1lZGlhUGxheWVyVHlwZSkgeworICAgICAgICAgICAg
QVZQbGF5ZXIgKnBsYXllciA9IF92aWRlb0VsZW1lbnQtPnBsYXRmb3JtTWVkaWEoKS5tZWRpYS5h
dmZNZWRpYVBsYXllcjsKICAgICAgICAgICAgIEFWUGxheWVyTGF5ZXIgKmxheWVyID0gW1tnZXRB
VlBsYXllckxheWVyQ2xhc3MoKSBhbGxvY10gaW5pdF07CiAgICAgICAgICAgICBbc2VsZiBzZXR1
cFZpZGVvT3ZlcmxheTpsYXllcl07CiAgICAgICAgICAgICBbbGF5ZXIgc2V0UGxheWVyOnBsYXll
cl07CkBAIC0yMDcsOSArMjA3LDkgQEAgLSAodm9pZCl3aW5kb3dEaWRFbnRlckZ1bGxzY3JlZW4K
ICAgICBbX2h1ZENvbnRyb2xsZXIgZmFkZVdpbmRvd0luXTsKIH0KIAotLSAoTlNSZWN0KW1lZGlh
RWxlbWVudFJlY3QKKy0gKE5TUmVjdCl2aWRlb0VsZW1lbnRSZWN0CiB7Ci0gICAgcmV0dXJuIF9t
ZWRpYUVsZW1lbnQtPnNjcmVlblJlY3QoKTsKKyAgICByZXR1cm4gX3ZpZGVvRWxlbWVudC0+c2Ny
ZWVuUmVjdCgpOwogfQogCiAtICh2b2lkKWFwcGxpY2F0aW9uRGlkUmVzaWduQWN0aXZlOihOU05v
dGlmaWNhdGlvbiopbm90aWZpY2F0aW9uCkBAIC0yNzYsNyArMjc2LDcgQEAgLSAodm9pZCllbnRl
ckZ1bGxzY3JlZW46KE5TU2NyZWVuICopc2NyZQogICAgIGlmICghc2NyZWVuKQogICAgICAgICBz
Y3JlZW4gPSBbTlNTY3JlZW4gbWFpblNjcmVlbl07CiAKLSAgICBOU1JlY3QgZnJhbWUgPSBbc2Vs
ZiBtZWRpYUVsZW1lbnRSZWN0XTsKKyAgICBOU1JlY3QgZnJhbWUgPSBbc2VsZiB2aWRlb0VsZW1l
bnRSZWN0XTsKICAgICBOU1JlY3QgZW5kRnJhbWUgPSBbc2NyZWVuIGZyYW1lXTsKICAgICBjb25z
dHJhaW5GcmFtZVRvUmF0aW9PZkZyYW1lKCZlbmRGcmFtZSwgJmZyYW1lKTsKIApAQCAtMzAzLDcg
KzMwMyw3IEBAIC0gKHZvaWQpZXhpdEZ1bGxzY3JlZW4KICAgICBfaXNFbmRpbmdGdWxsc2NyZWVu
ID0gWUVTOwogICAgIFtfaHVkQ29udHJvbGxlciBjbG9zZVdpbmRvd107CiAKLSAgICBOU1JlY3Qg
ZW5kRnJhbWUgPSBbc2VsZiBtZWRpYUVsZW1lbnRSZWN0XTsKKyAgICBOU1JlY3QgZW5kRnJhbWUg
PSBbc2VsZiB2aWRlb0VsZW1lbnRSZWN0XTsKIAogICAgIFtzZWxmIHNldHVwRmFkZUFuaW1hdGlv
bklmTmVlZGVkQW5kRmFkZUluOk5PXTsKICAgICBpZiAoX2ZvcmNlRGlzYWJsZUFuaW1hdGlvbikg
ewpAQCAtMzU4LDggKzM1OCw4IEBAIC0gKHZvaWQpdXBkYXRlTWVudUFuZERvY2tGb3JGdWxsc2Ny
ZWVuCiAtICh2b2lkKXVwZGF0ZVBvd2VyQXNzZXJ0aW9ucwogewogICAgIGZsb2F0IHJhdGUgPSAw
OwotICAgIGlmIChfbWVkaWFFbGVtZW50ICYmIF9tZWRpYUVsZW1lbnQtPnBsYXRmb3JtTWVkaWEo
KS50eXBlID09IFBsYXRmb3JtTWVkaWE6OlFUTW92aWVUeXBlKQotICAgICAgICByYXRlID0gW19t
ZWRpYUVsZW1lbnQtPnBsYXRmb3JtTWVkaWEoKS5tZWRpYS5xdE1vdmllIHJhdGVdOworICAgIGlm
IChfdmlkZW9FbGVtZW50ICYmIF92aWRlb0VsZW1lbnQtPnBsYXRmb3JtTWVkaWEoKS50eXBlID09
IFBsYXRmb3JtTWVkaWE6OlFUTW92aWVUeXBlKQorICAgICAgICByYXRlID0gW192aWRlb0VsZW1l
bnQtPnBsYXRmb3JtTWVkaWEoKS5tZWRpYS5xdE1vdmllIHJhdGVdOwogICAgIAogICAgIGlmIChy
YXRlICYmICFfaXNFbmRpbmdGdWxsc2NyZWVuKSB7CiAgICAgICAgIGlmICghX2Rpc3BsYXlTbGVl
cERpc2FibGVyKQpAQCAtMzczLDggKzM3Myw4IEBAIC0gKHZvaWQpdXBkYXRlUG93ZXJBc3NlcnRp
b25zCiAKIC0gKHZvaWQpX3JlcXVlc3RFeGl0CiB7Ci0gICAgaWYgKF9tZWRpYUVsZW1lbnQpCi0g
ICAgICAgIF9tZWRpYUVsZW1lbnQtPmV4aXRGdWxsc2NyZWVuKCk7CisgICAgaWYgKF92aWRlb0Vs
ZW1lbnQpCisgICAgICAgIF92aWRlb0VsZW1lbnQtPmV4aXRGdWxsc2NyZWVuKCk7CiAgICAgX2Zv
cmNlRGlzYWJsZUFuaW1hdGlvbiA9IE5POwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAx
NzMxODIpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSw0MSBAQAorMjAxNC0wOS0wMiAgTWFjaWVqIFN0YWNob3dpYWsgIDxtanNAYXBwbGUuY29t
PgorCisgICAgICAgIENsZWFuIHVwIG5hbWluZyBmb3IgYW5kIHNsaWdodGx5IHJlZmFjdG9yIGxl
Z2FjeSB2aWRlbyBmdWxsc2NyZWVuIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjQ0NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEtleSBjaGFuZ2VzOgorICAgICAgICBzdXBwb3J0c0Z1bGxz
Y3JlZW5Gb3JOb2RlKE5vZGUqKSAtLT4gc3VwcG9ydHNWaWRlb0Z1bGxzY3JlZW4oKQorICAgICAg
ICBlbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqKSAtLT4gZW50ZXJWaWRlb0Z1bGxzY3JlZW5G
b3JWaWRlb0VsZW1lbnQoSFRNTFZpZGVvRWxlbWVudCopCisgICAgICAgIGV4aXRGdWxsc2NyZWVu
Rm9yTm9kZShOb2RlKikgLS0+IGV4aXRWaWRlb0Z1bGxzY3JlZW4oKQorICAgICAgICAKKyAgICAg
ICAgVGhlIG9sZCB2ZXJzaW9ucyBoYWQgdW5uZWNlc3NhcnkgcGFyYW1ldGVycywgZGlkIG5vdCBj
bGVhcmx5IGRpc3Rpbmd1aXNoIHRoZWlyIHB1cnBvc2UKKyAgICAgICAgZnJvbSBlbnRlckZ1bGxz
Y3JlZW5Gb3JFbGVtZW50IGFuZCBmcmllbmRzLCBhbmQgd3JvbmdseSBjbGFpbWVkIGdlbmVyYWxp
dHkgdG8gYWxsIE5vZGVzLgorICAgICAgICBBbHNvIGNoYW5nZWQgbWFueSBvdGhlciBwbGFjZXMg
dG8gdXNlIEhUTUxWaWRlb0VsZW1lbnQqIGluc3RlYWQgb2YgTm9kZSogb3IgCisgICAgICAgIEhU
TUxNZWRpYUVsZW1lbnQqIHdoZW4gdGhleSB3ZXJlIGluIGZhY3Qgb25seSB1c2VkIGZvciB2aWRl
byBlbGVtZW50cyBhbmQgd291bGQgb25seQorICAgICAgICB3b3JrIGZvciBzdWNoLgorCisgICAg
ICAgIExlZ2FjeSB2aWRlbyBmdWxsc2NyZWVuIGluIFdlYktpdDIgaXMgb25seSBzdXBwb3J0ZWQg
b24gaU9TIChmb3Igb3RoZXIgcG9ydHMgdGhhdCBzdXBwb3J0CisgICAgICAgIGl0LCBpdCdzIFdL
MSBvbmx5KS4KKyAgICAgICAgCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OnN1
cHBvcnRzVmlkZW9GdWxsc2NyZWVuKTogQWRqdXN0IGZvciByZW5hbWVzIGFzCisgICAgICAgIG1l
bnRpb25lZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjplbnRlclZpZGVvRnVs
bHNjcmVlbkZvclZpZGVvRWxlbWVudCk6IGRpdHRvCisgICAgICAgIChXZWJLaXQ6OldlYkNocm9t
ZUNsaWVudDo6ZXhpdFZpZGVvRnVsbHNjcmVlbik6IGRpdHRvCisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNz
L2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9p
b3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbToKKyAgICAgICAgKFdlYktpdDo6Y2xpZW50
UmVjdEZvckVsZW1lbnQpOiBObyBuZWVkIHRvIGJlIGdlbmVyaWMgdG8gbm9kZS4KKyAgICAgICAg
KFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c3VwcG9ydHNWaWRlb0Z1bGxzY3Jl
ZW4pOiBBZGp1c3QgZm9yIHRoZQorICAgICAgICBtYWluIHJlZmFjdG9yaW5nLiBBbHNvIGNoYW5n
ZSBtX25vZGUgdG8gbV92aWRlb0VsZW1lbnQgd2l0aCBhcHByb3ByaWF0ZSB0eXBlIGNoYW5nZS4K
KyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW50ZXJWaWRlb0Z1
bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQpOiBkaXR0bworICAgICAgICAoV2ViS2l0OjpXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOjpleGl0VmlkZW9GdWxsc2NyZWVuKTogZGl0dG8KKyAgICAgICAg
KFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRW50ZXJGdWxsc2NyZWVuKTog
ZGl0dG8gCisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZEV4
aXRGdWxsc2NyZWVuKTogZGl0dG8KKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlcjo6ZGlkQ2xlYW51cEZ1bGxzY3JlZW4pOiBkaXR0bworCiAyMDE0LTA5LTAyICBQaGls
aXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
LCBHVEsgYnVpbGQgZml4IGFmdGVyIHIxNzMxNjMuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
Y3BwCShyZXZpc2lvbiAxNzMxODIpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwMiwxOSAr
OTAyLDE5IEBAIFBhc3NSZWZQdHI8U2Nyb2xsaW5nQ29vcmRpbmF0b3I+IFdlYkNocm8KICNlbmRp
ZgogCiAjaWYgUExBVEZPUk0oSU9TKQotYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnN1cHBvcnRzRnVs
bHNjcmVlbkZvck5vZGUoY29uc3QgV2ViQ29yZTo6Tm9kZSogbm9kZSkKK2Jvb2wgV2ViQ2hyb21l
Q2xpZW50OjpzdXBwb3J0c1ZpZGVvRnVsbHNjcmVlbigpCiB7Ci0gICAgcmV0dXJuIG1fcGFnZS0+
dmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpLT5zdXBwb3J0c0Z1bGxzY3JlZW4obm9kZSk7CisgICAg
cmV0dXJuIG1fcGFnZS0+dmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpLT5zdXBwb3J0c1ZpZGVvRnVs
bHNjcmVlbigpOwogfQogCi12b2lkIFdlYkNocm9tZUNsaWVudDo6ZW50ZXJGdWxsc2NyZWVuRm9y
Tm9kZShXZWJDb3JlOjpOb2RlKiBub2RlKQordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmVudGVyVmlk
ZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQqIHZp
ZGVvRWxlbWVudCkKIHsKLSAgICBtX3BhZ2UtPnZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoKS0+ZW50
ZXJGdWxsc2NyZWVuRm9yTm9kZShub2RlKTsKKyAgICBtX3BhZ2UtPnZpZGVvRnVsbHNjcmVlbk1h
bmFnZXIoKS0+ZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQodmlkZW9FbGVtZW50
KTsKIH0KIAotdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmV4aXRGdWxsc2NyZWVuRm9yTm9kZShXZWJD
b3JlOjpOb2RlKiBub2RlKQordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmV4aXRWaWRlb0Z1bGxzY3Jl
ZW4oKQogewotICAgIG1fcGFnZS0+dmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpLT5leGl0RnVsbHNj
cmVlbkZvck5vZGUobm9kZSk7CisgICAgbV9wYWdlLT52aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCkt
PmV4aXRWaWRlb0Z1bGxzY3JlZW4oKTsKIH0KICNlbmRpZgogICAgIApJbmRleDogU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5oCShyZXZpc2lvbiAxNzMxODIpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMs
OSArMjUzLDkgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TKQotICAgIHZp
cnR1YWwgYm9vbCBzdXBwb3J0c0Z1bGxzY3JlZW5Gb3JOb2RlKGNvbnN0IFdlYkNvcmU6Ok5vZGUq
KTsKLSAgICB2aXJ0dWFsIHZvaWQgZW50ZXJGdWxsc2NyZWVuRm9yTm9kZShXZWJDb3JlOjpOb2Rl
Kik7Ci0gICAgdmlydHVhbCB2b2lkIGV4aXRGdWxsc2NyZWVuRm9yTm9kZShXZWJDb3JlOjpOb2Rl
Kik7CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzVmlkZW9GdWxsc2NyZWVuKCk7CisgICAgdmly
dHVhbCB2b2lkIGVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KFdlYkNvcmU6OkhU
TUxWaWRlb0VsZW1lbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZXhpdFZpZGVvRnVsbHNjcmVlbigp
OwogI2VuZGlmCiAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlci5oCShyZXZpc2lvbiAxNzMxODIpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2lv
cy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMx
LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0V2ZW50TGlzdGVuZXIuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1BsYXRmb3JtQ0FMYXllci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bE1lZGlhRWxlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KIApAQCAtNTAsMTYgKzUwLDE2IEBAIG5hbWVzcGFjZSBXZWJLaXQgewog
Y2xhc3MgTGF5ZXJIb3N0aW5nQ29udGV4dDsKIGNsYXNzIFdlYlBhZ2U7CiAKLWNsYXNzIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXIgOiBwdWJsaWMgV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxNZWRpYUVsZW1lbnQsIHB1YmxpYyBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2UsIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworY2xhc3MgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlciA6IHB1YmxpYyBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZp
ZGVvRWxlbWVudCwgcHVibGljIFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSwg
cHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4gY3JlYXRlKFBhc3NSZWZQdHI8V2ViUGFn
ZT4pOwogICAgIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoKTsKICAgICAKICAg
ICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiosIElQQzo6TWVzc2FnZURl
Y29kZXImKTsKICAgICAKLSAgICBib29sIHN1cHBvcnRzRnVsbHNjcmVlbihjb25zdCBXZWJDb3Jl
OjpOb2RlKikgY29uc3Q7Ci0gICAgdm9pZCBlbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKFdlYkNvcmU6
Ok5vZGUqKTsKLSAgICB2b2lkIGV4aXRGdWxsc2NyZWVuRm9yTm9kZShXZWJDb3JlOjpOb2RlKik7
CisgICAgYm9vbCBzdXBwb3J0c1ZpZGVvRnVsbHNjcmVlbigpIGNvbnN0OworICAgIHZvaWQgZW50
ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVu
dCopOworICAgIHZvaWQgZXhpdFZpZGVvRnVsbHNjcmVlbigpOwogICAgIAogcHJvdGVjdGVkOgog
ICAgIGV4cGxpY2l0IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoUGFzc1JlZlB0cjxXZWJQYWdl
Pik7CkBAIC04NSw3ICs4NSw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgc2V0Vmlk
ZW9MYXllckdyYXZpdHlFbnVtKHVuc2lnbmVkKTsKICAgICAKICAgICBXZWJQYWdlKiBtX3BhZ2U7
Ci0gICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IG1fbm9kZTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6
SFRNTFZpZGVvRWxlbWVudD4gbV92aWRlb0VsZW1lbnQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPExh
eWVySG9zdGluZ0NvbnRleHQ+IG1fbGF5ZXJIb3N0aW5nQ29udGV4dDsKICAgICAKICAgICBib29s
IG1faXNBbmltYXRpbmc7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2lvcy9XZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0JKHJldmlzaW9uIDE3MzE4
MikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTUwLDEyICs1MCwxMiBAQCB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLXN0YXRpYyBJbnRSZWN0IGNsaWVu
dFJlY3RGb3JOb2RlKE5vZGUqIG5vZGUpCitzdGF0aWMgSW50UmVjdCBjbGllbnRSZWN0Rm9yRWxl
bWVudChIVE1MRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlz
RWxlbWVudE5vZGUoKSkKKyAgICBpZiAoIWVsZW1lbnQpCiAgICAgICAgIHJldHVybiBJbnRSZWN0
KCk7CiAKLSAgICByZXR1cm4gdG9FbGVtZW50KG5vZGUpLT5jbGllbnRSZWN0KCk7CisgICAgcmV0
dXJuIGVsZW1lbnQtPmNsaWVudFJlY3QoKTsKIH0KIAogUGFzc1JlZlB0cjxXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyPiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpjcmVhdGUoUGFzc1JlZlB0
cjxXZWJQYWdlPiBwYWdlKQpAQCAtNzgsMzggKzc4LDM4IEBAIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6On5XZWJWaWRlb0Z1bGwKICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5yZW1vdmVNZXNz
YWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Om1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLWJvb2wgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6c3VwcG9ydHNGdWxsc2NyZWVuKGNvbnN0IE5vZGUqIG5vZGUpIGNvbnN0
Citib29sIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnN1cHBvcnRzVmlkZW9GdWxsc2NyZWVu
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gU2V0dGluZ3M6OmF2S2l0RW5hYmxlZCgpICYmIGlzSFRN
TFZpZGVvRWxlbWVudChub2RlKTsKKyAgICByZXR1cm4gU2V0dGluZ3M6OmF2S2l0RW5hYmxlZCgp
OwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVudGVyRnVsbHNjcmVlbkZv
ck5vZGUoTm9kZSogbm9kZSkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW50ZXJW
aWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoSFRNTFZpZGVvRWxlbWVudCogdmlkZW9FbGVt
ZW50KQogewotICAgIEFTU0VSVChub2RlKTsKLSAgICBtX25vZGUgPSBub2RlOworICAgIG1fdmlk
ZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50OworCiAgICAgbV90YXJnZXRJc0Z1bGxzY3JlZW4gPSB0
cnVlOwogCiAgICAgaWYgKG1faXNBbmltYXRpbmcpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1f
aXNBbmltYXRpbmcgPSB0cnVlOwotICAgIHNldE1lZGlhRWxlbWVudCh0b0hUTUxNZWRpYUVsZW1l
bnQobm9kZSkpOworICAgIHNldFZpZGVvRWxlbWVudCh2aWRlb0VsZW1lbnQpOwogCiAgICAgbV9s
YXllckhvc3RpbmdDb250ZXh0ID0gTGF5ZXJIb3N0aW5nQ29udGV4dDo6Y3JlYXRlRm9yRXh0ZXJu
YWxIb3N0aW5nUHJvY2VzcygpOwogICAgIAotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpTZXR1cEZ1bGxzY3JlZW5XaXRoSUQobV9sYXll
ckhvc3RpbmdDb250ZXh0LT5jb250ZXh0SUQoKSwgY2xpZW50UmVjdEZvck5vZGUobm9kZSkpLCBt
X3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eTo6U2V0dXBGdWxsc2NyZWVuV2l0aElEKG1fbGF5ZXJIb3N0aW5n
Q29udGV4dC0+Y29udGV4dElEKCksIGNsaWVudFJlY3RGb3JFbGVtZW50KHZpZGVvRWxlbWVudCkp
LCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
OjpleGl0RnVsbHNjcmVlbkZvck5vZGUoTm9kZSogbm9kZSkKK3ZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcjo6ZXhpdFZpZGVvRnVsbHNjcmVlbigpCiB7Ci0gICAgbV9ub2RlLmNsZWFyKCk7
CisgICAgUmVmUHRyPEhUTUxWaWRlb0VsZW1lbnQ+IHZpZGVvRWxlbWVudCA9IG1fdmlkZW9FbGVt
ZW50LnJlbGVhc2UoKTsKICAgICBtX3RhcmdldElzRnVsbHNjcmVlbiA9IGZhbHNlOwogCiAgICAg
aWYgKG1faXNBbmltYXRpbmcpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1faXNBbmltYXRpbmcg
PSB0cnVlOwotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpFeGl0RnVsbHNjcmVlbihjbGllbnRSZWN0Rm9yTm9kZShub2RlKSksIG1fcGFn
ZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjpFeGl0RnVsbHNjcmVlbihjbGllbnRSZWN0Rm9yRWxlbWVudCh2aWRl
b0VsZW1lbnQuZ2V0KCkpKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKIHZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6c2V0RHVyYXRpb24oZG91YmxlIGR1cmF0aW9uKQpAQCAtMTkxLDkg
KzE5MSw5IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRW50ZXIKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgLy8gZXhpdCBmdWxsc2NyZWVuIG5vdyBpZiBpdCB3YXMgcHJldmlv
dXNseSByZXF1ZXN0ZWQgZHVyaW5nIGFuIGFuaW1hdGlvbi4KLSAgICBfX2Jsb2NrIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKKyAgICBf
X2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gcHJvdGVj
dCh0aGlzKTsKICAgICBXZWJUaHJlYWRSdW4oXiB7Ci0gICAgICAgIGV4aXRGdWxsc2NyZWVuRm9y
Tm9kZShtX25vZGUuZ2V0KCkpOworICAgICAgICBleGl0VmlkZW9GdWxsc2NyZWVuKCk7CiAgICAg
ICAgIHByb3RlY3QuY2xlYXIoKTsKICAgICB9KTsKIH0KQEAgLTIwMSw3ICsyMDEsNyBAQCB2b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZEVudGVyCiB2b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6OmRpZEV4aXRGdWxsc2NyZWVuKCkKIHsKICAgICBzZXRWaWRlb0Z1bGxzY3Jl
ZW5MYXllcihuaWwpOwotICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
TWVkaWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOworICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBwcm90ZWN0KHRoaXMpOwogCiAgICAgZGlzcGF0
Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKICAgICAgICAgbV9sYXllckhv
c3RpbmdDb250ZXh0LT5zZXRSb290TGF5ZXIobnVsbHB0cik7CkBAIC0yMTYsMTUgKzIxNiwxNSBA
QCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZENsZWFuCiAgICAgbV9pc0FuaW1h
dGluZyA9IGZhbHNlOwogICAgIG1faXNGdWxsc2NyZWVuID0gZmFsc2U7CiAgICAgCi0gICAgc2V0
TWVkaWFFbGVtZW50KG51bGxwdHIpOworICAgIHNldFZpZGVvRWxlbWVudChudWxscHRyKTsKIAog
ICAgIGlmICghbV90YXJnZXRJc0Z1bGxzY3JlZW4pCiAgICAgICAgIHJldHVybjsKIAogICAgIC8v
IGVudGVyIGZ1bGxzY3JlZW4gbm93IGlmIGl0IHdhcyBwcmV2aW91c2x5IHJlcXVlc3RlZCBkdXJp
bmcgYW4gYW5pbWF0aW9uLgotICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsTWVkaWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOworICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBwcm90ZWN0KHRoaXMpOwogICAgIFdlYlRo
cmVhZFJ1biheIHsKLSAgICAgICAgZW50ZXJGdWxsc2NyZWVuRm9yTm9kZShtX25vZGUuZ2V0KCkp
OworICAgICAgICBlbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChtX3ZpZGVvRWxl
bWVudC5nZXQoKSk7CiAgICAgICAgIHByb3RlY3QuY2xlYXIoKTsKICAgICB9KTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MzE4MikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDE0LTA5LTAyICBNYWNp
ZWogU3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CisKKyAgICAgICAgQ2xlYW4gdXAgbmFtaW5n
IGZvciBhbmQgc2xpZ2h0bHkgcmVmYWN0b3IgbGVnYWN5IHZpZGVvIGZ1bGxzY3JlZW4gc3VwcG9y
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2NDQ2
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgS2V5IGNo
YW5nZXM6CisgICAgICAgIHN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUoTm9kZSopIC0tPiBzdXBw
b3J0c1ZpZGVvRnVsbHNjcmVlbigpCisgICAgICAgIGVudGVyRnVsbHNjcmVlbkZvck5vZGUoTm9k
ZSopIC0tPiBlbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChIVE1MVmlkZW9FbGVt
ZW50KikKKyAgICAgICAgZXhpdEZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqKSAtLT4gZXhpdFZpZGVv
RnVsbHNjcmVlbigpCisgICAgICAgIAorICAgICAgICBUaGUgb2xkIHZlcnNpb25zIGhhZCB1bm5l
Y2Vzc2FyeSBwYXJhbWV0ZXJzLCBkaWQgbm90IGNsZWFybHkgZGlzdGluZ3Vpc2ggdGhlaXIgcHVy
cG9zZQorICAgICAgICBmcm9tIGVudGVyRnVsbHNjcmVlbkZvckVsZW1lbnQgYW5kIGZyaWVuZHMs
IGFuZCB3cm9uZ2x5IGNsYWltZWQgZ2VuZXJhbGl0eSB0byBhbGwgTm9kZXMuCisgICAgICAgIEFs
c28gY2hhbmdlZCBtYW55IG90aGVyIHBsYWNlcyB0byB1c2UgSFRNTFZpZGVvRWxlbWVudCogaW5z
dGVhZCBvZiBOb2RlKiBvciAKKyAgICAgICAgSFRNTE1lZGlhRWxlbWVudCogd2hlbiB0aGV5IHdl
cmUgaW4gZmFjdCBvbmx5IHVzZWQgZm9yIHZpZGVvIGVsZW1lbnRzIGFuZCB3b3VsZCBvbmx5Cisg
ICAgICAgIHdvcmsgZm9yIHN1Y2guCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQuaDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW06
CisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OnN1cHBvcnRzVmlkZW9GdWxsc2NyZWVuKTogQWRq
dXN0IGZvciBtYWluIHJlZmFjdG9yaW5nLgorICAgICAgICBBbHNvIG5vIG1vcmUgbmVlZCB0byBj
aGVjayBmb3IgdmlkZW8gZWxlbWVudG5lc3MuCisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OmVu
dGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KTogQWRqdXN0IGZvciBtYWluIHJlZmFj
dG9yaW5nLgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50OjpleGl0VmlkZW9GdWxsc2NyZWVuKTog
ZGl0dG8KKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAgICgtW1dlYlZpZXcg
X2VudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50Ol0pOiBBZGp1c3QgZm9yIG1haW4K
KyAgICAgICAgcmVmYWN0b3JpbmcuCisgICAgICAgICgtW1dlYlZpZXcgX2V4aXRWaWRlb0Z1bGxz
Y3JlZW5dKTogZGl0dG8KKyAgICAgICAgKC1bV2ViVmlldyBfY2xvc2VdKTogZGl0dG8KKyAgICAg
ICAgKiBXZWJWaWV3L1dlYlZpZXdJbnRlcm5hbC5oOgorCiAyMDE0LTA4LTMxICBUaW0gSG9ydG9u
ICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSB1bm5lY2Vzc2Fy
eSAoYW5kIHVubmVjZXNzYXJpbHkgaU9TLXNwZWNpZmljKSBzZXRTdHJva2VBbmRGaWxsQ29sb3IK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5oCShyZXZpc2lvbiAxNzMxODIpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTgwLDkgKzE4MCw5
IEBAIHB1YmxpYzoKICAgICB9CiAKICNpZiBFTkFCTEUoVklERU8pCi0gICAgdmlydHVhbCBib29s
IHN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUoY29uc3QgV2ViQ29yZTo6Tm9kZSopIG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKFdlYkNvcmU6Ok5vZGUq
KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxzY3JlZW5Gb3JOb2RlKFdlYkNv
cmU6Ok5vZGUqKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNWaWRlb0Z1bGxz
Y3JlZW4oKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJWaWRlb0Z1bGxzY3JlZW5G
b3JWaWRlb0VsZW1lbnQoV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCopIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCBleGl0VmlkZW9GdWxsc2NyZWVuKCkgb3ZlcnJpZGU7CiAjZW5kaWYKICAg
ICAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCShyZXZpc2lvbiAxNzMx
ODIpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTk0MCwyNiArOTQwLDI2IEBAIHZvaWQgV2ViQ2hyb21lQ2xp
ZW50OjpzY2hlZHVsZUNvbXBvc2l0aW4KIAogI2lmIEVOQUJMRShWSURFTykKIAotYm9vbCBXZWJD
aHJvbWVDbGllbnQ6OnN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUoY29uc3QgTm9kZSogbm9kZSkK
K2Jvb2wgV2ViQ2hyb21lQ2xpZW50OjpzdXBwb3J0c1ZpZGVvRnVsbHNjcmVlbigpCiB7CiAjaWYg
UExBVEZPUk0oSU9TKQogICAgIGlmICghU2V0dGluZ3M6OmF2S2l0RW5hYmxlZCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKLSAgICByZXR1cm4gaXNIVE1MVmlkZW9FbGVtZW50KG5v
ZGUpOworICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFdlYkNocm9tZUNsaWVudDo6ZW50ZXJG
dWxsc2NyZWVuRm9yTm9kZShOb2RlKiBub2RlKQordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmVudGVy
VmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvRWxl
bWVudCkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgW21fd2ViVmll
dyBfZW50ZXJGdWxsc2NyZWVuRm9yTm9kZTpub2RlXTsKKyAgICBbbV93ZWJWaWV3IF9lbnRlclZp
ZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudDp2aWRlb0VsZW1lbnRdOwogICAgIEVORF9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKLXZvaWQgV2ViQ2hyb21lQ2xpZW50OjpleGl0RnVsbHNj
cmVlbkZvck5vZGUoTm9kZSopCit2b2lkIFdlYkNocm9tZUNsaWVudDo6ZXhpdFZpZGVvRnVsbHNj
cmVlbigpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIFttX3dlYlZp
ZXcgX2V4aXRGdWxsc2NyZWVuXTsKKyAgICBbbV93ZWJWaWV3IF9leGl0VmlkZW9GdWxsc2NyZWVu
XTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOyAgICAKIH0KIApJbmRleDogU291cmNl
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkocmV2aXNpb24gMTczMTgyKQorKysgU291cmNlL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsOCArMTM0
LDggQEAKICNpbXBvcnQgPFdlYkNvcmUvR0NDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L0dlb2xvY2F0aW9uQ29udHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9HZW9sb2NhdGlvbkVy
cm9yLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0hUTUxNZWRpYUVsZW1lbnQuaD4KICNpbXBvcnQgPFdl
YkNvcmUvSFRNTE5hbWVzLmg+CisjaW1wb3J0IDxXZWJDb3JlL0hUTUxWaWRlb0VsZW1lbnQuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvSGlzdG9yeUNvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUv
SGlzdG9yeUl0ZW0uaD4KICNpbXBvcnQgPFdlYkNvcmUvSWNvbkRhdGFiYXNlLmg+CkBAIC0xNjk5
LDcgKzE2OTksNyBAQCAtICh2b2lkKV9jbG9zZQogICAgIH0KIAogI2lmIEVOQUJMRShWSURFTykg
JiYgIVBMQVRGT1JNKElPUykKLSAgICBbc2VsZiBfZXhpdEZ1bGxzY3JlZW5dOworICAgIFtzZWxm
IF9leGl0VmlkZW9GdWxsc2NyZWVuXTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TKQpAQCAt
ODM4OCwyOCArODM4OCwyNSBAQCAtICh2b2lkKV9zY2hlZHVsZUxheWVyRmx1c2hGb3JQZW5kaW5n
VGlsCiAjZW5kaWYKIAogI2lmIEVOQUJMRShWSURFTykKLS0gKHZvaWQpX2VudGVyRnVsbHNjcmVl
bkZvck5vZGU6KFdlYkNvcmU6Ok5vZGUqKW5vZGUKKy0gKHZvaWQpX2VudGVyVmlkZW9GdWxsc2Ny
ZWVuRm9yVmlkZW9FbGVtZW50OihXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50Kil2aWRlb0VsZW1l
bnQKIHsKLSAgICBBU1NFUlQoaXNIVE1MVmlkZW9FbGVtZW50KG5vZGUpKTsKLSAgICBIVE1MTWVk
aWFFbGVtZW50KiB2aWRlb0VsZW1lbnQgPSB0b0hUTUxNZWRpYUVsZW1lbnQobm9kZSk7Ci0KICAg
ICBpZiAoX3ByaXZhdGUtPmZ1bGxzY3JlZW5Db250cm9sbGVyKSB7Ci0gICAgICAgIGlmIChbX3By
aXZhdGUtPmZ1bGxzY3JlZW5Db250cm9sbGVyIG1lZGlhRWxlbWVudF0gPT0gdmlkZW9FbGVtZW50
KSB7CisgICAgICAgIGlmIChbX3ByaXZhdGUtPmZ1bGxzY3JlZW5Db250cm9sbGVyIHZpZGVvRWxl
bWVudF0gPT0gdmlkZW9FbGVtZW50KSB7CiAgICAgICAgICAgICAvLyBUaGUgYmFja2VuZCBtYXkg
anVzdCB3YXJuIHVzIHRoYXQgdGhlIHVuZGVybGF5aW5nIHBsYWZ0b3JtTW92aWUoKQogICAgICAg
ICAgICAgLy8gaGFzIGNoYW5nZWQuIEp1c3QgZm9yY2UgYW4gdXBkYXRlLgotICAgICAgICAgICAg
W19wcml2YXRlLT5mdWxsc2NyZWVuQ29udHJvbGxlciBzZXRNZWRpYUVsZW1lbnQ6dmlkZW9FbGVt
ZW50XTsKKyAgICAgICAgICAgIFtfcHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRyb2xsZXIgc2V0Vmlk
ZW9FbGVtZW50OnZpZGVvRWxlbWVudF07CiAgICAgICAgICAgICByZXR1cm47IC8vIE5vIG1vcmUg
dG8gZG8uCiAgICAgICAgIH0KIAotICAgICAgICAvLyBGaXJzdCBleGl0IEZ1bGxzY3JlZW4gZm9y
IHRoZSBvbGQgbWVkaWFFbGVtZW50LgotICAgICAgICBbX3ByaXZhdGUtPmZ1bGxzY3JlZW5Db250
cm9sbGVyIG1lZGlhRWxlbWVudF0tPmV4aXRGdWxsc2NyZWVuKCk7CisgICAgICAgIC8vIEZpcnN0
IGV4aXQgRnVsbHNjcmVlbiBmb3IgdGhlIG9sZCB2aWRlb0VsZW1lbnQuCisgICAgICAgIFtfcHJp
dmF0ZS0+ZnVsbHNjcmVlbkNvbnRyb2xsZXIgdmlkZW9FbGVtZW50XS0+ZXhpdEZ1bGxzY3JlZW4o
KTsKICAgICAgICAgLy8gVGhpcyBwcmV2aW91cyBjYWxsIGhhcyB0byB0cmlnZ2VyIF9leGl0RnVs
bHNjcmVlbiwKICAgICAgICAgLy8gd2hpY2ggaGFzIHRvIGNsZWFyIF9wcml2YXRlLT5mdWxsc2Ny
ZWVuQ29udHJvbGxlci4KICAgICAgICAgQVNTRVJUKCFfcHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRy
b2xsZXIpOwogICAgIH0KICAgICBpZiAoIV9wcml2YXRlLT5mdWxsc2NyZWVuQ29udHJvbGxlcikg
ewogICAgICAgICBfcHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRyb2xsZXIgPSBbW1dlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXIgYWxsb2NdIGluaXRdOwotICAgICAgICBbX3ByaXZhdGUtPmZ1bGxz
Y3JlZW5Db250cm9sbGVyIHNldE1lZGlhRWxlbWVudDp2aWRlb0VsZW1lbnRdOworICAgICAgICBb
X3ByaXZhdGUtPmZ1bGxzY3JlZW5Db250cm9sbGVyIHNldFZpZGVvRWxlbWVudDp2aWRlb0VsZW1l
bnRdOwogI2lmIFBMQVRGT1JNKElPUykKICAgICAgICAgW19wcml2YXRlLT5mdWxsc2NyZWVuQ29u
dHJvbGxlciBlbnRlckZ1bGxzY3JlZW46KFVJVmlldyAqKVtbW3NlbGYgd2luZG93XSBob3N0TGF5
ZXJdIGRlbGVnYXRlXV07CiAjZWxzZQpAQCAtODQxNywxMCArODQxNCwxMCBAQCAtICh2b2lkKV9l
bnRlckZ1bGxzY3JlZW5Gb3JOb2RlOihXZWJDb3JlCiAjZW5kaWYKICAgICB9CiAgICAgZWxzZQot
ICAgICAgICBbX3ByaXZhdGUtPmZ1bGxzY3JlZW5Db250cm9sbGVyIHNldE1lZGlhRWxlbWVudDp2
aWRlb0VsZW1lbnRdOworICAgICAgICBbX3ByaXZhdGUtPmZ1bGxzY3JlZW5Db250cm9sbGVyIHNl
dFZpZGVvRWxlbWVudDp2aWRlb0VsZW1lbnRdOwogfQogCi0tICh2b2lkKV9leGl0RnVsbHNjcmVl
bgorLSAodm9pZClfZXhpdFZpZGVvRnVsbHNjcmVlbgogewogICAgIGlmICghX3ByaXZhdGUtPmZ1
bGxzY3JlZW5Db250cm9sbGVyKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViS2l0
L21hYy9XZWJWaWV3L1dlYlZpZXdJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViVmlld0ludGVybmFsLmgJKHJldmlzaW9uIDE3MzE4MikKKysrIFNv
dXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0ludGVybmFsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUzLDcgKzUzLDcgQEAgY2xhc3MgVVJMOwogY2xhc3MgS2V5Ym9hcmRFdmVudDsKIGNsYXNz
IFBhZ2U7CiBjbGFzcyBSZW5kZXJCb3g7Ci1jbGFzcyBOb2RlOworY2xhc3MgSFRNTFZpZGVvRWxl
bWVudDsKIHN0cnVjdCBEaWN0YXRpb25BbHRlcm5hdGl2ZTsKIH0KICNlbmRpZgpAQCAtMjMzLDgg
KzIzMyw4IEBAIEBpbnRlcmZhY2UgV2ViVmlldyAoV2ViVmlld090aGVySW50ZXJuYWwKIC0gKHZv
aWQpX3ByZWZlcmVuY2VzQ2hhbmdlZDooV2ViUHJlZmVyZW5jZXMgKilwcmVmZXJlbmNlczsKIAog
I2lmIEVOQUJMRShWSURFTykgJiYgZGVmaW5lZChfX2NwbHVzcGx1cykKLS0gKHZvaWQpX2VudGVy
RnVsbHNjcmVlbkZvck5vZGU6KFdlYkNvcmU6Ok5vZGUqKW5vZGU7Ci0tICh2b2lkKV9leGl0RnVs
bHNjcmVlbjsKKy0gKHZvaWQpX2VudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50OihX
ZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50Kil2aWRlb0VsZW1lbnQ7CistICh2b2lkKV9leGl0Vmlk
ZW9GdWxsc2NyZWVuOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpICYmICFQ
TEFURk9STShJT1MpICYmIGRlZmluZWQoX19jcGx1c3BsdXMpCkluZGV4OiBTb3VyY2UvV2ViS2l0
L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9n
CShyZXZpc2lvbiAxNzMxOTYpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSw1MyBAQAorMjAxNC0wOS0wMiAgTWFjaWVqIFN0YWNob3dpYWsg
IDxtanNAYXBwbGUuY29tPgorCisgICAgICAgIENsZWFuIHVwIG5hbWluZyBmb3IgYW5kIHNsaWdo
dGx5IHJlZmFjdG9yIGxlZ2FjeSB2aWRlbyBmdWxsc2NyZWVuIHN1cHBvcnQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjQ0NgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEtleSBjaGFuZ2VzOgorICAgICAg
ICBzdXBwb3J0c0Z1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqKSAtLT4gc3VwcG9ydHNWaWRlb0Z1bGxz
Y3JlZW4oKQorICAgICAgICBlbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqKSAtLT4gZW50ZXJW
aWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoSFRNTFZpZGVvRWxlbWVudCopCisgICAgICAg
IGV4aXRGdWxsc2NyZWVuRm9yTm9kZShOb2RlKikgLS0+IGV4aXRWaWRlb0Z1bGxzY3JlZW4oKQor
ICAgICAgICAKKyAgICAgICAgVGhlIG9sZCB2ZXJzaW9ucyBoYWQgdW5uZWNlc3NhcnkgcGFyYW1l
dGVycywgZGlkIG5vdCBjbGVhcmx5IGRpc3Rpbmd1aXNoIHRoZWlyIHB1cnBvc2UKKyAgICAgICAg
ZnJvbSBlbnRlckZ1bGxzY3JlZW5Gb3JFbGVtZW50IGFuZCBmcmllbmRzLCBhbmQgd3JvbmdseSBj
bGFpbWVkIGdlbmVyYWxpdHkgdG8gYWxsIE5vZGVzLgorICAgICAgICBBbHNvIGNoYW5nZWQgbWFu
eSBvdGhlciBwbGFjZXMgdG8gdXNlIEhUTUxWaWRlb0VsZW1lbnQqIGluc3RlYWQgb2YgTm9kZSog
b3IgCisgICAgICAgIEhUTUxNZWRpYUVsZW1lbnQqIHdoZW4gdGhleSB3ZXJlIGluIGZhY3Qgb25s
eSB1c2VkIGZvciB2aWRlbyBlbGVtZW50cyBhbmQgd291bGQgb25seQorICAgICAgICB3b3JrIGZv
ciBzdWNoLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoK
KyAgICAgICAgKFdlYkNocm9tZUNsaWVudDo6c3VwcG9ydHNWaWRlb0Z1bGxzY3JlZW4pOiBBZGp1
c3QgZm9yIHRoZQorICAgICAgICBtYWluIHJlZmFjdG9yaW5nLgorICAgICAgICAoV2ViQ2hyb21l
Q2xpZW50OjplbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudCk6IGRpdHRvCisgICAg
ICAgIChXZWJDaHJvbWVDbGllbnQ6OmV4aXRWaWRlb0Z1bGxzY3JlZW4pOiBkaXR0bworICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oOgorICAgICAgICAqIFdlYlZpZXcu
Y3BwOgorICAgICAgICAoV2ViVmlldzo6ZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1l
bnQpOiBBZGp1c3QgZm9yIHRoZSAKKyAgICAgICAgbWFpbiByZWZhY3RvcmluZy4KKyAgICAgICAg
KFdlYlZpZXc6OmV4aXRWaWRlb0Z1bGxzY3JlZW4pOiBkaXR0by4KKyAgICAgICAgKiBXZWJWaWV3
Lmg6CisgICAgICAgICogRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci5jcHA6IFVzZSB2aWRlbyBl
bGVtZW50cywgbm90IG1lZGlhIGVsZW1lbnRzIHRocm91Z2hvdXQKKyAgICAgICAgKEZ1bGxzY3Jl
ZW5WaWRlb0NvbnRyb2xsZXI6OkxheWVyQ2xpZW50OjpwbGF0Zm9ybUNBTGF5ZXJMYXlvdXRTdWJs
YXllcnNPZkxheWVyKToKKyAgICAgICAgKEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXI6OnNldFZp
ZGVvRWxlbWVudCk6CisgICAgICAgIChGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyOjplbnRlckZ1
bGxzY3JlZW4pOgorICAgICAgICAoRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlcjo6ZXhpdEZ1bGxz
Y3JlZW4pOgorICAgICAgICAoRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlcjo6Y2FuUGxheSk6Cisg
ICAgICAgIChGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyOjpwbGF5KToKKyAgICAgICAgKEZ1bGxz
Y3JlZW5WaWRlb0NvbnRyb2xsZXI6OnBhdXNlKToKKyAgICAgICAgKEZ1bGxzY3JlZW5WaWRlb0Nv
bnRyb2xsZXI6OnZvbHVtZSk6CisgICAgICAgIChGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyOjpz
ZXRWb2x1bWUpOgorICAgICAgICAoRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlcjo6Y3VycmVudFRp
bWUpOgorICAgICAgICAoRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlcjo6c2V0Q3VycmVudFRpbWUp
OgorICAgICAgICAoRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlcjo6ZHVyYXRpb24pOgorICAgICAg
ICAoRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlcjo6YmVnaW5TY3J1YmJpbmcpOgorICAgICAgICAo
RnVsbHNjcmVlblZpZGVvQ29udHJvbGxlcjo6ZW5kU2NydWJiaW5nKToKKyAgICAgICAgKEZ1bGxz
Y3JlZW5WaWRlb0NvbnRyb2xsZXI6Om9uQ2hhcik6CisgICAgICAgIChGdWxsc2NyZWVuVmlkZW9D
b250cm9sbGVyOjpvbktleURvd24pOgorICAgICAgICAoRnVsbHNjcmVlblZpZGVvQ29udHJvbGxl
cjo6b25Nb3VzZVVwKToKKyAgICAgICAgKiBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyLmg6Cisg
ICAgICAgIChGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyOjp2aWRlb0VsZW1lbnQpOgorCiAyMDE0
LTA4LTI2ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFtX
aW5dIFdlYktpdCBJREwgaW5jb3JyZWN0bHkgcGFzc2VzIEhXTkQgYXMgT0xFX0hBTkRMRQpJbmRl
eDogU291cmNlL1dlYktpdC93aW4vRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci5jcHAJ
KHJldmlzaW9uIDE3MzE4MikKKysrIFNvdXJjZS9XZWJLaXQvd2luL0Z1bGxzY3JlZW5WaWRlb0Nv
bnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDUsMTggKzIwNSwxOCBAQCB2b2lkIEZ1
bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXI6OkxheWVyQ2xpCiB7CiAgICAgQVNTRVJUX0FSRyhsYXll
ciwgbGF5ZXIgPT0gbV9wYXJlbnQtPm1fcm9vdENoaWxkKTsKIAotICAgIEhUTUxNZWRpYUVsZW1l
bnQqIG1lZGlhRWxlbWVudCA9IG1fcGFyZW50LT5tX21lZGlhRWxlbWVudC5nZXQoKTsKLSAgICBp
ZiAoIW1lZGlhRWxlbWVudCkKKyAgICBIVE1MVmlkZW9FbGVtZW50KiB2aWRlb0VsZW1lbnQgPSBt
X3BhcmVudC0+bV92aWRlb0VsZW1lbnQuZ2V0KCk7CisgICAgaWYgKCF2aWRlb0VsZW1lbnQpCiAg
ICAgICAgIHJldHVybjsKIAogCi0gICAgUGxhdGZvcm1DQUxheWVyKiB2aWRlb0xheWVyID0gUGxh
dGZvcm1DQUxheWVyOjpwbGF0Zm9ybUNBTGF5ZXIobWVkaWFFbGVtZW50LT5wbGF0Zm9ybUxheWVy
KCkpOworICAgIFBsYXRmb3JtQ0FMYXllciogdmlkZW9MYXllciA9IFBsYXRmb3JtQ0FMYXllcjo6
cGxhdGZvcm1DQUxheWVyKHZpZGVvRWxlbWVudC0+cGxhdGZvcm1MYXllcigpKTsKICAgICBpZiAo
IXZpZGVvTGF5ZXIgfHwgdmlkZW9MYXllci0+c3VwZXJsYXllcigpICE9IGxheWVyKQogICAgICAg
ICByZXR1cm47CiAKICAgICBGbG9hdFJlY3QgbGF5ZXJCb3VuZHMgPSBsYXllci0+Ym91bmRzKCk7
CiAKLSAgICBGbG9hdFNpemUgdmlkZW9TaXplID0gbWVkaWFFbGVtZW50LT5wbGF5ZXIoKS0+bmF0
dXJhbFNpemUoKTsKKyAgICBGbG9hdFNpemUgdmlkZW9TaXplID0gdmlkZW9FbGVtZW50LT5wbGF5
ZXIoKS0+bmF0dXJhbFNpemUoKTsKICAgICBmbG9hdCBzY2FsZUZhY3RvcjsKICAgICBpZiAodmlk
ZW9TaXplLmFzcGVjdFJhdGlvKCkgPiBsYXllckJvdW5kcy5zaXplKCkuYXNwZWN0UmF0aW8oKSkK
ICAgICAgICAgc2NhbGVGYWN0b3IgPSBsYXllckJvdW5kcy53aWR0aCgpIC8gdmlkZW9TaXplLndp
ZHRoKCk7CkBAIC0yNTcsMTMgKzI1NywxMyBAQCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyOjp+
RnVsbHNjcmVlblZpCiAgICAgbV9yb290Q2hpbGQtPnNldE93bmVyKDApOwogfQogCi12b2lkIEZ1
bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXI6OnNldE1lZGlhRWxlbWVudChIVE1MTWVkaWFFbGVtZW50
KiBtZWRpYUVsZW1lbnQpCit2b2lkIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXI6OnNldFZpZGVv
RWxlbWVudChIVE1MVmlkZW9FbGVtZW50KiB2aWRlb0VsZW1lbnQpCiB7Ci0gICAgaWYgKG1lZGlh
RWxlbWVudCA9PSBtX21lZGlhRWxlbWVudCkKKyAgICBpZiAodmlkZW9FbGVtZW50ID09IG1fdmlk
ZW9FbGVtZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX21lZGlhRWxlbWVudCA9IG1lZGlh
RWxlbWVudDsKLSAgICBpZiAoIW1fbWVkaWFFbGVtZW50KSB7CisgICAgbV92aWRlb0VsZW1lbnQg
PSB2aWRlb0VsZW1lbnQ7CisgICAgaWYgKCFtX3ZpZGVvRWxlbWVudCkgewogICAgICAgICAvLyBD
YW4ndCBkbyBmdWxsLXNjcmVlbiwganVzdCBnZXQgb3V0CiAgICAgICAgIGV4aXRGdWxsc2NyZWVu
KCk7CiAgICAgfQpAQCAtMjcxLDE3ICsyNzEsMTcgQEAgdm9pZCBGdWxsc2NyZWVuVmlkZW9Db250
cm9sbGVyOjpzZXRNZWRpYQogCiB2b2lkIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXI6OmVudGVy
RnVsbHNjcmVlbigpCiB7Ci0gICAgaWYgKCFtX21lZGlhRWxlbWVudCkKKyAgICBpZiAoIW1fdmlk
ZW9FbGVtZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBXZWJWaWV3KiB3ZWJWaWV3ID0ga2l0
KG1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSk7CisgICAgV2ViVmlldyogd2ViVmll
dyA9IGtpdChtX3ZpZGVvRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCkpOwogICAgIEhXTkQgcGFy
ZW50SHduZCA9IHdlYlZpZXcgPyB3ZWJWaWV3LT52aWV3V2luZG93KCkgOiAwOwogCiAgICAgbV9m
dWxsc2NyZWVuV2luZG93LT5jcmVhdGVXaW5kb3cocGFyZW50SHduZCk7CiAgICAgOjpTaG93V2lu
ZG93KG1fZnVsbHNjcmVlbldpbmRvdy0+aHduZCgpLCBTV19TSE9XKTsKICAgICBtX2Z1bGxzY3Jl
ZW5XaW5kb3ctPnNldFJvb3RDaGlsZExheWVyKG1fcm9vdENoaWxkKTsKIAotICAgIFBsYXRmb3Jt
Q0FMYXllciogdmlkZW9MYXllciA9IFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKG1f
bWVkaWFFbGVtZW50LT5wbGF0Zm9ybUxheWVyKCkpOworICAgIFBsYXRmb3JtQ0FMYXllciogdmlk
ZW9MYXllciA9IFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKG1fdmlkZW9FbGVtZW50
LT5wbGF0Zm9ybUxheWVyKCkpOwogICAgIG1fcm9vdENoaWxkLT5hcHBlbmRTdWJsYXllcih2aWRl
b0xheWVyKTsKICAgICBtX3Jvb3RDaGlsZC0+c2V0TmVlZHNMYXlvdXQoKTsKICAgICBtX3Jvb3RD
aGlsZC0+c2V0R2VvbWV0cnlGbGlwcGVkKDEpOwpAQCAtMzA0LDcgKzMwNCw3IEBAIHZvaWQgRnVs
bHNjcmVlblZpZGVvQ29udHJvbGxlcjo6ZXhpdEZ1bGwKICAgICBBU1NFUlQoIUlzV2luZG93KG1f
aHVkV2luZG93KSk7CiAgICAgbV9odWRXaW5kb3cgPSAwOwogCi0gICAgLy8gV2UgcHJldmlvdXNs
eSByaXBwZWQgdGhlIG1lZGlhRWxlbWVudCdzIHBsYXRmb3JtIGxheWVyIG91dAorICAgIC8vIFdl
IHByZXZpb3VzbHkgcmlwcGVkIHRoZSB2aWRlb0VsZW1lbnQncyBwbGF0Zm9ybSBsYXllciBvdXQK
ICAgICAvLyBvZiBpdHMgb3JnaW5pYWwgbGF5ZXIgdHJlZSB0byBkaXNwbGF5IGl0IGluIG91ciBm
dWxsc2NyZWVuCiAgICAgLy8gd2luZG93LiAgTm93LCB3ZSBuZWVkIHRvIGdldCB0aGUgbGF5ZXIg
YmFjayBpbiBpdHMgb3JpZ2luYWwKICAgICAvLyB0cmVlLgpAQCAtMzEyLDY2ICszMTIsNjYgQEAg
dm9pZCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyOjpleGl0RnVsbAogICAgIC8vIEFzIGEgc2lk
ZSBlZmZlY3Qgb2Ygc2V0dGluZyB0aGUgcGxheWVyIHRvIGludmlzaWJsZS92aXNpYmxlLAogICAg
IC8vIHRoZSBwbGF5ZXIncyBsYXllciB3aWxsIGJlIHJlY3JlYXRlZCwgYW5kIHdpbGwgYmUgcGlj
a2VkIHVwIAogICAgIC8vIHRoZSBuZXh0IHRpbWUgdGhlIGxheWVyIHRyZWUgaXMgc3luY2hlZC4K
LSAgICBtX21lZGlhRWxlbWVudC0+cGxheWVyKCktPnNldFZpc2libGUoMCk7Ci0gICAgbV9tZWRp
YUVsZW1lbnQtPnBsYXllcigpLT5zZXRWaXNpYmxlKDEpOworICAgIG1fdmlkZW9FbGVtZW50LT5w
bGF5ZXIoKS0+c2V0VmlzaWJsZSgwKTsKKyAgICBtX3ZpZGVvRWxlbWVudC0+cGxheWVyKCktPnNl
dFZpc2libGUoMSk7CiB9CiAKIGJvb2wgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlcjo6Y2FuUGxh
eSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50ICYmIG1fbWVkaWFFbGVtZW50
LT5jYW5QbGF5KCk7CisgICAgcmV0dXJuIG1fdmlkZW9FbGVtZW50ICYmIG1fdmlkZW9FbGVtZW50
LT5jYW5QbGF5KCk7CiB9CiAKIHZvaWQgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlcjo6cGxheSgp
CiB7Ci0gICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICBtX21lZGlhRWxlbWVudC0+cGxh
eSgpOworICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKKyAgICAgICAgbV92aWRlb0VsZW1lbnQtPnBs
YXkoKTsKIH0KIAogdm9pZCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyOjpwYXVzZSgpCiB7Ci0g
ICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICBtX21lZGlhRWxlbWVudC0+cGF1c2UoKTsK
KyAgICBpZiAobV92aWRlb0VsZW1lbnQpCisgICAgICAgIG1fdmlkZW9FbGVtZW50LT5wYXVzZSgp
OwogfQogCiBmbG9hdCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyOjp2b2x1bWUoKSBjb25zdAog
ewotICAgIHJldHVybiBtX21lZGlhRWxlbWVudCA/IG1fbWVkaWFFbGVtZW50LT52b2x1bWUoKSA6
IDA7CisgICAgcmV0dXJuIG1fdmlkZW9FbGVtZW50ID8gbV92aWRlb0VsZW1lbnQtPnZvbHVtZSgp
IDogMDsKIH0KIAogdm9pZCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyOjpzZXRWb2x1bWUoZmxv
YXQgdm9sdW1lKQogewotICAgIGlmIChtX21lZGlhRWxlbWVudCkgeworICAgIGlmIChtX3ZpZGVv
RWxlbWVudCkgewogICAgICAgICBFeGNlcHRpb25Db2RlIGVjOwotICAgICAgICBtX21lZGlhRWxl
bWVudC0+c2V0Vm9sdW1lKHZvbHVtZSwgZWMpOworICAgICAgICBtX3ZpZGVvRWxlbWVudC0+c2V0
Vm9sdW1lKHZvbHVtZSwgZWMpOwogICAgIH0KIH0KIAogZmxvYXQgRnVsbHNjcmVlblZpZGVvQ29u
dHJvbGxlcjo6Y3VycmVudFRpbWUoKSBjb25zdAogewotICAgIHJldHVybiBtX21lZGlhRWxlbWVu
dCA/IG1fbWVkaWFFbGVtZW50LT5jdXJyZW50VGltZSgpIDogMDsKKyAgICByZXR1cm4gbV92aWRl
b0VsZW1lbnQgPyBtX3ZpZGVvRWxlbWVudC0+Y3VycmVudFRpbWUoKSA6IDA7CiB9CiAKIHZvaWQg
RnVsbHNjcmVlblZpZGVvQ29udHJvbGxlcjo6c2V0Q3VycmVudFRpbWUoZmxvYXQgdmFsdWUpCiB7
Ci0gICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICBtX21lZGlhRWxlbWVudC0+c2V0Q3Vy
cmVudFRpbWUodmFsdWUpOworICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKKyAgICAgICAgbV92aWRl
b0VsZW1lbnQtPnNldEN1cnJlbnRUaW1lKHZhbHVlKTsKIH0KIAogZmxvYXQgRnVsbHNjcmVlblZp
ZGVvQ29udHJvbGxlcjo6ZHVyYXRpb24oKSBjb25zdAogewotICAgIHJldHVybiBtX21lZGlhRWxl
bWVudCA/IG1fbWVkaWFFbGVtZW50LT5kdXJhdGlvbigpIDogMDsKKyAgICByZXR1cm4gbV92aWRl
b0VsZW1lbnQgPyBtX3ZpZGVvRWxlbWVudC0+ZHVyYXRpb24oKSA6IDA7CiB9CiAKIHZvaWQgRnVs
bHNjcmVlblZpZGVvQ29udHJvbGxlcjo6YmVnaW5TY3J1YmJpbmcoKQogewotICAgIGlmIChtX21l
ZGlhRWxlbWVudCkgCi0gICAgICAgIG1fbWVkaWFFbGVtZW50LT5iZWdpblNjcnViYmluZygpOwor
ICAgIGlmIChtX3ZpZGVvRWxlbWVudCkgCisgICAgICAgIG1fdmlkZW9FbGVtZW50LT5iZWdpblNj
cnViYmluZygpOwogfQogCiB2b2lkIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXI6OmVuZFNjcnVi
YmluZygpCiB7Ci0gICAgaWYgKG1fbWVkaWFFbGVtZW50KSAKLSAgICAgICAgbV9tZWRpYUVsZW1l
bnQtPmVuZFNjcnViYmluZygpOworICAgIGlmIChtX3ZpZGVvRWxlbWVudCkgCisgICAgICAgIG1f
dmlkZW9FbGVtZW50LT5lbmRTY3J1YmJpbmcoKTsKIH0KIAogTFJFU1VMVCBGdWxsc2NyZWVuVmlk
ZW9Db250cm9sbGVyOjpmdWxsc2NyZWVuQ2xpZW50V25kUHJvYyhIV05EIHduZCwgVUlOVCBtZXNz
YWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQpAQCAtNTgwLDggKzU4MCw4IEBAIExS
RVNVTFQgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlcjo6aHVkV24KIHZvaWQgRnVsbHNjcmVlblZp
ZGVvQ29udHJvbGxlcjo6b25DaGFyKGludCBjKQogewogICAgIGlmIChjID09IFZLX0VTQ0FQRSkg
ewotICAgICAgICBpZiAobV9tZWRpYUVsZW1lbnQpCi0gICAgICAgICAgICBtX21lZGlhRWxlbWVu
dC0+ZXhpdEZ1bGxzY3JlZW4oKTsKKyAgICAgICAgaWYgKG1fdmlkZW9FbGVtZW50KQorICAgICAg
ICAgICAgbV92aWRlb0VsZW1lbnQtPmV4aXRGdWxsc2NyZWVuKCk7CiAgICAgfSBlbHNlIGlmIChj
ID09IFZLX1NQQUNFKQogICAgICAgICB0b2dnbGVQbGF5KCk7CiB9CkBAIC01ODksOCArNTg5LDgg
QEAgdm9pZCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyOjpvbkNoYXIoaQogdm9pZCBGdWxsc2Ny
ZWVuVmlkZW9Db250cm9sbGVyOjpvbktleURvd24oaW50IHZpcnR1YWxLZXkpCiB7CiAgICAgaWYg
KHZpcnR1YWxLZXkgPT0gVktfRVNDQVBFKSB7Ci0gICAgICAgIGlmIChtX21lZGlhRWxlbWVudCkK
LSAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5leGl0RnVsbHNjcmVlbigpOworICAgICAgICBp
ZiAobV92aWRlb0VsZW1lbnQpCisgICAgICAgICAgICBtX3ZpZGVvRWxlbWVudC0+ZXhpdEZ1bGxz
Y3JlZW4oKTsKICAgICB9CiB9CiAKQEAgLTY3Myw4ICs2NzMsOCBAQCB2b2lkIEZ1bGxzY3JlZW5W
aWRlb0NvbnRyb2xsZXI6Om9uTW91c2VVCiAgICAgICAgICAgICBlbmRTY3J1YmJpbmcoKTsKICAg
ICAgICAgZWxzZSBpZiAobV9oaXRXaWRnZXQgPT0gJm1fZXhpdEZ1bGxzY3JlZW5CdXR0b24gJiYg
bV9leGl0RnVsbHNjcmVlbkJ1dHRvbi5oaXRUZXN0KGNvbnZlcnRlZFBvaW50KSkgewogICAgICAg
ICAgICAgbV9oaXRXaWRnZXQgPSAwOwotICAgICAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQot
ICAgICAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5leGl0RnVsbHNjcmVlbigpOworICAgICAg
ICAgICAgaWYgKG1fdmlkZW9FbGVtZW50KQorICAgICAgICAgICAgICAgIG1fdmlkZW9FbGVtZW50
LT5leGl0RnVsbHNjcmVlbigpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAg
fQpJbmRleDogU291cmNlL1dlYktpdC93aW4vRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIu
aAkocmV2aXNpb24gMTczMTgyKQorKysgU291cmNlL1dlYktpdC93aW4vRnVsbHNjcmVlblZpZGVv
Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRl
ICJNZWRpYVBsYXllclByaXZhdGVGdWxsc2NyZWVuV2luZG93LmgiCiAKLSNpbmNsdWRlIDxXZWJD
b3JlL0hUTUxNZWRpYUVsZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxWaWRlb0VsZW1l
bnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ltYWdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRQ
b2ludC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgpAQCAtMTA3LDggKzEwNyw4IEBA
IHB1YmxpYzoKICAgICBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyKCk7CiAgICAgdmlydHVhbCB+
RnVsbHNjcmVlblZpZGVvQ29udHJvbGxlcigpOwogCi0gICAgdm9pZCBzZXRNZWRpYUVsZW1lbnQo
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCopOwotICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1l
bnQqIG1lZGlhRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFFbGVtZW50LmdldCgpOyB9
CisgICAgdm9pZCBzZXRWaWRlb0VsZW1lbnQoV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCopOwor
ICAgIFdlYkNvcmU6OkhUTUxWSWRlb0VsZW1lbnQqIHZpZGVvRWxlbWVudCgpIGNvbnN0IHsgcmV0
dXJuIG1fdmlkZW9FbGVtZW50LmdldCgpOyB9CiAKICAgICB2b2lkIGVudGVyRnVsbHNjcmVlbigp
OwogICAgIHZvaWQgZXhpdEZ1bGxzY3JlZW4oKTsKQEAgLTE0OSw3ICsxNDksNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgb25Nb3VzZVVwKGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CiAgICAgdm9p
ZCBvbktleURvd24oaW50IHZpcnR1YWxLZXkpOwogCi0gICAgUmVmUHRyPFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnQ+IG1fbWVkaWFFbGVtZW50OworICAgIFJlZlB0cjxXZWJDb3JlOjpIVE1MVmlk
ZW9FbGVtZW50PiBtX3ZpZGVvRWxlbWVudDsKIAogICAgIEhXTkQgbV9odWRXaW5kb3c7CiAgICAg
R0RJT2JqZWN0PEhCSVRNQVA+IG1fYml0bWFwOwpJbmRleDogU291cmNlL1dlYktpdC93aW4vV2Vi
Vmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAJKHJl
dmlzaW9uIDE3MzE4MikKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDEsOCArMTAxLDggQEAKICNpbmNsdWRlIDxXZWJDb3JlL0dlb2xvY2F0aW9u
Q29udHJvbGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR2VvbG9jYXRpb25FcnJvci5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9IVE1M
TWVkaWFFbGVtZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0hUTUxWaWRlb0VsZW1lbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0hXbmREQy5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvSGlzdG9yeUNvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0hpc3RvcnlJdGVtLmg+CkBAIC02MjY3LDM4ICs2MjY3LDMxIEBAIEhSRVNVTFQgV2ViVmll
dzo6c2V0Q2FuU3RhcnRQbHVnaW5zKEJPT0wKICAgICByZXR1cm4gU19PSzsKIH0KIAotdm9pZCBX
ZWJWaWV3OjplbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqIG5vZGUpCit2b2lkIFdlYlZpZXc6
OmVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KEhUTUxWaWRlb0VsZW1lbnQqIHZp
ZGVvRWxlbWVudCkKIHsKICNpZiBFTkFCTEUoVklERU8pICYmICFVU0UoR1NUUkVBTUVSKSAmJiAh
VVNFKE1FRElBX0ZPVU5EQVRJT04pCi0gICAgaWYgKCFpc0hUTUxWaWRlb0VsZW1lbnQobm9kZSkg
fHwgIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCF0
b0VsZW1lbnQobm9kZSktPmlzTWVkaWFFbGVtZW50KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBI
VE1MTWVkaWFFbGVtZW50KiB2aWRlb0VsZW1lbnQgPSB0b0hUTUxNZWRpYUVsZW1lbnQobm9kZSk7
Ci0KICAgICBpZiAobV9mdWxsU2NyZWVuVmlkZW9Db250cm9sbGVyKSB7Ci0gICAgICAgIGlmICht
X2Z1bGxTY3JlZW5WaWRlb0NvbnRyb2xsZXItPm1lZGlhRWxlbWVudCgpID09IHZpZGVvRWxlbWVu
dCkgeworICAgICAgICBpZiAobV9mdWxsU2NyZWVuVmlkZW9Db250cm9sbGVyLT52aWRlb0VsZW1l
bnQoKSA9PSB2aWRlb0VsZW1lbnQpIHsKICAgICAgICAgICAgIC8vIFRoZSBiYWNrZW5kIG1heSBq
dXN0IHdhcm4gdXMgdGhhdCB0aGUgdW5kZXJsYXlpbmcgcGxhZnRvcm1Nb3ZpZSgpCiAgICAgICAg
ICAgICAvLyBoYXMgY2hhbmdlZC4gSnVzdCBmb3JjZSBhbiB1cGRhdGUuCi0gICAgICAgICAgICBt
X2Z1bGxTY3JlZW5WaWRlb0NvbnRyb2xsZXItPnNldE1lZGlhRWxlbWVudCh2aWRlb0VsZW1lbnQp
OworICAgICAgICAgICAgbV9mdWxsU2NyZWVuVmlkZW9Db250cm9sbGVyLT5zZXRWaWRlb0VsZW1l
bnQodmlkZW9FbGVtZW50KTsKICAgICAgICAgICAgIHJldHVybjsgLy8gTm8gbW9yZSB0byBkby4K
ICAgICAgICAgfQogCi0gICAgICAgIC8vIEZpcnN0IGV4aXQgRnVsbHNjcmVlbiBmb3IgdGhlIG9s
ZCBtZWRpYUVsZW1lbnQuCi0gICAgICAgIG1fZnVsbFNjcmVlblZpZGVvQ29udHJvbGxlci0+bWVk
aWFFbGVtZW50KCktPmV4aXRGdWxsc2NyZWVuKCk7CisgICAgICAgIC8vIEZpcnN0IGV4aXQgRnVs
bHNjcmVlbiBmb3IgdGhlIG9sZCB2aWRlb0VsZW1lbnQuCisgICAgICAgIG1fZnVsbFNjcmVlblZp
ZGVvQ29udHJvbGxlci0+dmlkZW9FbGVtZW50KCktPmV4aXRGdWxsc2NyZWVuKCk7CiAgICAgICAg
IC8vIFRoaXMgcHJldmlvdXMgY2FsbCBoYXMgdG8gdHJpZ2dlciBleGl0RnVsbHNjcmVlbiwKICAg
ICAgICAgLy8gd2hpY2ggaGFzIHRvIGNsZWFyIG1fZnVsbFNjcmVlblZpZGVvQ29udHJvbGxlci4K
ICAgICAgICAgQVNTRVJUKCFtX2Z1bGxTY3JlZW5WaWRlb0NvbnRyb2xsZXIpOwogICAgIH0KIAog
ICAgIG1fZnVsbFNjcmVlblZpZGVvQ29udHJvbGxlciA9IHN0ZDo6bWFrZV91bmlxdWU8RnVsbHNj
cmVlblZpZGVvQ29udHJvbGxlcj4oKTsKLSAgICBtX2Z1bGxTY3JlZW5WaWRlb0NvbnRyb2xsZXIt
PnNldE1lZGlhRWxlbWVudCh2aWRlb0VsZW1lbnQpOworICAgIG1fZnVsbFNjcmVlblZpZGVvQ29u
dHJvbGxlci0+c2V0VmlkZW9FbGVtZW50KHZpZGVvRWxlbWVudCk7CiAgICAgbV9mdWxsU2NyZWVu
VmlkZW9Db250cm9sbGVyLT5lbnRlckZ1bGxzY3JlZW4oKTsKICNlbmRpZgogfQogCi12b2lkIFdl
YlZpZXc6OmV4aXRGdWxsc2NyZWVuKCkKK3ZvaWQgV2ViVmlldzo6ZXhpdFZpZGVvRnVsbHNjcmVl
bigpCiB7CiAjaWYgRU5BQkxFKFZJREVPKSAmJiAhVVNFKEdTVFJFQU1FUikgJiYgIVVTRShNRURJ
QV9GT1VOREFUSU9OKQogICAgIGlmICghbV9mdWxsU2NyZWVuVmlkZW9Db250cm9sbGVyKQpJbmRl
eDogU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvd2luL1dlYlZpZXcuaAkocmV2aXNpb24gMTczMTgyKQorKysgU291cmNlL1dlYktpdC93aW4v
V2ViVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICNpZiBQTEFURk9STShXSU4pICYmIFVTRShBVkZPVU5EQVRJT04pCiAgICAgc3RydWN0
IEdyYXBoaWNzRGV2aWNlQWRhcHRlcjsKICNlbmRpZgorICAgIGNsYXNzIEhUTUxWaWRlb0VsZW1l
bnQ7CiB9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTk0MCw4ICs5NDEsOCBAQCBwdWJsaWM6
CiAgICAgV2ViQ29yZTo6R3JhcGhpY3NEZXZpY2VBZGFwdGVyKiBncmFwaGljc0RldmljZUFkYXB0
ZXIoKSBjb25zdDsKICNlbmRpZgogCi0gICAgdm9pZCBlbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKFdl
YkNvcmU6Ok5vZGUqKTsKLSAgICB2b2lkIGV4aXRGdWxsc2NyZWVuKCk7CisgICAgdm9pZCBlbnRl
clZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50
Kik7CisgICAgdm9pZCBleGl0VmlkZW9GdWxsc2NyZWVuKCk7CiAKICAgICB2b2lkIHNldExhc3RD
dXJzb3IoSENVUlNPUiBjdXJzb3IpIHsgbV9sYXN0U2V0Q3Vyc29yID0gY3Vyc29yOyB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21l
Q2xpZW50LmNwcAkocmV2aXNpb24gMTczMTgyKQorKysgU291cmNlL1dlYktpdC93aW4vV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzczLDE5ICs3
NzMsMTkgQEAgQ09NUHRyPElXZWJVSURlbGVnYXRlPiBXZWJDaHJvbWVDbGllbnQ6OgogCiAjaWYg
RU5BQkxFKFZJREVPKQogCi1ib29sIFdlYkNocm9tZUNsaWVudDo6c3VwcG9ydHNGdWxsc2NyZWVu
Rm9yTm9kZShjb25zdCBOb2RlKiBub2RlKQorYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnN1cHBvcnRz
VmlkZW9GdWxsc2NyZWVuKCkKIHsKLSAgICByZXR1cm4gaXNIVE1MVmlkZW9FbGVtZW50KG5vZGUp
OworICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFdlYkNocm9tZUNsaWVudDo6ZW50ZXJGdWxs
c2NyZWVuRm9yTm9kZShOb2RlKiBub2RlKQordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmVudGVyVmlk
ZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvRWxlbWVu
dCkKIHsKLSAgICBtX3dlYlZpZXctPmVudGVyRnVsbHNjcmVlbkZvck5vZGUobm9kZSk7CisgICAg
bV93ZWJWaWV3LT5lbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudCh2aWRlb0VsZW1l
bnQpOwogfQogCi12b2lkIFdlYkNocm9tZUNsaWVudDo6ZXhpdEZ1bGxzY3JlZW5Gb3JOb2RlKE5v
ZGUqKQordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmV4aXRWaWRlb0Z1bGxzY3JlZW4oKQogewotICAg
IG1fd2ViVmlldy0+ZXhpdEZ1bGxzY3JlZW4oKTsKKyAgICBtX3dlYlZpZXctPmV4aXRWaWRlb0Z1
bGxzY3JlZW4oKTsKIH0KIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dp
bi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAkocmV2aXNpb24gMTczMTgyKQorKysg
U291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTE0OCw5ICsxNDgsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNj
cm9sbFJlY3RJbnRvVmlldyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3QgeyB9CiAKICNp
ZiBFTkFCTEUoVklERU8pCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzRnVsbHNjcmVlbkZvck5v
ZGUoY29uc3QgV2ViQ29yZTo6Tm9kZSopOwotICAgIHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxzY3Jl
ZW5Gb3JOb2RlKFdlYkNvcmU6Ok5vZGUqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxzY3Jl
ZW5Gb3JOb2RlKFdlYkNvcmU6Ok5vZGUqKTsKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNWaWRl
b0Z1bGxzY3JlZW4oKTsKKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JW
aWRlb0VsZW1lbnQoV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCopOworICAgIHZpcnR1YWwgdm9p
ZCBleGl0VmlkZW9GdWxsc2NyZWVuKCk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShOT1RJRklDQVRJ
T05TKSB8fCBFTkFCTEUoTEVHQUNZX05PVElGSUNBVElPTlMpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237549</attachid>
            <date>2014-09-03 00:15:56 -0700</date>
            <delta_ts>2014-09-03 13:21:03 -0700</delta_ts>
            <desc>Try to fix Windows build again</desc>
            <filename>bug-136446-20140903001550.patch</filename>
            <type>text/plain</type>
            <size>130909</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MzE4MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMCBAQAorMjAxNC0wOS0wMiAgTWFjaWVq
IFN0YWNob3dpYWsgIDxtanNAYXBwbGUuY29tPgorCisgICAgICAgIENsZWFuIHVwIG5hbWluZyBm
b3IgYW5kIHNsaWdodGx5IHJlZmFjdG9yIGxlZ2FjeSB2aWRlbyBmdWxsc2NyZWVuIHN1cHBvcnQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjQ0Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEtleSBjaGFu
Z2VzOgorICAgICAgICBzdXBwb3J0c0Z1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqKSAtLT4gc3VwcG9y
dHNWaWRlb0Z1bGxzY3JlZW4oKQorICAgICAgICBlbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUq
KSAtLT4gZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoSFRNTFZpZGVvRWxlbWVu
dCopCisgICAgICAgIGV4aXRGdWxsc2NyZWVuRm9yTm9kZShOb2RlKikgLS0+IGV4aXRWaWRlb0Z1
bGxzY3JlZW4oKQorICAgICAgICAKKyAgICAgICAgVGhlIG9sZCB2ZXJzaW9ucyBoYWQgdW5uZWNl
c3NhcnkgcGFyYW1ldGVycywgZGlkIG5vdCBjbGVhcmx5IGRpc3Rpbmd1aXNoIHRoZWlyIHB1cnBv
c2UKKyAgICAgICAgZnJvbSBlbnRlckZ1bGxzY3JlZW5Gb3JFbGVtZW50IGFuZCBmcmllbmRzLCBh
bmQgd3JvbmdseSBjbGFpbWVkIGdlbmVyYWxpdHkgdG8gYWxsIE5vZGVzLgorICAgICAgICBBbHNv
IGNoYW5nZWQgbWFueSBvdGhlciBwbGFjZXMgdG8gdXNlIEhUTUxWaWRlb0VsZW1lbnQqIGluc3Rl
YWQgb2YgTm9kZSogb3IgCisgICAgICAgIEhUTUxNZWRpYUVsZW1lbnQqIHdoZW4gdGhleSB3ZXJl
IGluIGZhY3Qgb25seSB1c2VkIGZvciB2aWRlbyBlbGVtZW50cyBhbmQgd291bGQgb25seQorICAg
ICAgICB3b3JrIGZvciBzdWNoLgorCisgICAgICAgIFRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBp
bmNsdWRlIGEgYnVuY2ggb2YgcmVuYW1pbmcgaW4gc29tZSBpT1MgZnVsbHNjcmVlbiBjb2RlLgor
CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxNZWRpYUVsZW1lbnQ6OkhUTUxNZWRpYUVsZW1lbnQpOiBSZW5hbWUgbV9pc0Z1bGxzY3Jl
ZW4gZmxhZyB0byAKKyAgICAgICAgbV9pc0luVmlkZW9GdWxsc2NyZWVuLCBzaW5jZSBpdCBvbmx5
IGNvdmVycyB0aGUgY2FzZSBvZiBsZWdhY3kgdmlkZW8gZnVsbHNjcmVlbiwKKyAgICAgICAgbm90
IGVsZW1lbnQgZnVsbHNjcmVlbi4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6
OnN0b3ApOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6cmVxdWly
ZXNUZXh0VHJhY2tSZXByZXNlbnRhdGlvbik6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50Ojppc0Z1bGxzY3JlZW4pOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6SFRN
TE1lZGlhRWxlbWVudDo6ZW50ZXJGdWxsc2NyZWVuKTogUmVuYW1lIG1faXNGdWxsc2NyZWVuIGZs
YWcgdG8KKyAgICAgICAgbV9pc0luVmlkZW9GdWxsc2NyZWVuLiBIb2lzdCB2aWRlbyBlbGVtZW50
IGNoZWNrIGhlcmUgZnJvbSBhbGwgc3VwcG9ydHNGdWxsc2NyZW5Gb3JOb2RlCisgICAgICAgIGNs
aWVudHMuIEFkanVzdCBmb3IgcmVsZXZhbnQgQ2hyb21lQ2xpZW50IHJlZmFjdG9yaW5ncy4KKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmVudGVyRnVsbHNjcmVlbik6IGRpdHRv
IGFib3ZlCisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50Lmg6CisgICAgICAgICogaHRt
bC9IVE1MVmlkZW9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1l
bnQ6OnN1cHBvcnRzRnVsbHNjcmVlbik6IEFkanVzdCBmb3IgcmVsZXZhbnQgQ2hyb21lQ2xpZW50
IAorICAgICAgICByZWZhY3RvcmluZ3MuCisgICAgICAgICogcGFnZS9DaHJvbWVDbGllbnQuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6c3VwcG9ydHNWaWRlb0Z1bGxzY3JlZW4p
OiBSZW5hbWVkIGZyb20gCisgICAgICAgIHN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUsIGFuZCBy
ZW1vdmVkIE5vZGUqIHBhcmFtZXRlci4KKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6
ZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQpOiBSZW5hbWVkIGZyb20KKyAgICAg
ICAgZW50ZXJGdWxzY3JlZW5Gb3JOb2RlIGFuZCBjaGFuZ2VkIE5vZGUqIHBhcmFtZXRlciB0byBI
VE1MVmlkZW9FbGVtZW50Ki4KKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6ZXhpdFZp
ZGVvRnVsbHNjcmVlbik6IFJlbmFtZWQgZnJvbSAKKyAgICAgICAgZXhpdEZ1bGxzY3JlZW5Gb3JO
b2RlLCBhbmQgcmVtb3ZlZCBOb2RlKiBwYXJhbWV0ZXIuCisgICAgICAgICogcGxhdGZvcm0vaW9z
L1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW06CisgICAgICAgICgtW1dl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIgdmlkZW9FbGVtZW50XSk6IFJlbmFtZWQgZnJvbSBt
ZWRpYUVsZW1lbnQ7CisgICAgICAgIHJldHVybiBhIHZpZGVvIGVsZW1lbnQgYW5kIG5vdCBqdXN0
IGEgbWVkaWEgZWxlbWVudC4KKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ciBkZWFsbG9jXSk6IFJlbmFtZWQgX21lZGlhRWxlbWVudCBkYXRhIG1lbWJlcgorICAgICAgICB0
byBfdmlkZW9FbGVtZW50IGFuZCBjaGFuZ2VkIHR5cGUgYWNjb3JkaW5nbHkuCisgICAgICAgICgt
W1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIgc2V0VmlkZW9FbGVtZW50Ol0pOiBSZW5hbWVk
IGZyb20gc2V0TWVkaWFFbGVtZW50OgorICAgICAgICBhbmQgYWRqdXN0IHBhcmFtZXRlciB0eXBl
IGFjY29yZGluZ2x5LgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIGVu
dGVyRnVsbHNjcmVlbjpdKTogVmlkZW8gZWxlbWVudHMsIG5vdCBtZWRpYQorICAgICAgICBlbGVt
ZW50cy4KKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciBleGl0RnVsbHNj
cmVlbl0pOiBkaXR0bworICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIGRp
ZENsZWFudXBGdWxsc2NyZWVuXSk6IGRpdHRvCisgICAgICAgICogcGxhdGZvcm0vaW9zL1dlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9XZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oOiBSZW1vdmUgZ3JhdHVpdG91cyBIVE1MTUVkaWFF
bGVtZW50LmggaW5jbHVkZQorICAgICAgICBhbmQgZml4IGRlY2xhcmF0aW9ucyBhY2NvcmRpbmds
eS4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQubW06IEluY2x1ZGUgV1RGU3RyaW5nLmgKKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5oLgor
ICAgICAgICAqIHBsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dC5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5tbS4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50KSBSZW5hbWVkIGZyb20gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxN
ZWRpYUVsZW1lbnQKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
OjpzZXRWaWRlb0VsZW1lbnQpOiBSZW5hbWVkIGZyb20gc2V0TWVkaWFFbGVtZW50IGFuZAorICAg
ICAgICBjaGFuZ2UgcGFyYW0gdHlwZSBhY2NvcmRpbmdseS4gQWxzbyBubyBuZWVkIHRvIGNoZWNr
IGZvciBhY3R1YWwgdmlkZW9uZXNzIG9mIHRoZSBlbGVtZW50LgorICAgICAgICAoV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnVwZGF0ZUZvckV2ZW50TmFtZSk6IFJlbmFtZSBk
YXRhIG1lbWJlciBmcm9tIG1fbWVkaWFFbGVtZW50CisgICAgICAgIHRvIG1fdmlkZW9FbGVtZW50
IGFuZCBjaGFuZ2UgdHlwZSBhY2NvcmRpbmdseS4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0Z1bGxzY3JlZW5MYXllcik6IGRpdHRvCisgICAg
ICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6cGxheSk6IGRpdHRvCisg
ICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6cGF1c2UpOiBkaXR0
bworICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnRvZ2dsZVBs
YXlTdGF0ZSk6IGRpdHRvCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudDo6YmVnaW5TY3J1YmJpbmcpOiBkaXR0bworICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQ6OmVuZFNjcnViYmluZyk6IGRpdHRvCisgICAgICAgIChXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2Vla1RvVGltZSk6IGRpdHRvCisgICAgICAg
IChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6ZmFzdFNlZWspOiBkaXR0bwor
ICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmJlZ2luU2Nhbm5p
bmdGb3J3YXJkKTogZGl0dG8KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9F
bGVtZW50OjpiZWdpblNjYW5uaW5nQmFja3dhcmQpOiBkaXR0bworICAgICAgICAoV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmVuZFNjYW5uaW5nKTogZGl0dG8KKyAgICAgICAg
KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpyZXF1ZXN0RXhpdEZ1bGxzY3Jl
ZW4pOiBkaXR0bworICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6
OnNldFZpZGVvTGF5ZXJGcmFtZSk6IGRpdHRvCisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9MYXllckdyYXZpdHkpOiBkaXR0bworICAgICAgICAo
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnVwZGF0ZUxlZ2libGVPcHRpb25z
KTogZGl0dG8KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlci5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyLm1tOgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIHZpZGVvRWxl
bWVudF0pOiBSZW5hbWVkIGZyb20gbWVkaWFFbGVtZW50CisgICAgICAgIGFuZCB1cGRhdGUgcmV0
dXJuIHR5cGUgYWNjb3JkaW5nbHkuCisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXIgc2V0VmlkZW9FbGVtZW50Ol0pOiBSZW5hbWVkIGZyb20gCisgICAgICAgIHNldE1lZGlh
RWxlbWVudCBhbmQgdXBkYXRlIHJldHVybiB0eXBlIGFjY29yZGluZ2x5LgorICAgICAgICAoLVtX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIHZpZGVvRWxlbWVudFJlY3RdKTogUmVuYW1lZAor
ICAgICAgICBmcm9tIG1lZGlhRWxlbWVudFJlY3QuCisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXIgZW50ZXJGdWxsc2NyZWVuOl0pOiBVcGRhdGUgZm9yCisgICAgICAgIHJl
bmFtZS4KKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciBleGl0RnVsbHNj
cmVlbl0pOiBkaXR0bworICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIHVw
ZGF0ZVBvd2VyQXNzZXJ0aW9uc10pOiBSZW5hbWUKKyAgICAgICAgbWVtYmVyIGZyb20gX21lZGlh
RWxlbWVudCB0byBfdmlkZW9FbGVtZW50CisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXIgX3JlcXVlc3RFeGl0XSk6IGRpdHRvCisgICAgICAgICogV2ViQ29yZS5leHAuaW46
IEFkanVzdCBmb3IgZnVuY3Rpb24gYW5kIGNsYXNzIHJlbmFtZXMuCisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGp1c3QgZm9yIGZpbGUgcmVuYW1lcy4KKwog
MjAxNC0wOS0wMiAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgog
CiAgICAgICAgIEZpeCBiaW5kaW5ncyB0ZXN0cyBhZnRlciByMTczMTc2LgpJbmRleDogU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5leHAuaW4JKHJldmlzaW9uIDE3MzE4MikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
ZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0zNDI2LDMwICszNDI2LDI5IEBAIF9fWk5LN1dlYkNv
cmUxNkhUTUxNZWRpYUVsZW1lbnQ4ZHVyYXRpb24KICNlbmRpZgogCiAjaWYgRU5BQkxFKFZJREVP
KSAmJiBQTEFURk9STShJT1MpCi1fX1pON1dlYkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
TWVkaWFFbGVtZW50MTBzZWVrVG9UaW1lRWQKLV9fWk43V2ViQ29yZTM1V2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxNZWRpYUVsZW1lbnQxMWVuZFNjYW5uaW5nRXYKLV9fWk43V2ViQ29yZTM1V2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQxMWhhbmRsZUV2ZW50RVBOU18yMlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRFUE5TXzVFdmVudEUKLV9fWk43V2ViQ29yZTM1V2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxNZWRpYUVsZW1lbnQxMmVuZFNjcnViYmluZ0V2Ci1fX1pON1dlYkNvcmUzNVdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50MTRiZWdpblNjcnViYmluZ0V2Ci1fX1pON1dl
YkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50MTVzZXRNZWRpYUVsZW1l
bnRFUE5TXzE2SFRNTE1lZGlhRWxlbWVudEUKLV9fWk43V2ViQ29yZTM1V2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxNZWRpYUVsZW1lbnQxNXRvZ2dsZVBsYXlTdGF0ZUV2Ci1fX1pON1dlYkNvcmUzNVdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50MThzZXRWaWRlb0xheWVyRnJhbWVFTlNf
OUZsb2F0UmVjdEUKLV9fWk43V2ViQ29yZTM1V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVs
ZW1lbnQyMGJlZ2luU2Nhbm5pbmdGb3J3YXJkRXYKLV9fWk43V2ViQ29yZTM1V2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQyMHNldFZpZGVvTGF5ZXJHcmF2aXR5RU5TXzIzV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWwxMlZpZGVvR3Jhdml0eUUKLV9fWk43V2ViQ29yZTM1V2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQyMWJlZ2luU2Nhbm5pbmdCYWNrd2FyZEV2Ci1fX1pO
N1dlYkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50MjFyZXF1ZXN0RXhp
dEZ1bGxzY3JlZW5FdgotX19aTjdXZWJDb3JlMzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlh
RWxlbWVudDIyc2VsZWN0QXVkaW9NZWRpYU9wdGlvbkV5Ci1fX1pON1dlYkNvcmUzNVdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50MjNzZXRWaWRlb0Z1bGxzY3JlZW5MYXllckVQN0NB
TGF5ZXIKLV9fWk43V2ViQ29yZTM1V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQy
NHNlbGVjdExlZ2libGVNZWRpYU9wdGlvbkV5Ci1fX1pON1dlYkNvcmUzNVdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsTWVkaWFFbGVtZW50NHBsYXlFdgotX19aTjdXZWJDb3JlMzVXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbE1lZGlhRWxlbWVudDVwYXVzZUV2Ci1fX1pON1dlYkNvcmUzNVdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OGZhc3RTZWVrRWQKLV9fWk43V2ViQ29yZTM1V2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnRDMkV2Ci1fX1pON1dlYkNvcmUzNVdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50RDJFdgorX19aTjdXZWJDb3JlMzVXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDEwc2Vla1RvVGltZUVkCitfX1pON1dlYkNvcmUzNVdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50MTFlbmRTY2FubmluZ0V2CitfX1pON1dl
YkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50MTFoYW5kbGVFdmVudEVQ
TlNfMjJTY3JpcHRFeGVjdXRpb25Db250ZXh0RVBOU181RXZlbnRFCitfX1pON1dlYkNvcmUzNVdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50MTJlbmRTY3J1YmJpbmdFdgorX19aTjdX
ZWJDb3JlMzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDE0YmVnaW5TY3J1YmJp
bmdFdgorX19aTjdXZWJDb3JlMzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDE1
c2V0VmlkZW9FbGVtZW50RVBOU18xNkhUTUxWaWRlb0VsZW1lbnRFCitfX1pON1dlYkNvcmUzNVdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50MTV0b2dnbGVQbGF5U3RhdGVFdgorX19a
TjdXZWJDb3JlMzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDE4c2V0VmlkZW9M
YXllckZyYW1lRU5TXzlGbG9hdFJlY3RFCitfX1pON1dlYkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50MjBiZWdpblNjYW5uaW5nRm9yd2FyZEV2CitfX1pON1dlYkNvcmUz
NVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50MjBzZXRWaWRlb0xheWVyR3Jhdml0
eUVOU18yM1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsMTJWaWRlb0dyYXZpdHlFCitfX1pON1dlYkNv
cmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50MjFiZWdpblNjYW5uaW5nQmFj
a3dhcmRFdgorX19aTjdXZWJDb3JlMzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dDIxcmVxdWVzdEV4aXRGdWxsc2NyZWVuRXYKK19fWk43V2ViQ29yZTM1V2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxWaWRlb0VsZW1lbnQyMnNlbGVjdEF1ZGlvTWVkaWFPcHRpb25FeQorX19aTjdXZWJD
b3JlMzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDIzc2V0VmlkZW9GdWxsc2Ny
ZWVuTGF5ZXJFUDdDQUxheWVyCitfX1pON1dlYkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50MjRzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb25FeQorX19aTjdXZWJDb3JlMzVX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDRwbGF5RXYKK19fWk43V2ViQ29yZTM1
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ1cGF1c2VFdgorX19aTjdXZWJDb3Jl
MzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDhmYXN0U2Vla0VkCitfX1pON1dl
YkNvcmUzNVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50QzJFdgorX19aTjdXZWJD
b3JlMzVXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudEQyRXYKIF9fWk5LN1dlYkNv
cmUxNkhUTUxWaWRlb0VsZW1lbnQxMHZpZGVvV2lkdGhFdgogX19aTks3V2ViQ29yZTE2SFRNTFZp
ZGVvRWxlbWVudDExdmlkZW9IZWlnaHRFdgotX19aVFZON1dlYkNvcmUzNVdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsTWVkaWFFbGVtZW50RQotX19aVGhuP19ON1dlYkNvcmUzNVdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsTWVkaWFFbGVtZW50MTFoYW5kbGVFdmVudEVQTlNfMjJTY3JpcHRFeGVjdXRpb25D
b250ZXh0RVBOU181RXZlbnRFCitfX1pUaG40X043V2ViQ29yZTM1V2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQxMWhhbmRsZUV2ZW50RVBOU18yMlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRFUE5TXzVFdmVudEUKICNlbmRpZgogCiAjaWYgRU5BQkxFKFZJREVPKSAmJiBQTEFURk9STShJ
T1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDgwMDAwCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiAxNzMxODIpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEzNjMsOCArMTM2Myw2IEBACiAJCTNGNDJC
MzFFMTg4MTE5MUIwMDI3OEFBQyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRjQyQjMx
QzE4ODExOTFCMDAyNzhBQUMgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1t
ICovOyB9OwogCQkzRkJDNEFFQTE4OTg4MEVGMDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNG
QkM0QUU5MTg5ODgwRUYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTNGQkM0QUVDMTg5
ODgxMEUwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNGQkM0QUVCMTg5ODgxMEUwMDQ2
RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkzRkJDNEFFRjE4OTg4MTM4MDA0NkVFMzgg
LyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzRkJDNEFFRDE4OTg4MTM4MDA0NkVFMzgg
LyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQubW0gKi87IH07Ci0JCTNGQkM0
QUYwMTg5ODgxMzgwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0ZCQzRB
RUUxODk4ODEzODAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJM0ZC
QzRBRjMxODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0ZCQzRB
RjExODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1t
ICovOyB9OwogCQkzRkJDNEFGNDE4OTg4MTU2MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDNGQkM0QUYyMTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTNGRkZGOUE4MTU5RDlBNTUwMDIwQkJENSAvKiBXZWJLaXRDU1NWaWV3cG9ydFJ1bGUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0ZGRkY5
QTYxNTlEOUE1NTAwMjBCQkQ1IC8qIFdlYktpdENTU1ZpZXdwb3J0UnVsZS5jcHAgKi87IH07CkBA
IC0yMjA5LDYgKzIyMDcsOCBAQAogCQk2NURGMzIzQzA5RDFERTY1MDAxQkUzMjUgLyogSlNDYW52
YXNQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NjVERjMyMzYwOUQxREU2NTAwMUJFMzI1IC8qIEpTQ2FudmFzUHJveHkuaCAqLzsgfTsKIAkJNjVE
RjMyNjEwOUQxRTE5OTAwMEJFMzI1IC8qIFVzZXJBZ2VudFN0eWxlU2hlZXRzRGF0YS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTY1ODFBRjA5RDE0
RUU2MDAwRTYxRDcgLyogVXNlckFnZW50U3R5bGVTaGVldHNEYXRhLmNwcCAqLzsgfTsKIAkJNjVF
MEU5NDQxMTMzQzg5RjAwQjRDQjEwIC8qIEpTRE9NV3JhcHBlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVFMEU5NDMxMTMzQzg5RjAwQjRDQjEwIC8q
IEpTRE9NV3JhcHBlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTY1RkQ0NjY1MTlCNTk2RjAwMDFFMkI0RCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNjU4NkZFM0MxOUI1NDhCRDAwNUMzQzgyIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJNjVGRDQ2NjYxOUI1OTZGNjAwMUUyQjREIC8qIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNjU4NkZFM0QxOUI1NDhCRDAwNUMzQzgyIC8qIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50Lm1tICovOyB9OwogCQk2NUZFQTg2OTA5ODMzQURFMDBCRUQ0QUIg
LyogUGFnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA2NUZFQTg2ODA5ODMzQURFMDBCRUQ0QUIgLyogUGFnZS5jcHAgKi87IH07CiAJCTZCMzQ4MDk0
MEVFRjUwRDQwMEFDMUI0MSAvKiBOYXRpdmVJbWFnZVB0ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkIzNDgwOTIwRUVGNTBENDAwQUMxQjQxIC8qIE5h
dGl2ZUltYWdlUHRyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNkM2Mzg4OTVBOTZDQ0VFNTBDOEM5NDZDIC8qIENhY2hlZFJlc291cmNlUmVxdWVz
dEluaXRpYXRvcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDZDNjM4ODkzQTk2Q0NFRTUwQzhDOTQ2QyAvKiBDYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0
aWF0b3JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTgzNjYsOCArODM2Niw2IEBACiAJCTNGNDJCMzFDMTg4MTE5MUIwMDI3OEFBQyAvKiBXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IG5hbWUgPSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW07IHBh
dGggPSBpb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkzRkJDNEFFOTE4OTg4MEVGMDA0NkVFMzggLyogV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWwuaDsgcGF0aCA9IGlvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzRkJDNEFFQjE4OTg4MTBFMDA0NkVFMzgg
LyogV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS5oOyBwYXRoID0gaW9zL1dlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkz
RkJDNEFFRDE4OTg4MTM4MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVs
ZW1lbnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5tbTsgcGF0aCA9IGlvcy9XZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
M0ZCQzRBRUUxODk4ODEzODAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFF
bGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsTWVkaWFFbGVtZW50Lmg7IHBhdGggPSBpb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxNZWRpYUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0ZCQzRBRjEx
ODk4ODE1NjAwNDZFRTM4IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQubW07IHBhdGggPSBpb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNGQkM0QUYyMTg5ODgxNTYw
MDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5o
OyBwYXRoID0gaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNGRkZGOUE2MTU5RDlBNTUwMDIwQkJENSAvKiBXZWJLaXRD
U1NWaWV3cG9ydFJ1bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2ViS2l0Q1NTVmlld3BvcnRSdWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTkyNzYsNiArOTI3NCw4IEBACiAJCTY1N0VEQTA2MTM4NUNCOTcwMDRFMDY0NSAvKiBNZW1vcnlQ
cmVzc3VyZUhhbmRsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
TWVtb3J5UHJlc3N1cmVIYW5kbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NjU3RURBMDcxMzg1Q0I5NzAwNEUwNjQ1IC8qIE1lbW9yeVByZXNzdXJlSGFuZGxlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZW1vcnlQcmVzc3VyZUhhbmRsZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjU4NDM2ODUwQUUwMUI3NDAwRTUzNzUzIC8qIEZy
YW1lTG9hZFJlcXVlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZyYW1l
TG9hZFJlcXVlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjU4NkZFM0MxOUI1
NDhCRDAwNUMzQzgyIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlk
ZW9FbGVtZW50Lmg7IHBhdGggPSBpb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjU4NkZFM0QxOUI1NDhCRDAwNUMz
QzgyIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRl
b0VsZW1lbnQubW07IHBhdGggPSBpb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1OTM5MjM1MDlBRTQzNDYwMDJD
NTMxRiAvKiBVUkwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVS
TC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1OTM5MjM2MDlBRTQzNDYwMDJD
NTMxRiAvKiBVUkwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVSTC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTkzOTIzOTA5QUU0MzVDMDAyQzUzMUYgLyog
VVJMTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbGluZUVuZGluZyA9
IDA7IHBhdGggPSBVUkxNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHhjTGFuZ3VhZ2VT
cGVjaWZpY2F0aW9uSWRlbnRpZmllciA9IHhjb2RlLmxhbmcub2JqY3BwOyB9OwpAQCAtMTg0NzQs
OCArMTg0NzQsOCBAQAogCQkJCTNGQkM0QUYyMTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oICovLAogCQkJCTNGQkM0QUYxMTg5ODgxNTYwMDQ2RUUz
OCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbSAqLywKIAkJCQkzRkJDNEFF
OTE4OTg4MEVGMDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCAqLywKLQkJCQkz
RkJDNEFFRTE4OTg4MTM4MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVs
ZW1lbnQuaCAqLywKLQkJCQkzRkJDNEFFRDE4OTg4MTM4MDA0NkVFMzggLyogV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQubW0gKi8sCisJCQkJNjU4NkZFM0MxOUI1NDhCRDAwNUMz
QzgyIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmggKi8sCisJCQkJNjU4
NkZFM0QxOUI1NDhCRDAwNUMzQzgyIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVt
ZW50Lm1tICovLAogCQkJCUU0NTM5MDNDMEVBRkQ2MzcwMDM2OTVDOCAvKiBXaWRnZXRJT1MubW0g
Ki8sCiAJCQkpOwogCQkJbmFtZSA9IGlvczsKQEAgLTI1NjEwLDYgKzI1NjEwLDcgQEAKIAkJCQk1
QTU3NEYyNTEzMURCOTM5MDA0NzFCODggLyogUmVuZGVyUXVvdGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUQ3MEFENjU4MTNFMTM0MkIwMDVCNTBCNCAvKiBSZW5kZXJSZWdpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDRTkzRjQ1MTUxN0M1NjcwMDhDQ0Y3NCAvKiBSZW5kZXJSZWdpb25TZXQuaCBp
biBIZWFkZXJzICovLAorCQkJCTY1RkQ0NjY1MTlCNTk2RjAwMDFFMkI0RCAvKiBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg3MURGRTMw
QTE1Mzc2QjAwQjEyQTY4IC8qIFJlbmRlclJlcGxhY2VkLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
Q0E4NDZENzBEQzY3QTM1MDAyNkMzMDkgLyogUmVuZGVyUmVwbGljYS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTQ3OUZBRUUxMDlBRTM3NTAwREVENjU1IC8qIFJlbmRlclJ1YnkuaCBpbiBIZWFkZXJz
ICovLApAQCAtMjY1NDMsNyArMjY1NDQsNiBAQAogCQkJCTNGQkM0QUVDMTg5ODgxMEUwMDQ2RUUz
OCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTNG
QkM0QUY0MTg5ODgxNTYwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJM0ZCQzRBRUExODk4ODBFRjAwNDZFRTM4IC8qIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsLmggaW4gSGVhZGVycyAqLywKLQkJCQkzRkJDNEFGMDE4OTg4MTM4
MDA0NkVFMzggLyogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUYxMjE3MUY2MTZBOENGMEIwMDAwNTNDQSAvKiBXZWJWVFRFbGVtZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1RDIxQTgwMzEzRUNFNURGMDBCQjcwNjQgLyogV2ViVlRUUGFy
c2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMTBCNjk4MDE0MEMxNzQwMDBCQzFDMjYgLyogV2Vi
VlRUVG9rZW4uaCBpbiBIZWFkZXJzICovLApAQCAtMjc1NzMsNiArMjc1NzMsNyBAQAogCQkJCUZE
MTc2MkUzMTc2Njg2RUEwMEQ4MzZBOCAvKiBEb3duU2FtcGxlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBN0NBNTk1RTBCMjdCRDlFMDBGQTAyMUQgLyogRHJhZ0NvbnRyb2xsZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTcxODc4OTAwQjJEMDRBQzAwQTE2RUNFIC8qIERyYWdDb250cm9sbGVy
TWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNjVGRDQ2NjYxOUI1OTZGNjAwMUUyQjREIC8qIFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTc5NTQ2NDMwQjVDNENCNDAwN0I0MzhGIC8qIERyYWdEYXRhLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE3OTU0NjNFMEI1QzRDODAwMDdCNDM4RiAvKiBEcmFnRGF0YU1hYy5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCUE3Q0ZCM0QxMEI3RUQxMEEwMDcwQzMyRCAvKiBEcmFnSW1hZ2UuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC0yOTgyMiw3ICsyOTgyMyw2IEBACiAJCQkJQ0Q4MjAzMEQxMzk1QUI2QTAw
Rjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW0gaW4gU291
cmNlcyAqLywKIAkJCQk3QzczRkIwQzE5MUVGNUE4MDA3REUwNjEgLyogSlNVc2VyTWVzc2FnZUhh
bmRsZXJzTmFtZXNwYWNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTNGQkM0QUYzMTg5ODgxNTYw
MDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbSBpbiBTb3VyY2Vz
ICovLAotCQkJCTNGQkM0QUVGMTg5ODgxMzgwMDQ2RUUzOCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbE1lZGlhRWxlbWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUYxMjE3MUY1MTZBOENFRDIw
MDAwNTNDQSAvKiBXZWJWVFRFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVEMjFBODAy
MTNFQ0U1REYwMEJCNzA2NCAvKiBXZWJWVFRQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QjEwQjY5ODExNDBDMTc0MDAwQkMxQzI2IC8qIFdlYlZUVFRva2VuaXplci5jcHAgaW4gU291cmNl
cyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkocmV2
aXNpb24gMTczMTgyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzA1LDcgKzMwNSw3IEBAIEhUTUxNZWRpYUVsZW1lbnQ6OkhU
TUxNZWRpYUVsZW1lbnQoY29uc3QKICAgICAsIG1fc2VudEVuZEV2ZW50KGZhbHNlKQogICAgICwg
bV9wYXVzZWRJbnRlcm5hbChmYWxzZSkKICAgICAsIG1fc2VuZFByb2dyZXNzRXZlbnRzKHRydWUp
Ci0gICAgLCBtX2lzRnVsbHNjcmVlbihmYWxzZSkKKyAgICAsIG1faXNJblZpZGVvRnVsbHNjcmVl
bihmYWxzZSkKICAgICAsIG1fY2xvc2VkQ2FwdGlvbnNWaXNpYmxlKGZhbHNlKQogICAgICwgbV93
ZWJraXRMZWdhY3lDbG9zZWRDYXB0aW9uT3ZlcnJpZGUoZmFsc2UpCiAgICAgLCBtX2NvbXBsZXRl
bHlMb2FkZWQoZmFsc2UpCkBAIC02ODIsNyArNjgyLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50
OjpyZW1vdmVkRnJvbShDb250YQogICAgICAgICAgICAgbWVkaWFDb250cm9scygpLT5oaWRlKCk7
CiAgICAgICAgIGlmIChtX25ldHdvcmtTdGF0ZSA+IE5FVFdPUktfRU1QVFkpCiAgICAgICAgICAg
ICBwYXVzZSgpOwotICAgICAgICBpZiAobV9pc0Z1bGxzY3JlZW4pCisgICAgICAgIGlmIChtX2lz
SW5WaWRlb0Z1bGxzY3JlZW4pCiAgICAgICAgICAgICBleGl0RnVsbHNjcmVlbigpOwogCiAgICAg
ICAgIGlmIChtX3BsYXllcikgewpAQCAtNDY0Nyw3ICs0NjQ3LDcgQEAgYm9vbCBIVE1MTWVkaWFF
bGVtZW50OjpjYW5TdXNwZW5kKCkgY29ucwogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzdG9wKCkK
IHsKICAgICBMT0coTWVkaWEsICJIVE1MTWVkaWFFbGVtZW50OjpzdG9wIik7Ci0gICAgaWYgKG1f
aXNGdWxsc2NyZWVuKQorICAgIGlmIChtX2lzSW5WaWRlb0Z1bGxzY3JlZW4pCiAgICAgICAgIGV4
aXRGdWxsc2NyZWVuKCk7CiAgICAgCiAgICAgbV9pbkFjdGl2ZURvY3VtZW50ID0gZmFsc2U7CkBA
IC00NzQxLDcgKzQ3NDEsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnZpc2liaWxpdHlTdGF0
ZUNoCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogYm9vbCBIVE1MTWVkaWFFbGVtZW50OjpyZXF1
aXJlc1RleHRUcmFja1JlcHJlc2VudGF0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9pc0Z1
bGxzY3JlZW4gJiYgbV9wbGF5ZXIgPyBtX3BsYXllci0+cmVxdWlyZXNUZXh0VHJhY2tSZXByZXNl
bnRhdGlvbigpIDogZmFsc2U7CisgICAgcmV0dXJuIG1faXNJblZpZGVvRnVsbHNjcmVlbiAmJiBt
X3BsYXllciA/IG1fcGxheWVyLT5yZXF1aXJlc1RleHRUcmFja1JlcHJlc2VudGF0aW9uKCkgOiBm
YWxzZTsKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRUZXh0VHJhY2tSZXByZXNlbnRh
dGlvbihUZXh0VHJhY2tSZXByZXNlbnRhdGlvbiogcmVwcmVzZW50YXRpb24pCkBAIC00ODMzLDcg
KzQ4MzMsNyBAQCBkb3VibGUgSFRNTE1lZGlhRWxlbWVudDo6bWF4RmFzdEZvcndhcmRSCiAgICAg
CiBib29sIEhUTUxNZWRpYUVsZW1lbnQ6OmlzRnVsbHNjcmVlbigpIGNvbnN0CiB7Ci0gICAgaWYg
KG1faXNGdWxsc2NyZWVuKQorICAgIGlmIChtX2lzSW5WaWRlb0Z1bGxzY3JlZW4pCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIAogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKQEAgLTQ4NTcs
NyArNDg1Nyw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dG9nZ2xlRnVsbHNjcmVlblMKIHZv
aWQgSFRNTE1lZGlhRWxlbWVudDo6ZW50ZXJGdWxsc2NyZWVuKCkKIHsKICAgICBMT0coTWVkaWEs
ICJIVE1MTWVkaWFFbGVtZW50OjplbnRlckZ1bGxzY3JlZW4iKTsKLSAgICBpZiAobV9pc0Z1bGxz
Y3JlZW4pCisgICAgaWYgKG1faXNJblZpZGVvRnVsbHNjcmVlbikKICAgICAgICAgcmV0dXJuOwog
CiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQpAQCAtNDg2NywxMiArNDg2NywxMyBAQCB2b2lk
IEhUTUxNZWRpYUVsZW1lbnQ6OmVudGVyRnVsbHNjcmVlbigpCiAgICAgfQogI2VuZGlmCiAKLSAg
ICBtX2lzRnVsbHNjcmVlbiA9IHRydWU7CisgICAgbV9pc0luVmlkZW9GdWxsc2NyZWVuID0gdHJ1
ZTsKICAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQogICAgICAgICBtZWRpYUNvbnRyb2xzKCkt
PmVudGVyZWRGdWxsc2NyZWVuKCk7Ci0gICAgaWYgKGRvY3VtZW50KCkucGFnZSgpKSB7Ci0gICAg
ICAgIGlmIChkb2N1bWVudCgpLnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50KCkuc3VwcG9ydHNGdWxs
c2NyZWVuRm9yTm9kZSh0aGlzKSkgewotICAgICAgICAgICAgZG9jdW1lbnQoKS5wYWdlKCktPmNo
cm9tZSgpLmNsaWVudCgpLmVudGVyRnVsbHNjcmVlbkZvck5vZGUodGhpcyk7CisgICAgaWYgKGRv
Y3VtZW50KCkucGFnZSgpICYmIGlzSFRNTFZpZGVvRWxlbWVudCh0aGlzKSkgeworICAgICAgICBI
VE1MVmlkZW9FbGVtZW50KiBhc1ZpZGVvID0gdG9IVE1MVmlkZW9FbGVtZW50KHRoaXMpOworICAg
ICAgICBpZiAoZG9jdW1lbnQoKS5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLnN1cHBvcnRzVmlk
ZW9GdWxsc2NyZWVuKCkpIHsKKyAgICAgICAgICAgIGRvY3VtZW50KCkucGFnZSgpLT5jaHJvbWUo
KS5jbGllbnQoKS5lbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChhc1ZpZGVvKTsK
ICAgICAgICAgICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1lcygpLndlYmtpdGJlZ2luZnVsbHNj
cmVlbkV2ZW50KTsKICAgICAgICAgfQogICAgIH0KQEAgLTQ4ODksMTYgKzQ4OTAsMTYgQEAgdm9p
ZCBIVE1MTWVkaWFFbGVtZW50OjpleGl0RnVsbHNjcmVlbigpCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAjZW5kaWYKLSAgICBBU1NFUlQobV9pc0Z1bGxzY3JlZW4pOwotICAgIG1faXNGdWxsc2Ny
ZWVuID0gZmFsc2U7CisgICAgQVNTRVJUKG1faXNJblZpZGVvRnVsbHNjcmVlbik7CisgICAgbV9p
c0luVmlkZW9GdWxsc2NyZWVuID0gZmFsc2U7CiAgICAgaWYgKGhhc01lZGlhQ29udHJvbHMoKSkK
ICAgICAgICAgbWVkaWFDb250cm9scygpLT5leGl0ZWRGdWxsc2NyZWVuKCk7Ci0gICAgaWYgKGRv
Y3VtZW50KCkucGFnZSgpKSB7CisgICAgaWYgKGRvY3VtZW50KCkucGFnZSgpICYmIGlzSFRNTFZp
ZGVvRWxlbWVudCh0aGlzKSkgewogICAgICAgICBpZiAobV9tZWRpYVNlc3Npb24tPnJlcXVpcmVz
RnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2soKnRoaXMpKQogICAgICAgICAgICAgcGF1c2VJbnRl
cm5hbCgpOwogCi0gICAgICAgIGlmIChkb2N1bWVudCgpLnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50
KCkuc3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZSh0aGlzKSkgewotICAgICAgICAgICAgZG9jdW1l
bnQoKS5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLmV4aXRGdWxsc2NyZWVuRm9yTm9kZSh0aGlz
KTsKKyAgICAgICAgaWYgKGRvY3VtZW50KCkucGFnZSgpLT5jaHJvbWUoKS5jbGllbnQoKS5zdXBw
b3J0c1ZpZGVvRnVsbHNjcmVlbigpKSB7CisgICAgICAgICAgICBkb2N1bWVudCgpLnBhZ2UoKS0+
Y2hyb21lKCkuY2xpZW50KCkuZXhpdFZpZGVvRnVsbHNjcmVlbigpOwogICAgICAgICAgICAgc2No
ZWR1bGVFdmVudChldmVudE5hbWVzKCkud2Via2l0ZW5kZnVsbHNjcmVlbkV2ZW50KTsKICAgICAg
ICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCShy
ZXZpc2lvbiAxNzMxODIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtODE2LDcgKzgxNiw3IEBAIHByaXZhdGU6CiAgICAgLy8gc3Vw
cG9ydCBwcm9ncmVzcyBldmVudHMgc28gc2V0dGluZyBtX3NlbmRQcm9ncmVzc0V2ZW50cyBkaXNh
YmxlcyB0aGVtIAogICAgIGJvb2wgbV9zZW5kUHJvZ3Jlc3NFdmVudHMgOiAxOwogCi0gICAgYm9v
bCBtX2lzRnVsbHNjcmVlbiA6IDE7CisgICAgYm9vbCBtX2lzSW5WaWRlb0Z1bGxzY3JlZW4gOiAx
OwogICAgIGJvb2wgbV9jbG9zZWRDYXB0aW9uc1Zpc2libGUgOiAxOwogICAgIGJvb2wgbV93ZWJr
aXRMZWdhY3lDbG9zZWRDYXB0aW9uT3ZlcnJpZGUgOiAxOwogICAgIGJvb2wgbV9jb21wbGV0ZWx5
TG9hZGVkIDogMTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNw
cAkocmV2aXNpb24gMTczMTgyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU3LDcgKzE1Nyw3IEBAIGJvb2wgSFRNTFZpZGVv
RWxlbWVudDo6c3VwcG9ydHNGdWxsc2NyZWUKICAgICBpZiAoIXBsYXllcigpLT5oYXNWaWRlbygp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gcGFnZS0+Y2hyb21lKCkuY2xp
ZW50KCkuc3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9kZSh0aGlzKTsKKyAgICByZXR1cm4gcGFnZS0+
Y2hyb21lKCkuY2xpZW50KCkuc3VwcG9ydHNWaWRlb0Z1bGxzY3JlZW4oKTsKICNlbmRpZiAvLyBQ
TEFURk9STShJT1MpCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAkocmV2
aXNpb24gMTczMTgyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMzM5LDkgKzMzOSw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEdyYXBo
aWNzRGV2aWNlQWRhcHRlciogZ3JhcGhpY3NEZXZpY2VBZGFwdGVyKCkgY29uc3QgeyByZXR1cm4g
MDsgfQogI2VuZGlmCiAKLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGdWxsc2NyZWVuRm9yTm9k
ZShjb25zdCBOb2RlKikgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZW50ZXJG
dWxsc2NyZWVuRm9yTm9kZShOb2RlKikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGV4aXRGdWxsc2Ny
ZWVuRm9yTm9kZShOb2RlKikgeyB9CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzVmlkZW9GdWxs
c2NyZWVuKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJWaWRlb0Z1
bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoSFRNTFZpZGVvRWxlbWVudCopIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBleGl0VmlkZW9GdWxsc2NyZWVuKCkgeyB9CiAgICAgdmlydHVhbCBib29sIHJlcXVp
cmVzRnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2soKSB7IHJldHVybiBmYWxzZTsgfSAKIAogI2lm
IEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lv
cy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0
LmgJKHJldmlzaW9uIDE3MzE4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTMg
KzI4LDEzIEBACiAKICNpZiBQTEFURk9STShJT1MpCiAKLSNpbXBvcnQgPFdlYkNvcmUvSFRNTE1l
ZGlhRWxlbWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9IVE1MVmlkZW9FbGVtZW50Lmg+CiAKIE9C
SkNfQ0xBU1MgVUlWaWV3OwogCiBXRUJDT1JFX0VYUE9SVCBAaW50ZXJmYWNlIFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXIgOiBOU09iamVjdAotLSAodm9pZClzZXRNZWRpYUVsZW1lbnQ6KFdl
YkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqKW1lZGlhRWxlbWVudDsKLS0gKFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnQqKW1lZGlhRWxlbWVudDsKKy0gKHZvaWQpc2V0VmlkZW9FbGVtZW50OihXZWJD
b3JlOjpIVE1MVmlkZW9FbGVtZW50Kil2aWRlb0VsZW1lbnQ7CistIChXZWJDb3JlOjpIVE1MVmlk
ZW9FbGVtZW50Kil2aWRlb0VsZW1lbnQ7CiAtICh2b2lkKWVudGVyRnVsbHNjcmVlbjooVUlWaWV3
ICopdmlldzsKIC0gKHZvaWQpZXhpdEZ1bGxzY3JlZW47CiAtICh2b2lkKXJlcXVlc3RIaWRlQW5k
RXhpdEZ1bGxzY3JlZW47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW0JKHJl
dmlzaW9uIDE3MzE4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW0JKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcg
QEAKIAogI2ltcG9ydCAiTG9nZ2luZy5oIgogI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQuaCIKLSNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVt
ZW50LmgiCisjaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oIgog
I2ltcG9ydCA8UXVhcnR6Q29yZS9Db3JlQW5pbWF0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dl
YkNvcmVUaHJlYWRSdW4uaD4KIApAQCAtNDAsMTIgKzQwLDEyIEBAIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogI2lmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEIDwgODAwMDAKIAog
QGltcGxlbWVudGF0aW9uIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIKLS0gKHZvaWQpc2V0
TWVkaWFFbGVtZW50OihXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50KiltZWRpYUVsZW1lbnQKKy0g
KHZvaWQpc2V0VmlkZW9FbGVtZW50OihXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50Kil2aWRlb0Vs
ZW1lbnQKIHsKLSAgICBVTlVTRURfUEFSQU0obWVkaWFFbGVtZW50KTsKKyAgICBVTlVTRURfUEFS
QU0odmlkZW9FbGVtZW50KTsKIH0KIAotLSAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCopbWVk
aWFFbGVtZW50CistIChXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50Kil2aWRlb0VsZW1lbnQKIHsK
ICAgICByZXR1cm4gbnVsbHB0cjsKIH0KQEAgLTgxLDkgKzgxLDkgQEAgcHVibGljOgogCiBAaW1w
bGVtZW50YXRpb24gV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlcgogewotICAgIFJlZlB0cjxI
VE1MTWVkaWFFbGVtZW50PiBfbWVkaWFFbGVtZW50OworICAgIFJlZlB0cjxIVE1MVmlkZW9FbGVt
ZW50PiBfdmlkZW9FbGVtZW50OwogICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdD4gX2ludGVyZmFjZTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxN
ZWRpYUVsZW1lbnQ+IF9tb2RlbDsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ+IF9tb2RlbDsKICAgICBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ2hh
bmdlT2JzZXJ2ZXIgX2NoYW5nZU9ic2VydmVyOwogICAgIFJldGFpblB0cjxQbGF0Zm9ybUxheWVy
PiBfdmlkZW9GdWxsc2NyZWVuTGF5ZXI7CiB9CkBAIC0xMDAsMTggKzEwMCwxOCBAQCAtIChpbnN0
YW5jZXR5cGUpaW5pdAogCiAtICh2b2lkKWRlYWxsb2MKIHsKLSAgICBfbWVkaWFFbGVtZW50ID0g
bnVsbHB0cjsKKyAgICBfdmlkZW9FbGVtZW50ID0gbnVsbHB0cjsKICAgICBbc3VwZXIgZGVhbGxv
Y107CiB9CiAKLS0gKHZvaWQpc2V0TWVkaWFFbGVtZW50OihIVE1MTWVkaWFFbGVtZW50KiltZWRp
YUVsZW1lbnQKKy0gKHZvaWQpc2V0VmlkZW9FbGVtZW50OihIVE1MVmlkZW9FbGVtZW50Kil2aWRl
b0VsZW1lbnQKIHsKLSAgICBfbWVkaWFFbGVtZW50ID0gbWVkaWFFbGVtZW50OworICAgIF92aWRl
b0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7CiB9CiAKLS0gKEhUTUxNZWRpYUVsZW1lbnQqKW1lZGlh
RWxlbWVudAorLSAoSFRNTFZpZGVvRWxlbWVudCopdmlkZW9FbGVtZW50CiB7Ci0gICAgcmV0dXJu
IF9tZWRpYUVsZW1lbnQuZ2V0KCk7CisgICAgcmV0dXJuIF92aWRlb0VsZW1lbnQuZ2V0KCk7CiB9
CiAKIC0gKHZvaWQpZW50ZXJGdWxsc2NyZWVuOihVSVZpZXcgKil2aWV3CkBAIC0xMjAsMTcgKzEy
MCwxNyBAQCAtICh2b2lkKWVudGVyRnVsbHNjcmVlbjooVUlWaWV3ICopdmlldwogICAgIAogICAg
IF9pbnRlcmZhY2UgPSBhZG9wdFJlZihuZXcgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQpOwogICAgIF9pbnRlcmZhY2UtPnNldFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVy
KCZfY2hhbmdlT2JzZXJ2ZXIpOwotICAgIF9tb2RlbCA9IGFkb3B0UmVmKG5ldyBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudCk7CisgICAgX21vZGVsID0gYWRvcHRSZWYobmV3IFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KTsKICAgICBfbW9kZWwtPnNldFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZShfaW50ZXJmYWNlLmdldCgpKTsKICAgICBfaW50ZXJmYWNl
LT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbChfbW9kZWwuZ2V0KCkpOwotICAgIF9tb2RlbC0+
c2V0TWVkaWFFbGVtZW50KF9tZWRpYUVsZW1lbnQuZ2V0KCkpOworICAgIF9tb2RlbC0+c2V0Vmlk
ZW9FbGVtZW50KF92aWRlb0VsZW1lbnQuZ2V0KCkpOwogICAgIF92aWRlb0Z1bGxzY3JlZW5MYXll
ciA9IFtDQUxheWVyIGxheWVyXTsKLSAgICBfaW50ZXJmYWNlLT5zZXR1cEZ1bGxzY3JlZW4oKl92
aWRlb0Z1bGxzY3JlZW5MYXllci5nZXQoKSwgX21lZGlhRWxlbWVudC0+Y2xpZW50UmVjdCgpLCB2
aWV3KTsKKyAgICBfaW50ZXJmYWNlLT5zZXR1cEZ1bGxzY3JlZW4oKl92aWRlb0Z1bGxzY3JlZW5M
YXllci5nZXQoKSwgX3ZpZGVvRWxlbWVudC0+Y2xpZW50UmVjdCgpLCB2aWV3KTsKIH0KIAogLSAo
dm9pZClleGl0RnVsbHNjcmVlbgogewotICAgIF9pbnRlcmZhY2UtPmV4aXRGdWxsc2NyZWVuKF9t
ZWRpYUVsZW1lbnQtPnNjcmVlblJlY3QoKSk7CisgICAgX2ludGVyZmFjZS0+ZXhpdEZ1bGxzY3Jl
ZW4oX3ZpZGVvRWxlbWVudC0+c2NyZWVuUmVjdCgpKTsKIH0KIAogLSAodm9pZClyZXF1ZXN0SGlk
ZUFuZEV4aXRGdWxsc2NyZWVuCkBAIC0xNjMsNyArMTYzLDcgQEAgLSAodm9pZClkaWRDbGVhbnVw
RnVsbHNjcmVlbgogICAgICAgICBfbW9kZWwtPnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKG5pbCk7
CiAgICAgICAgIF9pbnRlcmZhY2UtPnNldFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKG51bGxwdHIp
OwogICAgICAgICBfbW9kZWwtPnNldFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZShudWxscHRy
KTsKLSAgICAgICAgX21vZGVsLT5zZXRNZWRpYUVsZW1lbnQobnVsbHB0cik7CisgICAgICAgIF9t
b2RlbC0+c2V0VmlkZW9FbGVtZW50KG51bGxwdHIpOwogICAgICAgICBfaW50ZXJmYWNlLT5zZXRX
ZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcihudWxscHRyKTsKICAgICAgICAgX21vZGVs
ID0gbnVsbHB0cjsKICAgICAgICAgX2ludGVyZmFjZSA9IG51bGxwdHI7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZS5oCShyZXZpc2lvbiAxNzMxODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDkg
KzUwLDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRWaWRlb0RpbWVuc2lvbnMoYm9v
bCBoYXNWaWRlbywgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCBzZXRTZWVrYWJsZVJhbmdlcyhjb25zdCBUaW1lUmFuZ2VzJikgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBzZXRDYW5QbGF5RmFzdFJldmVyc2UoYm9vbCkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBzZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgb3B0
aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRM
ZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBvcHRpb25z
LCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldEV4dGVy
bmFsUGxheWJhY2soYm9vbCBlbmFibGVkLCBFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgU3Ry
aW5nIGxvY2FsaXplZERldmljZU5hbWUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QXVkaW9N
ZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPFdURjo6U3RyaW5nPiYgb3B0aW9ucywg
dWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRMZWdpYmxl
TWVkaWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZlY3RvcjxXVEY6OlN0cmluZz4mIG9wdGlvbnMs
IHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RXh0ZXJu
YWxQbGF5YmFjayhib29sIGVuYWJsZWQsIEV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBXVEY6
OlN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKSA9IDA7CiB9OwogCiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQuaAkocmV2aXNpb24gMTczMTgyKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDcgKzMwLDYgQEAKICNpZiBQTEFURk9STShJT1MpICYmIF9fSVBIT05FX09T
X1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDgwMDAwCiAKICNpbmNsdWRlIDxXZWJDb3JlL0V2ZW50
TGlzdGVuZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0hUTUxNZWRpYUVsZW1lbnQuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1BsYXRmb3JtTGF5ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1dlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTQ0LDcg
KzQzLDEyIEBAIE9CSkNfQ0xBU1MgVUlWaWV3OwogT0JKQ19DTEFTUyBDQUxheWVyOwogT0JKQ19D
TEFTUyBXZWJBVlZpZGVvTGF5ZXI7CiAKK25hbWVzcGFjZSBXVEYgeworY2xhc3MgU3RyaW5nOwor
fQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBJbnRSZWN0OwogY2xhc3MgV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWw7CiAgICAgCiBjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNl
cnZlciB7CkBAIC01NSw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkRXhp
dEZ1bGxzY3JlZW4oKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZENsZWFudXBGdWxsc2NyZWVu
KCkgPSAwOwogfTsKLSAgICAKKwogY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQKICAgICA6IHB1YmxpYyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UKICAgICAsIHB1Ymxp
YyBSZWZDb3VudGVkPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiB7CkBAIC04OCwx
MyArOTIsMTMgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXRW
aWRlb0RpbWVuc2lvbnMoYm9vbCBoYXNWaWRlbywgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkg
b3ZlcnJpZGU7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNldFNlZWthYmxlUmFu
Z2VzKGNvbnN0IFRpbWVSYW5nZXMmKSBvdmVycmlkZTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIHZvaWQgc2V0Q2FuUGxheUZhc3RSZXZlcnNlKGJvb2wpIG92ZXJyaWRlOwotICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyhjb25z
dCBWZWN0b3I8U3RyaW5nPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgb3ZlcnJp
ZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNldExlZ2libGVNZWRpYVNlbGVj
dGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVj
dGVkSW5kZXgpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXRF
eHRlcm5hbFBsYXliYWNrKGJvb2wgZW5hYmxlZCwgRXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUs
IFN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIHZvaWQgc2V0QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9y
PFdURjo6U3RyaW5nPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgb3ZlcnJpZGU7
CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNldExlZ2libGVNZWRpYVNlbGVjdGlv
bk9wdGlvbnMoY29uc3QgVmVjdG9yPFdURjo6U3RyaW5nPiYgb3B0aW9ucywgdWludDY0X3Qgc2Vs
ZWN0ZWRJbmRleCkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNl
dEV4dGVybmFsUGxheWJhY2soYm9vbCBlbmFibGVkLCBFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlw
ZSwgV1RGOjpTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSkgb3ZlcnJpZGU7CiAKLSAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc2V0dXBGdWxsc2NyZWVuKFBsYXRmb3JtTGF5ZXImLCBX
ZWJDb3JlOjpJbnRSZWN0IGluaXRpYWxSZWN0LCBVSVZpZXcgKik7CisgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB2b2lkIHNldHVwRnVsbHNjcmVlbihQbGF0Zm9ybUxheWVyJiwgSW50UmVjdCBp
bml0aWFsUmVjdCwgVUlWaWV3ICopOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBl
bnRlckZ1bGxzY3JlZW4oKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZXhpdEZ1
bGxzY3JlZW4oV2ViQ29yZTo6SW50UmVjdCBmaW5hbFJlY3QpOworICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgdm9pZCBleGl0RnVsbHNjcmVlbihJbnRSZWN0IGZpbmFsUmVjdCk7CiAgICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNsZWFudXBGdWxsc2NyZWVuKCk7CiAgICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB2b2lkIGludmFsaWRhdGUoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIHZvaWQgcmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdC5tbQkocmV2aXNpb24gMTczMTgyKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVUaHJl
YWRSdW4uaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50LmgJKHJl
dmlzaW9uIDE3MzE4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDkyICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0KLSNpZm5k
ZWYgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnRfaAotI2RlZmluZSBXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudF9oCi0KLSNpZiBQTEFURk9STShJT1MpCi0KLSNp
bmNsdWRlIDxXZWJDb3JlL0V2ZW50TGlzdGVuZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0
UmVjdC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1MYXllci5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgSFRNTE1lZGlhRWxlbWVudDsKLWNsYXNzIFRleHRU
cmFjazsKLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZTsKLQotY2xhc3MgV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQgOiBwdWJsaWMgV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWwsIHB1YmxpYyBFdmVudExpc3RlbmVyIHsKLXB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9S
VCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudCgpOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50KCk7Ci0gICAg
dm9pZCBzZXRXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UoV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlKiBpbnRlcmZhY2UpIHttX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSA9IGludGVyZmFj
ZTt9Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRNZWRpYUVsZW1lbnQoSFRNTE1lZGlhRWxl
bWVudCopOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIo
UGxhdGZvcm1MYXllciopOwotICAgIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBo
YW5kbGVFdmVudChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29yZTo6RXZl
bnQqKSBvdmVycmlkZTsKLSAgICB2b2lkIHVwZGF0ZUZvckV2ZW50TmFtZShjb25zdCBXVEY6OkF0
b21pY1N0cmluZyYpOwotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBFdmVudExpc3RlbmVyJiBy
aHMpIG92ZXJyaWRlCi0gICAgICAgIHtyZXR1cm4gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RXZlbnRM
aXN0ZW5lcio+KHRoaXMpID09ICZyaHM7fQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2
b2lkIHBsYXkoKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcGF1
c2UoKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgdG9nZ2xlUGxh
eVN0YXRlKCkgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGJlZ2lu
U2NydWJiaW5nKCkgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGVu
ZFNjcnViYmluZygpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBz
ZWVrVG9UaW1lKGRvdWJsZSB0aW1lKSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIHZvaWQgZmFzdFNlZWsoZG91YmxlIHRpbWUpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgdm9pZCBiZWdpblNjYW5uaW5nRm9yd2FyZCgpIG92ZXJyaWRlOwotICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBiZWdpblNjYW5uaW5nQmFja3dhcmQoKSBvdmVycmlk
ZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZW5kU2Nhbm5pbmcoKSBvdmVycmlk
ZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcmVxdWVzdEV4aXRGdWxsc2NyZWVu
KCkgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNldFZpZGVvTGF5
ZXJGcmFtZShGbG9hdFJlY3QpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
dm9pZCBzZXRWaWRlb0xheWVyR3Jhdml0eShXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9H
cmF2aXR5KSBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc2VsZWN0
QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBpbmRleCkgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB2b2lkIHNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBpbmRl
eCkgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIGNvbnN0IFZlY3RvcjxXVEY6OkF0
b21pY1N0cmluZz4mIG9ic2VydmVkRXZlbnROYW1lcygpOwotICAgIGNvbnN0IFdURjo6QXRvbWlj
U3RyaW5nJiBldmVudE5hbWVBbGwoKTsKLSAgICAKLSAgICBSZWZQdHI8SFRNTE1lZGlhRWxlbWVu
dD4gbV9tZWRpYUVsZW1lbnQ7Ci0gICAgUmV0YWluUHRyPFBsYXRmb3JtTGF5ZXI+IG1fdmlkZW9G
dWxsc2NyZWVuTGF5ZXI7Ci0gICAgYm9vbCBtX2lzTGlzdGVuaW5nOwotICAgIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZSogbV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U7Ci0gICAgRmxvYXRS
ZWN0IG1fdmlkZW9GcmFtZTsKLSAgICBWZWN0b3I8UmVmUHRyPFRleHRUcmFjaz4+IG1fbGVnaWJs
ZVRyYWNrc0Zvck1lbnU7Ci0KLSAgICB2b2lkIHVwZGF0ZUxlZ2libGVPcHRpb25zKCk7Ci19Owot
Ci19Ci0KLSNlbmRpZgotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lv
cy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVs
ZW1lbnQubW0JKHJldmlzaW9uIDE3MzE4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lv
cy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5tbQkod29ya2luZyBjb3B5KQpA
QCAtMSwzODUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotCi0jaWYgUExBVEZPUk0oSU9TKQotCi0jaW1wb3J0
ICJXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5oIgotCi0jaW1wb3J0ICJET01F
dmVudEludGVybmFsLmgiCi0jaW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1wb3J0ICJNZWRpYUNvbnRy
b2xzSG9zdC5oIgotI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLmgiCi0jaW1w
b3J0IDxXZWJDb3JlL0RPTUV2ZW50TGlzdGVuZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRXZlbnQu
aD4KLSNpbXBvcnQgPFdlYkNvcmUvRXZlbnRMaXN0ZW5lci5oPgotI2ltcG9ydCA8V2ViQ29yZS9F
dmVudE5hbWVzLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0hUTUxFbGVtZW50Lmg+Ci0jaW1wb3J0IDxX
ZWJDb3JlL0hUTUxNZWRpYUVsZW1lbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvSFRNTFZpZGVvRWxl
bWVudC5oPgotI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1BhZ2VH
cm91cC5oPgotI2ltcG9ydCA8V2ViQ29yZS9Tb2Z0TGlua2luZy5oPgotI2ltcG9ydCA8V2ViQ29y
ZS9UZXh0VHJhY2tMaXN0Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1RpbWVSYW5nZXMuaD4KLSNpbXBv
cnQgPFdlYkNvcmUvV2ViQ29yZVRocmVhZFJ1bi5oPgotI2ltcG9ydCA8UXVhcnR6Q29yZS9Db3Jl
QW5pbWF0aW9uLmg+Ci0jaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbXBvcnQgPHd0
Zi9SZXRhaW5QdHIuaD4KLQotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFF
bGVtZW50KCkKLSAgICA6IEV2ZW50TGlzdGVuZXIoRXZlbnRMaXN0ZW5lcjo6Q1BQRXZlbnRMaXN0
ZW5lclR5cGUpCi0gICAgLCBtX2lzTGlzdGVuaW5ne2ZhbHNlfQotewotfQotCi1XZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6fldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFF
bGVtZW50KCkKLXsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVu
dDo6c2V0TWVkaWFFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKLXsKLSAg
ICBpZiAobV9tZWRpYUVsZW1lbnQgPT0gbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9tZWRpYUVsZW1lbnQgJiYgbV9pc0xpc3RlbmluZykgewotICAgICAgICBmb3Ig
KGF1dG8gZXZlbnROYW1lIDogb2JzZXJ2ZWRFdmVudE5hbWVzKCkpCi0gICAgICAgICAgICBtX21l
ZGlhRWxlbWVudC0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIHRoaXMsIGZhbHNlKTsK
LSAgICB9Ci0gICAgbV9pc0xpc3RlbmluZyA9IGZhbHNlOwotCi0gICAgbV9tZWRpYUVsZW1lbnQg
PSBtZWRpYUVsZW1lbnQ7Ci0KLSAgICBpZiAoIW1fbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1
cm47Ci0KLSAgICBmb3IgKGF1dG8gZXZlbnROYW1lIDogb2JzZXJ2ZWRFdmVudE5hbWVzKCkpCi0g
ICAgICAgIG1fbWVkaWFFbGVtZW50LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgdGhpcywg
ZmFsc2UpOwotICAgIG1faXNMaXN0ZW5pbmcgPSB0cnVlOwotCi0gICAgdXBkYXRlRm9yRXZlbnRO
YW1lKGV2ZW50TmFtZUFsbCgpKTsKLQotICAgIGlmIChpc0hUTUxWaWRlb0VsZW1lbnQobV9tZWRp
YUVsZW1lbnQuZ2V0KCkpKSB7Ci0gICAgICAgIEhUTUxWaWRlb0VsZW1lbnQgKnZpZGVvRWxlbWVu
dCA9IHRvSFRNTFZpZGVvRWxlbWVudChtX21lZGlhRWxlbWVudC5nZXQoKSk7Ci0gICAgICAgIG1f
dmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRWaWRlb0RpbWVuc2lvbnModHJ1ZSwgdmlkZW9F
bGVtZW50LT52aWRlb1dpZHRoKCksIHZpZGVvRWxlbWVudC0+dmlkZW9IZWlnaHQoKSk7Ci0gICAg
fSBlbHNlCi0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRWaWRlb0RpbWVu
c2lvbnMoZmFsc2UsIDAsIDApOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVk
aWFFbGVtZW50OjpoYW5kbGVFdmVudChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
V2ViQ29yZTo6RXZlbnQqIGV2ZW50KQotewotICAgIExPRyhNZWRpYSwgImhhbmRsZUV2ZW50ICVz
IiwgZXZlbnQtPnR5cGUoKS5jaGFyYWN0ZXJzOCgpKTsKLSAgICB1cGRhdGVGb3JFdmVudE5hbWUo
ZXZlbnQtPnR5cGUoKSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVs
ZW1lbnQ6OnVwZGF0ZUZvckV2ZW50TmFtZShjb25zdCBXVEY6OkF0b21pY1N0cmluZyYgZXZlbnRO
YW1lKQotewotICAgIGlmICghbV9tZWRpYUVsZW1lbnQgfHwgIW1fdmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYm9vbCBhbGwgPSBldmVudE5hbWUg
PT0gZXZlbnROYW1lQWxsKCk7Ci0KLSAgICBpZiAoYWxsCi0gICAgICAgIHx8IGV2ZW50TmFtZSA9
PSBldmVudE5hbWVzKCkuZHVyYXRpb25jaGFuZ2VFdmVudCkgewotICAgICAgICBtX3ZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZS0+c2V0RHVyYXRpb24obV9tZWRpYUVsZW1lbnQtPmR1cmF0aW9uKCkp
OwotICAgICAgICAvLyBUaGVzZSBpcyBubyBzdGFuZGFyZCBldmVudCBmb3IgbWluRmFzdFJldmVy
c2VSYXRlQ2hhbmdlOyBkdXJhdGlvbiBjaGFuZ2UgaXMgYSByZWFzb25hYmxlIHByb3h5IGZvciBp
dC4KLSAgICAgICAgLy8gSXQgaGFwcGVucyBldmVyeSB0aW1lIGEgbmV3IGl0ZW0gYmVjb21lcyBy
ZWFkeSB0byBwbGF5LgotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0Q2Fu
UGxheUZhc3RSZXZlcnNlKG1fbWVkaWFFbGVtZW50LT5taW5GYXN0UmV2ZXJzZVJhdGUoKSA8IDAu
MCk7Ci0gICAgfQotCi0gICAgaWYgKGFsbAotICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnRO
YW1lcygpLnBhdXNlRXZlbnQKLSAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5w
bGF5RXZlbnQKLSAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5yYXRlY2hhbmdl
RXZlbnQpCi0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRSYXRlKCFtX21l
ZGlhRWxlbWVudC0+cGF1c2VkKCksIG1fbWVkaWFFbGVtZW50LT5wbGF5YmFja1JhdGUoKSk7Ci0K
LSAgICBpZiAoYWxsCi0gICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkudGltZXVw
ZGF0ZUV2ZW50KSB7Ci0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRDdXJy
ZW50VGltZShtX21lZGlhRWxlbWVudC0+Y3VycmVudFRpbWUoKSwgW1tOU1Byb2Nlc3NJbmZvIHBy
b2Nlc3NJbmZvXSBzeXN0ZW1VcHRpbWVdKTsKLSAgICAgICAgLy8gRklYTUU6IDEzMDc4OCAtIGZp
bmQgYSBiZXR0ZXIgZXZlbnQgdG8gdXBkYXRlIHNlZWthYmxlIHJhbmdlcyBmcm9tLgotICAgICAg
ICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0U2Vla2FibGVSYW5nZXMoKm1fbWVkaWFF
bGVtZW50LT5zZWVrYWJsZSgpKTsKLSAgICB9Ci0KLSAgICBpZiAoYWxsCi0gICAgICAgIHx8IGV2
ZW50TmFtZSA9PSBldmVudE5hbWVzKCkuYWRkdHJhY2tFdmVudAotICAgICAgICB8fCBldmVudE5h
bWUgPT0gZXZlbnROYW1lcygpLnJlbW92ZXRyYWNrRXZlbnQpCi0gICAgICAgIHVwZGF0ZUxlZ2li
bGVPcHRpb25zKCk7Ci0KLSAgICBpZiAoYWxsCi0gICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVu
dE5hbWVzKCkud2Via2l0Y3VycmVudHBsYXliYWNrdGFyZ2V0aXN3aXJlbGVzc2NoYW5nZWRFdmVu
dCkgewotICAgICAgICBib29sIGVuYWJsZWQgPSBtX21lZGlhRWxlbWVudC0+bWVkaWFTZXNzaW9u
KCkuY3VycmVudFBsYXliYWNrVGFyZ2V0SXNXaXJlbGVzcygqbV9tZWRpYUVsZW1lbnQpOwotICAg
ICAgICBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRU
eXBlIHRhcmdldFR5cGUgPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U6OlRhcmdldFR5cGVO
b25lOwotICAgICAgICBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZTsKLQotICAgICAgICBpZiAo
bV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCkpIHsKLSAgICAgICAgICAgIERFUFJF
Q0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGFpcnBsYXksIChBU0NJSUxpdGVyYWwo
ImFpcnBsYXkiKSkpOwotICAgICAgICAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FM
KFN0cmluZywgdHZvdXQsIChBU0NJSUxpdGVyYWwoInR2b3V0IikpKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgU3RyaW5nIHR5cGUgPSBtX21lZGlhRWxlbWVudC0+bWVkaWFDb250cm9sc0hv
c3QoKS0+ZXh0ZXJuYWxEZXZpY2VUeXBlKCk7Ci0gICAgICAgICAgICBpZiAodHlwZSA9PSBhaXJw
bGF5KQotICAgICAgICAgICAgICAgIHRhcmdldFR5cGUgPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2U6OlRhcmdldFR5cGVBaXJQbGF5OwotICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSB0
dm91dCkKLSAgICAgICAgICAgICAgICB0YXJnZXRUeXBlID0gV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlOjpUYXJnZXRUeXBlVFZPdXQ7Ci0gICAgICAgICAgICBsb2NhbGl6ZWREZXZpY2VOYW1l
ID0gbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCktPmV4dGVybmFsRGV2aWNlRGlz
cGxheU5hbWUoKTsKLSAgICAgICAgfQotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZS0+c2V0RXh0ZXJuYWxQbGF5YmFjayhlbmFibGVkLCB0YXJnZXRUeXBlLCBsb2NhbGl6ZWREZXZp
Y2VOYW1lKTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVs
ZW1lbnQ6OnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKFBsYXRmb3JtTGF5ZXIqIHZpZGVvTGF5ZXIp
Ci17Ci0gICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIgPT0gdmlkZW9MYXllcikKLSAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIgPSB2aWRlb0xheWVy
OwotICAgIFttX3ZpZGVvRnVsbHNjcmVlbkxheWVyIHNldEZyYW1lOm1fdmlkZW9GcmFtZV07Ci0g
ICAgCi0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1l
bnQ+IHByb3RlY3QodGhpcyk7Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgIGlmIChtX21l
ZGlhRWxlbWVudCkKLSAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5zZXRWaWRlb0Z1bGxzY3Jl
ZW5MYXllcihtX3ZpZGVvRnVsbHNjcmVlbkxheWVyLmdldCgpKTsKLSAgICAgICAgcHJvdGVjdC5j
bGVhcigpOwotICAgIH0pOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFF
bGVtZW50OjpwbGF5KCkgewotICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsTWVkaWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOwotICAgIFdlYlRocmVhZFJ1biheewotICAg
ICAgICBpZiAobV9tZWRpYUVsZW1lbnQpCi0gICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+cGxh
eSgpOwotICAgICAgICBwcm90ZWN0LmNsZWFyKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnBhdXNlKCkKLXsKLSAgICBfX2Jsb2NrIFJl
ZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsK
LSAgICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAg
ICAgICAgbV9tZWRpYUVsZW1lbnQtPnBhdXNlKCk7Ci0gICAgICAgIHByb3RlY3QuY2xlYXIoKTsK
LSAgICB9KTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6
dG9nZ2xlUGxheVN0YXRlKCkKLXsKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKLSAgICBXZWJUaHJlYWRSdW4oXnsK
LSAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQt
PnRvZ2dsZVBsYXlTdGF0ZSgpOwotICAgICAgICBwcm90ZWN0LmNsZWFyKCk7Ci0gICAgfSk7Ci19
Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OmJlZ2luU2NydWJi
aW5nKCkKLXsKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlh
RWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKLSAgICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgaWYg
KG1fbWVkaWFFbGVtZW50KQotICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmJlZ2luU2NydWJi
aW5nKCk7Ci0gICAgICAgIHByb3RlY3QuY2xlYXIoKTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6ZW5kU2NydWJiaW5nKCkKLXsKLSAgICBf
X2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVj
dCh0aGlzKTsKLSAgICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50
KQotICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmVuZFNjcnViYmluZygpOwotICAgICAgICBw
cm90ZWN0LmNsZWFyKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxNZWRpYUVsZW1lbnQ6OnNlZWtUb1RpbWUoZG91YmxlIHRpbWUpCi17Ci0gICAgX19ibG9jayBS
ZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7
Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAg
ICAgICAgIG1fbWVkaWFFbGVtZW50LT5zZXRDdXJyZW50VGltZSh0aW1lKTsKLSAgICAgICAgcHJv
dGVjdC5jbGVhcigpOwotICAgIH0pOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
TWVkaWFFbGVtZW50OjpmYXN0U2Vlayhkb3VibGUgdGltZSkKLXsKLSAgICBfX2Jsb2NrIFJlZlB0
cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKLSAg
ICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICAg
ICAgbV9tZWRpYUVsZW1lbnQtPmZhc3RTZWVrKHRpbWUpOwotICAgICAgICBwcm90ZWN0LmNsZWFy
KCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1l
bnQ6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkKLXsKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKLSAgICBXZWJUaHJl
YWRSdW4oXnsKLSAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICAgICAgbV9tZWRp
YUVsZW1lbnQtPmJlZ2luU2Nhbm5pbmcoTWVkaWFDb250cm9sbGVySW50ZXJmYWNlOjpGb3J3YXJk
KTsKLSAgICAgICAgcHJvdGVjdC5jbGVhcigpOwotICAgIH0pOwotfQotCi12b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpiZWdpblNjYW5uaW5nQmFja3dhcmQoKQotewot
ICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50PiBw
cm90ZWN0KHRoaXMpOwotICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICBpZiAobV9tZWRpYUVs
ZW1lbnQpCi0gICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+YmVnaW5TY2FubmluZyhNZWRpYUNv
bnRyb2xsZXJJbnRlcmZhY2U6OkJhY2t3YXJkKTsKLSAgICAgICAgcHJvdGVjdC5jbGVhcigpOwot
ICAgIH0pOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50Ojpl
bmRTY2FubmluZygpCi17Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxNZWRpYUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0gICAg
ICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5lbmRT
Y2FubmluZygpOwotICAgICAgICBwcm90ZWN0LmNsZWFyKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnJlcXVlc3RFeGl0RnVsbHNjcmVl
bigpCi17Ci0gICAgaWYgKCFtX21lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
X19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+IHByb3Rl
Y3QodGhpcyk7Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgIGlmIChtX21lZGlhRWxlbWVu
dCAmJiBtX21lZGlhRWxlbWVudC0+aXNGdWxsc2NyZWVuKCkpCi0gICAgICAgICAgICBtX21lZGlh
RWxlbWVudC0+ZXhpdEZ1bGxzY3JlZW4oKTsKLSAgICAgICAgcHJvdGVjdC5jbGVhcigpOwotICAg
IH0pOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpzZXRW
aWRlb0xheWVyRnJhbWUoRmxvYXRSZWN0IHJlY3QpCi17Ci0gICAgbV92aWRlb0ZyYW1lID0gcmVj
dDsKLSAgICBbbV92aWRlb0Z1bGxzY3JlZW5MYXllciBzZXRGcmFtZTpDR1JlY3QocmVjdCldOwot
ICAgIG1fbWVkaWFFbGVtZW50LT5zZXRWaWRlb0Z1bGxzY3JlZW5GcmFtZShyZWN0KTsKLX0KLQot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6c2V0VmlkZW9MYXllckdy
YXZpdHkoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSBncmF2aXR5KQotewot
ICAgIE1lZGlhUGxheWVyOjpWaWRlb0dyYXZpdHkgdmlkZW9HcmF2aXR5ID0gTWVkaWFQbGF5ZXI6
OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdDsKLSAgICBpZiAoZ3Jhdml0eSA9PSBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplKQotICAgICAgICB2aWRlb0dyYXZpdHkg
PSBNZWRpYVBsYXllcjo6VmlkZW9HcmF2aXR5UmVzaXplOwotICAgIGVsc2UgaWYgKGdyYXZpdHkg
PT0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCkKLSAg
ICAgICAgdmlkZW9HcmF2aXR5ID0gTWVkaWFQbGF5ZXI6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVj
dDsKLSAgICBlbHNlIGlmIChncmF2aXR5ID09IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRl
b0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsKQotICAgICAgICB2aWRlb0dyYXZpdHkgPSBNZWRpYVBs
YXllcjo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbDsKLSAgICBlbHNlCi0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIAotICAgIG1fbWVkaWFFbGVtZW50LT5zZXRWaWRlb0Z1
bGxzY3JlZW5HcmF2aXR5KHZpZGVvR3Jhdml0eSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QpCi17
Ci0gICAgLy8gRklYTUU6IDEzMTIzNiBJbXBsZW1lbnQgYXVkaW8gdHJhY2sgc2VsZWN0aW9uLgot
fQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpzZWxlY3RMZWdp
YmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpCi17Ci0gICAgVGV4dFRyYWNrKiB0ZXh0VHJh
Y2sgPSBudWxscHRyOwotICAgIAotICAgIGlmIChpbmRleCA8IG1fbGVnaWJsZVRyYWNrc0Zvck1l
bnUuc2l6ZSgpKQotICAgICAgICB0ZXh0VHJhY2sgPSBtX2xlZ2libGVUcmFja3NGb3JNZW51W3N0
YXRpY19jYXN0PHNpemVfdD4oaW5kZXgpXS5nZXQoKTsKLSAgICAKLSAgICBtX21lZGlhRWxlbWVu
dC0+c2V0U2VsZWN0ZWRUZXh0VHJhY2sodGV4dFRyYWNrKTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6dXBkYXRlTGVnaWJsZU9wdGlvbnMoKQotewotICAg
IFRleHRUcmFja0xpc3QqIHRyYWNrTGlzdCA9IG1fbWVkaWFFbGVtZW50LT50ZXh0VHJhY2tzKCk7
Ci0gICAgaWYgKCF0cmFja0xpc3QgfHwgIW1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2Uo
KSB8fCAhbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICAKLSAgICBXVEY6OkF0b21pY1N0cmluZyBkaXNwbGF5TW9kZSA9IG1fbWVkaWFFbGVt
ZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgpLT5jYXB0aW9uRGlzcGxheU1vZGUoKTsKLSAgICBUZXh0
VHJhY2sqIG9mZkl0ZW0gPSBtX21lZGlhRWxlbWVudC0+bWVkaWFDb250cm9sc0hvc3QoKS0+Y2Fw
dGlvbk1lbnVPZmZJdGVtKCk7Ci0gICAgVGV4dFRyYWNrKiBhdXRvbWF0aWNJdGVtID0gbV9tZWRp
YUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCktPmNhcHRpb25NZW51QXV0b21hdGljSXRlbSgp
OwotICAgIENhcHRpb25Vc2VyUHJlZmVyZW5jZXMmIGNhcHRpb25QcmVmZXJlbmNlcyA9ICptX21l
ZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCktPmdyb3VwKCkuY2FwdGlvblByZWZlcmVuY2Vz
KCk7Ci0gICAgbV9sZWdpYmxlVHJhY2tzRm9yTWVudSA9IGNhcHRpb25QcmVmZXJlbmNlcy5zb3J0
ZWRUcmFja0xpc3RGb3JNZW51KHRyYWNrTGlzdCk7Ci0gICAgVmVjdG9yPFN0cmluZz4gdHJhY2tE
aXNwbGF5TmFtZXM7Ci0gICAgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCA9IDA7Ci0gICAgdWludDY0
X3Qgb2ZmSW5kZXggPSAwOwotICAgIGJvb2wgdHJhY2tNZW51SXRlbVNlbGVjdGVkID0gZmFsc2U7
Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG1fbGVnaWJsZVRyYWNr
c0Zvck1lbnUuc2l6ZSgpOyBpbmRleCsrKSB7Ci0gICAgICAgIGF1dG8mIHRyYWNrID0gbV9sZWdp
YmxlVHJhY2tzRm9yTWVudVtpbmRleF07Ci0gICAgICAgIHRyYWNrRGlzcGxheU5hbWVzLmFwcGVu
ZChjYXB0aW9uUHJlZmVyZW5jZXMuZGlzcGxheU5hbWVGb3JUcmFjayh0cmFjay5nZXQoKSkpOwot
ICAgICAgICAKLSAgICAgICAgaWYgKHRyYWNrID09IG9mZkl0ZW0pCi0gICAgICAgICAgICBvZmZJ
bmRleCA9IGluZGV4OwotICAgICAgICAKLSAgICAgICAgaWYgKHRyYWNrID09IGF1dG9tYXRpY0l0
ZW0gJiYgZGlzcGxheU1vZGUgPT0gTWVkaWFDb250cm9sc0hvc3Q6OmF1dG9tYXRpY0tleXdvcmQo
KSkgewotICAgICAgICAgICAgc2VsZWN0ZWRJbmRleCA9IGluZGV4OwotICAgICAgICAgICAgdHJh
Y2tNZW51SXRlbVNlbGVjdGVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
aWYgKGRpc3BsYXlNb2RlICE9IE1lZGlhQ29udHJvbHNIb3N0OjphdXRvbWF0aWNLZXl3b3JkKCkg
JiYgdHJhY2stPm1vZGUoKSA9PSBUZXh0VHJhY2s6OnNob3dpbmdLZXl3b3JkKCkpIHsKLSAgICAg
ICAgICAgIHNlbGVjdGVkSW5kZXggPSBpbmRleDsKLSAgICAgICAgICAgIHRyYWNrTWVudUl0ZW1T
ZWxlY3RlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYgKG9mZkluZGV4
ICYmICF0cmFja01lbnVJdGVtU2VsZWN0ZWQgJiYgZGlzcGxheU1vZGUgPT0gTWVkaWFDb250cm9s
c0hvc3Q6OmZvcmNlZE9ubHlLZXl3b3JkKCkpIHsKLSAgICAgICAgc2VsZWN0ZWRJbmRleCA9IG9m
ZkluZGV4OwotICAgICAgICB0cmFja01lbnVJdGVtU2VsZWN0ZWQgPSB0cnVlOwotICAgIH0KLSAg
ICAKLSAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0TGVnaWJsZU1lZGlhU2VsZWN0
aW9uT3B0aW9ucyh0cmFja0Rpc3BsYXlOYW1lcywgc2VsZWN0ZWRJbmRleCk7Ci19Ci0KLWNvbnN0
IFZlY3RvcjxBdG9taWNTdHJpbmc+JiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVu
dDo6b2JzZXJ2ZWRFdmVudE5hbWVzKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VmVj
dG9yPEF0b21pY1N0cmluZz4+IHNFdmVudE5hbWVzOwotCi0gICAgaWYgKCFzRXZlbnROYW1lcy5n
ZXQoKS5zaXplKCkpIHsKLSAgICAgICAgc0V2ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFt
ZXMoKS5kdXJhdGlvbmNoYW5nZUV2ZW50KTsKLSAgICAgICAgc0V2ZW50TmFtZXMuZ2V0KCkuYXBw
ZW5kKGV2ZW50TmFtZXMoKS5wYXVzZUV2ZW50KTsKLSAgICAgICAgc0V2ZW50TmFtZXMuZ2V0KCku
YXBwZW5kKGV2ZW50TmFtZXMoKS5wbGF5RXZlbnQpOwotICAgICAgICBzRXZlbnROYW1lcy5nZXQo
KS5hcHBlbmQoZXZlbnROYW1lcygpLnJhdGVjaGFuZ2VFdmVudCk7Ci0gICAgICAgIHNFdmVudE5h
bWVzLmdldCgpLmFwcGVuZChldmVudE5hbWVzKCkudGltZXVwZGF0ZUV2ZW50KTsKLSAgICAgICAg
c0V2ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFtZXMoKS5hZGR0cmFja0V2ZW50KTsKLSAg
ICAgICAgc0V2ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFtZXMoKS5yZW1vdmV0cmFja0V2
ZW50KTsKLSAgICAgICAgc0V2ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFtZXMoKS53ZWJr
aXRjdXJyZW50cGxheWJhY2t0YXJnZXRpc3dpcmVsZXNzY2hhbmdlZEV2ZW50KTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHNFdmVudE5hbWVzLmdldCgpOwotfQotCi1jb25zdCBBdG9taWNTdHJpbmcmIFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpldmVudE5hbWVBbGwoKQotewotICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHNFdmVudE5hbWVBbGwgPSAiYWxs
RXZlbnRzIjsKLSAgICByZXR1cm4gc0V2ZW50TmFtZUFsbDsKLX0KLQotI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaAkocmV2aXNpb24gMTczMTYxKQkoZnJvbSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVs
ZW1lbnQuaDoxNzMxNjEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDky
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZu
ZGVmIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50X2gKKyNkZWZpbmUgV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnRfaAorCisjaWYgUExBVEZPUk0oSU9TKQorCisj
aW5jbHVkZSA8V2ViQ29yZS9FdmVudExpc3RlbmVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GbG9h
dFJlY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtTGF5ZXIuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEhUTUxNZWRpYUVsZW1lbnQ7CitjbGFzcyBUZXh0
VHJhY2s7CitjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U7CisKK2NsYXNzIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50IDogcHVibGljIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsLCBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7CitwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBP
UlQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQoKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudCgpOworICAg
IHZvaWQgc2V0V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZSogaW50ZXJmYWNlKSB7bV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UgPSBpbnRlcmZh
Y2U7fQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TWVkaWFFbGVtZW50KEhUTUxNZWRpYUVs
ZW1lbnQqKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFZpZGVvRnVsbHNjcmVlbkxheWVy
KFBsYXRmb3JtTGF5ZXIqKTsKKyAgICAKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQg
aGFuZGxlRXZlbnQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkNvcmU6OkV2
ZW50Kikgb3ZlcnJpZGU7CisgICAgdm9pZCB1cGRhdGVGb3JFdmVudE5hbWUoY29uc3QgV1RGOjpB
dG9taWNTdHJpbmcmKTsKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRXZlbnRMaXN0ZW5lciYg
cmhzKSBvdmVycmlkZQorICAgICAgICB7cmV0dXJuIHN0YXRpY19jYXN0PFdlYkNvcmU6OkV2ZW50
TGlzdGVuZXIqPih0aGlzKSA9PSAmcmhzO30KKworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
dm9pZCBwbGF5KCkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHBh
dXNlKCkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHRvZ2dsZVBs
YXlTdGF0ZSgpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBiZWdp
blNjcnViYmluZygpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBl
bmRTY3J1YmJpbmcoKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQg
c2Vla1RvVGltZShkb3VibGUgdGltZSkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCB2b2lkIGZhc3RTZWVrKGRvdWJsZSB0aW1lKSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIHZvaWQgYmVnaW5TY2FubmluZ0ZvcndhcmQoKSBvdmVycmlkZTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgYmVnaW5TY2FubmluZ0JhY2t3YXJkKCkgb3ZlcnJp
ZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGVuZFNjYW5uaW5nKCkgb3ZlcnJp
ZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHJlcXVlc3RFeGl0RnVsbHNjcmVl
bigpIG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXRWaWRlb0xh
eWVyRnJhbWUoRmxvYXRSZWN0KSBvdmVycmlkZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IHZvaWQgc2V0VmlkZW9MYXllckdyYXZpdHkoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVv
R3Jhdml0eSkgb3ZlcnJpZGU7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNlbGVj
dEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpIG92ZXJyaWRlOworICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgdm9pZCBzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5k
ZXgpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8V1RGOjpB
dG9taWNTdHJpbmc+JiBvYnNlcnZlZEV2ZW50TmFtZXMoKTsKKyAgICBjb25zdCBXVEY6OkF0b21p
Y1N0cmluZyYgZXZlbnROYW1lQWxsKCk7CisgICAgCisgICAgUmVmUHRyPEhUTUxNZWRpYUVsZW1l
bnQ+IG1fbWVkaWFFbGVtZW50OworICAgIFJldGFpblB0cjxQbGF0Zm9ybUxheWVyPiBtX3ZpZGVv
RnVsbHNjcmVlbkxheWVyOworICAgIGJvb2wgbV9pc0xpc3RlbmluZzsKKyAgICBXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2UqIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOworICAgIEZsb2F0
UmVjdCBtX3ZpZGVvRnJhbWU7CisgICAgVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2s+PiBtX2xlZ2li
bGVUcmFja3NGb3JNZW51OworCisgICAgdm9pZCB1cGRhdGVMZWdpYmxlT3B0aW9ucygpOworfTsK
KworfQorCisjZW5kaWYKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0
LDggKzI0LDggQEAKICAqLwogCiAKLSNpZm5kZWYgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRp
YUVsZW1lbnRfaAotI2RlZmluZSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudF9o
CisjaWZuZGVmIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50X2gKKyNkZWZpbmUg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnRfaAogCiAjaWYgUExBVEZPUk0oSU9T
KQogCkBAIC0zOCwxNiArMzgsMTYgQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKLWNsYXNzIEhUTUxNZWRpYUVsZW1lbnQ7CitjbGFzcyBIVE1MVmlkZW9F
bGVtZW50OwogY2xhc3MgVGV4dFRyYWNrOwogY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlOwogCi1jbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudCA6IHB1Ymxp
YyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCwgcHVibGljIEV2ZW50TGlzdGVuZXIgeworY2xhc3Mg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQgOiBwdWJsaWMgV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWwsIHB1YmxpYyBFdmVudExpc3RlbmVyIHsKIHB1YmxpYzoKLSAgICBXRUJDT1JF
X0VYUE9SVCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudCgpOwotICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50KCk7
CisgICAgV0VCQ09SRV9FWFBPUlQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQo
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZp
ZGVvRWxlbWVudCgpOwogICAgIHZvaWQgc2V0V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSogaW50ZXJmYWNlKSB7bV92aWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2UgPSBpbnRlcmZhY2U7fQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TWVkaWFF
bGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFZp
ZGVvRWxlbWVudChIVE1MVmlkZW9FbGVtZW50Kik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBz
ZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihQbGF0Zm9ybUxheWVyKik7CiAgICAgCiAgICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBXZWJDb3JlOjpFdmVudCopIG92ZXJyaWRlOwpAQCAtNzUsNyArNzUsNyBAQCBw
cml2YXRlOgogICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8V1RGOjpBdG9taWNTdHJpbmc+JiBvYnNl
cnZlZEV2ZW50TmFtZXMoKTsKICAgICBjb25zdCBXVEY6OkF0b21pY1N0cmluZyYgZXZlbnROYW1l
QWxsKCk7CiAgICAgCi0gICAgUmVmUHRyPEhUTUxNZWRpYUVsZW1lbnQ+IG1fbWVkaWFFbGVtZW50
OworICAgIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50PiBtX3ZpZGVvRWxlbWVudDsKICAgICBSZXRh
aW5QdHI8UGxhdGZvcm1MYXllcj4gbV92aWRlb0Z1bGxzY3JlZW5MYXllcjsKICAgICBib29sIG1f
aXNMaXN0ZW5pbmc7CiAgICAgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKiBtX3ZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQu
bW0JKHJldmlzaW9uIDE3MzE2MSkJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50Lm1tOjE3MzE2MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5t
bQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorCisjaWYgUExBVEZP
Uk0oSU9TKQorCisjaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudC5o
IgorCisjaW1wb3J0ICJET01FdmVudEludGVybmFsLmgiCisjaW1wb3J0ICJMb2dnaW5nLmgiCisj
aW1wb3J0ICJNZWRpYUNvbnRyb2xzSG9zdC5oIgorI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlLmgiCisjaW1wb3J0IDxXZWJDb3JlL0RPTUV2ZW50TGlzdGVuZXIuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvRXZlbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRXZlbnRMaXN0ZW5lci5oPgor
I2ltcG9ydCA8V2ViQ29yZS9FdmVudE5hbWVzLmg+CisjaW1wb3J0IDxXZWJDb3JlL0hUTUxFbGVt
ZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0hUTUxNZWRpYUVsZW1lbnQuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvSFRNTFZpZGVvRWxlbWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+CisjaW1w
b3J0IDxXZWJDb3JlL1BhZ2VHcm91cC5oPgorI2ltcG9ydCA8V2ViQ29yZS9Tb2Z0TGlua2luZy5o
PgorI2ltcG9ydCA8V2ViQ29yZS9UZXh0VHJhY2tMaXN0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1Rp
bWVSYW5nZXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZVRocmVhZFJ1bi5oPgorI2ltcG9y
dCA8UXVhcnR6Q29yZS9Db3JlQW5pbWF0aW9uLmg+CisjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95
ZWQuaD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKworCit1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKKworV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OldlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50KCkKKyAgICA6IEV2ZW50TGlzdGVuZXIoRXZlbnRMaXN0
ZW5lcjo6Q1BQRXZlbnRMaXN0ZW5lclR5cGUpCisgICAgLCBtX2lzTGlzdGVuaW5ne2ZhbHNlfQor
eworfQorCitXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6fldlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50KCkKK3sKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbE1lZGlhRWxlbWVudDo6c2V0TWVkaWFFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1l
ZGlhRWxlbWVudCkKK3sKKyAgICBpZiAobV9tZWRpYUVsZW1lbnQgPT0gbWVkaWFFbGVtZW50KQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9tZWRpYUVsZW1lbnQgJiYgbV9pc0xpc3Rlbmlu
ZykgeworICAgICAgICBmb3IgKGF1dG8gZXZlbnROYW1lIDogb2JzZXJ2ZWRFdmVudE5hbWVzKCkp
CisgICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5h
bWUsIHRoaXMsIGZhbHNlKTsKKyAgICB9CisgICAgbV9pc0xpc3RlbmluZyA9IGZhbHNlOworCisg
ICAgbV9tZWRpYUVsZW1lbnQgPSBtZWRpYUVsZW1lbnQ7CisKKyAgICBpZiAoIW1fbWVkaWFFbGVt
ZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGF1dG8gZXZlbnROYW1lIDogb2JzZXJ2
ZWRFdmVudE5hbWVzKCkpCisgICAgICAgIG1fbWVkaWFFbGVtZW50LT5hZGRFdmVudExpc3RlbmVy
KGV2ZW50TmFtZSwgdGhpcywgZmFsc2UpOworICAgIG1faXNMaXN0ZW5pbmcgPSB0cnVlOworCisg
ICAgdXBkYXRlRm9yRXZlbnROYW1lKGV2ZW50TmFtZUFsbCgpKTsKKworICAgIGlmIChpc0hUTUxW
aWRlb0VsZW1lbnQobV9tZWRpYUVsZW1lbnQuZ2V0KCkpKSB7CisgICAgICAgIEhUTUxWaWRlb0Vs
ZW1lbnQgKnZpZGVvRWxlbWVudCA9IHRvSFRNTFZpZGVvRWxlbWVudChtX21lZGlhRWxlbWVudC5n
ZXQoKSk7CisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRWaWRlb0RpbWVu
c2lvbnModHJ1ZSwgdmlkZW9FbGVtZW50LT52aWRlb1dpZHRoKCksIHZpZGVvRWxlbWVudC0+dmlk
ZW9IZWlnaHQoKSk7CisgICAgfSBlbHNlCisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlLT5zZXRWaWRlb0RpbWVuc2lvbnMoZmFsc2UsIDAsIDApOworfQorCit2b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpoYW5kbGVFdmVudChXZWJDb3JlOjpTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgV2ViQ29yZTo6RXZlbnQqIGV2ZW50KQoreworICAgIExPRyhNZWRp
YSwgImhhbmRsZUV2ZW50ICVzIiwgZXZlbnQtPnR5cGUoKS5jaGFyYWN0ZXJzOCgpKTsKKyAgICB1
cGRhdGVGb3JFdmVudE5hbWUoZXZlbnQtPnR5cGUoKSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnVwZGF0ZUZvckV2ZW50TmFtZShjb25zdCBXVEY6OkF0
b21pY1N0cmluZyYgZXZlbnROYW1lKQoreworICAgIGlmICghbV9tZWRpYUVsZW1lbnQgfHwgIW1f
dmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYm9v
bCBhbGwgPSBldmVudE5hbWUgPT0gZXZlbnROYW1lQWxsKCk7CisKKyAgICBpZiAoYWxsCisgICAg
ICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkuZHVyYXRpb25jaGFuZ2VFdmVudCkgewor
ICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0RHVyYXRpb24obV9tZWRpYUVs
ZW1lbnQtPmR1cmF0aW9uKCkpOworICAgICAgICAvLyBUaGVzZSBpcyBubyBzdGFuZGFyZCBldmVu
dCBmb3IgbWluRmFzdFJldmVyc2VSYXRlQ2hhbmdlOyBkdXJhdGlvbiBjaGFuZ2UgaXMgYSByZWFz
b25hYmxlIHByb3h5IGZvciBpdC4KKyAgICAgICAgLy8gSXQgaGFwcGVucyBldmVyeSB0aW1lIGEg
bmV3IGl0ZW0gYmVjb21lcyByZWFkeSB0byBwbGF5LgorICAgICAgICBtX3ZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZS0+c2V0Q2FuUGxheUZhc3RSZXZlcnNlKG1fbWVkaWFFbGVtZW50LT5taW5GYXN0
UmV2ZXJzZVJhdGUoKSA8IDAuMCk7CisgICAgfQorCisgICAgaWYgKGFsbAorICAgICAgICB8fCBl
dmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnBhdXNlRXZlbnQKKyAgICAgICAgfHwgZXZlbnROYW1l
ID09IGV2ZW50TmFtZXMoKS5wbGF5RXZlbnQKKyAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50
TmFtZXMoKS5yYXRlY2hhbmdlRXZlbnQpCisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlLT5zZXRSYXRlKCFtX21lZGlhRWxlbWVudC0+cGF1c2VkKCksIG1fbWVkaWFFbGVtZW50LT5w
bGF5YmFja1JhdGUoKSk7CisKKyAgICBpZiAoYWxsCisgICAgICAgIHx8IGV2ZW50TmFtZSA9PSBl
dmVudE5hbWVzKCkudGltZXVwZGF0ZUV2ZW50KSB7CisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlLT5zZXRDdXJyZW50VGltZShtX21lZGlhRWxlbWVudC0+Y3VycmVudFRpbWUoKSwg
W1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBzeXN0ZW1VcHRpbWVdKTsKKyAgICAgICAgLy8g
RklYTUU6IDEzMDc4OCAtIGZpbmQgYSBiZXR0ZXIgZXZlbnQgdG8gdXBkYXRlIHNlZWthYmxlIHJh
bmdlcyBmcm9tLgorICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0U2Vla2Fi
bGVSYW5nZXMoKm1fbWVkaWFFbGVtZW50LT5zZWVrYWJsZSgpKTsKKyAgICB9CisKKyAgICBpZiAo
YWxsCisgICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkuYWRkdHJhY2tFdmVudAor
ICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnJlbW92ZXRyYWNrRXZlbnQpCisg
ICAgICAgIHVwZGF0ZUxlZ2libGVPcHRpb25zKCk7CisKKyAgICBpZiAoYWxsCisgICAgICAgIHx8
IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkud2Via2l0Y3VycmVudHBsYXliYWNrdGFyZ2V0aXN3
aXJlbGVzc2NoYW5nZWRFdmVudCkgeworICAgICAgICBib29sIGVuYWJsZWQgPSBtX21lZGlhRWxl
bWVudC0+bWVkaWFTZXNzaW9uKCkuY3VycmVudFBsYXliYWNrVGFyZ2V0SXNXaXJlbGVzcygqbV9t
ZWRpYUVsZW1lbnQpOworICAgICAgICBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U6OkV4dGVy
bmFsUGxheWJhY2tUYXJnZXRUeXBlIHRhcmdldFR5cGUgPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2U6OlRhcmdldFR5cGVOb25lOworICAgICAgICBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFt
ZTsKKworICAgICAgICBpZiAobV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCkpIHsK
KyAgICAgICAgICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGFpcnBs
YXksIChBU0NJSUxpdGVyYWwoImFpcnBsYXkiKSkpOworICAgICAgICAgICAgREVQUkVDQVRFRF9E
RUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgdHZvdXQsIChBU0NJSUxpdGVyYWwoInR2b3V0Iikp
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3RyaW5nIHR5cGUgPSBtX21lZGlhRWxlbWVu
dC0+bWVkaWFDb250cm9sc0hvc3QoKS0+ZXh0ZXJuYWxEZXZpY2VUeXBlKCk7CisgICAgICAgICAg
ICBpZiAodHlwZSA9PSBhaXJwbGF5KQorICAgICAgICAgICAgICAgIHRhcmdldFR5cGUgPSBXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U6OlRhcmdldFR5cGVBaXJQbGF5OworICAgICAgICAgICAg
ZWxzZSBpZiAodHlwZSA9PSB0dm91dCkKKyAgICAgICAgICAgICAgICB0YXJnZXRUeXBlID0gV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOjpUYXJnZXRUeXBlVFZPdXQ7CisgICAgICAgICAgICBs
b2NhbGl6ZWREZXZpY2VOYW1lID0gbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCkt
PmV4dGVybmFsRGV2aWNlRGlzcGxheU5hbWUoKTsKKyAgICAgICAgfQorICAgICAgICBtX3ZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZS0+c2V0RXh0ZXJuYWxQbGF5YmFjayhlbmFibGVkLCB0YXJnZXRU
eXBlLCBsb2NhbGl6ZWREZXZpY2VOYW1lKTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKFBsYXRmb3Jt
TGF5ZXIqIHZpZGVvTGF5ZXIpCit7CisgICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIgPT0g
dmlkZW9MYXllcikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fdmlkZW9GdWxsc2NyZWVu
TGF5ZXIgPSB2aWRlb0xheWVyOworICAgIFttX3ZpZGVvRnVsbHNjcmVlbkxheWVyIHNldEZyYW1l
Om1fdmlkZW9GcmFtZV07CisgICAgCisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxNZWRpYUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7CisgICAgV2ViVGhyZWFkUnVuKF57
CisgICAgICAgIGlmIChtX21lZGlhRWxlbWVudCkKKyAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50
LT5zZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihtX3ZpZGVvRnVsbHNjcmVlbkxheWVyLmdldCgpKTsK
KyAgICAgICAgcHJvdGVjdC5jbGVhcigpOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpwbGF5KCkgeworICAgIF9fYmxvY2sgUmVmUHRyPFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOworICAgIFdl
YlRocmVhZFJ1biheeworICAgICAgICBpZiAobV9tZWRpYUVsZW1lbnQpCisgICAgICAgICAgICBt
X21lZGlhRWxlbWVudC0+cGxheSgpOworICAgICAgICBwcm90ZWN0LmNsZWFyKCk7CisgICAgfSk7
Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnBhdXNlKCkK
K3sKKyAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVu
dD4gcHJvdGVjdCh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgaWYgKG1fbWVk
aWFFbGVtZW50KQorICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnBhdXNlKCk7CisgICAgICAg
IHByb3RlY3QuY2xlYXIoKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbE1lZGlhRWxlbWVudDo6dG9nZ2xlUGxheVN0YXRlKCkKK3sKKyAgICBfX2Jsb2NrIFJlZlB0
cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKKyAg
ICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQorICAgICAgICAg
ICAgbV9tZWRpYUVsZW1lbnQtPnRvZ2dsZVBsYXlTdGF0ZSgpOworICAgICAgICBwcm90ZWN0LmNs
ZWFyKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVs
ZW1lbnQ6OmJlZ2luU2NydWJiaW5nKCkKK3sKKyAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKKyAgICBXZWJUaHJlYWRS
dW4oXnsKKyAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQorICAgICAgICAgICAgbV9tZWRpYUVs
ZW1lbnQtPmJlZ2luU2NydWJiaW5nKCk7CisgICAgICAgIHByb3RlY3QuY2xlYXIoKTsKKyAgICB9
KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6ZW5kU2Ny
dWJiaW5nKCkKK3sKKyAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1l
ZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAg
aWYgKG1fbWVkaWFFbGVtZW50KQorICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmVuZFNjcnVi
YmluZygpOworICAgICAgICBwcm90ZWN0LmNsZWFyKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnNlZWtUb1RpbWUoZG91YmxlIHRpbWUp
Cit7CisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1l
bnQ+IHByb3RlY3QodGhpcyk7CisgICAgV2ViVGhyZWFkUnVuKF57CisgICAgICAgIGlmIChtX21l
ZGlhRWxlbWVudCkKKyAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5zZXRDdXJyZW50VGltZSh0
aW1lKTsKKyAgICAgICAgcHJvdGVjdC5jbGVhcigpOworICAgIH0pOworfQorCit2b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpmYXN0U2Vlayhkb3VibGUgdGltZSkKK3sK
KyAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4g
cHJvdGVjdCh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgaWYgKG1fbWVkaWFF
bGVtZW50KQorICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmZhc3RTZWVrKHRpbWUpOworICAg
ICAgICBwcm90ZWN0LmNsZWFyKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkKK3sKKyAgICBfX2Js
b2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0
aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQor
ICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmJlZ2luU2Nhbm5pbmcoTWVkaWFDb250cm9sbGVy
SW50ZXJmYWNlOjpGb3J3YXJkKTsKKyAgICAgICAgcHJvdGVjdC5jbGVhcigpOworICAgIH0pOwor
fQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpiZWdpblNjYW5u
aW5nQmFja3dhcmQoKQoreworICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsTWVkaWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOworICAgIFdlYlRocmVhZFJ1biheeworICAg
ICAgICBpZiAobV9tZWRpYUVsZW1lbnQpCisgICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+YmVn
aW5TY2FubmluZyhNZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2U6OkJhY2t3YXJkKTsKKyAgICAgICAg
cHJvdGVjdC5jbGVhcigpOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsTWVkaWFFbGVtZW50OjplbmRTY2FubmluZygpCit7CisgICAgX19ibG9jayBSZWZQdHI8V2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7CisgICAgV2Vi
VGhyZWFkUnVuKF57CisgICAgICAgIGlmIChtX21lZGlhRWxlbWVudCkKKyAgICAgICAgICAgIG1f
bWVkaWFFbGVtZW50LT5lbmRTY2FubmluZygpOworICAgICAgICBwcm90ZWN0LmNsZWFyKCk7Cisg
ICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnJl
cXVlc3RFeGl0RnVsbHNjcmVlbigpCit7CisgICAgaWYgKCFtX21lZGlhRWxlbWVudCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxN
ZWRpYUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7CisgICAgV2ViVGhyZWFkUnVuKF57CisgICAgICAg
IGlmIChtX21lZGlhRWxlbWVudCAmJiBtX21lZGlhRWxlbWVudC0+aXNGdWxsc2NyZWVuKCkpCisg
ICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+ZXhpdEZ1bGxzY3JlZW4oKTsKKyAgICAgICAgcHJv
dGVjdC5jbGVhcigpOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
TWVkaWFFbGVtZW50OjpzZXRWaWRlb0xheWVyRnJhbWUoRmxvYXRSZWN0IHJlY3QpCit7CisgICAg
bV92aWRlb0ZyYW1lID0gcmVjdDsKKyAgICBbbV92aWRlb0Z1bGxzY3JlZW5MYXllciBzZXRGcmFt
ZTpDR1JlY3QocmVjdCldOworICAgIG1fbWVkaWFFbGVtZW50LT5zZXRWaWRlb0Z1bGxzY3JlZW5G
cmFtZShyZWN0KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVu
dDo6c2V0VmlkZW9MYXllckdyYXZpdHkoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jh
dml0eSBncmF2aXR5KQoreworICAgIE1lZGlhUGxheWVyOjpWaWRlb0dyYXZpdHkgdmlkZW9HcmF2
aXR5ID0gTWVkaWFQbGF5ZXI6OlZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdDsKKyAgICBpZiAoZ3Jh
dml0eSA9PSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplKQorICAg
ICAgICB2aWRlb0dyYXZpdHkgPSBNZWRpYVBsYXllcjo6VmlkZW9HcmF2aXR5UmVzaXplOworICAg
IGVsc2UgaWYgKGdyYXZpdHkgPT0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0
eVJlc2l6ZUFzcGVjdCkKKyAgICAgICAgdmlkZW9HcmF2aXR5ID0gTWVkaWFQbGF5ZXI6OlZpZGVv
R3Jhdml0eVJlc2l6ZUFzcGVjdDsKKyAgICBlbHNlIGlmIChncmF2aXR5ID09IFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsKQorICAgICAgICB2aWRl
b0dyYXZpdHkgPSBNZWRpYVBsYXllcjo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbDsKKyAg
ICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIAorICAgIG1fbWVkaWFF
bGVtZW50LT5zZXRWaWRlb0Z1bGxzY3JlZW5HcmF2aXR5KHZpZGVvR3Jhdml0eSk7Cit9CisKK3Zv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6OnNlbGVjdEF1ZGlvTWVkaWFP
cHRpb24odWludDY0X3QpCit7CisgICAgLy8gRklYTUU6IDEzMTIzNiBJbXBsZW1lbnQgYXVkaW8g
dHJhY2sgc2VsZWN0aW9uLgorfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFF
bGVtZW50OjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpCit7CisgICAg
VGV4dFRyYWNrKiB0ZXh0VHJhY2sgPSBudWxscHRyOworICAgIAorICAgIGlmIChpbmRleCA8IG1f
bGVnaWJsZVRyYWNrc0Zvck1lbnUuc2l6ZSgpKQorICAgICAgICB0ZXh0VHJhY2sgPSBtX2xlZ2li
bGVUcmFja3NGb3JNZW51W3N0YXRpY19jYXN0PHNpemVfdD4oaW5kZXgpXS5nZXQoKTsKKyAgICAK
KyAgICBtX21lZGlhRWxlbWVudC0+c2V0U2VsZWN0ZWRUZXh0VHJhY2sodGV4dFRyYWNrKTsKK30K
Kwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6dXBkYXRlTGVnaWJs
ZU9wdGlvbnMoKQoreworICAgIFRleHRUcmFja0xpc3QqIHRyYWNrTGlzdCA9IG1fbWVkaWFFbGVt
ZW50LT50ZXh0VHJhY2tzKCk7CisgICAgaWYgKCF0cmFja0xpc3QgfHwgIW1fbWVkaWFFbGVtZW50
LT5kb2N1bWVudCgpLnBhZ2UoKSB8fCAhbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0
KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBXVEY6OkF0b21pY1N0cmluZyBkaXNwbGF5
TW9kZSA9IG1fbWVkaWFFbGVtZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgpLT5jYXB0aW9uRGlzcGxh
eU1vZGUoKTsKKyAgICBUZXh0VHJhY2sqIG9mZkl0ZW0gPSBtX21lZGlhRWxlbWVudC0+bWVkaWFD
b250cm9sc0hvc3QoKS0+Y2FwdGlvbk1lbnVPZmZJdGVtKCk7CisgICAgVGV4dFRyYWNrKiBhdXRv
bWF0aWNJdGVtID0gbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCktPmNhcHRpb25N
ZW51QXV0b21hdGljSXRlbSgpOworICAgIENhcHRpb25Vc2VyUHJlZmVyZW5jZXMmIGNhcHRpb25Q
cmVmZXJlbmNlcyA9ICptX21lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCktPmdyb3VwKCku
Y2FwdGlvblByZWZlcmVuY2VzKCk7CisgICAgbV9sZWdpYmxlVHJhY2tzRm9yTWVudSA9IGNhcHRp
b25QcmVmZXJlbmNlcy5zb3J0ZWRUcmFja0xpc3RGb3JNZW51KHRyYWNrTGlzdCk7CisgICAgVmVj
dG9yPFN0cmluZz4gdHJhY2tEaXNwbGF5TmFtZXM7CisgICAgdWludDY0X3Qgc2VsZWN0ZWRJbmRl
eCA9IDA7CisgICAgdWludDY0X3Qgb2ZmSW5kZXggPSAwOworICAgIGJvb2wgdHJhY2tNZW51SXRl
bVNlbGVjdGVkID0gZmFsc2U7CisgICAgCisgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRl
eCA8IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnUuc2l6ZSgpOyBpbmRleCsrKSB7CisgICAgICAgIGF1
dG8mIHRyYWNrID0gbV9sZWdpYmxlVHJhY2tzRm9yTWVudVtpbmRleF07CisgICAgICAgIHRyYWNr
RGlzcGxheU5hbWVzLmFwcGVuZChjYXB0aW9uUHJlZmVyZW5jZXMuZGlzcGxheU5hbWVGb3JUcmFj
ayh0cmFjay5nZXQoKSkpOworICAgICAgICAKKyAgICAgICAgaWYgKHRyYWNrID09IG9mZkl0ZW0p
CisgICAgICAgICAgICBvZmZJbmRleCA9IGluZGV4OworICAgICAgICAKKyAgICAgICAgaWYgKHRy
YWNrID09IGF1dG9tYXRpY0l0ZW0gJiYgZGlzcGxheU1vZGUgPT0gTWVkaWFDb250cm9sc0hvc3Q6
OmF1dG9tYXRpY0tleXdvcmQoKSkgeworICAgICAgICAgICAgc2VsZWN0ZWRJbmRleCA9IGluZGV4
OworICAgICAgICAgICAgdHJhY2tNZW51SXRlbVNlbGVjdGVkID0gdHJ1ZTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgaWYgKGRpc3BsYXlNb2RlICE9IE1lZGlhQ29udHJvbHNIb3N0Ojph
dXRvbWF0aWNLZXl3b3JkKCkgJiYgdHJhY2stPm1vZGUoKSA9PSBUZXh0VHJhY2s6OnNob3dpbmdL
ZXl3b3JkKCkpIHsKKyAgICAgICAgICAgIHNlbGVjdGVkSW5kZXggPSBpbmRleDsKKyAgICAgICAg
ICAgIHRyYWNrTWVudUl0ZW1TZWxlY3RlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgaWYgKG9mZkluZGV4ICYmICF0cmFja01lbnVJdGVtU2VsZWN0ZWQgJiYgZGlzcGxheU1v
ZGUgPT0gTWVkaWFDb250cm9sc0hvc3Q6OmZvcmNlZE9ubHlLZXl3b3JkKCkpIHsKKyAgICAgICAg
c2VsZWN0ZWRJbmRleCA9IG9mZkluZGV4OworICAgICAgICB0cmFja01lbnVJdGVtU2VsZWN0ZWQg
PSB0cnVlOworICAgIH0KKyAgICAKKyAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0
TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyh0cmFja0Rpc3BsYXlOYW1lcywgc2VsZWN0ZWRJ
bmRleCk7Cit9CisKK2NvbnN0IFZlY3RvcjxBdG9taWNTdHJpbmc+JiBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbE1lZGlhRWxlbWVudDo6b2JzZXJ2ZWRFdmVudE5hbWVzKCkKK3sKKyAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8VmVjdG9yPEF0b21pY1N0cmluZz4+IHNFdmVudE5hbWVzOworCisgICAg
aWYgKCFzRXZlbnROYW1lcy5nZXQoKS5zaXplKCkpIHsKKyAgICAgICAgc0V2ZW50TmFtZXMuZ2V0
KCkuYXBwZW5kKGV2ZW50TmFtZXMoKS5kdXJhdGlvbmNoYW5nZUV2ZW50KTsKKyAgICAgICAgc0V2
ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFtZXMoKS5wYXVzZUV2ZW50KTsKKyAgICAgICAg
c0V2ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFtZXMoKS5wbGF5RXZlbnQpOworICAgICAg
ICBzRXZlbnROYW1lcy5nZXQoKS5hcHBlbmQoZXZlbnROYW1lcygpLnJhdGVjaGFuZ2VFdmVudCk7
CisgICAgICAgIHNFdmVudE5hbWVzLmdldCgpLmFwcGVuZChldmVudE5hbWVzKCkudGltZXVwZGF0
ZUV2ZW50KTsKKyAgICAgICAgc0V2ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFtZXMoKS5h
ZGR0cmFja0V2ZW50KTsKKyAgICAgICAgc0V2ZW50TmFtZXMuZ2V0KCkuYXBwZW5kKGV2ZW50TmFt
ZXMoKS5yZW1vdmV0cmFja0V2ZW50KTsKKyAgICAgICAgc0V2ZW50TmFtZXMuZ2V0KCkuYXBwZW5k
KGV2ZW50TmFtZXMoKS53ZWJraXRjdXJyZW50cGxheWJhY2t0YXJnZXRpc3dpcmVsZXNzY2hhbmdl
ZEV2ZW50KTsKKyAgICB9CisgICAgcmV0dXJuIHNFdmVudE5hbWVzLmdldCgpOworfQorCitjb25z
dCBBdG9taWNTdHJpbmcmIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpldmVu
dE5hbWVBbGwoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHNF
dmVudE5hbWVBbGwgPSAiYWxsRXZlbnRzIjsKKyAgICByZXR1cm4gc0V2ZW50TmFtZUFsbDsKK30K
KworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tCSh3b3Jr
aW5nIGNvcHkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTI2LDE5ICsyNiwxOCBA
QAogI2ltcG9ydCAiY29uZmlnLmgiCiAKICNpZiBQTEFURk9STShJT1MpCi0KLSNpbXBvcnQgIldl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50LmgiCisjaW1wb3J0ICJXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oIgogCiAjaW1wb3J0ICJET01FdmVudEludGVybmFs
LmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgiCiAjaW1wb3J0ICJNZWRpYUNvbnRyb2xzSG9zdC5oIgog
I2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLmgiCisjaW1wb3J0IDxRdWFydHpD
b3JlL0NvcmVBbmltYXRpb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvRE9NRXZlbnRMaXN0ZW5lci5o
PgogI2ltcG9ydCA8V2ViQ29yZS9FdmVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9FdmVudExpc3Rl
bmVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0V2ZW50TmFtZXMuaD4KICNpbXBvcnQgPFdlYkNvcmUv
SFRNTEVsZW1lbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvSFRNTE1lZGlhRWxlbWVudC5oPgogI2lt
cG9ydCA8V2ViQ29yZS9IVE1MVmlkZW9FbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BhZ2Uu
aD4KICNpbXBvcnQgPFdlYkNvcmUvUGFnZUdyb3VwLmg+CkBAIC00Niw4NCArNDUsNzkgQEAKICNp
bXBvcnQgPFdlYkNvcmUvVGV4dFRyYWNrTGlzdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9UaW1lUmFu
Z2VzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVUaHJlYWRSdW4uaD4KLSNpbXBvcnQgPFF1
YXJ0ekNvcmUvQ29yZUFuaW1hdGlvbi5oPgogI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+
CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CiAKLVdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbE1lZGlhRWxlbWVudCgpCitXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQoKQogICAgIDogRXZlbnRMaXN0
ZW5lcihFdmVudExpc3RlbmVyOjpDUFBFdmVudExpc3RlbmVyVHlwZSkKLSAgICAsIG1faXNMaXN0
ZW5pbmd7ZmFsc2V9CisgICAgLCBtX2lzTGlzdGVuaW5nKGZhbHNlKQogewogfQogCi1XZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6fldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVk
aWFFbGVtZW50KCkKK1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojp+V2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQoKQogewogfQogCi12b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpzZXRNZWRpYUVsZW1lbnQoSFRNTE1lZGlhRWxlbWVu
dCogbWVkaWFFbGVtZW50KQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dDo6c2V0VmlkZW9FbGVtZW50KEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvRWxlbWVudCkKIHsKLSAg
ICBpZiAobV9tZWRpYUVsZW1lbnQgPT0gbWVkaWFFbGVtZW50KQorICAgIGlmIChtX3ZpZGVvRWxl
bWVudCA9PSB2aWRlb0VsZW1lbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX21lZGlh
RWxlbWVudCAmJiBtX2lzTGlzdGVuaW5nKSB7CisgICAgaWYgKG1fdmlkZW9FbGVtZW50ICYmIG1f
aXNMaXN0ZW5pbmcpIHsKICAgICAgICAgZm9yIChhdXRvIGV2ZW50TmFtZSA6IG9ic2VydmVkRXZl
bnROYW1lcygpKQotICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnJlbW92ZUV2ZW50TGlzdGVu
ZXIoZXZlbnROYW1lLCB0aGlzLCBmYWxzZSk7CisgICAgICAgICAgICBtX3ZpZGVvRWxlbWVudC0+
cmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIHRoaXMsIGZhbHNlKTsKICAgICB9CiAgICAg
bV9pc0xpc3RlbmluZyA9IGZhbHNlOwogCi0gICAgbV9tZWRpYUVsZW1lbnQgPSBtZWRpYUVsZW1l
bnQ7CisgICAgbV92aWRlb0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7CiAKLSAgICBpZiAoIW1fbWVk
aWFFbGVtZW50KQorICAgIGlmICghbV92aWRlb0VsZW1lbnQpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGZvciAoYXV0byBldmVudE5hbWUgOiBvYnNlcnZlZEV2ZW50TmFtZXMoKSkKLSAgICAgICAg
bV9tZWRpYUVsZW1lbnQtPmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCB0aGlzLCBmYWxzZSk7
CisgICAgICAgIG1fdmlkZW9FbGVtZW50LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgdGhp
cywgZmFsc2UpOwogICAgIG1faXNMaXN0ZW5pbmcgPSB0cnVlOwogCiAgICAgdXBkYXRlRm9yRXZl
bnROYW1lKGV2ZW50TmFtZUFsbCgpKTsKIAotICAgIGlmIChpc0hUTUxWaWRlb0VsZW1lbnQobV9t
ZWRpYUVsZW1lbnQuZ2V0KCkpKSB7Ci0gICAgICAgIEhUTUxWaWRlb0VsZW1lbnQgKnZpZGVvRWxl
bWVudCA9IHRvSFRNTFZpZGVvRWxlbWVudChtX21lZGlhRWxlbWVudC5nZXQoKSk7Ci0gICAgICAg
IG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRWaWRlb0RpbWVuc2lvbnModHJ1ZSwgdmlk
ZW9FbGVtZW50LT52aWRlb1dpZHRoKCksIHZpZGVvRWxlbWVudC0+dmlkZW9IZWlnaHQoKSk7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRWaWRlb0Rp
bWVuc2lvbnMoZmFsc2UsIDAsIDApOworICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5z
ZXRWaWRlb0RpbWVuc2lvbnModHJ1ZSwgdmlkZW9FbGVtZW50LT52aWRlb1dpZHRoKCksIHZpZGVv
RWxlbWVudC0+dmlkZW9IZWlnaHQoKSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxNZWRpYUVsZW1lbnQ6OmhhbmRsZUV2ZW50KFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBXZWJDb3JlOjpFdmVudCogZXZlbnQpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50OjpoYW5kbGVFdmVudChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgV2ViQ29yZTo6RXZlbnQqIGV2ZW50KQogewogICAgIExPRyhNZWRpYSwgImhhbmRsZUV2ZW50
ICVzIiwgZXZlbnQtPnR5cGUoKS5jaGFyYWN0ZXJzOCgpKTsKICAgICB1cGRhdGVGb3JFdmVudE5h
bWUoZXZlbnQtPnR5cGUoKSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRp
YUVsZW1lbnQ6OnVwZGF0ZUZvckV2ZW50TmFtZShjb25zdCBXVEY6OkF0b21pY1N0cmluZyYgZXZl
bnROYW1lKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6dXBkYXRl
Rm9yRXZlbnROYW1lKGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJiBldmVudE5hbWUpCiB7Ci0gICAg
aWYgKCFtX21lZGlhRWxlbWVudCB8fCAhbV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UpCisgICAg
aWYgKCFtX3ZpZGVvRWxlbWVudCB8fCAhbV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UpCiAgICAg
ICAgIHJldHVybjsKICAgICAKICAgICBib29sIGFsbCA9IGV2ZW50TmFtZSA9PSBldmVudE5hbWVB
bGwoKTsKIAogICAgIGlmIChhbGwKICAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFtZXMo
KS5kdXJhdGlvbmNoYW5nZUV2ZW50KSB7Ci0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlLT5zZXREdXJhdGlvbihtX21lZGlhRWxlbWVudC0+ZHVyYXRpb24oKSk7CisgICAgICAgIG1f
dmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXREdXJhdGlvbihtX3ZpZGVvRWxlbWVudC0+ZHVy
YXRpb24oKSk7CiAgICAgICAgIC8vIFRoZXNlIGlzIG5vIHN0YW5kYXJkIGV2ZW50IGZvciBtaW5G
YXN0UmV2ZXJzZVJhdGVDaGFuZ2U7IGR1cmF0aW9uIGNoYW5nZSBpcyBhIHJlYXNvbmFibGUgcHJv
eHkgZm9yIGl0LgogICAgICAgICAvLyBJdCBoYXBwZW5zIGV2ZXJ5IHRpbWUgYSBuZXcgaXRlbSBi
ZWNvbWVzIHJlYWR5IHRvIHBsYXkuCi0gICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
LT5zZXRDYW5QbGF5RmFzdFJldmVyc2UobV9tZWRpYUVsZW1lbnQtPm1pbkZhc3RSZXZlcnNlUmF0
ZSgpIDwgMC4wKTsKKyAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UtPnNldENhblBs
YXlGYXN0UmV2ZXJzZShtX3ZpZGVvRWxlbWVudC0+bWluRmFzdFJldmVyc2VSYXRlKCkgPCAwLjAp
OwogICAgIH0KIAogICAgIGlmIChhbGwKICAgICAgICAgfHwgZXZlbnROYW1lID09IGV2ZW50TmFt
ZXMoKS5wYXVzZUV2ZW50CiAgICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkucGxh
eUV2ZW50CiAgICAgICAgIHx8IGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkucmF0ZWNoYW5nZUV2
ZW50KQotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0UmF0ZSghbV9tZWRp
YUVsZW1lbnQtPnBhdXNlZCgpLCBtX21lZGlhRWxlbWVudC0+cGxheWJhY2tSYXRlKCkpOworICAg
ICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0UmF0ZSghbV92aWRlb0VsZW1lbnQt
PnBhdXNlZCgpLCBtX3ZpZGVvRWxlbWVudC0+cGxheWJhY2tSYXRlKCkpOwogCiAgICAgaWYgKGFs
bAogICAgICAgICB8fCBldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnRpbWV1cGRhdGVFdmVudCkg
ewotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0Q3VycmVudFRpbWUobV9t
ZWRpYUVsZW1lbnQtPmN1cnJlbnRUaW1lKCksIFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10g
c3lzdGVtVXB0aW1lXSk7CisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRD
dXJyZW50VGltZShtX3ZpZGVvRWxlbWVudC0+Y3VycmVudFRpbWUoKSwgW1tOU1Byb2Nlc3NJbmZv
IHByb2Nlc3NJbmZvXSBzeXN0ZW1VcHRpbWVdKTsKICAgICAgICAgLy8gRklYTUU6IDEzMDc4OCAt
IGZpbmQgYSBiZXR0ZXIgZXZlbnQgdG8gdXBkYXRlIHNlZWthYmxlIHJhbmdlcyBmcm9tLgotICAg
ICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0U2Vla2FibGVSYW5nZXMoKm1fbWVk
aWFFbGVtZW50LT5zZWVrYWJsZSgpKTsKKyAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2UtPnNldFNlZWthYmxlUmFuZ2VzKCptX3ZpZGVvRWxlbWVudC0+c2Vla2FibGUoKSk7CiAgICAg
fQogCiAgICAgaWYgKGFsbApAQCAtMTMzLDI2ICsxMjcsMjYgQEAgdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbE1lZGlhRWxlbWVudAogCiAgICAgaWYgKGFsbAogICAgICAgICB8fCBldmVudE5h
bWUgPT0gZXZlbnROYW1lcygpLndlYmtpdGN1cnJlbnRwbGF5YmFja3RhcmdldGlzd2lyZWxlc3Nj
aGFuZ2VkRXZlbnQpIHsKLSAgICAgICAgYm9vbCBlbmFibGVkID0gbV9tZWRpYUVsZW1lbnQtPm1l
ZGlhU2Vzc2lvbigpLmN1cnJlbnRQbGF5YmFja1RhcmdldElzV2lyZWxlc3MoKm1fbWVkaWFFbGVt
ZW50KTsKKyAgICAgICAgYm9vbCBlbmFibGVkID0gbV92aWRlb0VsZW1lbnQtPm1lZGlhU2Vzc2lv
bigpLmN1cnJlbnRQbGF5YmFja1RhcmdldElzV2lyZWxlc3MoKm1fdmlkZW9FbGVtZW50KTsKICAg
ICAgICAgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0
VHlwZSB0YXJnZXRUeXBlID0gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOjpUYXJnZXRUeXBl
Tm9uZTsKICAgICAgICAgU3RyaW5nIGxvY2FsaXplZERldmljZU5hbWU7CiAKLSAgICAgICAgaWYg
KG1fbWVkaWFFbGVtZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgpKSB7CisgICAgICAgIGlmIChtX3Zp
ZGVvRWxlbWVudC0+bWVkaWFDb250cm9sc0hvc3QoKSkgewogICAgICAgICAgICAgREVQUkVDQVRF
RF9ERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYWlycGxheSwgKEFTQ0lJTGl0ZXJhbCgiYWly
cGxheSIpKSk7CiAgICAgICAgICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoU3Ry
aW5nLCB0dm91dCwgKEFTQ0lJTGl0ZXJhbCgidHZvdXQiKSkpOwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBTdHJpbmcgdHlwZSA9IG1fbWVkaWFFbGVtZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgp
LT5leHRlcm5hbERldmljZVR5cGUoKTsKKyAgICAgICAgICAgIFN0cmluZyB0eXBlID0gbV92aWRl
b0VsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCktPmV4dGVybmFsRGV2aWNlVHlwZSgpOwogICAg
ICAgICAgICAgaWYgKHR5cGUgPT0gYWlycGxheSkKICAgICAgICAgICAgICAgICB0YXJnZXRUeXBl
ID0gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOjpUYXJnZXRUeXBlQWlyUGxheTsKICAgICAg
ICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gdHZvdXQpCiAgICAgICAgICAgICAgICAgdGFyZ2V0VHlw
ZSA9IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZTo6VGFyZ2V0VHlwZVRWT3V0OwotICAgICAg
ICAgICAgbG9jYWxpemVkRGV2aWNlTmFtZSA9IG1fbWVkaWFFbGVtZW50LT5tZWRpYUNvbnRyb2xz
SG9zdCgpLT5leHRlcm5hbERldmljZURpc3BsYXlOYW1lKCk7CisgICAgICAgICAgICBsb2NhbGl6
ZWREZXZpY2VOYW1lID0gbV92aWRlb0VsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCktPmV4dGVy
bmFsRGV2aWNlRGlzcGxheU5hbWUoKTsKICAgICAgICAgfQogICAgICAgICBtX3ZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZS0+c2V0RXh0ZXJuYWxQbGF5YmFjayhlbmFibGVkLCB0YXJnZXRUeXBlLCBs
b2NhbGl6ZWREZXZpY2VOYW1lKTsKICAgICB9CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxNZWRpYUVsZW1lbnQ6OnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKFBsYXRmb3JtTGF5ZXIq
IHZpZGVvTGF5ZXIpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojpz
ZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihQbGF0Zm9ybUxheWVyKiB2aWRlb0xheWVyKQogewogICAg
IGlmIChtX3ZpZGVvRnVsbHNjcmVlbkxheWVyID09IHZpZGVvTGF5ZXIpCiAgICAgICAgIHJldHVy
bjsKQEAgLTE2MCwxMzQgKzE1NCwxMzUgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1l
ZGlhRWxlbWVudAogICAgIG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIgPSB2aWRlb0xheWVyOwogICAg
IFttX3ZpZGVvRnVsbHNjcmVlbkxheWVyIHNldEZyYW1lOm1fdmlkZW9GcmFtZV07CiAgICAgCi0g
ICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+IHBy
b3RlY3QodGhpcyk7CisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAg
IGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5zZXRWaWRl
b0Z1bGxzY3JlZW5MYXllcihtX3ZpZGVvRnVsbHNjcmVlbkxheWVyLmdldCgpKTsKKyAgICAgICAg
aWYgKG1fdmlkZW9FbGVtZW50KQorICAgICAgICAgICAgbV92aWRlb0VsZW1lbnQtPnNldFZpZGVv
RnVsbHNjcmVlbkxheWVyKG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIuZ2V0KCkpOwogICAgICAgICBw
cm90ZWN0LmNsZWFyKCk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxNZWRpYUVsZW1lbnQ6OnBsYXkoKSB7Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7Cit2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpwbGF5KCkKK3sKKyAgICBfX2Jsb2NrIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKICAgICBX
ZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICAgICAg
bV9tZWRpYUVsZW1lbnQtPnBsYXkoKTsKKyAgICAgICAgaWYgKG1fdmlkZW9FbGVtZW50KQorICAg
ICAgICAgICAgbV92aWRlb0VsZW1lbnQtPnBsYXkoKTsKICAgICAgICAgcHJvdGVjdC5jbGVhcigp
OwogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50
OjpwYXVzZSgpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpwYXVz
ZSgpCiB7Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVs
ZW1lbnQ+IHByb3RlY3QodGhpcyk7CisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKF57
Ci0gICAgICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50
LT5wYXVzZSgpOworICAgICAgICBpZiAobV92aWRlb0VsZW1lbnQpCisgICAgICAgICAgICBtX3Zp
ZGVvRWxlbWVudC0+cGF1c2UoKTsKICAgICAgICAgcHJvdGVjdC5jbGVhcigpOwogICAgIH0pOwog
fQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50Ojp0b2dnbGVQbGF5
U3RhdGUoKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6dG9nZ2xl
UGxheVN0YXRlKCkKIHsKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKKyAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKICAgICBXZWJUaHJl
YWRSdW4oXnsKLSAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICAgICAgbV9tZWRp
YUVsZW1lbnQtPnRvZ2dsZVBsYXlTdGF0ZSgpOworICAgICAgICBpZiAobV92aWRlb0VsZW1lbnQp
CisgICAgICAgICAgICBtX3ZpZGVvRWxlbWVudC0+dG9nZ2xlUGxheVN0YXRlKCk7CiAgICAgICAg
IHByb3RlY3QuY2xlYXIoKTsKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbE1lZGlhRWxlbWVudDo6YmVnaW5TY3J1YmJpbmcoKQordm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudDo6YmVnaW5TY3J1YmJpbmcoKQogewotICAgIF9fYmxvY2sgUmVm
UHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOwor
ICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBw
cm90ZWN0KHRoaXMpOwogICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICBpZiAobV9tZWRpYUVs
ZW1lbnQpCi0gICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+YmVnaW5TY3J1YmJpbmcoKTsKKyAg
ICAgICAgaWYgKG1fdmlkZW9FbGVtZW50KQorICAgICAgICAgICAgbV92aWRlb0VsZW1lbnQtPmJl
Z2luU2NydWJiaW5nKCk7CiAgICAgICAgIHByb3RlY3QuY2xlYXIoKTsKICAgICB9KTsKIH0KIAot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6ZW5kU2NydWJiaW5nKCkK
K3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmVuZFNjcnViYmluZygp
CiB7Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1l
bnQ+IHByb3RlY3QodGhpcyk7CisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKF57Ci0g
ICAgICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5l
bmRTY3J1YmJpbmcoKTsKKyAgICAgICAgaWYgKG1fdmlkZW9FbGVtZW50KQorICAgICAgICAgICAg
bV92aWRlb0VsZW1lbnQtPmVuZFNjcnViYmluZygpOwogICAgICAgICBwcm90ZWN0LmNsZWFyKCk7
CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ6
OnNlZWtUb1RpbWUoZG91YmxlIHRpbWUpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlk
ZW9FbGVtZW50OjpzZWVrVG9UaW1lKGRvdWJsZSB0aW1lKQogewotICAgIF9fYmxvY2sgUmVmUHRy
PFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOworICAg
IF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBwcm90
ZWN0KHRoaXMpOwogICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICBpZiAobV9tZWRpYUVsZW1l
bnQpCi0gICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+c2V0Q3VycmVudFRpbWUodGltZSk7Cisg
ICAgICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKKyAgICAgICAgICAgIG1fdmlkZW9FbGVtZW50LT5z
ZXRDdXJyZW50VGltZSh0aW1lKTsKICAgICAgICAgcHJvdGVjdC5jbGVhcigpOwogICAgIH0pOwog
fQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpmYXN0U2Vlayhk
b3VibGUgdGltZSkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmZh
c3RTZWVrKGRvdWJsZSB0aW1lKQogewotICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsTWVkaWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOworICAgIF9fYmxvY2sgUmVmUHRy
PFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBwcm90ZWN0KHRoaXMpOwogICAg
IFdlYlRocmVhZFJ1biheewotICAgICAgICBpZiAobV9tZWRpYUVsZW1lbnQpCi0gICAgICAgICAg
ICBtX21lZGlhRWxlbWVudC0+ZmFzdFNlZWsodGltZSk7CisgICAgICAgIGlmIChtX3ZpZGVvRWxl
bWVudCkKKyAgICAgICAgICAgIG1fdmlkZW9FbGVtZW50LT5mYXN0U2Vlayh0aW1lKTsKICAgICAg
ICAgcHJvdGVjdC5jbGVhcigpOwogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsTWVkaWFFbGVtZW50OjpiZWdpblNjYW5uaW5nRm9yd2FyZCgpCit2b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpiZWdpblNjYW5uaW5nRm9yd2FyZCgpCiB7Ci0g
ICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+IHBy
b3RlY3QodGhpcyk7CisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAg
IGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5iZWdpblNj
YW5uaW5nKE1lZGlhQ29udHJvbGxlckludGVyZmFjZTo6Rm9yd2FyZCk7CisgICAgICAgIGlmICht
X3ZpZGVvRWxlbWVudCkKKyAgICAgICAgICAgIG1fdmlkZW9FbGVtZW50LT5iZWdpblNjYW5uaW5n
KE1lZGlhQ29udHJvbGxlckludGVyZmFjZTo6Rm9yd2FyZCk7CiAgICAgICAgIHByb3RlY3QuY2xl
YXIoKTsKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxl
bWVudDo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKCkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQ6OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpCiB7Ci0gICAgX19ibG9jayBS
ZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxNZWRpYUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7
CisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+
IHByb3RlY3QodGhpcyk7CiAgICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgIGlmIChtX21lZGlh
RWxlbWVudCkKLSAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5iZWdpblNjYW5uaW5nKE1lZGlh
Q29udHJvbGxlckludGVyZmFjZTo6QmFja3dhcmQpOworICAgICAgICBpZiAobV92aWRlb0VsZW1l
bnQpCisgICAgICAgICAgICBtX3ZpZGVvRWxlbWVudC0+YmVnaW5TY2FubmluZyhNZWRpYUNvbnRy
b2xsZXJJbnRlcmZhY2U6OkJhY2t3YXJkKTsKICAgICAgICAgcHJvdGVjdC5jbGVhcigpOwogICAg
IH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjplbmRT
Y2FubmluZygpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjplbmRT
Y2FubmluZygpCiB7Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxN
ZWRpYUVsZW1lbnQ+IHByb3RlY3QodGhpcyk7CisgICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7CiAgICAgV2ViVGhyZWFk
UnVuKF57Ci0gICAgICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAgICAgICAgICAgIG1fbWVkaWFF
bGVtZW50LT5lbmRTY2FubmluZygpOworICAgICAgICBpZiAobV92aWRlb0VsZW1lbnQpCisgICAg
ICAgICAgICBtX3ZpZGVvRWxlbWVudC0+ZW5kU2Nhbm5pbmcoKTsKICAgICAgICAgcHJvdGVjdC5j
bGVhcigpOwogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFF
bGVtZW50OjpyZXF1ZXN0RXhpdEZ1bGxzY3JlZW4oKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudDo6cmVxdWVzdEV4aXRGdWxsc2NyZWVuKCkKIHsKLSAgICBpZiAoIW1f
bWVkaWFFbGVtZW50KQorICAgIGlmICghbV92aWRlb0VsZW1lbnQpCiAgICAgICAgIHJldHVybjsK
IAotICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50
PiBwcm90ZWN0KHRoaXMpOworICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50PiBwcm90ZWN0KHRoaXMpOwogICAgIFdlYlRocmVhZFJ1biheewotICAg
ICAgICBpZiAobV9tZWRpYUVsZW1lbnQgJiYgbV9tZWRpYUVsZW1lbnQtPmlzRnVsbHNjcmVlbigp
KQotICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPmV4aXRGdWxsc2NyZWVuKCk7CisgICAgICAg
IGlmIChtX3ZpZGVvRWxlbWVudCAmJiBtX3ZpZGVvRWxlbWVudC0+aXNGdWxsc2NyZWVuKCkpCisg
ICAgICAgICAgICBtX3ZpZGVvRWxlbWVudC0+ZXhpdEZ1bGxzY3JlZW4oKTsKICAgICAgICAgcHJv
dGVjdC5jbGVhcigpOwogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
TWVkaWFFbGVtZW50OjpzZXRWaWRlb0xheWVyRnJhbWUoRmxvYXRSZWN0IHJlY3QpCit2b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0xheWVyRnJhbWUoRmxv
YXRSZWN0IHJlY3QpCiB7CiAgICAgbV92aWRlb0ZyYW1lID0gcmVjdDsKICAgICBbbV92aWRlb0Z1
bGxzY3JlZW5MYXllciBzZXRGcmFtZTpDR1JlY3QocmVjdCldOwotICAgIG1fbWVkaWFFbGVtZW50
LT5zZXRWaWRlb0Z1bGxzY3JlZW5GcmFtZShyZWN0KTsKKyAgICBtX3ZpZGVvRWxlbWVudC0+c2V0
VmlkZW9GdWxsc2NyZWVuRnJhbWUocmVjdCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxNZWRpYUVsZW1lbnQ6OnNldFZpZGVvTGF5ZXJHcmF2aXR5KFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsOjpWaWRlb0dyYXZpdHkgZ3Jhdml0eSkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvTGF5ZXJHcmF2aXR5KFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsOjpWaWRlb0dyYXZpdHkgZ3Jhdml0eSkKIHsKICAgICBNZWRpYVBsYXllcjo6VmlkZW9HcmF2
aXR5IHZpZGVvR3Jhdml0eSA9IE1lZGlhUGxheWVyOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3Q7
CiAgICAgaWYgKGdyYXZpdHkgPT0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0
eVJlc2l6ZSkKQEAgLTI5OSwzNCArMjk0LDM0IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxNZWRpYUVsZW1lbnQKICAgICBlbHNlCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgIAotICAgIG1fbWVkaWFFbGVtZW50LT5zZXRWaWRlb0Z1bGxzY3JlZW5HcmF2aXR5KHZpZGVv
R3Jhdml0eSk7CisgICAgbV92aWRlb0VsZW1lbnQtPnNldFZpZGVvRnVsbHNjcmVlbkdyYXZpdHko
dmlkZW9HcmF2aXR5KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxl
bWVudDo6c2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCkKK3ZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3Qp
CiB7CiAgICAgLy8gRklYTUU6IDEzMTIzNiBJbXBsZW1lbnQgYXVkaW8gdHJhY2sgc2VsZWN0aW9u
LgogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50OjpzZWxlY3RM
ZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50OjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5k
ZXgpCiB7CiAgICAgVGV4dFRyYWNrKiB0ZXh0VHJhY2sgPSBudWxscHRyOwogICAgIAogICAgIGlm
IChpbmRleCA8IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnUuc2l6ZSgpKQogICAgICAgICB0ZXh0VHJh
Y2sgPSBtX2xlZ2libGVUcmFja3NGb3JNZW51W3N0YXRpY19jYXN0PHNpemVfdD4oaW5kZXgpXS5n
ZXQoKTsKICAgICAKLSAgICBtX21lZGlhRWxlbWVudC0+c2V0U2VsZWN0ZWRUZXh0VHJhY2sodGV4
dFRyYWNrKTsKKyAgICBtX3ZpZGVvRWxlbWVudC0+c2V0U2VsZWN0ZWRUZXh0VHJhY2sodGV4dFRy
YWNrKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudDo6dXBk
YXRlTGVnaWJsZU9wdGlvbnMoKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudDo6dXBkYXRlTGVnaWJsZU9wdGlvbnMoKQogewotICAgIFRleHRUcmFja0xpc3QqIHRyYWNr
TGlzdCA9IG1fbWVkaWFFbGVtZW50LT50ZXh0VHJhY2tzKCk7Ci0gICAgaWYgKCF0cmFja0xpc3Qg
fHwgIW1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSB8fCAhbV9tZWRpYUVsZW1lbnQt
Pm1lZGlhQ29udHJvbHNIb3N0KCkpCisgICAgVGV4dFRyYWNrTGlzdCogdHJhY2tMaXN0ID0gbV92
aWRlb0VsZW1lbnQtPnRleHRUcmFja3MoKTsKKyAgICBpZiAoIXRyYWNrTGlzdCB8fCAhbV92aWRl
b0VsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpIHx8ICFtX3ZpZGVvRWxlbWVudC0+bWVkaWFDb250
cm9sc0hvc3QoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFdURjo6QXRvbWljU3RyaW5n
IGRpc3BsYXlNb2RlID0gbV9tZWRpYUVsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCktPmNhcHRp
b25EaXNwbGF5TW9kZSgpOwotICAgIFRleHRUcmFjayogb2ZmSXRlbSA9IG1fbWVkaWFFbGVtZW50
LT5tZWRpYUNvbnRyb2xzSG9zdCgpLT5jYXB0aW9uTWVudU9mZkl0ZW0oKTsKLSAgICBUZXh0VHJh
Y2sqIGF1dG9tYXRpY0l0ZW0gPSBtX21lZGlhRWxlbWVudC0+bWVkaWFDb250cm9sc0hvc3QoKS0+
Y2FwdGlvbk1lbnVBdXRvbWF0aWNJdGVtKCk7Ci0gICAgQ2FwdGlvblVzZXJQcmVmZXJlbmNlcyYg
Y2FwdGlvblByZWZlcmVuY2VzID0gKm1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKS0+
Z3JvdXAoKS5jYXB0aW9uUHJlZmVyZW5jZXMoKTsKKyAgICBXVEY6OkF0b21pY1N0cmluZyBkaXNw
bGF5TW9kZSA9IG1fdmlkZW9FbGVtZW50LT5tZWRpYUNvbnRyb2xzSG9zdCgpLT5jYXB0aW9uRGlz
cGxheU1vZGUoKTsKKyAgICBUZXh0VHJhY2sqIG9mZkl0ZW0gPSBtX3ZpZGVvRWxlbWVudC0+bWVk
aWFDb250cm9sc0hvc3QoKS0+Y2FwdGlvbk1lbnVPZmZJdGVtKCk7CisgICAgVGV4dFRyYWNrKiBh
dXRvbWF0aWNJdGVtID0gbV92aWRlb0VsZW1lbnQtPm1lZGlhQ29udHJvbHNIb3N0KCktPmNhcHRp
b25NZW51QXV0b21hdGljSXRlbSgpOworICAgIENhcHRpb25Vc2VyUHJlZmVyZW5jZXMmIGNhcHRp
b25QcmVmZXJlbmNlcyA9ICptX3ZpZGVvRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCktPmdyb3Vw
KCkuY2FwdGlvblByZWZlcmVuY2VzKCk7CiAgICAgbV9sZWdpYmxlVHJhY2tzRm9yTWVudSA9IGNh
cHRpb25QcmVmZXJlbmNlcy5zb3J0ZWRUcmFja0xpc3RGb3JNZW51KHRyYWNrTGlzdCk7CiAgICAg
VmVjdG9yPFN0cmluZz4gdHJhY2tEaXNwbGF5TmFtZXM7CiAgICAgdWludDY0X3Qgc2VsZWN0ZWRJ
bmRleCA9IDA7CkBAIC0zNTksNyArMzU0LDcgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bE1lZGlhRWxlbWVudAogICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRMZWdpYmxl
TWVkaWFTZWxlY3Rpb25PcHRpb25zKHRyYWNrRGlzcGxheU5hbWVzLCBzZWxlY3RlZEluZGV4KTsK
IH0KIAotY29uc3QgVmVjdG9yPEF0b21pY1N0cmluZz4mIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
TWVkaWFFbGVtZW50OjpvYnNlcnZlZEV2ZW50TmFtZXMoKQorY29uc3QgVmVjdG9yPEF0b21pY1N0
cmluZz4mIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpvYnNlcnZlZEV2ZW50
TmFtZXMoKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxWZWN0b3I8QXRvbWljU3RyaW5n
Pj4gc0V2ZW50TmFtZXM7CiAKQEAgLTM3Niw3ICszNzEsNyBAQCBjb25zdCBWZWN0b3I8QXRvbWlj
U3RyaW5nPiYgV2ViVmlkZW9GdWxsCiAgICAgcmV0dXJuIHNFdmVudE5hbWVzLmdldCgpOwogfQog
Ci1jb25zdCBBdG9taWNTdHJpbmcmIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsTWVkaWFFbGVtZW50
OjpldmVudE5hbWVBbGwoKQorY29uc3QgQXRvbWljU3RyaW5nJiBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudDo6ZXZlbnROYW1lQWxsKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8QXRvbWljU3RyaW5nPiBzRXZlbnROYW1lQWxsID0gImFsbEV2ZW50cyI7CiAgICAgcmV0
dXJuIHNFdmVudE5hbWVBbGw7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLmgJKHJldmlzaW9uIDE3
MzE4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgIGNsYXNzIERpc3BsYXlTbGVlcERpc2FibGVyOwotICAgIGNsYXNzIEhU
TUxNZWRpYUVsZW1lbnQ7CisgICAgY2xhc3MgSFRNTFZpZGVvRWxlbWVudDsKIH0KIAogQHByb3Rv
Y29sIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJEZWxlZ2F0ZTsKQEAgLTQyLDcgKzQyLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBXRUJDT1JFX0VYUE9SVCBAaW50ZXJmYWNlIFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIgOiBOU1dpbmRvd0NvbnRyb2xsZXIgewogQHByaXZhdGUK
LSAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudD4gX21lZGlhRWxlbWVudDsgLy8g
KHJldGFpbikKKyAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudD4gX3ZpZGVvRWxl
bWVudDsgLy8gKHJldGFpbikKICAgICBpZCA8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckRl
bGVnYXRlPiBfZGVsZWdhdGU7IC8vIChhc3NpZ24pCiAKICAgICBOU1dpbmRvdyAqX2JhY2tncm91
bmRGdWxsc2NyZWVuV2luZG93OyAvLyAocmV0YWluKQpAQCAtNjAsOCArNjAsOCBAQCBXRUJDT1JF
X0VYUE9SVCBAaW50ZXJmYWNlIFdlYlZpZGVvRnVsbHNjCiAtICh2b2lkKXNldERlbGVnYXRlOihp
ZCA8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckRlbGVnYXRlPilkZWxlZ2F0ZTsKIAogLSAo
dm9pZClzZXR1cFZpZGVvT3ZlcmxheTooQ0FMYXllciopbGF5ZXI7Ci0tICh2b2lkKXNldE1lZGlh
RWxlbWVudDooV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCopbWVkaWFFbGVtZW50OwotLSAoV2Vi
Q29yZTo6SFRNTE1lZGlhRWxlbWVudCopbWVkaWFFbGVtZW50OworLSAodm9pZClzZXRWaWRlb0Vs
ZW1lbnQ6KFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQqKXZpZGVvRWxlbWVudDsKKy0gKFdlYkNv
cmU6OkhUTUxWaWRlb0VsZW1lbnQqKXZpZGVvRWxlbWVudDsKIAogLSAodm9pZCllbnRlckZ1bGxz
Y3JlZW46KE5TU2NyZWVuICopc2NyZWVuOwogLSAodm9pZClleGl0RnVsbHNjcmVlbjsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyLm1tCShyZXZpc2lvbiAxNzMxODIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbQkod29ya2luZyBj
b3B5KQpAQCAtMzUsNyArMzUsNyBAQAogI2ltcG9ydCA8Q2FyYm9uL0NhcmJvbi5oPgogI2ltcG9y
dCA8UVRLaXQvUVRLaXQuaD4KICNpbXBvcnQgPFdlYkNvcmUvRGlzcGxheVNsZWVwRGlzYWJsZXIu
aD4KLSNpbXBvcnQgPFdlYkNvcmUvSFRNTE1lZGlhRWxlbWVudC5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9IVE1MVmlkZW9FbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NvZnRMaW5raW5nLmg+CiAj
aW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KIApAQCAtMTE0LDIxICsxMTQsMjEgQEAgLSAodm9pZCl3
aW5kb3dEaWRMb2FkCiAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBh
ZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihhcHBsaWNhdGlvbkRpZENoYW5nZVNj
cmVlblBhcmFtZXRlcnM6KSBuYW1lOk5TQXBwbGljYXRpb25EaWRDaGFuZ2VTY3JlZW5QYXJhbWV0
ZXJzTm90aWZpY2F0aW9uIG9iamVjdDpOU0FwcF07CiB9CiAKLS0gKEhUTUxNZWRpYUVsZW1lbnQq
KW1lZGlhRWxlbWVudAorLSAoSFRNTFZpZGVvRWxlbWVudCopdmlkZW9FbGVtZW50CiB7Ci0gICAg
cmV0dXJuIF9tZWRpYUVsZW1lbnQuZ2V0KCk7CisgICAgcmV0dXJuIF92aWRlb0VsZW1lbnQuZ2V0
KCk7CiB9CiAKLS0gKHZvaWQpc2V0TWVkaWFFbGVtZW50OihIVE1MTWVkaWFFbGVtZW50KiltZWRp
YUVsZW1lbnQKKy0gKHZvaWQpc2V0VmlkZW9FbGVtZW50OihIVE1MVmlkZW9FbGVtZW50Kil2aWRl
b0VsZW1lbnQKIHsKLSAgICBfbWVkaWFFbGVtZW50ID0gbWVkaWFFbGVtZW50OworICAgIF92aWRl
b0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7CiAKLSAgICBpZiAoIV9tZWRpYUVsZW1lbnQpCisgICAg
aWYgKCFfdmlkZW9FbGVtZW50KQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoW3NlbGYgaXNX
aW5kb3dMb2FkZWRdKSB7Ci0gICAgICAgIGlmIChfbWVkaWFFbGVtZW50LT5wbGF0Zm9ybU1lZGlh
KCkudHlwZSA9PSBQbGF0Zm9ybU1lZGlhOjpRVE1vdmllVHlwZSkgewotICAgICAgICAgICAgUVRN
b3ZpZSAqbW92aWUgPSBfbWVkaWFFbGVtZW50LT5wbGF0Zm9ybU1lZGlhKCkubWVkaWEucXRNb3Zp
ZTsKKyAgICAgICAgaWYgKF92aWRlb0VsZW1lbnQtPnBsYXRmb3JtTWVkaWEoKS50eXBlID09IFBs
YXRmb3JtTWVkaWE6OlFUTW92aWVUeXBlKSB7CisgICAgICAgICAgICBRVE1vdmllICptb3ZpZSA9
IF92aWRlb0VsZW1lbnQtPnBsYXRmb3JtTWVkaWEoKS5tZWRpYS5xdE1vdmllOwogICAgICAgICAg
ICAgUVRNb3ZpZUxheWVyICpsYXllciA9IFtbZ2V0UVRNb3ZpZUxheWVyQ2xhc3MoKSBhbGxvY10g
aW5pdF07CiAgICAgICAgICAgICBbbGF5ZXIgc2V0TW92aWU6bW92aWVdOwogICAgICAgICAgICAg
W3NlbGYgc2V0dXBWaWRlb092ZXJsYXk6bGF5ZXJdOwpAQCAtMTM4LDggKzEzOCw4IEBAIC0gKHZv
aWQpc2V0TWVkaWFFbGVtZW50OihIVE1MTWVkaWFFbGVtZW4KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6UVRNb3ZpZVJhdGVEaWRD
aGFuZ2VOb3RpZmljYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvYmplY3Q6bW92aWVdOwogCi0gICAgICAgIH0gZWxzZSBpZiAoX21l
ZGlhRWxlbWVudC0+cGxhdGZvcm1NZWRpYSgpLnR5cGUgPT0gUGxhdGZvcm1NZWRpYTo6QVZGb3Vu
ZGF0aW9uTWVkaWFQbGF5ZXJUeXBlKSB7Ci0gICAgICAgICAgICBBVlBsYXllciAqcGxheWVyID0g
X21lZGlhRWxlbWVudC0+cGxhdGZvcm1NZWRpYSgpLm1lZGlhLmF2Zk1lZGlhUGxheWVyOworICAg
ICAgICB9IGVsc2UgaWYgKF92aWRlb0VsZW1lbnQtPnBsYXRmb3JtTWVkaWEoKS50eXBlID09IFBs
YXRmb3JtTWVkaWE6OkFWRm91bmRhdGlvbk1lZGlhUGxheWVyVHlwZSkgeworICAgICAgICAgICAg
QVZQbGF5ZXIgKnBsYXllciA9IF92aWRlb0VsZW1lbnQtPnBsYXRmb3JtTWVkaWEoKS5tZWRpYS5h
dmZNZWRpYVBsYXllcjsKICAgICAgICAgICAgIEFWUGxheWVyTGF5ZXIgKmxheWVyID0gW1tnZXRB
VlBsYXllckxheWVyQ2xhc3MoKSBhbGxvY10gaW5pdF07CiAgICAgICAgICAgICBbc2VsZiBzZXR1
cFZpZGVvT3ZlcmxheTpsYXllcl07CiAgICAgICAgICAgICBbbGF5ZXIgc2V0UGxheWVyOnBsYXll
cl07CkBAIC0yMDcsOSArMjA3LDkgQEAgLSAodm9pZCl3aW5kb3dEaWRFbnRlckZ1bGxzY3JlZW4K
ICAgICBbX2h1ZENvbnRyb2xsZXIgZmFkZVdpbmRvd0luXTsKIH0KIAotLSAoTlNSZWN0KW1lZGlh
RWxlbWVudFJlY3QKKy0gKE5TUmVjdCl2aWRlb0VsZW1lbnRSZWN0CiB7Ci0gICAgcmV0dXJuIF9t
ZWRpYUVsZW1lbnQtPnNjcmVlblJlY3QoKTsKKyAgICByZXR1cm4gX3ZpZGVvRWxlbWVudC0+c2Ny
ZWVuUmVjdCgpOwogfQogCiAtICh2b2lkKWFwcGxpY2F0aW9uRGlkUmVzaWduQWN0aXZlOihOU05v
dGlmaWNhdGlvbiopbm90aWZpY2F0aW9uCkBAIC0yNzYsNyArMjc2LDcgQEAgLSAodm9pZCllbnRl
ckZ1bGxzY3JlZW46KE5TU2NyZWVuICopc2NyZQogICAgIGlmICghc2NyZWVuKQogICAgICAgICBz
Y3JlZW4gPSBbTlNTY3JlZW4gbWFpblNjcmVlbl07CiAKLSAgICBOU1JlY3QgZnJhbWUgPSBbc2Vs
ZiBtZWRpYUVsZW1lbnRSZWN0XTsKKyAgICBOU1JlY3QgZnJhbWUgPSBbc2VsZiB2aWRlb0VsZW1l
bnRSZWN0XTsKICAgICBOU1JlY3QgZW5kRnJhbWUgPSBbc2NyZWVuIGZyYW1lXTsKICAgICBjb25z
dHJhaW5GcmFtZVRvUmF0aW9PZkZyYW1lKCZlbmRGcmFtZSwgJmZyYW1lKTsKIApAQCAtMzAzLDcg
KzMwMyw3IEBAIC0gKHZvaWQpZXhpdEZ1bGxzY3JlZW4KICAgICBfaXNFbmRpbmdGdWxsc2NyZWVu
ID0gWUVTOwogICAgIFtfaHVkQ29udHJvbGxlciBjbG9zZVdpbmRvd107CiAKLSAgICBOU1JlY3Qg
ZW5kRnJhbWUgPSBbc2VsZiBtZWRpYUVsZW1lbnRSZWN0XTsKKyAgICBOU1JlY3QgZW5kRnJhbWUg
PSBbc2VsZiB2aWRlb0VsZW1lbnRSZWN0XTsKIAogICAgIFtzZWxmIHNldHVwRmFkZUFuaW1hdGlv
bklmTmVlZGVkQW5kRmFkZUluOk5PXTsKICAgICBpZiAoX2ZvcmNlRGlzYWJsZUFuaW1hdGlvbikg
ewpAQCAtMzU4LDggKzM1OCw4IEBAIC0gKHZvaWQpdXBkYXRlTWVudUFuZERvY2tGb3JGdWxsc2Ny
ZWVuCiAtICh2b2lkKXVwZGF0ZVBvd2VyQXNzZXJ0aW9ucwogewogICAgIGZsb2F0IHJhdGUgPSAw
OwotICAgIGlmIChfbWVkaWFFbGVtZW50ICYmIF9tZWRpYUVsZW1lbnQtPnBsYXRmb3JtTWVkaWEo
KS50eXBlID09IFBsYXRmb3JtTWVkaWE6OlFUTW92aWVUeXBlKQotICAgICAgICByYXRlID0gW19t
ZWRpYUVsZW1lbnQtPnBsYXRmb3JtTWVkaWEoKS5tZWRpYS5xdE1vdmllIHJhdGVdOworICAgIGlm
IChfdmlkZW9FbGVtZW50ICYmIF92aWRlb0VsZW1lbnQtPnBsYXRmb3JtTWVkaWEoKS50eXBlID09
IFBsYXRmb3JtTWVkaWE6OlFUTW92aWVUeXBlKQorICAgICAgICByYXRlID0gW192aWRlb0VsZW1l
bnQtPnBsYXRmb3JtTWVkaWEoKS5tZWRpYS5xdE1vdmllIHJhdGVdOwogICAgIAogICAgIGlmIChy
YXRlICYmICFfaXNFbmRpbmdGdWxsc2NyZWVuKSB7CiAgICAgICAgIGlmICghX2Rpc3BsYXlTbGVl
cERpc2FibGVyKQpAQCAtMzczLDggKzM3Myw4IEBAIC0gKHZvaWQpdXBkYXRlUG93ZXJBc3NlcnRp
b25zCiAKIC0gKHZvaWQpX3JlcXVlc3RFeGl0CiB7Ci0gICAgaWYgKF9tZWRpYUVsZW1lbnQpCi0g
ICAgICAgIF9tZWRpYUVsZW1lbnQtPmV4aXRGdWxsc2NyZWVuKCk7CisgICAgaWYgKF92aWRlb0Vs
ZW1lbnQpCisgICAgICAgIF92aWRlb0VsZW1lbnQtPmV4aXRGdWxsc2NyZWVuKCk7CiAgICAgX2Zv
cmNlRGlzYWJsZUFuaW1hdGlvbiA9IE5POwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAx
NzMxODIpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSw0MSBAQAorMjAxNC0wOS0wMiAgTWFjaWVqIFN0YWNob3dpYWsgIDxtanNAYXBwbGUuY29t
PgorCisgICAgICAgIENsZWFuIHVwIG5hbWluZyBmb3IgYW5kIHNsaWdodGx5IHJlZmFjdG9yIGxl
Z2FjeSB2aWRlbyBmdWxsc2NyZWVuIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjQ0NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEtleSBjaGFuZ2VzOgorICAgICAgICBzdXBwb3J0c0Z1bGxz
Y3JlZW5Gb3JOb2RlKE5vZGUqKSAtLT4gc3VwcG9ydHNWaWRlb0Z1bGxzY3JlZW4oKQorICAgICAg
ICBlbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqKSAtLT4gZW50ZXJWaWRlb0Z1bGxzY3JlZW5G
b3JWaWRlb0VsZW1lbnQoSFRNTFZpZGVvRWxlbWVudCopCisgICAgICAgIGV4aXRGdWxsc2NyZWVu
Rm9yTm9kZShOb2RlKikgLS0+IGV4aXRWaWRlb0Z1bGxzY3JlZW4oKQorICAgICAgICAKKyAgICAg
ICAgVGhlIG9sZCB2ZXJzaW9ucyBoYWQgdW5uZWNlc3NhcnkgcGFyYW1ldGVycywgZGlkIG5vdCBj
bGVhcmx5IGRpc3Rpbmd1aXNoIHRoZWlyIHB1cnBvc2UKKyAgICAgICAgZnJvbSBlbnRlckZ1bGxz
Y3JlZW5Gb3JFbGVtZW50IGFuZCBmcmllbmRzLCBhbmQgd3JvbmdseSBjbGFpbWVkIGdlbmVyYWxp
dHkgdG8gYWxsIE5vZGVzLgorICAgICAgICBBbHNvIGNoYW5nZWQgbWFueSBvdGhlciBwbGFjZXMg
dG8gdXNlIEhUTUxWaWRlb0VsZW1lbnQqIGluc3RlYWQgb2YgTm9kZSogb3IgCisgICAgICAgIEhU
TUxNZWRpYUVsZW1lbnQqIHdoZW4gdGhleSB3ZXJlIGluIGZhY3Qgb25seSB1c2VkIGZvciB2aWRl
byBlbGVtZW50cyBhbmQgd291bGQgb25seQorICAgICAgICB3b3JrIGZvciBzdWNoLgorCisgICAg
ICAgIExlZ2FjeSB2aWRlbyBmdWxsc2NyZWVuIGluIFdlYktpdDIgaXMgb25seSBzdXBwb3J0ZWQg
b24gaU9TIChmb3Igb3RoZXIgcG9ydHMgdGhhdCBzdXBwb3J0CisgICAgICAgIGl0LCBpdCdzIFdL
MSBvbmx5KS4KKyAgICAgICAgCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OnN1
cHBvcnRzVmlkZW9GdWxsc2NyZWVuKTogQWRqdXN0IGZvciByZW5hbWVzIGFzCisgICAgICAgIG1l
bnRpb25lZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjplbnRlclZpZGVvRnVs
bHNjcmVlbkZvclZpZGVvRWxlbWVudCk6IGRpdHRvCisgICAgICAgIChXZWJLaXQ6OldlYkNocm9t
ZUNsaWVudDo6ZXhpdFZpZGVvRnVsbHNjcmVlbik6IGRpdHRvCisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNz
L2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9p
b3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbToKKyAgICAgICAgKFdlYktpdDo6Y2xpZW50
UmVjdEZvckVsZW1lbnQpOiBObyBuZWVkIHRvIGJlIGdlbmVyaWMgdG8gbm9kZS4KKyAgICAgICAg
KFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c3VwcG9ydHNWaWRlb0Z1bGxzY3Jl
ZW4pOiBBZGp1c3QgZm9yIHRoZQorICAgICAgICBtYWluIHJlZmFjdG9yaW5nLiBBbHNvIGNoYW5n
ZSBtX25vZGUgdG8gbV92aWRlb0VsZW1lbnQgd2l0aCBhcHByb3ByaWF0ZSB0eXBlIGNoYW5nZS4K
KyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW50ZXJWaWRlb0Z1
bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQpOiBkaXR0bworICAgICAgICAoV2ViS2l0OjpXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOjpleGl0VmlkZW9GdWxsc2NyZWVuKTogZGl0dG8KKyAgICAgICAg
KFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRW50ZXJGdWxsc2NyZWVuKTog
ZGl0dG8gCisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZEV4
aXRGdWxsc2NyZWVuKTogZGl0dG8KKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlcjo6ZGlkQ2xlYW51cEZ1bGxzY3JlZW4pOiBkaXR0bworCiAyMDE0LTA5LTAyICBQaGls
aXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
LCBHVEsgYnVpbGQgZml4IGFmdGVyIHIxNzMxNjMuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
Y3BwCShyZXZpc2lvbiAxNzMxODIpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwMiwxOSAr
OTAyLDE5IEBAIFBhc3NSZWZQdHI8U2Nyb2xsaW5nQ29vcmRpbmF0b3I+IFdlYkNocm8KICNlbmRp
ZgogCiAjaWYgUExBVEZPUk0oSU9TKQotYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnN1cHBvcnRzRnVs
bHNjcmVlbkZvck5vZGUoY29uc3QgV2ViQ29yZTo6Tm9kZSogbm9kZSkKK2Jvb2wgV2ViQ2hyb21l
Q2xpZW50OjpzdXBwb3J0c1ZpZGVvRnVsbHNjcmVlbigpCiB7Ci0gICAgcmV0dXJuIG1fcGFnZS0+
dmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpLT5zdXBwb3J0c0Z1bGxzY3JlZW4obm9kZSk7CisgICAg
cmV0dXJuIG1fcGFnZS0+dmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpLT5zdXBwb3J0c1ZpZGVvRnVs
bHNjcmVlbigpOwogfQogCi12b2lkIFdlYkNocm9tZUNsaWVudDo6ZW50ZXJGdWxsc2NyZWVuRm9y
Tm9kZShXZWJDb3JlOjpOb2RlKiBub2RlKQordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmVudGVyVmlk
ZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQqIHZp
ZGVvRWxlbWVudCkKIHsKLSAgICBtX3BhZ2UtPnZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoKS0+ZW50
ZXJGdWxsc2NyZWVuRm9yTm9kZShub2RlKTsKKyAgICBtX3BhZ2UtPnZpZGVvRnVsbHNjcmVlbk1h
bmFnZXIoKS0+ZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQodmlkZW9FbGVtZW50
KTsKIH0KIAotdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmV4aXRGdWxsc2NyZWVuRm9yTm9kZShXZWJD
b3JlOjpOb2RlKiBub2RlKQordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmV4aXRWaWRlb0Z1bGxzY3Jl
ZW4oKQogewotICAgIG1fcGFnZS0+dmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpLT5leGl0RnVsbHNj
cmVlbkZvck5vZGUobm9kZSk7CisgICAgbV9wYWdlLT52aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCkt
PmV4aXRWaWRlb0Z1bGxzY3JlZW4oKTsKIH0KICNlbmRpZgogICAgIApJbmRleDogU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5oCShyZXZpc2lvbiAxNzMxODIpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMs
OSArMjUzLDkgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TKQotICAgIHZp
cnR1YWwgYm9vbCBzdXBwb3J0c0Z1bGxzY3JlZW5Gb3JOb2RlKGNvbnN0IFdlYkNvcmU6Ok5vZGUq
KTsKLSAgICB2aXJ0dWFsIHZvaWQgZW50ZXJGdWxsc2NyZWVuRm9yTm9kZShXZWJDb3JlOjpOb2Rl
Kik7Ci0gICAgdmlydHVhbCB2b2lkIGV4aXRGdWxsc2NyZWVuRm9yTm9kZShXZWJDb3JlOjpOb2Rl
Kik7CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzVmlkZW9GdWxsc2NyZWVuKCk7CisgICAgdmly
dHVhbCB2b2lkIGVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KFdlYkNvcmU6OkhU
TUxWaWRlb0VsZW1lbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZXhpdFZpZGVvRnVsbHNjcmVlbigp
OwogI2VuZGlmCiAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlci5oCShyZXZpc2lvbiAxNzMxODIpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2lv
cy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMx
LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0V2ZW50TGlzdGVuZXIuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1BsYXRmb3JtQ0FMYXllci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bE1lZGlhRWxlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KIApAQCAtNTAsMTYgKzUwLDE2IEBAIG5hbWVzcGFjZSBXZWJLaXQgewog
Y2xhc3MgTGF5ZXJIb3N0aW5nQ29udGV4dDsKIGNsYXNzIFdlYlBhZ2U7CiAKLWNsYXNzIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXIgOiBwdWJsaWMgV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxNZWRpYUVsZW1lbnQsIHB1YmxpYyBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2UsIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworY2xhc3MgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlciA6IHB1YmxpYyBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZp
ZGVvRWxlbWVudCwgcHVibGljIFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSwg
cHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4gY3JlYXRlKFBhc3NSZWZQdHI8V2ViUGFn
ZT4pOwogICAgIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoKTsKICAgICAKICAg
ICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiosIElQQzo6TWVzc2FnZURl
Y29kZXImKTsKICAgICAKLSAgICBib29sIHN1cHBvcnRzRnVsbHNjcmVlbihjb25zdCBXZWJDb3Jl
OjpOb2RlKikgY29uc3Q7Ci0gICAgdm9pZCBlbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKFdlYkNvcmU6
Ok5vZGUqKTsKLSAgICB2b2lkIGV4aXRGdWxsc2NyZWVuRm9yTm9kZShXZWJDb3JlOjpOb2RlKik7
CisgICAgYm9vbCBzdXBwb3J0c1ZpZGVvRnVsbHNjcmVlbigpIGNvbnN0OworICAgIHZvaWQgZW50
ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVu
dCopOworICAgIHZvaWQgZXhpdFZpZGVvRnVsbHNjcmVlbigpOwogICAgIAogcHJvdGVjdGVkOgog
ICAgIGV4cGxpY2l0IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoUGFzc1JlZlB0cjxXZWJQYWdl
Pik7CkBAIC04NSw3ICs4NSw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgc2V0Vmlk
ZW9MYXllckdyYXZpdHlFbnVtKHVuc2lnbmVkKTsKICAgICAKICAgICBXZWJQYWdlKiBtX3BhZ2U7
Ci0gICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IG1fbm9kZTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6
SFRNTFZpZGVvRWxlbWVudD4gbV92aWRlb0VsZW1lbnQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPExh
eWVySG9zdGluZ0NvbnRleHQ+IG1fbGF5ZXJIb3N0aW5nQ29udGV4dDsKICAgICAKICAgICBib29s
IG1faXNBbmltYXRpbmc7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2lvcy9XZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0JKHJldmlzaW9uIDE3MzE4
MikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTUwLDEyICs1MCwxMiBAQCB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLXN0YXRpYyBJbnRSZWN0IGNsaWVu
dFJlY3RGb3JOb2RlKE5vZGUqIG5vZGUpCitzdGF0aWMgSW50UmVjdCBjbGllbnRSZWN0Rm9yRWxl
bWVudChIVE1MRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlz
RWxlbWVudE5vZGUoKSkKKyAgICBpZiAoIWVsZW1lbnQpCiAgICAgICAgIHJldHVybiBJbnRSZWN0
KCk7CiAKLSAgICByZXR1cm4gdG9FbGVtZW50KG5vZGUpLT5jbGllbnRSZWN0KCk7CisgICAgcmV0
dXJuIGVsZW1lbnQtPmNsaWVudFJlY3QoKTsKIH0KIAogUGFzc1JlZlB0cjxXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyPiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpjcmVhdGUoUGFzc1JlZlB0
cjxXZWJQYWdlPiBwYWdlKQpAQCAtNzgsMzggKzc4LDM4IEBAIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6On5XZWJWaWRlb0Z1bGwKICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5yZW1vdmVNZXNz
YWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Om1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLWJvb2wgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6c3VwcG9ydHNGdWxsc2NyZWVuKGNvbnN0IE5vZGUqIG5vZGUpIGNvbnN0
Citib29sIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnN1cHBvcnRzVmlkZW9GdWxsc2NyZWVu
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gU2V0dGluZ3M6OmF2S2l0RW5hYmxlZCgpICYmIGlzSFRN
TFZpZGVvRWxlbWVudChub2RlKTsKKyAgICByZXR1cm4gU2V0dGluZ3M6OmF2S2l0RW5hYmxlZCgp
OwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVudGVyRnVsbHNjcmVlbkZv
ck5vZGUoTm9kZSogbm9kZSkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW50ZXJW
aWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoSFRNTFZpZGVvRWxlbWVudCogdmlkZW9FbGVt
ZW50KQogewotICAgIEFTU0VSVChub2RlKTsKLSAgICBtX25vZGUgPSBub2RlOworICAgIG1fdmlk
ZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50OworCiAgICAgbV90YXJnZXRJc0Z1bGxzY3JlZW4gPSB0
cnVlOwogCiAgICAgaWYgKG1faXNBbmltYXRpbmcpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1f
aXNBbmltYXRpbmcgPSB0cnVlOwotICAgIHNldE1lZGlhRWxlbWVudCh0b0hUTUxNZWRpYUVsZW1l
bnQobm9kZSkpOworICAgIHNldFZpZGVvRWxlbWVudCh2aWRlb0VsZW1lbnQpOwogCiAgICAgbV9s
YXllckhvc3RpbmdDb250ZXh0ID0gTGF5ZXJIb3N0aW5nQ29udGV4dDo6Y3JlYXRlRm9yRXh0ZXJu
YWxIb3N0aW5nUHJvY2VzcygpOwogICAgIAotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpTZXR1cEZ1bGxzY3JlZW5XaXRoSUQobV9sYXll
ckhvc3RpbmdDb250ZXh0LT5jb250ZXh0SUQoKSwgY2xpZW50UmVjdEZvck5vZGUobm9kZSkpLCBt
X3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eTo6U2V0dXBGdWxsc2NyZWVuV2l0aElEKG1fbGF5ZXJIb3N0aW5n
Q29udGV4dC0+Y29udGV4dElEKCksIGNsaWVudFJlY3RGb3JFbGVtZW50KHZpZGVvRWxlbWVudCkp
LCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
OjpleGl0RnVsbHNjcmVlbkZvck5vZGUoTm9kZSogbm9kZSkKK3ZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcjo6ZXhpdFZpZGVvRnVsbHNjcmVlbigpCiB7Ci0gICAgbV9ub2RlLmNsZWFyKCk7
CisgICAgUmVmUHRyPEhUTUxWaWRlb0VsZW1lbnQ+IHZpZGVvRWxlbWVudCA9IG1fdmlkZW9FbGVt
ZW50LnJlbGVhc2UoKTsKICAgICBtX3RhcmdldElzRnVsbHNjcmVlbiA9IGZhbHNlOwogCiAgICAg
aWYgKG1faXNBbmltYXRpbmcpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1faXNBbmltYXRpbmcg
PSB0cnVlOwotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpFeGl0RnVsbHNjcmVlbihjbGllbnRSZWN0Rm9yTm9kZShub2RlKSksIG1fcGFn
ZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjpFeGl0RnVsbHNjcmVlbihjbGllbnRSZWN0Rm9yRWxlbWVudCh2aWRl
b0VsZW1lbnQuZ2V0KCkpKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKIHZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6c2V0RHVyYXRpb24oZG91YmxlIGR1cmF0aW9uKQpAQCAtMTkxLDkg
KzE5MSw5IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRW50ZXIKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgLy8gZXhpdCBmdWxsc2NyZWVuIG5vdyBpZiBpdCB3YXMgcHJldmlv
dXNseSByZXF1ZXN0ZWQgZHVyaW5nIGFuIGFuaW1hdGlvbi4KLSAgICBfX2Jsb2NrIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbE1lZGlhRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKKyAgICBf
X2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gcHJvdGVj
dCh0aGlzKTsKICAgICBXZWJUaHJlYWRSdW4oXiB7Ci0gICAgICAgIGV4aXRGdWxsc2NyZWVuRm9y
Tm9kZShtX25vZGUuZ2V0KCkpOworICAgICAgICBleGl0VmlkZW9GdWxsc2NyZWVuKCk7CiAgICAg
ICAgIHByb3RlY3QuY2xlYXIoKTsKICAgICB9KTsKIH0KQEAgLTIwMSw3ICsyMDEsNyBAQCB2b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZEVudGVyCiB2b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6OmRpZEV4aXRGdWxsc2NyZWVuKCkKIHsKICAgICBzZXRWaWRlb0Z1bGxzY3Jl
ZW5MYXllcihuaWwpOwotICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
TWVkaWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOworICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBwcm90ZWN0KHRoaXMpOwogCiAgICAgZGlzcGF0
Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKICAgICAgICAgbV9sYXllckhv
c3RpbmdDb250ZXh0LT5zZXRSb290TGF5ZXIobnVsbHB0cik7CkBAIC0yMTYsMTUgKzIxNiwxNSBA
QCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZENsZWFuCiAgICAgbV9pc0FuaW1h
dGluZyA9IGZhbHNlOwogICAgIG1faXNGdWxsc2NyZWVuID0gZmFsc2U7CiAgICAgCi0gICAgc2V0
TWVkaWFFbGVtZW50KG51bGxwdHIpOworICAgIHNldFZpZGVvRWxlbWVudChudWxscHRyKTsKIAog
ICAgIGlmICghbV90YXJnZXRJc0Z1bGxzY3JlZW4pCiAgICAgICAgIHJldHVybjsKIAogICAgIC8v
IGVudGVyIGZ1bGxzY3JlZW4gbm93IGlmIGl0IHdhcyBwcmV2aW91c2x5IHJlcXVlc3RlZCBkdXJp
bmcgYW4gYW5pbWF0aW9uLgotICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsTWVkaWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOworICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBwcm90ZWN0KHRoaXMpOwogICAgIFdlYlRo
cmVhZFJ1biheIHsKLSAgICAgICAgZW50ZXJGdWxsc2NyZWVuRm9yTm9kZShtX25vZGUuZ2V0KCkp
OworICAgICAgICBlbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChtX3ZpZGVvRWxl
bWVudC5nZXQoKSk7CiAgICAgICAgIHByb3RlY3QuY2xlYXIoKTsKICAgICB9KTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MzE4MikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDE0LTA5LTAyICBNYWNp
ZWogU3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CisKKyAgICAgICAgQ2xlYW4gdXAgbmFtaW5n
IGZvciBhbmQgc2xpZ2h0bHkgcmVmYWN0b3IgbGVnYWN5IHZpZGVvIGZ1bGxzY3JlZW4gc3VwcG9y
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2NDQ2
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgS2V5IGNo
YW5nZXM6CisgICAgICAgIHN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUoTm9kZSopIC0tPiBzdXBw
b3J0c1ZpZGVvRnVsbHNjcmVlbigpCisgICAgICAgIGVudGVyRnVsbHNjcmVlbkZvck5vZGUoTm9k
ZSopIC0tPiBlbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChIVE1MVmlkZW9FbGVt
ZW50KikKKyAgICAgICAgZXhpdEZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqKSAtLT4gZXhpdFZpZGVv
RnVsbHNjcmVlbigpCisgICAgICAgIAorICAgICAgICBUaGUgb2xkIHZlcnNpb25zIGhhZCB1bm5l
Y2Vzc2FyeSBwYXJhbWV0ZXJzLCBkaWQgbm90IGNsZWFybHkgZGlzdGluZ3Vpc2ggdGhlaXIgcHVy
cG9zZQorICAgICAgICBmcm9tIGVudGVyRnVsbHNjcmVlbkZvckVsZW1lbnQgYW5kIGZyaWVuZHMs
IGFuZCB3cm9uZ2x5IGNsYWltZWQgZ2VuZXJhbGl0eSB0byBhbGwgTm9kZXMuCisgICAgICAgIEFs
c28gY2hhbmdlZCBtYW55IG90aGVyIHBsYWNlcyB0byB1c2UgSFRNTFZpZGVvRWxlbWVudCogaW5z
dGVhZCBvZiBOb2RlKiBvciAKKyAgICAgICAgSFRNTE1lZGlhRWxlbWVudCogd2hlbiB0aGV5IHdl
cmUgaW4gZmFjdCBvbmx5IHVzZWQgZm9yIHZpZGVvIGVsZW1lbnRzIGFuZCB3b3VsZCBvbmx5Cisg
ICAgICAgIHdvcmsgZm9yIHN1Y2guCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQuaDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW06
CisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OnN1cHBvcnRzVmlkZW9GdWxsc2NyZWVuKTogQWRq
dXN0IGZvciBtYWluIHJlZmFjdG9yaW5nLgorICAgICAgICBBbHNvIG5vIG1vcmUgbmVlZCB0byBj
aGVjayBmb3IgdmlkZW8gZWxlbWVudG5lc3MuCisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OmVu
dGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KTogQWRqdXN0IGZvciBtYWluIHJlZmFj
dG9yaW5nLgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50OjpleGl0VmlkZW9GdWxsc2NyZWVuKTog
ZGl0dG8KKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAgICgtW1dlYlZpZXcg
X2VudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50Ol0pOiBBZGp1c3QgZm9yIG1haW4K
KyAgICAgICAgcmVmYWN0b3JpbmcuCisgICAgICAgICgtW1dlYlZpZXcgX2V4aXRWaWRlb0Z1bGxz
Y3JlZW5dKTogZGl0dG8KKyAgICAgICAgKC1bV2ViVmlldyBfY2xvc2VdKTogZGl0dG8KKyAgICAg
ICAgKiBXZWJWaWV3L1dlYlZpZXdJbnRlcm5hbC5oOgorCiAyMDE0LTA4LTMxICBUaW0gSG9ydG9u
ICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSB1bm5lY2Vzc2Fy
eSAoYW5kIHVubmVjZXNzYXJpbHkgaU9TLXNwZWNpZmljKSBzZXRTdHJva2VBbmRGaWxsQ29sb3IK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5oCShyZXZpc2lvbiAxNzMxODIpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTgwLDkgKzE4MCw5
IEBAIHB1YmxpYzoKICAgICB9CiAKICNpZiBFTkFCTEUoVklERU8pCi0gICAgdmlydHVhbCBib29s
IHN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUoY29uc3QgV2ViQ29yZTo6Tm9kZSopIG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKFdlYkNvcmU6Ok5vZGUq
KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxzY3JlZW5Gb3JOb2RlKFdlYkNv
cmU6Ok5vZGUqKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNWaWRlb0Z1bGxz
Y3JlZW4oKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJWaWRlb0Z1bGxzY3JlZW5G
b3JWaWRlb0VsZW1lbnQoV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCopIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCBleGl0VmlkZW9GdWxsc2NyZWVuKCkgb3ZlcnJpZGU7CiAjZW5kaWYKICAg
ICAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCShyZXZpc2lvbiAxNzMx
ODIpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTk0MCwyNiArOTQwLDI2IEBAIHZvaWQgV2ViQ2hyb21lQ2xp
ZW50OjpzY2hlZHVsZUNvbXBvc2l0aW4KIAogI2lmIEVOQUJMRShWSURFTykKIAotYm9vbCBXZWJD
aHJvbWVDbGllbnQ6OnN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUoY29uc3QgTm9kZSogbm9kZSkK
K2Jvb2wgV2ViQ2hyb21lQ2xpZW50OjpzdXBwb3J0c1ZpZGVvRnVsbHNjcmVlbigpCiB7CiAjaWYg
UExBVEZPUk0oSU9TKQogICAgIGlmICghU2V0dGluZ3M6OmF2S2l0RW5hYmxlZCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKLSAgICByZXR1cm4gaXNIVE1MVmlkZW9FbGVtZW50KG5v
ZGUpOworICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFdlYkNocm9tZUNsaWVudDo6ZW50ZXJG
dWxsc2NyZWVuRm9yTm9kZShOb2RlKiBub2RlKQordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmVudGVy
VmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvRWxl
bWVudCkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgW21fd2ViVmll
dyBfZW50ZXJGdWxsc2NyZWVuRm9yTm9kZTpub2RlXTsKKyAgICBbbV93ZWJWaWV3IF9lbnRlclZp
ZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudDp2aWRlb0VsZW1lbnRdOwogICAgIEVORF9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKLXZvaWQgV2ViQ2hyb21lQ2xpZW50OjpleGl0RnVsbHNj
cmVlbkZvck5vZGUoTm9kZSopCit2b2lkIFdlYkNocm9tZUNsaWVudDo6ZXhpdFZpZGVvRnVsbHNj
cmVlbigpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIFttX3dlYlZp
ZXcgX2V4aXRGdWxsc2NyZWVuXTsKKyAgICBbbV93ZWJWaWV3IF9leGl0VmlkZW9GdWxsc2NyZWVu
XTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOyAgICAKIH0KIApJbmRleDogU291cmNl
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkocmV2aXNpb24gMTczMTgyKQorKysgU291cmNlL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsOCArMTM0
LDggQEAKICNpbXBvcnQgPFdlYkNvcmUvR0NDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L0dlb2xvY2F0aW9uQ29udHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9HZW9sb2NhdGlvbkVy
cm9yLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0hUTUxNZWRpYUVsZW1lbnQuaD4KICNpbXBvcnQgPFdl
YkNvcmUvSFRNTE5hbWVzLmg+CisjaW1wb3J0IDxXZWJDb3JlL0hUTUxWaWRlb0VsZW1lbnQuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvSGlzdG9yeUNvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUv
SGlzdG9yeUl0ZW0uaD4KICNpbXBvcnQgPFdlYkNvcmUvSWNvbkRhdGFiYXNlLmg+CkBAIC0xNjk5
LDcgKzE2OTksNyBAQCAtICh2b2lkKV9jbG9zZQogICAgIH0KIAogI2lmIEVOQUJMRShWSURFTykg
JiYgIVBMQVRGT1JNKElPUykKLSAgICBbc2VsZiBfZXhpdEZ1bGxzY3JlZW5dOworICAgIFtzZWxm
IF9leGl0VmlkZW9GdWxsc2NyZWVuXTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TKQpAQCAt
ODM4OCwyOCArODM4OCwyNSBAQCAtICh2b2lkKV9zY2hlZHVsZUxheWVyRmx1c2hGb3JQZW5kaW5n
VGlsCiAjZW5kaWYKIAogI2lmIEVOQUJMRShWSURFTykKLS0gKHZvaWQpX2VudGVyRnVsbHNjcmVl
bkZvck5vZGU6KFdlYkNvcmU6Ok5vZGUqKW5vZGUKKy0gKHZvaWQpX2VudGVyVmlkZW9GdWxsc2Ny
ZWVuRm9yVmlkZW9FbGVtZW50OihXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50Kil2aWRlb0VsZW1l
bnQKIHsKLSAgICBBU1NFUlQoaXNIVE1MVmlkZW9FbGVtZW50KG5vZGUpKTsKLSAgICBIVE1MTWVk
aWFFbGVtZW50KiB2aWRlb0VsZW1lbnQgPSB0b0hUTUxNZWRpYUVsZW1lbnQobm9kZSk7Ci0KICAg
ICBpZiAoX3ByaXZhdGUtPmZ1bGxzY3JlZW5Db250cm9sbGVyKSB7Ci0gICAgICAgIGlmIChbX3By
aXZhdGUtPmZ1bGxzY3JlZW5Db250cm9sbGVyIG1lZGlhRWxlbWVudF0gPT0gdmlkZW9FbGVtZW50
KSB7CisgICAgICAgIGlmIChbX3ByaXZhdGUtPmZ1bGxzY3JlZW5Db250cm9sbGVyIHZpZGVvRWxl
bWVudF0gPT0gdmlkZW9FbGVtZW50KSB7CiAgICAgICAgICAgICAvLyBUaGUgYmFja2VuZCBtYXkg
anVzdCB3YXJuIHVzIHRoYXQgdGhlIHVuZGVybGF5aW5nIHBsYWZ0b3JtTW92aWUoKQogICAgICAg
ICAgICAgLy8gaGFzIGNoYW5nZWQuIEp1c3QgZm9yY2UgYW4gdXBkYXRlLgotICAgICAgICAgICAg
W19wcml2YXRlLT5mdWxsc2NyZWVuQ29udHJvbGxlciBzZXRNZWRpYUVsZW1lbnQ6dmlkZW9FbGVt
ZW50XTsKKyAgICAgICAgICAgIFtfcHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRyb2xsZXIgc2V0Vmlk
ZW9FbGVtZW50OnZpZGVvRWxlbWVudF07CiAgICAgICAgICAgICByZXR1cm47IC8vIE5vIG1vcmUg
dG8gZG8uCiAgICAgICAgIH0KIAotICAgICAgICAvLyBGaXJzdCBleGl0IEZ1bGxzY3JlZW4gZm9y
IHRoZSBvbGQgbWVkaWFFbGVtZW50LgotICAgICAgICBbX3ByaXZhdGUtPmZ1bGxzY3JlZW5Db250
cm9sbGVyIG1lZGlhRWxlbWVudF0tPmV4aXRGdWxsc2NyZWVuKCk7CisgICAgICAgIC8vIEZpcnN0
IGV4aXQgRnVsbHNjcmVlbiBmb3IgdGhlIG9sZCB2aWRlb0VsZW1lbnQuCisgICAgICAgIFtfcHJp
dmF0ZS0+ZnVsbHNjcmVlbkNvbnRyb2xsZXIgdmlkZW9FbGVtZW50XS0+ZXhpdEZ1bGxzY3JlZW4o
KTsKICAgICAgICAgLy8gVGhpcyBwcmV2aW91cyBjYWxsIGhhcyB0byB0cmlnZ2VyIF9leGl0RnVs
bHNjcmVlbiwKICAgICAgICAgLy8gd2hpY2ggaGFzIHRvIGNsZWFyIF9wcml2YXRlLT5mdWxsc2Ny
ZWVuQ29udHJvbGxlci4KICAgICAgICAgQVNTRVJUKCFfcHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRy
b2xsZXIpOwogICAgIH0KICAgICBpZiAoIV9wcml2YXRlLT5mdWxsc2NyZWVuQ29udHJvbGxlcikg
ewogICAgICAgICBfcHJpdmF0ZS0+ZnVsbHNjcmVlbkNvbnRyb2xsZXIgPSBbW1dlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXIgYWxsb2NdIGluaXRdOwotICAgICAgICBbX3ByaXZhdGUtPmZ1bGxz
Y3JlZW5Db250cm9sbGVyIHNldE1lZGlhRWxlbWVudDp2aWRlb0VsZW1lbnRdOworICAgICAgICBb
X3ByaXZhdGUtPmZ1bGxzY3JlZW5Db250cm9sbGVyIHNldFZpZGVvRWxlbWVudDp2aWRlb0VsZW1l
bnRdOwogI2lmIFBMQVRGT1JNKElPUykKICAgICAgICAgW19wcml2YXRlLT5mdWxsc2NyZWVuQ29u
dHJvbGxlciBlbnRlckZ1bGxzY3JlZW46KFVJVmlldyAqKVtbW3NlbGYgd2luZG93XSBob3N0TGF5
ZXJdIGRlbGVnYXRlXV07CiAjZWxzZQpAQCAtODQxNywxMCArODQxNCwxMCBAQCAtICh2b2lkKV9l
bnRlckZ1bGxzY3JlZW5Gb3JOb2RlOihXZWJDb3JlCiAjZW5kaWYKICAgICB9CiAgICAgZWxzZQot
ICAgICAgICBbX3ByaXZhdGUtPmZ1bGxzY3JlZW5Db250cm9sbGVyIHNldE1lZGlhRWxlbWVudDp2
aWRlb0VsZW1lbnRdOworICAgICAgICBbX3ByaXZhdGUtPmZ1bGxzY3JlZW5Db250cm9sbGVyIHNl
dFZpZGVvRWxlbWVudDp2aWRlb0VsZW1lbnRdOwogfQogCi0tICh2b2lkKV9leGl0RnVsbHNjcmVl
bgorLSAodm9pZClfZXhpdFZpZGVvRnVsbHNjcmVlbgogewogICAgIGlmICghX3ByaXZhdGUtPmZ1
bGxzY3JlZW5Db250cm9sbGVyKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViS2l0
L21hYy9XZWJWaWV3L1dlYlZpZXdJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViVmlld0ludGVybmFsLmgJKHJldmlzaW9uIDE3MzE4MikKKysrIFNv
dXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0ludGVybmFsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUzLDcgKzUzLDcgQEAgY2xhc3MgVVJMOwogY2xhc3MgS2V5Ym9hcmRFdmVudDsKIGNsYXNz
IFBhZ2U7CiBjbGFzcyBSZW5kZXJCb3g7Ci1jbGFzcyBOb2RlOworY2xhc3MgSFRNTFZpZGVvRWxl
bWVudDsKIHN0cnVjdCBEaWN0YXRpb25BbHRlcm5hdGl2ZTsKIH0KICNlbmRpZgpAQCAtMjMzLDgg
KzIzMyw4IEBAIEBpbnRlcmZhY2UgV2ViVmlldyAoV2ViVmlld090aGVySW50ZXJuYWwKIC0gKHZv
aWQpX3ByZWZlcmVuY2VzQ2hhbmdlZDooV2ViUHJlZmVyZW5jZXMgKilwcmVmZXJlbmNlczsKIAog
I2lmIEVOQUJMRShWSURFTykgJiYgZGVmaW5lZChfX2NwbHVzcGx1cykKLS0gKHZvaWQpX2VudGVy
RnVsbHNjcmVlbkZvck5vZGU6KFdlYkNvcmU6Ok5vZGUqKW5vZGU7Ci0tICh2b2lkKV9leGl0RnVs
bHNjcmVlbjsKKy0gKHZvaWQpX2VudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50OihX
ZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50Kil2aWRlb0VsZW1lbnQ7CistICh2b2lkKV9leGl0Vmlk
ZW9GdWxsc2NyZWVuOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpICYmICFQ
TEFURk9STShJT1MpICYmIGRlZmluZWQoX19jcGx1c3BsdXMpCkluZGV4OiBTb3VyY2UvV2ViS2l0
L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9n
CShyZXZpc2lvbiAxNzMxOTYpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSw1MyBAQAorMjAxNC0wOS0wMiAgTWFjaWVqIFN0YWNob3dpYWsg
IDxtanNAYXBwbGUuY29tPgorCisgICAgICAgIENsZWFuIHVwIG5hbWluZyBmb3IgYW5kIHNsaWdo
dGx5IHJlZmFjdG9yIGxlZ2FjeSB2aWRlbyBmdWxsc2NyZWVuIHN1cHBvcnQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjQ0NgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEtleSBjaGFuZ2VzOgorICAgICAg
ICBzdXBwb3J0c0Z1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqKSAtLT4gc3VwcG9ydHNWaWRlb0Z1bGxz
Y3JlZW4oKQorICAgICAgICBlbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqKSAtLT4gZW50ZXJW
aWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoSFRNTFZpZGVvRWxlbWVudCopCisgICAgICAg
IGV4aXRGdWxsc2NyZWVuRm9yTm9kZShOb2RlKikgLS0+IGV4aXRWaWRlb0Z1bGxzY3JlZW4oKQor
ICAgICAgICAKKyAgICAgICAgVGhlIG9sZCB2ZXJzaW9ucyBoYWQgdW5uZWNlc3NhcnkgcGFyYW1l
dGVycywgZGlkIG5vdCBjbGVhcmx5IGRpc3Rpbmd1aXNoIHRoZWlyIHB1cnBvc2UKKyAgICAgICAg
ZnJvbSBlbnRlckZ1bGxzY3JlZW5Gb3JFbGVtZW50IGFuZCBmcmllbmRzLCBhbmQgd3JvbmdseSBj
bGFpbWVkIGdlbmVyYWxpdHkgdG8gYWxsIE5vZGVzLgorICAgICAgICBBbHNvIGNoYW5nZWQgbWFu
eSBvdGhlciBwbGFjZXMgdG8gdXNlIEhUTUxWaWRlb0VsZW1lbnQqIGluc3RlYWQgb2YgTm9kZSog
b3IgCisgICAgICAgIEhUTUxNZWRpYUVsZW1lbnQqIHdoZW4gdGhleSB3ZXJlIGluIGZhY3Qgb25s
eSB1c2VkIGZvciB2aWRlbyBlbGVtZW50cyBhbmQgd291bGQgb25seQorICAgICAgICB3b3JrIGZv
ciBzdWNoLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoK
KyAgICAgICAgKFdlYkNocm9tZUNsaWVudDo6c3VwcG9ydHNWaWRlb0Z1bGxzY3JlZW4pOiBBZGp1
c3QgZm9yIHRoZQorICAgICAgICBtYWluIHJlZmFjdG9yaW5nLgorICAgICAgICAoV2ViQ2hyb21l
Q2xpZW50OjplbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudCk6IGRpdHRvCisgICAg
ICAgIChXZWJDaHJvbWVDbGllbnQ6OmV4aXRWaWRlb0Z1bGxzY3JlZW4pOiBkaXR0bworICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oOgorICAgICAgICAqIFdlYlZpZXcu
Y3BwOgorICAgICAgICAoV2ViVmlldzo6ZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1l
bnQpOiBBZGp1c3QgZm9yIHRoZSAKKyAgICAgICAgbWFpbiByZWZhY3RvcmluZy4KKyAgICAgICAg
KFdlYlZpZXc6OmV4aXRWaWRlb0Z1bGxzY3JlZW4pOiBkaXR0by4KKyAgICAgICAgKiBXZWJWaWV3
Lmg6CisgICAgICAgICogRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci5jcHA6IFVzZSB2aWRlbyBl
bGVtZW50cywgbm90IG1lZGlhIGVsZW1lbnRzIHRocm91Z2hvdXQKKyAgICAgICAgKEZ1bGxzY3Jl
ZW5WaWRlb0NvbnRyb2xsZXI6OkxheWVyQ2xpZW50OjpwbGF0Zm9ybUNBTGF5ZXJMYXlvdXRTdWJs
YXllcnNPZkxheWVyKToKKyAgICAgICAgKEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXI6OnNldFZp
ZGVvRWxlbWVudCk6CisgICAgICAgIChGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyOjplbnRlckZ1
bGxzY3JlZW4pOgorICAgICAgICAoRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlcjo6ZXhpdEZ1bGxz
Y3JlZW4pOgorICAgICAgICAoRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlcjo6Y2FuUGxheSk6Cisg
ICAgICAgIChGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyOjpwbGF5KToKKyAgICAgICAgKEZ1bGxz
Y3JlZW5WaWRlb0NvbnRyb2xsZXI6OnBhdXNlKToKKyAgICAgICAgKEZ1bGxzY3JlZW5WaWRlb0Nv
bnRyb2xsZXI6OnZvbHVtZSk6CisgICAgICAgIChGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyOjpz
ZXRWb2x1bWUpOgorICAgICAgICAoRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlcjo6Y3VycmVudFRp
bWUpOgorICAgICAgICAoRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlcjo6c2V0Q3VycmVudFRpbWUp
OgorICAgICAgICAoRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlcjo6ZHVyYXRpb24pOgorICAgICAg
ICAoRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlcjo6YmVnaW5TY3J1YmJpbmcpOgorICAgICAgICAo
RnVsbHNjcmVlblZpZGVvQ29udHJvbGxlcjo6ZW5kU2NydWJiaW5nKToKKyAgICAgICAgKEZ1bGxz
Y3JlZW5WaWRlb0NvbnRyb2xsZXI6Om9uQ2hhcik6CisgICAgICAgIChGdWxsc2NyZWVuVmlkZW9D
b250cm9sbGVyOjpvbktleURvd24pOgorICAgICAgICAoRnVsbHNjcmVlblZpZGVvQ29udHJvbGxl
cjo6b25Nb3VzZVVwKToKKyAgICAgICAgKiBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyLmg6Cisg
ICAgICAgIChGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyOjp2aWRlb0VsZW1lbnQpOgorCiAyMDE0
LTA4LTI2ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFtX
aW5dIFdlYktpdCBJREwgaW5jb3JyZWN0bHkgcGFzc2VzIEhXTkQgYXMgT0xFX0hBTkRMRQpJbmRl
eDogU291cmNlL1dlYktpdC93aW4vRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci5jcHAJ
KHJldmlzaW9uIDE3MzE4MikKKysrIFNvdXJjZS9XZWJLaXQvd2luL0Z1bGxzY3JlZW5WaWRlb0Nv
bnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDUsMTggKzIwNSwxOCBAQCB2b2lkIEZ1
bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXI6OkxheWVyQ2xpCiB7CiAgICAgQVNTRVJUX0FSRyhsYXll
ciwgbGF5ZXIgPT0gbV9wYXJlbnQtPm1fcm9vdENoaWxkKTsKIAotICAgIEhUTUxNZWRpYUVsZW1l
bnQqIG1lZGlhRWxlbWVudCA9IG1fcGFyZW50LT5tX21lZGlhRWxlbWVudC5nZXQoKTsKLSAgICBp
ZiAoIW1lZGlhRWxlbWVudCkKKyAgICBIVE1MVmlkZW9FbGVtZW50KiB2aWRlb0VsZW1lbnQgPSBt
X3BhcmVudC0+bV92aWRlb0VsZW1lbnQuZ2V0KCk7CisgICAgaWYgKCF2aWRlb0VsZW1lbnQpCiAg
ICAgICAgIHJldHVybjsKIAogCi0gICAgUGxhdGZvcm1DQUxheWVyKiB2aWRlb0xheWVyID0gUGxh
dGZvcm1DQUxheWVyOjpwbGF0Zm9ybUNBTGF5ZXIobWVkaWFFbGVtZW50LT5wbGF0Zm9ybUxheWVy
KCkpOworICAgIFBsYXRmb3JtQ0FMYXllciogdmlkZW9MYXllciA9IFBsYXRmb3JtQ0FMYXllcjo6
cGxhdGZvcm1DQUxheWVyKHZpZGVvRWxlbWVudC0+cGxhdGZvcm1MYXllcigpKTsKICAgICBpZiAo
IXZpZGVvTGF5ZXIgfHwgdmlkZW9MYXllci0+c3VwZXJsYXllcigpICE9IGxheWVyKQogICAgICAg
ICByZXR1cm47CiAKICAgICBGbG9hdFJlY3QgbGF5ZXJCb3VuZHMgPSBsYXllci0+Ym91bmRzKCk7
CiAKLSAgICBGbG9hdFNpemUgdmlkZW9TaXplID0gbWVkaWFFbGVtZW50LT5wbGF5ZXIoKS0+bmF0
dXJhbFNpemUoKTsKKyAgICBGbG9hdFNpemUgdmlkZW9TaXplID0gdmlkZW9FbGVtZW50LT5wbGF5
ZXIoKS0+bmF0dXJhbFNpemUoKTsKICAgICBmbG9hdCBzY2FsZUZhY3RvcjsKICAgICBpZiAodmlk
ZW9TaXplLmFzcGVjdFJhdGlvKCkgPiBsYXllckJvdW5kcy5zaXplKCkuYXNwZWN0UmF0aW8oKSkK
ICAgICAgICAgc2NhbGVGYWN0b3IgPSBsYXllckJvdW5kcy53aWR0aCgpIC8gdmlkZW9TaXplLndp
ZHRoKCk7CkBAIC0yNTcsMTMgKzI1NywxMyBAQCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyOjp+
RnVsbHNjcmVlblZpCiAgICAgbV9yb290Q2hpbGQtPnNldE93bmVyKDApOwogfQogCi12b2lkIEZ1
bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXI6OnNldE1lZGlhRWxlbWVudChIVE1MTWVkaWFFbGVtZW50
KiBtZWRpYUVsZW1lbnQpCit2b2lkIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXI6OnNldFZpZGVv
RWxlbWVudChIVE1MVmlkZW9FbGVtZW50KiB2aWRlb0VsZW1lbnQpCiB7Ci0gICAgaWYgKG1lZGlh
RWxlbWVudCA9PSBtX21lZGlhRWxlbWVudCkKKyAgICBpZiAodmlkZW9FbGVtZW50ID09IG1fdmlk
ZW9FbGVtZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX21lZGlhRWxlbWVudCA9IG1lZGlh
RWxlbWVudDsKLSAgICBpZiAoIW1fbWVkaWFFbGVtZW50KSB7CisgICAgbV92aWRlb0VsZW1lbnQg
PSB2aWRlb0VsZW1lbnQ7CisgICAgaWYgKCFtX3ZpZGVvRWxlbWVudCkgewogICAgICAgICAvLyBD
YW4ndCBkbyBmdWxsLXNjcmVlbiwganVzdCBnZXQgb3V0CiAgICAgICAgIGV4aXRGdWxsc2NyZWVu
KCk7CiAgICAgfQpAQCAtMjcxLDE3ICsyNzEsMTcgQEAgdm9pZCBGdWxsc2NyZWVuVmlkZW9Db250
cm9sbGVyOjpzZXRNZWRpYQogCiB2b2lkIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXI6OmVudGVy
RnVsbHNjcmVlbigpCiB7Ci0gICAgaWYgKCFtX21lZGlhRWxlbWVudCkKKyAgICBpZiAoIW1fdmlk
ZW9FbGVtZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBXZWJWaWV3KiB3ZWJWaWV3ID0ga2l0
KG1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSk7CisgICAgV2ViVmlldyogd2ViVmll
dyA9IGtpdChtX3ZpZGVvRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCkpOwogICAgIEhXTkQgcGFy
ZW50SHduZCA9IHdlYlZpZXcgPyB3ZWJWaWV3LT52aWV3V2luZG93KCkgOiAwOwogCiAgICAgbV9m
dWxsc2NyZWVuV2luZG93LT5jcmVhdGVXaW5kb3cocGFyZW50SHduZCk7CiAgICAgOjpTaG93V2lu
ZG93KG1fZnVsbHNjcmVlbldpbmRvdy0+aHduZCgpLCBTV19TSE9XKTsKICAgICBtX2Z1bGxzY3Jl
ZW5XaW5kb3ctPnNldFJvb3RDaGlsZExheWVyKG1fcm9vdENoaWxkKTsKIAotICAgIFBsYXRmb3Jt
Q0FMYXllciogdmlkZW9MYXllciA9IFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKG1f
bWVkaWFFbGVtZW50LT5wbGF0Zm9ybUxheWVyKCkpOworICAgIFBsYXRmb3JtQ0FMYXllciogdmlk
ZW9MYXllciA9IFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKG1fdmlkZW9FbGVtZW50
LT5wbGF0Zm9ybUxheWVyKCkpOwogICAgIG1fcm9vdENoaWxkLT5hcHBlbmRTdWJsYXllcih2aWRl
b0xheWVyKTsKICAgICBtX3Jvb3RDaGlsZC0+c2V0TmVlZHNMYXlvdXQoKTsKICAgICBtX3Jvb3RD
aGlsZC0+c2V0R2VvbWV0cnlGbGlwcGVkKDEpOwpAQCAtMzA0LDcgKzMwNCw3IEBAIHZvaWQgRnVs
bHNjcmVlblZpZGVvQ29udHJvbGxlcjo6ZXhpdEZ1bGwKICAgICBBU1NFUlQoIUlzV2luZG93KG1f
aHVkV2luZG93KSk7CiAgICAgbV9odWRXaW5kb3cgPSAwOwogCi0gICAgLy8gV2UgcHJldmlvdXNs
eSByaXBwZWQgdGhlIG1lZGlhRWxlbWVudCdzIHBsYXRmb3JtIGxheWVyIG91dAorICAgIC8vIFdl
IHByZXZpb3VzbHkgcmlwcGVkIHRoZSB2aWRlb0VsZW1lbnQncyBwbGF0Zm9ybSBsYXllciBvdXQK
ICAgICAvLyBvZiBpdHMgb3JnaW5pYWwgbGF5ZXIgdHJlZSB0byBkaXNwbGF5IGl0IGluIG91ciBm
dWxsc2NyZWVuCiAgICAgLy8gd2luZG93LiAgTm93LCB3ZSBuZWVkIHRvIGdldCB0aGUgbGF5ZXIg
YmFjayBpbiBpdHMgb3JpZ2luYWwKICAgICAvLyB0cmVlLgpAQCAtMzEyLDY2ICszMTIsNjYgQEAg
dm9pZCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyOjpleGl0RnVsbAogICAgIC8vIEFzIGEgc2lk
ZSBlZmZlY3Qgb2Ygc2V0dGluZyB0aGUgcGxheWVyIHRvIGludmlzaWJsZS92aXNpYmxlLAogICAg
IC8vIHRoZSBwbGF5ZXIncyBsYXllciB3aWxsIGJlIHJlY3JlYXRlZCwgYW5kIHdpbGwgYmUgcGlj
a2VkIHVwIAogICAgIC8vIHRoZSBuZXh0IHRpbWUgdGhlIGxheWVyIHRyZWUgaXMgc3luY2hlZC4K
LSAgICBtX21lZGlhRWxlbWVudC0+cGxheWVyKCktPnNldFZpc2libGUoMCk7Ci0gICAgbV9tZWRp
YUVsZW1lbnQtPnBsYXllcigpLT5zZXRWaXNpYmxlKDEpOworICAgIG1fdmlkZW9FbGVtZW50LT5w
bGF5ZXIoKS0+c2V0VmlzaWJsZSgwKTsKKyAgICBtX3ZpZGVvRWxlbWVudC0+cGxheWVyKCktPnNl
dFZpc2libGUoMSk7CiB9CiAKIGJvb2wgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlcjo6Y2FuUGxh
eSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50ICYmIG1fbWVkaWFFbGVtZW50
LT5jYW5QbGF5KCk7CisgICAgcmV0dXJuIG1fdmlkZW9FbGVtZW50ICYmIG1fdmlkZW9FbGVtZW50
LT5jYW5QbGF5KCk7CiB9CiAKIHZvaWQgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlcjo6cGxheSgp
CiB7Ci0gICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICBtX21lZGlhRWxlbWVudC0+cGxh
eSgpOworICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKKyAgICAgICAgbV92aWRlb0VsZW1lbnQtPnBs
YXkoKTsKIH0KIAogdm9pZCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyOjpwYXVzZSgpCiB7Ci0g
ICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICBtX21lZGlhRWxlbWVudC0+cGF1c2UoKTsK
KyAgICBpZiAobV92aWRlb0VsZW1lbnQpCisgICAgICAgIG1fdmlkZW9FbGVtZW50LT5wYXVzZSgp
OwogfQogCiBmbG9hdCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyOjp2b2x1bWUoKSBjb25zdAog
ewotICAgIHJldHVybiBtX21lZGlhRWxlbWVudCA/IG1fbWVkaWFFbGVtZW50LT52b2x1bWUoKSA6
IDA7CisgICAgcmV0dXJuIG1fdmlkZW9FbGVtZW50ID8gbV92aWRlb0VsZW1lbnQtPnZvbHVtZSgp
IDogMDsKIH0KIAogdm9pZCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyOjpzZXRWb2x1bWUoZmxv
YXQgdm9sdW1lKQogewotICAgIGlmIChtX21lZGlhRWxlbWVudCkgeworICAgIGlmIChtX3ZpZGVv
RWxlbWVudCkgewogICAgICAgICBFeGNlcHRpb25Db2RlIGVjOwotICAgICAgICBtX21lZGlhRWxl
bWVudC0+c2V0Vm9sdW1lKHZvbHVtZSwgZWMpOworICAgICAgICBtX3ZpZGVvRWxlbWVudC0+c2V0
Vm9sdW1lKHZvbHVtZSwgZWMpOwogICAgIH0KIH0KIAogZmxvYXQgRnVsbHNjcmVlblZpZGVvQ29u
dHJvbGxlcjo6Y3VycmVudFRpbWUoKSBjb25zdAogewotICAgIHJldHVybiBtX21lZGlhRWxlbWVu
dCA/IG1fbWVkaWFFbGVtZW50LT5jdXJyZW50VGltZSgpIDogMDsKKyAgICByZXR1cm4gbV92aWRl
b0VsZW1lbnQgPyBtX3ZpZGVvRWxlbWVudC0+Y3VycmVudFRpbWUoKSA6IDA7CiB9CiAKIHZvaWQg
RnVsbHNjcmVlblZpZGVvQ29udHJvbGxlcjo6c2V0Q3VycmVudFRpbWUoZmxvYXQgdmFsdWUpCiB7
Ci0gICAgaWYgKG1fbWVkaWFFbGVtZW50KQotICAgICAgICBtX21lZGlhRWxlbWVudC0+c2V0Q3Vy
cmVudFRpbWUodmFsdWUpOworICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKKyAgICAgICAgbV92aWRl
b0VsZW1lbnQtPnNldEN1cnJlbnRUaW1lKHZhbHVlKTsKIH0KIAogZmxvYXQgRnVsbHNjcmVlblZp
ZGVvQ29udHJvbGxlcjo6ZHVyYXRpb24oKSBjb25zdAogewotICAgIHJldHVybiBtX21lZGlhRWxl
bWVudCA/IG1fbWVkaWFFbGVtZW50LT5kdXJhdGlvbigpIDogMDsKKyAgICByZXR1cm4gbV92aWRl
b0VsZW1lbnQgPyBtX3ZpZGVvRWxlbWVudC0+ZHVyYXRpb24oKSA6IDA7CiB9CiAKIHZvaWQgRnVs
bHNjcmVlblZpZGVvQ29udHJvbGxlcjo6YmVnaW5TY3J1YmJpbmcoKQogewotICAgIGlmIChtX21l
ZGlhRWxlbWVudCkgCi0gICAgICAgIG1fbWVkaWFFbGVtZW50LT5iZWdpblNjcnViYmluZygpOwor
ICAgIGlmIChtX3ZpZGVvRWxlbWVudCkgCisgICAgICAgIG1fdmlkZW9FbGVtZW50LT5iZWdpblNj
cnViYmluZygpOwogfQogCiB2b2lkIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXI6OmVuZFNjcnVi
YmluZygpCiB7Ci0gICAgaWYgKG1fbWVkaWFFbGVtZW50KSAKLSAgICAgICAgbV9tZWRpYUVsZW1l
bnQtPmVuZFNjcnViYmluZygpOworICAgIGlmIChtX3ZpZGVvRWxlbWVudCkgCisgICAgICAgIG1f
dmlkZW9FbGVtZW50LT5lbmRTY3J1YmJpbmcoKTsKIH0KIAogTFJFU1VMVCBGdWxsc2NyZWVuVmlk
ZW9Db250cm9sbGVyOjpmdWxsc2NyZWVuQ2xpZW50V25kUHJvYyhIV05EIHduZCwgVUlOVCBtZXNz
YWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQpAQCAtNTgwLDggKzU4MCw4IEBAIExS
RVNVTFQgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlcjo6aHVkV24KIHZvaWQgRnVsbHNjcmVlblZp
ZGVvQ29udHJvbGxlcjo6b25DaGFyKGludCBjKQogewogICAgIGlmIChjID09IFZLX0VTQ0FQRSkg
ewotICAgICAgICBpZiAobV9tZWRpYUVsZW1lbnQpCi0gICAgICAgICAgICBtX21lZGlhRWxlbWVu
dC0+ZXhpdEZ1bGxzY3JlZW4oKTsKKyAgICAgICAgaWYgKG1fdmlkZW9FbGVtZW50KQorICAgICAg
ICAgICAgbV92aWRlb0VsZW1lbnQtPmV4aXRGdWxsc2NyZWVuKCk7CiAgICAgfSBlbHNlIGlmIChj
ID09IFZLX1NQQUNFKQogICAgICAgICB0b2dnbGVQbGF5KCk7CiB9CkBAIC01ODksOCArNTg5LDgg
QEAgdm9pZCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyOjpvbkNoYXIoaQogdm9pZCBGdWxsc2Ny
ZWVuVmlkZW9Db250cm9sbGVyOjpvbktleURvd24oaW50IHZpcnR1YWxLZXkpCiB7CiAgICAgaWYg
KHZpcnR1YWxLZXkgPT0gVktfRVNDQVBFKSB7Ci0gICAgICAgIGlmIChtX21lZGlhRWxlbWVudCkK
LSAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5leGl0RnVsbHNjcmVlbigpOworICAgICAgICBp
ZiAobV92aWRlb0VsZW1lbnQpCisgICAgICAgICAgICBtX3ZpZGVvRWxlbWVudC0+ZXhpdEZ1bGxz
Y3JlZW4oKTsKICAgICB9CiB9CiAKQEAgLTY3Myw4ICs2NzMsOCBAQCB2b2lkIEZ1bGxzY3JlZW5W
aWRlb0NvbnRyb2xsZXI6Om9uTW91c2VVCiAgICAgICAgICAgICBlbmRTY3J1YmJpbmcoKTsKICAg
ICAgICAgZWxzZSBpZiAobV9oaXRXaWRnZXQgPT0gJm1fZXhpdEZ1bGxzY3JlZW5CdXR0b24gJiYg
bV9leGl0RnVsbHNjcmVlbkJ1dHRvbi5oaXRUZXN0KGNvbnZlcnRlZFBvaW50KSkgewogICAgICAg
ICAgICAgbV9oaXRXaWRnZXQgPSAwOwotICAgICAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50KQot
ICAgICAgICAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5leGl0RnVsbHNjcmVlbigpOworICAgICAg
ICAgICAgaWYgKG1fdmlkZW9FbGVtZW50KQorICAgICAgICAgICAgICAgIG1fdmlkZW9FbGVtZW50
LT5leGl0RnVsbHNjcmVlbigpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAg
fQpJbmRleDogU291cmNlL1dlYktpdC93aW4vRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIu
aAkocmV2aXNpb24gMTczMTgyKQorKysgU291cmNlL1dlYktpdC93aW4vRnVsbHNjcmVlblZpZGVv
Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRl
ICJNZWRpYVBsYXllclByaXZhdGVGdWxsc2NyZWVuV2luZG93LmgiCiAKLSNpbmNsdWRlIDxXZWJD
b3JlL0hUTUxNZWRpYUVsZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxWaWRlb0VsZW1l
bnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ltYWdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRQ
b2ludC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgpAQCAtMTA3LDggKzEwNyw4IEBA
IHB1YmxpYzoKICAgICBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyKCk7CiAgICAgdmlydHVhbCB+
RnVsbHNjcmVlblZpZGVvQ29udHJvbGxlcigpOwogCi0gICAgdm9pZCBzZXRNZWRpYUVsZW1lbnQo
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCopOwotICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1l
bnQqIG1lZGlhRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFFbGVtZW50LmdldCgpOyB9
CisgICAgdm9pZCBzZXRWaWRlb0VsZW1lbnQoV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCopOwor
ICAgIFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvRWxlbWVudCgpIGNvbnN0IHsgcmV0
dXJuIG1fdmlkZW9FbGVtZW50LmdldCgpOyB9CiAKICAgICB2b2lkIGVudGVyRnVsbHNjcmVlbigp
OwogICAgIHZvaWQgZXhpdEZ1bGxzY3JlZW4oKTsKQEAgLTE0OSw3ICsxNDksNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgb25Nb3VzZVVwKGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CiAgICAgdm9p
ZCBvbktleURvd24oaW50IHZpcnR1YWxLZXkpOwogCi0gICAgUmVmUHRyPFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnQ+IG1fbWVkaWFFbGVtZW50OworICAgIFJlZlB0cjxXZWJDb3JlOjpIVE1MVmlk
ZW9FbGVtZW50PiBtX3ZpZGVvRWxlbWVudDsKIAogICAgIEhXTkQgbV9odWRXaW5kb3c7CiAgICAg
R0RJT2JqZWN0PEhCSVRNQVA+IG1fYml0bWFwOwpJbmRleDogU291cmNlL1dlYktpdC93aW4vV2Vi
Vmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAJKHJl
dmlzaW9uIDE3MzE4MikKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDEsOCArMTAxLDggQEAKICNpbmNsdWRlIDxXZWJDb3JlL0dlb2xvY2F0aW9u
Q29udHJvbGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR2VvbG9jYXRpb25FcnJvci5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9IVE1M
TWVkaWFFbGVtZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0hUTUxWaWRlb0VsZW1lbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0hXbmREQy5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvSGlzdG9yeUNvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0hpc3RvcnlJdGVtLmg+CkBAIC02MjY3LDM4ICs2MjY3LDMxIEBAIEhSRVNVTFQgV2ViVmll
dzo6c2V0Q2FuU3RhcnRQbHVnaW5zKEJPT0wKICAgICByZXR1cm4gU19PSzsKIH0KIAotdm9pZCBX
ZWJWaWV3OjplbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqIG5vZGUpCit2b2lkIFdlYlZpZXc6
OmVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KEhUTUxWaWRlb0VsZW1lbnQqIHZp
ZGVvRWxlbWVudCkKIHsKICNpZiBFTkFCTEUoVklERU8pICYmICFVU0UoR1NUUkVBTUVSKSAmJiAh
VVNFKE1FRElBX0ZPVU5EQVRJT04pCi0gICAgaWYgKCFpc0hUTUxWaWRlb0VsZW1lbnQobm9kZSkg
fHwgIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCF0
b0VsZW1lbnQobm9kZSktPmlzTWVkaWFFbGVtZW50KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBI
VE1MTWVkaWFFbGVtZW50KiB2aWRlb0VsZW1lbnQgPSB0b0hUTUxNZWRpYUVsZW1lbnQobm9kZSk7
Ci0KICAgICBpZiAobV9mdWxsU2NyZWVuVmlkZW9Db250cm9sbGVyKSB7Ci0gICAgICAgIGlmICht
X2Z1bGxTY3JlZW5WaWRlb0NvbnRyb2xsZXItPm1lZGlhRWxlbWVudCgpID09IHZpZGVvRWxlbWVu
dCkgeworICAgICAgICBpZiAobV9mdWxsU2NyZWVuVmlkZW9Db250cm9sbGVyLT52aWRlb0VsZW1l
bnQoKSA9PSB2aWRlb0VsZW1lbnQpIHsKICAgICAgICAgICAgIC8vIFRoZSBiYWNrZW5kIG1heSBq
dXN0IHdhcm4gdXMgdGhhdCB0aGUgdW5kZXJsYXlpbmcgcGxhZnRvcm1Nb3ZpZSgpCiAgICAgICAg
ICAgICAvLyBoYXMgY2hhbmdlZC4gSnVzdCBmb3JjZSBhbiB1cGRhdGUuCi0gICAgICAgICAgICBt
X2Z1bGxTY3JlZW5WaWRlb0NvbnRyb2xsZXItPnNldE1lZGlhRWxlbWVudCh2aWRlb0VsZW1lbnQp
OworICAgICAgICAgICAgbV9mdWxsU2NyZWVuVmlkZW9Db250cm9sbGVyLT5zZXRWaWRlb0VsZW1l
bnQodmlkZW9FbGVtZW50KTsKICAgICAgICAgICAgIHJldHVybjsgLy8gTm8gbW9yZSB0byBkby4K
ICAgICAgICAgfQogCi0gICAgICAgIC8vIEZpcnN0IGV4aXQgRnVsbHNjcmVlbiBmb3IgdGhlIG9s
ZCBtZWRpYUVsZW1lbnQuCi0gICAgICAgIG1fZnVsbFNjcmVlblZpZGVvQ29udHJvbGxlci0+bWVk
aWFFbGVtZW50KCktPmV4aXRGdWxsc2NyZWVuKCk7CisgICAgICAgIC8vIEZpcnN0IGV4aXQgRnVs
bHNjcmVlbiBmb3IgdGhlIG9sZCB2aWRlb0VsZW1lbnQuCisgICAgICAgIG1fZnVsbFNjcmVlblZp
ZGVvQ29udHJvbGxlci0+dmlkZW9FbGVtZW50KCktPmV4aXRGdWxsc2NyZWVuKCk7CiAgICAgICAg
IC8vIFRoaXMgcHJldmlvdXMgY2FsbCBoYXMgdG8gdHJpZ2dlciBleGl0RnVsbHNjcmVlbiwKICAg
ICAgICAgLy8gd2hpY2ggaGFzIHRvIGNsZWFyIG1fZnVsbFNjcmVlblZpZGVvQ29udHJvbGxlci4K
ICAgICAgICAgQVNTRVJUKCFtX2Z1bGxTY3JlZW5WaWRlb0NvbnRyb2xsZXIpOwogICAgIH0KIAog
ICAgIG1fZnVsbFNjcmVlblZpZGVvQ29udHJvbGxlciA9IHN0ZDo6bWFrZV91bmlxdWU8RnVsbHNj
cmVlblZpZGVvQ29udHJvbGxlcj4oKTsKLSAgICBtX2Z1bGxTY3JlZW5WaWRlb0NvbnRyb2xsZXIt
PnNldE1lZGlhRWxlbWVudCh2aWRlb0VsZW1lbnQpOworICAgIG1fZnVsbFNjcmVlblZpZGVvQ29u
dHJvbGxlci0+c2V0VmlkZW9FbGVtZW50KHZpZGVvRWxlbWVudCk7CiAgICAgbV9mdWxsU2NyZWVu
VmlkZW9Db250cm9sbGVyLT5lbnRlckZ1bGxzY3JlZW4oKTsKICNlbmRpZgogfQogCi12b2lkIFdl
YlZpZXc6OmV4aXRGdWxsc2NyZWVuKCkKK3ZvaWQgV2ViVmlldzo6ZXhpdFZpZGVvRnVsbHNjcmVl
bigpCiB7CiAjaWYgRU5BQkxFKFZJREVPKSAmJiAhVVNFKEdTVFJFQU1FUikgJiYgIVVTRShNRURJ
QV9GT1VOREFUSU9OKQogICAgIGlmICghbV9mdWxsU2NyZWVuVmlkZW9Db250cm9sbGVyKQpJbmRl
eDogU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvd2luL1dlYlZpZXcuaAkocmV2aXNpb24gMTczMTgyKQorKysgU291cmNlL1dlYktpdC93aW4v
V2ViVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICNpZiBQTEFURk9STShXSU4pICYmIFVTRShBVkZPVU5EQVRJT04pCiAgICAgc3RydWN0
IEdyYXBoaWNzRGV2aWNlQWRhcHRlcjsKICNlbmRpZgorICAgIGNsYXNzIEhUTUxWaWRlb0VsZW1l
bnQ7CiB9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTk0MCw4ICs5NDEsOCBAQCBwdWJsaWM6
CiAgICAgV2ViQ29yZTo6R3JhcGhpY3NEZXZpY2VBZGFwdGVyKiBncmFwaGljc0RldmljZUFkYXB0
ZXIoKSBjb25zdDsKICNlbmRpZgogCi0gICAgdm9pZCBlbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKFdl
YkNvcmU6Ok5vZGUqKTsKLSAgICB2b2lkIGV4aXRGdWxsc2NyZWVuKCk7CisgICAgdm9pZCBlbnRl
clZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50
Kik7CisgICAgdm9pZCBleGl0VmlkZW9GdWxsc2NyZWVuKCk7CiAKICAgICB2b2lkIHNldExhc3RD
dXJzb3IoSENVUlNPUiBjdXJzb3IpIHsgbV9sYXN0U2V0Q3Vyc29yID0gY3Vyc29yOyB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21l
Q2xpZW50LmNwcAkocmV2aXNpb24gMTczMTgyKQorKysgU291cmNlL1dlYktpdC93aW4vV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzczLDE5ICs3
NzMsMTkgQEAgQ09NUHRyPElXZWJVSURlbGVnYXRlPiBXZWJDaHJvbWVDbGllbnQ6OgogCiAjaWYg
RU5BQkxFKFZJREVPKQogCi1ib29sIFdlYkNocm9tZUNsaWVudDo6c3VwcG9ydHNGdWxsc2NyZWVu
Rm9yTm9kZShjb25zdCBOb2RlKiBub2RlKQorYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnN1cHBvcnRz
VmlkZW9GdWxsc2NyZWVuKCkKIHsKLSAgICByZXR1cm4gaXNIVE1MVmlkZW9FbGVtZW50KG5vZGUp
OworICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFdlYkNocm9tZUNsaWVudDo6ZW50ZXJGdWxs
c2NyZWVuRm9yTm9kZShOb2RlKiBub2RlKQordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmVudGVyVmlk
ZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvRWxlbWVu
dCkKIHsKLSAgICBtX3dlYlZpZXctPmVudGVyRnVsbHNjcmVlbkZvck5vZGUobm9kZSk7CisgICAg
bV93ZWJWaWV3LT5lbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudCh2aWRlb0VsZW1l
bnQpOwogfQogCi12b2lkIFdlYkNocm9tZUNsaWVudDo6ZXhpdEZ1bGxzY3JlZW5Gb3JOb2RlKE5v
ZGUqKQordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmV4aXRWaWRlb0Z1bGxzY3JlZW4oKQogewotICAg
IG1fd2ViVmlldy0+ZXhpdEZ1bGxzY3JlZW4oKTsKKyAgICBtX3dlYlZpZXctPmV4aXRWaWRlb0Z1
bGxzY3JlZW4oKTsKIH0KIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dp
bi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAkocmV2aXNpb24gMTczMTgyKQorKysg
U291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTE0OCw5ICsxNDgsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNj
cm9sbFJlY3RJbnRvVmlldyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3QgeyB9CiAKICNp
ZiBFTkFCTEUoVklERU8pCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzRnVsbHNjcmVlbkZvck5v
ZGUoY29uc3QgV2ViQ29yZTo6Tm9kZSopOwotICAgIHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxzY3Jl
ZW5Gb3JOb2RlKFdlYkNvcmU6Ok5vZGUqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxzY3Jl
ZW5Gb3JOb2RlKFdlYkNvcmU6Ok5vZGUqKTsKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNWaWRl
b0Z1bGxzY3JlZW4oKTsKKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JW
aWRlb0VsZW1lbnQoV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCopOworICAgIHZpcnR1YWwgdm9p
ZCBleGl0VmlkZW9GdWxsc2NyZWVuKCk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShOT1RJRklDQVRJ
T05TKSB8fCBFTkFCTEUoTEVHQUNZX05PVElGSUNBVElPTlMpCg==
</data>
<flag name="review"
          id="262281"
          type_id="1"
          status="+"
          setter="jer.noble"
    />
          </attachment>
      

    </bug>

</bugzilla>