<?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>33087</bug_id>
          
          <creation_ts>2009-12-31 10:27:55 -0800</creation_ts>
          <short_desc>[V8] Separate DOMWrapperWorld from V8IsolatedWorld</short_desc>
          <delta_ts>2010-01-05 11:04:41 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>176217</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-12-31 10:27:55 -0800</bug_when>
    <thetext>[V8] Separate DOMWrapperWorld from V8IsolatedWorld</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176219</commentid>
    <comment_count>1</comment_count>
      <attachid>45717</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-12-31 10:33:21 -0800</bug_when>
    <thetext>Created attachment 45717
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176221</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-12-31 10:35:11 -0800</bug_when>
    <thetext>Strange that the diff has V8IsolatedContext.* twice.  My working copy seems ok though.  Must be svn&apos;s way of handling renames...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176222</commentid>
    <comment_count>3</comment_count>
      <attachid>45718</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-12-31 10:40:17 -0800</bug_when>
    <thetext>Created attachment 45718
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176224</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-31 10:40:57 -0800</bug_when>
    <thetext>Attachment 45718 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/bindings/v8/V8IsolatedContext.cpp:37:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/bindings/v8/V8IsolatedContext.cpp:64:  context_scope is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/v8/V8IsolatedContext.h:36:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/bindings/v8/V8IsolatedContext.h:39:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/bindings/v8/V8IsolatedContext.h:40:  One space before end of line comments  [whitespace/comments] [5]
WebCore/bindings/v8/V8IsolatedContext.h:73:  Use 0 instead of NULL.  [readability/null] [4]
WebCore/bindings/v8/V8IsolatedContext.h:107:  isolated_world is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Skipping input &apos;WebCore/bindings/v8/V8IsolatedWorld.cpp&apos;: Can&apos;t open for reading
WebCore/bindings/v8/MainThreadDOMData.cpp:57:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Skipping input &apos;WebCore/bindings/v8/V8IsolatedWorld.h&apos;: Can&apos;t open for reading
Total errors found: 8</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176226</commentid>
    <comment_count>5</comment_count>
      <attachid>45719</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-12-31 10:45:22 -0800</bug_when>
    <thetext>Created attachment 45719
Patch with style fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176227</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-31 10:47:33 -0800</bug_when>
    <thetext>Attachment 45719 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/bindings/v8/V8IsolatedContext.cpp:37:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/bindings/v8/V8IsolatedContext.cpp:64:  context_scope is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Skipping input &apos;WebCore/bindings/v8/V8IsolatedWorld.cpp&apos;: Can&apos;t open for reading
Skipping input &apos;WebCore/bindings/v8/V8IsolatedWorld.h&apos;: Can&apos;t open for reading
Total errors found: 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176229</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-31 11:09:04 -0800</bug_when>
    <thetext>Attachment 45719 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/155213</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176230</commentid>
    <comment_count>8</comment_count>
      <attachid>45720</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-12-31 11:18:34 -0800</bug_when>
    <thetext>Created attachment 45720
Patch with linux build fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176231</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-12-31 11:20:48 -0800</bug_when>
    <thetext>This style failure seems necessary to get the patch to build on linux:
readability/comparison_to_zero</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176232</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-31 11:23:41 -0800</bug_when>
    <thetext>Attachment 45720 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
Skipping input &apos;WebCore/bindings/v8/V8IsolatedWorld.cpp&apos;: Can&apos;t open for reading
WebCore/bindings/v8/MainThreadDOMData.cpp:57:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Skipping input &apos;WebCore/bindings/v8/V8IsolatedWorld.h&apos;: Can&apos;t open for reading
Total errors found: 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177181</commentid>
    <comment_count>11</comment_count>
      <attachid>45720</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-01-05 09:20:13 -0800</bug_when>
    <thetext>Comment on attachment 45720
Patch with linux build fix

ok. I wish this patch could&apos;ve been smaller. I am pretty sure if there was a bug there somewhere, there&apos;s no way I&apos;d see it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177217</commentid>
    <comment_count>12</comment_count>
      <attachid>45720</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-01-05 10:29:00 -0800</bug_when>
    <thetext>Comment on attachment 45720
Patch with linux build fix

Thanks for the review.  I&apos;ll try to do these changes in smaller pieces in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177250</commentid>
    <comment_count>13</comment_count>
      <attachid>45720</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-01-05 11:04:32 -0800</bug_when>
    <thetext>Comment on attachment 45720
Patch with linux build fix

Clearing flags on attachment: 45720

Committed r52811: &lt;http://trac.webkit.org/changeset/52811&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177251</commentid>
    <comment_count>14</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-01-05 11:04:41 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45717</attachid>
            <date>2009-12-31 10:33:21 -0800</date>
            <delta_ts>2009-12-31 10:40:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-33087-20091231103319.patch</filename>
            <type>text/plain</type>
            <size>54757</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MjY4MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjAgQEAKKzIwMDktMTItMzEgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbVjhd
IFNlcGFyYXRlIERPTVdyYXBwZXJXb3JsZCBmcm9tIFY4SXNvbGF0ZWRXb3JsZAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzMwODcKKworICAgICAgICBU
aGlzIGNoYW5nZSBzZXBhcmF0ZSBET01XcmFwcGVyV29ybGQgYW5kIElzb2xhdGVkV29ybGQgZnJv
bQorICAgICAgICBWOElzb2xhdGVkV29ybGQuICBJJ3ZlIGFsc28gcmVuYW1lZCBWOElzb2xhdGVk
V29ybGQgdG8KKyAgICAgICAgVjhJc29sYXRlZENvbnRleHQgaW4gcHJlcGFyYXRpb24gZm9yIGhh
dmluZyBtb3JlIHRoYW4gb25lIGNvbnRleHQgaW4gYQorICAgICAgICBzaW5nbGUgaXNvbGF0ZWQg
d29ybGQuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtb3ZlcyB1cyBjbG9zZXIgdG8gdHdvIGdvYWxz
OgorICAgICAgICAxKSBNYXRjaGluZyB0aGUgc3RydWN0dXJlIG9mIHRoZSBKU0MgaW1wbGVtZW50
YXRpb24gb2YgaXNvbGF0ZWQgd29ybGRzLgorICAgICAgICAyKSBMZXR0aW5nIHNjcmlwdHMgcnVu
bmluZyBpbiBpc29sYXRlZCBjb250ZXh0cyBzZWUgaW50byBvdGhlciBpZnJhbWVzCisgICAgICAg
ICAgICh3aGljaCByZXF1aXJlcyBoYXZpbmcgbW9yZSB0aGFuIG9uZSBjb250ZXh0IGluIGFuIGlz
b2xhdGVkIHdvcmxkLikKKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9ET01XcmFwcGVyV29ybGQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRP
TVdyYXBwZXJXb3JsZDo6RE9NV3JhcHBlcldvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6Om1haW5U
aHJlYWROb3JtYWxXb3JsZCk6CisgICAgICAgICogYmluZGluZ3MvdjgvRE9NV3JhcHBlcldvcmxk
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RE9NV3JhcHBlcldvcmxkOjpjcmVhdGUpOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L0lzb2xhdGVkV29ybGQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6Oklzb2xhdGVkV29ybGQ6Oklzb2xhdGVkV29ybGQpOgorICAgICAgICAoV2ViQ29y
ZTo6SXNvbGF0ZWRXb3JsZDo6fklzb2xhdGVkV29ybGQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L0lzb2xhdGVkV29ybGQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJc29sYXRlZFdvcmxk
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SXNvbGF0ZWRXb3JsZDo6Y291bnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SXNvbGF0ZWRXb3JsZDo6ZG9tRGF0YVN0b3JlKToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9NYWluVGhyZWFkRE9NRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNYWlu
VGhyZWFkRE9NRGF0YTo6Z2V0TWFpblRocmVhZFN0b3JlKToKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xs
ZXI6OmN1cnJlbnRTY3JpcHRTdGF0ZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0U3Rh
dGUuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdFN0YXRlLmg6CisgICAgICAgICog
YmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHA6CisgICAgICAgICogYmluZGluZ3Mvdjgv
VjhET01XcmFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6aW5zdGFu
dGlhdGVWOE9iamVjdCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQu
Y3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRXb3JsZC5jcHAu
CisgICAgICAgIChXZWJDb3JlOjpWOElzb2xhdGVkQ29udGV4dDo6Y29udGV4dFdlYWtSZWZlcmVu
Y2VDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpWOElzb2xhdGVkQ29udGV4dDo6VjhJc29s
YXRlZENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VjhJc29sYXRlZENvbnRleHQ6OmRlc3Ry
b3kpOgorICAgICAgICAoV2ViQ29yZTo6VjhJc29sYXRlZENvbnRleHQ6On5WOElzb2xhdGVkQ29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpWOElzb2xhdGVkQ29udGV4dDo6c2NyaXB0U3RhdGUp
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRDb250ZXh0Lmg6IENvcGllZCBmcm9t
IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZFdvcmxkLmguCisgICAgICAgIChXZWJDb3Jl
OjpWOElzb2xhdGVkQ29udGV4dDo6Z2V0RW50ZXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpWOElz
b2xhdGVkQ29udGV4dDo6d29ybGQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRX
b3JsZC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3MvdjgvVjhJc29sYXRlZFdvcmxk
Lmg6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3MvdjgvVjhQcm94eS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpWOFByb3h5OjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCk6CisgICAgICAgIChX
ZWJDb3JlOjpWOFByb3h5Ojpjb250ZXh0KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFByb3h5
Lmg6CisgICAgICAgICogYmluZGluZ3MvdjgvV29ybGRDb250ZXh0SGFuZGxlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldvcmxkQ29udGV4dEhhbmRsZTo6V29ybGRDb250ZXh0SGFuZGxlKToKKwog
MjAwOS0xMi0zMSAgTGFzemxvIEdvbWJvcyAgPGxhc3psby4xLmdvbWJvc0Bub2tpYS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCkluZGV4OiBX
ZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQko
cmV2aXNpb24gNTI2NjYpCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpA
QCAtNzUzLDYgKzc1MywxMCBAQAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0RPTURhdGFTdG9y
ZS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0RPTURhdGFTdG9yZS5oJywKICAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9ET01PYmplY3RzSW5jbHVkZS5oJywKKyAgICAgICAgICAgICdi
aW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92
OC9ET01XcmFwcGVyV29ybGQuaCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvSXNvbGF0ZWRX
b3JsZC5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0lzb2xhdGVkV29ybGQuaCcsCiAg
ICAgICAgICAgICAnYmluZGluZ3MvdjgvTWFpblRocmVhZERPTURhdGEuY3BwJywKICAgICAgICAg
ICAgICdiaW5kaW5ncy92OC9NYWluVGhyZWFkRE9NRGF0YS5oJywKICAgICAgICAgICAgICdiaW5k
aW5ncy92OC9OUFY4T2JqZWN0LmNwcCcsCkBAIC04MjIsOCArODI2LDggQEAKICAgICAgICAgICAg
ICdiaW5kaW5ncy92OC9WOEhpZGRlblByb3BlcnR5TmFtZS5oJywKICAgICAgICAgICAgICdiaW5k
aW5ncy92OC9WOEluZGV4LmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhJbmRleC5o
JywKLSAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOElzb2xhdGVkV29ybGQuY3BwJywKLSAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9WOElzb2xhdGVkV29ybGQuaCcsCisgICAgICAgICAgICAnYmlu
ZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQuY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92
OC9WOElzb2xhdGVkQ29udGV4dC5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOExhenlF
dmVudExpc3RlbmVyLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRM
aXN0ZW5lci5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOE5QT2JqZWN0LmNwcCcsCklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVdyYXBwZXJXb3JsZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuY3BwCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRPTVdyYXBwZXJX
b3JsZC5oIgorCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9U
aHJlYWRpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitET01XcmFwcGVyV29ybGQ6OkRP
TVdyYXBwZXJXb3JsZCgpCit7CisgICAgLy8gVGhpcyBjbGFzcyBpcyBwcmV0dHkgYm9yaW5nLCBo
dWg/Cit9CisKK0RPTVdyYXBwZXJXb3JsZCogbWFpblRocmVhZE5vcm1hbFdvcmxkKCkKK3sKKyAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmVmUHRy
PERPTVdyYXBwZXJXb3JsZD4sIGNhY2hlZE5vcm1hbFdvcmxkLCAoRE9NV3JhcHBlcldvcmxkOjpj
cmVhdGUoKSkpOworICAgIHJldHVybiBjYWNoZWROb3JtYWxXb3JsZC5nZXQoKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVy
V29ybGQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVdyYXBwZXJXb3Js
ZC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRE9NV3JhcHBlcldvcmxkX2gK
KyNkZWZpbmUgRE9NV3JhcHBlcldvcmxkX2gKKworI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVGhpcyBjbGFzcyByZXByZXNlbnQgYSBjb2xsZWN0
aW9uIG9mIERPTSB3cmFwcGVycyBmb3IgYSBzcGVjaWZpYyB3b3JsZC4KKy8vIFRoZSBiYXNlIGNs
YXNzIGlzIHByZXR0eSBib3JpbmcgYmVjYXVzZSB0aGUgd3JhcHBlcnMgYXJlIGFjdHVhbGx5IHN0
b3JlZAorLy8gc3RhdGljYWxseSBpbiBWOERPTU1hcCBhbmQgZ2FyYmFnZSBjb2xsZWN0ZWQgYnkg
VjggaXRzZWxmLgorY2xhc3MgRE9NV3JhcHBlcldvcmxkIDogcHVibGljIFJlZkNvdW50ZWQ8RE9N
V3JhcHBlcldvcmxkPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RE9NV3JhcHBl
cldvcmxkPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgRE9NV3JhcHBlcldvcmxkKCkp
OyB9CisKK3Byb3RlY3RlZDoKKyAgICBET01XcmFwcGVyV29ybGQoKTsKK307CisKK0RPTVdyYXBw
ZXJXb3JsZCogbWFpblRocmVhZE5vcm1hbFdvcmxkKCk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIERPTVdyYXBwZXJXb3JsZF9oCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L3Y4L0lzb2xhdGVkV29ybGQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvdjgv
SXNvbGF0ZWRXb3JsZC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L0lz
b2xhdGVkV29ybGQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIklzb2xhdGVkV29ybGQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitpbnQgSXNvbGF0ZWRXb3JsZDo6aXNvbGF0ZWRXb3JsZENvdW50ID0gMDsKKworSXNvbGF0
ZWRXb3JsZDo6SXNvbGF0ZWRXb3JsZCgpCit7CisgICAgKytpc29sYXRlZFdvcmxkQ291bnQ7Cit9
CisKK0lzb2xhdGVkV29ybGQ6On5Jc29sYXRlZFdvcmxkKCkKK3sKKyAgICAtLWlzb2xhdGVkV29y
bGRDb3VudDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy92OC9Jc29sYXRlZFdvcmxkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92
OC9Jc29sYXRlZFdvcmxkLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L0lz
b2xhdGVkV29ybGQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSXNvbGF0
ZWRXb3JsZF9oCisjZGVmaW5lIElzb2xhdGVkV29ybGRfaAorCisjaW5jbHVkZSAiRE9NV3JhcHBl
cldvcmxkLmgiCisjaW5jbHVkZSAiVjhET01NYXAuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CisvLyBBbiBET01XcmFwcGVyV29ybGQgb3RoZXIgdGhhbiB0aGUgdGhyZWFkJ3Mgbm9ybWFsIHdv
cmxkLgorY2xhc3MgSXNvbGF0ZWRXb3JsZCA6IHB1YmxpYyBET01XcmFwcGVyV29ybGQgeworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElzb2xhdGVkV29ybGQ+IGNyZWF0ZSgpIHsgcmV0
dXJuIGFkb3B0UmVmKG5ldyBJc29sYXRlZFdvcmxkKCkpOyB9CisgICAgc3RhdGljIGludCBjb3Vu
dCgpIHsgcmV0dXJuIGlzb2xhdGVkV29ybGRDb3VudDsgfQorCisgICAgRE9NRGF0YVN0b3JlKiBk
b21EYXRhU3RvcmUoKSBjb25zdCB7IHJldHVybiBtX2RvbURhdGFTdG9yZS5nZXRTdG9yZSgpOyB9
CisKK3Byb3RlY3RlZDoKKyAgICBJc29sYXRlZFdvcmxkKCk7CisgICAgfklzb2xhdGVkV29ybGQo
KTsKKworcHJpdmF0ZToKKyAgICAvLyBUaGUgYmFja2luZyBzdG9yZSBmb3IgdGhlIGlzb2xhdGVk
IHdvcmxkJ3MgRE9NIHdyYXBwZXJzLiAgVGhpcyBjbGFzcworICAgIC8vIGRvZXNuJ3QgaGF2ZSB2
aXNpYmlsaXR5IGludG8gdGhlIHdyYXBwZXJzLiAgVGhpcyBoYW5kbGUgc2ltcGx5IGhlbHBzCisg
ICAgLy8gbWFuYWdlIHRoZWlyIGxpZmV0aW1lLgorICAgIERPTURhdGFTdG9yZUhhbmRsZSBtX2Rv
bURhdGFTdG9yZTsKKworICAgIHN0YXRpYyBpbnQgaXNvbGF0ZWRXb3JsZENvdW50OworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gSXNvbGF0ZWRXb3JsZF9oCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L01haW5UaHJlYWRET01EYXRhLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL3Y4L01haW5UaHJlYWRET01EYXRhLmNwcAkocmV2aXNpb24gNTI2
NjYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L01haW5UaHJlYWRET01EYXRhLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
Ik1haW5UaHJlYWRET01EYXRhLmgiCiAKLSNpbmNsdWRlICJWOElzb2xhdGVkV29ybGQuaCIKKyNp
bmNsdWRlICJWOElzb2xhdGVkQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTUzLDkgKzUzLDkgQEAgRE9NRGF0YVN0b3JlJiBNYWluVGhyZWFkRE9NRGF0YTo6Z2V0TWFpbgog
ICAgIC8vIHNvIHRoYXQgaXQgY2FuIGJlIGlubGluZWQgYnkgZ2V0Q3VycmVudE1haW5UaHJlYWRT
dG9yZSwgd2hpY2ggaXMKICAgICAvLyBhIGhvdCBzcG90IGluIERyb21hZW8gRE9NIHRlc3RzLgog
ICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKLSAgICBWOElzb2xhdGVkV29ybGQqIHdv
cmxkID0gVjhJc29sYXRlZFdvcmxkOjpnZXRFbnRlcmVkKCk7Ci0gICAgaWYgKFVOTElLRUxZKHdv
cmxkICE9IDApKQotICAgICAgICByZXR1cm4gKndvcmxkLT5nZXRET01EYXRhU3RvcmUoKTsKKyAg
ICBWOElzb2xhdGVkQ29udGV4dCogY29udGV4dCA9IFY4SXNvbGF0ZWRDb250ZXh0OjpnZXRFbnRl
cmVkKCk7CisgICAgaWYgKFVOTElLRUxZKGNvbnRleHQgIT0gMCkpCisgICAgICAgIHJldHVybiAq
Y29udGV4dC0+d29ybGQoKS0+ZG9tRGF0YVN0b3JlKCk7CiAgICAgcmV0dXJuIG1fZGVmYXVsdFN0
b3JlOwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAJ
KHJldmlzaW9uIDUyNjY2KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQAogI2luY2x1ZGUgIlNldHRpbmdz
LmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nU3RhdGUuaCIK
LSNpbmNsdWRlICJWOElzb2xhdGVkV29ybGQuaCIKKyNpbmNsdWRlICJWOElzb2xhdGVkQ29udGV4
dC5oIgogI2luY2x1ZGUgIlY4TlBPYmplY3QuaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCiAjaW5j
bHVkZSAiV2lkZ2V0LmgiCkBAIC0zNzQsOCArMzc0LDggQEAgU2NyaXB0U3RhdGUqIFNjcmlwdENv
bnRyb2xsZXI6Om1haW5Xb3JsZAogCiBTY3JpcHRTdGF0ZSogU2NyaXB0Q29udHJvbGxlcjo6Y3Vy
cmVudFNjcmlwdFN0YXRlKCkKIHsKLSAgICBpZiAoVjhJc29sYXRlZFdvcmxkKiB3b3JsZCA9IFY4
SXNvbGF0ZWRXb3JsZDo6Z2V0RW50ZXJlZCgpKQotICAgICAgICByZXR1cm4gd29ybGQtPnNjcmlw
dFN0YXRlKCk7CisgICAgaWYgKFY4SXNvbGF0ZWRDb250ZXh0KiBjb250ZXh0ID0gVjhJc29sYXRl
ZENvbnRleHQ6OmdldEVudGVyZWQoKSkKKyAgICAgICAgcmV0dXJuIGNvbnRleHQtPnNjcmlwdFN0
YXRlKCk7CiAgICAgRnJhbWUqIGZyYW1lID0gVjhQcm94eTo6cmV0cmlldmVGcmFtZUZvckN1cnJl
bnRDb250ZXh0KCk7CiAgICAgQVNTRVJUKGZyYW1lKTsKICAgICByZXR1cm4gZnJhbWUtPnNjcmlw
dCgpLT5tYWluV29ybGRTY3JpcHRTdGF0ZSgpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9T
Y3JpcHRTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRT
dGF0ZS5jcHAJKHJldmlzaW9uIDUyNjY2KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRT
dGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDExICs3Myw0IEBAIFNjcmlwdFN0YXRlKiBz
Y3JpcHRTdGF0ZUZyb21QYWdlKERPTVdyYXAKICAgICByZXR1cm4gcGFnZS0+bWFpbkZyYW1lKCkt
PnNjcmlwdCgpLT5tYWluV29ybGRTY3JpcHRTdGF0ZSgpOwogfQogCi0vLyBGSVhNRTogU3R1YiBt
ZXRob2Qgc28gd2UgY29tcGlsZS4gIEN1cnJlbnRseSBjYWxsZWQgZnJvbSBGcmFtZUxvYWRlci5j
cHAuCi1ET01XcmFwcGVyV29ybGQqIG1haW5UaHJlYWROb3JtYWxXb3JsZCgpCi17Ci0gICAgREVG
SU5FX1NUQVRJQ19MT0NBTChET01XcmFwcGVyV29ybGQsIG9uZVdvcmxkLCAoKSk7Ci0gICAgcmV0
dXJuICZvbmVXb3JsZDsKLX0KLQogfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRT
dGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0U3RhdGUuaAko
cmV2aXNpb24gNTI2NjYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFN0YXRlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpZm5kZWYgU2NyaXB0U3RhdGVfaAogI2Rl
ZmluZSBTY3JpcHRTdGF0ZV9oCiAKKyNpbmNsdWRlICJET01XcmFwcGVyV29ybGQuaCIKICNpbmNs
dWRlIDx2OC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CkBAIC03MCwxNCArNzEsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
U2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlRnJvbU5vZGUoRE9NV3JhcHBlcldvcmxkKiwgTm9kZSop
OwogICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZUZyb21QYWdlKERPTVdyYXBwZXJXb3JsZCos
IFBhZ2UqKTsKIAotICAgIERPTVdyYXBwZXJXb3JsZCogbWFpblRocmVhZE5vcm1hbFdvcmxkKCk7
CiAgICAgaW5saW5lIERPTVdyYXBwZXJXb3JsZCogZGVidWdnZXJXb3JsZCgpIHsgcmV0dXJuIG1h
aW5UaHJlYWROb3JtYWxXb3JsZCgpOyB9CiAgICAgaW5saW5lIERPTVdyYXBwZXJXb3JsZCogcGx1
Z2luV29ybGQoKSB7IHJldHVybiBtYWluVGhyZWFkTm9ybWFsV29ybGQoKTsgfQogCi0gICAgLy8g
RHVtbXkgY2xhc3MgdG8gYXZvaWQgYSBidW5jaCBvZiBpZmRlZidzIGluIFdlYkNvcmUuCi0gICAg
Y2xhc3MgRE9NV3JhcHBlcldvcmxkIDogcHVibGljIFJlZkNvdW50ZWQ8RE9NV3JhcHBlcldvcmxk
PiB7Ci0gICAgfTsKLQogfQogCiAjZW5kaWYgLy8gU2NyaXB0U3RhdGVfaApJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwCShyZXZpc2lvbiA1MjY2NikKKysrIFdl
YkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUxLDcgKzUxLDYgQEAKICNpbmNsdWRlICJWOERPTVdpbmRvdy5oIgogI2luY2x1ZGUgIlY4SGlk
ZGVuUHJvcGVydHlOYW1lLmgiCiAjaW5jbHVkZSAiVjhJbmRleC5oIgotI2luY2x1ZGUgIlY4SXNv
bGF0ZWRXb3JsZC5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKICNpbmNsdWRlICJXb3JrZXJDb250
ZXh0RXhlY3V0aW9uUHJveHkuaCIKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdy
YXBwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVy
LmNwcAkocmV2aXNpb24gNTI2NjYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAKICNpbmNsdWRlICJWOEhUTUxD
b2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiVjhIVE1MUGx1Z0luRWxlbWVudEN1c3RvbS5oIgogI2lu
Y2x1ZGUgIlY4SW5kZXguaCIKLSNpbmNsdWRlICJWOElzb2xhdGVkV29ybGQuaCIKKyNpbmNsdWRl
ICJWOElzb2xhdGVkQ29udGV4dC5oIgogI2luY2x1ZGUgIlY4Tm9kZUxpc3QuaCIKICNpbmNsdWRl
ICJWOFByb3h5LmgiCiAjaW5jbHVkZSAiV2ViR0xBcnJheS5oIgpAQCAtODI4LDExICs4MjgsMTIg
QEAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IFY4RE9NV3JhcHBlcjo6aW5zdAogICAgIGlmIChkZXNj
cmlwdG9yVHlwZSA9PSBWOENsYXNzSW5kZXg6OkhUTUxDT0xMRUNUSU9OICYmIHN0YXRpY19jYXN0
PEhUTUxDb2xsZWN0aW9uKj4oaW1wbCktPnR5cGUoKSA9PSBEb2NBbGwpCiAgICAgICAgIGRlc2Ny
aXB0b3JUeXBlID0gVjhDbGFzc0luZGV4OjpIVE1MQUxMQ09MTEVDVElPTjsKIAotICAgIGlmIChW
OElzb2xhdGVkV29ybGQ6OmdldEVudGVyZWQoKSkgeworICAgIGlmIChWOElzb2xhdGVkQ29udGV4
dDo6Z2V0RW50ZXJlZCgpKSB7CiAgICAgICAgIC8vIFRoaXMgZWZmZWN0aXZlbHkgZGlzYWJsZXMg
dGhlIHdyYXBwZXIgY2FjaGUgZm9yIGlzb2xhdGVkIHdvcmxkcy4KICAgICAgICAgcHJveHkgPSAw
OwogICAgICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCBhIHdyYXBwZXIgY2FjaGUgZm9yIHRoZSBp
c29sYXRlZCB3b3JsZD8gIFdlIHNob3VsZAotICAgICAgICAvLyBzZWUgaWYgdGhlIHBlcmZvcm1h
bmNlIGdhaW5zIGFyZSB3b3J0aCB3aGlsZS4KKyAgICAgICAgLy8gICAgICAgIHNlZSBpZiB0aGUg
cGVyZm9ybWFuY2UgZ2FpbnMgYXJlIHdvcnRoIHdoaWxlLgorICAgICAgICAvLyBXZSdsbCBnZXQg
b25lIG9uY2Ugd2UgZ2l2ZSB0aGUgaXNvbGF0ZWQgY29udGV4dCBhIHByb3BlciB3aW5kb3cgc2hl
bGwuCiAgICAgfSBlbHNlIGlmICghcHJveHkpCiAgICAgICAgIHByb3h5ID0gVjhQcm94eTo6cmV0
cmlldmUoKTsKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOElzb2xhdGVkQ29udGV4dC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOElzb2xhdGVkQ29udGV4dC5j
cHAJKHJldmlzaW9uIDUyNjY2KQkoZnJvbSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRX
b3JsZC5jcHA6NTI2NjYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRDb250ZXh0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2luY2x1ZGUgIlY4SXNvbGF0ZWRXb3JsZC5oIgorCisjaW5jbHVkZSA8djguaD4KKworI2lu
Y2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRl
ICJIYXNoTWFwLmgiCisjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIlY4
RE9NV2luZG93LmgiCisjaW5jbHVkZSAiVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitpbnQgVjhJc29sYXRlZFdvcmxkOjppc29sYXRlZFdvcmxkQ291bnQg
PSAwOworCit2b2lkIFY4SXNvbGF0ZWRXb3JsZDo6Y29udGV4dFdlYWtSZWZlcmVuY2VDYWxsYmFj
ayh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IG9iamVjdCwgdm9pZCogaXNvbGF0ZWRfd29ybGQp
Cit7CisgICAgLy8gT3VyIGNvbnRleHQgaXMgZ29pbmcgYXdheS4gIFRpbWUgdG8gY2xlYW4gdXAg
dGhlIHdvcmxkLgorICAgIFY4SXNvbGF0ZWRXb3JsZCogd29ybGQgPSBzdGF0aWNfY2FzdDxWOElz
b2xhdGVkV29ybGQqPihpc29sYXRlZF93b3JsZCk7CisgICAgZGVsZXRlIHdvcmxkOworfQorCitW
OElzb2xhdGVkV29ybGQ6OlY4SXNvbGF0ZWRXb3JsZChWOFByb3h5KiBwcm94eSwgaW50IGV4dGVu
c2lvbkdyb3VwKQoreworICAgICsraXNvbGF0ZWRXb3JsZENvdW50OworCisgICAgdjg6OkhhbmRs
ZVNjb3BlIHNjb3BlOworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgY3JlYXRpbmcgYSBuZXcg
VjhET01XaW5kb3dTaGVsbCBoZXJlIGluc3RlYWQgb2YgcmlwaW5nIG91dCB0aGUgY29udGV4dC4K
KyAgICBtX2NvbnRleHQgPSBTaGFyZWRQZXJzaXN0ZW50PHY4OjpDb250ZXh0Pjo6Y3JlYXRlKHBy
b3h5LT53aW5kb3dTaGVsbCgpLT5jcmVhdGVOZXdDb250ZXh0KHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4oKSwgZXh0ZW5zaW9uR3JvdXApKTsKKyAgICBpZiAobV9jb250ZXh0LT5nZXQoKS5Jc0VtcHR5
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFJ1biBjb2RlIGluIHRoZSBuZXcgY29udGV4
dC4KKyAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dF9zY29wZShtX2NvbnRleHQtPmdldCgp
KTsKKworICAgIGdldEdsb2JhbE9iamVjdChtX2NvbnRleHQtPmdldCgpKS0+U2V0UG9pbnRlcklu
SW50ZXJuYWxGaWVsZChWOEN1c3RvbTo6a0RPTVdpbmRvd0VudGVyZWRJc29sYXRlZFdvcmxkSW5k
ZXgsIHRoaXMpOworCisgICAgVjhET01XaW5kb3dTaGVsbDo6aW5zdGFsbEhpZGRlbk9iamVjdFBy
b3RvdHlwZShtX2NvbnRleHQtPmdldCgpKTsKKyAgICAvLyBGSVhNRTogVGhpcyB3aWxsIGdvIGF3
YXkgb25jZSB3ZSBoYXZlIGEgd2luZG93U2hlbGwgZm9yIHRoZSBpc29sYXRlZCB3b3JsZC4KKyAg
ICBwcm94eS0+d2luZG93U2hlbGwoKS0+aW5zdGFsbERPTVdpbmRvdyhtX2NvbnRleHQtPmdldCgp
LCBwcm94eS0+ZnJhbWUoKS0+ZG9tV2luZG93KCkpOworCisgICAgLy8gVXNpbmcgdGhlIGRlZmF1
bHQgc2VjdXJpdHkgdG9rZW4gbWVhbnMgdGhhdCB0aGUgY2FuQWNjZXNzIGlzIGFsd2F5cworICAg
IC8vIGNhbGxlZCwgd2hpY2ggaXMgc2xvdy4KKyAgICAvLyBGSVhNRTogVXNlIHRva2VucyB3aGVy
ZSBwb3NzaWJsZS4gVGhpcyB3aWxsIG1lYW4ga2VlcGluZyB0cmFjayBvZiBhbGwKKyAgICAvLyAg
ICAgICAgY3JlYXRlZCBjb250ZXh0cyBzbyB0aGF0IHRoZXkgY2FuIGFsbCBiZSB1cGRhdGVkIHdo
ZW4gdGhlCisgICAgLy8gICAgICAgIGRvY3VtZW50IGRvbWFpbgorICAgIC8vICAgICAgICBjaGFu
Z2VzLgorICAgIG1fY29udGV4dC0+Z2V0KCktPlVzZURlZmF1bHRTZWN1cml0eVRva2VuKCk7CisK
KyAgICBwcm94eS0+ZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaWRDcmVhdGVJc29sYXRl
ZFNjcmlwdENvbnRleHQoKTsKK30KKwordm9pZCBWOElzb2xhdGVkV29ybGQ6OmRlc3Ryb3koKQor
eworICAgIG1fY29udGV4dC0+Z2V0KCkuTWFrZVdlYWsodGhpcywgJmNvbnRleHRXZWFrUmVmZXJl
bmNlQ2FsbGJhY2spOworfQorCitWOElzb2xhdGVkV29ybGQ6On5WOElzb2xhdGVkV29ybGQoKQor
eworICAgIC0taXNvbGF0ZWRXb3JsZENvdW50OworICAgIG1fY29udGV4dC0+ZGlzcG9zZUhhbmRs
ZSgpOworfQorCitTY3JpcHRTdGF0ZSogVjhJc29sYXRlZFdvcmxkOjpzY3JpcHRTdGF0ZSgpCit7
CisgICAgaWYgKCFtX3NjcmlwdFN0YXRlKSB7CisgICAgICAgIHY4OjpIYW5kbGVTY29wZSBzY29w
ZTsKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCA9IG1fY29udGV4dC5n
ZXQoKS0+Z2V0KCk7CisgICAgICAgIG1fc2NyaXB0U3RhdGUuc2V0KG5ldyBTY3JpcHRTdGF0ZShW
OFByb3h5OjpyZXRyaWV2ZUZyYW1lKGNvbnRleHQpLCBjb250ZXh0KSk7CisgICAgfQorICAgIHJl
dHVybiBtX3NjcmlwdFN0YXRlLmdldCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRDb250ZXh0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRDb250ZXh0LmNwcAkocmV2aXNpb24g
NTI2NjYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRDb250ZXh0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLSNp
bmNsdWRlICJWOElzb2xhdGVkV29ybGQuaCIKKyNpbmNsdWRlICJWOElzb2xhdGVkQ29udGV4dC5o
IgogCiAjaW5jbHVkZSA8djguaD4KIApAQCAtNDMsMTkgKzQzLDE3IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotaW50IFY4SXNvbGF0ZWRXb3JsZDo6aXNvbGF0ZWRXb3JsZENvdW50ID0gMDsK
IAotdm9pZCBWOElzb2xhdGVkV29ybGQ6OmNvbnRleHRXZWFrUmVmZXJlbmNlQ2FsbGJhY2sodjg6
OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiBvYmplY3QsIHZvaWQqIGlzb2xhdGVkX3dvcmxkKQordm9p
ZCBWOElzb2xhdGVkQ29udGV4dDo6Y29udGV4dFdlYWtSZWZlcmVuY2VDYWxsYmFjayh2ODo6UGVy
c2lzdGVudDx2ODo6VmFsdWU+IG9iamVjdCwgdm9pZCogaXNvbGF0ZWRDb250ZXh0KQogewogICAg
IC8vIE91ciBjb250ZXh0IGlzIGdvaW5nIGF3YXkuICBUaW1lIHRvIGNsZWFuIHVwIHRoZSB3b3Js
ZC4KLSAgICBWOElzb2xhdGVkV29ybGQqIHdvcmxkID0gc3RhdGljX2Nhc3Q8VjhJc29sYXRlZFdv
cmxkKj4oaXNvbGF0ZWRfd29ybGQpOwotICAgIGRlbGV0ZSB3b3JsZDsKKyAgICBWOElzb2xhdGVk
Q29udGV4dCogY29udGV4dCA9IHN0YXRpY19jYXN0PFY4SXNvbGF0ZWRDb250ZXh0Kj4oaXNvbGF0
ZWRDb250ZXh0KTsKKyAgICBkZWxldGUgY29udGV4dDsKIH0KIAotVjhJc29sYXRlZFdvcmxkOjpW
OElzb2xhdGVkV29ybGQoVjhQcm94eSogcHJveHksIGludCBleHRlbnNpb25Hcm91cCkKK1Y4SXNv
bGF0ZWRDb250ZXh0OjpWOElzb2xhdGVkQ29udGV4dChWOFByb3h5KiBwcm94eSwgaW50IGV4dGVu
c2lvbkdyb3VwKQorICAgIDogbV93b3JsZChJc29sYXRlZFdvcmxkOjpjcmVhdGUoKSkKIHsKLSAg
ICArK2lzb2xhdGVkV29ybGRDb3VudDsKLQogICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKICAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGNyZWF0aW5nIGEgbmV3IFY4RE9NV2luZG93U2hlbGwg
aGVyZSBpbnN0ZWFkIG9mIHJpcGluZyBvdXQgdGhlIGNvbnRleHQuCiAgICAgbV9jb250ZXh0ID0g
U2hhcmVkUGVyc2lzdGVudDx2ODo6Q29udGV4dD46OmNyZWF0ZShwcm94eS0+d2luZG93U2hlbGwo
KS0+Y3JlYXRlTmV3Q29udGV4dCh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIGV4dGVuc2lvbkdy
b3VwKSk7CkBAIC04MiwxOCArODAsMTcgQEAgVjhJc29sYXRlZFdvcmxkOjpWOElzb2xhdGVkV29y
bGQoVjhQcm94eQogICAgIHByb3h5LT5mcmFtZSgpLT5sb2FkZXIoKS0+Y2xpZW50KCktPmRpZENy
ZWF0ZUlzb2xhdGVkU2NyaXB0Q29udGV4dCgpOwogfQogCi12b2lkIFY4SXNvbGF0ZWRXb3JsZDo6
ZGVzdHJveSgpCit2b2lkIFY4SXNvbGF0ZWRDb250ZXh0OjpkZXN0cm95KCkKIHsKICAgICBtX2Nv
bnRleHQtPmdldCgpLk1ha2VXZWFrKHRoaXMsICZjb250ZXh0V2Vha1JlZmVyZW5jZUNhbGxiYWNr
KTsKIH0KIAotVjhJc29sYXRlZFdvcmxkOjp+VjhJc29sYXRlZFdvcmxkKCkKK1Y4SXNvbGF0ZWRD
b250ZXh0Ojp+VjhJc29sYXRlZENvbnRleHQoKQogewotICAgIC0taXNvbGF0ZWRXb3JsZENvdW50
OwogICAgIG1fY29udGV4dC0+ZGlzcG9zZUhhbmRsZSgpOwogfQogCi1TY3JpcHRTdGF0ZSogVjhJ
c29sYXRlZFdvcmxkOjpzY3JpcHRTdGF0ZSgpCitTY3JpcHRTdGF0ZSogVjhJc29sYXRlZENvbnRl
eHQ6OnNjcmlwdFN0YXRlKCkKIHsKICAgICBpZiAoIW1fc2NyaXB0U3RhdGUpIHsKICAgICAgICAg
djg6OkhhbmRsZVNjb3BlIHNjb3BlOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOElzb2xh
dGVkQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRl
ZENvbnRleHQuaAkocmV2aXNpb24gNTI2NjYpCShmcm9tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJ
c29sYXRlZFdvcmxkLmg6NTI2NjYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRD
b250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFY4SXNvbGF0
ZWRXb3JsZF9oCisjZGVmaW5lIFY4SXNvbGF0ZWRXb3JsZF9oCisKKyNpbmNsdWRlIDx2OC5oPgor
CisjaW5jbHVkZSAiVjhET01NYXAuaCIKKyNpbmNsdWRlICJWOEluZGV4LmgiCisjaW5jbHVkZSAi
VjhQcm94eS5oIgorI2luY2x1ZGUgIlY4VXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiU2NyaXB0U291
cmNlQ29kZS5oIiAgLy8gZm9yIFdlYkNvcmU6OlNjcmlwdFNvdXJjZUNvZGUKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCisgICAgY2xhc3MgVjhQcm94eTsKKworICAgIC8vIFY4SXNvbGF0ZWRXb3Js
ZAorICAgIC8vCisgICAgLy8gVjhJc29sYXRlZFdvcmxkIHJlcHJlc2VudHMgYSBpc29sYXRlZCBl
eGVjdXRpb24gZW52aXJvbm1lbnQgZm9yCisgICAgLy8gSmF2YVNjcmlwdC4gIEVhY2ggaXNvbGF0
ZWQgd29ybGQgZXhlY3V0ZXMgaW4gcGFyYWxsZWwgd2l0aCB0aGUgbWFpbgorICAgIC8vIEphdmFT
Y3JpcHQgd29ybGQuICBBbiBpc29sYXRlZCB3b3JsZCBoYXMgYWNjZXNzIHRvIHRoZSBzYW1lIERP
TSBkYXRhCisgICAgLy8gc3RydWN0dXJlcyBhcyB0aGUgbWFpbiB3b3JsZCBidXQgbm9uZSBvZiB0
aGUgSmF2YVNjcmlwdCBwb2ludGVycy4KKyAgICAvLworICAgIC8vIEl0IGlzIGFuIGVycm9yIHRv
IGV2ZXIgc2hhcmUgYSBKYXZhU2NyaXB0IHBvaW50ZXIgYmV0d2VlbiB0d28gaXNvbGF0ZWQKKyAg
ICAvLyB3b3JsZHMgb3IgYmV0d2VlbiBhbiBpc29sYXRlZCB3b3JsZCBhbmQgdGhlIG1haW4gd29y
bGQuICBCZWNhdXNlCisgICAgLy8gaXNvbGF0ZWQgd29ybGRzIGhhdmUgYWNjZXNzIHRvIHRoZSBE
T00sIHRoZXkgbmVlZCB0aGVpciBvd24gRE9NIHdyYXBwZXJzCisgICAgLy8gdG8gYXZvaWQgaGF2
aW5nIHBvaW50ZXJzIHRvIHRoZSBtYWluIHdvcmxkJ3MgRE9NIHdyYXBwZXJzICh3aGljaCBhcmUK
KyAgICAvLyBKYXZhU2NyaXB0IG9iamVjdHMpLgorICAgIC8vCisgICAgY2xhc3MgVjhJc29sYXRl
ZFdvcmxkIHsKKyAgICBwdWJsaWM6CisgICAgICAgIC8vIENyZWF0ZXMgYW4gaXNvbGF0ZWQgd29y
bGQuIFRvIGRlc3Ryb3kgaXQsIGNhbGwgZGVzdHJveSgpLgorICAgICAgICAvLyBUaGlzIHdpbGwg
ZGVsZXRlIHRoZSBpc29sYXRlZCB3b3JsZCB3aGVuIHRoZSBjb250ZXh0IGl0IG93bnMgaXMgR0Mn
ZC4KKyAgICAgICAgVjhJc29sYXRlZFdvcmxkKFY4UHJveHkqIHByb3h5LCBpbnQgZXh0ZW5zaW9u
R3JvdXApOworICAgICAgICB+VjhJc29sYXRlZFdvcmxkKCk7CisKKyAgICAgICAgLy8gQ2FsbCB0
aGlzIHRvIGRlc3Ryb3kgdGhlIGlzb2xhdGVkIHdvcmxkLiBJdCB3aWxsIGJlIGRlbGV0ZWQgc29t
ZXRpbWUKKyAgICAgICAgLy8gYWZ0ZXIgdGhpcyBjYWxsLCBvbmNlIGFsbCBzY3JpcHQgcmVmZXJl
bmNlcyB0byB0aGUgd29ybGQncyBjb250ZXh0CisgICAgICAgIC8vIGhhdmUgYmVlbiBkcm9wcGVk
LgorICAgICAgICB2b2lkIGRlc3Ryb3koKTsKKworICAgICAgICAvLyBSZXR1cm5zIHRoZSBpc29s
YXRlZCB3b3JsZCBhc3NvY2lhdGVkIHdpdGgKKyAgICAgICAgLy8gdjg6OkNvbnRleHQ6OkdldEVu
dGVyZWQoKS4gIEJlY2F1c2Ugd29ybGRzIGFyZSBpc29sYXRlZCwgdGhlIGVudGlyZQorICAgICAg
ICAvLyBKYXZhU2NyaXB0IGNhbGwgc3RhY2sgc2hvdWxkIGJlIGZyb20gdGhlIHNhbWUgaXNvbGF0
ZWQgd29ybGQuCisgICAgICAgIC8vIFJldHVybnMgTlVMTCBpZiB0aGUgZW50ZXJlZCBjb250ZXh0
IGlzIGZyb20gdGhlIG1haW4gd29ybGQuCisgICAgICAgIC8vCisgICAgICAgIC8vIEZJWE1FOiBD
b25zaWRlciBlZGdlIGNhc2VzIHdpdGggRE9NIG11dGF0aW9uIGV2ZW50cyB0aGF0IG1pZ2h0Cisg
ICAgICAgIC8vIHZpb2xhdGUgdGhpcyBpbnZhcmlhbnQuCisgICAgICAgIC8vCisgICAgICAgIHN0
YXRpYyBWOElzb2xhdGVkV29ybGQqIGdldEVudGVyZWQoKQorICAgICAgICB7CisgICAgICAgICAg
ICAvLyBUaGlzIGlzIGEgdGVtcG9yYXJ5IHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4gICBFc3Nl
bnRpYWxseSwKKyAgICAgICAgICAgIC8vIEdldEhpZGRlblZhbHVlIGlzIHRvbyBzbG93IGZvciB0
aGlzIGNvZGUgcGF0aC4gIFdlIG5lZWQgdG8gZ2V0IHRoZQorICAgICAgICAgICAgLy8gVjggdGVh
bSB0byBhZGQgYSByZWFsIHByb3BlcnR5IHRvIHY4OjpDb250ZXh0IGZvciBpc29sYXRlZCB3b3Js
ZHMuCisgICAgICAgICAgICAvLyBVbnRpbCB0aGVuLCB3ZSBvcHRpbWl6ZSB0aGUgY29tbW9uIGNh
c2Ugb2Ygbm90IGhhdmluZyBhbnkgaXNvbGF0ZWQKKyAgICAgICAgICAgIC8vIHdvcmxkcyBhdCBh
bGwuCisgICAgICAgICAgICBpZiAoIWlzb2xhdGVkV29ybGRDb3VudCkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgICAgIGlmICghdjg6OkNvbnRleHQ6OkluQ29udGV4dCgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8VjhJc29sYXRlZFdvcmxkKj4oZ2V0R2xvYmFsT2JqZWN0KHY4OjpDb250ZXh0OjpHZXRF
bnRlcmVkKCkpLT5HZXRQb2ludGVyRnJvbUludGVybmFsRmllbGQoVjhDdXN0b206OmtET01XaW5k
b3dFbnRlcmVkSXNvbGF0ZWRXb3JsZEluZGV4KSk7CisgICAgICAgIH0KKworICAgICAgICB2ODo6
SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0LT5nZXQoKTsg
fQorICAgICAgICBQYXNzUmVmUHRyPFNoYXJlZFBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+ID4gc2hh
cmVkQ29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dDsgfQorCisgICAgICAgIERPTURhdGFTdG9y
ZSogZ2V0RE9NRGF0YVN0b3JlKCkgY29uc3QgeyByZXR1cm4gbV9kb21EYXRhU3RvcmUuZ2V0U3Rv
cmUoKTsgfQorCisgICAgICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSgpOworCisgICAgcHJp
dmF0ZToKKyAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2V0R2xvYmFsT2Jq
ZWN0KHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGNvbnRleHQtPkdsb2JhbCgp
LT5HZXRQcm90b3R5cGUoKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBDYWxsZWQgYnkgdGhl
IGdhcmJhZ2UgY29sbGVjdG9yIHdoZW4gb3VyIEphdmFTY3JpcHQgY29udGV4dCBpcyBhYm91dAor
ICAgICAgICAvLyB0byBiZSBkZXN0cm95ZWQuCisgICAgICAgIHN0YXRpYyB2b2lkIGNvbnRleHRX
ZWFrUmVmZXJlbmNlQ2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiBvYmplY3QsIHZv
aWQqIGlzb2xhdGVkX3dvcmxkKTsKKworICAgICAgICAvLyBUaGUgdjg6OkNvbnRleHQgZm9yIHRo
ZSBpc29sYXRlZCB3b3JsZC4gIFRoaXMgb2JqZWN0IGlzIGtlZXAgb24gdGhlCisgICAgICAgIC8v
IGhlYXAgYXMgbG9uZyBhcyB8bV9jb250ZXh0fCBoYXMgbm90IGJlZW4gZ2FyYmFnZSBjb2xsZWN0
ZWQuCisgICAgICAgIFJlZlB0cjxTaGFyZWRQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiA+IG1fY29u
dGV4dDsKKworICAgICAgICAvLyBUaGUgYmFja2luZyBzdG9yZSBmb3IgdGhlIGlzb2xhdGVkIHdv
cmxkJ3MgRE9NIHdyYXBwZXJzLiAgVGhpcyBjbGFzcworICAgICAgICAvLyBkb2Vzbid0IGhhdmUg
dmlzaWJpbGl0eSBpbnRvIHRoZSB3cmFwcGVycy4gIFRoaXMgaGFuZGxlIHNpbXBseSBoZWxwcwor
ICAgICAgICAvLyBtYW5hZ2UgdGhlaXIgbGlmZXRpbWUuCisgICAgICAgIERPTURhdGFTdG9yZUhh
bmRsZSBtX2RvbURhdGFTdG9yZTsKKworICAgICAgICAvLyBGSVhNRTogZ2V0IHJpZCBvZiByZWR1
bmRhbnQgbV9jb250ZXh0IGZpZWxkLiBUaGUgY29udGV4dCBjYW4gYmUgcmV0cmlldmVkIGZyb20g
dGhlIFNjcmlwdFN0YXRlLgorICAgICAgICBPd25QdHI8U2NyaXB0U3RhdGU+IG1fc2NyaXB0U3Rh
dGU7CisKKyAgICAgICAgc3RhdGljIGludCBpc29sYXRlZFdvcmxkQ291bnQ7CisgICAgfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVjhJc29sYXRlZFdvcmxkX2gKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRDb250ZXh0LmgJKHJldmlzaW9uIDUyNjY2
KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOElzb2xhdGVkQ29udGV4dC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCwxMDAgKzI4LDk0IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYg
VjhJc29sYXRlZFdvcmxkX2gKLSNkZWZpbmUgVjhJc29sYXRlZFdvcmxkX2gKKyNpZm5kZWYgVjhJ
c29sYXRlZENvbnRleHRfaAorI2RlZmluZSBWOElzb2xhdGVkQ29udGV4dF9oCiAKICNpbmNsdWRl
IDx2OC5oPgogCi0jaW5jbHVkZSAiVjhET01NYXAuaCIKICNpbmNsdWRlICJWOEluZGV4LmgiCiAj
aW5jbHVkZSAiVjhQcm94eS5oIgogI2luY2x1ZGUgIlY4VXRpbGl0aWVzLmgiCisjaW5jbHVkZSAi
SXNvbGF0ZWRXb3JsZC5oIgogI2luY2x1ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIgIC8vIGZvciBX
ZWJDb3JlOjpTY3JpcHRTb3VyY2VDb2RlCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNs
YXNzIFY4UHJveHk7CitjbGFzcyBWOFByb3h5OwogCi0gICAgLy8gVjhJc29sYXRlZFdvcmxkCisv
LyBWOElzb2xhdGVkQ29udGV4dAorLy8KKy8vIFY4SXNvbGF0ZWRDb250ZXh0IHJlcHJlc2VudHMg
YSBpc29sYXRlZCBleGVjdXRpb24gZW52aXJvbm1lbnQgZm9yCisvLyBKYXZhU2NyaXB0LiAgRWFj
aCBpc29sYXRlZCB3b3JsZCBleGVjdXRlcyBpbiBwYXJhbGxlbCB3aXRoIHRoZSBtYWluCisvLyBK
YXZhU2NyaXB0IHdvcmxkLiAgQW4gaXNvbGF0ZWQgd29ybGQgaGFzIGFjY2VzcyB0byB0aGUgc2Ft
ZSBET00gZGF0YQorLy8gc3RydWN0dXJlcyBhcyB0aGUgbWFpbiB3b3JsZCBidXQgbm9uZSBvZiB0
aGUgSmF2YVNjcmlwdCBwb2ludGVycy4KKy8vCisvLyBJdCBpcyBhbiBlcnJvciB0byBldmVyIHNo
YXJlIGEgSmF2YVNjcmlwdCBwb2ludGVyIGJldHdlZW4gdHdvIGlzb2xhdGVkCisvLyB3b3JsZHMg
b3IgYmV0d2VlbiBhbiBpc29sYXRlZCB3b3JsZCBhbmQgdGhlIG1haW4gd29ybGQuICBCZWNhdXNl
CisvLyBpc29sYXRlZCB3b3JsZHMgaGF2ZSBhY2Nlc3MgdG8gdGhlIERPTSwgdGhleSBuZWVkIHRo
ZWlyIG93biBET00gd3JhcHBlcnMKKy8vIHRvIGF2b2lkIGhhdmluZyBwb2ludGVycyB0byB0aGUg
bWFpbiB3b3JsZCdzIERPTSB3cmFwcGVycyAod2hpY2ggYXJlCisvLyBKYXZhU2NyaXB0IG9iamVj
dHMpLgorY2xhc3MgVjhJc29sYXRlZENvbnRleHQgeworcHVibGljOgorICAgIC8vIENyZWF0ZXMg
YW4gaXNvbGF0ZWQgd29ybGQuIFRvIGRlc3Ryb3kgaXQsIGNhbGwgZGVzdHJveSgpLgorICAgIC8v
IFRoaXMgd2lsbCBkZWxldGUgdGhlIGlzb2xhdGVkIHdvcmxkIHdoZW4gdGhlIGNvbnRleHQgaXQg
b3ducyBpcyBHQydkLgorICAgIFY4SXNvbGF0ZWRDb250ZXh0KFY4UHJveHkqIHByb3h5LCBpbnQg
ZXh0ZW5zaW9uR3JvdXApOworICAgIH5WOElzb2xhdGVkQ29udGV4dCgpOworCisgICAgLy8gQ2Fs
bCB0aGlzIHRvIGRlc3Ryb3kgdGhlIGlzb2xhdGVkIHdvcmxkLiBJdCB3aWxsIGJlIGRlbGV0ZWQg
c29tZXRpbWUKKyAgICAvLyBhZnRlciB0aGlzIGNhbGwsIG9uY2UgYWxsIHNjcmlwdCByZWZlcmVu
Y2VzIHRvIHRoZSB3b3JsZCdzIGNvbnRleHQKKyAgICAvLyBoYXZlIGJlZW4gZHJvcHBlZC4KKyAg
ICB2b2lkIGRlc3Ryb3koKTsKKworICAgIC8vIFJldHVybnMgdGhlIGlzb2xhdGVkIHdvcmxkIGFz
c29jaWF0ZWQgd2l0aAorICAgIC8vIHY4OjpDb250ZXh0OjpHZXRFbnRlcmVkKCkuICBCZWNhdXNl
IHdvcmxkcyBhcmUgaXNvbGF0ZWQsIHRoZSBlbnRpcmUKKyAgICAvLyBKYXZhU2NyaXB0IGNhbGwg
c3RhY2sgc2hvdWxkIGJlIGZyb20gdGhlIHNhbWUgaXNvbGF0ZWQgd29ybGQuCisgICAgLy8gUmV0
dXJucyBOVUxMIGlmIHRoZSBlbnRlcmVkIGNvbnRleHQgaXMgZnJvbSB0aGUgbWFpbiB3b3JsZC4K
ICAgICAvLwotICAgIC8vIFY4SXNvbGF0ZWRXb3JsZCByZXByZXNlbnRzIGEgaXNvbGF0ZWQgZXhl
Y3V0aW9uIGVudmlyb25tZW50IGZvcgotICAgIC8vIEphdmFTY3JpcHQuICBFYWNoIGlzb2xhdGVk
IHdvcmxkIGV4ZWN1dGVzIGluIHBhcmFsbGVsIHdpdGggdGhlIG1haW4KLSAgICAvLyBKYXZhU2Ny
aXB0IHdvcmxkLiAgQW4gaXNvbGF0ZWQgd29ybGQgaGFzIGFjY2VzcyB0byB0aGUgc2FtZSBET00g
ZGF0YQotICAgIC8vIHN0cnVjdHVyZXMgYXMgdGhlIG1haW4gd29ybGQgYnV0IG5vbmUgb2YgdGhl
IEphdmFTY3JpcHQgcG9pbnRlcnMuCisgICAgLy8gRklYTUU6IENvbnNpZGVyIGVkZ2UgY2FzZXMg
d2l0aCBET00gbXV0YXRpb24gZXZlbnRzIHRoYXQgbWlnaHQKKyAgICAvLyB2aW9sYXRlIHRoaXMg
aW52YXJpYW50LgogICAgIC8vCi0gICAgLy8gSXQgaXMgYW4gZXJyb3IgdG8gZXZlciBzaGFyZSBh
IEphdmFTY3JpcHQgcG9pbnRlciBiZXR3ZWVuIHR3byBpc29sYXRlZAotICAgIC8vIHdvcmxkcyBv
ciBiZXR3ZWVuIGFuIGlzb2xhdGVkIHdvcmxkIGFuZCB0aGUgbWFpbiB3b3JsZC4gIEJlY2F1c2UK
LSAgICAvLyBpc29sYXRlZCB3b3JsZHMgaGF2ZSBhY2Nlc3MgdG8gdGhlIERPTSwgdGhleSBuZWVk
IHRoZWlyIG93biBET00gd3JhcHBlcnMKLSAgICAvLyB0byBhdm9pZCBoYXZpbmcgcG9pbnRlcnMg
dG8gdGhlIG1haW4gd29ybGQncyBET00gd3JhcHBlcnMgKHdoaWNoIGFyZQotICAgIC8vIEphdmFT
Y3JpcHQgb2JqZWN0cykuCi0gICAgLy8KLSAgICBjbGFzcyBWOElzb2xhdGVkV29ybGQgewotICAg
IHB1YmxpYzoKLSAgICAgICAgLy8gQ3JlYXRlcyBhbiBpc29sYXRlZCB3b3JsZC4gVG8gZGVzdHJv
eSBpdCwgY2FsbCBkZXN0cm95KCkuCi0gICAgICAgIC8vIFRoaXMgd2lsbCBkZWxldGUgdGhlIGlz
b2xhdGVkIHdvcmxkIHdoZW4gdGhlIGNvbnRleHQgaXQgb3ducyBpcyBHQydkLgotICAgICAgICBW
OElzb2xhdGVkV29ybGQoVjhQcm94eSogcHJveHksIGludCBleHRlbnNpb25Hcm91cCk7Ci0gICAg
ICAgIH5WOElzb2xhdGVkV29ybGQoKTsKLQotICAgICAgICAvLyBDYWxsIHRoaXMgdG8gZGVzdHJv
eSB0aGUgaXNvbGF0ZWQgd29ybGQuIEl0IHdpbGwgYmUgZGVsZXRlZCBzb21ldGltZQotICAgICAg
ICAvLyBhZnRlciB0aGlzIGNhbGwsIG9uY2UgYWxsIHNjcmlwdCByZWZlcmVuY2VzIHRvIHRoZSB3
b3JsZCdzIGNvbnRleHQKLSAgICAgICAgLy8gaGF2ZSBiZWVuIGRyb3BwZWQuCi0gICAgICAgIHZv
aWQgZGVzdHJveSgpOwotCi0gICAgICAgIC8vIFJldHVybnMgdGhlIGlzb2xhdGVkIHdvcmxkIGFz
c29jaWF0ZWQgd2l0aAotICAgICAgICAvLyB2ODo6Q29udGV4dDo6R2V0RW50ZXJlZCgpLiAgQmVj
YXVzZSB3b3JsZHMgYXJlIGlzb2xhdGVkLCB0aGUgZW50aXJlCi0gICAgICAgIC8vIEphdmFTY3Jp
cHQgY2FsbCBzdGFjayBzaG91bGQgYmUgZnJvbSB0aGUgc2FtZSBpc29sYXRlZCB3b3JsZC4KLSAg
ICAgICAgLy8gUmV0dXJucyBOVUxMIGlmIHRoZSBlbnRlcmVkIGNvbnRleHQgaXMgZnJvbSB0aGUg
bWFpbiB3b3JsZC4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gRklYTUU6IENvbnNpZGVyIGVkZ2Ug
Y2FzZXMgd2l0aCBET00gbXV0YXRpb24gZXZlbnRzIHRoYXQgbWlnaHQKLSAgICAgICAgLy8gdmlv
bGF0ZSB0aGlzIGludmFyaWFudC4KLSAgICAgICAgLy8KLSAgICAgICAgc3RhdGljIFY4SXNvbGF0
ZWRXb3JsZCogZ2V0RW50ZXJlZCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRoaXMgaXMg
YSB0ZW1wb3JhcnkgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLiAgIEVzc2VudGlhbGx5LAotICAg
ICAgICAgICAgLy8gR2V0SGlkZGVuVmFsdWUgaXMgdG9vIHNsb3cgZm9yIHRoaXMgY29kZSBwYXRo
LiAgV2UgbmVlZCB0byBnZXQgdGhlCi0gICAgICAgICAgICAvLyBWOCB0ZWFtIHRvIGFkZCBhIHJl
YWwgcHJvcGVydHkgdG8gdjg6OkNvbnRleHQgZm9yIGlzb2xhdGVkIHdvcmxkcy4KLSAgICAgICAg
ICAgIC8vIFVudGlsIHRoZW4sIHdlIG9wdGltaXplIHRoZSBjb21tb24gY2FzZSBvZiBub3QgaGF2
aW5nIGFueSBpc29sYXRlZAotICAgICAgICAgICAgLy8gd29ybGRzIGF0IGFsbC4KLSAgICAgICAg
ICAgIGlmICghaXNvbGF0ZWRXb3JsZENvdW50KQotICAgICAgICAgICAgICAgIHJldHVybiAwOwot
ICAgICAgICAgICAgaWYgKCF2ODo6Q29udGV4dDo6SW5Db250ZXh0KCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxWOElzb2xh
dGVkV29ybGQqPihnZXRHbG9iYWxPYmplY3Qodjg6OkNvbnRleHQ6OkdldEVudGVyZWQoKSktPkdl
dFBvaW50ZXJGcm9tSW50ZXJuYWxGaWVsZChWOEN1c3RvbTo6a0RPTVdpbmRvd0VudGVyZWRJc29s
YXRlZFdvcmxkSW5kZXgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHY4OjpIYW5kbGU8djg6OkNv
bnRleHQ+IGNvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQtPmdldCgpOyB9Ci0gICAgICAgIFBh
c3NSZWZQdHI8U2hhcmVkUGVyc2lzdGVudDx2ODo6Q29udGV4dD4gPiBzaGFyZWRDb250ZXh0KCkg
eyByZXR1cm4gbV9jb250ZXh0OyB9Ci0KLSAgICAgICAgRE9NRGF0YVN0b3JlKiBnZXRET01EYXRh
U3RvcmUoKSBjb25zdCB7IHJldHVybiBtX2RvbURhdGFTdG9yZS5nZXRTdG9yZSgpOyB9Ci0KLSAg
ICAgICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlKCk7Ci0KLSAgICBwcml2YXRlOgotICAgICAg
ICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBnZXRHbG9iYWxPYmplY3Qodjg6OkhhbmRs
ZTx2ODo6Q29udGV4dD4gY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoY29udGV4dC0+R2xvYmFsKCktPkdldFByb3RvdHlw
ZSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIENhbGxlZCBieSB0aGUgZ2FyYmFnZSBjb2xs
ZWN0b3Igd2hlbiBvdXIgSmF2YVNjcmlwdCBjb250ZXh0IGlzIGFib3V0Ci0gICAgICAgIC8vIHRv
IGJlIGRlc3Ryb3llZC4KLSAgICAgICAgc3RhdGljIHZvaWQgY29udGV4dFdlYWtSZWZlcmVuY2VD
YWxsYmFjayh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IG9iamVjdCwgdm9pZCogaXNvbGF0ZWRf
d29ybGQpOwotCi0gICAgICAgIC8vIFRoZSB2ODo6Q29udGV4dCBmb3IgdGhlIGlzb2xhdGVkIHdv
cmxkLiAgVGhpcyBvYmplY3QgaXMga2VlcCBvbiB0aGUKLSAgICAgICAgLy8gaGVhcCBhcyBsb25n
IGFzIHxtX2NvbnRleHR8IGhhcyBub3QgYmVlbiBnYXJiYWdlIGNvbGxlY3RlZC4KLSAgICAgICAg
UmVmUHRyPFNoYXJlZFBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+ID4gbV9jb250ZXh0OwotCi0gICAg
ICAgIC8vIFRoZSBiYWNraW5nIHN0b3JlIGZvciB0aGUgaXNvbGF0ZWQgd29ybGQncyBET00gd3Jh
cHBlcnMuICBUaGlzIGNsYXNzCi0gICAgICAgIC8vIGRvZXNuJ3QgaGF2ZSB2aXNpYmlsaXR5IGlu
dG8gdGhlIHdyYXBwZXJzLiAgVGhpcyBoYW5kbGUgc2ltcGx5IGhlbHBzCi0gICAgICAgIC8vIG1h
bmFnZSB0aGVpciBsaWZldGltZS4KLSAgICAgICAgRE9NRGF0YVN0b3JlSGFuZGxlIG1fZG9tRGF0
YVN0b3JlOwotCi0gICAgICAgIC8vIEZJWE1FOiBnZXQgcmlkIG9mIHJlZHVuZGFudCBtX2NvbnRl
eHQgZmllbGQuIFRoZSBjb250ZXh0IGNhbiBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgU2NyaXB0U3Rh
dGUuCi0gICAgICAgIE93blB0cjxTY3JpcHRTdGF0ZT4gbV9zY3JpcHRTdGF0ZTsKLQotICAgICAg
ICBzdGF0aWMgaW50IGlzb2xhdGVkV29ybGRDb3VudDsKLSAgICB9OworICAgIHN0YXRpYyBWOElz
b2xhdGVkQ29udGV4dCogZ2V0RW50ZXJlZCgpCisgICAgeworICAgICAgICAvLyBUaGlzIGlzIGEg
dGVtcG9yYXJ5IHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4gICBFc3NlbnRpYWxseSwKKyAgICAg
ICAgLy8gR2V0SGlkZGVuVmFsdWUgaXMgdG9vIHNsb3cgZm9yIHRoaXMgY29kZSBwYXRoLiAgV2Ug
bmVlZCB0byBnZXQgdGhlCisgICAgICAgIC8vIFY4IHRlYW0gdG8gYWRkIGEgcmVhbCBwcm9wZXJ0
eSB0byB2ODo6Q29udGV4dCBmb3IgaXNvbGF0ZWQgd29ybGRzLgorICAgICAgICAvLyBVbnRpbCB0
aGVuLCB3ZSBvcHRpbWl6ZSB0aGUgY29tbW9uIGNhc2Ugb2Ygbm90IGhhdmluZyBhbnkgaXNvbGF0
ZWQKKyAgICAgICAgLy8gd29ybGRzIGF0IGFsbC4KKyAgICAgICAgaWYgKCFJc29sYXRlZFdvcmxk
Ojpjb3VudCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmICghdjg6OkNvbnRl
eHQ6OkluQ29udGV4dCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PFY4SXNvbGF0ZWRDb250ZXh0Kj4oZ2V0R2xvYmFsT2JqZWN0KHY4OjpD
b250ZXh0OjpHZXRFbnRlcmVkKCkpLT5HZXRQb2ludGVyRnJvbUludGVybmFsRmllbGQoVjhDdXN0
b206OmtET01XaW5kb3dFbnRlcmVkSXNvbGF0ZWRXb3JsZEluZGV4KSk7CisgICAgfQorCisgICAg
djg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dC0+Z2V0
KCk7IH0KKyAgICBQYXNzUmVmUHRyPFNoYXJlZFBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+ID4gc2hh
cmVkQ29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dDsgfQorCisgICAgSXNvbGF0ZWRXb3JsZCog
d29ybGQoKSBjb25zdCB7IHJldHVybiBtX3dvcmxkLmdldCgpOyB9CisKKyAgICBTY3JpcHRTdGF0
ZSogc2NyaXB0U3RhdGUoKTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBnZXRHbG9iYWxPYmplY3Qodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCkK
KyAgICB7CisgICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGNvbnRl
eHQtPkdsb2JhbCgpLT5HZXRQcm90b3R5cGUoKSk7CisgICAgfQorCisgICAgLy8gQ2FsbGVkIGJ5
IHRoZSBnYXJiYWdlIGNvbGxlY3RvciB3aGVuIG91ciBKYXZhU2NyaXB0IGNvbnRleHQgaXMgYWJv
dXQKKyAgICAvLyB0byBiZSBkZXN0cm95ZWQuCisgICAgc3RhdGljIHZvaWQgY29udGV4dFdlYWtS
ZWZlcmVuY2VDYWxsYmFjayh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IG9iamVjdCwgdm9pZCog
aXNvbGF0ZWRfd29ybGQpOworCisgICAgLy8gVGhlIHVuZGVybHlpbmcgdjg6OkNvbnRleHQuIFRo
aXMgb2JqZWN0IGlzIGtlZXAgb24gdGhlIGhlYXAgYXMKKyAgICAvLyBsb25nIGFzIHxtX2NvbnRl
eHR8IGhhcyBub3QgYmVlbiBnYXJiYWdlIGNvbGxlY3RlZC4KKyAgICBSZWZQdHI8U2hhcmVkUGVy
c2lzdGVudDx2ODo6Q29udGV4dD4gPiBtX2NvbnRleHQ7CisKKyAgICBSZWZQdHI8SXNvbGF0ZWRX
b3JsZD4gbV93b3JsZDsKKworICAgIC8vIEZJWE1FOiBnZXQgcmlkIG9mIHJlZHVuZGFudCBtX2Nv
bnRleHQgZmllbGQuIFRoZSBjb250ZXh0IGNhbiBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgU2NyaXB0
U3RhdGUuCisgICAgT3duUHRyPFNjcmlwdFN0YXRlPiBtX3NjcmlwdFN0YXRlOworfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gVjhJc29sYXRlZFdvcmxkX2gKKyNlbmRp
ZiAvLyBWOElzb2xhdGVkQ29udGV4dF9oCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNv
bGF0ZWRXb3JsZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOElzb2xh
dGVkV29ybGQuY3BwCShyZXZpc2lvbiA1MjY2NikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJ
c29sYXRlZFdvcmxkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMDYgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0
cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0g
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLQotI2luY2x1ZGUgIlY4SXNvbGF0ZWRXb3JsZC5oIgotCi0jaW5jbHVkZSA8
djguaD4KLQotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQu
aCIKLSNpbmNsdWRlICJIYXNoTWFwLmgiCi0jaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgot
I2luY2x1ZGUgIlY4RE9NV2luZG93LmgiCi0jaW5jbHVkZSAiVjhIaWRkZW5Qcm9wZXJ0eU5hbWUu
aCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1pbnQgVjhJc29sYXRlZFdvcmxkOjppc29sYXRl
ZFdvcmxkQ291bnQgPSAwOwotCi12b2lkIFY4SXNvbGF0ZWRXb3JsZDo6Y29udGV4dFdlYWtSZWZl
cmVuY2VDYWxsYmFjayh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IG9iamVjdCwgdm9pZCogaXNv
bGF0ZWRfd29ybGQpCi17Ci0gICAgLy8gT3VyIGNvbnRleHQgaXMgZ29pbmcgYXdheS4gIFRpbWUg
dG8gY2xlYW4gdXAgdGhlIHdvcmxkLgotICAgIFY4SXNvbGF0ZWRXb3JsZCogd29ybGQgPSBzdGF0
aWNfY2FzdDxWOElzb2xhdGVkV29ybGQqPihpc29sYXRlZF93b3JsZCk7Ci0gICAgZGVsZXRlIHdv
cmxkOwotfQotCi1WOElzb2xhdGVkV29ybGQ6OlY4SXNvbGF0ZWRXb3JsZChWOFByb3h5KiBwcm94
eSwgaW50IGV4dGVuc2lvbkdyb3VwKQotewotICAgICsraXNvbGF0ZWRXb3JsZENvdW50OwotCi0g
ICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOwotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgY3Jl
YXRpbmcgYSBuZXcgVjhET01XaW5kb3dTaGVsbCBoZXJlIGluc3RlYWQgb2YgcmlwaW5nIG91dCB0
aGUgY29udGV4dC4KLSAgICBtX2NvbnRleHQgPSBTaGFyZWRQZXJzaXN0ZW50PHY4OjpDb250ZXh0
Pjo6Y3JlYXRlKHByb3h5LT53aW5kb3dTaGVsbCgpLT5jcmVhdGVOZXdDb250ZXh0KHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4oKSwgZXh0ZW5zaW9uR3JvdXApKTsKLSAgICBpZiAobV9jb250ZXh0LT5n
ZXQoKS5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFJ1biBjb2RlIGluIHRo
ZSBuZXcgY29udGV4dC4KLSAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dF9zY29wZShtX2Nv
bnRleHQtPmdldCgpKTsKLQotICAgIGdldEdsb2JhbE9iamVjdChtX2NvbnRleHQtPmdldCgpKS0+
U2V0UG9pbnRlckluSW50ZXJuYWxGaWVsZChWOEN1c3RvbTo6a0RPTVdpbmRvd0VudGVyZWRJc29s
YXRlZFdvcmxkSW5kZXgsIHRoaXMpOwotCi0gICAgVjhET01XaW5kb3dTaGVsbDo6aW5zdGFsbEhp
ZGRlbk9iamVjdFByb3RvdHlwZShtX2NvbnRleHQtPmdldCgpKTsKLSAgICAvLyBGSVhNRTogVGhp
cyB3aWxsIGdvIGF3YXkgb25jZSB3ZSBoYXZlIGEgd2luZG93U2hlbGwgZm9yIHRoZSBpc29sYXRl
ZCB3b3JsZC4KLSAgICBwcm94eS0+d2luZG93U2hlbGwoKS0+aW5zdGFsbERPTVdpbmRvdyhtX2Nv
bnRleHQtPmdldCgpLCBwcm94eS0+ZnJhbWUoKS0+ZG9tV2luZG93KCkpOwotCi0gICAgLy8gVXNp
bmcgdGhlIGRlZmF1bHQgc2VjdXJpdHkgdG9rZW4gbWVhbnMgdGhhdCB0aGUgY2FuQWNjZXNzIGlz
IGFsd2F5cwotICAgIC8vIGNhbGxlZCwgd2hpY2ggaXMgc2xvdy4KLSAgICAvLyBGSVhNRTogVXNl
IHRva2VucyB3aGVyZSBwb3NzaWJsZS4gVGhpcyB3aWxsIG1lYW4ga2VlcGluZyB0cmFjayBvZiBh
bGwKLSAgICAvLyAgICAgICAgY3JlYXRlZCBjb250ZXh0cyBzbyB0aGF0IHRoZXkgY2FuIGFsbCBi
ZSB1cGRhdGVkIHdoZW4gdGhlCi0gICAgLy8gICAgICAgIGRvY3VtZW50IGRvbWFpbgotICAgIC8v
ICAgICAgICBjaGFuZ2VzLgotICAgIG1fY29udGV4dC0+Z2V0KCktPlVzZURlZmF1bHRTZWN1cml0
eVRva2VuKCk7Ci0KLSAgICBwcm94eS0+ZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaWRD
cmVhdGVJc29sYXRlZFNjcmlwdENvbnRleHQoKTsKLX0KLQotdm9pZCBWOElzb2xhdGVkV29ybGQ6
OmRlc3Ryb3koKQotewotICAgIG1fY29udGV4dC0+Z2V0KCkuTWFrZVdlYWsodGhpcywgJmNvbnRl
eHRXZWFrUmVmZXJlbmNlQ2FsbGJhY2spOwotfQotCi1WOElzb2xhdGVkV29ybGQ6On5WOElzb2xh
dGVkV29ybGQoKQotewotICAgIC0taXNvbGF0ZWRXb3JsZENvdW50OwotICAgIG1fY29udGV4dC0+
ZGlzcG9zZUhhbmRsZSgpOwotfQotCi1TY3JpcHRTdGF0ZSogVjhJc29sYXRlZFdvcmxkOjpzY3Jp
cHRTdGF0ZSgpCi17Ci0gICAgaWYgKCFtX3NjcmlwdFN0YXRlKSB7Ci0gICAgICAgIHY4OjpIYW5k
bGVTY29wZSBzY29wZTsKLSAgICAgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCA9
IG1fY29udGV4dC5nZXQoKS0+Z2V0KCk7Ci0gICAgICAgIG1fc2NyaXB0U3RhdGUuc2V0KG5ldyBT
Y3JpcHRTdGF0ZShWOFByb3h5OjpyZXRyaWV2ZUZyYW1lKGNvbnRleHQpLCBjb250ZXh0KSk7Ci0g
ICAgfQotICAgIHJldHVybiBtX3NjcmlwdFN0YXRlLmdldCgpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRXb3JsZC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZFdvcmxkLmgJKHJldmlz
aW9uIDUyNjY2KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOElzb2xhdGVkV29ybGQuaAkod29y
a2luZyBjb3B5KQpAQCAtMSwxMjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgVjhJc29sYXRlZFdvcmxkX2gKLSNk
ZWZpbmUgVjhJc29sYXRlZFdvcmxkX2gKLQotI2luY2x1ZGUgPHY4Lmg+Ci0KLSNpbmNsdWRlICJW
OERPTU1hcC5oIgotI2luY2x1ZGUgIlY4SW5kZXguaCIKLSNpbmNsdWRlICJWOFByb3h5LmgiCi0j
aW5jbHVkZSAiVjhVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJTY3JpcHRTb3VyY2VDb2RlLmgiICAv
LyBmb3IgV2ViQ29yZTo6U2NyaXB0U291cmNlQ29kZQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LSAgICBjbGFzcyBWOFByb3h5OwotCi0gICAgLy8gVjhJc29sYXRlZFdvcmxkCi0gICAgLy8KLSAg
ICAvLyBWOElzb2xhdGVkV29ybGQgcmVwcmVzZW50cyBhIGlzb2xhdGVkIGV4ZWN1dGlvbiBlbnZp
cm9ubWVudCBmb3IKLSAgICAvLyBKYXZhU2NyaXB0LiAgRWFjaCBpc29sYXRlZCB3b3JsZCBleGVj
dXRlcyBpbiBwYXJhbGxlbCB3aXRoIHRoZSBtYWluCi0gICAgLy8gSmF2YVNjcmlwdCB3b3JsZC4g
IEFuIGlzb2xhdGVkIHdvcmxkIGhhcyBhY2Nlc3MgdG8gdGhlIHNhbWUgRE9NIGRhdGEKLSAgICAv
LyBzdHJ1Y3R1cmVzIGFzIHRoZSBtYWluIHdvcmxkIGJ1dCBub25lIG9mIHRoZSBKYXZhU2NyaXB0
IHBvaW50ZXJzLgotICAgIC8vCi0gICAgLy8gSXQgaXMgYW4gZXJyb3IgdG8gZXZlciBzaGFyZSBh
IEphdmFTY3JpcHQgcG9pbnRlciBiZXR3ZWVuIHR3byBpc29sYXRlZAotICAgIC8vIHdvcmxkcyBv
ciBiZXR3ZWVuIGFuIGlzb2xhdGVkIHdvcmxkIGFuZCB0aGUgbWFpbiB3b3JsZC4gIEJlY2F1c2UK
LSAgICAvLyBpc29sYXRlZCB3b3JsZHMgaGF2ZSBhY2Nlc3MgdG8gdGhlIERPTSwgdGhleSBuZWVk
IHRoZWlyIG93biBET00gd3JhcHBlcnMKLSAgICAvLyB0byBhdm9pZCBoYXZpbmcgcG9pbnRlcnMg
dG8gdGhlIG1haW4gd29ybGQncyBET00gd3JhcHBlcnMgKHdoaWNoIGFyZQotICAgIC8vIEphdmFT
Y3JpcHQgb2JqZWN0cykuCi0gICAgLy8KLSAgICBjbGFzcyBWOElzb2xhdGVkV29ybGQgewotICAg
IHB1YmxpYzoKLSAgICAgICAgLy8gQ3JlYXRlcyBhbiBpc29sYXRlZCB3b3JsZC4gVG8gZGVzdHJv
eSBpdCwgY2FsbCBkZXN0cm95KCkuCi0gICAgICAgIC8vIFRoaXMgd2lsbCBkZWxldGUgdGhlIGlz
b2xhdGVkIHdvcmxkIHdoZW4gdGhlIGNvbnRleHQgaXQgb3ducyBpcyBHQydkLgotICAgICAgICBW
OElzb2xhdGVkV29ybGQoVjhQcm94eSogcHJveHksIGludCBleHRlbnNpb25Hcm91cCk7Ci0gICAg
ICAgIH5WOElzb2xhdGVkV29ybGQoKTsKLQotICAgICAgICAvLyBDYWxsIHRoaXMgdG8gZGVzdHJv
eSB0aGUgaXNvbGF0ZWQgd29ybGQuIEl0IHdpbGwgYmUgZGVsZXRlZCBzb21ldGltZQotICAgICAg
ICAvLyBhZnRlciB0aGlzIGNhbGwsIG9uY2UgYWxsIHNjcmlwdCByZWZlcmVuY2VzIHRvIHRoZSB3
b3JsZCdzIGNvbnRleHQKLSAgICAgICAgLy8gaGF2ZSBiZWVuIGRyb3BwZWQuCi0gICAgICAgIHZv
aWQgZGVzdHJveSgpOwotCi0gICAgICAgIC8vIFJldHVybnMgdGhlIGlzb2xhdGVkIHdvcmxkIGFz
c29jaWF0ZWQgd2l0aAotICAgICAgICAvLyB2ODo6Q29udGV4dDo6R2V0RW50ZXJlZCgpLiAgQmVj
YXVzZSB3b3JsZHMgYXJlIGlzb2xhdGVkLCB0aGUgZW50aXJlCi0gICAgICAgIC8vIEphdmFTY3Jp
cHQgY2FsbCBzdGFjayBzaG91bGQgYmUgZnJvbSB0aGUgc2FtZSBpc29sYXRlZCB3b3JsZC4KLSAg
ICAgICAgLy8gUmV0dXJucyBOVUxMIGlmIHRoZSBlbnRlcmVkIGNvbnRleHQgaXMgZnJvbSB0aGUg
bWFpbiB3b3JsZC4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gRklYTUU6IENvbnNpZGVyIGVkZ2Ug
Y2FzZXMgd2l0aCBET00gbXV0YXRpb24gZXZlbnRzIHRoYXQgbWlnaHQKLSAgICAgICAgLy8gdmlv
bGF0ZSB0aGlzIGludmFyaWFudC4KLSAgICAgICAgLy8KLSAgICAgICAgc3RhdGljIFY4SXNvbGF0
ZWRXb3JsZCogZ2V0RW50ZXJlZCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRoaXMgaXMg
YSB0ZW1wb3JhcnkgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLiAgIEVzc2VudGlhbGx5LAotICAg
ICAgICAgICAgLy8gR2V0SGlkZGVuVmFsdWUgaXMgdG9vIHNsb3cgZm9yIHRoaXMgY29kZSBwYXRo
LiAgV2UgbmVlZCB0byBnZXQgdGhlCi0gICAgICAgICAgICAvLyBWOCB0ZWFtIHRvIGFkZCBhIHJl
YWwgcHJvcGVydHkgdG8gdjg6OkNvbnRleHQgZm9yIGlzb2xhdGVkIHdvcmxkcy4KLSAgICAgICAg
ICAgIC8vIFVudGlsIHRoZW4sIHdlIG9wdGltaXplIHRoZSBjb21tb24gY2FzZSBvZiBub3QgaGF2
aW5nIGFueSBpc29sYXRlZAotICAgICAgICAgICAgLy8gd29ybGRzIGF0IGFsbC4KLSAgICAgICAg
ICAgIGlmICghaXNvbGF0ZWRXb3JsZENvdW50KQotICAgICAgICAgICAgICAgIHJldHVybiAwOwot
ICAgICAgICAgICAgaWYgKCF2ODo6Q29udGV4dDo6SW5Db250ZXh0KCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxWOElzb2xh
dGVkV29ybGQqPihnZXRHbG9iYWxPYmplY3Qodjg6OkNvbnRleHQ6OkdldEVudGVyZWQoKSktPkdl
dFBvaW50ZXJGcm9tSW50ZXJuYWxGaWVsZChWOEN1c3RvbTo6a0RPTVdpbmRvd0VudGVyZWRJc29s
YXRlZFdvcmxkSW5kZXgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHY4OjpIYW5kbGU8djg6OkNv
bnRleHQ+IGNvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQtPmdldCgpOyB9Ci0gICAgICAgIFBh
c3NSZWZQdHI8U2hhcmVkUGVyc2lzdGVudDx2ODo6Q29udGV4dD4gPiBzaGFyZWRDb250ZXh0KCkg
eyByZXR1cm4gbV9jb250ZXh0OyB9Ci0KLSAgICAgICAgRE9NRGF0YVN0b3JlKiBnZXRET01EYXRh
U3RvcmUoKSBjb25zdCB7IHJldHVybiBtX2RvbURhdGFTdG9yZS5nZXRTdG9yZSgpOyB9Ci0KLSAg
ICAgICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlKCk7Ci0KLSAgICBwcml2YXRlOgotICAgICAg
ICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBnZXRHbG9iYWxPYmplY3Qodjg6OkhhbmRs
ZTx2ODo6Q29udGV4dD4gY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoY29udGV4dC0+R2xvYmFsKCktPkdldFByb3RvdHlw
ZSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIENhbGxlZCBieSB0aGUgZ2FyYmFnZSBjb2xs
ZWN0b3Igd2hlbiBvdXIgSmF2YVNjcmlwdCBjb250ZXh0IGlzIGFib3V0Ci0gICAgICAgIC8vIHRv
IGJlIGRlc3Ryb3llZC4KLSAgICAgICAgc3RhdGljIHZvaWQgY29udGV4dFdlYWtSZWZlcmVuY2VD
YWxsYmFjayh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IG9iamVjdCwgdm9pZCogaXNvbGF0ZWRf
d29ybGQpOwotCi0gICAgICAgIC8vIFRoZSB2ODo6Q29udGV4dCBmb3IgdGhlIGlzb2xhdGVkIHdv
cmxkLiAgVGhpcyBvYmplY3QgaXMga2VlcCBvbiB0aGUKLSAgICAgICAgLy8gaGVhcCBhcyBsb25n
IGFzIHxtX2NvbnRleHR8IGhhcyBub3QgYmVlbiBnYXJiYWdlIGNvbGxlY3RlZC4KLSAgICAgICAg
UmVmUHRyPFNoYXJlZFBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+ID4gbV9jb250ZXh0OwotCi0gICAg
ICAgIC8vIFRoZSBiYWNraW5nIHN0b3JlIGZvciB0aGUgaXNvbGF0ZWQgd29ybGQncyBET00gd3Jh
cHBlcnMuICBUaGlzIGNsYXNzCi0gICAgICAgIC8vIGRvZXNuJ3QgaGF2ZSB2aXNpYmlsaXR5IGlu
dG8gdGhlIHdyYXBwZXJzLiAgVGhpcyBoYW5kbGUgc2ltcGx5IGhlbHBzCi0gICAgICAgIC8vIG1h
bmFnZSB0aGVpciBsaWZldGltZS4KLSAgICAgICAgRE9NRGF0YVN0b3JlSGFuZGxlIG1fZG9tRGF0
YVN0b3JlOwotCi0gICAgICAgIC8vIEZJWE1FOiBnZXQgcmlkIG9mIHJlZHVuZGFudCBtX2NvbnRl
eHQgZmllbGQuIFRoZSBjb250ZXh0IGNhbiBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgU2NyaXB0U3Rh
dGUuCi0gICAgICAgIE93blB0cjxTY3JpcHRTdGF0ZT4gbV9zY3JpcHRTdGF0ZTsKLQotICAgICAg
ICBzdGF0aWMgaW50IGlzb2xhdGVkV29ybGRDb3VudDsKLSAgICB9OwotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBWOElzb2xhdGVkV29ybGRfaApJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy92OC9WOFByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4UHJveHkuY3BwCShyZXZpc2lvbiA1MjY2NikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhQ
cm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAKICNpbmNsdWRlICJWOERP
TVdpbmRvdy5oIgogI2luY2x1ZGUgIlY4SGlkZGVuUHJvcGVydHlOYW1lLmgiCiAjaW5jbHVkZSAi
VjhJbmRleC5oIgotI2luY2x1ZGUgIlY4SXNvbGF0ZWRXb3JsZC5oIgorI2luY2x1ZGUgIlY4SXNv
bGF0ZWRDb250ZXh0LmgiCiAjaW5jbHVkZSAiV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Lmgi
CiAKICNpbmNsdWRlIDxhbGdvcml0aG0+CkBAIC0yNzAsNDMgKzI3MCw0NCBAQCB2b2lkIFY4UHJv
eHk6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKGluCiAgICAgd2luZG93U2hlbGwoKS0+aW5pdENv
bnRleHRJZk5lZWRlZCgpOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwotICAg
IFY4SXNvbGF0ZWRXb3JsZCogd29ybGQgPSAwOworICAgIFY4SXNvbGF0ZWRDb250ZXh0KiBpc29s
YXRlZENvbnRleHQgPSAwOwogCiAgICAgaWYgKHdvcmxkSUQgPiAwKSB7CiAgICAgICAgIElzb2xh
dGVkV29ybGRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2lzb2xhdGVkV29ybGRzLmZpbmQod29ybGRJ
RCk7CiAgICAgICAgIGlmIChpdGVyICE9IG1faXNvbGF0ZWRXb3JsZHMuZW5kKCkpIHsKLSAgICAg
ICAgICAgIHdvcmxkID0gaXRlci0+c2Vjb25kOworICAgICAgICAgICAgaXNvbGF0ZWRDb250ZXh0
ID0gaXRlci0+c2Vjb25kOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgd29ybGQgPSBu
ZXcgVjhJc29sYXRlZFdvcmxkKHRoaXMsIGV4dGVuc2lvbkdyb3VwKTsKLSAgICAgICAgICAgIGlm
ICh3b3JsZC0+Y29udGV4dCgpLklzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIGRlbGV0ZSB3
b3JsZDsKKyAgICAgICAgICAgIGlzb2xhdGVkQ29udGV4dCA9IG5ldyBWOElzb2xhdGVkQ29udGV4
dCh0aGlzLCBleHRlbnNpb25Hcm91cCk7CisgICAgICAgICAgICBpZiAoaXNvbGF0ZWRDb250ZXh0
LT5jb250ZXh0KCkuSXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgZGVsZXRlIGlzb2xhdGVk
Q29udGV4dDsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIG1faXNvbGF0ZWRXb3JsZHMuc2V0KHdvcmxkSUQsIHdvcmxkKTsKKyAgICAgICAgICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgY2hhbmdlIHRoaXMgdG8gdXNpbmcgd2luZG93IHNoZWxscyB0
byBtYXRjaCBKU0MuCisgICAgICAgICAgICBtX2lzb2xhdGVkV29ybGRzLnNldCh3b3JsZElELCBp
c29sYXRlZENvbnRleHQpOwogCiAgICAgICAgICAgICAvLyBTZXR1cCBjb250ZXh0IGlkIGZvciBK
UyBkZWJ1Z2dlci4KLSAgICAgICAgICAgIGlmICghc2V0SW5qZWN0ZWRTY3JpcHRDb250ZXh0RGVi
dWdJZCh3b3JsZC0+Y29udGV4dCgpKSkgeworICAgICAgICAgICAgaWYgKCFzZXRJbmplY3RlZFNj
cmlwdENvbnRleHREZWJ1Z0lkKGlzb2xhdGVkQ29udGV4dC0+Y29udGV4dCgpKSkgewogICAgICAg
ICAgICAgICAgIG1faXNvbGF0ZWRXb3JsZHMudGFrZSh3b3JsZElEKTsKLSAgICAgICAgICAgICAg
ICBkZWxldGUgd29ybGQ7CisgICAgICAgICAgICAgICAgZGVsZXRlIGlzb2xhdGVkQ29udGV4dDsK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
IGVsc2UgewotICAgICAgICB3b3JsZCA9IG5ldyBWOElzb2xhdGVkV29ybGQodGhpcywgZXh0ZW5z
aW9uR3JvdXApOwotICAgICAgICBpZiAod29ybGQtPmNvbnRleHQoKS5Jc0VtcHR5KCkpIHsKLSAg
ICAgICAgICAgIGRlbGV0ZSB3b3JsZDsKKyAgICAgICAgaXNvbGF0ZWRDb250ZXh0ID0gbmV3IFY4
SXNvbGF0ZWRDb250ZXh0KHRoaXMsIGV4dGVuc2lvbkdyb3VwKTsKKyAgICAgICAgaWYgKGlzb2xh
dGVkQ29udGV4dC0+Y29udGV4dCgpLklzRW1wdHkoKSkgeworICAgICAgICAgICAgZGVsZXRlIGlz
b2xhdGVkQ29udGV4dDsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KIAot
ICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gY29udGV4dCA9IHY4OjpMb2NhbDx2ODo6Q29udGV4
dD46Ok5ldyh3b3JsZC0+Y29udGV4dCgpKTsKKyAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGNv
bnRleHQgPSB2ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXcoaXNvbGF0ZWRDb250ZXh0LT5jb250
ZXh0KCkpOwogICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0X3Njb3BlKGNvbnRleHQpOwog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc291cmNlcy5zaXplKCk7ICsraSkKICAgICAgIGV2
YWx1YXRlKHNvdXJjZXNbaV0sIDApOwogCiAgICAgaWYgKHdvcmxkSUQgPT0gMCkKLSAgICAgIHdv
cmxkLT5kZXN0cm95KCk7CisgICAgICBpc29sYXRlZENvbnRleHQtPmRlc3Ryb3koKTsKIH0KIAog
Ly8gRklYTUU6IFdlIHNob3VsZCByZW1vdmUgdGhpcyBmdW5jdGlvbiEKQEAgLTcwOCw4ICs3MDks
OCBAQCB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IFY4UHJveHk6OmNvbnRleHQoCiAgICAgaWYgKGNv
bnRleHQuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gdjg6OkxvY2FsPHY4OjpDb250ZXh0Pigp
OwogCi0gICAgaWYgKFY4SXNvbGF0ZWRXb3JsZCogd29ybGQgPSBWOElzb2xhdGVkV29ybGQ6Omdl
dEVudGVyZWQoKSkgewotICAgICAgICBjb250ZXh0ID0gdjg6OkxvY2FsPHY4OjpDb250ZXh0Pjo6
TmV3KHdvcmxkLT5jb250ZXh0KCkpOworICAgIGlmIChWOElzb2xhdGVkQ29udGV4dCogaXNvbGF0
ZWRDb250ZXh0ID0gVjhJc29sYXRlZENvbnRleHQ6OmdldEVudGVyZWQoKSkgeworICAgICAgICBj
b250ZXh0ID0gdjg6OkxvY2FsPHY4OjpDb250ZXh0Pjo6TmV3KGlzb2xhdGVkQ29udGV4dC0+Y29u
dGV4dCgpKTsKICAgICAgICAgaWYgKGZyYW1lICE9IFY4UHJveHk6OnJldHJpZXZlRnJhbWUoY29u
dGV4dCkpCiAgICAgICAgICAgICByZXR1cm4gdjg6OkxvY2FsPHY4OjpDb250ZXh0PigpOwogICAg
IH0KQEAgLTcxOSw4ICs3MjAsOCBAQCB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IFY4UHJveHk6OmNv
bnRleHQoCiAKIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gVjhQcm94eTo6Y29udGV4dCgpCiB7Ci0g
ICAgaWYgKFY4SXNvbGF0ZWRXb3JsZCogd29ybGQgPSBWOElzb2xhdGVkV29ybGQ6OmdldEVudGVy
ZWQoKSkgewotICAgICAgICBSZWZQdHI8U2hhcmVkUGVyc2lzdGVudDx2ODo6Q29udGV4dD4gPiBj
b250ZXh0ID0gd29ybGQtPnNoYXJlZENvbnRleHQoKTsKKyAgICBpZiAoVjhJc29sYXRlZENvbnRl
eHQqIGlzb2xhdGVkQ29udGV4dCA9IFY4SXNvbGF0ZWRDb250ZXh0OjpnZXRFbnRlcmVkKCkpIHsK
KyAgICAgICAgUmVmUHRyPFNoYXJlZFBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+ID4gY29udGV4dCA9
IGlzb2xhdGVkQ29udGV4dC0+c2hhcmVkQ29udGV4dCgpOwogICAgICAgICBpZiAobV9mcmFtZSAh
PSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lKGNvbnRleHQtPmdldCgpKSkKICAgICAgICAgICAgIHJl
dHVybiB2ODo6TG9jYWw8djg6OkNvbnRleHQ+KCk7CiAgICAgICAgIHJldHVybiB2ODo6TG9jYWw8
djg6OkNvbnRleHQ+OjpOZXcoY29udGV4dC0+Z2V0KCkpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy92OC9WOFByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5
LmgJKHJldmlzaW9uIDUyNjY2KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNs
YXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAgICAgY2xhc3MgU3RyaW5nOwogICAgIGNsYXNz
IFY4RXZlbnRMaXN0ZW5lcjsKLSAgICBjbGFzcyBWOElzb2xhdGVkV29ybGQ7CisgICAgY2xhc3Mg
VjhJc29sYXRlZENvbnRleHQ7CiAgICAgY2xhc3MgV29ybGRDb250ZXh0SGFuZGxlOwogCiAgICAg
Ly8gRklYTUU6IHVzZSBzdGFuZGFyZCBsb2dnaW5nIGZhY2lsaXRpZXMgaW4gV2ViQ29yZS4KQEAg
LTQwNiw3ICs0MDYsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBOb3RlOiBh
bHRob3VnaCB0aGUgcG9pbnRlciBpcyByYXcsIHRoZSBpbnN0YW5jZSBpcyBrZXB0IGFsaXZlIGJ5
IGEgc3Ryb25nCiAgICAgICAgIC8vIHJlZmVyZW5jZSB0byB0aGUgdjggY29udGV4dCBpdCBjb250
YWlucywgd2hpY2ggaXMgbm90IG1hZGUgd2VhayB1bnRpbCB3ZQogICAgICAgICAvLyBjYWxsIHdv
cmxkLT5kZXN0cm95KCkuCi0gICAgICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFY4SXNvbGF0ZWRX
b3JsZCo+IElzb2xhdGVkV29ybGRNYXA7CisgICAgICAgIC8vCisgICAgICAgIC8vIEZJWE1FOiBX
ZSB3YW50IHRvIGV2ZW50dWFsbHkgYmUgaG9sZGluZyB3aW5kb3cgc2hlbGxzIGluc3RlYWQgb2Yg
dGhlCisgICAgICAgIC8vICAgICAgICBJc29sYXRlZENvbnRleHQgZGlyZWN0bHkuCisgICAgICAg
IHR5cGVkZWYgSGFzaE1hcDxpbnQsIFY4SXNvbGF0ZWRDb250ZXh0Kj4gSXNvbGF0ZWRXb3JsZE1h
cDsKICAgICAgICAgSXNvbGF0ZWRXb3JsZE1hcCBtX2lzb2xhdGVkV29ybGRzOwogICAgIH07CiAK
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvV29ybGRDb250ZXh0SGFuZGxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmxkQ29udGV4dEhhbmRsZS5jcHAJKHJldmlz
aW9uIDUyNjY2KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JsZENvbnRleHRIYW5kbGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiV29ybGRDb250ZXh0SGFuZGxlLmgiCiAKLSNpbmNsdWRlICJWOElzb2xhdGVkV29y
bGQuaCIKKyNpbmNsdWRlICJWOElzb2xhdGVkQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTQxLDggKzQxLDggQEAgV29ybGRDb250ZXh0SGFuZGxlOjpXb3JsZENvbnRleHRI
YW5kbGUoVwogICAgIGlmICh3b3JsZFRvVXNlID09IFVzZU1haW5Xb3JsZCkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKFY4SXNvbGF0ZWRXb3JsZCogd29ybGQgPSBWOElzb2xhdGVkV29ybGQ6
OmdldEVudGVyZWQoKSkKLSAgICAgICAgbV9jb250ZXh0ID0gd29ybGQtPnNoYXJlZENvbnRleHQo
KTsKKyAgICBpZiAoVjhJc29sYXRlZENvbnRleHQqIGNvbnRleHQgPSBWOElzb2xhdGVkQ29udGV4
dDo6Z2V0RW50ZXJlZCgpKQorICAgICAgICBtX2NvbnRleHQgPSBjb250ZXh0LT5zaGFyZWRDb250
ZXh0KCk7CiB9CiAKIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gV29ybGRDb250ZXh0SGFuZGxlOjph
ZGp1c3RlZENvbnRleHQoVjhQcm94eSogcHJveHkpIGNvbnN0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45718</attachid>
            <date>2009-12-31 10:40:17 -0800</date>
            <delta_ts>2009-12-31 10:45:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-33087-20091231104016.patch</filename>
            <type>text/plain</type>
            <size>54751</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MjY4MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjAgQEAKKzIwMDktMTItMzEgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbVjhd
IFNlcGFyYXRlIERPTVdyYXBwZXJXb3JsZCBmcm9tIFY4SXNvbGF0ZWRXb3JsZAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzMwODcKKworICAgICAgICBU
aGlzIGNoYW5nZSBzZXBhcmF0ZSBET01XcmFwcGVyV29ybGQgYW5kIElzb2xhdGVkV29ybGQgZnJv
bQorICAgICAgICBWOElzb2xhdGVkV29ybGQuICBJJ3ZlIGFsc28gcmVuYW1lZCBWOElzb2xhdGVk
V29ybGQgdG8KKyAgICAgICAgVjhJc29sYXRlZENvbnRleHQgaW4gcHJlcGFyYXRpb24gZm9yIGhh
dmluZyBtb3JlIHRoYW4gb25lIGNvbnRleHQgaW4gYQorICAgICAgICBzaW5nbGUgaXNvbGF0ZWQg
d29ybGQuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtb3ZlcyB1cyBjbG9zZXIgdG8gdHdvIGdvYWxz
OgorICAgICAgICAxKSBNYXRjaGluZyB0aGUgc3RydWN0dXJlIG9mIHRoZSBKU0MgaW1wbGVtZW50
YXRpb24gb2YgaXNvbGF0ZWQgd29ybGRzLgorICAgICAgICAyKSBMZXR0aW5nIHNjcmlwdHMgcnVu
bmluZyBpbiBpc29sYXRlZCBjb250ZXh0cyBzZWUgaW50byBvdGhlciBpZnJhbWVzCisgICAgICAg
ICAgICh3aGljaCByZXF1aXJlcyBoYXZpbmcgbW9yZSB0aGFuIG9uZSBjb250ZXh0IGluIGFuIGlz
b2xhdGVkIHdvcmxkLikKKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9ET01XcmFwcGVyV29ybGQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRP
TVdyYXBwZXJXb3JsZDo6RE9NV3JhcHBlcldvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6Om1haW5U
aHJlYWROb3JtYWxXb3JsZCk6CisgICAgICAgICogYmluZGluZ3MvdjgvRE9NV3JhcHBlcldvcmxk
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RE9NV3JhcHBlcldvcmxkOjpjcmVhdGUpOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L0lzb2xhdGVkV29ybGQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6Oklzb2xhdGVkV29ybGQ6Oklzb2xhdGVkV29ybGQpOgorICAgICAgICAoV2ViQ29y
ZTo6SXNvbGF0ZWRXb3JsZDo6fklzb2xhdGVkV29ybGQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L0lzb2xhdGVkV29ybGQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJc29sYXRlZFdvcmxk
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SXNvbGF0ZWRXb3JsZDo6Y291bnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SXNvbGF0ZWRXb3JsZDo6ZG9tRGF0YVN0b3JlKToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9NYWluVGhyZWFkRE9NRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNYWlu
VGhyZWFkRE9NRGF0YTo6Z2V0TWFpblRocmVhZFN0b3JlKToKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xs
ZXI6OmN1cnJlbnRTY3JpcHRTdGF0ZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0U3Rh
dGUuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdFN0YXRlLmg6CisgICAgICAgICog
YmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHA6CisgICAgICAgICogYmluZGluZ3Mvdjgv
VjhET01XcmFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6aW5zdGFu
dGlhdGVWOE9iamVjdCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQu
Y3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRXb3JsZC5jcHAu
CisgICAgICAgIChXZWJDb3JlOjpWOElzb2xhdGVkQ29udGV4dDo6Y29udGV4dFdlYWtSZWZlcmVu
Y2VDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpWOElzb2xhdGVkQ29udGV4dDo6VjhJc29s
YXRlZENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VjhJc29sYXRlZENvbnRleHQ6OmRlc3Ry
b3kpOgorICAgICAgICAoV2ViQ29yZTo6VjhJc29sYXRlZENvbnRleHQ6On5WOElzb2xhdGVkQ29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpWOElzb2xhdGVkQ29udGV4dDo6c2NyaXB0U3RhdGUp
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRDb250ZXh0Lmg6IENvcGllZCBmcm9t
IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZFdvcmxkLmguCisgICAgICAgIChXZWJDb3Jl
OjpWOElzb2xhdGVkQ29udGV4dDo6Z2V0RW50ZXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpWOElz
b2xhdGVkQ29udGV4dDo6d29ybGQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRX
b3JsZC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3MvdjgvVjhJc29sYXRlZFdvcmxk
Lmg6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3MvdjgvVjhQcm94eS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpWOFByb3h5OjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCk6CisgICAgICAgIChX
ZWJDb3JlOjpWOFByb3h5Ojpjb250ZXh0KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFByb3h5
Lmg6CisgICAgICAgICogYmluZGluZ3MvdjgvV29ybGRDb250ZXh0SGFuZGxlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldvcmxkQ29udGV4dEhhbmRsZTo6V29ybGRDb250ZXh0SGFuZGxlKToKKwog
MjAwOS0xMi0zMSAgTGFzemxvIEdvbWJvcyAgPGxhc3psby4xLmdvbWJvc0Bub2tpYS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCkluZGV4OiBX
ZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQko
cmV2aXNpb24gNTI2ODIpCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpA
QCAtNzUyLDYgKzc1MiwxMCBAQAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0RPTURhdGFTdG9y
ZS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0RPTURhdGFTdG9yZS5oJywKICAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9ET01PYmplY3RzSW5jbHVkZS5oJywKKyAgICAgICAgICAgICdi
aW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92
OC9ET01XcmFwcGVyV29ybGQuaCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvSXNvbGF0ZWRX
b3JsZC5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0lzb2xhdGVkV29ybGQuaCcsCiAg
ICAgICAgICAgICAnYmluZGluZ3MvdjgvTWFpblRocmVhZERPTURhdGEuY3BwJywKICAgICAgICAg
ICAgICdiaW5kaW5ncy92OC9NYWluVGhyZWFkRE9NRGF0YS5oJywKICAgICAgICAgICAgICdiaW5k
aW5ncy92OC9OUFY4T2JqZWN0LmNwcCcsCkBAIC04MjEsOCArODI1LDggQEAKICAgICAgICAgICAg
ICdiaW5kaW5ncy92OC9WOEhpZGRlblByb3BlcnR5TmFtZS5oJywKICAgICAgICAgICAgICdiaW5k
aW5ncy92OC9WOEluZGV4LmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhJbmRleC5o
JywKLSAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOElzb2xhdGVkV29ybGQuY3BwJywKLSAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9WOElzb2xhdGVkV29ybGQuaCcsCisgICAgICAgICAgICAnYmlu
ZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQuY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92
OC9WOElzb2xhdGVkQ29udGV4dC5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOExhenlF
dmVudExpc3RlbmVyLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRM
aXN0ZW5lci5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOE5QT2JqZWN0LmNwcCcsCklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVdyYXBwZXJXb3JsZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuY3BwCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRPTVdyYXBwZXJX
b3JsZC5oIgorCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9U
aHJlYWRpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitET01XcmFwcGVyV29ybGQ6OkRP
TVdyYXBwZXJXb3JsZCgpCit7CisgICAgLy8gVGhpcyBjbGFzcyBpcyBwcmV0dHkgYm9yaW5nLCBo
dWg/Cit9CisKK0RPTVdyYXBwZXJXb3JsZCogbWFpblRocmVhZE5vcm1hbFdvcmxkKCkKK3sKKyAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmVmUHRy
PERPTVdyYXBwZXJXb3JsZD4sIGNhY2hlZE5vcm1hbFdvcmxkLCAoRE9NV3JhcHBlcldvcmxkOjpj
cmVhdGUoKSkpOworICAgIHJldHVybiBjYWNoZWROb3JtYWxXb3JsZC5nZXQoKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVy
V29ybGQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVdyYXBwZXJXb3Js
ZC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRE9NV3JhcHBlcldvcmxkX2gK
KyNkZWZpbmUgRE9NV3JhcHBlcldvcmxkX2gKKworI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVGhpcyBjbGFzcyByZXByZXNlbnQgYSBjb2xsZWN0
aW9uIG9mIERPTSB3cmFwcGVycyBmb3IgYSBzcGVjaWZpYyB3b3JsZC4KKy8vIFRoZSBiYXNlIGNs
YXNzIGlzIHByZXR0eSBib3JpbmcgYmVjYXVzZSB0aGUgd3JhcHBlcnMgYXJlIGFjdHVhbGx5IHN0
b3JlZAorLy8gc3RhdGljYWxseSBpbiBWOERPTU1hcCBhbmQgZ2FyYmFnZSBjb2xsZWN0ZWQgYnkg
VjggaXRzZWxmLgorY2xhc3MgRE9NV3JhcHBlcldvcmxkIDogcHVibGljIFJlZkNvdW50ZWQ8RE9N
V3JhcHBlcldvcmxkPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RE9NV3JhcHBl
cldvcmxkPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgRE9NV3JhcHBlcldvcmxkKCkp
OyB9CisKK3Byb3RlY3RlZDoKKyAgICBET01XcmFwcGVyV29ybGQoKTsKK307CisKK0RPTVdyYXBw
ZXJXb3JsZCogbWFpblRocmVhZE5vcm1hbFdvcmxkKCk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIERPTVdyYXBwZXJXb3JsZF9oCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L3Y4L0lzb2xhdGVkV29ybGQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvdjgv
SXNvbGF0ZWRXb3JsZC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L0lz
b2xhdGVkV29ybGQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIklzb2xhdGVkV29ybGQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitpbnQgSXNvbGF0ZWRXb3JsZDo6aXNvbGF0ZWRXb3JsZENvdW50ID0gMDsKKworSXNvbGF0
ZWRXb3JsZDo6SXNvbGF0ZWRXb3JsZCgpCit7CisgICAgKytpc29sYXRlZFdvcmxkQ291bnQ7Cit9
CisKK0lzb2xhdGVkV29ybGQ6On5Jc29sYXRlZFdvcmxkKCkKK3sKKyAgICAtLWlzb2xhdGVkV29y
bGRDb3VudDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy92OC9Jc29sYXRlZFdvcmxkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92
OC9Jc29sYXRlZFdvcmxkLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L0lz
b2xhdGVkV29ybGQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSXNvbGF0
ZWRXb3JsZF9oCisjZGVmaW5lIElzb2xhdGVkV29ybGRfaAorCisjaW5jbHVkZSAiRE9NV3JhcHBl
cldvcmxkLmgiCisjaW5jbHVkZSAiVjhET01NYXAuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CisvLyBBbiBET01XcmFwcGVyV29ybGQgb3RoZXIgdGhhbiB0aGUgdGhyZWFkJ3Mgbm9ybWFsIHdv
cmxkLgorY2xhc3MgSXNvbGF0ZWRXb3JsZCA6IHB1YmxpYyBET01XcmFwcGVyV29ybGQgeworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElzb2xhdGVkV29ybGQ+IGNyZWF0ZSgpIHsgcmV0
dXJuIGFkb3B0UmVmKG5ldyBJc29sYXRlZFdvcmxkKCkpOyB9CisgICAgc3RhdGljIGludCBjb3Vu
dCgpIHsgcmV0dXJuIGlzb2xhdGVkV29ybGRDb3VudDsgfQorCisgICAgRE9NRGF0YVN0b3JlKiBk
b21EYXRhU3RvcmUoKSBjb25zdCB7IHJldHVybiBtX2RvbURhdGFTdG9yZS5nZXRTdG9yZSgpOyB9
CisKK3Byb3RlY3RlZDoKKyAgICBJc29sYXRlZFdvcmxkKCk7CisgICAgfklzb2xhdGVkV29ybGQo
KTsKKworcHJpdmF0ZToKKyAgICAvLyBUaGUgYmFja2luZyBzdG9yZSBmb3IgdGhlIGlzb2xhdGVk
IHdvcmxkJ3MgRE9NIHdyYXBwZXJzLiAgVGhpcyBjbGFzcworICAgIC8vIGRvZXNuJ3QgaGF2ZSB2
aXNpYmlsaXR5IGludG8gdGhlIHdyYXBwZXJzLiAgVGhpcyBoYW5kbGUgc2ltcGx5IGhlbHBzCisg
ICAgLy8gbWFuYWdlIHRoZWlyIGxpZmV0aW1lLgorICAgIERPTURhdGFTdG9yZUhhbmRsZSBtX2Rv
bURhdGFTdG9yZTsKKworICAgIHN0YXRpYyBpbnQgaXNvbGF0ZWRXb3JsZENvdW50OworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gSXNvbGF0ZWRXb3JsZF9oCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L01haW5UaHJlYWRET01EYXRhLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL3Y4L01haW5UaHJlYWRET01EYXRhLmNwcAkocmV2aXNpb24gNTI2
ODIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L01haW5UaHJlYWRET01EYXRhLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
Ik1haW5UaHJlYWRET01EYXRhLmgiCiAKLSNpbmNsdWRlICJWOElzb2xhdGVkV29ybGQuaCIKKyNp
bmNsdWRlICJWOElzb2xhdGVkQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTUzLDkgKzUzLDkgQEAgRE9NRGF0YVN0b3JlJiBNYWluVGhyZWFkRE9NRGF0YTo6Z2V0TWFpbgog
ICAgIC8vIHNvIHRoYXQgaXQgY2FuIGJlIGlubGluZWQgYnkgZ2V0Q3VycmVudE1haW5UaHJlYWRT
dG9yZSwgd2hpY2ggaXMKICAgICAvLyBhIGhvdCBzcG90IGluIERyb21hZW8gRE9NIHRlc3RzLgog
ICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKLSAgICBWOElzb2xhdGVkV29ybGQqIHdv
cmxkID0gVjhJc29sYXRlZFdvcmxkOjpnZXRFbnRlcmVkKCk7Ci0gICAgaWYgKFVOTElLRUxZKHdv
cmxkICE9IDApKQotICAgICAgICByZXR1cm4gKndvcmxkLT5nZXRET01EYXRhU3RvcmUoKTsKKyAg
ICBWOElzb2xhdGVkQ29udGV4dCogY29udGV4dCA9IFY4SXNvbGF0ZWRDb250ZXh0OjpnZXRFbnRl
cmVkKCk7CisgICAgaWYgKFVOTElLRUxZKGNvbnRleHQgIT0gMCkpCisgICAgICAgIHJldHVybiAq
Y29udGV4dC0+d29ybGQoKS0+ZG9tRGF0YVN0b3JlKCk7CiAgICAgcmV0dXJuIG1fZGVmYXVsdFN0
b3JlOwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAJ
KHJldmlzaW9uIDUyNjgyKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQAogI2luY2x1ZGUgIlNldHRpbmdz
LmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nU3RhdGUuaCIK
LSNpbmNsdWRlICJWOElzb2xhdGVkV29ybGQuaCIKKyNpbmNsdWRlICJWOElzb2xhdGVkQ29udGV4
dC5oIgogI2luY2x1ZGUgIlY4TlBPYmplY3QuaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCiAjaW5j
bHVkZSAiV2lkZ2V0LmgiCkBAIC0zNzQsOCArMzc0LDggQEAgU2NyaXB0U3RhdGUqIFNjcmlwdENv
bnRyb2xsZXI6Om1haW5Xb3JsZAogCiBTY3JpcHRTdGF0ZSogU2NyaXB0Q29udHJvbGxlcjo6Y3Vy
cmVudFNjcmlwdFN0YXRlKCkKIHsKLSAgICBpZiAoVjhJc29sYXRlZFdvcmxkKiB3b3JsZCA9IFY4
SXNvbGF0ZWRXb3JsZDo6Z2V0RW50ZXJlZCgpKQotICAgICAgICByZXR1cm4gd29ybGQtPnNjcmlw
dFN0YXRlKCk7CisgICAgaWYgKFY4SXNvbGF0ZWRDb250ZXh0KiBjb250ZXh0ID0gVjhJc29sYXRl
ZENvbnRleHQ6OmdldEVudGVyZWQoKSkKKyAgICAgICAgcmV0dXJuIGNvbnRleHQtPnNjcmlwdFN0
YXRlKCk7CiAgICAgRnJhbWUqIGZyYW1lID0gVjhQcm94eTo6cmV0cmlldmVGcmFtZUZvckN1cnJl
bnRDb250ZXh0KCk7CiAgICAgQVNTRVJUKGZyYW1lKTsKICAgICByZXR1cm4gZnJhbWUtPnNjcmlw
dCgpLT5tYWluV29ybGRTY3JpcHRTdGF0ZSgpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9T
Y3JpcHRTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRT
dGF0ZS5jcHAJKHJldmlzaW9uIDUyNjgyKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRT
dGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDExICs3Myw0IEBAIFNjcmlwdFN0YXRlKiBz
Y3JpcHRTdGF0ZUZyb21QYWdlKERPTVdyYXAKICAgICByZXR1cm4gcGFnZS0+bWFpbkZyYW1lKCkt
PnNjcmlwdCgpLT5tYWluV29ybGRTY3JpcHRTdGF0ZSgpOwogfQogCi0vLyBGSVhNRTogU3R1YiBt
ZXRob2Qgc28gd2UgY29tcGlsZS4gIEN1cnJlbnRseSBjYWxsZWQgZnJvbSBGcmFtZUxvYWRlci5j
cHAuCi1ET01XcmFwcGVyV29ybGQqIG1haW5UaHJlYWROb3JtYWxXb3JsZCgpCi17Ci0gICAgREVG
SU5FX1NUQVRJQ19MT0NBTChET01XcmFwcGVyV29ybGQsIG9uZVdvcmxkLCAoKSk7Ci0gICAgcmV0
dXJuICZvbmVXb3JsZDsKLX0KLQogfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRT
dGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0U3RhdGUuaAko
cmV2aXNpb24gNTI2ODIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFN0YXRlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpZm5kZWYgU2NyaXB0U3RhdGVfaAogI2Rl
ZmluZSBTY3JpcHRTdGF0ZV9oCiAKKyNpbmNsdWRlICJET01XcmFwcGVyV29ybGQuaCIKICNpbmNs
dWRlIDx2OC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CkBAIC03MCwxNCArNzEsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
U2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlRnJvbU5vZGUoRE9NV3JhcHBlcldvcmxkKiwgTm9kZSop
OwogICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZUZyb21QYWdlKERPTVdyYXBwZXJXb3JsZCos
IFBhZ2UqKTsKIAotICAgIERPTVdyYXBwZXJXb3JsZCogbWFpblRocmVhZE5vcm1hbFdvcmxkKCk7
CiAgICAgaW5saW5lIERPTVdyYXBwZXJXb3JsZCogZGVidWdnZXJXb3JsZCgpIHsgcmV0dXJuIG1h
aW5UaHJlYWROb3JtYWxXb3JsZCgpOyB9CiAgICAgaW5saW5lIERPTVdyYXBwZXJXb3JsZCogcGx1
Z2luV29ybGQoKSB7IHJldHVybiBtYWluVGhyZWFkTm9ybWFsV29ybGQoKTsgfQogCi0gICAgLy8g
RHVtbXkgY2xhc3MgdG8gYXZvaWQgYSBidW5jaCBvZiBpZmRlZidzIGluIFdlYkNvcmUuCi0gICAg
Y2xhc3MgRE9NV3JhcHBlcldvcmxkIDogcHVibGljIFJlZkNvdW50ZWQ8RE9NV3JhcHBlcldvcmxk
PiB7Ci0gICAgfTsKLQogfQogCiAjZW5kaWYgLy8gU2NyaXB0U3RhdGVfaApJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwCShyZXZpc2lvbiA1MjY4MikKKysrIFdl
YkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUxLDcgKzUxLDYgQEAKICNpbmNsdWRlICJWOERPTVdpbmRvdy5oIgogI2luY2x1ZGUgIlY4SGlk
ZGVuUHJvcGVydHlOYW1lLmgiCiAjaW5jbHVkZSAiVjhJbmRleC5oIgotI2luY2x1ZGUgIlY4SXNv
bGF0ZWRXb3JsZC5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKICNpbmNsdWRlICJXb3JrZXJDb250
ZXh0RXhlY3V0aW9uUHJveHkuaCIKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdy
YXBwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVy
LmNwcAkocmV2aXNpb24gNTI2ODIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAKICNpbmNsdWRlICJWOEV2ZW50
TGlzdGVuZXJMaXN0LmgiCiAjaW5jbHVkZSAiVjhIVE1MQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUg
IlY4SW5kZXguaCIKLSNpbmNsdWRlICJWOElzb2xhdGVkV29ybGQuaCIKKyNpbmNsdWRlICJWOElz
b2xhdGVkQ29udGV4dC5oIgogI2luY2x1ZGUgIlY4TG9jYXRpb24uaCIKICNpbmNsdWRlICJWOE5v
ZGVMaXN0LmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgpAQCAtNzkwLDExICs3OTAsMTIgQEAgdjg6
OkxvY2FsPHY4OjpPYmplY3Q+IFY4RE9NV3JhcHBlcjo6aW5zdAogICAgIGlmIChkZXNjcmlwdG9y
VHlwZSA9PSBWOENsYXNzSW5kZXg6OkhUTUxDT0xMRUNUSU9OICYmIHN0YXRpY19jYXN0PEhUTUxD
b2xsZWN0aW9uKj4oaW1wbCktPnR5cGUoKSA9PSBEb2NBbGwpCiAgICAgICAgIGRlc2NyaXB0b3JU
eXBlID0gVjhDbGFzc0luZGV4OjpIVE1MQUxMQ09MTEVDVElPTjsKIAotICAgIGlmIChWOElzb2xh
dGVkV29ybGQ6OmdldEVudGVyZWQoKSkgeworICAgIGlmIChWOElzb2xhdGVkQ29udGV4dDo6Z2V0
RW50ZXJlZCgpKSB7CiAgICAgICAgIC8vIFRoaXMgZWZmZWN0aXZlbHkgZGlzYWJsZXMgdGhlIHdy
YXBwZXIgY2FjaGUgZm9yIGlzb2xhdGVkIHdvcmxkcy4KICAgICAgICAgcHJveHkgPSAwOwogICAg
ICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCBhIHdyYXBwZXIgY2FjaGUgZm9yIHRoZSBpc29sYXRl
ZCB3b3JsZD8gIFdlIHNob3VsZAotICAgICAgICAvLyBzZWUgaWYgdGhlIHBlcmZvcm1hbmNlIGdh
aW5zIGFyZSB3b3J0aCB3aGlsZS4KKyAgICAgICAgLy8gICAgICAgIHNlZSBpZiB0aGUgcGVyZm9y
bWFuY2UgZ2FpbnMgYXJlIHdvcnRoIHdoaWxlLgorICAgICAgICAvLyBXZSdsbCBnZXQgb25lIG9u
Y2Ugd2UgZ2l2ZSB0aGUgaXNvbGF0ZWQgY29udGV4dCBhIHByb3BlciB3aW5kb3cgc2hlbGwuCiAg
ICAgfSBlbHNlIGlmICghcHJveHkpCiAgICAgICAgIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUo
KTsKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOElzb2xhdGVkQ29udGV4dC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOElzb2xhdGVkQ29udGV4dC5jcHAJKHJl
dmlzaW9uIDUyNjY2KQkoZnJvbSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRXb3JsZC5j
cHA6NTI2NjYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRDb250ZXh0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lu
Y2x1ZGUgIlY4SXNvbGF0ZWRXb3JsZC5oIgorCisjaW5jbHVkZSA8djguaD4KKworI2luY2x1ZGUg
IkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlICJIYXNo
TWFwLmgiCisjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIlY4RE9NV2lu
ZG93LmgiCisjaW5jbHVkZSAiVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitpbnQgVjhJc29sYXRlZFdvcmxkOjppc29sYXRlZFdvcmxkQ291bnQgPSAwOwor
Cit2b2lkIFY4SXNvbGF0ZWRXb3JsZDo6Y29udGV4dFdlYWtSZWZlcmVuY2VDYWxsYmFjayh2ODo6
UGVyc2lzdGVudDx2ODo6VmFsdWU+IG9iamVjdCwgdm9pZCogaXNvbGF0ZWRfd29ybGQpCit7Cisg
ICAgLy8gT3VyIGNvbnRleHQgaXMgZ29pbmcgYXdheS4gIFRpbWUgdG8gY2xlYW4gdXAgdGhlIHdv
cmxkLgorICAgIFY4SXNvbGF0ZWRXb3JsZCogd29ybGQgPSBzdGF0aWNfY2FzdDxWOElzb2xhdGVk
V29ybGQqPihpc29sYXRlZF93b3JsZCk7CisgICAgZGVsZXRlIHdvcmxkOworfQorCitWOElzb2xh
dGVkV29ybGQ6OlY4SXNvbGF0ZWRXb3JsZChWOFByb3h5KiBwcm94eSwgaW50IGV4dGVuc2lvbkdy
b3VwKQoreworICAgICsraXNvbGF0ZWRXb3JsZENvdW50OworCisgICAgdjg6OkhhbmRsZVNjb3Bl
IHNjb3BlOworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgY3JlYXRpbmcgYSBuZXcgVjhET01X
aW5kb3dTaGVsbCBoZXJlIGluc3RlYWQgb2YgcmlwaW5nIG91dCB0aGUgY29udGV4dC4KKyAgICBt
X2NvbnRleHQgPSBTaGFyZWRQZXJzaXN0ZW50PHY4OjpDb250ZXh0Pjo6Y3JlYXRlKHByb3h5LT53
aW5kb3dTaGVsbCgpLT5jcmVhdGVOZXdDb250ZXh0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwg
ZXh0ZW5zaW9uR3JvdXApKTsKKyAgICBpZiAobV9jb250ZXh0LT5nZXQoKS5Jc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIC8vIFJ1biBjb2RlIGluIHRoZSBuZXcgY29udGV4dC4KKyAg
ICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dF9zY29wZShtX2NvbnRleHQtPmdldCgpKTsKKwor
ICAgIGdldEdsb2JhbE9iamVjdChtX2NvbnRleHQtPmdldCgpKS0+U2V0UG9pbnRlckluSW50ZXJu
YWxGaWVsZChWOEN1c3RvbTo6a0RPTVdpbmRvd0VudGVyZWRJc29sYXRlZFdvcmxkSW5kZXgsIHRo
aXMpOworCisgICAgVjhET01XaW5kb3dTaGVsbDo6aW5zdGFsbEhpZGRlbk9iamVjdFByb3RvdHlw
ZShtX2NvbnRleHQtPmdldCgpKTsKKyAgICAvLyBGSVhNRTogVGhpcyB3aWxsIGdvIGF3YXkgb25j
ZSB3ZSBoYXZlIGEgd2luZG93U2hlbGwgZm9yIHRoZSBpc29sYXRlZCB3b3JsZC4KKyAgICBwcm94
eS0+d2luZG93U2hlbGwoKS0+aW5zdGFsbERPTVdpbmRvdyhtX2NvbnRleHQtPmdldCgpLCBwcm94
eS0+ZnJhbWUoKS0+ZG9tV2luZG93KCkpOworCisgICAgLy8gVXNpbmcgdGhlIGRlZmF1bHQgc2Vj
dXJpdHkgdG9rZW4gbWVhbnMgdGhhdCB0aGUgY2FuQWNjZXNzIGlzIGFsd2F5cworICAgIC8vIGNh
bGxlZCwgd2hpY2ggaXMgc2xvdy4KKyAgICAvLyBGSVhNRTogVXNlIHRva2VucyB3aGVyZSBwb3Nz
aWJsZS4gVGhpcyB3aWxsIG1lYW4ga2VlcGluZyB0cmFjayBvZiBhbGwKKyAgICAvLyAgICAgICAg
Y3JlYXRlZCBjb250ZXh0cyBzbyB0aGF0IHRoZXkgY2FuIGFsbCBiZSB1cGRhdGVkIHdoZW4gdGhl
CisgICAgLy8gICAgICAgIGRvY3VtZW50IGRvbWFpbgorICAgIC8vICAgICAgICBjaGFuZ2VzLgor
ICAgIG1fY29udGV4dC0+Z2V0KCktPlVzZURlZmF1bHRTZWN1cml0eVRva2VuKCk7CisKKyAgICBw
cm94eS0+ZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaWRDcmVhdGVJc29sYXRlZFNjcmlw
dENvbnRleHQoKTsKK30KKwordm9pZCBWOElzb2xhdGVkV29ybGQ6OmRlc3Ryb3koKQoreworICAg
IG1fY29udGV4dC0+Z2V0KCkuTWFrZVdlYWsodGhpcywgJmNvbnRleHRXZWFrUmVmZXJlbmNlQ2Fs
bGJhY2spOworfQorCitWOElzb2xhdGVkV29ybGQ6On5WOElzb2xhdGVkV29ybGQoKQoreworICAg
IC0taXNvbGF0ZWRXb3JsZENvdW50OworICAgIG1fY29udGV4dC0+ZGlzcG9zZUhhbmRsZSgpOwor
fQorCitTY3JpcHRTdGF0ZSogVjhJc29sYXRlZFdvcmxkOjpzY3JpcHRTdGF0ZSgpCit7CisgICAg
aWYgKCFtX3NjcmlwdFN0YXRlKSB7CisgICAgICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKKyAg
ICAgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCA9IG1fY29udGV4dC5nZXQoKS0+
Z2V0KCk7CisgICAgICAgIG1fc2NyaXB0U3RhdGUuc2V0KG5ldyBTY3JpcHRTdGF0ZShWOFByb3h5
OjpyZXRyaWV2ZUZyYW1lKGNvbnRleHQpLCBjb250ZXh0KSk7CisgICAgfQorICAgIHJldHVybiBt
X3NjcmlwdFN0YXRlLmdldCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRDb250ZXh0LmNwcAkocmV2aXNpb24gNTI2NjYp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRDb250ZXh0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLSNpbmNsdWRl
ICJWOElzb2xhdGVkV29ybGQuaCIKKyNpbmNsdWRlICJWOElzb2xhdGVkQ29udGV4dC5oIgogCiAj
aW5jbHVkZSA8djguaD4KIApAQCAtNDMsMTkgKzQzLDE3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotaW50IFY4SXNvbGF0ZWRXb3JsZDo6aXNvbGF0ZWRXb3JsZENvdW50ID0gMDsKIAotdm9p
ZCBWOElzb2xhdGVkV29ybGQ6OmNvbnRleHRXZWFrUmVmZXJlbmNlQ2FsbGJhY2sodjg6OlBlcnNp
c3RlbnQ8djg6OlZhbHVlPiBvYmplY3QsIHZvaWQqIGlzb2xhdGVkX3dvcmxkKQordm9pZCBWOElz
b2xhdGVkQ29udGV4dDo6Y29udGV4dFdlYWtSZWZlcmVuY2VDYWxsYmFjayh2ODo6UGVyc2lzdGVu
dDx2ODo6VmFsdWU+IG9iamVjdCwgdm9pZCogaXNvbGF0ZWRDb250ZXh0KQogewogICAgIC8vIE91
ciBjb250ZXh0IGlzIGdvaW5nIGF3YXkuICBUaW1lIHRvIGNsZWFuIHVwIHRoZSB3b3JsZC4KLSAg
ICBWOElzb2xhdGVkV29ybGQqIHdvcmxkID0gc3RhdGljX2Nhc3Q8VjhJc29sYXRlZFdvcmxkKj4o
aXNvbGF0ZWRfd29ybGQpOwotICAgIGRlbGV0ZSB3b3JsZDsKKyAgICBWOElzb2xhdGVkQ29udGV4
dCogY29udGV4dCA9IHN0YXRpY19jYXN0PFY4SXNvbGF0ZWRDb250ZXh0Kj4oaXNvbGF0ZWRDb250
ZXh0KTsKKyAgICBkZWxldGUgY29udGV4dDsKIH0KIAotVjhJc29sYXRlZFdvcmxkOjpWOElzb2xh
dGVkV29ybGQoVjhQcm94eSogcHJveHksIGludCBleHRlbnNpb25Hcm91cCkKK1Y4SXNvbGF0ZWRD
b250ZXh0OjpWOElzb2xhdGVkQ29udGV4dChWOFByb3h5KiBwcm94eSwgaW50IGV4dGVuc2lvbkdy
b3VwKQorICAgIDogbV93b3JsZChJc29sYXRlZFdvcmxkOjpjcmVhdGUoKSkKIHsKLSAgICArK2lz
b2xhdGVkV29ybGRDb3VudDsKLQogICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKICAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIGJlIGNyZWF0aW5nIGEgbmV3IFY4RE9NV2luZG93U2hlbGwgaGVyZSBp
bnN0ZWFkIG9mIHJpcGluZyBvdXQgdGhlIGNvbnRleHQuCiAgICAgbV9jb250ZXh0ID0gU2hhcmVk
UGVyc2lzdGVudDx2ODo6Q29udGV4dD46OmNyZWF0ZShwcm94eS0+d2luZG93U2hlbGwoKS0+Y3Jl
YXRlTmV3Q29udGV4dCh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIGV4dGVuc2lvbkdyb3VwKSk7
CkBAIC04MiwxOCArODAsMTcgQEAgVjhJc29sYXRlZFdvcmxkOjpWOElzb2xhdGVkV29ybGQoVjhQ
cm94eQogICAgIHByb3h5LT5mcmFtZSgpLT5sb2FkZXIoKS0+Y2xpZW50KCktPmRpZENyZWF0ZUlz
b2xhdGVkU2NyaXB0Q29udGV4dCgpOwogfQogCi12b2lkIFY4SXNvbGF0ZWRXb3JsZDo6ZGVzdHJv
eSgpCit2b2lkIFY4SXNvbGF0ZWRDb250ZXh0OjpkZXN0cm95KCkKIHsKICAgICBtX2NvbnRleHQt
PmdldCgpLk1ha2VXZWFrKHRoaXMsICZjb250ZXh0V2Vha1JlZmVyZW5jZUNhbGxiYWNrKTsKIH0K
IAotVjhJc29sYXRlZFdvcmxkOjp+VjhJc29sYXRlZFdvcmxkKCkKK1Y4SXNvbGF0ZWRDb250ZXh0
Ojp+VjhJc29sYXRlZENvbnRleHQoKQogewotICAgIC0taXNvbGF0ZWRXb3JsZENvdW50OwogICAg
IG1fY29udGV4dC0+ZGlzcG9zZUhhbmRsZSgpOwogfQogCi1TY3JpcHRTdGF0ZSogVjhJc29sYXRl
ZFdvcmxkOjpzY3JpcHRTdGF0ZSgpCitTY3JpcHRTdGF0ZSogVjhJc29sYXRlZENvbnRleHQ6OnNj
cmlwdFN0YXRlKCkKIHsKICAgICBpZiAoIW1fc2NyaXB0U3RhdGUpIHsKICAgICAgICAgdjg6Okhh
bmRsZVNjb3BlIHNjb3BlOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOElzb2xhdGVkQ29u
dGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRl
eHQuaAkocmV2aXNpb24gNTI2NjYpCShmcm9tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRl
ZFdvcmxkLmg6NTI2NjYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRDb250ZXh0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFY4SXNvbGF0ZWRXb3Js
ZF9oCisjZGVmaW5lIFY4SXNvbGF0ZWRXb3JsZF9oCisKKyNpbmNsdWRlIDx2OC5oPgorCisjaW5j
bHVkZSAiVjhET01NYXAuaCIKKyNpbmNsdWRlICJWOEluZGV4LmgiCisjaW5jbHVkZSAiVjhQcm94
eS5oIgorI2luY2x1ZGUgIlY4VXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiU2NyaXB0U291cmNlQ29k
ZS5oIiAgLy8gZm9yIFdlYkNvcmU6OlNjcmlwdFNvdXJjZUNvZGUKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCisgICAgY2xhc3MgVjhQcm94eTsKKworICAgIC8vIFY4SXNvbGF0ZWRXb3JsZAorICAg
IC8vCisgICAgLy8gVjhJc29sYXRlZFdvcmxkIHJlcHJlc2VudHMgYSBpc29sYXRlZCBleGVjdXRp
b24gZW52aXJvbm1lbnQgZm9yCisgICAgLy8gSmF2YVNjcmlwdC4gIEVhY2ggaXNvbGF0ZWQgd29y
bGQgZXhlY3V0ZXMgaW4gcGFyYWxsZWwgd2l0aCB0aGUgbWFpbgorICAgIC8vIEphdmFTY3JpcHQg
d29ybGQuICBBbiBpc29sYXRlZCB3b3JsZCBoYXMgYWNjZXNzIHRvIHRoZSBzYW1lIERPTSBkYXRh
CisgICAgLy8gc3RydWN0dXJlcyBhcyB0aGUgbWFpbiB3b3JsZCBidXQgbm9uZSBvZiB0aGUgSmF2
YVNjcmlwdCBwb2ludGVycy4KKyAgICAvLworICAgIC8vIEl0IGlzIGFuIGVycm9yIHRvIGV2ZXIg
c2hhcmUgYSBKYXZhU2NyaXB0IHBvaW50ZXIgYmV0d2VlbiB0d28gaXNvbGF0ZWQKKyAgICAvLyB3
b3JsZHMgb3IgYmV0d2VlbiBhbiBpc29sYXRlZCB3b3JsZCBhbmQgdGhlIG1haW4gd29ybGQuICBC
ZWNhdXNlCisgICAgLy8gaXNvbGF0ZWQgd29ybGRzIGhhdmUgYWNjZXNzIHRvIHRoZSBET00sIHRo
ZXkgbmVlZCB0aGVpciBvd24gRE9NIHdyYXBwZXJzCisgICAgLy8gdG8gYXZvaWQgaGF2aW5nIHBv
aW50ZXJzIHRvIHRoZSBtYWluIHdvcmxkJ3MgRE9NIHdyYXBwZXJzICh3aGljaCBhcmUKKyAgICAv
LyBKYXZhU2NyaXB0IG9iamVjdHMpLgorICAgIC8vCisgICAgY2xhc3MgVjhJc29sYXRlZFdvcmxk
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIC8vIENyZWF0ZXMgYW4gaXNvbGF0ZWQgd29ybGQuIFRv
IGRlc3Ryb3kgaXQsIGNhbGwgZGVzdHJveSgpLgorICAgICAgICAvLyBUaGlzIHdpbGwgZGVsZXRl
IHRoZSBpc29sYXRlZCB3b3JsZCB3aGVuIHRoZSBjb250ZXh0IGl0IG93bnMgaXMgR0MnZC4KKyAg
ICAgICAgVjhJc29sYXRlZFdvcmxkKFY4UHJveHkqIHByb3h5LCBpbnQgZXh0ZW5zaW9uR3JvdXAp
OworICAgICAgICB+VjhJc29sYXRlZFdvcmxkKCk7CisKKyAgICAgICAgLy8gQ2FsbCB0aGlzIHRv
IGRlc3Ryb3kgdGhlIGlzb2xhdGVkIHdvcmxkLiBJdCB3aWxsIGJlIGRlbGV0ZWQgc29tZXRpbWUK
KyAgICAgICAgLy8gYWZ0ZXIgdGhpcyBjYWxsLCBvbmNlIGFsbCBzY3JpcHQgcmVmZXJlbmNlcyB0
byB0aGUgd29ybGQncyBjb250ZXh0CisgICAgICAgIC8vIGhhdmUgYmVlbiBkcm9wcGVkLgorICAg
ICAgICB2b2lkIGRlc3Ryb3koKTsKKworICAgICAgICAvLyBSZXR1cm5zIHRoZSBpc29sYXRlZCB3
b3JsZCBhc3NvY2lhdGVkIHdpdGgKKyAgICAgICAgLy8gdjg6OkNvbnRleHQ6OkdldEVudGVyZWQo
KS4gIEJlY2F1c2Ugd29ybGRzIGFyZSBpc29sYXRlZCwgdGhlIGVudGlyZQorICAgICAgICAvLyBK
YXZhU2NyaXB0IGNhbGwgc3RhY2sgc2hvdWxkIGJlIGZyb20gdGhlIHNhbWUgaXNvbGF0ZWQgd29y
bGQuCisgICAgICAgIC8vIFJldHVybnMgTlVMTCBpZiB0aGUgZW50ZXJlZCBjb250ZXh0IGlzIGZy
b20gdGhlIG1haW4gd29ybGQuCisgICAgICAgIC8vCisgICAgICAgIC8vIEZJWE1FOiBDb25zaWRl
ciBlZGdlIGNhc2VzIHdpdGggRE9NIG11dGF0aW9uIGV2ZW50cyB0aGF0IG1pZ2h0CisgICAgICAg
IC8vIHZpb2xhdGUgdGhpcyBpbnZhcmlhbnQuCisgICAgICAgIC8vCisgICAgICAgIHN0YXRpYyBW
OElzb2xhdGVkV29ybGQqIGdldEVudGVyZWQoKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBU
aGlzIGlzIGEgdGVtcG9yYXJ5IHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4gICBFc3NlbnRpYWxs
eSwKKyAgICAgICAgICAgIC8vIEdldEhpZGRlblZhbHVlIGlzIHRvbyBzbG93IGZvciB0aGlzIGNv
ZGUgcGF0aC4gIFdlIG5lZWQgdG8gZ2V0IHRoZQorICAgICAgICAgICAgLy8gVjggdGVhbSB0byBh
ZGQgYSByZWFsIHByb3BlcnR5IHRvIHY4OjpDb250ZXh0IGZvciBpc29sYXRlZCB3b3JsZHMuCisg
ICAgICAgICAgICAvLyBVbnRpbCB0aGVuLCB3ZSBvcHRpbWl6ZSB0aGUgY29tbW9uIGNhc2Ugb2Yg
bm90IGhhdmluZyBhbnkgaXNvbGF0ZWQKKyAgICAgICAgICAgIC8vIHdvcmxkcyBhdCBhbGwuCisg
ICAgICAgICAgICBpZiAoIWlzb2xhdGVkV29ybGRDb3VudCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgICAgIGlmICghdjg6OkNvbnRleHQ6OkluQ29udGV4dCgpKQorICAgICAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
VjhJc29sYXRlZFdvcmxkKj4oZ2V0R2xvYmFsT2JqZWN0KHY4OjpDb250ZXh0OjpHZXRFbnRlcmVk
KCkpLT5HZXRQb2ludGVyRnJvbUludGVybmFsRmllbGQoVjhDdXN0b206OmtET01XaW5kb3dFbnRl
cmVkSXNvbGF0ZWRXb3JsZEluZGV4KSk7CisgICAgICAgIH0KKworICAgICAgICB2ODo6SGFuZGxl
PHY4OjpDb250ZXh0PiBjb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0LT5nZXQoKTsgfQorICAg
ICAgICBQYXNzUmVmUHRyPFNoYXJlZFBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+ID4gc2hhcmVkQ29u
dGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dDsgfQorCisgICAgICAgIERPTURhdGFTdG9yZSogZ2V0
RE9NRGF0YVN0b3JlKCkgY29uc3QgeyByZXR1cm4gbV9kb21EYXRhU3RvcmUuZ2V0U3RvcmUoKTsg
fQorCisgICAgICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSgpOworCisgICAgcHJpdmF0ZToK
KyAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2V0R2xvYmFsT2JqZWN0KHY4
OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGNvbnRleHQtPkdsb2JhbCgpLT5HZXRQ
cm90b3R5cGUoKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBDYWxsZWQgYnkgdGhlIGdhcmJh
Z2UgY29sbGVjdG9yIHdoZW4gb3VyIEphdmFTY3JpcHQgY29udGV4dCBpcyBhYm91dAorICAgICAg
ICAvLyB0byBiZSBkZXN0cm95ZWQuCisgICAgICAgIHN0YXRpYyB2b2lkIGNvbnRleHRXZWFrUmVm
ZXJlbmNlQ2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiBvYmplY3QsIHZvaWQqIGlz
b2xhdGVkX3dvcmxkKTsKKworICAgICAgICAvLyBUaGUgdjg6OkNvbnRleHQgZm9yIHRoZSBpc29s
YXRlZCB3b3JsZC4gIFRoaXMgb2JqZWN0IGlzIGtlZXAgb24gdGhlCisgICAgICAgIC8vIGhlYXAg
YXMgbG9uZyBhcyB8bV9jb250ZXh0fCBoYXMgbm90IGJlZW4gZ2FyYmFnZSBjb2xsZWN0ZWQuCisg
ICAgICAgIFJlZlB0cjxTaGFyZWRQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiA+IG1fY29udGV4dDsK
KworICAgICAgICAvLyBUaGUgYmFja2luZyBzdG9yZSBmb3IgdGhlIGlzb2xhdGVkIHdvcmxkJ3Mg
RE9NIHdyYXBwZXJzLiAgVGhpcyBjbGFzcworICAgICAgICAvLyBkb2Vzbid0IGhhdmUgdmlzaWJp
bGl0eSBpbnRvIHRoZSB3cmFwcGVycy4gIFRoaXMgaGFuZGxlIHNpbXBseSBoZWxwcworICAgICAg
ICAvLyBtYW5hZ2UgdGhlaXIgbGlmZXRpbWUuCisgICAgICAgIERPTURhdGFTdG9yZUhhbmRsZSBt
X2RvbURhdGFTdG9yZTsKKworICAgICAgICAvLyBGSVhNRTogZ2V0IHJpZCBvZiByZWR1bmRhbnQg
bV9jb250ZXh0IGZpZWxkLiBUaGUgY29udGV4dCBjYW4gYmUgcmV0cmlldmVkIGZyb20gdGhlIFNj
cmlwdFN0YXRlLgorICAgICAgICBPd25QdHI8U2NyaXB0U3RhdGU+IG1fc2NyaXB0U3RhdGU7CisK
KyAgICAgICAgc3RhdGljIGludCBpc29sYXRlZFdvcmxkQ291bnQ7CisgICAgfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVjhJc29sYXRlZFdvcmxkX2gKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRDb250ZXh0LmgJKHJldmlzaW9uIDUyNjY2KQorKysg
V2ViQ29yZS9iaW5kaW5ncy92OC9WOElzb2xhdGVkQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCwxMDAgKzI4LDk0IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgVjhJc29s
YXRlZFdvcmxkX2gKLSNkZWZpbmUgVjhJc29sYXRlZFdvcmxkX2gKKyNpZm5kZWYgVjhJc29sYXRl
ZENvbnRleHRfaAorI2RlZmluZSBWOElzb2xhdGVkQ29udGV4dF9oCiAKICNpbmNsdWRlIDx2OC5o
PgogCi0jaW5jbHVkZSAiVjhET01NYXAuaCIKICNpbmNsdWRlICJWOEluZGV4LmgiCiAjaW5jbHVk
ZSAiVjhQcm94eS5oIgogI2luY2x1ZGUgIlY4VXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiSXNvbGF0
ZWRXb3JsZC5oIgogI2luY2x1ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIgIC8vIGZvciBXZWJDb3Jl
OjpTY3JpcHRTb3VyY2VDb2RlCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIFY4
UHJveHk7CitjbGFzcyBWOFByb3h5OwogCi0gICAgLy8gVjhJc29sYXRlZFdvcmxkCisvLyBWOElz
b2xhdGVkQ29udGV4dAorLy8KKy8vIFY4SXNvbGF0ZWRDb250ZXh0IHJlcHJlc2VudHMgYSBpc29s
YXRlZCBleGVjdXRpb24gZW52aXJvbm1lbnQgZm9yCisvLyBKYXZhU2NyaXB0LiAgRWFjaCBpc29s
YXRlZCB3b3JsZCBleGVjdXRlcyBpbiBwYXJhbGxlbCB3aXRoIHRoZSBtYWluCisvLyBKYXZhU2Ny
aXB0IHdvcmxkLiAgQW4gaXNvbGF0ZWQgd29ybGQgaGFzIGFjY2VzcyB0byB0aGUgc2FtZSBET00g
ZGF0YQorLy8gc3RydWN0dXJlcyBhcyB0aGUgbWFpbiB3b3JsZCBidXQgbm9uZSBvZiB0aGUgSmF2
YVNjcmlwdCBwb2ludGVycy4KKy8vCisvLyBJdCBpcyBhbiBlcnJvciB0byBldmVyIHNoYXJlIGEg
SmF2YVNjcmlwdCBwb2ludGVyIGJldHdlZW4gdHdvIGlzb2xhdGVkCisvLyB3b3JsZHMgb3IgYmV0
d2VlbiBhbiBpc29sYXRlZCB3b3JsZCBhbmQgdGhlIG1haW4gd29ybGQuICBCZWNhdXNlCisvLyBp
c29sYXRlZCB3b3JsZHMgaGF2ZSBhY2Nlc3MgdG8gdGhlIERPTSwgdGhleSBuZWVkIHRoZWlyIG93
biBET00gd3JhcHBlcnMKKy8vIHRvIGF2b2lkIGhhdmluZyBwb2ludGVycyB0byB0aGUgbWFpbiB3
b3JsZCdzIERPTSB3cmFwcGVycyAod2hpY2ggYXJlCisvLyBKYXZhU2NyaXB0IG9iamVjdHMpLgor
Y2xhc3MgVjhJc29sYXRlZENvbnRleHQgeworcHVibGljOgorICAgIC8vIENyZWF0ZXMgYW4gaXNv
bGF0ZWQgd29ybGQuIFRvIGRlc3Ryb3kgaXQsIGNhbGwgZGVzdHJveSgpLgorICAgIC8vIFRoaXMg
d2lsbCBkZWxldGUgdGhlIGlzb2xhdGVkIHdvcmxkIHdoZW4gdGhlIGNvbnRleHQgaXQgb3ducyBp
cyBHQydkLgorICAgIFY4SXNvbGF0ZWRDb250ZXh0KFY4UHJveHkqIHByb3h5LCBpbnQgZXh0ZW5z
aW9uR3JvdXApOworICAgIH5WOElzb2xhdGVkQ29udGV4dCgpOworCisgICAgLy8gQ2FsbCB0aGlz
IHRvIGRlc3Ryb3kgdGhlIGlzb2xhdGVkIHdvcmxkLiBJdCB3aWxsIGJlIGRlbGV0ZWQgc29tZXRp
bWUKKyAgICAvLyBhZnRlciB0aGlzIGNhbGwsIG9uY2UgYWxsIHNjcmlwdCByZWZlcmVuY2VzIHRv
IHRoZSB3b3JsZCdzIGNvbnRleHQKKyAgICAvLyBoYXZlIGJlZW4gZHJvcHBlZC4KKyAgICB2b2lk
IGRlc3Ryb3koKTsKKworICAgIC8vIFJldHVybnMgdGhlIGlzb2xhdGVkIHdvcmxkIGFzc29jaWF0
ZWQgd2l0aAorICAgIC8vIHY4OjpDb250ZXh0OjpHZXRFbnRlcmVkKCkuICBCZWNhdXNlIHdvcmxk
cyBhcmUgaXNvbGF0ZWQsIHRoZSBlbnRpcmUKKyAgICAvLyBKYXZhU2NyaXB0IGNhbGwgc3RhY2sg
c2hvdWxkIGJlIGZyb20gdGhlIHNhbWUgaXNvbGF0ZWQgd29ybGQuCisgICAgLy8gUmV0dXJucyBO
VUxMIGlmIHRoZSBlbnRlcmVkIGNvbnRleHQgaXMgZnJvbSB0aGUgbWFpbiB3b3JsZC4KICAgICAv
LwotICAgIC8vIFY4SXNvbGF0ZWRXb3JsZCByZXByZXNlbnRzIGEgaXNvbGF0ZWQgZXhlY3V0aW9u
IGVudmlyb25tZW50IGZvcgotICAgIC8vIEphdmFTY3JpcHQuICBFYWNoIGlzb2xhdGVkIHdvcmxk
IGV4ZWN1dGVzIGluIHBhcmFsbGVsIHdpdGggdGhlIG1haW4KLSAgICAvLyBKYXZhU2NyaXB0IHdv
cmxkLiAgQW4gaXNvbGF0ZWQgd29ybGQgaGFzIGFjY2VzcyB0byB0aGUgc2FtZSBET00gZGF0YQot
ICAgIC8vIHN0cnVjdHVyZXMgYXMgdGhlIG1haW4gd29ybGQgYnV0IG5vbmUgb2YgdGhlIEphdmFT
Y3JpcHQgcG9pbnRlcnMuCisgICAgLy8gRklYTUU6IENvbnNpZGVyIGVkZ2UgY2FzZXMgd2l0aCBE
T00gbXV0YXRpb24gZXZlbnRzIHRoYXQgbWlnaHQKKyAgICAvLyB2aW9sYXRlIHRoaXMgaW52YXJp
YW50LgogICAgIC8vCi0gICAgLy8gSXQgaXMgYW4gZXJyb3IgdG8gZXZlciBzaGFyZSBhIEphdmFT
Y3JpcHQgcG9pbnRlciBiZXR3ZWVuIHR3byBpc29sYXRlZAotICAgIC8vIHdvcmxkcyBvciBiZXR3
ZWVuIGFuIGlzb2xhdGVkIHdvcmxkIGFuZCB0aGUgbWFpbiB3b3JsZC4gIEJlY2F1c2UKLSAgICAv
LyBpc29sYXRlZCB3b3JsZHMgaGF2ZSBhY2Nlc3MgdG8gdGhlIERPTSwgdGhleSBuZWVkIHRoZWly
IG93biBET00gd3JhcHBlcnMKLSAgICAvLyB0byBhdm9pZCBoYXZpbmcgcG9pbnRlcnMgdG8gdGhl
IG1haW4gd29ybGQncyBET00gd3JhcHBlcnMgKHdoaWNoIGFyZQotICAgIC8vIEphdmFTY3JpcHQg
b2JqZWN0cykuCi0gICAgLy8KLSAgICBjbGFzcyBWOElzb2xhdGVkV29ybGQgewotICAgIHB1Ymxp
YzoKLSAgICAgICAgLy8gQ3JlYXRlcyBhbiBpc29sYXRlZCB3b3JsZC4gVG8gZGVzdHJveSBpdCwg
Y2FsbCBkZXN0cm95KCkuCi0gICAgICAgIC8vIFRoaXMgd2lsbCBkZWxldGUgdGhlIGlzb2xhdGVk
IHdvcmxkIHdoZW4gdGhlIGNvbnRleHQgaXQgb3ducyBpcyBHQydkLgotICAgICAgICBWOElzb2xh
dGVkV29ybGQoVjhQcm94eSogcHJveHksIGludCBleHRlbnNpb25Hcm91cCk7Ci0gICAgICAgIH5W
OElzb2xhdGVkV29ybGQoKTsKLQotICAgICAgICAvLyBDYWxsIHRoaXMgdG8gZGVzdHJveSB0aGUg
aXNvbGF0ZWQgd29ybGQuIEl0IHdpbGwgYmUgZGVsZXRlZCBzb21ldGltZQotICAgICAgICAvLyBh
ZnRlciB0aGlzIGNhbGwsIG9uY2UgYWxsIHNjcmlwdCByZWZlcmVuY2VzIHRvIHRoZSB3b3JsZCdz
IGNvbnRleHQKLSAgICAgICAgLy8gaGF2ZSBiZWVuIGRyb3BwZWQuCi0gICAgICAgIHZvaWQgZGVz
dHJveSgpOwotCi0gICAgICAgIC8vIFJldHVybnMgdGhlIGlzb2xhdGVkIHdvcmxkIGFzc29jaWF0
ZWQgd2l0aAotICAgICAgICAvLyB2ODo6Q29udGV4dDo6R2V0RW50ZXJlZCgpLiAgQmVjYXVzZSB3
b3JsZHMgYXJlIGlzb2xhdGVkLCB0aGUgZW50aXJlCi0gICAgICAgIC8vIEphdmFTY3JpcHQgY2Fs
bCBzdGFjayBzaG91bGQgYmUgZnJvbSB0aGUgc2FtZSBpc29sYXRlZCB3b3JsZC4KLSAgICAgICAg
Ly8gUmV0dXJucyBOVUxMIGlmIHRoZSBlbnRlcmVkIGNvbnRleHQgaXMgZnJvbSB0aGUgbWFpbiB3
b3JsZC4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gRklYTUU6IENvbnNpZGVyIGVkZ2UgY2FzZXMg
d2l0aCBET00gbXV0YXRpb24gZXZlbnRzIHRoYXQgbWlnaHQKLSAgICAgICAgLy8gdmlvbGF0ZSB0
aGlzIGludmFyaWFudC4KLSAgICAgICAgLy8KLSAgICAgICAgc3RhdGljIFY4SXNvbGF0ZWRXb3Js
ZCogZ2V0RW50ZXJlZCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgYSB0ZW1w
b3JhcnkgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLiAgIEVzc2VudGlhbGx5LAotICAgICAgICAg
ICAgLy8gR2V0SGlkZGVuVmFsdWUgaXMgdG9vIHNsb3cgZm9yIHRoaXMgY29kZSBwYXRoLiAgV2Ug
bmVlZCB0byBnZXQgdGhlCi0gICAgICAgICAgICAvLyBWOCB0ZWFtIHRvIGFkZCBhIHJlYWwgcHJv
cGVydHkgdG8gdjg6OkNvbnRleHQgZm9yIGlzb2xhdGVkIHdvcmxkcy4KLSAgICAgICAgICAgIC8v
IFVudGlsIHRoZW4sIHdlIG9wdGltaXplIHRoZSBjb21tb24gY2FzZSBvZiBub3QgaGF2aW5nIGFu
eSBpc29sYXRlZAotICAgICAgICAgICAgLy8gd29ybGRzIGF0IGFsbC4KLSAgICAgICAgICAgIGlm
ICghaXNvbGF0ZWRXb3JsZENvdW50KQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICAgICAgaWYgKCF2ODo6Q29udGV4dDo6SW5Db250ZXh0KCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxWOElzb2xhdGVkV29y
bGQqPihnZXRHbG9iYWxPYmplY3Qodjg6OkNvbnRleHQ6OkdldEVudGVyZWQoKSktPkdldFBvaW50
ZXJGcm9tSW50ZXJuYWxGaWVsZChWOEN1c3RvbTo6a0RPTVdpbmRvd0VudGVyZWRJc29sYXRlZFdv
cmxkSW5kZXgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+
IGNvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQtPmdldCgpOyB9Ci0gICAgICAgIFBhc3NSZWZQ
dHI8U2hhcmVkUGVyc2lzdGVudDx2ODo6Q29udGV4dD4gPiBzaGFyZWRDb250ZXh0KCkgeyByZXR1
cm4gbV9jb250ZXh0OyB9Ci0KLSAgICAgICAgRE9NRGF0YVN0b3JlKiBnZXRET01EYXRhU3RvcmUo
KSBjb25zdCB7IHJldHVybiBtX2RvbURhdGFTdG9yZS5nZXRTdG9yZSgpOyB9Ci0KLSAgICAgICAg
U2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlKCk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBnZXRHbG9iYWxPYmplY3Qodjg6OkhhbmRsZTx2ODo6
Q29udGV4dD4gY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHY4OjpIYW5k
bGU8djg6Ok9iamVjdD46OkNhc3QoY29udGV4dC0+R2xvYmFsKCktPkdldFByb3RvdHlwZSgpKTsK
LSAgICAgICAgfQotCi0gICAgICAgIC8vIENhbGxlZCBieSB0aGUgZ2FyYmFnZSBjb2xsZWN0b3Ig
d2hlbiBvdXIgSmF2YVNjcmlwdCBjb250ZXh0IGlzIGFib3V0Ci0gICAgICAgIC8vIHRvIGJlIGRl
c3Ryb3llZC4KLSAgICAgICAgc3RhdGljIHZvaWQgY29udGV4dFdlYWtSZWZlcmVuY2VDYWxsYmFj
ayh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IG9iamVjdCwgdm9pZCogaXNvbGF0ZWRfd29ybGQp
OwotCi0gICAgICAgIC8vIFRoZSB2ODo6Q29udGV4dCBmb3IgdGhlIGlzb2xhdGVkIHdvcmxkLiAg
VGhpcyBvYmplY3QgaXMga2VlcCBvbiB0aGUKLSAgICAgICAgLy8gaGVhcCBhcyBsb25nIGFzIHxt
X2NvbnRleHR8IGhhcyBub3QgYmVlbiBnYXJiYWdlIGNvbGxlY3RlZC4KLSAgICAgICAgUmVmUHRy
PFNoYXJlZFBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+ID4gbV9jb250ZXh0OwotCi0gICAgICAgIC8v
IFRoZSBiYWNraW5nIHN0b3JlIGZvciB0aGUgaXNvbGF0ZWQgd29ybGQncyBET00gd3JhcHBlcnMu
ICBUaGlzIGNsYXNzCi0gICAgICAgIC8vIGRvZXNuJ3QgaGF2ZSB2aXNpYmlsaXR5IGludG8gdGhl
IHdyYXBwZXJzLiAgVGhpcyBoYW5kbGUgc2ltcGx5IGhlbHBzCi0gICAgICAgIC8vIG1hbmFnZSB0
aGVpciBsaWZldGltZS4KLSAgICAgICAgRE9NRGF0YVN0b3JlSGFuZGxlIG1fZG9tRGF0YVN0b3Jl
OwotCi0gICAgICAgIC8vIEZJWE1FOiBnZXQgcmlkIG9mIHJlZHVuZGFudCBtX2NvbnRleHQgZmll
bGQuIFRoZSBjb250ZXh0IGNhbiBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgU2NyaXB0U3RhdGUuCi0g
ICAgICAgIE93blB0cjxTY3JpcHRTdGF0ZT4gbV9zY3JpcHRTdGF0ZTsKLQotICAgICAgICBzdGF0
aWMgaW50IGlzb2xhdGVkV29ybGRDb3VudDsKLSAgICB9OworICAgIHN0YXRpYyBWOElzb2xhdGVk
Q29udGV4dCogZ2V0RW50ZXJlZCgpCisgICAgeworICAgICAgICAvLyBUaGlzIGlzIGEgdGVtcG9y
YXJ5IHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4gICBFc3NlbnRpYWxseSwKKyAgICAgICAgLy8g
R2V0SGlkZGVuVmFsdWUgaXMgdG9vIHNsb3cgZm9yIHRoaXMgY29kZSBwYXRoLiAgV2UgbmVlZCB0
byBnZXQgdGhlCisgICAgICAgIC8vIFY4IHRlYW0gdG8gYWRkIGEgcmVhbCBwcm9wZXJ0eSB0byB2
ODo6Q29udGV4dCBmb3IgaXNvbGF0ZWQgd29ybGRzLgorICAgICAgICAvLyBVbnRpbCB0aGVuLCB3
ZSBvcHRpbWl6ZSB0aGUgY29tbW9uIGNhc2Ugb2Ygbm90IGhhdmluZyBhbnkgaXNvbGF0ZWQKKyAg
ICAgICAgLy8gd29ybGRzIGF0IGFsbC4KKyAgICAgICAgaWYgKCFJc29sYXRlZFdvcmxkOjpjb3Vu
dCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmICghdjg6OkNvbnRleHQ6Oklu
Q29udGV4dCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PFY4SXNvbGF0ZWRDb250ZXh0Kj4oZ2V0R2xvYmFsT2JqZWN0KHY4OjpDb250ZXh0
OjpHZXRFbnRlcmVkKCkpLT5HZXRQb2ludGVyRnJvbUludGVybmFsRmllbGQoVjhDdXN0b206OmtE
T01XaW5kb3dFbnRlcmVkSXNvbGF0ZWRXb3JsZEluZGV4KSk7CisgICAgfQorCisgICAgdjg6Okhh
bmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dC0+Z2V0KCk7IH0K
KyAgICBQYXNzUmVmUHRyPFNoYXJlZFBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+ID4gc2hhcmVkQ29u
dGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dDsgfQorCisgICAgSXNvbGF0ZWRXb3JsZCogd29ybGQo
KSBjb25zdCB7IHJldHVybiBtX3dvcmxkLmdldCgpOyB9CisKKyAgICBTY3JpcHRTdGF0ZSogc2Ny
aXB0U3RhdGUoKTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiBnZXRHbG9iYWxPYmplY3Qodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCkKKyAgICB7
CisgICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGNvbnRleHQtPkds
b2JhbCgpLT5HZXRQcm90b3R5cGUoKSk7CisgICAgfQorCisgICAgLy8gQ2FsbGVkIGJ5IHRoZSBn
YXJiYWdlIGNvbGxlY3RvciB3aGVuIG91ciBKYXZhU2NyaXB0IGNvbnRleHQgaXMgYWJvdXQKKyAg
ICAvLyB0byBiZSBkZXN0cm95ZWQuCisgICAgc3RhdGljIHZvaWQgY29udGV4dFdlYWtSZWZlcmVu
Y2VDYWxsYmFjayh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IG9iamVjdCwgdm9pZCogaXNvbGF0
ZWRfd29ybGQpOworCisgICAgLy8gVGhlIHVuZGVybHlpbmcgdjg6OkNvbnRleHQuIFRoaXMgb2Jq
ZWN0IGlzIGtlZXAgb24gdGhlIGhlYXAgYXMKKyAgICAvLyBsb25nIGFzIHxtX2NvbnRleHR8IGhh
cyBub3QgYmVlbiBnYXJiYWdlIGNvbGxlY3RlZC4KKyAgICBSZWZQdHI8U2hhcmVkUGVyc2lzdGVu
dDx2ODo6Q29udGV4dD4gPiBtX2NvbnRleHQ7CisKKyAgICBSZWZQdHI8SXNvbGF0ZWRXb3JsZD4g
bV93b3JsZDsKKworICAgIC8vIEZJWE1FOiBnZXQgcmlkIG9mIHJlZHVuZGFudCBtX2NvbnRleHQg
ZmllbGQuIFRoZSBjb250ZXh0IGNhbiBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgU2NyaXB0U3RhdGUu
CisgICAgT3duUHRyPFNjcmlwdFN0YXRlPiBtX3NjcmlwdFN0YXRlOworfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gVjhJc29sYXRlZFdvcmxkX2gKKyNlbmRpZiAvLyBW
OElzb2xhdGVkQ29udGV4dF9oCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRX
b3JsZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOElzb2xhdGVkV29y
bGQuY3BwCShyZXZpc2lvbiA1MjY4MikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRl
ZFdvcmxkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMDYgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRp
b24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0g
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLQotI2luY2x1ZGUgIlY4SXNvbGF0ZWRXb3JsZC5oIgotCi0jaW5jbHVkZSA8djguaD4K
LQotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKLSNp
bmNsdWRlICJIYXNoTWFwLmgiCi0jaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgotI2luY2x1
ZGUgIlY4RE9NV2luZG93LmgiCi0jaW5jbHVkZSAiVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuaCIKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1pbnQgVjhJc29sYXRlZFdvcmxkOjppc29sYXRlZFdvcmxk
Q291bnQgPSAwOwotCi12b2lkIFY4SXNvbGF0ZWRXb3JsZDo6Y29udGV4dFdlYWtSZWZlcmVuY2VD
YWxsYmFjayh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IG9iamVjdCwgdm9pZCogaXNvbGF0ZWRf
d29ybGQpCi17Ci0gICAgLy8gT3VyIGNvbnRleHQgaXMgZ29pbmcgYXdheS4gIFRpbWUgdG8gY2xl
YW4gdXAgdGhlIHdvcmxkLgotICAgIFY4SXNvbGF0ZWRXb3JsZCogd29ybGQgPSBzdGF0aWNfY2Fz
dDxWOElzb2xhdGVkV29ybGQqPihpc29sYXRlZF93b3JsZCk7Ci0gICAgZGVsZXRlIHdvcmxkOwot
fQotCi1WOElzb2xhdGVkV29ybGQ6OlY4SXNvbGF0ZWRXb3JsZChWOFByb3h5KiBwcm94eSwgaW50
IGV4dGVuc2lvbkdyb3VwKQotewotICAgICsraXNvbGF0ZWRXb3JsZENvdW50OwotCi0gICAgdjg6
OkhhbmRsZVNjb3BlIHNjb3BlOwotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgY3JlYXRpbmcg
YSBuZXcgVjhET01XaW5kb3dTaGVsbCBoZXJlIGluc3RlYWQgb2YgcmlwaW5nIG91dCB0aGUgY29u
dGV4dC4KLSAgICBtX2NvbnRleHQgPSBTaGFyZWRQZXJzaXN0ZW50PHY4OjpDb250ZXh0Pjo6Y3Jl
YXRlKHByb3h5LT53aW5kb3dTaGVsbCgpLT5jcmVhdGVOZXdDb250ZXh0KHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4oKSwgZXh0ZW5zaW9uR3JvdXApKTsKLSAgICBpZiAobV9jb250ZXh0LT5nZXQoKS5J
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFJ1biBjb2RlIGluIHRoZSBuZXcg
Y29udGV4dC4KLSAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dF9zY29wZShtX2NvbnRleHQt
PmdldCgpKTsKLQotICAgIGdldEdsb2JhbE9iamVjdChtX2NvbnRleHQtPmdldCgpKS0+U2V0UG9p
bnRlckluSW50ZXJuYWxGaWVsZChWOEN1c3RvbTo6a0RPTVdpbmRvd0VudGVyZWRJc29sYXRlZFdv
cmxkSW5kZXgsIHRoaXMpOwotCi0gICAgVjhET01XaW5kb3dTaGVsbDo6aW5zdGFsbEhpZGRlbk9i
amVjdFByb3RvdHlwZShtX2NvbnRleHQtPmdldCgpKTsKLSAgICAvLyBGSVhNRTogVGhpcyB3aWxs
IGdvIGF3YXkgb25jZSB3ZSBoYXZlIGEgd2luZG93U2hlbGwgZm9yIHRoZSBpc29sYXRlZCB3b3Js
ZC4KLSAgICBwcm94eS0+d2luZG93U2hlbGwoKS0+aW5zdGFsbERPTVdpbmRvdyhtX2NvbnRleHQt
PmdldCgpLCBwcm94eS0+ZnJhbWUoKS0+ZG9tV2luZG93KCkpOwotCi0gICAgLy8gVXNpbmcgdGhl
IGRlZmF1bHQgc2VjdXJpdHkgdG9rZW4gbWVhbnMgdGhhdCB0aGUgY2FuQWNjZXNzIGlzIGFsd2F5
cwotICAgIC8vIGNhbGxlZCwgd2hpY2ggaXMgc2xvdy4KLSAgICAvLyBGSVhNRTogVXNlIHRva2Vu
cyB3aGVyZSBwb3NzaWJsZS4gVGhpcyB3aWxsIG1lYW4ga2VlcGluZyB0cmFjayBvZiBhbGwKLSAg
ICAvLyAgICAgICAgY3JlYXRlZCBjb250ZXh0cyBzbyB0aGF0IHRoZXkgY2FuIGFsbCBiZSB1cGRh
dGVkIHdoZW4gdGhlCi0gICAgLy8gICAgICAgIGRvY3VtZW50IGRvbWFpbgotICAgIC8vICAgICAg
ICBjaGFuZ2VzLgotICAgIG1fY29udGV4dC0+Z2V0KCktPlVzZURlZmF1bHRTZWN1cml0eVRva2Vu
KCk7Ci0KLSAgICBwcm94eS0+ZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaWRDcmVhdGVJ
c29sYXRlZFNjcmlwdENvbnRleHQoKTsKLX0KLQotdm9pZCBWOElzb2xhdGVkV29ybGQ6OmRlc3Ry
b3koKQotewotICAgIG1fY29udGV4dC0+Z2V0KCkuTWFrZVdlYWsodGhpcywgJmNvbnRleHRXZWFr
UmVmZXJlbmNlQ2FsbGJhY2spOwotfQotCi1WOElzb2xhdGVkV29ybGQ6On5WOElzb2xhdGVkV29y
bGQoKQotewotICAgIC0taXNvbGF0ZWRXb3JsZENvdW50OwotICAgIG1fY29udGV4dC0+ZGlzcG9z
ZUhhbmRsZSgpOwotfQotCi1TY3JpcHRTdGF0ZSogVjhJc29sYXRlZFdvcmxkOjpzY3JpcHRTdGF0
ZSgpCi17Ci0gICAgaWYgKCFtX3NjcmlwdFN0YXRlKSB7Ci0gICAgICAgIHY4OjpIYW5kbGVTY29w
ZSBzY29wZTsKLSAgICAgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCA9IG1fY29u
dGV4dC5nZXQoKS0+Z2V0KCk7Ci0gICAgICAgIG1fc2NyaXB0U3RhdGUuc2V0KG5ldyBTY3JpcHRT
dGF0ZShWOFByb3h5OjpyZXRyaWV2ZUZyYW1lKGNvbnRleHQpLCBjb250ZXh0KSk7Ci0gICAgfQot
ICAgIHJldHVybiBtX3NjcmlwdFN0YXRlLmdldCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRXb3JsZC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZFdvcmxkLmgJKHJldmlzaW9uIDUy
NjgyKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOElzb2xhdGVkV29ybGQuaAkod29ya2luZyBj
b3B5KQpAQCAtMSwxMjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgVjhJc29sYXRlZFdvcmxkX2gKLSNkZWZpbmUg
VjhJc29sYXRlZFdvcmxkX2gKLQotI2luY2x1ZGUgPHY4Lmg+Ci0KLSNpbmNsdWRlICJWOERPTU1h
cC5oIgotI2luY2x1ZGUgIlY4SW5kZXguaCIKLSNpbmNsdWRlICJWOFByb3h5LmgiCi0jaW5jbHVk
ZSAiVjhVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJTY3JpcHRTb3VyY2VDb2RlLmgiICAvLyBmb3Ig
V2ViQ29yZTo6U2NyaXB0U291cmNlQ29kZQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBj
bGFzcyBWOFByb3h5OwotCi0gICAgLy8gVjhJc29sYXRlZFdvcmxkCi0gICAgLy8KLSAgICAvLyBW
OElzb2xhdGVkV29ybGQgcmVwcmVzZW50cyBhIGlzb2xhdGVkIGV4ZWN1dGlvbiBlbnZpcm9ubWVu
dCBmb3IKLSAgICAvLyBKYXZhU2NyaXB0LiAgRWFjaCBpc29sYXRlZCB3b3JsZCBleGVjdXRlcyBp
biBwYXJhbGxlbCB3aXRoIHRoZSBtYWluCi0gICAgLy8gSmF2YVNjcmlwdCB3b3JsZC4gIEFuIGlz
b2xhdGVkIHdvcmxkIGhhcyBhY2Nlc3MgdG8gdGhlIHNhbWUgRE9NIGRhdGEKLSAgICAvLyBzdHJ1
Y3R1cmVzIGFzIHRoZSBtYWluIHdvcmxkIGJ1dCBub25lIG9mIHRoZSBKYXZhU2NyaXB0IHBvaW50
ZXJzLgotICAgIC8vCi0gICAgLy8gSXQgaXMgYW4gZXJyb3IgdG8gZXZlciBzaGFyZSBhIEphdmFT
Y3JpcHQgcG9pbnRlciBiZXR3ZWVuIHR3byBpc29sYXRlZAotICAgIC8vIHdvcmxkcyBvciBiZXR3
ZWVuIGFuIGlzb2xhdGVkIHdvcmxkIGFuZCB0aGUgbWFpbiB3b3JsZC4gIEJlY2F1c2UKLSAgICAv
LyBpc29sYXRlZCB3b3JsZHMgaGF2ZSBhY2Nlc3MgdG8gdGhlIERPTSwgdGhleSBuZWVkIHRoZWly
IG93biBET00gd3JhcHBlcnMKLSAgICAvLyB0byBhdm9pZCBoYXZpbmcgcG9pbnRlcnMgdG8gdGhl
IG1haW4gd29ybGQncyBET00gd3JhcHBlcnMgKHdoaWNoIGFyZQotICAgIC8vIEphdmFTY3JpcHQg
b2JqZWN0cykuCi0gICAgLy8KLSAgICBjbGFzcyBWOElzb2xhdGVkV29ybGQgewotICAgIHB1Ymxp
YzoKLSAgICAgICAgLy8gQ3JlYXRlcyBhbiBpc29sYXRlZCB3b3JsZC4gVG8gZGVzdHJveSBpdCwg
Y2FsbCBkZXN0cm95KCkuCi0gICAgICAgIC8vIFRoaXMgd2lsbCBkZWxldGUgdGhlIGlzb2xhdGVk
IHdvcmxkIHdoZW4gdGhlIGNvbnRleHQgaXQgb3ducyBpcyBHQydkLgotICAgICAgICBWOElzb2xh
dGVkV29ybGQoVjhQcm94eSogcHJveHksIGludCBleHRlbnNpb25Hcm91cCk7Ci0gICAgICAgIH5W
OElzb2xhdGVkV29ybGQoKTsKLQotICAgICAgICAvLyBDYWxsIHRoaXMgdG8gZGVzdHJveSB0aGUg
aXNvbGF0ZWQgd29ybGQuIEl0IHdpbGwgYmUgZGVsZXRlZCBzb21ldGltZQotICAgICAgICAvLyBh
ZnRlciB0aGlzIGNhbGwsIG9uY2UgYWxsIHNjcmlwdCByZWZlcmVuY2VzIHRvIHRoZSB3b3JsZCdz
IGNvbnRleHQKLSAgICAgICAgLy8gaGF2ZSBiZWVuIGRyb3BwZWQuCi0gICAgICAgIHZvaWQgZGVz
dHJveSgpOwotCi0gICAgICAgIC8vIFJldHVybnMgdGhlIGlzb2xhdGVkIHdvcmxkIGFzc29jaWF0
ZWQgd2l0aAotICAgICAgICAvLyB2ODo6Q29udGV4dDo6R2V0RW50ZXJlZCgpLiAgQmVjYXVzZSB3
b3JsZHMgYXJlIGlzb2xhdGVkLCB0aGUgZW50aXJlCi0gICAgICAgIC8vIEphdmFTY3JpcHQgY2Fs
bCBzdGFjayBzaG91bGQgYmUgZnJvbSB0aGUgc2FtZSBpc29sYXRlZCB3b3JsZC4KLSAgICAgICAg
Ly8gUmV0dXJucyBOVUxMIGlmIHRoZSBlbnRlcmVkIGNvbnRleHQgaXMgZnJvbSB0aGUgbWFpbiB3
b3JsZC4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gRklYTUU6IENvbnNpZGVyIGVkZ2UgY2FzZXMg
d2l0aCBET00gbXV0YXRpb24gZXZlbnRzIHRoYXQgbWlnaHQKLSAgICAgICAgLy8gdmlvbGF0ZSB0
aGlzIGludmFyaWFudC4KLSAgICAgICAgLy8KLSAgICAgICAgc3RhdGljIFY4SXNvbGF0ZWRXb3Js
ZCogZ2V0RW50ZXJlZCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgYSB0ZW1w
b3JhcnkgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLiAgIEVzc2VudGlhbGx5LAotICAgICAgICAg
ICAgLy8gR2V0SGlkZGVuVmFsdWUgaXMgdG9vIHNsb3cgZm9yIHRoaXMgY29kZSBwYXRoLiAgV2Ug
bmVlZCB0byBnZXQgdGhlCi0gICAgICAgICAgICAvLyBWOCB0ZWFtIHRvIGFkZCBhIHJlYWwgcHJv
cGVydHkgdG8gdjg6OkNvbnRleHQgZm9yIGlzb2xhdGVkIHdvcmxkcy4KLSAgICAgICAgICAgIC8v
IFVudGlsIHRoZW4sIHdlIG9wdGltaXplIHRoZSBjb21tb24gY2FzZSBvZiBub3QgaGF2aW5nIGFu
eSBpc29sYXRlZAotICAgICAgICAgICAgLy8gd29ybGRzIGF0IGFsbC4KLSAgICAgICAgICAgIGlm
ICghaXNvbGF0ZWRXb3JsZENvdW50KQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICAgICAgaWYgKCF2ODo6Q29udGV4dDo6SW5Db250ZXh0KCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxWOElzb2xhdGVkV29y
bGQqPihnZXRHbG9iYWxPYmplY3Qodjg6OkNvbnRleHQ6OkdldEVudGVyZWQoKSktPkdldFBvaW50
ZXJGcm9tSW50ZXJuYWxGaWVsZChWOEN1c3RvbTo6a0RPTVdpbmRvd0VudGVyZWRJc29sYXRlZFdv
cmxkSW5kZXgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+
IGNvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQtPmdldCgpOyB9Ci0gICAgICAgIFBhc3NSZWZQ
dHI8U2hhcmVkUGVyc2lzdGVudDx2ODo6Q29udGV4dD4gPiBzaGFyZWRDb250ZXh0KCkgeyByZXR1
cm4gbV9jb250ZXh0OyB9Ci0KLSAgICAgICAgRE9NRGF0YVN0b3JlKiBnZXRET01EYXRhU3RvcmUo
KSBjb25zdCB7IHJldHVybiBtX2RvbURhdGFTdG9yZS5nZXRTdG9yZSgpOyB9Ci0KLSAgICAgICAg
U2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlKCk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBnZXRHbG9iYWxPYmplY3Qodjg6OkhhbmRsZTx2ODo6
Q29udGV4dD4gY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHY4OjpIYW5k
bGU8djg6Ok9iamVjdD46OkNhc3QoY29udGV4dC0+R2xvYmFsKCktPkdldFByb3RvdHlwZSgpKTsK
LSAgICAgICAgfQotCi0gICAgICAgIC8vIENhbGxlZCBieSB0aGUgZ2FyYmFnZSBjb2xsZWN0b3Ig
d2hlbiBvdXIgSmF2YVNjcmlwdCBjb250ZXh0IGlzIGFib3V0Ci0gICAgICAgIC8vIHRvIGJlIGRl
c3Ryb3llZC4KLSAgICAgICAgc3RhdGljIHZvaWQgY29udGV4dFdlYWtSZWZlcmVuY2VDYWxsYmFj
ayh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IG9iamVjdCwgdm9pZCogaXNvbGF0ZWRfd29ybGQp
OwotCi0gICAgICAgIC8vIFRoZSB2ODo6Q29udGV4dCBmb3IgdGhlIGlzb2xhdGVkIHdvcmxkLiAg
VGhpcyBvYmplY3QgaXMga2VlcCBvbiB0aGUKLSAgICAgICAgLy8gaGVhcCBhcyBsb25nIGFzIHxt
X2NvbnRleHR8IGhhcyBub3QgYmVlbiBnYXJiYWdlIGNvbGxlY3RlZC4KLSAgICAgICAgUmVmUHRy
PFNoYXJlZFBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+ID4gbV9jb250ZXh0OwotCi0gICAgICAgIC8v
IFRoZSBiYWNraW5nIHN0b3JlIGZvciB0aGUgaXNvbGF0ZWQgd29ybGQncyBET00gd3JhcHBlcnMu
ICBUaGlzIGNsYXNzCi0gICAgICAgIC8vIGRvZXNuJ3QgaGF2ZSB2aXNpYmlsaXR5IGludG8gdGhl
IHdyYXBwZXJzLiAgVGhpcyBoYW5kbGUgc2ltcGx5IGhlbHBzCi0gICAgICAgIC8vIG1hbmFnZSB0
aGVpciBsaWZldGltZS4KLSAgICAgICAgRE9NRGF0YVN0b3JlSGFuZGxlIG1fZG9tRGF0YVN0b3Jl
OwotCi0gICAgICAgIC8vIEZJWE1FOiBnZXQgcmlkIG9mIHJlZHVuZGFudCBtX2NvbnRleHQgZmll
bGQuIFRoZSBjb250ZXh0IGNhbiBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgU2NyaXB0U3RhdGUuCi0g
ICAgICAgIE93blB0cjxTY3JpcHRTdGF0ZT4gbV9zY3JpcHRTdGF0ZTsKLQotICAgICAgICBzdGF0
aWMgaW50IGlzb2xhdGVkV29ybGRDb3VudDsKLSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZiAvLyBWOElzb2xhdGVkV29ybGRfaApJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy92OC9WOFByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJv
eHkuY3BwCShyZXZpc2lvbiA1MjY4MikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAKICNpbmNsdWRlICJWOERPTVdpbmRv
dy5oIgogI2luY2x1ZGUgIlY4SGlkZGVuUHJvcGVydHlOYW1lLmgiCiAjaW5jbHVkZSAiVjhJbmRl
eC5oIgotI2luY2x1ZGUgIlY4SXNvbGF0ZWRXb3JsZC5oIgorI2luY2x1ZGUgIlY4SXNvbGF0ZWRD
b250ZXh0LmgiCiAjaW5jbHVkZSAiV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmgiCiAKICNp
bmNsdWRlIDxhbGdvcml0aG0+CkBAIC0yNzAsNDMgKzI3MCw0NCBAQCB2b2lkIFY4UHJveHk6OmV2
YWx1YXRlSW5Jc29sYXRlZFdvcmxkKGluCiAgICAgd2luZG93U2hlbGwoKS0+aW5pdENvbnRleHRJ
Zk5lZWRlZCgpOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwotICAgIFY4SXNv
bGF0ZWRXb3JsZCogd29ybGQgPSAwOworICAgIFY4SXNvbGF0ZWRDb250ZXh0KiBpc29sYXRlZENv
bnRleHQgPSAwOwogCiAgICAgaWYgKHdvcmxkSUQgPiAwKSB7CiAgICAgICAgIElzb2xhdGVkV29y
bGRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2lzb2xhdGVkV29ybGRzLmZpbmQod29ybGRJRCk7CiAg
ICAgICAgIGlmIChpdGVyICE9IG1faXNvbGF0ZWRXb3JsZHMuZW5kKCkpIHsKLSAgICAgICAgICAg
IHdvcmxkID0gaXRlci0+c2Vjb25kOworICAgICAgICAgICAgaXNvbGF0ZWRDb250ZXh0ID0gaXRl
ci0+c2Vjb25kOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgd29ybGQgPSBuZXcgVjhJ
c29sYXRlZFdvcmxkKHRoaXMsIGV4dGVuc2lvbkdyb3VwKTsKLSAgICAgICAgICAgIGlmICh3b3Js
ZC0+Y29udGV4dCgpLklzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIGRlbGV0ZSB3b3JsZDsK
KyAgICAgICAgICAgIGlzb2xhdGVkQ29udGV4dCA9IG5ldyBWOElzb2xhdGVkQ29udGV4dCh0aGlz
LCBleHRlbnNpb25Hcm91cCk7CisgICAgICAgICAgICBpZiAoaXNvbGF0ZWRDb250ZXh0LT5jb250
ZXh0KCkuSXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgZGVsZXRlIGlzb2xhdGVkQ29udGV4
dDsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IG1faXNvbGF0ZWRXb3JsZHMuc2V0KHdvcmxkSUQsIHdvcmxkKTsKKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgY2hhbmdlIHRoaXMgdG8gdXNpbmcgd2luZG93IHNoZWxscyB0byBtYXRj
aCBKU0MuCisgICAgICAgICAgICBtX2lzb2xhdGVkV29ybGRzLnNldCh3b3JsZElELCBpc29sYXRl
ZENvbnRleHQpOwogCiAgICAgICAgICAgICAvLyBTZXR1cCBjb250ZXh0IGlkIGZvciBKUyBkZWJ1
Z2dlci4KLSAgICAgICAgICAgIGlmICghc2V0SW5qZWN0ZWRTY3JpcHRDb250ZXh0RGVidWdJZCh3
b3JsZC0+Y29udGV4dCgpKSkgeworICAgICAgICAgICAgaWYgKCFzZXRJbmplY3RlZFNjcmlwdENv
bnRleHREZWJ1Z0lkKGlzb2xhdGVkQ29udGV4dC0+Y29udGV4dCgpKSkgewogICAgICAgICAgICAg
ICAgIG1faXNvbGF0ZWRXb3JsZHMudGFrZSh3b3JsZElEKTsKLSAgICAgICAgICAgICAgICBkZWxl
dGUgd29ybGQ7CisgICAgICAgICAgICAgICAgZGVsZXRlIGlzb2xhdGVkQ29udGV4dDsKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9IGVsc2Ug
ewotICAgICAgICB3b3JsZCA9IG5ldyBWOElzb2xhdGVkV29ybGQodGhpcywgZXh0ZW5zaW9uR3Jv
dXApOwotICAgICAgICBpZiAod29ybGQtPmNvbnRleHQoKS5Jc0VtcHR5KCkpIHsKLSAgICAgICAg
ICAgIGRlbGV0ZSB3b3JsZDsKKyAgICAgICAgaXNvbGF0ZWRDb250ZXh0ID0gbmV3IFY4SXNvbGF0
ZWRDb250ZXh0KHRoaXMsIGV4dGVuc2lvbkdyb3VwKTsKKyAgICAgICAgaWYgKGlzb2xhdGVkQ29u
dGV4dC0+Y29udGV4dCgpLklzRW1wdHkoKSkgeworICAgICAgICAgICAgZGVsZXRlIGlzb2xhdGVk
Q29udGV4dDsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KIAotICAgIHY4
OjpMb2NhbDx2ODo6Q29udGV4dD4gY29udGV4dCA9IHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5l
dyh3b3JsZC0+Y29udGV4dCgpKTsKKyAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGNvbnRleHQg
PSB2ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXcoaXNvbGF0ZWRDb250ZXh0LT5jb250ZXh0KCkp
OwogICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0X3Njb3BlKGNvbnRleHQpOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc291cmNlcy5zaXplKCk7ICsraSkKICAgICAgIGV2YWx1YXRl
KHNvdXJjZXNbaV0sIDApOwogCiAgICAgaWYgKHdvcmxkSUQgPT0gMCkKLSAgICAgIHdvcmxkLT5k
ZXN0cm95KCk7CisgICAgICBpc29sYXRlZENvbnRleHQtPmRlc3Ryb3koKTsKIH0KIAogLy8gRklY
TUU6IFdlIHNob3VsZCByZW1vdmUgdGhpcyBmdW5jdGlvbiEKQEAgLTcwOCw4ICs3MDksOCBAQCB2
ODo6TG9jYWw8djg6OkNvbnRleHQ+IFY4UHJveHk6OmNvbnRleHQoCiAgICAgaWYgKGNvbnRleHQu
SXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gdjg6OkxvY2FsPHY4OjpDb250ZXh0PigpOwogCi0g
ICAgaWYgKFY4SXNvbGF0ZWRXb3JsZCogd29ybGQgPSBWOElzb2xhdGVkV29ybGQ6OmdldEVudGVy
ZWQoKSkgewotICAgICAgICBjb250ZXh0ID0gdjg6OkxvY2FsPHY4OjpDb250ZXh0Pjo6TmV3KHdv
cmxkLT5jb250ZXh0KCkpOworICAgIGlmIChWOElzb2xhdGVkQ29udGV4dCogaXNvbGF0ZWRDb250
ZXh0ID0gVjhJc29sYXRlZENvbnRleHQ6OmdldEVudGVyZWQoKSkgeworICAgICAgICBjb250ZXh0
ID0gdjg6OkxvY2FsPHY4OjpDb250ZXh0Pjo6TmV3KGlzb2xhdGVkQ29udGV4dC0+Y29udGV4dCgp
KTsKICAgICAgICAgaWYgKGZyYW1lICE9IFY4UHJveHk6OnJldHJpZXZlRnJhbWUoY29udGV4dCkp
CiAgICAgICAgICAgICByZXR1cm4gdjg6OkxvY2FsPHY4OjpDb250ZXh0PigpOwogICAgIH0KQEAg
LTcxOSw4ICs3MjAsOCBAQCB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IFY4UHJveHk6OmNvbnRleHQo
CiAKIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gVjhQcm94eTo6Y29udGV4dCgpCiB7Ci0gICAgaWYg
KFY4SXNvbGF0ZWRXb3JsZCogd29ybGQgPSBWOElzb2xhdGVkV29ybGQ6OmdldEVudGVyZWQoKSkg
ewotICAgICAgICBSZWZQdHI8U2hhcmVkUGVyc2lzdGVudDx2ODo6Q29udGV4dD4gPiBjb250ZXh0
ID0gd29ybGQtPnNoYXJlZENvbnRleHQoKTsKKyAgICBpZiAoVjhJc29sYXRlZENvbnRleHQqIGlz
b2xhdGVkQ29udGV4dCA9IFY4SXNvbGF0ZWRDb250ZXh0OjpnZXRFbnRlcmVkKCkpIHsKKyAgICAg
ICAgUmVmUHRyPFNoYXJlZFBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+ID4gY29udGV4dCA9IGlzb2xh
dGVkQ29udGV4dC0+c2hhcmVkQ29udGV4dCgpOwogICAgICAgICBpZiAobV9mcmFtZSAhPSBWOFBy
b3h5OjpyZXRyaWV2ZUZyYW1lKGNvbnRleHQtPmdldCgpKSkKICAgICAgICAgICAgIHJldHVybiB2
ODo6TG9jYWw8djg6OkNvbnRleHQ+KCk7CiAgICAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6OkNv
bnRleHQ+OjpOZXcoY29udGV4dC0+Z2V0KCkpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9W
OFByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmgJKHJl
dmlzaW9uIDUyNjgyKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU5LDcgKzU5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAgICAgY2xhc3MgU3RyaW5nOwogICAgIGNsYXNzIFY4RXZl
bnRMaXN0ZW5lcjsKLSAgICBjbGFzcyBWOElzb2xhdGVkV29ybGQ7CisgICAgY2xhc3MgVjhJc29s
YXRlZENvbnRleHQ7CiAgICAgY2xhc3MgV29ybGRDb250ZXh0SGFuZGxlOwogCiAgICAgLy8gRklY
TUU6IHVzZSBzdGFuZGFyZCBsb2dnaW5nIGZhY2lsaXRpZXMgaW4gV2ViQ29yZS4KQEAgLTQwNiw3
ICs0MDYsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBOb3RlOiBhbHRob3Vn
aCB0aGUgcG9pbnRlciBpcyByYXcsIHRoZSBpbnN0YW5jZSBpcyBrZXB0IGFsaXZlIGJ5IGEgc3Ry
b25nCiAgICAgICAgIC8vIHJlZmVyZW5jZSB0byB0aGUgdjggY29udGV4dCBpdCBjb250YWlucywg
d2hpY2ggaXMgbm90IG1hZGUgd2VhayB1bnRpbCB3ZQogICAgICAgICAvLyBjYWxsIHdvcmxkLT5k
ZXN0cm95KCkuCi0gICAgICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFY4SXNvbGF0ZWRXb3JsZCo+
IElzb2xhdGVkV29ybGRNYXA7CisgICAgICAgIC8vCisgICAgICAgIC8vIEZJWE1FOiBXZSB3YW50
IHRvIGV2ZW50dWFsbHkgYmUgaG9sZGluZyB3aW5kb3cgc2hlbGxzIGluc3RlYWQgb2YgdGhlCisg
ICAgICAgIC8vICAgICAgICBJc29sYXRlZENvbnRleHQgZGlyZWN0bHkuCisgICAgICAgIHR5cGVk
ZWYgSGFzaE1hcDxpbnQsIFY4SXNvbGF0ZWRDb250ZXh0Kj4gSXNvbGF0ZWRXb3JsZE1hcDsKICAg
ICAgICAgSXNvbGF0ZWRXb3JsZE1hcCBtX2lzb2xhdGVkV29ybGRzOwogICAgIH07CiAKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvdjgvV29ybGRDb250ZXh0SGFuZGxlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmxkQ29udGV4dEhhbmRsZS5jcHAJKHJldmlzaW9uIDUy
NjgyKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JsZENvbnRleHRIYW5kbGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiV29ybGRDb250ZXh0SGFuZGxlLmgiCiAKLSNpbmNsdWRlICJWOElzb2xhdGVkV29ybGQuaCIK
KyNpbmNsdWRlICJWOElzb2xhdGVkQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTQxLDggKzQxLDggQEAgV29ybGRDb250ZXh0SGFuZGxlOjpXb3JsZENvbnRleHRIYW5kbGUo
VwogICAgIGlmICh3b3JsZFRvVXNlID09IFVzZU1haW5Xb3JsZCkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKFY4SXNvbGF0ZWRXb3JsZCogd29ybGQgPSBWOElzb2xhdGVkV29ybGQ6OmdldEVu
dGVyZWQoKSkKLSAgICAgICAgbV9jb250ZXh0ID0gd29ybGQtPnNoYXJlZENvbnRleHQoKTsKKyAg
ICBpZiAoVjhJc29sYXRlZENvbnRleHQqIGNvbnRleHQgPSBWOElzb2xhdGVkQ29udGV4dDo6Z2V0
RW50ZXJlZCgpKQorICAgICAgICBtX2NvbnRleHQgPSBjb250ZXh0LT5zaGFyZWRDb250ZXh0KCk7
CiB9CiAKIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gV29ybGRDb250ZXh0SGFuZGxlOjphZGp1c3Rl
ZENvbnRleHQoVjhQcm94eSogcHJveHkpIGNvbnN0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45719</attachid>
            <date>2009-12-31 10:45:22 -0800</date>
            <delta_ts>2009-12-31 11:18:30 -0800</delta_ts>
            <desc>Patch with style fixes</desc>
            <filename>bug-33087-20091231104520.patch</filename>
            <type>text/plain</type>
            <size>54825</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MjY4MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjAgQEAKKzIwMDktMTItMzEgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbVjhd
IFNlcGFyYXRlIERPTVdyYXBwZXJXb3JsZCBmcm9tIFY4SXNvbGF0ZWRXb3JsZAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzMwODcKKworICAgICAgICBU
aGlzIGNoYW5nZSBzZXBhcmF0ZSBET01XcmFwcGVyV29ybGQgYW5kIElzb2xhdGVkV29ybGQgZnJv
bQorICAgICAgICBWOElzb2xhdGVkV29ybGQuICBJJ3ZlIGFsc28gcmVuYW1lZCBWOElzb2xhdGVk
V29ybGQgdG8KKyAgICAgICAgVjhJc29sYXRlZENvbnRleHQgaW4gcHJlcGFyYXRpb24gZm9yIGhh
dmluZyBtb3JlIHRoYW4gb25lIGNvbnRleHQgaW4gYQorICAgICAgICBzaW5nbGUgaXNvbGF0ZWQg
d29ybGQuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtb3ZlcyB1cyBjbG9zZXIgdG8gdHdvIGdvYWxz
OgorICAgICAgICAxKSBNYXRjaGluZyB0aGUgc3RydWN0dXJlIG9mIHRoZSBKU0MgaW1wbGVtZW50
YXRpb24gb2YgaXNvbGF0ZWQgd29ybGRzLgorICAgICAgICAyKSBMZXR0aW5nIHNjcmlwdHMgcnVu
bmluZyBpbiBpc29sYXRlZCBjb250ZXh0cyBzZWUgaW50byBvdGhlciBpZnJhbWVzCisgICAgICAg
ICAgICh3aGljaCByZXF1aXJlcyBoYXZpbmcgbW9yZSB0aGFuIG9uZSBjb250ZXh0IGluIGFuIGlz
b2xhdGVkIHdvcmxkLikKKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9ET01XcmFwcGVyV29ybGQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRP
TVdyYXBwZXJXb3JsZDo6RE9NV3JhcHBlcldvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6Om1haW5U
aHJlYWROb3JtYWxXb3JsZCk6CisgICAgICAgICogYmluZGluZ3MvdjgvRE9NV3JhcHBlcldvcmxk
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RE9NV3JhcHBlcldvcmxkOjpjcmVhdGUpOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L0lzb2xhdGVkV29ybGQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6Oklzb2xhdGVkV29ybGQ6Oklzb2xhdGVkV29ybGQpOgorICAgICAgICAoV2ViQ29y
ZTo6SXNvbGF0ZWRXb3JsZDo6fklzb2xhdGVkV29ybGQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L0lzb2xhdGVkV29ybGQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJc29sYXRlZFdvcmxk
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SXNvbGF0ZWRXb3JsZDo6Y291bnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SXNvbGF0ZWRXb3JsZDo6ZG9tRGF0YVN0b3JlKToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9NYWluVGhyZWFkRE9NRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNYWlu
VGhyZWFkRE9NRGF0YTo6Z2V0TWFpblRocmVhZFN0b3JlKToKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xs
ZXI6OmN1cnJlbnRTY3JpcHRTdGF0ZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0U3Rh
dGUuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdFN0YXRlLmg6CisgICAgICAgICog
YmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHA6CisgICAgICAgICogYmluZGluZ3Mvdjgv
VjhET01XcmFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6aW5zdGFu
dGlhdGVWOE9iamVjdCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQu
Y3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRXb3JsZC5jcHAu
CisgICAgICAgIChXZWJDb3JlOjpWOElzb2xhdGVkQ29udGV4dDo6Y29udGV4dFdlYWtSZWZlcmVu
Y2VDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpWOElzb2xhdGVkQ29udGV4dDo6VjhJc29s
YXRlZENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VjhJc29sYXRlZENvbnRleHQ6OmRlc3Ry
b3kpOgorICAgICAgICAoV2ViQ29yZTo6VjhJc29sYXRlZENvbnRleHQ6On5WOElzb2xhdGVkQ29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpWOElzb2xhdGVkQ29udGV4dDo6c2NyaXB0U3RhdGUp
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRDb250ZXh0Lmg6IENvcGllZCBmcm9t
IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZFdvcmxkLmguCisgICAgICAgIChXZWJDb3Jl
OjpWOElzb2xhdGVkQ29udGV4dDo6Z2V0RW50ZXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpWOElz
b2xhdGVkQ29udGV4dDo6d29ybGQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRX
b3JsZC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3MvdjgvVjhJc29sYXRlZFdvcmxk
Lmg6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3MvdjgvVjhQcm94eS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpWOFByb3h5OjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCk6CisgICAgICAgIChX
ZWJDb3JlOjpWOFByb3h5Ojpjb250ZXh0KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFByb3h5
Lmg6CisgICAgICAgICogYmluZGluZ3MvdjgvV29ybGRDb250ZXh0SGFuZGxlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldvcmxkQ29udGV4dEhhbmRsZTo6V29ybGRDb250ZXh0SGFuZGxlKToKKwog
MjAwOS0xMi0zMSAgTGFzemxvIEdvbWJvcyAgPGxhc3psby4xLmdvbWJvc0Bub2tpYS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCkluZGV4OiBX
ZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQko
cmV2aXNpb24gNTI2ODIpCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpA
QCAtNzUyLDYgKzc1MiwxMCBAQAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0RPTURhdGFTdG9y
ZS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0RPTURhdGFTdG9yZS5oJywKICAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9ET01PYmplY3RzSW5jbHVkZS5oJywKKyAgICAgICAgICAgICdi
aW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92
OC9ET01XcmFwcGVyV29ybGQuaCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvSXNvbGF0ZWRX
b3JsZC5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0lzb2xhdGVkV29ybGQuaCcsCiAg
ICAgICAgICAgICAnYmluZGluZ3MvdjgvTWFpblRocmVhZERPTURhdGEuY3BwJywKICAgICAgICAg
ICAgICdiaW5kaW5ncy92OC9NYWluVGhyZWFkRE9NRGF0YS5oJywKICAgICAgICAgICAgICdiaW5k
aW5ncy92OC9OUFY4T2JqZWN0LmNwcCcsCkBAIC04MjEsOCArODI1LDggQEAKICAgICAgICAgICAg
ICdiaW5kaW5ncy92OC9WOEhpZGRlblByb3BlcnR5TmFtZS5oJywKICAgICAgICAgICAgICdiaW5k
aW5ncy92OC9WOEluZGV4LmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhJbmRleC5o
JywKLSAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOElzb2xhdGVkV29ybGQuY3BwJywKLSAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9WOElzb2xhdGVkV29ybGQuaCcsCisgICAgICAgICAgICAnYmlu
ZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQuY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92
OC9WOElzb2xhdGVkQ29udGV4dC5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOExhenlF
dmVudExpc3RlbmVyLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRM
aXN0ZW5lci5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOE5QT2JqZWN0LmNwcCcsCklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVdyYXBwZXJXb3JsZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuY3BwCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRPTVdyYXBwZXJX
b3JsZC5oIgorCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9U
aHJlYWRpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitET01XcmFwcGVyV29ybGQ6OkRP
TVdyYXBwZXJXb3JsZCgpCit7CisgICAgLy8gVGhpcyBjbGFzcyBpcyBwcmV0dHkgYm9yaW5nLCBo
dWg/Cit9CisKK0RPTVdyYXBwZXJXb3JsZCogbWFpblRocmVhZE5vcm1hbFdvcmxkKCkKK3sKKyAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmVmUHRy
PERPTVdyYXBwZXJXb3JsZD4sIGNhY2hlZE5vcm1hbFdvcmxkLCAoRE9NV3JhcHBlcldvcmxkOjpj
cmVhdGUoKSkpOworICAgIHJldHVybiBjYWNoZWROb3JtYWxXb3JsZC5nZXQoKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVy
V29ybGQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVdyYXBwZXJXb3Js
ZC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRE9NV3JhcHBlcldvcmxkX2gK
KyNkZWZpbmUgRE9NV3JhcHBlcldvcmxkX2gKKworI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVGhpcyBjbGFzcyByZXByZXNlbnQgYSBjb2xsZWN0
aW9uIG9mIERPTSB3cmFwcGVycyBmb3IgYSBzcGVjaWZpYyB3b3JsZC4KKy8vIFRoZSBiYXNlIGNs
YXNzIGlzIHByZXR0eSBib3JpbmcgYmVjYXVzZSB0aGUgd3JhcHBlcnMgYXJlIGFjdHVhbGx5IHN0
b3JlZAorLy8gc3RhdGljYWxseSBpbiBWOERPTU1hcCBhbmQgZ2FyYmFnZSBjb2xsZWN0ZWQgYnkg
VjggaXRzZWxmLgorY2xhc3MgRE9NV3JhcHBlcldvcmxkIDogcHVibGljIFJlZkNvdW50ZWQ8RE9N
V3JhcHBlcldvcmxkPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RE9NV3JhcHBl
cldvcmxkPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgRE9NV3JhcHBlcldvcmxkKCkp
OyB9CisKK3Byb3RlY3RlZDoKKyAgICBET01XcmFwcGVyV29ybGQoKTsKK307CisKK0RPTVdyYXBw
ZXJXb3JsZCogbWFpblRocmVhZE5vcm1hbFdvcmxkKCk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIERPTVdyYXBwZXJXb3JsZF9oCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L3Y4L0lzb2xhdGVkV29ybGQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvdjgv
SXNvbGF0ZWRXb3JsZC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L0lz
b2xhdGVkV29ybGQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIklzb2xhdGVkV29ybGQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitpbnQgSXNvbGF0ZWRXb3JsZDo6aXNvbGF0ZWRXb3JsZENvdW50ID0gMDsKKworSXNvbGF0
ZWRXb3JsZDo6SXNvbGF0ZWRXb3JsZCgpCit7CisgICAgKytpc29sYXRlZFdvcmxkQ291bnQ7Cit9
CisKK0lzb2xhdGVkV29ybGQ6On5Jc29sYXRlZFdvcmxkKCkKK3sKKyAgICAtLWlzb2xhdGVkV29y
bGRDb3VudDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy92OC9Jc29sYXRlZFdvcmxkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92
OC9Jc29sYXRlZFdvcmxkLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L0lz
b2xhdGVkV29ybGQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSXNvbGF0
ZWRXb3JsZF9oCisjZGVmaW5lIElzb2xhdGVkV29ybGRfaAorCisjaW5jbHVkZSAiRE9NV3JhcHBl
cldvcmxkLmgiCisjaW5jbHVkZSAiVjhET01NYXAuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CisvLyBBbiBET01XcmFwcGVyV29ybGQgb3RoZXIgdGhhbiB0aGUgdGhyZWFkJ3Mgbm9ybWFsIHdv
cmxkLgorY2xhc3MgSXNvbGF0ZWRXb3JsZCA6IHB1YmxpYyBET01XcmFwcGVyV29ybGQgeworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElzb2xhdGVkV29ybGQ+IGNyZWF0ZSgpIHsgcmV0
dXJuIGFkb3B0UmVmKG5ldyBJc29sYXRlZFdvcmxkKCkpOyB9CisgICAgc3RhdGljIGludCBjb3Vu
dCgpIHsgcmV0dXJuIGlzb2xhdGVkV29ybGRDb3VudDsgfQorCisgICAgRE9NRGF0YVN0b3JlKiBk
b21EYXRhU3RvcmUoKSBjb25zdCB7IHJldHVybiBtX2RvbURhdGFTdG9yZS5nZXRTdG9yZSgpOyB9
CisKK3Byb3RlY3RlZDoKKyAgICBJc29sYXRlZFdvcmxkKCk7CisgICAgfklzb2xhdGVkV29ybGQo
KTsKKworcHJpdmF0ZToKKyAgICAvLyBUaGUgYmFja2luZyBzdG9yZSBmb3IgdGhlIGlzb2xhdGVk
IHdvcmxkJ3MgRE9NIHdyYXBwZXJzLiAgVGhpcyBjbGFzcworICAgIC8vIGRvZXNuJ3QgaGF2ZSB2
aXNpYmlsaXR5IGludG8gdGhlIHdyYXBwZXJzLiAgVGhpcyBoYW5kbGUgc2ltcGx5IGhlbHBzCisg
ICAgLy8gbWFuYWdlIHRoZWlyIGxpZmV0aW1lLgorICAgIERPTURhdGFTdG9yZUhhbmRsZSBtX2Rv
bURhdGFTdG9yZTsKKworICAgIHN0YXRpYyBpbnQgaXNvbGF0ZWRXb3JsZENvdW50OworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gSXNvbGF0ZWRXb3JsZF9oCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L01haW5UaHJlYWRET01EYXRhLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL3Y4L01haW5UaHJlYWRET01EYXRhLmNwcAkocmV2aXNpb24gNTI2
ODIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L01haW5UaHJlYWRET01EYXRhLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
Ik1haW5UaHJlYWRET01EYXRhLmgiCiAKLSNpbmNsdWRlICJWOElzb2xhdGVkV29ybGQuaCIKKyNp
bmNsdWRlICJWOElzb2xhdGVkQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTUzLDkgKzUzLDkgQEAgRE9NRGF0YVN0b3JlJiBNYWluVGhyZWFkRE9NRGF0YTo6Z2V0TWFpbgog
ICAgIC8vIHNvIHRoYXQgaXQgY2FuIGJlIGlubGluZWQgYnkgZ2V0Q3VycmVudE1haW5UaHJlYWRT
dG9yZSwgd2hpY2ggaXMKICAgICAvLyBhIGhvdCBzcG90IGluIERyb21hZW8gRE9NIHRlc3RzLgog
ICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKLSAgICBWOElzb2xhdGVkV29ybGQqIHdv
cmxkID0gVjhJc29sYXRlZFdvcmxkOjpnZXRFbnRlcmVkKCk7Ci0gICAgaWYgKFVOTElLRUxZKHdv
cmxkICE9IDApKQotICAgICAgICByZXR1cm4gKndvcmxkLT5nZXRET01EYXRhU3RvcmUoKTsKKyAg
ICBWOElzb2xhdGVkQ29udGV4dCogY29udGV4dCA9IFY4SXNvbGF0ZWRDb250ZXh0OjpnZXRFbnRl
cmVkKCk7CisgICAgaWYgKFVOTElLRUxZKGNvbnRleHQpKQorICAgICAgICByZXR1cm4gKmNvbnRl
eHQtPndvcmxkKCktPmRvbURhdGFTdG9yZSgpOwogICAgIHJldHVybiBtX2RlZmF1bHRTdG9yZTsK
IH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCShyZXZp
c2lvbiA1MjY4MikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAKICNpbmNsdWRlICJTZXR0aW5ncy5oIgog
I2luY2x1ZGUgIlY4QmluZGluZy5oIgogI2luY2x1ZGUgIlY4QmluZGluZ1N0YXRlLmgiCi0jaW5j
bHVkZSAiVjhJc29sYXRlZFdvcmxkLmgiCisjaW5jbHVkZSAiVjhJc29sYXRlZENvbnRleHQuaCIK
ICNpbmNsdWRlICJWOE5QT2JqZWN0LmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgogI2luY2x1ZGUg
IldpZGdldC5oIgpAQCAtMzc0LDggKzM3NCw4IEBAIFNjcmlwdFN0YXRlKiBTY3JpcHRDb250cm9s
bGVyOjptYWluV29ybGQKIAogU2NyaXB0U3RhdGUqIFNjcmlwdENvbnRyb2xsZXI6OmN1cnJlbnRT
Y3JpcHRTdGF0ZSgpCiB7Ci0gICAgaWYgKFY4SXNvbGF0ZWRXb3JsZCogd29ybGQgPSBWOElzb2xh
dGVkV29ybGQ6OmdldEVudGVyZWQoKSkKLSAgICAgICAgcmV0dXJuIHdvcmxkLT5zY3JpcHRTdGF0
ZSgpOworICAgIGlmIChWOElzb2xhdGVkQ29udGV4dCogY29udGV4dCA9IFY4SXNvbGF0ZWRDb250
ZXh0OjpnZXRFbnRlcmVkKCkpCisgICAgICAgIHJldHVybiBjb250ZXh0LT5zY3JpcHRTdGF0ZSgp
OwogICAgIEZyYW1lKiBmcmFtZSA9IFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JDdXJyZW50Q29u
dGV4dCgpOwogICAgIEFTU0VSVChmcmFtZSk7CiAgICAgcmV0dXJuIGZyYW1lLT5zY3JpcHQoKS0+
bWFpbldvcmxkU2NyaXB0U3RhdGUoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0
U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0U3RhdGUu
Y3BwCShyZXZpc2lvbiA1MjY4MikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0U3RhdGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MywxMSArNzMsNCBAQCBTY3JpcHRTdGF0ZSogc2NyaXB0
U3RhdGVGcm9tUGFnZShET01XcmFwCiAgICAgcmV0dXJuIHBhZ2UtPm1haW5GcmFtZSgpLT5zY3Jp
cHQoKS0+bWFpbldvcmxkU2NyaXB0U3RhdGUoKTsKIH0KIAotLy8gRklYTUU6IFN0dWIgbWV0aG9k
IHNvIHdlIGNvbXBpbGUuICBDdXJyZW50bHkgY2FsbGVkIGZyb20gRnJhbWVMb2FkZXIuY3BwLgot
RE9NV3JhcHBlcldvcmxkKiBtYWluVGhyZWFkTm9ybWFsV29ybGQoKQotewotICAgIERFRklORV9T
VEFUSUNfTE9DQUwoRE9NV3JhcHBlcldvcmxkLCBvbmVXb3JsZCwgKCkpOwotICAgIHJldHVybiAm
b25lV29ybGQ7Ci19Ci0KIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0U3RhdGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFN0YXRlLmgJKHJldmlz
aW9uIDUyNjgyKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRTdGF0ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaWZuZGVmIFNjcmlwdFN0YXRlX2gKICNkZWZpbmUg
U2NyaXB0U3RhdGVfaAogCisjaW5jbHVkZSAiRE9NV3JhcHBlcldvcmxkLmgiCiAjaW5jbHVkZSA8
djguaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgpAQCAtNzAsMTQgKzcxLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIFNjcmlw
dFN0YXRlKiBzY3JpcHRTdGF0ZUZyb21Ob2RlKERPTVdyYXBwZXJXb3JsZCosIE5vZGUqKTsKICAg
ICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGVGcm9tUGFnZShET01XcmFwcGVyV29ybGQqLCBQYWdl
Kik7CiAKLSAgICBET01XcmFwcGVyV29ybGQqIG1haW5UaHJlYWROb3JtYWxXb3JsZCgpOwogICAg
IGlubGluZSBET01XcmFwcGVyV29ybGQqIGRlYnVnZ2VyV29ybGQoKSB7IHJldHVybiBtYWluVGhy
ZWFkTm9ybWFsV29ybGQoKTsgfQogICAgIGlubGluZSBET01XcmFwcGVyV29ybGQqIHBsdWdpbldv
cmxkKCkgeyByZXR1cm4gbWFpblRocmVhZE5vcm1hbFdvcmxkKCk7IH0KIAotICAgIC8vIER1bW15
IGNsYXNzIHRvIGF2b2lkIGEgYnVuY2ggb2YgaWZkZWYncyBpbiBXZWJDb3JlLgotICAgIGNsYXNz
IERPTVdyYXBwZXJXb3JsZCA6IHB1YmxpYyBSZWZDb3VudGVkPERPTVdyYXBwZXJXb3JsZD4gewot
ICAgIH07Ci0KIH0KIAogI2VuZGlmIC8vIFNjcmlwdFN0YXRlX2gKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmNwcAkocmV2aXNpb24gNTI2ODIpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3
ICs1MSw2IEBACiAjaW5jbHVkZSAiVjhET01XaW5kb3cuaCIKICNpbmNsdWRlICJWOEhpZGRlblBy
b3BlcnR5TmFtZS5oIgogI2luY2x1ZGUgIlY4SW5kZXguaCIKLSNpbmNsdWRlICJWOElzb2xhdGVk
V29ybGQuaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCiAjaW5jbHVkZSAiV29ya2VyQ29udGV4dEV4
ZWN1dGlvblByb3h5LmgiCiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAJ
KHJldmlzaW9uIDUyNjgyKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBACiAjaW5jbHVkZSAiVjhFdmVudExpc3Rl
bmVyTGlzdC5oIgogI2luY2x1ZGUgIlY4SFRNTENvbGxlY3Rpb24uaCIKICNpbmNsdWRlICJWOElu
ZGV4LmgiCi0jaW5jbHVkZSAiVjhJc29sYXRlZFdvcmxkLmgiCisjaW5jbHVkZSAiVjhJc29sYXRl
ZENvbnRleHQuaCIKICNpbmNsdWRlICJWOExvY2F0aW9uLmgiCiAjaW5jbHVkZSAiVjhOb2RlTGlz
dC5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKQEAgLTc5MCwxMSArNzkwLDEyIEBAIHY4OjpMb2Nh
bDx2ODo6T2JqZWN0PiBWOERPTVdyYXBwZXI6Omluc3QKICAgICBpZiAoZGVzY3JpcHRvclR5cGUg
PT0gVjhDbGFzc0luZGV4OjpIVE1MQ09MTEVDVElPTiAmJiBzdGF0aWNfY2FzdDxIVE1MQ29sbGVj
dGlvbio+KGltcGwpLT50eXBlKCkgPT0gRG9jQWxsKQogICAgICAgICBkZXNjcmlwdG9yVHlwZSA9
IFY4Q2xhc3NJbmRleDo6SFRNTEFMTENPTExFQ1RJT047CiAKLSAgICBpZiAoVjhJc29sYXRlZFdv
cmxkOjpnZXRFbnRlcmVkKCkpIHsKKyAgICBpZiAoVjhJc29sYXRlZENvbnRleHQ6OmdldEVudGVy
ZWQoKSkgewogICAgICAgICAvLyBUaGlzIGVmZmVjdGl2ZWx5IGRpc2FibGVzIHRoZSB3cmFwcGVy
IGNhY2hlIGZvciBpc29sYXRlZCB3b3JsZHMuCiAgICAgICAgIHByb3h5ID0gMDsKICAgICAgICAg
Ly8gRklYTUU6IERvIHdlIG5lZWQgYSB3cmFwcGVyIGNhY2hlIGZvciB0aGUgaXNvbGF0ZWQgd29y
bGQ/ICBXZSBzaG91bGQKLSAgICAgICAgLy8gc2VlIGlmIHRoZSBwZXJmb3JtYW5jZSBnYWlucyBh
cmUgd29ydGggd2hpbGUuCisgICAgICAgIC8vICAgICAgICBzZWUgaWYgdGhlIHBlcmZvcm1hbmNl
IGdhaW5zIGFyZSB3b3J0aCB3aGlsZS4KKyAgICAgICAgLy8gV2UnbGwgZ2V0IG9uZSBvbmNlIHdl
IGdpdmUgdGhlIGlzb2xhdGVkIGNvbnRleHQgYSBwcm9wZXIgd2luZG93IHNoZWxsLgogICAgIH0g
ZWxzZSBpZiAoIXByb3h5KQogICAgICAgICBwcm94eSA9IFY4UHJveHk6OnJldHJpZXZlKCk7CiAK
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQuY3BwCShyZXZpc2lv
biA1MjY2NikJKGZyb20gV2ViQ29yZS9iaW5kaW5ncy92OC9WOElzb2xhdGVkV29ybGQuY3BwOjUy
NjY2KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOElzb2xhdGVkQ29udGV4dC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRl
ICJWOElzb2xhdGVkV29ybGQuaCIKKworI2luY2x1ZGUgPHY4Lmg+CisKKyNpbmNsdWRlICJGcmFt
ZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiSGFzaE1hcC5o
IgorI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJWOERPTVdpbmRvdy5o
IgorI2luY2x1ZGUgIlY4SGlkZGVuUHJvcGVydHlOYW1lLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworaW50IFY4SXNvbGF0ZWRXb3JsZDo6aXNvbGF0ZWRXb3JsZENvdW50ID0gMDsKKwordm9p
ZCBWOElzb2xhdGVkV29ybGQ6OmNvbnRleHRXZWFrUmVmZXJlbmNlQ2FsbGJhY2sodjg6OlBlcnNp
c3RlbnQ8djg6OlZhbHVlPiBvYmplY3QsIHZvaWQqIGlzb2xhdGVkX3dvcmxkKQoreworICAgIC8v
IE91ciBjb250ZXh0IGlzIGdvaW5nIGF3YXkuICBUaW1lIHRvIGNsZWFuIHVwIHRoZSB3b3JsZC4K
KyAgICBWOElzb2xhdGVkV29ybGQqIHdvcmxkID0gc3RhdGljX2Nhc3Q8VjhJc29sYXRlZFdvcmxk
Kj4oaXNvbGF0ZWRfd29ybGQpOworICAgIGRlbGV0ZSB3b3JsZDsKK30KKworVjhJc29sYXRlZFdv
cmxkOjpWOElzb2xhdGVkV29ybGQoVjhQcm94eSogcHJveHksIGludCBleHRlbnNpb25Hcm91cCkK
K3sKKyAgICArK2lzb2xhdGVkV29ybGRDb3VudDsKKworICAgIHY4OjpIYW5kbGVTY29wZSBzY29w
ZTsKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGNyZWF0aW5nIGEgbmV3IFY4RE9NV2luZG93
U2hlbGwgaGVyZSBpbnN0ZWFkIG9mIHJpcGluZyBvdXQgdGhlIGNvbnRleHQuCisgICAgbV9jb250
ZXh0ID0gU2hhcmVkUGVyc2lzdGVudDx2ODo6Q29udGV4dD46OmNyZWF0ZShwcm94eS0+d2luZG93
U2hlbGwoKS0+Y3JlYXRlTmV3Q29udGV4dCh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIGV4dGVu
c2lvbkdyb3VwKSk7CisgICAgaWYgKG1fY29udGV4dC0+Z2V0KCkuSXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyBSdW4gY29kZSBpbiB0aGUgbmV3IGNvbnRleHQuCisgICAgdjg6
OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRfc2NvcGUobV9jb250ZXh0LT5nZXQoKSk7CisKKyAgICBn
ZXRHbG9iYWxPYmplY3QobV9jb250ZXh0LT5nZXQoKSktPlNldFBvaW50ZXJJbkludGVybmFsRmll
bGQoVjhDdXN0b206OmtET01XaW5kb3dFbnRlcmVkSXNvbGF0ZWRXb3JsZEluZGV4LCB0aGlzKTsK
KworICAgIFY4RE9NV2luZG93U2hlbGw6Omluc3RhbGxIaWRkZW5PYmplY3RQcm90b3R5cGUobV9j
b250ZXh0LT5nZXQoKSk7CisgICAgLy8gRklYTUU6IFRoaXMgd2lsbCBnbyBhd2F5IG9uY2Ugd2Ug
aGF2ZSBhIHdpbmRvd1NoZWxsIGZvciB0aGUgaXNvbGF0ZWQgd29ybGQuCisgICAgcHJveHktPndp
bmRvd1NoZWxsKCktPmluc3RhbGxET01XaW5kb3cobV9jb250ZXh0LT5nZXQoKSwgcHJveHktPmZy
YW1lKCktPmRvbVdpbmRvdygpKTsKKworICAgIC8vIFVzaW5nIHRoZSBkZWZhdWx0IHNlY3VyaXR5
IHRva2VuIG1lYW5zIHRoYXQgdGhlIGNhbkFjY2VzcyBpcyBhbHdheXMKKyAgICAvLyBjYWxsZWQs
IHdoaWNoIGlzIHNsb3cuCisgICAgLy8gRklYTUU6IFVzZSB0b2tlbnMgd2hlcmUgcG9zc2libGUu
IFRoaXMgd2lsbCBtZWFuIGtlZXBpbmcgdHJhY2sgb2YgYWxsCisgICAgLy8gICAgICAgIGNyZWF0
ZWQgY29udGV4dHMgc28gdGhhdCB0aGV5IGNhbiBhbGwgYmUgdXBkYXRlZCB3aGVuIHRoZQorICAg
IC8vICAgICAgICBkb2N1bWVudCBkb21haW4KKyAgICAvLyAgICAgICAgY2hhbmdlcy4KKyAgICBt
X2NvbnRleHQtPmdldCgpLT5Vc2VEZWZhdWx0U2VjdXJpdHlUb2tlbigpOworCisgICAgcHJveHkt
PmZyYW1lKCktPmxvYWRlcigpLT5jbGllbnQoKS0+ZGlkQ3JlYXRlSXNvbGF0ZWRTY3JpcHRDb250
ZXh0KCk7Cit9CisKK3ZvaWQgVjhJc29sYXRlZFdvcmxkOjpkZXN0cm95KCkKK3sKKyAgICBtX2Nv
bnRleHQtPmdldCgpLk1ha2VXZWFrKHRoaXMsICZjb250ZXh0V2Vha1JlZmVyZW5jZUNhbGxiYWNr
KTsKK30KKworVjhJc29sYXRlZFdvcmxkOjp+VjhJc29sYXRlZFdvcmxkKCkKK3sKKyAgICAtLWlz
b2xhdGVkV29ybGRDb3VudDsKKyAgICBtX2NvbnRleHQtPmRpc3Bvc2VIYW5kbGUoKTsKK30KKwor
U2NyaXB0U3RhdGUqIFY4SXNvbGF0ZWRXb3JsZDo6c2NyaXB0U3RhdGUoKQoreworICAgIGlmICgh
bV9zY3JpcHRTdGF0ZSkgeworICAgICAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7CisgICAgICAg
IHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQgPSBtX2NvbnRleHQuZ2V0KCktPmdldCgp
OworICAgICAgICBtX3NjcmlwdFN0YXRlLnNldChuZXcgU2NyaXB0U3RhdGUoVjhQcm94eTo6cmV0
cmlldmVGcmFtZShjb250ZXh0KSwgY29udGV4dCkpOworICAgIH0KKyAgICByZXR1cm4gbV9zY3Jp
cHRTdGF0ZS5nZXQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOElzb2xhdGVkQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOElzb2xhdGVkQ29udGV4dC5jcHAJKHJldmlzaW9uIDUyNjY2KQorKysg
V2ViQ29yZS9iaW5kaW5ncy92OC9WOElzb2xhdGVkQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDcgKzMwLDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaW5jbHVkZSAiVjhJ
c29sYXRlZFdvcmxkLmgiCisjaW5jbHVkZSAiVjhJc29sYXRlZENvbnRleHQuaCIKIAogI2luY2x1
ZGUgPHY4Lmg+CiAKQEAgLTQzLDE5ICs0MywxNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LWludCBWOElzb2xhdGVkV29ybGQ6Omlzb2xhdGVkV29ybGRDb3VudCA9IDA7CiAKLXZvaWQgVjhJ
c29sYXRlZFdvcmxkOjpjb250ZXh0V2Vha1JlZmVyZW5jZUNhbGxiYWNrKHY4OjpQZXJzaXN0ZW50
PHY4OjpWYWx1ZT4gb2JqZWN0LCB2b2lkKiBpc29sYXRlZF93b3JsZCkKK3ZvaWQgVjhJc29sYXRl
ZENvbnRleHQ6OmNvbnRleHRXZWFrUmVmZXJlbmNlQ2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6
OlZhbHVlPiBvYmplY3QsIHZvaWQqIGlzb2xhdGVkQ29udGV4dCkKIHsKICAgICAvLyBPdXIgY29u
dGV4dCBpcyBnb2luZyBhd2F5LiAgVGltZSB0byBjbGVhbiB1cCB0aGUgd29ybGQuCi0gICAgVjhJ
c29sYXRlZFdvcmxkKiB3b3JsZCA9IHN0YXRpY19jYXN0PFY4SXNvbGF0ZWRXb3JsZCo+KGlzb2xh
dGVkX3dvcmxkKTsKLSAgICBkZWxldGUgd29ybGQ7CisgICAgVjhJc29sYXRlZENvbnRleHQqIGNv
bnRleHQgPSBzdGF0aWNfY2FzdDxWOElzb2xhdGVkQ29udGV4dCo+KGlzb2xhdGVkQ29udGV4dCk7
CisgICAgZGVsZXRlIGNvbnRleHQ7CiB9CiAKLVY4SXNvbGF0ZWRXb3JsZDo6VjhJc29sYXRlZFdv
cmxkKFY4UHJveHkqIHByb3h5LCBpbnQgZXh0ZW5zaW9uR3JvdXApCitWOElzb2xhdGVkQ29udGV4
dDo6VjhJc29sYXRlZENvbnRleHQoVjhQcm94eSogcHJveHksIGludCBleHRlbnNpb25Hcm91cCkK
KyAgICA6IG1fd29ybGQoSXNvbGF0ZWRXb3JsZDo6Y3JlYXRlKCkpCiB7Ci0gICAgKytpc29sYXRl
ZFdvcmxkQ291bnQ7Ci0KICAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7CiAgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBiZSBjcmVhdGluZyBhIG5ldyBWOERPTVdpbmRvd1NoZWxsIGhlcmUgaW5zdGVh
ZCBvZiByaXBpbmcgb3V0IHRoZSBjb250ZXh0LgogICAgIG1fY29udGV4dCA9IFNoYXJlZFBlcnNp
c3RlbnQ8djg6OkNvbnRleHQ+OjpjcmVhdGUocHJveHktPndpbmRvd1NoZWxsKCktPmNyZWF0ZU5l
d0NvbnRleHQodjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCBleHRlbnNpb25Hcm91cCkpOwpAQCAt
ODIsMTggKzgwLDE3IEBAIFY4SXNvbGF0ZWRXb3JsZDo6VjhJc29sYXRlZFdvcmxkKFY4UHJveHkK
ICAgICBwcm94eS0+ZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaWRDcmVhdGVJc29sYXRl
ZFNjcmlwdENvbnRleHQoKTsKIH0KIAotdm9pZCBWOElzb2xhdGVkV29ybGQ6OmRlc3Ryb3koKQor
dm9pZCBWOElzb2xhdGVkQ29udGV4dDo6ZGVzdHJveSgpCiB7CiAgICAgbV9jb250ZXh0LT5nZXQo
KS5NYWtlV2Vhayh0aGlzLCAmY29udGV4dFdlYWtSZWZlcmVuY2VDYWxsYmFjayk7CiB9CiAKLVY4
SXNvbGF0ZWRXb3JsZDo6flY4SXNvbGF0ZWRXb3JsZCgpCitWOElzb2xhdGVkQ29udGV4dDo6flY4
SXNvbGF0ZWRDb250ZXh0KCkKIHsKLSAgICAtLWlzb2xhdGVkV29ybGRDb3VudDsKICAgICBtX2Nv
bnRleHQtPmRpc3Bvc2VIYW5kbGUoKTsKIH0KIAotU2NyaXB0U3RhdGUqIFY4SXNvbGF0ZWRXb3Js
ZDo6c2NyaXB0U3RhdGUoKQorU2NyaXB0U3RhdGUqIFY4SXNvbGF0ZWRDb250ZXh0OjpzY3JpcHRT
dGF0ZSgpCiB7CiAgICAgaWYgKCFtX3NjcmlwdFN0YXRlKSB7CiAgICAgICAgIHY4OjpIYW5kbGVT
Y29wZSBzY29wZTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRDb250ZXh0LmgJ
KHJldmlzaW9uIDUyNjY2KQkoZnJvbSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRXb3Js
ZC5oOjUyNjY2KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOElzb2xhdGVkQ29udGV4dC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBWOElzb2xhdGVkV29ybGRfaAor
I2RlZmluZSBWOElzb2xhdGVkV29ybGRfaAorCisjaW5jbHVkZSA8djguaD4KKworI2luY2x1ZGUg
IlY4RE9NTWFwLmgiCisjaW5jbHVkZSAiVjhJbmRleC5oIgorI2luY2x1ZGUgIlY4UHJveHkuaCIK
KyNpbmNsdWRlICJWOFV0aWxpdGllcy5oIgorI2luY2x1ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIg
IC8vIGZvciBXZWJDb3JlOjpTY3JpcHRTb3VyY2VDb2RlCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworICAgIGNsYXNzIFY4UHJveHk7CisKKyAgICAvLyBWOElzb2xhdGVkV29ybGQKKyAgICAvLwor
ICAgIC8vIFY4SXNvbGF0ZWRXb3JsZCByZXByZXNlbnRzIGEgaXNvbGF0ZWQgZXhlY3V0aW9uIGVu
dmlyb25tZW50IGZvcgorICAgIC8vIEphdmFTY3JpcHQuICBFYWNoIGlzb2xhdGVkIHdvcmxkIGV4
ZWN1dGVzIGluIHBhcmFsbGVsIHdpdGggdGhlIG1haW4KKyAgICAvLyBKYXZhU2NyaXB0IHdvcmxk
LiAgQW4gaXNvbGF0ZWQgd29ybGQgaGFzIGFjY2VzcyB0byB0aGUgc2FtZSBET00gZGF0YQorICAg
IC8vIHN0cnVjdHVyZXMgYXMgdGhlIG1haW4gd29ybGQgYnV0IG5vbmUgb2YgdGhlIEphdmFTY3Jp
cHQgcG9pbnRlcnMuCisgICAgLy8KKyAgICAvLyBJdCBpcyBhbiBlcnJvciB0byBldmVyIHNoYXJl
IGEgSmF2YVNjcmlwdCBwb2ludGVyIGJldHdlZW4gdHdvIGlzb2xhdGVkCisgICAgLy8gd29ybGRz
IG9yIGJldHdlZW4gYW4gaXNvbGF0ZWQgd29ybGQgYW5kIHRoZSBtYWluIHdvcmxkLiAgQmVjYXVz
ZQorICAgIC8vIGlzb2xhdGVkIHdvcmxkcyBoYXZlIGFjY2VzcyB0byB0aGUgRE9NLCB0aGV5IG5l
ZWQgdGhlaXIgb3duIERPTSB3cmFwcGVycworICAgIC8vIHRvIGF2b2lkIGhhdmluZyBwb2ludGVy
cyB0byB0aGUgbWFpbiB3b3JsZCdzIERPTSB3cmFwcGVycyAod2hpY2ggYXJlCisgICAgLy8gSmF2
YVNjcmlwdCBvYmplY3RzKS4KKyAgICAvLworICAgIGNsYXNzIFY4SXNvbGF0ZWRXb3JsZCB7Cisg
ICAgcHVibGljOgorICAgICAgICAvLyBDcmVhdGVzIGFuIGlzb2xhdGVkIHdvcmxkLiBUbyBkZXN0
cm95IGl0LCBjYWxsIGRlc3Ryb3koKS4KKyAgICAgICAgLy8gVGhpcyB3aWxsIGRlbGV0ZSB0aGUg
aXNvbGF0ZWQgd29ybGQgd2hlbiB0aGUgY29udGV4dCBpdCBvd25zIGlzIEdDJ2QuCisgICAgICAg
IFY4SXNvbGF0ZWRXb3JsZChWOFByb3h5KiBwcm94eSwgaW50IGV4dGVuc2lvbkdyb3VwKTsKKyAg
ICAgICAgflY4SXNvbGF0ZWRXb3JsZCgpOworCisgICAgICAgIC8vIENhbGwgdGhpcyB0byBkZXN0
cm95IHRoZSBpc29sYXRlZCB3b3JsZC4gSXQgd2lsbCBiZSBkZWxldGVkIHNvbWV0aW1lCisgICAg
ICAgIC8vIGFmdGVyIHRoaXMgY2FsbCwgb25jZSBhbGwgc2NyaXB0IHJlZmVyZW5jZXMgdG8gdGhl
IHdvcmxkJ3MgY29udGV4dAorICAgICAgICAvLyBoYXZlIGJlZW4gZHJvcHBlZC4KKyAgICAgICAg
dm9pZCBkZXN0cm95KCk7CisKKyAgICAgICAgLy8gUmV0dXJucyB0aGUgaXNvbGF0ZWQgd29ybGQg
YXNzb2NpYXRlZCB3aXRoCisgICAgICAgIC8vIHY4OjpDb250ZXh0OjpHZXRFbnRlcmVkKCkuICBC
ZWNhdXNlIHdvcmxkcyBhcmUgaXNvbGF0ZWQsIHRoZSBlbnRpcmUKKyAgICAgICAgLy8gSmF2YVNj
cmlwdCBjYWxsIHN0YWNrIHNob3VsZCBiZSBmcm9tIHRoZSBzYW1lIGlzb2xhdGVkIHdvcmxkLgor
ICAgICAgICAvLyBSZXR1cm5zIE5VTEwgaWYgdGhlIGVudGVyZWQgY29udGV4dCBpcyBmcm9tIHRo
ZSBtYWluIHdvcmxkLgorICAgICAgICAvLworICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgZWRn
ZSBjYXNlcyB3aXRoIERPTSBtdXRhdGlvbiBldmVudHMgdGhhdCBtaWdodAorICAgICAgICAvLyB2
aW9sYXRlIHRoaXMgaW52YXJpYW50LgorICAgICAgICAvLworICAgICAgICBzdGF0aWMgVjhJc29s
YXRlZFdvcmxkKiBnZXRFbnRlcmVkKCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhpcyBp
cyBhIHRlbXBvcmFyeSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uICAgRXNzZW50aWFsbHksCisg
ICAgICAgICAgICAvLyBHZXRIaWRkZW5WYWx1ZSBpcyB0b28gc2xvdyBmb3IgdGhpcyBjb2RlIHBh
dGguICBXZSBuZWVkIHRvIGdldCB0aGUKKyAgICAgICAgICAgIC8vIFY4IHRlYW0gdG8gYWRkIGEg
cmVhbCBwcm9wZXJ0eSB0byB2ODo6Q29udGV4dCBmb3IgaXNvbGF0ZWQgd29ybGRzLgorICAgICAg
ICAgICAgLy8gVW50aWwgdGhlbiwgd2Ugb3B0aW1pemUgdGhlIGNvbW1vbiBjYXNlIG9mIG5vdCBo
YXZpbmcgYW55IGlzb2xhdGVkCisgICAgICAgICAgICAvLyB3b3JsZHMgYXQgYWxsLgorICAgICAg
ICAgICAgaWYgKCFpc29sYXRlZFdvcmxkQ291bnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgICAgICBpZiAoIXY4OjpDb250ZXh0OjpJbkNvbnRleHQoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFY4SXNv
bGF0ZWRXb3JsZCo+KGdldEdsb2JhbE9iamVjdCh2ODo6Q29udGV4dDo6R2V0RW50ZXJlZCgpKS0+
R2V0UG9pbnRlckZyb21JbnRlcm5hbEZpZWxkKFY4Q3VzdG9tOjprRE9NV2luZG93RW50ZXJlZElz
b2xhdGVkV29ybGRJbmRleCkpOworICAgICAgICB9CisKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6
Q29udGV4dD4gY29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dC0+Z2V0KCk7IH0KKyAgICAgICAg
UGFzc1JlZlB0cjxTaGFyZWRQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiA+IHNoYXJlZENvbnRleHQo
KSB7IHJldHVybiBtX2NvbnRleHQ7IH0KKworICAgICAgICBET01EYXRhU3RvcmUqIGdldERPTURh
dGFTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fZG9tRGF0YVN0b3JlLmdldFN0b3JlKCk7IH0KKwor
ICAgICAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUoKTsKKworICAgIHByaXZhdGU6CisgICAg
ICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGdldEdsb2JhbE9iamVjdCh2ODo6SGFu
ZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
djg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChjb250ZXh0LT5HbG9iYWwoKS0+R2V0UHJvdG90
eXBlKCkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gQ2FsbGVkIGJ5IHRoZSBnYXJiYWdlIGNv
bGxlY3RvciB3aGVuIG91ciBKYXZhU2NyaXB0IGNvbnRleHQgaXMgYWJvdXQKKyAgICAgICAgLy8g
dG8gYmUgZGVzdHJveWVkLgorICAgICAgICBzdGF0aWMgdm9pZCBjb250ZXh0V2Vha1JlZmVyZW5j
ZUNhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gb2JqZWN0LCB2b2lkKiBpc29sYXRl
ZF93b3JsZCk7CisKKyAgICAgICAgLy8gVGhlIHY4OjpDb250ZXh0IGZvciB0aGUgaXNvbGF0ZWQg
d29ybGQuICBUaGlzIG9iamVjdCBpcyBrZWVwIG9uIHRoZQorICAgICAgICAvLyBoZWFwIGFzIGxv
bmcgYXMgfG1fY29udGV4dHwgaGFzIG5vdCBiZWVuIGdhcmJhZ2UgY29sbGVjdGVkLgorICAgICAg
ICBSZWZQdHI8U2hhcmVkUGVyc2lzdGVudDx2ODo6Q29udGV4dD4gPiBtX2NvbnRleHQ7CisKKyAg
ICAgICAgLy8gVGhlIGJhY2tpbmcgc3RvcmUgZm9yIHRoZSBpc29sYXRlZCB3b3JsZCdzIERPTSB3
cmFwcGVycy4gIFRoaXMgY2xhc3MKKyAgICAgICAgLy8gZG9lc24ndCBoYXZlIHZpc2liaWxpdHkg
aW50byB0aGUgd3JhcHBlcnMuICBUaGlzIGhhbmRsZSBzaW1wbHkgaGVscHMKKyAgICAgICAgLy8g
bWFuYWdlIHRoZWlyIGxpZmV0aW1lLgorICAgICAgICBET01EYXRhU3RvcmVIYW5kbGUgbV9kb21E
YXRhU3RvcmU7CisKKyAgICAgICAgLy8gRklYTUU6IGdldCByaWQgb2YgcmVkdW5kYW50IG1fY29u
dGV4dCBmaWVsZC4gVGhlIGNvbnRleHQgY2FuIGJlIHJldHJpZXZlZCBmcm9tIHRoZSBTY3JpcHRT
dGF0ZS4KKyAgICAgICAgT3duUHRyPFNjcmlwdFN0YXRlPiBtX3NjcmlwdFN0YXRlOworCisgICAg
ICAgIHN0YXRpYyBpbnQgaXNvbGF0ZWRXb3JsZENvdW50OworICAgIH07CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFY4SXNvbGF0ZWRXb3JsZF9oCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy92OC9WOElzb2xhdGVkQ29udGV4dC5oCShyZXZpc2lvbiA1MjY2NikKKysrIFdlYkNv
cmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjgs
MTAwICsyOCw5MyBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFY4SXNvbGF0ZWRX
b3JsZF9oCi0jZGVmaW5lIFY4SXNvbGF0ZWRXb3JsZF9oCisjaWZuZGVmIFY4SXNvbGF0ZWRDb250
ZXh0X2gKKyNkZWZpbmUgVjhJc29sYXRlZENvbnRleHRfaAogCi0jaW5jbHVkZSA8djguaD4KLQot
I2luY2x1ZGUgIlY4RE9NTWFwLmgiCisjaW5jbHVkZSAiSXNvbGF0ZWRXb3JsZC5oIgorI2luY2x1
ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIgLy8gZm9yIFdlYkNvcmU6OlNjcmlwdFNvdXJjZUNvZGUK
ICNpbmNsdWRlICJWOEluZGV4LmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgogI2luY2x1ZGUgIlY4
VXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiU2NyaXB0U291cmNlQ29kZS5oIiAgLy8gZm9yIFdlYkNv
cmU6OlNjcmlwdFNvdXJjZUNvZGUKKyNpbmNsdWRlIDx2OC5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLSAgICBjbGFzcyBWOFByb3h5OworY2xhc3MgVjhQcm94eTsKIAotICAgIC8vIFY4SXNv
bGF0ZWRXb3JsZAorLy8gVjhJc29sYXRlZENvbnRleHQKKy8vCisvLyBWOElzb2xhdGVkQ29udGV4
dCByZXByZXNlbnRzIGEgaXNvbGF0ZWQgZXhlY3V0aW9uIGVudmlyb25tZW50IGZvcgorLy8gSmF2
YVNjcmlwdC4gIEVhY2ggaXNvbGF0ZWQgd29ybGQgZXhlY3V0ZXMgaW4gcGFyYWxsZWwgd2l0aCB0
aGUgbWFpbgorLy8gSmF2YVNjcmlwdCB3b3JsZC4gIEFuIGlzb2xhdGVkIHdvcmxkIGhhcyBhY2Nl
c3MgdG8gdGhlIHNhbWUgRE9NIGRhdGEKKy8vIHN0cnVjdHVyZXMgYXMgdGhlIG1haW4gd29ybGQg
YnV0IG5vbmUgb2YgdGhlIEphdmFTY3JpcHQgcG9pbnRlcnMuCisvLworLy8gSXQgaXMgYW4gZXJy
b3IgdG8gZXZlciBzaGFyZSBhIEphdmFTY3JpcHQgcG9pbnRlciBiZXR3ZWVuIHR3byBpc29sYXRl
ZAorLy8gd29ybGRzIG9yIGJldHdlZW4gYW4gaXNvbGF0ZWQgd29ybGQgYW5kIHRoZSBtYWluIHdv
cmxkLiAgQmVjYXVzZQorLy8gaXNvbGF0ZWQgd29ybGRzIGhhdmUgYWNjZXNzIHRvIHRoZSBET00s
IHRoZXkgbmVlZCB0aGVpciBvd24gRE9NIHdyYXBwZXJzCisvLyB0byBhdm9pZCBoYXZpbmcgcG9p
bnRlcnMgdG8gdGhlIG1haW4gd29ybGQncyBET00gd3JhcHBlcnMgKHdoaWNoIGFyZQorLy8gSmF2
YVNjcmlwdCBvYmplY3RzKS4KK2NsYXNzIFY4SXNvbGF0ZWRDb250ZXh0IHsKK3B1YmxpYzoKKyAg
ICAvLyBDcmVhdGVzIGFuIGlzb2xhdGVkIHdvcmxkLiBUbyBkZXN0cm95IGl0LCBjYWxsIGRlc3Ry
b3koKS4KKyAgICAvLyBUaGlzIHdpbGwgZGVsZXRlIHRoZSBpc29sYXRlZCB3b3JsZCB3aGVuIHRo
ZSBjb250ZXh0IGl0IG93bnMgaXMgR0MnZC4KKyAgICBWOElzb2xhdGVkQ29udGV4dChWOFByb3h5
KiBwcm94eSwgaW50IGV4dGVuc2lvbkdyb3VwKTsKKyAgICB+VjhJc29sYXRlZENvbnRleHQoKTsK
KworICAgIC8vIENhbGwgdGhpcyB0byBkZXN0cm95IHRoZSBpc29sYXRlZCB3b3JsZC4gSXQgd2ls
bCBiZSBkZWxldGVkIHNvbWV0aW1lCisgICAgLy8gYWZ0ZXIgdGhpcyBjYWxsLCBvbmNlIGFsbCBz
Y3JpcHQgcmVmZXJlbmNlcyB0byB0aGUgd29ybGQncyBjb250ZXh0CisgICAgLy8gaGF2ZSBiZWVu
IGRyb3BwZWQuCisgICAgdm9pZCBkZXN0cm95KCk7CisKKyAgICAvLyBSZXR1cm5zIHRoZSBpc29s
YXRlZCB3b3JsZCBhc3NvY2lhdGVkIHdpdGgKKyAgICAvLyB2ODo6Q29udGV4dDo6R2V0RW50ZXJl
ZCgpLiAgQmVjYXVzZSB3b3JsZHMgYXJlIGlzb2xhdGVkLCB0aGUgZW50aXJlCisgICAgLy8gSmF2
YVNjcmlwdCBjYWxsIHN0YWNrIHNob3VsZCBiZSBmcm9tIHRoZSBzYW1lIGlzb2xhdGVkIHdvcmxk
LgorICAgIC8vIFJldHVybnMgMCBpZiB0aGUgZW50ZXJlZCBjb250ZXh0IGlzIGZyb20gdGhlIG1h
aW4gd29ybGQuCiAgICAgLy8KLSAgICAvLyBWOElzb2xhdGVkV29ybGQgcmVwcmVzZW50cyBhIGlz
b2xhdGVkIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCBmb3IKLSAgICAvLyBKYXZhU2NyaXB0LiAgRWFj
aCBpc29sYXRlZCB3b3JsZCBleGVjdXRlcyBpbiBwYXJhbGxlbCB3aXRoIHRoZSBtYWluCi0gICAg
Ly8gSmF2YVNjcmlwdCB3b3JsZC4gIEFuIGlzb2xhdGVkIHdvcmxkIGhhcyBhY2Nlc3MgdG8gdGhl
IHNhbWUgRE9NIGRhdGEKLSAgICAvLyBzdHJ1Y3R1cmVzIGFzIHRoZSBtYWluIHdvcmxkIGJ1dCBu
b25lIG9mIHRoZSBKYXZhU2NyaXB0IHBvaW50ZXJzLgorICAgIC8vIEZJWE1FOiBDb25zaWRlciBl
ZGdlIGNhc2VzIHdpdGggRE9NIG11dGF0aW9uIGV2ZW50cyB0aGF0IG1pZ2h0CisgICAgLy8gdmlv
bGF0ZSB0aGlzIGludmFyaWFudC4KICAgICAvLwotICAgIC8vIEl0IGlzIGFuIGVycm9yIHRvIGV2
ZXIgc2hhcmUgYSBKYXZhU2NyaXB0IHBvaW50ZXIgYmV0d2VlbiB0d28gaXNvbGF0ZWQKLSAgICAv
LyB3b3JsZHMgb3IgYmV0d2VlbiBhbiBpc29sYXRlZCB3b3JsZCBhbmQgdGhlIG1haW4gd29ybGQu
ICBCZWNhdXNlCi0gICAgLy8gaXNvbGF0ZWQgd29ybGRzIGhhdmUgYWNjZXNzIHRvIHRoZSBET00s
IHRoZXkgbmVlZCB0aGVpciBvd24gRE9NIHdyYXBwZXJzCi0gICAgLy8gdG8gYXZvaWQgaGF2aW5n
IHBvaW50ZXJzIHRvIHRoZSBtYWluIHdvcmxkJ3MgRE9NIHdyYXBwZXJzICh3aGljaCBhcmUKLSAg
ICAvLyBKYXZhU2NyaXB0IG9iamVjdHMpLgotICAgIC8vCi0gICAgY2xhc3MgVjhJc29sYXRlZFdv
cmxkIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIC8vIENyZWF0ZXMgYW4gaXNvbGF0ZWQgd29ybGQu
IFRvIGRlc3Ryb3kgaXQsIGNhbGwgZGVzdHJveSgpLgotICAgICAgICAvLyBUaGlzIHdpbGwgZGVs
ZXRlIHRoZSBpc29sYXRlZCB3b3JsZCB3aGVuIHRoZSBjb250ZXh0IGl0IG93bnMgaXMgR0MnZC4K
LSAgICAgICAgVjhJc29sYXRlZFdvcmxkKFY4UHJveHkqIHByb3h5LCBpbnQgZXh0ZW5zaW9uR3Jv
dXApOwotICAgICAgICB+VjhJc29sYXRlZFdvcmxkKCk7Ci0KLSAgICAgICAgLy8gQ2FsbCB0aGlz
IHRvIGRlc3Ryb3kgdGhlIGlzb2xhdGVkIHdvcmxkLiBJdCB3aWxsIGJlIGRlbGV0ZWQgc29tZXRp
bWUKLSAgICAgICAgLy8gYWZ0ZXIgdGhpcyBjYWxsLCBvbmNlIGFsbCBzY3JpcHQgcmVmZXJlbmNl
cyB0byB0aGUgd29ybGQncyBjb250ZXh0Ci0gICAgICAgIC8vIGhhdmUgYmVlbiBkcm9wcGVkLgot
ICAgICAgICB2b2lkIGRlc3Ryb3koKTsKLQotICAgICAgICAvLyBSZXR1cm5zIHRoZSBpc29sYXRl
ZCB3b3JsZCBhc3NvY2lhdGVkIHdpdGgKLSAgICAgICAgLy8gdjg6OkNvbnRleHQ6OkdldEVudGVy
ZWQoKS4gIEJlY2F1c2Ugd29ybGRzIGFyZSBpc29sYXRlZCwgdGhlIGVudGlyZQotICAgICAgICAv
LyBKYXZhU2NyaXB0IGNhbGwgc3RhY2sgc2hvdWxkIGJlIGZyb20gdGhlIHNhbWUgaXNvbGF0ZWQg
d29ybGQuCi0gICAgICAgIC8vIFJldHVybnMgTlVMTCBpZiB0aGUgZW50ZXJlZCBjb250ZXh0IGlz
IGZyb20gdGhlIG1haW4gd29ybGQuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIEZJWE1FOiBDb25z
aWRlciBlZGdlIGNhc2VzIHdpdGggRE9NIG11dGF0aW9uIGV2ZW50cyB0aGF0IG1pZ2h0Ci0gICAg
ICAgIC8vIHZpb2xhdGUgdGhpcyBpbnZhcmlhbnQuCi0gICAgICAgIC8vCi0gICAgICAgIHN0YXRp
YyBWOElzb2xhdGVkV29ybGQqIGdldEVudGVyZWQoKQotICAgICAgICB7Ci0gICAgICAgICAgICAv
LyBUaGlzIGlzIGEgdGVtcG9yYXJ5IHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4gICBFc3NlbnRp
YWxseSwKLSAgICAgICAgICAgIC8vIEdldEhpZGRlblZhbHVlIGlzIHRvbyBzbG93IGZvciB0aGlz
IGNvZGUgcGF0aC4gIFdlIG5lZWQgdG8gZ2V0IHRoZQotICAgICAgICAgICAgLy8gVjggdGVhbSB0
byBhZGQgYSByZWFsIHByb3BlcnR5IHRvIHY4OjpDb250ZXh0IGZvciBpc29sYXRlZCB3b3JsZHMu
Ci0gICAgICAgICAgICAvLyBVbnRpbCB0aGVuLCB3ZSBvcHRpbWl6ZSB0aGUgY29tbW9uIGNhc2Ug
b2Ygbm90IGhhdmluZyBhbnkgaXNvbGF0ZWQKLSAgICAgICAgICAgIC8vIHdvcmxkcyBhdCBhbGwu
Ci0gICAgICAgICAgICBpZiAoIWlzb2xhdGVkV29ybGRDb3VudCkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKLSAgICAgICAgICAgIGlmICghdjg6OkNvbnRleHQ6OkluQ29udGV4dCgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8VjhJc29sYXRlZFdvcmxkKj4oZ2V0R2xvYmFsT2JqZWN0KHY4OjpDb250ZXh0OjpHZXRFbnRl
cmVkKCkpLT5HZXRQb2ludGVyRnJvbUludGVybmFsRmllbGQoVjhDdXN0b206OmtET01XaW5kb3dF
bnRlcmVkSXNvbGF0ZWRXb3JsZEluZGV4KSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2ODo6SGFu
ZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0LT5nZXQoKTsgfQot
ICAgICAgICBQYXNzUmVmUHRyPFNoYXJlZFBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+ID4gc2hhcmVk
Q29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dDsgfQotCi0gICAgICAgIERPTURhdGFTdG9yZSog
Z2V0RE9NRGF0YVN0b3JlKCkgY29uc3QgeyByZXR1cm4gbV9kb21EYXRhU3RvcmUuZ2V0U3RvcmUo
KTsgfQotCi0gICAgICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSgpOwotCi0gICAgcHJpdmF0
ZToKLSAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2V0R2xvYmFsT2JqZWN0
KHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGNvbnRleHQtPkdsb2JhbCgpLT5H
ZXRQcm90b3R5cGUoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDYWxsZWQgYnkgdGhlIGdh
cmJhZ2UgY29sbGVjdG9yIHdoZW4gb3VyIEphdmFTY3JpcHQgY29udGV4dCBpcyBhYm91dAotICAg
ICAgICAvLyB0byBiZSBkZXN0cm95ZWQuCi0gICAgICAgIHN0YXRpYyB2b2lkIGNvbnRleHRXZWFr
UmVmZXJlbmNlQ2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiBvYmplY3QsIHZvaWQq
IGlzb2xhdGVkX3dvcmxkKTsKLQotICAgICAgICAvLyBUaGUgdjg6OkNvbnRleHQgZm9yIHRoZSBp
c29sYXRlZCB3b3JsZC4gIFRoaXMgb2JqZWN0IGlzIGtlZXAgb24gdGhlCi0gICAgICAgIC8vIGhl
YXAgYXMgbG9uZyBhcyB8bV9jb250ZXh0fCBoYXMgbm90IGJlZW4gZ2FyYmFnZSBjb2xsZWN0ZWQu
Ci0gICAgICAgIFJlZlB0cjxTaGFyZWRQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiA+IG1fY29udGV4
dDsKLQotICAgICAgICAvLyBUaGUgYmFja2luZyBzdG9yZSBmb3IgdGhlIGlzb2xhdGVkIHdvcmxk
J3MgRE9NIHdyYXBwZXJzLiAgVGhpcyBjbGFzcwotICAgICAgICAvLyBkb2Vzbid0IGhhdmUgdmlz
aWJpbGl0eSBpbnRvIHRoZSB3cmFwcGVycy4gIFRoaXMgaGFuZGxlIHNpbXBseSBoZWxwcwotICAg
ICAgICAvLyBtYW5hZ2UgdGhlaXIgbGlmZXRpbWUuCi0gICAgICAgIERPTURhdGFTdG9yZUhhbmRs
ZSBtX2RvbURhdGFTdG9yZTsKLQotICAgICAgICAvLyBGSVhNRTogZ2V0IHJpZCBvZiByZWR1bmRh
bnQgbV9jb250ZXh0IGZpZWxkLiBUaGUgY29udGV4dCBjYW4gYmUgcmV0cmlldmVkIGZyb20gdGhl
IFNjcmlwdFN0YXRlLgotICAgICAgICBPd25QdHI8U2NyaXB0U3RhdGU+IG1fc2NyaXB0U3RhdGU7
Ci0KLSAgICAgICAgc3RhdGljIGludCBpc29sYXRlZFdvcmxkQ291bnQ7Ci0gICAgfTsKKyAgICBz
dGF0aWMgVjhJc29sYXRlZENvbnRleHQqIGdldEVudGVyZWQoKQorICAgIHsKKyAgICAgICAgLy8g
VGhpcyBpcyBhIHRlbXBvcmFyeSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uICAgRXNzZW50aWFs
bHksCisgICAgICAgIC8vIEdldEhpZGRlblZhbHVlIGlzIHRvbyBzbG93IGZvciB0aGlzIGNvZGUg
cGF0aC4gIFdlIG5lZWQgdG8gZ2V0IHRoZQorICAgICAgICAvLyBWOCB0ZWFtIHRvIGFkZCBhIHJl
YWwgcHJvcGVydHkgdG8gdjg6OkNvbnRleHQgZm9yIGlzb2xhdGVkIHdvcmxkcy4KKyAgICAgICAg
Ly8gVW50aWwgdGhlbiwgd2Ugb3B0aW1pemUgdGhlIGNvbW1vbiBjYXNlIG9mIG5vdCBoYXZpbmcg
YW55IGlzb2xhdGVkCisgICAgICAgIC8vIHdvcmxkcyBhdCBhbGwuCisgICAgICAgIGlmICghSXNv
bGF0ZWRXb3JsZDo6Y291bnQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAo
IXY4OjpDb250ZXh0OjpJbkNvbnRleHQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxWOElzb2xhdGVkQ29udGV4dCo+KGdldEdsb2JhbE9i
amVjdCh2ODo6Q29udGV4dDo6R2V0RW50ZXJlZCgpKS0+R2V0UG9pbnRlckZyb21JbnRlcm5hbEZp
ZWxkKFY4Q3VzdG9tOjprRE9NV2luZG93RW50ZXJlZElzb2xhdGVkV29ybGRJbmRleCkpOworICAg
IH0KKworICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQoKSB7IHJldHVybiBtX2Nv
bnRleHQtPmdldCgpOyB9CisgICAgUGFzc1JlZlB0cjxTaGFyZWRQZXJzaXN0ZW50PHY4OjpDb250
ZXh0PiA+IHNoYXJlZENvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQ7IH0KKworICAgIElzb2xh
dGVkV29ybGQqIHdvcmxkKCkgY29uc3QgeyByZXR1cm4gbV93b3JsZC5nZXQoKTsgfQorCisgICAg
U2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlKCk7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gZ2V0R2xvYmFsT2JqZWN0KHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+
IGNvbnRleHQpCisgICAgeworICAgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6
Q2FzdChjb250ZXh0LT5HbG9iYWwoKS0+R2V0UHJvdG90eXBlKCkpOworICAgIH0KKworICAgIC8v
IENhbGxlZCBieSB0aGUgZ2FyYmFnZSBjb2xsZWN0b3Igd2hlbiBvdXIgSmF2YVNjcmlwdCBjb250
ZXh0IGlzIGFib3V0CisgICAgLy8gdG8gYmUgZGVzdHJveWVkLgorICAgIHN0YXRpYyB2b2lkIGNv
bnRleHRXZWFrUmVmZXJlbmNlQ2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiBvYmpl
Y3QsIHZvaWQqIGlzb2xhdGVkQ29udGV4dCk7CisKKyAgICAvLyBUaGUgdW5kZXJseWluZyB2ODo6
Q29udGV4dC4gVGhpcyBvYmplY3QgaXMga2VlcCBvbiB0aGUgaGVhcCBhcworICAgIC8vIGxvbmcg
YXMgfG1fY29udGV4dHwgaGFzIG5vdCBiZWVuIGdhcmJhZ2UgY29sbGVjdGVkLgorICAgIFJlZlB0
cjxTaGFyZWRQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiA+IG1fY29udGV4dDsKKworICAgIFJlZlB0
cjxJc29sYXRlZFdvcmxkPiBtX3dvcmxkOworCisgICAgLy8gRklYTUU6IGdldCByaWQgb2YgcmVk
dW5kYW50IG1fY29udGV4dCBmaWVsZC4gVGhlIGNvbnRleHQgY2FuIGJlIHJldHJpZXZlZCBmcm9t
IHRoZSBTY3JpcHRTdGF0ZS4KKyAgICBPd25QdHI8U2NyaXB0U3RhdGU+IG1fc2NyaXB0U3RhdGU7
Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBWOElzb2xhdGVkV29y
bGRfaAorI2VuZGlmIC8vIFY4SXNvbGF0ZWRDb250ZXh0X2gKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvdjgvVjhJc29sYXRlZFdvcmxkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4SXNvbGF0ZWRXb3JsZC5jcHAJKHJldmlzaW9uIDUyNjgyKQorKysgV2ViQ29yZS9iaW5k
aW5ncy92OC9WOElzb2xhdGVkV29ybGQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwNiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgot
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0g
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiVjhJc29sYXRlZFdvcmxkLmgiCi0K
LSNpbmNsdWRlIDx2OC5oPgotCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZUxv
YWRlckNsaWVudC5oIgotI2luY2x1ZGUgIkhhc2hNYXAuaCIKLSNpbmNsdWRlICJTY3JpcHRDb250
cm9sbGVyLmgiCi0jaW5jbHVkZSAiVjhET01XaW5kb3cuaCIKLSNpbmNsdWRlICJWOEhpZGRlblBy
b3BlcnR5TmFtZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWludCBWOElzb2xhdGVkV29y
bGQ6Omlzb2xhdGVkV29ybGRDb3VudCA9IDA7Ci0KLXZvaWQgVjhJc29sYXRlZFdvcmxkOjpjb250
ZXh0V2Vha1JlZmVyZW5jZUNhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gb2JqZWN0
LCB2b2lkKiBpc29sYXRlZF93b3JsZCkKLXsKLSAgICAvLyBPdXIgY29udGV4dCBpcyBnb2luZyBh
d2F5LiAgVGltZSB0byBjbGVhbiB1cCB0aGUgd29ybGQuCi0gICAgVjhJc29sYXRlZFdvcmxkKiB3
b3JsZCA9IHN0YXRpY19jYXN0PFY4SXNvbGF0ZWRXb3JsZCo+KGlzb2xhdGVkX3dvcmxkKTsKLSAg
ICBkZWxldGUgd29ybGQ7Ci19Ci0KLVY4SXNvbGF0ZWRXb3JsZDo6VjhJc29sYXRlZFdvcmxkKFY4
UHJveHkqIHByb3h5LCBpbnQgZXh0ZW5zaW9uR3JvdXApCi17Ci0gICAgKytpc29sYXRlZFdvcmxk
Q291bnQ7Ci0KLSAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7Ci0gICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBiZSBjcmVhdGluZyBhIG5ldyBWOERPTVdpbmRvd1NoZWxsIGhlcmUgaW5zdGVhZCBvZiBy
aXBpbmcgb3V0IHRoZSBjb250ZXh0LgotICAgIG1fY29udGV4dCA9IFNoYXJlZFBlcnNpc3RlbnQ8
djg6OkNvbnRleHQ+OjpjcmVhdGUocHJveHktPndpbmRvd1NoZWxsKCktPmNyZWF0ZU5ld0NvbnRl
eHQodjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCBleHRlbnNpb25Hcm91cCkpOwotICAgIGlmICht
X2NvbnRleHQtPmdldCgpLklzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gUnVu
IGNvZGUgaW4gdGhlIG5ldyBjb250ZXh0LgotICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0
X3Njb3BlKG1fY29udGV4dC0+Z2V0KCkpOwotCi0gICAgZ2V0R2xvYmFsT2JqZWN0KG1fY29udGV4
dC0+Z2V0KCkpLT5TZXRQb2ludGVySW5JbnRlcm5hbEZpZWxkKFY4Q3VzdG9tOjprRE9NV2luZG93
RW50ZXJlZElzb2xhdGVkV29ybGRJbmRleCwgdGhpcyk7Ci0KLSAgICBWOERPTVdpbmRvd1NoZWxs
OjppbnN0YWxsSGlkZGVuT2JqZWN0UHJvdG90eXBlKG1fY29udGV4dC0+Z2V0KCkpOwotICAgIC8v
IEZJWE1FOiBUaGlzIHdpbGwgZ28gYXdheSBvbmNlIHdlIGhhdmUgYSB3aW5kb3dTaGVsbCBmb3Ig
dGhlIGlzb2xhdGVkIHdvcmxkLgotICAgIHByb3h5LT53aW5kb3dTaGVsbCgpLT5pbnN0YWxsRE9N
V2luZG93KG1fY29udGV4dC0+Z2V0KCksIHByb3h5LT5mcmFtZSgpLT5kb21XaW5kb3coKSk7Ci0K
LSAgICAvLyBVc2luZyB0aGUgZGVmYXVsdCBzZWN1cml0eSB0b2tlbiBtZWFucyB0aGF0IHRoZSBj
YW5BY2Nlc3MgaXMgYWx3YXlzCi0gICAgLy8gY2FsbGVkLCB3aGljaCBpcyBzbG93LgotICAgIC8v
IEZJWE1FOiBVc2UgdG9rZW5zIHdoZXJlIHBvc3NpYmxlLiBUaGlzIHdpbGwgbWVhbiBrZWVwaW5n
IHRyYWNrIG9mIGFsbAotICAgIC8vICAgICAgICBjcmVhdGVkIGNvbnRleHRzIHNvIHRoYXQgdGhl
eSBjYW4gYWxsIGJlIHVwZGF0ZWQgd2hlbiB0aGUKLSAgICAvLyAgICAgICAgZG9jdW1lbnQgZG9t
YWluCi0gICAgLy8gICAgICAgIGNoYW5nZXMuCi0gICAgbV9jb250ZXh0LT5nZXQoKS0+VXNlRGVm
YXVsdFNlY3VyaXR5VG9rZW4oKTsKLQotICAgIHByb3h5LT5mcmFtZSgpLT5sb2FkZXIoKS0+Y2xp
ZW50KCktPmRpZENyZWF0ZUlzb2xhdGVkU2NyaXB0Q29udGV4dCgpOwotfQotCi12b2lkIFY4SXNv
bGF0ZWRXb3JsZDo6ZGVzdHJveSgpCi17Ci0gICAgbV9jb250ZXh0LT5nZXQoKS5NYWtlV2Vhayh0
aGlzLCAmY29udGV4dFdlYWtSZWZlcmVuY2VDYWxsYmFjayk7Ci19Ci0KLVY4SXNvbGF0ZWRXb3Js
ZDo6flY4SXNvbGF0ZWRXb3JsZCgpCi17Ci0gICAgLS1pc29sYXRlZFdvcmxkQ291bnQ7Ci0gICAg
bV9jb250ZXh0LT5kaXNwb3NlSGFuZGxlKCk7Ci19Ci0KLVNjcmlwdFN0YXRlKiBWOElzb2xhdGVk
V29ybGQ6OnNjcmlwdFN0YXRlKCkKLXsKLSAgICBpZiAoIW1fc2NyaXB0U3RhdGUpIHsKLSAgICAg
ICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOwotICAgICAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0
PiBjb250ZXh0ID0gbV9jb250ZXh0LmdldCgpLT5nZXQoKTsKLSAgICAgICAgbV9zY3JpcHRTdGF0
ZS5zZXQobmV3IFNjcmlwdFN0YXRlKFY4UHJveHk6OnJldHJpZXZlRnJhbWUoY29udGV4dCksIGNv
bnRleHQpKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fc2NyaXB0U3RhdGUuZ2V0KCk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRl
ZFdvcmxkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOElzb2xhdGVkV29y
bGQuaAkocmV2aXNpb24gNTI2ODIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRX
b3JsZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEyNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4K
LSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBWOElzb2xhdGVk
V29ybGRfaAotI2RlZmluZSBWOElzb2xhdGVkV29ybGRfaAotCi0jaW5jbHVkZSA8djguaD4KLQot
I2luY2x1ZGUgIlY4RE9NTWFwLmgiCi0jaW5jbHVkZSAiVjhJbmRleC5oIgotI2luY2x1ZGUgIlY4
UHJveHkuaCIKLSNpbmNsdWRlICJWOFV0aWxpdGllcy5oIgotI2luY2x1ZGUgIlNjcmlwdFNvdXJj
ZUNvZGUuaCIgIC8vIGZvciBXZWJDb3JlOjpTY3JpcHRTb3VyY2VDb2RlCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotICAgIGNsYXNzIFY4UHJveHk7Ci0KLSAgICAvLyBWOElzb2xhdGVkV29ybGQK
LSAgICAvLwotICAgIC8vIFY4SXNvbGF0ZWRXb3JsZCByZXByZXNlbnRzIGEgaXNvbGF0ZWQgZXhl
Y3V0aW9uIGVudmlyb25tZW50IGZvcgotICAgIC8vIEphdmFTY3JpcHQuICBFYWNoIGlzb2xhdGVk
IHdvcmxkIGV4ZWN1dGVzIGluIHBhcmFsbGVsIHdpdGggdGhlIG1haW4KLSAgICAvLyBKYXZhU2Ny
aXB0IHdvcmxkLiAgQW4gaXNvbGF0ZWQgd29ybGQgaGFzIGFjY2VzcyB0byB0aGUgc2FtZSBET00g
ZGF0YQotICAgIC8vIHN0cnVjdHVyZXMgYXMgdGhlIG1haW4gd29ybGQgYnV0IG5vbmUgb2YgdGhl
IEphdmFTY3JpcHQgcG9pbnRlcnMuCi0gICAgLy8KLSAgICAvLyBJdCBpcyBhbiBlcnJvciB0byBl
dmVyIHNoYXJlIGEgSmF2YVNjcmlwdCBwb2ludGVyIGJldHdlZW4gdHdvIGlzb2xhdGVkCi0gICAg
Ly8gd29ybGRzIG9yIGJldHdlZW4gYW4gaXNvbGF0ZWQgd29ybGQgYW5kIHRoZSBtYWluIHdvcmxk
LiAgQmVjYXVzZQotICAgIC8vIGlzb2xhdGVkIHdvcmxkcyBoYXZlIGFjY2VzcyB0byB0aGUgRE9N
LCB0aGV5IG5lZWQgdGhlaXIgb3duIERPTSB3cmFwcGVycwotICAgIC8vIHRvIGF2b2lkIGhhdmlu
ZyBwb2ludGVycyB0byB0aGUgbWFpbiB3b3JsZCdzIERPTSB3cmFwcGVycyAod2hpY2ggYXJlCi0g
ICAgLy8gSmF2YVNjcmlwdCBvYmplY3RzKS4KLSAgICAvLwotICAgIGNsYXNzIFY4SXNvbGF0ZWRX
b3JsZCB7Ci0gICAgcHVibGljOgotICAgICAgICAvLyBDcmVhdGVzIGFuIGlzb2xhdGVkIHdvcmxk
LiBUbyBkZXN0cm95IGl0LCBjYWxsIGRlc3Ryb3koKS4KLSAgICAgICAgLy8gVGhpcyB3aWxsIGRl
bGV0ZSB0aGUgaXNvbGF0ZWQgd29ybGQgd2hlbiB0aGUgY29udGV4dCBpdCBvd25zIGlzIEdDJ2Qu
Ci0gICAgICAgIFY4SXNvbGF0ZWRXb3JsZChWOFByb3h5KiBwcm94eSwgaW50IGV4dGVuc2lvbkdy
b3VwKTsKLSAgICAgICAgflY4SXNvbGF0ZWRXb3JsZCgpOwotCi0gICAgICAgIC8vIENhbGwgdGhp
cyB0byBkZXN0cm95IHRoZSBpc29sYXRlZCB3b3JsZC4gSXQgd2lsbCBiZSBkZWxldGVkIHNvbWV0
aW1lCi0gICAgICAgIC8vIGFmdGVyIHRoaXMgY2FsbCwgb25jZSBhbGwgc2NyaXB0IHJlZmVyZW5j
ZXMgdG8gdGhlIHdvcmxkJ3MgY29udGV4dAotICAgICAgICAvLyBoYXZlIGJlZW4gZHJvcHBlZC4K
LSAgICAgICAgdm9pZCBkZXN0cm95KCk7Ci0KLSAgICAgICAgLy8gUmV0dXJucyB0aGUgaXNvbGF0
ZWQgd29ybGQgYXNzb2NpYXRlZCB3aXRoCi0gICAgICAgIC8vIHY4OjpDb250ZXh0OjpHZXRFbnRl
cmVkKCkuICBCZWNhdXNlIHdvcmxkcyBhcmUgaXNvbGF0ZWQsIHRoZSBlbnRpcmUKLSAgICAgICAg
Ly8gSmF2YVNjcmlwdCBjYWxsIHN0YWNrIHNob3VsZCBiZSBmcm9tIHRoZSBzYW1lIGlzb2xhdGVk
IHdvcmxkLgotICAgICAgICAvLyBSZXR1cm5zIE5VTEwgaWYgdGhlIGVudGVyZWQgY29udGV4dCBp
cyBmcm9tIHRoZSBtYWluIHdvcmxkLgotICAgICAgICAvLwotICAgICAgICAvLyBGSVhNRTogQ29u
c2lkZXIgZWRnZSBjYXNlcyB3aXRoIERPTSBtdXRhdGlvbiBldmVudHMgdGhhdCBtaWdodAotICAg
ICAgICAvLyB2aW9sYXRlIHRoaXMgaW52YXJpYW50LgotICAgICAgICAvLwotICAgICAgICBzdGF0
aWMgVjhJc29sYXRlZFdvcmxkKiBnZXRFbnRlcmVkKCkKLSAgICAgICAgewotICAgICAgICAgICAg
Ly8gVGhpcyBpcyBhIHRlbXBvcmFyeSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uICAgRXNzZW50
aWFsbHksCi0gICAgICAgICAgICAvLyBHZXRIaWRkZW5WYWx1ZSBpcyB0b28gc2xvdyBmb3IgdGhp
cyBjb2RlIHBhdGguICBXZSBuZWVkIHRvIGdldCB0aGUKLSAgICAgICAgICAgIC8vIFY4IHRlYW0g
dG8gYWRkIGEgcmVhbCBwcm9wZXJ0eSB0byB2ODo6Q29udGV4dCBmb3IgaXNvbGF0ZWQgd29ybGRz
LgotICAgICAgICAgICAgLy8gVW50aWwgdGhlbiwgd2Ugb3B0aW1pemUgdGhlIGNvbW1vbiBjYXNl
IG9mIG5vdCBoYXZpbmcgYW55IGlzb2xhdGVkCi0gICAgICAgICAgICAvLyB3b3JsZHMgYXQgYWxs
LgotICAgICAgICAgICAgaWYgKCFpc29sYXRlZFdvcmxkQ291bnQpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgICAgICAgICBpZiAoIXY4OjpDb250ZXh0OjpJbkNvbnRleHQoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PFY4SXNvbGF0ZWRXb3JsZCo+KGdldEdsb2JhbE9iamVjdCh2ODo6Q29udGV4dDo6R2V0RW50
ZXJlZCgpKS0+R2V0UG9pbnRlckZyb21JbnRlcm5hbEZpZWxkKFY4Q3VzdG9tOjprRE9NV2luZG93
RW50ZXJlZElzb2xhdGVkV29ybGRJbmRleCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdjg6Okhh
bmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dC0+Z2V0KCk7IH0K
LSAgICAgICAgUGFzc1JlZlB0cjxTaGFyZWRQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiA+IHNoYXJl
ZENvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQ7IH0KLQotICAgICAgICBET01EYXRhU3RvcmUq
IGdldERPTURhdGFTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fZG9tRGF0YVN0b3JlLmdldFN0b3Jl
KCk7IH0KLQotICAgICAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUoKTsKLQotICAgIHByaXZh
dGU6Ci0gICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGdldEdsb2JhbE9iamVj
dCh2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChjb250ZXh0LT5HbG9iYWwoKS0+
R2V0UHJvdG90eXBlKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ2FsbGVkIGJ5IHRoZSBn
YXJiYWdlIGNvbGxlY3RvciB3aGVuIG91ciBKYXZhU2NyaXB0IGNvbnRleHQgaXMgYWJvdXQKLSAg
ICAgICAgLy8gdG8gYmUgZGVzdHJveWVkLgotICAgICAgICBzdGF0aWMgdm9pZCBjb250ZXh0V2Vh
a1JlZmVyZW5jZUNhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gb2JqZWN0LCB2b2lk
KiBpc29sYXRlZF93b3JsZCk7Ci0KLSAgICAgICAgLy8gVGhlIHY4OjpDb250ZXh0IGZvciB0aGUg
aXNvbGF0ZWQgd29ybGQuICBUaGlzIG9iamVjdCBpcyBrZWVwIG9uIHRoZQotICAgICAgICAvLyBo
ZWFwIGFzIGxvbmcgYXMgfG1fY29udGV4dHwgaGFzIG5vdCBiZWVuIGdhcmJhZ2UgY29sbGVjdGVk
LgotICAgICAgICBSZWZQdHI8U2hhcmVkUGVyc2lzdGVudDx2ODo6Q29udGV4dD4gPiBtX2NvbnRl
eHQ7Ci0KLSAgICAgICAgLy8gVGhlIGJhY2tpbmcgc3RvcmUgZm9yIHRoZSBpc29sYXRlZCB3b3Js
ZCdzIERPTSB3cmFwcGVycy4gIFRoaXMgY2xhc3MKLSAgICAgICAgLy8gZG9lc24ndCBoYXZlIHZp
c2liaWxpdHkgaW50byB0aGUgd3JhcHBlcnMuICBUaGlzIGhhbmRsZSBzaW1wbHkgaGVscHMKLSAg
ICAgICAgLy8gbWFuYWdlIHRoZWlyIGxpZmV0aW1lLgotICAgICAgICBET01EYXRhU3RvcmVIYW5k
bGUgbV9kb21EYXRhU3RvcmU7Ci0KLSAgICAgICAgLy8gRklYTUU6IGdldCByaWQgb2YgcmVkdW5k
YW50IG1fY29udGV4dCBmaWVsZC4gVGhlIGNvbnRleHQgY2FuIGJlIHJldHJpZXZlZCBmcm9tIHRo
ZSBTY3JpcHRTdGF0ZS4KLSAgICAgICAgT3duUHRyPFNjcmlwdFN0YXRlPiBtX3NjcmlwdFN0YXRl
OwotCi0gICAgICAgIHN0YXRpYyBpbnQgaXNvbGF0ZWRXb3JsZENvdW50OwotICAgIH07Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFY4SXNvbGF0ZWRXb3JsZF9oCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvdjgvVjhQcm94eS5jcHAJKHJldmlzaW9uIDUyNjgyKQorKysgV2ViQ29yZS9iaW5k
aW5ncy92OC9WOFByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQAogI2lu
Y2x1ZGUgIlY4RE9NV2luZG93LmgiCiAjaW5jbHVkZSAiVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuaCIK
ICNpbmNsdWRlICJWOEluZGV4LmgiCi0jaW5jbHVkZSAiVjhJc29sYXRlZFdvcmxkLmgiCisjaW5j
bHVkZSAiVjhJc29sYXRlZENvbnRleHQuaCIKICNpbmNsdWRlICJXb3JrZXJDb250ZXh0RXhlY3V0
aW9uUHJveHkuaCIKIAogI2luY2x1ZGUgPGFsZ29yaXRobT4KQEAgLTI3MCw0MyArMjcwLDQ0IEBA
IHZvaWQgVjhQcm94eTo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQoaW4KICAgICB3aW5kb3dTaGVs
bCgpLT5pbml0Q29udGV4dElmTmVlZGVkKCk7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxl
U2NvcGU7Ci0gICAgVjhJc29sYXRlZFdvcmxkKiB3b3JsZCA9IDA7CisgICAgVjhJc29sYXRlZENv
bnRleHQqIGlzb2xhdGVkQ29udGV4dCA9IDA7CiAKICAgICBpZiAod29ybGRJRCA+IDApIHsKICAg
ICAgICAgSXNvbGF0ZWRXb3JsZE1hcDo6aXRlcmF0b3IgaXRlciA9IG1faXNvbGF0ZWRXb3JsZHMu
ZmluZCh3b3JsZElEKTsKICAgICAgICAgaWYgKGl0ZXIgIT0gbV9pc29sYXRlZFdvcmxkcy5lbmQo
KSkgewotICAgICAgICAgICAgd29ybGQgPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgICAgICBpc29s
YXRlZENvbnRleHQgPSBpdGVyLT5zZWNvbmQ7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICB3b3JsZCA9IG5ldyBWOElzb2xhdGVkV29ybGQodGhpcywgZXh0ZW5zaW9uR3JvdXApOwotICAg
ICAgICAgICAgaWYgKHdvcmxkLT5jb250ZXh0KCkuSXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAg
ICAgZGVsZXRlIHdvcmxkOworICAgICAgICAgICAgaXNvbGF0ZWRDb250ZXh0ID0gbmV3IFY4SXNv
bGF0ZWRDb250ZXh0KHRoaXMsIGV4dGVuc2lvbkdyb3VwKTsKKyAgICAgICAgICAgIGlmIChpc29s
YXRlZENvbnRleHQtPmNvbnRleHQoKS5Jc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBkZWxl
dGUgaXNvbGF0ZWRDb250ZXh0OwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgbV9pc29sYXRlZFdvcmxkcy5zZXQod29ybGRJRCwgd29ybGQpOwor
ICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBjaGFuZ2UgdGhpcyB0byB1c2luZyB3aW5k
b3cgc2hlbGxzIHRvIG1hdGNoIEpTQy4KKyAgICAgICAgICAgIG1faXNvbGF0ZWRXb3JsZHMuc2V0
KHdvcmxkSUQsIGlzb2xhdGVkQ29udGV4dCk7CiAKICAgICAgICAgICAgIC8vIFNldHVwIGNvbnRl
eHQgaWQgZm9yIEpTIGRlYnVnZ2VyLgotICAgICAgICAgICAgaWYgKCFzZXRJbmplY3RlZFNjcmlw
dENvbnRleHREZWJ1Z0lkKHdvcmxkLT5jb250ZXh0KCkpKSB7CisgICAgICAgICAgICBpZiAoIXNl
dEluamVjdGVkU2NyaXB0Q29udGV4dERlYnVnSWQoaXNvbGF0ZWRDb250ZXh0LT5jb250ZXh0KCkp
KSB7CiAgICAgICAgICAgICAgICAgbV9pc29sYXRlZFdvcmxkcy50YWtlKHdvcmxkSUQpOwotICAg
ICAgICAgICAgICAgIGRlbGV0ZSB3b3JsZDsKKyAgICAgICAgICAgICAgICBkZWxldGUgaXNvbGF0
ZWRDb250ZXh0OwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIHdvcmxkID0gbmV3IFY4SXNvbGF0ZWRXb3JsZCh0
aGlzLCBleHRlbnNpb25Hcm91cCk7Ci0gICAgICAgIGlmICh3b3JsZC0+Y29udGV4dCgpLklzRW1w
dHkoKSkgewotICAgICAgICAgICAgZGVsZXRlIHdvcmxkOworICAgICAgICBpc29sYXRlZENvbnRl
eHQgPSBuZXcgVjhJc29sYXRlZENvbnRleHQodGhpcywgZXh0ZW5zaW9uR3JvdXApOworICAgICAg
ICBpZiAoaXNvbGF0ZWRDb250ZXh0LT5jb250ZXh0KCkuSXNFbXB0eSgpKSB7CisgICAgICAgICAg
ICBkZWxldGUgaXNvbGF0ZWRDb250ZXh0OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgfQogCi0gICAgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gdjg6OkxvY2Fs
PHY4OjpDb250ZXh0Pjo6TmV3KHdvcmxkLT5jb250ZXh0KCkpOworICAgIHY4OjpMb2NhbDx2ODo6
Q29udGV4dD4gY29udGV4dCA9IHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5ldyhpc29sYXRlZENv
bnRleHQtPmNvbnRleHQoKSk7CiAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRfc2NvcGUo
Y29udGV4dCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzb3VyY2VzLnNpemUoKTsgKytp
KQogICAgICAgZXZhbHVhdGUoc291cmNlc1tpXSwgMCk7CiAKICAgICBpZiAod29ybGRJRCA9PSAw
KQotICAgICAgd29ybGQtPmRlc3Ryb3koKTsKKyAgICAgIGlzb2xhdGVkQ29udGV4dC0+ZGVzdHJv
eSgpOwogfQogCiAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlbW92ZSB0aGlzIGZ1bmN0aW9uIQpAQCAt
NzA4LDggKzcwOSw4IEBAIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gVjhQcm94eTo6Y29udGV4dCgK
ICAgICBpZiAoY29udGV4dC5Jc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6
OkNvbnRleHQ+KCk7CiAKLSAgICBpZiAoVjhJc29sYXRlZFdvcmxkKiB3b3JsZCA9IFY4SXNvbGF0
ZWRXb3JsZDo6Z2V0RW50ZXJlZCgpKSB7Ci0gICAgICAgIGNvbnRleHQgPSB2ODo6TG9jYWw8djg6
OkNvbnRleHQ+OjpOZXcod29ybGQtPmNvbnRleHQoKSk7CisgICAgaWYgKFY4SXNvbGF0ZWRDb250
ZXh0KiBpc29sYXRlZENvbnRleHQgPSBWOElzb2xhdGVkQ29udGV4dDo6Z2V0RW50ZXJlZCgpKSB7
CisgICAgICAgIGNvbnRleHQgPSB2ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXcoaXNvbGF0ZWRD
b250ZXh0LT5jb250ZXh0KCkpOwogICAgICAgICBpZiAoZnJhbWUgIT0gVjhQcm94eTo6cmV0cmll
dmVGcmFtZShjb250ZXh0KSkKICAgICAgICAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6OkNvbnRl
eHQ+KCk7CiAgICAgfQpAQCAtNzE5LDggKzcyMCw4IEBAIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4g
VjhQcm94eTo6Y29udGV4dCgKIAogdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBWOFByb3h5Ojpjb250
ZXh0KCkKIHsKLSAgICBpZiAoVjhJc29sYXRlZFdvcmxkKiB3b3JsZCA9IFY4SXNvbGF0ZWRXb3Js
ZDo6Z2V0RW50ZXJlZCgpKSB7Ci0gICAgICAgIFJlZlB0cjxTaGFyZWRQZXJzaXN0ZW50PHY4OjpD
b250ZXh0PiA+IGNvbnRleHQgPSB3b3JsZC0+c2hhcmVkQ29udGV4dCgpOworICAgIGlmIChWOElz
b2xhdGVkQ29udGV4dCogaXNvbGF0ZWRDb250ZXh0ID0gVjhJc29sYXRlZENvbnRleHQ6OmdldEVu
dGVyZWQoKSkgeworICAgICAgICBSZWZQdHI8U2hhcmVkUGVyc2lzdGVudDx2ODo6Q29udGV4dD4g
PiBjb250ZXh0ID0gaXNvbGF0ZWRDb250ZXh0LT5zaGFyZWRDb250ZXh0KCk7CiAgICAgICAgIGlm
IChtX2ZyYW1lICE9IFY4UHJveHk6OnJldHJpZXZlRnJhbWUoY29udGV4dC0+Z2V0KCkpKQogICAg
ICAgICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4oKTsKICAgICAgICAgcmV0dXJu
IHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5ldyhjb250ZXh0LT5nZXQoKSk7CkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4UHJveHkuaAkocmV2aXNpb24gNTI2ODIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
UHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKICAgICBjbGFzcyBTdHJpbmc7
CiAgICAgY2xhc3MgVjhFdmVudExpc3RlbmVyOwotICAgIGNsYXNzIFY4SXNvbGF0ZWRXb3JsZDsK
KyAgICBjbGFzcyBWOElzb2xhdGVkQ29udGV4dDsKICAgICBjbGFzcyBXb3JsZENvbnRleHRIYW5k
bGU7CiAKICAgICAvLyBGSVhNRTogdXNlIHN0YW5kYXJkIGxvZ2dpbmcgZmFjaWxpdGllcyBpbiBX
ZWJDb3JlLgpAQCAtNDA2LDcgKzQwNiwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IC8vIE5vdGU6IGFsdGhvdWdoIHRoZSBwb2ludGVyIGlzIHJhdywgdGhlIGluc3RhbmNlIGlzIGtl
cHQgYWxpdmUgYnkgYSBzdHJvbmcKICAgICAgICAgLy8gcmVmZXJlbmNlIHRvIHRoZSB2OCBjb250
ZXh0IGl0IGNvbnRhaW5zLCB3aGljaCBpcyBub3QgbWFkZSB3ZWFrIHVudGlsIHdlCiAgICAgICAg
IC8vIGNhbGwgd29ybGQtPmRlc3Ryb3koKS4KLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPGludCwg
VjhJc29sYXRlZFdvcmxkKj4gSXNvbGF0ZWRXb3JsZE1hcDsKKyAgICAgICAgLy8KKyAgICAgICAg
Ly8gRklYTUU6IFdlIHdhbnQgdG8gZXZlbnR1YWxseSBiZSBob2xkaW5nIHdpbmRvdyBzaGVsbHMg
aW5zdGVhZCBvZiB0aGUKKyAgICAgICAgLy8gICAgICAgIElzb2xhdGVkQ29udGV4dCBkaXJlY3Rs
eS4KKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgVjhJc29sYXRlZENvbnRleHQqPiBJc29s
YXRlZFdvcmxkTWFwOwogICAgICAgICBJc29sYXRlZFdvcmxkTWFwIG1faXNvbGF0ZWRXb3JsZHM7
CiAgICAgfTsKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JsZENvbnRleHRIYW5kbGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvV29ybGRDb250ZXh0SGFuZGxl
LmNwcAkocmV2aXNpb24gNTI2ODIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmxkQ29udGV4
dEhhbmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJXb3JsZENvbnRleHRIYW5kbGUuaCIKIAotI2luY2x1ZGUgIlY4
SXNvbGF0ZWRXb3JsZC5oIgorI2luY2x1ZGUgIlY4SXNvbGF0ZWRDb250ZXh0LmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApAQCAtNDEsOCArNDEsOCBAQCBXb3JsZENvbnRleHRIYW5kbGU6Oldv
cmxkQ29udGV4dEhhbmRsZShXCiAgICAgaWYgKHdvcmxkVG9Vc2UgPT0gVXNlTWFpbldvcmxkKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoVjhJc29sYXRlZFdvcmxkKiB3b3JsZCA9IFY4SXNv
bGF0ZWRXb3JsZDo6Z2V0RW50ZXJlZCgpKQotICAgICAgICBtX2NvbnRleHQgPSB3b3JsZC0+c2hh
cmVkQ29udGV4dCgpOworICAgIGlmIChWOElzb2xhdGVkQ29udGV4dCogY29udGV4dCA9IFY4SXNv
bGF0ZWRDb250ZXh0OjpnZXRFbnRlcmVkKCkpCisgICAgICAgIG1fY29udGV4dCA9IGNvbnRleHQt
PnNoYXJlZENvbnRleHQoKTsKIH0KIAogdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBXb3JsZENvbnRl
eHRIYW5kbGU6OmFkanVzdGVkQ29udGV4dChWOFByb3h5KiBwcm94eSkgY29uc3QK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45720</attachid>
            <date>2009-12-31 11:18:34 -0800</date>
            <delta_ts>2010-01-05 11:04:32 -0800</delta_ts>
            <desc>Patch with linux build fix</desc>
            <filename>bug-33087-20091231111832.patch</filename>
            <type>text/plain</type>
            <size>55318</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MjY4MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjAgQEAKKzIwMDktMTItMzEgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbVjhd
IFNlcGFyYXRlIERPTVdyYXBwZXJXb3JsZCBmcm9tIFY4SXNvbGF0ZWRXb3JsZAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzMwODcKKworICAgICAgICBU
aGlzIGNoYW5nZSBzZXBhcmF0ZSBET01XcmFwcGVyV29ybGQgYW5kIElzb2xhdGVkV29ybGQgZnJv
bQorICAgICAgICBWOElzb2xhdGVkV29ybGQuICBJJ3ZlIGFsc28gcmVuYW1lZCBWOElzb2xhdGVk
V29ybGQgdG8KKyAgICAgICAgVjhJc29sYXRlZENvbnRleHQgaW4gcHJlcGFyYXRpb24gZm9yIGhh
dmluZyBtb3JlIHRoYW4gb25lIGNvbnRleHQgaW4gYQorICAgICAgICBzaW5nbGUgaXNvbGF0ZWQg
d29ybGQuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtb3ZlcyB1cyBjbG9zZXIgdG8gdHdvIGdvYWxz
OgorICAgICAgICAxKSBNYXRjaGluZyB0aGUgc3RydWN0dXJlIG9mIHRoZSBKU0MgaW1wbGVtZW50
YXRpb24gb2YgaXNvbGF0ZWQgd29ybGRzLgorICAgICAgICAyKSBMZXR0aW5nIHNjcmlwdHMgcnVu
bmluZyBpbiBpc29sYXRlZCBjb250ZXh0cyBzZWUgaW50byBvdGhlciBpZnJhbWVzCisgICAgICAg
ICAgICh3aGljaCByZXF1aXJlcyBoYXZpbmcgbW9yZSB0aGFuIG9uZSBjb250ZXh0IGluIGFuIGlz
b2xhdGVkIHdvcmxkLikKKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9ET01XcmFwcGVyV29ybGQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRP
TVdyYXBwZXJXb3JsZDo6RE9NV3JhcHBlcldvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6Om1haW5U
aHJlYWROb3JtYWxXb3JsZCk6CisgICAgICAgICogYmluZGluZ3MvdjgvRE9NV3JhcHBlcldvcmxk
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RE9NV3JhcHBlcldvcmxkOjpjcmVhdGUpOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L0lzb2xhdGVkV29ybGQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6Oklzb2xhdGVkV29ybGQ6Oklzb2xhdGVkV29ybGQpOgorICAgICAgICAoV2ViQ29y
ZTo6SXNvbGF0ZWRXb3JsZDo6fklzb2xhdGVkV29ybGQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L0lzb2xhdGVkV29ybGQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJc29sYXRlZFdvcmxk
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SXNvbGF0ZWRXb3JsZDo6Y291bnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SXNvbGF0ZWRXb3JsZDo6ZG9tRGF0YVN0b3JlKToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9NYWluVGhyZWFkRE9NRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNYWlu
VGhyZWFkRE9NRGF0YTo6Z2V0TWFpblRocmVhZFN0b3JlKToKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xs
ZXI6OmN1cnJlbnRTY3JpcHRTdGF0ZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0U3Rh
dGUuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdFN0YXRlLmg6CisgICAgICAgICog
YmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHA6CisgICAgICAgICogYmluZGluZ3Mvdjgv
VjhET01XcmFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6aW5zdGFu
dGlhdGVWOE9iamVjdCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQu
Y3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRXb3JsZC5jcHAu
CisgICAgICAgIChXZWJDb3JlOjpWOElzb2xhdGVkQ29udGV4dDo6Y29udGV4dFdlYWtSZWZlcmVu
Y2VDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpWOElzb2xhdGVkQ29udGV4dDo6VjhJc29s
YXRlZENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VjhJc29sYXRlZENvbnRleHQ6OmRlc3Ry
b3kpOgorICAgICAgICAoV2ViQ29yZTo6VjhJc29sYXRlZENvbnRleHQ6On5WOElzb2xhdGVkQ29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpWOElzb2xhdGVkQ29udGV4dDo6c2NyaXB0U3RhdGUp
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRDb250ZXh0Lmg6IENvcGllZCBmcm9t
IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZFdvcmxkLmguCisgICAgICAgIChXZWJDb3Jl
OjpWOElzb2xhdGVkQ29udGV4dDo6Z2V0RW50ZXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpWOElz
b2xhdGVkQ29udGV4dDo6d29ybGQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRX
b3JsZC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3MvdjgvVjhJc29sYXRlZFdvcmxk
Lmg6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3MvdjgvVjhQcm94eS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpWOFByb3h5OjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCk6CisgICAgICAgIChX
ZWJDb3JlOjpWOFByb3h5Ojpjb250ZXh0KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFByb3h5
Lmg6CisgICAgICAgICogYmluZGluZ3MvdjgvV29ybGRDb250ZXh0SGFuZGxlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldvcmxkQ29udGV4dEhhbmRsZTo6V29ybGRDb250ZXh0SGFuZGxlKToKKwog
MjAwOS0xMi0zMSAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA1MjY4MykKKysrIFdlYkNv
cmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC03NTIsNiArNzUyLDEwIEBACiAgICAg
ICAgICAgICAnYmluZGluZ3MvdjgvRE9NRGF0YVN0b3JlLmNwcCcsCiAgICAgICAgICAgICAnYmlu
ZGluZ3MvdjgvRE9NRGF0YVN0b3JlLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0RPTU9i
amVjdHNJbmNsdWRlLmgnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0RPTVdyYXBwZXJXb3Js
ZC5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0RPTVdyYXBwZXJXb3JsZC5oJywKKyAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9Jc29sYXRlZFdvcmxkLmNwcCcsCisgICAgICAgICAgICAn
YmluZGluZ3MvdjgvSXNvbGF0ZWRXb3JsZC5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9N
YWluVGhyZWFkRE9NRGF0YS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L01haW5UaHJl
YWRET01EYXRhLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L05QVjhPYmplY3QuY3BwJywK
QEAgLTgyMSw4ICs4MjUsOCBAQAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4SGlkZGVuUHJv
cGVydHlOYW1lLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4SW5kZXguY3BwJywKICAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9WOEluZGV4LmgnLAotICAgICAgICAgICAgJ2JpbmRpbmdz
L3Y4L1Y4SXNvbGF0ZWRXb3JsZC5jcHAnLAotICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4SXNv
bGF0ZWRXb3JsZC5oJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOElzb2xhdGVkQ29udGV4
dC5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRDb250ZXh0LmgnLAog
ICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuY3BwJywKICAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9WOExhenlFdmVudExpc3RlbmVyLmgnLAogICAgICAgICAgICAg
J2JpbmRpbmdzL3Y4L1Y4TlBPYmplY3QuY3BwJywKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvdjgv
RE9NV3JhcHBlcldvcmxkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L0RP
TVdyYXBwZXJXb3JsZC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L0RP
TVdyYXBwZXJXb3JsZC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiRE9NV3JhcHBlcldvcmxkLmgiCisKKyNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK0RPTVdyYXBwZXJXb3JsZDo6RE9NV3JhcHBlcldvcmxkKCkKK3sKKyAgICAv
LyBUaGlzIGNsYXNzIGlzIHByZXR0eSBib3JpbmcsIGh1aD8KK30KKworRE9NV3JhcHBlcldvcmxk
KiBtYWluVGhyZWFkTm9ybWFsV29ybGQoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChSZWZQdHI8RE9NV3JhcHBlcldvcmxkPiwgY2FjaGVk
Tm9ybWFsV29ybGQsIChET01XcmFwcGVyV29ybGQ6OmNyZWF0ZSgpKSk7CisgICAgcmV0dXJuIGNh
Y2hlZE5vcm1hbFdvcmxkLmdldCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVdyYXBwZXJXb3JsZC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvdjgvRE9NV3JhcHBlcldvcmxkLmgJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL2JpbmRpbmdzL3Y4L0RPTVdyYXBwZXJXb3JsZC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBET01XcmFwcGVyV29ybGRfaAorI2RlZmluZSBET01XcmFwcGVyV29ybGRf
aAorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisv
LyBUaGlzIGNsYXNzIHJlcHJlc2VudCBhIGNvbGxlY3Rpb24gb2YgRE9NIHdyYXBwZXJzIGZvciBh
IHNwZWNpZmljIHdvcmxkLgorLy8gVGhlIGJhc2UgY2xhc3MgaXMgcHJldHR5IGJvcmluZyBiZWNh
dXNlIHRoZSB3cmFwcGVycyBhcmUgYWN0dWFsbHkgc3RvcmVkCisvLyBzdGF0aWNhbGx5IGluIFY4
RE9NTWFwIGFuZCBnYXJiYWdlIGNvbGxlY3RlZCBieSBWOCBpdHNlbGYuCitjbGFzcyBET01XcmFw
cGVyV29ybGQgOiBwdWJsaWMgUmVmQ291bnRlZDxET01XcmFwcGVyV29ybGQ+IHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxET01XcmFwcGVyV29ybGQ+IGNyZWF0ZSgpIHsgcmV0dXJu
IGFkb3B0UmVmKG5ldyBET01XcmFwcGVyV29ybGQoKSk7IH0KKworcHJvdGVjdGVkOgorICAgIERP
TVdyYXBwZXJXb3JsZCgpOworfTsKKworRE9NV3JhcHBlcldvcmxkKiBtYWluVGhyZWFkTm9ybWFs
V29ybGQoKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRE9NV3JhcHBl
cldvcmxkX2gKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvSXNvbGF0ZWRXb3JsZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9Jc29sYXRlZFdvcmxkLmNwcAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvSXNvbGF0ZWRXb3JsZC5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSXNvbGF0
ZWRXb3JsZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2ludCBJc29sYXRlZFdvcmxkOjpp
c29sYXRlZFdvcmxkQ291bnQgPSAwOworCitJc29sYXRlZFdvcmxkOjpJc29sYXRlZFdvcmxkKCkK
K3sKKyAgICArK2lzb2xhdGVkV29ybGRDb3VudDsKK30KKworSXNvbGF0ZWRXb3JsZDo6fklzb2xh
dGVkV29ybGQoKQoreworICAgIC0taXNvbGF0ZWRXb3JsZENvdW50OworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L0lzb2xhdGVkV29ybGQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L0lzb2xhdGVkV29ybGQuaAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvSXNvbGF0ZWRXb3JsZC5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJc29sYXRlZFdvcmxkX2gKKyNkZWZpbmUgSXNvbGF0
ZWRXb3JsZF9oCisKKyNpbmNsdWRlICJET01XcmFwcGVyV29ybGQuaCIKKyNpbmNsdWRlICJWOERP
TU1hcC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEFuIERPTVdyYXBwZXJXb3JsZCBv
dGhlciB0aGFuIHRoZSB0aHJlYWQncyBub3JtYWwgd29ybGQuCitjbGFzcyBJc29sYXRlZFdvcmxk
IDogcHVibGljIERPTVdyYXBwZXJXb3JsZCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8SXNvbGF0ZWRXb3JsZD4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IElzb2xhdGVk
V29ybGQoKSk7IH0KKyAgICBzdGF0aWMgaW50IGNvdW50KCkgeyByZXR1cm4gaXNvbGF0ZWRXb3Js
ZENvdW50OyB9CisKKyAgICBET01EYXRhU3RvcmUqIGRvbURhdGFTdG9yZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZG9tRGF0YVN0b3JlLmdldFN0b3JlKCk7IH0KKworcHJvdGVjdGVkOgorICAgIElzb2xh
dGVkV29ybGQoKTsKKyAgICB+SXNvbGF0ZWRXb3JsZCgpOworCitwcml2YXRlOgorICAgIC8vIFRo
ZSBiYWNraW5nIHN0b3JlIGZvciB0aGUgaXNvbGF0ZWQgd29ybGQncyBET00gd3JhcHBlcnMuICBU
aGlzIGNsYXNzCisgICAgLy8gZG9lc24ndCBoYXZlIHZpc2liaWxpdHkgaW50byB0aGUgd3JhcHBl
cnMuICBUaGlzIGhhbmRsZSBzaW1wbHkgaGVscHMKKyAgICAvLyBtYW5hZ2UgdGhlaXIgbGlmZXRp
bWUuCisgICAgRE9NRGF0YVN0b3JlSGFuZGxlIG1fZG9tRGF0YVN0b3JlOworCisgICAgc3RhdGlj
IGludCBpc29sYXRlZFdvcmxkQ291bnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBJc29sYXRlZFdvcmxkX2gKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvTWFp
blRocmVhZERPTURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvTWFp
blRocmVhZERPTURhdGEuY3BwCShyZXZpc2lvbiA1MjY4MykKKysrIFdlYkNvcmUvYmluZGluZ3Mv
djgvTWFpblRocmVhZERPTURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTWFpblRocmVhZERPTURhdGEuaCIKIAot
I2luY2x1ZGUgIlY4SXNvbGF0ZWRXb3JsZC5oIgorI2luY2x1ZGUgIlY4SXNvbGF0ZWRDb250ZXh0
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTMsOSArNTMsOSBAQCBET01EYXRhU3Rv
cmUmIE1haW5UaHJlYWRET01EYXRhOjpnZXRNYWluCiAgICAgLy8gc28gdGhhdCBpdCBjYW4gYmUg
aW5saW5lZCBieSBnZXRDdXJyZW50TWFpblRocmVhZFN0b3JlLCB3aGljaCBpcwogICAgIC8vIGEg
aG90IHNwb3QgaW4gRHJvbWFlbyBET00gdGVzdHMuCiAgICAgQVNTRVJUKFdURjo6aXNNYWluVGhy
ZWFkKCkpOwotICAgIFY4SXNvbGF0ZWRXb3JsZCogd29ybGQgPSBWOElzb2xhdGVkV29ybGQ6Omdl
dEVudGVyZWQoKTsKLSAgICBpZiAoVU5MSUtFTFkod29ybGQgIT0gMCkpCi0gICAgICAgIHJldHVy
biAqd29ybGQtPmdldERPTURhdGFTdG9yZSgpOworICAgIFY4SXNvbGF0ZWRDb250ZXh0KiBjb250
ZXh0ID0gVjhJc29sYXRlZENvbnRleHQ6OmdldEVudGVyZWQoKTsKKyAgICBpZiAoVU5MSUtFTFko
Y29udGV4dCAhPSAwKSkKKyAgICAgICAgcmV0dXJuICpjb250ZXh0LT53b3JsZCgpLT5kb21EYXRh
U3RvcmUoKTsKICAgICByZXR1cm4gbV9kZWZhdWx0U3RvcmU7CiB9CiAKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gNTI2ODMpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MSw3ICs1MSw3IEBACiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcu
aCIKICNpbmNsdWRlICJWOEJpbmRpbmdTdGF0ZS5oIgotI2luY2x1ZGUgIlY4SXNvbGF0ZWRXb3Js
ZC5oIgorI2luY2x1ZGUgIlY4SXNvbGF0ZWRDb250ZXh0LmgiCiAjaW5jbHVkZSAiVjhOUE9iamVj
dC5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKICNpbmNsdWRlICJXaWRnZXQuaCIKQEAgLTM3NCw4
ICszNzQsOCBAQCBTY3JpcHRTdGF0ZSogU2NyaXB0Q29udHJvbGxlcjo6bWFpbldvcmxkCiAKIFNj
cmlwdFN0YXRlKiBTY3JpcHRDb250cm9sbGVyOjpjdXJyZW50U2NyaXB0U3RhdGUoKQogewotICAg
IGlmIChWOElzb2xhdGVkV29ybGQqIHdvcmxkID0gVjhJc29sYXRlZFdvcmxkOjpnZXRFbnRlcmVk
KCkpCi0gICAgICAgIHJldHVybiB3b3JsZC0+c2NyaXB0U3RhdGUoKTsKKyAgICBpZiAoVjhJc29s
YXRlZENvbnRleHQqIGNvbnRleHQgPSBWOElzb2xhdGVkQ29udGV4dDo6Z2V0RW50ZXJlZCgpKQor
ICAgICAgICByZXR1cm4gY29udGV4dC0+c2NyaXB0U3RhdGUoKTsKICAgICBGcmFtZSogZnJhbWUg
PSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lRm9yQ3VycmVudENvbnRleHQoKTsKICAgICBBU1NFUlQo
ZnJhbWUpOwogICAgIHJldHVybiBmcmFtZS0+c2NyaXB0KCktPm1haW5Xb3JsZFNjcmlwdFN0YXRl
KCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFN0YXRlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFN0YXRlLmNwcAkocmV2aXNpb24gNTI2ODMp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzMsMTEgKzczLDQgQEAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlRnJvbVBhZ2UoRE9NV3Jh
cAogICAgIHJldHVybiBwYWdlLT5tYWluRnJhbWUoKS0+c2NyaXB0KCktPm1haW5Xb3JsZFNjcmlw
dFN0YXRlKCk7CiB9CiAKLS8vIEZJWE1FOiBTdHViIG1ldGhvZCBzbyB3ZSBjb21waWxlLiAgQ3Vy
cmVudGx5IGNhbGxlZCBmcm9tIEZyYW1lTG9hZGVyLmNwcC4KLURPTVdyYXBwZXJXb3JsZCogbWFp
blRocmVhZE5vcm1hbFdvcmxkKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKERPTVdyYXBw
ZXJXb3JsZCwgb25lV29ybGQsICgpKTsKLSAgICByZXR1cm4gJm9uZVdvcmxkOwotfQotCiB9Cklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFN0YXRlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy92OC9TY3JpcHRTdGF0ZS5oCShyZXZpc2lvbiA1MjY4MykKKysrIFdlYkNv
cmUvYmluZGluZ3MvdjgvU2NyaXB0U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEs
NyBAQAogI2lmbmRlZiBTY3JpcHRTdGF0ZV9oCiAjZGVmaW5lIFNjcmlwdFN0YXRlX2gKIAorI2lu
Y2x1ZGUgIkRPTVdyYXBwZXJXb3JsZC5oIgogI2luY2x1ZGUgPHY4Lmg+CiAjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTcwLDE0ICs3
MSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGVG
cm9tTm9kZShET01XcmFwcGVyV29ybGQqLCBOb2RlKik7CiAgICAgU2NyaXB0U3RhdGUqIHNjcmlw
dFN0YXRlRnJvbVBhZ2UoRE9NV3JhcHBlcldvcmxkKiwgUGFnZSopOwogCi0gICAgRE9NV3JhcHBl
cldvcmxkKiBtYWluVGhyZWFkTm9ybWFsV29ybGQoKTsKICAgICBpbmxpbmUgRE9NV3JhcHBlcldv
cmxkKiBkZWJ1Z2dlcldvcmxkKCkgeyByZXR1cm4gbWFpblRocmVhZE5vcm1hbFdvcmxkKCk7IH0K
ICAgICBpbmxpbmUgRE9NV3JhcHBlcldvcmxkKiBwbHVnaW5Xb3JsZCgpIHsgcmV0dXJuIG1haW5U
aHJlYWROb3JtYWxXb3JsZCgpOyB9CiAKLSAgICAvLyBEdW1teSBjbGFzcyB0byBhdm9pZCBhIGJ1
bmNoIG9mIGlmZGVmJ3MgaW4gV2ViQ29yZS4KLSAgICBjbGFzcyBET01XcmFwcGVyV29ybGQgOiBw
dWJsaWMgUmVmQ291bnRlZDxET01XcmFwcGVyV29ybGQ+IHsKLSAgICB9OwotCiB9CiAKICNlbmRp
ZiAvLyBTY3JpcHRTdGF0ZV9oCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93
U2hlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dT
aGVsbC5jcHAJKHJldmlzaW9uIDUyNjgzKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdp
bmRvd1NoZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNiBAQAogI2luY2x1ZGUg
IlY4RE9NV2luZG93LmgiCiAjaW5jbHVkZSAiVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuaCIKICNpbmNs
dWRlICJWOEluZGV4LmgiCi0jaW5jbHVkZSAiVjhJc29sYXRlZFdvcmxkLmgiCiAjaW5jbHVkZSAi
VjhQcm94eS5oIgogI2luY2x1ZGUgIldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oIgogCklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCShyZXZpc2lvbiA1MjY4MykKKysr
IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDksNyArNDksNyBAQAogI2luY2x1ZGUgIlY4RXZlbnRMaXN0ZW5lckxpc3QuaCIKICNpbmNsdWRl
ICJWOEhUTUxDb2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiVjhJbmRleC5oIgotI2luY2x1ZGUgIlY4
SXNvbGF0ZWRXb3JsZC5oIgorI2luY2x1ZGUgIlY4SXNvbGF0ZWRDb250ZXh0LmgiCiAjaW5jbHVk
ZSAiVjhMb2NhdGlvbi5oIgogI2luY2x1ZGUgIlY4Tm9kZUxpc3QuaCIKICNpbmNsdWRlICJWOFBy
b3h5LmgiCkBAIC03OTAsMTEgKzc5MCwxMiBAQCB2ODo6TG9jYWw8djg6Ok9iamVjdD4gVjhET01X
cmFwcGVyOjppbnN0CiAgICAgaWYgKGRlc2NyaXB0b3JUeXBlID09IFY4Q2xhc3NJbmRleDo6SFRN
TENPTExFQ1RJT04gJiYgc3RhdGljX2Nhc3Q8SFRNTENvbGxlY3Rpb24qPihpbXBsKS0+dHlwZSgp
ID09IERvY0FsbCkKICAgICAgICAgZGVzY3JpcHRvclR5cGUgPSBWOENsYXNzSW5kZXg6OkhUTUxB
TExDT0xMRUNUSU9OOwogCi0gICAgaWYgKFY4SXNvbGF0ZWRXb3JsZDo6Z2V0RW50ZXJlZCgpKSB7
CisgICAgaWYgKFY4SXNvbGF0ZWRDb250ZXh0OjpnZXRFbnRlcmVkKCkpIHsKICAgICAgICAgLy8g
VGhpcyBlZmZlY3RpdmVseSBkaXNhYmxlcyB0aGUgd3JhcHBlciBjYWNoZSBmb3IgaXNvbGF0ZWQg
d29ybGRzLgogICAgICAgICBwcm94eSA9IDA7CiAgICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVk
IGEgd3JhcHBlciBjYWNoZSBmb3IgdGhlIGlzb2xhdGVkIHdvcmxkPyAgV2Ugc2hvdWxkCi0gICAg
ICAgIC8vIHNlZSBpZiB0aGUgcGVyZm9ybWFuY2UgZ2FpbnMgYXJlIHdvcnRoIHdoaWxlLgorICAg
ICAgICAvLyAgICAgICAgc2VlIGlmIHRoZSBwZXJmb3JtYW5jZSBnYWlucyBhcmUgd29ydGggd2hp
bGUuCisgICAgICAgIC8vIFdlJ2xsIGdldCBvbmUgb25jZSB3ZSBnaXZlIHRoZSBpc29sYXRlZCBj
b250ZXh0IGEgcHJvcGVyIHdpbmRvdyBzaGVsbC4KICAgICB9IGVsc2UgaWYgKCFwcm94eSkKICAg
ICAgICAgcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZSgpOwogCkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4SXNvbGF0ZWRDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4SXNvbGF0ZWRDb250ZXh0LmNwcAkocmV2aXNpb24gNTI2NjYpCShmcm9tIFdlYkNv
cmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZFdvcmxkLmNwcDo1MjY2NikKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVjhJc29sYXRlZFdvcmxkLmgi
CisKKyNpbmNsdWRlIDx2OC5oPgorCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFt
ZUxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgIkhhc2hNYXAuaCIKKyNpbmNsdWRlICJTY3JpcHRD
b250cm9sbGVyLmgiCisjaW5jbHVkZSAiVjhET01XaW5kb3cuaCIKKyNpbmNsdWRlICJWOEhpZGRl
blByb3BlcnR5TmFtZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2ludCBWOElzb2xhdGVk
V29ybGQ6Omlzb2xhdGVkV29ybGRDb3VudCA9IDA7CisKK3ZvaWQgVjhJc29sYXRlZFdvcmxkOjpj
b250ZXh0V2Vha1JlZmVyZW5jZUNhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gb2Jq
ZWN0LCB2b2lkKiBpc29sYXRlZF93b3JsZCkKK3sKKyAgICAvLyBPdXIgY29udGV4dCBpcyBnb2lu
ZyBhd2F5LiAgVGltZSB0byBjbGVhbiB1cCB0aGUgd29ybGQuCisgICAgVjhJc29sYXRlZFdvcmxk
KiB3b3JsZCA9IHN0YXRpY19jYXN0PFY4SXNvbGF0ZWRXb3JsZCo+KGlzb2xhdGVkX3dvcmxkKTsK
KyAgICBkZWxldGUgd29ybGQ7Cit9CisKK1Y4SXNvbGF0ZWRXb3JsZDo6VjhJc29sYXRlZFdvcmxk
KFY4UHJveHkqIHByb3h5LCBpbnQgZXh0ZW5zaW9uR3JvdXApCit7CisgICAgKytpc29sYXRlZFdv
cmxkQ291bnQ7CisKKyAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7CisgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBiZSBjcmVhdGluZyBhIG5ldyBWOERPTVdpbmRvd1NoZWxsIGhlcmUgaW5zdGVhZCBv
ZiByaXBpbmcgb3V0IHRoZSBjb250ZXh0LgorICAgIG1fY29udGV4dCA9IFNoYXJlZFBlcnNpc3Rl
bnQ8djg6OkNvbnRleHQ+OjpjcmVhdGUocHJveHktPndpbmRvd1NoZWxsKCktPmNyZWF0ZU5ld0Nv
bnRleHQodjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCBleHRlbnNpb25Hcm91cCkpOworICAgIGlm
IChtX2NvbnRleHQtPmdldCgpLklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8g
UnVuIGNvZGUgaW4gdGhlIG5ldyBjb250ZXh0LgorICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250
ZXh0X3Njb3BlKG1fY29udGV4dC0+Z2V0KCkpOworCisgICAgZ2V0R2xvYmFsT2JqZWN0KG1fY29u
dGV4dC0+Z2V0KCkpLT5TZXRQb2ludGVySW5JbnRlcm5hbEZpZWxkKFY4Q3VzdG9tOjprRE9NV2lu
ZG93RW50ZXJlZElzb2xhdGVkV29ybGRJbmRleCwgdGhpcyk7CisKKyAgICBWOERPTVdpbmRvd1No
ZWxsOjppbnN0YWxsSGlkZGVuT2JqZWN0UHJvdG90eXBlKG1fY29udGV4dC0+Z2V0KCkpOworICAg
IC8vIEZJWE1FOiBUaGlzIHdpbGwgZ28gYXdheSBvbmNlIHdlIGhhdmUgYSB3aW5kb3dTaGVsbCBm
b3IgdGhlIGlzb2xhdGVkIHdvcmxkLgorICAgIHByb3h5LT53aW5kb3dTaGVsbCgpLT5pbnN0YWxs
RE9NV2luZG93KG1fY29udGV4dC0+Z2V0KCksIHByb3h5LT5mcmFtZSgpLT5kb21XaW5kb3coKSk7
CisKKyAgICAvLyBVc2luZyB0aGUgZGVmYXVsdCBzZWN1cml0eSB0b2tlbiBtZWFucyB0aGF0IHRo
ZSBjYW5BY2Nlc3MgaXMgYWx3YXlzCisgICAgLy8gY2FsbGVkLCB3aGljaCBpcyBzbG93LgorICAg
IC8vIEZJWE1FOiBVc2UgdG9rZW5zIHdoZXJlIHBvc3NpYmxlLiBUaGlzIHdpbGwgbWVhbiBrZWVw
aW5nIHRyYWNrIG9mIGFsbAorICAgIC8vICAgICAgICBjcmVhdGVkIGNvbnRleHRzIHNvIHRoYXQg
dGhleSBjYW4gYWxsIGJlIHVwZGF0ZWQgd2hlbiB0aGUKKyAgICAvLyAgICAgICAgZG9jdW1lbnQg
ZG9tYWluCisgICAgLy8gICAgICAgIGNoYW5nZXMuCisgICAgbV9jb250ZXh0LT5nZXQoKS0+VXNl
RGVmYXVsdFNlY3VyaXR5VG9rZW4oKTsKKworICAgIHByb3h5LT5mcmFtZSgpLT5sb2FkZXIoKS0+
Y2xpZW50KCktPmRpZENyZWF0ZUlzb2xhdGVkU2NyaXB0Q29udGV4dCgpOworfQorCit2b2lkIFY4
SXNvbGF0ZWRXb3JsZDo6ZGVzdHJveSgpCit7CisgICAgbV9jb250ZXh0LT5nZXQoKS5NYWtlV2Vh
ayh0aGlzLCAmY29udGV4dFdlYWtSZWZlcmVuY2VDYWxsYmFjayk7Cit9CisKK1Y4SXNvbGF0ZWRX
b3JsZDo6flY4SXNvbGF0ZWRXb3JsZCgpCit7CisgICAgLS1pc29sYXRlZFdvcmxkQ291bnQ7Cisg
ICAgbV9jb250ZXh0LT5kaXNwb3NlSGFuZGxlKCk7Cit9CisKK1NjcmlwdFN0YXRlKiBWOElzb2xh
dGVkV29ybGQ6OnNjcmlwdFN0YXRlKCkKK3sKKyAgICBpZiAoIW1fc2NyaXB0U3RhdGUpIHsKKyAg
ICAgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOworICAgICAgICB2ODo6SGFuZGxlPHY4OjpDb250
ZXh0PiBjb250ZXh0ID0gbV9jb250ZXh0LmdldCgpLT5nZXQoKTsKKyAgICAgICAgbV9zY3JpcHRT
dGF0ZS5zZXQobmV3IFNjcmlwdFN0YXRlKFY4UHJveHk6OnJldHJpZXZlRnJhbWUoY29udGV4dCks
IGNvbnRleHQpKTsKKyAgICB9CisgICAgcmV0dXJuIG1fc2NyaXB0U3RhdGUuZ2V0KCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29s
YXRlZENvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29s
YXRlZENvbnRleHQuY3BwCShyZXZpc2lvbiA1MjY2NikKKysrIFdlYkNvcmUvYmluZGluZ3Mvdjgv
VjhJc29sYXRlZENvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw5ICszMCw3IEBACiAK
ICNpbmNsdWRlICJjb25maWcuaCIKIAotI2luY2x1ZGUgIlY4SXNvbGF0ZWRXb3JsZC5oIgotCi0j
aW5jbHVkZSA8djguaD4KKyNpbmNsdWRlICJWOElzb2xhdGVkQ29udGV4dC5oIgogCiAjaW5jbHVk
ZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgpAQCAtNDAsMjIgKzM4
LDIxIEBACiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlY4RE9NV2lu
ZG93LmgiCiAjaW5jbHVkZSAiVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuaCIKKyNpbmNsdWRlIDx2OC5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWludCBWOElzb2xhdGVkV29ybGQ6Omlzb2xhdGVk
V29ybGRDb3VudCA9IDA7CiAKLXZvaWQgVjhJc29sYXRlZFdvcmxkOjpjb250ZXh0V2Vha1JlZmVy
ZW5jZUNhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gb2JqZWN0LCB2b2lkKiBpc29s
YXRlZF93b3JsZCkKK3ZvaWQgVjhJc29sYXRlZENvbnRleHQ6OmNvbnRleHRXZWFrUmVmZXJlbmNl
Q2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiBvYmplY3QsIHZvaWQqIGlzb2xhdGVk
Q29udGV4dCkKIHsKICAgICAvLyBPdXIgY29udGV4dCBpcyBnb2luZyBhd2F5LiAgVGltZSB0byBj
bGVhbiB1cCB0aGUgd29ybGQuCi0gICAgVjhJc29sYXRlZFdvcmxkKiB3b3JsZCA9IHN0YXRpY19j
YXN0PFY4SXNvbGF0ZWRXb3JsZCo+KGlzb2xhdGVkX3dvcmxkKTsKLSAgICBkZWxldGUgd29ybGQ7
CisgICAgVjhJc29sYXRlZENvbnRleHQqIGNvbnRleHQgPSBzdGF0aWNfY2FzdDxWOElzb2xhdGVk
Q29udGV4dCo+KGlzb2xhdGVkQ29udGV4dCk7CisgICAgZGVsZXRlIGNvbnRleHQ7CiB9CiAKLVY4
SXNvbGF0ZWRXb3JsZDo6VjhJc29sYXRlZFdvcmxkKFY4UHJveHkqIHByb3h5LCBpbnQgZXh0ZW5z
aW9uR3JvdXApCitWOElzb2xhdGVkQ29udGV4dDo6VjhJc29sYXRlZENvbnRleHQoVjhQcm94eSog
cHJveHksIGludCBleHRlbnNpb25Hcm91cCkKKyAgICA6IG1fd29ybGQoSXNvbGF0ZWRXb3JsZDo6
Y3JlYXRlKCkpCiB7Ci0gICAgKytpc29sYXRlZFdvcmxkQ291bnQ7Ci0KICAgICB2ODo6SGFuZGxl
U2NvcGUgc2NvcGU7CiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBjcmVhdGluZyBhIG5ldyBW
OERPTVdpbmRvd1NoZWxsIGhlcmUgaW5zdGVhZCBvZiByaXBpbmcgb3V0IHRoZSBjb250ZXh0Lgog
ICAgIG1fY29udGV4dCA9IFNoYXJlZFBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+OjpjcmVhdGUocHJv
eHktPndpbmRvd1NoZWxsKCktPmNyZWF0ZU5ld0NvbnRleHQodjg6OkhhbmRsZTx2ODo6T2JqZWN0
PigpLCBleHRlbnNpb25Hcm91cCkpOwpAQCAtNjMsNyArNjAsNyBAQCBWOElzb2xhdGVkV29ybGQ6
OlY4SXNvbGF0ZWRXb3JsZChWOFByb3h5CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFJ1biBj
b2RlIGluIHRoZSBuZXcgY29udGV4dC4KLSAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dF9z
Y29wZShtX2NvbnRleHQtPmdldCgpKTsKKyAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNj
b3BlKG1fY29udGV4dC0+Z2V0KCkpOwogCiAgICAgZ2V0R2xvYmFsT2JqZWN0KG1fY29udGV4dC0+
Z2V0KCkpLT5TZXRQb2ludGVySW5JbnRlcm5hbEZpZWxkKFY4Q3VzdG9tOjprRE9NV2luZG93RW50
ZXJlZElzb2xhdGVkV29ybGRJbmRleCwgdGhpcyk7CiAKQEAgLTgyLDE4ICs3OSwxNyBAQCBWOElz
b2xhdGVkV29ybGQ6OlY4SXNvbGF0ZWRXb3JsZChWOFByb3h5CiAgICAgcHJveHktPmZyYW1lKCkt
PmxvYWRlcigpLT5jbGllbnQoKS0+ZGlkQ3JlYXRlSXNvbGF0ZWRTY3JpcHRDb250ZXh0KCk7CiB9
CiAKLXZvaWQgVjhJc29sYXRlZFdvcmxkOjpkZXN0cm95KCkKK3ZvaWQgVjhJc29sYXRlZENvbnRl
eHQ6OmRlc3Ryb3koKQogewogICAgIG1fY29udGV4dC0+Z2V0KCkuTWFrZVdlYWsodGhpcywgJmNv
bnRleHRXZWFrUmVmZXJlbmNlQ2FsbGJhY2spOwogfQogCi1WOElzb2xhdGVkV29ybGQ6On5WOElz
b2xhdGVkV29ybGQoKQorVjhJc29sYXRlZENvbnRleHQ6On5WOElzb2xhdGVkQ29udGV4dCgpCiB7
Ci0gICAgLS1pc29sYXRlZFdvcmxkQ291bnQ7CiAgICAgbV9jb250ZXh0LT5kaXNwb3NlSGFuZGxl
KCk7CiB9CiAKLVNjcmlwdFN0YXRlKiBWOElzb2xhdGVkV29ybGQ6OnNjcmlwdFN0YXRlKCkKK1Nj
cmlwdFN0YXRlKiBWOElzb2xhdGVkQ29udGV4dDo6c2NyaXB0U3RhdGUoKQogewogICAgIGlmICgh
bV9zY3JpcHRTdGF0ZSkgewogICAgICAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7CkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOElzb2xhdGVkQ29udGV4dC5oCShyZXZpc2lvbiA1MjY2NikJKGZy
b20gV2ViQ29yZS9iaW5kaW5ncy92OC9WOElzb2xhdGVkV29ybGQuaDo1MjY2NikKKysrIFdlYkNv
cmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgVjhJc29sYXRlZFdvcmxkX2gKKyNkZWZpbmUgVjhJc29sYXRlZFdv
cmxkX2gKKworI2luY2x1ZGUgPHY4Lmg+CisKKyNpbmNsdWRlICJWOERPTU1hcC5oIgorI2luY2x1
ZGUgIlY4SW5kZXguaCIKKyNpbmNsdWRlICJWOFByb3h5LmgiCisjaW5jbHVkZSAiVjhVdGlsaXRp
ZXMuaCIKKyNpbmNsdWRlICJTY3JpcHRTb3VyY2VDb2RlLmgiICAvLyBmb3IgV2ViQ29yZTo6U2Ny
aXB0U291cmNlQ29kZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBWOFByb3h5
OworCisgICAgLy8gVjhJc29sYXRlZFdvcmxkCisgICAgLy8KKyAgICAvLyBWOElzb2xhdGVkV29y
bGQgcmVwcmVzZW50cyBhIGlzb2xhdGVkIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCBmb3IKKyAgICAv
LyBKYXZhU2NyaXB0LiAgRWFjaCBpc29sYXRlZCB3b3JsZCBleGVjdXRlcyBpbiBwYXJhbGxlbCB3
aXRoIHRoZSBtYWluCisgICAgLy8gSmF2YVNjcmlwdCB3b3JsZC4gIEFuIGlzb2xhdGVkIHdvcmxk
IGhhcyBhY2Nlc3MgdG8gdGhlIHNhbWUgRE9NIGRhdGEKKyAgICAvLyBzdHJ1Y3R1cmVzIGFzIHRo
ZSBtYWluIHdvcmxkIGJ1dCBub25lIG9mIHRoZSBKYXZhU2NyaXB0IHBvaW50ZXJzLgorICAgIC8v
CisgICAgLy8gSXQgaXMgYW4gZXJyb3IgdG8gZXZlciBzaGFyZSBhIEphdmFTY3JpcHQgcG9pbnRl
ciBiZXR3ZWVuIHR3byBpc29sYXRlZAorICAgIC8vIHdvcmxkcyBvciBiZXR3ZWVuIGFuIGlzb2xh
dGVkIHdvcmxkIGFuZCB0aGUgbWFpbiB3b3JsZC4gIEJlY2F1c2UKKyAgICAvLyBpc29sYXRlZCB3
b3JsZHMgaGF2ZSBhY2Nlc3MgdG8gdGhlIERPTSwgdGhleSBuZWVkIHRoZWlyIG93biBET00gd3Jh
cHBlcnMKKyAgICAvLyB0byBhdm9pZCBoYXZpbmcgcG9pbnRlcnMgdG8gdGhlIG1haW4gd29ybGQn
cyBET00gd3JhcHBlcnMgKHdoaWNoIGFyZQorICAgIC8vIEphdmFTY3JpcHQgb2JqZWN0cykuCisg
ICAgLy8KKyAgICBjbGFzcyBWOElzb2xhdGVkV29ybGQgeworICAgIHB1YmxpYzoKKyAgICAgICAg
Ly8gQ3JlYXRlcyBhbiBpc29sYXRlZCB3b3JsZC4gVG8gZGVzdHJveSBpdCwgY2FsbCBkZXN0cm95
KCkuCisgICAgICAgIC8vIFRoaXMgd2lsbCBkZWxldGUgdGhlIGlzb2xhdGVkIHdvcmxkIHdoZW4g
dGhlIGNvbnRleHQgaXQgb3ducyBpcyBHQydkLgorICAgICAgICBWOElzb2xhdGVkV29ybGQoVjhQ
cm94eSogcHJveHksIGludCBleHRlbnNpb25Hcm91cCk7CisgICAgICAgIH5WOElzb2xhdGVkV29y
bGQoKTsKKworICAgICAgICAvLyBDYWxsIHRoaXMgdG8gZGVzdHJveSB0aGUgaXNvbGF0ZWQgd29y
bGQuIEl0IHdpbGwgYmUgZGVsZXRlZCBzb21ldGltZQorICAgICAgICAvLyBhZnRlciB0aGlzIGNh
bGwsIG9uY2UgYWxsIHNjcmlwdCByZWZlcmVuY2VzIHRvIHRoZSB3b3JsZCdzIGNvbnRleHQKKyAg
ICAgICAgLy8gaGF2ZSBiZWVuIGRyb3BwZWQuCisgICAgICAgIHZvaWQgZGVzdHJveSgpOworCisg
ICAgICAgIC8vIFJldHVybnMgdGhlIGlzb2xhdGVkIHdvcmxkIGFzc29jaWF0ZWQgd2l0aAorICAg
ICAgICAvLyB2ODo6Q29udGV4dDo6R2V0RW50ZXJlZCgpLiAgQmVjYXVzZSB3b3JsZHMgYXJlIGlz
b2xhdGVkLCB0aGUgZW50aXJlCisgICAgICAgIC8vIEphdmFTY3JpcHQgY2FsbCBzdGFjayBzaG91
bGQgYmUgZnJvbSB0aGUgc2FtZSBpc29sYXRlZCB3b3JsZC4KKyAgICAgICAgLy8gUmV0dXJucyBO
VUxMIGlmIHRoZSBlbnRlcmVkIGNvbnRleHQgaXMgZnJvbSB0aGUgbWFpbiB3b3JsZC4KKyAgICAg
ICAgLy8KKyAgICAgICAgLy8gRklYTUU6IENvbnNpZGVyIGVkZ2UgY2FzZXMgd2l0aCBET00gbXV0
YXRpb24gZXZlbnRzIHRoYXQgbWlnaHQKKyAgICAgICAgLy8gdmlvbGF0ZSB0aGlzIGludmFyaWFu
dC4KKyAgICAgICAgLy8KKyAgICAgICAgc3RhdGljIFY4SXNvbGF0ZWRXb3JsZCogZ2V0RW50ZXJl
ZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgYSB0ZW1wb3JhcnkgcGVyZm9y
bWFuY2Ugb3B0aW1pemF0aW9uLiAgIEVzc2VudGlhbGx5LAorICAgICAgICAgICAgLy8gR2V0SGlk
ZGVuVmFsdWUgaXMgdG9vIHNsb3cgZm9yIHRoaXMgY29kZSBwYXRoLiAgV2UgbmVlZCB0byBnZXQg
dGhlCisgICAgICAgICAgICAvLyBWOCB0ZWFtIHRvIGFkZCBhIHJlYWwgcHJvcGVydHkgdG8gdjg6
OkNvbnRleHQgZm9yIGlzb2xhdGVkIHdvcmxkcy4KKyAgICAgICAgICAgIC8vIFVudGlsIHRoZW4s
IHdlIG9wdGltaXplIHRoZSBjb21tb24gY2FzZSBvZiBub3QgaGF2aW5nIGFueSBpc29sYXRlZAor
ICAgICAgICAgICAgLy8gd29ybGRzIGF0IGFsbC4KKyAgICAgICAgICAgIGlmICghaXNvbGF0ZWRX
b3JsZENvdW50KQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgaWYgKCF2
ODo6Q29udGV4dDo6SW5Db250ZXh0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxWOElzb2xhdGVkV29ybGQqPihnZXRHbG9i
YWxPYmplY3Qodjg6OkNvbnRleHQ6OkdldEVudGVyZWQoKSktPkdldFBvaW50ZXJGcm9tSW50ZXJu
YWxGaWVsZChWOEN1c3RvbTo6a0RPTVdpbmRvd0VudGVyZWRJc29sYXRlZFdvcmxkSW5kZXgpKTsK
KyAgICAgICAgfQorCisgICAgICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQoKSB7
IHJldHVybiBtX2NvbnRleHQtPmdldCgpOyB9CisgICAgICAgIFBhc3NSZWZQdHI8U2hhcmVkUGVy
c2lzdGVudDx2ODo6Q29udGV4dD4gPiBzaGFyZWRDb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0
OyB9CisKKyAgICAgICAgRE9NRGF0YVN0b3JlKiBnZXRET01EYXRhU3RvcmUoKSBjb25zdCB7IHJl
dHVybiBtX2RvbURhdGFTdG9yZS5nZXRTdG9yZSgpOyB9CisKKyAgICAgICAgU2NyaXB0U3RhdGUq
IHNjcmlwdFN0YXRlKCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBnZXRHbG9iYWxPYmplY3Qodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD46OkNhc3QoY29udGV4dC0+R2xvYmFsKCktPkdldFByb3RvdHlwZSgpKTsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIENhbGxlZCBieSB0aGUgZ2FyYmFnZSBjb2xsZWN0b3Igd2hlbiBvdXIgSmF2
YVNjcmlwdCBjb250ZXh0IGlzIGFib3V0CisgICAgICAgIC8vIHRvIGJlIGRlc3Ryb3llZC4KKyAg
ICAgICAgc3RhdGljIHZvaWQgY29udGV4dFdlYWtSZWZlcmVuY2VDYWxsYmFjayh2ODo6UGVyc2lz
dGVudDx2ODo6VmFsdWU+IG9iamVjdCwgdm9pZCogaXNvbGF0ZWRfd29ybGQpOworCisgICAgICAg
IC8vIFRoZSB2ODo6Q29udGV4dCBmb3IgdGhlIGlzb2xhdGVkIHdvcmxkLiAgVGhpcyBvYmplY3Qg
aXMga2VlcCBvbiB0aGUKKyAgICAgICAgLy8gaGVhcCBhcyBsb25nIGFzIHxtX2NvbnRleHR8IGhh
cyBub3QgYmVlbiBnYXJiYWdlIGNvbGxlY3RlZC4KKyAgICAgICAgUmVmUHRyPFNoYXJlZFBlcnNp
c3RlbnQ8djg6OkNvbnRleHQ+ID4gbV9jb250ZXh0OworCisgICAgICAgIC8vIFRoZSBiYWNraW5n
IHN0b3JlIGZvciB0aGUgaXNvbGF0ZWQgd29ybGQncyBET00gd3JhcHBlcnMuICBUaGlzIGNsYXNz
CisgICAgICAgIC8vIGRvZXNuJ3QgaGF2ZSB2aXNpYmlsaXR5IGludG8gdGhlIHdyYXBwZXJzLiAg
VGhpcyBoYW5kbGUgc2ltcGx5IGhlbHBzCisgICAgICAgIC8vIG1hbmFnZSB0aGVpciBsaWZldGlt
ZS4KKyAgICAgICAgRE9NRGF0YVN0b3JlSGFuZGxlIG1fZG9tRGF0YVN0b3JlOworCisgICAgICAg
IC8vIEZJWE1FOiBnZXQgcmlkIG9mIHJlZHVuZGFudCBtX2NvbnRleHQgZmllbGQuIFRoZSBjb250
ZXh0IGNhbiBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgU2NyaXB0U3RhdGUuCisgICAgICAgIE93blB0
cjxTY3JpcHRTdGF0ZT4gbV9zY3JpcHRTdGF0ZTsKKworICAgICAgICBzdGF0aWMgaW50IGlzb2xh
dGVkV29ybGRDb3VudDsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBWOElzb2xhdGVkV29ybGRfaApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOElzb2xh
dGVkQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRl
ZENvbnRleHQuaAkocmV2aXNpb24gNTI2NjYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNv
bGF0ZWRDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEwMCArMjgsOTMgQEAKICAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBWOElzb2xhdGVkV29ybGRfaAotI2RlZmluZSBWOElz
b2xhdGVkV29ybGRfaAorI2lmbmRlZiBWOElzb2xhdGVkQ29udGV4dF9oCisjZGVmaW5lIFY4SXNv
bGF0ZWRDb250ZXh0X2gKIAotI2luY2x1ZGUgPHY4Lmg+Ci0KLSNpbmNsdWRlICJWOERPTU1hcC5o
IgorI2luY2x1ZGUgIklzb2xhdGVkV29ybGQuaCIKKyNpbmNsdWRlICJTY3JpcHRTb3VyY2VDb2Rl
LmgiIC8vIGZvciBXZWJDb3JlOjpTY3JpcHRTb3VyY2VDb2RlCiAjaW5jbHVkZSAiVjhJbmRleC5o
IgogI2luY2x1ZGUgIlY4UHJveHkuaCIKICNpbmNsdWRlICJWOFV0aWxpdGllcy5oIgotI2luY2x1
ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIgIC8vIGZvciBXZWJDb3JlOjpTY3JpcHRTb3VyY2VDb2Rl
CisjaW5jbHVkZSA8djguaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgVjhQ
cm94eTsKK2NsYXNzIFY4UHJveHk7CiAKLSAgICAvLyBWOElzb2xhdGVkV29ybGQKKy8vIFY4SXNv
bGF0ZWRDb250ZXh0CisvLworLy8gVjhJc29sYXRlZENvbnRleHQgcmVwcmVzZW50cyBhIGlzb2xh
dGVkIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCBmb3IKKy8vIEphdmFTY3JpcHQuICBFYWNoIGlzb2xh
dGVkIHdvcmxkIGV4ZWN1dGVzIGluIHBhcmFsbGVsIHdpdGggdGhlIG1haW4KKy8vIEphdmFTY3Jp
cHQgd29ybGQuICBBbiBpc29sYXRlZCB3b3JsZCBoYXMgYWNjZXNzIHRvIHRoZSBzYW1lIERPTSBk
YXRhCisvLyBzdHJ1Y3R1cmVzIGFzIHRoZSBtYWluIHdvcmxkIGJ1dCBub25lIG9mIHRoZSBKYXZh
U2NyaXB0IHBvaW50ZXJzLgorLy8KKy8vIEl0IGlzIGFuIGVycm9yIHRvIGV2ZXIgc2hhcmUgYSBK
YXZhU2NyaXB0IHBvaW50ZXIgYmV0d2VlbiB0d28gaXNvbGF0ZWQKKy8vIHdvcmxkcyBvciBiZXR3
ZWVuIGFuIGlzb2xhdGVkIHdvcmxkIGFuZCB0aGUgbWFpbiB3b3JsZC4gIEJlY2F1c2UKKy8vIGlz
b2xhdGVkIHdvcmxkcyBoYXZlIGFjY2VzcyB0byB0aGUgRE9NLCB0aGV5IG5lZWQgdGhlaXIgb3du
IERPTSB3cmFwcGVycworLy8gdG8gYXZvaWQgaGF2aW5nIHBvaW50ZXJzIHRvIHRoZSBtYWluIHdv
cmxkJ3MgRE9NIHdyYXBwZXJzICh3aGljaCBhcmUKKy8vIEphdmFTY3JpcHQgb2JqZWN0cykuCitj
bGFzcyBWOElzb2xhdGVkQ29udGV4dCB7CitwdWJsaWM6CisgICAgLy8gQ3JlYXRlcyBhbiBpc29s
YXRlZCB3b3JsZC4gVG8gZGVzdHJveSBpdCwgY2FsbCBkZXN0cm95KCkuCisgICAgLy8gVGhpcyB3
aWxsIGRlbGV0ZSB0aGUgaXNvbGF0ZWQgd29ybGQgd2hlbiB0aGUgY29udGV4dCBpdCBvd25zIGlz
IEdDJ2QuCisgICAgVjhJc29sYXRlZENvbnRleHQoVjhQcm94eSogcHJveHksIGludCBleHRlbnNp
b25Hcm91cCk7CisgICAgflY4SXNvbGF0ZWRDb250ZXh0KCk7CisKKyAgICAvLyBDYWxsIHRoaXMg
dG8gZGVzdHJveSB0aGUgaXNvbGF0ZWQgd29ybGQuIEl0IHdpbGwgYmUgZGVsZXRlZCBzb21ldGlt
ZQorICAgIC8vIGFmdGVyIHRoaXMgY2FsbCwgb25jZSBhbGwgc2NyaXB0IHJlZmVyZW5jZXMgdG8g
dGhlIHdvcmxkJ3MgY29udGV4dAorICAgIC8vIGhhdmUgYmVlbiBkcm9wcGVkLgorICAgIHZvaWQg
ZGVzdHJveSgpOworCisgICAgLy8gUmV0dXJucyB0aGUgaXNvbGF0ZWQgd29ybGQgYXNzb2NpYXRl
ZCB3aXRoCisgICAgLy8gdjg6OkNvbnRleHQ6OkdldEVudGVyZWQoKS4gIEJlY2F1c2Ugd29ybGRz
IGFyZSBpc29sYXRlZCwgdGhlIGVudGlyZQorICAgIC8vIEphdmFTY3JpcHQgY2FsbCBzdGFjayBz
aG91bGQgYmUgZnJvbSB0aGUgc2FtZSBpc29sYXRlZCB3b3JsZC4KKyAgICAvLyBSZXR1cm5zIDAg
aWYgdGhlIGVudGVyZWQgY29udGV4dCBpcyBmcm9tIHRoZSBtYWluIHdvcmxkLgogICAgIC8vCi0g
ICAgLy8gVjhJc29sYXRlZFdvcmxkIHJlcHJlc2VudHMgYSBpc29sYXRlZCBleGVjdXRpb24gZW52
aXJvbm1lbnQgZm9yCi0gICAgLy8gSmF2YVNjcmlwdC4gIEVhY2ggaXNvbGF0ZWQgd29ybGQgZXhl
Y3V0ZXMgaW4gcGFyYWxsZWwgd2l0aCB0aGUgbWFpbgotICAgIC8vIEphdmFTY3JpcHQgd29ybGQu
ICBBbiBpc29sYXRlZCB3b3JsZCBoYXMgYWNjZXNzIHRvIHRoZSBzYW1lIERPTSBkYXRhCi0gICAg
Ly8gc3RydWN0dXJlcyBhcyB0aGUgbWFpbiB3b3JsZCBidXQgbm9uZSBvZiB0aGUgSmF2YVNjcmlw
dCBwb2ludGVycy4KKyAgICAvLyBGSVhNRTogQ29uc2lkZXIgZWRnZSBjYXNlcyB3aXRoIERPTSBt
dXRhdGlvbiBldmVudHMgdGhhdCBtaWdodAorICAgIC8vIHZpb2xhdGUgdGhpcyBpbnZhcmlhbnQu
CiAgICAgLy8KLSAgICAvLyBJdCBpcyBhbiBlcnJvciB0byBldmVyIHNoYXJlIGEgSmF2YVNjcmlw
dCBwb2ludGVyIGJldHdlZW4gdHdvIGlzb2xhdGVkCi0gICAgLy8gd29ybGRzIG9yIGJldHdlZW4g
YW4gaXNvbGF0ZWQgd29ybGQgYW5kIHRoZSBtYWluIHdvcmxkLiAgQmVjYXVzZQotICAgIC8vIGlz
b2xhdGVkIHdvcmxkcyBoYXZlIGFjY2VzcyB0byB0aGUgRE9NLCB0aGV5IG5lZWQgdGhlaXIgb3du
IERPTSB3cmFwcGVycwotICAgIC8vIHRvIGF2b2lkIGhhdmluZyBwb2ludGVycyB0byB0aGUgbWFp
biB3b3JsZCdzIERPTSB3cmFwcGVycyAod2hpY2ggYXJlCi0gICAgLy8gSmF2YVNjcmlwdCBvYmpl
Y3RzKS4KLSAgICAvLwotICAgIGNsYXNzIFY4SXNvbGF0ZWRXb3JsZCB7Ci0gICAgcHVibGljOgot
ICAgICAgICAvLyBDcmVhdGVzIGFuIGlzb2xhdGVkIHdvcmxkLiBUbyBkZXN0cm95IGl0LCBjYWxs
IGRlc3Ryb3koKS4KLSAgICAgICAgLy8gVGhpcyB3aWxsIGRlbGV0ZSB0aGUgaXNvbGF0ZWQgd29y
bGQgd2hlbiB0aGUgY29udGV4dCBpdCBvd25zIGlzIEdDJ2QuCi0gICAgICAgIFY4SXNvbGF0ZWRX
b3JsZChWOFByb3h5KiBwcm94eSwgaW50IGV4dGVuc2lvbkdyb3VwKTsKLSAgICAgICAgflY4SXNv
bGF0ZWRXb3JsZCgpOwotCi0gICAgICAgIC8vIENhbGwgdGhpcyB0byBkZXN0cm95IHRoZSBpc29s
YXRlZCB3b3JsZC4gSXQgd2lsbCBiZSBkZWxldGVkIHNvbWV0aW1lCi0gICAgICAgIC8vIGFmdGVy
IHRoaXMgY2FsbCwgb25jZSBhbGwgc2NyaXB0IHJlZmVyZW5jZXMgdG8gdGhlIHdvcmxkJ3MgY29u
dGV4dAotICAgICAgICAvLyBoYXZlIGJlZW4gZHJvcHBlZC4KLSAgICAgICAgdm9pZCBkZXN0cm95
KCk7Ci0KLSAgICAgICAgLy8gUmV0dXJucyB0aGUgaXNvbGF0ZWQgd29ybGQgYXNzb2NpYXRlZCB3
aXRoCi0gICAgICAgIC8vIHY4OjpDb250ZXh0OjpHZXRFbnRlcmVkKCkuICBCZWNhdXNlIHdvcmxk
cyBhcmUgaXNvbGF0ZWQsIHRoZSBlbnRpcmUKLSAgICAgICAgLy8gSmF2YVNjcmlwdCBjYWxsIHN0
YWNrIHNob3VsZCBiZSBmcm9tIHRoZSBzYW1lIGlzb2xhdGVkIHdvcmxkLgotICAgICAgICAvLyBS
ZXR1cm5zIE5VTEwgaWYgdGhlIGVudGVyZWQgY29udGV4dCBpcyBmcm9tIHRoZSBtYWluIHdvcmxk
LgotICAgICAgICAvLwotICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgZWRnZSBjYXNlcyB3aXRo
IERPTSBtdXRhdGlvbiBldmVudHMgdGhhdCBtaWdodAotICAgICAgICAvLyB2aW9sYXRlIHRoaXMg
aW52YXJpYW50LgotICAgICAgICAvLwotICAgICAgICBzdGF0aWMgVjhJc29sYXRlZFdvcmxkKiBn
ZXRFbnRlcmVkKCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHRlbXBvcmFy
eSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uICAgRXNzZW50aWFsbHksCi0gICAgICAgICAgICAv
LyBHZXRIaWRkZW5WYWx1ZSBpcyB0b28gc2xvdyBmb3IgdGhpcyBjb2RlIHBhdGguICBXZSBuZWVk
IHRvIGdldCB0aGUKLSAgICAgICAgICAgIC8vIFY4IHRlYW0gdG8gYWRkIGEgcmVhbCBwcm9wZXJ0
eSB0byB2ODo6Q29udGV4dCBmb3IgaXNvbGF0ZWQgd29ybGRzLgotICAgICAgICAgICAgLy8gVW50
aWwgdGhlbiwgd2Ugb3B0aW1pemUgdGhlIGNvbW1vbiBjYXNlIG9mIG5vdCBoYXZpbmcgYW55IGlz
b2xhdGVkCi0gICAgICAgICAgICAvLyB3b3JsZHMgYXQgYWxsLgotICAgICAgICAgICAgaWYgKCFp
c29sYXRlZFdvcmxkQ291bnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAg
ICBpZiAoIXY4OjpDb250ZXh0OjpJbkNvbnRleHQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
MDsKLSAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFY4SXNvbGF0ZWRXb3JsZCo+
KGdldEdsb2JhbE9iamVjdCh2ODo6Q29udGV4dDo6R2V0RW50ZXJlZCgpKS0+R2V0UG9pbnRlckZy
b21JbnRlcm5hbEZpZWxkKFY4Q3VzdG9tOjprRE9NV2luZG93RW50ZXJlZElzb2xhdGVkV29ybGRJ
bmRleCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29u
dGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dC0+Z2V0KCk7IH0KLSAgICAgICAgUGFzc1JlZlB0cjxT
aGFyZWRQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiA+IHNoYXJlZENvbnRleHQoKSB7IHJldHVybiBt
X2NvbnRleHQ7IH0KLQotICAgICAgICBET01EYXRhU3RvcmUqIGdldERPTURhdGFTdG9yZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZG9tRGF0YVN0b3JlLmdldFN0b3JlKCk7IH0KLQotICAgICAgICBTY3Jp
cHRTdGF0ZSogc2NyaXB0U3RhdGUoKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGdldEdsb2JhbE9iamVjdCh2ODo6SGFuZGxlPHY4OjpDb250
ZXh0PiBjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2
ODo6T2JqZWN0Pjo6Q2FzdChjb250ZXh0LT5HbG9iYWwoKS0+R2V0UHJvdG90eXBlKCkpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8gQ2FsbGVkIGJ5IHRoZSBnYXJiYWdlIGNvbGxlY3RvciB3aGVu
IG91ciBKYXZhU2NyaXB0IGNvbnRleHQgaXMgYWJvdXQKLSAgICAgICAgLy8gdG8gYmUgZGVzdHJv
eWVkLgotICAgICAgICBzdGF0aWMgdm9pZCBjb250ZXh0V2Vha1JlZmVyZW5jZUNhbGxiYWNrKHY4
OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gb2JqZWN0LCB2b2lkKiBpc29sYXRlZF93b3JsZCk7Ci0K
LSAgICAgICAgLy8gVGhlIHY4OjpDb250ZXh0IGZvciB0aGUgaXNvbGF0ZWQgd29ybGQuICBUaGlz
IG9iamVjdCBpcyBrZWVwIG9uIHRoZQotICAgICAgICAvLyBoZWFwIGFzIGxvbmcgYXMgfG1fY29u
dGV4dHwgaGFzIG5vdCBiZWVuIGdhcmJhZ2UgY29sbGVjdGVkLgotICAgICAgICBSZWZQdHI8U2hh
cmVkUGVyc2lzdGVudDx2ODo6Q29udGV4dD4gPiBtX2NvbnRleHQ7Ci0KLSAgICAgICAgLy8gVGhl
IGJhY2tpbmcgc3RvcmUgZm9yIHRoZSBpc29sYXRlZCB3b3JsZCdzIERPTSB3cmFwcGVycy4gIFRo
aXMgY2xhc3MKLSAgICAgICAgLy8gZG9lc24ndCBoYXZlIHZpc2liaWxpdHkgaW50byB0aGUgd3Jh
cHBlcnMuICBUaGlzIGhhbmRsZSBzaW1wbHkgaGVscHMKLSAgICAgICAgLy8gbWFuYWdlIHRoZWly
IGxpZmV0aW1lLgotICAgICAgICBET01EYXRhU3RvcmVIYW5kbGUgbV9kb21EYXRhU3RvcmU7Ci0K
LSAgICAgICAgLy8gRklYTUU6IGdldCByaWQgb2YgcmVkdW5kYW50IG1fY29udGV4dCBmaWVsZC4g
VGhlIGNvbnRleHQgY2FuIGJlIHJldHJpZXZlZCBmcm9tIHRoZSBTY3JpcHRTdGF0ZS4KLSAgICAg
ICAgT3duUHRyPFNjcmlwdFN0YXRlPiBtX3NjcmlwdFN0YXRlOwotCi0gICAgICAgIHN0YXRpYyBp
bnQgaXNvbGF0ZWRXb3JsZENvdW50OwotICAgIH07CisgICAgc3RhdGljIFY4SXNvbGF0ZWRDb250
ZXh0KiBnZXRFbnRlcmVkKCkKKyAgICB7CisgICAgICAgIC8vIFRoaXMgaXMgYSB0ZW1wb3Jhcnkg
cGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLiAgIEVzc2VudGlhbGx5LAorICAgICAgICAvLyBHZXRI
aWRkZW5WYWx1ZSBpcyB0b28gc2xvdyBmb3IgdGhpcyBjb2RlIHBhdGguICBXZSBuZWVkIHRvIGdl
dCB0aGUKKyAgICAgICAgLy8gVjggdGVhbSB0byBhZGQgYSByZWFsIHByb3BlcnR5IHRvIHY4OjpD
b250ZXh0IGZvciBpc29sYXRlZCB3b3JsZHMuCisgICAgICAgIC8vIFVudGlsIHRoZW4sIHdlIG9w
dGltaXplIHRoZSBjb21tb24gY2FzZSBvZiBub3QgaGF2aW5nIGFueSBpc29sYXRlZAorICAgICAg
ICAvLyB3b3JsZHMgYXQgYWxsLgorICAgICAgICBpZiAoIUlzb2xhdGVkV29ybGQ6OmNvdW50KCkp
CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKCF2ODo6Q29udGV4dDo6SW5Db250
ZXh0KCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8VjhJc29sYXRlZENvbnRleHQqPihnZXRHbG9iYWxPYmplY3Qodjg6OkNvbnRleHQ6Okdl
dEVudGVyZWQoKSktPkdldFBvaW50ZXJGcm9tSW50ZXJuYWxGaWVsZChWOEN1c3RvbTo6a0RPTVdp
bmRvd0VudGVyZWRJc29sYXRlZFdvcmxkSW5kZXgpKTsKKyAgICB9CisKKyAgICB2ODo6SGFuZGxl
PHY4OjpDb250ZXh0PiBjb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0LT5nZXQoKTsgfQorICAg
IFBhc3NSZWZQdHI8U2hhcmVkUGVyc2lzdGVudDx2ODo6Q29udGV4dD4gPiBzaGFyZWRDb250ZXh0
KCkgeyByZXR1cm4gbV9jb250ZXh0OyB9CisKKyAgICBJc29sYXRlZFdvcmxkKiB3b3JsZCgpIGNv
bnN0IHsgcmV0dXJuIG1fd29ybGQuZ2V0KCk7IH0KKworICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRT
dGF0ZSgpOworCitwcml2YXRlOgorICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGdl
dEdsb2JhbE9iamVjdCh2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoY29udGV4dC0+R2xvYmFs
KCktPkdldFByb3RvdHlwZSgpKTsKKyAgICB9CisKKyAgICAvLyBDYWxsZWQgYnkgdGhlIGdhcmJh
Z2UgY29sbGVjdG9yIHdoZW4gb3VyIEphdmFTY3JpcHQgY29udGV4dCBpcyBhYm91dAorICAgIC8v
IHRvIGJlIGRlc3Ryb3llZC4KKyAgICBzdGF0aWMgdm9pZCBjb250ZXh0V2Vha1JlZmVyZW5jZUNh
bGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gb2JqZWN0LCB2b2lkKiBpc29sYXRlZENv
bnRleHQpOworCisgICAgLy8gVGhlIHVuZGVybHlpbmcgdjg6OkNvbnRleHQuIFRoaXMgb2JqZWN0
IGlzIGtlZXAgb24gdGhlIGhlYXAgYXMKKyAgICAvLyBsb25nIGFzIHxtX2NvbnRleHR8IGhhcyBu
b3QgYmVlbiBnYXJiYWdlIGNvbGxlY3RlZC4KKyAgICBSZWZQdHI8U2hhcmVkUGVyc2lzdGVudDx2
ODo6Q29udGV4dD4gPiBtX2NvbnRleHQ7CisKKyAgICBSZWZQdHI8SXNvbGF0ZWRXb3JsZD4gbV93
b3JsZDsKKworICAgIC8vIEZJWE1FOiBnZXQgcmlkIG9mIHJlZHVuZGFudCBtX2NvbnRleHQgZmll
bGQuIFRoZSBjb250ZXh0IGNhbiBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgU2NyaXB0U3RhdGUuCisg
ICAgT3duUHRyPFNjcmlwdFN0YXRlPiBtX3NjcmlwdFN0YXRlOworfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gVjhJc29sYXRlZFdvcmxkX2gKKyNlbmRpZiAvLyBWOElz
b2xhdGVkQ29udGV4dF9oCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRXb3Js
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOElzb2xhdGVkV29ybGQu
Y3BwCShyZXZpc2lvbiA1MjY4MykKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZFdv
cmxkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24u
Ci0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLQotI2luY2x1ZGUgIlY4SXNvbGF0ZWRXb3JsZC5oIgotCi0jaW5jbHVkZSA8djguaD4KLQot
I2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKLSNpbmNs
dWRlICJIYXNoTWFwLmgiCi0jaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgotI2luY2x1ZGUg
IlY4RE9NV2luZG93LmgiCi0jaW5jbHVkZSAiVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuaCIKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1pbnQgVjhJc29sYXRlZFdvcmxkOjppc29sYXRlZFdvcmxkQ291
bnQgPSAwOwotCi12b2lkIFY4SXNvbGF0ZWRXb3JsZDo6Y29udGV4dFdlYWtSZWZlcmVuY2VDYWxs
YmFjayh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IG9iamVjdCwgdm9pZCogaXNvbGF0ZWRfd29y
bGQpCi17Ci0gICAgLy8gT3VyIGNvbnRleHQgaXMgZ29pbmcgYXdheS4gIFRpbWUgdG8gY2xlYW4g
dXAgdGhlIHdvcmxkLgotICAgIFY4SXNvbGF0ZWRXb3JsZCogd29ybGQgPSBzdGF0aWNfY2FzdDxW
OElzb2xhdGVkV29ybGQqPihpc29sYXRlZF93b3JsZCk7Ci0gICAgZGVsZXRlIHdvcmxkOwotfQot
Ci1WOElzb2xhdGVkV29ybGQ6OlY4SXNvbGF0ZWRXb3JsZChWOFByb3h5KiBwcm94eSwgaW50IGV4
dGVuc2lvbkdyb3VwKQotewotICAgICsraXNvbGF0ZWRXb3JsZENvdW50OwotCi0gICAgdjg6Okhh
bmRsZVNjb3BlIHNjb3BlOwotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgY3JlYXRpbmcgYSBu
ZXcgVjhET01XaW5kb3dTaGVsbCBoZXJlIGluc3RlYWQgb2YgcmlwaW5nIG91dCB0aGUgY29udGV4
dC4KLSAgICBtX2NvbnRleHQgPSBTaGFyZWRQZXJzaXN0ZW50PHY4OjpDb250ZXh0Pjo6Y3JlYXRl
KHByb3h5LT53aW5kb3dTaGVsbCgpLT5jcmVhdGVOZXdDb250ZXh0KHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4oKSwgZXh0ZW5zaW9uR3JvdXApKTsKLSAgICBpZiAobV9jb250ZXh0LT5nZXQoKS5Jc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFJ1biBjb2RlIGluIHRoZSBuZXcgY29u
dGV4dC4KLSAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dF9zY29wZShtX2NvbnRleHQtPmdl
dCgpKTsKLQotICAgIGdldEdsb2JhbE9iamVjdChtX2NvbnRleHQtPmdldCgpKS0+U2V0UG9pbnRl
ckluSW50ZXJuYWxGaWVsZChWOEN1c3RvbTo6a0RPTVdpbmRvd0VudGVyZWRJc29sYXRlZFdvcmxk
SW5kZXgsIHRoaXMpOwotCi0gICAgVjhET01XaW5kb3dTaGVsbDo6aW5zdGFsbEhpZGRlbk9iamVj
dFByb3RvdHlwZShtX2NvbnRleHQtPmdldCgpKTsKLSAgICAvLyBGSVhNRTogVGhpcyB3aWxsIGdv
IGF3YXkgb25jZSB3ZSBoYXZlIGEgd2luZG93U2hlbGwgZm9yIHRoZSBpc29sYXRlZCB3b3JsZC4K
LSAgICBwcm94eS0+d2luZG93U2hlbGwoKS0+aW5zdGFsbERPTVdpbmRvdyhtX2NvbnRleHQtPmdl
dCgpLCBwcm94eS0+ZnJhbWUoKS0+ZG9tV2luZG93KCkpOwotCi0gICAgLy8gVXNpbmcgdGhlIGRl
ZmF1bHQgc2VjdXJpdHkgdG9rZW4gbWVhbnMgdGhhdCB0aGUgY2FuQWNjZXNzIGlzIGFsd2F5cwot
ICAgIC8vIGNhbGxlZCwgd2hpY2ggaXMgc2xvdy4KLSAgICAvLyBGSVhNRTogVXNlIHRva2VucyB3
aGVyZSBwb3NzaWJsZS4gVGhpcyB3aWxsIG1lYW4ga2VlcGluZyB0cmFjayBvZiBhbGwKLSAgICAv
LyAgICAgICAgY3JlYXRlZCBjb250ZXh0cyBzbyB0aGF0IHRoZXkgY2FuIGFsbCBiZSB1cGRhdGVk
IHdoZW4gdGhlCi0gICAgLy8gICAgICAgIGRvY3VtZW50IGRvbWFpbgotICAgIC8vICAgICAgICBj
aGFuZ2VzLgotICAgIG1fY29udGV4dC0+Z2V0KCktPlVzZURlZmF1bHRTZWN1cml0eVRva2VuKCk7
Ci0KLSAgICBwcm94eS0+ZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaWRDcmVhdGVJc29s
YXRlZFNjcmlwdENvbnRleHQoKTsKLX0KLQotdm9pZCBWOElzb2xhdGVkV29ybGQ6OmRlc3Ryb3ko
KQotewotICAgIG1fY29udGV4dC0+Z2V0KCkuTWFrZVdlYWsodGhpcywgJmNvbnRleHRXZWFrUmVm
ZXJlbmNlQ2FsbGJhY2spOwotfQotCi1WOElzb2xhdGVkV29ybGQ6On5WOElzb2xhdGVkV29ybGQo
KQotewotICAgIC0taXNvbGF0ZWRXb3JsZENvdW50OwotICAgIG1fY29udGV4dC0+ZGlzcG9zZUhh
bmRsZSgpOwotfQotCi1TY3JpcHRTdGF0ZSogVjhJc29sYXRlZFdvcmxkOjpzY3JpcHRTdGF0ZSgp
Ci17Ci0gICAgaWYgKCFtX3NjcmlwdFN0YXRlKSB7Ci0gICAgICAgIHY4OjpIYW5kbGVTY29wZSBz
Y29wZTsKLSAgICAgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCA9IG1fY29udGV4
dC5nZXQoKS0+Z2V0KCk7Ci0gICAgICAgIG1fc2NyaXB0U3RhdGUuc2V0KG5ldyBTY3JpcHRTdGF0
ZShWOFByb3h5OjpyZXRyaWV2ZUZyYW1lKGNvbnRleHQpLCBjb250ZXh0KSk7Ci0gICAgfQotICAg
IHJldHVybiBtX3NjcmlwdFN0YXRlLmdldCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRXb3JsZC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZFdvcmxkLmgJKHJldmlzaW9uIDUyNjgz
KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOElzb2xhdGVkV29ybGQuaAkod29ya2luZyBjb3B5
KQpAQCAtMSwxMjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0g
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgVjhJc29sYXRlZFdvcmxkX2gKLSNkZWZpbmUgVjhJ
c29sYXRlZFdvcmxkX2gKLQotI2luY2x1ZGUgPHY4Lmg+Ci0KLSNpbmNsdWRlICJWOERPTU1hcC5o
IgotI2luY2x1ZGUgIlY4SW5kZXguaCIKLSNpbmNsdWRlICJWOFByb3h5LmgiCi0jaW5jbHVkZSAi
VjhVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJTY3JpcHRTb3VyY2VDb2RlLmgiICAvLyBmb3IgV2Vi
Q29yZTo6U2NyaXB0U291cmNlQ29kZQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBjbGFz
cyBWOFByb3h5OwotCi0gICAgLy8gVjhJc29sYXRlZFdvcmxkCi0gICAgLy8KLSAgICAvLyBWOElz
b2xhdGVkV29ybGQgcmVwcmVzZW50cyBhIGlzb2xhdGVkIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCBm
b3IKLSAgICAvLyBKYXZhU2NyaXB0LiAgRWFjaCBpc29sYXRlZCB3b3JsZCBleGVjdXRlcyBpbiBw
YXJhbGxlbCB3aXRoIHRoZSBtYWluCi0gICAgLy8gSmF2YVNjcmlwdCB3b3JsZC4gIEFuIGlzb2xh
dGVkIHdvcmxkIGhhcyBhY2Nlc3MgdG8gdGhlIHNhbWUgRE9NIGRhdGEKLSAgICAvLyBzdHJ1Y3R1
cmVzIGFzIHRoZSBtYWluIHdvcmxkIGJ1dCBub25lIG9mIHRoZSBKYXZhU2NyaXB0IHBvaW50ZXJz
LgotICAgIC8vCi0gICAgLy8gSXQgaXMgYW4gZXJyb3IgdG8gZXZlciBzaGFyZSBhIEphdmFTY3Jp
cHQgcG9pbnRlciBiZXR3ZWVuIHR3byBpc29sYXRlZAotICAgIC8vIHdvcmxkcyBvciBiZXR3ZWVu
IGFuIGlzb2xhdGVkIHdvcmxkIGFuZCB0aGUgbWFpbiB3b3JsZC4gIEJlY2F1c2UKLSAgICAvLyBp
c29sYXRlZCB3b3JsZHMgaGF2ZSBhY2Nlc3MgdG8gdGhlIERPTSwgdGhleSBuZWVkIHRoZWlyIG93
biBET00gd3JhcHBlcnMKLSAgICAvLyB0byBhdm9pZCBoYXZpbmcgcG9pbnRlcnMgdG8gdGhlIG1h
aW4gd29ybGQncyBET00gd3JhcHBlcnMgKHdoaWNoIGFyZQotICAgIC8vIEphdmFTY3JpcHQgb2Jq
ZWN0cykuCi0gICAgLy8KLSAgICBjbGFzcyBWOElzb2xhdGVkV29ybGQgewotICAgIHB1YmxpYzoK
LSAgICAgICAgLy8gQ3JlYXRlcyBhbiBpc29sYXRlZCB3b3JsZC4gVG8gZGVzdHJveSBpdCwgY2Fs
bCBkZXN0cm95KCkuCi0gICAgICAgIC8vIFRoaXMgd2lsbCBkZWxldGUgdGhlIGlzb2xhdGVkIHdv
cmxkIHdoZW4gdGhlIGNvbnRleHQgaXQgb3ducyBpcyBHQydkLgotICAgICAgICBWOElzb2xhdGVk
V29ybGQoVjhQcm94eSogcHJveHksIGludCBleHRlbnNpb25Hcm91cCk7Ci0gICAgICAgIH5WOElz
b2xhdGVkV29ybGQoKTsKLQotICAgICAgICAvLyBDYWxsIHRoaXMgdG8gZGVzdHJveSB0aGUgaXNv
bGF0ZWQgd29ybGQuIEl0IHdpbGwgYmUgZGVsZXRlZCBzb21ldGltZQotICAgICAgICAvLyBhZnRl
ciB0aGlzIGNhbGwsIG9uY2UgYWxsIHNjcmlwdCByZWZlcmVuY2VzIHRvIHRoZSB3b3JsZCdzIGNv
bnRleHQKLSAgICAgICAgLy8gaGF2ZSBiZWVuIGRyb3BwZWQuCi0gICAgICAgIHZvaWQgZGVzdHJv
eSgpOwotCi0gICAgICAgIC8vIFJldHVybnMgdGhlIGlzb2xhdGVkIHdvcmxkIGFzc29jaWF0ZWQg
d2l0aAotICAgICAgICAvLyB2ODo6Q29udGV4dDo6R2V0RW50ZXJlZCgpLiAgQmVjYXVzZSB3b3Js
ZHMgYXJlIGlzb2xhdGVkLCB0aGUgZW50aXJlCi0gICAgICAgIC8vIEphdmFTY3JpcHQgY2FsbCBz
dGFjayBzaG91bGQgYmUgZnJvbSB0aGUgc2FtZSBpc29sYXRlZCB3b3JsZC4KLSAgICAgICAgLy8g
UmV0dXJucyBOVUxMIGlmIHRoZSBlbnRlcmVkIGNvbnRleHQgaXMgZnJvbSB0aGUgbWFpbiB3b3Js
ZC4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gRklYTUU6IENvbnNpZGVyIGVkZ2UgY2FzZXMgd2l0
aCBET00gbXV0YXRpb24gZXZlbnRzIHRoYXQgbWlnaHQKLSAgICAgICAgLy8gdmlvbGF0ZSB0aGlz
IGludmFyaWFudC4KLSAgICAgICAgLy8KLSAgICAgICAgc3RhdGljIFY4SXNvbGF0ZWRXb3JsZCog
Z2V0RW50ZXJlZCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgYSB0ZW1wb3Jh
cnkgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLiAgIEVzc2VudGlhbGx5LAotICAgICAgICAgICAg
Ly8gR2V0SGlkZGVuVmFsdWUgaXMgdG9vIHNsb3cgZm9yIHRoaXMgY29kZSBwYXRoLiAgV2UgbmVl
ZCB0byBnZXQgdGhlCi0gICAgICAgICAgICAvLyBWOCB0ZWFtIHRvIGFkZCBhIHJlYWwgcHJvcGVy
dHkgdG8gdjg6OkNvbnRleHQgZm9yIGlzb2xhdGVkIHdvcmxkcy4KLSAgICAgICAgICAgIC8vIFVu
dGlsIHRoZW4sIHdlIG9wdGltaXplIHRoZSBjb21tb24gY2FzZSBvZiBub3QgaGF2aW5nIGFueSBp
c29sYXRlZAotICAgICAgICAgICAgLy8gd29ybGRzIGF0IGFsbC4KLSAgICAgICAgICAgIGlmICgh
aXNvbGF0ZWRXb3JsZENvdW50KQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAg
ICAgaWYgKCF2ODo6Q29udGV4dDo6SW5Db250ZXh0KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxWOElzb2xhdGVkV29ybGQq
PihnZXRHbG9iYWxPYmplY3Qodjg6OkNvbnRleHQ6OkdldEVudGVyZWQoKSktPkdldFBvaW50ZXJG
cm9tSW50ZXJuYWxGaWVsZChWOEN1c3RvbTo6a0RPTVdpbmRvd0VudGVyZWRJc29sYXRlZFdvcmxk
SW5kZXgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNv
bnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQtPmdldCgpOyB9Ci0gICAgICAgIFBhc3NSZWZQdHI8
U2hhcmVkUGVyc2lzdGVudDx2ODo6Q29udGV4dD4gPiBzaGFyZWRDb250ZXh0KCkgeyByZXR1cm4g
bV9jb250ZXh0OyB9Ci0KLSAgICAgICAgRE9NRGF0YVN0b3JlKiBnZXRET01EYXRhU3RvcmUoKSBj
b25zdCB7IHJldHVybiBtX2RvbURhdGFTdG9yZS5nZXRTdG9yZSgpOyB9Ci0KLSAgICAgICAgU2Ny
aXB0U3RhdGUqIHNjcmlwdFN0YXRlKCk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiBnZXRHbG9iYWxPYmplY3Qodjg6OkhhbmRsZTx2ODo6Q29u
dGV4dD4gY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD46OkNhc3QoY29udGV4dC0+R2xvYmFsKCktPkdldFByb3RvdHlwZSgpKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIENhbGxlZCBieSB0aGUgZ2FyYmFnZSBjb2xsZWN0b3Igd2hl
biBvdXIgSmF2YVNjcmlwdCBjb250ZXh0IGlzIGFib3V0Ci0gICAgICAgIC8vIHRvIGJlIGRlc3Ry
b3llZC4KLSAgICAgICAgc3RhdGljIHZvaWQgY29udGV4dFdlYWtSZWZlcmVuY2VDYWxsYmFjayh2
ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IG9iamVjdCwgdm9pZCogaXNvbGF0ZWRfd29ybGQpOwot
Ci0gICAgICAgIC8vIFRoZSB2ODo6Q29udGV4dCBmb3IgdGhlIGlzb2xhdGVkIHdvcmxkLiAgVGhp
cyBvYmplY3QgaXMga2VlcCBvbiB0aGUKLSAgICAgICAgLy8gaGVhcCBhcyBsb25nIGFzIHxtX2Nv
bnRleHR8IGhhcyBub3QgYmVlbiBnYXJiYWdlIGNvbGxlY3RlZC4KLSAgICAgICAgUmVmUHRyPFNo
YXJlZFBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+ID4gbV9jb250ZXh0OwotCi0gICAgICAgIC8vIFRo
ZSBiYWNraW5nIHN0b3JlIGZvciB0aGUgaXNvbGF0ZWQgd29ybGQncyBET00gd3JhcHBlcnMuICBU
aGlzIGNsYXNzCi0gICAgICAgIC8vIGRvZXNuJ3QgaGF2ZSB2aXNpYmlsaXR5IGludG8gdGhlIHdy
YXBwZXJzLiAgVGhpcyBoYW5kbGUgc2ltcGx5IGhlbHBzCi0gICAgICAgIC8vIG1hbmFnZSB0aGVp
ciBsaWZldGltZS4KLSAgICAgICAgRE9NRGF0YVN0b3JlSGFuZGxlIG1fZG9tRGF0YVN0b3JlOwot
Ci0gICAgICAgIC8vIEZJWE1FOiBnZXQgcmlkIG9mIHJlZHVuZGFudCBtX2NvbnRleHQgZmllbGQu
IFRoZSBjb250ZXh0IGNhbiBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgU2NyaXB0U3RhdGUuCi0gICAg
ICAgIE93blB0cjxTY3JpcHRTdGF0ZT4gbV9zY3JpcHRTdGF0ZTsKLQotICAgICAgICBzdGF0aWMg
aW50IGlzb2xhdGVkV29ybGRDb3VudDsKLSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBWOElzb2xhdGVkV29ybGRfaApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92
OC9WOFByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHku
Y3BwCShyZXZpc2lvbiA1MjY4MykKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAKICNpbmNsdWRlICJWOERPTVdpbmRvdy5o
IgogI2luY2x1ZGUgIlY4SGlkZGVuUHJvcGVydHlOYW1lLmgiCiAjaW5jbHVkZSAiVjhJbmRleC5o
IgotI2luY2x1ZGUgIlY4SXNvbGF0ZWRXb3JsZC5oIgorI2luY2x1ZGUgIlY4SXNvbGF0ZWRDb250
ZXh0LmgiCiAjaW5jbHVkZSAiV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmgiCiAKICNpbmNs
dWRlIDxhbGdvcml0aG0+CkBAIC0yNzAsNDMgKzI3MCw0NCBAQCB2b2lkIFY4UHJveHk6OmV2YWx1
YXRlSW5Jc29sYXRlZFdvcmxkKGluCiAgICAgd2luZG93U2hlbGwoKS0+aW5pdENvbnRleHRJZk5l
ZWRlZCgpOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwotICAgIFY4SXNvbGF0
ZWRXb3JsZCogd29ybGQgPSAwOworICAgIFY4SXNvbGF0ZWRDb250ZXh0KiBpc29sYXRlZENvbnRl
eHQgPSAwOwogCiAgICAgaWYgKHdvcmxkSUQgPiAwKSB7CiAgICAgICAgIElzb2xhdGVkV29ybGRN
YXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2lzb2xhdGVkV29ybGRzLmZpbmQod29ybGRJRCk7CiAgICAg
ICAgIGlmIChpdGVyICE9IG1faXNvbGF0ZWRXb3JsZHMuZW5kKCkpIHsKLSAgICAgICAgICAgIHdv
cmxkID0gaXRlci0+c2Vjb25kOworICAgICAgICAgICAgaXNvbGF0ZWRDb250ZXh0ID0gaXRlci0+
c2Vjb25kOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgd29ybGQgPSBuZXcgVjhJc29s
YXRlZFdvcmxkKHRoaXMsIGV4dGVuc2lvbkdyb3VwKTsKLSAgICAgICAgICAgIGlmICh3b3JsZC0+
Y29udGV4dCgpLklzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIGRlbGV0ZSB3b3JsZDsKKyAg
ICAgICAgICAgIGlzb2xhdGVkQ29udGV4dCA9IG5ldyBWOElzb2xhdGVkQ29udGV4dCh0aGlzLCBl
eHRlbnNpb25Hcm91cCk7CisgICAgICAgICAgICBpZiAoaXNvbGF0ZWRDb250ZXh0LT5jb250ZXh0
KCkuSXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgZGVsZXRlIGlzb2xhdGVkQ29udGV4dDsK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG1f
aXNvbGF0ZWRXb3JsZHMuc2V0KHdvcmxkSUQsIHdvcmxkKTsKKyAgICAgICAgICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgY2hhbmdlIHRoaXMgdG8gdXNpbmcgd2luZG93IHNoZWxscyB0byBtYXRjaCBK
U0MuCisgICAgICAgICAgICBtX2lzb2xhdGVkV29ybGRzLnNldCh3b3JsZElELCBpc29sYXRlZENv
bnRleHQpOwogCiAgICAgICAgICAgICAvLyBTZXR1cCBjb250ZXh0IGlkIGZvciBKUyBkZWJ1Z2dl
ci4KLSAgICAgICAgICAgIGlmICghc2V0SW5qZWN0ZWRTY3JpcHRDb250ZXh0RGVidWdJZCh3b3Js
ZC0+Y29udGV4dCgpKSkgeworICAgICAgICAgICAgaWYgKCFzZXRJbmplY3RlZFNjcmlwdENvbnRl
eHREZWJ1Z0lkKGlzb2xhdGVkQ29udGV4dC0+Y29udGV4dCgpKSkgewogICAgICAgICAgICAgICAg
IG1faXNvbGF0ZWRXb3JsZHMudGFrZSh3b3JsZElEKTsKLSAgICAgICAgICAgICAgICBkZWxldGUg
d29ybGQ7CisgICAgICAgICAgICAgICAgZGVsZXRlIGlzb2xhdGVkQ29udGV4dDsKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9IGVsc2Ugewot
ICAgICAgICB3b3JsZCA9IG5ldyBWOElzb2xhdGVkV29ybGQodGhpcywgZXh0ZW5zaW9uR3JvdXAp
OwotICAgICAgICBpZiAod29ybGQtPmNvbnRleHQoKS5Jc0VtcHR5KCkpIHsKLSAgICAgICAgICAg
IGRlbGV0ZSB3b3JsZDsKKyAgICAgICAgaXNvbGF0ZWRDb250ZXh0ID0gbmV3IFY4SXNvbGF0ZWRD
b250ZXh0KHRoaXMsIGV4dGVuc2lvbkdyb3VwKTsKKyAgICAgICAgaWYgKGlzb2xhdGVkQ29udGV4
dC0+Y29udGV4dCgpLklzRW1wdHkoKSkgeworICAgICAgICAgICAgZGVsZXRlIGlzb2xhdGVkQ29u
dGV4dDsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KIAotICAgIHY4OjpM
b2NhbDx2ODo6Q29udGV4dD4gY29udGV4dCA9IHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5ldyh3
b3JsZC0+Y29udGV4dCgpKTsKKyAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGNvbnRleHQgPSB2
ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXcoaXNvbGF0ZWRDb250ZXh0LT5jb250ZXh0KCkpOwog
ICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0X3Njb3BlKGNvbnRleHQpOwogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgc291cmNlcy5zaXplKCk7ICsraSkKICAgICAgIGV2YWx1YXRlKHNv
dXJjZXNbaV0sIDApOwogCiAgICAgaWYgKHdvcmxkSUQgPT0gMCkKLSAgICAgIHdvcmxkLT5kZXN0
cm95KCk7CisgICAgICBpc29sYXRlZENvbnRleHQtPmRlc3Ryb3koKTsKIH0KIAogLy8gRklYTUU6
IFdlIHNob3VsZCByZW1vdmUgdGhpcyBmdW5jdGlvbiEKQEAgLTcwOCw4ICs3MDksOCBAQCB2ODo6
TG9jYWw8djg6OkNvbnRleHQ+IFY4UHJveHk6OmNvbnRleHQoCiAgICAgaWYgKGNvbnRleHQuSXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gdjg6OkxvY2FsPHY4OjpDb250ZXh0PigpOwogCi0gICAg
aWYgKFY4SXNvbGF0ZWRXb3JsZCogd29ybGQgPSBWOElzb2xhdGVkV29ybGQ6OmdldEVudGVyZWQo
KSkgewotICAgICAgICBjb250ZXh0ID0gdjg6OkxvY2FsPHY4OjpDb250ZXh0Pjo6TmV3KHdvcmxk
LT5jb250ZXh0KCkpOworICAgIGlmIChWOElzb2xhdGVkQ29udGV4dCogaXNvbGF0ZWRDb250ZXh0
ID0gVjhJc29sYXRlZENvbnRleHQ6OmdldEVudGVyZWQoKSkgeworICAgICAgICBjb250ZXh0ID0g
djg6OkxvY2FsPHY4OjpDb250ZXh0Pjo6TmV3KGlzb2xhdGVkQ29udGV4dC0+Y29udGV4dCgpKTsK
ICAgICAgICAgaWYgKGZyYW1lICE9IFY4UHJveHk6OnJldHJpZXZlRnJhbWUoY29udGV4dCkpCiAg
ICAgICAgICAgICByZXR1cm4gdjg6OkxvY2FsPHY4OjpDb250ZXh0PigpOwogICAgIH0KQEAgLTcx
OSw4ICs3MjAsOCBAQCB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IFY4UHJveHk6OmNvbnRleHQoCiAK
IHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gVjhQcm94eTo6Y29udGV4dCgpCiB7Ci0gICAgaWYgKFY4
SXNvbGF0ZWRXb3JsZCogd29ybGQgPSBWOElzb2xhdGVkV29ybGQ6OmdldEVudGVyZWQoKSkgewot
ICAgICAgICBSZWZQdHI8U2hhcmVkUGVyc2lzdGVudDx2ODo6Q29udGV4dD4gPiBjb250ZXh0ID0g
d29ybGQtPnNoYXJlZENvbnRleHQoKTsKKyAgICBpZiAoVjhJc29sYXRlZENvbnRleHQqIGlzb2xh
dGVkQ29udGV4dCA9IFY4SXNvbGF0ZWRDb250ZXh0OjpnZXRFbnRlcmVkKCkpIHsKKyAgICAgICAg
UmVmUHRyPFNoYXJlZFBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+ID4gY29udGV4dCA9IGlzb2xhdGVk
Q29udGV4dC0+c2hhcmVkQ29udGV4dCgpOwogICAgICAgICBpZiAobV9mcmFtZSAhPSBWOFByb3h5
OjpyZXRyaWV2ZUZyYW1lKGNvbnRleHQtPmdldCgpKSkKICAgICAgICAgICAgIHJldHVybiB2ODo6
TG9jYWw8djg6OkNvbnRleHQ+KCk7CiAgICAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6OkNvbnRl
eHQ+OjpOZXcoY29udGV4dC0+Z2V0KCkpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOFBy
b3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmgJKHJldmlz
aW9uIDUyNjgzKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU5LDcgKzU5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ7CiAgICAgY2xhc3MgU3RyaW5nOwogICAgIGNsYXNzIFY4RXZlbnRM
aXN0ZW5lcjsKLSAgICBjbGFzcyBWOElzb2xhdGVkV29ybGQ7CisgICAgY2xhc3MgVjhJc29sYXRl
ZENvbnRleHQ7CiAgICAgY2xhc3MgV29ybGRDb250ZXh0SGFuZGxlOwogCiAgICAgLy8gRklYTUU6
IHVzZSBzdGFuZGFyZCBsb2dnaW5nIGZhY2lsaXRpZXMgaW4gV2ViQ29yZS4KQEAgLTQwNiw3ICs0
MDYsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBOb3RlOiBhbHRob3VnaCB0
aGUgcG9pbnRlciBpcyByYXcsIHRoZSBpbnN0YW5jZSBpcyBrZXB0IGFsaXZlIGJ5IGEgc3Ryb25n
CiAgICAgICAgIC8vIHJlZmVyZW5jZSB0byB0aGUgdjggY29udGV4dCBpdCBjb250YWlucywgd2hp
Y2ggaXMgbm90IG1hZGUgd2VhayB1bnRpbCB3ZQogICAgICAgICAvLyBjYWxsIHdvcmxkLT5kZXN0
cm95KCkuCi0gICAgICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFY4SXNvbGF0ZWRXb3JsZCo+IElz
b2xhdGVkV29ybGRNYXA7CisgICAgICAgIC8vCisgICAgICAgIC8vIEZJWE1FOiBXZSB3YW50IHRv
IGV2ZW50dWFsbHkgYmUgaG9sZGluZyB3aW5kb3cgc2hlbGxzIGluc3RlYWQgb2YgdGhlCisgICAg
ICAgIC8vICAgICAgICBJc29sYXRlZENvbnRleHQgZGlyZWN0bHkuCisgICAgICAgIHR5cGVkZWYg
SGFzaE1hcDxpbnQsIFY4SXNvbGF0ZWRDb250ZXh0Kj4gSXNvbGF0ZWRXb3JsZE1hcDsKICAgICAg
ICAgSXNvbGF0ZWRXb3JsZE1hcCBtX2lzb2xhdGVkV29ybGRzOwogICAgIH07CiAKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvdjgvV29ybGRDb250ZXh0SGFuZGxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmxkQ29udGV4dEhhbmRsZS5jcHAJKHJldmlzaW9uIDUyNjgz
KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JsZENvbnRleHRIYW5kbGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
V29ybGRDb250ZXh0SGFuZGxlLmgiCiAKLSNpbmNsdWRlICJWOElzb2xhdGVkV29ybGQuaCIKKyNp
bmNsdWRlICJWOElzb2xhdGVkQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTQxLDggKzQxLDggQEAgV29ybGRDb250ZXh0SGFuZGxlOjpXb3JsZENvbnRleHRIYW5kbGUoVwog
ICAgIGlmICh3b3JsZFRvVXNlID09IFVzZU1haW5Xb3JsZCkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgaWYgKFY4SXNvbGF0ZWRXb3JsZCogd29ybGQgPSBWOElzb2xhdGVkV29ybGQ6OmdldEVudGVy
ZWQoKSkKLSAgICAgICAgbV9jb250ZXh0ID0gd29ybGQtPnNoYXJlZENvbnRleHQoKTsKKyAgICBp
ZiAoVjhJc29sYXRlZENvbnRleHQqIGNvbnRleHQgPSBWOElzb2xhdGVkQ29udGV4dDo6Z2V0RW50
ZXJlZCgpKQorICAgICAgICBtX2NvbnRleHQgPSBjb250ZXh0LT5zaGFyZWRDb250ZXh0KCk7CiB9
CiAKIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gV29ybGRDb250ZXh0SGFuZGxlOjphZGp1c3RlZENv
bnRleHQoVjhQcm94eSogcHJveHkpIGNvbnN0Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>