<?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>37604</bug_id>
          
          <creation_ts>2010-04-14 13:54:50 -0700</creation_ts>
          <short_desc>[V8] Web Inspector: implement ScriptDebugServer for v8 engine</short_desc>
          <delta_ts>2010-04-15 18:10:51 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="Yury Semikhatsky">yurys</reporter>
          <assigned_to name="Yury Semikhatsky">yurys</assigned_to>
          <cc>ajwong</cc>
    
    <cc>bweinstein</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>212550</commentid>
    <comment_count>0</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-04-14 13:54:50 -0700</bug_when>
    <thetext>We need to implement ScriptDebugServer for v8. This would allow to have common debugging protocol which wouldn&apos;t depend on the underlying JS engine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212828</commentid>
    <comment_count>1</comment_count>
      <attachid>53431</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-04-15 06:37:24 -0700</bug_when>
    <thetext>Created attachment 53431
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212830</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-15 06:38:14 -0700</bug_when>
    <thetext>Attachment 53431 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
Last 3072 characters of output:
 sorted.  [build/include_order] [4]
WebCore/bindings/v8/ScriptDebugServer.cpp:62:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/v8/ScriptDebugServer.cpp:126:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/v8/ScriptDebugServer.cpp:144:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/v8/ScriptDebugServer.cpp:174:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/v8/ScriptDebugServer.cpp:219:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/v8/ScriptDebugServer.cpp:291:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/v8/ScriptDebugServer.cpp:292:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/v8/ScriptDebugServer.cpp:293:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/v8/ScriptDebugServer.cpp:295:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/v8/ScriptDebugServer.cpp:298:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/v8/ScriptDebugServer.cpp:299:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/v8/ScriptDebugServer.cpp:300:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/v8/ScriptDebugServer.cpp:301:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/v8/ScriptDebugServer.cpp:302:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/v8/ScriptDebugServer.cpp:303:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/v8/ScriptDebugServer.cpp:304:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/v8/ScriptDebugServer.cpp:305:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/v8/ScriptDebugServer.cpp:306:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/v8/custom/V8InjectedScriptHostCustom.cpp:161:  Tab found; better to use spaces  [whitespace/tab] [1]
WebKit/chromium/src/js/DebuggerScript.js:182:  Line contains tab character.  [whitespace/tab] [5]
WebKit/chromium/src/js/DebuggerScript.js:183:  Line contains tab character.  [whitespace/tab] [5]
WebKit/chromium/src/js/DebuggerScript.js:184:  Line contains tab character.  [whitespace/tab] [5]
WebKit/chromium/src/js/DebuggerScript.js:185:  Line contains tab character.  [whitespace/tab] [5]
WebKit/chromium/src/js/DebuggerScript.js:186:  Line contains tab character.  [whitespace/tab] [5]
WebKit/chromium/src/js/DebuggerScript.js:187:  Line contains tab character.  [whitespace/tab] [5]
WebKit/chromium/src/js/DebuggerScript.js:188:  Line contains tab character.  [whitespace/tab] [5]
WebCore/bindings/v8/ScriptDebugServer.h:134:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/bindings/v8/ScriptDebugServer.h:135:  Tab found; better to use spaces  [whitespace/tab] [1]
WebKit/chromium/ChangeLog:5:  Line contains tab character.  [whitespace/tab] [5]
WebKit/chromium/ChangeLog:6:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 34 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212831</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-15 06:39:53 -0700</bug_when>
    <thetext>Attachment 53431 did not build on mac:
Build output: http://webkit-commit-queue.appspot.com/results/1683276</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212832</commentid>
    <comment_count>4</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-04-15 06:42:04 -0700</bug_when>
    <thetext>Attachment 53431 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/1605558</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212834</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-15 06:57:57 -0700</bug_when>
    <thetext>Attachment 53431 did not build on gtk:
Build output: http://webkit-commit-queue.appspot.com/results/1727007</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212836</commentid>
    <comment_count>6</comment_count>
      <attachid>53434</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-04-15 07:06:54 -0700</bug_when>
    <thetext>Created attachment 53434
patch

Fixed errors found by try bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212837</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-15 07:09:34 -0700</bug_when>
    <thetext>Attachment 53434 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/ChangeLog:4:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 1 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212838</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-15 07:13:56 -0700</bug_when>
    <thetext>Attachment 53434 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/1584495</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212839</commentid>
    <comment_count>9</comment_count>
      <attachid>53435</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-04-15 07:15:04 -0700</bug_when>
    <thetext>Created attachment 53435
patch

Removed tab from WebCore/ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212840</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-15 07:21:18 -0700</bug_when>
    <thetext>Attachment 53435 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/1595517</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212841</commentid>
    <comment_count>11</comment_count>
      <attachid>53434</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-04-15 07:25:13 -0700</bug_when>
    <thetext>Comment on attachment 53434
patch

Looks good except for &quot;if (jsEngine === &quot;v8&quot;)&quot; in InjectedScript.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212861</commentid>
    <comment_count>12</comment_count>
      <attachid>53439</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-04-15 08:15:08 -0700</bug_when>
    <thetext>Created attachment 53439
patch

Fixed Chromium compilation issue related to StringHash.h import</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212927</commentid>
    <comment_count>13</comment_count>
      <attachid>53439</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-04-15 10:53:15 -0700</bug_when>
    <thetext>Comment on attachment 53439
patch

Please explain the InjectedScript fork and the way you are going to resolve it asap (as we discussed offline) in the FIXME. Otherwise looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212939</commentid>
    <comment_count>14</comment_count>
      <attachid>53453</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-04-15 11:11:06 -0700</bug_when>
    <thetext>Created attachment 53453
patch

Filed a bug(https://bugs.webkit.org/show_bug.cgi?id=37663) and added FIXME comment with regard to call stack iteration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212955</commentid>
    <comment_count>15</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-04-15 11:42:02 -0700</bug_when>
    <thetext>Committed r57660</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213016</commentid>
    <comment_count>16</comment_count>
    <who name="Albert J. Wong">ajwong</who>
    <bug_when>2010-04-15 13:45:42 -0700</bug_when>
    <thetext>Reverted r57660 for reason:

Broke a large number of inspector layout tests in chromium.

Committed r57670: &lt;http://trac.webkit.org/changeset/57670&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213151</commentid>
    <comment_count>17</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-04-15 18:10:51 -0700</bug_when>
    <thetext>Committed exactly same patch r57701. The Chromium test failure was related to gyp dependency tracking(see http://code.google.com/p/chromium/issues/detail?id=29695).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53431</attachid>
            <date>2010-04-15 06:37:24 -0700</date>
            <delta_ts>2010-04-15 07:06:54 -0700</delta_ts>
            <desc>patch</desc>
            <filename>script-debug-server.patch</filename>
            <type>text/plain</type>
            <size>49400</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MmYxMTg0ZC4uMDQ0YzVjZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MCBAQAorMjAxMC0wNC0xNSAgWXVyeSBTZW1pa2hh
dHNreSAgPHl1cnlzQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisJCisJU3VwcG9ydCBiYXNpYyBkZWJ1Z2dpbmcgY2FwYWJpbGl0aWVzIGluY2x1ZGlu
ZyBzdGVwIGluL292ZXIvb3V0IGluIHY4CisJaW1wbGVtZW50YXRpb24gb2YgU2NyaXB0RGVidWdT
ZXJ2ZXIuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTM3NjA0CisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0SG9zdEN1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdEhvc3Q6OmNyZWF0ZUluamVj
dGVkU2NyaXB0KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6U2NyaXB0RGVidWdTZXJ2ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OnNldERlYnVnZ2VyU2NyaXB0
U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjphZGRMaXN0ZW5l
cik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6cmVtb3ZlTGlzdGVuZXIp
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OnNldEJyZWFrcG9pbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUJyZWFrcG9pbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmNsZWFyQnJlYWtwb2ludHMpOgor
ICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OnNldEJyZWFrcG9pbnRzQWN0aXZh
dGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpjb250aW51ZVByb2dy
YW0pOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OnN0ZXBJbnRvU3RhdGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpzdGVwT3ZlclN0YXRl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6c3RlcE91dE9mRnVu
Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmN1cnJlbnRDYWxs
RnJhbWVTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6Y3VycmVu
dENhbGxGcmFtZVY4KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpvblY4
RGVidWdNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpvblY4
RGVidWdIb3N0RGlzcGF0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6
OmhhbmRsZVY4RGVidWdIb3N0RGlzcGF0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVi
dWdTZXJ2ZXI6OmhhbmRsZVY4RGVidWdNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlw
dERlYnVnU2VydmVyOjpkaXNwYXRjaERpZFBhcnNlU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcmlwdERlYnVnU2VydmVyOjplbnN1cmVEZWJ1Z2dlclNjcmlwdENvbXBpbGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpkaWRSZXN1bWUpOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRE
ZWJ1Z1NlcnZlcjo6cGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JpcHREZWJ1Z1NlcnZlcjo6c2V0UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0TWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIp
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEluamVjdGVkU2NyaXB0SG9zdEN1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdEhvc3Q6OmNyZWF0ZUluamVj
dGVkU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OlY4SW5qZWN0ZWRTY3JpcHRIb3N0OjpjdXJy
ZW50Q2FsbEZyYW1lQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VjhJbmplY3RlZFNjcmlw
dEhvc3Q6OmlzQWN0aXZhdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQt
ZW5kL0luamVjdGVkU2NyaXB0LmpzOgorICAgICAgICAoaW5qZWN0ZWRTY3JpcHRDb25zdHJ1Y3Rv
cik6CisgICAgICAgIChpbmplY3RlZFNjcmlwdENvbnN0cnVjdG9yLik6CisgICAgICAgICogaW5z
cGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
U2NyaXB0c1BhbmVsKToKKwogMjAxMC0wNC0xNSAgR3l1eW91bmcgS2ltICA8Z3l1eW91bmcua2lt
QHNhbXN1bmcuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAg
Yi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcAppbmRl
eCBmODQ4NzgzLi5hMmEwZTg1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5q
ZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5q
ZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcApAQCAtOTUsNiArOTUsNyBAQCBTY3JpcHRPYmplY3Qg
SW5qZWN0ZWRTY3JpcHRIb3N0OjpjcmVhdGVJbmplY3RlZFNjcmlwdChjb25zdCBTdHJpbmcmIHNv
dXJjZSwgU2NyaQogICAgIGFyZ3MuYXBwZW5kKHRvSlMoc2NyaXB0U3RhdGUsIGdsb2JhbE9iamVj
dCwgdGhpcykpOwogICAgIGFyZ3MuYXBwZW5kKGdsb2JhbFRoaXNWYWx1ZSk7CiAgICAgYXJncy5h
cHBlbmQoanNOdW1iZXIoc2NyaXB0U3RhdGUsIGlkKSk7CisgICAgYXJncy5hcHBlbmQoanNTdHJp
bmcoc2NyaXB0U3RhdGUsICJKU0MiKSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBKU0M6OmNhbGwo
c2NyaXB0U3RhdGUsIGZ1bmN0aW9uVmFsdWUsIGNhbGxUeXBlLCBjYWxsRGF0YSwgZ2xvYmFsVGhp
c1ZhbHVlLCBhcmdzKTsKICAgICBpZiAocmVzdWx0LmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVy
biBTY3JpcHRPYmplY3Qoc2NyaXB0U3RhdGUsIHJlc3VsdC5nZXRPYmplY3QoKSk7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmNwcCBiL1dlYkNvcmUv
YmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCmluZGV4IDg3NjMyZWUuLmUwM2Q3MzEg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCisr
KyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCkBAIC0yOSw3ICsy
OSwxNCBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkZyYW1lLmgi
CisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlNjcmlwdERlYnVnTGlzdGVuZXIuaCIKICNp
bmNsdWRlICJTY3JpcHREZWJ1Z1NlcnZlci5oIgorI2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2lu
Y2x1ZGUgIlY4RE9NV2luZG93LmgiCisjaW5jbHVkZSAiVjhQcm94eS5oIgogCiAjaWYgRU5BQkxF
KEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAKQEAgLTQyLDEyICs0OSwzMDAgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiB2ODo6UGVyc2lzdGVudDx2ODo6Q29udGV4dD4gU2NyaXB0RGVidWdTZXJ2ZXI6
OnNfdXRpbGl0eUNvbnRleHQ7CiAKK1NjcmlwdERlYnVnU2VydmVyOjpNZXNzYWdlTG9vcERpc3Bh
dGNoSGFuZGxlciBTY3JpcHREZWJ1Z1NlcnZlcjo6c19tZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxl
ciA9IDA7CisKIFNjcmlwdERlYnVnU2VydmVyJiBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkK
IHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFNjcmlwdERlYnVnU2VydmVyLCBzZXJ2ZXIsICgp
KTsKICAgICByZXR1cm4gc2VydmVyOwogfQogCitTY3JpcHREZWJ1Z1NlcnZlcjo6U2NyaXB0RGVi
dWdTZXJ2ZXIoKQorICAgIDogbV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlKERvbnRQYXVzZU9uRXhj
ZXB0aW9ucykKKwksIG1fY3VycmVudENhbGxGcmFtZVN0YXRlKDApCit7Cit9CisKK3ZvaWQgU2Ny
aXB0RGVidWdTZXJ2ZXI6OnNldERlYnVnZ2VyU2NyaXB0U291cmNlKGNvbnN0IFN0cmluZyYgc2Ny
aXB0U291cmNlKQoreworICAgIG1fZGVidWdnZXJTY3JpcHRTb3VyY2UgPSBzY3JpcHRTb3VyY2U7
Cit9CisKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmFkZExpc3RlbmVyKFNjcmlwdERlYnVnTGlz
dGVuZXIqIGxpc3RlbmVyLCBQYWdlKiBwYWdlKQoreworI2lmIEVOQUJMRShWOF9TQ1JJUFRfREVC
VUdfU0VSVkVSKQorICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKKyAgICB2ODo6TG9jYWw8djg6
OkNvbnRleHQ+IGRlYnVnZ2VyQ29udGV4dCA9IHY4OjpEZWJ1Zzo6R2V0RGVidWdDb250ZXh0KCk7
CisgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRTY29wZShkZWJ1Z2dlckNvbnRleHQpOwor
CisgICAgaWYgKCFtX2xpc3RlbmVyc01hcC5zaXplKCkpIHsKKyAgICAgICAgZW5zdXJlRGVidWdn
ZXJTY3JpcHRDb21waWxlZCgpOworICAgICAgICBBU1NFUlQoIW1fZGVidWdnZXJTY3JpcHQtPklz
VW5kZWZpbmVkKCkpOworICAgICAgICB2ODo6RGVidWc6OlNldE1lc3NhZ2VIYW5kbGVyMigmU2Ny
aXB0RGVidWdTZXJ2ZXI6Om9uVjhEZWJ1Z01lc3NhZ2UpOworICAgICAgICB2ODo6RGVidWc6OlNl
dEhvc3REaXNwYXRjaEhhbmRsZXIoJlNjcmlwdERlYnVnU2VydmVyOjpvblY4RGVidWdIb3N0RGlz
cGF0Y2gsIDEwMCAvKiBtcyAqLyk7CisgICAgfQorICAgIG1fbGlzdGVuZXJzTWFwLnNldChwYWdl
LCBsaXN0ZW5lcik7CisgICAgVjhQcm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZShwYWdl
LT5tYWluRnJhbWUoKSk7CisgICAgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gcHJv
eHktPm1haW5Xb3JsZENvbnRleHQoKTsKKyAgICBTdHJpbmcgY29udGV4dERhdGEgPSB0b1dlYkNv
cmVTdHJpbmdXaXRoTnVsbENoZWNrKGNvbnRleHQtPkdldERhdGEoKSk7CisgICAgbV9jb250ZXh0
RGF0YU1hcC5zZXQobGlzdGVuZXIsIGNvbnRleHREYXRhKTsKKworICAgIHY4OjpIYW5kbGU8djg6
OkZ1bmN0aW9uPiBnZXRTY3JpcHRzRnVuY3Rpb24gPSB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPjo6
Q2FzdChtX2RlYnVnZ2VyU2NyaXB0LT5HZXQodjg6OlN0cmluZzo6TmV3KCJnZXRTY3JpcHRzIikp
KTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUgPSB2ODo6RGVidWc6OkNhbGwoZ2V0
U2NyaXB0c0Z1bmN0aW9uKTsKKyAgICBpZiAodmFsdWUuSXNFbXB0eSgpKQorICAgICAgICByZXR1
cm47CisgICAgQVNTRVJUKCF2YWx1ZS0+SXNVbmRlZmluZWQoKSAmJiB2YWx1ZS0+SXNBcnJheSgp
KTsKKyAgICB2ODo6SGFuZGxlPHY4OjpBcnJheT4gc2NyaXB0c0FycmF5ID0gdjg6OkhhbmRsZTx2
ODo6QXJyYXk+OjpDYXN0KHZhbHVlKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2Ny
aXB0c0FycmF5LT5MZW5ndGgoKTsgKytpKQorICAgICAgICBkaXNwYXRjaERpZFBhcnNlU291cmNl
KGxpc3RlbmVyLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHNjcmlwdHNBcnJheS0+R2V0
KHY4OjpJbnRlZ2VyOjpOZXcoaSkpKSk7CisjZW5kaWYKK30KKwordm9pZCBTY3JpcHREZWJ1Z1Nl
cnZlcjo6cmVtb3ZlTGlzdGVuZXIoU2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIsIFBhZ2Uq
IHBhZ2UpCit7CisgICAgaWYgKCFtX2xpc3RlbmVyc01hcC5jb250YWlucyhwYWdlKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9saXN0ZW5lcnNNYXAucmVtb3ZlKHBhZ2UpOworCisgICAgaWYg
KG1fbGlzdGVuZXJzTWFwLmlzRW1wdHkoKSkgeworICAgICAgICB2ODo6RGVidWc6OlNldE1lc3Nh
Z2VIYW5kbGVyMigwKTsKKyAgICAgICAgdjg6OkRlYnVnOjpTZXRIb3N0RGlzcGF0Y2hIYW5kbGVy
KDApOworICAgIH0KKyAgICAvLyBGSVhNRTogUmVtb3ZlIGFsbCBicmVha3BvaW50cyBzZXQgYnkg
dGhlIGFnZW50LgorICAgIC8vIEZJWE1FOiBGb3JjZSBjb250aW51ZSBpZiBkZXRhY2ggaGFwcGVu
ZWQgaW4gbmVzc3RlZCBtZXNzYWdlIGxvb3Agd2hpbGUKKyAgICAvLyBkZWJ1Z2dlciB3YXMgcGF1
c2VkIG9uIGEgYnJlYWtwb2ludChhcyBsb25nIGFzIHRoZXJlIGFyZSBvdGhlcgorICAgIC8vIGF0
dGFjaGVkIGFnZW50cyB2OCB3aWxsIHdhaXQgZm9yIGV4cGxpY2l0J2NvbnRpbnVlJyBtZXNzYWdl
KS4KKyAgICAvLyBGSVhNRTogc2VuZCBjb250aW51ZSBjb21tYW5kIHRvIHY4IGlmIG5lY2Vzc2Fy
eTsKK30KKwordm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0QnJlYWtwb2ludChjb25zdCBTdHJp
bmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBTY3JpcHRCcmVha3BvaW50IGJyZWFr
cG9pbnQpCit7CisjaWYgRU5BQkxFKFY4X1NDUklQVF9ERUJVR19TRVJWRVIpCisgICAgdjg6Okhh
bmRsZVNjb3BlIHNjb3BlOworICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gZGVidWdnZXJDb250
ZXh0ID0gdjg6OkRlYnVnOjpHZXREZWJ1Z0NvbnRleHQoKTsKKyAgICB2ODo6Q29udGV4dDo6U2Nv
cGUgY29udGV4dFNjb3BlKGRlYnVnZ2VyQ29udGV4dCk7CisKKwl2ODo6TG9jYWw8djg6Ok9iamVj
dD4gYXJncyA9IHY4OjpPYmplY3Q6Ok5ldygpOworICAgIGFyZ3MtPlNldCh2ODo6U3RyaW5nOjpO
ZXcoInNjcmlwdElkIiksIHY4U3RyaW5nKHNvdXJjZUlEKSk7CisgICAgYXJncy0+U2V0KHY4OjpT
dHJpbmc6Ok5ldygibGluZU51bWJlciIpLCB2ODo6SW50ZWdlcjo6TmV3KGxpbmVOdW1iZXIpKTsK
KyAgICBhcmdzLT5TZXQodjg6OlN0cmluZzo6TmV3KCJjb25kaXRpb24iKSwgdjhTdHJpbmcoYnJl
YWtwb2ludC5jb25kaXRpb24pKTsKKyAgICBhcmdzLT5TZXQodjg6OlN0cmluZzo6TmV3KCJlbmFi
bGVkIiksIHY4OjpCb29sZWFuOjpOZXcoYnJlYWtwb2ludC5lbmFibGVkKSk7CisKKyAgICB2ODo6
SGFuZGxlPHY4OjpGdW5jdGlvbj4gc2V0QnJlYWtwb2ludEZ1bmN0aW9uID0gdjg6OkxvY2FsPHY4
OjpGdW5jdGlvbj46OkNhc3QobV9kZWJ1Z2dlclNjcmlwdC0+R2V0KHY4OjpTdHJpbmc6Ok5ldygi
c2V0QnJlYWtwb2ludCIpKSk7CisgICAgdjg6OkRlYnVnOjpDYWxsKHNldEJyZWFrcG9pbnRGdW5j
dGlvbiwgYXJncyk7CisjZW5kaWYKK30KKwordm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6cmVtb3Zl
QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyKQor
eworI2lmIEVOQUJMRShWOF9TQ1JJUFRfREVCVUdfU0VSVkVSKQorICAgIHY4OjpIYW5kbGVTY29w
ZSBzY29wZTsKKyAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGRlYnVnZ2VyQ29udGV4dCA9IHY4
OjpEZWJ1Zzo6R2V0RGVidWdDb250ZXh0KCk7CisgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRl
eHRTY29wZShkZWJ1Z2dlckNvbnRleHQpOworCisJdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGFyZ3Mg
PSB2ODo6T2JqZWN0OjpOZXcoKTsKKyAgICBhcmdzLT5TZXQodjg6OlN0cmluZzo6TmV3KCJzY3Jp
cHRJZCIpLCB2OFN0cmluZyhzb3VyY2VJRCkpOworICAgIGFyZ3MtPlNldCh2ODo6U3RyaW5nOjpO
ZXcoImxpbmVOdW1iZXIiKSwgdjg6OkludGVnZXI6Ok5ldyhsaW5lTnVtYmVyKSk7CisKKyAgICB2
ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gcmVtb3ZlQnJlYWtwb2ludEZ1bmN0aW9uID0gdjg6Okxv
Y2FsPHY4OjpGdW5jdGlvbj46OkNhc3QobV9kZWJ1Z2dlclNjcmlwdC0+R2V0KHY4OjpTdHJpbmc6
Ok5ldygicmVtb3ZlQnJlYWtwb2ludCIpKSk7CisgICAgdjg6OkRlYnVnOjpDYWxsKHJlbW92ZUJy
ZWFrcG9pbnRGdW5jdGlvbiwgYXJncyk7CisjZW5kaWYKK30KKwordm9pZCBTY3JpcHREZWJ1Z1Nl
cnZlcjo6Y2xlYXJCcmVha3BvaW50cygpCit7CisjaWYgRU5BQkxFKFY4X1NDUklQVF9ERUJVR19T
RVJWRVIpCisgICAgZW5zdXJlRGVidWdnZXJTY3JpcHRDb21waWxlZCgpOworICAgIHY4OjpIYW5k
bGVTY29wZSBzY29wZTsKKyAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGRlYnVnZ2VyQ29udGV4
dCA9IHY4OjpEZWJ1Zzo6R2V0RGVidWdDb250ZXh0KCk7CisgICAgdjg6OkNvbnRleHQ6OlNjb3Bl
IGNvbnRleHRTY29wZShkZWJ1Z2dlckNvbnRleHQpOworCisgICAgdjg6OkhhbmRsZTx2ODo6RnVu
Y3Rpb24+IHNldEJyZWFrcG9pbnRzQWN0aXZhdGVkID0gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj46
OkNhc3QobV9kZWJ1Z2dlclNjcmlwdC0+R2V0KHY4OjpTdHJpbmc6Ok5ldygiY2xlYXJCcmVha3Bv
aW50cyIpKSk7CisgICAgdjg6OkRlYnVnOjpDYWxsKHNldEJyZWFrcG9pbnRzQWN0aXZhdGVkKTsK
KyNlbmRpZgorfQorCit2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpzZXRCcmVha3BvaW50c0FjdGl2
YXRlZChib29sIGVuYWJsZWQpCit7CisjaWYgRU5BQkxFKFY4X1NDUklQVF9ERUJVR19TRVJWRVIp
CisgICAgZW5zdXJlRGVidWdnZXJTY3JpcHRDb21waWxlZCgpOworICAgIHY4OjpIYW5kbGVTY29w
ZSBzY29wZTsKKyAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGRlYnVnZ2VyQ29udGV4dCA9IHY4
OjpEZWJ1Zzo6R2V0RGVidWdDb250ZXh0KCk7CisgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRl
eHRTY29wZShkZWJ1Z2dlckNvbnRleHQpOworCisJdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGFyZ3Mg
PSB2ODo6T2JqZWN0OjpOZXcoKTsKKyAgICBhcmdzLT5TZXQodjg6OlN0cmluZzo6TmV3KCJlbmFi
bGVkIiksIHY4OjpCb29sZWFuOjpOZXcoZW5hYmxlZCkpOworICAgIHY4OjpIYW5kbGU8djg6OkZ1
bmN0aW9uPiBzZXRCcmVha3BvaW50c0FjdGl2YXRlZCA9IHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+
OjpDYXN0KG1fZGVidWdnZXJTY3JpcHQtPkdldCh2ODo6U3RyaW5nOjpOZXcoInNldEJyZWFrcG9p
bnRzQWN0aXZhdGVkIikpKTsKKyAgICB2ODo6RGVidWc6OkNhbGwoc2V0QnJlYWtwb2ludHNBY3Rp
dmF0ZWQsIGFyZ3MpOworI2VuZGlmCit9CisKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmNvbnRp
bnVlUHJvZ3JhbSgpCit7CisjaWYgRU5BQkxFKFY4X1NDUklQVF9ERUJVR19TRVJWRVIpCisgICAg
U3RyaW5nIGNtZCgie1wic2VxXCI6MSxcInR5cGVcIjpcInJlcXVlc3RcIixcImNvbW1hbmRcIjpc
ImNvbnRpbnVlXCJ9Iik7CisgICAgdjg6OkRlYnVnOjpTZW5kQ29tbWFuZChyZWludGVycHJldF9j
YXN0PGNvbnN0IHVpbnQxNl90Kj4oY21kLmNoYXJhY3RlcnMoKSksIGNtZC5sZW5ndGgoKSwgbmV3
IHY4OjpEZWJ1Zzo6Q2xpZW50RGF0YSgpKTsKKyAgICBkaWRSZXN1bWUoKTsKKyNlbmRpZgorfQor
Cit2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpzdGVwSW50b1N0YXRlbWVudCgpCit7CisjaWYgRU5B
QkxFKFY4X1NDUklQVF9ERUJVR19TRVJWRVIpCisgICAgU3RyaW5nIGNtZCgie1wic2VxXCI6MSxc
InR5cGVcIjpcInJlcXVlc3RcIixcImNvbW1hbmRcIjpcImNvbnRpbnVlXCIsXCJhcmd1bWVudHNc
Ijp7XCJzdGVwYWN0aW9uXCI6XCJpblwifX0iKTsKKyAgICB2ODo6RGVidWc6OlNlbmRDb21tYW5k
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDE2X3QqPihjbWQuY2hhcmFjdGVycygpKSwgY21k
Lmxlbmd0aCgpLCBuZXcgdjg6OkRlYnVnOjpDbGllbnREYXRhKCkpOworICAgIGRpZFJlc3VtZSgp
OworI2VuZGlmCit9CisKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnN0ZXBPdmVyU3RhdGVtZW50
KCkKK3sKKyNpZiBFTkFCTEUoVjhfU0NSSVBUX0RFQlVHX1NFUlZFUikKKyAgICBTdHJpbmcgY21k
KCJ7XCJzZXFcIjoxLFwidHlwZVwiOlwicmVxdWVzdFwiLFwiY29tbWFuZFwiOlwiY29udGludWVc
IixcImFyZ3VtZW50c1wiOntcInN0ZXBhY3Rpb25cIjpcIm5leHRcIn19Iik7CisgICAgdjg6OkRl
YnVnOjpTZW5kQ29tbWFuZChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQxNl90Kj4oY21kLmNo
YXJhY3RlcnMoKSksIGNtZC5sZW5ndGgoKSwgbmV3IHY4OjpEZWJ1Zzo6Q2xpZW50RGF0YSgpKTsK
KyAgICBkaWRSZXN1bWUoKTsKKyNlbmRpZgorfQorCit2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpz
dGVwT3V0T2ZGdW5jdGlvbigpCit7CisjaWYgRU5BQkxFKFY4X1NDUklQVF9ERUJVR19TRVJWRVIp
CisgICAgU3RyaW5nIGNtZCgie1wic2VxXCI6MSxcInR5cGVcIjpcInJlcXVlc3RcIixcImNvbW1h
bmRcIjpcImNvbnRpbnVlXCIsXCJhcmd1bWVudHNcIjp7XCJzdGVwYWN0aW9uXCI6XCJvdXRcIn19
Iik7CisgICAgdjg6OkRlYnVnOjpTZW5kQ29tbWFuZChyZWludGVycHJldF9jYXN0PGNvbnN0IHVp
bnQxNl90Kj4oY21kLmNoYXJhY3RlcnMoKSksIGNtZC5sZW5ndGgoKSwgbmV3IHY4OjpEZWJ1Zzo6
Q2xpZW50RGF0YSgpKTsKKyAgICBkaWRSZXN1bWUoKTsKKyNlbmRpZgorfQorCitTY3JpcHRTdGF0
ZSogU2NyaXB0RGVidWdTZXJ2ZXI6OmN1cnJlbnRDYWxsRnJhbWVTdGF0ZSgpCit7CisJcmV0dXJu
IG1fY3VycmVudENhbGxGcmFtZVN0YXRlOworfQorCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gU2Ny
aXB0RGVidWdTZXJ2ZXI6OmN1cnJlbnRDYWxsRnJhbWVWOCgpCit7CisjaWYgRU5BQkxFKFY4X1ND
UklQVF9ERUJVR19TRVJWRVIpCisgICAgaWYgKCFtX2N1cnJlbnRDYWxsRnJhbWUuSXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gbV9jdXJyZW50Q2FsbEZyYW1lOworCisgICAgLy8gQ2hlY2sgb24g
YSBicC4KKyAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gY3VycmVudENhbGxGcmFtZUZ1bmN0
aW9uID0gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj46OkNhc3QobV9kZWJ1Z2dlclNjcmlwdC0+R2V0
KHY4OjpTdHJpbmc6Ok5ldygiY3VycmVudENhbGxGcmFtZSIpKSk7CisgICAgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IGFyZ3ZbXSA9IHsgbV9leGVjdXRpb25TdGF0ZSB9OworICAgIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiByZXN1bHQgPSBjdXJyZW50Q2FsbEZyYW1lRnVuY3Rpb24tPkNhbGwobV9kZWJ1
Z2dlclNjcmlwdCwgMSwgYXJndik7CisgICAgbV9jdXJyZW50Q2FsbEZyYW1lID0gdjg6OlBlcnNp
c3RlbnQ8djg6OlZhbHVlPjo6TmV3KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNl
CisgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOworI2VuZGlmCit9CisKK3ZvaWQg
U2NyaXB0RGVidWdTZXJ2ZXI6Om9uVjhEZWJ1Z01lc3NhZ2UoY29uc3Qgdjg6OkRlYnVnOjpNZXNz
YWdlJiBtZXNzYWdlKQoreworICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5oYW5kbGVW
OERlYnVnTWVzc2FnZShtZXNzYWdlKTsKK30KKwordm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6b25W
OERlYnVnSG9zdERpc3BhdGNoKCkKK3sKKyAgICBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCku
aGFuZGxlVjhEZWJ1Z0hvc3REaXNwYXRjaCgpOworfQorCit2b2lkIFNjcmlwdERlYnVnU2VydmVy
OjpoYW5kbGVWOERlYnVnSG9zdERpc3BhdGNoKCkKK3sKKyAgICBpZiAoIXNfbWVzc2FnZUxvb3BE
aXNwYXRjaEhhbmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFZlY3RvcjxXZWJDb3JlOjpQ
YWdlKj4gcGFnZXM7CisgICAgZm9yIChMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9saXN0
ZW5lcnNNYXAuYmVnaW4oKTsgaXQgIT0gbV9saXN0ZW5lcnNNYXAuZW5kKCk7ICsraXQpCisgICAg
ICAgIHBhZ2VzLmFwcGVuZChpdC0+Zmlyc3QpOworICAgIAorICAgIHNfbWVzc2FnZUxvb3BEaXNw
YXRjaEhhbmRsZXIocGFnZXMpOworfQorCit2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpoYW5kbGVW
OERlYnVnTWVzc2FnZShjb25zdCB2ODo6RGVidWc6Ok1lc3NhZ2UmIG1lc3NhZ2UpCit7CisgICAg
djg6OkhhbmRsZVNjb3BlIHNjb3BlOworCisgICAgaWYgKCFtZXNzYWdlLklzRXZlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gSWdub3JlIHVuc3VwcG9ydGVkIGV2ZW50IHR5cGVzLgor
ICAgIGlmIChtZXNzYWdlLkdldEV2ZW50KCkgIT0gdjg6OkFmdGVyQ29tcGlsZSAmJiBtZXNzYWdl
LkdldEV2ZW50KCkgIT0gdjg6OkJyZWFrKQorICAgICAgICByZXR1cm47CisKKyAgICB2ODo6SGFu
ZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gbWVzc2FnZS5HZXRFdmVudENvbnRleHQoKTsKKyAg
ICAvLyBJZiB0aGUgY29udGV4dCBpcyBmcm9tIG9uZSBvZiB0aGUgaW5wZWN0ZWQgdGFicyBpdCBz
aG91bGQgaGF2ZSBpdHMgY29udGV4dAorICAgIC8vIGRhdGEuIFNraXAgZXZlbnRzIGZyb20gdW5r
bm93biBjb250ZXh0cy4KKyAgICBpZiAoY29udGV4dC5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIFRlc3QgdGhhdCBjb250ZXh0IGhhcyBhc3NvY2lhdGVkIGdsb2JhbCBkb20g
d2luZG93IG9iamVjdC4KKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGdsb2JhbCA9IGNvbnRl
eHQtPkdsb2JhbCgpOworICAgIGlmIChnbG9iYWwuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBnbG9iYWwgPSBWOERPTVdyYXBwZXI6Omxvb2t1cERPTVdyYXBwZXIoVjhET01XaW5k
b3c6OkdldFRlbXBsYXRlKCksIGdsb2JhbCk7CisgICAgaWYgKGdsb2JhbC5Jc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIEZyYW1lKiBmcmFtZSA9IFY4UHJveHk6OnJldHJpZXZlRnJh
bWUoY29udGV4dCk7CisgICAgaWYgKGZyYW1lKSB7CisgICAgICAgIFNjcmlwdERlYnVnTGlzdGVu
ZXIqIGxpc3RlbmVyID0gbV9saXN0ZW5lcnNNYXAuZ2V0KGZyYW1lLT5wYWdlKCkpOworICAgICAg
ICBpZiAobGlzdGVuZXIpIHsKKwkJCWlmIChtZXNzYWdlLkdldEV2ZW50KCkgPT0gdjg6OkFmdGVy
Q29tcGlsZSkgeworCQkJCXY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUodjg6OkRlYnVn
OjpHZXREZWJ1Z0NvbnRleHQoKSk7CisJICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+
IGFyZ3MgPSB2ODo6T2JqZWN0OjpOZXcoKTsKKyAgICAgICAgICAgICAgICBhcmdzLT5TZXQodjg6
OlN0cmluZzo6TmV3KCJldmVudERhdGEiKSwgbWVzc2FnZS5HZXRFdmVudERhdGEoKSk7CisJCQkJ
djg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IG9uQWZ0ZXJDb21waWxlRnVuY3Rpb24gPSB2ODo6TG9j
YWw8djg6OkZ1bmN0aW9uPjo6Q2FzdChtX2RlYnVnZ2VyU2NyaXB0LT5HZXQodjg6OlN0cmluZzo6
TmV3KCJnZXRBZnRlckNvbXBpbGVTY3JpcHQiKSkpOworICAgICAgICAgICAgICAgIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBhcmd2W10gPSB7IG1lc3NhZ2UuR2V0RXhlY3V0aW9uU3RhdGUoKSwgYXJn
cyB9OworICAgICAgICAgICAgICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSA9IG9uQWZ0
ZXJDb21waWxlRnVuY3Rpb24tPkNhbGwobV9kZWJ1Z2dlclNjcmlwdCwgMiwgYXJndik7CisJCQkJ
QVNTRVJUKHZhbHVlLT5Jc09iamVjdCgpKTsKKwkJCQl2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9i
amVjdCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QodmFsdWUpOworCQkJCWRpc3BhdGNo
RGlkUGFyc2VTb3VyY2UobGlzdGVuZXIsIG9iamVjdCk7CisJCQl9IGVsc2UgaWYgKG1lc3NhZ2Uu
R2V0RXZlbnQoKSA9PSB2ODo6QnJlYWspIHsKKwkJCSAgICBtX2V4ZWN1dGlvblN0YXRlID0gdjg6
OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhtZXNzYWdlLkdldEV4ZWN1dGlvblN0YXRlKCkp
OworCQkJCW1fY3VycmVudENhbGxGcmFtZVN0YXRlID0gbWFpbldvcmxkU2NyaXB0U3RhdGUoZnJh
bWUpOworCQkJCWxpc3RlbmVyLT5kaWRQYXVzZSgpOworCQkJCW1fY3VycmVudENhbGxGcmFtZVN0
YXRlID0gMDsKKwkJCX0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBTY3JpcHREZWJ1Z1Nl
cnZlcjo6ZGlzcGF0Y2hEaWRQYXJzZVNvdXJjZShTY3JpcHREZWJ1Z0xpc3RlbmVyKiBsaXN0ZW5l
ciwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QpCit7CisgICAgU3RyaW5nIGNvbnRleHRE
YXRhID0gdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayhvYmplY3QtPkdldCh2ODo6U3RyaW5n
OjpOZXcoImNvbnRleHREYXRhIikpKTsKKyAgICBpZiAoY29udGV4dERhdGEgIT0gbV9jb250ZXh0
RGF0YU1hcC5nZXQobGlzdGVuZXIpKQorICAgICAgICByZXR1cm47CisKKyAgICBsaXN0ZW5lci0+
ZGlkUGFyc2VTb3VyY2UoCisgICAgICAgIHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2sob2Jq
ZWN0LT5HZXQodjg6OlN0cmluZzo6TmV3KCJpZCIpKSksCisgICAgICAgIHRvV2ViQ29yZVN0cmlu
Z1dpdGhOdWxsQ2hlY2sob2JqZWN0LT5HZXQodjg6OlN0cmluZzo6TmV3KCJuYW1lIikpKSwKKyAg
ICAgICAgdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayhvYmplY3QtPkdldCh2ODo6U3RyaW5n
OjpOZXcoInNvdXJjZSIpKSksCisgICAgICAgIG9iamVjdC0+R2V0KHY4OjpTdHJpbmc6Ok5ldygi
bGluZU9mZnNldCIpKS0+VG9JbnRlZ2VyKCktPlZhbHVlKCkpOworfQorCit2b2lkIFNjcmlwdERl
YnVnU2VydmVyOjplbnN1cmVEZWJ1Z2dlclNjcmlwdENvbXBpbGVkKCkKK3sKKyAgICBpZiAobV9k
ZWJ1Z2dlclNjcmlwdC5Jc0VtcHR5KCkpIHsKKyAgICAgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3Bl
OworICAgICAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGRlYnVnZ2VyQ29udGV4dCA9IHY4OjpE
ZWJ1Zzo6R2V0RGVidWdDb250ZXh0KCk7CisgICAgICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250
ZXh0U2NvcGUoZGVidWdnZXJDb250ZXh0KTsKKyAgICAgICAgbV9kZWJ1Z2dlclNjcmlwdCA9IHY4
OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2Fz
dCh2ODo6U2NyaXB0OjpDb21waWxlKHY4U3RyaW5nKG1fZGVidWdnZXJTY3JpcHRTb3VyY2UpKS0+
UnVuKCkpKTsKKyAgICB9Cit9CisKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRpZFJlc3VtZSgp
Cit7CisgICAgaWYgKCFtX2N1cnJlbnRDYWxsRnJhbWUuSXNFbXB0eSgpKSB7CisgICAgICAgIG1f
Y3VycmVudENhbGxGcmFtZS5EaXNwb3NlKCk7CisgICAgICAgIG1fY3VycmVudENhbGxGcmFtZS5D
bGVhcigpOworICAgIH0KKyAgICBpZiAoIW1fZXhlY3V0aW9uU3RhdGUuSXNFbXB0eSgpKSB7Cisg
ICAgICAgIG1fZXhlY3V0aW9uU3RhdGUuRGlzcG9zZSgpOworICAgICAgICBtX2V4ZWN1dGlvblN0
YXRlLkNsZWFyKCk7CisgICAgfQorfQorCiAvLyBDcmVhdGUgdGhlIHV0aWxpdHkgY29udGV4dCBm
b3IgaG9sZGluZyBKYXZhU2NyaXB0IGZ1bmN0aW9ucyB1c2VkIGludGVybmFsbHkKIC8vIHdoaWNo
IGFyZSBub3QgdmlzaWJsZSB0byBKYXZhU2NyaXB0IGV4ZWN1dGluZyBvbiB0aGUgcGFnZS4KIHZv
aWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmNyZWF0ZVV0aWxpdHlDb250ZXh0KCkKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuaCBiL1dlYkNvcmUvYmluZGlu
Z3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuaAppbmRleCAzZGU3YzIzLi44YjQyZjhmIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmgKKysrIGIvV2ViQ29y
ZS9iaW5kaW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZlci5oCkBAIC0zNywxMSArMzcsMTMgQEAKICNp
bmNsdWRlICJTY3JpcHRCcmVha3BvaW50LmgiCiAjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKICNp
bmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgInY4LWRlYnVnLmgiCiAKICNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBQYWdlOwogY2xh
c3MgU2NyaXB0RGVidWdMaXN0ZW5lcjsKIAogY2xhc3MgU2NyaXB0RGVidWdTZXJ2ZXIgOiBwdWJs
aWMgTm9uY29weWFibGUgewpAQCAtNTcsMzkgKzU5LDU4IEBAIHB1YmxpYzoKICAgICAvLyBvZiBz
dWNoIGV4Y2VwdGlvbiBpcyB1cCB0byB0aGUgY2FsbGVyLgogICAgIHN0YXRpYyBib29sIHRvcFN0
YWNrRnJhbWUoU3RyaW5nJiBzb3VyY2VOYW1lLCBpbnQmIGxpbmVOdW1iZXIsIFN0cmluZyYgZnVu
Y3Rpb25OYW1lKTsKIAotICAgIHZvaWQgYWRkTGlzdGVuZXIoU2NyaXB0RGVidWdMaXN0ZW5lcios
IFBhZ2UqKSB7IH0KLSAgICB2b2lkIHJlbW92ZUxpc3RlbmVyKFNjcmlwdERlYnVnTGlzdGVuZXIq
LCBQYWdlKikgeyB9CisgICAgdm9pZCBhZGRMaXN0ZW5lcihTY3JpcHREZWJ1Z0xpc3RlbmVyKiwg
UGFnZSopOworICAgIHZvaWQgcmVtb3ZlTGlzdGVuZXIoU2NyaXB0RGVidWdMaXN0ZW5lciosIFBh
Z2UqKTsKIAotICAgIHZvaWQgc2V0QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1
bnNpZ25lZCBsaW5lTnVtYmVyLCBTY3JpcHRCcmVha3BvaW50IGJyZWFrcG9pbnQpIHsgfQotICAg
IHZvaWQgcmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBs
aW5lTnVtYmVyKSB7IH0KLSAgICB2b2lkIGNsZWFyQnJlYWtwb2ludHMoKSB7IH0KLSAgICB2b2lk
IHNldEJyZWFrcG9pbnRzQWN0aXZhdGVkKGJvb2wgYWN0aXZhdGVkKSB7IH0KKyAgICB2b2lkIHNl
dEJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlciwg
U2NyaXB0QnJlYWtwb2ludCBicmVha3BvaW50KTsKKyAgICB2b2lkIHJlbW92ZUJyZWFrcG9pbnQo
Y29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlcik7CisgICAgdm9pZCBj
bGVhckJyZWFrcG9pbnRzKCk7CisgICAgdm9pZCBzZXRCcmVha3BvaW50c0FjdGl2YXRlZChib29s
IGFjdGl2YXRlZCk7CiAKICAgICBlbnVtIFBhdXNlT25FeGNlcHRpb25zU3RhdGUgewogICAgICAg
ICBEb250UGF1c2VPbkV4Y2VwdGlvbnMsCiAgICAgICAgIFBhdXNlT25BbGxFeGNlcHRpb25zLAog
ICAgICAgICBQYXVzZU9uVW5jYXVnaHRFeGNlcHRpb25zCiAgICAgfTsKLSAgICBQYXVzZU9uRXhj
ZXB0aW9uc1N0YXRlIHBhdXNlT25FeGNlcHRpb25zU3RhdGUoKSBjb25zdCB7IHJldHVybiBEb250
UGF1c2VPbkV4Y2VwdGlvbnM7IH0KLSAgICB2b2lkIHNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUo
UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSkgeyB9CisgICAgUGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSBw
YXVzZU9uRXhjZXB0aW9uc1N0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9wYXVzZU9uRXhjZXB0aW9u
c1N0YXRlOyB9CisgICAgdm9pZCBzZXRQYXVzZU9uRXhjZXB0aW9uc1N0YXRlKFBhdXNlT25FeGNl
cHRpb25zU3RhdGUgcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSkgeyBtX3BhdXNlT25FeGNlcHRpb25z
U3RhdGUgPSBwYXVzZU9uRXhjZXB0aW9uc1N0YXRlOyB9CiAKICAgICB2b2lkIHBhdXNlUHJvZ3Jh
bSgpIHsgfQotICAgIHZvaWQgY29udGludWVQcm9ncmFtKCkgeyB9Ci0gICAgdm9pZCBzdGVwSW50
b1N0YXRlbWVudCgpIHsgfQotICAgIHZvaWQgc3RlcE92ZXJTdGF0ZW1lbnQoKSB7IH0KLSAgICB2
b2lkIHN0ZXBPdXRPZkZ1bmN0aW9uKCkgeyB9CisgICAgdm9pZCBjb250aW51ZVByb2dyYW0oKTsK
KyAgICB2b2lkIHN0ZXBJbnRvU3RhdGVtZW50KCk7CisgICAgdm9pZCBzdGVwT3ZlclN0YXRlbWVu
dCgpOworICAgIHZvaWQgc3RlcE91dE9mRnVuY3Rpb24oKTsKIAogICAgIHZvaWQgcmVjb21waWxl
QWxsSlNGdW5jdGlvbnNTb29uKCkgeyB9CiAgICAgdm9pZCByZWNvbXBpbGVBbGxKU0Z1bmN0aW9u
cyhUaW1lcjxTY3JpcHREZWJ1Z1NlcnZlcj4qID0gMCkgeyB9CiAKLSAgICBTY3JpcHRTdGF0ZSog
Y3VycmVudENhbGxGcmFtZVN0YXRlKCkgeyByZXR1cm4gMDsgfQorICAgIFNjcmlwdFN0YXRlKiBj
dXJyZW50Q2FsbEZyYW1lU3RhdGUoKTsKIAogICAgIHZvaWQgcGFnZUNyZWF0ZWQoUGFnZSopIHsg
fQogCisgICAgLy8gdjgtc3BlY2lmaWMgbWV0aG9kcy4KKyAgICB2b2lkIHNldERlYnVnZ2VyU2Ny
aXB0U291cmNlKGNvbnN0IFN0cmluZyYgc2NyaXB0U291cmNlKTsKKworICAgIHR5cGVkZWYgdm9p
ZCAoKk1lc3NhZ2VMb29wRGlzcGF0Y2hIYW5kbGVyKShjb25zdCBWZWN0b3I8V2ViQ29yZTo6UGFn
ZSo+Jik7CisgICAgc3RhdGljIHZvaWQgc2V0TWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIoTWVz
c2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIgbWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIpIHsgc19t
ZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlciA9IG1lc3NhZ2VMb29wRGlzcGF0Y2hIYW5kbGVyOyB9
CisKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY3VycmVudENhbGxGcmFtZVY4KCk7CisKIHBy
aXZhdGU6Ci0gICAgU2NyaXB0RGVidWdTZXJ2ZXIoKSB7IH0KKyAgICBTY3JpcHREZWJ1Z1NlcnZl
cigpOwogICAgIH5TY3JpcHREZWJ1Z1NlcnZlcigpIHsgfQogCisgICAgc3RhdGljIHZvaWQgb25W
OERlYnVnTWVzc2FnZShjb25zdCB2ODo6RGVidWc6Ok1lc3NhZ2UmIG1lc3NhZ2UpOworICAgIHN0
YXRpYyB2b2lkIG9uVjhEZWJ1Z0hvc3REaXNwYXRjaCgpOworCisgICAgdm9pZCBoYW5kbGVWOERl
YnVnTWVzc2FnZShjb25zdCB2ODo6RGVidWc6Ok1lc3NhZ2UmIG1lc3NhZ2UpOworICAgIHZvaWQg
aGFuZGxlVjhEZWJ1Z0hvc3REaXNwYXRjaCgpOworCisgICAgdm9pZCBkaXNwYXRjaERpZFBhcnNl
U291cmNlKFNjcmlwdERlYnVnTGlzdGVuZXIqIGxpc3RlbmVyLCB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IHNvdXJjZU9iamVjdCk7CisgICAgCisgICAgdm9pZCBlbnN1cmVEZWJ1Z2dlclNjcmlwdENv
bXBpbGVkKCk7CisgICAgdm9pZCBkaWRSZXN1bWUoKTsKKwogICAgIHN0YXRpYyB2b2lkIGNyZWF0
ZVV0aWxpdHlDb250ZXh0KCk7CiAKICAgICAvLyBSZXR1cm5zIGEgbG9jYWwgaGFuZGxlIG9mIHRo
ZSB1dGlsaXR5IGNvbnRleHQuCkBAIC0xMDIsNiArMTIzLDE5IEBAIHByaXZhdGU6CiAKICAgICAv
LyBVdGlsaXR5IGNvbnRleHQgaG9sZGluZyBKYXZhU2NyaXB0IGZ1bmN0aW9ucyB1c2VkIGludGVy
bmFsbHkuCiAgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiBzX3V0aWxpdHlD
b250ZXh0OworCisgICAgdHlwZWRlZiBIYXNoTWFwPFBhZ2UqLCBTY3JpcHREZWJ1Z0xpc3RlbmVy
Kj4gTGlzdGVuZXJzTWFwOworICAgIExpc3RlbmVyc01hcCBtX2xpc3RlbmVyc01hcDsKKyAgICB0
eXBlZGVmIEhhc2hNYXA8U2NyaXB0RGVidWdMaXN0ZW5lciosIFN0cmluZz4gQ29udGV4dERhdGFN
YXA7CisgICAgQ29udGV4dERhdGFNYXAgbV9jb250ZXh0RGF0YU1hcDsKKyAgICBTdHJpbmcgbV9k
ZWJ1Z2dlclNjcmlwdFNvdXJjZTsKKyAgICBQYXVzZU9uRXhjZXB0aW9uc1N0YXRlIG1fcGF1c2VP
bkV4Y2VwdGlvbnNTdGF0ZTsKKyAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBtX2RlYnVn
Z2VyU2NyaXB0OworCVNjcmlwdFN0YXRlKiBtX2N1cnJlbnRDYWxsRnJhbWVTdGF0ZTsKKwl2ODo6
UGVyc2lzdGVudDx2ODo6VmFsdWU+IG1fY3VycmVudENhbGxGcmFtZTsKKyAgICB2ODo6UGVyc2lz
dGVudDx2ODo6T2JqZWN0PiBtX2V4ZWN1dGlvblN0YXRlOworCisgICAgc3RhdGljIE1lc3NhZ2VM
b29wRGlzcGF0Y2hIYW5kbGVyIHNfbWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXI7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOEluamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEluamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAKaW5kZXggNjAwNjNmMS4uZDli
N2VkMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbmplY3RlZFNj
cmlwdEhvc3RDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5q
ZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIklu
c3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiUGFnZS5o
IgorI2luY2x1ZGUgIlNjcmlwdERlYnVnU2VydmVyLmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmgiCiAKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKQEAgLTExMCw5ICsxMTEsMTAg
QEAgU2NyaXB0T2JqZWN0IEluamVjdGVkU2NyaXB0SG9zdDo6Y3JlYXRlSW5qZWN0ZWRTY3JpcHQo
Y29uc3QgU3RyaW5nJiBzY3JpcHRTb3VyY2UKICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJn
c1tdID0gewogICAgICAgc2NyaXB0SG9zdFdyYXBwZXIsCiAgICAgICB3aW5kb3dHbG9iYWwsCi0g
ICAgICB2ODo6TnVtYmVyOjpOZXcoaWQpCisgICAgICB2ODo6TnVtYmVyOjpOZXcoaWQpLAorICAg
ICAgdjg6OlN0cmluZzo6TmV3KCJ2OCIpCiAgICAgfTsKLSAgICB2ODo6TG9jYWw8djg6OlZhbHVl
PiBpbmplY3RlZFNjcmlwdFZhbHVlID0gdjg6OkZ1bmN0aW9uOjpDYXN0KCp2KS0+Q2FsbCh3aW5k
b3dHbG9iYWwsIDMsIGFyZ3MpOworICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGluamVjdGVkU2Ny
aXB0VmFsdWUgPSB2ODo6RnVuY3Rpb246OkNhc3QoKnYpLT5DYWxsKHdpbmRvd0dsb2JhbCwgNCwg
YXJncyk7CiAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGluamVjdGVkU2NyaXB0KHY4OjpPYmpl
Y3Q6OkNhc3QoKmluamVjdGVkU2NyaXB0VmFsdWUpKTsKICAgICByZXR1cm4gU2NyaXB0T2JqZWN0
KGluc3BlY3RlZFNjcmlwdFN0YXRlLCBpbmplY3RlZFNjcmlwdCk7CiB9CkBAIC0xNTYsMTMgKzE1
OCwxMyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhJbmplY3RlZFNjcmlwdEhvc3Q6OnB1c2hO
b2RlUGF0aFRvRnJvbnRlbmRDYWxsYmFjayhjb25zdAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4
SW5qZWN0ZWRTY3JpcHRIb3N0OjpjdXJyZW50Q2FsbEZyYW1lQ2FsbGJhY2soY29uc3Qgdjg6OkFy
Z3VtZW50cyYgYXJncykKIHsKICAgICBJTkNfU1RBVFMoIkluamVjdGVkU2NyaXB0SG9zdC5jdXJy
ZW50Q2FsbEZyYW1lKCkiKTsKLSAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworCXJldHVybiBT
Y3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuY3VycmVudENhbGxGcmFtZVY4KCk7CiB9CiAKIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBWOEluamVjdGVkU2NyaXB0SG9zdDo6aXNBY3RpdmF0aW9uQ2Fs
bGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBJTkNfU1RBVFMoIkluamVj
dGVkU2NyaXB0SG9zdC5pc0FjdGl2YXRpb24oKSIpOwotICAgIHJldHVybiB2ODo6VW5kZWZpbmVk
KCk7CisgICAgcmV0dXJuIHY4OjpCb29sZWFuOjpOZXcodHJ1ZSk7CiB9CiAjZW5kaWYKIApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0LmpzIGIv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0LmpzCmluZGV4IDkyMzVh
ZTEuLjk5MWZjODQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Jbmpl
Y3RlZFNjcmlwdC5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRT
Y3JpcHQuanMKQEAgLTI2LDcgKzI2LDcgQEAKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotdmFyIGluamVj
dGVkU2NyaXB0Q29uc3RydWN0b3IgPSAoZnVuY3Rpb24gKEluamVjdGVkU2NyaXB0SG9zdCwgaW5z
cGVjdGVkV2luZG93LCBpbmplY3RlZFNjcmlwdElkKSB7Cit2YXIgaW5qZWN0ZWRTY3JpcHRDb25z
dHJ1Y3RvciA9IChmdW5jdGlvbiAoSW5qZWN0ZWRTY3JpcHRIb3N0LCBpbnNwZWN0ZWRXaW5kb3cs
IGluamVjdGVkU2NyaXB0SWQsIGpzRW5naW5lKSB7CiAKIHZhciBJbmplY3RlZFNjcmlwdCA9IHt9
OwogCkBAIC0xMjUsMTAgKzEyNSwzMiBAQCBJbmplY3RlZFNjcmlwdC5nZXRQcm9wZXJ0aWVzID0g
ZnVuY3Rpb24ob2JqZWN0UHJveHksIGlnbm9yZUhhc093blByb3BlcnR5LCBhYmJyZQogICAgIGlm
ICghSW5qZWN0ZWRTY3JpcHQuX2lzRGVmaW5lZChvYmplY3QpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgdmFyIHByb3BlcnRpZXMgPSBbXTsKKyAgICAKICAgICB2YXIgcHJvcGVydHlOYW1l
cyA9IGlnbm9yZUhhc093blByb3BlcnR5ID8gSW5qZWN0ZWRTY3JpcHQuX2dldFByb3BlcnR5TmFt
ZXMob2JqZWN0KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCk7CiAgICAgaWYg
KCFpZ25vcmVIYXNPd25Qcm9wZXJ0eSAmJiBvYmplY3QuX19wcm90b19fKQogICAgICAgICBwcm9w
ZXJ0eU5hbWVzLnB1c2goIl9fcHJvdG9fXyIpOwogCisgICAgaWYgKGpzRW5naW5lID09PSAidjgi
KSB7CisgICAgICAgIC8vIENoZWNrIGlmIHRoZSBvYmplY3QgaXMgYSBzY29wZS4KKyAgICAgICAg
aWYgKEluamVjdGVkU2NyaXB0Ll9pc1Njb3BlUHJveHkob2JqZWN0UHJveHkpKSB7CisgICAgICAg
ICAgICBwcm9wZXJ0eU5hbWVzID0gW107CisgICAgICAgICAgICBmb3IgKHZhciBuYW1lIGluIG9i
amVjdCkKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLnB1c2gobmFtZSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAvLyBGSVhNRShodHRwOi8vY3JidWcuY29tLzQxMjQzKTog
T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgbWF5IHJldHVybiBkdXBsaWNhdGVkIG5hbWVzLgor
ICAgICAgICAgICAgdmFyIGEgPSBbXTsKKyAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuc29ydCgp
OworICAgICAgICAgICAgdmFyIHByZXY7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHByb3BlcnR5TmFtZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgbiA9IHBy
b3BlcnR5TmFtZXNbaV07CisgICAgICAgICAgICAgICAgaWYgKG4gIT0gcHJldikKKyAgICAgICAg
ICAgICAgICAgICAgYS5wdXNoKG4pOworICAgICAgICAgICAgICAgIHByZXYgPSBuOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcHJvcGVydHlOYW1lcyA9IGE7CisgICAgICAgIH0KKyAgICB9
CisgICAgCiAgICAgLy8gR28gb3ZlciBwcm9wZXJ0aWVzLCBwcmVwYXJlIHJlc3VsdHMuCiAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0eU5hbWVzLmxlbmd0aDsgKytpKSB7CiAgICAgICAg
IHZhciBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWVzW2ldOwpAQCAtMTU4LDYgKzE4MCwxMiBA
QCBJbmplY3RlZFNjcmlwdC5nZXRQcm9wZXJ0aWVzID0gZnVuY3Rpb24ob2JqZWN0UHJveHksIGln
bm9yZUhhc093blByb3BlcnR5LCBhYmJyZQogICAgIHJldHVybiBwcm9wZXJ0aWVzOwogfQogCitJ
bmplY3RlZFNjcmlwdC5faXNTY29wZVByb3h5ID0gZnVuY3Rpb24ob2JqZWN0UHJveHkpCit7Cisg
ICAgdmFyIG9iamVjdElkID0gb2JqZWN0UHJveHkub2JqZWN0SWQ7CisgICAgcmV0dXJuIHR5cGVv
ZiBvYmplY3RJZCA9PT0gIm9iamVjdCIgJiYgIW9iamVjdElkLnRoaXNPYmplY3Q7Cit9IAorCiBJ
bmplY3RlZFNjcmlwdC5zZXRQcm9wZXJ0eVZhbHVlID0gZnVuY3Rpb24ob2JqZWN0UHJveHksIHBy
b3BlcnR5TmFtZSwgZXhwcmVzc2lvbikKIHsKICAgICB2YXIgb2JqZWN0ID0gSW5qZWN0ZWRTY3Jp
cHQuX3Jlc29sdmVPYmplY3Qob2JqZWN0UHJveHkpOwpAQCAtODEzLDYgKzg0MSw1OCBAQCBJbmpl
Y3RlZFNjcmlwdC5DYWxsRnJhbWVQcm94eSA9IGZ1bmN0aW9uKGlkLCBjYWxsRnJhbWUpCiAgICAg
dGhpcy5zY29wZUNoYWluID0gdGhpcy5fd3JhcFNjb3BlQ2hhaW4oY2FsbEZyYW1lKTsKIH0KIAor
aWYgKGpzRW5naW5lID09PSAidjgiKSB7CisKK0luamVjdGVkU2NyaXB0LkNhbGxGcmFtZVByb3h5
LnByb3RvdHlwZSA9IHsKKyAgICAKKworICAgIF93cmFwU2NvcGVDaGFpbjogZnVuY3Rpb24oY2Fs
bEZyYW1lKQorICAgIHsKKyAgICAgICAgdmFyIFNjb3BlVHlwZSA9IHsgR2xvYmFsOiAwLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBMb2NhbDogMSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgV2l0aDogMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xvc3VyZTogMywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ2F0Y2g6IDQgfTsKKyAgICAgICAgdmFyIHNjb3BlQ2hhaW4g
PSBjYWxsRnJhbWUuc2NvcGVDaGFpbjsKKyAgICAgICAgdmFyIHNjb3BlQ2hhaW5Qcm94eSA9IFtd
OworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjb3BlQ2hhaW4ubGVuZ3RoOyBpICs9IDIp
IHsKKyAgICAgICAgICAgIHZhciBzY29wZVR5cGUgPSBzY29wZUNoYWluW2ldOworICAgICAgICAg
ICAgdmFyIHNjb3BlT2JqZWN0ID0gc2NvcGVDaGFpbltpICsgMV07CisgICAgICAgICAgICB2YXIg
c2NvcGVPYmplY3RQcm94eSA9IEluamVjdGVkU2NyaXB0LmNyZWF0ZVByb3h5T2JqZWN0KHNjb3Bl
T2JqZWN0LCB7IGNhbGxGcmFtZTogdGhpcy5pZCwgY2hhaW5JbmRleDogKGkgKyAxKSB9LCB0cnVl
KTsKKworICAgICAgICAgICAgdmFyIGZvdW5kTG9jYWxTY29wZSA9IGZhbHNlOworICAgICAgICAg
ICAgc3dpdGNoKHNjb3BlVHlwZSkgeworICAgICAgICAgICAgICAgIGNhc2UgU2NvcGVUeXBlLkxv
Y2FsOiB7CisgICAgICAgICAgICAgICAgICAgIGZvdW5kTG9jYWxTY29wZSA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgIHNjb3BlT2JqZWN0UHJveHkuaXNMb2NhbCA9IHRydWU7CisgICAgICAg
ICAgICAgICAgICAgIHNjb3BlT2JqZWN0UHJveHkudGhpc09iamVjdCA9IEluamVjdGVkU2NyaXB0
LmNyZWF0ZVByb3h5T2JqZWN0KGNhbGxGcmFtZS50aGlzT2JqZWN0LCB7IGNhbGxGcmFtZTogdGhp
cy5pZCwgdGhpc09iamVjdDogdHJ1ZSB9LCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2UgU2NvcGVUeXBlLkNs
b3N1cmU6IHsKKyAgICAgICAgICAgICAgICAgICAgc2NvcGVPYmplY3RQcm94eS5pc0Nsb3N1cmUg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgY2FzZSBTY29wZVR5cGUuV2l0aDogeworICAgICAgICAgICAgICAgICAg
ICBzY29wZU9iamVjdFByb3h5LmlzV2l0aEJsb2NrID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoZm91bmRMb2NhbFNjb3BlKSB7CisgICAgICAgICAgICAgICAgaWYgKHNjb3BlT2JqZWN0
IGluc3RhbmNlb2YgaW5zcGVjdGVkV2luZG93LkVsZW1lbnQpCisgICAgICAgICAgICAgICAgICAg
IHNjb3BlT2JqZWN0UHJveHkuaXNFbGVtZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBlbHNl
IGlmIChzY29wZU9iamVjdCBpbnN0YW5jZW9mIGluc3BlY3RlZFdpbmRvdy5Eb2N1bWVudCkKKyAg
ICAgICAgICAgICAgICAgICAgc2NvcGVPYmplY3RQcm94eS5pc0RvY3VtZW50ID0gdHJ1ZTsKKyAg
ICAgICAgICAgIH0KKyAKKyAgICAgICAgICAgIHNjb3BlQ2hhaW5Qcm94eS5wdXNoKHNjb3BlT2Jq
ZWN0UHJveHkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzY29wZUNoYWluUHJveHk7Cisg
ICAgfQorfQorCit9IGVsc2UgeworCiBJbmplY3RlZFNjcmlwdC5DYWxsRnJhbWVQcm94eS5wcm90
b3R5cGUgPSB7CiAgICAgX3dyYXBTY29wZUNoYWluOiBmdW5jdGlvbihjYWxsRnJhbWUpCiAgICAg
ewpAQCAtODQyLDYgKzkyMiw4IEBAIEluamVjdGVkU2NyaXB0LkNhbGxGcmFtZVByb3h5LnByb3Rv
dHlwZSA9IHsKICAgICB9CiB9CiAKK30KKwogSW5qZWN0ZWRTY3JpcHQuZXhlY3V0ZVNxbCA9IGZ1
bmN0aW9uKGNhbGxJZCwgZGF0YWJhc2VJZCwgcXVlcnkpCiB7CiAgICAgZnVuY3Rpb24gc3VjY2Vz
c0NhbGxiYWNrKHR4LCByZXN1bHQpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvU2NyaXB0c1BhbmVsLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Njcmlw
dHNQYW5lbC5qcwppbmRleCAzMTZmMzJlLi4zNWM4ZWU0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMKQEAgLTE5OCw2ICsxOTgsOCBAQCBXZWJJbnNwZWN0
b3IuU2NyaXB0c1BhbmVsID0gZnVuY3Rpb24oKQogICAgIHRoaXMuX3Nob3J0Y3V0c1tzaG9ydGN1
dF0gPSBoYW5kbGVyOwogCiAgICAgdGhpcy5fZGVidWdnZXJFbmFibGVkID0gUHJlZmVyZW5jZXMu
ZGVidWdnZXJBbHdheXNFbmFibGVkOworICAgIGlmIChQcmVmZXJlbmNlcy5kZWJ1Z2dlckFsd2F5
c0VuYWJsZWQpCisgICAgICAgIHRoaXMuX2F0dGFjaERlYnVnZ2VyV2hlblNob3duID0gdHJ1ZTsK
ICAgICB0aGlzLnJlc2V0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGEyZTJhYTMuLjYzOGYyNTkg
MTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDEwLTA0LTE1ICBZdXJ5IFNlbWlraGF0
c2t5ICA8eXVyeXNAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworCVN1cHBvcnQgYmFzaWMgZGVidWdnaW5nIGNhcGFiaWxpdGllcyBpbmNsdWRpbmcg
c3RlcCBpbi9vdmVyL291dCBpbiB2OAorCWltcGxlbWVudGF0aW9uIG9mIFNjcmlwdERlYnVnU2Vy
dmVyLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
NzYwNAorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogc3JjL0RlYnVnZ2VyQWdl
bnQuaDoKKyAgICAgICAgKiBzcmMvRGVidWdnZXJBZ2VudEltcGwuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpEZWJ1Z2dlckFnZW50SW1wbDo6c2V0RGVidWdnZXJTY3JpcHRTb3VyY2UpOgorICAgICAg
ICAqIHNyYy9EZWJ1Z2dlckFnZW50SW1wbC5oOgorICAgICAgICAqIHNyYy9EZWJ1Z2dlckFnZW50
TWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpob3N0
RGlzcGF0Y2hIYW5kbGVyKToKKyAgICAgICAgKFdlYktpdDo6RGVidWdnZXJBZ2VudE1hbmFnZXI6
OmRlYnVnQXR0YWNoKToKKyAgICAgICAgKFdlYktpdDo6RGVidWdnZXJBZ2VudE1hbmFnZXI6OmRl
YnVnRGV0YWNoKToKKyAgICAgICAgKFdlYktpdDo6RGVidWdnZXJBZ2VudE1hbmFnZXI6OnNldE1l
c3NhZ2VMb29wRGlzcGF0Y2hIYW5kbGVyKToKKyAgICAgICAgKiBzcmMvRGVidWdnZXJBZ2VudE1h
bmFnZXIuaDoKKyAgICAgICAgKiBzcmMvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRJbXBsLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRJbXBsOjp3aW5kb3dPYmpl
Y3RDbGVhcmVkKToKKyAgICAgICAgKiBzcmMvanMvRGVidWdnZXJTY3JpcHQuanM6IEFkZGVkLgor
ICAgICAgICAoZGVidWdnZXJTY3JpcHRDb25zdHJ1Y3Rvci5EZWJ1Z2dlclNjcmlwdC5nZXRBZnRl
ckNvbXBpbGVTY3JpcHQpOgorICAgICAgICAoZGVidWdnZXJTY3JpcHRDb25zdHJ1Y3Rvci5EZWJ1
Z2dlclNjcmlwdC5nZXRTY3JpcHRzKToKKyAgICAgICAgKGRlYnVnZ2VyU2NyaXB0Q29uc3RydWN0
b3IuRGVidWdnZXJTY3JpcHQuX2Zvcm1hdFNjcmlwdCk6CisgICAgICAgIChkZWJ1Z2dlclNjcmlw
dENvbnN0cnVjdG9yLkRlYnVnZ2VyU2NyaXB0LnNldEJyZWFrcG9pbnQpOgorICAgICAgICAoZGVi
dWdnZXJTY3JpcHRDb25zdHJ1Y3Rvci5EZWJ1Z2dlclNjcmlwdC5yZW1vdmVCcmVha3BvaW50KToK
KyAgICAgICAgKGRlYnVnZ2VyU2NyaXB0Q29uc3RydWN0b3IuRGVidWdnZXJTY3JpcHQuY3VycmVu
dENhbGxGcmFtZSk6CisgICAgICAgIChkZWJ1Z2dlclNjcmlwdENvbnN0cnVjdG9yLkRlYnVnZ2Vy
U2NyaXB0LnN0ZXBJbnRvU3RhdGVtZW50KToKKyAgICAgICAgKGRlYnVnZ2VyU2NyaXB0Q29uc3Ry
dWN0b3IuRGVidWdnZXJTY3JpcHQuc3RlcE92ZXJTdGF0ZW1lbnQpOgorICAgICAgICAoZGVidWdn
ZXJTY3JpcHRDb25zdHJ1Y3Rvci5EZWJ1Z2dlclNjcmlwdC5zdGVwT3V0T2ZGdW5jdGlvbik6Cisg
ICAgICAgIChkZWJ1Z2dlclNjcmlwdENvbnN0cnVjdG9yLkRlYnVnZ2VyU2NyaXB0LmNsZWFyQnJl
YWtwb2ludHMpOgorICAgICAgICAoZGVidWdnZXJTY3JpcHRDb25zdHJ1Y3Rvci5EZWJ1Z2dlclNj
cmlwdC5zZXRCcmVha3BvaW50c0FjdGl2YXRlZCk6CisgICAgICAgIChkZWJ1Z2dlclNjcmlwdENv
bnN0cnVjdG9yLkRlYnVnZ2VyU2NyaXB0Ll9mcmFtZU1pcnJvclRvSlNDYWxsRnJhbWUpOgorICAg
ICAgICAoZGVidWdnZXJTY3JpcHRDb25zdHJ1Y3Rvci5EZWJ1Z2dlclNjcmlwdC5fd2Via2l0VG9W
OExpbmVOdW1iZXIpOgorICAgICAgICAoZGVidWdnZXJTY3JpcHRDb25zdHJ1Y3Rvci5EZWJ1Z2dl
clNjcmlwdC5fdjhUb1d3ZWJraXRMaW5lTnVtYmVyKToKKyAgICAgICAgKGRlYnVnZ2VyU2NyaXB0
Q29uc3RydWN0b3IpOgorICAgICAgICAqIHNyYy9qcy9EZXZUb29scy5qczoKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5sb2FkZWQpOgorICAgICAgICAoLik6CisgICAgICAgICgpOgorICAgICAgICAq
IHNyYy9qcy9EZXZUb29sc0hvc3RTdHViLmpzOgorICAgICAgICAoLlJlbW90ZURlYnVnZ2VyQWdl
bnRTdHViLnByb3RvdHlwZS5zZXREZWJ1Z2dlclNjcmlwdFNvdXJjZSk6CisgICAgICAgICogc3Jj
L2pzL0luc3BlY3RvckNvbnRyb2xsZXJJbXBsLmpzOgorICAgICAgICAoZGV2dG9vbHMuSW5zcGVj
dG9yQmFja2VuZEltcGwpOgorCiAyMDEwLTA0LTEyICBUb255IENoYW5nICA8dG9ueUBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgpkaWZmIC0tZ2l0IGEv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBp
CmluZGV4IGYxYzZjMmQuLjM3ZmFhOTkgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwaQorKysgYi9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTM1LDYgKzM1LDcg
QEAKICAgICAgICAgJ2RldnRvb2xzX2pzX2ZpbGVzJzogWwogICAgICAgICAgICAgJ3NyYy9qcy9J
bnNwZWN0b3JDb250cm9sbGVySW1wbC5qcycsCiAgICAgICAgICAgICAnc3JjL2pzL0RlYnVnZ2Vy
QWdlbnQuanMnLAorICAgICAgICAgICAgJ3NyYy9qcy9EZWJ1Z2dlclNjcmlwdC5qcycsCiAgICAg
ICAgICAgICAnc3JjL2pzL1Byb2ZpbGVyQWdlbnQuanMnLAogICAgICAgICAgICAgJ3NyYy9qcy9Q
cm9maWxlclByb2Nlc3Nvci5qcycsCiAgICAgICAgICAgICAnc3JjL2pzL0hlYXBQcm9maWxlclBh
bmVsLmpzJywKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvRGVidWdnZXJBZ2VudC5o
IGIvV2ViS2l0L2Nocm9taXVtL3NyYy9EZWJ1Z2dlckFnZW50LmgKaW5kZXggMTdjZGUxMS4uN2Yz
ZGJiYiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9EZWJ1Z2dlckFnZW50LmgKKysr
IGIvV2ViS2l0L2Nocm9taXVtL3NyYy9EZWJ1Z2dlckFnZW50LmgKQEAgLTQwLDcgKzQwLDEwIEBA
IG5hbWVzcGFjZSBXZWJLaXQgewogICAgIE1FVEhPRDAoZ2V0Q29udGV4dElkKSBcCiAgICAgXAog
ICAgIC8qIFJlcXVlc3QgdjggdG8gcHJvY2VzcyBhbGwgZGVidWcgY29tbWFuZHMgaW4gdGhlIHF1
ZXVlLiAqLyBcCi0gICAgTUVUSE9EMChwcm9jZXNzRGVidWdDb21tYW5kcykKKyAgICBNRVRIT0Qw
KHByb2Nlc3NEZWJ1Z0NvbW1hbmRzKSBcCisgICAgXAorICAgIC8qIFB1c2ggRGVidWdnZXJTY3Jp
cHQuanMgY29udGVudCB0byB0aGUgYWdlbnQuICovIFwKKyAgICBNRVRIT0QxKHNldERlYnVnZ2Vy
U2NyaXB0U291cmNlLCBTdHJpbmcpCiAKIERFRklORV9SUENfQ0xBU1MoRGVidWdnZXJBZ2VudCwg
REVCVUdHRVJfQUdFTlRfU1RSVUNUKQogCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3Jj
L0RlYnVnZ2VyQWdlbnRJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvRGVidWdnZXJBZ2Vu
dEltcGwuY3BwCmluZGV4IGM0ODk4NjAuLjY3MzQ4MmEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9zcmMvRGVidWdnZXJBZ2VudEltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMv
RGVidWdnZXJBZ2VudEltcGwuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJT
Y3JpcHREZWJ1Z1NlcnZlci5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgogI2luY2x1ZGUgIldl
YkRldlRvb2xzQWdlbnRJbXBsLmgiCiAjaW5jbHVkZSAiV2ViVmlld0ltcGwuaCIKQEAgLTc4LDYg
Kzc5LDExIEBAIHZvaWQgRGVidWdnZXJBZ2VudEltcGw6OnByb2Nlc3NEZWJ1Z0NvbW1hbmRzKCkK
ICAgICB2ODo6RGVidWc6OlByb2Nlc3NEZWJ1Z01lc3NhZ2VzKCk7CiB9CiAKK3ZvaWQgRGVidWdn
ZXJBZ2VudEltcGw6OnNldERlYnVnZ2VyU2NyaXB0U291cmNlKGNvbnN0IFN0cmluZyYgc291cmNl
KQoreworICAgIFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5zZXREZWJ1Z2dl
clNjcmlwdFNvdXJjZShzb3VyY2UpOworfQorCiB2b2lkIERlYnVnZ2VyQWdlbnRJbXBsOjpkZWJ1
Z2dlck91dHB1dChjb25zdCBTdHJpbmcmIGNvbW1hbmQpCiB7CiAgICAgbV9kZWxlZ2F0ZS0+ZGVi
dWdnZXJPdXRwdXQoY29tbWFuZCk7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0Rl
YnVnZ2VyQWdlbnRJbXBsLmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL0RlYnVnZ2VyQWdlbnRJbXBs
LmgKaW5kZXggMGU2ZTZhZi4uYmQ5ZGRmNiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9EZWJ1Z2dlckFnZW50SW1wbC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvRGVidWdnZXJB
Z2VudEltcGwuaApAQCAtNjAsNiArNjAsNyBAQCBwdWJsaWM6CiAgICAgLy8gRGVidWdnZXJBZ2Vu
dCBpbXBsZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFsIHZvaWQgZ2V0Q29udGV4dElkKCk7CiAgICAg
dmlydHVhbCB2b2lkIHByb2Nlc3NEZWJ1Z0NvbW1hbmRzKCk7CisgICAgdmlydHVhbCB2b2lkIHNl
dERlYnVnZ2VyU2NyaXB0U291cmNlKGNvbnN0IFN0cmluZyYpOwogCiAgICAgdm9pZCBkZWJ1Z2dl
ck91dHB1dChjb25zdCBXZWJDb3JlOjpTdHJpbmcmIG91dCk7CiAKZGlmZiAtLWdpdCBhL1dlYktp
dC9jaHJvbWl1bS9zcmMvRGVidWdnZXJBZ2VudE1hbmFnZXIuY3BwIGIvV2ViS2l0L2Nocm9taXVt
L3NyYy9EZWJ1Z2dlckFnZW50TWFuYWdlci5jcHAKaW5kZXggZmFhZmFmZi4uZDNmN2ZlYSAxMDA2
NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9EZWJ1Z2dlckFnZW50TWFuYWdlci5jcHAKKysr
IGIvV2ViS2l0L2Nocm9taXVtL3NyYy9EZWJ1Z2dlckFnZW50TWFuYWdlci5jcHAKQEAgLTM0LDYg
KzM0LDcgQEAKICNpbmNsdWRlICJEZWJ1Z2dlckFnZW50SW1wbC5oIgogI2luY2x1ZGUgIkZyYW1l
LmgiCiAjaW5jbHVkZSAiUGFnZUdyb3VwTG9hZERlZmVycmVyLmgiCisjaW5jbHVkZSAiU2NyaXB0
RGVidWdTZXJ2ZXIuaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCiAjaW5jbHVkZSAiV2ViRGV2VG9v
bHNBZ2VudEltcGwuaCIKICNpbmNsdWRlICJXZWJGcmFtZUltcGwuaCIKQEAgLTcyLDYgKzczLDQy
IEBAIHByaXZhdGU6CiB9IC8vIG5hbWVzcGFjZQogCiAKK3ZvaWQgRGVidWdnZXJBZ2VudE1hbmFn
ZXI6Omhvc3REaXNwYXRjaEhhbmRsZXIoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlBhZ2UqPiYgcGFn
ZXMpCit7CisgICAgaWYgKCFzX21lc3NhZ2VMb29wRGlzcGF0Y2hIYW5kbGVyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoc19pbkhvc3REaXNwYXRjaEhhbmRsZXIpCisgICAgICAgIHJldHVy
bjsKKworICAgIHNfaW5Ib3N0RGlzcGF0Y2hIYW5kbGVyID0gdHJ1ZTsKKworICAgIFZlY3RvcjxX
ZWJWaWV3SW1wbCo+IHZpZXdzOworICAgIC8vIDEuIERpc2FibGUgYWN0aXZlIG9iamVjdHMgYW5k
IGlucHV0IGV2ZW50cy4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhZ2VzLnNpemUoKTsg
aSsrKSB7CisgICAgICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2UgPSBwYWdlc1tpXTsKKyAgICAgICAg
V2ViVmlld0ltcGwqIHZpZXcgPSBXZWJWaWV3SW1wbDo6ZnJvbVBhZ2UocGFnZSk7CisgICAgICAg
IHNfcGFnZURlZmVycmVycy5zZXQodmlldyAsIG5ldyBXZWJDb3JlOjpQYWdlR3JvdXBMb2FkRGVm
ZXJyZXIocGFnZSwgdHJ1ZSkpOworICAgICAgICB2aWV3cy5hcHBlbmQodmlldyk7CisgICAgICAg
IHZpZXctPnNldElnbm9yZUlucHV0RXZlbnRzKHRydWUpOworICAgIH0KKworICAgIC8vIDIuIFBy
b2Nlc3MgbWVzc2FnZXMuCisgICAgc19tZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlcigpOworCisg
ICAgLy8gMy4gQnJpbmcgdGhpbmdzIGJhY2suCisgICAgZm9yIChWZWN0b3I8V2ViVmlld0ltcGwq
Pjo6aXRlcmF0b3IgaXQgPSB2aWV3cy5iZWdpbigpOyBpdCAhPSB2aWV3cy5lbmQoKTsgKytpdCkg
eworICAgICAgICBpZiAoc19wYWdlRGVmZXJyZXJzLmNvbnRhaW5zKCppdCkpIHsKKyAgICAgICAg
ICAgIC8vIFRoZSB2aWV3IHdhcyBub3QgY2xvc2VkIGR1cmluZyB0aGUgZGlzcGF0Y2guCisgICAg
ICAgICAgICAoKml0KS0+c2V0SWdub3JlSW5wdXRFdmVudHMoZmFsc2UpOworICAgICAgICB9Cisg
ICAgfQorICAgIGRlbGV0ZUFsbFZhbHVlcyhzX3BhZ2VEZWZlcnJlcnMpOworICAgIHNfcGFnZURl
ZmVycmVycy5jbGVhcigpOworCisgICAgc19pbkhvc3REaXNwYXRjaEhhbmRsZXIgPSBmYWxzZTsK
K30KKwogdm9pZCBEZWJ1Z2dlckFnZW50TWFuYWdlcjo6ZGVidWdIb3N0RGlzcGF0Y2hIYW5kbGVy
KCkKIHsKICAgICBpZiAoIXNfbWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIgfHwgIXNfYXR0YWNo
ZWRBZ2VudHNNYXApCkBAIC0xMTYsNiArMTUzLDkgQEAgRGVidWdnZXJBZ2VudE1hbmFnZXI6OkF0
dGFjaGVkQWdlbnRzTWFwKiBEZWJ1Z2dlckFnZW50TWFuYWdlcjo6c19hdHRhY2hlZEFnZW50c00K
IAogdm9pZCBEZWJ1Z2dlckFnZW50TWFuYWdlcjo6ZGVidWdBdHRhY2goRGVidWdnZXJBZ2VudElt
cGwqIGRlYnVnZ2VyQWdlbnQpCiB7CisjaWYgRU5BQkxFKFY4X1NDUklQVF9ERUJVR19TRVJWRVIp
CisgICAgcmV0dXJuOworI2VuZGlmCiAgICAgaWYgKCFzX2F0dGFjaGVkQWdlbnRzTWFwKSB7CiAg
ICAgICAgIHNfYXR0YWNoZWRBZ2VudHNNYXAgPSBuZXcgQXR0YWNoZWRBZ2VudHNNYXAoKTsKICAg
ICAgICAgdjg6OkRlYnVnOjpTZXRNZXNzYWdlSGFuZGxlcjIoJkRlYnVnZ2VyQWdlbnRNYW5hZ2Vy
OjpvblY4RGVidWdNZXNzYWdlKTsKQEAgLTEyOCw2ICsxNjgsOSBAQCB2b2lkIERlYnVnZ2VyQWdl
bnRNYW5hZ2VyOjpkZWJ1Z0F0dGFjaChEZWJ1Z2dlckFnZW50SW1wbCogZGVidWdnZXJBZ2VudCkK
IAogdm9pZCBEZWJ1Z2dlckFnZW50TWFuYWdlcjo6ZGVidWdEZXRhY2goRGVidWdnZXJBZ2VudElt
cGwqIGRlYnVnZ2VyQWdlbnQpCiB7CisjaWYgRU5BQkxFKFY4X1NDUklQVF9ERUJVR19TRVJWRVIp
CisgICAgcmV0dXJuOworI2VuZGlmCiAgICAgaWYgKCFzX2F0dGFjaGVkQWdlbnRzTWFwKSB7CiAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CkBAIC0yNDksNiAr
MjkyLDcgQEAgdm9pZCBEZWJ1Z2dlckFnZW50TWFuYWdlcjo6ZXhlY3V0ZURlYnVnZ2VyQ29tbWFu
ZChjb25zdCBTdHJpbmcmIGNvbW1hbmQsIGludCBjYWwKIHZvaWQgRGVidWdnZXJBZ2VudE1hbmFn
ZXI6OnNldE1lc3NhZ2VMb29wRGlzcGF0Y2hIYW5kbGVyKFdlYkRldlRvb2xzQWdlbnQ6Ok1lc3Nh
Z2VMb29wRGlzcGF0Y2hIYW5kbGVyIGhhbmRsZXIpCiB7CiAgICAgc19tZXNzYWdlTG9vcERpc3Bh
dGNoSGFuZGxlciA9IGhhbmRsZXI7CisgICAgV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OnNl
dE1lc3NhZ2VMb29wRGlzcGF0Y2hIYW5kbGVyKERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpob3N0RGlz
cGF0Y2hIYW5kbGVyKTsKIH0KIAogdm9pZCBEZWJ1Z2dlckFnZW50TWFuYWdlcjo6c2V0SG9zdElk
KFdlYkZyYW1lSW1wbCogd2ViZnJhbWUsIGludCBob3N0SWQpCmRpZmYgLS1naXQgYS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0RlYnVnZ2VyQWdlbnRNYW5hZ2VyLmggYi9XZWJLaXQvY2hyb21pdW0vc3Jj
L0RlYnVnZ2VyQWdlbnRNYW5hZ2VyLmgKaW5kZXggYTJlOTAzMC4uYThiYzdhMyAxMDA2NDQKLS0t
IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9EZWJ1Z2dlckFnZW50TWFuYWdlci5oCisrKyBiL1dlYktp
dC9jaHJvbWl1bS9zcmMvRGVidWdnZXJBZ2VudE1hbmFnZXIuaApAQCAtMzEsMTIgKzMxLDE1IEBA
CiAjaWZuZGVmIERlYnVnZ2VyQWdlbnRNYW5hZ2VyX2gKICNkZWZpbmUgRGVidWdnZXJBZ2VudE1h
bmFnZXJfaAogCisjaW5jbHVkZSAiV2ViQ1N0cmluZy5oIgogI2luY2x1ZGUgIldlYkRldlRvb2xz
QWdlbnQuaCIKICNpbmNsdWRlIDx2OC1kZWJ1Zy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBQYWdlOwogY2xhc3MgUGFnZUdyb3VwTG9hZERl
ZmVycmVyOwogY2xhc3MgU3RyaW5nOwogfQpAQCAtOTcsNiArMTAwLDcgQEAgcHJpdmF0ZToKICAg
ICBEZWJ1Z2dlckFnZW50TWFuYWdlcigpOwogICAgIH5EZWJ1Z2dlckFnZW50TWFuYWdlcigpOwog
CisgICAgc3RhdGljIHZvaWQgaG9zdERpc3BhdGNoSGFuZGxlcihjb25zdCBWZWN0b3I8V2ViQ29y
ZTo6UGFnZSo+Jik7CiAgICAgc3RhdGljIHZvaWQgZGVidWdIb3N0RGlzcGF0Y2hIYW5kbGVyKCk7
CiAgICAgc3RhdGljIHZvaWQgb25WOERlYnVnTWVzc2FnZShjb25zdCB2ODo6RGVidWc6Ok1lc3Nh
Z2UmIG1lc3NhZ2UpOwogICAgIHN0YXRpYyB2b2lkIHNlbmRDb21tYW5kVG9WOChjb25zdCBXZWJD
b3JlOjpTdHJpbmcmIGNtZCwKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnRJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRJbXBsLmNwcAppbmRleCA3ZGEwNTcxLi45ZmYzOTM4IDEwMDY0NAotLS0g
YS9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckZyb250ZW5kQ2xpZW50SW1wbC5jcHAKKysr
IGIvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JGcm9udGVuZENsaWVudEltcGwuY3BwCkBA
IC02OSw2ICs2OSw5IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRJbXBsOjp3aW5kb3dP
YmplY3RDbGVhcmVkKCkKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGdsb2JhbCA9IGZyYW1l
Q29udGV4dC0+R2xvYmFsKCk7CiAKICAgICBnbG9iYWwtPlNldCh2ODo6U3RyaW5nOjpOZXcoIklu
c3BlY3RvckZyb250ZW5kSG9zdCIpLCBmcm9udGVuZEhvc3RPYmopOworI2lmIEVOQUJMRShWOF9T
Q1JJUFRfREVCVUdfU0VSVkVSKQorICAgIGdsb2JhbC0+U2V0KHY4OjpTdHJpbmc6Ok5ldygidjhT
Y3JpcHREZWJ1Z1NlcnZlckVuYWJsZWQiKSwgdjg6OlRydWUoKSk7CisjZW5kaWYKIH0KIAogdm9p
ZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudEltcGw6OmZyb250ZW5kTG9hZGVkKCkKZGlmZiAtLWdp
dCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvRGVidWdnZXJTY3JpcHQuanMgYi9XZWJLaXQvY2hy
b21pdW0vc3JjL2pzL0RlYnVnZ2VyU2NyaXB0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmU1N2NiOGQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3Jj
L2pzL0RlYnVnZ2VyU2NyaXB0LmpzCkBAIC0wLDAgKzEsMjA0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworZnVuY3Rpb24gZGVidWdnZXJT
Y3JpcHRDb25zdHJ1Y3RvcigpIHsKKwordmFyIERlYnVnZ2VyU2NyaXB0ID0ge307CitEZWJ1Z2dl
clNjcmlwdC5fYnJlYWtwb2ludHMgPSB7fTsKKworCitEZWJ1Z2dlclNjcmlwdC5nZXRBZnRlckNv
bXBpbGVTY3JpcHQgPSBmdW5jdGlvbihleGVjU3RhdGUsIGFyZ3MpCit7CisgICAgcmV0dXJuIERl
YnVnZ2VyU2NyaXB0Ll9mb3JtYXRTY3JpcHQoYXJncy5ldmVudERhdGEuc2NyaXB0Xy5zY3JpcHRf
KTsKK30KKworRGVidWdnZXJTY3JpcHQuZ2V0U2NyaXB0cyA9IGZ1bmN0aW9uKGV4ZWNTdGF0ZSwg
YXJncykKK3sKKyAgICB2YXIgc2NyaXB0cyA9IERlYnVnLnNjcmlwdHMoKTsKKyAgICB2YXIgcmVz
dWx0ID0gW107CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY3JpcHRzLmxlbmd0aDsgKytpKSB7
CisgICAgICAgIHJlc3VsdC5wdXNoKERlYnVnZ2VyU2NyaXB0Ll9mb3JtYXRTY3JpcHQoc2NyaXB0
c1tpXSkpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitEZWJ1Z2dlclNjcmlwdC5f
Zm9ybWF0U2NyaXB0ID0gZnVuY3Rpb24oc2NyaXB0KQoreworICAgIHJldHVybiB7CisgICAgICAg
IGlkOiBzY3JpcHQuaWQsCisgICAgICAgIG5hbWU6IHNjcmlwdC5uYW1lLAorICAgICAgICBzb3Vy
Y2U6IHNjcmlwdC5zb3VyY2UsCisgICAgICAgIGxpbmVPZmZzZXQ6IHNjcmlwdC5saW5lX29mZnNl
dCwKKyAgICAgICAgbGluZUNvdW50OiBzY3JpcHQubGluZUNvdW50KCksCisgICAgICAgIGNvbnRl
eHREYXRhOiBzY3JpcHQuY29udGV4dF9kYXRhCisgICAgfTsKK30KKworRGVidWdnZXJTY3JpcHQu
c2V0QnJlYWtwb2ludCA9IGZ1bmN0aW9uKGV4ZWNTdGF0ZSwgYXJncykKK3sKKyAgICBhcmdzLmxp
bmVOdW1iZXIgPSBEZWJ1Z2dlclNjcmlwdC5fd2Via2l0VG9WOExpbmVOdW1iZXIoYXJncy5saW5l
TnVtYmVyKTsKKyAgICB2YXIga2V5ID0gYXJncy5zY3JpcHRJZCArICI6IiArIGFyZ3MubGluZU51
bWJlcjsKKyAgICB2YXIgYnJlYWtJZCA9IERlYnVnZ2VyU2NyaXB0Ll9icmVha3BvaW50c1trZXld
OworICAgIGlmIChicmVha0lkKSB7CisgICAgICAgIGlmIChhcmdzLmVuYWJsZWQpCisgICAgICAg
ICAgICBEZWJ1Zy5lbmFibGVTY3JpcHRCcmVha1BvaW50KGJyZWFrSWQpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBEZWJ1Zy5kaXNhYmxlU2NyaXB0QnJlYWtQb2ludChicmVha0lkKTsKKyAg
ICAgICAgRGVidWcuY2hhbmdlU2NyaXB0QnJlYWtQb2ludENvbmRpdGlvbihicmVha0lkLCBhcmdz
LmNvbmRpdGlvbik7CisgICAgICAgIHJldHVybiBicmVha0lkOworICAgIH0KKworICAgIGJyZWFr
SWQgPSBEZWJ1Zy5zZXRTY3JpcHRCcmVha1BvaW50QnlJZChhcmdzLnNjcmlwdElkLCBhcmdzLmxp
bmVOdW1iZXIsIDAgLyogY29sdW1uICovLCBhcmdzLmNvbmRpdGlvbik7CisgICAgRGVidWdnZXJT
Y3JpcHQuX2JyZWFrcG9pbnRzW2tleV0gPSBicmVha0lkOworICAgIGlmICghYXJncy5lbmFibGVk
KQorICAgICAgICBEZWJ1Zy5kaXNhYmxlU2NyaXB0QnJlYWtQb2ludChicmVha0lkKTsKKyAgICBy
ZXR1cm4gYnJlYWtJZDsKK30KKworRGVidWdnZXJTY3JpcHQucmVtb3ZlQnJlYWtwb2ludCA9IGZ1
bmN0aW9uKGV4ZWNTdGF0ZSwgYXJncykKK3sKKyAgICBhcmdzLmxpbmVOdW1iZXIgPSBEZWJ1Z2dl
clNjcmlwdC5fd2Via2l0VG9WOExpbmVOdW1iZXIoYXJncy5saW5lTnVtYmVyKTsKKyAgICB2YXIg
a2V5ID0gYXJncy5zY3JpcHRJZCArICI6IiArIGFyZ3MubGluZU51bWJlcjsKKyAgICB2YXIgYnJl
YWtJZCA9IERlYnVnZ2VyU2NyaXB0Ll9icmVha3BvaW50c1trZXldOworICAgIGlmIChicmVha0lk
KQorICAgICAgICBEZWJ1Zy5maW5kQnJlYWtQb2ludChicmVha0lkLCB0cnVlKTsKKyAgICBkZWxl
dGUgRGVidWdnZXJTY3JpcHQuX2JyZWFrcG9pbnRzW2tleV07Cit9CisKK0RlYnVnZ2VyU2NyaXB0
LmN1cnJlbnRDYWxsRnJhbWUgPSBmdW5jdGlvbihleGVjU3RhdGUsIGFyZ3MpCit7CisgICAgdmFy
IGZyYW1lQ291bnQgPSBleGVjU3RhdGUuZnJhbWVDb3VudCgpOworICAgIGlmIChmcmFtZUNvdW50
ID09PSAwKQorICAgICAgICByZXR1cm4gdW5kZWZpbmVkOworICAgIAorICAgIHZhciB0b3BGcmFt
ZTsKKyAgICBmb3IgKHZhciBpID0gZnJhbWVDb3VudCAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAg
ICAgIHZhciBmcmFtZU1pcnJvciA9IGV4ZWNTdGF0ZS5mcmFtZShpKTsKKyAgICAgICAgdG9wRnJh
bWUgPSBEZWJ1Z2dlclNjcmlwdC5fZnJhbWVNaXJyb3JUb0pTQ2FsbEZyYW1lKGZyYW1lTWlycm9y
LCB0b3BGcmFtZSk7CisgICAgfQorICAgIHJldHVybiB0b3BGcmFtZTsKK30KKworRGVidWdnZXJT
Y3JpcHQuc3RlcEludG9TdGF0ZW1lbnQgPSBmdW5jdGlvbihleGVjU3RhdGUsIGFyZ3MpCit7Cisg
ICAgZXhlY1N0YXRlLnByZXBhcmVTdGVwKERlYnVnLlN0ZXBBY3Rpb24uU3RlcEluLCAxKTsKK30K
KworRGVidWdnZXJTY3JpcHQuc3RlcE92ZXJTdGF0ZW1lbnQgPSBmdW5jdGlvbihleGVjU3RhdGUs
IGFyZ3MpCit7CisgICAgZXhlY1N0YXRlLnByZXBhcmVTdGVwKERlYnVnLlN0ZXBBY3Rpb24uU3Rl
cE5leHQsIDEpOworfQorCitEZWJ1Z2dlclNjcmlwdC5zdGVwT3V0T2ZGdW5jdGlvbiA9IGZ1bmN0
aW9uKGV4ZWNTdGF0ZSwgYXJncykKK3sKKyAgICBleGVjU3RhdGUucHJlcGFyZVN0ZXAoRGVidWcu
U3RlcEFjdGlvbi5TdGVwT3V0LCAxKTsKK30KKworRGVidWdnZXJTY3JpcHQuY2xlYXJCcmVha3Bv
aW50cyA9IGZ1bmN0aW9uKGV4ZWNTdGF0ZSwgYXJncykKK3sKKyAgICBmb3IgKHZhciBrZXkgaW4g
RGVidWdnZXJTY3JpcHQuX2JyZWFrcG9pbnRzKSB7CisgICAgICAgIHZhciBicmVha0lkID0gRGVi
dWdnZXJTY3JpcHQuX2JyZWFrcG9pbnRzW2tleV07CisgICAgICAgIERlYnVnLmZpbmRCcmVha1Bv
aW50KGJyZWFrSWQsIHRydWUpOworICAgIH0KKyAgICBEZWJ1Z2dlclNjcmlwdC5fYnJlYWtwb2lu
dHMgPSB7fTsKK30KKworRGVidWdnZXJTY3JpcHQuc2V0QnJlYWtwb2ludHNBY3RpdmF0ZWQgPSBm
dW5jdGlvbihleGVjU3RhdGUsIGFyZ3MpCit7CisgICAgZm9yICh2YXIga2V5IGluIERlYnVnZ2Vy
U2NyaXB0Ll9icmVha3BvaW50cykgeworICAgICAgICB2YXIgYnJlYWtJZCA9IERlYnVnZ2VyU2Ny
aXB0Ll9icmVha3BvaW50c1trZXldOworICAgICAgICBpZiAoYXJncy5lbmFibGVkKQorICAgICAg
ICAgICAgRGVidWcuZW5hYmxlU2NyaXB0QnJlYWtQb2ludChicmVha0lkKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgRGVidWcuZGlzYWJsZVNjcmlwdEJyZWFrUG9pbnQoYnJlYWtJZCk7Cisg
ICAgfQorfQorCitEZWJ1Z2dlclNjcmlwdC5fZnJhbWVNaXJyb3JUb0pTQ2FsbEZyYW1lID0gZnVu
Y3Rpb24oZnJhbWVNaXJyb3IsIGNhbGxlckZyYW1lKQoreworICAgIC8vIEdldCBmdW5jdGlvbiBu
YW1lLgorICAgIHZhciBmdW5jOworICAgIHRyeSB7CisgICAgICAgIGZ1bmMgPSBmcmFtZU1pcnJv
ci5mdW5jKCk7CisgICAgfSBjYXRjaChlKSB7CisgICAgfQorICAgIHZhciBmdW5jdGlvbk5hbWU7
CisgICAgaWYgKGZ1bmMpCisgICAgICAgIGZ1bmN0aW9uTmFtZSA9IGZ1bmMubmFtZSgpIHx8IGZ1
bmMuaW5mZXJyZWROYW1lKCk7CisgICAgaWYgKCFmdW5jdGlvbk5hbWUpCisgICAgICAgIGZ1bmN0
aW9uTmFtZSA9ICJbYW5vbnltb3VzXSI7CisgICAgICAgIAorICAgIC8vIEdldCBzY3JpcHQgSUQu
CisgICAgdmFyIHNjcmlwdCA9IGZ1bmMuc2NyaXB0KCk7CisgICAgdmFyIHNvdXJjZUlEID0gc2Ny
aXB0ICYmIHNjcmlwdC5pZCgpOworICAgIAorICAgIC8vIEdldCBsaW5lIG51bWJlci4KKyAgICB2
YXIgbGluZSA9IERlYnVnZ2VyU2NyaXB0Ll92OFRvV3dlYmtpdExpbmVOdW1iZXIoZnJhbWVNaXJy
b3Iuc291cmNlTGluZSgpKTsKKyAgICAKKyAgICAvLyBHZXQgdGhpcyBvYmplY3QuCisgICAgdmFy
IHRoaXNPYmplY3QgPSBmcmFtZU1pcnJvci5kZXRhaWxzXy5yZWNlaXZlcigpOworCisgICAgLy8g
R2V0IHNjb3BlIGNoYWluIGFycmF5IGluIGZvcm1hdDogWzxzY29wZSB0eXBlPiwgPHNjb3BlIG9i
amVjdD4sIDxzY29wZSB0eXBlPiwgPHNjb3BlIG9iamVjdD4sLi4uXQorICAgIHZhciBzY29wZUNo
YWluID0gW107CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmcmFtZU1pcnJvci5zY29wZUNvdW50
KCk7IGkrKykgeworICAgICAgICB2YXIgc2NvcGVNaXJyb3IgPSBmcmFtZU1pcnJvci5zY29wZShp
KTsKKyAgICAgICAgdmFyIHNjb3BlT2JqZWN0TWlycm9yID0gc2NvcGVNaXJyb3Iuc2NvcGVPYmpl
Y3QoKTsKKyAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBzY29wZU9iamVjdE1pcnJvci5wcm9wZXJ0
aWVzKCk7CisgICAgICAgIHZhciBzY29wZU9iamVjdCA9IHt9OworICAgICAgICBmb3IgKHZhciBq
ID0gMDsgaiA8IHByb3BlcnRpZXMubGVuZ3RoOyBqKyspCisgICAgICAgICAgICBzY29wZU9iamVj
dFtwcm9wZXJ0aWVzW2pdLm5hbWUoKV0gPSBwcm9wZXJ0aWVzW2pdLnZhbHVlXzsKKyAgICAgICAg
c2NvcGVDaGFpbi5wdXNoKHNjb3BlTWlycm9yLnNjb3BlVHlwZSgpKTsKKyAgICAgICAgc2NvcGVD
aGFpbi5wdXNoKHNjb3BlT2JqZWN0KTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHsKKwkgICAg
InNvdXJjZUlEIjogc291cmNlSUQsCisJICAgICJsaW5lIjogbGluZSwKKwkgICAgImZ1bmN0aW9u
TmFtZSI6IGZ1bmN0aW9uTmFtZSwKKwkgICAgInR5cGUiOiAiZnVuY3Rpb24iLAorCSAgICAidGhp
c09iamVjdCI6IHRoaXNPYmplY3QsCisJICAgICJzY29wZUNoYWluIjogc2NvcGVDaGFpbiwKKwkg
ICAgImNhbGxlciI6IGNhbGxlckZyYW1lCisgICAgfTsKK30KKworRGVidWdnZXJTY3JpcHQuX3dl
YmtpdFRvVjhMaW5lTnVtYmVyID0gZnVuY3Rpb24obGluZSkKK3sKKyAgICByZXR1cm4gbGluZSAt
IDE7Cit9OworCitEZWJ1Z2dlclNjcmlwdC5fdjhUb1d3ZWJraXRMaW5lTnVtYmVyID0gZnVuY3Rp
b24obGluZSkKK3sKKyAgICByZXR1cm4gbGluZSArIDE7Cit9OworCityZXR1cm4gRGVidWdnZXJT
Y3JpcHQ7CisKK30KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvRGV2VG9vbHMu
anMgYi9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RldlRvb2xzLmpzCmluZGV4IDViMjg4ZWMuLjk0
MDZiZjAgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvRGV2VG9vbHMuanMKKysr
IGIvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9EZXZUb29scy5qcwpAQCAtMTgzLDEyICsxODMsMTYg
QEAgV2ViSW5zcGVjdG9yLmxvYWRlZCA9IGZ1bmN0aW9uKCkKICAgICBQcmVmZXJlbmNlcy5oZWFw
UHJvZmlsZXJQcmVzZW50ID0gdHJ1ZTsKICAgICBQcmVmZXJlbmNlcy5kZWJ1Z2dlckFsd2F5c0Vu
YWJsZWQgPSB0cnVlOwogICAgIFByZWZlcmVuY2VzLnByb2ZpbGVyQWx3YXlzRW5hYmxlZCA9IHRy
dWU7CisgICAgUmVtb3RlRGVidWdnZXJBZ2VudC5zZXREZWJ1Z2dlclNjcmlwdFNvdXJjZSgiKCIg
KyBkZWJ1Z2dlclNjcmlwdENvbnN0cnVjdG9yICsgIikoKTsiKTsKKyAKICAgICBvbGRMb2FkZWQu
Y2FsbCh0aGlzKTsKIAogICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC5sb2FkZWQoKTsKIH07CiAK
IAoraWYgKCF3aW5kb3cudjhTY3JpcHREZWJ1Z1NlcnZlckVuYWJsZWQpIHsKKwogLyoqCiAgKiBU
aGlzIG92ZXJyaWRlIGlzIG5lY2Vzc2FyeSBmb3IgYWRkaW5nIHNjcmlwdCBzb3VyY2UgYXN5bmNo
cm9ub3VzbHkuCiAgKiBAb3ZlcnJpZGUKQEAgLTIyNSwxOCArMjI5LDYgQEAgV2ViSW5zcGVjdG9y
LlNjcmlwdFZpZXcucHJvdG90eXBlLmRpZFJlc29sdmVTY3JpcHRTb3VyY2VfID0gZnVuY3Rpb24o
KQogfTsKIAogCi0vKioKLSAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIFR5cGUgb2YgdGhlIHRoZSBw
cm9wZXJ0eSB2YWx1ZSgib2JqZWN0IiBvciAiZnVuY3Rpb24iKS4KLSAqIEBwYXJhbSB7c3RyaW5n
fSBjbGFzc05hbWUgQ2xhc3MgbmFtZSBvZiB0aGUgcHJvcGVydHkgdmFsdWUuCi0gKiBAY29uc3Ry
dWN0b3IKLSAqLwotV2ViSW5zcGVjdG9yLlVucmVzb2x2ZWRQcm9wZXJ0eVZhbHVlID0gZnVuY3Rp
b24odHlwZSwgY2xhc3NOYW1lKQotewotICAgIHRoaXMudHlwZSA9IHR5cGU7Ci0gICAgdGhpcy5j
bGFzc05hbWUgPSBjbGFzc05hbWU7Ci19OwotCi0KIChmdW5jdGlvbigpCiB7CiAgICAgdmFyIG9s
ZFNob3cgPSBXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZS5zaG93OwpAQCAtMjQ5
LDYgKzI0MSw0NyBAQCBXZWJJbnNwZWN0b3IuVW5yZXNvbHZlZFByb3BlcnR5VmFsdWUgPSBmdW5j
dGlvbih0eXBlLCBjbGFzc05hbWUpCiB9KSgpOwogCiAKKyhmdW5jdGlvbiAoKSB7Cit2YXIgb3Jp
ZyA9IEluamVjdGVkU2NyaXB0QWNjZXNzLnByb3RvdHlwZS5nZXRQcm9wZXJ0aWVzOworSW5qZWN0
ZWRTY3JpcHRBY2Nlc3MucHJvdG90eXBlLmdldFByb3BlcnRpZXMgPSBmdW5jdGlvbihvYmplY3RQ
cm94eSwgaWdub3JlSGFzT3duUHJvcGVydHksIGFiYnJldmlhdGUsIGNhbGxiYWNrKQoreworICAg
IGlmIChvYmplY3RQcm94eS5pc1Njb3BlKQorICAgICAgICBkZXZ0b29scy50b29scy5nZXREZWJ1
Z2dlckFnZW50KCkucmVzb2x2ZVNjb3BlKG9iamVjdFByb3h5Lm9iamVjdElkLCBjYWxsYmFjayk7
CisgICAgZWxzZSBpZiAob2JqZWN0UHJveHkuaXNWOFJlZikKKyAgICAgICAgZGV2dG9vbHMudG9v
bHMuZ2V0RGVidWdnZXJBZ2VudCgpLnJlc29sdmVDaGlsZHJlbihvYmplY3RQcm94eS5vYmplY3RJ
ZCwgY2FsbGJhY2ssIGZhbHNlKTsKKyAgICBlbHNlCisgICAgICAgIG9yaWcuYXBwbHkodGhpcywg
YXJndW1lbnRzKTsKK307Cit9KSgpOworCisKKyhmdW5jdGlvbigpCit7CitJbmplY3RlZFNjcmlw
dEFjY2Vzcy5wcm90b3R5cGUuZXZhbHVhdGVJbkNhbGxGcmFtZSA9IGZ1bmN0aW9uKGNhbGxGcmFt
ZUlkLCBjb2RlLCBvYmplY3RHcm91cCwgY2FsbGJhY2spCit7CisgICAgLy9UT0RPKHBmZWxkbWFu
KTogcmVtb3ZlIG9uY2UgNDkwODQgaXMgcm9sbGVkLgorICAgIGlmICghY2FsbGJhY2spCisgICAg
ICAgIGNhbGxiYWNrID0gb2JqZWN0R3JvdXA7CisgICAgZGV2dG9vbHMudG9vbHMuZ2V0RGVidWdn
ZXJBZ2VudCgpLmV2YWx1YXRlSW5DYWxsRnJhbWUoY2FsbEZyYW1lSWQsIGNvZGUsIGNhbGxiYWNr
KTsKK307Cit9KSgpOworCisKKyhmdW5jdGlvbigpCit7Cit2YXIgb3JpZyA9IEluamVjdGVkU2Ny
aXB0QWNjZXNzLnByb3RvdHlwZS5nZXRDb21wbGV0aW9uczsKK0luamVjdGVkU2NyaXB0QWNjZXNz
LnByb3RvdHlwZS5nZXRDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKGV4cHJlc3Npb25TdHJpbmcsIGlu
Y2x1ZGVJbnNwZWN0b3JDb21tYW5kTGluZUFQSSwgY2FsbEZyYW1lSWQsIHJlcG9ydENvbXBsZXRp
b25zKQoreworICAgIGlmICh0eXBlb2YgY2FsbEZyYW1lSWQgPT09ICJudW1iZXIiKQorICAgICAg
ICBkZXZ0b29scy50b29scy5nZXREZWJ1Z2dlckFnZW50KCkucmVzb2x2ZUNvbXBsZXRpb25zT25G
cmFtZShleHByZXNzaW9uU3RyaW5nLCBjYWxsRnJhbWVJZCwgcmVwb3J0Q29tcGxldGlvbnMpOwor
ICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIG9yaWcuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKK307
Cit9KSgpOworCit9CisKKwogKGZ1bmN0aW9uIEludGVyY2VwdFByb2ZpbGVzUGFuZWxFdmVudHMo
KQogewogICAgIHZhciBvbGRTaG93ID0gV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90
eXBlLnNob3c7CkBAIC0zNDMsNDUgKzM3Niw2IEBAIFdlYkluc3BlY3Rvci5VSVN0cmluZyA9IGZ1
bmN0aW9uKHN0cmluZykKIH0pKCk7CiAKIAotKGZ1bmN0aW9uICgpIHsKLXZhciBvcmlnID0gSW5q
ZWN0ZWRTY3JpcHRBY2Nlc3MucHJvdG90eXBlLmdldFByb3BlcnRpZXM7Ci1JbmplY3RlZFNjcmlw
dEFjY2Vzcy5wcm90b3R5cGUuZ2V0UHJvcGVydGllcyA9IGZ1bmN0aW9uKG9iamVjdFByb3h5LCBp
Z25vcmVIYXNPd25Qcm9wZXJ0eSwgYWJicmV2aWF0ZSwgY2FsbGJhY2spCi17Ci0gICAgaWYgKG9i
amVjdFByb3h5LmlzU2NvcGUpCi0gICAgICAgIGRldnRvb2xzLnRvb2xzLmdldERlYnVnZ2VyQWdl
bnQoKS5yZXNvbHZlU2NvcGUob2JqZWN0UHJveHkub2JqZWN0SWQsIGNhbGxiYWNrKTsKLSAgICBl
bHNlIGlmIChvYmplY3RQcm94eS5pc1Y4UmVmKQotICAgICAgICBkZXZ0b29scy50b29scy5nZXRE
ZWJ1Z2dlckFnZW50KCkucmVzb2x2ZUNoaWxkcmVuKG9iamVjdFByb3h5Lm9iamVjdElkLCBjYWxs
YmFjaywgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgb3JpZy5hcHBseSh0aGlzLCBhcmd1bWVu
dHMpOwotfTsKLX0pKCk7Ci0KLQotKGZ1bmN0aW9uKCkKLXsKLUluamVjdGVkU2NyaXB0QWNjZXNz
LnByb3RvdHlwZS5ldmFsdWF0ZUluQ2FsbEZyYW1lID0gZnVuY3Rpb24oY2FsbEZyYW1lSWQsIGNv
ZGUsIG9iamVjdEdyb3VwLCBjYWxsYmFjaykKLXsKLSAgICAvL1RPRE8ocGZlbGRtYW4pOiByZW1v
dmUgb25jZSA0OTA4NCBpcyByb2xsZWQuCi0gICAgaWYgKCFjYWxsYmFjaykKLSAgICAgICAgY2Fs
bGJhY2sgPSBvYmplY3RHcm91cDsKLSAgICBkZXZ0b29scy50b29scy5nZXREZWJ1Z2dlckFnZW50
KCkuZXZhbHVhdGVJbkNhbGxGcmFtZShjYWxsRnJhbWVJZCwgY29kZSwgY2FsbGJhY2spOwotfTsK
LX0pKCk7Ci0KLQotKGZ1bmN0aW9uKCkKLXsKLXZhciBvcmlnID0gSW5qZWN0ZWRTY3JpcHRBY2Nl
c3MucHJvdG90eXBlLmdldENvbXBsZXRpb25zOwotSW5qZWN0ZWRTY3JpcHRBY2Nlc3MucHJvdG90
eXBlLmdldENvbXBsZXRpb25zID0gZnVuY3Rpb24oZXhwcmVzc2lvblN0cmluZywgaW5jbHVkZUlu
c3BlY3RvckNvbW1hbmRMaW5lQVBJLCBjYWxsRnJhbWVJZCwgcmVwb3J0Q29tcGxldGlvbnMpCi17
Ci0gICAgaWYgKHR5cGVvZiBjYWxsRnJhbWVJZCA9PT0gIm51bWJlciIpCi0gICAgICAgIGRldnRv
b2xzLnRvb2xzLmdldERlYnVnZ2VyQWdlbnQoKS5yZXNvbHZlQ29tcGxldGlvbnNPbkZyYW1lKGV4
cHJlc3Npb25TdHJpbmcsIGNhbGxGcmFtZUlkLCByZXBvcnRDb21wbGV0aW9ucyk7Ci0gICAgZWxz
ZQotICAgICAgICByZXR1cm4gb3JpZy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwotfTsKLX0pKCk7
Ci0KLQogLy8gV2UgbmVlZCB0byBoYXZlIGEgcGxhY2UgZm9yIHBvc3Rwb25lZCB0YXNrcwogLy8g
d2hpY2ggc2hvdWxkIGJlIGV4ZWN1dGVkIHdoZW4gYWxsIHRoZSBtZXNzYWdlcyBiZXR3ZWVuIGFn
ZW50IGFuZCBmcm9udGVuZAogLy8gYXJlIHByb2Nlc3NlZC4KZGlmZiAtLWdpdCBhL1dlYktpdC9j
aHJvbWl1bS9zcmMvanMvRGV2VG9vbHNIb3N0U3R1Yi5qcyBiL1dlYktpdC9jaHJvbWl1bS9zcmMv
anMvRGV2VG9vbHNIb3N0U3R1Yi5qcwppbmRleCA4YjJmNDZiLi5jYWU0YTFlIDEwMDY0NAotLS0g
YS9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RldlRvb2xzSG9zdFN0dWIuanMKKysrIGIvV2ViS2l0
L2Nocm9taXVtL3NyYy9qcy9EZXZUb29sc0hvc3RTdHViLmpzCkBAIC01NSw2ICs1NSwxMSBAQCBS
ZW1vdGVEZWJ1Z2dlckFnZW50U3R1Yi5wcm90b3R5cGUucHJvY2Vzc0RlYnVnQ29tbWFuZHMgPSBm
dW5jdGlvbigpCiB9OwogCiAKK1JlbW90ZURlYnVnZ2VyQWdlbnRTdHViLnByb3RvdHlwZS5zZXRE
ZWJ1Z2dlclNjcmlwdFNvdXJjZSA9IGZ1bmN0aW9uKHNvdXJjZSkKK3sKK307CisKKwogLyoqCiAg
KiBAY29uc3RydWN0b3IKICAqLwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9J
bnNwZWN0b3JDb250cm9sbGVySW1wbC5qcyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvSW5zcGVj
dG9yQ29udHJvbGxlckltcGwuanMKaW5kZXggYzlhMzliNC4uMmNiMDkwNyAxMDA2NDQKLS0tIGEv
V2ViS2l0L2Nocm9taXVtL3NyYy9qcy9JbnNwZWN0b3JDb250cm9sbGVySW1wbC5qcworKysgYi9X
ZWJLaXQvY2hyb21pdW0vc3JjL2pzL0luc3BlY3RvckNvbnRyb2xsZXJJbXBsLmpzCkBAIC04Niw2
ICs4NiwyMSBAQCBkZXZ0b29scy5JbnNwZWN0b3JCYWNrZW5kSW1wbCA9IGZ1bmN0aW9uKCkKICAg
ICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJ0b2dnbGVTdHlsZUVu
YWJsZWQiKTsKICAgICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJz
ZXRSdWxlU2VsZWN0b3IiKTsKICAgICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250cm9sbGVyRGVs
ZWdhdGVfKCJhZGRSdWxlIik7CisKKyAgICBpZiAod2luZG93LnY4U2NyaXB0RGVidWdTZXJ2ZXJF
bmFibGVkKSB7CisgICAgdGhpcy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygi
ZGlzYWJsZURlYnVnZ2VyIik7CisgICAgdGhpcy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRl
bGVnYXRlXygiZW5hYmxlRGVidWdnZXIiKTsKKyAgICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250
cm9sbGVyRGVsZWdhdGVfKCJzZXRCcmVha3BvaW50Iik7CisgICAgdGhpcy5pbnN0YWxsSW5zcGVj
dG9yQ29udHJvbGxlckRlbGVnYXRlXygicmVtb3ZlQnJlYWtwb2ludCIpOworICAgIHRoaXMuaW5z
dGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oImFjdGl2YXRlQnJlYWtwb2ludHMiKTsK
KyAgICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJkZWFjdGl2YXRl
QnJlYWtwb2ludHMiKTsKKyAgICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdh
dGVfKCJwYXVzZUluRGVidWdnZXIiKTsKKyAgICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250cm9s
bGVyRGVsZWdhdGVfKCJyZXN1bWVEZWJ1Z2dlciIpOworICAgIHRoaXMuaW5zdGFsbEluc3BlY3Rv
ckNvbnRyb2xsZXJEZWxlZ2F0ZV8oInN0ZXBJbnRvU3RhdGVtZW50SW5EZWJ1Z2dlciIpOworICAg
IHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oInN0ZXBPdXRPZkZ1bmN0
aW9uSW5EZWJ1Z2dlciIpOworICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxl
Z2F0ZV8oInN0ZXBPdmVyU3RhdGVtZW50SW5EZWJ1Z2dlciIpOworICAgIHRoaXMuaW5zdGFsbElu
c3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oInNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUiKTsK
KyAgICB9CiB9OwogZGV2dG9vbHMuSW5zcGVjdG9yQmFja2VuZEltcGwucHJvdG90eXBlLl9fcHJv
dG9fXyA9IFdlYkluc3BlY3Rvci5JbnNwZWN0b3JCYWNrZW5kU3R1Yi5wcm90b3R5cGU7CiAKQEAg
LTEwOCw2ICsxMjMsOCBAQCBkZXZ0b29scy5JbnNwZWN0b3JCYWNrZW5kSW1wbC5wcm90b3R5cGUu
cHJvZmlsZXJFbmFibGVkID0gZnVuY3Rpb24oKQogfTsKIAogCitpZiAoIXdpbmRvdy52OFNjcmlw
dERlYnVnU2VydmVyRW5hYmxlZCkgeworCiBkZXZ0b29scy5JbnNwZWN0b3JCYWNrZW5kSW1wbC5w
cm90b3R5cGUuc2V0QnJlYWtwb2ludCA9IGZ1bmN0aW9uKHNvdXJjZUlELCBsaW5lLCBlbmFibGVk
LCBjb25kaXRpb24pCiB7CiAgICAgdGhpcy5yZW1vdmVCcmVha3BvaW50KHNvdXJjZUlELCBsaW5l
KTsKQEAgLTE5Myw2ICsyMTAsOCBAQCBkZXZ0b29scy5JbnNwZWN0b3JCYWNrZW5kSW1wbC5wcm90
b3R5cGUuc2V0UGF1c2VPbkV4Y2VwdGlvbnMgPSBmdW5jdGlvbih2YWx1ZSkKICAgICByZXR1cm4g
ZGV2dG9vbHMudG9vbHMuZ2V0RGVidWdnZXJBZ2VudCgpLnNldFBhdXNlT25FeGNlcHRpb25zKHZh
bHVlKTsKIH07CiAKK30KKwogCiAvKioKICAqIEBvdmVycmlkZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53434</attachid>
            <date>2010-04-15 07:06:54 -0700</date>
            <delta_ts>2010-04-15 07:25:13 -0700</delta_ts>
            <desc>patch</desc>
            <filename>script-debug-server2.patch</filename>
            <type>text/plain</type>
            <size>49594</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MmYxMTg0ZC4uNWI2ZDcwYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MCBAQAorMjAxMC0wNC0xNSAgWXVyeSBTZW1pa2hh
dHNreSAgPHl1cnlzQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisJCisgICAgICAgIFN1cHBvcnQgYmFzaWMgZGVidWdnaW5nIGNhcGFiaWxpdGllcyBp
bmNsdWRpbmcgc3RlcCBpbi9vdmVyL291dCBpbiB2OAorICAgICAgICBpbXBsZW1lbnRhdGlvbiBv
ZiBTY3JpcHREZWJ1Z1NlcnZlci4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Mzc2MDQKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW5qZWN0ZWRT
Y3JpcHRIb3N0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0SG9z
dDo6Y3JlYXRlSW5qZWN0ZWRTY3JpcHQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdERl
YnVnU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpTY3Jp
cHREZWJ1Z1NlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0
RGVidWdnZXJTY3JpcHRTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2
ZXI6OmFkZExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpy
ZW1vdmVMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0
QnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6cmVtb3Zl
QnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6Y2xlYXJC
cmVha3BvaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0QnJl
YWtwb2ludHNBY3RpdmF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6
OmNvbnRpbnVlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6
c3RlcEludG9TdGF0ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6
OnN0ZXBPdmVyU3RhdGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVy
OjpzdGVwT3V0T2ZGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZl
cjo6Y3VycmVudENhbGxGcmFtZVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVn
U2VydmVyOjpjdXJyZW50Q2FsbEZyYW1lVjgpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVi
dWdTZXJ2ZXI6Om9uVjhEZWJ1Z01lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVi
dWdTZXJ2ZXI6Om9uVjhEZWJ1Z0hvc3REaXNwYXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHREZWJ1Z1NlcnZlcjo6aGFuZGxlVjhEZWJ1Z0hvc3REaXNwYXRjaCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6aGFuZGxlVjhEZWJ1Z01lc3NhZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRGlkUGFyc2VTb3VyY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmVuc3VyZURlYnVnZ2VyU2NyaXB0Q29t
cGlsZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmRpZFJlc3VtZSk6
CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpwYXVzZU9uRXhjZXB0aW9uc1N0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpzZXRQYXVzZU9uRXhjZXB0aW9uc1N0YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpzZXRNZXNzYWdlTG9vcERp
c3BhdGNoSGFuZGxlcik6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5qZWN0ZWRT
Y3JpcHRIb3N0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0SG9z
dDo6Y3JlYXRlSW5qZWN0ZWRTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6VjhJbmplY3RlZFNj
cmlwdEhvc3Q6OmN1cnJlbnRDYWxsRnJhbWVDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpW
OEluamVjdGVkU2NyaXB0SG9zdDo6aXNBY3RpdmF0aW9uQ2FsbGJhY2spOgorICAgICAgICAqIGlu
c3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHQuanM6CisgICAgICAgIChpbmplY3RlZFNj
cmlwdENvbnN0cnVjdG9yKToKKyAgICAgICAgKGluamVjdGVkU2NyaXB0Q29uc3RydWN0b3IuKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qczoKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwpOgorCiAyMDEwLTA0LTE1ICBHeXV5b3VuZyBLaW0g
IDxneXV5b3VuZy5raW1Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBT
ZWlkZWwuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRI
b3N0Q3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RD
dXN0b20uY3BwCmluZGV4IGY4NDg3ODMuLjI1Y2YyM2YgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCkBAIC05NSw2ICs5NSw3IEBA
IFNjcmlwdE9iamVjdCBJbmplY3RlZFNjcmlwdEhvc3Q6OmNyZWF0ZUluamVjdGVkU2NyaXB0KGNv
bnN0IFN0cmluZyYgc291cmNlLCBTY3JpCiAgICAgYXJncy5hcHBlbmQodG9KUyhzY3JpcHRTdGF0
ZSwgZ2xvYmFsT2JqZWN0LCB0aGlzKSk7CiAgICAgYXJncy5hcHBlbmQoZ2xvYmFsVGhpc1ZhbHVl
KTsKICAgICBhcmdzLmFwcGVuZChqc051bWJlcihzY3JpcHRTdGF0ZSwgaWQpKTsKKyAgICBhcmdz
LmFwcGVuZChqc1N0cmluZyhzY3JpcHRTdGF0ZSwgU3RyaW5nKCJKU0MiKSkpOwogICAgIEpTVmFs
dWUgcmVzdWx0ID0gSlNDOjpjYWxsKHNjcmlwdFN0YXRlLCBmdW5jdGlvblZhbHVlLCBjYWxsVHlw
ZSwgY2FsbERhdGEsIGdsb2JhbFRoaXNWYWx1ZSwgYXJncyk7CiAgICAgaWYgKHJlc3VsdC5pc09i
amVjdCgpKQogICAgICAgICByZXR1cm4gU2NyaXB0T2JqZWN0KHNjcmlwdFN0YXRlLCByZXN1bHQu
Z2V0T2JqZWN0KCkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHREZWJ1
Z1NlcnZlci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmNwcApp
bmRleCA4NzYzMmVlLi4xNTQ5NGE4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nj
cmlwdERlYnVnU2VydmVyLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVn
U2VydmVyLmNwcApAQCAtMzMsMjEgKzMzLDMxMyBAQAogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRf
REVCVUdHRVIpCiAKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNs
dWRlICJTY3JpcHREZWJ1Z0xpc3RlbmVyLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5j
bHVkZSAiVjhET01XaW5kb3cuaCIKKyNpbmNsdWRlICJWOFByb3h5LmgiCiAjaW5jbHVkZSA8djgt
ZGVidWcuaD4KLQogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiB2ODo6UGVyc2lzdGVudDx2ODo6Q29udGV4dD4gU2NyaXB0RGVidWdTZXJ2ZXI6
OnNfdXRpbGl0eUNvbnRleHQ7CiAKK1NjcmlwdERlYnVnU2VydmVyOjpNZXNzYWdlTG9vcERpc3Bh
dGNoSGFuZGxlciBTY3JpcHREZWJ1Z1NlcnZlcjo6c19tZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxl
ciA9IDA7CisKIFNjcmlwdERlYnVnU2VydmVyJiBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkK
IHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFNjcmlwdERlYnVnU2VydmVyLCBzZXJ2ZXIsICgp
KTsKICAgICByZXR1cm4gc2VydmVyOwogfQogCitTY3JpcHREZWJ1Z1NlcnZlcjo6U2NyaXB0RGVi
dWdTZXJ2ZXIoKQorICAgIDogbV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlKERvbnRQYXVzZU9uRXhj
ZXB0aW9ucykKKyAgICAsIG1fY3VycmVudENhbGxGcmFtZVN0YXRlKDApCit7Cit9CisKK3ZvaWQg
U2NyaXB0RGVidWdTZXJ2ZXI6OnNldERlYnVnZ2VyU2NyaXB0U291cmNlKGNvbnN0IFN0cmluZyYg
c2NyaXB0U291cmNlKQoreworICAgIG1fZGVidWdnZXJTY3JpcHRTb3VyY2UgPSBzY3JpcHRTb3Vy
Y2U7Cit9CisKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmFkZExpc3RlbmVyKFNjcmlwdERlYnVn
TGlzdGVuZXIqIGxpc3RlbmVyLCBQYWdlKiBwYWdlKQoreworI2lmIEVOQUJMRShWOF9TQ1JJUFRf
REVCVUdfU0VSVkVSKQorICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKKyAgICB2ODo6TG9jYWw8
djg6OkNvbnRleHQ+IGRlYnVnZ2VyQ29udGV4dCA9IHY4OjpEZWJ1Zzo6R2V0RGVidWdDb250ZXh0
KCk7CisgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRTY29wZShkZWJ1Z2dlckNvbnRleHQp
OworCisgICAgaWYgKCFtX2xpc3RlbmVyc01hcC5zaXplKCkpIHsKKyAgICAgICAgZW5zdXJlRGVi
dWdnZXJTY3JpcHRDb21waWxlZCgpOworICAgICAgICBBU1NFUlQoIW1fZGVidWdnZXJTY3JpcHQt
PklzVW5kZWZpbmVkKCkpOworICAgICAgICB2ODo6RGVidWc6OlNldE1lc3NhZ2VIYW5kbGVyMigm
U2NyaXB0RGVidWdTZXJ2ZXI6Om9uVjhEZWJ1Z01lc3NhZ2UpOworICAgICAgICB2ODo6RGVidWc6
OlNldEhvc3REaXNwYXRjaEhhbmRsZXIoJlNjcmlwdERlYnVnU2VydmVyOjpvblY4RGVidWdIb3N0
RGlzcGF0Y2gsIDEwMCAvKiBtcyAqLyk7CisgICAgfQorICAgIG1fbGlzdGVuZXJzTWFwLnNldChw
YWdlLCBsaXN0ZW5lcik7CisgICAgVjhQcm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZShw
YWdlLT5tYWluRnJhbWUoKSk7CisgICAgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjb250ZXh0ID0g
cHJveHktPm1haW5Xb3JsZENvbnRleHQoKTsKKyAgICBTdHJpbmcgY29udGV4dERhdGEgPSB0b1dl
YkNvcmVTdHJpbmdXaXRoTnVsbENoZWNrKGNvbnRleHQtPkdldERhdGEoKSk7CisgICAgbV9jb250
ZXh0RGF0YU1hcC5zZXQobGlzdGVuZXIsIGNvbnRleHREYXRhKTsKKworICAgIHY4OjpIYW5kbGU8
djg6OkZ1bmN0aW9uPiBnZXRTY3JpcHRzRnVuY3Rpb24gPSB2ODo6TG9jYWw8djg6OkZ1bmN0aW9u
Pjo6Q2FzdChtX2RlYnVnZ2VyU2NyaXB0LT5HZXQodjg6OlN0cmluZzo6TmV3KCJnZXRTY3JpcHRz
IikpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUgPSB2ODo6RGVidWc6OkNhbGwo
Z2V0U2NyaXB0c0Z1bmN0aW9uKTsKKyAgICBpZiAodmFsdWUuSXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm47CisgICAgQVNTRVJUKCF2YWx1ZS0+SXNVbmRlZmluZWQoKSAmJiB2YWx1ZS0+SXNBcnJh
eSgpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpBcnJheT4gc2NyaXB0c0FycmF5ID0gdjg6OkhhbmRs
ZTx2ODo6QXJyYXk+OjpDYXN0KHZhbHVlKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c2NyaXB0c0FycmF5LT5MZW5ndGgoKTsgKytpKQorICAgICAgICBkaXNwYXRjaERpZFBhcnNlU291
cmNlKGxpc3RlbmVyLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHNjcmlwdHNBcnJheS0+
R2V0KHY4OjpJbnRlZ2VyOjpOZXcoaSkpKSk7CisjZW5kaWYKK30KKwordm9pZCBTY3JpcHREZWJ1
Z1NlcnZlcjo6cmVtb3ZlTGlzdGVuZXIoU2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIsIFBh
Z2UqIHBhZ2UpCit7CisgICAgaWYgKCFtX2xpc3RlbmVyc01hcC5jb250YWlucyhwYWdlKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9saXN0ZW5lcnNNYXAucmVtb3ZlKHBhZ2UpOworCisgICAg
aWYgKG1fbGlzdGVuZXJzTWFwLmlzRW1wdHkoKSkgeworICAgICAgICB2ODo6RGVidWc6OlNldE1l
c3NhZ2VIYW5kbGVyMigwKTsKKyAgICAgICAgdjg6OkRlYnVnOjpTZXRIb3N0RGlzcGF0Y2hIYW5k
bGVyKDApOworICAgIH0KKyAgICAvLyBGSVhNRTogUmVtb3ZlIGFsbCBicmVha3BvaW50cyBzZXQg
YnkgdGhlIGFnZW50LgorICAgIC8vIEZJWE1FOiBGb3JjZSBjb250aW51ZSBpZiBkZXRhY2ggaGFw
cGVuZWQgaW4gbmVzc3RlZCBtZXNzYWdlIGxvb3Agd2hpbGUKKyAgICAvLyBkZWJ1Z2dlciB3YXMg
cGF1c2VkIG9uIGEgYnJlYWtwb2ludChhcyBsb25nIGFzIHRoZXJlIGFyZSBvdGhlcgorICAgIC8v
IGF0dGFjaGVkIGFnZW50cyB2OCB3aWxsIHdhaXQgZm9yIGV4cGxpY2l0J2NvbnRpbnVlJyBtZXNz
YWdlKS4KKyAgICAvLyBGSVhNRTogc2VuZCBjb250aW51ZSBjb21tYW5kIHRvIHY4IGlmIG5lY2Vz
c2FyeTsKK30KKwordm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0QnJlYWtwb2ludChjb25zdCBT
dHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBTY3JpcHRCcmVha3BvaW50IGJy
ZWFrcG9pbnQpCit7CisjaWYgRU5BQkxFKFY4X1NDUklQVF9ERUJVR19TRVJWRVIpCisgICAgdjg6
OkhhbmRsZVNjb3BlIHNjb3BlOworICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gZGVidWdnZXJD
b250ZXh0ID0gdjg6OkRlYnVnOjpHZXREZWJ1Z0NvbnRleHQoKTsKKyAgICB2ODo6Q29udGV4dDo6
U2NvcGUgY29udGV4dFNjb3BlKGRlYnVnZ2VyQ29udGV4dCk7CisKKyAgICB2ODo6TG9jYWw8djg6
Ok9iamVjdD4gYXJncyA9IHY4OjpPYmplY3Q6Ok5ldygpOworICAgIGFyZ3MtPlNldCh2ODo6U3Ry
aW5nOjpOZXcoInNjcmlwdElkIiksIHY4U3RyaW5nKHNvdXJjZUlEKSk7CisgICAgYXJncy0+U2V0
KHY4OjpTdHJpbmc6Ok5ldygibGluZU51bWJlciIpLCB2ODo6SW50ZWdlcjo6TmV3KGxpbmVOdW1i
ZXIpKTsKKyAgICBhcmdzLT5TZXQodjg6OlN0cmluZzo6TmV3KCJjb25kaXRpb24iKSwgdjhTdHJp
bmcoYnJlYWtwb2ludC5jb25kaXRpb24pKTsKKyAgICBhcmdzLT5TZXQodjg6OlN0cmluZzo6TmV3
KCJlbmFibGVkIiksIHY4OjpCb29sZWFuOjpOZXcoYnJlYWtwb2ludC5lbmFibGVkKSk7CisKKyAg
ICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gc2V0QnJlYWtwb2ludEZ1bmN0aW9uID0gdjg6Okxv
Y2FsPHY4OjpGdW5jdGlvbj46OkNhc3QobV9kZWJ1Z2dlclNjcmlwdC0+R2V0KHY4OjpTdHJpbmc6
Ok5ldygic2V0QnJlYWtwb2ludCIpKSk7CisgICAgdjg6OkRlYnVnOjpDYWxsKHNldEJyZWFrcG9p
bnRGdW5jdGlvbiwgYXJncyk7CisjZW5kaWYKK30KKwordm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6
cmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVt
YmVyKQoreworI2lmIEVOQUJMRShWOF9TQ1JJUFRfREVCVUdfU0VSVkVSKQorICAgIHY4OjpIYW5k
bGVTY29wZSBzY29wZTsKKyAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGRlYnVnZ2VyQ29udGV4
dCA9IHY4OjpEZWJ1Zzo6R2V0RGVidWdDb250ZXh0KCk7CisgICAgdjg6OkNvbnRleHQ6OlNjb3Bl
IGNvbnRleHRTY29wZShkZWJ1Z2dlckNvbnRleHQpOworCisgICAgdjg6OkxvY2FsPHY4OjpPYmpl
Y3Q+IGFyZ3MgPSB2ODo6T2JqZWN0OjpOZXcoKTsKKyAgICBhcmdzLT5TZXQodjg6OlN0cmluZzo6
TmV3KCJzY3JpcHRJZCIpLCB2OFN0cmluZyhzb3VyY2VJRCkpOworICAgIGFyZ3MtPlNldCh2ODo6
U3RyaW5nOjpOZXcoImxpbmVOdW1iZXIiKSwgdjg6OkludGVnZXI6Ok5ldyhsaW5lTnVtYmVyKSk7
CisKKyAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gcmVtb3ZlQnJlYWtwb2ludEZ1bmN0aW9u
ID0gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj46OkNhc3QobV9kZWJ1Z2dlclNjcmlwdC0+R2V0KHY4
OjpTdHJpbmc6Ok5ldygicmVtb3ZlQnJlYWtwb2ludCIpKSk7CisgICAgdjg6OkRlYnVnOjpDYWxs
KHJlbW92ZUJyZWFrcG9pbnRGdW5jdGlvbiwgYXJncyk7CisjZW5kaWYKK30KKwordm9pZCBTY3Jp
cHREZWJ1Z1NlcnZlcjo6Y2xlYXJCcmVha3BvaW50cygpCit7CisjaWYgRU5BQkxFKFY4X1NDUklQ
VF9ERUJVR19TRVJWRVIpCisgICAgZW5zdXJlRGVidWdnZXJTY3JpcHRDb21waWxlZCgpOworICAg
IHY4OjpIYW5kbGVTY29wZSBzY29wZTsKKyAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGRlYnVn
Z2VyQ29udGV4dCA9IHY4OjpEZWJ1Zzo6R2V0RGVidWdDb250ZXh0KCk7CisgICAgdjg6OkNvbnRl
eHQ6OlNjb3BlIGNvbnRleHRTY29wZShkZWJ1Z2dlckNvbnRleHQpOworCisgICAgdjg6OkhhbmRs
ZTx2ODo6RnVuY3Rpb24+IHNldEJyZWFrcG9pbnRzQWN0aXZhdGVkID0gdjg6OkxvY2FsPHY4OjpG
dW5jdGlvbj46OkNhc3QobV9kZWJ1Z2dlclNjcmlwdC0+R2V0KHY4OjpTdHJpbmc6Ok5ldygiY2xl
YXJCcmVha3BvaW50cyIpKSk7CisgICAgdjg6OkRlYnVnOjpDYWxsKHNldEJyZWFrcG9pbnRzQWN0
aXZhdGVkKTsKKyNlbmRpZgorfQorCit2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpzZXRCcmVha3Bv
aW50c0FjdGl2YXRlZChib29sIGVuYWJsZWQpCit7CisjaWYgRU5BQkxFKFY4X1NDUklQVF9ERUJV
R19TRVJWRVIpCisgICAgZW5zdXJlRGVidWdnZXJTY3JpcHRDb21waWxlZCgpOworICAgIHY4OjpI
YW5kbGVTY29wZSBzY29wZTsKKyAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGRlYnVnZ2VyQ29u
dGV4dCA9IHY4OjpEZWJ1Zzo6R2V0RGVidWdDb250ZXh0KCk7CisgICAgdjg6OkNvbnRleHQ6OlNj
b3BlIGNvbnRleHRTY29wZShkZWJ1Z2dlckNvbnRleHQpOworCisgICAgdjg6OkxvY2FsPHY4OjpP
YmplY3Q+IGFyZ3MgPSB2ODo6T2JqZWN0OjpOZXcoKTsKKyAgICBhcmdzLT5TZXQodjg6OlN0cmlu
Zzo6TmV3KCJlbmFibGVkIiksIHY4OjpCb29sZWFuOjpOZXcoZW5hYmxlZCkpOworICAgIHY4OjpI
YW5kbGU8djg6OkZ1bmN0aW9uPiBzZXRCcmVha3BvaW50c0FjdGl2YXRlZCA9IHY4OjpMb2NhbDx2
ODo6RnVuY3Rpb24+OjpDYXN0KG1fZGVidWdnZXJTY3JpcHQtPkdldCh2ODo6U3RyaW5nOjpOZXco
InNldEJyZWFrcG9pbnRzQWN0aXZhdGVkIikpKTsKKyAgICB2ODo6RGVidWc6OkNhbGwoc2V0QnJl
YWtwb2ludHNBY3RpdmF0ZWQsIGFyZ3MpOworI2VuZGlmCit9CisKK3ZvaWQgU2NyaXB0RGVidWdT
ZXJ2ZXI6OmNvbnRpbnVlUHJvZ3JhbSgpCit7CisjaWYgRU5BQkxFKFY4X1NDUklQVF9ERUJVR19T
RVJWRVIpCisgICAgU3RyaW5nIGNtZCgie1wic2VxXCI6MSxcInR5cGVcIjpcInJlcXVlc3RcIixc
ImNvbW1hbmRcIjpcImNvbnRpbnVlXCJ9Iik7CisgICAgdjg6OkRlYnVnOjpTZW5kQ29tbWFuZChy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQxNl90Kj4oY21kLmNoYXJhY3RlcnMoKSksIGNtZC5s
ZW5ndGgoKSwgbmV3IHY4OjpEZWJ1Zzo6Q2xpZW50RGF0YSgpKTsKKyAgICBkaWRSZXN1bWUoKTsK
KyNlbmRpZgorfQorCit2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpzdGVwSW50b1N0YXRlbWVudCgp
Cit7CisjaWYgRU5BQkxFKFY4X1NDUklQVF9ERUJVR19TRVJWRVIpCisgICAgU3RyaW5nIGNtZCgi
e1wic2VxXCI6MSxcInR5cGVcIjpcInJlcXVlc3RcIixcImNvbW1hbmRcIjpcImNvbnRpbnVlXCIs
XCJhcmd1bWVudHNcIjp7XCJzdGVwYWN0aW9uXCI6XCJpblwifX0iKTsKKyAgICB2ODo6RGVidWc6
OlNlbmRDb21tYW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDE2X3QqPihjbWQuY2hhcmFj
dGVycygpKSwgY21kLmxlbmd0aCgpLCBuZXcgdjg6OkRlYnVnOjpDbGllbnREYXRhKCkpOworICAg
IGRpZFJlc3VtZSgpOworI2VuZGlmCit9CisKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnN0ZXBP
dmVyU3RhdGVtZW50KCkKK3sKKyNpZiBFTkFCTEUoVjhfU0NSSVBUX0RFQlVHX1NFUlZFUikKKyAg
ICBTdHJpbmcgY21kKCJ7XCJzZXFcIjoxLFwidHlwZVwiOlwicmVxdWVzdFwiLFwiY29tbWFuZFwi
OlwiY29udGludWVcIixcImFyZ3VtZW50c1wiOntcInN0ZXBhY3Rpb25cIjpcIm5leHRcIn19Iik7
CisgICAgdjg6OkRlYnVnOjpTZW5kQ29tbWFuZChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQx
Nl90Kj4oY21kLmNoYXJhY3RlcnMoKSksIGNtZC5sZW5ndGgoKSwgbmV3IHY4OjpEZWJ1Zzo6Q2xp
ZW50RGF0YSgpKTsKKyAgICBkaWRSZXN1bWUoKTsKKyNlbmRpZgorfQorCit2b2lkIFNjcmlwdERl
YnVnU2VydmVyOjpzdGVwT3V0T2ZGdW5jdGlvbigpCit7CisjaWYgRU5BQkxFKFY4X1NDUklQVF9E
RUJVR19TRVJWRVIpCisgICAgU3RyaW5nIGNtZCgie1wic2VxXCI6MSxcInR5cGVcIjpcInJlcXVl
c3RcIixcImNvbW1hbmRcIjpcImNvbnRpbnVlXCIsXCJhcmd1bWVudHNcIjp7XCJzdGVwYWN0aW9u
XCI6XCJvdXRcIn19Iik7CisgICAgdjg6OkRlYnVnOjpTZW5kQ29tbWFuZChyZWludGVycHJldF9j
YXN0PGNvbnN0IHVpbnQxNl90Kj4oY21kLmNoYXJhY3RlcnMoKSksIGNtZC5sZW5ndGgoKSwgbmV3
IHY4OjpEZWJ1Zzo6Q2xpZW50RGF0YSgpKTsKKyAgICBkaWRSZXN1bWUoKTsKKyNlbmRpZgorfQor
CitTY3JpcHRTdGF0ZSogU2NyaXB0RGVidWdTZXJ2ZXI6OmN1cnJlbnRDYWxsRnJhbWVTdGF0ZSgp
Cit7CisgICAgcmV0dXJuIG1fY3VycmVudENhbGxGcmFtZVN0YXRlOworfQorCit2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gU2NyaXB0RGVidWdTZXJ2ZXI6OmN1cnJlbnRDYWxsRnJhbWVWOCgpCit7Cisj
aWYgRU5BQkxFKFY4X1NDUklQVF9ERUJVR19TRVJWRVIpCisgICAgaWYgKCFtX2N1cnJlbnRDYWxs
RnJhbWUuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbV9jdXJyZW50Q2FsbEZyYW1lOworCisg
ICAgLy8gQ2hlY2sgb24gYSBicC4KKyAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gY3VycmVu
dENhbGxGcmFtZUZ1bmN0aW9uID0gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj46OkNhc3QobV9kZWJ1
Z2dlclNjcmlwdC0+R2V0KHY4OjpTdHJpbmc6Ok5ldygiY3VycmVudENhbGxGcmFtZSIpKSk7Cisg
ICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFyZ3ZbXSA9IHsgbV9leGVjdXRpb25TdGF0ZSB9Owor
ICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZXN1bHQgPSBjdXJyZW50Q2FsbEZyYW1lRnVuY3Rp
b24tPkNhbGwobV9kZWJ1Z2dlclNjcmlwdCwgMSwgYXJndik7CisgICAgbV9jdXJyZW50Q2FsbEZy
YW1lID0gdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPjo6TmV3KHJlc3VsdCk7CisgICAgcmV0dXJu
IHJlc3VsdDsKKyNlbHNlCisgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOworI2Vu
ZGlmCit9CisKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6Om9uVjhEZWJ1Z01lc3NhZ2UoY29uc3Qg
djg6OkRlYnVnOjpNZXNzYWdlJiBtZXNzYWdlKQoreworICAgIFNjcmlwdERlYnVnU2VydmVyOjpz
aGFyZWQoKS5oYW5kbGVWOERlYnVnTWVzc2FnZShtZXNzYWdlKTsKK30KKwordm9pZCBTY3JpcHRE
ZWJ1Z1NlcnZlcjo6b25WOERlYnVnSG9zdERpc3BhdGNoKCkKK3sKKyAgICBTY3JpcHREZWJ1Z1Nl
cnZlcjo6c2hhcmVkKCkuaGFuZGxlVjhEZWJ1Z0hvc3REaXNwYXRjaCgpOworfQorCit2b2lkIFNj
cmlwdERlYnVnU2VydmVyOjpoYW5kbGVWOERlYnVnSG9zdERpc3BhdGNoKCkKK3sKKyAgICBpZiAo
IXNfbWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFZl
Y3RvcjxXZWJDb3JlOjpQYWdlKj4gcGFnZXM7CisgICAgZm9yIChMaXN0ZW5lcnNNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9saXN0ZW5lcnNNYXAuYmVnaW4oKTsgaXQgIT0gbV9saXN0ZW5lcnNNYXAuZW5k
KCk7ICsraXQpCisgICAgICAgIHBhZ2VzLmFwcGVuZChpdC0+Zmlyc3QpOworICAgIAorICAgIHNf
bWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIocGFnZXMpOworfQorCit2b2lkIFNjcmlwdERlYnVn
U2VydmVyOjpoYW5kbGVWOERlYnVnTWVzc2FnZShjb25zdCB2ODo6RGVidWc6Ok1lc3NhZ2UmIG1l
c3NhZ2UpCit7CisgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOworCisgICAgaWYgKCFtZXNzYWdl
LklzRXZlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSWdub3JlIHVuc3VwcG9ydGVk
IGV2ZW50IHR5cGVzLgorICAgIGlmIChtZXNzYWdlLkdldEV2ZW50KCkgIT0gdjg6OkFmdGVyQ29t
cGlsZSAmJiBtZXNzYWdlLkdldEV2ZW50KCkgIT0gdjg6OkJyZWFrKQorICAgICAgICByZXR1cm47
CisKKyAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gbWVzc2FnZS5HZXRFdmVu
dENvbnRleHQoKTsKKyAgICAvLyBJZiB0aGUgY29udGV4dCBpcyBmcm9tIG9uZSBvZiB0aGUgaW5w
ZWN0ZWQgdGFicyBpdCBzaG91bGQgaGF2ZSBpdHMgY29udGV4dAorICAgIC8vIGRhdGEuIFNraXAg
ZXZlbnRzIGZyb20gdW5rbm93biBjb250ZXh0cy4KKyAgICBpZiAoY29udGV4dC5Jc0VtcHR5KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRlc3QgdGhhdCBjb250ZXh0IGhhcyBhc3NvY2lh
dGVkIGdsb2JhbCBkb20gd2luZG93IG9iamVjdC4KKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IGdsb2JhbCA9IGNvbnRleHQtPkdsb2JhbCgpOworICAgIGlmIChnbG9iYWwuSXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBnbG9iYWwgPSBWOERPTVdyYXBwZXI6Omxvb2t1cERPTVdy
YXBwZXIoVjhET01XaW5kb3c6OkdldFRlbXBsYXRlKCksIGdsb2JhbCk7CisgICAgaWYgKGdsb2Jh
bC5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEZyYW1lKiBmcmFtZSA9IFY4UHJv
eHk6OnJldHJpZXZlRnJhbWUoY29udGV4dCk7CisgICAgaWYgKGZyYW1lKSB7CisgICAgICAgIFNj
cmlwdERlYnVnTGlzdGVuZXIqIGxpc3RlbmVyID0gbV9saXN0ZW5lcnNNYXAuZ2V0KGZyYW1lLT5w
YWdlKCkpOworICAgICAgICBpZiAobGlzdGVuZXIpIHsKKyAgICAgICAgICAgIGlmIChtZXNzYWdl
LkdldEV2ZW50KCkgPT0gdjg6OkFmdGVyQ29tcGlsZSkgeworICAgICAgICAgICAgICAgIHY4OjpD
b250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUodjg6OkRlYnVnOjpHZXREZWJ1Z0NvbnRleHQoKSk7
CisgICAgICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGFyZ3MgPSB2ODo6T2JqZWN0
OjpOZXcoKTsKKyAgICAgICAgICAgICAgICBhcmdzLT5TZXQodjg6OlN0cmluZzo6TmV3KCJldmVu
dERhdGEiKSwgbWVzc2FnZS5HZXRFdmVudERhdGEoKSk7CisgICAgICAgICAgICAgICAgdjg6Okhh
bmRsZTx2ODo6RnVuY3Rpb24+IG9uQWZ0ZXJDb21waWxlRnVuY3Rpb24gPSB2ODo6TG9jYWw8djg6
OkZ1bmN0aW9uPjo6Q2FzdChtX2RlYnVnZ2VyU2NyaXB0LT5HZXQodjg6OlN0cmluZzo6TmV3KCJn
ZXRBZnRlckNvbXBpbGVTY3JpcHQiKSkpOworICAgICAgICAgICAgICAgIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBhcmd2W10gPSB7IG1lc3NhZ2UuR2V0RXhlY3V0aW9uU3RhdGUoKSwgYXJncyB9Owor
ICAgICAgICAgICAgICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSA9IG9uQWZ0ZXJDb21w
aWxlRnVuY3Rpb24tPkNhbGwobV9kZWJ1Z2dlclNjcmlwdCwgMiwgYXJndik7CisgICAgICAgICAg
ICAgICAgQVNTRVJUKHZhbHVlLT5Jc09iamVjdCgpKTsKKyAgICAgICAgICAgICAgICB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IG9iamVjdCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QodmFs
dWUpOworICAgICAgICAgICAgICAgIGRpc3BhdGNoRGlkUGFyc2VTb3VyY2UobGlzdGVuZXIsIG9i
amVjdCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UuR2V0RXZlbnQoKSA9PSB2ODo6
QnJlYWspIHsKKyAgICAgICAgICAgICAgICBtX2V4ZWN1dGlvblN0YXRlID0gdjg6OlBlcnNpc3Rl
bnQ8djg6Ok9iamVjdD46Ok5ldyhtZXNzYWdlLkdldEV4ZWN1dGlvblN0YXRlKCkpOworICAgICAg
ICAgICAgICAgIG1fY3VycmVudENhbGxGcmFtZVN0YXRlID0gbWFpbldvcmxkU2NyaXB0U3RhdGUo
ZnJhbWUpOworICAgICAgICAgICAgICAgIGxpc3RlbmVyLT5kaWRQYXVzZSgpOworICAgICAgICAg
ICAgICAgIG1fY3VycmVudENhbGxGcmFtZVN0YXRlID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KK30KKwordm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlzcGF0Y2hEaWRQYXJz
ZVNvdXJjZShTY3JpcHREZWJ1Z0xpc3RlbmVyKiBsaXN0ZW5lciwgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBvYmplY3QpCit7CisgICAgU3RyaW5nIGNvbnRleHREYXRhID0gdG9XZWJDb3JlU3RyaW5n
V2l0aE51bGxDaGVjayhvYmplY3QtPkdldCh2ODo6U3RyaW5nOjpOZXcoImNvbnRleHREYXRhIikp
KTsKKyAgICBpZiAoY29udGV4dERhdGEgIT0gbV9jb250ZXh0RGF0YU1hcC5nZXQobGlzdGVuZXIp
KQorICAgICAgICByZXR1cm47CisKKyAgICBsaXN0ZW5lci0+ZGlkUGFyc2VTb3VyY2UoCisgICAg
ICAgIHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2sob2JqZWN0LT5HZXQodjg6OlN0cmluZzo6
TmV3KCJpZCIpKSksCisgICAgICAgIHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2sob2JqZWN0
LT5HZXQodjg6OlN0cmluZzo6TmV3KCJuYW1lIikpKSwKKyAgICAgICAgdG9XZWJDb3JlU3RyaW5n
V2l0aE51bGxDaGVjayhvYmplY3QtPkdldCh2ODo6U3RyaW5nOjpOZXcoInNvdXJjZSIpKSksCisg
ICAgICAgIG9iamVjdC0+R2V0KHY4OjpTdHJpbmc6Ok5ldygibGluZU9mZnNldCIpKS0+VG9JbnRl
Z2VyKCktPlZhbHVlKCkpOworfQorCit2b2lkIFNjcmlwdERlYnVnU2VydmVyOjplbnN1cmVEZWJ1
Z2dlclNjcmlwdENvbXBpbGVkKCkKK3sKKyAgICBpZiAobV9kZWJ1Z2dlclNjcmlwdC5Jc0VtcHR5
KCkpIHsKKyAgICAgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOworICAgICAgICB2ODo6TG9jYWw8
djg6OkNvbnRleHQ+IGRlYnVnZ2VyQ29udGV4dCA9IHY4OjpEZWJ1Zzo6R2V0RGVidWdDb250ZXh0
KCk7CisgICAgICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUoZGVidWdnZXJDb250
ZXh0KTsKKyAgICAgICAgbV9kZWJ1Z2dlclNjcmlwdCA9IHY4OjpQZXJzaXN0ZW50PHY4OjpPYmpl
Y3Q+OjpOZXcodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCh2ODo6U2NyaXB0OjpDb21waWxl
KHY4U3RyaW5nKG1fZGVidWdnZXJTY3JpcHRTb3VyY2UpKS0+UnVuKCkpKTsKKyAgICB9Cit9CisK
K3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRpZFJlc3VtZSgpCit7CisgICAgaWYgKCFtX2N1cnJl
bnRDYWxsRnJhbWUuSXNFbXB0eSgpKSB7CisgICAgICAgIG1fY3VycmVudENhbGxGcmFtZS5EaXNw
b3NlKCk7CisgICAgICAgIG1fY3VycmVudENhbGxGcmFtZS5DbGVhcigpOworICAgIH0KKyAgICBp
ZiAoIW1fZXhlY3V0aW9uU3RhdGUuSXNFbXB0eSgpKSB7CisgICAgICAgIG1fZXhlY3V0aW9uU3Rh
dGUuRGlzcG9zZSgpOworICAgICAgICBtX2V4ZWN1dGlvblN0YXRlLkNsZWFyKCk7CisgICAgfQor
fQorCiAvLyBDcmVhdGUgdGhlIHV0aWxpdHkgY29udGV4dCBmb3IgaG9sZGluZyBKYXZhU2NyaXB0
IGZ1bmN0aW9ucyB1c2VkIGludGVybmFsbHkKIC8vIHdoaWNoIGFyZSBub3QgdmlzaWJsZSB0byBK
YXZhU2NyaXB0IGV4ZWN1dGluZyBvbiB0aGUgcGFnZS4KIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6
OmNyZWF0ZVV0aWxpdHlDb250ZXh0KCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvdjgv
U2NyaXB0RGVidWdTZXJ2ZXIuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2
ZXIuaAppbmRleCAzZGU3YzIzLi4xOGZmZjcxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1NjcmlwdERlYnVnU2VydmVyLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRE
ZWJ1Z1NlcnZlci5oCkBAIC0zNywxMSArMzcsMTMgQEAKICNpbmNsdWRlICJTY3JpcHRCcmVha3Bv
aW50LmgiCiAjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKICNpbmNsdWRlICJUaW1lci5oIgorI2lu
Y2x1ZGUgInY4LWRlYnVnLmgiCiAKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBQYWdlOwogY2xhc3MgU2NyaXB0RGVidWdMaXN0ZW5l
cjsKIAogY2xhc3MgU2NyaXB0RGVidWdTZXJ2ZXIgOiBwdWJsaWMgTm9uY29weWFibGUgewpAQCAt
NTcsMzkgKzU5LDU4IEBAIHB1YmxpYzoKICAgICAvLyBvZiBzdWNoIGV4Y2VwdGlvbiBpcyB1cCB0
byB0aGUgY2FsbGVyLgogICAgIHN0YXRpYyBib29sIHRvcFN0YWNrRnJhbWUoU3RyaW5nJiBzb3Vy
Y2VOYW1lLCBpbnQmIGxpbmVOdW1iZXIsIFN0cmluZyYgZnVuY3Rpb25OYW1lKTsKIAotICAgIHZv
aWQgYWRkTGlzdGVuZXIoU2NyaXB0RGVidWdMaXN0ZW5lciosIFBhZ2UqKSB7IH0KLSAgICB2b2lk
IHJlbW92ZUxpc3RlbmVyKFNjcmlwdERlYnVnTGlzdGVuZXIqLCBQYWdlKikgeyB9CisgICAgdm9p
ZCBhZGRMaXN0ZW5lcihTY3JpcHREZWJ1Z0xpc3RlbmVyKiwgUGFnZSopOworICAgIHZvaWQgcmVt
b3ZlTGlzdGVuZXIoU2NyaXB0RGVidWdMaXN0ZW5lciosIFBhZ2UqKTsKIAotICAgIHZvaWQgc2V0
QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBT
Y3JpcHRCcmVha3BvaW50IGJyZWFrcG9pbnQpIHsgfQotICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2lu
dChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyKSB7IH0KLSAgICB2
b2lkIGNsZWFyQnJlYWtwb2ludHMoKSB7IH0KLSAgICB2b2lkIHNldEJyZWFrcG9pbnRzQWN0aXZh
dGVkKGJvb2wgYWN0aXZhdGVkKSB7IH0KKyAgICB2b2lkIHNldEJyZWFrcG9pbnQoY29uc3QgU3Ry
aW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlciwgU2NyaXB0QnJlYWtwb2ludCBicmVh
a3BvaW50KTsKKyAgICB2b2lkIHJlbW92ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJ
RCwgdW5zaWduZWQgbGluZU51bWJlcik7CisgICAgdm9pZCBjbGVhckJyZWFrcG9pbnRzKCk7Cisg
ICAgdm9pZCBzZXRCcmVha3BvaW50c0FjdGl2YXRlZChib29sIGFjdGl2YXRlZCk7CiAKICAgICBl
bnVtIFBhdXNlT25FeGNlcHRpb25zU3RhdGUgewogICAgICAgICBEb250UGF1c2VPbkV4Y2VwdGlv
bnMsCiAgICAgICAgIFBhdXNlT25BbGxFeGNlcHRpb25zLAogICAgICAgICBQYXVzZU9uVW5jYXVn
aHRFeGNlcHRpb25zCiAgICAgfTsKLSAgICBQYXVzZU9uRXhjZXB0aW9uc1N0YXRlIHBhdXNlT25F
eGNlcHRpb25zU3RhdGUoKSBjb25zdCB7IHJldHVybiBEb250UGF1c2VPbkV4Y2VwdGlvbnM7IH0K
LSAgICB2b2lkIHNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUoUGF1c2VPbkV4Y2VwdGlvbnNTdGF0
ZSkgeyB9CisgICAgUGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSBwYXVzZU9uRXhjZXB0aW9uc1N0YXRl
KCkgY29uc3QgeyByZXR1cm4gbV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlOyB9CisgICAgdm9pZCBz
ZXRQYXVzZU9uRXhjZXB0aW9uc1N0YXRlKFBhdXNlT25FeGNlcHRpb25zU3RhdGUgcGF1c2VPbkV4
Y2VwdGlvbnNTdGF0ZSkgeyBtX3BhdXNlT25FeGNlcHRpb25zU3RhdGUgPSBwYXVzZU9uRXhjZXB0
aW9uc1N0YXRlOyB9CiAKICAgICB2b2lkIHBhdXNlUHJvZ3JhbSgpIHsgfQotICAgIHZvaWQgY29u
dGludWVQcm9ncmFtKCkgeyB9Ci0gICAgdm9pZCBzdGVwSW50b1N0YXRlbWVudCgpIHsgfQotICAg
IHZvaWQgc3RlcE92ZXJTdGF0ZW1lbnQoKSB7IH0KLSAgICB2b2lkIHN0ZXBPdXRPZkZ1bmN0aW9u
KCkgeyB9CisgICAgdm9pZCBjb250aW51ZVByb2dyYW0oKTsKKyAgICB2b2lkIHN0ZXBJbnRvU3Rh
dGVtZW50KCk7CisgICAgdm9pZCBzdGVwT3ZlclN0YXRlbWVudCgpOworICAgIHZvaWQgc3RlcE91
dE9mRnVuY3Rpb24oKTsKIAogICAgIHZvaWQgcmVjb21waWxlQWxsSlNGdW5jdGlvbnNTb29uKCkg
eyB9CiAgICAgdm9pZCByZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucyhUaW1lcjxTY3JpcHREZWJ1Z1Nl
cnZlcj4qID0gMCkgeyB9CiAKLSAgICBTY3JpcHRTdGF0ZSogY3VycmVudENhbGxGcmFtZVN0YXRl
KCkgeyByZXR1cm4gMDsgfQorICAgIFNjcmlwdFN0YXRlKiBjdXJyZW50Q2FsbEZyYW1lU3RhdGUo
KTsKIAogICAgIHZvaWQgcGFnZUNyZWF0ZWQoUGFnZSopIHsgfQogCisgICAgLy8gdjgtc3BlY2lm
aWMgbWV0aG9kcy4KKyAgICB2b2lkIHNldERlYnVnZ2VyU2NyaXB0U291cmNlKGNvbnN0IFN0cmlu
ZyYgc2NyaXB0U291cmNlKTsKKworICAgIHR5cGVkZWYgdm9pZCAoKk1lc3NhZ2VMb29wRGlzcGF0
Y2hIYW5kbGVyKShjb25zdCBWZWN0b3I8V2ViQ29yZTo6UGFnZSo+Jik7CisgICAgc3RhdGljIHZv
aWQgc2V0TWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIoTWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRs
ZXIgbWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIpIHsgc19tZXNzYWdlTG9vcERpc3BhdGNoSGFu
ZGxlciA9IG1lc3NhZ2VMb29wRGlzcGF0Y2hIYW5kbGVyOyB9CisKKyAgICB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gY3VycmVudENhbGxGcmFtZVY4KCk7CisKIHByaXZhdGU6Ci0gICAgU2NyaXB0RGVi
dWdTZXJ2ZXIoKSB7IH0KKyAgICBTY3JpcHREZWJ1Z1NlcnZlcigpOwogICAgIH5TY3JpcHREZWJ1
Z1NlcnZlcigpIHsgfQogCisgICAgc3RhdGljIHZvaWQgb25WOERlYnVnTWVzc2FnZShjb25zdCB2
ODo6RGVidWc6Ok1lc3NhZ2UmIG1lc3NhZ2UpOworICAgIHN0YXRpYyB2b2lkIG9uVjhEZWJ1Z0hv
c3REaXNwYXRjaCgpOworCisgICAgdm9pZCBoYW5kbGVWOERlYnVnTWVzc2FnZShjb25zdCB2ODo6
RGVidWc6Ok1lc3NhZ2UmIG1lc3NhZ2UpOworICAgIHZvaWQgaGFuZGxlVjhEZWJ1Z0hvc3REaXNw
YXRjaCgpOworCisgICAgdm9pZCBkaXNwYXRjaERpZFBhcnNlU291cmNlKFNjcmlwdERlYnVnTGlz
dGVuZXIqIGxpc3RlbmVyLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHNvdXJjZU9iamVjdCk7Cisg
ICAgCisgICAgdm9pZCBlbnN1cmVEZWJ1Z2dlclNjcmlwdENvbXBpbGVkKCk7CisgICAgdm9pZCBk
aWRSZXN1bWUoKTsKKwogICAgIHN0YXRpYyB2b2lkIGNyZWF0ZVV0aWxpdHlDb250ZXh0KCk7CiAK
ICAgICAvLyBSZXR1cm5zIGEgbG9jYWwgaGFuZGxlIG9mIHRoZSB1dGlsaXR5IGNvbnRleHQuCkBA
IC0xMDIsNiArMTIzLDE5IEBAIHByaXZhdGU6CiAKICAgICAvLyBVdGlsaXR5IGNvbnRleHQgaG9s
ZGluZyBKYXZhU2NyaXB0IGZ1bmN0aW9ucyB1c2VkIGludGVybmFsbHkuCiAgICAgc3RhdGljIHY4
OjpQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiBzX3V0aWxpdHlDb250ZXh0OworCisgICAgdHlwZWRl
ZiBIYXNoTWFwPFBhZ2UqLCBTY3JpcHREZWJ1Z0xpc3RlbmVyKj4gTGlzdGVuZXJzTWFwOworICAg
IExpc3RlbmVyc01hcCBtX2xpc3RlbmVyc01hcDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8U2NyaXB0
RGVidWdMaXN0ZW5lciosIFN0cmluZz4gQ29udGV4dERhdGFNYXA7CisgICAgQ29udGV4dERhdGFN
YXAgbV9jb250ZXh0RGF0YU1hcDsKKyAgICBTdHJpbmcgbV9kZWJ1Z2dlclNjcmlwdFNvdXJjZTsK
KyAgICBQYXVzZU9uRXhjZXB0aW9uc1N0YXRlIG1fcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZTsKKyAg
ICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBtX2RlYnVnZ2VyU2NyaXB0OworICAgIFNjcmlw
dFN0YXRlKiBtX2N1cnJlbnRDYWxsRnJhbWVTdGF0ZTsKKyAgICB2ODo6UGVyc2lzdGVudDx2ODo6
VmFsdWU+IG1fY3VycmVudENhbGxGcmFtZTsKKyAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0
PiBtX2V4ZWN1dGlvblN0YXRlOworCisgICAgc3RhdGljIE1lc3NhZ2VMb29wRGlzcGF0Y2hIYW5k
bGVyIHNfbWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEluamVjdGVk
U2NyaXB0SG9zdEN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEluamVj
dGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAKaW5kZXggNjAwNjNmMS4uMTU1NDMxYyAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20u
Y3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5qZWN0ZWRTY3JpcHRIb3N0
Q3VzdG9tLmNwcApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xs
ZXIuaCIKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlNj
cmlwdERlYnVnU2VydmVyLmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAK
ICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKQEAgLTExMCw5ICsxMTEsMTAgQEAgU2NyaXB0T2JqZWN0
IEluamVjdGVkU2NyaXB0SG9zdDo6Y3JlYXRlSW5qZWN0ZWRTY3JpcHQoY29uc3QgU3RyaW5nJiBz
Y3JpcHRTb3VyY2UKICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJnc1tdID0gewogICAgICAg
c2NyaXB0SG9zdFdyYXBwZXIsCiAgICAgICB3aW5kb3dHbG9iYWwsCi0gICAgICB2ODo6TnVtYmVy
OjpOZXcoaWQpCisgICAgICB2ODo6TnVtYmVyOjpOZXcoaWQpLAorICAgICAgdjg6OlN0cmluZzo6
TmV3KCJ2OCIpCiAgICAgfTsKLSAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBpbmplY3RlZFNjcmlw
dFZhbHVlID0gdjg6OkZ1bmN0aW9uOjpDYXN0KCp2KS0+Q2FsbCh3aW5kb3dHbG9iYWwsIDMsIGFy
Z3MpOworICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGluamVjdGVkU2NyaXB0VmFsdWUgPSB2ODo6
RnVuY3Rpb246OkNhc3QoKnYpLT5DYWxsKHdpbmRvd0dsb2JhbCwgNCwgYXJncyk7CiAgICAgdjg6
OkxvY2FsPHY4OjpPYmplY3Q+IGluamVjdGVkU2NyaXB0KHY4OjpPYmplY3Q6OkNhc3QoKmluamVj
dGVkU2NyaXB0VmFsdWUpKTsKICAgICByZXR1cm4gU2NyaXB0T2JqZWN0KGluc3BlY3RlZFNjcmlw
dFN0YXRlLCBpbmplY3RlZFNjcmlwdCk7CiB9CkBAIC0xNTYsMTMgKzE1OCwxMyBAQCB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gVjhJbmplY3RlZFNjcmlwdEhvc3Q6OnB1c2hOb2RlUGF0aFRvRnJvbnRl
bmRDYWxsYmFjayhjb25zdAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SW5qZWN0ZWRTY3JpcHRI
b3N0OjpjdXJyZW50Q2FsbEZyYW1lQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykK
IHsKICAgICBJTkNfU1RBVFMoIkluamVjdGVkU2NyaXB0SG9zdC5jdXJyZW50Q2FsbEZyYW1lKCki
KTsKLSAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIHJldHVybiBTY3JpcHREZWJ1Z1Nl
cnZlcjo6c2hhcmVkKCkuY3VycmVudENhbGxGcmFtZVY4KCk7CiB9CiAKIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBWOEluamVjdGVkU2NyaXB0SG9zdDo6aXNBY3RpdmF0aW9uQ2FsbGJhY2soY29uc3Qg
djg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBJTkNfU1RBVFMoIkluamVjdGVkU2NyaXB0SG9z
dC5pc0FjdGl2YXRpb24oKSIpOwotICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisgICAgcmV0
dXJuIHY4OjpCb29sZWFuOjpOZXcodHJ1ZSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0LmpzIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0LmpzCmluZGV4IDkyMzVhZTEuLjk5MWZjODQg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdC5q
cworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHQuanMKQEAg
LTI2LDcgKzI2LDcgQEAKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotdmFyIGluamVjdGVkU2NyaXB0Q29u
c3RydWN0b3IgPSAoZnVuY3Rpb24gKEluamVjdGVkU2NyaXB0SG9zdCwgaW5zcGVjdGVkV2luZG93
LCBpbmplY3RlZFNjcmlwdElkKSB7Cit2YXIgaW5qZWN0ZWRTY3JpcHRDb25zdHJ1Y3RvciA9IChm
dW5jdGlvbiAoSW5qZWN0ZWRTY3JpcHRIb3N0LCBpbnNwZWN0ZWRXaW5kb3csIGluamVjdGVkU2Ny
aXB0SWQsIGpzRW5naW5lKSB7CiAKIHZhciBJbmplY3RlZFNjcmlwdCA9IHt9OwogCkBAIC0xMjUs
MTAgKzEyNSwzMiBAQCBJbmplY3RlZFNjcmlwdC5nZXRQcm9wZXJ0aWVzID0gZnVuY3Rpb24ob2Jq
ZWN0UHJveHksIGlnbm9yZUhhc093blByb3BlcnR5LCBhYmJyZQogICAgIGlmICghSW5qZWN0ZWRT
Y3JpcHQuX2lzRGVmaW5lZChvYmplY3QpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgdmFy
IHByb3BlcnRpZXMgPSBbXTsKKyAgICAKICAgICB2YXIgcHJvcGVydHlOYW1lcyA9IGlnbm9yZUhh
c093blByb3BlcnR5ID8gSW5qZWN0ZWRTY3JpcHQuX2dldFByb3BlcnR5TmFtZXMob2JqZWN0KSA6
IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCk7CiAgICAgaWYgKCFpZ25vcmVIYXNP
d25Qcm9wZXJ0eSAmJiBvYmplY3QuX19wcm90b19fKQogICAgICAgICBwcm9wZXJ0eU5hbWVzLnB1
c2goIl9fcHJvdG9fXyIpOwogCisgICAgaWYgKGpzRW5naW5lID09PSAidjgiKSB7CisgICAgICAg
IC8vIENoZWNrIGlmIHRoZSBvYmplY3QgaXMgYSBzY29wZS4KKyAgICAgICAgaWYgKEluamVjdGVk
U2NyaXB0Ll9pc1Njb3BlUHJveHkob2JqZWN0UHJveHkpKSB7CisgICAgICAgICAgICBwcm9wZXJ0
eU5hbWVzID0gW107CisgICAgICAgICAgICBmb3IgKHZhciBuYW1lIGluIG9iamVjdCkKKyAgICAg
ICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLnB1c2gobmFtZSk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAvLyBGSVhNRShodHRwOi8vY3JidWcuY29tLzQxMjQzKTogT2JqZWN0LmdldE93
blByb3BlcnR5TmFtZXMgbWF5IHJldHVybiBkdXBsaWNhdGVkIG5hbWVzLgorICAgICAgICAgICAg
dmFyIGEgPSBbXTsKKyAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuc29ydCgpOworICAgICAgICAg
ICAgdmFyIHByZXY7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnR5TmFt
ZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgbiA9IHByb3BlcnR5TmFtZXNb
aV07CisgICAgICAgICAgICAgICAgaWYgKG4gIT0gcHJldikKKyAgICAgICAgICAgICAgICAgICAg
YS5wdXNoKG4pOworICAgICAgICAgICAgICAgIHByZXYgPSBuOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcHJvcGVydHlOYW1lcyA9IGE7CisgICAgICAgIH0KKyAgICB9CisgICAgCiAgICAg
Ly8gR28gb3ZlciBwcm9wZXJ0aWVzLCBwcmVwYXJlIHJlc3VsdHMuCiAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBwcm9wZXJ0eU5hbWVzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgIHZhciBwcm9wZXJ0
eU5hbWUgPSBwcm9wZXJ0eU5hbWVzW2ldOwpAQCAtMTU4LDYgKzE4MCwxMiBAQCBJbmplY3RlZFNj
cmlwdC5nZXRQcm9wZXJ0aWVzID0gZnVuY3Rpb24ob2JqZWN0UHJveHksIGlnbm9yZUhhc093blBy
b3BlcnR5LCBhYmJyZQogICAgIHJldHVybiBwcm9wZXJ0aWVzOwogfQogCitJbmplY3RlZFNjcmlw
dC5faXNTY29wZVByb3h5ID0gZnVuY3Rpb24ob2JqZWN0UHJveHkpCit7CisgICAgdmFyIG9iamVj
dElkID0gb2JqZWN0UHJveHkub2JqZWN0SWQ7CisgICAgcmV0dXJuIHR5cGVvZiBvYmplY3RJZCA9
PT0gIm9iamVjdCIgJiYgIW9iamVjdElkLnRoaXNPYmplY3Q7Cit9IAorCiBJbmplY3RlZFNjcmlw
dC5zZXRQcm9wZXJ0eVZhbHVlID0gZnVuY3Rpb24ob2JqZWN0UHJveHksIHByb3BlcnR5TmFtZSwg
ZXhwcmVzc2lvbikKIHsKICAgICB2YXIgb2JqZWN0ID0gSW5qZWN0ZWRTY3JpcHQuX3Jlc29sdmVP
YmplY3Qob2JqZWN0UHJveHkpOwpAQCAtODEzLDYgKzg0MSw1OCBAQCBJbmplY3RlZFNjcmlwdC5D
YWxsRnJhbWVQcm94eSA9IGZ1bmN0aW9uKGlkLCBjYWxsRnJhbWUpCiAgICAgdGhpcy5zY29wZUNo
YWluID0gdGhpcy5fd3JhcFNjb3BlQ2hhaW4oY2FsbEZyYW1lKTsKIH0KIAoraWYgKGpzRW5naW5l
ID09PSAidjgiKSB7CisKK0luamVjdGVkU2NyaXB0LkNhbGxGcmFtZVByb3h5LnByb3RvdHlwZSA9
IHsKKyAgICAKKworICAgIF93cmFwU2NvcGVDaGFpbjogZnVuY3Rpb24oY2FsbEZyYW1lKQorICAg
IHsKKyAgICAgICAgdmFyIFNjb3BlVHlwZSA9IHsgR2xvYmFsOiAwLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICBMb2NhbDogMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgV2l0aDogMiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xvc3VyZTogMywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ2F0Y2g6IDQgfTsKKyAgICAgICAgdmFyIHNjb3BlQ2hhaW4gPSBjYWxsRnJhbWUu
c2NvcGVDaGFpbjsKKyAgICAgICAgdmFyIHNjb3BlQ2hhaW5Qcm94eSA9IFtdOworICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHNjb3BlQ2hhaW4ubGVuZ3RoOyBpICs9IDIpIHsKKyAgICAgICAg
ICAgIHZhciBzY29wZVR5cGUgPSBzY29wZUNoYWluW2ldOworICAgICAgICAgICAgdmFyIHNjb3Bl
T2JqZWN0ID0gc2NvcGVDaGFpbltpICsgMV07CisgICAgICAgICAgICB2YXIgc2NvcGVPYmplY3RQ
cm94eSA9IEluamVjdGVkU2NyaXB0LmNyZWF0ZVByb3h5T2JqZWN0KHNjb3BlT2JqZWN0LCB7IGNh
bGxGcmFtZTogdGhpcy5pZCwgY2hhaW5JbmRleDogKGkgKyAxKSB9LCB0cnVlKTsKKworICAgICAg
ICAgICAgdmFyIGZvdW5kTG9jYWxTY29wZSA9IGZhbHNlOworICAgICAgICAgICAgc3dpdGNoKHNj
b3BlVHlwZSkgeworICAgICAgICAgICAgICAgIGNhc2UgU2NvcGVUeXBlLkxvY2FsOiB7CisgICAg
ICAgICAgICAgICAgICAgIGZvdW5kTG9jYWxTY29wZSA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgIHNjb3BlT2JqZWN0UHJveHkuaXNMb2NhbCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
IHNjb3BlT2JqZWN0UHJveHkudGhpc09iamVjdCA9IEluamVjdGVkU2NyaXB0LmNyZWF0ZVByb3h5
T2JqZWN0KGNhbGxGcmFtZS50aGlzT2JqZWN0LCB7IGNhbGxGcmFtZTogdGhpcy5pZCwgdGhpc09i
amVjdDogdHJ1ZSB9LCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2UgU2NvcGVUeXBlLkNsb3N1cmU6IHsKKyAg
ICAgICAgICAgICAgICAgICAgc2NvcGVPYmplY3RQcm94eS5pc0Nsb3N1cmUgPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgY2FzZSBTY29wZVR5cGUuV2l0aDogeworICAgICAgICAgICAgICAgICAgICBzY29wZU9iamVj
dFByb3h5LmlzV2l0aEJsb2NrID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZm91bmRM
b2NhbFNjb3BlKSB7CisgICAgICAgICAgICAgICAgaWYgKHNjb3BlT2JqZWN0IGluc3RhbmNlb2Yg
aW5zcGVjdGVkV2luZG93LkVsZW1lbnQpCisgICAgICAgICAgICAgICAgICAgIHNjb3BlT2JqZWN0
UHJveHkuaXNFbGVtZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChzY29wZU9i
amVjdCBpbnN0YW5jZW9mIGluc3BlY3RlZFdpbmRvdy5Eb2N1bWVudCkKKyAgICAgICAgICAgICAg
ICAgICAgc2NvcGVPYmplY3RQcm94eS5pc0RvY3VtZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0K
KyAKKyAgICAgICAgICAgIHNjb3BlQ2hhaW5Qcm94eS5wdXNoKHNjb3BlT2JqZWN0UHJveHkpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBzY29wZUNoYWluUHJveHk7CisgICAgfQorfQorCit9
IGVsc2UgeworCiBJbmplY3RlZFNjcmlwdC5DYWxsRnJhbWVQcm94eS5wcm90b3R5cGUgPSB7CiAg
ICAgX3dyYXBTY29wZUNoYWluOiBmdW5jdGlvbihjYWxsRnJhbWUpCiAgICAgewpAQCAtODQyLDYg
KzkyMiw4IEBAIEluamVjdGVkU2NyaXB0LkNhbGxGcmFtZVByb3h5LnByb3RvdHlwZSA9IHsKICAg
ICB9CiB9CiAKK30KKwogSW5qZWN0ZWRTY3JpcHQuZXhlY3V0ZVNxbCA9IGZ1bmN0aW9uKGNhbGxJ
ZCwgZGF0YWJhc2VJZCwgcXVlcnkpCiB7CiAgICAgZnVuY3Rpb24gc3VjY2Vzc0NhbGxiYWNrKHR4
LCByZXN1bHQpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0
c1BhbmVsLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcwpp
bmRleCAzMTZmMzJlLi4zNWM4ZWU0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvU2NyaXB0c1BhbmVsLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9T
Y3JpcHRzUGFuZWwuanMKQEAgLTE5OCw2ICsxOTgsOCBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0c1Bh
bmVsID0gZnVuY3Rpb24oKQogICAgIHRoaXMuX3Nob3J0Y3V0c1tzaG9ydGN1dF0gPSBoYW5kbGVy
OwogCiAgICAgdGhpcy5fZGVidWdnZXJFbmFibGVkID0gUHJlZmVyZW5jZXMuZGVidWdnZXJBbHdh
eXNFbmFibGVkOworICAgIGlmIChQcmVmZXJlbmNlcy5kZWJ1Z2dlckFsd2F5c0VuYWJsZWQpCisg
ICAgICAgIHRoaXMuX2F0dGFjaERlYnVnZ2VyV2hlblNob3duID0gdHJ1ZTsKICAgICB0aGlzLnJl
c2V0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGEyZTJhYTMuLjU1MmExNmIgMTAwNjQ0Ci0tLSBh
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDUwIEBACisyMDEwLTA0LTE1ICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNA
Z29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBTdXBwb3J0IGJhc2ljIGRlYnVnZ2luZyBjYXBhYmlsaXRpZXMgaW5jbHVkaW5nIHN0ZXAg
aW4vb3Zlci9vdXQgaW4gdjgKKyAgICAgICAgaW1wbGVtZW50YXRpb24gb2YgU2NyaXB0RGVidWdT
ZXJ2ZXIuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTM3NjA0CisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiBzcmMvRGVidWdnZXJB
Z2VudC5oOgorICAgICAgICAqIHNyYy9EZWJ1Z2dlckFnZW50SW1wbC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkRlYnVnZ2VyQWdlbnRJbXBsOjpzZXREZWJ1Z2dlclNjcmlwdFNvdXJjZSk6CisgICAg
ICAgICogc3JjL0RlYnVnZ2VyQWdlbnRJbXBsLmg6CisgICAgICAgICogc3JjL0RlYnVnZ2VyQWdl
bnRNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RGVidWdnZXJBZ2VudE1hbmFnZXI6Omhv
c3REaXNwYXRjaEhhbmRsZXIpOgorICAgICAgICAoV2ViS2l0OjpEZWJ1Z2dlckFnZW50TWFuYWdl
cjo6ZGVidWdBdHRhY2gpOgorICAgICAgICAoV2ViS2l0OjpEZWJ1Z2dlckFnZW50TWFuYWdlcjo6
ZGVidWdEZXRhY2gpOgorICAgICAgICAoV2ViS2l0OjpEZWJ1Z2dlckFnZW50TWFuYWdlcjo6c2V0
TWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIpOgorICAgICAgICAqIHNyYy9EZWJ1Z2dlckFnZW50
TWFuYWdlci5oOgorICAgICAgICAqIHNyYy9JbnNwZWN0b3JGcm9udGVuZENsaWVudEltcGwuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JGcm9udGVuZENsaWVudEltcGw6OndpbmRvd09i
amVjdENsZWFyZWQpOgorICAgICAgICAqIHNyYy9qcy9EZWJ1Z2dlclNjcmlwdC5qczogQWRkZWQu
CisgICAgICAgIChkZWJ1Z2dlclNjcmlwdENvbnN0cnVjdG9yLkRlYnVnZ2VyU2NyaXB0LmdldEFm
dGVyQ29tcGlsZVNjcmlwdCk6CisgICAgICAgIChkZWJ1Z2dlclNjcmlwdENvbnN0cnVjdG9yLkRl
YnVnZ2VyU2NyaXB0LmdldFNjcmlwdHMpOgorICAgICAgICAoZGVidWdnZXJTY3JpcHRDb25zdHJ1
Y3Rvci5EZWJ1Z2dlclNjcmlwdC5fZm9ybWF0U2NyaXB0KToKKyAgICAgICAgKGRlYnVnZ2VyU2Ny
aXB0Q29uc3RydWN0b3IuRGVidWdnZXJTY3JpcHQuc2V0QnJlYWtwb2ludCk6CisgICAgICAgIChk
ZWJ1Z2dlclNjcmlwdENvbnN0cnVjdG9yLkRlYnVnZ2VyU2NyaXB0LnJlbW92ZUJyZWFrcG9pbnQp
OgorICAgICAgICAoZGVidWdnZXJTY3JpcHRDb25zdHJ1Y3Rvci5EZWJ1Z2dlclNjcmlwdC5jdXJy
ZW50Q2FsbEZyYW1lKToKKyAgICAgICAgKGRlYnVnZ2VyU2NyaXB0Q29uc3RydWN0b3IuRGVidWdn
ZXJTY3JpcHQuc3RlcEludG9TdGF0ZW1lbnQpOgorICAgICAgICAoZGVidWdnZXJTY3JpcHRDb25z
dHJ1Y3Rvci5EZWJ1Z2dlclNjcmlwdC5zdGVwT3ZlclN0YXRlbWVudCk6CisgICAgICAgIChkZWJ1
Z2dlclNjcmlwdENvbnN0cnVjdG9yLkRlYnVnZ2VyU2NyaXB0LnN0ZXBPdXRPZkZ1bmN0aW9uKToK
KyAgICAgICAgKGRlYnVnZ2VyU2NyaXB0Q29uc3RydWN0b3IuRGVidWdnZXJTY3JpcHQuY2xlYXJC
cmVha3BvaW50cyk6CisgICAgICAgIChkZWJ1Z2dlclNjcmlwdENvbnN0cnVjdG9yLkRlYnVnZ2Vy
U2NyaXB0LnNldEJyZWFrcG9pbnRzQWN0aXZhdGVkKToKKyAgICAgICAgKGRlYnVnZ2VyU2NyaXB0
Q29uc3RydWN0b3IuRGVidWdnZXJTY3JpcHQuX2ZyYW1lTWlycm9yVG9KU0NhbGxGcmFtZSk6Cisg
ICAgICAgIChkZWJ1Z2dlclNjcmlwdENvbnN0cnVjdG9yLkRlYnVnZ2VyU2NyaXB0Ll93ZWJraXRU
b1Y4TGluZU51bWJlcik6CisgICAgICAgIChkZWJ1Z2dlclNjcmlwdENvbnN0cnVjdG9yLkRlYnVn
Z2VyU2NyaXB0Ll92OFRvV3dlYmtpdExpbmVOdW1iZXIpOgorICAgICAgICAoZGVidWdnZXJTY3Jp
cHRDb25zdHJ1Y3Rvcik6CisgICAgICAgICogc3JjL2pzL0RldlRvb2xzLmpzOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLmxvYWRlZCk6CisgICAgICAgICguKToKKyAgICAgICAgKCk6CisgICAgICAg
ICogc3JjL2pzL0RldlRvb2xzSG9zdFN0dWIuanM6CisgICAgICAgICguUmVtb3RlRGVidWdnZXJB
Z2VudFN0dWIucHJvdG90eXBlLnNldERlYnVnZ2VyU2NyaXB0U291cmNlKToKKyAgICAgICAgKiBz
cmMvanMvSW5zcGVjdG9yQ29udHJvbGxlckltcGwuanM6CisgICAgICAgIChkZXZ0b29scy5JbnNw
ZWN0b3JCYWNrZW5kSW1wbCk6CisKIDIwMTAtMDQtMTIgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCmRpZmYgLS1naXQg
YS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5
cGkKaW5kZXggZjFjNmMyZC4uMzdmYWE5OSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL1dl
YktpdC5neXBpCisrKyBiL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtMzUsNiArMzUs
NyBAQAogICAgICAgICAnZGV2dG9vbHNfanNfZmlsZXMnOiBbCiAgICAgICAgICAgICAnc3JjL2pz
L0luc3BlY3RvckNvbnRyb2xsZXJJbXBsLmpzJywKICAgICAgICAgICAgICdzcmMvanMvRGVidWdn
ZXJBZ2VudC5qcycsCisgICAgICAgICAgICAnc3JjL2pzL0RlYnVnZ2VyU2NyaXB0LmpzJywKICAg
ICAgICAgICAgICdzcmMvanMvUHJvZmlsZXJBZ2VudC5qcycsCiAgICAgICAgICAgICAnc3JjL2pz
L1Byb2ZpbGVyUHJvY2Vzc29yLmpzJywKICAgICAgICAgICAgICdzcmMvanMvSGVhcFByb2ZpbGVy
UGFuZWwuanMnLApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9EZWJ1Z2dlckFnZW50
LmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL0RlYnVnZ2VyQWdlbnQuaAppbmRleCAxN2NkZTExLi43
ZjNkYmJiIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL0RlYnVnZ2VyQWdlbnQuaAor
KysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0RlYnVnZ2VyQWdlbnQuaApAQCAtNDAsNyArNDAsMTAg
QEAgbmFtZXNwYWNlIFdlYktpdCB7CiAgICAgTUVUSE9EMChnZXRDb250ZXh0SWQpIFwKICAgICBc
CiAgICAgLyogUmVxdWVzdCB2OCB0byBwcm9jZXNzIGFsbCBkZWJ1ZyBjb21tYW5kcyBpbiB0aGUg
cXVldWUuICovIFwKLSAgICBNRVRIT0QwKHByb2Nlc3NEZWJ1Z0NvbW1hbmRzKQorICAgIE1FVEhP
RDAocHJvY2Vzc0RlYnVnQ29tbWFuZHMpIFwKKyAgICBcCisgICAgLyogUHVzaCBEZWJ1Z2dlclNj
cmlwdC5qcyBjb250ZW50IHRvIHRoZSBhZ2VudC4gKi8gXAorICAgIE1FVEhPRDEoc2V0RGVidWdn
ZXJTY3JpcHRTb3VyY2UsIFN0cmluZykKIAogREVGSU5FX1JQQ19DTEFTUyhEZWJ1Z2dlckFnZW50
LCBERUJVR0dFUl9BR0VOVF9TVFJVQ1QpCiAKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9z
cmMvRGVidWdnZXJBZ2VudEltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9EZWJ1Z2dlckFn
ZW50SW1wbC5jcHAKaW5kZXggYzQ4OTg2MC4uNjczNDgyYSAxMDA2NDQKLS0tIGEvV2ViS2l0L2No
cm9taXVtL3NyYy9EZWJ1Z2dlckFnZW50SW1wbC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9EZWJ1Z2dlckFnZW50SW1wbC5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJEb2N1
bWVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUg
IlNjcmlwdERlYnVnU2VydmVyLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAjaW5jbHVkZSAi
V2ViRGV2VG9vbHNBZ2VudEltcGwuaCIKICNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgpAQCAtNzgs
NiArNzksMTEgQEAgdm9pZCBEZWJ1Z2dlckFnZW50SW1wbDo6cHJvY2Vzc0RlYnVnQ29tbWFuZHMo
KQogICAgIHY4OjpEZWJ1Zzo6UHJvY2Vzc0RlYnVnTWVzc2FnZXMoKTsKIH0KIAordm9pZCBEZWJ1
Z2dlckFnZW50SW1wbDo6c2V0RGVidWdnZXJTY3JpcHRTb3VyY2UoY29uc3QgU3RyaW5nJiBzb3Vy
Y2UpCit7CisgICAgV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnNldERlYnVn
Z2VyU2NyaXB0U291cmNlKHNvdXJjZSk7Cit9CisKIHZvaWQgRGVidWdnZXJBZ2VudEltcGw6OmRl
YnVnZ2VyT3V0cHV0KGNvbnN0IFN0cmluZyYgY29tbWFuZCkKIHsKICAgICBtX2RlbGVnYXRlLT5k
ZWJ1Z2dlck91dHB1dChjb21tYW5kKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMv
RGVidWdnZXJBZ2VudEltcGwuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvRGVidWdnZXJBZ2VudElt
cGwuaAppbmRleCAwZTZlNmFmLi5iZDlkZGY2IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0v
c3JjL0RlYnVnZ2VyQWdlbnRJbXBsLmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9EZWJ1Z2dl
ckFnZW50SW1wbC5oCkBAIC02MCw2ICs2MCw3IEBAIHB1YmxpYzoKICAgICAvLyBEZWJ1Z2dlckFn
ZW50IGltcGxlbWVudGF0aW9uLgogICAgIHZpcnR1YWwgdm9pZCBnZXRDb250ZXh0SWQoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc0RlYnVnQ29tbWFuZHMoKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0RGVidWdnZXJTY3JpcHRTb3VyY2UoY29uc3QgU3RyaW5nJik7CiAKICAgICB2b2lkIGRlYnVn
Z2VyT3V0cHV0KGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgb3V0KTsKIApkaWZmIC0tZ2l0IGEvV2Vi
S2l0L2Nocm9taXVtL3NyYy9EZWJ1Z2dlckFnZW50TWFuYWdlci5jcHAgYi9XZWJLaXQvY2hyb21p
dW0vc3JjL0RlYnVnZ2VyQWdlbnRNYW5hZ2VyLmNwcAppbmRleCBmYWFmYWZmLi5kM2Y3ZmVhIDEw
MDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL0RlYnVnZ2VyQWdlbnRNYW5hZ2VyLmNwcAor
KysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0RlYnVnZ2VyQWdlbnRNYW5hZ2VyLmNwcApAQCAtMzQs
NiArMzQsNyBAQAogI2luY2x1ZGUgIkRlYnVnZ2VyQWdlbnRJbXBsLmgiCiAjaW5jbHVkZSAiRnJh
bWUuaCIKICNpbmNsdWRlICJQYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCIKKyNpbmNsdWRlICJTY3Jp
cHREZWJ1Z1NlcnZlci5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKICNpbmNsdWRlICJXZWJEZXZU
b29sc0FnZW50SW1wbC5oIgogI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgpAQCAtNzIsNiArNzMs
NDIgQEAgcHJpdmF0ZToKIH0gLy8gbmFtZXNwYWNlCiAKIAordm9pZCBEZWJ1Z2dlckFnZW50TWFu
YWdlcjo6aG9zdERpc3BhdGNoSGFuZGxlcihjb25zdCBWZWN0b3I8V2ViQ29yZTo6UGFnZSo+JiBw
YWdlcykKK3sKKyAgICBpZiAoIXNfbWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChzX2luSG9zdERpc3BhdGNoSGFuZGxlcikKKyAgICAgICAgcmV0
dXJuOworCisgICAgc19pbkhvc3REaXNwYXRjaEhhbmRsZXIgPSB0cnVlOworCisgICAgVmVjdG9y
PFdlYlZpZXdJbXBsKj4gdmlld3M7CisgICAgLy8gMS4gRGlzYWJsZSBhY3RpdmUgb2JqZWN0cyBh
bmQgaW5wdXQgZXZlbnRzLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFnZXMuc2l6ZSgp
OyBpKyspIHsKKyAgICAgICAgV2ViQ29yZTo6UGFnZSogcGFnZSA9IHBhZ2VzW2ldOworICAgICAg
ICBXZWJWaWV3SW1wbCogdmlldyA9IFdlYlZpZXdJbXBsOjpmcm9tUGFnZShwYWdlKTsKKyAgICAg
ICAgc19wYWdlRGVmZXJyZXJzLnNldCh2aWV3ICwgbmV3IFdlYkNvcmU6OlBhZ2VHcm91cExvYWRE
ZWZlcnJlcihwYWdlLCB0cnVlKSk7CisgICAgICAgIHZpZXdzLmFwcGVuZCh2aWV3KTsKKyAgICAg
ICAgdmlldy0+c2V0SWdub3JlSW5wdXRFdmVudHModHJ1ZSk7CisgICAgfQorCisgICAgLy8gMi4g
UHJvY2VzcyBtZXNzYWdlcy4KKyAgICBzX21lc3NhZ2VMb29wRGlzcGF0Y2hIYW5kbGVyKCk7CisK
KyAgICAvLyAzLiBCcmluZyB0aGluZ3MgYmFjay4KKyAgICBmb3IgKFZlY3RvcjxXZWJWaWV3SW1w
bCo+OjppdGVyYXRvciBpdCA9IHZpZXdzLmJlZ2luKCk7IGl0ICE9IHZpZXdzLmVuZCgpOyArK2l0
KSB7CisgICAgICAgIGlmIChzX3BhZ2VEZWZlcnJlcnMuY29udGFpbnMoKml0KSkgeworICAgICAg
ICAgICAgLy8gVGhlIHZpZXcgd2FzIG5vdCBjbG9zZWQgZHVyaW5nIHRoZSBkaXNwYXRjaC4KKyAg
ICAgICAgICAgICgqaXQpLT5zZXRJZ25vcmVJbnB1dEV2ZW50cyhmYWxzZSk7CisgICAgICAgIH0K
KyAgICB9CisgICAgZGVsZXRlQWxsVmFsdWVzKHNfcGFnZURlZmVycmVycyk7CisgICAgc19wYWdl
RGVmZXJyZXJzLmNsZWFyKCk7CisKKyAgICBzX2luSG9zdERpc3BhdGNoSGFuZGxlciA9IGZhbHNl
OworfQorCiB2b2lkIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpkZWJ1Z0hvc3REaXNwYXRjaEhhbmRs
ZXIoKQogewogICAgIGlmICghc19tZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlciB8fCAhc19hdHRh
Y2hlZEFnZW50c01hcCkKQEAgLTExNiw2ICsxNTMsOSBAQCBEZWJ1Z2dlckFnZW50TWFuYWdlcjo6
QXR0YWNoZWRBZ2VudHNNYXAqIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpzX2F0dGFjaGVkQWdlbnRz
TQogCiB2b2lkIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpkZWJ1Z0F0dGFjaChEZWJ1Z2dlckFnZW50
SW1wbCogZGVidWdnZXJBZ2VudCkKIHsKKyNpZiBFTkFCTEUoVjhfU0NSSVBUX0RFQlVHX1NFUlZF
UikKKyAgICByZXR1cm47CisjZW5kaWYKICAgICBpZiAoIXNfYXR0YWNoZWRBZ2VudHNNYXApIHsK
ICAgICAgICAgc19hdHRhY2hlZEFnZW50c01hcCA9IG5ldyBBdHRhY2hlZEFnZW50c01hcCgpOwog
ICAgICAgICB2ODo6RGVidWc6OlNldE1lc3NhZ2VIYW5kbGVyMigmRGVidWdnZXJBZ2VudE1hbmFn
ZXI6Om9uVjhEZWJ1Z01lc3NhZ2UpOwpAQCAtMTI4LDYgKzE2OCw5IEBAIHZvaWQgRGVidWdnZXJB
Z2VudE1hbmFnZXI6OmRlYnVnQXR0YWNoKERlYnVnZ2VyQWdlbnRJbXBsKiBkZWJ1Z2dlckFnZW50
KQogCiB2b2lkIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpkZWJ1Z0RldGFjaChEZWJ1Z2dlckFnZW50
SW1wbCogZGVidWdnZXJBZ2VudCkKIHsKKyNpZiBFTkFCTEUoVjhfU0NSSVBUX0RFQlVHX1NFUlZF
UikKKyAgICByZXR1cm47CisjZW5kaWYKICAgICBpZiAoIXNfYXR0YWNoZWRBZ2VudHNNYXApIHsK
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTI0OSw2
ICsyOTIsNyBAQCB2b2lkIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpleGVjdXRlRGVidWdnZXJDb21t
YW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZCwgaW50IGNhbAogdm9pZCBEZWJ1Z2dlckFnZW50TWFu
YWdlcjo6c2V0TWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIoV2ViRGV2VG9vbHNBZ2VudDo6TWVz
c2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIgaGFuZGxlcikKIHsKICAgICBzX21lc3NhZ2VMb29wRGlz
cGF0Y2hIYW5kbGVyID0gaGFuZGxlcjsKKyAgICBXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6
c2V0TWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIoRGVidWdnZXJBZ2VudE1hbmFnZXI6Omhvc3RE
aXNwYXRjaEhhbmRsZXIpOwogfQogCiB2b2lkIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpzZXRIb3N0
SWQoV2ViRnJhbWVJbXBsKiB3ZWJmcmFtZSwgaW50IGhvc3RJZCkKZGlmZiAtLWdpdCBhL1dlYktp
dC9jaHJvbWl1bS9zcmMvRGVidWdnZXJBZ2VudE1hbmFnZXIuaCBiL1dlYktpdC9jaHJvbWl1bS9z
cmMvRGVidWdnZXJBZ2VudE1hbmFnZXIuaAppbmRleCBhMmU5MDMwLi5hOGJjN2EzIDEwMDY0NAot
LS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL0RlYnVnZ2VyQWdlbnRNYW5hZ2VyLmgKKysrIGIvV2Vi
S2l0L2Nocm9taXVtL3NyYy9EZWJ1Z2dlckFnZW50TWFuYWdlci5oCkBAIC0zMSwxMiArMzEsMTUg
QEAKICNpZm5kZWYgRGVidWdnZXJBZ2VudE1hbmFnZXJfaAogI2RlZmluZSBEZWJ1Z2dlckFnZW50
TWFuYWdlcl9oCiAKKyNpbmNsdWRlICJXZWJDU3RyaW5nLmgiCiAjaW5jbHVkZSAiV2ViRGV2VG9v
bHNBZ2VudC5oIgogI2luY2x1ZGUgPHY4LWRlYnVnLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFBhZ2U7CiBjbGFzcyBQYWdlR3JvdXBMb2Fk
RGVmZXJyZXI7CiBjbGFzcyBTdHJpbmc7CiB9CkBAIC05Nyw2ICsxMDAsNyBAQCBwcml2YXRlOgog
ICAgIERlYnVnZ2VyQWdlbnRNYW5hZ2VyKCk7CiAgICAgfkRlYnVnZ2VyQWdlbnRNYW5hZ2VyKCk7
CiAKKyAgICBzdGF0aWMgdm9pZCBob3N0RGlzcGF0Y2hIYW5kbGVyKGNvbnN0IFZlY3RvcjxXZWJD
b3JlOjpQYWdlKj4mKTsKICAgICBzdGF0aWMgdm9pZCBkZWJ1Z0hvc3REaXNwYXRjaEhhbmRsZXIo
KTsKICAgICBzdGF0aWMgdm9pZCBvblY4RGVidWdNZXNzYWdlKGNvbnN0IHY4OjpEZWJ1Zzo6TWVz
c2FnZSYgbWVzc2FnZSk7CiAgICAgc3RhdGljIHZvaWQgc2VuZENvbW1hbmRUb1Y4KGNvbnN0IFdl
YkNvcmU6OlN0cmluZyYgY21kLApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNw
ZWN0b3JGcm9udGVuZENsaWVudEltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0
b3JGcm9udGVuZENsaWVudEltcGwuY3BwCmluZGV4IDdkYTA1NzEuLjlmZjM5MzggMTAwNjQ0Ci0t
LSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRJbXBsLmNwcAor
KysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckZyb250ZW5kQ2xpZW50SW1wbC5jcHAK
QEAgLTY5LDYgKzY5LDkgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudEltcGw6OndpbmRv
d09iamVjdENsZWFyZWQoKQogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2xvYmFsID0gZnJh
bWVDb250ZXh0LT5HbG9iYWwoKTsKIAogICAgIGdsb2JhbC0+U2V0KHY4OjpTdHJpbmc6Ok5ldygi
SW5zcGVjdG9yRnJvbnRlbmRIb3N0IiksIGZyb250ZW5kSG9zdE9iaik7CisjaWYgRU5BQkxFKFY4
X1NDUklQVF9ERUJVR19TRVJWRVIpCisgICAgZ2xvYmFsLT5TZXQodjg6OlN0cmluZzo6TmV3KCJ2
OFNjcmlwdERlYnVnU2VydmVyRW5hYmxlZCIpLCB2ODo6VHJ1ZSgpKTsKKyNlbmRpZgogfQogCiB2
b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50SW1wbDo6ZnJvbnRlbmRMb2FkZWQoKQpkaWZmIC0t
Z2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9EZWJ1Z2dlclNjcmlwdC5qcyBiL1dlYktpdC9j
aHJvbWl1bS9zcmMvanMvRGVidWdnZXJTY3JpcHQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uZmJkMjZkYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9z
cmMvanMvRGVidWdnZXJTY3JpcHQuanMKQEAgLTAsMCArMSwyMDQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
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
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitmdW5jdGlvbiBkZWJ1Z2dl
clNjcmlwdENvbnN0cnVjdG9yKCkgeworCit2YXIgRGVidWdnZXJTY3JpcHQgPSB7fTsKK0RlYnVn
Z2VyU2NyaXB0Ll9icmVha3BvaW50cyA9IHt9OworCisKK0RlYnVnZ2VyU2NyaXB0LmdldEFmdGVy
Q29tcGlsZVNjcmlwdCA9IGZ1bmN0aW9uKGV4ZWNTdGF0ZSwgYXJncykKK3sKKyAgICByZXR1cm4g
RGVidWdnZXJTY3JpcHQuX2Zvcm1hdFNjcmlwdChhcmdzLmV2ZW50RGF0YS5zY3JpcHRfLnNjcmlw
dF8pOworfQorCitEZWJ1Z2dlclNjcmlwdC5nZXRTY3JpcHRzID0gZnVuY3Rpb24oZXhlY1N0YXRl
LCBhcmdzKQoreworICAgIHZhciBzY3JpcHRzID0gRGVidWcuc2NyaXB0cygpOworICAgIHZhciBy
ZXN1bHQgPSBbXTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjcmlwdHMubGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgcmVzdWx0LnB1c2goRGVidWdnZXJTY3JpcHQuX2Zvcm1hdFNjcmlwdChzY3Jp
cHRzW2ldKSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0RlYnVnZ2VyU2NyaXB0
Ll9mb3JtYXRTY3JpcHQgPSBmdW5jdGlvbihzY3JpcHQpCit7CisgICAgcmV0dXJuIHsKKyAgICAg
ICAgaWQ6IHNjcmlwdC5pZCwKKyAgICAgICAgbmFtZTogc2NyaXB0Lm5hbWUsCisgICAgICAgIHNv
dXJjZTogc2NyaXB0LnNvdXJjZSwKKyAgICAgICAgbGluZU9mZnNldDogc2NyaXB0LmxpbmVfb2Zm
c2V0LAorICAgICAgICBsaW5lQ291bnQ6IHNjcmlwdC5saW5lQ291bnQoKSwKKyAgICAgICAgY29u
dGV4dERhdGE6IHNjcmlwdC5jb250ZXh0X2RhdGEKKyAgICB9OworfQorCitEZWJ1Z2dlclNjcmlw
dC5zZXRCcmVha3BvaW50ID0gZnVuY3Rpb24oZXhlY1N0YXRlLCBhcmdzKQoreworICAgIGFyZ3Mu
bGluZU51bWJlciA9IERlYnVnZ2VyU2NyaXB0Ll93ZWJraXRUb1Y4TGluZU51bWJlcihhcmdzLmxp
bmVOdW1iZXIpOworICAgIHZhciBrZXkgPSBhcmdzLnNjcmlwdElkICsgIjoiICsgYXJncy5saW5l
TnVtYmVyOworICAgIHZhciBicmVha0lkID0gRGVidWdnZXJTY3JpcHQuX2JyZWFrcG9pbnRzW2tl
eV07CisgICAgaWYgKGJyZWFrSWQpIHsKKyAgICAgICAgaWYgKGFyZ3MuZW5hYmxlZCkKKyAgICAg
ICAgICAgIERlYnVnLmVuYWJsZVNjcmlwdEJyZWFrUG9pbnQoYnJlYWtJZCk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIERlYnVnLmRpc2FibGVTY3JpcHRCcmVha1BvaW50KGJyZWFrSWQpOwor
ICAgICAgICBEZWJ1Zy5jaGFuZ2VTY3JpcHRCcmVha1BvaW50Q29uZGl0aW9uKGJyZWFrSWQsIGFy
Z3MuY29uZGl0aW9uKTsKKyAgICAgICAgcmV0dXJuIGJyZWFrSWQ7CisgICAgfQorCisgICAgYnJl
YWtJZCA9IERlYnVnLnNldFNjcmlwdEJyZWFrUG9pbnRCeUlkKGFyZ3Muc2NyaXB0SWQsIGFyZ3Mu
bGluZU51bWJlciwgMCAvKiBjb2x1bW4gKi8sIGFyZ3MuY29uZGl0aW9uKTsKKyAgICBEZWJ1Z2dl
clNjcmlwdC5fYnJlYWtwb2ludHNba2V5XSA9IGJyZWFrSWQ7CisgICAgaWYgKCFhcmdzLmVuYWJs
ZWQpCisgICAgICAgIERlYnVnLmRpc2FibGVTY3JpcHRCcmVha1BvaW50KGJyZWFrSWQpOworICAg
IHJldHVybiBicmVha0lkOworfQorCitEZWJ1Z2dlclNjcmlwdC5yZW1vdmVCcmVha3BvaW50ID0g
ZnVuY3Rpb24oZXhlY1N0YXRlLCBhcmdzKQoreworICAgIGFyZ3MubGluZU51bWJlciA9IERlYnVn
Z2VyU2NyaXB0Ll93ZWJraXRUb1Y4TGluZU51bWJlcihhcmdzLmxpbmVOdW1iZXIpOworICAgIHZh
ciBrZXkgPSBhcmdzLnNjcmlwdElkICsgIjoiICsgYXJncy5saW5lTnVtYmVyOworICAgIHZhciBi
cmVha0lkID0gRGVidWdnZXJTY3JpcHQuX2JyZWFrcG9pbnRzW2tleV07CisgICAgaWYgKGJyZWFr
SWQpCisgICAgICAgIERlYnVnLmZpbmRCcmVha1BvaW50KGJyZWFrSWQsIHRydWUpOworICAgIGRl
bGV0ZSBEZWJ1Z2dlclNjcmlwdC5fYnJlYWtwb2ludHNba2V5XTsKK30KKworRGVidWdnZXJTY3Jp
cHQuY3VycmVudENhbGxGcmFtZSA9IGZ1bmN0aW9uKGV4ZWNTdGF0ZSwgYXJncykKK3sKKyAgICB2
YXIgZnJhbWVDb3VudCA9IGV4ZWNTdGF0ZS5mcmFtZUNvdW50KCk7CisgICAgaWYgKGZyYW1lQ291
bnQgPT09IDApCisgICAgICAgIHJldHVybiB1bmRlZmluZWQ7CisgICAgCisgICAgdmFyIHRvcEZy
YW1lOworICAgIGZvciAodmFyIGkgPSBmcmFtZUNvdW50IC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAg
ICAgICAgdmFyIGZyYW1lTWlycm9yID0gZXhlY1N0YXRlLmZyYW1lKGkpOworICAgICAgICB0b3BG
cmFtZSA9IERlYnVnZ2VyU2NyaXB0Ll9mcmFtZU1pcnJvclRvSlNDYWxsRnJhbWUoZnJhbWVNaXJy
b3IsIHRvcEZyYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHRvcEZyYW1lOworfQorCitEZWJ1Z2dl
clNjcmlwdC5zdGVwSW50b1N0YXRlbWVudCA9IGZ1bmN0aW9uKGV4ZWNTdGF0ZSwgYXJncykKK3sK
KyAgICBleGVjU3RhdGUucHJlcGFyZVN0ZXAoRGVidWcuU3RlcEFjdGlvbi5TdGVwSW4sIDEpOwor
fQorCitEZWJ1Z2dlclNjcmlwdC5zdGVwT3ZlclN0YXRlbWVudCA9IGZ1bmN0aW9uKGV4ZWNTdGF0
ZSwgYXJncykKK3sKKyAgICBleGVjU3RhdGUucHJlcGFyZVN0ZXAoRGVidWcuU3RlcEFjdGlvbi5T
dGVwTmV4dCwgMSk7Cit9CisKK0RlYnVnZ2VyU2NyaXB0LnN0ZXBPdXRPZkZ1bmN0aW9uID0gZnVu
Y3Rpb24oZXhlY1N0YXRlLCBhcmdzKQoreworICAgIGV4ZWNTdGF0ZS5wcmVwYXJlU3RlcChEZWJ1
Zy5TdGVwQWN0aW9uLlN0ZXBPdXQsIDEpOworfQorCitEZWJ1Z2dlclNjcmlwdC5jbGVhckJyZWFr
cG9pbnRzID0gZnVuY3Rpb24oZXhlY1N0YXRlLCBhcmdzKQoreworICAgIGZvciAodmFyIGtleSBp
biBEZWJ1Z2dlclNjcmlwdC5fYnJlYWtwb2ludHMpIHsKKyAgICAgICAgdmFyIGJyZWFrSWQgPSBE
ZWJ1Z2dlclNjcmlwdC5fYnJlYWtwb2ludHNba2V5XTsKKyAgICAgICAgRGVidWcuZmluZEJyZWFr
UG9pbnQoYnJlYWtJZCwgdHJ1ZSk7CisgICAgfQorICAgIERlYnVnZ2VyU2NyaXB0Ll9icmVha3Bv
aW50cyA9IHt9OworfQorCitEZWJ1Z2dlclNjcmlwdC5zZXRCcmVha3BvaW50c0FjdGl2YXRlZCA9
IGZ1bmN0aW9uKGV4ZWNTdGF0ZSwgYXJncykKK3sKKyAgICBmb3IgKHZhciBrZXkgaW4gRGVidWdn
ZXJTY3JpcHQuX2JyZWFrcG9pbnRzKSB7CisgICAgICAgIHZhciBicmVha0lkID0gRGVidWdnZXJT
Y3JpcHQuX2JyZWFrcG9pbnRzW2tleV07CisgICAgICAgIGlmIChhcmdzLmVuYWJsZWQpCisgICAg
ICAgICAgICBEZWJ1Zy5lbmFibGVTY3JpcHRCcmVha1BvaW50KGJyZWFrSWQpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBEZWJ1Zy5kaXNhYmxlU2NyaXB0QnJlYWtQb2ludChicmVha0lkKTsK
KyAgICB9Cit9CisKK0RlYnVnZ2VyU2NyaXB0Ll9mcmFtZU1pcnJvclRvSlNDYWxsRnJhbWUgPSBm
dW5jdGlvbihmcmFtZU1pcnJvciwgY2FsbGVyRnJhbWUpCit7CisgICAgLy8gR2V0IGZ1bmN0aW9u
IG5hbWUuCisgICAgdmFyIGZ1bmM7CisgICAgdHJ5IHsKKyAgICAgICAgZnVuYyA9IGZyYW1lTWly
cm9yLmZ1bmMoKTsKKyAgICB9IGNhdGNoKGUpIHsKKyAgICB9CisgICAgdmFyIGZ1bmN0aW9uTmFt
ZTsKKyAgICBpZiAoZnVuYykKKyAgICAgICAgZnVuY3Rpb25OYW1lID0gZnVuYy5uYW1lKCkgfHwg
ZnVuYy5pbmZlcnJlZE5hbWUoKTsKKyAgICBpZiAoIWZ1bmN0aW9uTmFtZSkKKyAgICAgICAgZnVu
Y3Rpb25OYW1lID0gIlthbm9ueW1vdXNdIjsKKyAgICAgICAgCisgICAgLy8gR2V0IHNjcmlwdCBJ
RC4KKyAgICB2YXIgc2NyaXB0ID0gZnVuYy5zY3JpcHQoKTsKKyAgICB2YXIgc291cmNlSUQgPSBz
Y3JpcHQgJiYgc2NyaXB0LmlkKCk7CisgICAgCisgICAgLy8gR2V0IGxpbmUgbnVtYmVyLgorICAg
IHZhciBsaW5lID0gRGVidWdnZXJTY3JpcHQuX3Y4VG9Xd2Via2l0TGluZU51bWJlcihmcmFtZU1p
cnJvci5zb3VyY2VMaW5lKCkpOworICAgIAorICAgIC8vIEdldCB0aGlzIG9iamVjdC4KKyAgICB2
YXIgdGhpc09iamVjdCA9IGZyYW1lTWlycm9yLmRldGFpbHNfLnJlY2VpdmVyKCk7CisKKyAgICAv
LyBHZXQgc2NvcGUgY2hhaW4gYXJyYXkgaW4gZm9ybWF0OiBbPHNjb3BlIHR5cGU+LCA8c2NvcGUg
b2JqZWN0PiwgPHNjb3BlIHR5cGU+LCA8c2NvcGUgb2JqZWN0PiwuLi5dCisgICAgdmFyIHNjb3Bl
Q2hhaW4gPSBbXTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZyYW1lTWlycm9yLnNjb3BlQ291
bnQoKTsgaSsrKSB7CisgICAgICAgIHZhciBzY29wZU1pcnJvciA9IGZyYW1lTWlycm9yLnNjb3Bl
KGkpOworICAgICAgICB2YXIgc2NvcGVPYmplY3RNaXJyb3IgPSBzY29wZU1pcnJvci5zY29wZU9i
amVjdCgpOworICAgICAgICB2YXIgcHJvcGVydGllcyA9IHNjb3BlT2JqZWN0TWlycm9yLnByb3Bl
cnRpZXMoKTsKKyAgICAgICAgdmFyIHNjb3BlT2JqZWN0ID0ge307CisgICAgICAgIGZvciAodmFy
IGogPSAwOyBqIDwgcHJvcGVydGllcy5sZW5ndGg7IGorKykKKyAgICAgICAgICAgIHNjb3BlT2Jq
ZWN0W3Byb3BlcnRpZXNbal0ubmFtZSgpXSA9IHByb3BlcnRpZXNbal0udmFsdWVfOworICAgICAg
ICBzY29wZUNoYWluLnB1c2goc2NvcGVNaXJyb3Iuc2NvcGVUeXBlKCkpOworICAgICAgICBzY29w
ZUNoYWluLnB1c2goc2NvcGVPYmplY3QpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4geworICAg
ICAgICAic291cmNlSUQiOiBzb3VyY2VJRCwKKyAgICAgICAgImxpbmUiOiBsaW5lLAorICAgICAg
ICAiZnVuY3Rpb25OYW1lIjogZnVuY3Rpb25OYW1lLAorICAgICAgICAidHlwZSI6ICJmdW5jdGlv
biIsCisgICAgICAgICJ0aGlzT2JqZWN0IjogdGhpc09iamVjdCwKKyAgICAgICAgInNjb3BlQ2hh
aW4iOiBzY29wZUNoYWluLAorICAgICAgICAiY2FsbGVyIjogY2FsbGVyRnJhbWUKKyAgICB9Owor
fQorCitEZWJ1Z2dlclNjcmlwdC5fd2Via2l0VG9WOExpbmVOdW1iZXIgPSBmdW5jdGlvbihsaW5l
KQoreworICAgIHJldHVybiBsaW5lIC0gMTsKK307CisKK0RlYnVnZ2VyU2NyaXB0Ll92OFRvV3dl
YmtpdExpbmVOdW1iZXIgPSBmdW5jdGlvbihsaW5lKQoreworICAgIHJldHVybiBsaW5lICsgMTsK
K307CisKK3JldHVybiBEZWJ1Z2dlclNjcmlwdDsKKworfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2No
cm9taXVtL3NyYy9qcy9EZXZUb29scy5qcyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvRGV2VG9v
bHMuanMKaW5kZXggNWIyODhlYy4uOTQwNmJmMCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVt
L3NyYy9qcy9EZXZUb29scy5qcworKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RldlRvb2xz
LmpzCkBAIC0xODMsMTIgKzE4MywxNiBAQCBXZWJJbnNwZWN0b3IubG9hZGVkID0gZnVuY3Rpb24o
KQogICAgIFByZWZlcmVuY2VzLmhlYXBQcm9maWxlclByZXNlbnQgPSB0cnVlOwogICAgIFByZWZl
cmVuY2VzLmRlYnVnZ2VyQWx3YXlzRW5hYmxlZCA9IHRydWU7CiAgICAgUHJlZmVyZW5jZXMucHJv
ZmlsZXJBbHdheXNFbmFibGVkID0gdHJ1ZTsKKyAgICBSZW1vdGVEZWJ1Z2dlckFnZW50LnNldERl
YnVnZ2VyU2NyaXB0U291cmNlKCIoIiArIGRlYnVnZ2VyU2NyaXB0Q29uc3RydWN0b3IgKyAiKSgp
OyIpOworIAogICAgIG9sZExvYWRlZC5jYWxsKHRoaXMpOwogCiAgICAgSW5zcGVjdG9yRnJvbnRl
bmRIb3N0LmxvYWRlZCgpOwogfTsKIAogCitpZiAoIXdpbmRvdy52OFNjcmlwdERlYnVnU2VydmVy
RW5hYmxlZCkgeworCiAvKioKICAqIFRoaXMgb3ZlcnJpZGUgaXMgbmVjZXNzYXJ5IGZvciBhZGRp
bmcgc2NyaXB0IHNvdXJjZSBhc3luY2hyb25vdXNseS4KICAqIEBvdmVycmlkZQpAQCAtMjI1LDE4
ICsyMjksNiBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0Vmlldy5wcm90b3R5cGUuZGlkUmVzb2x2ZVNj
cmlwdFNvdXJjZV8gPSBmdW5jdGlvbigpCiB9OwogCiAKLS8qKgotICogQHBhcmFtIHtzdHJpbmd9
IHR5cGUgVHlwZSBvZiB0aGUgdGhlIHByb3BlcnR5IHZhbHVlKCJvYmplY3QiIG9yICJmdW5jdGlv
biIpLgotICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZSBDbGFzcyBuYW1lIG9mIHRoZSBwcm9w
ZXJ0eSB2YWx1ZS4KLSAqIEBjb25zdHJ1Y3RvcgotICovCi1XZWJJbnNwZWN0b3IuVW5yZXNvbHZl
ZFByb3BlcnR5VmFsdWUgPSBmdW5jdGlvbih0eXBlLCBjbGFzc05hbWUpCi17Ci0gICAgdGhpcy50
eXBlID0gdHlwZTsKLSAgICB0aGlzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsKLX07Ci0KLQogKGZ1
bmN0aW9uKCkKIHsKICAgICB2YXIgb2xkU2hvdyA9IFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwu
cHJvdG90eXBlLnNob3c7CkBAIC0yNDksNiArMjQxLDQ3IEBAIFdlYkluc3BlY3Rvci5VbnJlc29s
dmVkUHJvcGVydHlWYWx1ZSA9IGZ1bmN0aW9uKHR5cGUsIGNsYXNzTmFtZSkKIH0pKCk7CiAKIAor
KGZ1bmN0aW9uICgpIHsKK3ZhciBvcmlnID0gSW5qZWN0ZWRTY3JpcHRBY2Nlc3MucHJvdG90eXBl
LmdldFByb3BlcnRpZXM7CitJbmplY3RlZFNjcmlwdEFjY2Vzcy5wcm90b3R5cGUuZ2V0UHJvcGVy
dGllcyA9IGZ1bmN0aW9uKG9iamVjdFByb3h5LCBpZ25vcmVIYXNPd25Qcm9wZXJ0eSwgYWJicmV2
aWF0ZSwgY2FsbGJhY2spCit7CisgICAgaWYgKG9iamVjdFByb3h5LmlzU2NvcGUpCisgICAgICAg
IGRldnRvb2xzLnRvb2xzLmdldERlYnVnZ2VyQWdlbnQoKS5yZXNvbHZlU2NvcGUob2JqZWN0UHJv
eHkub2JqZWN0SWQsIGNhbGxiYWNrKTsKKyAgICBlbHNlIGlmIChvYmplY3RQcm94eS5pc1Y4UmVm
KQorICAgICAgICBkZXZ0b29scy50b29scy5nZXREZWJ1Z2dlckFnZW50KCkucmVzb2x2ZUNoaWxk
cmVuKG9iamVjdFByb3h5Lm9iamVjdElkLCBjYWxsYmFjaywgZmFsc2UpOworICAgIGVsc2UKKyAg
ICAgICAgb3JpZy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworfTsKK30pKCk7CisKKworKGZ1bmN0
aW9uKCkKK3sKK0luamVjdGVkU2NyaXB0QWNjZXNzLnByb3RvdHlwZS5ldmFsdWF0ZUluQ2FsbEZy
YW1lID0gZnVuY3Rpb24oY2FsbEZyYW1lSWQsIGNvZGUsIG9iamVjdEdyb3VwLCBjYWxsYmFjaykK
K3sKKyAgICAvL1RPRE8ocGZlbGRtYW4pOiByZW1vdmUgb25jZSA0OTA4NCBpcyByb2xsZWQuCisg
ICAgaWYgKCFjYWxsYmFjaykKKyAgICAgICAgY2FsbGJhY2sgPSBvYmplY3RHcm91cDsKKyAgICBk
ZXZ0b29scy50b29scy5nZXREZWJ1Z2dlckFnZW50KCkuZXZhbHVhdGVJbkNhbGxGcmFtZShjYWxs
RnJhbWVJZCwgY29kZSwgY2FsbGJhY2spOworfTsKK30pKCk7CisKKworKGZ1bmN0aW9uKCkKK3sK
K3ZhciBvcmlnID0gSW5qZWN0ZWRTY3JpcHRBY2Nlc3MucHJvdG90eXBlLmdldENvbXBsZXRpb25z
OworSW5qZWN0ZWRTY3JpcHRBY2Nlc3MucHJvdG90eXBlLmdldENvbXBsZXRpb25zID0gZnVuY3Rp
b24oZXhwcmVzc2lvblN0cmluZywgaW5jbHVkZUluc3BlY3RvckNvbW1hbmRMaW5lQVBJLCBjYWxs
RnJhbWVJZCwgcmVwb3J0Q29tcGxldGlvbnMpCit7CisgICAgaWYgKHR5cGVvZiBjYWxsRnJhbWVJ
ZCA9PT0gIm51bWJlciIpCisgICAgICAgIGRldnRvb2xzLnRvb2xzLmdldERlYnVnZ2VyQWdlbnQo
KS5yZXNvbHZlQ29tcGxldGlvbnNPbkZyYW1lKGV4cHJlc3Npb25TdHJpbmcsIGNhbGxGcmFtZUlk
LCByZXBvcnRDb21wbGV0aW9ucyk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gb3JpZy5hcHBs
eSh0aGlzLCBhcmd1bWVudHMpOworfTsKK30pKCk7CisKK30KKworCiAoZnVuY3Rpb24gSW50ZXJj
ZXB0UHJvZmlsZXNQYW5lbEV2ZW50cygpCiB7CiAgICAgdmFyIG9sZFNob3cgPSBXZWJJbnNwZWN0
b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUuc2hvdzsKQEAgLTM0Myw0NSArMzc2LDYgQEAgV2Vi
SW5zcGVjdG9yLlVJU3RyaW5nID0gZnVuY3Rpb24oc3RyaW5nKQogfSkoKTsKIAogCi0oZnVuY3Rp
b24gKCkgewotdmFyIG9yaWcgPSBJbmplY3RlZFNjcmlwdEFjY2Vzcy5wcm90b3R5cGUuZ2V0UHJv
cGVydGllczsKLUluamVjdGVkU2NyaXB0QWNjZXNzLnByb3RvdHlwZS5nZXRQcm9wZXJ0aWVzID0g
ZnVuY3Rpb24ob2JqZWN0UHJveHksIGlnbm9yZUhhc093blByb3BlcnR5LCBhYmJyZXZpYXRlLCBj
YWxsYmFjaykKLXsKLSAgICBpZiAob2JqZWN0UHJveHkuaXNTY29wZSkKLSAgICAgICAgZGV2dG9v
bHMudG9vbHMuZ2V0RGVidWdnZXJBZ2VudCgpLnJlc29sdmVTY29wZShvYmplY3RQcm94eS5vYmpl
Y3RJZCwgY2FsbGJhY2spOwotICAgIGVsc2UgaWYgKG9iamVjdFByb3h5LmlzVjhSZWYpCi0gICAg
ICAgIGRldnRvb2xzLnRvb2xzLmdldERlYnVnZ2VyQWdlbnQoKS5yZXNvbHZlQ2hpbGRyZW4ob2Jq
ZWN0UHJveHkub2JqZWN0SWQsIGNhbGxiYWNrLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBv
cmlnLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci19OwotfSkoKTsKLQotCi0oZnVuY3Rpb24oKQot
ewotSW5qZWN0ZWRTY3JpcHRBY2Nlc3MucHJvdG90eXBlLmV2YWx1YXRlSW5DYWxsRnJhbWUgPSBm
dW5jdGlvbihjYWxsRnJhbWVJZCwgY29kZSwgb2JqZWN0R3JvdXAsIGNhbGxiYWNrKQotewotICAg
IC8vVE9ETyhwZmVsZG1hbik6IHJlbW92ZSBvbmNlIDQ5MDg0IGlzIHJvbGxlZC4KLSAgICBpZiAo
IWNhbGxiYWNrKQotICAgICAgICBjYWxsYmFjayA9IG9iamVjdEdyb3VwOwotICAgIGRldnRvb2xz
LnRvb2xzLmdldERlYnVnZ2VyQWdlbnQoKS5ldmFsdWF0ZUluQ2FsbEZyYW1lKGNhbGxGcmFtZUlk
LCBjb2RlLCBjYWxsYmFjayk7Ci19OwotfSkoKTsKLQotCi0oZnVuY3Rpb24oKQotewotdmFyIG9y
aWcgPSBJbmplY3RlZFNjcmlwdEFjY2Vzcy5wcm90b3R5cGUuZ2V0Q29tcGxldGlvbnM7Ci1Jbmpl
Y3RlZFNjcmlwdEFjY2Vzcy5wcm90b3R5cGUuZ2V0Q29tcGxldGlvbnMgPSBmdW5jdGlvbihleHBy
ZXNzaW9uU3RyaW5nLCBpbmNsdWRlSW5zcGVjdG9yQ29tbWFuZExpbmVBUEksIGNhbGxGcmFtZUlk
LCByZXBvcnRDb21wbGV0aW9ucykKLXsKLSAgICBpZiAodHlwZW9mIGNhbGxGcmFtZUlkID09PSAi
bnVtYmVyIikKLSAgICAgICAgZGV2dG9vbHMudG9vbHMuZ2V0RGVidWdnZXJBZ2VudCgpLnJlc29s
dmVDb21wbGV0aW9uc09uRnJhbWUoZXhwcmVzc2lvblN0cmluZywgY2FsbEZyYW1lSWQsIHJlcG9y
dENvbXBsZXRpb25zKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBvcmlnLmFwcGx5KHRoaXMs
IGFyZ3VtZW50cyk7Ci19OwotfSkoKTsKLQotCiAvLyBXZSBuZWVkIHRvIGhhdmUgYSBwbGFjZSBm
b3IgcG9zdHBvbmVkIHRhc2tzCiAvLyB3aGljaCBzaG91bGQgYmUgZXhlY3V0ZWQgd2hlbiBhbGwg
dGhlIG1lc3NhZ2VzIGJldHdlZW4gYWdlbnQgYW5kIGZyb250ZW5kCiAvLyBhcmUgcHJvY2Vzc2Vk
LgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9EZXZUb29sc0hvc3RTdHViLmpz
IGIvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9EZXZUb29sc0hvc3RTdHViLmpzCmluZGV4IDhiMmY0
NmIuLmNhZTRhMWUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvRGV2VG9vbHNI
b3N0U3R1Yi5qcworKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RldlRvb2xzSG9zdFN0dWIu
anMKQEAgLTU1LDYgKzU1LDExIEBAIFJlbW90ZURlYnVnZ2VyQWdlbnRTdHViLnByb3RvdHlwZS5w
cm9jZXNzRGVidWdDb21tYW5kcyA9IGZ1bmN0aW9uKCkKIH07CiAKIAorUmVtb3RlRGVidWdnZXJB
Z2VudFN0dWIucHJvdG90eXBlLnNldERlYnVnZ2VyU2NyaXB0U291cmNlID0gZnVuY3Rpb24oc291
cmNlKQoreworfTsKKworCiAvKioKICAqIEBjb25zdHJ1Y3RvcgogICovCmRpZmYgLS1naXQgYS9X
ZWJLaXQvY2hyb21pdW0vc3JjL2pzL0luc3BlY3RvckNvbnRyb2xsZXJJbXBsLmpzIGIvV2ViS2l0
L2Nocm9taXVtL3NyYy9qcy9JbnNwZWN0b3JDb250cm9sbGVySW1wbC5qcwppbmRleCBjOWEzOWI0
Li4yY2IwOTA3IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0luc3BlY3RvckNv
bnRyb2xsZXJJbXBsLmpzCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvSW5zcGVjdG9yQ29u
dHJvbGxlckltcGwuanMKQEAgLTg2LDYgKzg2LDIxIEBAIGRldnRvb2xzLkluc3BlY3RvckJhY2tl
bmRJbXBsID0gZnVuY3Rpb24oKQogICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJE
ZWxlZ2F0ZV8oInRvZ2dsZVN0eWxlRW5hYmxlZCIpOwogICAgIHRoaXMuaW5zdGFsbEluc3BlY3Rv
ckNvbnRyb2xsZXJEZWxlZ2F0ZV8oInNldFJ1bGVTZWxlY3RvciIpOwogICAgIHRoaXMuaW5zdGFs
bEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oImFkZFJ1bGUiKTsKKworICAgIGlmICh3aW5k
b3cudjhTY3JpcHREZWJ1Z1NlcnZlckVuYWJsZWQpIHsKKyAgICB0aGlzLmluc3RhbGxJbnNwZWN0
b3JDb250cm9sbGVyRGVsZWdhdGVfKCJkaXNhYmxlRGVidWdnZXIiKTsKKyAgICB0aGlzLmluc3Rh
bGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJlbmFibGVEZWJ1Z2dlciIpOworICAgIHRo
aXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oInNldEJyZWFrcG9pbnQiKTsK
KyAgICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJyZW1vdmVCcmVh
a3BvaW50Iik7CisgICAgdGhpcy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygi
YWN0aXZhdGVCcmVha3BvaW50cyIpOworICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xs
ZXJEZWxlZ2F0ZV8oImRlYWN0aXZhdGVCcmVha3BvaW50cyIpOworICAgIHRoaXMuaW5zdGFsbElu
c3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oInBhdXNlSW5EZWJ1Z2dlciIpOworICAgIHRoaXMu
aW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oInJlc3VtZURlYnVnZ2VyIik7Cisg
ICAgdGhpcy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygic3RlcEludG9TdGF0
ZW1lbnRJbkRlYnVnZ2VyIik7CisgICAgdGhpcy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRl
bGVnYXRlXygic3RlcE91dE9mRnVuY3Rpb25JbkRlYnVnZ2VyIik7CisgICAgdGhpcy5pbnN0YWxs
SW5zcGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygic3RlcE92ZXJTdGF0ZW1lbnRJbkRlYnVnZ2Vy
Iik7CisgICAgdGhpcy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygic2V0UGF1
c2VPbkV4Y2VwdGlvbnNTdGF0ZSIpOworICAgIH0KIH07CiBkZXZ0b29scy5JbnNwZWN0b3JCYWNr
ZW5kSW1wbC5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLkluc3BlY3RvckJhY2tl
bmRTdHViLnByb3RvdHlwZTsKIApAQCAtMTA4LDYgKzEyMyw4IEBAIGRldnRvb2xzLkluc3BlY3Rv
ckJhY2tlbmRJbXBsLnByb3RvdHlwZS5wcm9maWxlckVuYWJsZWQgPSBmdW5jdGlvbigpCiB9Owog
CiAKK2lmICghd2luZG93LnY4U2NyaXB0RGVidWdTZXJ2ZXJFbmFibGVkKSB7CisKIGRldnRvb2xz
Lkluc3BlY3RvckJhY2tlbmRJbXBsLnByb3RvdHlwZS5zZXRCcmVha3BvaW50ID0gZnVuY3Rpb24o
c291cmNlSUQsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbikKIHsKICAgICB0aGlzLnJlbW92ZUJy
ZWFrcG9pbnQoc291cmNlSUQsIGxpbmUpOwpAQCAtMTkzLDYgKzIxMCw4IEBAIGRldnRvb2xzLklu
c3BlY3RvckJhY2tlbmRJbXBsLnByb3RvdHlwZS5zZXRQYXVzZU9uRXhjZXB0aW9ucyA9IGZ1bmN0
aW9uKHZhbHVlKQogICAgIHJldHVybiBkZXZ0b29scy50b29scy5nZXREZWJ1Z2dlckFnZW50KCku
c2V0UGF1c2VPbkV4Y2VwdGlvbnModmFsdWUpOwogfTsKIAorfQorCiAKIC8qKgogICogQG92ZXJy
aWRlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53435</attachid>
            <date>2010-04-15 07:15:04 -0700</date>
            <delta_ts>2010-04-15 08:15:08 -0700</delta_ts>
            <desc>patch</desc>
            <filename>script-debug-server3.patch</filename>
            <type>text/plain</type>
            <size>49597</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MmYxMTg0ZC4uNjE3MTcxYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MCBAQAorMjAxMC0wNC0xNSAgWXVyeSBTZW1pa2hh
dHNreSAgPHl1cnlzQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisgICAgCisgICAgICAgIFN1cHBvcnQgYmFzaWMgZGVidWdnaW5nIGNhcGFiaWxpdGll
cyBpbmNsdWRpbmcgc3RlcCBpbi9vdmVyL291dCBpbiB2OAorICAgICAgICBpbXBsZW1lbnRhdGlv
biBvZiBTY3JpcHREZWJ1Z1NlcnZlci4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9Mzc2MDQKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW5qZWN0
ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0
SG9zdDo6Y3JlYXRlSW5qZWN0ZWRTY3JpcHQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Njcmlw
dERlYnVnU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpT
Y3JpcHREZWJ1Z1NlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6
c2V0RGVidWdnZXJTY3JpcHRTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdT
ZXJ2ZXI6OmFkZExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVy
OjpyZW1vdmVMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6
c2V0QnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6cmVt
b3ZlQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6Y2xl
YXJCcmVha3BvaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0
QnJlYWtwb2ludHNBY3RpdmF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2
ZXI6OmNvbnRpbnVlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZl
cjo6c3RlcEludG9TdGF0ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2
ZXI6OnN0ZXBPdmVyU3RhdGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2Vy
dmVyOjpzdGVwT3V0T2ZGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1Nl
cnZlcjo6Y3VycmVudENhbGxGcmFtZVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERl
YnVnU2VydmVyOjpjdXJyZW50Q2FsbEZyYW1lVjgpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
RGVidWdTZXJ2ZXI6Om9uVjhEZWJ1Z01lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
RGVidWdTZXJ2ZXI6Om9uVjhEZWJ1Z0hvc3REaXNwYXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JpcHREZWJ1Z1NlcnZlcjo6aGFuZGxlVjhEZWJ1Z0hvc3REaXNwYXRjaCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6aGFuZGxlVjhEZWJ1Z01lc3NhZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRGlkUGFyc2VTb3VyY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmVuc3VyZURlYnVnZ2VyU2NyaXB0
Q29tcGlsZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmRpZFJlc3Vt
ZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpwYXVzZU9uRXhjZXB0aW9uc1N0YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpzZXRQYXVzZU9uRXhjZXB0aW9uc1N0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpzZXRNZXNzYWdlTG9v
cERpc3BhdGNoSGFuZGxlcik6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5qZWN0
ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0
SG9zdDo6Y3JlYXRlSW5qZWN0ZWRTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6VjhJbmplY3Rl
ZFNjcmlwdEhvc3Q6OmN1cnJlbnRDYWxsRnJhbWVDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpWOEluamVjdGVkU2NyaXB0SG9zdDo6aXNBY3RpdmF0aW9uQ2FsbGJhY2spOgorICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHQuanM6CisgICAgICAgIChpbmplY3Rl
ZFNjcmlwdENvbnN0cnVjdG9yKToKKyAgICAgICAgKGluamVjdGVkU2NyaXB0Q29uc3RydWN0b3Iu
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qczoKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwpOgorCiAyMDEwLTA0LTE1ICBHeXV5b3VuZyBL
aW0gIDxneXV5b3VuZy5raW1Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJp
YyBTZWlkZWwuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3Jp
cHRIb3N0Q3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhv
c3RDdXN0b20uY3BwCmluZGV4IGY4NDg3ODMuLjI1Y2YyM2YgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCkBAIC05NSw2ICs5NSw3
IEBAIFNjcmlwdE9iamVjdCBJbmplY3RlZFNjcmlwdEhvc3Q6OmNyZWF0ZUluamVjdGVkU2NyaXB0
KGNvbnN0IFN0cmluZyYgc291cmNlLCBTY3JpCiAgICAgYXJncy5hcHBlbmQodG9KUyhzY3JpcHRT
dGF0ZSwgZ2xvYmFsT2JqZWN0LCB0aGlzKSk7CiAgICAgYXJncy5hcHBlbmQoZ2xvYmFsVGhpc1Zh
bHVlKTsKICAgICBhcmdzLmFwcGVuZChqc051bWJlcihzY3JpcHRTdGF0ZSwgaWQpKTsKKyAgICBh
cmdzLmFwcGVuZChqc1N0cmluZyhzY3JpcHRTdGF0ZSwgU3RyaW5nKCJKU0MiKSkpOwogICAgIEpT
VmFsdWUgcmVzdWx0ID0gSlNDOjpjYWxsKHNjcmlwdFN0YXRlLCBmdW5jdGlvblZhbHVlLCBjYWxs
VHlwZSwgY2FsbERhdGEsIGdsb2JhbFRoaXNWYWx1ZSwgYXJncyk7CiAgICAgaWYgKHJlc3VsdC5p
c09iamVjdCgpKQogICAgICAgICByZXR1cm4gU2NyaXB0T2JqZWN0KHNjcmlwdFN0YXRlLCByZXN1
bHQuZ2V0T2JqZWN0KCkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRE
ZWJ1Z1NlcnZlci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmNw
cAppbmRleCA4NzYzMmVlLi4xNTQ5NGE4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1NjcmlwdERlYnVnU2VydmVyLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERl
YnVnU2VydmVyLmNwcApAQCAtMzMsMjEgKzMzLDMxMyBAQAogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJ
UFRfREVCVUdHRVIpCiAKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNp
bmNsdWRlICJTY3JpcHREZWJ1Z0xpc3RlbmVyLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisj
aW5jbHVkZSAiVjhET01XaW5kb3cuaCIKKyNpbmNsdWRlICJWOFByb3h5LmgiCiAjaW5jbHVkZSA8
djgtZGVidWcuaD4KLQogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiB2ODo6UGVyc2lzdGVudDx2ODo6Q29udGV4dD4gU2NyaXB0RGVidWdTZXJ2
ZXI6OnNfdXRpbGl0eUNvbnRleHQ7CiAKK1NjcmlwdERlYnVnU2VydmVyOjpNZXNzYWdlTG9vcERp
c3BhdGNoSGFuZGxlciBTY3JpcHREZWJ1Z1NlcnZlcjo6c19tZXNzYWdlTG9vcERpc3BhdGNoSGFu
ZGxlciA9IDA7CisKIFNjcmlwdERlYnVnU2VydmVyJiBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVk
KCkKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFNjcmlwdERlYnVnU2VydmVyLCBzZXJ2ZXIs
ICgpKTsKICAgICByZXR1cm4gc2VydmVyOwogfQogCitTY3JpcHREZWJ1Z1NlcnZlcjo6U2NyaXB0
RGVidWdTZXJ2ZXIoKQorICAgIDogbV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlKERvbnRQYXVzZU9u
RXhjZXB0aW9ucykKKyAgICAsIG1fY3VycmVudENhbGxGcmFtZVN0YXRlKDApCit7Cit9CisKK3Zv
aWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnNldERlYnVnZ2VyU2NyaXB0U291cmNlKGNvbnN0IFN0cmlu
ZyYgc2NyaXB0U291cmNlKQoreworICAgIG1fZGVidWdnZXJTY3JpcHRTb3VyY2UgPSBzY3JpcHRT
b3VyY2U7Cit9CisKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmFkZExpc3RlbmVyKFNjcmlwdERl
YnVnTGlzdGVuZXIqIGxpc3RlbmVyLCBQYWdlKiBwYWdlKQoreworI2lmIEVOQUJMRShWOF9TQ1JJ
UFRfREVCVUdfU0VSVkVSKQorICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKKyAgICB2ODo6TG9j
YWw8djg6OkNvbnRleHQ+IGRlYnVnZ2VyQ29udGV4dCA9IHY4OjpEZWJ1Zzo6R2V0RGVidWdDb250
ZXh0KCk7CisgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRTY29wZShkZWJ1Z2dlckNvbnRl
eHQpOworCisgICAgaWYgKCFtX2xpc3RlbmVyc01hcC5zaXplKCkpIHsKKyAgICAgICAgZW5zdXJl
RGVidWdnZXJTY3JpcHRDb21waWxlZCgpOworICAgICAgICBBU1NFUlQoIW1fZGVidWdnZXJTY3Jp
cHQtPklzVW5kZWZpbmVkKCkpOworICAgICAgICB2ODo6RGVidWc6OlNldE1lc3NhZ2VIYW5kbGVy
MigmU2NyaXB0RGVidWdTZXJ2ZXI6Om9uVjhEZWJ1Z01lc3NhZ2UpOworICAgICAgICB2ODo6RGVi
dWc6OlNldEhvc3REaXNwYXRjaEhhbmRsZXIoJlNjcmlwdERlYnVnU2VydmVyOjpvblY4RGVidWdI
b3N0RGlzcGF0Y2gsIDEwMCAvKiBtcyAqLyk7CisgICAgfQorICAgIG1fbGlzdGVuZXJzTWFwLnNl
dChwYWdlLCBsaXN0ZW5lcik7CisgICAgVjhQcm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2
ZShwYWdlLT5tYWluRnJhbWUoKSk7CisgICAgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjb250ZXh0
ID0gcHJveHktPm1haW5Xb3JsZENvbnRleHQoKTsKKyAgICBTdHJpbmcgY29udGV4dERhdGEgPSB0
b1dlYkNvcmVTdHJpbmdXaXRoTnVsbENoZWNrKGNvbnRleHQtPkdldERhdGEoKSk7CisgICAgbV9j
b250ZXh0RGF0YU1hcC5zZXQobGlzdGVuZXIsIGNvbnRleHREYXRhKTsKKworICAgIHY4OjpIYW5k
bGU8djg6OkZ1bmN0aW9uPiBnZXRTY3JpcHRzRnVuY3Rpb24gPSB2ODo6TG9jYWw8djg6OkZ1bmN0
aW9uPjo6Q2FzdChtX2RlYnVnZ2VyU2NyaXB0LT5HZXQodjg6OlN0cmluZzo6TmV3KCJnZXRTY3Jp
cHRzIikpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUgPSB2ODo6RGVidWc6OkNh
bGwoZ2V0U2NyaXB0c0Z1bmN0aW9uKTsKKyAgICBpZiAodmFsdWUuSXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm47CisgICAgQVNTRVJUKCF2YWx1ZS0+SXNVbmRlZmluZWQoKSAmJiB2YWx1ZS0+SXNB
cnJheSgpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpBcnJheT4gc2NyaXB0c0FycmF5ID0gdjg6Okhh
bmRsZTx2ODo6QXJyYXk+OjpDYXN0KHZhbHVlKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc2NyaXB0c0FycmF5LT5MZW5ndGgoKTsgKytpKQorICAgICAgICBkaXNwYXRjaERpZFBhcnNl
U291cmNlKGxpc3RlbmVyLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHNjcmlwdHNBcnJh
eS0+R2V0KHY4OjpJbnRlZ2VyOjpOZXcoaSkpKSk7CisjZW5kaWYKK30KKwordm9pZCBTY3JpcHRE
ZWJ1Z1NlcnZlcjo6cmVtb3ZlTGlzdGVuZXIoU2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIs
IFBhZ2UqIHBhZ2UpCit7CisgICAgaWYgKCFtX2xpc3RlbmVyc01hcC5jb250YWlucyhwYWdlKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9saXN0ZW5lcnNNYXAucmVtb3ZlKHBhZ2UpOworCisg
ICAgaWYgKG1fbGlzdGVuZXJzTWFwLmlzRW1wdHkoKSkgeworICAgICAgICB2ODo6RGVidWc6OlNl
dE1lc3NhZ2VIYW5kbGVyMigwKTsKKyAgICAgICAgdjg6OkRlYnVnOjpTZXRIb3N0RGlzcGF0Y2hI
YW5kbGVyKDApOworICAgIH0KKyAgICAvLyBGSVhNRTogUmVtb3ZlIGFsbCBicmVha3BvaW50cyBz
ZXQgYnkgdGhlIGFnZW50LgorICAgIC8vIEZJWE1FOiBGb3JjZSBjb250aW51ZSBpZiBkZXRhY2gg
aGFwcGVuZWQgaW4gbmVzc3RlZCBtZXNzYWdlIGxvb3Agd2hpbGUKKyAgICAvLyBkZWJ1Z2dlciB3
YXMgcGF1c2VkIG9uIGEgYnJlYWtwb2ludChhcyBsb25nIGFzIHRoZXJlIGFyZSBvdGhlcgorICAg
IC8vIGF0dGFjaGVkIGFnZW50cyB2OCB3aWxsIHdhaXQgZm9yIGV4cGxpY2l0J2NvbnRpbnVlJyBt
ZXNzYWdlKS4KKyAgICAvLyBGSVhNRTogc2VuZCBjb250aW51ZSBjb21tYW5kIHRvIHY4IGlmIG5l
Y2Vzc2FyeTsKK30KKwordm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0QnJlYWtwb2ludChjb25z
dCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBTY3JpcHRCcmVha3BvaW50
IGJyZWFrcG9pbnQpCit7CisjaWYgRU5BQkxFKFY4X1NDUklQVF9ERUJVR19TRVJWRVIpCisgICAg
djg6OkhhbmRsZVNjb3BlIHNjb3BlOworICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gZGVidWdn
ZXJDb250ZXh0ID0gdjg6OkRlYnVnOjpHZXREZWJ1Z0NvbnRleHQoKTsKKyAgICB2ODo6Q29udGV4
dDo6U2NvcGUgY29udGV4dFNjb3BlKGRlYnVnZ2VyQ29udGV4dCk7CisKKyAgICB2ODo6TG9jYWw8
djg6Ok9iamVjdD4gYXJncyA9IHY4OjpPYmplY3Q6Ok5ldygpOworICAgIGFyZ3MtPlNldCh2ODo6
U3RyaW5nOjpOZXcoInNjcmlwdElkIiksIHY4U3RyaW5nKHNvdXJjZUlEKSk7CisgICAgYXJncy0+
U2V0KHY4OjpTdHJpbmc6Ok5ldygibGluZU51bWJlciIpLCB2ODo6SW50ZWdlcjo6TmV3KGxpbmVO
dW1iZXIpKTsKKyAgICBhcmdzLT5TZXQodjg6OlN0cmluZzo6TmV3KCJjb25kaXRpb24iKSwgdjhT
dHJpbmcoYnJlYWtwb2ludC5jb25kaXRpb24pKTsKKyAgICBhcmdzLT5TZXQodjg6OlN0cmluZzo6
TmV3KCJlbmFibGVkIiksIHY4OjpCb29sZWFuOjpOZXcoYnJlYWtwb2ludC5lbmFibGVkKSk7CisK
KyAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gc2V0QnJlYWtwb2ludEZ1bmN0aW9uID0gdjg6
OkxvY2FsPHY4OjpGdW5jdGlvbj46OkNhc3QobV9kZWJ1Z2dlclNjcmlwdC0+R2V0KHY4OjpTdHJp
bmc6Ok5ldygic2V0QnJlYWtwb2ludCIpKSk7CisgICAgdjg6OkRlYnVnOjpDYWxsKHNldEJyZWFr
cG9pbnRGdW5jdGlvbiwgYXJncyk7CisjZW5kaWYKK30KKwordm9pZCBTY3JpcHREZWJ1Z1NlcnZl
cjo6cmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5l
TnVtYmVyKQoreworI2lmIEVOQUJMRShWOF9TQ1JJUFRfREVCVUdfU0VSVkVSKQorICAgIHY4OjpI
YW5kbGVTY29wZSBzY29wZTsKKyAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGRlYnVnZ2VyQ29u
dGV4dCA9IHY4OjpEZWJ1Zzo6R2V0RGVidWdDb250ZXh0KCk7CisgICAgdjg6OkNvbnRleHQ6OlNj
b3BlIGNvbnRleHRTY29wZShkZWJ1Z2dlckNvbnRleHQpOworCisgICAgdjg6OkxvY2FsPHY4OjpP
YmplY3Q+IGFyZ3MgPSB2ODo6T2JqZWN0OjpOZXcoKTsKKyAgICBhcmdzLT5TZXQodjg6OlN0cmlu
Zzo6TmV3KCJzY3JpcHRJZCIpLCB2OFN0cmluZyhzb3VyY2VJRCkpOworICAgIGFyZ3MtPlNldCh2
ODo6U3RyaW5nOjpOZXcoImxpbmVOdW1iZXIiKSwgdjg6OkludGVnZXI6Ok5ldyhsaW5lTnVtYmVy
KSk7CisKKyAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gcmVtb3ZlQnJlYWtwb2ludEZ1bmN0
aW9uID0gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj46OkNhc3QobV9kZWJ1Z2dlclNjcmlwdC0+R2V0
KHY4OjpTdHJpbmc6Ok5ldygicmVtb3ZlQnJlYWtwb2ludCIpKSk7CisgICAgdjg6OkRlYnVnOjpD
YWxsKHJlbW92ZUJyZWFrcG9pbnRGdW5jdGlvbiwgYXJncyk7CisjZW5kaWYKK30KKwordm9pZCBT
Y3JpcHREZWJ1Z1NlcnZlcjo6Y2xlYXJCcmVha3BvaW50cygpCit7CisjaWYgRU5BQkxFKFY4X1ND
UklQVF9ERUJVR19TRVJWRVIpCisgICAgZW5zdXJlRGVidWdnZXJTY3JpcHRDb21waWxlZCgpOwor
ICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKKyAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGRl
YnVnZ2VyQ29udGV4dCA9IHY4OjpEZWJ1Zzo6R2V0RGVidWdDb250ZXh0KCk7CisgICAgdjg6OkNv
bnRleHQ6OlNjb3BlIGNvbnRleHRTY29wZShkZWJ1Z2dlckNvbnRleHQpOworCisgICAgdjg6Okhh
bmRsZTx2ODo6RnVuY3Rpb24+IHNldEJyZWFrcG9pbnRzQWN0aXZhdGVkID0gdjg6OkxvY2FsPHY4
OjpGdW5jdGlvbj46OkNhc3QobV9kZWJ1Z2dlclNjcmlwdC0+R2V0KHY4OjpTdHJpbmc6Ok5ldygi
Y2xlYXJCcmVha3BvaW50cyIpKSk7CisgICAgdjg6OkRlYnVnOjpDYWxsKHNldEJyZWFrcG9pbnRz
QWN0aXZhdGVkKTsKKyNlbmRpZgorfQorCit2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpzZXRCcmVh
a3BvaW50c0FjdGl2YXRlZChib29sIGVuYWJsZWQpCit7CisjaWYgRU5BQkxFKFY4X1NDUklQVF9E
RUJVR19TRVJWRVIpCisgICAgZW5zdXJlRGVidWdnZXJTY3JpcHRDb21waWxlZCgpOworICAgIHY4
OjpIYW5kbGVTY29wZSBzY29wZTsKKyAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGRlYnVnZ2Vy
Q29udGV4dCA9IHY4OjpEZWJ1Zzo6R2V0RGVidWdDb250ZXh0KCk7CisgICAgdjg6OkNvbnRleHQ6
OlNjb3BlIGNvbnRleHRTY29wZShkZWJ1Z2dlckNvbnRleHQpOworCisgICAgdjg6OkxvY2FsPHY4
OjpPYmplY3Q+IGFyZ3MgPSB2ODo6T2JqZWN0OjpOZXcoKTsKKyAgICBhcmdzLT5TZXQodjg6OlN0
cmluZzo6TmV3KCJlbmFibGVkIiksIHY4OjpCb29sZWFuOjpOZXcoZW5hYmxlZCkpOworICAgIHY4
OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBzZXRCcmVha3BvaW50c0FjdGl2YXRlZCA9IHY4OjpMb2Nh
bDx2ODo6RnVuY3Rpb24+OjpDYXN0KG1fZGVidWdnZXJTY3JpcHQtPkdldCh2ODo6U3RyaW5nOjpO
ZXcoInNldEJyZWFrcG9pbnRzQWN0aXZhdGVkIikpKTsKKyAgICB2ODo6RGVidWc6OkNhbGwoc2V0
QnJlYWtwb2ludHNBY3RpdmF0ZWQsIGFyZ3MpOworI2VuZGlmCit9CisKK3ZvaWQgU2NyaXB0RGVi
dWdTZXJ2ZXI6OmNvbnRpbnVlUHJvZ3JhbSgpCit7CisjaWYgRU5BQkxFKFY4X1NDUklQVF9ERUJV
R19TRVJWRVIpCisgICAgU3RyaW5nIGNtZCgie1wic2VxXCI6MSxcInR5cGVcIjpcInJlcXVlc3Rc
IixcImNvbW1hbmRcIjpcImNvbnRpbnVlXCJ9Iik7CisgICAgdjg6OkRlYnVnOjpTZW5kQ29tbWFu
ZChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQxNl90Kj4oY21kLmNoYXJhY3RlcnMoKSksIGNt
ZC5sZW5ndGgoKSwgbmV3IHY4OjpEZWJ1Zzo6Q2xpZW50RGF0YSgpKTsKKyAgICBkaWRSZXN1bWUo
KTsKKyNlbmRpZgorfQorCit2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpzdGVwSW50b1N0YXRlbWVu
dCgpCit7CisjaWYgRU5BQkxFKFY4X1NDUklQVF9ERUJVR19TRVJWRVIpCisgICAgU3RyaW5nIGNt
ZCgie1wic2VxXCI6MSxcInR5cGVcIjpcInJlcXVlc3RcIixcImNvbW1hbmRcIjpcImNvbnRpbnVl
XCIsXCJhcmd1bWVudHNcIjp7XCJzdGVwYWN0aW9uXCI6XCJpblwifX0iKTsKKyAgICB2ODo6RGVi
dWc6OlNlbmRDb21tYW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDE2X3QqPihjbWQuY2hh
cmFjdGVycygpKSwgY21kLmxlbmd0aCgpLCBuZXcgdjg6OkRlYnVnOjpDbGllbnREYXRhKCkpOwor
ICAgIGRpZFJlc3VtZSgpOworI2VuZGlmCit9CisKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnN0
ZXBPdmVyU3RhdGVtZW50KCkKK3sKKyNpZiBFTkFCTEUoVjhfU0NSSVBUX0RFQlVHX1NFUlZFUikK
KyAgICBTdHJpbmcgY21kKCJ7XCJzZXFcIjoxLFwidHlwZVwiOlwicmVxdWVzdFwiLFwiY29tbWFu
ZFwiOlwiY29udGludWVcIixcImFyZ3VtZW50c1wiOntcInN0ZXBhY3Rpb25cIjpcIm5leHRcIn19
Iik7CisgICAgdjg6OkRlYnVnOjpTZW5kQ29tbWFuZChyZWludGVycHJldF9jYXN0PGNvbnN0IHVp
bnQxNl90Kj4oY21kLmNoYXJhY3RlcnMoKSksIGNtZC5sZW5ndGgoKSwgbmV3IHY4OjpEZWJ1Zzo6
Q2xpZW50RGF0YSgpKTsKKyAgICBkaWRSZXN1bWUoKTsKKyNlbmRpZgorfQorCit2b2lkIFNjcmlw
dERlYnVnU2VydmVyOjpzdGVwT3V0T2ZGdW5jdGlvbigpCit7CisjaWYgRU5BQkxFKFY4X1NDUklQ
VF9ERUJVR19TRVJWRVIpCisgICAgU3RyaW5nIGNtZCgie1wic2VxXCI6MSxcInR5cGVcIjpcInJl
cXVlc3RcIixcImNvbW1hbmRcIjpcImNvbnRpbnVlXCIsXCJhcmd1bWVudHNcIjp7XCJzdGVwYWN0
aW9uXCI6XCJvdXRcIn19Iik7CisgICAgdjg6OkRlYnVnOjpTZW5kQ29tbWFuZChyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQxNl90Kj4oY21kLmNoYXJhY3RlcnMoKSksIGNtZC5sZW5ndGgoKSwg
bmV3IHY4OjpEZWJ1Zzo6Q2xpZW50RGF0YSgpKTsKKyAgICBkaWRSZXN1bWUoKTsKKyNlbmRpZgor
fQorCitTY3JpcHRTdGF0ZSogU2NyaXB0RGVidWdTZXJ2ZXI6OmN1cnJlbnRDYWxsRnJhbWVTdGF0
ZSgpCit7CisgICAgcmV0dXJuIG1fY3VycmVudENhbGxGcmFtZVN0YXRlOworfQorCit2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gU2NyaXB0RGVidWdTZXJ2ZXI6OmN1cnJlbnRDYWxsRnJhbWVWOCgpCit7
CisjaWYgRU5BQkxFKFY4X1NDUklQVF9ERUJVR19TRVJWRVIpCisgICAgaWYgKCFtX2N1cnJlbnRD
YWxsRnJhbWUuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbV9jdXJyZW50Q2FsbEZyYW1lOwor
CisgICAgLy8gQ2hlY2sgb24gYSBicC4KKyAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gY3Vy
cmVudENhbGxGcmFtZUZ1bmN0aW9uID0gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj46OkNhc3QobV9k
ZWJ1Z2dlclNjcmlwdC0+R2V0KHY4OjpTdHJpbmc6Ok5ldygiY3VycmVudENhbGxGcmFtZSIpKSk7
CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFyZ3ZbXSA9IHsgbV9leGVjdXRpb25TdGF0ZSB9
OworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZXN1bHQgPSBjdXJyZW50Q2FsbEZyYW1lRnVu
Y3Rpb24tPkNhbGwobV9kZWJ1Z2dlclNjcmlwdCwgMSwgYXJndik7CisgICAgbV9jdXJyZW50Q2Fs
bEZyYW1lID0gdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPjo6TmV3KHJlc3VsdCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOwor
I2VuZGlmCit9CisKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6Om9uVjhEZWJ1Z01lc3NhZ2UoY29u
c3Qgdjg6OkRlYnVnOjpNZXNzYWdlJiBtZXNzYWdlKQoreworICAgIFNjcmlwdERlYnVnU2VydmVy
OjpzaGFyZWQoKS5oYW5kbGVWOERlYnVnTWVzc2FnZShtZXNzYWdlKTsKK30KKwordm9pZCBTY3Jp
cHREZWJ1Z1NlcnZlcjo6b25WOERlYnVnSG9zdERpc3BhdGNoKCkKK3sKKyAgICBTY3JpcHREZWJ1
Z1NlcnZlcjo6c2hhcmVkKCkuaGFuZGxlVjhEZWJ1Z0hvc3REaXNwYXRjaCgpOworfQorCit2b2lk
IFNjcmlwdERlYnVnU2VydmVyOjpoYW5kbGVWOERlYnVnSG9zdERpc3BhdGNoKCkKK3sKKyAgICBp
ZiAoIXNfbWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAg
IFZlY3RvcjxXZWJDb3JlOjpQYWdlKj4gcGFnZXM7CisgICAgZm9yIChMaXN0ZW5lcnNNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9saXN0ZW5lcnNNYXAuYmVnaW4oKTsgaXQgIT0gbV9saXN0ZW5lcnNNYXAu
ZW5kKCk7ICsraXQpCisgICAgICAgIHBhZ2VzLmFwcGVuZChpdC0+Zmlyc3QpOworICAgIAorICAg
IHNfbWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIocGFnZXMpOworfQorCit2b2lkIFNjcmlwdERl
YnVnU2VydmVyOjpoYW5kbGVWOERlYnVnTWVzc2FnZShjb25zdCB2ODo6RGVidWc6Ok1lc3NhZ2Um
IG1lc3NhZ2UpCit7CisgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOworCisgICAgaWYgKCFtZXNz
YWdlLklzRXZlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSWdub3JlIHVuc3VwcG9y
dGVkIGV2ZW50IHR5cGVzLgorICAgIGlmIChtZXNzYWdlLkdldEV2ZW50KCkgIT0gdjg6OkFmdGVy
Q29tcGlsZSAmJiBtZXNzYWdlLkdldEV2ZW50KCkgIT0gdjg6OkJyZWFrKQorICAgICAgICByZXR1
cm47CisKKyAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gbWVzc2FnZS5HZXRF
dmVudENvbnRleHQoKTsKKyAgICAvLyBJZiB0aGUgY29udGV4dCBpcyBmcm9tIG9uZSBvZiB0aGUg
aW5wZWN0ZWQgdGFicyBpdCBzaG91bGQgaGF2ZSBpdHMgY29udGV4dAorICAgIC8vIGRhdGEuIFNr
aXAgZXZlbnRzIGZyb20gdW5rbm93biBjb250ZXh0cy4KKyAgICBpZiAoY29udGV4dC5Jc0VtcHR5
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRlc3QgdGhhdCBjb250ZXh0IGhhcyBhc3Nv
Y2lhdGVkIGdsb2JhbCBkb20gd2luZG93IG9iamVjdC4KKyAgICB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IGdsb2JhbCA9IGNvbnRleHQtPkdsb2JhbCgpOworICAgIGlmIChnbG9iYWwuSXNFbXB0eSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBnbG9iYWwgPSBWOERPTVdyYXBwZXI6Omxvb2t1cERP
TVdyYXBwZXIoVjhET01XaW5kb3c6OkdldFRlbXBsYXRlKCksIGdsb2JhbCk7CisgICAgaWYgKGds
b2JhbC5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEZyYW1lKiBmcmFtZSA9IFY4
UHJveHk6OnJldHJpZXZlRnJhbWUoY29udGV4dCk7CisgICAgaWYgKGZyYW1lKSB7CisgICAgICAg
IFNjcmlwdERlYnVnTGlzdGVuZXIqIGxpc3RlbmVyID0gbV9saXN0ZW5lcnNNYXAuZ2V0KGZyYW1l
LT5wYWdlKCkpOworICAgICAgICBpZiAobGlzdGVuZXIpIHsKKyAgICAgICAgICAgIGlmIChtZXNz
YWdlLkdldEV2ZW50KCkgPT0gdjg6OkFmdGVyQ29tcGlsZSkgeworICAgICAgICAgICAgICAgIHY4
OjpDb250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUodjg6OkRlYnVnOjpHZXREZWJ1Z0NvbnRleHQo
KSk7CisgICAgICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGFyZ3MgPSB2ODo6T2Jq
ZWN0OjpOZXcoKTsKKyAgICAgICAgICAgICAgICBhcmdzLT5TZXQodjg6OlN0cmluZzo6TmV3KCJl
dmVudERhdGEiKSwgbWVzc2FnZS5HZXRFdmVudERhdGEoKSk7CisgICAgICAgICAgICAgICAgdjg6
OkhhbmRsZTx2ODo6RnVuY3Rpb24+IG9uQWZ0ZXJDb21waWxlRnVuY3Rpb24gPSB2ODo6TG9jYWw8
djg6OkZ1bmN0aW9uPjo6Q2FzdChtX2RlYnVnZ2VyU2NyaXB0LT5HZXQodjg6OlN0cmluZzo6TmV3
KCJnZXRBZnRlckNvbXBpbGVTY3JpcHQiKSkpOworICAgICAgICAgICAgICAgIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBhcmd2W10gPSB7IG1lc3NhZ2UuR2V0RXhlY3V0aW9uU3RhdGUoKSwgYXJncyB9
OworICAgICAgICAgICAgICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSA9IG9uQWZ0ZXJD
b21waWxlRnVuY3Rpb24tPkNhbGwobV9kZWJ1Z2dlclNjcmlwdCwgMiwgYXJndik7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKHZhbHVlLT5Jc09iamVjdCgpKTsKKyAgICAgICAgICAgICAgICB2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3Qo
dmFsdWUpOworICAgICAgICAgICAgICAgIGRpc3BhdGNoRGlkUGFyc2VTb3VyY2UobGlzdGVuZXIs
IG9iamVjdCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UuR2V0RXZlbnQoKSA9PSB2
ODo6QnJlYWspIHsKKyAgICAgICAgICAgICAgICBtX2V4ZWN1dGlvblN0YXRlID0gdjg6OlBlcnNp
c3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhtZXNzYWdlLkdldEV4ZWN1dGlvblN0YXRlKCkpOworICAg
ICAgICAgICAgICAgIG1fY3VycmVudENhbGxGcmFtZVN0YXRlID0gbWFpbldvcmxkU2NyaXB0U3Rh
dGUoZnJhbWUpOworICAgICAgICAgICAgICAgIGxpc3RlbmVyLT5kaWRQYXVzZSgpOworICAgICAg
ICAgICAgICAgIG1fY3VycmVudENhbGxGcmFtZVN0YXRlID0gMDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KK30KKwordm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlzcGF0Y2hEaWRQ
YXJzZVNvdXJjZShTY3JpcHREZWJ1Z0xpc3RlbmVyKiBsaXN0ZW5lciwgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBvYmplY3QpCit7CisgICAgU3RyaW5nIGNvbnRleHREYXRhID0gdG9XZWJDb3JlU3Ry
aW5nV2l0aE51bGxDaGVjayhvYmplY3QtPkdldCh2ODo6U3RyaW5nOjpOZXcoImNvbnRleHREYXRh
IikpKTsKKyAgICBpZiAoY29udGV4dERhdGEgIT0gbV9jb250ZXh0RGF0YU1hcC5nZXQobGlzdGVu
ZXIpKQorICAgICAgICByZXR1cm47CisKKyAgICBsaXN0ZW5lci0+ZGlkUGFyc2VTb3VyY2UoCisg
ICAgICAgIHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2sob2JqZWN0LT5HZXQodjg6OlN0cmlu
Zzo6TmV3KCJpZCIpKSksCisgICAgICAgIHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2sob2Jq
ZWN0LT5HZXQodjg6OlN0cmluZzo6TmV3KCJuYW1lIikpKSwKKyAgICAgICAgdG9XZWJDb3JlU3Ry
aW5nV2l0aE51bGxDaGVjayhvYmplY3QtPkdldCh2ODo6U3RyaW5nOjpOZXcoInNvdXJjZSIpKSks
CisgICAgICAgIG9iamVjdC0+R2V0KHY4OjpTdHJpbmc6Ok5ldygibGluZU9mZnNldCIpKS0+VG9J
bnRlZ2VyKCktPlZhbHVlKCkpOworfQorCit2b2lkIFNjcmlwdERlYnVnU2VydmVyOjplbnN1cmVE
ZWJ1Z2dlclNjcmlwdENvbXBpbGVkKCkKK3sKKyAgICBpZiAobV9kZWJ1Z2dlclNjcmlwdC5Jc0Vt
cHR5KCkpIHsKKyAgICAgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOworICAgICAgICB2ODo6TG9j
YWw8djg6OkNvbnRleHQ+IGRlYnVnZ2VyQ29udGV4dCA9IHY4OjpEZWJ1Zzo6R2V0RGVidWdDb250
ZXh0KCk7CisgICAgICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUoZGVidWdnZXJD
b250ZXh0KTsKKyAgICAgICAgbV9kZWJ1Z2dlclNjcmlwdCA9IHY4OjpQZXJzaXN0ZW50PHY4OjpP
YmplY3Q+OjpOZXcodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCh2ODo6U2NyaXB0OjpDb21w
aWxlKHY4U3RyaW5nKG1fZGVidWdnZXJTY3JpcHRTb3VyY2UpKS0+UnVuKCkpKTsKKyAgICB9Cit9
CisKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRpZFJlc3VtZSgpCit7CisgICAgaWYgKCFtX2N1
cnJlbnRDYWxsRnJhbWUuSXNFbXB0eSgpKSB7CisgICAgICAgIG1fY3VycmVudENhbGxGcmFtZS5E
aXNwb3NlKCk7CisgICAgICAgIG1fY3VycmVudENhbGxGcmFtZS5DbGVhcigpOworICAgIH0KKyAg
ICBpZiAoIW1fZXhlY3V0aW9uU3RhdGUuSXNFbXB0eSgpKSB7CisgICAgICAgIG1fZXhlY3V0aW9u
U3RhdGUuRGlzcG9zZSgpOworICAgICAgICBtX2V4ZWN1dGlvblN0YXRlLkNsZWFyKCk7CisgICAg
fQorfQorCiAvLyBDcmVhdGUgdGhlIHV0aWxpdHkgY29udGV4dCBmb3IgaG9sZGluZyBKYXZhU2Ny
aXB0IGZ1bmN0aW9ucyB1c2VkIGludGVybmFsbHkKIC8vIHdoaWNoIGFyZSBub3QgdmlzaWJsZSB0
byBKYXZhU2NyaXB0IGV4ZWN1dGluZyBvbiB0aGUgcGFnZS4KIHZvaWQgU2NyaXB0RGVidWdTZXJ2
ZXI6OmNyZWF0ZVV0aWxpdHlDb250ZXh0KCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mv
djgvU2NyaXB0RGVidWdTZXJ2ZXIuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RGVidWdT
ZXJ2ZXIuaAppbmRleCAzZGU3YzIzLi4xOGZmZjcxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3Jp
cHREZWJ1Z1NlcnZlci5oCkBAIC0zNywxMSArMzcsMTMgQEAKICNpbmNsdWRlICJTY3JpcHRCcmVh
a3BvaW50LmgiCiAjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKICNpbmNsdWRlICJUaW1lci5oIgor
I2luY2x1ZGUgInY4LWRlYnVnLmgiCiAKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBQYWdlOwogY2xhc3MgU2NyaXB0RGVidWdMaXN0
ZW5lcjsKIAogY2xhc3MgU2NyaXB0RGVidWdTZXJ2ZXIgOiBwdWJsaWMgTm9uY29weWFibGUgewpA
QCAtNTcsMzkgKzU5LDU4IEBAIHB1YmxpYzoKICAgICAvLyBvZiBzdWNoIGV4Y2VwdGlvbiBpcyB1
cCB0byB0aGUgY2FsbGVyLgogICAgIHN0YXRpYyBib29sIHRvcFN0YWNrRnJhbWUoU3RyaW5nJiBz
b3VyY2VOYW1lLCBpbnQmIGxpbmVOdW1iZXIsIFN0cmluZyYgZnVuY3Rpb25OYW1lKTsKIAotICAg
IHZvaWQgYWRkTGlzdGVuZXIoU2NyaXB0RGVidWdMaXN0ZW5lciosIFBhZ2UqKSB7IH0KLSAgICB2
b2lkIHJlbW92ZUxpc3RlbmVyKFNjcmlwdERlYnVnTGlzdGVuZXIqLCBQYWdlKikgeyB9CisgICAg
dm9pZCBhZGRMaXN0ZW5lcihTY3JpcHREZWJ1Z0xpc3RlbmVyKiwgUGFnZSopOworICAgIHZvaWQg
cmVtb3ZlTGlzdGVuZXIoU2NyaXB0RGVidWdMaXN0ZW5lciosIFBhZ2UqKTsKIAotICAgIHZvaWQg
c2V0QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVy
LCBTY3JpcHRCcmVha3BvaW50IGJyZWFrcG9pbnQpIHsgfQotICAgIHZvaWQgcmVtb3ZlQnJlYWtw
b2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyKSB7IH0KLSAg
ICB2b2lkIGNsZWFyQnJlYWtwb2ludHMoKSB7IH0KLSAgICB2b2lkIHNldEJyZWFrcG9pbnRzQWN0
aXZhdGVkKGJvb2wgYWN0aXZhdGVkKSB7IH0KKyAgICB2b2lkIHNldEJyZWFrcG9pbnQoY29uc3Qg
U3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlciwgU2NyaXB0QnJlYWtwb2ludCBi
cmVha3BvaW50KTsKKyAgICB2b2lkIHJlbW92ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3Vy
Y2VJRCwgdW5zaWduZWQgbGluZU51bWJlcik7CisgICAgdm9pZCBjbGVhckJyZWFrcG9pbnRzKCk7
CisgICAgdm9pZCBzZXRCcmVha3BvaW50c0FjdGl2YXRlZChib29sIGFjdGl2YXRlZCk7CiAKICAg
ICBlbnVtIFBhdXNlT25FeGNlcHRpb25zU3RhdGUgewogICAgICAgICBEb250UGF1c2VPbkV4Y2Vw
dGlvbnMsCiAgICAgICAgIFBhdXNlT25BbGxFeGNlcHRpb25zLAogICAgICAgICBQYXVzZU9uVW5j
YXVnaHRFeGNlcHRpb25zCiAgICAgfTsKLSAgICBQYXVzZU9uRXhjZXB0aW9uc1N0YXRlIHBhdXNl
T25FeGNlcHRpb25zU3RhdGUoKSBjb25zdCB7IHJldHVybiBEb250UGF1c2VPbkV4Y2VwdGlvbnM7
IH0KLSAgICB2b2lkIHNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUoUGF1c2VPbkV4Y2VwdGlvbnNT
dGF0ZSkgeyB9CisgICAgUGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSBwYXVzZU9uRXhjZXB0aW9uc1N0
YXRlKCkgY29uc3QgeyByZXR1cm4gbV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlOyB9CisgICAgdm9p
ZCBzZXRQYXVzZU9uRXhjZXB0aW9uc1N0YXRlKFBhdXNlT25FeGNlcHRpb25zU3RhdGUgcGF1c2VP
bkV4Y2VwdGlvbnNTdGF0ZSkgeyBtX3BhdXNlT25FeGNlcHRpb25zU3RhdGUgPSBwYXVzZU9uRXhj
ZXB0aW9uc1N0YXRlOyB9CiAKICAgICB2b2lkIHBhdXNlUHJvZ3JhbSgpIHsgfQotICAgIHZvaWQg
Y29udGludWVQcm9ncmFtKCkgeyB9Ci0gICAgdm9pZCBzdGVwSW50b1N0YXRlbWVudCgpIHsgfQot
ICAgIHZvaWQgc3RlcE92ZXJTdGF0ZW1lbnQoKSB7IH0KLSAgICB2b2lkIHN0ZXBPdXRPZkZ1bmN0
aW9uKCkgeyB9CisgICAgdm9pZCBjb250aW51ZVByb2dyYW0oKTsKKyAgICB2b2lkIHN0ZXBJbnRv
U3RhdGVtZW50KCk7CisgICAgdm9pZCBzdGVwT3ZlclN0YXRlbWVudCgpOworICAgIHZvaWQgc3Rl
cE91dE9mRnVuY3Rpb24oKTsKIAogICAgIHZvaWQgcmVjb21waWxlQWxsSlNGdW5jdGlvbnNTb29u
KCkgeyB9CiAgICAgdm9pZCByZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucyhUaW1lcjxTY3JpcHREZWJ1
Z1NlcnZlcj4qID0gMCkgeyB9CiAKLSAgICBTY3JpcHRTdGF0ZSogY3VycmVudENhbGxGcmFtZVN0
YXRlKCkgeyByZXR1cm4gMDsgfQorICAgIFNjcmlwdFN0YXRlKiBjdXJyZW50Q2FsbEZyYW1lU3Rh
dGUoKTsKIAogICAgIHZvaWQgcGFnZUNyZWF0ZWQoUGFnZSopIHsgfQogCisgICAgLy8gdjgtc3Bl
Y2lmaWMgbWV0aG9kcy4KKyAgICB2b2lkIHNldERlYnVnZ2VyU2NyaXB0U291cmNlKGNvbnN0IFN0
cmluZyYgc2NyaXB0U291cmNlKTsKKworICAgIHR5cGVkZWYgdm9pZCAoKk1lc3NhZ2VMb29wRGlz
cGF0Y2hIYW5kbGVyKShjb25zdCBWZWN0b3I8V2ViQ29yZTo6UGFnZSo+Jik7CisgICAgc3RhdGlj
IHZvaWQgc2V0TWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIoTWVzc2FnZUxvb3BEaXNwYXRjaEhh
bmRsZXIgbWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIpIHsgc19tZXNzYWdlTG9vcERpc3BhdGNo
SGFuZGxlciA9IG1lc3NhZ2VMb29wRGlzcGF0Y2hIYW5kbGVyOyB9CisKKyAgICB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gY3VycmVudENhbGxGcmFtZVY4KCk7CisKIHByaXZhdGU6Ci0gICAgU2NyaXB0
RGVidWdTZXJ2ZXIoKSB7IH0KKyAgICBTY3JpcHREZWJ1Z1NlcnZlcigpOwogICAgIH5TY3JpcHRE
ZWJ1Z1NlcnZlcigpIHsgfQogCisgICAgc3RhdGljIHZvaWQgb25WOERlYnVnTWVzc2FnZShjb25z
dCB2ODo6RGVidWc6Ok1lc3NhZ2UmIG1lc3NhZ2UpOworICAgIHN0YXRpYyB2b2lkIG9uVjhEZWJ1
Z0hvc3REaXNwYXRjaCgpOworCisgICAgdm9pZCBoYW5kbGVWOERlYnVnTWVzc2FnZShjb25zdCB2
ODo6RGVidWc6Ok1lc3NhZ2UmIG1lc3NhZ2UpOworICAgIHZvaWQgaGFuZGxlVjhEZWJ1Z0hvc3RE
aXNwYXRjaCgpOworCisgICAgdm9pZCBkaXNwYXRjaERpZFBhcnNlU291cmNlKFNjcmlwdERlYnVn
TGlzdGVuZXIqIGxpc3RlbmVyLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHNvdXJjZU9iamVjdCk7
CisgICAgCisgICAgdm9pZCBlbnN1cmVEZWJ1Z2dlclNjcmlwdENvbXBpbGVkKCk7CisgICAgdm9p
ZCBkaWRSZXN1bWUoKTsKKwogICAgIHN0YXRpYyB2b2lkIGNyZWF0ZVV0aWxpdHlDb250ZXh0KCk7
CiAKICAgICAvLyBSZXR1cm5zIGEgbG9jYWwgaGFuZGxlIG9mIHRoZSB1dGlsaXR5IGNvbnRleHQu
CkBAIC0xMDIsNiArMTIzLDE5IEBAIHByaXZhdGU6CiAKICAgICAvLyBVdGlsaXR5IGNvbnRleHQg
aG9sZGluZyBKYXZhU2NyaXB0IGZ1bmN0aW9ucyB1c2VkIGludGVybmFsbHkuCiAgICAgc3RhdGlj
IHY4OjpQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiBzX3V0aWxpdHlDb250ZXh0OworCisgICAgdHlw
ZWRlZiBIYXNoTWFwPFBhZ2UqLCBTY3JpcHREZWJ1Z0xpc3RlbmVyKj4gTGlzdGVuZXJzTWFwOwor
ICAgIExpc3RlbmVyc01hcCBtX2xpc3RlbmVyc01hcDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8U2Ny
aXB0RGVidWdMaXN0ZW5lciosIFN0cmluZz4gQ29udGV4dERhdGFNYXA7CisgICAgQ29udGV4dERh
dGFNYXAgbV9jb250ZXh0RGF0YU1hcDsKKyAgICBTdHJpbmcgbV9kZWJ1Z2dlclNjcmlwdFNvdXJj
ZTsKKyAgICBQYXVzZU9uRXhjZXB0aW9uc1N0YXRlIG1fcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZTsK
KyAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBtX2RlYnVnZ2VyU2NyaXB0OworICAgIFNj
cmlwdFN0YXRlKiBtX2N1cnJlbnRDYWxsRnJhbWVTdGF0ZTsKKyAgICB2ODo6UGVyc2lzdGVudDx2
ODo6VmFsdWU+IG1fY3VycmVudENhbGxGcmFtZTsKKyAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2Jq
ZWN0PiBtX2V4ZWN1dGlvblN0YXRlOworCisgICAgc3RhdGljIE1lc3NhZ2VMb29wRGlzcGF0Y2hI
YW5kbGVyIHNfbWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEluamVj
dGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOElu
amVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAKaW5kZXggNjAwNjNmMS4uMTU1NDMxYyAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbmplY3RlZFNjcmlwdEhvc3RDdXN0
b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5qZWN0ZWRTY3JpcHRI
b3N0Q3VzdG9tLmNwcApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRy
b2xsZXIuaCIKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUg
IlNjcmlwdERlYnVnU2VydmVyLmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgi
CiAKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKQEAgLTExMCw5ICsxMTEsMTAgQEAgU2NyaXB0T2Jq
ZWN0IEluamVjdGVkU2NyaXB0SG9zdDo6Y3JlYXRlSW5qZWN0ZWRTY3JpcHQoY29uc3QgU3RyaW5n
JiBzY3JpcHRTb3VyY2UKICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJnc1tdID0gewogICAg
ICAgc2NyaXB0SG9zdFdyYXBwZXIsCiAgICAgICB3aW5kb3dHbG9iYWwsCi0gICAgICB2ODo6TnVt
YmVyOjpOZXcoaWQpCisgICAgICB2ODo6TnVtYmVyOjpOZXcoaWQpLAorICAgICAgdjg6OlN0cmlu
Zzo6TmV3KCJ2OCIpCiAgICAgfTsKLSAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBpbmplY3RlZFNj
cmlwdFZhbHVlID0gdjg6OkZ1bmN0aW9uOjpDYXN0KCp2KS0+Q2FsbCh3aW5kb3dHbG9iYWwsIDMs
IGFyZ3MpOworICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGluamVjdGVkU2NyaXB0VmFsdWUgPSB2
ODo6RnVuY3Rpb246OkNhc3QoKnYpLT5DYWxsKHdpbmRvd0dsb2JhbCwgNCwgYXJncyk7CiAgICAg
djg6OkxvY2FsPHY4OjpPYmplY3Q+IGluamVjdGVkU2NyaXB0KHY4OjpPYmplY3Q6OkNhc3QoKmlu
amVjdGVkU2NyaXB0VmFsdWUpKTsKICAgICByZXR1cm4gU2NyaXB0T2JqZWN0KGluc3BlY3RlZFNj
cmlwdFN0YXRlLCBpbmplY3RlZFNjcmlwdCk7CiB9CkBAIC0xNTYsMTMgKzE1OCwxMyBAQCB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gVjhJbmplY3RlZFNjcmlwdEhvc3Q6OnB1c2hOb2RlUGF0aFRvRnJv
bnRlbmRDYWxsYmFjayhjb25zdAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SW5qZWN0ZWRTY3Jp
cHRIb3N0OjpjdXJyZW50Q2FsbEZyYW1lQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJn
cykKIHsKICAgICBJTkNfU1RBVFMoIkluamVjdGVkU2NyaXB0SG9zdC5jdXJyZW50Q2FsbEZyYW1l
KCkiKTsKLSAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIHJldHVybiBTY3JpcHREZWJ1
Z1NlcnZlcjo6c2hhcmVkKCkuY3VycmVudENhbGxGcmFtZVY4KCk7CiB9CiAKIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBWOEluamVjdGVkU2NyaXB0SG9zdDo6aXNBY3RpdmF0aW9uQ2FsbGJhY2soY29u
c3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBJTkNfU1RBVFMoIkluamVjdGVkU2NyaXB0
SG9zdC5pc0FjdGl2YXRpb24oKSIpOwotICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisgICAg
cmV0dXJuIHY4OjpCb29sZWFuOjpOZXcodHJ1ZSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0LmpzIGIvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0LmpzCmluZGV4IDkyMzVhZTEuLjk5MWZj
ODQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlw
dC5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHQuanMK
QEAgLTI2LDcgKzI2LDcgQEAKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotdmFyIGluamVjdGVkU2NyaXB0
Q29uc3RydWN0b3IgPSAoZnVuY3Rpb24gKEluamVjdGVkU2NyaXB0SG9zdCwgaW5zcGVjdGVkV2lu
ZG93LCBpbmplY3RlZFNjcmlwdElkKSB7Cit2YXIgaW5qZWN0ZWRTY3JpcHRDb25zdHJ1Y3RvciA9
IChmdW5jdGlvbiAoSW5qZWN0ZWRTY3JpcHRIb3N0LCBpbnNwZWN0ZWRXaW5kb3csIGluamVjdGVk
U2NyaXB0SWQsIGpzRW5naW5lKSB7CiAKIHZhciBJbmplY3RlZFNjcmlwdCA9IHt9OwogCkBAIC0x
MjUsMTAgKzEyNSwzMiBAQCBJbmplY3RlZFNjcmlwdC5nZXRQcm9wZXJ0aWVzID0gZnVuY3Rpb24o
b2JqZWN0UHJveHksIGlnbm9yZUhhc093blByb3BlcnR5LCBhYmJyZQogICAgIGlmICghSW5qZWN0
ZWRTY3JpcHQuX2lzRGVmaW5lZChvYmplY3QpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
dmFyIHByb3BlcnRpZXMgPSBbXTsKKyAgICAKICAgICB2YXIgcHJvcGVydHlOYW1lcyA9IGlnbm9y
ZUhhc093blByb3BlcnR5ID8gSW5qZWN0ZWRTY3JpcHQuX2dldFByb3BlcnR5TmFtZXMob2JqZWN0
KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCk7CiAgICAgaWYgKCFpZ25vcmVI
YXNPd25Qcm9wZXJ0eSAmJiBvYmplY3QuX19wcm90b19fKQogICAgICAgICBwcm9wZXJ0eU5hbWVz
LnB1c2goIl9fcHJvdG9fXyIpOwogCisgICAgaWYgKGpzRW5naW5lID09PSAidjgiKSB7CisgICAg
ICAgIC8vIENoZWNrIGlmIHRoZSBvYmplY3QgaXMgYSBzY29wZS4KKyAgICAgICAgaWYgKEluamVj
dGVkU2NyaXB0Ll9pc1Njb3BlUHJveHkob2JqZWN0UHJveHkpKSB7CisgICAgICAgICAgICBwcm9w
ZXJ0eU5hbWVzID0gW107CisgICAgICAgICAgICBmb3IgKHZhciBuYW1lIGluIG9iamVjdCkKKyAg
ICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLnB1c2gobmFtZSk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAvLyBGSVhNRShodHRwOi8vY3JidWcuY29tLzQxMjQzKTogT2JqZWN0Lmdl
dE93blByb3BlcnR5TmFtZXMgbWF5IHJldHVybiBkdXBsaWNhdGVkIG5hbWVzLgorICAgICAgICAg
ICAgdmFyIGEgPSBbXTsKKyAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuc29ydCgpOworICAgICAg
ICAgICAgdmFyIHByZXY7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnR5
TmFtZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgbiA9IHByb3BlcnR5TmFt
ZXNbaV07CisgICAgICAgICAgICAgICAgaWYgKG4gIT0gcHJldikKKyAgICAgICAgICAgICAgICAg
ICAgYS5wdXNoKG4pOworICAgICAgICAgICAgICAgIHByZXYgPSBuOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcHJvcGVydHlOYW1lcyA9IGE7CisgICAgICAgIH0KKyAgICB9CisgICAgCiAg
ICAgLy8gR28gb3ZlciBwcm9wZXJ0aWVzLCBwcmVwYXJlIHJlc3VsdHMuCiAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBwcm9wZXJ0eU5hbWVzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgIHZhciBwcm9w
ZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWVzW2ldOwpAQCAtMTU4LDYgKzE4MCwxMiBAQCBJbmplY3Rl
ZFNjcmlwdC5nZXRQcm9wZXJ0aWVzID0gZnVuY3Rpb24ob2JqZWN0UHJveHksIGlnbm9yZUhhc093
blByb3BlcnR5LCBhYmJyZQogICAgIHJldHVybiBwcm9wZXJ0aWVzOwogfQogCitJbmplY3RlZFNj
cmlwdC5faXNTY29wZVByb3h5ID0gZnVuY3Rpb24ob2JqZWN0UHJveHkpCit7CisgICAgdmFyIG9i
amVjdElkID0gb2JqZWN0UHJveHkub2JqZWN0SWQ7CisgICAgcmV0dXJuIHR5cGVvZiBvYmplY3RJ
ZCA9PT0gIm9iamVjdCIgJiYgIW9iamVjdElkLnRoaXNPYmplY3Q7Cit9IAorCiBJbmplY3RlZFNj
cmlwdC5zZXRQcm9wZXJ0eVZhbHVlID0gZnVuY3Rpb24ob2JqZWN0UHJveHksIHByb3BlcnR5TmFt
ZSwgZXhwcmVzc2lvbikKIHsKICAgICB2YXIgb2JqZWN0ID0gSW5qZWN0ZWRTY3JpcHQuX3Jlc29s
dmVPYmplY3Qob2JqZWN0UHJveHkpOwpAQCAtODEzLDYgKzg0MSw1OCBAQCBJbmplY3RlZFNjcmlw
dC5DYWxsRnJhbWVQcm94eSA9IGZ1bmN0aW9uKGlkLCBjYWxsRnJhbWUpCiAgICAgdGhpcy5zY29w
ZUNoYWluID0gdGhpcy5fd3JhcFNjb3BlQ2hhaW4oY2FsbEZyYW1lKTsKIH0KIAoraWYgKGpzRW5n
aW5lID09PSAidjgiKSB7CisKK0luamVjdGVkU2NyaXB0LkNhbGxGcmFtZVByb3h5LnByb3RvdHlw
ZSA9IHsKKyAgICAKKworICAgIF93cmFwU2NvcGVDaGFpbjogZnVuY3Rpb24oY2FsbEZyYW1lKQor
ICAgIHsKKyAgICAgICAgdmFyIFNjb3BlVHlwZSA9IHsgR2xvYmFsOiAwLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICBMb2NhbDogMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgV2l0aDog
MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xvc3VyZTogMywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ2F0Y2g6IDQgfTsKKyAgICAgICAgdmFyIHNjb3BlQ2hhaW4gPSBjYWxsRnJh
bWUuc2NvcGVDaGFpbjsKKyAgICAgICAgdmFyIHNjb3BlQ2hhaW5Qcm94eSA9IFtdOworICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHNjb3BlQ2hhaW4ubGVuZ3RoOyBpICs9IDIpIHsKKyAgICAg
ICAgICAgIHZhciBzY29wZVR5cGUgPSBzY29wZUNoYWluW2ldOworICAgICAgICAgICAgdmFyIHNj
b3BlT2JqZWN0ID0gc2NvcGVDaGFpbltpICsgMV07CisgICAgICAgICAgICB2YXIgc2NvcGVPYmpl
Y3RQcm94eSA9IEluamVjdGVkU2NyaXB0LmNyZWF0ZVByb3h5T2JqZWN0KHNjb3BlT2JqZWN0LCB7
IGNhbGxGcmFtZTogdGhpcy5pZCwgY2hhaW5JbmRleDogKGkgKyAxKSB9LCB0cnVlKTsKKworICAg
ICAgICAgICAgdmFyIGZvdW5kTG9jYWxTY29wZSA9IGZhbHNlOworICAgICAgICAgICAgc3dpdGNo
KHNjb3BlVHlwZSkgeworICAgICAgICAgICAgICAgIGNhc2UgU2NvcGVUeXBlLkxvY2FsOiB7Cisg
ICAgICAgICAgICAgICAgICAgIGZvdW5kTG9jYWxTY29wZSA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgIHNjb3BlT2JqZWN0UHJveHkuaXNMb2NhbCA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgIHNjb3BlT2JqZWN0UHJveHkudGhpc09iamVjdCA9IEluamVjdGVkU2NyaXB0LmNyZWF0ZVBy
b3h5T2JqZWN0KGNhbGxGcmFtZS50aGlzT2JqZWN0LCB7IGNhbGxGcmFtZTogdGhpcy5pZCwgdGhp
c09iamVjdDogdHJ1ZSB9LCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2UgU2NvcGVUeXBlLkNsb3N1cmU6IHsK
KyAgICAgICAgICAgICAgICAgICAgc2NvcGVPYmplY3RQcm94eS5pc0Nsb3N1cmUgPSB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgY2FzZSBTY29wZVR5cGUuV2l0aDogeworICAgICAgICAgICAgICAgICAgICBzY29wZU9i
amVjdFByb3h5LmlzV2l0aEJsb2NrID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZm91
bmRMb2NhbFNjb3BlKSB7CisgICAgICAgICAgICAgICAgaWYgKHNjb3BlT2JqZWN0IGluc3RhbmNl
b2YgaW5zcGVjdGVkV2luZG93LkVsZW1lbnQpCisgICAgICAgICAgICAgICAgICAgIHNjb3BlT2Jq
ZWN0UHJveHkuaXNFbGVtZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChzY29w
ZU9iamVjdCBpbnN0YW5jZW9mIGluc3BlY3RlZFdpbmRvdy5Eb2N1bWVudCkKKyAgICAgICAgICAg
ICAgICAgICAgc2NvcGVPYmplY3RQcm94eS5pc0RvY3VtZW50ID0gdHJ1ZTsKKyAgICAgICAgICAg
IH0KKyAKKyAgICAgICAgICAgIHNjb3BlQ2hhaW5Qcm94eS5wdXNoKHNjb3BlT2JqZWN0UHJveHkp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBzY29wZUNoYWluUHJveHk7CisgICAgfQorfQor
Cit9IGVsc2UgeworCiBJbmplY3RlZFNjcmlwdC5DYWxsRnJhbWVQcm94eS5wcm90b3R5cGUgPSB7
CiAgICAgX3dyYXBTY29wZUNoYWluOiBmdW5jdGlvbihjYWxsRnJhbWUpCiAgICAgewpAQCAtODQy
LDYgKzkyMiw4IEBAIEluamVjdGVkU2NyaXB0LkNhbGxGcmFtZVByb3h5LnByb3RvdHlwZSA9IHsK
ICAgICB9CiB9CiAKK30KKwogSW5qZWN0ZWRTY3JpcHQuZXhlY3V0ZVNxbCA9IGZ1bmN0aW9uKGNh
bGxJZCwgZGF0YWJhc2VJZCwgcXVlcnkpCiB7CiAgICAgZnVuY3Rpb24gc3VjY2Vzc0NhbGxiYWNr
KHR4LCByZXN1bHQpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2Ny
aXB0c1BhbmVsLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5q
cwppbmRleCAzMTZmMzJlLi4zNWM4ZWU0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9TY3JpcHRzUGFuZWwuanMKQEAgLTE5OCw2ICsxOTgsOCBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0
c1BhbmVsID0gZnVuY3Rpb24oKQogICAgIHRoaXMuX3Nob3J0Y3V0c1tzaG9ydGN1dF0gPSBoYW5k
bGVyOwogCiAgICAgdGhpcy5fZGVidWdnZXJFbmFibGVkID0gUHJlZmVyZW5jZXMuZGVidWdnZXJB
bHdheXNFbmFibGVkOworICAgIGlmIChQcmVmZXJlbmNlcy5kZWJ1Z2dlckFsd2F5c0VuYWJsZWQp
CisgICAgICAgIHRoaXMuX2F0dGFjaERlYnVnZ2VyV2hlblNob3duID0gdHJ1ZTsKICAgICB0aGlz
LnJlc2V0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGEyZTJhYTMuLjU1MmExNmIgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDEwLTA0LTE1ICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVy
eXNAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBTdXBwb3J0IGJhc2ljIGRlYnVnZ2luZyBjYXBhYmlsaXRpZXMgaW5jbHVkaW5nIHN0
ZXAgaW4vb3Zlci9vdXQgaW4gdjgKKyAgICAgICAgaW1wbGVtZW50YXRpb24gb2YgU2NyaXB0RGVi
dWdTZXJ2ZXIuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTM3NjA0CisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiBzcmMvRGVidWdn
ZXJBZ2VudC5oOgorICAgICAgICAqIHNyYy9EZWJ1Z2dlckFnZW50SW1wbC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OkRlYnVnZ2VyQWdlbnRJbXBsOjpzZXREZWJ1Z2dlclNjcmlwdFNvdXJjZSk6Cisg
ICAgICAgICogc3JjL0RlYnVnZ2VyQWdlbnRJbXBsLmg6CisgICAgICAgICogc3JjL0RlYnVnZ2Vy
QWdlbnRNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RGVidWdnZXJBZ2VudE1hbmFnZXI6
Omhvc3REaXNwYXRjaEhhbmRsZXIpOgorICAgICAgICAoV2ViS2l0OjpEZWJ1Z2dlckFnZW50TWFu
YWdlcjo6ZGVidWdBdHRhY2gpOgorICAgICAgICAoV2ViS2l0OjpEZWJ1Z2dlckFnZW50TWFuYWdl
cjo6ZGVidWdEZXRhY2gpOgorICAgICAgICAoV2ViS2l0OjpEZWJ1Z2dlckFnZW50TWFuYWdlcjo6
c2V0TWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIpOgorICAgICAgICAqIHNyYy9EZWJ1Z2dlckFn
ZW50TWFuYWdlci5oOgorICAgICAgICAqIHNyYy9JbnNwZWN0b3JGcm9udGVuZENsaWVudEltcGwu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JGcm9udGVuZENsaWVudEltcGw6OndpbmRv
d09iamVjdENsZWFyZWQpOgorICAgICAgICAqIHNyYy9qcy9EZWJ1Z2dlclNjcmlwdC5qczogQWRk
ZWQuCisgICAgICAgIChkZWJ1Z2dlclNjcmlwdENvbnN0cnVjdG9yLkRlYnVnZ2VyU2NyaXB0Lmdl
dEFmdGVyQ29tcGlsZVNjcmlwdCk6CisgICAgICAgIChkZWJ1Z2dlclNjcmlwdENvbnN0cnVjdG9y
LkRlYnVnZ2VyU2NyaXB0LmdldFNjcmlwdHMpOgorICAgICAgICAoZGVidWdnZXJTY3JpcHRDb25z
dHJ1Y3Rvci5EZWJ1Z2dlclNjcmlwdC5fZm9ybWF0U2NyaXB0KToKKyAgICAgICAgKGRlYnVnZ2Vy
U2NyaXB0Q29uc3RydWN0b3IuRGVidWdnZXJTY3JpcHQuc2V0QnJlYWtwb2ludCk6CisgICAgICAg
IChkZWJ1Z2dlclNjcmlwdENvbnN0cnVjdG9yLkRlYnVnZ2VyU2NyaXB0LnJlbW92ZUJyZWFrcG9p
bnQpOgorICAgICAgICAoZGVidWdnZXJTY3JpcHRDb25zdHJ1Y3Rvci5EZWJ1Z2dlclNjcmlwdC5j
dXJyZW50Q2FsbEZyYW1lKToKKyAgICAgICAgKGRlYnVnZ2VyU2NyaXB0Q29uc3RydWN0b3IuRGVi
dWdnZXJTY3JpcHQuc3RlcEludG9TdGF0ZW1lbnQpOgorICAgICAgICAoZGVidWdnZXJTY3JpcHRD
b25zdHJ1Y3Rvci5EZWJ1Z2dlclNjcmlwdC5zdGVwT3ZlclN0YXRlbWVudCk6CisgICAgICAgIChk
ZWJ1Z2dlclNjcmlwdENvbnN0cnVjdG9yLkRlYnVnZ2VyU2NyaXB0LnN0ZXBPdXRPZkZ1bmN0aW9u
KToKKyAgICAgICAgKGRlYnVnZ2VyU2NyaXB0Q29uc3RydWN0b3IuRGVidWdnZXJTY3JpcHQuY2xl
YXJCcmVha3BvaW50cyk6CisgICAgICAgIChkZWJ1Z2dlclNjcmlwdENvbnN0cnVjdG9yLkRlYnVn
Z2VyU2NyaXB0LnNldEJyZWFrcG9pbnRzQWN0aXZhdGVkKToKKyAgICAgICAgKGRlYnVnZ2VyU2Ny
aXB0Q29uc3RydWN0b3IuRGVidWdnZXJTY3JpcHQuX2ZyYW1lTWlycm9yVG9KU0NhbGxGcmFtZSk6
CisgICAgICAgIChkZWJ1Z2dlclNjcmlwdENvbnN0cnVjdG9yLkRlYnVnZ2VyU2NyaXB0Ll93ZWJr
aXRUb1Y4TGluZU51bWJlcik6CisgICAgICAgIChkZWJ1Z2dlclNjcmlwdENvbnN0cnVjdG9yLkRl
YnVnZ2VyU2NyaXB0Ll92OFRvV3dlYmtpdExpbmVOdW1iZXIpOgorICAgICAgICAoZGVidWdnZXJT
Y3JpcHRDb25zdHJ1Y3Rvcik6CisgICAgICAgICogc3JjL2pzL0RldlRvb2xzLmpzOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLmxvYWRlZCk6CisgICAgICAgICguKToKKyAgICAgICAgKCk6CisgICAg
ICAgICogc3JjL2pzL0RldlRvb2xzSG9zdFN0dWIuanM6CisgICAgICAgICguUmVtb3RlRGVidWdn
ZXJBZ2VudFN0dWIucHJvdG90eXBlLnNldERlYnVnZ2VyU2NyaXB0U291cmNlKToKKyAgICAgICAg
KiBzcmMvanMvSW5zcGVjdG9yQ29udHJvbGxlckltcGwuanM6CisgICAgICAgIChkZXZ0b29scy5J
bnNwZWN0b3JCYWNrZW5kSW1wbCk6CisKIDIwMTAtMDQtMTIgIFRvbnkgQ2hhbmcgIDx0b255QGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCmRpZmYgLS1n
aXQgYS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cGkKaW5kZXggZjFjNmMyZC4uMzdmYWE5OSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVt
L1dlYktpdC5neXBpCisrKyBiL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtMzUsNiAr
MzUsNyBAQAogICAgICAgICAnZGV2dG9vbHNfanNfZmlsZXMnOiBbCiAgICAgICAgICAgICAnc3Jj
L2pzL0luc3BlY3RvckNvbnRyb2xsZXJJbXBsLmpzJywKICAgICAgICAgICAgICdzcmMvanMvRGVi
dWdnZXJBZ2VudC5qcycsCisgICAgICAgICAgICAnc3JjL2pzL0RlYnVnZ2VyU2NyaXB0LmpzJywK
ICAgICAgICAgICAgICdzcmMvanMvUHJvZmlsZXJBZ2VudC5qcycsCiAgICAgICAgICAgICAnc3Jj
L2pzL1Byb2ZpbGVyUHJvY2Vzc29yLmpzJywKICAgICAgICAgICAgICdzcmMvanMvSGVhcFByb2Zp
bGVyUGFuZWwuanMnLApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9EZWJ1Z2dlckFn
ZW50LmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL0RlYnVnZ2VyQWdlbnQuaAppbmRleCAxN2NkZTEx
Li43ZjNkYmJiIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL0RlYnVnZ2VyQWdlbnQu
aAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0RlYnVnZ2VyQWdlbnQuaApAQCAtNDAsNyArNDAs
MTAgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAgICAgTUVUSE9EMChnZXRDb250ZXh0SWQpIFwKICAg
ICBcCiAgICAgLyogUmVxdWVzdCB2OCB0byBwcm9jZXNzIGFsbCBkZWJ1ZyBjb21tYW5kcyBpbiB0
aGUgcXVldWUuICovIFwKLSAgICBNRVRIT0QwKHByb2Nlc3NEZWJ1Z0NvbW1hbmRzKQorICAgIE1F
VEhPRDAocHJvY2Vzc0RlYnVnQ29tbWFuZHMpIFwKKyAgICBcCisgICAgLyogUHVzaCBEZWJ1Z2dl
clNjcmlwdC5qcyBjb250ZW50IHRvIHRoZSBhZ2VudC4gKi8gXAorICAgIE1FVEhPRDEoc2V0RGVi
dWdnZXJTY3JpcHRTb3VyY2UsIFN0cmluZykKIAogREVGSU5FX1JQQ19DTEFTUyhEZWJ1Z2dlckFn
ZW50LCBERUJVR0dFUl9BR0VOVF9TVFJVQ1QpCiAKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1
bS9zcmMvRGVidWdnZXJBZ2VudEltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9EZWJ1Z2dl
ckFnZW50SW1wbC5jcHAKaW5kZXggYzQ4OTg2MC4uNjczNDgyYSAxMDA2NDQKLS0tIGEvV2ViS2l0
L2Nocm9taXVtL3NyYy9EZWJ1Z2dlckFnZW50SW1wbC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVt
L3NyYy9EZWJ1Z2dlckFnZW50SW1wbC5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJE
b2N1bWVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1
ZGUgIlNjcmlwdERlYnVnU2VydmVyLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAjaW5jbHVk
ZSAiV2ViRGV2VG9vbHNBZ2VudEltcGwuaCIKICNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgpAQCAt
NzgsNiArNzksMTEgQEAgdm9pZCBEZWJ1Z2dlckFnZW50SW1wbDo6cHJvY2Vzc0RlYnVnQ29tbWFu
ZHMoKQogICAgIHY4OjpEZWJ1Zzo6UHJvY2Vzc0RlYnVnTWVzc2FnZXMoKTsKIH0KIAordm9pZCBE
ZWJ1Z2dlckFnZW50SW1wbDo6c2V0RGVidWdnZXJTY3JpcHRTb3VyY2UoY29uc3QgU3RyaW5nJiBz
b3VyY2UpCit7CisgICAgV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnNldERl
YnVnZ2VyU2NyaXB0U291cmNlKHNvdXJjZSk7Cit9CisKIHZvaWQgRGVidWdnZXJBZ2VudEltcGw6
OmRlYnVnZ2VyT3V0cHV0KGNvbnN0IFN0cmluZyYgY29tbWFuZCkKIHsKICAgICBtX2RlbGVnYXRl
LT5kZWJ1Z2dlck91dHB1dChjb21tYW5kKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9z
cmMvRGVidWdnZXJBZ2VudEltcGwuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvRGVidWdnZXJBZ2Vu
dEltcGwuaAppbmRleCAwZTZlNmFmLi5iZDlkZGY2IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21p
dW0vc3JjL0RlYnVnZ2VyQWdlbnRJbXBsLmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9EZWJ1
Z2dlckFnZW50SW1wbC5oCkBAIC02MCw2ICs2MCw3IEBAIHB1YmxpYzoKICAgICAvLyBEZWJ1Z2dl
ckFnZW50IGltcGxlbWVudGF0aW9uLgogICAgIHZpcnR1YWwgdm9pZCBnZXRDb250ZXh0SWQoKTsK
ICAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc0RlYnVnQ29tbWFuZHMoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0RGVidWdnZXJTY3JpcHRTb3VyY2UoY29uc3QgU3RyaW5nJik7CiAKICAgICB2b2lkIGRl
YnVnZ2VyT3V0cHV0KGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgb3V0KTsKIApkaWZmIC0tZ2l0IGEv
V2ViS2l0L2Nocm9taXVtL3NyYy9EZWJ1Z2dlckFnZW50TWFuYWdlci5jcHAgYi9XZWJLaXQvY2hy
b21pdW0vc3JjL0RlYnVnZ2VyQWdlbnRNYW5hZ2VyLmNwcAppbmRleCBmYWFmYWZmLi5kM2Y3ZmVh
IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL0RlYnVnZ2VyQWdlbnRNYW5hZ2VyLmNw
cAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0RlYnVnZ2VyQWdlbnRNYW5hZ2VyLmNwcApAQCAt
MzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkRlYnVnZ2VyQWdlbnRJbXBsLmgiCiAjaW5jbHVkZSAi
RnJhbWUuaCIKICNpbmNsdWRlICJQYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCIKKyNpbmNsdWRlICJT
Y3JpcHREZWJ1Z1NlcnZlci5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKICNpbmNsdWRlICJXZWJE
ZXZUb29sc0FnZW50SW1wbC5oIgogI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgpAQCAtNzIsNiAr
NzMsNDIgQEAgcHJpdmF0ZToKIH0gLy8gbmFtZXNwYWNlCiAKIAordm9pZCBEZWJ1Z2dlckFnZW50
TWFuYWdlcjo6aG9zdERpc3BhdGNoSGFuZGxlcihjb25zdCBWZWN0b3I8V2ViQ29yZTo6UGFnZSo+
JiBwYWdlcykKK3sKKyAgICBpZiAoIXNfbWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChzX2luSG9zdERpc3BhdGNoSGFuZGxlcikKKyAgICAgICAg
cmV0dXJuOworCisgICAgc19pbkhvc3REaXNwYXRjaEhhbmRsZXIgPSB0cnVlOworCisgICAgVmVj
dG9yPFdlYlZpZXdJbXBsKj4gdmlld3M7CisgICAgLy8gMS4gRGlzYWJsZSBhY3RpdmUgb2JqZWN0
cyBhbmQgaW5wdXQgZXZlbnRzLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFnZXMuc2l6
ZSgpOyBpKyspIHsKKyAgICAgICAgV2ViQ29yZTo6UGFnZSogcGFnZSA9IHBhZ2VzW2ldOworICAg
ICAgICBXZWJWaWV3SW1wbCogdmlldyA9IFdlYlZpZXdJbXBsOjpmcm9tUGFnZShwYWdlKTsKKyAg
ICAgICAgc19wYWdlRGVmZXJyZXJzLnNldCh2aWV3ICwgbmV3IFdlYkNvcmU6OlBhZ2VHcm91cExv
YWREZWZlcnJlcihwYWdlLCB0cnVlKSk7CisgICAgICAgIHZpZXdzLmFwcGVuZCh2aWV3KTsKKyAg
ICAgICAgdmlldy0+c2V0SWdub3JlSW5wdXRFdmVudHModHJ1ZSk7CisgICAgfQorCisgICAgLy8g
Mi4gUHJvY2VzcyBtZXNzYWdlcy4KKyAgICBzX21lc3NhZ2VMb29wRGlzcGF0Y2hIYW5kbGVyKCk7
CisKKyAgICAvLyAzLiBCcmluZyB0aGluZ3MgYmFjay4KKyAgICBmb3IgKFZlY3RvcjxXZWJWaWV3
SW1wbCo+OjppdGVyYXRvciBpdCA9IHZpZXdzLmJlZ2luKCk7IGl0ICE9IHZpZXdzLmVuZCgpOyAr
K2l0KSB7CisgICAgICAgIGlmIChzX3BhZ2VEZWZlcnJlcnMuY29udGFpbnMoKml0KSkgeworICAg
ICAgICAgICAgLy8gVGhlIHZpZXcgd2FzIG5vdCBjbG9zZWQgZHVyaW5nIHRoZSBkaXNwYXRjaC4K
KyAgICAgICAgICAgICgqaXQpLT5zZXRJZ25vcmVJbnB1dEV2ZW50cyhmYWxzZSk7CisgICAgICAg
IH0KKyAgICB9CisgICAgZGVsZXRlQWxsVmFsdWVzKHNfcGFnZURlZmVycmVycyk7CisgICAgc19w
YWdlRGVmZXJyZXJzLmNsZWFyKCk7CisKKyAgICBzX2luSG9zdERpc3BhdGNoSGFuZGxlciA9IGZh
bHNlOworfQorCiB2b2lkIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpkZWJ1Z0hvc3REaXNwYXRjaEhh
bmRsZXIoKQogewogICAgIGlmICghc19tZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlciB8fCAhc19h
dHRhY2hlZEFnZW50c01hcCkKQEAgLTExNiw2ICsxNTMsOSBAQCBEZWJ1Z2dlckFnZW50TWFuYWdl
cjo6QXR0YWNoZWRBZ2VudHNNYXAqIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpzX2F0dGFjaGVkQWdl
bnRzTQogCiB2b2lkIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpkZWJ1Z0F0dGFjaChEZWJ1Z2dlckFn
ZW50SW1wbCogZGVidWdnZXJBZ2VudCkKIHsKKyNpZiBFTkFCTEUoVjhfU0NSSVBUX0RFQlVHX1NF
UlZFUikKKyAgICByZXR1cm47CisjZW5kaWYKICAgICBpZiAoIXNfYXR0YWNoZWRBZ2VudHNNYXAp
IHsKICAgICAgICAgc19hdHRhY2hlZEFnZW50c01hcCA9IG5ldyBBdHRhY2hlZEFnZW50c01hcCgp
OwogICAgICAgICB2ODo6RGVidWc6OlNldE1lc3NhZ2VIYW5kbGVyMigmRGVidWdnZXJBZ2VudE1h
bmFnZXI6Om9uVjhEZWJ1Z01lc3NhZ2UpOwpAQCAtMTI4LDYgKzE2OCw5IEBAIHZvaWQgRGVidWdn
ZXJBZ2VudE1hbmFnZXI6OmRlYnVnQXR0YWNoKERlYnVnZ2VyQWdlbnRJbXBsKiBkZWJ1Z2dlckFn
ZW50KQogCiB2b2lkIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpkZWJ1Z0RldGFjaChEZWJ1Z2dlckFn
ZW50SW1wbCogZGVidWdnZXJBZ2VudCkKIHsKKyNpZiBFTkFCTEUoVjhfU0NSSVBUX0RFQlVHX1NF
UlZFUikKKyAgICByZXR1cm47CisjZW5kaWYKICAgICBpZiAoIXNfYXR0YWNoZWRBZ2VudHNNYXAp
IHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTI0
OSw2ICsyOTIsNyBAQCB2b2lkIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpleGVjdXRlRGVidWdnZXJD
b21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZCwgaW50IGNhbAogdm9pZCBEZWJ1Z2dlckFnZW50
TWFuYWdlcjo6c2V0TWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIoV2ViRGV2VG9vbHNBZ2VudDo6
TWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIgaGFuZGxlcikKIHsKICAgICBzX21lc3NhZ2VMb29w
RGlzcGF0Y2hIYW5kbGVyID0gaGFuZGxlcjsKKyAgICBXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZl
cjo6c2V0TWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIoRGVidWdnZXJBZ2VudE1hbmFnZXI6Omhv
c3REaXNwYXRjaEhhbmRsZXIpOwogfQogCiB2b2lkIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpzZXRI
b3N0SWQoV2ViRnJhbWVJbXBsKiB3ZWJmcmFtZSwgaW50IGhvc3RJZCkKZGlmZiAtLWdpdCBhL1dl
YktpdC9jaHJvbWl1bS9zcmMvRGVidWdnZXJBZ2VudE1hbmFnZXIuaCBiL1dlYktpdC9jaHJvbWl1
bS9zcmMvRGVidWdnZXJBZ2VudE1hbmFnZXIuaAppbmRleCBhMmU5MDMwLi5hOGJjN2EzIDEwMDY0
NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL0RlYnVnZ2VyQWdlbnRNYW5hZ2VyLmgKKysrIGIv
V2ViS2l0L2Nocm9taXVtL3NyYy9EZWJ1Z2dlckFnZW50TWFuYWdlci5oCkBAIC0zMSwxMiArMzEs
MTUgQEAKICNpZm5kZWYgRGVidWdnZXJBZ2VudE1hbmFnZXJfaAogI2RlZmluZSBEZWJ1Z2dlckFn
ZW50TWFuYWdlcl9oCiAKKyNpbmNsdWRlICJXZWJDU3RyaW5nLmgiCiAjaW5jbHVkZSAiV2ViRGV2
VG9vbHNBZ2VudC5oIgogI2luY2x1ZGUgPHY4LWRlYnVnLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFBhZ2U7CiBjbGFzcyBQYWdlR3JvdXBM
b2FkRGVmZXJyZXI7CiBjbGFzcyBTdHJpbmc7CiB9CkBAIC05Nyw2ICsxMDAsNyBAQCBwcml2YXRl
OgogICAgIERlYnVnZ2VyQWdlbnRNYW5hZ2VyKCk7CiAgICAgfkRlYnVnZ2VyQWdlbnRNYW5hZ2Vy
KCk7CiAKKyAgICBzdGF0aWMgdm9pZCBob3N0RGlzcGF0Y2hIYW5kbGVyKGNvbnN0IFZlY3RvcjxX
ZWJDb3JlOjpQYWdlKj4mKTsKICAgICBzdGF0aWMgdm9pZCBkZWJ1Z0hvc3REaXNwYXRjaEhhbmRs
ZXIoKTsKICAgICBzdGF0aWMgdm9pZCBvblY4RGVidWdNZXNzYWdlKGNvbnN0IHY4OjpEZWJ1Zzo6
TWVzc2FnZSYgbWVzc2FnZSk7CiAgICAgc3RhdGljIHZvaWQgc2VuZENvbW1hbmRUb1Y4KGNvbnN0
IFdlYkNvcmU6OlN0cmluZyYgY21kLApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9J
bnNwZWN0b3JGcm9udGVuZENsaWVudEltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNw
ZWN0b3JGcm9udGVuZENsaWVudEltcGwuY3BwCmluZGV4IDdkYTA1NzEuLjlmZjM5MzggMTAwNjQ0
Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRJbXBsLmNw
cAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckZyb250ZW5kQ2xpZW50SW1wbC5j
cHAKQEAgLTY5LDYgKzY5LDkgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudEltcGw6Ondp
bmRvd09iamVjdENsZWFyZWQoKQogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2xvYmFsID0g
ZnJhbWVDb250ZXh0LT5HbG9iYWwoKTsKIAogICAgIGdsb2JhbC0+U2V0KHY4OjpTdHJpbmc6Ok5l
dygiSW5zcGVjdG9yRnJvbnRlbmRIb3N0IiksIGZyb250ZW5kSG9zdE9iaik7CisjaWYgRU5BQkxF
KFY4X1NDUklQVF9ERUJVR19TRVJWRVIpCisgICAgZ2xvYmFsLT5TZXQodjg6OlN0cmluZzo6TmV3
KCJ2OFNjcmlwdERlYnVnU2VydmVyRW5hYmxlZCIpLCB2ODo6VHJ1ZSgpKTsKKyNlbmRpZgogfQog
CiB2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50SW1wbDo6ZnJvbnRlbmRMb2FkZWQoKQpkaWZm
IC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9EZWJ1Z2dlclNjcmlwdC5qcyBiL1dlYktp
dC9jaHJvbWl1bS9zcmMvanMvRGVidWdnZXJTY3JpcHQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZmJkMjZkYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1
bS9zcmMvanMvRGVidWdnZXJTY3JpcHQuanMKQEAgLTAsMCArMSwyMDQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitmdW5jdGlvbiBkZWJ1
Z2dlclNjcmlwdENvbnN0cnVjdG9yKCkgeworCit2YXIgRGVidWdnZXJTY3JpcHQgPSB7fTsKK0Rl
YnVnZ2VyU2NyaXB0Ll9icmVha3BvaW50cyA9IHt9OworCisKK0RlYnVnZ2VyU2NyaXB0LmdldEFm
dGVyQ29tcGlsZVNjcmlwdCA9IGZ1bmN0aW9uKGV4ZWNTdGF0ZSwgYXJncykKK3sKKyAgICByZXR1
cm4gRGVidWdnZXJTY3JpcHQuX2Zvcm1hdFNjcmlwdChhcmdzLmV2ZW50RGF0YS5zY3JpcHRfLnNj
cmlwdF8pOworfQorCitEZWJ1Z2dlclNjcmlwdC5nZXRTY3JpcHRzID0gZnVuY3Rpb24oZXhlY1N0
YXRlLCBhcmdzKQoreworICAgIHZhciBzY3JpcHRzID0gRGVidWcuc2NyaXB0cygpOworICAgIHZh
ciByZXN1bHQgPSBbXTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjcmlwdHMubGVuZ3RoOyAr
K2kpIHsKKyAgICAgICAgcmVzdWx0LnB1c2goRGVidWdnZXJTY3JpcHQuX2Zvcm1hdFNjcmlwdChz
Y3JpcHRzW2ldKSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0RlYnVnZ2VyU2Ny
aXB0Ll9mb3JtYXRTY3JpcHQgPSBmdW5jdGlvbihzY3JpcHQpCit7CisgICAgcmV0dXJuIHsKKyAg
ICAgICAgaWQ6IHNjcmlwdC5pZCwKKyAgICAgICAgbmFtZTogc2NyaXB0Lm5hbWUsCisgICAgICAg
IHNvdXJjZTogc2NyaXB0LnNvdXJjZSwKKyAgICAgICAgbGluZU9mZnNldDogc2NyaXB0LmxpbmVf
b2Zmc2V0LAorICAgICAgICBsaW5lQ291bnQ6IHNjcmlwdC5saW5lQ291bnQoKSwKKyAgICAgICAg
Y29udGV4dERhdGE6IHNjcmlwdC5jb250ZXh0X2RhdGEKKyAgICB9OworfQorCitEZWJ1Z2dlclNj
cmlwdC5zZXRCcmVha3BvaW50ID0gZnVuY3Rpb24oZXhlY1N0YXRlLCBhcmdzKQoreworICAgIGFy
Z3MubGluZU51bWJlciA9IERlYnVnZ2VyU2NyaXB0Ll93ZWJraXRUb1Y4TGluZU51bWJlcihhcmdz
LmxpbmVOdW1iZXIpOworICAgIHZhciBrZXkgPSBhcmdzLnNjcmlwdElkICsgIjoiICsgYXJncy5s
aW5lTnVtYmVyOworICAgIHZhciBicmVha0lkID0gRGVidWdnZXJTY3JpcHQuX2JyZWFrcG9pbnRz
W2tleV07CisgICAgaWYgKGJyZWFrSWQpIHsKKyAgICAgICAgaWYgKGFyZ3MuZW5hYmxlZCkKKyAg
ICAgICAgICAgIERlYnVnLmVuYWJsZVNjcmlwdEJyZWFrUG9pbnQoYnJlYWtJZCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIERlYnVnLmRpc2FibGVTY3JpcHRCcmVha1BvaW50KGJyZWFrSWQp
OworICAgICAgICBEZWJ1Zy5jaGFuZ2VTY3JpcHRCcmVha1BvaW50Q29uZGl0aW9uKGJyZWFrSWQs
IGFyZ3MuY29uZGl0aW9uKTsKKyAgICAgICAgcmV0dXJuIGJyZWFrSWQ7CisgICAgfQorCisgICAg
YnJlYWtJZCA9IERlYnVnLnNldFNjcmlwdEJyZWFrUG9pbnRCeUlkKGFyZ3Muc2NyaXB0SWQsIGFy
Z3MubGluZU51bWJlciwgMCAvKiBjb2x1bW4gKi8sIGFyZ3MuY29uZGl0aW9uKTsKKyAgICBEZWJ1
Z2dlclNjcmlwdC5fYnJlYWtwb2ludHNba2V5XSA9IGJyZWFrSWQ7CisgICAgaWYgKCFhcmdzLmVu
YWJsZWQpCisgICAgICAgIERlYnVnLmRpc2FibGVTY3JpcHRCcmVha1BvaW50KGJyZWFrSWQpOwor
ICAgIHJldHVybiBicmVha0lkOworfQorCitEZWJ1Z2dlclNjcmlwdC5yZW1vdmVCcmVha3BvaW50
ID0gZnVuY3Rpb24oZXhlY1N0YXRlLCBhcmdzKQoreworICAgIGFyZ3MubGluZU51bWJlciA9IERl
YnVnZ2VyU2NyaXB0Ll93ZWJraXRUb1Y4TGluZU51bWJlcihhcmdzLmxpbmVOdW1iZXIpOworICAg
IHZhciBrZXkgPSBhcmdzLnNjcmlwdElkICsgIjoiICsgYXJncy5saW5lTnVtYmVyOworICAgIHZh
ciBicmVha0lkID0gRGVidWdnZXJTY3JpcHQuX2JyZWFrcG9pbnRzW2tleV07CisgICAgaWYgKGJy
ZWFrSWQpCisgICAgICAgIERlYnVnLmZpbmRCcmVha1BvaW50KGJyZWFrSWQsIHRydWUpOworICAg
IGRlbGV0ZSBEZWJ1Z2dlclNjcmlwdC5fYnJlYWtwb2ludHNba2V5XTsKK30KKworRGVidWdnZXJT
Y3JpcHQuY3VycmVudENhbGxGcmFtZSA9IGZ1bmN0aW9uKGV4ZWNTdGF0ZSwgYXJncykKK3sKKyAg
ICB2YXIgZnJhbWVDb3VudCA9IGV4ZWNTdGF0ZS5mcmFtZUNvdW50KCk7CisgICAgaWYgKGZyYW1l
Q291bnQgPT09IDApCisgICAgICAgIHJldHVybiB1bmRlZmluZWQ7CisgICAgCisgICAgdmFyIHRv
cEZyYW1lOworICAgIGZvciAodmFyIGkgPSBmcmFtZUNvdW50IC0gMTsgaSA+PSAwOyBpLS0pIHsK
KyAgICAgICAgdmFyIGZyYW1lTWlycm9yID0gZXhlY1N0YXRlLmZyYW1lKGkpOworICAgICAgICB0
b3BGcmFtZSA9IERlYnVnZ2VyU2NyaXB0Ll9mcmFtZU1pcnJvclRvSlNDYWxsRnJhbWUoZnJhbWVN
aXJyb3IsIHRvcEZyYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHRvcEZyYW1lOworfQorCitEZWJ1
Z2dlclNjcmlwdC5zdGVwSW50b1N0YXRlbWVudCA9IGZ1bmN0aW9uKGV4ZWNTdGF0ZSwgYXJncykK
K3sKKyAgICBleGVjU3RhdGUucHJlcGFyZVN0ZXAoRGVidWcuU3RlcEFjdGlvbi5TdGVwSW4sIDEp
OworfQorCitEZWJ1Z2dlclNjcmlwdC5zdGVwT3ZlclN0YXRlbWVudCA9IGZ1bmN0aW9uKGV4ZWNT
dGF0ZSwgYXJncykKK3sKKyAgICBleGVjU3RhdGUucHJlcGFyZVN0ZXAoRGVidWcuU3RlcEFjdGlv
bi5TdGVwTmV4dCwgMSk7Cit9CisKK0RlYnVnZ2VyU2NyaXB0LnN0ZXBPdXRPZkZ1bmN0aW9uID0g
ZnVuY3Rpb24oZXhlY1N0YXRlLCBhcmdzKQoreworICAgIGV4ZWNTdGF0ZS5wcmVwYXJlU3RlcChE
ZWJ1Zy5TdGVwQWN0aW9uLlN0ZXBPdXQsIDEpOworfQorCitEZWJ1Z2dlclNjcmlwdC5jbGVhckJy
ZWFrcG9pbnRzID0gZnVuY3Rpb24oZXhlY1N0YXRlLCBhcmdzKQoreworICAgIGZvciAodmFyIGtl
eSBpbiBEZWJ1Z2dlclNjcmlwdC5fYnJlYWtwb2ludHMpIHsKKyAgICAgICAgdmFyIGJyZWFrSWQg
PSBEZWJ1Z2dlclNjcmlwdC5fYnJlYWtwb2ludHNba2V5XTsKKyAgICAgICAgRGVidWcuZmluZEJy
ZWFrUG9pbnQoYnJlYWtJZCwgdHJ1ZSk7CisgICAgfQorICAgIERlYnVnZ2VyU2NyaXB0Ll9icmVh
a3BvaW50cyA9IHt9OworfQorCitEZWJ1Z2dlclNjcmlwdC5zZXRCcmVha3BvaW50c0FjdGl2YXRl
ZCA9IGZ1bmN0aW9uKGV4ZWNTdGF0ZSwgYXJncykKK3sKKyAgICBmb3IgKHZhciBrZXkgaW4gRGVi
dWdnZXJTY3JpcHQuX2JyZWFrcG9pbnRzKSB7CisgICAgICAgIHZhciBicmVha0lkID0gRGVidWdn
ZXJTY3JpcHQuX2JyZWFrcG9pbnRzW2tleV07CisgICAgICAgIGlmIChhcmdzLmVuYWJsZWQpCisg
ICAgICAgICAgICBEZWJ1Zy5lbmFibGVTY3JpcHRCcmVha1BvaW50KGJyZWFrSWQpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBEZWJ1Zy5kaXNhYmxlU2NyaXB0QnJlYWtQb2ludChicmVha0lk
KTsKKyAgICB9Cit9CisKK0RlYnVnZ2VyU2NyaXB0Ll9mcmFtZU1pcnJvclRvSlNDYWxsRnJhbWUg
PSBmdW5jdGlvbihmcmFtZU1pcnJvciwgY2FsbGVyRnJhbWUpCit7CisgICAgLy8gR2V0IGZ1bmN0
aW9uIG5hbWUuCisgICAgdmFyIGZ1bmM7CisgICAgdHJ5IHsKKyAgICAgICAgZnVuYyA9IGZyYW1l
TWlycm9yLmZ1bmMoKTsKKyAgICB9IGNhdGNoKGUpIHsKKyAgICB9CisgICAgdmFyIGZ1bmN0aW9u
TmFtZTsKKyAgICBpZiAoZnVuYykKKyAgICAgICAgZnVuY3Rpb25OYW1lID0gZnVuYy5uYW1lKCkg
fHwgZnVuYy5pbmZlcnJlZE5hbWUoKTsKKyAgICBpZiAoIWZ1bmN0aW9uTmFtZSkKKyAgICAgICAg
ZnVuY3Rpb25OYW1lID0gIlthbm9ueW1vdXNdIjsKKyAgICAgICAgCisgICAgLy8gR2V0IHNjcmlw
dCBJRC4KKyAgICB2YXIgc2NyaXB0ID0gZnVuYy5zY3JpcHQoKTsKKyAgICB2YXIgc291cmNlSUQg
PSBzY3JpcHQgJiYgc2NyaXB0LmlkKCk7CisgICAgCisgICAgLy8gR2V0IGxpbmUgbnVtYmVyLgor
ICAgIHZhciBsaW5lID0gRGVidWdnZXJTY3JpcHQuX3Y4VG9Xd2Via2l0TGluZU51bWJlcihmcmFt
ZU1pcnJvci5zb3VyY2VMaW5lKCkpOworICAgIAorICAgIC8vIEdldCB0aGlzIG9iamVjdC4KKyAg
ICB2YXIgdGhpc09iamVjdCA9IGZyYW1lTWlycm9yLmRldGFpbHNfLnJlY2VpdmVyKCk7CisKKyAg
ICAvLyBHZXQgc2NvcGUgY2hhaW4gYXJyYXkgaW4gZm9ybWF0OiBbPHNjb3BlIHR5cGU+LCA8c2Nv
cGUgb2JqZWN0PiwgPHNjb3BlIHR5cGU+LCA8c2NvcGUgb2JqZWN0PiwuLi5dCisgICAgdmFyIHNj
b3BlQ2hhaW4gPSBbXTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZyYW1lTWlycm9yLnNjb3Bl
Q291bnQoKTsgaSsrKSB7CisgICAgICAgIHZhciBzY29wZU1pcnJvciA9IGZyYW1lTWlycm9yLnNj
b3BlKGkpOworICAgICAgICB2YXIgc2NvcGVPYmplY3RNaXJyb3IgPSBzY29wZU1pcnJvci5zY29w
ZU9iamVjdCgpOworICAgICAgICB2YXIgcHJvcGVydGllcyA9IHNjb3BlT2JqZWN0TWlycm9yLnBy
b3BlcnRpZXMoKTsKKyAgICAgICAgdmFyIHNjb3BlT2JqZWN0ID0ge307CisgICAgICAgIGZvciAo
dmFyIGogPSAwOyBqIDwgcHJvcGVydGllcy5sZW5ndGg7IGorKykKKyAgICAgICAgICAgIHNjb3Bl
T2JqZWN0W3Byb3BlcnRpZXNbal0ubmFtZSgpXSA9IHByb3BlcnRpZXNbal0udmFsdWVfOworICAg
ICAgICBzY29wZUNoYWluLnB1c2goc2NvcGVNaXJyb3Iuc2NvcGVUeXBlKCkpOworICAgICAgICBz
Y29wZUNoYWluLnB1c2goc2NvcGVPYmplY3QpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gewor
ICAgICAgICAic291cmNlSUQiOiBzb3VyY2VJRCwKKyAgICAgICAgImxpbmUiOiBsaW5lLAorICAg
ICAgICAiZnVuY3Rpb25OYW1lIjogZnVuY3Rpb25OYW1lLAorICAgICAgICAidHlwZSI6ICJmdW5j
dGlvbiIsCisgICAgICAgICJ0aGlzT2JqZWN0IjogdGhpc09iamVjdCwKKyAgICAgICAgInNjb3Bl
Q2hhaW4iOiBzY29wZUNoYWluLAorICAgICAgICAiY2FsbGVyIjogY2FsbGVyRnJhbWUKKyAgICB9
OworfQorCitEZWJ1Z2dlclNjcmlwdC5fd2Via2l0VG9WOExpbmVOdW1iZXIgPSBmdW5jdGlvbihs
aW5lKQoreworICAgIHJldHVybiBsaW5lIC0gMTsKK307CisKK0RlYnVnZ2VyU2NyaXB0Ll92OFRv
V3dlYmtpdExpbmVOdW1iZXIgPSBmdW5jdGlvbihsaW5lKQoreworICAgIHJldHVybiBsaW5lICsg
MTsKK307CisKK3JldHVybiBEZWJ1Z2dlclNjcmlwdDsKKworfQpkaWZmIC0tZ2l0IGEvV2ViS2l0
L2Nocm9taXVtL3NyYy9qcy9EZXZUb29scy5qcyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvRGV2
VG9vbHMuanMKaW5kZXggNWIyODhlYy4uOTQwNmJmMCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9t
aXVtL3NyYy9qcy9EZXZUb29scy5qcworKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RldlRv
b2xzLmpzCkBAIC0xODMsMTIgKzE4MywxNiBAQCBXZWJJbnNwZWN0b3IubG9hZGVkID0gZnVuY3Rp
b24oKQogICAgIFByZWZlcmVuY2VzLmhlYXBQcm9maWxlclByZXNlbnQgPSB0cnVlOwogICAgIFBy
ZWZlcmVuY2VzLmRlYnVnZ2VyQWx3YXlzRW5hYmxlZCA9IHRydWU7CiAgICAgUHJlZmVyZW5jZXMu
cHJvZmlsZXJBbHdheXNFbmFibGVkID0gdHJ1ZTsKKyAgICBSZW1vdGVEZWJ1Z2dlckFnZW50LnNl
dERlYnVnZ2VyU2NyaXB0U291cmNlKCIoIiArIGRlYnVnZ2VyU2NyaXB0Q29uc3RydWN0b3IgKyAi
KSgpOyIpOworIAogICAgIG9sZExvYWRlZC5jYWxsKHRoaXMpOwogCiAgICAgSW5zcGVjdG9yRnJv
bnRlbmRIb3N0LmxvYWRlZCgpOwogfTsKIAogCitpZiAoIXdpbmRvdy52OFNjcmlwdERlYnVnU2Vy
dmVyRW5hYmxlZCkgeworCiAvKioKICAqIFRoaXMgb3ZlcnJpZGUgaXMgbmVjZXNzYXJ5IGZvciBh
ZGRpbmcgc2NyaXB0IHNvdXJjZSBhc3luY2hyb25vdXNseS4KICAqIEBvdmVycmlkZQpAQCAtMjI1
LDE4ICsyMjksNiBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0Vmlldy5wcm90b3R5cGUuZGlkUmVzb2x2
ZVNjcmlwdFNvdXJjZV8gPSBmdW5jdGlvbigpCiB9OwogCiAKLS8qKgotICogQHBhcmFtIHtzdHJp
bmd9IHR5cGUgVHlwZSBvZiB0aGUgdGhlIHByb3BlcnR5IHZhbHVlKCJvYmplY3QiIG9yICJmdW5j
dGlvbiIpLgotICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZSBDbGFzcyBuYW1lIG9mIHRoZSBw
cm9wZXJ0eSB2YWx1ZS4KLSAqIEBjb25zdHJ1Y3RvcgotICovCi1XZWJJbnNwZWN0b3IuVW5yZXNv
bHZlZFByb3BlcnR5VmFsdWUgPSBmdW5jdGlvbih0eXBlLCBjbGFzc05hbWUpCi17Ci0gICAgdGhp
cy50eXBlID0gdHlwZTsKLSAgICB0aGlzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsKLX07Ci0KLQog
KGZ1bmN0aW9uKCkKIHsKICAgICB2YXIgb2xkU2hvdyA9IFdlYkluc3BlY3Rvci5TY3JpcHRzUGFu
ZWwucHJvdG90eXBlLnNob3c7CkBAIC0yNDksNiArMjQxLDQ3IEBAIFdlYkluc3BlY3Rvci5VbnJl
c29sdmVkUHJvcGVydHlWYWx1ZSA9IGZ1bmN0aW9uKHR5cGUsIGNsYXNzTmFtZSkKIH0pKCk7CiAK
IAorKGZ1bmN0aW9uICgpIHsKK3ZhciBvcmlnID0gSW5qZWN0ZWRTY3JpcHRBY2Nlc3MucHJvdG90
eXBlLmdldFByb3BlcnRpZXM7CitJbmplY3RlZFNjcmlwdEFjY2Vzcy5wcm90b3R5cGUuZ2V0UHJv
cGVydGllcyA9IGZ1bmN0aW9uKG9iamVjdFByb3h5LCBpZ25vcmVIYXNPd25Qcm9wZXJ0eSwgYWJi
cmV2aWF0ZSwgY2FsbGJhY2spCit7CisgICAgaWYgKG9iamVjdFByb3h5LmlzU2NvcGUpCisgICAg
ICAgIGRldnRvb2xzLnRvb2xzLmdldERlYnVnZ2VyQWdlbnQoKS5yZXNvbHZlU2NvcGUob2JqZWN0
UHJveHkub2JqZWN0SWQsIGNhbGxiYWNrKTsKKyAgICBlbHNlIGlmIChvYmplY3RQcm94eS5pc1Y4
UmVmKQorICAgICAgICBkZXZ0b29scy50b29scy5nZXREZWJ1Z2dlckFnZW50KCkucmVzb2x2ZUNo
aWxkcmVuKG9iamVjdFByb3h5Lm9iamVjdElkLCBjYWxsYmFjaywgZmFsc2UpOworICAgIGVsc2UK
KyAgICAgICAgb3JpZy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworfTsKK30pKCk7CisKKworKGZ1
bmN0aW9uKCkKK3sKK0luamVjdGVkU2NyaXB0QWNjZXNzLnByb3RvdHlwZS5ldmFsdWF0ZUluQ2Fs
bEZyYW1lID0gZnVuY3Rpb24oY2FsbEZyYW1lSWQsIGNvZGUsIG9iamVjdEdyb3VwLCBjYWxsYmFj
aykKK3sKKyAgICAvL1RPRE8ocGZlbGRtYW4pOiByZW1vdmUgb25jZSA0OTA4NCBpcyByb2xsZWQu
CisgICAgaWYgKCFjYWxsYmFjaykKKyAgICAgICAgY2FsbGJhY2sgPSBvYmplY3RHcm91cDsKKyAg
ICBkZXZ0b29scy50b29scy5nZXREZWJ1Z2dlckFnZW50KCkuZXZhbHVhdGVJbkNhbGxGcmFtZShj
YWxsRnJhbWVJZCwgY29kZSwgY2FsbGJhY2spOworfTsKK30pKCk7CisKKworKGZ1bmN0aW9uKCkK
K3sKK3ZhciBvcmlnID0gSW5qZWN0ZWRTY3JpcHRBY2Nlc3MucHJvdG90eXBlLmdldENvbXBsZXRp
b25zOworSW5qZWN0ZWRTY3JpcHRBY2Nlc3MucHJvdG90eXBlLmdldENvbXBsZXRpb25zID0gZnVu
Y3Rpb24oZXhwcmVzc2lvblN0cmluZywgaW5jbHVkZUluc3BlY3RvckNvbW1hbmRMaW5lQVBJLCBj
YWxsRnJhbWVJZCwgcmVwb3J0Q29tcGxldGlvbnMpCit7CisgICAgaWYgKHR5cGVvZiBjYWxsRnJh
bWVJZCA9PT0gIm51bWJlciIpCisgICAgICAgIGRldnRvb2xzLnRvb2xzLmdldERlYnVnZ2VyQWdl
bnQoKS5yZXNvbHZlQ29tcGxldGlvbnNPbkZyYW1lKGV4cHJlc3Npb25TdHJpbmcsIGNhbGxGcmFt
ZUlkLCByZXBvcnRDb21wbGV0aW9ucyk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gb3JpZy5h
cHBseSh0aGlzLCBhcmd1bWVudHMpOworfTsKK30pKCk7CisKK30KKworCiAoZnVuY3Rpb24gSW50
ZXJjZXB0UHJvZmlsZXNQYW5lbEV2ZW50cygpCiB7CiAgICAgdmFyIG9sZFNob3cgPSBXZWJJbnNw
ZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUuc2hvdzsKQEAgLTM0Myw0NSArMzc2LDYgQEAg
V2ViSW5zcGVjdG9yLlVJU3RyaW5nID0gZnVuY3Rpb24oc3RyaW5nKQogfSkoKTsKIAogCi0oZnVu
Y3Rpb24gKCkgewotdmFyIG9yaWcgPSBJbmplY3RlZFNjcmlwdEFjY2Vzcy5wcm90b3R5cGUuZ2V0
UHJvcGVydGllczsKLUluamVjdGVkU2NyaXB0QWNjZXNzLnByb3RvdHlwZS5nZXRQcm9wZXJ0aWVz
ID0gZnVuY3Rpb24ob2JqZWN0UHJveHksIGlnbm9yZUhhc093blByb3BlcnR5LCBhYmJyZXZpYXRl
LCBjYWxsYmFjaykKLXsKLSAgICBpZiAob2JqZWN0UHJveHkuaXNTY29wZSkKLSAgICAgICAgZGV2
dG9vbHMudG9vbHMuZ2V0RGVidWdnZXJBZ2VudCgpLnJlc29sdmVTY29wZShvYmplY3RQcm94eS5v
YmplY3RJZCwgY2FsbGJhY2spOwotICAgIGVsc2UgaWYgKG9iamVjdFByb3h5LmlzVjhSZWYpCi0g
ICAgICAgIGRldnRvb2xzLnRvb2xzLmdldERlYnVnZ2VyQWdlbnQoKS5yZXNvbHZlQ2hpbGRyZW4o
b2JqZWN0UHJveHkub2JqZWN0SWQsIGNhbGxiYWNrLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAg
ICBvcmlnLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci19OwotfSkoKTsKLQotCi0oZnVuY3Rpb24o
KQotewotSW5qZWN0ZWRTY3JpcHRBY2Nlc3MucHJvdG90eXBlLmV2YWx1YXRlSW5DYWxsRnJhbWUg
PSBmdW5jdGlvbihjYWxsRnJhbWVJZCwgY29kZSwgb2JqZWN0R3JvdXAsIGNhbGxiYWNrKQotewot
ICAgIC8vVE9ETyhwZmVsZG1hbik6IHJlbW92ZSBvbmNlIDQ5MDg0IGlzIHJvbGxlZC4KLSAgICBp
ZiAoIWNhbGxiYWNrKQotICAgICAgICBjYWxsYmFjayA9IG9iamVjdEdyb3VwOwotICAgIGRldnRv
b2xzLnRvb2xzLmdldERlYnVnZ2VyQWdlbnQoKS5ldmFsdWF0ZUluQ2FsbEZyYW1lKGNhbGxGcmFt
ZUlkLCBjb2RlLCBjYWxsYmFjayk7Ci19OwotfSkoKTsKLQotCi0oZnVuY3Rpb24oKQotewotdmFy
IG9yaWcgPSBJbmplY3RlZFNjcmlwdEFjY2Vzcy5wcm90b3R5cGUuZ2V0Q29tcGxldGlvbnM7Ci1J
bmplY3RlZFNjcmlwdEFjY2Vzcy5wcm90b3R5cGUuZ2V0Q29tcGxldGlvbnMgPSBmdW5jdGlvbihl
eHByZXNzaW9uU3RyaW5nLCBpbmNsdWRlSW5zcGVjdG9yQ29tbWFuZExpbmVBUEksIGNhbGxGcmFt
ZUlkLCByZXBvcnRDb21wbGV0aW9ucykKLXsKLSAgICBpZiAodHlwZW9mIGNhbGxGcmFtZUlkID09
PSAibnVtYmVyIikKLSAgICAgICAgZGV2dG9vbHMudG9vbHMuZ2V0RGVidWdnZXJBZ2VudCgpLnJl
c29sdmVDb21wbGV0aW9uc09uRnJhbWUoZXhwcmVzc2lvblN0cmluZywgY2FsbEZyYW1lSWQsIHJl
cG9ydENvbXBsZXRpb25zKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBvcmlnLmFwcGx5KHRo
aXMsIGFyZ3VtZW50cyk7Ci19OwotfSkoKTsKLQotCiAvLyBXZSBuZWVkIHRvIGhhdmUgYSBwbGFj
ZSBmb3IgcG9zdHBvbmVkIHRhc2tzCiAvLyB3aGljaCBzaG91bGQgYmUgZXhlY3V0ZWQgd2hlbiBh
bGwgdGhlIG1lc3NhZ2VzIGJldHdlZW4gYWdlbnQgYW5kIGZyb250ZW5kCiAvLyBhcmUgcHJvY2Vz
c2VkLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9EZXZUb29sc0hvc3RTdHVi
LmpzIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9EZXZUb29sc0hvc3RTdHViLmpzCmluZGV4IDhi
MmY0NmIuLmNhZTRhMWUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvRGV2VG9v
bHNIb3N0U3R1Yi5qcworKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RldlRvb2xzSG9zdFN0
dWIuanMKQEAgLTU1LDYgKzU1LDExIEBAIFJlbW90ZURlYnVnZ2VyQWdlbnRTdHViLnByb3RvdHlw
ZS5wcm9jZXNzRGVidWdDb21tYW5kcyA9IGZ1bmN0aW9uKCkKIH07CiAKIAorUmVtb3RlRGVidWdn
ZXJBZ2VudFN0dWIucHJvdG90eXBlLnNldERlYnVnZ2VyU2NyaXB0U291cmNlID0gZnVuY3Rpb24o
c291cmNlKQoreworfTsKKworCiAvKioKICAqIEBjb25zdHJ1Y3RvcgogICovCmRpZmYgLS1naXQg
YS9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0luc3BlY3RvckNvbnRyb2xsZXJJbXBsLmpzIGIvV2Vi
S2l0L2Nocm9taXVtL3NyYy9qcy9JbnNwZWN0b3JDb250cm9sbGVySW1wbC5qcwppbmRleCBjOWEz
OWI0Li4yY2IwOTA3IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0luc3BlY3Rv
ckNvbnRyb2xsZXJJbXBsLmpzCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvSW5zcGVjdG9y
Q29udHJvbGxlckltcGwuanMKQEAgLTg2LDYgKzg2LDIxIEBAIGRldnRvb2xzLkluc3BlY3RvckJh
Y2tlbmRJbXBsID0gZnVuY3Rpb24oKQogICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xs
ZXJEZWxlZ2F0ZV8oInRvZ2dsZVN0eWxlRW5hYmxlZCIpOwogICAgIHRoaXMuaW5zdGFsbEluc3Bl
Y3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oInNldFJ1bGVTZWxlY3RvciIpOwogICAgIHRoaXMuaW5z
dGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oImFkZFJ1bGUiKTsKKworICAgIGlmICh3
aW5kb3cudjhTY3JpcHREZWJ1Z1NlcnZlckVuYWJsZWQpIHsKKyAgICB0aGlzLmluc3RhbGxJbnNw
ZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJkaXNhYmxlRGVidWdnZXIiKTsKKyAgICB0aGlzLmlu
c3RhbGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJlbmFibGVEZWJ1Z2dlciIpOworICAg
IHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oInNldEJyZWFrcG9pbnQi
KTsKKyAgICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJyZW1vdmVC
cmVha3BvaW50Iik7CisgICAgdGhpcy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRlbGVnYXRl
XygiYWN0aXZhdGVCcmVha3BvaW50cyIpOworICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRy
b2xsZXJEZWxlZ2F0ZV8oImRlYWN0aXZhdGVCcmVha3BvaW50cyIpOworICAgIHRoaXMuaW5zdGFs
bEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oInBhdXNlSW5EZWJ1Z2dlciIpOworICAgIHRo
aXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oInJlc3VtZURlYnVnZ2VyIik7
CisgICAgdGhpcy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygic3RlcEludG9T
dGF0ZW1lbnRJbkRlYnVnZ2VyIik7CisgICAgdGhpcy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxl
ckRlbGVnYXRlXygic3RlcE91dE9mRnVuY3Rpb25JbkRlYnVnZ2VyIik7CisgICAgdGhpcy5pbnN0
YWxsSW5zcGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygic3RlcE92ZXJTdGF0ZW1lbnRJbkRlYnVn
Z2VyIik7CisgICAgdGhpcy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygic2V0
UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSIpOworICAgIH0KIH07CiBkZXZ0b29scy5JbnNwZWN0b3JC
YWNrZW5kSW1wbC5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLkluc3BlY3RvckJh
Y2tlbmRTdHViLnByb3RvdHlwZTsKIApAQCAtMTA4LDYgKzEyMyw4IEBAIGRldnRvb2xzLkluc3Bl
Y3RvckJhY2tlbmRJbXBsLnByb3RvdHlwZS5wcm9maWxlckVuYWJsZWQgPSBmdW5jdGlvbigpCiB9
OwogCiAKK2lmICghd2luZG93LnY4U2NyaXB0RGVidWdTZXJ2ZXJFbmFibGVkKSB7CisKIGRldnRv
b2xzLkluc3BlY3RvckJhY2tlbmRJbXBsLnByb3RvdHlwZS5zZXRCcmVha3BvaW50ID0gZnVuY3Rp
b24oc291cmNlSUQsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbikKIHsKICAgICB0aGlzLnJlbW92
ZUJyZWFrcG9pbnQoc291cmNlSUQsIGxpbmUpOwpAQCAtMTkzLDYgKzIxMCw4IEBAIGRldnRvb2xz
Lkluc3BlY3RvckJhY2tlbmRJbXBsLnByb3RvdHlwZS5zZXRQYXVzZU9uRXhjZXB0aW9ucyA9IGZ1
bmN0aW9uKHZhbHVlKQogICAgIHJldHVybiBkZXZ0b29scy50b29scy5nZXREZWJ1Z2dlckFnZW50
KCkuc2V0UGF1c2VPbkV4Y2VwdGlvbnModmFsdWUpOwogfTsKIAorfQorCiAKIC8qKgogICogQG92
ZXJyaWRlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53439</attachid>
            <date>2010-04-15 08:15:08 -0700</date>
            <delta_ts>2010-04-15 11:11:06 -0700</delta_ts>
            <desc>patch</desc>
            <filename>script-debug-server4.patch</filename>
            <type>text/plain</type>
            <size>49677</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MmYxMTg0ZC4uNjE3MTcxYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MCBAQAorMjAxMC0wNC0xNSAgWXVyeSBTZW1pa2hh
dHNreSAgPHl1cnlzQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisgICAgCisgICAgICAgIFN1cHBvcnQgYmFzaWMgZGVidWdnaW5nIGNhcGFiaWxpdGll
cyBpbmNsdWRpbmcgc3RlcCBpbi9vdmVyL291dCBpbiB2OAorICAgICAgICBpbXBsZW1lbnRhdGlv
biBvZiBTY3JpcHREZWJ1Z1NlcnZlci4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9Mzc2MDQKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW5qZWN0
ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0
SG9zdDo6Y3JlYXRlSW5qZWN0ZWRTY3JpcHQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Njcmlw
dERlYnVnU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpT
Y3JpcHREZWJ1Z1NlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6
c2V0RGVidWdnZXJTY3JpcHRTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdT
ZXJ2ZXI6OmFkZExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVy
OjpyZW1vdmVMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6
c2V0QnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6cmVt
b3ZlQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6Y2xl
YXJCcmVha3BvaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0
QnJlYWtwb2ludHNBY3RpdmF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2
ZXI6OmNvbnRpbnVlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZl
cjo6c3RlcEludG9TdGF0ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2
ZXI6OnN0ZXBPdmVyU3RhdGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2Vy
dmVyOjpzdGVwT3V0T2ZGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1Nl
cnZlcjo6Y3VycmVudENhbGxGcmFtZVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERl
YnVnU2VydmVyOjpjdXJyZW50Q2FsbEZyYW1lVjgpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
RGVidWdTZXJ2ZXI6Om9uVjhEZWJ1Z01lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
RGVidWdTZXJ2ZXI6Om9uVjhEZWJ1Z0hvc3REaXNwYXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JpcHREZWJ1Z1NlcnZlcjo6aGFuZGxlVjhEZWJ1Z0hvc3REaXNwYXRjaCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6aGFuZGxlVjhEZWJ1Z01lc3NhZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRGlkUGFyc2VTb3VyY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmVuc3VyZURlYnVnZ2VyU2NyaXB0
Q29tcGlsZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmRpZFJlc3Vt
ZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpwYXVzZU9uRXhjZXB0aW9uc1N0YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpzZXRQYXVzZU9uRXhjZXB0aW9uc1N0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpzZXRNZXNzYWdlTG9v
cERpc3BhdGNoSGFuZGxlcik6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5qZWN0
ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0
SG9zdDo6Y3JlYXRlSW5qZWN0ZWRTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6VjhJbmplY3Rl
ZFNjcmlwdEhvc3Q6OmN1cnJlbnRDYWxsRnJhbWVDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpWOEluamVjdGVkU2NyaXB0SG9zdDo6aXNBY3RpdmF0aW9uQ2FsbGJhY2spOgorICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHQuanM6CisgICAgICAgIChpbmplY3Rl
ZFNjcmlwdENvbnN0cnVjdG9yKToKKyAgICAgICAgKGluamVjdGVkU2NyaXB0Q29uc3RydWN0b3Iu
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qczoKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwpOgorCiAyMDEwLTA0LTE1ICBHeXV5b3VuZyBL
aW0gIDxneXV5b3VuZy5raW1Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJp
YyBTZWlkZWwuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3Jp
cHRIb3N0Q3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhv
c3RDdXN0b20uY3BwCmluZGV4IGY4NDg3ODMuLjI1Y2YyM2YgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCkBAIC05NSw2ICs5NSw3
IEBAIFNjcmlwdE9iamVjdCBJbmplY3RlZFNjcmlwdEhvc3Q6OmNyZWF0ZUluamVjdGVkU2NyaXB0
KGNvbnN0IFN0cmluZyYgc291cmNlLCBTY3JpCiAgICAgYXJncy5hcHBlbmQodG9KUyhzY3JpcHRT
dGF0ZSwgZ2xvYmFsT2JqZWN0LCB0aGlzKSk7CiAgICAgYXJncy5hcHBlbmQoZ2xvYmFsVGhpc1Zh
bHVlKTsKICAgICBhcmdzLmFwcGVuZChqc051bWJlcihzY3JpcHRTdGF0ZSwgaWQpKTsKKyAgICBh
cmdzLmFwcGVuZChqc1N0cmluZyhzY3JpcHRTdGF0ZSwgU3RyaW5nKCJKU0MiKSkpOwogICAgIEpT
VmFsdWUgcmVzdWx0ID0gSlNDOjpjYWxsKHNjcmlwdFN0YXRlLCBmdW5jdGlvblZhbHVlLCBjYWxs
VHlwZSwgY2FsbERhdGEsIGdsb2JhbFRoaXNWYWx1ZSwgYXJncyk7CiAgICAgaWYgKHJlc3VsdC5p
c09iamVjdCgpKQogICAgICAgICByZXR1cm4gU2NyaXB0T2JqZWN0KHNjcmlwdFN0YXRlLCByZXN1
bHQuZ2V0T2JqZWN0KCkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRE
ZWJ1Z1NlcnZlci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmNw
cAppbmRleCA4NzYzMmVlLi4zYzlmMDUzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1NjcmlwdERlYnVnU2VydmVyLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERl
YnVnU2VydmVyLmNwcApAQCAtMzMsMjEgKzMzLDMxMiBAQAogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJ
UFRfREVCVUdHRVIpCiAKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNp
bmNsdWRlICJTY3JpcHREZWJ1Z0xpc3RlbmVyLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCi0j
aW5jbHVkZSA8djgtZGVidWcuaD4KLQorI2luY2x1ZGUgIlY4RE9NV2luZG93LmgiCisjaW5jbHVk
ZSAiVjhQcm94eS5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiB2ODo6UGVyc2lzdGVudDx2ODo6Q29udGV4dD4gU2NyaXB0RGVidWdTZXJ2
ZXI6OnNfdXRpbGl0eUNvbnRleHQ7CiAKK1NjcmlwdERlYnVnU2VydmVyOjpNZXNzYWdlTG9vcERp
c3BhdGNoSGFuZGxlciBTY3JpcHREZWJ1Z1NlcnZlcjo6c19tZXNzYWdlTG9vcERpc3BhdGNoSGFu
ZGxlciA9IDA7CisKIFNjcmlwdERlYnVnU2VydmVyJiBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVk
KCkKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFNjcmlwdERlYnVnU2VydmVyLCBzZXJ2ZXIs
ICgpKTsKICAgICByZXR1cm4gc2VydmVyOwogfQogCitTY3JpcHREZWJ1Z1NlcnZlcjo6U2NyaXB0
RGVidWdTZXJ2ZXIoKQorICAgIDogbV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlKERvbnRQYXVzZU9u
RXhjZXB0aW9ucykKKyAgICAsIG1fY3VycmVudENhbGxGcmFtZVN0YXRlKDApCit7Cit9CisKK3Zv
aWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnNldERlYnVnZ2VyU2NyaXB0U291cmNlKGNvbnN0IFN0cmlu
ZyYgc2NyaXB0U291cmNlKQoreworICAgIG1fZGVidWdnZXJTY3JpcHRTb3VyY2UgPSBzY3JpcHRT
b3VyY2U7Cit9CisKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmFkZExpc3RlbmVyKFNjcmlwdERl
YnVnTGlzdGVuZXIqIGxpc3RlbmVyLCBQYWdlKiBwYWdlKQoreworI2lmIEVOQUJMRShWOF9TQ1JJ
UFRfREVCVUdfU0VSVkVSKQorICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKKyAgICB2ODo6TG9j
YWw8djg6OkNvbnRleHQ+IGRlYnVnZ2VyQ29udGV4dCA9IHY4OjpEZWJ1Zzo6R2V0RGVidWdDb250
ZXh0KCk7CisgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRTY29wZShkZWJ1Z2dlckNvbnRl
eHQpOworCisgICAgaWYgKCFtX2xpc3RlbmVyc01hcC5zaXplKCkpIHsKKyAgICAgICAgZW5zdXJl
RGVidWdnZXJTY3JpcHRDb21waWxlZCgpOworICAgICAgICBBU1NFUlQoIW1fZGVidWdnZXJTY3Jp
cHQtPklzVW5kZWZpbmVkKCkpOworICAgICAgICB2ODo6RGVidWc6OlNldE1lc3NhZ2VIYW5kbGVy
MigmU2NyaXB0RGVidWdTZXJ2ZXI6Om9uVjhEZWJ1Z01lc3NhZ2UpOworICAgICAgICB2ODo6RGVi
dWc6OlNldEhvc3REaXNwYXRjaEhhbmRsZXIoJlNjcmlwdERlYnVnU2VydmVyOjpvblY4RGVidWdI
b3N0RGlzcGF0Y2gsIDEwMCAvKiBtcyAqLyk7CisgICAgfQorICAgIG1fbGlzdGVuZXJzTWFwLnNl
dChwYWdlLCBsaXN0ZW5lcik7CisgICAgVjhQcm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2
ZShwYWdlLT5tYWluRnJhbWUoKSk7CisgICAgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjb250ZXh0
ID0gcHJveHktPm1haW5Xb3JsZENvbnRleHQoKTsKKyAgICBTdHJpbmcgY29udGV4dERhdGEgPSB0
b1dlYkNvcmVTdHJpbmdXaXRoTnVsbENoZWNrKGNvbnRleHQtPkdldERhdGEoKSk7CisgICAgbV9j
b250ZXh0RGF0YU1hcC5zZXQobGlzdGVuZXIsIGNvbnRleHREYXRhKTsKKworICAgIHY4OjpIYW5k
bGU8djg6OkZ1bmN0aW9uPiBnZXRTY3JpcHRzRnVuY3Rpb24gPSB2ODo6TG9jYWw8djg6OkZ1bmN0
aW9uPjo6Q2FzdChtX2RlYnVnZ2VyU2NyaXB0LT5HZXQodjg6OlN0cmluZzo6TmV3KCJnZXRTY3Jp
cHRzIikpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUgPSB2ODo6RGVidWc6OkNh
bGwoZ2V0U2NyaXB0c0Z1bmN0aW9uKTsKKyAgICBpZiAodmFsdWUuSXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm47CisgICAgQVNTRVJUKCF2YWx1ZS0+SXNVbmRlZmluZWQoKSAmJiB2YWx1ZS0+SXNB
cnJheSgpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpBcnJheT4gc2NyaXB0c0FycmF5ID0gdjg6Okhh
bmRsZTx2ODo6QXJyYXk+OjpDYXN0KHZhbHVlKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc2NyaXB0c0FycmF5LT5MZW5ndGgoKTsgKytpKQorICAgICAgICBkaXNwYXRjaERpZFBhcnNl
U291cmNlKGxpc3RlbmVyLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHNjcmlwdHNBcnJh
eS0+R2V0KHY4OjpJbnRlZ2VyOjpOZXcoaSkpKSk7CisjZW5kaWYKK30KKwordm9pZCBTY3JpcHRE
ZWJ1Z1NlcnZlcjo6cmVtb3ZlTGlzdGVuZXIoU2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIs
IFBhZ2UqIHBhZ2UpCit7CisgICAgaWYgKCFtX2xpc3RlbmVyc01hcC5jb250YWlucyhwYWdlKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9saXN0ZW5lcnNNYXAucmVtb3ZlKHBhZ2UpOworCisg
ICAgaWYgKG1fbGlzdGVuZXJzTWFwLmlzRW1wdHkoKSkgeworICAgICAgICB2ODo6RGVidWc6OlNl
dE1lc3NhZ2VIYW5kbGVyMigwKTsKKyAgICAgICAgdjg6OkRlYnVnOjpTZXRIb3N0RGlzcGF0Y2hI
YW5kbGVyKDApOworICAgIH0KKyAgICAvLyBGSVhNRTogUmVtb3ZlIGFsbCBicmVha3BvaW50cyBz
ZXQgYnkgdGhlIGFnZW50LgorICAgIC8vIEZJWE1FOiBGb3JjZSBjb250aW51ZSBpZiBkZXRhY2gg
aGFwcGVuZWQgaW4gbmVzc3RlZCBtZXNzYWdlIGxvb3Agd2hpbGUKKyAgICAvLyBkZWJ1Z2dlciB3
YXMgcGF1c2VkIG9uIGEgYnJlYWtwb2ludChhcyBsb25nIGFzIHRoZXJlIGFyZSBvdGhlcgorICAg
IC8vIGF0dGFjaGVkIGFnZW50cyB2OCB3aWxsIHdhaXQgZm9yIGV4cGxpY2l0J2NvbnRpbnVlJyBt
ZXNzYWdlKS4KKyAgICAvLyBGSVhNRTogc2VuZCBjb250aW51ZSBjb21tYW5kIHRvIHY4IGlmIG5l
Y2Vzc2FyeTsKK30KKwordm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0QnJlYWtwb2ludChjb25z
dCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBTY3JpcHRCcmVha3BvaW50
IGJyZWFrcG9pbnQpCit7CisjaWYgRU5BQkxFKFY4X1NDUklQVF9ERUJVR19TRVJWRVIpCisgICAg
djg6OkhhbmRsZVNjb3BlIHNjb3BlOworICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gZGVidWdn
ZXJDb250ZXh0ID0gdjg6OkRlYnVnOjpHZXREZWJ1Z0NvbnRleHQoKTsKKyAgICB2ODo6Q29udGV4
dDo6U2NvcGUgY29udGV4dFNjb3BlKGRlYnVnZ2VyQ29udGV4dCk7CisKKyAgICB2ODo6TG9jYWw8
djg6Ok9iamVjdD4gYXJncyA9IHY4OjpPYmplY3Q6Ok5ldygpOworICAgIGFyZ3MtPlNldCh2ODo6
U3RyaW5nOjpOZXcoInNjcmlwdElkIiksIHY4U3RyaW5nKHNvdXJjZUlEKSk7CisgICAgYXJncy0+
U2V0KHY4OjpTdHJpbmc6Ok5ldygibGluZU51bWJlciIpLCB2ODo6SW50ZWdlcjo6TmV3KGxpbmVO
dW1iZXIpKTsKKyAgICBhcmdzLT5TZXQodjg6OlN0cmluZzo6TmV3KCJjb25kaXRpb24iKSwgdjhT
dHJpbmcoYnJlYWtwb2ludC5jb25kaXRpb24pKTsKKyAgICBhcmdzLT5TZXQodjg6OlN0cmluZzo6
TmV3KCJlbmFibGVkIiksIHY4OjpCb29sZWFuOjpOZXcoYnJlYWtwb2ludC5lbmFibGVkKSk7CisK
KyAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gc2V0QnJlYWtwb2ludEZ1bmN0aW9uID0gdjg6
OkxvY2FsPHY4OjpGdW5jdGlvbj46OkNhc3QobV9kZWJ1Z2dlclNjcmlwdC0+R2V0KHY4OjpTdHJp
bmc6Ok5ldygic2V0QnJlYWtwb2ludCIpKSk7CisgICAgdjg6OkRlYnVnOjpDYWxsKHNldEJyZWFr
cG9pbnRGdW5jdGlvbiwgYXJncyk7CisjZW5kaWYKK30KKwordm9pZCBTY3JpcHREZWJ1Z1NlcnZl
cjo6cmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5l
TnVtYmVyKQoreworI2lmIEVOQUJMRShWOF9TQ1JJUFRfREVCVUdfU0VSVkVSKQorICAgIHY4OjpI
YW5kbGVTY29wZSBzY29wZTsKKyAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGRlYnVnZ2VyQ29u
dGV4dCA9IHY4OjpEZWJ1Zzo6R2V0RGVidWdDb250ZXh0KCk7CisgICAgdjg6OkNvbnRleHQ6OlNj
b3BlIGNvbnRleHRTY29wZShkZWJ1Z2dlckNvbnRleHQpOworCisgICAgdjg6OkxvY2FsPHY4OjpP
YmplY3Q+IGFyZ3MgPSB2ODo6T2JqZWN0OjpOZXcoKTsKKyAgICBhcmdzLT5TZXQodjg6OlN0cmlu
Zzo6TmV3KCJzY3JpcHRJZCIpLCB2OFN0cmluZyhzb3VyY2VJRCkpOworICAgIGFyZ3MtPlNldCh2
ODo6U3RyaW5nOjpOZXcoImxpbmVOdW1iZXIiKSwgdjg6OkludGVnZXI6Ok5ldyhsaW5lTnVtYmVy
KSk7CisKKyAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gcmVtb3ZlQnJlYWtwb2ludEZ1bmN0
aW9uID0gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj46OkNhc3QobV9kZWJ1Z2dlclNjcmlwdC0+R2V0
KHY4OjpTdHJpbmc6Ok5ldygicmVtb3ZlQnJlYWtwb2ludCIpKSk7CisgICAgdjg6OkRlYnVnOjpD
YWxsKHJlbW92ZUJyZWFrcG9pbnRGdW5jdGlvbiwgYXJncyk7CisjZW5kaWYKK30KKwordm9pZCBT
Y3JpcHREZWJ1Z1NlcnZlcjo6Y2xlYXJCcmVha3BvaW50cygpCit7CisjaWYgRU5BQkxFKFY4X1ND
UklQVF9ERUJVR19TRVJWRVIpCisgICAgZW5zdXJlRGVidWdnZXJTY3JpcHRDb21waWxlZCgpOwor
ICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKKyAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGRl
YnVnZ2VyQ29udGV4dCA9IHY4OjpEZWJ1Zzo6R2V0RGVidWdDb250ZXh0KCk7CisgICAgdjg6OkNv
bnRleHQ6OlNjb3BlIGNvbnRleHRTY29wZShkZWJ1Z2dlckNvbnRleHQpOworCisgICAgdjg6Okhh
bmRsZTx2ODo6RnVuY3Rpb24+IHNldEJyZWFrcG9pbnRzQWN0aXZhdGVkID0gdjg6OkxvY2FsPHY4
OjpGdW5jdGlvbj46OkNhc3QobV9kZWJ1Z2dlclNjcmlwdC0+R2V0KHY4OjpTdHJpbmc6Ok5ldygi
Y2xlYXJCcmVha3BvaW50cyIpKSk7CisgICAgdjg6OkRlYnVnOjpDYWxsKHNldEJyZWFrcG9pbnRz
QWN0aXZhdGVkKTsKKyNlbmRpZgorfQorCit2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpzZXRCcmVh
a3BvaW50c0FjdGl2YXRlZChib29sIGVuYWJsZWQpCit7CisjaWYgRU5BQkxFKFY4X1NDUklQVF9E
RUJVR19TRVJWRVIpCisgICAgZW5zdXJlRGVidWdnZXJTY3JpcHRDb21waWxlZCgpOworICAgIHY4
OjpIYW5kbGVTY29wZSBzY29wZTsKKyAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGRlYnVnZ2Vy
Q29udGV4dCA9IHY4OjpEZWJ1Zzo6R2V0RGVidWdDb250ZXh0KCk7CisgICAgdjg6OkNvbnRleHQ6
OlNjb3BlIGNvbnRleHRTY29wZShkZWJ1Z2dlckNvbnRleHQpOworCisgICAgdjg6OkxvY2FsPHY4
OjpPYmplY3Q+IGFyZ3MgPSB2ODo6T2JqZWN0OjpOZXcoKTsKKyAgICBhcmdzLT5TZXQodjg6OlN0
cmluZzo6TmV3KCJlbmFibGVkIiksIHY4OjpCb29sZWFuOjpOZXcoZW5hYmxlZCkpOworICAgIHY4
OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBzZXRCcmVha3BvaW50c0FjdGl2YXRlZCA9IHY4OjpMb2Nh
bDx2ODo6RnVuY3Rpb24+OjpDYXN0KG1fZGVidWdnZXJTY3JpcHQtPkdldCh2ODo6U3RyaW5nOjpO
ZXcoInNldEJyZWFrcG9pbnRzQWN0aXZhdGVkIikpKTsKKyAgICB2ODo6RGVidWc6OkNhbGwoc2V0
QnJlYWtwb2ludHNBY3RpdmF0ZWQsIGFyZ3MpOworI2VuZGlmCit9CisKK3ZvaWQgU2NyaXB0RGVi
dWdTZXJ2ZXI6OmNvbnRpbnVlUHJvZ3JhbSgpCit7CisjaWYgRU5BQkxFKFY4X1NDUklQVF9ERUJV
R19TRVJWRVIpCisgICAgU3RyaW5nIGNtZCgie1wic2VxXCI6MSxcInR5cGVcIjpcInJlcXVlc3Rc
IixcImNvbW1hbmRcIjpcImNvbnRpbnVlXCJ9Iik7CisgICAgdjg6OkRlYnVnOjpTZW5kQ29tbWFu
ZChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQxNl90Kj4oY21kLmNoYXJhY3RlcnMoKSksIGNt
ZC5sZW5ndGgoKSwgbmV3IHY4OjpEZWJ1Zzo6Q2xpZW50RGF0YSgpKTsKKyAgICBkaWRSZXN1bWUo
KTsKKyNlbmRpZgorfQorCit2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpzdGVwSW50b1N0YXRlbWVu
dCgpCit7CisjaWYgRU5BQkxFKFY4X1NDUklQVF9ERUJVR19TRVJWRVIpCisgICAgU3RyaW5nIGNt
ZCgie1wic2VxXCI6MSxcInR5cGVcIjpcInJlcXVlc3RcIixcImNvbW1hbmRcIjpcImNvbnRpbnVl
XCIsXCJhcmd1bWVudHNcIjp7XCJzdGVwYWN0aW9uXCI6XCJpblwifX0iKTsKKyAgICB2ODo6RGVi
dWc6OlNlbmRDb21tYW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDE2X3QqPihjbWQuY2hh
cmFjdGVycygpKSwgY21kLmxlbmd0aCgpLCBuZXcgdjg6OkRlYnVnOjpDbGllbnREYXRhKCkpOwor
ICAgIGRpZFJlc3VtZSgpOworI2VuZGlmCit9CisKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnN0
ZXBPdmVyU3RhdGVtZW50KCkKK3sKKyNpZiBFTkFCTEUoVjhfU0NSSVBUX0RFQlVHX1NFUlZFUikK
KyAgICBTdHJpbmcgY21kKCJ7XCJzZXFcIjoxLFwidHlwZVwiOlwicmVxdWVzdFwiLFwiY29tbWFu
ZFwiOlwiY29udGludWVcIixcImFyZ3VtZW50c1wiOntcInN0ZXBhY3Rpb25cIjpcIm5leHRcIn19
Iik7CisgICAgdjg6OkRlYnVnOjpTZW5kQ29tbWFuZChyZWludGVycHJldF9jYXN0PGNvbnN0IHVp
bnQxNl90Kj4oY21kLmNoYXJhY3RlcnMoKSksIGNtZC5sZW5ndGgoKSwgbmV3IHY4OjpEZWJ1Zzo6
Q2xpZW50RGF0YSgpKTsKKyAgICBkaWRSZXN1bWUoKTsKKyNlbmRpZgorfQorCit2b2lkIFNjcmlw
dERlYnVnU2VydmVyOjpzdGVwT3V0T2ZGdW5jdGlvbigpCit7CisjaWYgRU5BQkxFKFY4X1NDUklQ
VF9ERUJVR19TRVJWRVIpCisgICAgU3RyaW5nIGNtZCgie1wic2VxXCI6MSxcInR5cGVcIjpcInJl
cXVlc3RcIixcImNvbW1hbmRcIjpcImNvbnRpbnVlXCIsXCJhcmd1bWVudHNcIjp7XCJzdGVwYWN0
aW9uXCI6XCJvdXRcIn19Iik7CisgICAgdjg6OkRlYnVnOjpTZW5kQ29tbWFuZChyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQxNl90Kj4oY21kLmNoYXJhY3RlcnMoKSksIGNtZC5sZW5ndGgoKSwg
bmV3IHY4OjpEZWJ1Zzo6Q2xpZW50RGF0YSgpKTsKKyAgICBkaWRSZXN1bWUoKTsKKyNlbmRpZgor
fQorCitTY3JpcHRTdGF0ZSogU2NyaXB0RGVidWdTZXJ2ZXI6OmN1cnJlbnRDYWxsRnJhbWVTdGF0
ZSgpCit7CisgICAgcmV0dXJuIG1fY3VycmVudENhbGxGcmFtZVN0YXRlOworfQorCit2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gU2NyaXB0RGVidWdTZXJ2ZXI6OmN1cnJlbnRDYWxsRnJhbWVWOCgpCit7
CisjaWYgRU5BQkxFKFY4X1NDUklQVF9ERUJVR19TRVJWRVIpCisgICAgaWYgKCFtX2N1cnJlbnRD
YWxsRnJhbWUuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbV9jdXJyZW50Q2FsbEZyYW1lOwor
CisgICAgLy8gQ2hlY2sgb24gYSBicC4KKyAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gY3Vy
cmVudENhbGxGcmFtZUZ1bmN0aW9uID0gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj46OkNhc3QobV9k
ZWJ1Z2dlclNjcmlwdC0+R2V0KHY4OjpTdHJpbmc6Ok5ldygiY3VycmVudENhbGxGcmFtZSIpKSk7
CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFyZ3ZbXSA9IHsgbV9leGVjdXRpb25TdGF0ZSB9
OworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZXN1bHQgPSBjdXJyZW50Q2FsbEZyYW1lRnVu
Y3Rpb24tPkNhbGwobV9kZWJ1Z2dlclNjcmlwdCwgMSwgYXJndik7CisgICAgbV9jdXJyZW50Q2Fs
bEZyYW1lID0gdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPjo6TmV3KHJlc3VsdCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOwor
I2VuZGlmCit9CisKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6Om9uVjhEZWJ1Z01lc3NhZ2UoY29u
c3Qgdjg6OkRlYnVnOjpNZXNzYWdlJiBtZXNzYWdlKQoreworICAgIFNjcmlwdERlYnVnU2VydmVy
OjpzaGFyZWQoKS5oYW5kbGVWOERlYnVnTWVzc2FnZShtZXNzYWdlKTsKK30KKwordm9pZCBTY3Jp
cHREZWJ1Z1NlcnZlcjo6b25WOERlYnVnSG9zdERpc3BhdGNoKCkKK3sKKyAgICBTY3JpcHREZWJ1
Z1NlcnZlcjo6c2hhcmVkKCkuaGFuZGxlVjhEZWJ1Z0hvc3REaXNwYXRjaCgpOworfQorCit2b2lk
IFNjcmlwdERlYnVnU2VydmVyOjpoYW5kbGVWOERlYnVnSG9zdERpc3BhdGNoKCkKK3sKKyAgICBp
ZiAoIXNfbWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAg
IFZlY3RvcjxXZWJDb3JlOjpQYWdlKj4gcGFnZXM7CisgICAgZm9yIChMaXN0ZW5lcnNNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9saXN0ZW5lcnNNYXAuYmVnaW4oKTsgaXQgIT0gbV9saXN0ZW5lcnNNYXAu
ZW5kKCk7ICsraXQpCisgICAgICAgIHBhZ2VzLmFwcGVuZChpdC0+Zmlyc3QpOworICAgIAorICAg
IHNfbWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIocGFnZXMpOworfQorCit2b2lkIFNjcmlwdERl
YnVnU2VydmVyOjpoYW5kbGVWOERlYnVnTWVzc2FnZShjb25zdCB2ODo6RGVidWc6Ok1lc3NhZ2Um
IG1lc3NhZ2UpCit7CisgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOworCisgICAgaWYgKCFtZXNz
YWdlLklzRXZlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSWdub3JlIHVuc3VwcG9y
dGVkIGV2ZW50IHR5cGVzLgorICAgIGlmIChtZXNzYWdlLkdldEV2ZW50KCkgIT0gdjg6OkFmdGVy
Q29tcGlsZSAmJiBtZXNzYWdlLkdldEV2ZW50KCkgIT0gdjg6OkJyZWFrKQorICAgICAgICByZXR1
cm47CisKKyAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gbWVzc2FnZS5HZXRF
dmVudENvbnRleHQoKTsKKyAgICAvLyBJZiB0aGUgY29udGV4dCBpcyBmcm9tIG9uZSBvZiB0aGUg
aW5wZWN0ZWQgdGFicyBpdCBzaG91bGQgaGF2ZSBpdHMgY29udGV4dAorICAgIC8vIGRhdGEuIFNr
aXAgZXZlbnRzIGZyb20gdW5rbm93biBjb250ZXh0cy4KKyAgICBpZiAoY29udGV4dC5Jc0VtcHR5
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRlc3QgdGhhdCBjb250ZXh0IGhhcyBhc3Nv
Y2lhdGVkIGdsb2JhbCBkb20gd2luZG93IG9iamVjdC4KKyAgICB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IGdsb2JhbCA9IGNvbnRleHQtPkdsb2JhbCgpOworICAgIGlmIChnbG9iYWwuSXNFbXB0eSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBnbG9iYWwgPSBWOERPTVdyYXBwZXI6Omxvb2t1cERP
TVdyYXBwZXIoVjhET01XaW5kb3c6OkdldFRlbXBsYXRlKCksIGdsb2JhbCk7CisgICAgaWYgKGds
b2JhbC5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEZyYW1lKiBmcmFtZSA9IFY4
UHJveHk6OnJldHJpZXZlRnJhbWUoY29udGV4dCk7CisgICAgaWYgKGZyYW1lKSB7CisgICAgICAg
IFNjcmlwdERlYnVnTGlzdGVuZXIqIGxpc3RlbmVyID0gbV9saXN0ZW5lcnNNYXAuZ2V0KGZyYW1l
LT5wYWdlKCkpOworICAgICAgICBpZiAobGlzdGVuZXIpIHsKKyAgICAgICAgICAgIGlmIChtZXNz
YWdlLkdldEV2ZW50KCkgPT0gdjg6OkFmdGVyQ29tcGlsZSkgeworICAgICAgICAgICAgICAgIHY4
OjpDb250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUodjg6OkRlYnVnOjpHZXREZWJ1Z0NvbnRleHQo
KSk7CisgICAgICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGFyZ3MgPSB2ODo6T2Jq
ZWN0OjpOZXcoKTsKKyAgICAgICAgICAgICAgICBhcmdzLT5TZXQodjg6OlN0cmluZzo6TmV3KCJl
dmVudERhdGEiKSwgbWVzc2FnZS5HZXRFdmVudERhdGEoKSk7CisgICAgICAgICAgICAgICAgdjg6
OkhhbmRsZTx2ODo6RnVuY3Rpb24+IG9uQWZ0ZXJDb21waWxlRnVuY3Rpb24gPSB2ODo6TG9jYWw8
djg6OkZ1bmN0aW9uPjo6Q2FzdChtX2RlYnVnZ2VyU2NyaXB0LT5HZXQodjg6OlN0cmluZzo6TmV3
KCJnZXRBZnRlckNvbXBpbGVTY3JpcHQiKSkpOworICAgICAgICAgICAgICAgIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBhcmd2W10gPSB7IG1lc3NhZ2UuR2V0RXhlY3V0aW9uU3RhdGUoKSwgYXJncyB9
OworICAgICAgICAgICAgICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSA9IG9uQWZ0ZXJD
b21waWxlRnVuY3Rpb24tPkNhbGwobV9kZWJ1Z2dlclNjcmlwdCwgMiwgYXJndik7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKHZhbHVlLT5Jc09iamVjdCgpKTsKKyAgICAgICAgICAgICAgICB2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3Qo
dmFsdWUpOworICAgICAgICAgICAgICAgIGRpc3BhdGNoRGlkUGFyc2VTb3VyY2UobGlzdGVuZXIs
IG9iamVjdCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UuR2V0RXZlbnQoKSA9PSB2
ODo6QnJlYWspIHsKKyAgICAgICAgICAgICAgICBtX2V4ZWN1dGlvblN0YXRlID0gdjg6OlBlcnNp
c3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhtZXNzYWdlLkdldEV4ZWN1dGlvblN0YXRlKCkpOworICAg
ICAgICAgICAgICAgIG1fY3VycmVudENhbGxGcmFtZVN0YXRlID0gbWFpbldvcmxkU2NyaXB0U3Rh
dGUoZnJhbWUpOworICAgICAgICAgICAgICAgIGxpc3RlbmVyLT5kaWRQYXVzZSgpOworICAgICAg
ICAgICAgICAgIG1fY3VycmVudENhbGxGcmFtZVN0YXRlID0gMDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KK30KKwordm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlzcGF0Y2hEaWRQ
YXJzZVNvdXJjZShTY3JpcHREZWJ1Z0xpc3RlbmVyKiBsaXN0ZW5lciwgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBvYmplY3QpCit7CisgICAgU3RyaW5nIGNvbnRleHREYXRhID0gdG9XZWJDb3JlU3Ry
aW5nV2l0aE51bGxDaGVjayhvYmplY3QtPkdldCh2ODo6U3RyaW5nOjpOZXcoImNvbnRleHREYXRh
IikpKTsKKyAgICBpZiAoY29udGV4dERhdGEgIT0gbV9jb250ZXh0RGF0YU1hcC5nZXQobGlzdGVu
ZXIpKQorICAgICAgICByZXR1cm47CisKKyAgICBsaXN0ZW5lci0+ZGlkUGFyc2VTb3VyY2UoCisg
ICAgICAgIHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2sob2JqZWN0LT5HZXQodjg6OlN0cmlu
Zzo6TmV3KCJpZCIpKSksCisgICAgICAgIHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2sob2Jq
ZWN0LT5HZXQodjg6OlN0cmluZzo6TmV3KCJuYW1lIikpKSwKKyAgICAgICAgdG9XZWJDb3JlU3Ry
aW5nV2l0aE51bGxDaGVjayhvYmplY3QtPkdldCh2ODo6U3RyaW5nOjpOZXcoInNvdXJjZSIpKSks
CisgICAgICAgIG9iamVjdC0+R2V0KHY4OjpTdHJpbmc6Ok5ldygibGluZU9mZnNldCIpKS0+VG9J
bnRlZ2VyKCktPlZhbHVlKCkpOworfQorCit2b2lkIFNjcmlwdERlYnVnU2VydmVyOjplbnN1cmVE
ZWJ1Z2dlclNjcmlwdENvbXBpbGVkKCkKK3sKKyAgICBpZiAobV9kZWJ1Z2dlclNjcmlwdC5Jc0Vt
cHR5KCkpIHsKKyAgICAgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOworICAgICAgICB2ODo6TG9j
YWw8djg6OkNvbnRleHQ+IGRlYnVnZ2VyQ29udGV4dCA9IHY4OjpEZWJ1Zzo6R2V0RGVidWdDb250
ZXh0KCk7CisgICAgICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUoZGVidWdnZXJD
b250ZXh0KTsKKyAgICAgICAgbV9kZWJ1Z2dlclNjcmlwdCA9IHY4OjpQZXJzaXN0ZW50PHY4OjpP
YmplY3Q+OjpOZXcodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCh2ODo6U2NyaXB0OjpDb21w
aWxlKHY4U3RyaW5nKG1fZGVidWdnZXJTY3JpcHRTb3VyY2UpKS0+UnVuKCkpKTsKKyAgICB9Cit9
CisKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRpZFJlc3VtZSgpCit7CisgICAgaWYgKCFtX2N1
cnJlbnRDYWxsRnJhbWUuSXNFbXB0eSgpKSB7CisgICAgICAgIG1fY3VycmVudENhbGxGcmFtZS5E
aXNwb3NlKCk7CisgICAgICAgIG1fY3VycmVudENhbGxGcmFtZS5DbGVhcigpOworICAgIH0KKyAg
ICBpZiAoIW1fZXhlY3V0aW9uU3RhdGUuSXNFbXB0eSgpKSB7CisgICAgICAgIG1fZXhlY3V0aW9u
U3RhdGUuRGlzcG9zZSgpOworICAgICAgICBtX2V4ZWN1dGlvblN0YXRlLkNsZWFyKCk7CisgICAg
fQorfQorCiAvLyBDcmVhdGUgdGhlIHV0aWxpdHkgY29udGV4dCBmb3IgaG9sZGluZyBKYXZhU2Ny
aXB0IGZ1bmN0aW9ucyB1c2VkIGludGVybmFsbHkKIC8vIHdoaWNoIGFyZSBub3QgdmlzaWJsZSB0
byBKYXZhU2NyaXB0IGV4ZWN1dGluZyBvbiB0aGUgcGFnZS4KIHZvaWQgU2NyaXB0RGVidWdTZXJ2
ZXI6OmNyZWF0ZVV0aWxpdHlDb250ZXh0KCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mv
djgvU2NyaXB0RGVidWdTZXJ2ZXIuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RGVidWdT
ZXJ2ZXIuaAppbmRleCAzZGU3YzIzLi45MzllMDBjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3Jp
cHREZWJ1Z1NlcnZlci5oCkBAIC0zNiwxMiArMzYsMTUgQEAKICNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgogI2luY2x1ZGUgIlNjcmlwdEJyZWFrcG9pbnQuaCIKICNpbmNsdWRlICJTY3JpcHRT
dGF0ZS5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKICNpbmNsdWRlICJUaW1lci5oIgotCisj
aW5jbHVkZSA8djgtZGVidWcuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFBhZ2U7
CiBjbGFzcyBTY3JpcHREZWJ1Z0xpc3RlbmVyOwogCiBjbGFzcyBTY3JpcHREZWJ1Z1NlcnZlciA6
IHB1YmxpYyBOb25jb3B5YWJsZSB7CkBAIC01NywzOSArNjAsNTggQEAgcHVibGljOgogICAgIC8v
IG9mIHN1Y2ggZXhjZXB0aW9uIGlzIHVwIHRvIHRoZSBjYWxsZXIuCiAgICAgc3RhdGljIGJvb2wg
dG9wU3RhY2tGcmFtZShTdHJpbmcmIHNvdXJjZU5hbWUsIGludCYgbGluZU51bWJlciwgU3RyaW5n
JiBmdW5jdGlvbk5hbWUpOwogCi0gICAgdm9pZCBhZGRMaXN0ZW5lcihTY3JpcHREZWJ1Z0xpc3Rl
bmVyKiwgUGFnZSopIHsgfQotICAgIHZvaWQgcmVtb3ZlTGlzdGVuZXIoU2NyaXB0RGVidWdMaXN0
ZW5lciosIFBhZ2UqKSB7IH0KKyAgICB2b2lkIGFkZExpc3RlbmVyKFNjcmlwdERlYnVnTGlzdGVu
ZXIqLCBQYWdlKik7CisgICAgdm9pZCByZW1vdmVMaXN0ZW5lcihTY3JpcHREZWJ1Z0xpc3RlbmVy
KiwgUGFnZSopOwogCi0gICAgdm9pZCBzZXRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNl
SUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIFNjcmlwdEJyZWFrcG9pbnQgYnJlYWtwb2ludCkgeyB9
Ci0gICAgdm9pZCByZW1vdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2ln
bmVkIGxpbmVOdW1iZXIpIHsgfQotICAgIHZvaWQgY2xlYXJCcmVha3BvaW50cygpIHsgfQotICAg
IHZvaWQgc2V0QnJlYWtwb2ludHNBY3RpdmF0ZWQoYm9vbCBhY3RpdmF0ZWQpIHsgfQorICAgIHZv
aWQgc2V0QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVt
YmVyLCBTY3JpcHRCcmVha3BvaW50IGJyZWFrcG9pbnQpOworICAgIHZvaWQgcmVtb3ZlQnJlYWtw
b2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyKTsKKyAgICB2
b2lkIGNsZWFyQnJlYWtwb2ludHMoKTsKKyAgICB2b2lkIHNldEJyZWFrcG9pbnRzQWN0aXZhdGVk
KGJvb2wgYWN0aXZhdGVkKTsKIAogICAgIGVudW0gUGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSB7CiAg
ICAgICAgIERvbnRQYXVzZU9uRXhjZXB0aW9ucywKICAgICAgICAgUGF1c2VPbkFsbEV4Y2VwdGlv
bnMsCiAgICAgICAgIFBhdXNlT25VbmNhdWdodEV4Y2VwdGlvbnMKICAgICB9OwotICAgIFBhdXNl
T25FeGNlcHRpb25zU3RhdGUgcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSgpIGNvbnN0IHsgcmV0dXJu
IERvbnRQYXVzZU9uRXhjZXB0aW9uczsgfQotICAgIHZvaWQgc2V0UGF1c2VPbkV4Y2VwdGlvbnNT
dGF0ZShQYXVzZU9uRXhjZXB0aW9uc1N0YXRlKSB7IH0KKyAgICBQYXVzZU9uRXhjZXB0aW9uc1N0
YXRlIHBhdXNlT25FeGNlcHRpb25zU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3BhdXNlT25FeGNl
cHRpb25zU3RhdGU7IH0KKyAgICB2b2lkIHNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUoUGF1c2VP
bkV4Y2VwdGlvbnNTdGF0ZSBwYXVzZU9uRXhjZXB0aW9uc1N0YXRlKSB7IG1fcGF1c2VPbkV4Y2Vw
dGlvbnNTdGF0ZSA9IHBhdXNlT25FeGNlcHRpb25zU3RhdGU7IH0KIAogICAgIHZvaWQgcGF1c2VQ
cm9ncmFtKCkgeyB9Ci0gICAgdm9pZCBjb250aW51ZVByb2dyYW0oKSB7IH0KLSAgICB2b2lkIHN0
ZXBJbnRvU3RhdGVtZW50KCkgeyB9Ci0gICAgdm9pZCBzdGVwT3ZlclN0YXRlbWVudCgpIHsgfQot
ICAgIHZvaWQgc3RlcE91dE9mRnVuY3Rpb24oKSB7IH0KKyAgICB2b2lkIGNvbnRpbnVlUHJvZ3Jh
bSgpOworICAgIHZvaWQgc3RlcEludG9TdGF0ZW1lbnQoKTsKKyAgICB2b2lkIHN0ZXBPdmVyU3Rh
dGVtZW50KCk7CisgICAgdm9pZCBzdGVwT3V0T2ZGdW5jdGlvbigpOwogCiAgICAgdm9pZCByZWNv
bXBpbGVBbGxKU0Z1bmN0aW9uc1Nvb24oKSB7IH0KICAgICB2b2lkIHJlY29tcGlsZUFsbEpTRnVu
Y3Rpb25zKFRpbWVyPFNjcmlwdERlYnVnU2VydmVyPiogPSAwKSB7IH0KIAotICAgIFNjcmlwdFN0
YXRlKiBjdXJyZW50Q2FsbEZyYW1lU3RhdGUoKSB7IHJldHVybiAwOyB9CisgICAgU2NyaXB0U3Rh
dGUqIGN1cnJlbnRDYWxsRnJhbWVTdGF0ZSgpOwogCiAgICAgdm9pZCBwYWdlQ3JlYXRlZChQYWdl
KikgeyB9CiAKKyAgICAvLyB2OC1zcGVjaWZpYyBtZXRob2RzLgorICAgIHZvaWQgc2V0RGVidWdn
ZXJTY3JpcHRTb3VyY2UoY29uc3QgU3RyaW5nJiBzY3JpcHRTb3VyY2UpOworCisgICAgdHlwZWRl
ZiB2b2lkICgqTWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIpKGNvbnN0IFZlY3RvcjxXZWJDb3Jl
OjpQYWdlKj4mKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRNZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxl
cihNZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlciBtZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlcikg
eyBzX21lc3NhZ2VMb29wRGlzcGF0Y2hIYW5kbGVyID0gbWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRs
ZXI7IH0KKworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjdXJyZW50Q2FsbEZyYW1lVjgoKTsK
KwogcHJpdmF0ZToKLSAgICBTY3JpcHREZWJ1Z1NlcnZlcigpIHsgfQorICAgIFNjcmlwdERlYnVn
U2VydmVyKCk7CiAgICAgflNjcmlwdERlYnVnU2VydmVyKCkgeyB9CiAKKyAgICBzdGF0aWMgdm9p
ZCBvblY4RGVidWdNZXNzYWdlKGNvbnN0IHY4OjpEZWJ1Zzo6TWVzc2FnZSYgbWVzc2FnZSk7Cisg
ICAgc3RhdGljIHZvaWQgb25WOERlYnVnSG9zdERpc3BhdGNoKCk7CisKKyAgICB2b2lkIGhhbmRs
ZVY4RGVidWdNZXNzYWdlKGNvbnN0IHY4OjpEZWJ1Zzo6TWVzc2FnZSYgbWVzc2FnZSk7CisgICAg
dm9pZCBoYW5kbGVWOERlYnVnSG9zdERpc3BhdGNoKCk7CisKKyAgICB2b2lkIGRpc3BhdGNoRGlk
UGFyc2VTb3VyY2UoU2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIsIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gc291cmNlT2JqZWN0KTsKKyAgICAKKyAgICB2b2lkIGVuc3VyZURlYnVnZ2VyU2Ny
aXB0Q29tcGlsZWQoKTsKKyAgICB2b2lkIGRpZFJlc3VtZSgpOworCiAgICAgc3RhdGljIHZvaWQg
Y3JlYXRlVXRpbGl0eUNvbnRleHQoKTsKIAogICAgIC8vIFJldHVybnMgYSBsb2NhbCBoYW5kbGUg
b2YgdGhlIHV0aWxpdHkgY29udGV4dC4KQEAgLTEwMiw2ICsxMjQsMTkgQEAgcHJpdmF0ZToKIAog
ICAgIC8vIFV0aWxpdHkgY29udGV4dCBob2xkaW5nIEphdmFTY3JpcHQgZnVuY3Rpb25zIHVzZWQg
aW50ZXJuYWxseS4KICAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IHNfdXRp
bGl0eUNvbnRleHQ7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8UGFnZSosIFNjcmlwdERlYnVnTGlz
dGVuZXIqPiBMaXN0ZW5lcnNNYXA7CisgICAgTGlzdGVuZXJzTWFwIG1fbGlzdGVuZXJzTWFwOwor
ICAgIHR5cGVkZWYgSGFzaE1hcDxTY3JpcHREZWJ1Z0xpc3RlbmVyKiwgU3RyaW5nPiBDb250ZXh0
RGF0YU1hcDsKKyAgICBDb250ZXh0RGF0YU1hcCBtX2NvbnRleHREYXRhTWFwOworICAgIFN0cmlu
ZyBtX2RlYnVnZ2VyU2NyaXB0U291cmNlOworICAgIFBhdXNlT25FeGNlcHRpb25zU3RhdGUgbV9w
YXVzZU9uRXhjZXB0aW9uc1N0YXRlOworICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IG1f
ZGVidWdnZXJTY3JpcHQ7CisgICAgU2NyaXB0U3RhdGUqIG1fY3VycmVudENhbGxGcmFtZVN0YXRl
OworICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gbV9jdXJyZW50Q2FsbEZyYW1lOworICAg
IHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IG1fZXhlY3V0aW9uU3RhdGU7CisKKyAgICBzdGF0
aWMgTWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIgc19tZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxl
cjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4SW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcCBiL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcAppbmRleCA2
MDA2M2YxLi4xNTU0MzFjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OEluamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCkBAIC0zOSw2ICszOSw3IEBACiAj
aW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIk5vZGUuaCIKICNpbmNs
dWRlICJQYWdlLmgiCisjaW5jbHVkZSAiU2NyaXB0RGVidWdTZXJ2ZXIuaCIKICNpbmNsdWRlICJT
ZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKIAogI2luY2x1ZGUgIlY4QmluZGluZy5oIgpAQCAtMTEw
LDkgKzExMSwxMCBAQCBTY3JpcHRPYmplY3QgSW5qZWN0ZWRTY3JpcHRIb3N0OjpjcmVhdGVJbmpl
Y3RlZFNjcmlwdChjb25zdCBTdHJpbmcmIHNjcmlwdFNvdXJjZQogICAgIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBhcmdzW10gPSB7CiAgICAgICBzY3JpcHRIb3N0V3JhcHBlciwKICAgICAgIHdpbmRv
d0dsb2JhbCwKLSAgICAgIHY4OjpOdW1iZXI6Ok5ldyhpZCkKKyAgICAgIHY4OjpOdW1iZXI6Ok5l
dyhpZCksCisgICAgICB2ODo6U3RyaW5nOjpOZXcoInY4IikKICAgICB9OwotICAgIHY4OjpMb2Nh
bDx2ODo6VmFsdWU+IGluamVjdGVkU2NyaXB0VmFsdWUgPSB2ODo6RnVuY3Rpb246OkNhc3QoKnYp
LT5DYWxsKHdpbmRvd0dsb2JhbCwgMywgYXJncyk7CisgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4g
aW5qZWN0ZWRTY3JpcHRWYWx1ZSA9IHY4OjpGdW5jdGlvbjo6Q2FzdCgqdiktPkNhbGwod2luZG93
R2xvYmFsLCA0LCBhcmdzKTsKICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gaW5qZWN0ZWRTY3Jp
cHQodjg6Ok9iamVjdDo6Q2FzdCgqaW5qZWN0ZWRTY3JpcHRWYWx1ZSkpOwogICAgIHJldHVybiBT
Y3JpcHRPYmplY3QoaW5zcGVjdGVkU2NyaXB0U3RhdGUsIGluamVjdGVkU2NyaXB0KTsKIH0KQEAg
LTE1NiwxMyArMTU4LDEzIEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEluamVjdGVkU2NyaXB0
SG9zdDo6cHVzaE5vZGVQYXRoVG9Gcm9udGVuZENhbGxiYWNrKGNvbnN0CiB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gVjhJbmplY3RlZFNjcmlwdEhvc3Q6OmN1cnJlbnRDYWxsRnJhbWVDYWxsYmFjayhj
b25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIElOQ19TVEFUUygiSW5qZWN0ZWRTY3Jp
cHRIb3N0LmN1cnJlbnRDYWxsRnJhbWUoKSIpOwotICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7
CisgICAgcmV0dXJuIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5jdXJyZW50Q2FsbEZyYW1l
VjgoKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SW5qZWN0ZWRTY3JpcHRIb3N0Ojpp
c0FjdGl2YXRpb25DYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIElO
Q19TVEFUUygiSW5qZWN0ZWRTY3JpcHRIb3N0LmlzQWN0aXZhdGlvbigpIik7Ci0gICAgcmV0dXJu
IHY4OjpVbmRlZmluZWQoKTsKKyAgICByZXR1cm4gdjg6OkJvb2xlYW46Ok5ldyh0cnVlKTsKIH0K
ICNlbmRpZgogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0
ZWRTY3JpcHQuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHQu
anMKaW5kZXggOTIzNWFlMS4uOTkxZmM4NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9JbmplY3RlZFNjcmlwdC5qcwpAQCAtMjYsNyArMjYsNyBAQAogICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAq
LwogCi12YXIgaW5qZWN0ZWRTY3JpcHRDb25zdHJ1Y3RvciA9IChmdW5jdGlvbiAoSW5qZWN0ZWRT
Y3JpcHRIb3N0LCBpbnNwZWN0ZWRXaW5kb3csIGluamVjdGVkU2NyaXB0SWQpIHsKK3ZhciBpbmpl
Y3RlZFNjcmlwdENvbnN0cnVjdG9yID0gKGZ1bmN0aW9uIChJbmplY3RlZFNjcmlwdEhvc3QsIGlu
c3BlY3RlZFdpbmRvdywgaW5qZWN0ZWRTY3JpcHRJZCwganNFbmdpbmUpIHsKIAogdmFyIEluamVj
dGVkU2NyaXB0ID0ge307CiAKQEAgLTEyNSwxMCArMTI1LDMyIEBAIEluamVjdGVkU2NyaXB0Lmdl
dFByb3BlcnRpZXMgPSBmdW5jdGlvbihvYmplY3RQcm94eSwgaWdub3JlSGFzT3duUHJvcGVydHks
IGFiYnJlCiAgICAgaWYgKCFJbmplY3RlZFNjcmlwdC5faXNEZWZpbmVkKG9iamVjdCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB2YXIgcHJvcGVydGllcyA9IFtdOworICAgIAogICAgIHZh
ciBwcm9wZXJ0eU5hbWVzID0gaWdub3JlSGFzT3duUHJvcGVydHkgPyBJbmplY3RlZFNjcmlwdC5f
Z2V0UHJvcGVydHlOYW1lcyhvYmplY3QpIDogT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2Jq
ZWN0KTsKICAgICBpZiAoIWlnbm9yZUhhc093blByb3BlcnR5ICYmIG9iamVjdC5fX3Byb3RvX18p
CiAgICAgICAgIHByb3BlcnR5TmFtZXMucHVzaCgiX19wcm90b19fIik7CiAKKyAgICBpZiAoanNF
bmdpbmUgPT09ICJ2OCIpIHsKKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIG9iamVjdCBpcyBhIHNj
b3BlLgorICAgICAgICBpZiAoSW5qZWN0ZWRTY3JpcHQuX2lzU2NvcGVQcm94eShvYmplY3RQcm94
eSkpIHsKKyAgICAgICAgICAgIHByb3BlcnR5TmFtZXMgPSBbXTsKKyAgICAgICAgICAgIGZvciAo
dmFyIG5hbWUgaW4gb2JqZWN0KQorICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMucHVzaChu
YW1lKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEZJWE1FKGh0dHA6Ly9jcmJ1
Zy5jb20vNDEyNDMpOiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyBtYXkgcmV0dXJuIGR1cGxp
Y2F0ZWQgbmFtZXMuCisgICAgICAgICAgICB2YXIgYSA9IFtdOworICAgICAgICAgICAgcHJvcGVy
dHlOYW1lcy5zb3J0KCk7CisgICAgICAgICAgICB2YXIgcHJldjsKKyAgICAgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgcHJvcGVydHlOYW1lcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAg
ICAgIHZhciBuID0gcHJvcGVydHlOYW1lc1tpXTsKKyAgICAgICAgICAgICAgICBpZiAobiAhPSBw
cmV2KQorICAgICAgICAgICAgICAgICAgICBhLnB1c2gobik7CisgICAgICAgICAgICAgICAgcHJl
diA9IG47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzID0gYTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKICAgICAvLyBHbyBvdmVyIHByb3BlcnRpZXMsIHByZXBhcmUg
cmVzdWx0cy4KICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnR5TmFtZXMubGVuZ3RoOyAr
K2kpIHsKICAgICAgICAgdmFyIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZXNbaV07CkBAIC0x
NTgsNiArMTgwLDEyIEBAIEluamVjdGVkU2NyaXB0LmdldFByb3BlcnRpZXMgPSBmdW5jdGlvbihv
YmplY3RQcm94eSwgaWdub3JlSGFzT3duUHJvcGVydHksIGFiYnJlCiAgICAgcmV0dXJuIHByb3Bl
cnRpZXM7CiB9CiAKK0luamVjdGVkU2NyaXB0Ll9pc1Njb3BlUHJveHkgPSBmdW5jdGlvbihvYmpl
Y3RQcm94eSkKK3sKKyAgICB2YXIgb2JqZWN0SWQgPSBvYmplY3RQcm94eS5vYmplY3RJZDsKKyAg
ICByZXR1cm4gdHlwZW9mIG9iamVjdElkID09PSAib2JqZWN0IiAmJiAhb2JqZWN0SWQudGhpc09i
amVjdDsKK30gCisKIEluamVjdGVkU2NyaXB0LnNldFByb3BlcnR5VmFsdWUgPSBmdW5jdGlvbihv
YmplY3RQcm94eSwgcHJvcGVydHlOYW1lLCBleHByZXNzaW9uKQogewogICAgIHZhciBvYmplY3Qg
PSBJbmplY3RlZFNjcmlwdC5fcmVzb2x2ZU9iamVjdChvYmplY3RQcm94eSk7CkBAIC04MTMsNiAr
ODQxLDU4IEBAIEluamVjdGVkU2NyaXB0LkNhbGxGcmFtZVByb3h5ID0gZnVuY3Rpb24oaWQsIGNh
bGxGcmFtZSkKICAgICB0aGlzLnNjb3BlQ2hhaW4gPSB0aGlzLl93cmFwU2NvcGVDaGFpbihjYWxs
RnJhbWUpOwogfQogCitpZiAoanNFbmdpbmUgPT09ICJ2OCIpIHsKKworSW5qZWN0ZWRTY3JpcHQu
Q2FsbEZyYW1lUHJveHkucHJvdG90eXBlID0geworICAgIAorCisgICAgX3dyYXBTY29wZUNoYWlu
OiBmdW5jdGlvbihjYWxsRnJhbWUpCisgICAgeworICAgICAgICB2YXIgU2NvcGVUeXBlID0geyBH
bG9iYWw6IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIExvY2FsOiAxLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICBXaXRoOiAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBDbG9z
dXJlOiAzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBDYXRjaDogNCB9OworICAgICAgICB2
YXIgc2NvcGVDaGFpbiA9IGNhbGxGcmFtZS5zY29wZUNoYWluOworICAgICAgICB2YXIgc2NvcGVD
aGFpblByb3h5ID0gW107CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2NvcGVDaGFpbi5s
ZW5ndGg7IGkgKz0gMikgeworICAgICAgICAgICAgdmFyIHNjb3BlVHlwZSA9IHNjb3BlQ2hhaW5b
aV07CisgICAgICAgICAgICB2YXIgc2NvcGVPYmplY3QgPSBzY29wZUNoYWluW2kgKyAxXTsKKyAg
ICAgICAgICAgIHZhciBzY29wZU9iamVjdFByb3h5ID0gSW5qZWN0ZWRTY3JpcHQuY3JlYXRlUHJv
eHlPYmplY3Qoc2NvcGVPYmplY3QsIHsgY2FsbEZyYW1lOiB0aGlzLmlkLCBjaGFpbkluZGV4OiAo
aSArIDEpIH0sIHRydWUpOworCisgICAgICAgICAgICB2YXIgZm91bmRMb2NhbFNjb3BlID0gZmFs
c2U7CisgICAgICAgICAgICBzd2l0Y2goc2NvcGVUeXBlKSB7CisgICAgICAgICAgICAgICAgY2Fz
ZSBTY29wZVR5cGUuTG9jYWw6IHsKKyAgICAgICAgICAgICAgICAgICAgZm91bmRMb2NhbFNjb3Bl
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgc2NvcGVPYmplY3RQcm94eS5pc0xvY2FsID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgc2NvcGVPYmplY3RQcm94eS50aGlzT2JqZWN0ID0g
SW5qZWN0ZWRTY3JpcHQuY3JlYXRlUHJveHlPYmplY3QoY2FsbEZyYW1lLnRoaXNPYmplY3QsIHsg
Y2FsbEZyYW1lOiB0aGlzLmlkLCB0aGlzT2JqZWN0OiB0cnVlIH0sIHRydWUpOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2Fz
ZSBTY29wZVR5cGUuQ2xvc3VyZTogeworICAgICAgICAgICAgICAgICAgICBzY29wZU9iamVjdFBy
b3h5LmlzQ2xvc3VyZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIFNjb3BlVHlwZS5XaXRoOiB7CisgICAg
ICAgICAgICAgICAgICAgIHNjb3BlT2JqZWN0UHJveHkuaXNXaXRoQmxvY2sgPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmIChmb3VuZExvY2FsU2NvcGUpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoc2NvcGVPYmplY3QgaW5zdGFuY2VvZiBpbnNwZWN0ZWRXaW5kb3cuRWxlbWVudCkKKyAgICAg
ICAgICAgICAgICAgICAgc2NvcGVPYmplY3RQcm94eS5pc0VsZW1lbnQgPSB0cnVlOworICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKHNjb3BlT2JqZWN0IGluc3RhbmNlb2YgaW5zcGVjdGVkV2luZG93
LkRvY3VtZW50KQorICAgICAgICAgICAgICAgICAgICBzY29wZU9iamVjdFByb3h5LmlzRG9jdW1l
bnQgPSB0cnVlOworICAgICAgICAgICAgfQorIAorICAgICAgICAgICAgc2NvcGVDaGFpblByb3h5
LnB1c2goc2NvcGVPYmplY3RQcm94eSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNjb3Bl
Q2hhaW5Qcm94eTsKKyAgICB9Cit9CisKK30gZWxzZSB7CisKIEluamVjdGVkU2NyaXB0LkNhbGxG
cmFtZVByb3h5LnByb3RvdHlwZSA9IHsKICAgICBfd3JhcFNjb3BlQ2hhaW46IGZ1bmN0aW9uKGNh
bGxGcmFtZSkKICAgICB7CkBAIC04NDIsNiArOTIyLDggQEAgSW5qZWN0ZWRTY3JpcHQuQ2FsbEZy
YW1lUHJveHkucHJvdG90eXBlID0gewogICAgIH0KIH0KIAorfQorCiBJbmplY3RlZFNjcmlwdC5l
eGVjdXRlU3FsID0gZnVuY3Rpb24oY2FsbElkLCBkYXRhYmFzZUlkLCBxdWVyeSkKIHsKICAgICBm
dW5jdGlvbiBzdWNjZXNzQ2FsbGJhY2sodHgsIHJlc3VsdCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzCmluZGV4IDMxNmYzMmUuLjM1YzhlZTQgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMKKysrIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcwpAQCAtMTk4LDYgKzE5OCw4
IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwgPSBmdW5jdGlvbigpCiAgICAgdGhpcy5fc2hv
cnRjdXRzW3Nob3J0Y3V0XSA9IGhhbmRsZXI7CiAKICAgICB0aGlzLl9kZWJ1Z2dlckVuYWJsZWQg
PSBQcmVmZXJlbmNlcy5kZWJ1Z2dlckFsd2F5c0VuYWJsZWQ7CisgICAgaWYgKFByZWZlcmVuY2Vz
LmRlYnVnZ2VyQWx3YXlzRW5hYmxlZCkKKyAgICAgICAgdGhpcy5fYXR0YWNoRGVidWdnZXJXaGVu
U2hvd24gPSB0cnVlOwogICAgIHRoaXMucmVzZXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggYTJl
MmFhMy4uNTUyYTE2YiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysg
Yi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTAgQEAKKzIwMTAtMDQtMTUg
IFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN1cHBvcnQgYmFzaWMgZGVidWdnaW5nIGNh
cGFiaWxpdGllcyBpbmNsdWRpbmcgc3RlcCBpbi9vdmVyL291dCBpbiB2OAorICAgICAgICBpbXBs
ZW1lbnRhdGlvbiBvZiBTY3JpcHREZWJ1Z1NlcnZlci4KKworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzc2MDQKKworICAgICAgICAqIFdlYktpdC5neXBp
OgorICAgICAgICAqIHNyYy9EZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogc3JjL0RlYnVnZ2Vy
QWdlbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RGVidWdnZXJBZ2VudEltcGw6OnNldERl
YnVnZ2VyU2NyaXB0U291cmNlKToKKyAgICAgICAgKiBzcmMvRGVidWdnZXJBZ2VudEltcGwuaDoK
KyAgICAgICAgKiBzcmMvRGVidWdnZXJBZ2VudE1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0
OjpEZWJ1Z2dlckFnZW50TWFuYWdlcjo6aG9zdERpc3BhdGNoSGFuZGxlcik6CisgICAgICAgIChX
ZWJLaXQ6OkRlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpkZWJ1Z0F0dGFjaCk6CisgICAgICAgIChXZWJL
aXQ6OkRlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpkZWJ1Z0RldGFjaCk6CisgICAgICAgIChXZWJLaXQ6
OkRlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpzZXRNZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlcik6Cisg
ICAgICAgICogc3JjL0RlYnVnZ2VyQWdlbnRNYW5hZ2VyLmg6CisgICAgICAgICogc3JjL0luc3Bl
Y3RvckZyb250ZW5kQ2xpZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckZy
b250ZW5kQ2xpZW50SW1wbDo6d2luZG93T2JqZWN0Q2xlYXJlZCk6CisgICAgICAgICogc3JjL2pz
L0RlYnVnZ2VyU2NyaXB0LmpzOiBBZGRlZC4KKyAgICAgICAgKGRlYnVnZ2VyU2NyaXB0Q29uc3Ry
dWN0b3IuRGVidWdnZXJTY3JpcHQuZ2V0QWZ0ZXJDb21waWxlU2NyaXB0KToKKyAgICAgICAgKGRl
YnVnZ2VyU2NyaXB0Q29uc3RydWN0b3IuRGVidWdnZXJTY3JpcHQuZ2V0U2NyaXB0cyk6CisgICAg
ICAgIChkZWJ1Z2dlclNjcmlwdENvbnN0cnVjdG9yLkRlYnVnZ2VyU2NyaXB0Ll9mb3JtYXRTY3Jp
cHQpOgorICAgICAgICAoZGVidWdnZXJTY3JpcHRDb25zdHJ1Y3Rvci5EZWJ1Z2dlclNjcmlwdC5z
ZXRCcmVha3BvaW50KToKKyAgICAgICAgKGRlYnVnZ2VyU2NyaXB0Q29uc3RydWN0b3IuRGVidWdn
ZXJTY3JpcHQucmVtb3ZlQnJlYWtwb2ludCk6CisgICAgICAgIChkZWJ1Z2dlclNjcmlwdENvbnN0
cnVjdG9yLkRlYnVnZ2VyU2NyaXB0LmN1cnJlbnRDYWxsRnJhbWUpOgorICAgICAgICAoZGVidWdn
ZXJTY3JpcHRDb25zdHJ1Y3Rvci5EZWJ1Z2dlclNjcmlwdC5zdGVwSW50b1N0YXRlbWVudCk6Cisg
ICAgICAgIChkZWJ1Z2dlclNjcmlwdENvbnN0cnVjdG9yLkRlYnVnZ2VyU2NyaXB0LnN0ZXBPdmVy
U3RhdGVtZW50KToKKyAgICAgICAgKGRlYnVnZ2VyU2NyaXB0Q29uc3RydWN0b3IuRGVidWdnZXJT
Y3JpcHQuc3RlcE91dE9mRnVuY3Rpb24pOgorICAgICAgICAoZGVidWdnZXJTY3JpcHRDb25zdHJ1
Y3Rvci5EZWJ1Z2dlclNjcmlwdC5jbGVhckJyZWFrcG9pbnRzKToKKyAgICAgICAgKGRlYnVnZ2Vy
U2NyaXB0Q29uc3RydWN0b3IuRGVidWdnZXJTY3JpcHQuc2V0QnJlYWtwb2ludHNBY3RpdmF0ZWQp
OgorICAgICAgICAoZGVidWdnZXJTY3JpcHRDb25zdHJ1Y3Rvci5EZWJ1Z2dlclNjcmlwdC5fZnJh
bWVNaXJyb3JUb0pTQ2FsbEZyYW1lKToKKyAgICAgICAgKGRlYnVnZ2VyU2NyaXB0Q29uc3RydWN0
b3IuRGVidWdnZXJTY3JpcHQuX3dlYmtpdFRvVjhMaW5lTnVtYmVyKToKKyAgICAgICAgKGRlYnVn
Z2VyU2NyaXB0Q29uc3RydWN0b3IuRGVidWdnZXJTY3JpcHQuX3Y4VG9Xd2Via2l0TGluZU51bWJl
cik6CisgICAgICAgIChkZWJ1Z2dlclNjcmlwdENvbnN0cnVjdG9yKToKKyAgICAgICAgKiBzcmMv
anMvRGV2VG9vbHMuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IubG9hZGVkKToKKyAgICAgICAg
KC4pOgorICAgICAgICAoKToKKyAgICAgICAgKiBzcmMvanMvRGV2VG9vbHNIb3N0U3R1Yi5qczoK
KyAgICAgICAgKC5SZW1vdGVEZWJ1Z2dlckFnZW50U3R1Yi5wcm90b3R5cGUuc2V0RGVidWdnZXJT
Y3JpcHRTb3VyY2UpOgorICAgICAgICAqIHNyYy9qcy9JbnNwZWN0b3JDb250cm9sbGVySW1wbC5q
czoKKyAgICAgICAgKGRldnRvb2xzLkluc3BlY3RvckJhY2tlbmRJbXBsKToKKwogMjAxMC0wNC0x
MiAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IERhcmluIEZpc2hlci4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBi
L1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCBmMWM2YzJkLi4zN2ZhYTk5IDEwMDY0
NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvV2ViS2l0L2Nocm9taXVt
L1dlYktpdC5neXBpCkBAIC0zNSw2ICszNSw3IEBACiAgICAgICAgICdkZXZ0b29sc19qc19maWxl
cyc6IFsKICAgICAgICAgICAgICdzcmMvanMvSW5zcGVjdG9yQ29udHJvbGxlckltcGwuanMnLAog
ICAgICAgICAgICAgJ3NyYy9qcy9EZWJ1Z2dlckFnZW50LmpzJywKKyAgICAgICAgICAgICdzcmMv
anMvRGVidWdnZXJTY3JpcHQuanMnLAogICAgICAgICAgICAgJ3NyYy9qcy9Qcm9maWxlckFnZW50
LmpzJywKICAgICAgICAgICAgICdzcmMvanMvUHJvZmlsZXJQcm9jZXNzb3IuanMnLAogICAgICAg
ICAgICAgJ3NyYy9qcy9IZWFwUHJvZmlsZXJQYW5lbC5qcycsCmRpZmYgLS1naXQgYS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0RlYnVnZ2VyQWdlbnQuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvRGVidWdn
ZXJBZ2VudC5oCmluZGV4IDE3Y2RlMTEuLjdmM2RiYmIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9zcmMvRGVidWdnZXJBZ2VudC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvRGVidWdn
ZXJBZ2VudC5oCkBAIC00MCw3ICs0MCwxMCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKICAgICBNRVRI
T0QwKGdldENvbnRleHRJZCkgXAogICAgIFwKICAgICAvKiBSZXF1ZXN0IHY4IHRvIHByb2Nlc3Mg
YWxsIGRlYnVnIGNvbW1hbmRzIGluIHRoZSBxdWV1ZS4gKi8gXAotICAgIE1FVEhPRDAocHJvY2Vz
c0RlYnVnQ29tbWFuZHMpCisgICAgTUVUSE9EMChwcm9jZXNzRGVidWdDb21tYW5kcykgXAorICAg
IFwKKyAgICAvKiBQdXNoIERlYnVnZ2VyU2NyaXB0LmpzIGNvbnRlbnQgdG8gdGhlIGFnZW50LiAq
LyBcCisgICAgTUVUSE9EMShzZXREZWJ1Z2dlclNjcmlwdFNvdXJjZSwgU3RyaW5nKQogCiBERUZJ
TkVfUlBDX0NMQVNTKERlYnVnZ2VyQWdlbnQsIERFQlVHR0VSX0FHRU5UX1NUUlVDVCkKIApkaWZm
IC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9EZWJ1Z2dlckFnZW50SW1wbC5jcHAgYi9XZWJL
aXQvY2hyb21pdW0vc3JjL0RlYnVnZ2VyQWdlbnRJbXBsLmNwcAppbmRleCBjNDg5ODYwLi42NzM0
ODJhIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL0RlYnVnZ2VyQWdlbnRJbXBsLmNw
cAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0RlYnVnZ2VyQWdlbnRJbXBsLmNwcApAQCAtMzUs
NiArMzUsNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNp
bmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiU2NyaXB0RGVidWdTZXJ2ZXIuaCIKICNpbmNsdWRl
ICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJXZWJEZXZUb29sc0FnZW50SW1wbC5oIgogI2luY2x1
ZGUgIldlYlZpZXdJbXBsLmgiCkBAIC03OCw2ICs3OSwxMSBAQCB2b2lkIERlYnVnZ2VyQWdlbnRJ
bXBsOjpwcm9jZXNzRGVidWdDb21tYW5kcygpCiAgICAgdjg6OkRlYnVnOjpQcm9jZXNzRGVidWdN
ZXNzYWdlcygpOwogfQogCit2b2lkIERlYnVnZ2VyQWdlbnRJbXBsOjpzZXREZWJ1Z2dlclNjcmlw
dFNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZSkKK3sKKyAgICBXZWJDb3JlOjpTY3JpcHREZWJ1
Z1NlcnZlcjo6c2hhcmVkKCkuc2V0RGVidWdnZXJTY3JpcHRTb3VyY2Uoc291cmNlKTsKK30KKwog
dm9pZCBEZWJ1Z2dlckFnZW50SW1wbDo6ZGVidWdnZXJPdXRwdXQoY29uc3QgU3RyaW5nJiBjb21t
YW5kKQogewogICAgIG1fZGVsZWdhdGUtPmRlYnVnZ2VyT3V0cHV0KGNvbW1hbmQpOwpkaWZmIC0t
Z2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9EZWJ1Z2dlckFnZW50SW1wbC5oIGIvV2ViS2l0L2No
cm9taXVtL3NyYy9EZWJ1Z2dlckFnZW50SW1wbC5oCmluZGV4IDBlNmU2YWYuLmJkOWRkZjYgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvRGVidWdnZXJBZ2VudEltcGwuaAorKysgYi9X
ZWJLaXQvY2hyb21pdW0vc3JjL0RlYnVnZ2VyQWdlbnRJbXBsLmgKQEAgLTYwLDYgKzYwLDcgQEAg
cHVibGljOgogICAgIC8vIERlYnVnZ2VyQWdlbnQgaW1wbGVtZW50YXRpb24uCiAgICAgdmlydHVh
bCB2b2lkIGdldENvbnRleHRJZCgpOwogICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzRGVidWdDb21t
YW5kcygpOworICAgIHZpcnR1YWwgdm9pZCBzZXREZWJ1Z2dlclNjcmlwdFNvdXJjZShjb25zdCBT
dHJpbmcmKTsKIAogICAgIHZvaWQgZGVidWdnZXJPdXRwdXQoY29uc3QgV2ViQ29yZTo6U3RyaW5n
JiBvdXQpOwogCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0RlYnVnZ2VyQWdlbnRN
YW5hZ2VyLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvRGVidWdnZXJBZ2VudE1hbmFnZXIuY3Bw
CmluZGV4IGZhYWZhZmYuLmQzZjdmZWEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMv
RGVidWdnZXJBZ2VudE1hbmFnZXIuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvRGVidWdn
ZXJBZ2VudE1hbmFnZXIuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiRGVidWdnZXJB
Z2VudEltcGwuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlBhZ2VHcm91cExvYWRE
ZWZlcnJlci5oIgorI2luY2x1ZGUgIlNjcmlwdERlYnVnU2VydmVyLmgiCiAjaW5jbHVkZSAiVjhQ
cm94eS5oIgogI2luY2x1ZGUgIldlYkRldlRvb2xzQWdlbnRJbXBsLmgiCiAjaW5jbHVkZSAiV2Vi
RnJhbWVJbXBsLmgiCkBAIC03Miw2ICs3Myw0MiBAQCBwcml2YXRlOgogfSAvLyBuYW1lc3BhY2UK
IAogCit2b2lkIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpob3N0RGlzcGF0Y2hIYW5kbGVyKGNvbnN0
IFZlY3RvcjxXZWJDb3JlOjpQYWdlKj4mIHBhZ2VzKQoreworICAgIGlmICghc19tZXNzYWdlTG9v
cERpc3BhdGNoSGFuZGxlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHNfaW5Ib3N0RGlz
cGF0Y2hIYW5kbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBzX2luSG9zdERpc3BhdGNoSGFu
ZGxlciA9IHRydWU7CisKKyAgICBWZWN0b3I8V2ViVmlld0ltcGwqPiB2aWV3czsKKyAgICAvLyAx
LiBEaXNhYmxlIGFjdGl2ZSBvYmplY3RzIGFuZCBpbnB1dCBldmVudHMuCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBwYWdlcy5zaXplKCk7IGkrKykgeworICAgICAgICBXZWJDb3JlOjpQYWdl
KiBwYWdlID0gcGFnZXNbaV07CisgICAgICAgIFdlYlZpZXdJbXBsKiB2aWV3ID0gV2ViVmlld0lt
cGw6OmZyb21QYWdlKHBhZ2UpOworICAgICAgICBzX3BhZ2VEZWZlcnJlcnMuc2V0KHZpZXcgLCBu
ZXcgV2ViQ29yZTo6UGFnZUdyb3VwTG9hZERlZmVycmVyKHBhZ2UsIHRydWUpKTsKKyAgICAgICAg
dmlld3MuYXBwZW5kKHZpZXcpOworICAgICAgICB2aWV3LT5zZXRJZ25vcmVJbnB1dEV2ZW50cyh0
cnVlKTsKKyAgICB9CisKKyAgICAvLyAyLiBQcm9jZXNzIG1lc3NhZ2VzLgorICAgIHNfbWVzc2Fn
ZUxvb3BEaXNwYXRjaEhhbmRsZXIoKTsKKworICAgIC8vIDMuIEJyaW5nIHRoaW5ncyBiYWNrLgor
ICAgIGZvciAoVmVjdG9yPFdlYlZpZXdJbXBsKj46Oml0ZXJhdG9yIGl0ID0gdmlld3MuYmVnaW4o
KTsgaXQgIT0gdmlld3MuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgaWYgKHNfcGFnZURlZmVycmVy
cy5jb250YWlucygqaXQpKSB7CisgICAgICAgICAgICAvLyBUaGUgdmlldyB3YXMgbm90IGNsb3Nl
ZCBkdXJpbmcgdGhlIGRpc3BhdGNoLgorICAgICAgICAgICAgKCppdCktPnNldElnbm9yZUlucHV0
RXZlbnRzKGZhbHNlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBkZWxldGVBbGxWYWx1ZXMoc19w
YWdlRGVmZXJyZXJzKTsKKyAgICBzX3BhZ2VEZWZlcnJlcnMuY2xlYXIoKTsKKworICAgIHNfaW5I
b3N0RGlzcGF0Y2hIYW5kbGVyID0gZmFsc2U7Cit9CisKIHZvaWQgRGVidWdnZXJBZ2VudE1hbmFn
ZXI6OmRlYnVnSG9zdERpc3BhdGNoSGFuZGxlcigpCiB7CiAgICAgaWYgKCFzX21lc3NhZ2VMb29w
RGlzcGF0Y2hIYW5kbGVyIHx8ICFzX2F0dGFjaGVkQWdlbnRzTWFwKQpAQCAtMTE2LDYgKzE1Myw5
IEBAIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpBdHRhY2hlZEFnZW50c01hcCogRGVidWdnZXJBZ2Vu
dE1hbmFnZXI6OnNfYXR0YWNoZWRBZ2VudHNNCiAKIHZvaWQgRGVidWdnZXJBZ2VudE1hbmFnZXI6
OmRlYnVnQXR0YWNoKERlYnVnZ2VyQWdlbnRJbXBsKiBkZWJ1Z2dlckFnZW50KQogeworI2lmIEVO
QUJMRShWOF9TQ1JJUFRfREVCVUdfU0VSVkVSKQorICAgIHJldHVybjsKKyNlbmRpZgogICAgIGlm
ICghc19hdHRhY2hlZEFnZW50c01hcCkgewogICAgICAgICBzX2F0dGFjaGVkQWdlbnRzTWFwID0g
bmV3IEF0dGFjaGVkQWdlbnRzTWFwKCk7CiAgICAgICAgIHY4OjpEZWJ1Zzo6U2V0TWVzc2FnZUhh
bmRsZXIyKCZEZWJ1Z2dlckFnZW50TWFuYWdlcjo6b25WOERlYnVnTWVzc2FnZSk7CkBAIC0xMjgs
NiArMTY4LDkgQEAgdm9pZCBEZWJ1Z2dlckFnZW50TWFuYWdlcjo6ZGVidWdBdHRhY2goRGVidWdn
ZXJBZ2VudEltcGwqIGRlYnVnZ2VyQWdlbnQpCiAKIHZvaWQgRGVidWdnZXJBZ2VudE1hbmFnZXI6
OmRlYnVnRGV0YWNoKERlYnVnZ2VyQWdlbnRJbXBsKiBkZWJ1Z2dlckFnZW50KQogeworI2lmIEVO
QUJMRShWOF9TQ1JJUFRfREVCVUdfU0VSVkVSKQorICAgIHJldHVybjsKKyNlbmRpZgogICAgIGlm
ICghc19hdHRhY2hlZEFnZW50c01hcCkgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgcmV0dXJuOwpAQCAtMjQ5LDYgKzI5Miw3IEBAIHZvaWQgRGVidWdnZXJBZ2VudE1h
bmFnZXI6OmV4ZWN1dGVEZWJ1Z2dlckNvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kLCBpbnQg
Y2FsCiB2b2lkIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpzZXRNZXNzYWdlTG9vcERpc3BhdGNoSGFu
ZGxlcihXZWJEZXZUb29sc0FnZW50OjpNZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlciBoYW5kbGVy
KQogewogICAgIHNfbWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIgPSBoYW5kbGVyOworICAgIFdl
YkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpzZXRNZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlcihE
ZWJ1Z2dlckFnZW50TWFuYWdlcjo6aG9zdERpc3BhdGNoSGFuZGxlcik7CiB9CiAKIHZvaWQgRGVi
dWdnZXJBZ2VudE1hbmFnZXI6OnNldEhvc3RJZChXZWJGcmFtZUltcGwqIHdlYmZyYW1lLCBpbnQg
aG9zdElkKQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9EZWJ1Z2dlckFnZW50TWFu
YWdlci5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9EZWJ1Z2dlckFnZW50TWFuYWdlci5oCmluZGV4
IGEyZTkwMzAuLmE4YmM3YTMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvRGVidWdn
ZXJBZ2VudE1hbmFnZXIuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0RlYnVnZ2VyQWdlbnRN
YW5hZ2VyLmgKQEAgLTMxLDEyICszMSwxNSBAQAogI2lmbmRlZiBEZWJ1Z2dlckFnZW50TWFuYWdl
cl9oCiAjZGVmaW5lIERlYnVnZ2VyQWdlbnRNYW5hZ2VyX2gKIAorI2luY2x1ZGUgIldlYkNTdHJp
bmcuaCIKICNpbmNsdWRlICJXZWJEZXZUb29sc0FnZW50LmgiCiAjaW5jbHVkZSA8djgtZGVidWcu
aD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3Mg
UGFnZTsKIGNsYXNzIFBhZ2VHcm91cExvYWREZWZlcnJlcjsKIGNsYXNzIFN0cmluZzsKIH0KQEAg
LTk3LDYgKzEwMCw3IEBAIHByaXZhdGU6CiAgICAgRGVidWdnZXJBZ2VudE1hbmFnZXIoKTsKICAg
ICB+RGVidWdnZXJBZ2VudE1hbmFnZXIoKTsKIAorICAgIHN0YXRpYyB2b2lkIGhvc3REaXNwYXRj
aEhhbmRsZXIoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlBhZ2UqPiYpOwogICAgIHN0YXRpYyB2b2lk
IGRlYnVnSG9zdERpc3BhdGNoSGFuZGxlcigpOwogICAgIHN0YXRpYyB2b2lkIG9uVjhEZWJ1Z01l
c3NhZ2UoY29uc3Qgdjg6OkRlYnVnOjpNZXNzYWdlJiBtZXNzYWdlKTsKICAgICBzdGF0aWMgdm9p
ZCBzZW5kQ29tbWFuZFRvVjgoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBjbWQsCmRpZmYgLS1naXQg
YS9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckZyb250ZW5kQ2xpZW50SW1wbC5jcHAgYi9X
ZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckZyb250ZW5kQ2xpZW50SW1wbC5jcHAKaW5kZXgg
N2RhMDU3MS4uOWZmMzkzOCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0
b3JGcm9udGVuZENsaWVudEltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnRJbXBsLmNwcApAQCAtNjksNiArNjksOSBAQCB2b2lkIEluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50SW1wbDo6d2luZG93T2JqZWN0Q2xlYXJlZCgpCiAgICAgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBnbG9iYWwgPSBmcmFtZUNvbnRleHQtPkdsb2JhbCgpOwogCiAgICAgZ2xv
YmFsLT5TZXQodjg6OlN0cmluZzo6TmV3KCJJbnNwZWN0b3JGcm9udGVuZEhvc3QiKSwgZnJvbnRl
bmRIb3N0T2JqKTsKKyNpZiBFTkFCTEUoVjhfU0NSSVBUX0RFQlVHX1NFUlZFUikKKyAgICBnbG9i
YWwtPlNldCh2ODo6U3RyaW5nOjpOZXcoInY4U2NyaXB0RGVidWdTZXJ2ZXJFbmFibGVkIiksIHY4
OjpUcnVlKCkpOworI2VuZGlmCiB9CiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRJbXBs
Ojpmcm9udGVuZExvYWRlZCgpCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0Rl
YnVnZ2VyU2NyaXB0LmpzIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9EZWJ1Z2dlclNjcmlwdC5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmQyNmRiCi0tLSAvZGV2L251
bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9EZWJ1Z2dlclNjcmlwdC5qcwpAQCAtMCww
ICsxLDIwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
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
LgorICovCisKK2Z1bmN0aW9uIGRlYnVnZ2VyU2NyaXB0Q29uc3RydWN0b3IoKSB7CisKK3ZhciBE
ZWJ1Z2dlclNjcmlwdCA9IHt9OworRGVidWdnZXJTY3JpcHQuX2JyZWFrcG9pbnRzID0ge307CisK
KworRGVidWdnZXJTY3JpcHQuZ2V0QWZ0ZXJDb21waWxlU2NyaXB0ID0gZnVuY3Rpb24oZXhlY1N0
YXRlLCBhcmdzKQoreworICAgIHJldHVybiBEZWJ1Z2dlclNjcmlwdC5fZm9ybWF0U2NyaXB0KGFy
Z3MuZXZlbnREYXRhLnNjcmlwdF8uc2NyaXB0Xyk7Cit9CisKK0RlYnVnZ2VyU2NyaXB0LmdldFNj
cmlwdHMgPSBmdW5jdGlvbihleGVjU3RhdGUsIGFyZ3MpCit7CisgICAgdmFyIHNjcmlwdHMgPSBE
ZWJ1Zy5zY3JpcHRzKCk7CisgICAgdmFyIHJlc3VsdCA9IFtdOworICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgc2NyaXB0cy5sZW5ndGg7ICsraSkgeworICAgICAgICByZXN1bHQucHVzaChEZWJ1Z2dl
clNjcmlwdC5fZm9ybWF0U2NyaXB0KHNjcmlwdHNbaV0pKTsKKyAgICB9CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworRGVidWdnZXJTY3JpcHQuX2Zvcm1hdFNjcmlwdCA9IGZ1bmN0aW9uKHNjcmlw
dCkKK3sKKyAgICByZXR1cm4geworICAgICAgICBpZDogc2NyaXB0LmlkLAorICAgICAgICBuYW1l
OiBzY3JpcHQubmFtZSwKKyAgICAgICAgc291cmNlOiBzY3JpcHQuc291cmNlLAorICAgICAgICBs
aW5lT2Zmc2V0OiBzY3JpcHQubGluZV9vZmZzZXQsCisgICAgICAgIGxpbmVDb3VudDogc2NyaXB0
LmxpbmVDb3VudCgpLAorICAgICAgICBjb250ZXh0RGF0YTogc2NyaXB0LmNvbnRleHRfZGF0YQor
ICAgIH07Cit9CisKK0RlYnVnZ2VyU2NyaXB0LnNldEJyZWFrcG9pbnQgPSBmdW5jdGlvbihleGVj
U3RhdGUsIGFyZ3MpCit7CisgICAgYXJncy5saW5lTnVtYmVyID0gRGVidWdnZXJTY3JpcHQuX3dl
YmtpdFRvVjhMaW5lTnVtYmVyKGFyZ3MubGluZU51bWJlcik7CisgICAgdmFyIGtleSA9IGFyZ3Mu
c2NyaXB0SWQgKyAiOiIgKyBhcmdzLmxpbmVOdW1iZXI7CisgICAgdmFyIGJyZWFrSWQgPSBEZWJ1
Z2dlclNjcmlwdC5fYnJlYWtwb2ludHNba2V5XTsKKyAgICBpZiAoYnJlYWtJZCkgeworICAgICAg
ICBpZiAoYXJncy5lbmFibGVkKQorICAgICAgICAgICAgRGVidWcuZW5hYmxlU2NyaXB0QnJlYWtQ
b2ludChicmVha0lkKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgRGVidWcuZGlzYWJsZVNj
cmlwdEJyZWFrUG9pbnQoYnJlYWtJZCk7CisgICAgICAgIERlYnVnLmNoYW5nZVNjcmlwdEJyZWFr
UG9pbnRDb25kaXRpb24oYnJlYWtJZCwgYXJncy5jb25kaXRpb24pOworICAgICAgICByZXR1cm4g
YnJlYWtJZDsKKyAgICB9CisKKyAgICBicmVha0lkID0gRGVidWcuc2V0U2NyaXB0QnJlYWtQb2lu
dEJ5SWQoYXJncy5zY3JpcHRJZCwgYXJncy5saW5lTnVtYmVyLCAwIC8qIGNvbHVtbiAqLywgYXJn
cy5jb25kaXRpb24pOworICAgIERlYnVnZ2VyU2NyaXB0Ll9icmVha3BvaW50c1trZXldID0gYnJl
YWtJZDsKKyAgICBpZiAoIWFyZ3MuZW5hYmxlZCkKKyAgICAgICAgRGVidWcuZGlzYWJsZVNjcmlw
dEJyZWFrUG9pbnQoYnJlYWtJZCk7CisgICAgcmV0dXJuIGJyZWFrSWQ7Cit9CisKK0RlYnVnZ2Vy
U2NyaXB0LnJlbW92ZUJyZWFrcG9pbnQgPSBmdW5jdGlvbihleGVjU3RhdGUsIGFyZ3MpCit7Cisg
ICAgYXJncy5saW5lTnVtYmVyID0gRGVidWdnZXJTY3JpcHQuX3dlYmtpdFRvVjhMaW5lTnVtYmVy
KGFyZ3MubGluZU51bWJlcik7CisgICAgdmFyIGtleSA9IGFyZ3Muc2NyaXB0SWQgKyAiOiIgKyBh
cmdzLmxpbmVOdW1iZXI7CisgICAgdmFyIGJyZWFrSWQgPSBEZWJ1Z2dlclNjcmlwdC5fYnJlYWtw
b2ludHNba2V5XTsKKyAgICBpZiAoYnJlYWtJZCkKKyAgICAgICAgRGVidWcuZmluZEJyZWFrUG9p
bnQoYnJlYWtJZCwgdHJ1ZSk7CisgICAgZGVsZXRlIERlYnVnZ2VyU2NyaXB0Ll9icmVha3BvaW50
c1trZXldOworfQorCitEZWJ1Z2dlclNjcmlwdC5jdXJyZW50Q2FsbEZyYW1lID0gZnVuY3Rpb24o
ZXhlY1N0YXRlLCBhcmdzKQoreworICAgIHZhciBmcmFtZUNvdW50ID0gZXhlY1N0YXRlLmZyYW1l
Q291bnQoKTsKKyAgICBpZiAoZnJhbWVDb3VudCA9PT0gMCkKKyAgICAgICAgcmV0dXJuIHVuZGVm
aW5lZDsKKyAgICAKKyAgICB2YXIgdG9wRnJhbWU7CisgICAgZm9yICh2YXIgaSA9IGZyYW1lQ291
bnQgLSAxOyBpID49IDA7IGktLSkgeworICAgICAgICB2YXIgZnJhbWVNaXJyb3IgPSBleGVjU3Rh
dGUuZnJhbWUoaSk7CisgICAgICAgIHRvcEZyYW1lID0gRGVidWdnZXJTY3JpcHQuX2ZyYW1lTWly
cm9yVG9KU0NhbGxGcmFtZShmcmFtZU1pcnJvciwgdG9wRnJhbWUpOworICAgIH0KKyAgICByZXR1
cm4gdG9wRnJhbWU7Cit9CisKK0RlYnVnZ2VyU2NyaXB0LnN0ZXBJbnRvU3RhdGVtZW50ID0gZnVu
Y3Rpb24oZXhlY1N0YXRlLCBhcmdzKQoreworICAgIGV4ZWNTdGF0ZS5wcmVwYXJlU3RlcChEZWJ1
Zy5TdGVwQWN0aW9uLlN0ZXBJbiwgMSk7Cit9CisKK0RlYnVnZ2VyU2NyaXB0LnN0ZXBPdmVyU3Rh
dGVtZW50ID0gZnVuY3Rpb24oZXhlY1N0YXRlLCBhcmdzKQoreworICAgIGV4ZWNTdGF0ZS5wcmVw
YXJlU3RlcChEZWJ1Zy5TdGVwQWN0aW9uLlN0ZXBOZXh0LCAxKTsKK30KKworRGVidWdnZXJTY3Jp
cHQuc3RlcE91dE9mRnVuY3Rpb24gPSBmdW5jdGlvbihleGVjU3RhdGUsIGFyZ3MpCit7CisgICAg
ZXhlY1N0YXRlLnByZXBhcmVTdGVwKERlYnVnLlN0ZXBBY3Rpb24uU3RlcE91dCwgMSk7Cit9CisK
K0RlYnVnZ2VyU2NyaXB0LmNsZWFyQnJlYWtwb2ludHMgPSBmdW5jdGlvbihleGVjU3RhdGUsIGFy
Z3MpCit7CisgICAgZm9yICh2YXIga2V5IGluIERlYnVnZ2VyU2NyaXB0Ll9icmVha3BvaW50cykg
eworICAgICAgICB2YXIgYnJlYWtJZCA9IERlYnVnZ2VyU2NyaXB0Ll9icmVha3BvaW50c1trZXld
OworICAgICAgICBEZWJ1Zy5maW5kQnJlYWtQb2ludChicmVha0lkLCB0cnVlKTsKKyAgICB9Cisg
ICAgRGVidWdnZXJTY3JpcHQuX2JyZWFrcG9pbnRzID0ge307Cit9CisKK0RlYnVnZ2VyU2NyaXB0
LnNldEJyZWFrcG9pbnRzQWN0aXZhdGVkID0gZnVuY3Rpb24oZXhlY1N0YXRlLCBhcmdzKQorewor
ICAgIGZvciAodmFyIGtleSBpbiBEZWJ1Z2dlclNjcmlwdC5fYnJlYWtwb2ludHMpIHsKKyAgICAg
ICAgdmFyIGJyZWFrSWQgPSBEZWJ1Z2dlclNjcmlwdC5fYnJlYWtwb2ludHNba2V5XTsKKyAgICAg
ICAgaWYgKGFyZ3MuZW5hYmxlZCkKKyAgICAgICAgICAgIERlYnVnLmVuYWJsZVNjcmlwdEJyZWFr
UG9pbnQoYnJlYWtJZCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIERlYnVnLmRpc2FibGVT
Y3JpcHRCcmVha1BvaW50KGJyZWFrSWQpOworICAgIH0KK30KKworRGVidWdnZXJTY3JpcHQuX2Zy
YW1lTWlycm9yVG9KU0NhbGxGcmFtZSA9IGZ1bmN0aW9uKGZyYW1lTWlycm9yLCBjYWxsZXJGcmFt
ZSkKK3sKKyAgICAvLyBHZXQgZnVuY3Rpb24gbmFtZS4KKyAgICB2YXIgZnVuYzsKKyAgICB0cnkg
eworICAgICAgICBmdW5jID0gZnJhbWVNaXJyb3IuZnVuYygpOworICAgIH0gY2F0Y2goZSkgewor
ICAgIH0KKyAgICB2YXIgZnVuY3Rpb25OYW1lOworICAgIGlmIChmdW5jKQorICAgICAgICBmdW5j
dGlvbk5hbWUgPSBmdW5jLm5hbWUoKSB8fCBmdW5jLmluZmVycmVkTmFtZSgpOworICAgIGlmICgh
ZnVuY3Rpb25OYW1lKQorICAgICAgICBmdW5jdGlvbk5hbWUgPSAiW2Fub255bW91c10iOworICAg
ICAgICAKKyAgICAvLyBHZXQgc2NyaXB0IElELgorICAgIHZhciBzY3JpcHQgPSBmdW5jLnNjcmlw
dCgpOworICAgIHZhciBzb3VyY2VJRCA9IHNjcmlwdCAmJiBzY3JpcHQuaWQoKTsKKyAgICAKKyAg
ICAvLyBHZXQgbGluZSBudW1iZXIuCisgICAgdmFyIGxpbmUgPSBEZWJ1Z2dlclNjcmlwdC5fdjhU
b1d3ZWJraXRMaW5lTnVtYmVyKGZyYW1lTWlycm9yLnNvdXJjZUxpbmUoKSk7CisgICAgCisgICAg
Ly8gR2V0IHRoaXMgb2JqZWN0LgorICAgIHZhciB0aGlzT2JqZWN0ID0gZnJhbWVNaXJyb3IuZGV0
YWlsc18ucmVjZWl2ZXIoKTsKKworICAgIC8vIEdldCBzY29wZSBjaGFpbiBhcnJheSBpbiBmb3Jt
YXQ6IFs8c2NvcGUgdHlwZT4sIDxzY29wZSBvYmplY3Q+LCA8c2NvcGUgdHlwZT4sIDxzY29wZSBv
YmplY3Q+LC4uLl0KKyAgICB2YXIgc2NvcGVDaGFpbiA9IFtdOworICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgZnJhbWVNaXJyb3Iuc2NvcGVDb3VudCgpOyBpKyspIHsKKyAgICAgICAgdmFyIHNjb3Bl
TWlycm9yID0gZnJhbWVNaXJyb3Iuc2NvcGUoaSk7CisgICAgICAgIHZhciBzY29wZU9iamVjdE1p
cnJvciA9IHNjb3BlTWlycm9yLnNjb3BlT2JqZWN0KCk7CisgICAgICAgIHZhciBwcm9wZXJ0aWVz
ID0gc2NvcGVPYmplY3RNaXJyb3IucHJvcGVydGllcygpOworICAgICAgICB2YXIgc2NvcGVPYmpl
Y3QgPSB7fTsKKyAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBwcm9wZXJ0aWVzLmxlbmd0aDsg
aisrKQorICAgICAgICAgICAgc2NvcGVPYmplY3RbcHJvcGVydGllc1tqXS5uYW1lKCldID0gcHJv
cGVydGllc1tqXS52YWx1ZV87CisgICAgICAgIHNjb3BlQ2hhaW4ucHVzaChzY29wZU1pcnJvci5z
Y29wZVR5cGUoKSk7CisgICAgICAgIHNjb3BlQ2hhaW4ucHVzaChzY29wZU9iamVjdCk7CisgICAg
fQorICAgIAorICAgIHJldHVybiB7CisgICAgICAgICJzb3VyY2VJRCI6IHNvdXJjZUlELAorICAg
ICAgICAibGluZSI6IGxpbmUsCisgICAgICAgICJmdW5jdGlvbk5hbWUiOiBmdW5jdGlvbk5hbWUs
CisgICAgICAgICJ0eXBlIjogImZ1bmN0aW9uIiwKKyAgICAgICAgInRoaXNPYmplY3QiOiB0aGlz
T2JqZWN0LAorICAgICAgICAic2NvcGVDaGFpbiI6IHNjb3BlQ2hhaW4sCisgICAgICAgICJjYWxs
ZXIiOiBjYWxsZXJGcmFtZQorICAgIH07Cit9CisKK0RlYnVnZ2VyU2NyaXB0Ll93ZWJraXRUb1Y4
TGluZU51bWJlciA9IGZ1bmN0aW9uKGxpbmUpCit7CisgICAgcmV0dXJuIGxpbmUgLSAxOworfTsK
KworRGVidWdnZXJTY3JpcHQuX3Y4VG9Xd2Via2l0TGluZU51bWJlciA9IGZ1bmN0aW9uKGxpbmUp
Cit7CisgICAgcmV0dXJuIGxpbmUgKyAxOworfTsKKworcmV0dXJuIERlYnVnZ2VyU2NyaXB0Owor
Cit9CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RldlRvb2xzLmpzIGIvV2Vi
S2l0L2Nocm9taXVtL3NyYy9qcy9EZXZUb29scy5qcwppbmRleCA1YjI4OGVjLi45NDA2YmYwIDEw
MDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RldlRvb2xzLmpzCisrKyBiL1dlYktp
dC9jaHJvbWl1bS9zcmMvanMvRGV2VG9vbHMuanMKQEAgLTE4MywxMiArMTgzLDE2IEBAIFdlYklu
c3BlY3Rvci5sb2FkZWQgPSBmdW5jdGlvbigpCiAgICAgUHJlZmVyZW5jZXMuaGVhcFByb2ZpbGVy
UHJlc2VudCA9IHRydWU7CiAgICAgUHJlZmVyZW5jZXMuZGVidWdnZXJBbHdheXNFbmFibGVkID0g
dHJ1ZTsKICAgICBQcmVmZXJlbmNlcy5wcm9maWxlckFsd2F5c0VuYWJsZWQgPSB0cnVlOworICAg
IFJlbW90ZURlYnVnZ2VyQWdlbnQuc2V0RGVidWdnZXJTY3JpcHRTb3VyY2UoIigiICsgZGVidWdn
ZXJTY3JpcHRDb25zdHJ1Y3RvciArICIpKCk7Iik7CisgCiAgICAgb2xkTG9hZGVkLmNhbGwodGhp
cyk7CiAKICAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3QubG9hZGVkKCk7CiB9OwogCiAKK2lmICgh
d2luZG93LnY4U2NyaXB0RGVidWdTZXJ2ZXJFbmFibGVkKSB7CisKIC8qKgogICogVGhpcyBvdmVy
cmlkZSBpcyBuZWNlc3NhcnkgZm9yIGFkZGluZyBzY3JpcHQgc291cmNlIGFzeW5jaHJvbm91c2x5
LgogICogQG92ZXJyaWRlCkBAIC0yMjUsMTggKzIyOSw2IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRW
aWV3LnByb3RvdHlwZS5kaWRSZXNvbHZlU2NyaXB0U291cmNlXyA9IGZ1bmN0aW9uKCkKIH07CiAK
IAotLyoqCi0gKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBUeXBlIG9mIHRoZSB0aGUgcHJvcGVydHkg
dmFsdWUoIm9iamVjdCIgb3IgImZ1bmN0aW9uIikuCi0gKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NO
YW1lIENsYXNzIG5hbWUgb2YgdGhlIHByb3BlcnR5IHZhbHVlLgotICogQGNvbnN0cnVjdG9yCi0g
Ki8KLVdlYkluc3BlY3Rvci5VbnJlc29sdmVkUHJvcGVydHlWYWx1ZSA9IGZ1bmN0aW9uKHR5cGUs
IGNsYXNzTmFtZSkKLXsKLSAgICB0aGlzLnR5cGUgPSB0eXBlOwotICAgIHRoaXMuY2xhc3NOYW1l
ID0gY2xhc3NOYW1lOwotfTsKLQotCiAoZnVuY3Rpb24oKQogewogICAgIHZhciBvbGRTaG93ID0g
V2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUuc2hvdzsKQEAgLTI0OSw2ICsyNDEs
NDcgQEAgV2ViSW5zcGVjdG9yLlVucmVzb2x2ZWRQcm9wZXJ0eVZhbHVlID0gZnVuY3Rpb24odHlw
ZSwgY2xhc3NOYW1lKQogfSkoKTsKIAogCisoZnVuY3Rpb24gKCkgewordmFyIG9yaWcgPSBJbmpl
Y3RlZFNjcmlwdEFjY2Vzcy5wcm90b3R5cGUuZ2V0UHJvcGVydGllczsKK0luamVjdGVkU2NyaXB0
QWNjZXNzLnByb3RvdHlwZS5nZXRQcm9wZXJ0aWVzID0gZnVuY3Rpb24ob2JqZWN0UHJveHksIGln
bm9yZUhhc093blByb3BlcnR5LCBhYmJyZXZpYXRlLCBjYWxsYmFjaykKK3sKKyAgICBpZiAob2Jq
ZWN0UHJveHkuaXNTY29wZSkKKyAgICAgICAgZGV2dG9vbHMudG9vbHMuZ2V0RGVidWdnZXJBZ2Vu
dCgpLnJlc29sdmVTY29wZShvYmplY3RQcm94eS5vYmplY3RJZCwgY2FsbGJhY2spOworICAgIGVs
c2UgaWYgKG9iamVjdFByb3h5LmlzVjhSZWYpCisgICAgICAgIGRldnRvb2xzLnRvb2xzLmdldERl
YnVnZ2VyQWdlbnQoKS5yZXNvbHZlQ2hpbGRyZW4ob2JqZWN0UHJveHkub2JqZWN0SWQsIGNhbGxi
YWNrLCBmYWxzZSk7CisgICAgZWxzZQorICAgICAgICBvcmlnLmFwcGx5KHRoaXMsIGFyZ3VtZW50
cyk7Cit9OworfSkoKTsKKworCisoZnVuY3Rpb24oKQoreworSW5qZWN0ZWRTY3JpcHRBY2Nlc3Mu
cHJvdG90eXBlLmV2YWx1YXRlSW5DYWxsRnJhbWUgPSBmdW5jdGlvbihjYWxsRnJhbWVJZCwgY29k
ZSwgb2JqZWN0R3JvdXAsIGNhbGxiYWNrKQoreworICAgIC8vVE9ETyhwZmVsZG1hbik6IHJlbW92
ZSBvbmNlIDQ5MDg0IGlzIHJvbGxlZC4KKyAgICBpZiAoIWNhbGxiYWNrKQorICAgICAgICBjYWxs
YmFjayA9IG9iamVjdEdyb3VwOworICAgIGRldnRvb2xzLnRvb2xzLmdldERlYnVnZ2VyQWdlbnQo
KS5ldmFsdWF0ZUluQ2FsbEZyYW1lKGNhbGxGcmFtZUlkLCBjb2RlLCBjYWxsYmFjayk7Cit9Owor
fSkoKTsKKworCisoZnVuY3Rpb24oKQorewordmFyIG9yaWcgPSBJbmplY3RlZFNjcmlwdEFjY2Vz
cy5wcm90b3R5cGUuZ2V0Q29tcGxldGlvbnM7CitJbmplY3RlZFNjcmlwdEFjY2Vzcy5wcm90b3R5
cGUuZ2V0Q29tcGxldGlvbnMgPSBmdW5jdGlvbihleHByZXNzaW9uU3RyaW5nLCBpbmNsdWRlSW5z
cGVjdG9yQ29tbWFuZExpbmVBUEksIGNhbGxGcmFtZUlkLCByZXBvcnRDb21wbGV0aW9ucykKK3sK
KyAgICBpZiAodHlwZW9mIGNhbGxGcmFtZUlkID09PSAibnVtYmVyIikKKyAgICAgICAgZGV2dG9v
bHMudG9vbHMuZ2V0RGVidWdnZXJBZ2VudCgpLnJlc29sdmVDb21wbGV0aW9uc09uRnJhbWUoZXhw
cmVzc2lvblN0cmluZywgY2FsbEZyYW1lSWQsIHJlcG9ydENvbXBsZXRpb25zKTsKKyAgICBlbHNl
CisgICAgICAgIHJldHVybiBvcmlnLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Cit9OworfSkoKTsK
KworfQorCisKIChmdW5jdGlvbiBJbnRlcmNlcHRQcm9maWxlc1BhbmVsRXZlbnRzKCkKIHsKICAg
ICB2YXIgb2xkU2hvdyA9IFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlwZS5zaG93
OwpAQCAtMzQzLDQ1ICszNzYsNiBAQCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcgPSBmdW5jdGlvbihz
dHJpbmcpCiB9KSgpOwogCiAKLShmdW5jdGlvbiAoKSB7Ci12YXIgb3JpZyA9IEluamVjdGVkU2Ny
aXB0QWNjZXNzLnByb3RvdHlwZS5nZXRQcm9wZXJ0aWVzOwotSW5qZWN0ZWRTY3JpcHRBY2Nlc3Mu
cHJvdG90eXBlLmdldFByb3BlcnRpZXMgPSBmdW5jdGlvbihvYmplY3RQcm94eSwgaWdub3JlSGFz
T3duUHJvcGVydHksIGFiYnJldmlhdGUsIGNhbGxiYWNrKQotewotICAgIGlmIChvYmplY3RQcm94
eS5pc1Njb3BlKQotICAgICAgICBkZXZ0b29scy50b29scy5nZXREZWJ1Z2dlckFnZW50KCkucmVz
b2x2ZVNjb3BlKG9iamVjdFByb3h5Lm9iamVjdElkLCBjYWxsYmFjayk7Ci0gICAgZWxzZSBpZiAo
b2JqZWN0UHJveHkuaXNWOFJlZikKLSAgICAgICAgZGV2dG9vbHMudG9vbHMuZ2V0RGVidWdnZXJB
Z2VudCgpLnJlc29sdmVDaGlsZHJlbihvYmplY3RQcm94eS5vYmplY3RJZCwgY2FsbGJhY2ssIGZh
bHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG9yaWcuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLX07
Ci19KSgpOwotCi0KLShmdW5jdGlvbigpCi17Ci1JbmplY3RlZFNjcmlwdEFjY2Vzcy5wcm90b3R5
cGUuZXZhbHVhdGVJbkNhbGxGcmFtZSA9IGZ1bmN0aW9uKGNhbGxGcmFtZUlkLCBjb2RlLCBvYmpl
Y3RHcm91cCwgY2FsbGJhY2spCi17Ci0gICAgLy9UT0RPKHBmZWxkbWFuKTogcmVtb3ZlIG9uY2Ug
NDkwODQgaXMgcm9sbGVkLgotICAgIGlmICghY2FsbGJhY2spCi0gICAgICAgIGNhbGxiYWNrID0g
b2JqZWN0R3JvdXA7Ci0gICAgZGV2dG9vbHMudG9vbHMuZ2V0RGVidWdnZXJBZ2VudCgpLmV2YWx1
YXRlSW5DYWxsRnJhbWUoY2FsbEZyYW1lSWQsIGNvZGUsIGNhbGxiYWNrKTsKLX07Ci19KSgpOwot
Ci0KLShmdW5jdGlvbigpCi17Ci12YXIgb3JpZyA9IEluamVjdGVkU2NyaXB0QWNjZXNzLnByb3Rv
dHlwZS5nZXRDb21wbGV0aW9uczsKLUluamVjdGVkU2NyaXB0QWNjZXNzLnByb3RvdHlwZS5nZXRD
b21wbGV0aW9ucyA9IGZ1bmN0aW9uKGV4cHJlc3Npb25TdHJpbmcsIGluY2x1ZGVJbnNwZWN0b3JD
b21tYW5kTGluZUFQSSwgY2FsbEZyYW1lSWQsIHJlcG9ydENvbXBsZXRpb25zKQotewotICAgIGlm
ICh0eXBlb2YgY2FsbEZyYW1lSWQgPT09ICJudW1iZXIiKQotICAgICAgICBkZXZ0b29scy50b29s
cy5nZXREZWJ1Z2dlckFnZW50KCkucmVzb2x2ZUNvbXBsZXRpb25zT25GcmFtZShleHByZXNzaW9u
U3RyaW5nLCBjYWxsRnJhbWVJZCwgcmVwb3J0Q29tcGxldGlvbnMpOwotICAgIGVsc2UKLSAgICAg
ICAgcmV0dXJuIG9yaWcuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLX07Ci19KSgpOwotCi0KIC8v
IFdlIG5lZWQgdG8gaGF2ZSBhIHBsYWNlIGZvciBwb3N0cG9uZWQgdGFza3MKIC8vIHdoaWNoIHNo
b3VsZCBiZSBleGVjdXRlZCB3aGVuIGFsbCB0aGUgbWVzc2FnZXMgYmV0d2VlbiBhZ2VudCBhbmQg
ZnJvbnRlbmQKIC8vIGFyZSBwcm9jZXNzZWQuCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0v
c3JjL2pzL0RldlRvb2xzSG9zdFN0dWIuanMgYi9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RldlRv
b2xzSG9zdFN0dWIuanMKaW5kZXggOGIyZjQ2Yi4uY2FlNGExZSAxMDA2NDQKLS0tIGEvV2ViS2l0
L2Nocm9taXVtL3NyYy9qcy9EZXZUb29sc0hvc3RTdHViLmpzCisrKyBiL1dlYktpdC9jaHJvbWl1
bS9zcmMvanMvRGV2VG9vbHNIb3N0U3R1Yi5qcwpAQCAtNTUsNiArNTUsMTEgQEAgUmVtb3RlRGVi
dWdnZXJBZ2VudFN0dWIucHJvdG90eXBlLnByb2Nlc3NEZWJ1Z0NvbW1hbmRzID0gZnVuY3Rpb24o
KQogfTsKIAogCitSZW1vdGVEZWJ1Z2dlckFnZW50U3R1Yi5wcm90b3R5cGUuc2V0RGVidWdnZXJT
Y3JpcHRTb3VyY2UgPSBmdW5jdGlvbihzb3VyY2UpCit7Cit9OworCisKIC8qKgogICogQGNvbnN0
cnVjdG9yCiAgKi8KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvSW5zcGVjdG9y
Q29udHJvbGxlckltcGwuanMgYi9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0luc3BlY3RvckNvbnRy
b2xsZXJJbXBsLmpzCmluZGV4IGM5YTM5YjQuLjJjYjA5MDcgMTAwNjQ0Ci0tLSBhL1dlYktpdC9j
aHJvbWl1bS9zcmMvanMvSW5zcGVjdG9yQ29udHJvbGxlckltcGwuanMKKysrIGIvV2ViS2l0L2No
cm9taXVtL3NyYy9qcy9JbnNwZWN0b3JDb250cm9sbGVySW1wbC5qcwpAQCAtODYsNiArODYsMjEg
QEAgZGV2dG9vbHMuSW5zcGVjdG9yQmFja2VuZEltcGwgPSBmdW5jdGlvbigpCiAgICAgdGhpcy5p
bnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygidG9nZ2xlU3R5bGVFbmFibGVkIik7
CiAgICAgdGhpcy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygic2V0UnVsZVNl
bGVjdG9yIik7CiAgICAgdGhpcy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygi
YWRkUnVsZSIpOworCisgICAgaWYgKHdpbmRvdy52OFNjcmlwdERlYnVnU2VydmVyRW5hYmxlZCkg
eworICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oImRpc2FibGVE
ZWJ1Z2dlciIpOworICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8o
ImVuYWJsZURlYnVnZ2VyIik7CisgICAgdGhpcy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRl
bGVnYXRlXygic2V0QnJlYWtwb2ludCIpOworICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRy
b2xsZXJEZWxlZ2F0ZV8oInJlbW92ZUJyZWFrcG9pbnQiKTsKKyAgICB0aGlzLmluc3RhbGxJbnNw
ZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJhY3RpdmF0ZUJyZWFrcG9pbnRzIik7CisgICAgdGhp
cy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygiZGVhY3RpdmF0ZUJyZWFrcG9p
bnRzIik7CisgICAgdGhpcy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygicGF1
c2VJbkRlYnVnZ2VyIik7CisgICAgdGhpcy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRlbGVn
YXRlXygicmVzdW1lRGVidWdnZXIiKTsKKyAgICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250cm9s
bGVyRGVsZWdhdGVfKCJzdGVwSW50b1N0YXRlbWVudEluRGVidWdnZXIiKTsKKyAgICB0aGlzLmlu
c3RhbGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJzdGVwT3V0T2ZGdW5jdGlvbkluRGVi
dWdnZXIiKTsKKyAgICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJz
dGVwT3ZlclN0YXRlbWVudEluRGVidWdnZXIiKTsKKyAgICB0aGlzLmluc3RhbGxJbnNwZWN0b3JD
b250cm9sbGVyRGVsZWdhdGVfKCJzZXRQYXVzZU9uRXhjZXB0aW9uc1N0YXRlIik7CisgICAgfQog
fTsKIGRldnRvb2xzLkluc3BlY3RvckJhY2tlbmRJbXBsLnByb3RvdHlwZS5fX3Byb3RvX18gPSBX
ZWJJbnNwZWN0b3IuSW5zcGVjdG9yQmFja2VuZFN0dWIucHJvdG90eXBlOwogCkBAIC0xMDgsNiAr
MTIzLDggQEAgZGV2dG9vbHMuSW5zcGVjdG9yQmFja2VuZEltcGwucHJvdG90eXBlLnByb2ZpbGVy
RW5hYmxlZCA9IGZ1bmN0aW9uKCkKIH07CiAKIAoraWYgKCF3aW5kb3cudjhTY3JpcHREZWJ1Z1Nl
cnZlckVuYWJsZWQpIHsKKwogZGV2dG9vbHMuSW5zcGVjdG9yQmFja2VuZEltcGwucHJvdG90eXBl
LnNldEJyZWFrcG9pbnQgPSBmdW5jdGlvbihzb3VyY2VJRCwgbGluZSwgZW5hYmxlZCwgY29uZGl0
aW9uKQogewogICAgIHRoaXMucmVtb3ZlQnJlYWtwb2ludChzb3VyY2VJRCwgbGluZSk7CkBAIC0x
OTMsNiArMjEwLDggQEAgZGV2dG9vbHMuSW5zcGVjdG9yQmFja2VuZEltcGwucHJvdG90eXBlLnNl
dFBhdXNlT25FeGNlcHRpb25zID0gZnVuY3Rpb24odmFsdWUpCiAgICAgcmV0dXJuIGRldnRvb2xz
LnRvb2xzLmdldERlYnVnZ2VyQWdlbnQoKS5zZXRQYXVzZU9uRXhjZXB0aW9ucyh2YWx1ZSk7CiB9
OwogCit9CisKIAogLyoqCiAgKiBAb3ZlcnJpZGUK
</data>
<flag name="review"
          id="37176"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53453</attachid>
            <date>2010-04-15 11:11:06 -0700</date>
            <delta_ts>2010-04-15 11:41:34 -0700</delta_ts>
            <desc>patch</desc>
            <filename>script-debug-server5.patch</filename>
            <type>text/plain</type>
            <size>49748</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MmYxMTg0ZC4uNjE3MTcxYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MCBAQAorMjAxMC0wNC0xNSAgWXVyeSBTZW1pa2hh
dHNreSAgPHl1cnlzQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisgICAgCisgICAgICAgIFN1cHBvcnQgYmFzaWMgZGVidWdnaW5nIGNhcGFiaWxpdGll
cyBpbmNsdWRpbmcgc3RlcCBpbi9vdmVyL291dCBpbiB2OAorICAgICAgICBpbXBsZW1lbnRhdGlv
biBvZiBTY3JpcHREZWJ1Z1NlcnZlci4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9Mzc2MDQKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW5qZWN0
ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0
SG9zdDo6Y3JlYXRlSW5qZWN0ZWRTY3JpcHQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Njcmlw
dERlYnVnU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpT
Y3JpcHREZWJ1Z1NlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6
c2V0RGVidWdnZXJTY3JpcHRTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdT
ZXJ2ZXI6OmFkZExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVy
OjpyZW1vdmVMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6
c2V0QnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6cmVt
b3ZlQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6Y2xl
YXJCcmVha3BvaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0
QnJlYWtwb2ludHNBY3RpdmF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2
ZXI6OmNvbnRpbnVlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZl
cjo6c3RlcEludG9TdGF0ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2
ZXI6OnN0ZXBPdmVyU3RhdGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2Vy
dmVyOjpzdGVwT3V0T2ZGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1Nl
cnZlcjo6Y3VycmVudENhbGxGcmFtZVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERl
YnVnU2VydmVyOjpjdXJyZW50Q2FsbEZyYW1lVjgpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
RGVidWdTZXJ2ZXI6Om9uVjhEZWJ1Z01lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
RGVidWdTZXJ2ZXI6Om9uVjhEZWJ1Z0hvc3REaXNwYXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JpcHREZWJ1Z1NlcnZlcjo6aGFuZGxlVjhEZWJ1Z0hvc3REaXNwYXRjaCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6aGFuZGxlVjhEZWJ1Z01lc3NhZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRGlkUGFyc2VTb3VyY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmVuc3VyZURlYnVnZ2VyU2NyaXB0
Q29tcGlsZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmRpZFJlc3Vt
ZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpwYXVzZU9uRXhjZXB0aW9uc1N0YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpzZXRQYXVzZU9uRXhjZXB0aW9uc1N0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpzZXRNZXNzYWdlTG9v
cERpc3BhdGNoSGFuZGxlcik6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5qZWN0
ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0
SG9zdDo6Y3JlYXRlSW5qZWN0ZWRTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6VjhJbmplY3Rl
ZFNjcmlwdEhvc3Q6OmN1cnJlbnRDYWxsRnJhbWVDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpWOEluamVjdGVkU2NyaXB0SG9zdDo6aXNBY3RpdmF0aW9uQ2FsbGJhY2spOgorICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHQuanM6CisgICAgICAgIChpbmplY3Rl
ZFNjcmlwdENvbnN0cnVjdG9yKToKKyAgICAgICAgKGluamVjdGVkU2NyaXB0Q29uc3RydWN0b3Iu
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qczoKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwpOgorCiAyMDEwLTA0LTE1ICBHeXV5b3VuZyBL
aW0gIDxneXV5b3VuZy5raW1Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJp
YyBTZWlkZWwuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3Jp
cHRIb3N0Q3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhv
c3RDdXN0b20uY3BwCmluZGV4IGY4NDg3ODMuLjI1Y2YyM2YgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCkBAIC05NSw2ICs5NSw3
IEBAIFNjcmlwdE9iamVjdCBJbmplY3RlZFNjcmlwdEhvc3Q6OmNyZWF0ZUluamVjdGVkU2NyaXB0
KGNvbnN0IFN0cmluZyYgc291cmNlLCBTY3JpCiAgICAgYXJncy5hcHBlbmQodG9KUyhzY3JpcHRT
dGF0ZSwgZ2xvYmFsT2JqZWN0LCB0aGlzKSk7CiAgICAgYXJncy5hcHBlbmQoZ2xvYmFsVGhpc1Zh
bHVlKTsKICAgICBhcmdzLmFwcGVuZChqc051bWJlcihzY3JpcHRTdGF0ZSwgaWQpKTsKKyAgICBh
cmdzLmFwcGVuZChqc1N0cmluZyhzY3JpcHRTdGF0ZSwgU3RyaW5nKCJKU0MiKSkpOwogICAgIEpT
VmFsdWUgcmVzdWx0ID0gSlNDOjpjYWxsKHNjcmlwdFN0YXRlLCBmdW5jdGlvblZhbHVlLCBjYWxs
VHlwZSwgY2FsbERhdGEsIGdsb2JhbFRoaXNWYWx1ZSwgYXJncyk7CiAgICAgaWYgKHJlc3VsdC5p
c09iamVjdCgpKQogICAgICAgICByZXR1cm4gU2NyaXB0T2JqZWN0KHNjcmlwdFN0YXRlLCByZXN1
bHQuZ2V0T2JqZWN0KCkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRE
ZWJ1Z1NlcnZlci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmNw
cAppbmRleCA4NzYzMmVlLi4zYzlmMDUzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1NjcmlwdERlYnVnU2VydmVyLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERl
YnVnU2VydmVyLmNwcApAQCAtMzMsMjEgKzMzLDMxMiBAQAogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJ
UFRfREVCVUdHRVIpCiAKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNp
bmNsdWRlICJTY3JpcHREZWJ1Z0xpc3RlbmVyLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCi0j
aW5jbHVkZSA8djgtZGVidWcuaD4KLQorI2luY2x1ZGUgIlY4RE9NV2luZG93LmgiCisjaW5jbHVk
ZSAiVjhQcm94eS5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiB2ODo6UGVyc2lzdGVudDx2ODo6Q29udGV4dD4gU2NyaXB0RGVidWdTZXJ2
ZXI6OnNfdXRpbGl0eUNvbnRleHQ7CiAKK1NjcmlwdERlYnVnU2VydmVyOjpNZXNzYWdlTG9vcERp
c3BhdGNoSGFuZGxlciBTY3JpcHREZWJ1Z1NlcnZlcjo6c19tZXNzYWdlTG9vcERpc3BhdGNoSGFu
ZGxlciA9IDA7CisKIFNjcmlwdERlYnVnU2VydmVyJiBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVk
KCkKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFNjcmlwdERlYnVnU2VydmVyLCBzZXJ2ZXIs
ICgpKTsKICAgICByZXR1cm4gc2VydmVyOwogfQogCitTY3JpcHREZWJ1Z1NlcnZlcjo6U2NyaXB0
RGVidWdTZXJ2ZXIoKQorICAgIDogbV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlKERvbnRQYXVzZU9u
RXhjZXB0aW9ucykKKyAgICAsIG1fY3VycmVudENhbGxGcmFtZVN0YXRlKDApCit7Cit9CisKK3Zv
aWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnNldERlYnVnZ2VyU2NyaXB0U291cmNlKGNvbnN0IFN0cmlu
ZyYgc2NyaXB0U291cmNlKQoreworICAgIG1fZGVidWdnZXJTY3JpcHRTb3VyY2UgPSBzY3JpcHRT
b3VyY2U7Cit9CisKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmFkZExpc3RlbmVyKFNjcmlwdERl
YnVnTGlzdGVuZXIqIGxpc3RlbmVyLCBQYWdlKiBwYWdlKQoreworI2lmIEVOQUJMRShWOF9TQ1JJ
UFRfREVCVUdfU0VSVkVSKQorICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKKyAgICB2ODo6TG9j
YWw8djg6OkNvbnRleHQ+IGRlYnVnZ2VyQ29udGV4dCA9IHY4OjpEZWJ1Zzo6R2V0RGVidWdDb250
ZXh0KCk7CisgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRTY29wZShkZWJ1Z2dlckNvbnRl
eHQpOworCisgICAgaWYgKCFtX2xpc3RlbmVyc01hcC5zaXplKCkpIHsKKyAgICAgICAgZW5zdXJl
RGVidWdnZXJTY3JpcHRDb21waWxlZCgpOworICAgICAgICBBU1NFUlQoIW1fZGVidWdnZXJTY3Jp
cHQtPklzVW5kZWZpbmVkKCkpOworICAgICAgICB2ODo6RGVidWc6OlNldE1lc3NhZ2VIYW5kbGVy
MigmU2NyaXB0RGVidWdTZXJ2ZXI6Om9uVjhEZWJ1Z01lc3NhZ2UpOworICAgICAgICB2ODo6RGVi
dWc6OlNldEhvc3REaXNwYXRjaEhhbmRsZXIoJlNjcmlwdERlYnVnU2VydmVyOjpvblY4RGVidWdI
b3N0RGlzcGF0Y2gsIDEwMCAvKiBtcyAqLyk7CisgICAgfQorICAgIG1fbGlzdGVuZXJzTWFwLnNl
dChwYWdlLCBsaXN0ZW5lcik7CisgICAgVjhQcm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2
ZShwYWdlLT5tYWluRnJhbWUoKSk7CisgICAgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjb250ZXh0
ID0gcHJveHktPm1haW5Xb3JsZENvbnRleHQoKTsKKyAgICBTdHJpbmcgY29udGV4dERhdGEgPSB0
b1dlYkNvcmVTdHJpbmdXaXRoTnVsbENoZWNrKGNvbnRleHQtPkdldERhdGEoKSk7CisgICAgbV9j
b250ZXh0RGF0YU1hcC5zZXQobGlzdGVuZXIsIGNvbnRleHREYXRhKTsKKworICAgIHY4OjpIYW5k
bGU8djg6OkZ1bmN0aW9uPiBnZXRTY3JpcHRzRnVuY3Rpb24gPSB2ODo6TG9jYWw8djg6OkZ1bmN0
aW9uPjo6Q2FzdChtX2RlYnVnZ2VyU2NyaXB0LT5HZXQodjg6OlN0cmluZzo6TmV3KCJnZXRTY3Jp
cHRzIikpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUgPSB2ODo6RGVidWc6OkNh
bGwoZ2V0U2NyaXB0c0Z1bmN0aW9uKTsKKyAgICBpZiAodmFsdWUuSXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm47CisgICAgQVNTRVJUKCF2YWx1ZS0+SXNVbmRlZmluZWQoKSAmJiB2YWx1ZS0+SXNB
cnJheSgpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpBcnJheT4gc2NyaXB0c0FycmF5ID0gdjg6Okhh
bmRsZTx2ODo6QXJyYXk+OjpDYXN0KHZhbHVlKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc2NyaXB0c0FycmF5LT5MZW5ndGgoKTsgKytpKQorICAgICAgICBkaXNwYXRjaERpZFBhcnNl
U291cmNlKGxpc3RlbmVyLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHNjcmlwdHNBcnJh
eS0+R2V0KHY4OjpJbnRlZ2VyOjpOZXcoaSkpKSk7CisjZW5kaWYKK30KKwordm9pZCBTY3JpcHRE
ZWJ1Z1NlcnZlcjo6cmVtb3ZlTGlzdGVuZXIoU2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIs
IFBhZ2UqIHBhZ2UpCit7CisgICAgaWYgKCFtX2xpc3RlbmVyc01hcC5jb250YWlucyhwYWdlKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9saXN0ZW5lcnNNYXAucmVtb3ZlKHBhZ2UpOworCisg
ICAgaWYgKG1fbGlzdGVuZXJzTWFwLmlzRW1wdHkoKSkgeworICAgICAgICB2ODo6RGVidWc6OlNl
dE1lc3NhZ2VIYW5kbGVyMigwKTsKKyAgICAgICAgdjg6OkRlYnVnOjpTZXRIb3N0RGlzcGF0Y2hI
YW5kbGVyKDApOworICAgIH0KKyAgICAvLyBGSVhNRTogUmVtb3ZlIGFsbCBicmVha3BvaW50cyBz
ZXQgYnkgdGhlIGFnZW50LgorICAgIC8vIEZJWE1FOiBGb3JjZSBjb250aW51ZSBpZiBkZXRhY2gg
aGFwcGVuZWQgaW4gbmVzc3RlZCBtZXNzYWdlIGxvb3Agd2hpbGUKKyAgICAvLyBkZWJ1Z2dlciB3
YXMgcGF1c2VkIG9uIGEgYnJlYWtwb2ludChhcyBsb25nIGFzIHRoZXJlIGFyZSBvdGhlcgorICAg
IC8vIGF0dGFjaGVkIGFnZW50cyB2OCB3aWxsIHdhaXQgZm9yIGV4cGxpY2l0J2NvbnRpbnVlJyBt
ZXNzYWdlKS4KKyAgICAvLyBGSVhNRTogc2VuZCBjb250aW51ZSBjb21tYW5kIHRvIHY4IGlmIG5l
Y2Vzc2FyeTsKK30KKwordm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0QnJlYWtwb2ludChjb25z
dCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBTY3JpcHRCcmVha3BvaW50
IGJyZWFrcG9pbnQpCit7CisjaWYgRU5BQkxFKFY4X1NDUklQVF9ERUJVR19TRVJWRVIpCisgICAg
djg6OkhhbmRsZVNjb3BlIHNjb3BlOworICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gZGVidWdn
ZXJDb250ZXh0ID0gdjg6OkRlYnVnOjpHZXREZWJ1Z0NvbnRleHQoKTsKKyAgICB2ODo6Q29udGV4
dDo6U2NvcGUgY29udGV4dFNjb3BlKGRlYnVnZ2VyQ29udGV4dCk7CisKKyAgICB2ODo6TG9jYWw8
djg6Ok9iamVjdD4gYXJncyA9IHY4OjpPYmplY3Q6Ok5ldygpOworICAgIGFyZ3MtPlNldCh2ODo6
U3RyaW5nOjpOZXcoInNjcmlwdElkIiksIHY4U3RyaW5nKHNvdXJjZUlEKSk7CisgICAgYXJncy0+
U2V0KHY4OjpTdHJpbmc6Ok5ldygibGluZU51bWJlciIpLCB2ODo6SW50ZWdlcjo6TmV3KGxpbmVO
dW1iZXIpKTsKKyAgICBhcmdzLT5TZXQodjg6OlN0cmluZzo6TmV3KCJjb25kaXRpb24iKSwgdjhT
dHJpbmcoYnJlYWtwb2ludC5jb25kaXRpb24pKTsKKyAgICBhcmdzLT5TZXQodjg6OlN0cmluZzo6
TmV3KCJlbmFibGVkIiksIHY4OjpCb29sZWFuOjpOZXcoYnJlYWtwb2ludC5lbmFibGVkKSk7CisK
KyAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gc2V0QnJlYWtwb2ludEZ1bmN0aW9uID0gdjg6
OkxvY2FsPHY4OjpGdW5jdGlvbj46OkNhc3QobV9kZWJ1Z2dlclNjcmlwdC0+R2V0KHY4OjpTdHJp
bmc6Ok5ldygic2V0QnJlYWtwb2ludCIpKSk7CisgICAgdjg6OkRlYnVnOjpDYWxsKHNldEJyZWFr
cG9pbnRGdW5jdGlvbiwgYXJncyk7CisjZW5kaWYKK30KKwordm9pZCBTY3JpcHREZWJ1Z1NlcnZl
cjo6cmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5l
TnVtYmVyKQoreworI2lmIEVOQUJMRShWOF9TQ1JJUFRfREVCVUdfU0VSVkVSKQorICAgIHY4OjpI
YW5kbGVTY29wZSBzY29wZTsKKyAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGRlYnVnZ2VyQ29u
dGV4dCA9IHY4OjpEZWJ1Zzo6R2V0RGVidWdDb250ZXh0KCk7CisgICAgdjg6OkNvbnRleHQ6OlNj
b3BlIGNvbnRleHRTY29wZShkZWJ1Z2dlckNvbnRleHQpOworCisgICAgdjg6OkxvY2FsPHY4OjpP
YmplY3Q+IGFyZ3MgPSB2ODo6T2JqZWN0OjpOZXcoKTsKKyAgICBhcmdzLT5TZXQodjg6OlN0cmlu
Zzo6TmV3KCJzY3JpcHRJZCIpLCB2OFN0cmluZyhzb3VyY2VJRCkpOworICAgIGFyZ3MtPlNldCh2
ODo6U3RyaW5nOjpOZXcoImxpbmVOdW1iZXIiKSwgdjg6OkludGVnZXI6Ok5ldyhsaW5lTnVtYmVy
KSk7CisKKyAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gcmVtb3ZlQnJlYWtwb2ludEZ1bmN0
aW9uID0gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj46OkNhc3QobV9kZWJ1Z2dlclNjcmlwdC0+R2V0
KHY4OjpTdHJpbmc6Ok5ldygicmVtb3ZlQnJlYWtwb2ludCIpKSk7CisgICAgdjg6OkRlYnVnOjpD
YWxsKHJlbW92ZUJyZWFrcG9pbnRGdW5jdGlvbiwgYXJncyk7CisjZW5kaWYKK30KKwordm9pZCBT
Y3JpcHREZWJ1Z1NlcnZlcjo6Y2xlYXJCcmVha3BvaW50cygpCit7CisjaWYgRU5BQkxFKFY4X1ND
UklQVF9ERUJVR19TRVJWRVIpCisgICAgZW5zdXJlRGVidWdnZXJTY3JpcHRDb21waWxlZCgpOwor
ICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKKyAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGRl
YnVnZ2VyQ29udGV4dCA9IHY4OjpEZWJ1Zzo6R2V0RGVidWdDb250ZXh0KCk7CisgICAgdjg6OkNv
bnRleHQ6OlNjb3BlIGNvbnRleHRTY29wZShkZWJ1Z2dlckNvbnRleHQpOworCisgICAgdjg6Okhh
bmRsZTx2ODo6RnVuY3Rpb24+IHNldEJyZWFrcG9pbnRzQWN0aXZhdGVkID0gdjg6OkxvY2FsPHY4
OjpGdW5jdGlvbj46OkNhc3QobV9kZWJ1Z2dlclNjcmlwdC0+R2V0KHY4OjpTdHJpbmc6Ok5ldygi
Y2xlYXJCcmVha3BvaW50cyIpKSk7CisgICAgdjg6OkRlYnVnOjpDYWxsKHNldEJyZWFrcG9pbnRz
QWN0aXZhdGVkKTsKKyNlbmRpZgorfQorCit2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpzZXRCcmVh
a3BvaW50c0FjdGl2YXRlZChib29sIGVuYWJsZWQpCit7CisjaWYgRU5BQkxFKFY4X1NDUklQVF9E
RUJVR19TRVJWRVIpCisgICAgZW5zdXJlRGVidWdnZXJTY3JpcHRDb21waWxlZCgpOworICAgIHY4
OjpIYW5kbGVTY29wZSBzY29wZTsKKyAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGRlYnVnZ2Vy
Q29udGV4dCA9IHY4OjpEZWJ1Zzo6R2V0RGVidWdDb250ZXh0KCk7CisgICAgdjg6OkNvbnRleHQ6
OlNjb3BlIGNvbnRleHRTY29wZShkZWJ1Z2dlckNvbnRleHQpOworCisgICAgdjg6OkxvY2FsPHY4
OjpPYmplY3Q+IGFyZ3MgPSB2ODo6T2JqZWN0OjpOZXcoKTsKKyAgICBhcmdzLT5TZXQodjg6OlN0
cmluZzo6TmV3KCJlbmFibGVkIiksIHY4OjpCb29sZWFuOjpOZXcoZW5hYmxlZCkpOworICAgIHY4
OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBzZXRCcmVha3BvaW50c0FjdGl2YXRlZCA9IHY4OjpMb2Nh
bDx2ODo6RnVuY3Rpb24+OjpDYXN0KG1fZGVidWdnZXJTY3JpcHQtPkdldCh2ODo6U3RyaW5nOjpO
ZXcoInNldEJyZWFrcG9pbnRzQWN0aXZhdGVkIikpKTsKKyAgICB2ODo6RGVidWc6OkNhbGwoc2V0
QnJlYWtwb2ludHNBY3RpdmF0ZWQsIGFyZ3MpOworI2VuZGlmCit9CisKK3ZvaWQgU2NyaXB0RGVi
dWdTZXJ2ZXI6OmNvbnRpbnVlUHJvZ3JhbSgpCit7CisjaWYgRU5BQkxFKFY4X1NDUklQVF9ERUJV
R19TRVJWRVIpCisgICAgU3RyaW5nIGNtZCgie1wic2VxXCI6MSxcInR5cGVcIjpcInJlcXVlc3Rc
IixcImNvbW1hbmRcIjpcImNvbnRpbnVlXCJ9Iik7CisgICAgdjg6OkRlYnVnOjpTZW5kQ29tbWFu
ZChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQxNl90Kj4oY21kLmNoYXJhY3RlcnMoKSksIGNt
ZC5sZW5ndGgoKSwgbmV3IHY4OjpEZWJ1Zzo6Q2xpZW50RGF0YSgpKTsKKyAgICBkaWRSZXN1bWUo
KTsKKyNlbmRpZgorfQorCit2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpzdGVwSW50b1N0YXRlbWVu
dCgpCit7CisjaWYgRU5BQkxFKFY4X1NDUklQVF9ERUJVR19TRVJWRVIpCisgICAgU3RyaW5nIGNt
ZCgie1wic2VxXCI6MSxcInR5cGVcIjpcInJlcXVlc3RcIixcImNvbW1hbmRcIjpcImNvbnRpbnVl
XCIsXCJhcmd1bWVudHNcIjp7XCJzdGVwYWN0aW9uXCI6XCJpblwifX0iKTsKKyAgICB2ODo6RGVi
dWc6OlNlbmRDb21tYW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDE2X3QqPihjbWQuY2hh
cmFjdGVycygpKSwgY21kLmxlbmd0aCgpLCBuZXcgdjg6OkRlYnVnOjpDbGllbnREYXRhKCkpOwor
ICAgIGRpZFJlc3VtZSgpOworI2VuZGlmCit9CisKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnN0
ZXBPdmVyU3RhdGVtZW50KCkKK3sKKyNpZiBFTkFCTEUoVjhfU0NSSVBUX0RFQlVHX1NFUlZFUikK
KyAgICBTdHJpbmcgY21kKCJ7XCJzZXFcIjoxLFwidHlwZVwiOlwicmVxdWVzdFwiLFwiY29tbWFu
ZFwiOlwiY29udGludWVcIixcImFyZ3VtZW50c1wiOntcInN0ZXBhY3Rpb25cIjpcIm5leHRcIn19
Iik7CisgICAgdjg6OkRlYnVnOjpTZW5kQ29tbWFuZChyZWludGVycHJldF9jYXN0PGNvbnN0IHVp
bnQxNl90Kj4oY21kLmNoYXJhY3RlcnMoKSksIGNtZC5sZW5ndGgoKSwgbmV3IHY4OjpEZWJ1Zzo6
Q2xpZW50RGF0YSgpKTsKKyAgICBkaWRSZXN1bWUoKTsKKyNlbmRpZgorfQorCit2b2lkIFNjcmlw
dERlYnVnU2VydmVyOjpzdGVwT3V0T2ZGdW5jdGlvbigpCit7CisjaWYgRU5BQkxFKFY4X1NDUklQ
VF9ERUJVR19TRVJWRVIpCisgICAgU3RyaW5nIGNtZCgie1wic2VxXCI6MSxcInR5cGVcIjpcInJl
cXVlc3RcIixcImNvbW1hbmRcIjpcImNvbnRpbnVlXCIsXCJhcmd1bWVudHNcIjp7XCJzdGVwYWN0
aW9uXCI6XCJvdXRcIn19Iik7CisgICAgdjg6OkRlYnVnOjpTZW5kQ29tbWFuZChyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQxNl90Kj4oY21kLmNoYXJhY3RlcnMoKSksIGNtZC5sZW5ndGgoKSwg
bmV3IHY4OjpEZWJ1Zzo6Q2xpZW50RGF0YSgpKTsKKyAgICBkaWRSZXN1bWUoKTsKKyNlbmRpZgor
fQorCitTY3JpcHRTdGF0ZSogU2NyaXB0RGVidWdTZXJ2ZXI6OmN1cnJlbnRDYWxsRnJhbWVTdGF0
ZSgpCit7CisgICAgcmV0dXJuIG1fY3VycmVudENhbGxGcmFtZVN0YXRlOworfQorCit2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gU2NyaXB0RGVidWdTZXJ2ZXI6OmN1cnJlbnRDYWxsRnJhbWVWOCgpCit7
CisjaWYgRU5BQkxFKFY4X1NDUklQVF9ERUJVR19TRVJWRVIpCisgICAgaWYgKCFtX2N1cnJlbnRD
YWxsRnJhbWUuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbV9jdXJyZW50Q2FsbEZyYW1lOwor
CisgICAgLy8gQ2hlY2sgb24gYSBicC4KKyAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gY3Vy
cmVudENhbGxGcmFtZUZ1bmN0aW9uID0gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj46OkNhc3QobV9k
ZWJ1Z2dlclNjcmlwdC0+R2V0KHY4OjpTdHJpbmc6Ok5ldygiY3VycmVudENhbGxGcmFtZSIpKSk7
CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFyZ3ZbXSA9IHsgbV9leGVjdXRpb25TdGF0ZSB9
OworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZXN1bHQgPSBjdXJyZW50Q2FsbEZyYW1lRnVu
Y3Rpb24tPkNhbGwobV9kZWJ1Z2dlclNjcmlwdCwgMSwgYXJndik7CisgICAgbV9jdXJyZW50Q2Fs
bEZyYW1lID0gdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPjo6TmV3KHJlc3VsdCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOwor
I2VuZGlmCit9CisKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6Om9uVjhEZWJ1Z01lc3NhZ2UoY29u
c3Qgdjg6OkRlYnVnOjpNZXNzYWdlJiBtZXNzYWdlKQoreworICAgIFNjcmlwdERlYnVnU2VydmVy
OjpzaGFyZWQoKS5oYW5kbGVWOERlYnVnTWVzc2FnZShtZXNzYWdlKTsKK30KKwordm9pZCBTY3Jp
cHREZWJ1Z1NlcnZlcjo6b25WOERlYnVnSG9zdERpc3BhdGNoKCkKK3sKKyAgICBTY3JpcHREZWJ1
Z1NlcnZlcjo6c2hhcmVkKCkuaGFuZGxlVjhEZWJ1Z0hvc3REaXNwYXRjaCgpOworfQorCit2b2lk
IFNjcmlwdERlYnVnU2VydmVyOjpoYW5kbGVWOERlYnVnSG9zdERpc3BhdGNoKCkKK3sKKyAgICBp
ZiAoIXNfbWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAg
IFZlY3RvcjxXZWJDb3JlOjpQYWdlKj4gcGFnZXM7CisgICAgZm9yIChMaXN0ZW5lcnNNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9saXN0ZW5lcnNNYXAuYmVnaW4oKTsgaXQgIT0gbV9saXN0ZW5lcnNNYXAu
ZW5kKCk7ICsraXQpCisgICAgICAgIHBhZ2VzLmFwcGVuZChpdC0+Zmlyc3QpOworICAgIAorICAg
IHNfbWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIocGFnZXMpOworfQorCit2b2lkIFNjcmlwdERl
YnVnU2VydmVyOjpoYW5kbGVWOERlYnVnTWVzc2FnZShjb25zdCB2ODo6RGVidWc6Ok1lc3NhZ2Um
IG1lc3NhZ2UpCit7CisgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOworCisgICAgaWYgKCFtZXNz
YWdlLklzRXZlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSWdub3JlIHVuc3VwcG9y
dGVkIGV2ZW50IHR5cGVzLgorICAgIGlmIChtZXNzYWdlLkdldEV2ZW50KCkgIT0gdjg6OkFmdGVy
Q29tcGlsZSAmJiBtZXNzYWdlLkdldEV2ZW50KCkgIT0gdjg6OkJyZWFrKQorICAgICAgICByZXR1
cm47CisKKyAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gbWVzc2FnZS5HZXRF
dmVudENvbnRleHQoKTsKKyAgICAvLyBJZiB0aGUgY29udGV4dCBpcyBmcm9tIG9uZSBvZiB0aGUg
aW5wZWN0ZWQgdGFicyBpdCBzaG91bGQgaGF2ZSBpdHMgY29udGV4dAorICAgIC8vIGRhdGEuIFNr
aXAgZXZlbnRzIGZyb20gdW5rbm93biBjb250ZXh0cy4KKyAgICBpZiAoY29udGV4dC5Jc0VtcHR5
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRlc3QgdGhhdCBjb250ZXh0IGhhcyBhc3Nv
Y2lhdGVkIGdsb2JhbCBkb20gd2luZG93IG9iamVjdC4KKyAgICB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IGdsb2JhbCA9IGNvbnRleHQtPkdsb2JhbCgpOworICAgIGlmIChnbG9iYWwuSXNFbXB0eSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBnbG9iYWwgPSBWOERPTVdyYXBwZXI6Omxvb2t1cERP
TVdyYXBwZXIoVjhET01XaW5kb3c6OkdldFRlbXBsYXRlKCksIGdsb2JhbCk7CisgICAgaWYgKGds
b2JhbC5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEZyYW1lKiBmcmFtZSA9IFY4
UHJveHk6OnJldHJpZXZlRnJhbWUoY29udGV4dCk7CisgICAgaWYgKGZyYW1lKSB7CisgICAgICAg
IFNjcmlwdERlYnVnTGlzdGVuZXIqIGxpc3RlbmVyID0gbV9saXN0ZW5lcnNNYXAuZ2V0KGZyYW1l
LT5wYWdlKCkpOworICAgICAgICBpZiAobGlzdGVuZXIpIHsKKyAgICAgICAgICAgIGlmIChtZXNz
YWdlLkdldEV2ZW50KCkgPT0gdjg6OkFmdGVyQ29tcGlsZSkgeworICAgICAgICAgICAgICAgIHY4
OjpDb250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUodjg6OkRlYnVnOjpHZXREZWJ1Z0NvbnRleHQo
KSk7CisgICAgICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGFyZ3MgPSB2ODo6T2Jq
ZWN0OjpOZXcoKTsKKyAgICAgICAgICAgICAgICBhcmdzLT5TZXQodjg6OlN0cmluZzo6TmV3KCJl
dmVudERhdGEiKSwgbWVzc2FnZS5HZXRFdmVudERhdGEoKSk7CisgICAgICAgICAgICAgICAgdjg6
OkhhbmRsZTx2ODo6RnVuY3Rpb24+IG9uQWZ0ZXJDb21waWxlRnVuY3Rpb24gPSB2ODo6TG9jYWw8
djg6OkZ1bmN0aW9uPjo6Q2FzdChtX2RlYnVnZ2VyU2NyaXB0LT5HZXQodjg6OlN0cmluZzo6TmV3
KCJnZXRBZnRlckNvbXBpbGVTY3JpcHQiKSkpOworICAgICAgICAgICAgICAgIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBhcmd2W10gPSB7IG1lc3NhZ2UuR2V0RXhlY3V0aW9uU3RhdGUoKSwgYXJncyB9
OworICAgICAgICAgICAgICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSA9IG9uQWZ0ZXJD
b21waWxlRnVuY3Rpb24tPkNhbGwobV9kZWJ1Z2dlclNjcmlwdCwgMiwgYXJndik7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKHZhbHVlLT5Jc09iamVjdCgpKTsKKyAgICAgICAgICAgICAgICB2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3Qo
dmFsdWUpOworICAgICAgICAgICAgICAgIGRpc3BhdGNoRGlkUGFyc2VTb3VyY2UobGlzdGVuZXIs
IG9iamVjdCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UuR2V0RXZlbnQoKSA9PSB2
ODo6QnJlYWspIHsKKyAgICAgICAgICAgICAgICBtX2V4ZWN1dGlvblN0YXRlID0gdjg6OlBlcnNp
c3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhtZXNzYWdlLkdldEV4ZWN1dGlvblN0YXRlKCkpOworICAg
ICAgICAgICAgICAgIG1fY3VycmVudENhbGxGcmFtZVN0YXRlID0gbWFpbldvcmxkU2NyaXB0U3Rh
dGUoZnJhbWUpOworICAgICAgICAgICAgICAgIGxpc3RlbmVyLT5kaWRQYXVzZSgpOworICAgICAg
ICAgICAgICAgIG1fY3VycmVudENhbGxGcmFtZVN0YXRlID0gMDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KK30KKwordm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlzcGF0Y2hEaWRQ
YXJzZVNvdXJjZShTY3JpcHREZWJ1Z0xpc3RlbmVyKiBsaXN0ZW5lciwgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBvYmplY3QpCit7CisgICAgU3RyaW5nIGNvbnRleHREYXRhID0gdG9XZWJDb3JlU3Ry
aW5nV2l0aE51bGxDaGVjayhvYmplY3QtPkdldCh2ODo6U3RyaW5nOjpOZXcoImNvbnRleHREYXRh
IikpKTsKKyAgICBpZiAoY29udGV4dERhdGEgIT0gbV9jb250ZXh0RGF0YU1hcC5nZXQobGlzdGVu
ZXIpKQorICAgICAgICByZXR1cm47CisKKyAgICBsaXN0ZW5lci0+ZGlkUGFyc2VTb3VyY2UoCisg
ICAgICAgIHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2sob2JqZWN0LT5HZXQodjg6OlN0cmlu
Zzo6TmV3KCJpZCIpKSksCisgICAgICAgIHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2sob2Jq
ZWN0LT5HZXQodjg6OlN0cmluZzo6TmV3KCJuYW1lIikpKSwKKyAgICAgICAgdG9XZWJDb3JlU3Ry
aW5nV2l0aE51bGxDaGVjayhvYmplY3QtPkdldCh2ODo6U3RyaW5nOjpOZXcoInNvdXJjZSIpKSks
CisgICAgICAgIG9iamVjdC0+R2V0KHY4OjpTdHJpbmc6Ok5ldygibGluZU9mZnNldCIpKS0+VG9J
bnRlZ2VyKCktPlZhbHVlKCkpOworfQorCit2b2lkIFNjcmlwdERlYnVnU2VydmVyOjplbnN1cmVE
ZWJ1Z2dlclNjcmlwdENvbXBpbGVkKCkKK3sKKyAgICBpZiAobV9kZWJ1Z2dlclNjcmlwdC5Jc0Vt
cHR5KCkpIHsKKyAgICAgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOworICAgICAgICB2ODo6TG9j
YWw8djg6OkNvbnRleHQ+IGRlYnVnZ2VyQ29udGV4dCA9IHY4OjpEZWJ1Zzo6R2V0RGVidWdDb250
ZXh0KCk7CisgICAgICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUoZGVidWdnZXJD
b250ZXh0KTsKKyAgICAgICAgbV9kZWJ1Z2dlclNjcmlwdCA9IHY4OjpQZXJzaXN0ZW50PHY4OjpP
YmplY3Q+OjpOZXcodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCh2ODo6U2NyaXB0OjpDb21w
aWxlKHY4U3RyaW5nKG1fZGVidWdnZXJTY3JpcHRTb3VyY2UpKS0+UnVuKCkpKTsKKyAgICB9Cit9
CisKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRpZFJlc3VtZSgpCit7CisgICAgaWYgKCFtX2N1
cnJlbnRDYWxsRnJhbWUuSXNFbXB0eSgpKSB7CisgICAgICAgIG1fY3VycmVudENhbGxGcmFtZS5E
aXNwb3NlKCk7CisgICAgICAgIG1fY3VycmVudENhbGxGcmFtZS5DbGVhcigpOworICAgIH0KKyAg
ICBpZiAoIW1fZXhlY3V0aW9uU3RhdGUuSXNFbXB0eSgpKSB7CisgICAgICAgIG1fZXhlY3V0aW9u
U3RhdGUuRGlzcG9zZSgpOworICAgICAgICBtX2V4ZWN1dGlvblN0YXRlLkNsZWFyKCk7CisgICAg
fQorfQorCiAvLyBDcmVhdGUgdGhlIHV0aWxpdHkgY29udGV4dCBmb3IgaG9sZGluZyBKYXZhU2Ny
aXB0IGZ1bmN0aW9ucyB1c2VkIGludGVybmFsbHkKIC8vIHdoaWNoIGFyZSBub3QgdmlzaWJsZSB0
byBKYXZhU2NyaXB0IGV4ZWN1dGluZyBvbiB0aGUgcGFnZS4KIHZvaWQgU2NyaXB0RGVidWdTZXJ2
ZXI6OmNyZWF0ZVV0aWxpdHlDb250ZXh0KCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mv
djgvU2NyaXB0RGVidWdTZXJ2ZXIuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RGVidWdT
ZXJ2ZXIuaAppbmRleCAzZGU3YzIzLi45MzllMDBjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3Jp
cHREZWJ1Z1NlcnZlci5oCkBAIC0zNiwxMiArMzYsMTUgQEAKICNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgogI2luY2x1ZGUgIlNjcmlwdEJyZWFrcG9pbnQuaCIKICNpbmNsdWRlICJTY3JpcHRT
dGF0ZS5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKICNpbmNsdWRlICJUaW1lci5oIgotCisj
aW5jbHVkZSA8djgtZGVidWcuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFBhZ2U7
CiBjbGFzcyBTY3JpcHREZWJ1Z0xpc3RlbmVyOwogCiBjbGFzcyBTY3JpcHREZWJ1Z1NlcnZlciA6
IHB1YmxpYyBOb25jb3B5YWJsZSB7CkBAIC01NywzOSArNjAsNTggQEAgcHVibGljOgogICAgIC8v
IG9mIHN1Y2ggZXhjZXB0aW9uIGlzIHVwIHRvIHRoZSBjYWxsZXIuCiAgICAgc3RhdGljIGJvb2wg
dG9wU3RhY2tGcmFtZShTdHJpbmcmIHNvdXJjZU5hbWUsIGludCYgbGluZU51bWJlciwgU3RyaW5n
JiBmdW5jdGlvbk5hbWUpOwogCi0gICAgdm9pZCBhZGRMaXN0ZW5lcihTY3JpcHREZWJ1Z0xpc3Rl
bmVyKiwgUGFnZSopIHsgfQotICAgIHZvaWQgcmVtb3ZlTGlzdGVuZXIoU2NyaXB0RGVidWdMaXN0
ZW5lciosIFBhZ2UqKSB7IH0KKyAgICB2b2lkIGFkZExpc3RlbmVyKFNjcmlwdERlYnVnTGlzdGVu
ZXIqLCBQYWdlKik7CisgICAgdm9pZCByZW1vdmVMaXN0ZW5lcihTY3JpcHREZWJ1Z0xpc3RlbmVy
KiwgUGFnZSopOwogCi0gICAgdm9pZCBzZXRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNl
SUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIFNjcmlwdEJyZWFrcG9pbnQgYnJlYWtwb2ludCkgeyB9
Ci0gICAgdm9pZCByZW1vdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2ln
bmVkIGxpbmVOdW1iZXIpIHsgfQotICAgIHZvaWQgY2xlYXJCcmVha3BvaW50cygpIHsgfQotICAg
IHZvaWQgc2V0QnJlYWtwb2ludHNBY3RpdmF0ZWQoYm9vbCBhY3RpdmF0ZWQpIHsgfQorICAgIHZv
aWQgc2V0QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVt
YmVyLCBTY3JpcHRCcmVha3BvaW50IGJyZWFrcG9pbnQpOworICAgIHZvaWQgcmVtb3ZlQnJlYWtw
b2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyKTsKKyAgICB2
b2lkIGNsZWFyQnJlYWtwb2ludHMoKTsKKyAgICB2b2lkIHNldEJyZWFrcG9pbnRzQWN0aXZhdGVk
KGJvb2wgYWN0aXZhdGVkKTsKIAogICAgIGVudW0gUGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSB7CiAg
ICAgICAgIERvbnRQYXVzZU9uRXhjZXB0aW9ucywKICAgICAgICAgUGF1c2VPbkFsbEV4Y2VwdGlv
bnMsCiAgICAgICAgIFBhdXNlT25VbmNhdWdodEV4Y2VwdGlvbnMKICAgICB9OwotICAgIFBhdXNl
T25FeGNlcHRpb25zU3RhdGUgcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSgpIGNvbnN0IHsgcmV0dXJu
IERvbnRQYXVzZU9uRXhjZXB0aW9uczsgfQotICAgIHZvaWQgc2V0UGF1c2VPbkV4Y2VwdGlvbnNT
dGF0ZShQYXVzZU9uRXhjZXB0aW9uc1N0YXRlKSB7IH0KKyAgICBQYXVzZU9uRXhjZXB0aW9uc1N0
YXRlIHBhdXNlT25FeGNlcHRpb25zU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3BhdXNlT25FeGNl
cHRpb25zU3RhdGU7IH0KKyAgICB2b2lkIHNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUoUGF1c2VP
bkV4Y2VwdGlvbnNTdGF0ZSBwYXVzZU9uRXhjZXB0aW9uc1N0YXRlKSB7IG1fcGF1c2VPbkV4Y2Vw
dGlvbnNTdGF0ZSA9IHBhdXNlT25FeGNlcHRpb25zU3RhdGU7IH0KIAogICAgIHZvaWQgcGF1c2VQ
cm9ncmFtKCkgeyB9Ci0gICAgdm9pZCBjb250aW51ZVByb2dyYW0oKSB7IH0KLSAgICB2b2lkIHN0
ZXBJbnRvU3RhdGVtZW50KCkgeyB9Ci0gICAgdm9pZCBzdGVwT3ZlclN0YXRlbWVudCgpIHsgfQot
ICAgIHZvaWQgc3RlcE91dE9mRnVuY3Rpb24oKSB7IH0KKyAgICB2b2lkIGNvbnRpbnVlUHJvZ3Jh
bSgpOworICAgIHZvaWQgc3RlcEludG9TdGF0ZW1lbnQoKTsKKyAgICB2b2lkIHN0ZXBPdmVyU3Rh
dGVtZW50KCk7CisgICAgdm9pZCBzdGVwT3V0T2ZGdW5jdGlvbigpOwogCiAgICAgdm9pZCByZWNv
bXBpbGVBbGxKU0Z1bmN0aW9uc1Nvb24oKSB7IH0KICAgICB2b2lkIHJlY29tcGlsZUFsbEpTRnVu
Y3Rpb25zKFRpbWVyPFNjcmlwdERlYnVnU2VydmVyPiogPSAwKSB7IH0KIAotICAgIFNjcmlwdFN0
YXRlKiBjdXJyZW50Q2FsbEZyYW1lU3RhdGUoKSB7IHJldHVybiAwOyB9CisgICAgU2NyaXB0U3Rh
dGUqIGN1cnJlbnRDYWxsRnJhbWVTdGF0ZSgpOwogCiAgICAgdm9pZCBwYWdlQ3JlYXRlZChQYWdl
KikgeyB9CiAKKyAgICAvLyB2OC1zcGVjaWZpYyBtZXRob2RzLgorICAgIHZvaWQgc2V0RGVidWdn
ZXJTY3JpcHRTb3VyY2UoY29uc3QgU3RyaW5nJiBzY3JpcHRTb3VyY2UpOworCisgICAgdHlwZWRl
ZiB2b2lkICgqTWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIpKGNvbnN0IFZlY3RvcjxXZWJDb3Jl
OjpQYWdlKj4mKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRNZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxl
cihNZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlciBtZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlcikg
eyBzX21lc3NhZ2VMb29wRGlzcGF0Y2hIYW5kbGVyID0gbWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRs
ZXI7IH0KKworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjdXJyZW50Q2FsbEZyYW1lVjgoKTsK
KwogcHJpdmF0ZToKLSAgICBTY3JpcHREZWJ1Z1NlcnZlcigpIHsgfQorICAgIFNjcmlwdERlYnVn
U2VydmVyKCk7CiAgICAgflNjcmlwdERlYnVnU2VydmVyKCkgeyB9CiAKKyAgICBzdGF0aWMgdm9p
ZCBvblY4RGVidWdNZXNzYWdlKGNvbnN0IHY4OjpEZWJ1Zzo6TWVzc2FnZSYgbWVzc2FnZSk7Cisg
ICAgc3RhdGljIHZvaWQgb25WOERlYnVnSG9zdERpc3BhdGNoKCk7CisKKyAgICB2b2lkIGhhbmRs
ZVY4RGVidWdNZXNzYWdlKGNvbnN0IHY4OjpEZWJ1Zzo6TWVzc2FnZSYgbWVzc2FnZSk7CisgICAg
dm9pZCBoYW5kbGVWOERlYnVnSG9zdERpc3BhdGNoKCk7CisKKyAgICB2b2lkIGRpc3BhdGNoRGlk
UGFyc2VTb3VyY2UoU2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIsIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gc291cmNlT2JqZWN0KTsKKyAgICAKKyAgICB2b2lkIGVuc3VyZURlYnVnZ2VyU2Ny
aXB0Q29tcGlsZWQoKTsKKyAgICB2b2lkIGRpZFJlc3VtZSgpOworCiAgICAgc3RhdGljIHZvaWQg
Y3JlYXRlVXRpbGl0eUNvbnRleHQoKTsKIAogICAgIC8vIFJldHVybnMgYSBsb2NhbCBoYW5kbGUg
b2YgdGhlIHV0aWxpdHkgY29udGV4dC4KQEAgLTEwMiw2ICsxMjQsMTkgQEAgcHJpdmF0ZToKIAog
ICAgIC8vIFV0aWxpdHkgY29udGV4dCBob2xkaW5nIEphdmFTY3JpcHQgZnVuY3Rpb25zIHVzZWQg
aW50ZXJuYWxseS4KICAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IHNfdXRp
bGl0eUNvbnRleHQ7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8UGFnZSosIFNjcmlwdERlYnVnTGlz
dGVuZXIqPiBMaXN0ZW5lcnNNYXA7CisgICAgTGlzdGVuZXJzTWFwIG1fbGlzdGVuZXJzTWFwOwor
ICAgIHR5cGVkZWYgSGFzaE1hcDxTY3JpcHREZWJ1Z0xpc3RlbmVyKiwgU3RyaW5nPiBDb250ZXh0
RGF0YU1hcDsKKyAgICBDb250ZXh0RGF0YU1hcCBtX2NvbnRleHREYXRhTWFwOworICAgIFN0cmlu
ZyBtX2RlYnVnZ2VyU2NyaXB0U291cmNlOworICAgIFBhdXNlT25FeGNlcHRpb25zU3RhdGUgbV9w
YXVzZU9uRXhjZXB0aW9uc1N0YXRlOworICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IG1f
ZGVidWdnZXJTY3JpcHQ7CisgICAgU2NyaXB0U3RhdGUqIG1fY3VycmVudENhbGxGcmFtZVN0YXRl
OworICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gbV9jdXJyZW50Q2FsbEZyYW1lOworICAg
IHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IG1fZXhlY3V0aW9uU3RhdGU7CisKKyAgICBzdGF0
aWMgTWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIgc19tZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxl
cjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4SW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcCBiL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcAppbmRleCA2
MDA2M2YxLi4xNTU0MzFjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OEluamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCkBAIC0zOSw2ICszOSw3IEBACiAj
aW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIk5vZGUuaCIKICNpbmNs
dWRlICJQYWdlLmgiCisjaW5jbHVkZSAiU2NyaXB0RGVidWdTZXJ2ZXIuaCIKICNpbmNsdWRlICJT
ZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKIAogI2luY2x1ZGUgIlY4QmluZGluZy5oIgpAQCAtMTEw
LDkgKzExMSwxMCBAQCBTY3JpcHRPYmplY3QgSW5qZWN0ZWRTY3JpcHRIb3N0OjpjcmVhdGVJbmpl
Y3RlZFNjcmlwdChjb25zdCBTdHJpbmcmIHNjcmlwdFNvdXJjZQogICAgIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBhcmdzW10gPSB7CiAgICAgICBzY3JpcHRIb3N0V3JhcHBlciwKICAgICAgIHdpbmRv
d0dsb2JhbCwKLSAgICAgIHY4OjpOdW1iZXI6Ok5ldyhpZCkKKyAgICAgIHY4OjpOdW1iZXI6Ok5l
dyhpZCksCisgICAgICB2ODo6U3RyaW5nOjpOZXcoInY4IikKICAgICB9OwotICAgIHY4OjpMb2Nh
bDx2ODo6VmFsdWU+IGluamVjdGVkU2NyaXB0VmFsdWUgPSB2ODo6RnVuY3Rpb246OkNhc3QoKnYp
LT5DYWxsKHdpbmRvd0dsb2JhbCwgMywgYXJncyk7CisgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4g
aW5qZWN0ZWRTY3JpcHRWYWx1ZSA9IHY4OjpGdW5jdGlvbjo6Q2FzdCgqdiktPkNhbGwod2luZG93
R2xvYmFsLCA0LCBhcmdzKTsKICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gaW5qZWN0ZWRTY3Jp
cHQodjg6Ok9iamVjdDo6Q2FzdCgqaW5qZWN0ZWRTY3JpcHRWYWx1ZSkpOwogICAgIHJldHVybiBT
Y3JpcHRPYmplY3QoaW5zcGVjdGVkU2NyaXB0U3RhdGUsIGluamVjdGVkU2NyaXB0KTsKIH0KQEAg
LTE1NiwxMyArMTU4LDEzIEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEluamVjdGVkU2NyaXB0
SG9zdDo6cHVzaE5vZGVQYXRoVG9Gcm9udGVuZENhbGxiYWNrKGNvbnN0CiB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gVjhJbmplY3RlZFNjcmlwdEhvc3Q6OmN1cnJlbnRDYWxsRnJhbWVDYWxsYmFjayhj
b25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIElOQ19TVEFUUygiSW5qZWN0ZWRTY3Jp
cHRIb3N0LmN1cnJlbnRDYWxsRnJhbWUoKSIpOwotICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7
CisgICAgcmV0dXJuIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5jdXJyZW50Q2FsbEZyYW1l
VjgoKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SW5qZWN0ZWRTY3JpcHRIb3N0Ojpp
c0FjdGl2YXRpb25DYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIElO
Q19TVEFUUygiSW5qZWN0ZWRTY3JpcHRIb3N0LmlzQWN0aXZhdGlvbigpIik7Ci0gICAgcmV0dXJu
IHY4OjpVbmRlZmluZWQoKTsKKyAgICByZXR1cm4gdjg6OkJvb2xlYW46Ok5ldyh0cnVlKTsKIH0K
ICNlbmRpZgogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0
ZWRTY3JpcHQuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHQu
anMKaW5kZXggOTIzNWFlMS4uMDgxMzU2MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9JbmplY3RlZFNjcmlwdC5qcwpAQCAtMjYsNyArMjYsNyBAQAogICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAq
LwogCi12YXIgaW5qZWN0ZWRTY3JpcHRDb25zdHJ1Y3RvciA9IChmdW5jdGlvbiAoSW5qZWN0ZWRT
Y3JpcHRIb3N0LCBpbnNwZWN0ZWRXaW5kb3csIGluamVjdGVkU2NyaXB0SWQpIHsKK3ZhciBpbmpl
Y3RlZFNjcmlwdENvbnN0cnVjdG9yID0gKGZ1bmN0aW9uIChJbmplY3RlZFNjcmlwdEhvc3QsIGlu
c3BlY3RlZFdpbmRvdywgaW5qZWN0ZWRTY3JpcHRJZCwganNFbmdpbmUpIHsKIAogdmFyIEluamVj
dGVkU2NyaXB0ID0ge307CiAKQEAgLTEyNSwxMCArMTI1LDMyIEBAIEluamVjdGVkU2NyaXB0Lmdl
dFByb3BlcnRpZXMgPSBmdW5jdGlvbihvYmplY3RQcm94eSwgaWdub3JlSGFzT3duUHJvcGVydHks
IGFiYnJlCiAgICAgaWYgKCFJbmplY3RlZFNjcmlwdC5faXNEZWZpbmVkKG9iamVjdCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB2YXIgcHJvcGVydGllcyA9IFtdOworICAgIAogICAgIHZh
ciBwcm9wZXJ0eU5hbWVzID0gaWdub3JlSGFzT3duUHJvcGVydHkgPyBJbmplY3RlZFNjcmlwdC5f
Z2V0UHJvcGVydHlOYW1lcyhvYmplY3QpIDogT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2Jq
ZWN0KTsKICAgICBpZiAoIWlnbm9yZUhhc093blByb3BlcnR5ICYmIG9iamVjdC5fX3Byb3RvX18p
CiAgICAgICAgIHByb3BlcnR5TmFtZXMucHVzaCgiX19wcm90b19fIik7CiAKKyAgICBpZiAoanNF
bmdpbmUgPT09ICJ2OCIpIHsKKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIG9iamVjdCBpcyBhIHNj
b3BlLgorICAgICAgICBpZiAoSW5qZWN0ZWRTY3JpcHQuX2lzU2NvcGVQcm94eShvYmplY3RQcm94
eSkpIHsKKyAgICAgICAgICAgIHByb3BlcnR5TmFtZXMgPSBbXTsKKyAgICAgICAgICAgIGZvciAo
dmFyIG5hbWUgaW4gb2JqZWN0KQorICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMucHVzaChu
YW1lKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEZJWE1FKGh0dHA6Ly9jcmJ1
Zy5jb20vNDEyNDMpOiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyBtYXkgcmV0dXJuIGR1cGxp
Y2F0ZWQgbmFtZXMuCisgICAgICAgICAgICB2YXIgYSA9IFtdOworICAgICAgICAgICAgcHJvcGVy
dHlOYW1lcy5zb3J0KCk7CisgICAgICAgICAgICB2YXIgcHJldjsKKyAgICAgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgcHJvcGVydHlOYW1lcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAg
ICAgIHZhciBuID0gcHJvcGVydHlOYW1lc1tpXTsKKyAgICAgICAgICAgICAgICBpZiAobiAhPSBw
cmV2KQorICAgICAgICAgICAgICAgICAgICBhLnB1c2gobik7CisgICAgICAgICAgICAgICAgcHJl
diA9IG47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzID0gYTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKICAgICAvLyBHbyBvdmVyIHByb3BlcnRpZXMsIHByZXBhcmUg
cmVzdWx0cy4KICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnR5TmFtZXMubGVuZ3RoOyAr
K2kpIHsKICAgICAgICAgdmFyIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZXNbaV07CkBAIC0x
NTgsNiArMTgwLDEyIEBAIEluamVjdGVkU2NyaXB0LmdldFByb3BlcnRpZXMgPSBmdW5jdGlvbihv
YmplY3RQcm94eSwgaWdub3JlSGFzT3duUHJvcGVydHksIGFiYnJlCiAgICAgcmV0dXJuIHByb3Bl
cnRpZXM7CiB9CiAKK0luamVjdGVkU2NyaXB0Ll9pc1Njb3BlUHJveHkgPSBmdW5jdGlvbihvYmpl
Y3RQcm94eSkKK3sKKyAgICB2YXIgb2JqZWN0SWQgPSBvYmplY3RQcm94eS5vYmplY3RJZDsKKyAg
ICByZXR1cm4gdHlwZW9mIG9iamVjdElkID09PSAib2JqZWN0IiAmJiAhb2JqZWN0SWQudGhpc09i
amVjdDsKK30gCisKIEluamVjdGVkU2NyaXB0LnNldFByb3BlcnR5VmFsdWUgPSBmdW5jdGlvbihv
YmplY3RQcm94eSwgcHJvcGVydHlOYW1lLCBleHByZXNzaW9uKQogewogICAgIHZhciBvYmplY3Qg
PSBJbmplY3RlZFNjcmlwdC5fcmVzb2x2ZU9iamVjdChvYmplY3RQcm94eSk7CkBAIC04MTMsNiAr
ODQxLDU5IEBAIEluamVjdGVkU2NyaXB0LkNhbGxGcmFtZVByb3h5ID0gZnVuY3Rpb24oaWQsIGNh
bGxGcmFtZSkKICAgICB0aGlzLnNjb3BlQ2hhaW4gPSB0aGlzLl93cmFwU2NvcGVDaGFpbihjYWxs
RnJhbWUpOwogfQogCisvLyBGSVhNRSgzNzY2Myk6IHVuaWZ5IHNjb3BlIGNoYWluIHJlcHJlc2Vu
dGF0aW9uIGFuZCByZW1vdmUgdGhpcyBpZi4KK2lmIChqc0VuZ2luZSA9PT0gInY4IikgeworCitJ
bmplY3RlZFNjcmlwdC5DYWxsRnJhbWVQcm94eS5wcm90b3R5cGUgPSB7CisgICAgCisKKyAgICBf
d3JhcFNjb3BlQ2hhaW46IGZ1bmN0aW9uKGNhbGxGcmFtZSkKKyAgICB7CisgICAgICAgIHZhciBT
Y29wZVR5cGUgPSB7IEdsb2JhbDogMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTG9jYWw6
IDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFdpdGg6IDIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIENsb3N1cmU6IDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIENhdGNoOiA0
IH07CisgICAgICAgIHZhciBzY29wZUNoYWluID0gY2FsbEZyYW1lLnNjb3BlQ2hhaW47CisgICAg
ICAgIHZhciBzY29wZUNoYWluUHJveHkgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBzY29wZUNoYWluLmxlbmd0aDsgaSArPSAyKSB7CisgICAgICAgICAgICB2YXIgc2NvcGVUeXBl
ID0gc2NvcGVDaGFpbltpXTsKKyAgICAgICAgICAgIHZhciBzY29wZU9iamVjdCA9IHNjb3BlQ2hh
aW5baSArIDFdOworICAgICAgICAgICAgdmFyIHNjb3BlT2JqZWN0UHJveHkgPSBJbmplY3RlZFNj
cmlwdC5jcmVhdGVQcm94eU9iamVjdChzY29wZU9iamVjdCwgeyBjYWxsRnJhbWU6IHRoaXMuaWQs
IGNoYWluSW5kZXg6IChpICsgMSkgfSwgdHJ1ZSk7CisKKyAgICAgICAgICAgIHZhciBmb3VuZExv
Y2FsU2NvcGUgPSBmYWxzZTsKKyAgICAgICAgICAgIHN3aXRjaChzY29wZVR5cGUpIHsKKyAgICAg
ICAgICAgICAgICBjYXNlIFNjb3BlVHlwZS5Mb2NhbDogeworICAgICAgICAgICAgICAgICAgICBm
b3VuZExvY2FsU2NvcGUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBzY29wZU9iamVjdFBy
b3h5LmlzTG9jYWwgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBzY29wZU9iamVjdFByb3h5
LnRoaXNPYmplY3QgPSBJbmplY3RlZFNjcmlwdC5jcmVhdGVQcm94eU9iamVjdChjYWxsRnJhbWUu
dGhpc09iamVjdCwgeyBjYWxsRnJhbWU6IHRoaXMuaWQsIHRoaXNPYmplY3Q6IHRydWUgfSwgdHJ1
ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBjYXNlIFNjb3BlVHlwZS5DbG9zdXJlOiB7CisgICAgICAgICAgICAgICAgICAg
IHNjb3BlT2JqZWN0UHJveHkuaXNDbG9zdXJlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2UgU2NvcGVUeXBl
LldpdGg6IHsKKyAgICAgICAgICAgICAgICAgICAgc2NvcGVPYmplY3RQcm94eS5pc1dpdGhCbG9j
ayA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGZvdW5kTG9jYWxTY29wZSkgeworICAg
ICAgICAgICAgICAgIGlmIChzY29wZU9iamVjdCBpbnN0YW5jZW9mIGluc3BlY3RlZFdpbmRvdy5F
bGVtZW50KQorICAgICAgICAgICAgICAgICAgICBzY29wZU9iamVjdFByb3h5LmlzRWxlbWVudCA9
IHRydWU7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2NvcGVPYmplY3QgaW5zdGFuY2VvZiBp
bnNwZWN0ZWRXaW5kb3cuRG9jdW1lbnQpCisgICAgICAgICAgICAgICAgICAgIHNjb3BlT2JqZWN0
UHJveHkuaXNEb2N1bWVudCA9IHRydWU7CisgICAgICAgICAgICB9CisgCisgICAgICAgICAgICBz
Y29wZUNoYWluUHJveHkucHVzaChzY29wZU9iamVjdFByb3h5KTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gc2NvcGVDaGFpblByb3h5OworICAgIH0KK30KKworfSBlbHNlIHsKKwogSW5qZWN0
ZWRTY3JpcHQuQ2FsbEZyYW1lUHJveHkucHJvdG90eXBlID0gewogICAgIF93cmFwU2NvcGVDaGFp
bjogZnVuY3Rpb24oY2FsbEZyYW1lKQogICAgIHsKQEAgLTg0Miw2ICs5MjMsOCBAQCBJbmplY3Rl
ZFNjcmlwdC5DYWxsRnJhbWVQcm94eS5wcm90b3R5cGUgPSB7CiAgICAgfQogfQogCit9CisKIElu
amVjdGVkU2NyaXB0LmV4ZWN1dGVTcWwgPSBmdW5jdGlvbihjYWxsSWQsIGRhdGFiYXNlSWQsIHF1
ZXJ5KQogewogICAgIGZ1bmN0aW9uIHN1Y2Nlc3NDYWxsYmFjayh0eCwgcmVzdWx0KQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcyBiL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMKaW5kZXggMzE2ZjMyZS4uMzVj
OGVlNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5l
bC5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzCkBA
IC0xOTgsNiArMTk4LDggQEAgV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbCA9IGZ1bmN0aW9uKCkK
ICAgICB0aGlzLl9zaG9ydGN1dHNbc2hvcnRjdXRdID0gaGFuZGxlcjsKIAogICAgIHRoaXMuX2Rl
YnVnZ2VyRW5hYmxlZCA9IFByZWZlcmVuY2VzLmRlYnVnZ2VyQWx3YXlzRW5hYmxlZDsKKyAgICBp
ZiAoUHJlZmVyZW5jZXMuZGVidWdnZXJBbHdheXNFbmFibGVkKQorICAgICAgICB0aGlzLl9hdHRh
Y2hEZWJ1Z2dlcldoZW5TaG93biA9IHRydWU7CiAgICAgdGhpcy5yZXNldCgpOwogfQogCmRpZmYg
LS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwppbmRleCBhMmUyYWEzLi41NTJhMTZiIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MCBA
QAorMjAxMC0wNC0xNSAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGdvb2dsZS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3VwcG9ydCBiYXNp
YyBkZWJ1Z2dpbmcgY2FwYWJpbGl0aWVzIGluY2x1ZGluZyBzdGVwIGluL292ZXIvb3V0IGluIHY4
CisgICAgICAgIGltcGxlbWVudGF0aW9uIG9mIFNjcmlwdERlYnVnU2VydmVyLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzYwNAorCisgICAgICAg
ICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogc3JjL0RlYnVnZ2VyQWdlbnQuaDoKKyAgICAgICAg
KiBzcmMvRGVidWdnZXJBZ2VudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpEZWJ1Z2dlckFn
ZW50SW1wbDo6c2V0RGVidWdnZXJTY3JpcHRTb3VyY2UpOgorICAgICAgICAqIHNyYy9EZWJ1Z2dl
ckFnZW50SW1wbC5oOgorICAgICAgICAqIHNyYy9EZWJ1Z2dlckFnZW50TWFuYWdlci5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OkRlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpob3N0RGlzcGF0Y2hIYW5kbGVy
KToKKyAgICAgICAgKFdlYktpdDo6RGVidWdnZXJBZ2VudE1hbmFnZXI6OmRlYnVnQXR0YWNoKToK
KyAgICAgICAgKFdlYktpdDo6RGVidWdnZXJBZ2VudE1hbmFnZXI6OmRlYnVnRGV0YWNoKToKKyAg
ICAgICAgKFdlYktpdDo6RGVidWdnZXJBZ2VudE1hbmFnZXI6OnNldE1lc3NhZ2VMb29wRGlzcGF0
Y2hIYW5kbGVyKToKKyAgICAgICAgKiBzcmMvRGVidWdnZXJBZ2VudE1hbmFnZXIuaDoKKyAgICAg
ICAgKiBzcmMvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRJbXBsOjp3aW5kb3dPYmplY3RDbGVhcmVkKToKKyAg
ICAgICAgKiBzcmMvanMvRGVidWdnZXJTY3JpcHQuanM6IEFkZGVkLgorICAgICAgICAoZGVidWdn
ZXJTY3JpcHRDb25zdHJ1Y3Rvci5EZWJ1Z2dlclNjcmlwdC5nZXRBZnRlckNvbXBpbGVTY3JpcHQp
OgorICAgICAgICAoZGVidWdnZXJTY3JpcHRDb25zdHJ1Y3Rvci5EZWJ1Z2dlclNjcmlwdC5nZXRT
Y3JpcHRzKToKKyAgICAgICAgKGRlYnVnZ2VyU2NyaXB0Q29uc3RydWN0b3IuRGVidWdnZXJTY3Jp
cHQuX2Zvcm1hdFNjcmlwdCk6CisgICAgICAgIChkZWJ1Z2dlclNjcmlwdENvbnN0cnVjdG9yLkRl
YnVnZ2VyU2NyaXB0LnNldEJyZWFrcG9pbnQpOgorICAgICAgICAoZGVidWdnZXJTY3JpcHRDb25z
dHJ1Y3Rvci5EZWJ1Z2dlclNjcmlwdC5yZW1vdmVCcmVha3BvaW50KToKKyAgICAgICAgKGRlYnVn
Z2VyU2NyaXB0Q29uc3RydWN0b3IuRGVidWdnZXJTY3JpcHQuY3VycmVudENhbGxGcmFtZSk6Cisg
ICAgICAgIChkZWJ1Z2dlclNjcmlwdENvbnN0cnVjdG9yLkRlYnVnZ2VyU2NyaXB0LnN0ZXBJbnRv
U3RhdGVtZW50KToKKyAgICAgICAgKGRlYnVnZ2VyU2NyaXB0Q29uc3RydWN0b3IuRGVidWdnZXJT
Y3JpcHQuc3RlcE92ZXJTdGF0ZW1lbnQpOgorICAgICAgICAoZGVidWdnZXJTY3JpcHRDb25zdHJ1
Y3Rvci5EZWJ1Z2dlclNjcmlwdC5zdGVwT3V0T2ZGdW5jdGlvbik6CisgICAgICAgIChkZWJ1Z2dl
clNjcmlwdENvbnN0cnVjdG9yLkRlYnVnZ2VyU2NyaXB0LmNsZWFyQnJlYWtwb2ludHMpOgorICAg
ICAgICAoZGVidWdnZXJTY3JpcHRDb25zdHJ1Y3Rvci5EZWJ1Z2dlclNjcmlwdC5zZXRCcmVha3Bv
aW50c0FjdGl2YXRlZCk6CisgICAgICAgIChkZWJ1Z2dlclNjcmlwdENvbnN0cnVjdG9yLkRlYnVn
Z2VyU2NyaXB0Ll9mcmFtZU1pcnJvclRvSlNDYWxsRnJhbWUpOgorICAgICAgICAoZGVidWdnZXJT
Y3JpcHRDb25zdHJ1Y3Rvci5EZWJ1Z2dlclNjcmlwdC5fd2Via2l0VG9WOExpbmVOdW1iZXIpOgor
ICAgICAgICAoZGVidWdnZXJTY3JpcHRDb25zdHJ1Y3Rvci5EZWJ1Z2dlclNjcmlwdC5fdjhUb1d3
ZWJraXRMaW5lTnVtYmVyKToKKyAgICAgICAgKGRlYnVnZ2VyU2NyaXB0Q29uc3RydWN0b3IpOgor
ICAgICAgICAqIHNyYy9qcy9EZXZUb29scy5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5sb2Fk
ZWQpOgorICAgICAgICAoLik6CisgICAgICAgICgpOgorICAgICAgICAqIHNyYy9qcy9EZXZUb29s
c0hvc3RTdHViLmpzOgorICAgICAgICAoLlJlbW90ZURlYnVnZ2VyQWdlbnRTdHViLnByb3RvdHlw
ZS5zZXREZWJ1Z2dlclNjcmlwdFNvdXJjZSk6CisgICAgICAgICogc3JjL2pzL0luc3BlY3RvckNv
bnRyb2xsZXJJbXBsLmpzOgorICAgICAgICAoZGV2dG9vbHMuSW5zcGVjdG9yQmFja2VuZEltcGwp
OgorCiAyMDEwLTA0LTEyICBUb255IENoYW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVt
L1dlYktpdC5neXBpIGIvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IGYxYzZjMmQu
LjM3ZmFhOTkgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTM1LDYgKzM1LDcgQEAKICAgICAgICAgJ2Rl
dnRvb2xzX2pzX2ZpbGVzJzogWwogICAgICAgICAgICAgJ3NyYy9qcy9JbnNwZWN0b3JDb250cm9s
bGVySW1wbC5qcycsCiAgICAgICAgICAgICAnc3JjL2pzL0RlYnVnZ2VyQWdlbnQuanMnLAorICAg
ICAgICAgICAgJ3NyYy9qcy9EZWJ1Z2dlclNjcmlwdC5qcycsCiAgICAgICAgICAgICAnc3JjL2pz
L1Byb2ZpbGVyQWdlbnQuanMnLAogICAgICAgICAgICAgJ3NyYy9qcy9Qcm9maWxlclByb2Nlc3Nv
ci5qcycsCiAgICAgICAgICAgICAnc3JjL2pzL0hlYXBQcm9maWxlclBhbmVsLmpzJywKZGlmZiAt
LWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvRGVidWdnZXJBZ2VudC5oIGIvV2ViS2l0L2Nocm9t
aXVtL3NyYy9EZWJ1Z2dlckFnZW50LmgKaW5kZXggMTdjZGUxMS4uN2YzZGJiYiAxMDA2NDQKLS0t
IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9EZWJ1Z2dlckFnZW50LmgKKysrIGIvV2ViS2l0L2Nocm9t
aXVtL3NyYy9EZWJ1Z2dlckFnZW50LmgKQEAgLTQwLDcgKzQwLDEwIEBAIG5hbWVzcGFjZSBXZWJL
aXQgewogICAgIE1FVEhPRDAoZ2V0Q29udGV4dElkKSBcCiAgICAgXAogICAgIC8qIFJlcXVlc3Qg
djggdG8gcHJvY2VzcyBhbGwgZGVidWcgY29tbWFuZHMgaW4gdGhlIHF1ZXVlLiAqLyBcCi0gICAg
TUVUSE9EMChwcm9jZXNzRGVidWdDb21tYW5kcykKKyAgICBNRVRIT0QwKHByb2Nlc3NEZWJ1Z0Nv
bW1hbmRzKSBcCisgICAgXAorICAgIC8qIFB1c2ggRGVidWdnZXJTY3JpcHQuanMgY29udGVudCB0
byB0aGUgYWdlbnQuICovIFwKKyAgICBNRVRIT0QxKHNldERlYnVnZ2VyU2NyaXB0U291cmNlLCBT
dHJpbmcpCiAKIERFRklORV9SUENfQ0xBU1MoRGVidWdnZXJBZ2VudCwgREVCVUdHRVJfQUdFTlRf
U1RSVUNUKQogCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0RlYnVnZ2VyQWdlbnRJ
bXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvRGVidWdnZXJBZ2VudEltcGwuY3BwCmluZGV4
IGM0ODk4NjAuLjY3MzQ4MmEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvRGVidWdn
ZXJBZ2VudEltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvRGVidWdnZXJBZ2VudElt
cGwuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRl
ICJGcmFtZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJTY3JpcHREZWJ1Z1NlcnZl
ci5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgogI2luY2x1ZGUgIldlYkRldlRvb2xzQWdlbnRJ
bXBsLmgiCiAjaW5jbHVkZSAiV2ViVmlld0ltcGwuaCIKQEAgLTc4LDYgKzc5LDExIEBAIHZvaWQg
RGVidWdnZXJBZ2VudEltcGw6OnByb2Nlc3NEZWJ1Z0NvbW1hbmRzKCkKICAgICB2ODo6RGVidWc6
OlByb2Nlc3NEZWJ1Z01lc3NhZ2VzKCk7CiB9CiAKK3ZvaWQgRGVidWdnZXJBZ2VudEltcGw6OnNl
dERlYnVnZ2VyU2NyaXB0U291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlKQoreworICAgIFdlYkNv
cmU6OlNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5zZXREZWJ1Z2dlclNjcmlwdFNvdXJjZShz
b3VyY2UpOworfQorCiB2b2lkIERlYnVnZ2VyQWdlbnRJbXBsOjpkZWJ1Z2dlck91dHB1dChjb25z
dCBTdHJpbmcmIGNvbW1hbmQpCiB7CiAgICAgbV9kZWxlZ2F0ZS0+ZGVidWdnZXJPdXRwdXQoY29t
bWFuZCk7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0RlYnVnZ2VyQWdlbnRJbXBs
LmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL0RlYnVnZ2VyQWdlbnRJbXBsLmgKaW5kZXggMGU2ZTZh
Zi4uYmQ5ZGRmNiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9EZWJ1Z2dlckFnZW50
SW1wbC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvRGVidWdnZXJBZ2VudEltcGwuaApAQCAt
NjAsNiArNjAsNyBAQCBwdWJsaWM6CiAgICAgLy8gRGVidWdnZXJBZ2VudCBpbXBsZW1lbnRhdGlv
bi4KICAgICB2aXJ0dWFsIHZvaWQgZ2V0Q29udGV4dElkKCk7CiAgICAgdmlydHVhbCB2b2lkIHBy
b2Nlc3NEZWJ1Z0NvbW1hbmRzKCk7CisgICAgdmlydHVhbCB2b2lkIHNldERlYnVnZ2VyU2NyaXB0
U291cmNlKGNvbnN0IFN0cmluZyYpOwogCiAgICAgdm9pZCBkZWJ1Z2dlck91dHB1dChjb25zdCBX
ZWJDb3JlOjpTdHJpbmcmIG91dCk7CiAKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMv
RGVidWdnZXJBZ2VudE1hbmFnZXIuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9EZWJ1Z2dlckFn
ZW50TWFuYWdlci5jcHAKaW5kZXggZmFhZmFmZi4uZDNmN2ZlYSAxMDA2NDQKLS0tIGEvV2ViS2l0
L2Nocm9taXVtL3NyYy9EZWJ1Z2dlckFnZW50TWFuYWdlci5jcHAKKysrIGIvV2ViS2l0L2Nocm9t
aXVtL3NyYy9EZWJ1Z2dlckFnZW50TWFuYWdlci5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNs
dWRlICJEZWJ1Z2dlckFnZW50SW1wbC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAi
UGFnZUdyb3VwTG9hZERlZmVycmVyLmgiCisjaW5jbHVkZSAiU2NyaXB0RGVidWdTZXJ2ZXIuaCIK
ICNpbmNsdWRlICJWOFByb3h5LmgiCiAjaW5jbHVkZSAiV2ViRGV2VG9vbHNBZ2VudEltcGwuaCIK
ICNpbmNsdWRlICJXZWJGcmFtZUltcGwuaCIKQEAgLTcyLDYgKzczLDQyIEBAIHByaXZhdGU6CiB9
IC8vIG5hbWVzcGFjZQogCiAKK3ZvaWQgRGVidWdnZXJBZ2VudE1hbmFnZXI6Omhvc3REaXNwYXRj
aEhhbmRsZXIoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlBhZ2UqPiYgcGFnZXMpCit7CisgICAgaWYg
KCFzX21lc3NhZ2VMb29wRGlzcGF0Y2hIYW5kbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAoc19pbkhvc3REaXNwYXRjaEhhbmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIHNfaW5I
b3N0RGlzcGF0Y2hIYW5kbGVyID0gdHJ1ZTsKKworICAgIFZlY3RvcjxXZWJWaWV3SW1wbCo+IHZp
ZXdzOworICAgIC8vIDEuIERpc2FibGUgYWN0aXZlIG9iamVjdHMgYW5kIGlucHV0IGV2ZW50cy4K
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhZ2VzLnNpemUoKTsgaSsrKSB7CisgICAgICAg
IFdlYkNvcmU6OlBhZ2UqIHBhZ2UgPSBwYWdlc1tpXTsKKyAgICAgICAgV2ViVmlld0ltcGwqIHZp
ZXcgPSBXZWJWaWV3SW1wbDo6ZnJvbVBhZ2UocGFnZSk7CisgICAgICAgIHNfcGFnZURlZmVycmVy
cy5zZXQodmlldyAsIG5ldyBXZWJDb3JlOjpQYWdlR3JvdXBMb2FkRGVmZXJyZXIocGFnZSwgdHJ1
ZSkpOworICAgICAgICB2aWV3cy5hcHBlbmQodmlldyk7CisgICAgICAgIHZpZXctPnNldElnbm9y
ZUlucHV0RXZlbnRzKHRydWUpOworICAgIH0KKworICAgIC8vIDIuIFByb2Nlc3MgbWVzc2FnZXMu
CisgICAgc19tZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlcigpOworCisgICAgLy8gMy4gQnJpbmcg
dGhpbmdzIGJhY2suCisgICAgZm9yIChWZWN0b3I8V2ViVmlld0ltcGwqPjo6aXRlcmF0b3IgaXQg
PSB2aWV3cy5iZWdpbigpOyBpdCAhPSB2aWV3cy5lbmQoKTsgKytpdCkgeworICAgICAgICBpZiAo
c19wYWdlRGVmZXJyZXJzLmNvbnRhaW5zKCppdCkpIHsKKyAgICAgICAgICAgIC8vIFRoZSB2aWV3
IHdhcyBub3QgY2xvc2VkIGR1cmluZyB0aGUgZGlzcGF0Y2guCisgICAgICAgICAgICAoKml0KS0+
c2V0SWdub3JlSW5wdXRFdmVudHMoZmFsc2UpOworICAgICAgICB9CisgICAgfQorICAgIGRlbGV0
ZUFsbFZhbHVlcyhzX3BhZ2VEZWZlcnJlcnMpOworICAgIHNfcGFnZURlZmVycmVycy5jbGVhcigp
OworCisgICAgc19pbkhvc3REaXNwYXRjaEhhbmRsZXIgPSBmYWxzZTsKK30KKwogdm9pZCBEZWJ1
Z2dlckFnZW50TWFuYWdlcjo6ZGVidWdIb3N0RGlzcGF0Y2hIYW5kbGVyKCkKIHsKICAgICBpZiAo
IXNfbWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIgfHwgIXNfYXR0YWNoZWRBZ2VudHNNYXApCkBA
IC0xMTYsNiArMTUzLDkgQEAgRGVidWdnZXJBZ2VudE1hbmFnZXI6OkF0dGFjaGVkQWdlbnRzTWFw
KiBEZWJ1Z2dlckFnZW50TWFuYWdlcjo6c19hdHRhY2hlZEFnZW50c00KIAogdm9pZCBEZWJ1Z2dl
ckFnZW50TWFuYWdlcjo6ZGVidWdBdHRhY2goRGVidWdnZXJBZ2VudEltcGwqIGRlYnVnZ2VyQWdl
bnQpCiB7CisjaWYgRU5BQkxFKFY4X1NDUklQVF9ERUJVR19TRVJWRVIpCisgICAgcmV0dXJuOwor
I2VuZGlmCiAgICAgaWYgKCFzX2F0dGFjaGVkQWdlbnRzTWFwKSB7CiAgICAgICAgIHNfYXR0YWNo
ZWRBZ2VudHNNYXAgPSBuZXcgQXR0YWNoZWRBZ2VudHNNYXAoKTsKICAgICAgICAgdjg6OkRlYnVn
OjpTZXRNZXNzYWdlSGFuZGxlcjIoJkRlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpvblY4RGVidWdNZXNz
YWdlKTsKQEAgLTEyOCw2ICsxNjgsOSBAQCB2b2lkIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpkZWJ1
Z0F0dGFjaChEZWJ1Z2dlckFnZW50SW1wbCogZGVidWdnZXJBZ2VudCkKIAogdm9pZCBEZWJ1Z2dl
ckFnZW50TWFuYWdlcjo6ZGVidWdEZXRhY2goRGVidWdnZXJBZ2VudEltcGwqIGRlYnVnZ2VyQWdl
bnQpCiB7CisjaWYgRU5BQkxFKFY4X1NDUklQVF9ERUJVR19TRVJWRVIpCisgICAgcmV0dXJuOwor
I2VuZGlmCiAgICAgaWYgKCFzX2F0dGFjaGVkQWdlbnRzTWFwKSB7CiAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CkBAIC0yNDksNiArMjkyLDcgQEAgdm9pZCBE
ZWJ1Z2dlckFnZW50TWFuYWdlcjo6ZXhlY3V0ZURlYnVnZ2VyQ29tbWFuZChjb25zdCBTdHJpbmcm
IGNvbW1hbmQsIGludCBjYWwKIHZvaWQgRGVidWdnZXJBZ2VudE1hbmFnZXI6OnNldE1lc3NhZ2VM
b29wRGlzcGF0Y2hIYW5kbGVyKFdlYkRldlRvb2xzQWdlbnQ6Ok1lc3NhZ2VMb29wRGlzcGF0Y2hI
YW5kbGVyIGhhbmRsZXIpCiB7CiAgICAgc19tZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlciA9IGhh
bmRsZXI7CisgICAgV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OnNldE1lc3NhZ2VMb29wRGlz
cGF0Y2hIYW5kbGVyKERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpob3N0RGlzcGF0Y2hIYW5kbGVyKTsK
IH0KIAogdm9pZCBEZWJ1Z2dlckFnZW50TWFuYWdlcjo6c2V0SG9zdElkKFdlYkZyYW1lSW1wbCog
d2ViZnJhbWUsIGludCBob3N0SWQpCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0Rl
YnVnZ2VyQWdlbnRNYW5hZ2VyLmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL0RlYnVnZ2VyQWdlbnRN
YW5hZ2VyLmgKaW5kZXggYTJlOTAzMC4uYThiYzdhMyAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9t
aXVtL3NyYy9EZWJ1Z2dlckFnZW50TWFuYWdlci5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMv
RGVidWdnZXJBZ2VudE1hbmFnZXIuaApAQCAtMzEsMTIgKzMxLDE1IEBACiAjaWZuZGVmIERlYnVn
Z2VyQWdlbnRNYW5hZ2VyX2gKICNkZWZpbmUgRGVidWdnZXJBZ2VudE1hbmFnZXJfaAogCisjaW5j
bHVkZSAiV2ViQ1N0cmluZy5oIgogI2luY2x1ZGUgIldlYkRldlRvb2xzQWdlbnQuaCIKICNpbmNs
dWRlIDx2OC1kZWJ1Zy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CitjbGFzcyBQYWdlOwogY2xhc3MgUGFnZUdyb3VwTG9hZERlZmVycmVyOwogY2xhc3Mg
U3RyaW5nOwogfQpAQCAtOTcsNiArMTAwLDcgQEAgcHJpdmF0ZToKICAgICBEZWJ1Z2dlckFnZW50
TWFuYWdlcigpOwogICAgIH5EZWJ1Z2dlckFnZW50TWFuYWdlcigpOwogCisgICAgc3RhdGljIHZv
aWQgaG9zdERpc3BhdGNoSGFuZGxlcihjb25zdCBWZWN0b3I8V2ViQ29yZTo6UGFnZSo+Jik7CiAg
ICAgc3RhdGljIHZvaWQgZGVidWdIb3N0RGlzcGF0Y2hIYW5kbGVyKCk7CiAgICAgc3RhdGljIHZv
aWQgb25WOERlYnVnTWVzc2FnZShjb25zdCB2ODo6RGVidWc6Ok1lc3NhZ2UmIG1lc3NhZ2UpOwog
ICAgIHN0YXRpYyB2b2lkIHNlbmRDb21tYW5kVG9WOChjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGNt
ZCwKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnRJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRJ
bXBsLmNwcAppbmRleCA3ZGEwNTcxLi45ZmYzOTM4IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21p
dW0vc3JjL0luc3BlY3RvckZyb250ZW5kQ2xpZW50SW1wbC5jcHAKKysrIGIvV2ViS2l0L2Nocm9t
aXVtL3NyYy9JbnNwZWN0b3JGcm9udGVuZENsaWVudEltcGwuY3BwCkBAIC02OSw2ICs2OSw5IEBA
IHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRJbXBsOjp3aW5kb3dPYmplY3RDbGVhcmVkKCkK
ICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGdsb2JhbCA9IGZyYW1lQ29udGV4dC0+R2xvYmFs
KCk7CiAKICAgICBnbG9iYWwtPlNldCh2ODo6U3RyaW5nOjpOZXcoIkluc3BlY3RvckZyb250ZW5k
SG9zdCIpLCBmcm9udGVuZEhvc3RPYmopOworI2lmIEVOQUJMRShWOF9TQ1JJUFRfREVCVUdfU0VS
VkVSKQorICAgIGdsb2JhbC0+U2V0KHY4OjpTdHJpbmc6Ok5ldygidjhTY3JpcHREZWJ1Z1NlcnZl
ckVuYWJsZWQiKSwgdjg6OlRydWUoKSk7CisjZW5kaWYKIH0KIAogdm9pZCBJbnNwZWN0b3JGcm9u
dGVuZENsaWVudEltcGw6OmZyb250ZW5kTG9hZGVkKCkKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJv
bWl1bS9zcmMvanMvRGVidWdnZXJTY3JpcHQuanMgYi9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0Rl
YnVnZ2VyU2NyaXB0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiZDI2
ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RlYnVnZ2VyU2Ny
aXB0LmpzCkBAIC0wLDAgKzEsMjA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworZnVuY3Rpb24gZGVidWdnZXJTY3JpcHRDb25zdHJ1Y3Rv
cigpIHsKKwordmFyIERlYnVnZ2VyU2NyaXB0ID0ge307CitEZWJ1Z2dlclNjcmlwdC5fYnJlYWtw
b2ludHMgPSB7fTsKKworCitEZWJ1Z2dlclNjcmlwdC5nZXRBZnRlckNvbXBpbGVTY3JpcHQgPSBm
dW5jdGlvbihleGVjU3RhdGUsIGFyZ3MpCit7CisgICAgcmV0dXJuIERlYnVnZ2VyU2NyaXB0Ll9m
b3JtYXRTY3JpcHQoYXJncy5ldmVudERhdGEuc2NyaXB0Xy5zY3JpcHRfKTsKK30KKworRGVidWdn
ZXJTY3JpcHQuZ2V0U2NyaXB0cyA9IGZ1bmN0aW9uKGV4ZWNTdGF0ZSwgYXJncykKK3sKKyAgICB2
YXIgc2NyaXB0cyA9IERlYnVnLnNjcmlwdHMoKTsKKyAgICB2YXIgcmVzdWx0ID0gW107CisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBzY3JpcHRzLmxlbmd0aDsgKytpKSB7CisgICAgICAgIHJlc3Vs
dC5wdXNoKERlYnVnZ2VyU2NyaXB0Ll9mb3JtYXRTY3JpcHQoc2NyaXB0c1tpXSkpOworICAgIH0K
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitEZWJ1Z2dlclNjcmlwdC5fZm9ybWF0U2NyaXB0ID0g
ZnVuY3Rpb24oc2NyaXB0KQoreworICAgIHJldHVybiB7CisgICAgICAgIGlkOiBzY3JpcHQuaWQs
CisgICAgICAgIG5hbWU6IHNjcmlwdC5uYW1lLAorICAgICAgICBzb3VyY2U6IHNjcmlwdC5zb3Vy
Y2UsCisgICAgICAgIGxpbmVPZmZzZXQ6IHNjcmlwdC5saW5lX29mZnNldCwKKyAgICAgICAgbGlu
ZUNvdW50OiBzY3JpcHQubGluZUNvdW50KCksCisgICAgICAgIGNvbnRleHREYXRhOiBzY3JpcHQu
Y29udGV4dF9kYXRhCisgICAgfTsKK30KKworRGVidWdnZXJTY3JpcHQuc2V0QnJlYWtwb2ludCA9
IGZ1bmN0aW9uKGV4ZWNTdGF0ZSwgYXJncykKK3sKKyAgICBhcmdzLmxpbmVOdW1iZXIgPSBEZWJ1
Z2dlclNjcmlwdC5fd2Via2l0VG9WOExpbmVOdW1iZXIoYXJncy5saW5lTnVtYmVyKTsKKyAgICB2
YXIga2V5ID0gYXJncy5zY3JpcHRJZCArICI6IiArIGFyZ3MubGluZU51bWJlcjsKKyAgICB2YXIg
YnJlYWtJZCA9IERlYnVnZ2VyU2NyaXB0Ll9icmVha3BvaW50c1trZXldOworICAgIGlmIChicmVh
a0lkKSB7CisgICAgICAgIGlmIChhcmdzLmVuYWJsZWQpCisgICAgICAgICAgICBEZWJ1Zy5lbmFi
bGVTY3JpcHRCcmVha1BvaW50KGJyZWFrSWQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBE
ZWJ1Zy5kaXNhYmxlU2NyaXB0QnJlYWtQb2ludChicmVha0lkKTsKKyAgICAgICAgRGVidWcuY2hh
bmdlU2NyaXB0QnJlYWtQb2ludENvbmRpdGlvbihicmVha0lkLCBhcmdzLmNvbmRpdGlvbik7Cisg
ICAgICAgIHJldHVybiBicmVha0lkOworICAgIH0KKworICAgIGJyZWFrSWQgPSBEZWJ1Zy5zZXRT
Y3JpcHRCcmVha1BvaW50QnlJZChhcmdzLnNjcmlwdElkLCBhcmdzLmxpbmVOdW1iZXIsIDAgLyog
Y29sdW1uICovLCBhcmdzLmNvbmRpdGlvbik7CisgICAgRGVidWdnZXJTY3JpcHQuX2JyZWFrcG9p
bnRzW2tleV0gPSBicmVha0lkOworICAgIGlmICghYXJncy5lbmFibGVkKQorICAgICAgICBEZWJ1
Zy5kaXNhYmxlU2NyaXB0QnJlYWtQb2ludChicmVha0lkKTsKKyAgICByZXR1cm4gYnJlYWtJZDsK
K30KKworRGVidWdnZXJTY3JpcHQucmVtb3ZlQnJlYWtwb2ludCA9IGZ1bmN0aW9uKGV4ZWNTdGF0
ZSwgYXJncykKK3sKKyAgICBhcmdzLmxpbmVOdW1iZXIgPSBEZWJ1Z2dlclNjcmlwdC5fd2Via2l0
VG9WOExpbmVOdW1iZXIoYXJncy5saW5lTnVtYmVyKTsKKyAgICB2YXIga2V5ID0gYXJncy5zY3Jp
cHRJZCArICI6IiArIGFyZ3MubGluZU51bWJlcjsKKyAgICB2YXIgYnJlYWtJZCA9IERlYnVnZ2Vy
U2NyaXB0Ll9icmVha3BvaW50c1trZXldOworICAgIGlmIChicmVha0lkKQorICAgICAgICBEZWJ1
Zy5maW5kQnJlYWtQb2ludChicmVha0lkLCB0cnVlKTsKKyAgICBkZWxldGUgRGVidWdnZXJTY3Jp
cHQuX2JyZWFrcG9pbnRzW2tleV07Cit9CisKK0RlYnVnZ2VyU2NyaXB0LmN1cnJlbnRDYWxsRnJh
bWUgPSBmdW5jdGlvbihleGVjU3RhdGUsIGFyZ3MpCit7CisgICAgdmFyIGZyYW1lQ291bnQgPSBl
eGVjU3RhdGUuZnJhbWVDb3VudCgpOworICAgIGlmIChmcmFtZUNvdW50ID09PSAwKQorICAgICAg
ICByZXR1cm4gdW5kZWZpbmVkOworICAgIAorICAgIHZhciB0b3BGcmFtZTsKKyAgICBmb3IgKHZh
ciBpID0gZnJhbWVDb3VudCAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgIHZhciBmcmFtZU1p
cnJvciA9IGV4ZWNTdGF0ZS5mcmFtZShpKTsKKyAgICAgICAgdG9wRnJhbWUgPSBEZWJ1Z2dlclNj
cmlwdC5fZnJhbWVNaXJyb3JUb0pTQ2FsbEZyYW1lKGZyYW1lTWlycm9yLCB0b3BGcmFtZSk7Cisg
ICAgfQorICAgIHJldHVybiB0b3BGcmFtZTsKK30KKworRGVidWdnZXJTY3JpcHQuc3RlcEludG9T
dGF0ZW1lbnQgPSBmdW5jdGlvbihleGVjU3RhdGUsIGFyZ3MpCit7CisgICAgZXhlY1N0YXRlLnBy
ZXBhcmVTdGVwKERlYnVnLlN0ZXBBY3Rpb24uU3RlcEluLCAxKTsKK30KKworRGVidWdnZXJTY3Jp
cHQuc3RlcE92ZXJTdGF0ZW1lbnQgPSBmdW5jdGlvbihleGVjU3RhdGUsIGFyZ3MpCit7CisgICAg
ZXhlY1N0YXRlLnByZXBhcmVTdGVwKERlYnVnLlN0ZXBBY3Rpb24uU3RlcE5leHQsIDEpOworfQor
CitEZWJ1Z2dlclNjcmlwdC5zdGVwT3V0T2ZGdW5jdGlvbiA9IGZ1bmN0aW9uKGV4ZWNTdGF0ZSwg
YXJncykKK3sKKyAgICBleGVjU3RhdGUucHJlcGFyZVN0ZXAoRGVidWcuU3RlcEFjdGlvbi5TdGVw
T3V0LCAxKTsKK30KKworRGVidWdnZXJTY3JpcHQuY2xlYXJCcmVha3BvaW50cyA9IGZ1bmN0aW9u
KGV4ZWNTdGF0ZSwgYXJncykKK3sKKyAgICBmb3IgKHZhciBrZXkgaW4gRGVidWdnZXJTY3JpcHQu
X2JyZWFrcG9pbnRzKSB7CisgICAgICAgIHZhciBicmVha0lkID0gRGVidWdnZXJTY3JpcHQuX2Jy
ZWFrcG9pbnRzW2tleV07CisgICAgICAgIERlYnVnLmZpbmRCcmVha1BvaW50KGJyZWFrSWQsIHRy
dWUpOworICAgIH0KKyAgICBEZWJ1Z2dlclNjcmlwdC5fYnJlYWtwb2ludHMgPSB7fTsKK30KKwor
RGVidWdnZXJTY3JpcHQuc2V0QnJlYWtwb2ludHNBY3RpdmF0ZWQgPSBmdW5jdGlvbihleGVjU3Rh
dGUsIGFyZ3MpCit7CisgICAgZm9yICh2YXIga2V5IGluIERlYnVnZ2VyU2NyaXB0Ll9icmVha3Bv
aW50cykgeworICAgICAgICB2YXIgYnJlYWtJZCA9IERlYnVnZ2VyU2NyaXB0Ll9icmVha3BvaW50
c1trZXldOworICAgICAgICBpZiAoYXJncy5lbmFibGVkKQorICAgICAgICAgICAgRGVidWcuZW5h
YmxlU2NyaXB0QnJlYWtQb2ludChicmVha0lkKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
RGVidWcuZGlzYWJsZVNjcmlwdEJyZWFrUG9pbnQoYnJlYWtJZCk7CisgICAgfQorfQorCitEZWJ1
Z2dlclNjcmlwdC5fZnJhbWVNaXJyb3JUb0pTQ2FsbEZyYW1lID0gZnVuY3Rpb24oZnJhbWVNaXJy
b3IsIGNhbGxlckZyYW1lKQoreworICAgIC8vIEdldCBmdW5jdGlvbiBuYW1lLgorICAgIHZhciBm
dW5jOworICAgIHRyeSB7CisgICAgICAgIGZ1bmMgPSBmcmFtZU1pcnJvci5mdW5jKCk7CisgICAg
fSBjYXRjaChlKSB7CisgICAgfQorICAgIHZhciBmdW5jdGlvbk5hbWU7CisgICAgaWYgKGZ1bmMp
CisgICAgICAgIGZ1bmN0aW9uTmFtZSA9IGZ1bmMubmFtZSgpIHx8IGZ1bmMuaW5mZXJyZWROYW1l
KCk7CisgICAgaWYgKCFmdW5jdGlvbk5hbWUpCisgICAgICAgIGZ1bmN0aW9uTmFtZSA9ICJbYW5v
bnltb3VzXSI7CisgICAgICAgIAorICAgIC8vIEdldCBzY3JpcHQgSUQuCisgICAgdmFyIHNjcmlw
dCA9IGZ1bmMuc2NyaXB0KCk7CisgICAgdmFyIHNvdXJjZUlEID0gc2NyaXB0ICYmIHNjcmlwdC5p
ZCgpOworICAgIAorICAgIC8vIEdldCBsaW5lIG51bWJlci4KKyAgICB2YXIgbGluZSA9IERlYnVn
Z2VyU2NyaXB0Ll92OFRvV3dlYmtpdExpbmVOdW1iZXIoZnJhbWVNaXJyb3Iuc291cmNlTGluZSgp
KTsKKyAgICAKKyAgICAvLyBHZXQgdGhpcyBvYmplY3QuCisgICAgdmFyIHRoaXNPYmplY3QgPSBm
cmFtZU1pcnJvci5kZXRhaWxzXy5yZWNlaXZlcigpOworCisgICAgLy8gR2V0IHNjb3BlIGNoYWlu
IGFycmF5IGluIGZvcm1hdDogWzxzY29wZSB0eXBlPiwgPHNjb3BlIG9iamVjdD4sIDxzY29wZSB0
eXBlPiwgPHNjb3BlIG9iamVjdD4sLi4uXQorICAgIHZhciBzY29wZUNoYWluID0gW107CisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBmcmFtZU1pcnJvci5zY29wZUNvdW50KCk7IGkrKykgeworICAg
ICAgICB2YXIgc2NvcGVNaXJyb3IgPSBmcmFtZU1pcnJvci5zY29wZShpKTsKKyAgICAgICAgdmFy
IHNjb3BlT2JqZWN0TWlycm9yID0gc2NvcGVNaXJyb3Iuc2NvcGVPYmplY3QoKTsKKyAgICAgICAg
dmFyIHByb3BlcnRpZXMgPSBzY29wZU9iamVjdE1pcnJvci5wcm9wZXJ0aWVzKCk7CisgICAgICAg
IHZhciBzY29wZU9iamVjdCA9IHt9OworICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHByb3Bl
cnRpZXMubGVuZ3RoOyBqKyspCisgICAgICAgICAgICBzY29wZU9iamVjdFtwcm9wZXJ0aWVzW2pd
Lm5hbWUoKV0gPSBwcm9wZXJ0aWVzW2pdLnZhbHVlXzsKKyAgICAgICAgc2NvcGVDaGFpbi5wdXNo
KHNjb3BlTWlycm9yLnNjb3BlVHlwZSgpKTsKKyAgICAgICAgc2NvcGVDaGFpbi5wdXNoKHNjb3Bl
T2JqZWN0KTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHsKKyAgICAgICAgInNvdXJjZUlEIjog
c291cmNlSUQsCisgICAgICAgICJsaW5lIjogbGluZSwKKyAgICAgICAgImZ1bmN0aW9uTmFtZSI6
IGZ1bmN0aW9uTmFtZSwKKyAgICAgICAgInR5cGUiOiAiZnVuY3Rpb24iLAorICAgICAgICAidGhp
c09iamVjdCI6IHRoaXNPYmplY3QsCisgICAgICAgICJzY29wZUNoYWluIjogc2NvcGVDaGFpbiwK
KyAgICAgICAgImNhbGxlciI6IGNhbGxlckZyYW1lCisgICAgfTsKK30KKworRGVidWdnZXJTY3Jp
cHQuX3dlYmtpdFRvVjhMaW5lTnVtYmVyID0gZnVuY3Rpb24obGluZSkKK3sKKyAgICByZXR1cm4g
bGluZSAtIDE7Cit9OworCitEZWJ1Z2dlclNjcmlwdC5fdjhUb1d3ZWJraXRMaW5lTnVtYmVyID0g
ZnVuY3Rpb24obGluZSkKK3sKKyAgICByZXR1cm4gbGluZSArIDE7Cit9OworCityZXR1cm4gRGVi
dWdnZXJTY3JpcHQ7CisKK30KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvRGV2
VG9vbHMuanMgYi9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RldlRvb2xzLmpzCmluZGV4IDViMjg4
ZWMuLjk0MDZiZjAgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvRGV2VG9vbHMu
anMKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9EZXZUb29scy5qcwpAQCAtMTgzLDEyICsx
ODMsMTYgQEAgV2ViSW5zcGVjdG9yLmxvYWRlZCA9IGZ1bmN0aW9uKCkKICAgICBQcmVmZXJlbmNl
cy5oZWFwUHJvZmlsZXJQcmVzZW50ID0gdHJ1ZTsKICAgICBQcmVmZXJlbmNlcy5kZWJ1Z2dlckFs
d2F5c0VuYWJsZWQgPSB0cnVlOwogICAgIFByZWZlcmVuY2VzLnByb2ZpbGVyQWx3YXlzRW5hYmxl
ZCA9IHRydWU7CisgICAgUmVtb3RlRGVidWdnZXJBZ2VudC5zZXREZWJ1Z2dlclNjcmlwdFNvdXJj
ZSgiKCIgKyBkZWJ1Z2dlclNjcmlwdENvbnN0cnVjdG9yICsgIikoKTsiKTsKKyAKICAgICBvbGRM
b2FkZWQuY2FsbCh0aGlzKTsKIAogICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC5sb2FkZWQoKTsK
IH07CiAKIAoraWYgKCF3aW5kb3cudjhTY3JpcHREZWJ1Z1NlcnZlckVuYWJsZWQpIHsKKwogLyoq
CiAgKiBUaGlzIG92ZXJyaWRlIGlzIG5lY2Vzc2FyeSBmb3IgYWRkaW5nIHNjcmlwdCBzb3VyY2Ug
YXN5bmNocm9ub3VzbHkuCiAgKiBAb3ZlcnJpZGUKQEAgLTIyNSwxOCArMjI5LDYgQEAgV2ViSW5z
cGVjdG9yLlNjcmlwdFZpZXcucHJvdG90eXBlLmRpZFJlc29sdmVTY3JpcHRTb3VyY2VfID0gZnVu
Y3Rpb24oKQogfTsKIAogCi0vKioKLSAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIFR5cGUgb2YgdGhl
IHRoZSBwcm9wZXJ0eSB2YWx1ZSgib2JqZWN0IiBvciAiZnVuY3Rpb24iKS4KLSAqIEBwYXJhbSB7
c3RyaW5nfSBjbGFzc05hbWUgQ2xhc3MgbmFtZSBvZiB0aGUgcHJvcGVydHkgdmFsdWUuCi0gKiBA
Y29uc3RydWN0b3IKLSAqLwotV2ViSW5zcGVjdG9yLlVucmVzb2x2ZWRQcm9wZXJ0eVZhbHVlID0g
ZnVuY3Rpb24odHlwZSwgY2xhc3NOYW1lKQotewotICAgIHRoaXMudHlwZSA9IHR5cGU7Ci0gICAg
dGhpcy5jbGFzc05hbWUgPSBjbGFzc05hbWU7Ci19OwotCi0KIChmdW5jdGlvbigpCiB7CiAgICAg
dmFyIG9sZFNob3cgPSBXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZS5zaG93OwpA
QCAtMjQ5LDYgKzI0MSw0NyBAQCBXZWJJbnNwZWN0b3IuVW5yZXNvbHZlZFByb3BlcnR5VmFsdWUg
PSBmdW5jdGlvbih0eXBlLCBjbGFzc05hbWUpCiB9KSgpOwogCiAKKyhmdW5jdGlvbiAoKSB7Cit2
YXIgb3JpZyA9IEluamVjdGVkU2NyaXB0QWNjZXNzLnByb3RvdHlwZS5nZXRQcm9wZXJ0aWVzOwor
SW5qZWN0ZWRTY3JpcHRBY2Nlc3MucHJvdG90eXBlLmdldFByb3BlcnRpZXMgPSBmdW5jdGlvbihv
YmplY3RQcm94eSwgaWdub3JlSGFzT3duUHJvcGVydHksIGFiYnJldmlhdGUsIGNhbGxiYWNrKQor
eworICAgIGlmIChvYmplY3RQcm94eS5pc1Njb3BlKQorICAgICAgICBkZXZ0b29scy50b29scy5n
ZXREZWJ1Z2dlckFnZW50KCkucmVzb2x2ZVNjb3BlKG9iamVjdFByb3h5Lm9iamVjdElkLCBjYWxs
YmFjayk7CisgICAgZWxzZSBpZiAob2JqZWN0UHJveHkuaXNWOFJlZikKKyAgICAgICAgZGV2dG9v
bHMudG9vbHMuZ2V0RGVidWdnZXJBZ2VudCgpLnJlc29sdmVDaGlsZHJlbihvYmplY3RQcm94eS5v
YmplY3RJZCwgY2FsbGJhY2ssIGZhbHNlKTsKKyAgICBlbHNlCisgICAgICAgIG9yaWcuYXBwbHko
dGhpcywgYXJndW1lbnRzKTsKK307Cit9KSgpOworCisKKyhmdW5jdGlvbigpCit7CitJbmplY3Rl
ZFNjcmlwdEFjY2Vzcy5wcm90b3R5cGUuZXZhbHVhdGVJbkNhbGxGcmFtZSA9IGZ1bmN0aW9uKGNh
bGxGcmFtZUlkLCBjb2RlLCBvYmplY3RHcm91cCwgY2FsbGJhY2spCit7CisgICAgLy9UT0RPKHBm
ZWxkbWFuKTogcmVtb3ZlIG9uY2UgNDkwODQgaXMgcm9sbGVkLgorICAgIGlmICghY2FsbGJhY2sp
CisgICAgICAgIGNhbGxiYWNrID0gb2JqZWN0R3JvdXA7CisgICAgZGV2dG9vbHMudG9vbHMuZ2V0
RGVidWdnZXJBZ2VudCgpLmV2YWx1YXRlSW5DYWxsRnJhbWUoY2FsbEZyYW1lSWQsIGNvZGUsIGNh
bGxiYWNrKTsKK307Cit9KSgpOworCisKKyhmdW5jdGlvbigpCit7Cit2YXIgb3JpZyA9IEluamVj
dGVkU2NyaXB0QWNjZXNzLnByb3RvdHlwZS5nZXRDb21wbGV0aW9uczsKK0luamVjdGVkU2NyaXB0
QWNjZXNzLnByb3RvdHlwZS5nZXRDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKGV4cHJlc3Npb25TdHJp
bmcsIGluY2x1ZGVJbnNwZWN0b3JDb21tYW5kTGluZUFQSSwgY2FsbEZyYW1lSWQsIHJlcG9ydENv
bXBsZXRpb25zKQoreworICAgIGlmICh0eXBlb2YgY2FsbEZyYW1lSWQgPT09ICJudW1iZXIiKQor
ICAgICAgICBkZXZ0b29scy50b29scy5nZXREZWJ1Z2dlckFnZW50KCkucmVzb2x2ZUNvbXBsZXRp
b25zT25GcmFtZShleHByZXNzaW9uU3RyaW5nLCBjYWxsRnJhbWVJZCwgcmVwb3J0Q29tcGxldGlv
bnMpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIG9yaWcuYXBwbHkodGhpcywgYXJndW1lbnRz
KTsKK307Cit9KSgpOworCit9CisKKwogKGZ1bmN0aW9uIEludGVyY2VwdFByb2ZpbGVzUGFuZWxF
dmVudHMoKQogewogICAgIHZhciBvbGRTaG93ID0gV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwu
cHJvdG90eXBlLnNob3c7CkBAIC0zNDMsNDUgKzM3Niw2IEBAIFdlYkluc3BlY3Rvci5VSVN0cmlu
ZyA9IGZ1bmN0aW9uKHN0cmluZykKIH0pKCk7CiAKIAotKGZ1bmN0aW9uICgpIHsKLXZhciBvcmln
ID0gSW5qZWN0ZWRTY3JpcHRBY2Nlc3MucHJvdG90eXBlLmdldFByb3BlcnRpZXM7Ci1JbmplY3Rl
ZFNjcmlwdEFjY2Vzcy5wcm90b3R5cGUuZ2V0UHJvcGVydGllcyA9IGZ1bmN0aW9uKG9iamVjdFBy
b3h5LCBpZ25vcmVIYXNPd25Qcm9wZXJ0eSwgYWJicmV2aWF0ZSwgY2FsbGJhY2spCi17Ci0gICAg
aWYgKG9iamVjdFByb3h5LmlzU2NvcGUpCi0gICAgICAgIGRldnRvb2xzLnRvb2xzLmdldERlYnVn
Z2VyQWdlbnQoKS5yZXNvbHZlU2NvcGUob2JqZWN0UHJveHkub2JqZWN0SWQsIGNhbGxiYWNrKTsK
LSAgICBlbHNlIGlmIChvYmplY3RQcm94eS5pc1Y4UmVmKQotICAgICAgICBkZXZ0b29scy50b29s
cy5nZXREZWJ1Z2dlckFnZW50KCkucmVzb2x2ZUNoaWxkcmVuKG9iamVjdFByb3h5Lm9iamVjdElk
LCBjYWxsYmFjaywgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgb3JpZy5hcHBseSh0aGlzLCBh
cmd1bWVudHMpOwotfTsKLX0pKCk7Ci0KLQotKGZ1bmN0aW9uKCkKLXsKLUluamVjdGVkU2NyaXB0
QWNjZXNzLnByb3RvdHlwZS5ldmFsdWF0ZUluQ2FsbEZyYW1lID0gZnVuY3Rpb24oY2FsbEZyYW1l
SWQsIGNvZGUsIG9iamVjdEdyb3VwLCBjYWxsYmFjaykKLXsKLSAgICAvL1RPRE8ocGZlbGRtYW4p
OiByZW1vdmUgb25jZSA0OTA4NCBpcyByb2xsZWQuCi0gICAgaWYgKCFjYWxsYmFjaykKLSAgICAg
ICAgY2FsbGJhY2sgPSBvYmplY3RHcm91cDsKLSAgICBkZXZ0b29scy50b29scy5nZXREZWJ1Z2dl
ckFnZW50KCkuZXZhbHVhdGVJbkNhbGxGcmFtZShjYWxsRnJhbWVJZCwgY29kZSwgY2FsbGJhY2sp
OwotfTsKLX0pKCk7Ci0KLQotKGZ1bmN0aW9uKCkKLXsKLXZhciBvcmlnID0gSW5qZWN0ZWRTY3Jp
cHRBY2Nlc3MucHJvdG90eXBlLmdldENvbXBsZXRpb25zOwotSW5qZWN0ZWRTY3JpcHRBY2Nlc3Mu
cHJvdG90eXBlLmdldENvbXBsZXRpb25zID0gZnVuY3Rpb24oZXhwcmVzc2lvblN0cmluZywgaW5j
bHVkZUluc3BlY3RvckNvbW1hbmRMaW5lQVBJLCBjYWxsRnJhbWVJZCwgcmVwb3J0Q29tcGxldGlv
bnMpCi17Ci0gICAgaWYgKHR5cGVvZiBjYWxsRnJhbWVJZCA9PT0gIm51bWJlciIpCi0gICAgICAg
IGRldnRvb2xzLnRvb2xzLmdldERlYnVnZ2VyQWdlbnQoKS5yZXNvbHZlQ29tcGxldGlvbnNPbkZy
YW1lKGV4cHJlc3Npb25TdHJpbmcsIGNhbGxGcmFtZUlkLCByZXBvcnRDb21wbGV0aW9ucyk7Ci0g
ICAgZWxzZQotICAgICAgICByZXR1cm4gb3JpZy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwotfTsK
LX0pKCk7Ci0KLQogLy8gV2UgbmVlZCB0byBoYXZlIGEgcGxhY2UgZm9yIHBvc3Rwb25lZCB0YXNr
cwogLy8gd2hpY2ggc2hvdWxkIGJlIGV4ZWN1dGVkIHdoZW4gYWxsIHRoZSBtZXNzYWdlcyBiZXR3
ZWVuIGFnZW50IGFuZCBmcm9udGVuZAogLy8gYXJlIHByb2Nlc3NlZC4KZGlmZiAtLWdpdCBhL1dl
YktpdC9jaHJvbWl1bS9zcmMvanMvRGV2VG9vbHNIb3N0U3R1Yi5qcyBiL1dlYktpdC9jaHJvbWl1
bS9zcmMvanMvRGV2VG9vbHNIb3N0U3R1Yi5qcwppbmRleCA4YjJmNDZiLi5jYWU0YTFlIDEwMDY0
NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RldlRvb2xzSG9zdFN0dWIuanMKKysrIGIv
V2ViS2l0L2Nocm9taXVtL3NyYy9qcy9EZXZUb29sc0hvc3RTdHViLmpzCkBAIC01NSw2ICs1NSwx
MSBAQCBSZW1vdGVEZWJ1Z2dlckFnZW50U3R1Yi5wcm90b3R5cGUucHJvY2Vzc0RlYnVnQ29tbWFu
ZHMgPSBmdW5jdGlvbigpCiB9OwogCiAKK1JlbW90ZURlYnVnZ2VyQWdlbnRTdHViLnByb3RvdHlw
ZS5zZXREZWJ1Z2dlclNjcmlwdFNvdXJjZSA9IGZ1bmN0aW9uKHNvdXJjZSkKK3sKK307CisKKwog
LyoqCiAgKiBAY29uc3RydWN0b3IKICAqLwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9qcy9JbnNwZWN0b3JDb250cm9sbGVySW1wbC5qcyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvanMv
SW5zcGVjdG9yQ29udHJvbGxlckltcGwuanMKaW5kZXggYzlhMzliNC4uMmNiMDkwNyAxMDA2NDQK
LS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9JbnNwZWN0b3JDb250cm9sbGVySW1wbC5qcwor
KysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0luc3BlY3RvckNvbnRyb2xsZXJJbXBsLmpzCkBA
IC04Niw2ICs4NiwyMSBAQCBkZXZ0b29scy5JbnNwZWN0b3JCYWNrZW5kSW1wbCA9IGZ1bmN0aW9u
KCkKICAgICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJ0b2dnbGVT
dHlsZUVuYWJsZWQiKTsKICAgICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdh
dGVfKCJzZXRSdWxlU2VsZWN0b3IiKTsKICAgICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250cm9s
bGVyRGVsZWdhdGVfKCJhZGRSdWxlIik7CisKKyAgICBpZiAod2luZG93LnY4U2NyaXB0RGVidWdT
ZXJ2ZXJFbmFibGVkKSB7CisgICAgdGhpcy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRlbGVn
YXRlXygiZGlzYWJsZURlYnVnZ2VyIik7CisgICAgdGhpcy5pbnN0YWxsSW5zcGVjdG9yQ29udHJv
bGxlckRlbGVnYXRlXygiZW5hYmxlRGVidWdnZXIiKTsKKyAgICB0aGlzLmluc3RhbGxJbnNwZWN0
b3JDb250cm9sbGVyRGVsZWdhdGVfKCJzZXRCcmVha3BvaW50Iik7CisgICAgdGhpcy5pbnN0YWxs
SW5zcGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygicmVtb3ZlQnJlYWtwb2ludCIpOworICAgIHRo
aXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oImFjdGl2YXRlQnJlYWtwb2lu
dHMiKTsKKyAgICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJkZWFj
dGl2YXRlQnJlYWtwb2ludHMiKTsKKyAgICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250cm9sbGVy
RGVsZWdhdGVfKCJwYXVzZUluRGVidWdnZXIiKTsKKyAgICB0aGlzLmluc3RhbGxJbnNwZWN0b3JD
b250cm9sbGVyRGVsZWdhdGVfKCJyZXN1bWVEZWJ1Z2dlciIpOworICAgIHRoaXMuaW5zdGFsbElu
c3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oInN0ZXBJbnRvU3RhdGVtZW50SW5EZWJ1Z2dlciIp
OworICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oInN0ZXBPdXRP
ZkZ1bmN0aW9uSW5EZWJ1Z2dlciIpOworICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xs
ZXJEZWxlZ2F0ZV8oInN0ZXBPdmVyU3RhdGVtZW50SW5EZWJ1Z2dlciIpOworICAgIHRoaXMuaW5z
dGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oInNldFBhdXNlT25FeGNlcHRpb25zU3Rh
dGUiKTsKKyAgICB9CiB9OwogZGV2dG9vbHMuSW5zcGVjdG9yQmFja2VuZEltcGwucHJvdG90eXBl
Ll9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5JbnNwZWN0b3JCYWNrZW5kU3R1Yi5wcm90b3R5cGU7
CiAKQEAgLTEwOCw2ICsxMjMsOCBAQCBkZXZ0b29scy5JbnNwZWN0b3JCYWNrZW5kSW1wbC5wcm90
b3R5cGUucHJvZmlsZXJFbmFibGVkID0gZnVuY3Rpb24oKQogfTsKIAogCitpZiAoIXdpbmRvdy52
OFNjcmlwdERlYnVnU2VydmVyRW5hYmxlZCkgeworCiBkZXZ0b29scy5JbnNwZWN0b3JCYWNrZW5k
SW1wbC5wcm90b3R5cGUuc2V0QnJlYWtwb2ludCA9IGZ1bmN0aW9uKHNvdXJjZUlELCBsaW5lLCBl
bmFibGVkLCBjb25kaXRpb24pCiB7CiAgICAgdGhpcy5yZW1vdmVCcmVha3BvaW50KHNvdXJjZUlE
LCBsaW5lKTsKQEAgLTE5Myw2ICsyMTAsOCBAQCBkZXZ0b29scy5JbnNwZWN0b3JCYWNrZW5kSW1w
bC5wcm90b3R5cGUuc2V0UGF1c2VPbkV4Y2VwdGlvbnMgPSBmdW5jdGlvbih2YWx1ZSkKICAgICBy
ZXR1cm4gZGV2dG9vbHMudG9vbHMuZ2V0RGVidWdnZXJBZ2VudCgpLnNldFBhdXNlT25FeGNlcHRp
b25zKHZhbHVlKTsKIH07CiAKK30KKwogCiAvKioKICAqIEBvdmVycmlkZQo=
</data>
<flag name="review"
          id="37194"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
      

    </bug>

</bugzilla>