<?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>95456</bug_id>
          
          <creation_ts>2012-08-30 07:12:53 -0700</creation_ts>
          <short_desc>Web Inspector: render box model elements and grid on inspector overlay</short_desc>
          <delta_ts>2012-08-31 02:35:38 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>0</everconfirmed>
          <reporter name="Pavel Feldman">pfeldman</reporter>
          <assigned_to name="Pavel Feldman">pfeldman</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>dglazkov</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>peter+ews</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>708590</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-08-30 07:12:53 -0700</bug_when>
    <thetext>This change migrates native rendering for box model to the InspectorOverlay.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708598</commentid>
    <comment_count>1</comment_count>
      <attachid>161464</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-08-30 07:27:10 -0700</bug_when>
    <thetext>Created attachment 161464
[IMAGE] with patch applied</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708599</commentid>
    <comment_count>2</comment_count>
      <attachid>161465</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-08-30 07:27:35 -0700</bug_when>
    <thetext>Created attachment 161465
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708606</commentid>
    <comment_count>3</comment_count>
      <attachid>161465</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2012-08-30 07:41:46 -0700</bug_when>
    <thetext>Comment on attachment 161465
Patch

Attachment 161465 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/13681701</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708610</commentid>
    <comment_count>4</comment_count>
      <attachid>161465</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-08-30 07:44:29 -0700</bug_when>
    <thetext>Comment on attachment 161465
Patch

Attachment 161465 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/13684716</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708632</commentid>
    <comment_count>5</comment_count>
      <attachid>161473</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-08-30 08:11:49 -0700</bug_when>
    <thetext>Created attachment 161473
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708641</commentid>
    <comment_count>6</comment_count>
      <attachid>161473</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-08-30 08:26:25 -0700</bug_when>
    <thetext>Comment on attachment 161473
Patch

Attachment 161473 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/13688768</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708649</commentid>
    <comment_count>7</comment_count>
      <attachid>161473</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2012-08-30 08:34:42 -0700</bug_when>
    <thetext>Comment on attachment 161473
Patch

Attachment 161473 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/13684726</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708682</commentid>
    <comment_count>8</comment_count>
      <attachid>161484</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-08-30 08:56:19 -0700</bug_when>
    <thetext>Created attachment 161484
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708699</commentid>
    <comment_count>9</comment_count>
      <attachid>161484</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2012-08-30 09:15:39 -0700</bug_when>
    <thetext>Comment on attachment 161484
Patch

Attachment 161484 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/13688779</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709374</commentid>
    <comment_count>10</comment_count>
      <attachid>161484</attachid>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2012-08-31 01:29:00 -0700</bug_when>
    <thetext>Comment on attachment 161484
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=161484&amp;action=review

&gt; Source/WebCore/inspector/InspectorOverlay.cpp:48
&gt; +#include &quot;RenderView.h&quot;

Not needed ?

&gt; Source/WebCore/inspector/InspectorOverlay.cpp:393
&gt;  {

Maybe 
if (m_pausedInDebuggerMessage.isEmpty())
    return
?

&gt; Source/WebCore/inspector/InspectorOverlay.cpp:425
&gt; +#if OS(WINDOWS)

Move this checks in InspectorOverlayPage.html ?

&gt; Source/WebCore/inspector/InspectorOverlay.cpp:426
&gt; +overlaySettings-&gt;setDefaultFontSize(12);

indent

&gt; Source/WebCore/inspector/InspectorOverlay.h:34
&gt; +#include &quot;InspectorValues.h&quot;

is that needed?

&gt; Source/WebCore/inspector/InspectorOverlayPage.html:84
&gt; +function takeLast(array)

array.pop()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709380</commentid>
    <comment_count>11</comment_count>
      <attachid>161637</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-08-31 01:36:16 -0700</bug_when>
    <thetext>Created attachment 161637
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709381</commentid>
    <comment_count>12</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-08-31 01:36:58 -0700</bug_when>
    <thetext>&gt; Not needed ?
&gt; 

Done.

&gt; Maybe 
&gt; if (m_pausedInDebuggerMessage.isEmpty())
&gt;     return

Done.

&gt; &gt; Source/WebCore/inspector/InspectorOverlay.cpp:425
&gt; &gt; +#if OS(WINDOWS)
&gt; 
&gt; Move this checks in InspectorOverlayPage.html ?

Done.

&gt; 
&gt; &gt; Source/WebCore/inspector/InspectorOverlay.cpp:426
&gt; &gt; +overlaySettings-&gt;setDefaultFontSize(12);
&gt; 
&gt; indent

Done.

&gt; 
&gt; &gt; Source/WebCore/inspector/InspectorOverlay.h:34
&gt; &gt; +#include &quot;InspectorValues.h&quot;
&gt; 
&gt; is that needed?

Done.

&gt; 
&gt; &gt; Source/WebCore/inspector/InspectorOverlayPage.html:84
&gt; &gt; +function takeLast(array)
&gt; 
&gt; array.pop()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709387</commentid>
    <comment_count>13</comment_count>
      <attachid>161637</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2012-08-31 01:48:25 -0700</bug_when>
    <thetext>Comment on attachment 161637
Patch

Attachment 161637 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/13722071</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709390</commentid>
    <comment_count>14</comment_count>
      <attachid>161639</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-08-31 01:54:21 -0700</bug_when>
    <thetext>Created attachment 161639
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709421</commentid>
    <comment_count>15</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-08-31 02:35:38 -0700</bug_when>
    <thetext>Committed r127240: &lt;http://trac.webkit.org/changeset/127240&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>161464</attachid>
            <date>2012-08-30 07:27:10 -0700</date>
            <delta_ts>2012-08-30 07:27:10 -0700</delta_ts>
            <desc>[IMAGE] with patch applied</desc>
            <filename>grid.png</filename>
            <type>image/png</type>
            <size>122442</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">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
TkSuQmCC
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161465</attachid>
            <date>2012-08-30 07:27:35 -0700</date>
            <delta_ts>2012-08-30 08:11:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95456-20120830182723.patch</filename>
            <type>text/plain</type>
            <size>47126</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3MTEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGEwNTlhMmNiNjZmZWJl
NjZmNjY3NmI1ZTlhZWY2M2MxZmRlYjM4My4uNGQxYjlkZGI2YTA4Yjk4NTM2OGI5ZjdkZDUyYWUz
YTY4NDI5OTIwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDEyLTA4LTMwICBQYXZl
bCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IHJlbmRlciBib3ggbW9kZWwgZWxlbWVudHMgYW5kIGdyaWQgb24gaW5zcGVjdG9yIG92ZXJs
YXkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NDU2
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBj
aGFuZ2UgbWlncmF0ZXMgbmF0aXZlIHJlbmRlcmluZyBmb3IgYm94IG1vZGVsIHRvIHRoZSBJbnNw
ZWN0b3JPdmVybGF5LgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRh
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6ZGlkU2Nyb2xsSW1wbCk6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3Rvckluc3RydW1lbnRhdGlvbi5oOgorICAgICAgICAoSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkU2Ny
b2xsKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JP
dmVybGF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmRyYXdOb2Rl
SGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmRyYXdSZWN0
SGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6Om92ZXJsYXlQ
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmV2YWx1YXRlSW5PdmVy
bGF5KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5oOgorICAgICAgICAo
V2ViQ29yZTo6SGlnaGxpZ2h0OjpzZXRDb2xvcnMpOgorICAgICAgICAoSGlnaGxpZ2h0KToKKyAg
ICAgICAgKEluc3BlY3Rvck92ZXJsYXkpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JP
dmVybGF5UGFnZS5odG1sOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpkaWRMYXlvdXQpOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6
OmRpZFNjcm9sbCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oOgor
ICAgICAgICAqIHBhZ2UvQ2hyb21lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZTo6c2Ny
b2xsKToKKwogMjAxMi0wOC0zMCAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9y
Zz4KIAogICAgICAgICBCdWlsZCBmaXggZm9yIFdpbkNFIGFmdGVyIHIxMjY5NzQuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3Bw
CmluZGV4IGFmNDQ3MjhjNjQ2MTAwOGJhZjM5NDdmM2RiNjk3ZjYyNGZhNmM2ZTcuLjQxYjdiYzgx
YWRlZGEwYWU4ODFlYmU5NmVlZjdkMDdlNjNkMTQ5YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwCkBAIC0yNDksNiAr
MjQ5LDEyIEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjptb3VzZURpZE1vdmVPdmVy
RWxlbWVudEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyoKICAgICAgICAgZG9tQWdlbnQtPm1vdXNl
RGlkTW92ZU92ZXJFbGVtZW50KHJlc3VsdCwgbW9kaWZpZXJGbGFncyk7CiB9CiAKK3ZvaWQgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRTY3JvbGxJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMq
IGluc3RydW1lbnRpbmdBZ2VudHMpCit7CisgICAgaWYgKEluc3BlY3RvclBhZ2VBZ2VudCogcGFn
ZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yUGFnZUFnZW50KCkpCisgICAg
ICAgIHBhZ2VBZ2VudC0+ZGlkU2Nyb2xsKCk7Cit9CisKIGJvb2wgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpoYW5kbGVNb3VzZVByZXNzSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVt
ZW50aW5nQWdlbnRzKQogewogICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBp
bnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JET01BZ2VudCgpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oCmluZGV4IGRiMzM1
YmZhZjQ1MGNjMzE4Y2JjZTRkZjYxODExMjdkZDI1NGY1YzguLjBjYzBjYzIxYzA0ZjM0ZDE1N2Q2
MDljZTc4ZWQ1OWQyNjNmYzZmYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgKQEAgLTE0NSw2ICsxNDUsNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIHZvaWQgZGlkSW52YWxpZGF0ZUxheW91dChGcmFtZSopOwogICAgIHN0YXRp
YyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2lsbExheW91dChGcmFtZSopOwogICAg
IHN0YXRpYyB2b2lkIGRpZExheW91dChjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29r
aWUmKTsKKyAgICBzdGF0aWMgdm9pZCBkaWRTY3JvbGwoUGFnZSopOwogICAgIHN0YXRpYyBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2lsbExvYWRYSFIoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFhNTEh0dHBSZXF1ZXN0Kik7CiAgICAgc3RhdGljIHZvaWQgZGlkTG9hZFhIUihjb25z
dCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUmKTsKICAgICBzdGF0aWMgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uQ29va2llIHdpbGxQYWludChGcmFtZSosIEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IExheW91dFJlY3QmKTsKQEAgLTMyMSw2ICszMjIsNyBAQCBwcml2YXRlOgogICAgIHN0
YXRpYyB2b2lkIGRpZEludmFsaWRhdGVMYXlvdXRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqLCBG
cmFtZSopOwogICAgIHN0YXRpYyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2lsbExh
eW91dEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIEZyYW1lKik7CiAgICAgc3RhdGljIHZvaWQg
ZGlkTGF5b3V0SW1wbChjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUmKTsKKyAg
ICBzdGF0aWMgdm9pZCBkaWRTY3JvbGxJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqKTsKICAgICBz
dGF0aWMgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIHdpbGxMb2FkWEhSSW1wbChJbnN0
cnVtZW50aW5nQWdlbnRzKiwgWE1MSHR0cFJlcXVlc3QqLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
Kik7CiAgICAgc3RhdGljIHZvaWQgZGlkTG9hZFhIUkltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uQ29va2llJik7CiAgICAgc3RhdGljIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNv
b2tpZSB3aWxsUGFpbnRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqLCBHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBMYXlvdXRSZWN0JiwgRnJhbWUqKTsKQEAgLTg0MCw2ICs4NDIsMTUgQEAgaW5saW5l
IHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRMYXlvdXQoY29uc3QgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uQ28KICNlbmRpZgogfQogCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmRpZFNjcm9sbChQYWdlKiBwYWdlKQoreworI2lmIEVOQUJMRShJTlNQRUNU
T1IpCisgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7CisgICAgaWYgKElu
c3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdl
bnRzRm9yUGFnZShwYWdlKSkKKyAgICAgICAgZGlkU2Nyb2xsSW1wbChpbnN0cnVtZW50aW5nQWdl
bnRzKTsKKyNlbmRpZgorfQorCiBpbmxpbmUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2ll
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbExvYWRYSFIoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgWE1MSHR0cFJlcXVlc3QqIHJlcXVlc3QpCiB7CiAjaWYgRU5BQkxFKElO
U1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JP
dmVybGF5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNw
cAppbmRleCA2OTllYjRiODAzZTdiY2VhZmU2NzAwMzZhYzRkYWM2MGE0YTM2YWM3Li5kNzg3YTc0
Y2M0MTk0OGQ1MTQ4ZmFhOWY5MjhiZmUwOTM2NmJmMjdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwCkBAIC0zNSw0NyArMzUsMjYgQEAKICNpbmNs
dWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJF
bXB0eUNsaWVudHMuaCIKLSNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiRm9udENhY2hlLmgi
Ci0jaW5jbHVkZSAiRm9udEZhbWlseS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAi
RnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3Jh
cGhpY3NUeXBlcy5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudC5oIgogI2luY2x1ZGUgIklu
c3BlY3Rvck92ZXJsYXlQYWdlLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiAjaW5j
bHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJSYW5nZS5oIgogI2lu
Y2x1ZGUgIlJlbmRlckJveE1vZGVsT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgi
CiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2lu
Y2x1ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIKICNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgogI2lu
Y2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU3R5bGVkRWxlbWVudC5oIgotI2luY2x1ZGUg
IlRleHRSdW4uaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIHsKIAotI2lmIE9TKFdJTkRPV1MpCi1zdGF0aWMg
Y29uc3QgdW5zaWduZWQgZm9udEhlaWdodFB4ID0gMTI7Ci0jZWxpZiBPUyhNQUNfT1NfWCkgfHwg
T1MoVU5JWCkKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBmb250SGVpZ2h0UHggPSAxMTsKLSNlbmRp
ZgotCi1jb25zdCBzdGF0aWMgaW50IHJlY3RJbmZsYXRlUHggPSA0OwotY29uc3Qgc3RhdGljIGlu
dCBib3JkZXJXaWR0aFB4ID0gMTsKLWNvbnN0IHN0YXRpYyBpbnQgdG9vbHRpcFBhZGRpbmcgPSA0
OwotCi1jb25zdCBzdGF0aWMgaW50IGFycm93VGlwT2Zmc2V0ID0gMjA7Ci1jb25zdCBzdGF0aWMg
ZmxvYXQgYXJyb3dIZWlnaHQgPSA3OwotY29uc3Qgc3RhdGljIGZsb2F0IGFycm93SGFsZldpZHRo
ID0gNzsKLQogUGF0aCBxdWFkVG9QYXRoKGNvbnN0IEZsb2F0UXVhZCYgcXVhZCkKIHsKICAgICBQ
YXRoIHF1YWRQYXRoOwpAQCAtMTExLDI1NiArOTAsNiBAQCB2b2lkIGRyYXdPdXRsaW5lZFF1YWQo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFF1YWQmIHF1YWQsIGNvbnN0IENv
bAogICAgIGNvbnRleHQtPmZpbGxQYXRoKHF1YWRQYXRoKTsKIH0KIAotdm9pZCBkcmF3T3V0bGlu
ZWRRdWFkV2l0aENsaXAoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFF1YWQm
IHF1YWQsIGNvbnN0IEZsb2F0UXVhZCYgY2xpcFF1YWQsIGNvbnN0IENvbG9yJiBmaWxsQ29sb3Ip
Ci17Ci0gICAgY29udGV4dC0+c2F2ZSgpOwotICAgIFBhdGggY2xpcFF1YWRQYXRoID0gcXVhZFRv
UGF0aChjbGlwUXVhZCk7Ci0gICAgY29udGV4dC0+Y2xpcE91dChjbGlwUXVhZFBhdGgpOwotICAg
IGRyYXdPdXRsaW5lZFF1YWQoY29udGV4dCwgcXVhZCwgZmlsbENvbG9yLCBDb2xvcjo6dHJhbnNw
YXJlbnQpOwotICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKLX0KLQotdm9pZCBkcmF3SGlnaGxpZ2h0
Rm9yQm94KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRRdWFkJiBjb250ZW50
UXVhZCwgY29uc3QgRmxvYXRRdWFkJiBwYWRkaW5nUXVhZCwgY29uc3QgRmxvYXRRdWFkJiBib3Jk
ZXJRdWFkLCBjb25zdCBGbG9hdFF1YWQmIG1hcmdpblF1YWQsIGNvbnN0IEhpZ2hsaWdodENvbmZp
ZyYgaGlnaGxpZ2h0Q29uZmlnKQotewotICAgIGJvb2wgaGFzTWFyZ2luID0gaGlnaGxpZ2h0Q29u
ZmlnLm1hcmdpbiAhPSBDb2xvcjo6dHJhbnNwYXJlbnQ7Ci0gICAgYm9vbCBoYXNCb3JkZXIgPSBo
aWdobGlnaHRDb25maWcuYm9yZGVyICE9IENvbG9yOjp0cmFuc3BhcmVudDsKLSAgICBib29sIGhh
c1BhZGRpbmcgPSBoaWdobGlnaHRDb25maWcucGFkZGluZyAhPSBDb2xvcjo6dHJhbnNwYXJlbnQ7
Ci0gICAgYm9vbCBoYXNDb250ZW50ID0gaGlnaGxpZ2h0Q29uZmlnLmNvbnRlbnQgIT0gQ29sb3I6
OnRyYW5zcGFyZW50IHx8IGhpZ2hsaWdodENvbmZpZy5jb250ZW50T3V0bGluZSAhPSBDb2xvcjo6
dHJhbnNwYXJlbnQ7Ci0KLSAgICBGbG9hdFF1YWQgY2xpcFF1YWQ7Ci0gICAgQ29sb3IgY2xpcENv
bG9yOwotICAgIGlmIChoYXNNYXJnaW4gJiYgKCFoYXNCb3JkZXIgfHwgbWFyZ2luUXVhZCAhPSBi
b3JkZXJRdWFkKSkgewotICAgICAgICBkcmF3T3V0bGluZWRRdWFkV2l0aENsaXAoY29udGV4dCwg
bWFyZ2luUXVhZCwgYm9yZGVyUXVhZCwgaGlnaGxpZ2h0Q29uZmlnLm1hcmdpbik7Ci0gICAgICAg
IGNsaXBRdWFkID0gYm9yZGVyUXVhZDsKLSAgICB9Ci0gICAgaWYgKGhhc0JvcmRlciAmJiAoIWhh
c1BhZGRpbmcgfHwgYm9yZGVyUXVhZCAhPSBwYWRkaW5nUXVhZCkpIHsKLSAgICAgICAgZHJhd091
dGxpbmVkUXVhZFdpdGhDbGlwKGNvbnRleHQsIGJvcmRlclF1YWQsIHBhZGRpbmdRdWFkLCBoaWdo
bGlnaHRDb25maWcuYm9yZGVyKTsKLSAgICAgICAgY2xpcFF1YWQgPSBwYWRkaW5nUXVhZDsKLSAg
ICB9Ci0gICAgaWYgKGhhc1BhZGRpbmcgJiYgKCFoYXNDb250ZW50IHx8IHBhZGRpbmdRdWFkICE9
IGNvbnRlbnRRdWFkKSkgewotICAgICAgICBkcmF3T3V0bGluZWRRdWFkV2l0aENsaXAoY29udGV4
dCwgcGFkZGluZ1F1YWQsIGNvbnRlbnRRdWFkLCBoaWdobGlnaHRDb25maWcucGFkZGluZyk7Ci0g
ICAgICAgIGNsaXBRdWFkID0gY29udGVudFF1YWQ7Ci0gICAgfQotICAgIGlmIChoYXNDb250ZW50
KQotICAgICAgICBkcmF3T3V0bGluZWRRdWFkKGNvbnRleHQsIGNvbnRlbnRRdWFkLCBoaWdobGln
aHRDb25maWcuY29udGVudCwgaGlnaGxpZ2h0Q29uZmlnLmNvbnRlbnRPdXRsaW5lKTsKLX0KLQot
dm9pZCBkcmF3SGlnaGxpZ2h0Rm9yU1ZHUmVuZGVyZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBWZWN0b3I8RmxvYXRRdWFkPiYgYWJzb2x1dGVRdWFkcywgY29uc3QgSGlnaGxpZ2h0
Q29uZmlnJiBoaWdobGlnaHRDb25maWcpCi17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBh
YnNvbHV0ZVF1YWRzLnNpemUoKTsgKytpKQotICAgICAgICBkcmF3T3V0bGluZWRRdWFkKGNvbnRl
eHQsIGFic29sdXRlUXVhZHNbaV0sIGhpZ2hsaWdodENvbmZpZy5jb250ZW50LCBDb2xvcjo6dHJh
bnNwYXJlbnQpOwotfQotCi1pbnQgZHJhd1N1YnN0cmluZyhjb25zdCBUZXh0UnVuJiBnbG9iYWxU
ZXh0UnVuLCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoLCBjb25zdCBDb2xvciYgdGV4dENvbG9yLCBj
b25zdCBGb250JiBmb250LCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheW91dFJl
Y3QmIHRpdGxlUmVjdCkKLXsKLSAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IodGV4dENvbG9yLCBD
b2xvclNwYWNlRGV2aWNlUkdCKTsKLSAgICBjb250ZXh0LT5kcmF3VGV4dChmb250LCBnbG9iYWxU
ZXh0UnVuLCBJbnRQb2ludCh0aXRsZVJlY3QucGl4ZWxTbmFwcGVkWCgpICsgcmVjdEluZmxhdGVQ
eCwgdGl0bGVSZWN0LnBpeGVsU25hcHBlZFkoKSArIGZvbnQuZm9udE1ldHJpY3MoKS5oZWlnaHQo
KSksIG9mZnNldCwgb2Zmc2V0ICsgbGVuZ3RoKTsKLSAgICByZXR1cm4gb2Zmc2V0ICsgbGVuZ3Ro
OwotfQotCi1mbG9hdCBjYWxjdWxhdGVBcnJvd1RpcFgoY29uc3QgTGF5b3V0UmVjdCYgYW5jaG9y
Qm94LCBjb25zdCBMYXlvdXRSZWN0JiB0aXRsZVJlY3QpCi17Ci0gICAgY29uc3Qgc3RhdGljIGlu
dCBhbmNob3JUaXBPZmZzZXRQeCA9IDI7Ci0KLSAgICBpbnQgbWluWCA9IHRpdGxlUmVjdC54KCkg
KyBhcnJvd0hhbGZXaWR0aDsKLSAgICBpbnQgbWF4WCA9IHRpdGxlUmVjdC5tYXhYKCkgLSBhcnJv
d0hhbGZXaWR0aDsKLSAgICBpbnQgYW5jaG9yWCA9IGFuY2hvckJveC54KCk7Ci0gICAgaW50IGFu
Y2hvck1heFggPSBhbmNob3JCb3gubWF4WCgpOwotCi0gICAgaW50IHggPSB0aXRsZVJlY3QueCgp
ICsgYXJyb3dUaXBPZmZzZXQ7IC8vIERlZmF1bHQgdG9vbHRpcCBwb3NpdGlvbi4KLSAgICBpZiAo
eCA8IGFuY2hvclgpCi0gICAgICAgIHggPSBhbmNob3JYICsgYW5jaG9yVGlwT2Zmc2V0UHg7Ci0g
ICAgZWxzZSBpZiAoeCA+IGFuY2hvck1heFgpCi0gICAgICAgIHggPSBhbmNob3JNYXhYIC0gYW5j
aG9yVGlwT2Zmc2V0UHg7Ci0KLSAgICBpZiAoeCA8IG1pblgpCi0gICAgICAgIHggPSBtaW5YOwot
ICAgIGVsc2UgaWYgKHggPiBtYXhYKQotICAgICAgICB4ID0gbWF4WDsKLQotICAgIHJldHVybiB4
OwotfQotCi12b2lkIHNldFVwRm9udERlc2NyaXB0aW9uKEZvbnREZXNjcmlwdGlvbiYgZm9udERl
c2NyaXB0aW9uLCBXZWJDb3JlOjpTZXR0aW5ncyogc2V0dGluZ3MpCi17Ci0jZGVmaW5lIFRPT0xU
SVBfRk9OVF9GQU1JTElFUyhzaXplLCAuLi4pIFwKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCB0b29s
dGlwRm9udEZhY2VTaXplID0gc2l6ZTtcCi1zdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nKiB0b29s
dGlwRm9udEZhY2Vbc2l6ZV0gPSB7IF9fVkFfQVJHU19fIH07Ci0KLSNpZiBPUyhXSU5ET1dTKQot
VE9PTFRJUF9GT05UX0ZBTUlMSUVTKDIsIG5ldyBBdG9taWNTdHJpbmcoIkNvbnNvbGFzIiksIG5l
dyBBdG9taWNTdHJpbmcoIkx1Y2lkYSBDb25zb2xlIikpCi0jZWxpZiBPUyhNQUNfT1NfWCkKLVRP
T0xUSVBfRk9OVF9GQU1JTElFUygyLCBuZXcgQXRvbWljU3RyaW5nKCJNZW5sbyIpLCBuZXcgQXRv
bWljU3RyaW5nKCJNb25hY28iKSkKLSNlbGlmIE9TKFVOSVgpCi1UT09MVElQX0ZPTlRfRkFNSUxJ
RVMoMSwgbmV3IEF0b21pY1N0cmluZygiZGVqYXZ1IHNhbnMgbW9ubyIpKQotI2VuZGlmCi0vLyBJ
biB0aGUgZGVmYXVsdCBjYXNlLCB3ZSBnZXQgdGhlIHNldHRpbmdzLXByb3ZpZGVkIG1vbm9zcGFj
ZSBmb250LgotCi0jdW5kZWYgVE9PTFRJUF9GT05UX0ZBTUlMSUVTCi0KLSAgICBmb250RGVzY3Jp
cHRpb24uc2V0UmVuZGVyaW5nTW9kZShzZXR0aW5ncy0+Zm9udFJlbmRlcmluZ01vZGUoKSk7Ci0g
ICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShmb250SGVpZ2h0UHgpOwotCi0gICAg
Y29uc3QgQXRvbWljU3RyaW5nJiBmaXhlZEZvbnRGYW1pbHkgPSBzZXR0aW5ncy0+Zml4ZWRGb250
RmFtaWx5KCk7Ci0gICAgaWYgKCFmaXhlZEZvbnRGYW1pbHkuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6TW9ub3Nw
YWNlRmFtaWx5KTsKLSAgICAgICAgRm9udEZhbWlseSogY3VycmVudEZhbWlseSA9IDA7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b29sdGlwRm9udEZhY2VTaXplOyArK2kpIHsK
LSAgICAgICAgICAgIGlmICghY3VycmVudEZhbWlseSkgewotICAgICAgICAgICAgICAgIGZvbnRE
ZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpLnNldEZhbWlseSgqdG9vbHRpcEZvbnRGYWNlW2ldKTsK
LSAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKS5hcHBlbmRGYW1p
bHkoMCk7Ci0gICAgICAgICAgICAgICAgY3VycmVudEZhbWlseSA9ICZmb250RGVzY3JpcHRpb24u
Zmlyc3RGYW1pbHkoKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgUmVm
UHRyPFNoYXJlZEZvbnRGYW1pbHk+IG5ld0ZhbWlseSA9IFNoYXJlZEZvbnRGYW1pbHk6OmNyZWF0
ZSgpOwotICAgICAgICAgICAgICAgIG5ld0ZhbWlseS0+c2V0RmFtaWx5KCp0b29sdGlwRm9udEZh
Y2VbaV0pOwotICAgICAgICAgICAgICAgIGN1cnJlbnRGYW1pbHktPmFwcGVuZEZhbWlseShuZXdG
YW1pbHkpOwotICAgICAgICAgICAgICAgIGN1cnJlbnRGYW1pbHkgPSBuZXdGYW1pbHkuZ2V0KCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgUmVmUHRyPFNoYXJlZEZvbnRGYW1p
bHk+IG5ld0ZhbWlseSA9IFNoYXJlZEZvbnRGYW1pbHk6OmNyZWF0ZSgpOwotICAgICAgICBuZXdG
YW1pbHktPnNldEZhbWlseShmaXhlZEZvbnRGYW1pbHkpOwotICAgICAgICBjdXJyZW50RmFtaWx5
LT5hcHBlbmRGYW1pbHkobmV3RmFtaWx5KTsKLSAgICAgICAgY3VycmVudEZhbWlseSA9IG5ld0Zh
bWlseS5nZXQoKTsKLSAgICB9Ci19Ci0KLXZvaWQgZHJhd0VsZW1lbnRUaXRsZShHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIE5vZGUqIG5vZGUsIFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0
IEludFJlY3QmIGJvdW5kaW5nQm94LCBjb25zdCBJbnRSZWN0JiBhbmNob3JCb3gsIGNvbnN0IEZs
b2F0UmVjdCYgdmlzaWJsZVJlY3QsIFdlYkNvcmU6OlNldHRpbmdzKiBzZXR0aW5ncykKLXsKLSAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKENvbG9yLCBiYWNrZ3JvdW5kQ29sb3IsICgyNTUsIDI1NSwg
MTk0KSk7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChDb2xvciwgdGFnQ29sb3IsICgxMzYsIDE4
LCAxMjgpKTsgLy8gU2FtZSBhcyAud2Via2l0LWh0bWwtdGFnLgotICAgIERFRklORV9TVEFUSUNf
TE9DQUwoQ29sb3IsIGF0dHJDb2xvciwgKDI2LCAyNiwgMTY2KSk7IC8vIFNhbWUgYXMgLndlYmtp
dC1odG1sLWF0dHJpYnV0ZS12YWx1ZS4KLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKENvbG9yLCBu
b3JtYWxDb2xvciwgKENvbG9yOjpibGFjaykpOwotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ29s
b3IsIHB4QW5kQm9yZGVyQ29sb3IsICgxMjgsIDEyOCwgMTI4KSk7Ci0KLSAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKFN0cmluZywgcHhTdHJpbmcsIChBU0NJSUxpdGVyYWwoInB4IikpKTsKLSAgICBj
b25zdCBzdGF0aWMgVUNoYXIgdGltZXNVQ2hhcltdID0geyAweDAwMjAsIDB4MDBENywgMHgwMDIw
LCAwIH07Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHRpbWVzU3RyaW5nLCAodGlt
ZXNVQ2hhcikpOyAvLyAmdGltZXM7IHN0cmluZwotCi0gICAgRm9udENhY2hlUHVyZ2VQcmV2ZW50
ZXIgZm9udENhY2hlUHVyZ2VQcmV2ZW50ZXI7Ci0KLSAgICBFbGVtZW50KiBlbGVtZW50ID0gc3Rh
dGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpOwotICAgIGJvb2wgaXNYSFRNTCA9IGVsZW1lbnQtPmRv
Y3VtZW50KCktPmlzWEhUTUxEb2N1bWVudCgpOwotICAgIFN0cmluZ0J1aWxkZXIgbm9kZVRpdGxl
OwotICAgIG5vZGVUaXRsZS5hcHBlbmQoaXNYSFRNTCA/IGVsZW1lbnQtPm5vZGVOYW1lKCkgOiBl
bGVtZW50LT5ub2RlTmFtZSgpLmxvd2VyKCkpOwotICAgIHVuc2lnbmVkIHRhZ05hbWVMZW5ndGgg
PSBub2RlVGl0bGUubGVuZ3RoKCk7Ci0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkVmFsdWUg
PSBlbGVtZW50LT5nZXRJZEF0dHJpYnV0ZSgpOwotICAgIHVuc2lnbmVkIGlkU3RyaW5nTGVuZ3Ro
ID0gMDsKLSAgICBTdHJpbmcgaWRTdHJpbmc7Ci0gICAgaWYgKCFpZFZhbHVlLmlzTnVsbCgpICYm
ICFpZFZhbHVlLmlzRW1wdHkoKSkgewotICAgICAgICBub2RlVGl0bGUuYXBwZW5kKCIjIik7Ci0g
ICAgICAgIG5vZGVUaXRsZS5hcHBlbmQoaWRWYWx1ZSk7Ci0gICAgICAgIGlkU3RyaW5nTGVuZ3Ro
ID0gMSArIGlkVmFsdWUubGVuZ3RoKCk7Ci0gICAgfQotCi0gICAgSGFzaFNldDxBdG9taWNTdHJp
bmc+IHVzZWRDbGFzc05hbWVzOwotICAgIHVuc2lnbmVkIGNsYXNzZXNTdHJpbmdMZW5ndGggPSAw
OwotICAgIGlmIChlbGVtZW50LT5oYXNDbGFzcygpICYmIGVsZW1lbnQtPmlzU3R5bGVkRWxlbWVu
dCgpKSB7Ci0gICAgICAgIGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIGNsYXNzTmFtZXNTdHJpbmcg
PSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4oZWxlbWVudCktPmNsYXNzTmFtZXMoKTsKLSAg
ICAgICAgc2l6ZV90IGNsYXNzTmFtZUNvdW50ID0gY2xhc3NOYW1lc1N0cmluZy5zaXplKCk7Ci0g
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2xhc3NOYW1lQ291bnQ7ICsraSkgewotICAg
ICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBjbGFzc05hbWUgPSBjbGFzc05hbWVzU3RyaW5n
W2ldOwotICAgICAgICAgICAgaWYgKHVzZWRDbGFzc05hbWVzLmNvbnRhaW5zKGNsYXNzTmFtZSkp
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB1c2VkQ2xhc3NOYW1lcy5h
ZGQoY2xhc3NOYW1lKTsKLSAgICAgICAgICAgIG5vZGVUaXRsZS5hcHBlbmQoIi4iKTsKLSAgICAg
ICAgICAgIG5vZGVUaXRsZS5hcHBlbmQoY2xhc3NOYW1lKTsKLSAgICAgICAgICAgIGNsYXNzZXNT
dHJpbmdMZW5ndGggKz0gMSArIGNsYXNzTmFtZS5sZW5ndGgoKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBtb2RlbE9iamVjdCA9IHJlbmRlcmVyLT5pc0Jv
eE1vZGVsT2JqZWN0KCkgPyB0b1JlbmRlckJveE1vZGVsT2JqZWN0KHJlbmRlcmVyKSA6IDA7Ci0K
LSAgICBTdHJpbmcgd2lkdGhOdW1iZXJQYXJ0ID0gIiAiICsgU3RyaW5nOjpudW1iZXIobW9kZWxP
YmplY3QgPyBhZGp1c3RGb3JBYnNvbHV0ZVpvb20obW9kZWxPYmplY3QtPnBpeGVsU25hcHBlZE9m
ZnNldFdpZHRoKCksIG1vZGVsT2JqZWN0KSA6IGJvdW5kaW5nQm94LndpZHRoKCkpOwotICAgIG5v
ZGVUaXRsZS5hcHBlbmQod2lkdGhOdW1iZXJQYXJ0KTsKLSAgICBub2RlVGl0bGUuYXBwZW5kKHB4
U3RyaW5nKTsKLSAgICBub2RlVGl0bGUuYXBwZW5kKHRpbWVzU3RyaW5nKTsKLSAgICBTdHJpbmcg
aGVpZ2h0TnVtYmVyUGFydCA9IFN0cmluZzo6bnVtYmVyKG1vZGVsT2JqZWN0ID8gYWRqdXN0Rm9y
QWJzb2x1dGVab29tKG1vZGVsT2JqZWN0LT5waXhlbFNuYXBwZWRPZmZzZXRIZWlnaHQoKSwgbW9k
ZWxPYmplY3QpIDogYm91bmRpbmdCb3guaGVpZ2h0KCkpOwotICAgIG5vZGVUaXRsZS5hcHBlbmQo
aGVpZ2h0TnVtYmVyUGFydCk7Ci0gICAgbm9kZVRpdGxlLmFwcGVuZChweFN0cmluZyk7Ci0KLSAg
ICBGb250RGVzY3JpcHRpb24gZGVzYzsKLSAgICBzZXRVcEZvbnREZXNjcmlwdGlvbihkZXNjLCBz
ZXR0aW5ncyk7Ci0gICAgRm9udCBmb250ID0gRm9udChkZXNjLCAwLCAwKTsKLSAgICBmb250LnVw
ZGF0ZSgwKTsKLQotICAgIFRleHRSdW4gbm9kZVRpdGxlUnVuKG5vZGVUaXRsZS50b1N0cmluZygp
KTsKLSAgICBJbnRQb2ludCB0aXRsZUJhc2VQb2ludCA9IEludFBvaW50KGFuY2hvckJveC54KCks
IGFuY2hvckJveC5tYXhZKCkgLSAxKTsKLSAgICB0aXRsZUJhc2VQb2ludC5tb3ZlKHJlY3RJbmZs
YXRlUHgsIHJlY3RJbmZsYXRlUHgpOwotICAgIEludFJlY3QgdGl0bGVSZWN0ID0gZW5jbG9zaW5n
SW50UmVjdChmb250LnNlbGVjdGlvblJlY3RGb3JUZXh0KG5vZGVUaXRsZVJ1biwgdGl0bGVCYXNl
UG9pbnQsIGZvbnRIZWlnaHRQeCkpOwotICAgIHRpdGxlUmVjdC5pbmZsYXRlKHJlY3RJbmZsYXRl
UHgpOwotCi0gICAgLy8gVGhlIGluaXRpYWwgb2Zmc2V0cyBuZWVkZWQgdG8gY29tcGVuc2F0ZSBm
b3IgYSAxcHgtdGhpY2sgYm9yZGVyIHN0cm9rZSAod2hpY2ggaXMgbm90IGEgcGFydCBvZiB0aGUg
cmVjdGFuZ2xlKS4KLSAgICBpbnQgZHggPSAtYm9yZGVyV2lkdGhQeDsKLSAgICBpbnQgZHkgPSBi
b3JkZXJXaWR0aFB4OwotCi0gICAgLy8gSWYgdGhlIHRpcCBzdGlja3MgYmV5b25kIHRoZSByaWdo
dCBvZiB2aXNpYmxlUmVjdCwgcmlnaHQtYWxpZ24gdGhlIHRpcCB3aXRoIHRoZSBzYWlkIGJvdW5k
YXJ5LgotICAgIGlmICh0aXRsZVJlY3QubWF4WCgpICsgZHggPiB2aXNpYmxlUmVjdC5tYXhYKCkp
Ci0gICAgICAgIGR4ID0gdmlzaWJsZVJlY3QubWF4WCgpIC0gdGl0bGVSZWN0Lm1heFgoKTsKLQot
ICAgIC8vIElmIHRoZSB0aXAgc3RpY2tzIGJleW9uZCB0aGUgbGVmdCBvZiB2aXNpYmxlUmVjdCwg
bGVmdC1hbGlnbiB0aGUgdGlwIHdpdGggdGhlIHNhaWQgYm91bmRhcnkuCi0gICAgaWYgKHRpdGxl
UmVjdC54KCkgKyBkeCA8IHZpc2libGVSZWN0LngoKSkKLSAgICAgICAgZHggPSB2aXNpYmxlUmVj
dC54KCkgLSB0aXRsZVJlY3QueCgpIC0gYm9yZGVyV2lkdGhQeDsKLQotICAgIC8vIElmIHRoZSB0
aXAgc3RpY2tzIGJleW9uZCB0aGUgYm90dG9tIG9mIHZpc2libGVSZWN0LCBzaG93IHRoZSB0aXAg
YXQgdG9wIG9mIGJvdW5kaW5nIGJveC4KLSAgICBpZiAodGl0bGVSZWN0Lm1heFkoKSArIGR5ID4g
dmlzaWJsZVJlY3QubWF4WSgpKSB7Ci0gICAgICAgIGR5ID0gYW5jaG9yQm94LnkoKSAtIHRpdGxl
UmVjdC5tYXhZKCkgLSBib3JkZXJXaWR0aFB4OwotICAgICAgICAvLyBJZiB0aGUgdGlwIHN0aWxs
IHN0aWNrcyBiZXlvbmQgdGhlIGJvdHRvbSBvZiB2aXNpYmxlUmVjdCwgYm90dG9tLWFsaWduIHRo
ZSB0aXAgd2l0aCB0aGUgc2FpZCBib3VuZGFyeS4KLSAgICAgICAgaWYgKHRpdGxlUmVjdC5tYXhZ
KCkgKyBkeSA+IHZpc2libGVSZWN0Lm1heFkoKSkKLSAgICAgICAgICAgIGR5ID0gdmlzaWJsZVJl
Y3QubWF4WSgpIC0gdGl0bGVSZWN0Lm1heFkoKTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGUgdGlw
IHN0aWNrcyBiZXlvbmQgdGhlIHRvcCBvZiB2aXNpYmxlUmVjdCwgc2hvdyB0aGUgdGlwIGF0IHRv
cCBvZiB2aXNpYmxlUmVjdC4KLSAgICBpZiAodGl0bGVSZWN0LnkoKSArIGR5IDwgdmlzaWJsZVJl
Y3QueSgpKQotICAgICAgICBkeSA9IHZpc2libGVSZWN0LnkoKSAtIHRpdGxlUmVjdC55KCkgKyBi
b3JkZXJXaWR0aFB4OwotCi0gICAgdGl0bGVSZWN0Lm1vdmUoZHgsIGR5KTsKLQotICAgIGJvb2wg
aXNBcnJvd0F0VG9wID0gdGl0bGVSZWN0LnkoKSA+IGFuY2hvckJveC55KCk7Ci0gICAgdGl0bGVS
ZWN0Lm1vdmUoMCwgdG9vbHRpcFBhZGRpbmcgKiAoaXNBcnJvd0F0VG9wID8gMSA6IC0xKSk7Ci0K
LSAgICB7Ci0gICAgICAgIGZsb2F0IGFycm93VGlwWCA9IGNhbGN1bGF0ZUFycm93VGlwWChhbmNo
b3JCb3gsIHRpdGxlUmVjdCk7Ci0gICAgICAgIGludCBhcnJvd0Jhc2VZID0gaXNBcnJvd0F0VG9w
ID8gdGl0bGVSZWN0LnkoKSA6IHRpdGxlUmVjdC5tYXhZKCk7Ci0gICAgICAgIGludCBhcnJvd09w
cG9zaXRlWSA9IGlzQXJyb3dBdFRvcCA/IHRpdGxlUmVjdC5tYXhZKCkgOiB0aXRsZVJlY3QueSgp
OwotCi0gICAgICAgIEZsb2F0UG9pbnQgcG9pbnRzWzhdOwotICAgICAgICBwb2ludHNbMF0gPSBG
bG9hdFBvaW50KGFycm93VGlwWCAtIGFycm93SGFsZldpZHRoLCBhcnJvd0Jhc2VZKTsKLSAgICAg
ICAgcG9pbnRzWzFdID0gRmxvYXRQb2ludChhcnJvd1RpcFgsIGFycm93QmFzZVkgKyBhcnJvd0hl
aWdodCAqIChpc0Fycm93QXRUb3AgPyAtMSA6IDEpKTsKLSAgICAgICAgcG9pbnRzWzJdID0gRmxv
YXRQb2ludChhcnJvd1RpcFggKyBhcnJvd0hhbGZXaWR0aCwgYXJyb3dCYXNlWSk7Ci0gICAgICAg
IHBvaW50c1szXSA9IEZsb2F0UG9pbnQodGl0bGVSZWN0Lm1heFgoKSwgYXJyb3dCYXNlWSk7Ci0g
ICAgICAgIHBvaW50c1s0XSA9IEZsb2F0UG9pbnQodGl0bGVSZWN0Lm1heFgoKSwgYXJyb3dPcHBv
c2l0ZVkpOwotICAgICAgICBwb2ludHNbNV0gPSBGbG9hdFBvaW50KHRpdGxlUmVjdC54KCksIGFy
cm93T3Bwb3NpdGVZKTsKLSAgICAgICAgcG9pbnRzWzZdID0gRmxvYXRQb2ludCh0aXRsZVJlY3Qu
eCgpLCBhcnJvd0Jhc2VZKTsKLSAgICAgICAgcG9pbnRzWzddID0gcG9pbnRzWzBdOwotCi0gICAg
ICAgIFBhdGggcGF0aDsKLSAgICAgICAgcGF0aC5tb3ZlVG8ocG9pbnRzWzBdKTsKLSAgICAgICAg
Zm9yIChpbnQgaSA9IDE7IGkgPCA4OyArK2kpCi0gICAgICAgICAgICBwYXRoLmFkZExpbmVUbyhw
b2ludHNbaV0pOwotCi0gICAgICAgIGNvbnRleHQtPnNhdmUoKTsKLSAgICAgICAgY29udGV4dC0+
dHJhbnNsYXRlKDAuNWYsIDAuNWYpOwotICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihw
eEFuZEJvcmRlckNvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAgICAgICAgY29udGV4dC0+
c2V0RmlsbENvbG9yKGJhY2tncm91bmRDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAg
ICAgIGNvbnRleHQtPnNldFN0cm9rZVRoaWNrbmVzcyhib3JkZXJXaWR0aFB4KTsKLSAgICAgICAg
Y29udGV4dC0+ZmlsbFBhdGgocGF0aCk7Ci0gICAgICAgIGNvbnRleHQtPnN0cm9rZVBhdGgocGF0
aCk7Ci0gICAgICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKLSAgICB9Ci0KLSAgICBpbnQgY3VycmVu
dFBvcyA9IDA7Ci0gICAgY3VycmVudFBvcyA9IGRyYXdTdWJzdHJpbmcobm9kZVRpdGxlUnVuLCBj
dXJyZW50UG9zLCB0YWdOYW1lTGVuZ3RoLCB0YWdDb2xvciwgZm9udCwgY29udGV4dCwgdGl0bGVS
ZWN0KTsKLSAgICBpZiAoaWRTdHJpbmdMZW5ndGgpCi0gICAgICAgIGN1cnJlbnRQb3MgPSBkcmF3
U3Vic3RyaW5nKG5vZGVUaXRsZVJ1biwgY3VycmVudFBvcywgaWRTdHJpbmdMZW5ndGgsIGF0dHJD
b2xvciwgZm9udCwgY29udGV4dCwgdGl0bGVSZWN0KTsKLSAgICBpZiAoY2xhc3Nlc1N0cmluZ0xl
bmd0aCkKLSAgICAgICAgY3VycmVudFBvcyA9IGRyYXdTdWJzdHJpbmcobm9kZVRpdGxlUnVuLCBj
dXJyZW50UG9zLCBjbGFzc2VzU3RyaW5nTGVuZ3RoLCBhdHRyQ29sb3IsIGZvbnQsIGNvbnRleHQs
IHRpdGxlUmVjdCk7Ci0gICAgY3VycmVudFBvcyA9IGRyYXdTdWJzdHJpbmcobm9kZVRpdGxlUnVu
LCBjdXJyZW50UG9zLCB3aWR0aE51bWJlclBhcnQubGVuZ3RoKCksIG5vcm1hbENvbG9yLCBmb250
LCBjb250ZXh0LCB0aXRsZVJlY3QpOwotICAgIGN1cnJlbnRQb3MgPSBkcmF3U3Vic3RyaW5nKG5v
ZGVUaXRsZVJ1biwgY3VycmVudFBvcywgcHhTdHJpbmcubGVuZ3RoKCkgKyB0aW1lc1N0cmluZy5s
ZW5ndGgoKSwgcHhBbmRCb3JkZXJDb2xvciwgZm9udCwgY29udGV4dCwgdGl0bGVSZWN0KTsKLSAg
ICBjdXJyZW50UG9zID0gZHJhd1N1YnN0cmluZyhub2RlVGl0bGVSdW4sIGN1cnJlbnRQb3MsIGhl
aWdodE51bWJlclBhcnQubGVuZ3RoKCksIG5vcm1hbENvbG9yLCBmb250LCBjb250ZXh0LCB0aXRs
ZVJlY3QpOwotICAgIGRyYXdTdWJzdHJpbmcobm9kZVRpdGxlUnVuLCBjdXJyZW50UG9zLCBweFN0
cmluZy5sZW5ndGgoKSwgcHhBbmRCb3JkZXJDb2xvciwgZm9udCwgY29udGV4dCwgdGl0bGVSZWN0
KTsKLX0KLQogc3RhdGljIHZvaWQgY29udGVudHNRdWFkVG9QYWdlKGNvbnN0IEZyYW1lVmlldyog
bWFpblZpZXcsIGNvbnN0IEZyYW1lVmlldyogdmlldywgRmxvYXRRdWFkJiBxdWFkKQogewogICAg
IHF1YWQuc2V0UDEodmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KHJvdW5kZWRJbnRQb2ludChxdWFk
LnAxKCkpKSk7CkBAIC0zNzAsNyArOTksNyBAQCBzdGF0aWMgdm9pZCBjb250ZW50c1F1YWRUb1Bh
Z2UoY29uc3QgRnJhbWVWaWV3KiBtYWluVmlldywgY29uc3QgRnJhbWVWaWV3KiB2aWV3LAogICAg
IHF1YWQgKz0gbWFpblZpZXctPnNjcm9sbE9mZnNldCgpOwogfQogCi1zdGF0aWMgdm9pZCBnZXRP
ckRyYXdOb2RlSGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgTm9kZSogbm9kZSwg
Y29uc3QgSGlnaGxpZ2h0Q29uZmlnJiBoaWdobGlnaHRDb25maWcsIEhpZ2hsaWdodCogaGlnaGxp
Z2h0KQorc3RhdGljIHZvaWQgYnVpbGROb2RlSGlnaGxpZ2h0KE5vZGUqIG5vZGUsIGNvbnN0IEhp
Z2hsaWdodENvbmZpZyYgaGlnaGxpZ2h0Q29uZmlnLCBIaWdobGlnaHQqIGhpZ2hsaWdodCkKIHsK
ICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKICAgICBGcmFt
ZSogY29udGFpbmluZ0ZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKQEAgLTM4NSw5
ICsxMTQsNiBAQCBzdGF0aWMgdm9pZCBnZXRPckRyYXdOb2RlSGlnaGxpZ2h0KEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgTm9kZSogbm9kZSwgY29uc3QgSAogICAgIEludFJlY3QgdGl0bGVBbmNo
b3JCb3ggPSBib3VuZGluZ0JveDsKIAogICAgIEZsb2F0UmVjdCB2aXNpYmxlUmVjdCA9IG1haW5W
aWV3LT52aXNpYmxlQ29udGVudFJlY3QoKTsKLSAgICAvLyBEb24ndCB0cmFuc2xhdGUgdGhlIGNv
bnRleHQgaWYgdGhlIGZyYW1lIGlzIHJlbmRlcmVkIGluIHBhZ2UgY29vcmRpbmF0ZXMuCi0gICAg
aWYgKGNvbnRleHQgJiYgIW1haW5WaWV3LT5kZWxlZ2F0ZXNTY3JvbGxpbmcoKSkKLSAgICAgICAg
Y29udGV4dC0+dHJhbnNsYXRlKC12aXNpYmxlUmVjdC54KCksIC12aXNpYmxlUmVjdC55KCkpOwog
CiAgICAgLy8gUmVuZGVyU1ZHUm9vdCBzaG91bGQgYmUgaGlnaGxpZ2h0ZWQgdGhyb3VnaCB0aGUg
aXNCb3goKSBjb2RlIHBhdGgsIGFsbCBvdGhlciBTVkcgZWxlbWVudHMgc2hvdWxkIGp1c3QgZHVt
cCB0aGVpciBhYnNvbHV0ZVF1YWRzKCkuCiAjaWYgRU5BQkxFKFNWRykKQEAgLTQwMSw5ICsxMjcs
NiBAQCBzdGF0aWMgdm9pZCBnZXRPckRyYXdOb2RlSGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgTm9kZSogbm9kZSwgY29uc3QgSAogICAgICAgICByZW5kZXJlci0+YWJzb2x1dGVR
dWFkcyhoaWdobGlnaHQtPnF1YWRzKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBo
aWdobGlnaHQtPnF1YWRzLnNpemUoKTsgKytpKQogICAgICAgICAgICAgY29udGVudHNRdWFkVG9Q
YWdlKG1haW5WaWV3LCBjb250YWluaW5nVmlldywgaGlnaGxpZ2h0LT5xdWFkc1tpXSk7Ci0KLSAg
ICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgICAgICBkcmF3SGlnaGxpZ2h0Rm9yU1ZHUmVuZGVy
ZXIoY29udGV4dCwgaGlnaGxpZ2h0LT5xdWFkcywgaGlnaGxpZ2h0Q29uZmlnKTsKICAgICB9IGVs
c2UgaWYgKHJlbmRlcmVyLT5pc0JveCgpIHx8IHJlbmRlcmVyLT5pc1JlbmRlcklubGluZSgpKSB7
CiAgICAgICAgIExheW91dFJlY3QgY29udGVudEJveDsKICAgICAgICAgTGF5b3V0UmVjdCBwYWRk
aW5nQm94OwpAQCAtNDU1LDM5ICsxNzgsMTYgQEAgc3RhdGljIHZvaWQgZ2V0T3JEcmF3Tm9kZUhp
Z2hsaWdodChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIE5vZGUqIG5vZGUsIGNvbnN0IEgKICAg
ICAgICAgaGlnaGxpZ2h0LT5xdWFkcy5hcHBlbmQoYWJzQm9yZGVyUXVhZCk7CiAgICAgICAgIGhp
Z2hsaWdodC0+cXVhZHMuYXBwZW5kKGFic1BhZGRpbmdRdWFkKTsKICAgICAgICAgaGlnaGxpZ2h0
LT5xdWFkcy5hcHBlbmQoYWJzQ29udGVudFF1YWQpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQot
ICAgICAgICAgICAgZHJhd0hpZ2hsaWdodEZvckJveChjb250ZXh0LCBhYnNDb250ZW50UXVhZCwg
YWJzUGFkZGluZ1F1YWQsIGFic0JvcmRlclF1YWQsIGFic01hcmdpblF1YWQsIGhpZ2hsaWdodENv
bmZpZyk7CiAgICAgfQotCi0gICAgLy8gRHJhdyBub2RlIHRpdGxlIGlmIG5lY2Vzc2FyeS4KLQot
ICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAoY29udGV4dCAmJiBoaWdobGlnaHRDb25maWcuc2hvd0luZm8pCi0gICAgICAgIGRyYXdFbGVt
ZW50VGl0bGUoY29udGV4dCwgbm9kZSwgcmVuZGVyZXIsIHBpeGVsU25hcHBlZEludFJlY3QoYm91
bmRpbmdCb3gpLCBwaXhlbFNuYXBwZWRJbnRSZWN0KHRpdGxlQW5jaG9yQm94KSwgdmlzaWJsZVJl
Y3QsIGNvbnRhaW5pbmdGcmFtZS0+c2V0dGluZ3MoKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGdldE9y
RHJhd1JlY3RIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBQYWdlKiBwYWdlLCBJ
bnRSZWN0KiByZWN0LCBjb25zdCBIaWdobGlnaHRDb25maWcmIGhpZ2hsaWdodENvbmZpZywgSGln
aGxpZ2h0ICpoaWdobGlnaHQpCitzdGF0aWMgdm9pZCBidWlsZFJlY3RIaWdobGlnaHQoUGFnZSog
cGFnZSwgSW50UmVjdCogcmVjdCwgY29uc3QgSGlnaGxpZ2h0Q29uZmlnJiBoaWdobGlnaHRDb25m
aWcsIEhpZ2hsaWdodCAqaGlnaGxpZ2h0KQogewogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0
dXJuOwotCiAgICAgRmxvYXRSZWN0IGhpZ2hsaWdodFJlY3QoKnJlY3QpOwotCiAgICAgaGlnaGxp
Z2h0LT50eXBlID0gSGlnaGxpZ2h0VHlwZVJlY3RzOwogICAgIGhpZ2hsaWdodC0+cXVhZHMuYXBw
ZW5kKGhpZ2hsaWdodFJlY3QpOwotCi0gICAgaWYgKGNvbnRleHQpIHsKLSAgICAgICAgRnJhbWVW
aWV3KiB2aWV3ID0gcGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKTsKLSAgICAgICAgaWYgKCF2aWV3
LT5kZWxlZ2F0ZXNTY3JvbGxpbmcoKSkgewotICAgICAgICAgICAgRmxvYXRSZWN0IHZpc2libGVS
ZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7Ci0gICAgICAgICAgICBjb250ZXh0LT50
cmFuc2xhdGUoLXZpc2libGVSZWN0LngoKSwgLXZpc2libGVSZWN0LnkoKSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBkcmF3T3V0bGluZWRRdWFkKGNvbnRleHQsIGhpZ2hsaWdodFJlY3QsIGhpZ2hs
aWdodENvbmZpZy5jb250ZW50LCBoaWdobGlnaHRDb25maWcuY29udGVudE91dGxpbmUpOwotICAg
IH0KIH0KIAogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCkBAIC01MDQsMTIgKzIwNCwxMyBAQCBJ
bnNwZWN0b3JPdmVybGF5Ojp+SW5zcGVjdG9yT3ZlcmxheSgpCiAKIHZvaWQgSW5zcGVjdG9yT3Zl
cmxheTo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewotICAgIGRyYXdOb2RlSGln
aGxpZ2h0KCZjb250ZXh0KTsKLSAgICBkcmF3UmVjdEhpZ2hsaWdodCgmY29udGV4dCk7Ci0KLSAg
ICBpZiAobV9wYXVzZWRJbkRlYnVnZ2VyTWVzc2FnZS5pc051bGwoKSkKKyAgICBpZiAobV9wYXVz
ZWRJbkRlYnVnZ2VyTWVzc2FnZS5pc051bGwoKSAmJiAhbV9oaWdobGlnaHROb2RlICYmICFtX2hp
Z2hsaWdodFJlY3QpCiAgICAgICAgIHJldHVybjsKLSAgICBkcmF3T3ZlcmxheVBhZ2UoJmNvbnRl
eHQpOworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsK
KyAgICBGcmFtZVZpZXcqIHZpZXcgPSBvdmVybGF5UGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygp
OworICAgIGlmICh2aWV3LT5uZWVkc0xheW91dCgpKQorICAgICAgICByZXR1cm47CisgICAgdmll
dy0+cGFpbnQoJmNvbnRleHQsIEludFJlY3QoMCwgMCwgdmlldy0+d2lkdGgoKSwgdmlldy0+aGVp
Z2h0KCkpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3T3V0bGluZShHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBj
b2xvcikKQEAgLTUyNiwxNyArMjI3LDE2IEBAIHZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6Z2V0SGln
aGxpZ2h0KEhpZ2hsaWdodCogaGlnaGxpZ2h0KSBjb25zdAogICAgIGhpZ2hsaWdodC0+dHlwZSA9
IEhpZ2hsaWdodFR5cGVSZWN0czsKICAgICBpZiAobV9oaWdobGlnaHROb2RlKSB7CiAgICAgICAg
IGhpZ2hsaWdodC0+c2V0Q29sb3JzKG1fbm9kZUhpZ2hsaWdodENvbmZpZyk7Ci0gICAgICAgIGdl
dE9yRHJhd05vZGVIaWdobGlnaHQoMCwgbV9oaWdobGlnaHROb2RlLmdldCgpLCBtX25vZGVIaWdo
bGlnaHRDb25maWcsIGhpZ2hsaWdodCk7CisgICAgICAgIGJ1aWxkTm9kZUhpZ2hsaWdodChtX2hp
Z2hsaWdodE5vZGUuZ2V0KCksIG1fbm9kZUhpZ2hsaWdodENvbmZpZywgaGlnaGxpZ2h0KTsKICAg
ICB9IGVsc2UgewogICAgICAgICBoaWdobGlnaHQtPnNldENvbG9ycyhtX3JlY3RIaWdobGlnaHRD
b25maWcpOwotICAgICAgICBnZXRPckRyYXdSZWN0SGlnaGxpZ2h0KDAsIG1fcGFnZSwgbV9oaWdo
bGlnaHRSZWN0LmdldCgpLCBtX3JlY3RIaWdobGlnaHRDb25maWcsIGhpZ2hsaWdodCk7CisgICAg
ICAgIGJ1aWxkUmVjdEhpZ2hsaWdodChtX3BhZ2UsIG1faGlnaGxpZ2h0UmVjdC5nZXQoKSwgbV9y
ZWN0SGlnaGxpZ2h0Q29uZmlnLCBoaWdobGlnaHQpOwogICAgIH0KIH0KIAogdm9pZCBJbnNwZWN0
b3JPdmVybGF5OjpzZXRQYXVzZWRJbkRlYnVnZ2VyTWVzc2FnZShjb25zdCBTdHJpbmcqIG1lc3Nh
Z2UpCiB7CiAgICAgbV9wYXVzZWRJbkRlYnVnZ2VyTWVzc2FnZSA9IG1lc3NhZ2UgPyAqbWVzc2Fn
ZSA6IFN0cmluZygpOwotICAgIGV2YWx1YXRlSW5PdmVybGF5KCJzZXRQYXVzZWRJbkRlYnVnZ2Vy
TWVzc2FnZSIsIG1fcGF1c2VkSW5EZWJ1Z2dlck1lc3NhZ2UpOwogICAgIHVwZGF0ZSgpOwogfQog
CkBAIC01NzcsMzQgKzI3NywxMjQgQEAgdm9pZCBJbnNwZWN0b3JPdmVybGF5Ojp1cGRhdGUoKQog
ICAgIEZyYW1lVmlldyogb3ZlcmxheVZpZXcgPSBvdmVybGF5UGFnZSgpLT5tYWluRnJhbWUoKS0+
dmlldygpOwogICAgIEludFJlY3QgdmlzaWJsZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHZpZXct
PnZpc2libGVDb250ZW50UmVjdCgpKTsKICAgICBvdmVybGF5Vmlldy0+cmVzaXplKHZpc2libGVS
ZWN0LndpZHRoKCksIHZpc2libGVSZWN0LmhlaWdodCgpKTsKKworICAgIC8vIENsZWFyIGNhbnZh
cyBhbmQgcGFpbnQgdGhpbmdzLgorICAgIHJlc2V0KCk7CisKKyAgICBkcmF3Tm9kZUhpZ2hsaWdo
dCgpOworICAgIGRyYXdSZWN0SGlnaGxpZ2h0KCk7CisgICAgZHJhd1BhdXNlZEluRGVidWdnZXJN
ZXNzYWdlKCk7CisKKyAgICAvLyBQb3NpdGlvbiBET00gZWxlbWVudHMuCisgICAgb3ZlcmxheVBh
Z2UoKS0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCktPnJlY2FsY1N0eWxlKE5vZGU6OkZvcmNlKTsK
ICAgICBpZiAob3ZlcmxheVZpZXctPm5lZWRzTGF5b3V0KCkpCiAgICAgICAgIG92ZXJsYXlWaWV3
LT5sYXlvdXQoKTsKKworICAgIC8vIEtpY2sgcGFpbnQuCiAgICAgbV9jbGllbnQtPmhpZ2hsaWdo
dCgpOwogfQogCi12b2lkIEluc3BlY3Rvck92ZXJsYXk6OmRyYXdOb2RlSGlnaGxpZ2h0KEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCkKK3N0YXRpYyBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWls
ZE9iamVjdEZvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQoreworICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IG9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAg
b2JqZWN0LT5zZXROdW1iZXIoIngiLCBwb2ludC54KCkpOworICAgIG9iamVjdC0+c2V0TnVtYmVy
KCJ5IiwgcG9pbnQueSgpKTsKKyAgICByZXR1cm4gb2JqZWN0LnJlbGVhc2UoKTsKK30KKworc3Rh
dGljIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYnVpbGRBcnJheUZvclF1YWQoY29uc3QgRmxvYXRR
dWFkJiBxdWFkKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJyYXkgPSBJbnNwZWN0
b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgYXJyYXktPnB1c2hPYmplY3QoYnVpbGRPYmplY3RGb3JQ
b2ludChxdWFkLnAxKCkpKTsKKyAgICBhcnJheS0+cHVzaE9iamVjdChidWlsZE9iamVjdEZvclBv
aW50KHF1YWQucDIoKSkpOworICAgIGFycmF5LT5wdXNoT2JqZWN0KGJ1aWxkT2JqZWN0Rm9yUG9p
bnQocXVhZC5wMygpKSk7CisgICAgYXJyYXktPnB1c2hPYmplY3QoYnVpbGRPYmplY3RGb3JQb2lu
dChxdWFkLnA0KCkpKTsKKyAgICByZXR1cm4gYXJyYXkucmVsZWFzZSgpOworfQorCitzdGF0aWMg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JIaWdobGlnaHQoRnJhbWVWaWV3
KiBtYWluVmlldywgY29uc3QgSGlnaGxpZ2h0JiBoaWdobGlnaHQpCit7CisgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gb2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFycmF5ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaGlnaGxpZ2h0LnF1YWRzLnNpemUoKTsgKytpKQor
ICAgICAgICBhcnJheS0+cHVzaEFycmF5KGJ1aWxkQXJyYXlGb3JRdWFkKGhpZ2hsaWdodC5xdWFk
c1tpXSkpOworICAgIG9iamVjdC0+c2V0QXJyYXkoInF1YWRzIiwgYXJyYXkucmVsZWFzZSgpKTsK
KyAgICBvYmplY3QtPnNldFN0cmluZygiY29udGVudENvbG9yIiwgaGlnaGxpZ2h0LmNvbnRlbnRD
b2xvci5zZXJpYWxpemVkKCkpOworICAgIG9iamVjdC0+c2V0U3RyaW5nKCJjb250ZW50T3V0bGlu
ZUNvbG9yIiwgaGlnaGxpZ2h0LmNvbnRlbnRPdXRsaW5lQ29sb3Iuc2VyaWFsaXplZCgpKTsKKyAg
ICBvYmplY3QtPnNldFN0cmluZygicGFkZGluZ0NvbG9yIiwgaGlnaGxpZ2h0LnBhZGRpbmdDb2xv
ci5zZXJpYWxpemVkKCkpOworICAgIG9iamVjdC0+c2V0U3RyaW5nKCJib3JkZXJDb2xvciIsIGhp
Z2hsaWdodC5ib3JkZXJDb2xvci5zZXJpYWxpemVkKCkpOworICAgIG9iamVjdC0+c2V0U3RyaW5n
KCJtYXJnaW5Db2xvciIsIGhpZ2hsaWdodC5tYXJnaW5Db2xvci5zZXJpYWxpemVkKCkpOworCisg
ICAgRmxvYXRSZWN0IHZpc2libGVSZWN0ID0gbWFpblZpZXctPnZpc2libGVDb250ZW50UmVjdCgp
OworICAgIGlmICghbWFpblZpZXctPmRlbGVnYXRlc1Njcm9sbGluZygpKSB7CisgICAgICAgIG9i
amVjdC0+c2V0TnVtYmVyKCJzY3JvbGxYIiwgdmlzaWJsZVJlY3QueCgpKTsKKyAgICAgICAgb2Jq
ZWN0LT5zZXROdW1iZXIoInNjcm9sbFkiLCB2aXNpYmxlUmVjdC55KCkpOworICAgIH0gZWxzZSB7
CisgICAgICAgIG9iamVjdC0+c2V0TnVtYmVyKCJzY3JvbGxYIiwgMCk7CisgICAgICAgIG9iamVj
dC0+c2V0TnVtYmVyKCJzY3JvbGxZIiwgMCk7CisgICAgfQorCisgICAgcmV0dXJuIG9iamVjdC5y
ZWxlYXNlKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6ZHJhd05vZGVIaWdobGlnaHQo
KQogewogICAgIGlmICghbV9oaWdobGlnaHROb2RlKQogICAgICAgICByZXR1cm47CiAKICAgICBI
aWdobGlnaHQgaGlnaGxpZ2h0OwotICAgIGdldE9yRHJhd05vZGVIaWdobGlnaHQoY29udGV4dCwg
bV9oaWdobGlnaHROb2RlLmdldCgpLCBtX25vZGVIaWdobGlnaHRDb25maWcsICZoaWdobGlnaHQp
OworICAgIGhpZ2hsaWdodC5zZXRDb2xvcnMobV9ub2RlSGlnaGxpZ2h0Q29uZmlnKTsKKyAgICBi
dWlsZE5vZGVIaWdobGlnaHQobV9oaWdobGlnaHROb2RlLmdldCgpLCBtX25vZGVIaWdobGlnaHRD
b25maWcsICZoaWdobGlnaHQpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGhpZ2hsaWdo
dE9iamVjdCA9IGJ1aWxkT2JqZWN0Rm9ySGlnaGxpZ2h0KG1fcGFnZS0+bWFpbkZyYW1lKCktPnZp
ZXcoKSwgaGlnaGxpZ2h0KTsKKworICAgIE5vZGUqIG5vZGUgPSBtX2hpZ2hsaWdodE5vZGUuZ2V0
KCk7CisgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiBtX25vZGVIaWdobGlnaHRDb25m
aWcuc2hvd0luZm8gJiYgbm9kZS0+cmVuZGVyZXIoKSAmJiBub2RlLT5kb2N1bWVudCgpLT5mcmFt
ZSgpKSB7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGVsZW1lbnRJbmZvID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHRvRWxl
bWVudChub2RlKTsKKyAgICAgICAgYm9vbCBpc1hIVE1MID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+
aXNYSFRNTERvY3VtZW50KCk7CisgICAgICAgIGVsZW1lbnRJbmZvLT5zZXRTdHJpbmcoInRhZ05h
bWUiLCBpc1hIVE1MID8gZWxlbWVudC0+bm9kZU5hbWUoKSA6IGVsZW1lbnQtPm5vZGVOYW1lKCku
bG93ZXIoKSk7CisgICAgICAgIGVsZW1lbnRJbmZvLT5zZXRTdHJpbmcoImlkVmFsdWUiLCBlbGVt
ZW50LT5nZXRJZEF0dHJpYnV0ZSgpKTsKKyAgICAgICAgSGFzaFNldDxBdG9taWNTdHJpbmc+IHVz
ZWRDbGFzc05hbWVzOworICAgICAgICBpZiAoZWxlbWVudC0+aGFzQ2xhc3MoKSAmJiBlbGVtZW50
LT5pc1N0eWxlZEVsZW1lbnQoKSkgeworICAgICAgICAgICAgU3RyaW5nIGNsYXNzTmFtZXM7Cisg
ICAgICAgICAgICBjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBjbGFzc05hbWVzU3RyaW5nID0gc3Rh
dGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KGVsZW1lbnQpLT5jbGFzc05hbWVzKCk7CisgICAgICAg
ICAgICBzaXplX3QgY2xhc3NOYW1lQ291bnQgPSBjbGFzc05hbWVzU3RyaW5nLnNpemUoKTsKKyAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2xhc3NOYW1lQ291bnQ7ICsraSkgewor
ICAgICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY2xhc3NOYW1lID0gY2xhc3NOYW1l
c1N0cmluZ1tpXTsKKyAgICAgICAgICAgICAgICBpZiAodXNlZENsYXNzTmFtZXMuY29udGFpbnMo
Y2xhc3NOYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgdXNlZENsYXNzTmFtZXMuYWRkKGNsYXNzTmFtZSk7CisgICAgICAgICAgICAgICAgY2xhc3NO
YW1lcyArPSBtYWtlU3RyaW5nKCIuIiwgY2xhc3NOYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsZW1lbnRJbmZvLT5zZXRTdHJpbmcoImNsYXNzTmFtZSIsIGNsYXNzTmFtZXMpOwor
ICAgICAgICB9CisKKyAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRl
cmVyKCk7CisgICAgICAgIEZyYW1lKiBjb250YWluaW5nRnJhbWUgPSBub2RlLT5kb2N1bWVudCgp
LT5mcmFtZSgpOworICAgICAgICBGcmFtZVZpZXcqIGNvbnRhaW5pbmdWaWV3ID0gY29udGFpbmlu
Z0ZyYW1lLT52aWV3KCk7CisgICAgICAgIEludFJlY3QgYm91bmRpbmdCb3ggPSBwaXhlbFNuYXBw
ZWRJbnRSZWN0KGNvbnRhaW5pbmdWaWV3LT5jb250ZW50c1RvUm9vdFZpZXcocmVuZGVyZXItPmFi
c29sdXRlQm91bmRpbmdCb3hSZWN0KCkpKTsKKyAgICAgICAgUmVuZGVyQm94TW9kZWxPYmplY3Qq
IG1vZGVsT2JqZWN0ID0gcmVuZGVyZXItPmlzQm94TW9kZWxPYmplY3QoKSA/IHRvUmVuZGVyQm94
TW9kZWxPYmplY3QocmVuZGVyZXIpIDogMDsKKyAgICAgICAgZWxlbWVudEluZm8tPnNldFN0cmlu
Zygibm9kZVdpZHRoIiwgU3RyaW5nOjpudW1iZXIobW9kZWxPYmplY3QgPyBhZGp1c3RGb3JBYnNv
bHV0ZVpvb20obW9kZWxPYmplY3QtPnBpeGVsU25hcHBlZE9mZnNldFdpZHRoKCksIG1vZGVsT2Jq
ZWN0KSA6IGJvdW5kaW5nQm94LndpZHRoKCkpKTsKKyAgICAgICAgZWxlbWVudEluZm8tPnNldFN0
cmluZygibm9kZUhlaWdodCIsIFN0cmluZzo6bnVtYmVyKG1vZGVsT2JqZWN0ID8gYWRqdXN0Rm9y
QWJzb2x1dGVab29tKG1vZGVsT2JqZWN0LT5waXhlbFNuYXBwZWRPZmZzZXRIZWlnaHQoKSwgbW9k
ZWxPYmplY3QpIDogYm91bmRpbmdCb3guaGVpZ2h0KCkpKTsKKyAgICAgICAgaGlnaGxpZ2h0T2Jq
ZWN0LT5zZXRPYmplY3QoImVsZW1lbnRJbmZvIiwgZWxlbWVudEluZm8ucmVsZWFzZSgpKTsKKyAg
ICB9CisgICAgZXZhbHVhdGVJbk92ZXJsYXkoImRyYXdOb2RlSGlnaGxpZ2h0IiwgaGlnaGxpZ2h0
T2JqZWN0KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3UmVjdEhpZ2hsaWdodChH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQpCit2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmRyYXdSZWN0
SGlnaGxpZ2h0KCkKIHsKICAgICBpZiAoIW1faGlnaGxpZ2h0UmVjdCkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgSGlnaGxpZ2h0IGhpZ2hsaWdodDsKLSAgICBnZXRPckRyYXdSZWN0SGlnaGxpZ2h0
KGNvbnRleHQsIG1fcGFnZSwgbV9oaWdobGlnaHRSZWN0LmdldCgpLCBtX3JlY3RIaWdobGlnaHRD
b25maWcsICZoaWdobGlnaHQpOworICAgIGhpZ2hsaWdodC5zZXRDb2xvcnMobV9ub2RlSGlnaGxp
Z2h0Q29uZmlnKTsKKyAgICBidWlsZFJlY3RIaWdobGlnaHQobV9wYWdlLCBtX2hpZ2hsaWdodFJl
Y3QuZ2V0KCksIG1fcmVjdEhpZ2hsaWdodENvbmZpZywgJmhpZ2hsaWdodCk7CisgICAgZXZhbHVh
dGVJbk92ZXJsYXkoImhpZ2hsaWdodFJlY3QiLCBidWlsZE9iamVjdEZvckhpZ2hsaWdodChtX3Bh
Z2UtPm1haW5GcmFtZSgpLT52aWV3KCksIGhpZ2hsaWdodCkpOwogfQogCi12b2lkIEluc3BlY3Rv
ck92ZXJsYXk6OmRyYXdPdmVybGF5UGFnZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCit2b2lk
IEluc3BlY3Rvck92ZXJsYXk6OmRyYXdQYXVzZWRJbkRlYnVnZ2VyTWVzc2FnZSgpCiB7Ci0gICAg
R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjb250ZXh0KTsKLSAgICBGcmFt
ZVZpZXcqIHZpZXcgPSBvdmVybGF5UGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpOwotICAgIHZp
ZXctPnBhaW50KGNvbnRleHQsIEludFJlY3QoMCwgMCwgdmlldy0+d2lkdGgoKSwgdmlldy0+aGVp
Z2h0KCkpKTsKKyAgICBldmFsdWF0ZUluT3ZlcmxheSgiZHJhd1BhdXNlZEluRGVidWdnZXJNZXNz
YWdlIiwgbV9wYXVzZWRJbkRlYnVnZ2VyTWVzc2FnZSk7CiB9CiAKIFBhZ2UqIEluc3BlY3Rvck92
ZXJsYXk6Om92ZXJsYXlQYWdlKCkKQEAgLTYzNSw4ICs0MjUsMTMgQEAgUGFnZSogSW5zcGVjdG9y
T3ZlcmxheTo6b3ZlcmxheVBhZ2UoKQogICAgIG92ZXJsYXlTZXR0aW5ncy0+c2V0UGljdG9ncmFw
aEZvbnRGYW1pbHkoc2V0dGluZ3MtPnBpY3RvZ3JhcGhGb250RmFtaWx5KCkpOwogICAgIG92ZXJs
YXlTZXR0aW5ncy0+c2V0TWluaW11bUZvbnRTaXplKHNldHRpbmdzLT5taW5pbXVtRm9udFNpemUo
KSk7CiAgICAgb3ZlcmxheVNldHRpbmdzLT5zZXRNaW5pbXVtTG9naWNhbEZvbnRTaXplKHNldHRp
bmdzLT5taW5pbXVtTG9naWNhbEZvbnRTaXplKCkpOwotICAgIG92ZXJsYXlTZXR0aW5ncy0+c2V0
RGVmYXVsdEZvbnRTaXplKHNldHRpbmdzLT5kZWZhdWx0Rm9udFNpemUoKSk7Ci0gICAgb3Zlcmxh
eVNldHRpbmdzLT5zZXREZWZhdWx0Rml4ZWRGb250U2l6ZShzZXR0aW5ncy0+ZGVmYXVsdEZpeGVk
Rm9udFNpemUoKSk7CisjaWYgT1MoV0lORE9XUykKK292ZXJsYXlTZXR0aW5ncy0+c2V0RGVmYXVs
dEZvbnRTaXplKDEyKTsKK292ZXJsYXlTZXR0aW5ncy0+c2V0RGVmYXVsdEZpeGVkRm9udFNpemUo
MTIpOworI2VsaWYgT1MoTUFDX09TX1gpIHx8IE9TKFVOSVgpCitvdmVybGF5U2V0dGluZ3MtPnNl
dERlZmF1bHRGb250U2l6ZSgxMSk7CitvdmVybGF5U2V0dGluZ3MtPnNldERlZmF1bHRGaXhlZEZv
bnRTaXplKDExKTsKKyNlbmRpZgogICAgIG92ZXJsYXlTZXR0aW5ncy0+c2V0TWVkaWFFbmFibGVk
KGZhbHNlKTsKICAgICBvdmVybGF5U2V0dGluZ3MtPnNldFNjcmlwdEVuYWJsZWQodHJ1ZSk7CiAg
ICAgb3ZlcmxheVNldHRpbmdzLT5zZXRQbHVnaW5zRW5hYmxlZChmYWxzZSk7CkBAIC02NTYsNiAr
NDUxLDExIEBAIFBhZ2UqIEluc3BlY3Rvck92ZXJsYXk6Om92ZXJsYXlQYWdlKCkKICAgICByZXR1
cm4gbV9vdmVybGF5UGFnZS5nZXQoKTsKIH0KIAordm9pZCBJbnNwZWN0b3JPdmVybGF5OjpyZXNl
dCgpCit7CisgICAgZXZhbHVhdGVJbk92ZXJsYXkoInJlc2V0IiwgIiIpOworfQorCiB2b2lkIElu
c3BlY3Rvck92ZXJsYXk6OmV2YWx1YXRlSW5PdmVybGF5KGNvbnN0IFN0cmluZyYgbWV0aG9kLCBj
b25zdCBTdHJpbmcmIGFyZ3VtZW50KQogewogICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gY29t
bWFuZCA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKQEAgLTY2NCw2ICs0NjQsMTQgQEAgdm9p
ZCBJbnNwZWN0b3JPdmVybGF5OjpldmFsdWF0ZUluT3ZlcmxheShjb25zdCBTdHJpbmcmIG1ldGhv
ZCwgY29uc3QgU3RyaW5nJiBhcmcKICAgICBvdmVybGF5UGFnZSgpLT5tYWluRnJhbWUoKS0+c2Ny
aXB0KCktPmV2YWx1YXRlKFNjcmlwdFNvdXJjZUNvZGUobWFrZVN0cmluZygiZGlzcGF0Y2goIiwg
Y29tbWFuZC0+dG9KU09OU3RyaW5nKCksICIpIikpKTsKIH0KIAordm9pZCBJbnNwZWN0b3JPdmVy
bGF5OjpldmFsdWF0ZUluT3ZlcmxheShjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4gYXJndW1lbnQpCit7CisgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBj
b21tYW5kID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIGNvbW1hbmQtPnB1c2hTdHJp
bmcobWV0aG9kKTsKKyAgICBjb21tYW5kLT5wdXNoVmFsdWUoYXJndW1lbnQpOworICAgIG92ZXJs
YXlQYWdlKCktPm1haW5GcmFtZSgpLT5zY3JpcHQoKS0+ZXZhbHVhdGUoU2NyaXB0U291cmNlQ29k
ZShtYWtlU3RyaW5nKCJkaXNwYXRjaCgiLCBjb21tYW5kLT50b0pTT05TdHJpbmcoKSwgIikiKSkp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVD
VE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJs
YXkuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmgKaW5kZXgg
YWJjOGJjZTk3ZmY2Y2NhNTNkOGQ4YzkyYzgxZDZmZDExYjZiMGJiMi4uZGQ0NzMyODJhOGJjYzFk
ZjFlNDI4NDAxYTI1OTUyNjNhNDFmNTMyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yT3ZlcmxheS5oCkBAIC0zMSw2ICszMSw3IEBACiAKICNpbmNsdWRlICJDb2xvci5o
IgogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgog
I2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCiAjaW5jbHVkZSAiTm9kZS5oIgogCkBAIC02NiwxMiAr
NjcsMTQgQEAgc3RydWN0IEhpZ2hsaWdodCB7CiAgICAgdm9pZCBzZXRDb2xvcnMoY29uc3QgSGln
aGxpZ2h0Q29uZmlnJiBoaWdobGlnaHRDb25maWcpCiAgICAgewogICAgICAgICBjb250ZW50Q29s
b3IgPSBoaWdobGlnaHRDb25maWcuY29udGVudDsKKyAgICAgICAgY29udGVudE91dGxpbmVDb2xv
ciA9IGhpZ2hsaWdodENvbmZpZy5jb250ZW50T3V0bGluZTsKICAgICAgICAgcGFkZGluZ0NvbG9y
ID0gaGlnaGxpZ2h0Q29uZmlnLnBhZGRpbmc7CiAgICAgICAgIGJvcmRlckNvbG9yID0gaGlnaGxp
Z2h0Q29uZmlnLmJvcmRlcjsKICAgICAgICAgbWFyZ2luQ29sb3IgPSBoaWdobGlnaHRDb25maWcu
bWFyZ2luOwogICAgIH0KIAogICAgIENvbG9yIGNvbnRlbnRDb2xvcjsKKyAgICBDb2xvciBjb250
ZW50T3V0bGluZUNvbG9yOwogICAgIENvbG9yIHBhZGRpbmdDb2xvcjsKICAgICBDb2xvciBib3Jk
ZXJDb2xvcjsKICAgICBDb2xvciBtYXJnaW5Db2xvcjsKQEAgLTkwLDYgKzkzLDcgQEAgcHVibGlj
OgogICAgIH0KICAgICB+SW5zcGVjdG9yT3ZlcmxheSgpOwogCisgICAgdm9pZCB1cGRhdGUoKTsK
ICAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCYpOwogICAgIHZvaWQgZHJhd091dGxpbmUo
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5b3V0UmVjdCYsIGNvbnN0IENvbG9yJik7CiAgICAg
dm9pZCBnZXRIaWdobGlnaHQoSGlnaGxpZ2h0KikgY29uc3Q7CkBAIC0xMDUsMTIgKzEwOSwxMyBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEluc3BlY3Rvck92ZXJsYXkoUGFnZSosIEluc3BlY3Rv
ckNsaWVudCopOwogCi0gICAgdm9pZCB1cGRhdGUoKTsKLSAgICB2b2lkIGRyYXdOb2RlSGlnaGxp
Z2h0KEdyYXBoaWNzQ29udGV4dCopOwotICAgIHZvaWQgZHJhd1JlY3RIaWdobGlnaHQoR3JhcGhp
Y3NDb250ZXh0Kik7Ci0gICAgdm9pZCBkcmF3T3ZlcmxheVBhZ2UoR3JhcGhpY3NDb250ZXh0Kik7
CisgICAgdm9pZCBkcmF3Tm9kZUhpZ2hsaWdodCgpOworICAgIHZvaWQgZHJhd1JlY3RIaWdobGln
aHQoKTsKKyAgICB2b2lkIGRyYXdQYXVzZWRJbkRlYnVnZ2VyTWVzc2FnZSgpOwogICAgIFBhZ2Uq
IG92ZXJsYXlQYWdlKCk7CisgICAgdm9pZCByZXNldCgpOwogICAgIHZvaWQgZXZhbHVhdGVJbk92
ZXJsYXkoY29uc3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQpOworICAg
IHZvaWQgZXZhbHVhdGVJbk92ZXJsYXkoY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8
SW5zcGVjdG9yVmFsdWU+IGFyZ3VtZW50KTsKIAogICAgIFBhZ2UqIG1fcGFnZTsKICAgICBJbnNw
ZWN0b3JDbGllbnQqIG1fY2xpZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3Rvck92ZXJsYXlQYWdlLmh0bWwgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yT3ZlcmxheVBhZ2UuaHRtbAppbmRleCBmYTY4MmMzMjA0OGM1YzcxOTBjMjVmMzdi
M2Y3NDViYjM0YmM5OTFmLi4wZmE5NGNmMjE2OWZkOTA0MThiNTY5MmQzZDE2NjgxOTJkNDg1NWFi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheVBh
Z2UuaHRtbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheVBh
Z2UuaHRtbApAQCAtMzIsNiArMzIsNyBAQAogYm9keSB7CiAgICAgbWFyZ2luOiAwOwogICAgIHBh
ZGRpbmc6IDA7CisgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKIH0KIAogLmZpbGwgewpAQCAt
NDcsMzEgKzQ4LDM1MSBAQCBib2R5IHsKIH0KIAogLm1lc3NhZ2UtbGluZSB7CisgICAgbWFyZ2lu
OiAxMHB4IDA7CiAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogfQogCiAubWVzc2FnZS1ib3ggewot
ICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1
NSwgMjU1LCAxOTQpOwogICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYigxMjgsIDEyOCwgMTI4KTsK
ICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Ci0gICAgbWFyZ2luOiAxMHB4IDA7CiAgICAgcGFk
ZGluZzogMnB4IDRweDsKIH0KIAorLnB4IHsKKyAgICBjb2xvcjogcmdiKDEyOCwgMTI4LCAxMjgp
OworfQorCisjZWxlbWVudC10aXRsZSB7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHot
aW5kZXg6IDEwOworfQorCisjdGFnLW5hbWUgeworICAgIGNvbG9yOiByZ2IoMTM2LCAxOCwgMTI4
KTsKK30KKworI25vZGUtaWQgeworICAgIGNvbG9yOiByZ2IoMjYsIDI2LCAxNjYpOworfQogPC9z
dHlsZT4KIDxzY3JpcHQ+Ci1mdW5jdGlvbiBzZXRQYXVzZWRJbkRlYnVnZ2VyTWVzc2FnZShtZXNz
YWdlKQorY29uc3QgbGlnaHRHcmlkQ29sb3IgPSAicmdiYSgwLDAsMCwwLjIpIjsKK2NvbnN0IGRh
cmtHcmlkQ29sb3IgPSAicmdiYSgwLDAsMCwwLjUpIjsKK2NvbnN0IHRyYW5zcGFyZW50Q29sb3Ig
PSAicmdiYSgwLCAwLCAwLCAwKSI7CisKK2Z1bmN0aW9uIHRha2VMYXN0KGFycmF5KQoreworICAg
IGlmICghYXJyYXkubGVuZ3RoKQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB2YXIgcmVzdWx0
ID0gYXJyYXkuc3BsaWNlKGFycmF5Lmxlbmd0aCAtIDEsIDEpOworICAgIHJldHVybiByZXN1bHRb
MF07Cit9CisKK2Z1bmN0aW9uIGRyYXdQYXVzZWRJbkRlYnVnZ2VyTWVzc2FnZShtZXNzYWdlKQog
eworICAgIGlmICghbWVzc2FnZSkKKyAgICAgIHJldHVybjsKICAgICB2YXIgcGF1c2VkSW5EZWJ1
Z2dlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwYXVzZWQtaW4tZGVidWdnZXIiKTsKLSAg
ICBpZiAobWVzc2FnZSkgewotICAgICAgICBwYXVzZWRJbkRlYnVnZ2VyLnRleHRDb250ZW50ID0g
bWVzc2FnZTsKLSAgICAgICAgcGF1c2VkSW5EZWJ1Z2dlci5zdHlsZS52aXNpYmlsaXR5ID0gInZp
c2libGUiOwotICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoImRpbW1lZCIpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIHBhdXNlZEluRGVidWdnZXIuc3R5bGUudmlzaWJpbGl0eSA9
ICJoaWRkZW4iOwotICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoImRpbW1l
ZCIpOworICAgIHBhdXNlZEluRGVidWdnZXIudGV4dENvbnRlbnQgPSBtZXNzYWdlOworICAgIHBh
dXNlZEluRGVidWdnZXIuc3R5bGUudmlzaWJpbGl0eSA9ICJ2aXNpYmxlIjsKKyAgICBkb2N1bWVu
dC5ib2R5LmNsYXNzTGlzdC5hZGQoImRpbW1lZCIpOworfQorCitmdW5jdGlvbiBfZHJhd0dyaWQo
aGlnaGxpZ2h0KQoreworICAgIGNvbnRleHQuc2F2ZSgpOworCisgICAgdmFyIHdpZHRoID0gY2Fu
dmFzLndpZHRoOworICAgIHZhciBoZWlnaHQgPSBjYW52YXMuaGVpZ2h0OworCisgICAgY29udGV4
dC5maWxsU3R5bGUgPSAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpIjsKKyAgICBjb250ZXh0LmZp
bGxSZWN0KDAsIDAsIGNhbnZhcy53aWR0aCwgMTUpOworICAgIGNvbnRleHQuZmlsbFJlY3QoMCwg
MTUsIDE1LCBjYW52YXMuaGVpZ2h0KTsKKyAgICAKKyAgICBjb250ZXh0LnRyYW5zbGF0ZSgtaGln
aGxpZ2h0LnNjcm9sbFgsIDAuNSAtIGhpZ2hsaWdodC5zY3JvbGxZKTsKKyAgICBjb250ZXh0Lmxp
bmVXaWR0aCA9IDE7CisKKyAgICBjb25zdCBncmlkU3ViU3RlcCA9IDU7CisgICAgY29uc3QgZ3Jp
ZFN0ZXAgPSA1MDsKKworICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSBsaWdodEdyaWRDb2xvcjsK
KworICAgIGZvciAodmFyIHkgPSBncmlkU3ViU3RlcDsgeSA8IGhpZ2hsaWdodC5zY3JvbGxZICsg
aGVpZ2h0OyB5ICs9IGdyaWRTdWJTdGVwKSB7CisgICAgICAgIGlmICghKHkgJSBncmlkU3RlcCkp
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTsKKyAg
ICAgICAgY29udGV4dC5tb3ZlVG8oaGlnaGxpZ2h0LnNjcm9sbFgsIHkpOworICAgICAgICBjb250
ZXh0LmxpbmVUbyhoaWdobGlnaHQuc2Nyb2xsWCArIGdyaWRTdWJTdGVwLCB5KTsKKyAgICAgICAg
Y29udGV4dC5zdHJva2UoKTsKICAgICB9CisKKyAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gZGFy
a0dyaWRDb2xvcjsKKyAgICBjb250ZXh0LmZpbGxTdHlsZSA9IGRhcmtHcmlkQ29sb3I7CisgICAg
Zm9yICh2YXIgeSA9IGdyaWRTdGVwOyB5IDwgaGVpZ2h0ICsgaGlnaGxpZ2h0LnNjcm9sbFk7IHkg
Kz0gZ3JpZFN0ZXApIHsKKyAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTsKKyAgICAgICAgY29u
dGV4dC5tb3ZlVG8oaGlnaGxpZ2h0LnNjcm9sbFgsIHkpOworICAgICAgICB2YXIgbWFya0xlbmd0
aCA9ICh5ICUgKGdyaWRTdGVwICogMikpID8gNSA6IDg7CisgICAgICAgIGNvbnRleHQubGluZVRv
KGhpZ2hsaWdodC5zY3JvbGxYICsgbWFya0xlbmd0aCwgeSk7CisgICAgICAgIGNvbnRleHQuc3Ry
b2tlKCk7CisgICAgICAgIGlmICghKHkgJSAoZ3JpZFN0ZXAgKiAyKSkpIHsKKyAgICAgICAgICAg
IGNvbnRleHQuc2F2ZSgpOworICAgICAgICAgICAgY29udGV4dC50cmFuc2xhdGUoaGlnaGxpZ2h0
LnNjcm9sbFgsIHkpOworICAgICAgICAgICAgY29udGV4dC5yb3RhdGUoLU1hdGguUEkgLyAyKTsK
KyAgICAgICAgICAgIGNvbnRleHQuZmlsbFRleHQoeSwgMiwgMTMpOworICAgICAgICAgICAgY29u
dGV4dC5yZXN0b3JlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb250ZXh0LnRyYW5zbGF0
ZSgwLjUsIC0wLjUpOworCisgICAgY29udGV4dC5zdHJva2VTdHlsZSA9IGxpZ2h0R3JpZENvbG9y
OworICAgIGZvciAodmFyIHggPSBncmlkU3ViU3RlcDsgeCA8IGhpZ2hsaWdodC5zY3JvbGxYICsg
d2lkdGg7IHggKz0gZ3JpZFN1YlN0ZXApIHsKKyAgICAgICAgaWYgKCEoeCAlIGdyaWRTdGVwKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpOworICAg
ICAgICBjb250ZXh0Lm1vdmVUbyh4LCBoaWdobGlnaHQuc2Nyb2xsWSk7CisgICAgICAgIGNvbnRl
eHQubGluZVRvKHgsIGhpZ2hsaWdodC5zY3JvbGxZICsgZ3JpZFN1YlN0ZXApOworICAgICAgICBj
b250ZXh0LnN0cm9rZSgpOworICAgIH0KKworICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSBkYXJr
R3JpZENvbG9yOworICAgIGNvbnRleHQuZmlsbFN0eWxlID0gZGFya0dyaWRDb2xvcjsKKyAgICBm
b3IgKHZhciB4ID0gZ3JpZFN0ZXA7IHggPCB3aWR0aCArIGhpZ2hsaWdodC5zY3JvbGxYOyB4ICs9
IGdyaWRTdGVwKSB7CisgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7CisgICAgICAgIGNvbnRl
eHQubW92ZVRvKHgsIGhpZ2hsaWdodC5zY3JvbGxZKTsKKyAgICAgICAgdmFyIG1hcmtMZW5ndGgg
PSAoeCAlIChncmlkU3RlcCAqIDIpKSA/IDUgOiA4OworICAgICAgICBjb250ZXh0LmxpbmVUbyh4
LCBoaWdobGlnaHQuc2Nyb2xsWSArIG1hcmtMZW5ndGgpOworICAgICAgICBjb250ZXh0LnN0cm9r
ZSgpOworICAgICAgICBpZiAoISh4ICUgKGdyaWRTdGVwICogMikpKQorICAgICAgICAgICAgY29u
dGV4dC5maWxsVGV4dCh4LCB4ICsgMiwgaGlnaGxpZ2h0LnNjcm9sbFkgKyAxMyk7CisgICAgfQor
ICAgIGNvbnRleHQucmVzdG9yZSgpOworfQorCitmdW5jdGlvbiBxdWFkVG9QYXRoKHF1YWQpCit7
CisgICAgY29udGV4dC5iZWdpblBhdGgoKTsKKyAgICBjb250ZXh0Lm1vdmVUbyhxdWFkWzBdLngs
IHF1YWRbMF0ueSk7CisgICAgY29udGV4dC5saW5lVG8ocXVhZFsxXS54LCBxdWFkWzFdLnkpOwor
ICAgIGNvbnRleHQubGluZVRvKHF1YWRbMl0ueCwgcXVhZFsyXS55KTsKKyAgICBjb250ZXh0Lmxp
bmVUbyhxdWFkWzNdLngsIHF1YWRbM10ueSk7CisgICAgY29udGV4dC5jbG9zZVBhdGgoKTsKKyAg
ICByZXR1cm4gY29udGV4dDsKK30KKworZnVuY3Rpb24gZHJhd091dGxpbmVkUXVhZChxdWFkLCBm
aWxsQ29sb3IsIG91dGxpbmVDb2xvcikKK3sKKyAgICBjb250ZXh0LnNhdmUoKTsKKyAgICBjb250
ZXh0LmxpbmVXaWR0aCA9IDI7CisgICAgcXVhZFRvUGF0aChxdWFkKS5jbGlwKCk7CisgICAgY29u
dGV4dC5maWxsU3R5bGUgPSBmaWxsQ29sb3I7CisgICAgY29udGV4dC5maWxsKCk7CisgICAgaWYg
KG91dGxpbmVDb2xvcikgeworICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gb3V0bGluZUNv
bG9yOworICAgICAgICBjb250ZXh0LnN0cm9rZSgpOworICAgIH0KKyAgICBjb250ZXh0LnJlc3Rv
cmUoKTsKK30KKworZnVuY3Rpb24gZHJhd091dGxpbmVkUXVhZFdpdGhDbGlwKHF1YWQsIGNsaXBR
dWFkLCBmaWxsQ29sb3IpCit7CisgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJjYW52YXMiKTsKKyAgICBjb250ZXh0LmZpbGxTdHlsZSA9IGZpbGxDb2xvcjsKKyAgICBj
b250ZXh0LnNhdmUoKTsKKyAgICBjb250ZXh0LmxpbmVXaWR0aCA9IDA7CisgICAgcXVhZFRvUGF0
aChxdWFkKS5maWxsKCk7CisgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAi
ZGVzdGluYXRpb24tb3V0IjsKKyAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICJyZWQiOworICAgIHF1
YWRUb1BhdGgoY2xpcFF1YWQpLmZpbGwoKTsKKyAgICBjb250ZXh0LnJlc3RvcmUoKTsKK30KKwor
ZnVuY3Rpb24gcXVhZEVxdWFscyhxdWFkMSwgcXVhZDIpCit7CisgICAgcmV0dXJuIHF1YWQxWzBd
LnggPT09IHF1YWQyWzBdLnggJiYgcXVhZDFbMF0ueSA9PT0gcXVhZDJbMF0ueSAmJgorICAgICAg
ICBxdWFkMVsxXS54ID09PSBxdWFkMlsxXS54ICYmIHF1YWQxWzFdLnkgPT09IHF1YWQyWzFdLnkg
JiYKKyAgICAgICAgcXVhZDFbMl0ueCA9PT0gcXVhZDJbMl0ueCAmJiBxdWFkMVsyXS55ID09PSBx
dWFkMlsyXS55ICYmCisgICAgICAgIHF1YWQxWzNdLnggPT09IHF1YWQyWzNdLnggJiYgcXVhZDFb
M10ueSA9PT0gcXVhZDJbM10ueTsKK30KKworZnVuY3Rpb24gcmVzZXQoKQoreworICAgIHdpbmRv
dy5jYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisgICAgd2luZG93
LmNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKKyAgICBjYW52YXMud2lkdGggPSBk
b2N1bWVudC5ib2R5Lm9mZnNldFdpZHRoOworICAgIGNhbnZhcy5oZWlnaHQgPSBkb2N1bWVudC5i
b2R5Lm9mZnNldEhlaWdodDsKKworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwYXVzZWQt
aW4tZGVidWdnZXIiKS5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7CisgICAgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImVsZW1lbnQtdGl0bGUiKS5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRl
biI7CisgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCJkaW1tZWQiKTsKK30KKwor
ZnVuY3Rpb24gX2RyYXdFbGVtZW50VGl0bGUoaGlnaGxpZ2h0KQoreworICAgIHZhciBlbGVtZW50
SW5mbyA9IGhpZ2hsaWdodC5lbGVtZW50SW5mbzsKKyAgICBpZiAoIWhpZ2hsaWdodC5lbGVtZW50
SW5mbykKKyAgICAgICAgcmV0dXJuOworCisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRh
Zy1uYW1lIikudGV4dENvbnRlbnQgPSBlbGVtZW50SW5mby50YWdOYW1lOworICAgIGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJub2RlLWlkIikudGV4dENvbnRlbnQgPSBlbGVtZW50SW5mby5ub2Rl
SWQgPyAiIyIgKyBlbGVtZW50SW5mby5ub2RlSWQgOiAiIjsKKyAgICBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiY2xhc3MtbmFtZSIpLnRleHRDb250ZW50ID0gZWxlbWVudEluZm8uY2xhc3NOYW1l
IHx8ICIiOworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJub2RlLXdpZHRoIikudGV4dENv
bnRlbnQgPSBlbGVtZW50SW5mby5ub2RlV2lkdGg7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoIm5vZGUtaGVpZ2h0IikudGV4dENvbnRlbnQgPSBlbGVtZW50SW5mby5ub2RlSGVpZ2h0Owor
ICAgIHZhciBlbGVtZW50VGl0bGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZWxlbWVudC10
aXRsZSIpOworCisgICAgdmFyIG1hcmdpblF1YWQgPSBoaWdobGlnaHQucXVhZHNbMF07CisKKyAg
ICB2YXIgdGl0bGVXaWR0aCA9IGVsZW1lbnRUaXRsZS5vZmZzZXRXaWR0aCArIDY7CisgICAgdmFy
IHRpdGxlSGVpZ2h0ID0gZWxlbWVudFRpdGxlLm9mZnNldEhlaWdodCArIDQ7CisKKyAgICB2YXIg
YW5jaG9yVG9wID0gbWFyZ2luUXVhZFswXS55OworICAgIHZhciBhbmNob3JCb3R0b20gPSBtYXJn
aW5RdWFkWzNdLnkKKworICAgIGNvbnN0IGFycm93SGVpZ2h0ID0gNzsKKyAgICB2YXIgcmVuZGVy
QXJyb3dVcCA9IGZhbHNlOworICAgIHZhciByZW5kZXJBcnJvd0Rvd24gPSBmYWxzZTsKKworICAg
IHZhciBib3hYID0gTWF0aC5tYXgoMiwgbWFyZ2luUXVhZFswXS54KTsKKyAgICBpZiAoYm94WCAr
IHRpdGxlV2lkdGggPiBjYW52YXMud2lkdGgpCisgICAgICAgIGJveFggPSBjYW52YXMud2lkdGgg
LSB0aXRsZVdpZHRoIC0gMjsKKworICAgIHZhciBib3hZOworICAgIGlmIChhbmNob3JUb3AgPiBj
YW52YXMuaGVpZ2h0KSB7CisgICAgICAgIGJveFkgPSBjYW52YXMuaGVpZ2h0IC0gdGl0bGVIZWln
aHQgLSBhcnJvd0hlaWdodDsKKyAgICAgICAgcmVuZGVyQXJyb3dEb3duID0gdHJ1ZTsKKyAgICB9
IGVsc2UgaWYgKGFuY2hvckJvdHRvbSA8IDApIHsKKyAgICAgICAgYm94WSA9IGFycm93SGVpZ2h0
OworICAgICAgICByZW5kZXJBcnJvd1VwID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKGFuY2hvckJv
dHRvbSArIHRpdGxlSGVpZ2h0ICsgYXJyb3dIZWlnaHQgPCBjYW52YXMuaGVpZ2h0KSB7CisgICAg
ICAgIGJveFkgPSBhbmNob3JCb3R0b20gKyBhcnJvd0hlaWdodCAtIDQ7CisgICAgICAgIHJlbmRl
ckFycm93VXAgPSB0cnVlOworICAgIH0gZWxzZSBpZiAoYW5jaG9yVG9wIC0gdGl0bGVIZWlnaHQg
LSBhcnJvd0hlaWdodCA+IDApIHsKKyAgICAgICAgYm94WSA9IGFuY2hvclRvcCAtIHRpdGxlSGVp
Z2h0IC0gYXJyb3dIZWlnaHQgKyAzOworICAgICAgICByZW5kZXJBcnJvd0Rvd24gPSB0cnVlOwor
ICAgIH0gZWxzZQorICAgICAgICBib3hZID0gYXJyb3dIZWlnaHQ7CisKKyAgICBjb250ZXh0LnNh
dmUoKTsKKyAgICBjb250ZXh0LnRyYW5zbGF0ZSgwLjUsIDAuNSk7CisgICAgY29udGV4dC5iZWdp
blBhdGgoKTsKKyAgICBjb250ZXh0Lm1vdmVUbyhib3hYLCBib3hZKTsKKyAgICBpZiAocmVuZGVy
QXJyb3dVcCkgeworICAgICAgICBjb250ZXh0LmxpbmVUbyhib3hYICsgMiAqIGFycm93SGVpZ2h0
LCBib3hZKTsKKyAgICAgICAgY29udGV4dC5saW5lVG8oYm94WCArIDMgKiBhcnJvd0hlaWdodCwg
Ym94WSAtIGFycm93SGVpZ2h0KTsKKyAgICAgICAgY29udGV4dC5saW5lVG8oYm94WCArIDQgKiBh
cnJvd0hlaWdodCwgYm94WSk7CisgICAgfQorICAgIGNvbnRleHQubGluZVRvKGJveFggKyB0aXRs
ZVdpZHRoLCBib3hZKTsKKyAgICBjb250ZXh0LmxpbmVUbyhib3hYICsgdGl0bGVXaWR0aCwgYm94
WSArIHRpdGxlSGVpZ2h0KTsKKyAgICBpZiAocmVuZGVyQXJyb3dEb3duKSB7CisgICAgICAgIGNv
bnRleHQubGluZVRvKGJveFggKyA0ICogYXJyb3dIZWlnaHQsIGJveFkgKyB0aXRsZUhlaWdodCk7
CisgICAgICAgIGNvbnRleHQubGluZVRvKGJveFggKyAzICogYXJyb3dIZWlnaHQsIGJveFkgKyB0
aXRsZUhlaWdodCArIGFycm93SGVpZ2h0KTsKKyAgICAgICAgY29udGV4dC5saW5lVG8oYm94WCAr
IDIgKiBhcnJvd0hlaWdodCwgYm94WSArIHRpdGxlSGVpZ2h0KTsKKyAgICB9CisgICAgY29udGV4
dC5saW5lVG8oYm94WCwgYm94WSArIHRpdGxlSGVpZ2h0KTsKKyAgICBjb250ZXh0LmNsb3NlUGF0
aCgpOworICAgIGNvbnRleHQuZmlsbFN0eWxlID0gInJnYigyNTUsIDI1NSwgMTk0KSI7CisgICAg
Y29udGV4dC5maWxsKCk7CisgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICJyZ2IoMTI4LCAxMjgs
IDEyOCkiOworICAgIGNvbnRleHQuc3Ryb2tlKCk7CisKKyAgICBjb250ZXh0LnJlc3RvcmUoKTsK
KworICAgIGVsZW1lbnRUaXRsZS5zdHlsZS52aXNpYmlsaXR5ID0gInZpc2libGUiOworICAgIGVs
ZW1lbnRUaXRsZS5zdHlsZS50b3AgPSAoYm94WSArIDMpICsgInB4IjsKKyAgICBlbGVtZW50VGl0
bGUuc3R5bGUubGVmdCA9IChib3hYICsgMykgKyAicHgiOworfQorCitmdW5jdGlvbiBfZHJhd1J1
bGVycyhoaWdobGlnaHQpCit7CisgICAgY29udGV4dC5zYXZlKCk7CisgICAgY29udGV4dC5zdHJv
a2VTdHlsZSA9ICJyZ2JhKDEyOCwgMTI4LCAxMjgsIDAuMykiOworICAgIGNvbnRleHQubGluZVdp
ZHRoID0gMTsKKyAgICBjb250ZXh0LnRyYW5zbGF0ZSgwLjUsIDAuNSk7CisgICAgdmFyIGxlZnRt
b3N0WEZvclkgPSB7fTsKKyAgICB2YXIgdG9wbW9zdFlGb3JYID0ge307CisKKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGhpZ2hsaWdodC5xdWFkcy5sZW5ndGg7ICsraSkgeworICAgICAgICB2YXIg
cXVhZCA9IGhpZ2hsaWdodC5xdWFkc1tpXTsKKyAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBx
dWFkLmxlbmd0aDsgKytqKSB7CisgICAgICAgICAgICB2YXIgeCA9IHF1YWRbal0ueDsKKyAgICAg
ICAgICAgIHZhciB5ID0gcXVhZFtqXS55OworICAgICAgICAgICAgdG9wbW9zdFlGb3JYW01hdGgu
cm91bmQoeCldID0gTWF0aC5taW4odG9wbW9zdFlGb3JYW3hdIHx8IE51bWJlci5NQVhfVkFMVUUs
IE1hdGgucm91bmQocXVhZFtqXS55KSk7CisgICAgICAgICAgICBsZWZ0bW9zdFhGb3JZW01hdGgu
cm91bmQoeSldID0gTWF0aC5taW4obGVmdG1vc3RYRm9yWVt5XSB8fCBOdW1iZXIuTUFYX1ZBTFVF
LCBNYXRoLnJvdW5kKHF1YWRbal0ueCkpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh2
YXIgeSBpbiBsZWZ0bW9zdFhGb3JZKSB7CisgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7Cisg
ICAgICAgIGNvbnRleHQubW92ZVRvKDAsIHkpOworICAgICAgICBjb250ZXh0LmxpbmVUbyhsZWZ0
bW9zdFhGb3JZW3ldLCB5KTsKKyAgICAgICAgY29udGV4dC5zdHJva2UoKTsKKyAgICB9CisKKyAg
ICBmb3IgKHZhciB4IGluIHRvcG1vc3RZRm9yWCkgeworICAgICAgICBjb250ZXh0LmJlZ2luUGF0
aCgpOworICAgICAgICBjb250ZXh0Lm1vdmVUbyh4LCAwKTsKKyAgICAgICAgY29udGV4dC5saW5l
VG8oeCwgdG9wbW9zdFlGb3JYW3hdKTsKKyAgICAgICAgY29udGV4dC5zdHJva2UoKTsKKyAgfQor
CisgICAgY29udGV4dC5yZXN0b3JlKCk7Cit9CisKK2Z1bmN0aW9uIGRyYXdOb2RlSGlnaGxpZ2h0
KGhpZ2hsaWdodCkKK3sKKyAgICBfZHJhd0dyaWQoaGlnaGxpZ2h0KTsKKworICAgIGlmICghaGln
aGxpZ2h0LnF1YWRzLmxlbmd0aCkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29udGV4dC5zYXZl
KCk7CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhpZ2hsaWdodC5xdWFkcy5sZW5ndGg7ICsr
aSkgeworICAgICAgICB2YXIgcXVhZCA9IGhpZ2hsaWdodC5xdWFkc1tpXTsKKyAgICAgICAgZm9y
ICh2YXIgaiA9IDA7IGogPCBxdWFkLmxlbmd0aDsgKytqKSB7CisgICAgICAgICAgICBxdWFkW2pd
LnggLT0gaGlnaGxpZ2h0LnNjcm9sbFg7CisgICAgICAgICAgICBxdWFkW2pdLnkgLT0gaGlnaGxp
Z2h0LnNjcm9sbFk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2YXIgcXVhZHMgPSBoaWdobGln
aHQucXVhZHMuc2xpY2UoKTsKKyAgICB2YXIgY29udGVudFF1YWQgPSB0YWtlTGFzdChxdWFkcyk7
CisgICAgdmFyIHBhZGRpbmdRdWFkID0gdGFrZUxhc3QocXVhZHMpOworICAgIHZhciBib3JkZXJR
dWFkID0gdGFrZUxhc3QocXVhZHMpOworICAgIHZhciBtYXJnaW5RdWFkID0gdGFrZUxhc3QocXVh
ZHMpOworCisgICAgdmFyIGhhc0NvbnRlbnQgPSBjb250ZW50UXVhZCAmJiBoaWdobGlnaHQuY29u
dGVudENvbG9yICE9PSB0cmFuc3BhcmVudENvbG9yIHx8IGhpZ2hsaWdodC5jb250ZW50T3V0bGlu
ZUNvbG9yICE9PSB0cmFuc3BhcmVudENvbG9yOworICAgIHZhciBoYXNQYWRkaW5nID0gcGFkZGlu
Z1F1YWQgJiYgaGlnaGxpZ2h0LnBhZGRpbmdDb2xvciAhPT0gdHJhbnNwYXJlbnRDb2xvcjsKKyAg
ICB2YXIgaGFzQm9yZGVyID0gYm9yZGVyUXVhZCAmJiBoaWdobGlnaHQuYm9yZGVyQ29sb3IgIT09
IHRyYW5zcGFyZW50Q29sb3I7CisgICAgdmFyIGhhc01hcmdpbiA9IG1hcmdpblF1YWQgJiYgaGln
aGxpZ2h0Lm1hcmdpbkNvbG9yICE9PSB0cmFuc3BhcmVudENvbG9yOworCisgICAgdmFyIGNsaXBR
dWFkOworICAgIGlmIChoYXNNYXJnaW4gJiYgKCFoYXNCb3JkZXIgfHwgIXF1YWRFcXVhbHMobWFy
Z2luUXVhZCwgYm9yZGVyUXVhZCkpKSB7CisgICAgICAgIGRyYXdPdXRsaW5lZFF1YWRXaXRoQ2xp
cChtYXJnaW5RdWFkLCBib3JkZXJRdWFkLCBoaWdobGlnaHQubWFyZ2luQ29sb3IpOworICAgICAg
ICBjbGlwUXVhZCA9IGJvcmRlclF1YWQ7CisgICAgfQorICAgIGlmIChoYXNCb3JkZXIgJiYgKCFo
YXNQYWRkaW5nIHx8ICFxdWFkRXF1YWxzKGJvcmRlclF1YWQsIHBhZGRpbmdRdWFkKSkpIHsKKyAg
ICAgICAgZHJhd091dGxpbmVkUXVhZFdpdGhDbGlwKGJvcmRlclF1YWQsIHBhZGRpbmdRdWFkLCBo
aWdobGlnaHQuYm9yZGVyQ29sb3IpOworICAgICAgICBjbGlwUXVhZCA9IHBhZGRpbmdRdWFkOwor
ICAgIH0KKyAgICBpZiAoaGFzUGFkZGluZyAmJiAoIWhhc0NvbnRlbnQgfHwgIXF1YWRFcXVhbHMo
cGFkZGluZ1F1YWQsIGNvbnRlbnRRdWFkKSkpIHsKKyAgICAgICAgZHJhd091dGxpbmVkUXVhZFdp
dGhDbGlwKHBhZGRpbmdRdWFkLCBjb250ZW50UXVhZCwgaGlnaGxpZ2h0LnBhZGRpbmdDb2xvcik7
CisgICAgICAgIGNsaXBRdWFkID0gY29udGVudFF1YWQ7CisgICAgfQorICAgIGlmIChoYXNDb250
ZW50KQorICAgICAgICBkcmF3T3V0bGluZWRRdWFkKGNvbnRlbnRRdWFkLCBoaWdobGlnaHQuY29u
dGVudENvbG9yLCBoaWdobGlnaHQuY29udGVudE91dGxpbmVDb2xvcik7CisKKyAgICBfZHJhd0Vs
ZW1lbnRUaXRsZShoaWdobGlnaHQpOworICAgIF9kcmF3UnVsZXJzKGhpZ2hsaWdodCk7CisgICAg
Y29udGV4dC5yZXN0b3JlKCk7Cit9CisKK2Z1bmN0aW9uIGRyYXdSZWN0SGlnaGxpZ2h0KGhpZ2hs
aWdodCkKK3sKKyAgICBjb250ZXh0LnNhdmUoKTsKKyAgICBkcmF3T3V0bGluZWRRdWFkKGhpZ2hs
aWdodC5xdWFkc1swXSwgaGlnaGxpZ2h0LmNvbnRlbnRDb2xvciwgaGlnaGxpZ2h0LmNvbnRlbnRP
dXRsaW5lQ29sb3IpOworICAgIGNvbnRleHQucmVzdG9yZSgpOwogfQogCiBmdW5jdGlvbiBkaXNw
YXRjaChtZXNzYWdlKQpAQCAtNzksOSArNDAwLDIzIEBAIGZ1bmN0aW9uIGRpc3BhdGNoKG1lc3Nh
Z2UpCiAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IG1lc3NhZ2Uuc2hpZnQoKTsKICAgICB3aW5kb3db
ZnVuY3Rpb25OYW1lXS5hcHBseShudWxsLCBtZXNzYWdlKTsKIH0KKworZnVuY3Rpb24gbG9nKHRl
eHQpCit7CisgICAgdmFyIGxvZ0VudHJ5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7
CisgICAgbG9nRW50cnkudGV4dENvbnRlbnQgPSB0ZXh0OworICAgIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJsb2ciKS5hcHBlbmRDaGlsZChsb2dFbnRyeSk7Cit9CisKIDwvc2NyaXB0PgogPC9o
ZWFkPgogPGJvZHkgY2xhc3M9ImZpbGwiPgogPGRpdiBjbGFzcz0ibWVzc2FnZS1saW5lIj48c3Bh
biBjbGFzcz0ibWVzc2FnZS1ib3giIGlkPSJwYXVzZWQtaW4tZGVidWdnZXIiPjwvc3Bhbj48L2Rp
dj4KIDwvYm9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgY2xhc3M9ImZpbGwiPjwvY2FudmFzPgor
PGRpdiBpZD0iZWxlbWVudC10aXRsZSI+CisgIDxzcGFuIGlkPSJ0YWctbmFtZSI+PC9zcGFuPjxz
cGFuIGlkPSJub2RlLWlkIj48L3NwYW4+PHNwYW4gaWQ9ImNsYXNzLW5hbWUiPjwvc3Bhbj4KKyAg
PHNwYW4gaWQ9Im5vZGUtd2lkdGgiPjwvc3Bhbj48c3BhbiBjbGFzcz0icHgiPnB4PC9zcGFuPjxz
cGFuIGNsYXNzPSJweCI+ICYjeEQ3OyA8L3NwYW4+PHNwYW4gaWQ9Im5vZGUtaGVpZ2h0Ij48L3Nw
YW4+PHNwYW4gY2xhc3M9InB4Ij5weDwvc3Bhbj4KKzwvZGl2PgorPGRpdiBpZD0ibG9nIj48L2Rp
dj4KIDwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JQYWdlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VB
Z2VudC5jcHAKaW5kZXggYjY4NDlmYTg5MjRmZDFkNWEwZDY1N2MyZGE4NGQyMzMxYWQwNDM4Zi4u
YTc5NGM3MDgxYjI4ODFmM2ZhNTJjYTIxMGE4ODNlZWU2YTM3MjU2MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKQEAgLTkxNSw2ICs5MTUs
MTIgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpZExheW91dCgpCiAKICAgICBpZiAoY3Vy
cmVudFdpZHRoICYmIGN1cnJlbnRIZWlnaHQpCiAgICAgICAgIG1fY2xpZW50LT5hdXRvWm9vbVBh
Z2VUb0ZpdFdpZHRoKCk7CisgICAgbV9vdmVybGF5LT51cGRhdGUoKTsKK30KKwordm9pZCBJbnNw
ZWN0b3JQYWdlQWdlbnQ6OmRpZFNjcm9sbCgpCit7CisgICAgbV9vdmVybGF5LT51cGRhdGUoKTsK
IH0KIAogUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UGFnZTo6RnJhbWU+IEluc3BlY3RvclBhZ2VB
Z2VudDo6YnVpbGRPYmplY3RGb3JGcmFtZShGcmFtZSogZnJhbWUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmgKaW5kZXggN2I5MTc3OWY5N2FlMzhiNmMy
MWFjMTMzNGUxZTM1ODg2NGI1ZmRkMC4uM2U0ZWMxMTAxMTRlNWMwNjc4ZTI1YWZhYjBhZjM4NzAx
N2NmZjNlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBh
Z2VBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdl
bnQuaApAQCAtMTM3LDYgKzEzNyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHdpbGxQYWludChHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBMYXlvdXRSZWN0Jik7CiAgICAgdm9pZCBkaWRQYWludCgpOwog
ICAgIHZvaWQgZGlkTGF5b3V0KCk7CisgICAgdm9pZCBkaWRTY3JvbGwoKTsKIAogICAgIC8vIElu
c3BlY3RvciBDb250cm9sbGVyIEFQSQogICAgIHZpcnR1YWwgdm9pZCBzZXRGcm9udGVuZChJbnNw
ZWN0b3JGcm9udGVuZCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCmluZGV4IDQzNjIyMmQ4ODUyZWQy
ZmQxMGQ0ZjNlNzg2NjI1N2U0NWJhOTUzNjcuLmNjYTRhMDkyNWY3ZGUyYmU5YjgwMWZlNDBiZDE5
MDExZDIyMWJlNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKQEAgLTk1LDYgKzk1LDcgQEAgdm9p
ZCBDaHJvbWU6OmludmFsaWRhdGVDb250ZW50c0ZvclNsb3dTY3JvbGwoY29uc3QgSW50UmVjdCYg
dXBkYXRlUmVjdCwgYm9vbCBpbW0KIHZvaWQgQ2hyb21lOjpzY3JvbGwoY29uc3QgSW50U2l6ZSYg
c2Nyb2xsRGVsdGEsIGNvbnN0IEludFJlY3QmIHJlY3RUb1Njcm9sbCwgY29uc3QgSW50UmVjdCYg
Y2xpcFJlY3QpCiB7CiAgICAgbV9jbGllbnQtPnNjcm9sbChzY3JvbGxEZWx0YSwgcmVjdFRvU2Ny
b2xsLCBjbGlwUmVjdCk7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRTY3JvbGwo
bV9wYWdlKTsKIH0KIAogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161473</attachid>
            <date>2012-08-30 08:11:49 -0700</date>
            <delta_ts>2012-08-30 08:56:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95456-20120830191137.patch</filename>
            <type>text/plain</type>
            <size>47582</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3MTQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGY1ODE2MDk5OWI1YzI2
MDhhYTkzMzE2ZDc2MmNmNDMyNzEzNzdmYi4uN2UzOGI0MjczNjg2YzMwZWE3ZGZiYjUwYTRhNWMz
ZTdjZTdmMGFkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDEyLTA4LTMwICBQYXZl
bCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IHJlbmRlciBib3ggbW9kZWwgZWxlbWVudHMgYW5kIGdyaWQgb24gaW5zcGVjdG9yIG92ZXJs
YXkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NDU2
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBj
aGFuZ2UgbWlncmF0ZXMgbmF0aXZlIHJlbmRlcmluZyBmb3IgYm94IG1vZGVsIHRvIHRoZSBJbnNw
ZWN0b3JPdmVybGF5LgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRh
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6ZGlkU2Nyb2xsSW1wbCk6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3Rvckluc3RydW1lbnRhdGlvbi5oOgorICAgICAgICAoSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkU2Ny
b2xsKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JP
dmVybGF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmRyYXdOb2Rl
SGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmRyYXdSZWN0
SGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6Om92ZXJsYXlQ
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmV2YWx1YXRlSW5PdmVy
bGF5KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5oOgorICAgICAgICAo
V2ViQ29yZTo6SGlnaGxpZ2h0OjpzZXRDb2xvcnMpOgorICAgICAgICAoSGlnaGxpZ2h0KToKKyAg
ICAgICAgKEluc3BlY3Rvck92ZXJsYXkpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JP
dmVybGF5UGFnZS5odG1sOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpkaWRMYXlvdXQpOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6
OmRpZFNjcm9sbCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oOgor
ICAgICAgICAqIHBhZ2UvQ2hyb21lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZTo6c2Ny
b2xsKToKKwogMjAxMi0wOC0zMCAgS2Vpc2hpIEhhdHRvcmkgIDxrZWlzaGlAd2Via2l0Lm9yZz4K
IAogICAgICAgICBUaWNrIG1hcmtzIGRvbid0IG1hdGNoIHRodW1iIHdoZW4gYXBwbHlpbmcgcGFk
ZGluZyBvciBib3JkZXIgdG8gaW5wdXQgdHlwZT1yYW5nZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcAppbmRleCBhZjQ0NzI4
YzY0NjEwMDhiYWYzOTQ3ZjNkYjY5N2Y2MjRmYTZjNmU3Li40MWI3YmM4MWFkZWRhMGFlODgxZWJl
OTZlZWY3ZDA3ZTYzZDE0OWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcApAQCAtMjQ5LDYgKzI0OSwxMiBAQCB2b2lk
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnRJbXBsKElu
c3RydW1lbnRpbmdBZ2VudHMqCiAgICAgICAgIGRvbUFnZW50LT5tb3VzZURpZE1vdmVPdmVyRWxl
bWVudChyZXN1bHQsIG1vZGlmaWVyRmxhZ3MpOwogfQogCit2b2lkIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6ZGlkU2Nyb2xsSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5n
QWdlbnRzKQoreworICAgIGlmIChJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCA9IGluc3Ry
dW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvclBhZ2VBZ2VudCgpKQorICAgICAgICBwYWdlQWdlbnQt
PmRpZFNjcm9sbCgpOworfQorCiBib29sIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aGFuZGxl
TW91c2VQcmVzc0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cykK
IHsKICAgICBpZiAoSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zdHJ1bWVudGluZ0Fn
ZW50cy0+aW5zcGVjdG9yRE9NQWdlbnQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaAppbmRleCBkYjMzNWJmYWY0NTBjYzMxOGNi
Y2U0ZGY2MTgxMTI3ZGQyNTRmNWM4Li4wY2MwY2MyMWMwNGYzNGQxNTdkNjA5Y2U3OGVkNTlkMjYz
ZmM2ZmJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvcklu
c3RydW1lbnRhdGlvbi5oCkBAIC0xNDUsNiArMTQ1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2
b2lkIGRpZEludmFsaWRhdGVMYXlvdXQoRnJhbWUqKTsKICAgICBzdGF0aWMgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uQ29va2llIHdpbGxMYXlvdXQoRnJhbWUqKTsKICAgICBzdGF0aWMgdm9pZCBk
aWRMYXlvdXQoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJik7CisgICAgc3Rh
dGljIHZvaWQgZGlkU2Nyb2xsKFBhZ2UqKTsKICAgICBzdGF0aWMgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uQ29va2llIHdpbGxMb2FkWEhSKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBYTUxIdHRw
UmVxdWVzdCopOwogICAgIHN0YXRpYyB2b2lkIGRpZExvYWRYSFIoY29uc3QgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uQ29va2llJik7CiAgICAgc3RhdGljIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bkNvb2tpZSB3aWxsUGFpbnQoRnJhbWUqLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXlvdXRS
ZWN0Jik7CkBAIC0zMjEsNiArMzIyLDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBkaWRJ
bnZhbGlkYXRlTGF5b3V0SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgRnJhbWUqKTsKICAgICBz
dGF0aWMgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIHdpbGxMYXlvdXRJbXBsKEluc3Ry
dW1lbnRpbmdBZ2VudHMqLCBGcmFtZSopOwogICAgIHN0YXRpYyB2b2lkIGRpZExheW91dEltcGwo
Y29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJik7CisgICAgc3RhdGljIHZvaWQg
ZGlkU2Nyb2xsSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKik7CiAgICAgc3RhdGljIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbkNvb2tpZSB3aWxsTG9hZFhIUkltcGwoSW5zdHJ1bWVudGluZ0FnZW50
cyosIFhNTEh0dHBSZXF1ZXN0KiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogICAgIHN0YXRp
YyB2b2lkIGRpZExvYWRYSFJJbXBsKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tp
ZSYpOwogICAgIHN0YXRpYyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2lsbFBhaW50
SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5b3V0
UmVjdCYsIEZyYW1lKik7CkBAIC04NDAsNiArODQyLDE1IEBAIGlubGluZSB2b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6ZGlkTGF5b3V0KGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bkNvCiAjZW5kaWYKIH0KIAoraW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpk
aWRTY3JvbGwoUGFnZSogcGFnZSkKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgIEZBU1Rf
UkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOworICAgIGlmIChJbnN0cnVtZW50aW5nQWdl
bnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvclBhZ2UocGFn
ZSkpCisgICAgICAgIGRpZFNjcm9sbEltcGwoaW5zdHJ1bWVudGluZ0FnZW50cyk7CisjZW5kaWYK
K30KKwogaW5saW5lIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OndpbGxMb2FkWEhSKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IFhNTEh0dHBSZXF1ZXN0KiByZXF1ZXN0KQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAKaW5kZXggNjk5ZWI0
YjgwM2U3YmNlYWZlNjcwMDM2YWM0ZGFjNjBhNGEzNmFjNy4uZWJmZDA4Mzg0Y2JlM2FkMWMzNzYx
ZDIxMzgyYTBkMzQ2ZDVjYTc4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3Rvck92ZXJsYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JPdmVybGF5LmNwcApAQCAtMzUsNDcgKzM1LDI2IEBACiAjaW5jbHVkZSAiRG9jdW1lbnRM
b2FkZXIuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRW1wdHlDbGllbnRzLmgi
Ci0jaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgotI2luY2x1ZGUgIkZv
bnRGYW1pbHkuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIK
ICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JPdmVybGF5
UGFnZS5oIgotI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgogI2luY2x1ZGUgIk5vZGUuaCIK
ICNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJC
b3hNb2RlbE9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUgIlJl
bmRlck9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTY3JpcHRT
b3VyY2VDb2RlLmgiCiAjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJTZXR0aW5n
cy5oIgogI2luY2x1ZGUgIlN0eWxlZEVsZW1lbnQuaCIKLSNpbmNsdWRlICJUZXh0UnVuLmgiCi0j
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIG5hbWVzcGFjZSB7CiAKLSNpZiBPUyhXSU5ET1dTKQotc3RhdGljIGNvbnN0IHVuc2lnbmVk
IGZvbnRIZWlnaHRQeCA9IDEyOwotI2VsaWYgT1MoTUFDX09TX1gpIHx8IE9TKFVOSVgpCi1zdGF0
aWMgY29uc3QgdW5zaWduZWQgZm9udEhlaWdodFB4ID0gMTE7Ci0jZW5kaWYKLQotY29uc3Qgc3Rh
dGljIGludCByZWN0SW5mbGF0ZVB4ID0gNDsKLWNvbnN0IHN0YXRpYyBpbnQgYm9yZGVyV2lkdGhQ
eCA9IDE7Ci1jb25zdCBzdGF0aWMgaW50IHRvb2x0aXBQYWRkaW5nID0gNDsKLQotY29uc3Qgc3Rh
dGljIGludCBhcnJvd1RpcE9mZnNldCA9IDIwOwotY29uc3Qgc3RhdGljIGZsb2F0IGFycm93SGVp
Z2h0ID0gNzsKLWNvbnN0IHN0YXRpYyBmbG9hdCBhcnJvd0hhbGZXaWR0aCA9IDc7Ci0KIFBhdGgg
cXVhZFRvUGF0aChjb25zdCBGbG9hdFF1YWQmIHF1YWQpCiB7CiAgICAgUGF0aCBxdWFkUGF0aDsK
QEAgLTExMSwyNTYgKzkwLDYgQEAgdm9pZCBkcmF3T3V0bGluZWRRdWFkKEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgRmxvYXRRdWFkJiBxdWFkLCBjb25zdCBDb2wKICAgICBjb250ZXh0
LT5maWxsUGF0aChxdWFkUGF0aCk7CiB9CiAKLXZvaWQgZHJhd091dGxpbmVkUXVhZFdpdGhDbGlw
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRRdWFkJiBxdWFkLCBjb25zdCBG
bG9hdFF1YWQmIGNsaXBRdWFkLCBjb25zdCBDb2xvciYgZmlsbENvbG9yKQotewotICAgIGNvbnRl
eHQtPnNhdmUoKTsKLSAgICBQYXRoIGNsaXBRdWFkUGF0aCA9IHF1YWRUb1BhdGgoY2xpcFF1YWQp
OwotICAgIGNvbnRleHQtPmNsaXBPdXQoY2xpcFF1YWRQYXRoKTsKLSAgICBkcmF3T3V0bGluZWRR
dWFkKGNvbnRleHQsIHF1YWQsIGZpbGxDb2xvciwgQ29sb3I6OnRyYW5zcGFyZW50KTsKLSAgICBj
b250ZXh0LT5yZXN0b3JlKCk7Ci19Ci0KLXZvaWQgZHJhd0hpZ2hsaWdodEZvckJveChHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UXVhZCYgY29udGVudFF1YWQsIGNvbnN0IEZs
b2F0UXVhZCYgcGFkZGluZ1F1YWQsIGNvbnN0IEZsb2F0UXVhZCYgYm9yZGVyUXVhZCwgY29uc3Qg
RmxvYXRRdWFkJiBtYXJnaW5RdWFkLCBjb25zdCBIaWdobGlnaHRDb25maWcmIGhpZ2hsaWdodENv
bmZpZykKLXsKLSAgICBib29sIGhhc01hcmdpbiA9IGhpZ2hsaWdodENvbmZpZy5tYXJnaW4gIT0g
Q29sb3I6OnRyYW5zcGFyZW50OwotICAgIGJvb2wgaGFzQm9yZGVyID0gaGlnaGxpZ2h0Q29uZmln
LmJvcmRlciAhPSBDb2xvcjo6dHJhbnNwYXJlbnQ7Ci0gICAgYm9vbCBoYXNQYWRkaW5nID0gaGln
aGxpZ2h0Q29uZmlnLnBhZGRpbmcgIT0gQ29sb3I6OnRyYW5zcGFyZW50OwotICAgIGJvb2wgaGFz
Q29udGVudCA9IGhpZ2hsaWdodENvbmZpZy5jb250ZW50ICE9IENvbG9yOjp0cmFuc3BhcmVudCB8
fCBoaWdobGlnaHRDb25maWcuY29udGVudE91dGxpbmUgIT0gQ29sb3I6OnRyYW5zcGFyZW50Owot
Ci0gICAgRmxvYXRRdWFkIGNsaXBRdWFkOwotICAgIENvbG9yIGNsaXBDb2xvcjsKLSAgICBpZiAo
aGFzTWFyZ2luICYmICghaGFzQm9yZGVyIHx8IG1hcmdpblF1YWQgIT0gYm9yZGVyUXVhZCkpIHsK
LSAgICAgICAgZHJhd091dGxpbmVkUXVhZFdpdGhDbGlwKGNvbnRleHQsIG1hcmdpblF1YWQsIGJv
cmRlclF1YWQsIGhpZ2hsaWdodENvbmZpZy5tYXJnaW4pOwotICAgICAgICBjbGlwUXVhZCA9IGJv
cmRlclF1YWQ7Ci0gICAgfQotICAgIGlmIChoYXNCb3JkZXIgJiYgKCFoYXNQYWRkaW5nIHx8IGJv
cmRlclF1YWQgIT0gcGFkZGluZ1F1YWQpKSB7Ci0gICAgICAgIGRyYXdPdXRsaW5lZFF1YWRXaXRo
Q2xpcChjb250ZXh0LCBib3JkZXJRdWFkLCBwYWRkaW5nUXVhZCwgaGlnaGxpZ2h0Q29uZmlnLmJv
cmRlcik7Ci0gICAgICAgIGNsaXBRdWFkID0gcGFkZGluZ1F1YWQ7Ci0gICAgfQotICAgIGlmICho
YXNQYWRkaW5nICYmICghaGFzQ29udGVudCB8fCBwYWRkaW5nUXVhZCAhPSBjb250ZW50UXVhZCkp
IHsKLSAgICAgICAgZHJhd091dGxpbmVkUXVhZFdpdGhDbGlwKGNvbnRleHQsIHBhZGRpbmdRdWFk
LCBjb250ZW50UXVhZCwgaGlnaGxpZ2h0Q29uZmlnLnBhZGRpbmcpOwotICAgICAgICBjbGlwUXVh
ZCA9IGNvbnRlbnRRdWFkOwotICAgIH0KLSAgICBpZiAoaGFzQ29udGVudCkKLSAgICAgICAgZHJh
d091dGxpbmVkUXVhZChjb250ZXh0LCBjb250ZW50UXVhZCwgaGlnaGxpZ2h0Q29uZmlnLmNvbnRl
bnQsIGhpZ2hsaWdodENvbmZpZy5jb250ZW50T3V0bGluZSk7Ci19Ci0KLXZvaWQgZHJhd0hpZ2hs
aWdodEZvclNWR1JlbmRlcmVyKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVmVjdG9y
PEZsb2F0UXVhZD4mIGFic29sdXRlUXVhZHMsIGNvbnN0IEhpZ2hsaWdodENvbmZpZyYgaGlnaGxp
Z2h0Q29uZmlnKQotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYWJzb2x1dGVRdWFkcy5z
aXplKCk7ICsraSkKLSAgICAgICAgZHJhd091dGxpbmVkUXVhZChjb250ZXh0LCBhYnNvbHV0ZVF1
YWRzW2ldLCBoaWdobGlnaHRDb25maWcuY29udGVudCwgQ29sb3I6OnRyYW5zcGFyZW50KTsKLX0K
LQotaW50IGRyYXdTdWJzdHJpbmcoY29uc3QgVGV4dFJ1biYgZ2xvYmFsVGV4dFJ1biwgaW50IG9m
ZnNldCwgaW50IGxlbmd0aCwgY29uc3QgQ29sb3ImIHRleHRDb2xvciwgY29uc3QgRm9udCYgZm9u
dCwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiB0aXRsZVJlY3Qp
Ci17Ci0gICAgY29udGV4dC0+c2V0RmlsbENvbG9yKHRleHRDb2xvciwgQ29sb3JTcGFjZURldmlj
ZVJHQik7Ci0gICAgY29udGV4dC0+ZHJhd1RleHQoZm9udCwgZ2xvYmFsVGV4dFJ1biwgSW50UG9p
bnQodGl0bGVSZWN0LnBpeGVsU25hcHBlZFgoKSArIHJlY3RJbmZsYXRlUHgsIHRpdGxlUmVjdC5w
aXhlbFNuYXBwZWRZKCkgKyBmb250LmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCkpLCBvZmZzZXQsIG9m
ZnNldCArIGxlbmd0aCk7Ci0gICAgcmV0dXJuIG9mZnNldCArIGxlbmd0aDsKLX0KLQotZmxvYXQg
Y2FsY3VsYXRlQXJyb3dUaXBYKGNvbnN0IExheW91dFJlY3QmIGFuY2hvckJveCwgY29uc3QgTGF5
b3V0UmVjdCYgdGl0bGVSZWN0KQotewotICAgIGNvbnN0IHN0YXRpYyBpbnQgYW5jaG9yVGlwT2Zm
c2V0UHggPSAyOwotCi0gICAgaW50IG1pblggPSB0aXRsZVJlY3QueCgpICsgYXJyb3dIYWxmV2lk
dGg7Ci0gICAgaW50IG1heFggPSB0aXRsZVJlY3QubWF4WCgpIC0gYXJyb3dIYWxmV2lkdGg7Ci0g
ICAgaW50IGFuY2hvclggPSBhbmNob3JCb3gueCgpOwotICAgIGludCBhbmNob3JNYXhYID0gYW5j
aG9yQm94Lm1heFgoKTsKLQotICAgIGludCB4ID0gdGl0bGVSZWN0LngoKSArIGFycm93VGlwT2Zm
c2V0OyAvLyBEZWZhdWx0IHRvb2x0aXAgcG9zaXRpb24uCi0gICAgaWYgKHggPCBhbmNob3JYKQot
ICAgICAgICB4ID0gYW5jaG9yWCArIGFuY2hvclRpcE9mZnNldFB4OwotICAgIGVsc2UgaWYgKHgg
PiBhbmNob3JNYXhYKQotICAgICAgICB4ID0gYW5jaG9yTWF4WCAtIGFuY2hvclRpcE9mZnNldFB4
OwotCi0gICAgaWYgKHggPCBtaW5YKQotICAgICAgICB4ID0gbWluWDsKLSAgICBlbHNlIGlmICh4
ID4gbWF4WCkKLSAgICAgICAgeCA9IG1heFg7Ci0KLSAgICByZXR1cm4geDsKLX0KLQotdm9pZCBz
ZXRVcEZvbnREZXNjcmlwdGlvbihGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgV2Vi
Q29yZTo6U2V0dGluZ3MqIHNldHRpbmdzKQotewotI2RlZmluZSBUT09MVElQX0ZPTlRfRkFNSUxJ
RVMoc2l6ZSwgLi4uKSBcCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgdG9vbHRpcEZvbnRGYWNlU2l6
ZSA9IHNpemU7XAotc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyogdG9vbHRpcEZvbnRGYWNlW3Np
emVdID0geyBfX1ZBX0FSR1NfXyB9OwotCi0jaWYgT1MoV0lORE9XUykKLVRPT0xUSVBfRk9OVF9G
QU1JTElFUygyLCBuZXcgQXRvbWljU3RyaW5nKCJDb25zb2xhcyIpLCBuZXcgQXRvbWljU3RyaW5n
KCJMdWNpZGEgQ29uc29sZSIpKQotI2VsaWYgT1MoTUFDX09TX1gpCi1UT09MVElQX0ZPTlRfRkFN
SUxJRVMoMiwgbmV3IEF0b21pY1N0cmluZygiTWVubG8iKSwgbmV3IEF0b21pY1N0cmluZygiTW9u
YWNvIikpCi0jZWxpZiBPUyhVTklYKQotVE9PTFRJUF9GT05UX0ZBTUlMSUVTKDEsIG5ldyBBdG9t
aWNTdHJpbmcoImRlamF2dSBzYW5zIG1vbm8iKSkKLSNlbmRpZgotLy8gSW4gdGhlIGRlZmF1bHQg
Y2FzZSwgd2UgZ2V0IHRoZSBzZXR0aW5ncy1wcm92aWRlZCBtb25vc3BhY2UgZm9udC4KLQotI3Vu
ZGVmIFRPT0xUSVBfRk9OVF9GQU1JTElFUwotCi0gICAgZm9udERlc2NyaXB0aW9uLnNldFJlbmRl
cmluZ01vZGUoc2V0dGluZ3MtPmZvbnRSZW5kZXJpbmdNb2RlKCkpOwotICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRDb21wdXRlZFNpemUoZm9udEhlaWdodFB4KTsKLQotICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgZml4ZWRGb250RmFtaWx5ID0gc2V0dGluZ3MtPmZpeGVkRm9udEZhbWlseSgpOwotICAg
IGlmICghZml4ZWRGb250RmFtaWx5LmlzRW1wdHkoKSkgewotICAgICAgICBmb250RGVzY3JpcHRp
b24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246Ok1vbm9zcGFjZUZhbWlseSk7Ci0g
ICAgICAgIEZvbnRGYW1pbHkqIGN1cnJlbnRGYW1pbHkgPSAwOwotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgdG9vbHRpcEZvbnRGYWNlU2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBp
ZiAoIWN1cnJlbnRGYW1pbHkpIHsKLSAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uZmly
c3RGYW1pbHkoKS5zZXRGYW1pbHkoKnRvb2x0aXBGb250RmFjZVtpXSk7Ci0gICAgICAgICAgICAg
ICAgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkuYXBwZW5kRmFtaWx5KDApOwotICAgICAg
ICAgICAgICAgIGN1cnJlbnRGYW1pbHkgPSAmZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCk7
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFJlZlB0cjxTaGFyZWRGb250
RmFtaWx5PiBuZXdGYW1pbHkgPSBTaGFyZWRGb250RmFtaWx5OjpjcmVhdGUoKTsKLSAgICAgICAg
ICAgICAgICBuZXdGYW1pbHktPnNldEZhbWlseSgqdG9vbHRpcEZvbnRGYWNlW2ldKTsKLSAgICAg
ICAgICAgICAgICBjdXJyZW50RmFtaWx5LT5hcHBlbmRGYW1pbHkobmV3RmFtaWx5KTsKLSAgICAg
ICAgICAgICAgICBjdXJyZW50RmFtaWx5ID0gbmV3RmFtaWx5LmdldCgpOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxTaGFyZWRGb250RmFtaWx5PiBuZXdGYW1pbHkg
PSBTaGFyZWRGb250RmFtaWx5OjpjcmVhdGUoKTsKLSAgICAgICAgbmV3RmFtaWx5LT5zZXRGYW1p
bHkoZml4ZWRGb250RmFtaWx5KTsKLSAgICAgICAgY3VycmVudEZhbWlseS0+YXBwZW5kRmFtaWx5
KG5ld0ZhbWlseSk7Ci0gICAgICAgIGN1cnJlbnRGYW1pbHkgPSBuZXdGYW1pbHkuZ2V0KCk7Ci0g
ICAgfQotfQotCi12b2lkIGRyYXdFbGVtZW50VGl0bGUoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBOb2RlKiBub2RlLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBJbnRSZWN0JiBib3Vu
ZGluZ0JveCwgY29uc3QgSW50UmVjdCYgYW5jaG9yQm94LCBjb25zdCBGbG9hdFJlY3QmIHZpc2li
bGVSZWN0LCBXZWJDb3JlOjpTZXR0aW5ncyogc2V0dGluZ3MpCi17Ci0gICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChDb2xvciwgYmFja2dyb3VuZENvbG9yLCAoMjU1LCAyNTUsIDE5NCkpOwotICAgIERF
RklORV9TVEFUSUNfTE9DQUwoQ29sb3IsIHRhZ0NvbG9yLCAoMTM2LCAxOCwgMTI4KSk7IC8vIFNh
bWUgYXMgLndlYmtpdC1odG1sLXRhZy4KLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKENvbG9yLCBh
dHRyQ29sb3IsICgyNiwgMjYsIDE2NikpOyAvLyBTYW1lIGFzIC53ZWJraXQtaHRtbC1hdHRyaWJ1
dGUtdmFsdWUuCi0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChDb2xvciwgbm9ybWFsQ29sb3IsIChD
b2xvcjo6YmxhY2spKTsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKENvbG9yLCBweEFuZEJvcmRl
ckNvbG9yLCAoMTI4LCAxMjgsIDEyOCkpOwotCi0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJp
bmcsIHB4U3RyaW5nLCAoQVNDSUlMaXRlcmFsKCJweCIpKSk7Ci0gICAgY29uc3Qgc3RhdGljIFVD
aGFyIHRpbWVzVUNoYXJbXSA9IHsgMHgwMDIwLCAweDAwRDcsIDB4MDAyMCwgMCB9OwotICAgIERF
RklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCB0aW1lc1N0cmluZywgKHRpbWVzVUNoYXIpKTsgLy8g
JnRpbWVzOyBzdHJpbmcKLQotICAgIEZvbnRDYWNoZVB1cmdlUHJldmVudGVyIGZvbnRDYWNoZVB1
cmdlUHJldmVudGVyOwotCi0gICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1l
bnQqPihub2RlKTsKLSAgICBib29sIGlzWEhUTUwgPSBlbGVtZW50LT5kb2N1bWVudCgpLT5pc1hI
VE1MRG9jdW1lbnQoKTsKLSAgICBTdHJpbmdCdWlsZGVyIG5vZGVUaXRsZTsKLSAgICBub2RlVGl0
bGUuYXBwZW5kKGlzWEhUTUwgPyBlbGVtZW50LT5ub2RlTmFtZSgpIDogZWxlbWVudC0+bm9kZU5h
bWUoKS5sb3dlcigpKTsKLSAgICB1bnNpZ25lZCB0YWdOYW1lTGVuZ3RoID0gbm9kZVRpdGxlLmxl
bmd0aCgpOwotCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBpZFZhbHVlID0gZWxlbWVudC0+Z2V0
SWRBdHRyaWJ1dGUoKTsKLSAgICB1bnNpZ25lZCBpZFN0cmluZ0xlbmd0aCA9IDA7Ci0gICAgU3Ry
aW5nIGlkU3RyaW5nOwotICAgIGlmICghaWRWYWx1ZS5pc051bGwoKSAmJiAhaWRWYWx1ZS5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgbm9kZVRpdGxlLmFwcGVuZCgiIyIpOwotICAgICAgICBub2RlVGl0
bGUuYXBwZW5kKGlkVmFsdWUpOwotICAgICAgICBpZFN0cmluZ0xlbmd0aCA9IDEgKyBpZFZhbHVl
Lmxlbmd0aCgpOwotICAgIH0KLQotICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiB1c2VkQ2xhc3NO
YW1lczsKLSAgICB1bnNpZ25lZCBjbGFzc2VzU3RyaW5nTGVuZ3RoID0gMDsKLSAgICBpZiAoZWxl
bWVudC0+aGFzQ2xhc3MoKSAmJiBlbGVtZW50LT5pc1N0eWxlZEVsZW1lbnQoKSkgewotICAgICAg
ICBjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBjbGFzc05hbWVzU3RyaW5nID0gc3RhdGljX2Nhc3Q8
U3R5bGVkRWxlbWVudCo+KGVsZW1lbnQpLT5jbGFzc05hbWVzKCk7Ci0gICAgICAgIHNpemVfdCBj
bGFzc05hbWVDb3VudCA9IGNsYXNzTmFtZXNTdHJpbmcuc2l6ZSgpOwotICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGNsYXNzTmFtZUNvdW50OyArK2kpIHsKLSAgICAgICAgICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgY2xhc3NOYW1lID0gY2xhc3NOYW1lc1N0cmluZ1tpXTsKLSAgICAgICAg
ICAgIGlmICh1c2VkQ2xhc3NOYW1lcy5jb250YWlucyhjbGFzc05hbWUpKQotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgdXNlZENsYXNzTmFtZXMuYWRkKGNsYXNzTmFtZSk7
Ci0gICAgICAgICAgICBub2RlVGl0bGUuYXBwZW5kKCIuIik7Ci0gICAgICAgICAgICBub2RlVGl0
bGUuYXBwZW5kKGNsYXNzTmFtZSk7Ci0gICAgICAgICAgICBjbGFzc2VzU3RyaW5nTGVuZ3RoICs9
IDEgKyBjbGFzc05hbWUubGVuZ3RoKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBSZW5kZXJC
b3hNb2RlbE9iamVjdCogbW9kZWxPYmplY3QgPSByZW5kZXJlci0+aXNCb3hNb2RlbE9iamVjdCgp
ID8gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChyZW5kZXJlcikgOiAwOwotCi0gICAgU3RyaW5nIHdp
ZHRoTnVtYmVyUGFydCA9ICIgIiArIFN0cmluZzo6bnVtYmVyKG1vZGVsT2JqZWN0ID8gYWRqdXN0
Rm9yQWJzb2x1dGVab29tKG1vZGVsT2JqZWN0LT5waXhlbFNuYXBwZWRPZmZzZXRXaWR0aCgpLCBt
b2RlbE9iamVjdCkgOiBib3VuZGluZ0JveC53aWR0aCgpKTsKLSAgICBub2RlVGl0bGUuYXBwZW5k
KHdpZHRoTnVtYmVyUGFydCk7Ci0gICAgbm9kZVRpdGxlLmFwcGVuZChweFN0cmluZyk7Ci0gICAg
bm9kZVRpdGxlLmFwcGVuZCh0aW1lc1N0cmluZyk7Ci0gICAgU3RyaW5nIGhlaWdodE51bWJlclBh
cnQgPSBTdHJpbmc6Om51bWJlcihtb2RlbE9iamVjdCA/IGFkanVzdEZvckFic29sdXRlWm9vbSht
b2RlbE9iamVjdC0+cGl4ZWxTbmFwcGVkT2Zmc2V0SGVpZ2h0KCksIG1vZGVsT2JqZWN0KSA6IGJv
dW5kaW5nQm94LmhlaWdodCgpKTsKLSAgICBub2RlVGl0bGUuYXBwZW5kKGhlaWdodE51bWJlclBh
cnQpOwotICAgIG5vZGVUaXRsZS5hcHBlbmQocHhTdHJpbmcpOwotCi0gICAgRm9udERlc2NyaXB0
aW9uIGRlc2M7Ci0gICAgc2V0VXBGb250RGVzY3JpcHRpb24oZGVzYywgc2V0dGluZ3MpOwotICAg
IEZvbnQgZm9udCA9IEZvbnQoZGVzYywgMCwgMCk7Ci0gICAgZm9udC51cGRhdGUoMCk7Ci0KLSAg
ICBUZXh0UnVuIG5vZGVUaXRsZVJ1bihub2RlVGl0bGUudG9TdHJpbmcoKSk7Ci0gICAgSW50UG9p
bnQgdGl0bGVCYXNlUG9pbnQgPSBJbnRQb2ludChhbmNob3JCb3gueCgpLCBhbmNob3JCb3gubWF4
WSgpIC0gMSk7Ci0gICAgdGl0bGVCYXNlUG9pbnQubW92ZShyZWN0SW5mbGF0ZVB4LCByZWN0SW5m
bGF0ZVB4KTsKLSAgICBJbnRSZWN0IHRpdGxlUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoZm9udC5z
ZWxlY3Rpb25SZWN0Rm9yVGV4dChub2RlVGl0bGVSdW4sIHRpdGxlQmFzZVBvaW50LCBmb250SGVp
Z2h0UHgpKTsKLSAgICB0aXRsZVJlY3QuaW5mbGF0ZShyZWN0SW5mbGF0ZVB4KTsKLQotICAgIC8v
IFRoZSBpbml0aWFsIG9mZnNldHMgbmVlZGVkIHRvIGNvbXBlbnNhdGUgZm9yIGEgMXB4LXRoaWNr
IGJvcmRlciBzdHJva2UgKHdoaWNoIGlzIG5vdCBhIHBhcnQgb2YgdGhlIHJlY3RhbmdsZSkuCi0g
ICAgaW50IGR4ID0gLWJvcmRlcldpZHRoUHg7Ci0gICAgaW50IGR5ID0gYm9yZGVyV2lkdGhQeDsK
LQotICAgIC8vIElmIHRoZSB0aXAgc3RpY2tzIGJleW9uZCB0aGUgcmlnaHQgb2YgdmlzaWJsZVJl
Y3QsIHJpZ2h0LWFsaWduIHRoZSB0aXAgd2l0aCB0aGUgc2FpZCBib3VuZGFyeS4KLSAgICBpZiAo
dGl0bGVSZWN0Lm1heFgoKSArIGR4ID4gdmlzaWJsZVJlY3QubWF4WCgpKQotICAgICAgICBkeCA9
IHZpc2libGVSZWN0Lm1heFgoKSAtIHRpdGxlUmVjdC5tYXhYKCk7Ci0KLSAgICAvLyBJZiB0aGUg
dGlwIHN0aWNrcyBiZXlvbmQgdGhlIGxlZnQgb2YgdmlzaWJsZVJlY3QsIGxlZnQtYWxpZ24gdGhl
IHRpcCB3aXRoIHRoZSBzYWlkIGJvdW5kYXJ5LgotICAgIGlmICh0aXRsZVJlY3QueCgpICsgZHgg
PCB2aXNpYmxlUmVjdC54KCkpCi0gICAgICAgIGR4ID0gdmlzaWJsZVJlY3QueCgpIC0gdGl0bGVS
ZWN0LngoKSAtIGJvcmRlcldpZHRoUHg7Ci0KLSAgICAvLyBJZiB0aGUgdGlwIHN0aWNrcyBiZXlv
bmQgdGhlIGJvdHRvbSBvZiB2aXNpYmxlUmVjdCwgc2hvdyB0aGUgdGlwIGF0IHRvcCBvZiBib3Vu
ZGluZyBib3guCi0gICAgaWYgKHRpdGxlUmVjdC5tYXhZKCkgKyBkeSA+IHZpc2libGVSZWN0Lm1h
eFkoKSkgewotICAgICAgICBkeSA9IGFuY2hvckJveC55KCkgLSB0aXRsZVJlY3QubWF4WSgpIC0g
Ym9yZGVyV2lkdGhQeDsKLSAgICAgICAgLy8gSWYgdGhlIHRpcCBzdGlsbCBzdGlja3MgYmV5b25k
IHRoZSBib3R0b20gb2YgdmlzaWJsZVJlY3QsIGJvdHRvbS1hbGlnbiB0aGUgdGlwIHdpdGggdGhl
IHNhaWQgYm91bmRhcnkuCi0gICAgICAgIGlmICh0aXRsZVJlY3QubWF4WSgpICsgZHkgPiB2aXNp
YmxlUmVjdC5tYXhZKCkpCi0gICAgICAgICAgICBkeSA9IHZpc2libGVSZWN0Lm1heFkoKSAtIHRp
dGxlUmVjdC5tYXhZKCk7Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIHRpcCBzdGlja3MgYmV5b25k
IHRoZSB0b3Agb2YgdmlzaWJsZVJlY3QsIHNob3cgdGhlIHRpcCBhdCB0b3Agb2YgdmlzaWJsZVJl
Y3QuCi0gICAgaWYgKHRpdGxlUmVjdC55KCkgKyBkeSA8IHZpc2libGVSZWN0LnkoKSkKLSAgICAg
ICAgZHkgPSB2aXNpYmxlUmVjdC55KCkgLSB0aXRsZVJlY3QueSgpICsgYm9yZGVyV2lkdGhQeDsK
LQotICAgIHRpdGxlUmVjdC5tb3ZlKGR4LCBkeSk7Ci0KLSAgICBib29sIGlzQXJyb3dBdFRvcCA9
IHRpdGxlUmVjdC55KCkgPiBhbmNob3JCb3gueSgpOwotICAgIHRpdGxlUmVjdC5tb3ZlKDAsIHRv
b2x0aXBQYWRkaW5nICogKGlzQXJyb3dBdFRvcCA/IDEgOiAtMSkpOwotCi0gICAgewotICAgICAg
ICBmbG9hdCBhcnJvd1RpcFggPSBjYWxjdWxhdGVBcnJvd1RpcFgoYW5jaG9yQm94LCB0aXRsZVJl
Y3QpOwotICAgICAgICBpbnQgYXJyb3dCYXNlWSA9IGlzQXJyb3dBdFRvcCA/IHRpdGxlUmVjdC55
KCkgOiB0aXRsZVJlY3QubWF4WSgpOwotICAgICAgICBpbnQgYXJyb3dPcHBvc2l0ZVkgPSBpc0Fy
cm93QXRUb3AgPyB0aXRsZVJlY3QubWF4WSgpIDogdGl0bGVSZWN0LnkoKTsKLQotICAgICAgICBG
bG9hdFBvaW50IHBvaW50c1s4XTsKLSAgICAgICAgcG9pbnRzWzBdID0gRmxvYXRQb2ludChhcnJv
d1RpcFggLSBhcnJvd0hhbGZXaWR0aCwgYXJyb3dCYXNlWSk7Ci0gICAgICAgIHBvaW50c1sxXSA9
IEZsb2F0UG9pbnQoYXJyb3dUaXBYLCBhcnJvd0Jhc2VZICsgYXJyb3dIZWlnaHQgKiAoaXNBcnJv
d0F0VG9wID8gLTEgOiAxKSk7Ci0gICAgICAgIHBvaW50c1syXSA9IEZsb2F0UG9pbnQoYXJyb3dU
aXBYICsgYXJyb3dIYWxmV2lkdGgsIGFycm93QmFzZVkpOwotICAgICAgICBwb2ludHNbM10gPSBG
bG9hdFBvaW50KHRpdGxlUmVjdC5tYXhYKCksIGFycm93QmFzZVkpOwotICAgICAgICBwb2ludHNb
NF0gPSBGbG9hdFBvaW50KHRpdGxlUmVjdC5tYXhYKCksIGFycm93T3Bwb3NpdGVZKTsKLSAgICAg
ICAgcG9pbnRzWzVdID0gRmxvYXRQb2ludCh0aXRsZVJlY3QueCgpLCBhcnJvd09wcG9zaXRlWSk7
Ci0gICAgICAgIHBvaW50c1s2XSA9IEZsb2F0UG9pbnQodGl0bGVSZWN0LngoKSwgYXJyb3dCYXNl
WSk7Ci0gICAgICAgIHBvaW50c1s3XSA9IHBvaW50c1swXTsKLQotICAgICAgICBQYXRoIHBhdGg7
Ci0gICAgICAgIHBhdGgubW92ZVRvKHBvaW50c1swXSk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAx
OyBpIDwgODsgKytpKQotICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8ocG9pbnRzW2ldKTsKLQot
ICAgICAgICBjb250ZXh0LT5zYXZlKCk7Ci0gICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgwLjVm
LCAwLjVmKTsKLSAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IocHhBbmRCb3JkZXJDb2xv
ciwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihi
YWNrZ3JvdW5kQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwotICAgICAgICBjb250ZXh0LT5z
ZXRTdHJva2VUaGlja25lc3MoYm9yZGVyV2lkdGhQeCk7Ci0gICAgICAgIGNvbnRleHQtPmZpbGxQ
YXRoKHBhdGgpOwotICAgICAgICBjb250ZXh0LT5zdHJva2VQYXRoKHBhdGgpOwotICAgICAgICBj
b250ZXh0LT5yZXN0b3JlKCk7Ci0gICAgfQotCi0gICAgaW50IGN1cnJlbnRQb3MgPSAwOwotICAg
IGN1cnJlbnRQb3MgPSBkcmF3U3Vic3RyaW5nKG5vZGVUaXRsZVJ1biwgY3VycmVudFBvcywgdGFn
TmFtZUxlbmd0aCwgdGFnQ29sb3IsIGZvbnQsIGNvbnRleHQsIHRpdGxlUmVjdCk7Ci0gICAgaWYg
KGlkU3RyaW5nTGVuZ3RoKQotICAgICAgICBjdXJyZW50UG9zID0gZHJhd1N1YnN0cmluZyhub2Rl
VGl0bGVSdW4sIGN1cnJlbnRQb3MsIGlkU3RyaW5nTGVuZ3RoLCBhdHRyQ29sb3IsIGZvbnQsIGNv
bnRleHQsIHRpdGxlUmVjdCk7Ci0gICAgaWYgKGNsYXNzZXNTdHJpbmdMZW5ndGgpCi0gICAgICAg
IGN1cnJlbnRQb3MgPSBkcmF3U3Vic3RyaW5nKG5vZGVUaXRsZVJ1biwgY3VycmVudFBvcywgY2xh
c3Nlc1N0cmluZ0xlbmd0aCwgYXR0ckNvbG9yLCBmb250LCBjb250ZXh0LCB0aXRsZVJlY3QpOwot
ICAgIGN1cnJlbnRQb3MgPSBkcmF3U3Vic3RyaW5nKG5vZGVUaXRsZVJ1biwgY3VycmVudFBvcywg
d2lkdGhOdW1iZXJQYXJ0Lmxlbmd0aCgpLCBub3JtYWxDb2xvciwgZm9udCwgY29udGV4dCwgdGl0
bGVSZWN0KTsKLSAgICBjdXJyZW50UG9zID0gZHJhd1N1YnN0cmluZyhub2RlVGl0bGVSdW4sIGN1
cnJlbnRQb3MsIHB4U3RyaW5nLmxlbmd0aCgpICsgdGltZXNTdHJpbmcubGVuZ3RoKCksIHB4QW5k
Qm9yZGVyQ29sb3IsIGZvbnQsIGNvbnRleHQsIHRpdGxlUmVjdCk7Ci0gICAgY3VycmVudFBvcyA9
IGRyYXdTdWJzdHJpbmcobm9kZVRpdGxlUnVuLCBjdXJyZW50UG9zLCBoZWlnaHROdW1iZXJQYXJ0
Lmxlbmd0aCgpLCBub3JtYWxDb2xvciwgZm9udCwgY29udGV4dCwgdGl0bGVSZWN0KTsKLSAgICBk
cmF3U3Vic3RyaW5nKG5vZGVUaXRsZVJ1biwgY3VycmVudFBvcywgcHhTdHJpbmcubGVuZ3RoKCks
IHB4QW5kQm9yZGVyQ29sb3IsIGZvbnQsIGNvbnRleHQsIHRpdGxlUmVjdCk7Ci19Ci0KIHN0YXRp
YyB2b2lkIGNvbnRlbnRzUXVhZFRvUGFnZShjb25zdCBGcmFtZVZpZXcqIG1haW5WaWV3LCBjb25z
dCBGcmFtZVZpZXcqIHZpZXcsIEZsb2F0UXVhZCYgcXVhZCkKIHsKICAgICBxdWFkLnNldFAxKHZp
ZXctPmNvbnRlbnRzVG9Sb290Vmlldyhyb3VuZGVkSW50UG9pbnQocXVhZC5wMSgpKSkpOwpAQCAt
MzcwLDcgKzk5LDcgQEAgc3RhdGljIHZvaWQgY29udGVudHNRdWFkVG9QYWdlKGNvbnN0IEZyYW1l
VmlldyogbWFpblZpZXcsIGNvbnN0IEZyYW1lVmlldyogdmlldywKICAgICBxdWFkICs9IG1haW5W
aWV3LT5zY3JvbGxPZmZzZXQoKTsKIH0KIAotc3RhdGljIHZvaWQgZ2V0T3JEcmF3Tm9kZUhpZ2hs
aWdodChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIE5vZGUqIG5vZGUsIGNvbnN0IEhpZ2hsaWdo
dENvbmZpZyYgaGlnaGxpZ2h0Q29uZmlnLCBIaWdobGlnaHQqIGhpZ2hsaWdodCkKK3N0YXRpYyB2
b2lkIGJ1aWxkTm9kZUhpZ2hsaWdodChOb2RlKiBub2RlLCBjb25zdCBIaWdobGlnaHRDb25maWcm
IGhpZ2hsaWdodENvbmZpZywgSGlnaGxpZ2h0KiBoaWdobGlnaHQpCiB7CiAgICAgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CiAgICAgRnJhbWUqIGNvbnRhaW5pbmdG
cmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCk7CkBAIC0zNzgsNiArMTA3LDcgQEAgc3Rh
dGljIHZvaWQgZ2V0T3JEcmF3Tm9kZUhpZ2hsaWdodChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IE5vZGUqIG5vZGUsIGNvbnN0IEgKICAgICBpZiAoIXJlbmRlcmVyIHx8ICFjb250YWluaW5nRnJh
bWUpCiAgICAgICAgIHJldHVybjsKIAorICAgIGhpZ2hsaWdodC0+c2V0Q29sb3JzKGhpZ2hsaWdo
dENvbmZpZyk7CiAgICAgRnJhbWVWaWV3KiBjb250YWluaW5nVmlldyA9IGNvbnRhaW5pbmdGcmFt
ZS0+dmlldygpOwogICAgIEZyYW1lVmlldyogbWFpblZpZXcgPSBjb250YWluaW5nRnJhbWUtPnBh
Z2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKTsKICAgICBJbnRSZWN0IGJvdW5kaW5nQm94ID0gcGl4
ZWxTbmFwcGVkSW50UmVjdChjb250YWluaW5nVmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KHJlbmRl
cmVyLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpKSk7CkBAIC0zODUsOSArMTE1LDYgQEAgc3Rh
dGljIHZvaWQgZ2V0T3JEcmF3Tm9kZUhpZ2hsaWdodChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IE5vZGUqIG5vZGUsIGNvbnN0IEgKICAgICBJbnRSZWN0IHRpdGxlQW5jaG9yQm94ID0gYm91bmRp
bmdCb3g7CiAKICAgICBGbG9hdFJlY3QgdmlzaWJsZVJlY3QgPSBtYWluVmlldy0+dmlzaWJsZUNv
bnRlbnRSZWN0KCk7Ci0gICAgLy8gRG9uJ3QgdHJhbnNsYXRlIHRoZSBjb250ZXh0IGlmIHRoZSBm
cmFtZSBpcyByZW5kZXJlZCBpbiBwYWdlIGNvb3JkaW5hdGVzLgotICAgIGlmIChjb250ZXh0ICYm
ICFtYWluVmlldy0+ZGVsZWdhdGVzU2Nyb2xsaW5nKCkpCi0gICAgICAgIGNvbnRleHQtPnRyYW5z
bGF0ZSgtdmlzaWJsZVJlY3QueCgpLCAtdmlzaWJsZVJlY3QueSgpKTsKIAogICAgIC8vIFJlbmRl
clNWR1Jvb3Qgc2hvdWxkIGJlIGhpZ2hsaWdodGVkIHRocm91Z2ggdGhlIGlzQm94KCkgY29kZSBw
YXRoLCBhbGwgb3RoZXIgU1ZHIGVsZW1lbnRzIHNob3VsZCBqdXN0IGR1bXAgdGhlaXIgYWJzb2x1
dGVRdWFkcygpLgogI2lmIEVOQUJMRShTVkcpCkBAIC00MDEsOSArMTI4LDYgQEAgc3RhdGljIHZv
aWQgZ2V0T3JEcmF3Tm9kZUhpZ2hsaWdodChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIE5vZGUq
IG5vZGUsIGNvbnN0IEgKICAgICAgICAgcmVuZGVyZXItPmFic29sdXRlUXVhZHMoaGlnaGxpZ2h0
LT5xdWFkcyk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaGlnaGxpZ2h0LT5xdWFk
cy5zaXplKCk7ICsraSkKICAgICAgICAgICAgIGNvbnRlbnRzUXVhZFRvUGFnZShtYWluVmlldywg
Y29udGFpbmluZ1ZpZXcsIGhpZ2hsaWdodC0+cXVhZHNbaV0pOwotCi0gICAgICAgIGlmIChjb250
ZXh0KQotICAgICAgICAgICAgZHJhd0hpZ2hsaWdodEZvclNWR1JlbmRlcmVyKGNvbnRleHQsIGhp
Z2hsaWdodC0+cXVhZHMsIGhpZ2hsaWdodENvbmZpZyk7CiAgICAgfSBlbHNlIGlmIChyZW5kZXJl
ci0+aXNCb3goKSB8fCByZW5kZXJlci0+aXNSZW5kZXJJbmxpbmUoKSkgewogICAgICAgICBMYXlv
dXRSZWN0IGNvbnRlbnRCb3g7CiAgICAgICAgIExheW91dFJlY3QgcGFkZGluZ0JveDsKQEAgLTQ1
NSwzOSArMTc5LDE2IEBAIHN0YXRpYyB2b2lkIGdldE9yRHJhd05vZGVIaWdobGlnaHQoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBOb2RlKiBub2RlLCBjb25zdCBICiAgICAgICAgIGhpZ2hsaWdo
dC0+cXVhZHMuYXBwZW5kKGFic0JvcmRlclF1YWQpOwogICAgICAgICBoaWdobGlnaHQtPnF1YWRz
LmFwcGVuZChhYnNQYWRkaW5nUXVhZCk7CiAgICAgICAgIGhpZ2hsaWdodC0+cXVhZHMuYXBwZW5k
KGFic0NvbnRlbnRRdWFkKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgICAgIGRy
YXdIaWdobGlnaHRGb3JCb3goY29udGV4dCwgYWJzQ29udGVudFF1YWQsIGFic1BhZGRpbmdRdWFk
LCBhYnNCb3JkZXJRdWFkLCBhYnNNYXJnaW5RdWFkLCBoaWdobGlnaHRDb25maWcpOwogICAgIH0K
LQotICAgIC8vIERyYXcgbm9kZSB0aXRsZSBpZiBuZWNlc3NhcnkuCi0KLSAgICBpZiAoIW5vZGUt
PmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGNvbnRleHQgJiYg
aGlnaGxpZ2h0Q29uZmlnLnNob3dJbmZvKQotICAgICAgICBkcmF3RWxlbWVudFRpdGxlKGNvbnRl
eHQsIG5vZGUsIHJlbmRlcmVyLCBwaXhlbFNuYXBwZWRJbnRSZWN0KGJvdW5kaW5nQm94KSwgcGl4
ZWxTbmFwcGVkSW50UmVjdCh0aXRsZUFuY2hvckJveCksIHZpc2libGVSZWN0LCBjb250YWluaW5n
RnJhbWUtPnNldHRpbmdzKCkpOwogfQogCi1zdGF0aWMgdm9pZCBnZXRPckRyYXdSZWN0SGlnaGxp
Z2h0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgUGFnZSogcGFnZSwgSW50UmVjdCogcmVjdCwg
Y29uc3QgSGlnaGxpZ2h0Q29uZmlnJiBoaWdobGlnaHRDb25maWcsIEhpZ2hsaWdodCAqaGlnaGxp
Z2h0KQorc3RhdGljIHZvaWQgYnVpbGRSZWN0SGlnaGxpZ2h0KFBhZ2UqIHBhZ2UsIEludFJlY3Qq
IHJlY3QsIGNvbnN0IEhpZ2hsaWdodENvbmZpZyYgaGlnaGxpZ2h0Q29uZmlnLCBIaWdobGlnaHQg
KmhpZ2hsaWdodCkKIHsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsKLQogICAgIEZs
b2F0UmVjdCBoaWdobGlnaHRSZWN0KCpyZWN0KTsKLQogICAgIGhpZ2hsaWdodC0+dHlwZSA9IEhp
Z2hsaWdodFR5cGVSZWN0czsKICAgICBoaWdobGlnaHQtPnF1YWRzLmFwcGVuZChoaWdobGlnaHRS
ZWN0KTsKLQotICAgIGlmIChjb250ZXh0KSB7Ci0gICAgICAgIEZyYW1lVmlldyogdmlldyA9IHBh
Z2UtPm1haW5GcmFtZSgpLT52aWV3KCk7Ci0gICAgICAgIGlmICghdmlldy0+ZGVsZWdhdGVzU2Ny
b2xsaW5nKCkpIHsKLSAgICAgICAgICAgIEZsb2F0UmVjdCB2aXNpYmxlUmVjdCA9IHZpZXctPnZp
c2libGVDb250ZW50UmVjdCgpOwotICAgICAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKC12aXNp
YmxlUmVjdC54KCksIC12aXNpYmxlUmVjdC55KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgZHJh
d091dGxpbmVkUXVhZChjb250ZXh0LCBoaWdobGlnaHRSZWN0LCBoaWdobGlnaHRDb25maWcuY29u
dGVudCwgaGlnaGxpZ2h0Q29uZmlnLmNvbnRlbnRPdXRsaW5lKTsKLSAgICB9CiB9CiAKIH0gLy8g
YW5vbnltb3VzIG5hbWVzcGFjZQpAQCAtNTA0LDEyICsyMDUsMTMgQEAgSW5zcGVjdG9yT3Zlcmxh
eTo6fkluc3BlY3Rvck92ZXJsYXkoKQogCiB2b2lkIEluc3BlY3Rvck92ZXJsYXk6OnBhaW50KEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBkcmF3Tm9kZUhpZ2hsaWdodCgmY29udGV4
dCk7Ci0gICAgZHJhd1JlY3RIaWdobGlnaHQoJmNvbnRleHQpOwotCi0gICAgaWYgKG1fcGF1c2Vk
SW5EZWJ1Z2dlck1lc3NhZ2UuaXNOdWxsKCkpCisgICAgaWYgKG1fcGF1c2VkSW5EZWJ1Z2dlck1l
c3NhZ2UuaXNOdWxsKCkgJiYgIW1faGlnaGxpZ2h0Tm9kZSAmJiAhbV9oaWdobGlnaHRSZWN0KQor
ICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVy
KGNvbnRleHQpOworICAgIEZyYW1lVmlldyogdmlldyA9IG92ZXJsYXlQYWdlKCktPm1haW5GcmFt
ZSgpLT52aWV3KCk7CisgICAgaWYgKHZpZXctPm5lZWRzTGF5b3V0KCkpCiAgICAgICAgIHJldHVy
bjsKLSAgICBkcmF3T3ZlcmxheVBhZ2UoJmNvbnRleHQpOworICAgIHZpZXctPnBhaW50KCZjb250
ZXh0LCBJbnRSZWN0KDAsIDAsIHZpZXctPndpZHRoKCksIHZpZXctPmhlaWdodCgpKSk7CiB9CiAK
IHZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6ZHJhd091dGxpbmUoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCkBAIC01MjQs
MTkgKzIyNiwxNSBAQCB2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmdldEhpZ2hsaWdodChIaWdobGln
aHQqIGhpZ2hsaWdodCkgY29uc3QKICAgICAgICAgcmV0dXJuOwogCiAgICAgaGlnaGxpZ2h0LT50
eXBlID0gSGlnaGxpZ2h0VHlwZVJlY3RzOwotICAgIGlmIChtX2hpZ2hsaWdodE5vZGUpIHsKLSAg
ICAgICAgaGlnaGxpZ2h0LT5zZXRDb2xvcnMobV9ub2RlSGlnaGxpZ2h0Q29uZmlnKTsKLSAgICAg
ICAgZ2V0T3JEcmF3Tm9kZUhpZ2hsaWdodCgwLCBtX2hpZ2hsaWdodE5vZGUuZ2V0KCksIG1fbm9k
ZUhpZ2hsaWdodENvbmZpZywgaGlnaGxpZ2h0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBoaWdo
bGlnaHQtPnNldENvbG9ycyhtX3JlY3RIaWdobGlnaHRDb25maWcpOwotICAgICAgICBnZXRPckRy
YXdSZWN0SGlnaGxpZ2h0KDAsIG1fcGFnZSwgbV9oaWdobGlnaHRSZWN0LmdldCgpLCBtX3JlY3RI
aWdobGlnaHRDb25maWcsIGhpZ2hsaWdodCk7Ci0gICAgfQorICAgIGlmIChtX2hpZ2hsaWdodE5v
ZGUpCisgICAgICAgIGJ1aWxkTm9kZUhpZ2hsaWdodChtX2hpZ2hsaWdodE5vZGUuZ2V0KCksIG1f
bm9kZUhpZ2hsaWdodENvbmZpZywgaGlnaGxpZ2h0KTsKKyAgICBlbHNlCisgICAgICAgIGJ1aWxk
UmVjdEhpZ2hsaWdodChtX3BhZ2UsIG1faGlnaGxpZ2h0UmVjdC5nZXQoKSwgbV9yZWN0SGlnaGxp
Z2h0Q29uZmlnLCBoaWdobGlnaHQpOwogfQogCiB2b2lkIEluc3BlY3Rvck92ZXJsYXk6OnNldFBh
dXNlZEluRGVidWdnZXJNZXNzYWdlKGNvbnN0IFN0cmluZyogbWVzc2FnZSkKIHsKICAgICBtX3Bh
dXNlZEluRGVidWdnZXJNZXNzYWdlID0gbWVzc2FnZSA/ICptZXNzYWdlIDogU3RyaW5nKCk7Ci0g
ICAgZXZhbHVhdGVJbk92ZXJsYXkoInNldFBhdXNlZEluRGVidWdnZXJNZXNzYWdlIiwgbV9wYXVz
ZWRJbkRlYnVnZ2VyTWVzc2FnZSk7CiAgICAgdXBkYXRlKCk7CiB9CiAKQEAgLTU3NywzNCArMjc1
LDEyMiBAQCB2b2lkIEluc3BlY3Rvck92ZXJsYXk6OnVwZGF0ZSgpCiAgICAgRnJhbWVWaWV3KiBv
dmVybGF5VmlldyA9IG92ZXJsYXlQYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCk7CiAgICAgSW50
UmVjdCB2aXNpYmxlUmVjdCA9IGVuY2xvc2luZ0ludFJlY3Qodmlldy0+dmlzaWJsZUNvbnRlbnRS
ZWN0KCkpOwogICAgIG92ZXJsYXlWaWV3LT5yZXNpemUodmlzaWJsZVJlY3Qud2lkdGgoKSwgdmlz
aWJsZVJlY3QuaGVpZ2h0KCkpOworCisgICAgLy8gQ2xlYXIgY2FudmFzIGFuZCBwYWludCB0aGlu
Z3MuCisgICAgcmVzZXQoKTsKKworICAgIGRyYXdOb2RlSGlnaGxpZ2h0KCk7CisgICAgZHJhd1Jl
Y3RIaWdobGlnaHQoKTsKKyAgICBkcmF3UGF1c2VkSW5EZWJ1Z2dlck1lc3NhZ2UoKTsKKworICAg
IC8vIFBvc2l0aW9uIERPTSBlbGVtZW50cy4KKyAgICBvdmVybGF5UGFnZSgpLT5tYWluRnJhbWUo
KS0+ZG9jdW1lbnQoKS0+cmVjYWxjU3R5bGUoTm9kZTo6Rm9yY2UpOwogICAgIGlmIChvdmVybGF5
Vmlldy0+bmVlZHNMYXlvdXQoKSkKICAgICAgICAgb3ZlcmxheVZpZXctPmxheW91dCgpOworCisg
ICAgLy8gS2ljayBwYWludC4KICAgICBtX2NsaWVudC0+aGlnaGxpZ2h0KCk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yT3ZlcmxheTo6ZHJhd05vZGVIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0KQorc3RhdGljIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yUG9pbnQo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
b2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBvYmplY3QtPnNldE51bWJl
cigieCIsIHBvaW50LngoKSk7CisgICAgb2JqZWN0LT5zZXROdW1iZXIoInkiLCBwb2ludC55KCkp
OworICAgIHJldHVybiBvYmplY3QucmVsZWFzZSgpOworfQorCitzdGF0aWMgUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBidWlsZEFycmF5Rm9yUXVhZChjb25zdCBGbG9hdFF1YWQmIHF1YWQpCit7Cisg
ICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcnJheSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUo
KTsKKyAgICBhcnJheS0+cHVzaE9iamVjdChidWlsZE9iamVjdEZvclBvaW50KHF1YWQucDEoKSkp
OworICAgIGFycmF5LT5wdXNoT2JqZWN0KGJ1aWxkT2JqZWN0Rm9yUG9pbnQocXVhZC5wMigpKSk7
CisgICAgYXJyYXktPnB1c2hPYmplY3QoYnVpbGRPYmplY3RGb3JQb2ludChxdWFkLnAzKCkpKTsK
KyAgICBhcnJheS0+cHVzaE9iamVjdChidWlsZE9iamVjdEZvclBvaW50KHF1YWQucDQoKSkpOwor
ICAgIHJldHVybiBhcnJheS5yZWxlYXNlKCk7Cit9CisKK3N0YXRpYyBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBidWlsZE9iamVjdEZvckhpZ2hsaWdodChGcmFtZVZpZXcqIG1haW5WaWV3LCBjb25z
dCBIaWdobGlnaHQmIGhpZ2hsaWdodCkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBv
YmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4gYXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBoaWdobGlnaHQucXVhZHMuc2l6ZSgpOyArK2kpCisgICAgICAgIGFycmF5LT5w
dXNoQXJyYXkoYnVpbGRBcnJheUZvclF1YWQoaGlnaGxpZ2h0LnF1YWRzW2ldKSk7CisgICAgb2Jq
ZWN0LT5zZXRBcnJheSgicXVhZHMiLCBhcnJheS5yZWxlYXNlKCkpOworICAgIG9iamVjdC0+c2V0
U3RyaW5nKCJjb250ZW50Q29sb3IiLCBoaWdobGlnaHQuY29udGVudENvbG9yLnNlcmlhbGl6ZWQo
KSk7CisgICAgb2JqZWN0LT5zZXRTdHJpbmcoImNvbnRlbnRPdXRsaW5lQ29sb3IiLCBoaWdobGln
aHQuY29udGVudE91dGxpbmVDb2xvci5zZXJpYWxpemVkKCkpOworICAgIG9iamVjdC0+c2V0U3Ry
aW5nKCJwYWRkaW5nQ29sb3IiLCBoaWdobGlnaHQucGFkZGluZ0NvbG9yLnNlcmlhbGl6ZWQoKSk7
CisgICAgb2JqZWN0LT5zZXRTdHJpbmcoImJvcmRlckNvbG9yIiwgaGlnaGxpZ2h0LmJvcmRlckNv
bG9yLnNlcmlhbGl6ZWQoKSk7CisgICAgb2JqZWN0LT5zZXRTdHJpbmcoIm1hcmdpbkNvbG9yIiwg
aGlnaGxpZ2h0Lm1hcmdpbkNvbG9yLnNlcmlhbGl6ZWQoKSk7CisKKyAgICBGbG9hdFJlY3Qgdmlz
aWJsZVJlY3QgPSBtYWluVmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CisgICAgaWYgKCFtYWlu
Vmlldy0+ZGVsZWdhdGVzU2Nyb2xsaW5nKCkpIHsKKyAgICAgICAgb2JqZWN0LT5zZXROdW1iZXIo
InNjcm9sbFgiLCB2aXNpYmxlUmVjdC54KCkpOworICAgICAgICBvYmplY3QtPnNldE51bWJlcigi
c2Nyb2xsWSIsIHZpc2libGVSZWN0LnkoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgb2JqZWN0
LT5zZXROdW1iZXIoInNjcm9sbFgiLCAwKTsKKyAgICAgICAgb2JqZWN0LT5zZXROdW1iZXIoInNj
cm9sbFkiLCAwKTsKKyAgICB9CisKKyAgICByZXR1cm4gb2JqZWN0LnJlbGVhc2UoKTsKK30KKwor
dm9pZCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3Tm9kZUhpZ2hsaWdodCgpCiB7CiAgICAgaWYgKCFt
X2hpZ2hsaWdodE5vZGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIEhpZ2hsaWdodCBoaWdobGln
aHQ7Ci0gICAgZ2V0T3JEcmF3Tm9kZUhpZ2hsaWdodChjb250ZXh0LCBtX2hpZ2hsaWdodE5vZGUu
Z2V0KCksIG1fbm9kZUhpZ2hsaWdodENvbmZpZywgJmhpZ2hsaWdodCk7CisgICAgYnVpbGROb2Rl
SGlnaGxpZ2h0KG1faGlnaGxpZ2h0Tm9kZS5nZXQoKSwgbV9ub2RlSGlnaGxpZ2h0Q29uZmlnLCAm
aGlnaGxpZ2h0KTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBoaWdobGlnaHRPYmplY3Qg
PSBidWlsZE9iamVjdEZvckhpZ2hsaWdodChtX3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCksIGhp
Z2hsaWdodCk7CisKKyAgICBOb2RlKiBub2RlID0gbV9oaWdobGlnaHROb2RlLmdldCgpOworICAg
IGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgbV9ub2RlSGlnaGxpZ2h0Q29uZmlnLnNob3dJ
bmZvICYmIG5vZGUtPnJlbmRlcmVyKCkgJiYgbm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSkgewor
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBlbGVtZW50SW5mbyA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CisgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQobm9k
ZSk7CisgICAgICAgIGJvb2wgaXNYSFRNTCA9IGVsZW1lbnQtPmRvY3VtZW50KCktPmlzWEhUTUxE
b2N1bWVudCgpOworICAgICAgICBlbGVtZW50SW5mby0+c2V0U3RyaW5nKCJ0YWdOYW1lIiwgaXNY
SFRNTCA/IGVsZW1lbnQtPm5vZGVOYW1lKCkgOiBlbGVtZW50LT5ub2RlTmFtZSgpLmxvd2VyKCkp
OworICAgICAgICBlbGVtZW50SW5mby0+c2V0U3RyaW5nKCJpZFZhbHVlIiwgZWxlbWVudC0+Z2V0
SWRBdHRyaWJ1dGUoKSk7CisgICAgICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiB1c2VkQ2xhc3NO
YW1lczsKKyAgICAgICAgaWYgKGVsZW1lbnQtPmhhc0NsYXNzKCkgJiYgZWxlbWVudC0+aXNTdHls
ZWRFbGVtZW50KCkpIHsKKyAgICAgICAgICAgIFN0cmluZyBjbGFzc05hbWVzOworICAgICAgICAg
ICAgY29uc3QgU3BhY2VTcGxpdFN0cmluZyYgY2xhc3NOYW1lc1N0cmluZyA9IHN0YXRpY19jYXN0
PFN0eWxlZEVsZW1lbnQqPihlbGVtZW50KS0+Y2xhc3NOYW1lcygpOworICAgICAgICAgICAgc2l6
ZV90IGNsYXNzTmFtZUNvdW50ID0gY2xhc3NOYW1lc1N0cmluZy5zaXplKCk7CisgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNsYXNzTmFtZUNvdW50OyArK2kpIHsKKyAgICAgICAg
ICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGNsYXNzTmFtZSA9IGNsYXNzTmFtZXNTdHJpbmdb
aV07CisgICAgICAgICAgICAgICAgaWYgKHVzZWRDbGFzc05hbWVzLmNvbnRhaW5zKGNsYXNzTmFt
ZSkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIHVzZWRD
bGFzc05hbWVzLmFkZChjbGFzc05hbWUpOworICAgICAgICAgICAgICAgIGNsYXNzTmFtZXMgKz0g
bWFrZVN0cmluZygiLiIsIGNsYXNzTmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bGVtZW50SW5mby0+c2V0U3RyaW5nKCJjbGFzc05hbWUiLCBjbGFzc05hbWVzKTsKKyAgICAgICAg
fQorCisgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwor
ICAgICAgICBGcmFtZSogY29udGFpbmluZ0ZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUo
KTsKKyAgICAgICAgRnJhbWVWaWV3KiBjb250YWluaW5nVmlldyA9IGNvbnRhaW5pbmdGcmFtZS0+
dmlldygpOworICAgICAgICBJbnRSZWN0IGJvdW5kaW5nQm94ID0gcGl4ZWxTbmFwcGVkSW50UmVj
dChjb250YWluaW5nVmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KHJlbmRlcmVyLT5hYnNvbHV0ZUJv
dW5kaW5nQm94UmVjdCgpKSk7CisgICAgICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBtb2RlbE9i
amVjdCA9IHJlbmRlcmVyLT5pc0JveE1vZGVsT2JqZWN0KCkgPyB0b1JlbmRlckJveE1vZGVsT2Jq
ZWN0KHJlbmRlcmVyKSA6IDA7CisgICAgICAgIGVsZW1lbnRJbmZvLT5zZXRTdHJpbmcoIm5vZGVX
aWR0aCIsIFN0cmluZzo6bnVtYmVyKG1vZGVsT2JqZWN0ID8gYWRqdXN0Rm9yQWJzb2x1dGVab29t
KG1vZGVsT2JqZWN0LT5waXhlbFNuYXBwZWRPZmZzZXRXaWR0aCgpLCBtb2RlbE9iamVjdCkgOiBi
b3VuZGluZ0JveC53aWR0aCgpKSk7CisgICAgICAgIGVsZW1lbnRJbmZvLT5zZXRTdHJpbmcoIm5v
ZGVIZWlnaHQiLCBTdHJpbmc6Om51bWJlcihtb2RlbE9iamVjdCA/IGFkanVzdEZvckFic29sdXRl
Wm9vbShtb2RlbE9iamVjdC0+cGl4ZWxTbmFwcGVkT2Zmc2V0SGVpZ2h0KCksIG1vZGVsT2JqZWN0
KSA6IGJvdW5kaW5nQm94LmhlaWdodCgpKSk7CisgICAgICAgIGhpZ2hsaWdodE9iamVjdC0+c2V0
T2JqZWN0KCJlbGVtZW50SW5mbyIsIGVsZW1lbnRJbmZvLnJlbGVhc2UoKSk7CisgICAgfQorICAg
IGV2YWx1YXRlSW5PdmVybGF5KCJkcmF3Tm9kZUhpZ2hsaWdodCIsIGhpZ2hsaWdodE9iamVjdCk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6ZHJhd1JlY3RIaWdobGlnaHQoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0KQordm9pZCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3UmVjdEhpZ2hsaWdo
dCgpCiB7CiAgICAgaWYgKCFtX2hpZ2hsaWdodFJlY3QpCiAgICAgICAgIHJldHVybjsKIAogICAg
IEhpZ2hsaWdodCBoaWdobGlnaHQ7Ci0gICAgZ2V0T3JEcmF3UmVjdEhpZ2hsaWdodChjb250ZXh0
LCBtX3BhZ2UsIG1faGlnaGxpZ2h0UmVjdC5nZXQoKSwgbV9yZWN0SGlnaGxpZ2h0Q29uZmlnLCAm
aGlnaGxpZ2h0KTsKKyAgICBidWlsZFJlY3RIaWdobGlnaHQobV9wYWdlLCBtX2hpZ2hsaWdodFJl
Y3QuZ2V0KCksIG1fcmVjdEhpZ2hsaWdodENvbmZpZywgJmhpZ2hsaWdodCk7CisgICAgZXZhbHVh
dGVJbk92ZXJsYXkoImhpZ2hsaWdodFJlY3QiLCBidWlsZE9iamVjdEZvckhpZ2hsaWdodChtX3Bh
Z2UtPm1haW5GcmFtZSgpLT52aWV3KCksIGhpZ2hsaWdodCkpOwogfQogCi12b2lkIEluc3BlY3Rv
ck92ZXJsYXk6OmRyYXdPdmVybGF5UGFnZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCit2b2lk
IEluc3BlY3Rvck92ZXJsYXk6OmRyYXdQYXVzZWRJbkRlYnVnZ2VyTWVzc2FnZSgpCiB7Ci0gICAg
R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjb250ZXh0KTsKLSAgICBGcmFt
ZVZpZXcqIHZpZXcgPSBvdmVybGF5UGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpOwotICAgIHZp
ZXctPnBhaW50KGNvbnRleHQsIEludFJlY3QoMCwgMCwgdmlldy0+d2lkdGgoKSwgdmlldy0+aGVp
Z2h0KCkpKTsKKyAgICBldmFsdWF0ZUluT3ZlcmxheSgiZHJhd1BhdXNlZEluRGVidWdnZXJNZXNz
YWdlIiwgbV9wYXVzZWRJbkRlYnVnZ2VyTWVzc2FnZSk7CiB9CiAKIFBhZ2UqIEluc3BlY3Rvck92
ZXJsYXk6Om92ZXJsYXlQYWdlKCkKQEAgLTYzNSw4ICs0MjEsMTMgQEAgUGFnZSogSW5zcGVjdG9y
T3ZlcmxheTo6b3ZlcmxheVBhZ2UoKQogICAgIG92ZXJsYXlTZXR0aW5ncy0+c2V0UGljdG9ncmFw
aEZvbnRGYW1pbHkoc2V0dGluZ3MtPnBpY3RvZ3JhcGhGb250RmFtaWx5KCkpOwogICAgIG92ZXJs
YXlTZXR0aW5ncy0+c2V0TWluaW11bUZvbnRTaXplKHNldHRpbmdzLT5taW5pbXVtRm9udFNpemUo
KSk7CiAgICAgb3ZlcmxheVNldHRpbmdzLT5zZXRNaW5pbXVtTG9naWNhbEZvbnRTaXplKHNldHRp
bmdzLT5taW5pbXVtTG9naWNhbEZvbnRTaXplKCkpOwotICAgIG92ZXJsYXlTZXR0aW5ncy0+c2V0
RGVmYXVsdEZvbnRTaXplKHNldHRpbmdzLT5kZWZhdWx0Rm9udFNpemUoKSk7Ci0gICAgb3Zlcmxh
eVNldHRpbmdzLT5zZXREZWZhdWx0Rml4ZWRGb250U2l6ZShzZXR0aW5ncy0+ZGVmYXVsdEZpeGVk
Rm9udFNpemUoKSk7CisjaWYgT1MoV0lORE9XUykKK292ZXJsYXlTZXR0aW5ncy0+c2V0RGVmYXVs
dEZvbnRTaXplKDEyKTsKK292ZXJsYXlTZXR0aW5ncy0+c2V0RGVmYXVsdEZpeGVkRm9udFNpemUo
MTIpOworI2VsaWYgT1MoTUFDX09TX1gpIHx8IE9TKFVOSVgpCitvdmVybGF5U2V0dGluZ3MtPnNl
dERlZmF1bHRGb250U2l6ZSgxMSk7CitvdmVybGF5U2V0dGluZ3MtPnNldERlZmF1bHRGaXhlZEZv
bnRTaXplKDExKTsKKyNlbmRpZgogICAgIG92ZXJsYXlTZXR0aW5ncy0+c2V0TWVkaWFFbmFibGVk
KGZhbHNlKTsKICAgICBvdmVybGF5U2V0dGluZ3MtPnNldFNjcmlwdEVuYWJsZWQodHJ1ZSk7CiAg
ICAgb3ZlcmxheVNldHRpbmdzLT5zZXRQbHVnaW5zRW5hYmxlZChmYWxzZSk7CkBAIC02NTYsNiAr
NDQ3LDExIEBAIFBhZ2UqIEluc3BlY3Rvck92ZXJsYXk6Om92ZXJsYXlQYWdlKCkKICAgICByZXR1
cm4gbV9vdmVybGF5UGFnZS5nZXQoKTsKIH0KIAordm9pZCBJbnNwZWN0b3JPdmVybGF5OjpyZXNl
dCgpCit7CisgICAgZXZhbHVhdGVJbk92ZXJsYXkoInJlc2V0IiwgIiIpOworfQorCiB2b2lkIElu
c3BlY3Rvck92ZXJsYXk6OmV2YWx1YXRlSW5PdmVybGF5KGNvbnN0IFN0cmluZyYgbWV0aG9kLCBj
b25zdCBTdHJpbmcmIGFyZ3VtZW50KQogewogICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gY29t
bWFuZCA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKQEAgLTY2NCw2ICs0NjAsMTQgQEAgdm9p
ZCBJbnNwZWN0b3JPdmVybGF5OjpldmFsdWF0ZUluT3ZlcmxheShjb25zdCBTdHJpbmcmIG1ldGhv
ZCwgY29uc3QgU3RyaW5nJiBhcmcKICAgICBvdmVybGF5UGFnZSgpLT5tYWluRnJhbWUoKS0+c2Ny
aXB0KCktPmV2YWx1YXRlKFNjcmlwdFNvdXJjZUNvZGUobWFrZVN0cmluZygiZGlzcGF0Y2goIiwg
Y29tbWFuZC0+dG9KU09OU3RyaW5nKCksICIpIikpKTsKIH0KIAordm9pZCBJbnNwZWN0b3JPdmVy
bGF5OjpldmFsdWF0ZUluT3ZlcmxheShjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4gYXJndW1lbnQpCit7CisgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBj
b21tYW5kID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIGNvbW1hbmQtPnB1c2hTdHJp
bmcobWV0aG9kKTsKKyAgICBjb21tYW5kLT5wdXNoVmFsdWUoYXJndW1lbnQpOworICAgIG92ZXJs
YXlQYWdlKCktPm1haW5GcmFtZSgpLT5zY3JpcHQoKS0+ZXZhbHVhdGUoU2NyaXB0U291cmNlQ29k
ZShtYWtlU3RyaW5nKCJkaXNwYXRjaCgiLCBjb21tYW5kLT50b0pTT05TdHJpbmcoKSwgIikiKSkp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVD
VE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJs
YXkuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmgKaW5kZXgg
YWJjOGJjZTk3ZmY2Y2NhNTNkOGQ4YzkyYzgxZDZmZDExYjZiMGJiMi4uZGQ0NzMyODJhOGJjYzFk
ZjFlNDI4NDAxYTI1OTUyNjNhNDFmNTMyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yT3ZlcmxheS5oCkBAIC0zMSw2ICszMSw3IEBACiAKICNpbmNsdWRlICJDb2xvci5o
IgogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgog
I2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCiAjaW5jbHVkZSAiTm9kZS5oIgogCkBAIC02NiwxMiAr
NjcsMTQgQEAgc3RydWN0IEhpZ2hsaWdodCB7CiAgICAgdm9pZCBzZXRDb2xvcnMoY29uc3QgSGln
aGxpZ2h0Q29uZmlnJiBoaWdobGlnaHRDb25maWcpCiAgICAgewogICAgICAgICBjb250ZW50Q29s
b3IgPSBoaWdobGlnaHRDb25maWcuY29udGVudDsKKyAgICAgICAgY29udGVudE91dGxpbmVDb2xv
ciA9IGhpZ2hsaWdodENvbmZpZy5jb250ZW50T3V0bGluZTsKICAgICAgICAgcGFkZGluZ0NvbG9y
ID0gaGlnaGxpZ2h0Q29uZmlnLnBhZGRpbmc7CiAgICAgICAgIGJvcmRlckNvbG9yID0gaGlnaGxp
Z2h0Q29uZmlnLmJvcmRlcjsKICAgICAgICAgbWFyZ2luQ29sb3IgPSBoaWdobGlnaHRDb25maWcu
bWFyZ2luOwogICAgIH0KIAogICAgIENvbG9yIGNvbnRlbnRDb2xvcjsKKyAgICBDb2xvciBjb250
ZW50T3V0bGluZUNvbG9yOwogICAgIENvbG9yIHBhZGRpbmdDb2xvcjsKICAgICBDb2xvciBib3Jk
ZXJDb2xvcjsKICAgICBDb2xvciBtYXJnaW5Db2xvcjsKQEAgLTkwLDYgKzkzLDcgQEAgcHVibGlj
OgogICAgIH0KICAgICB+SW5zcGVjdG9yT3ZlcmxheSgpOwogCisgICAgdm9pZCB1cGRhdGUoKTsK
ICAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCYpOwogICAgIHZvaWQgZHJhd091dGxpbmUo
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5b3V0UmVjdCYsIGNvbnN0IENvbG9yJik7CiAgICAg
dm9pZCBnZXRIaWdobGlnaHQoSGlnaGxpZ2h0KikgY29uc3Q7CkBAIC0xMDUsMTIgKzEwOSwxMyBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEluc3BlY3Rvck92ZXJsYXkoUGFnZSosIEluc3BlY3Rv
ckNsaWVudCopOwogCi0gICAgdm9pZCB1cGRhdGUoKTsKLSAgICB2b2lkIGRyYXdOb2RlSGlnaGxp
Z2h0KEdyYXBoaWNzQ29udGV4dCopOwotICAgIHZvaWQgZHJhd1JlY3RIaWdobGlnaHQoR3JhcGhp
Y3NDb250ZXh0Kik7Ci0gICAgdm9pZCBkcmF3T3ZlcmxheVBhZ2UoR3JhcGhpY3NDb250ZXh0Kik7
CisgICAgdm9pZCBkcmF3Tm9kZUhpZ2hsaWdodCgpOworICAgIHZvaWQgZHJhd1JlY3RIaWdobGln
aHQoKTsKKyAgICB2b2lkIGRyYXdQYXVzZWRJbkRlYnVnZ2VyTWVzc2FnZSgpOwogICAgIFBhZ2Uq
IG92ZXJsYXlQYWdlKCk7CisgICAgdm9pZCByZXNldCgpOwogICAgIHZvaWQgZXZhbHVhdGVJbk92
ZXJsYXkoY29uc3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQpOworICAg
IHZvaWQgZXZhbHVhdGVJbk92ZXJsYXkoY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8
SW5zcGVjdG9yVmFsdWU+IGFyZ3VtZW50KTsKIAogICAgIFBhZ2UqIG1fcGFnZTsKICAgICBJbnNw
ZWN0b3JDbGllbnQqIG1fY2xpZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3Rvck92ZXJsYXlQYWdlLmh0bWwgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yT3ZlcmxheVBhZ2UuaHRtbAppbmRleCBmYTY4MmMzMjA0OGM1YzcxOTBjMjVmMzdi
M2Y3NDViYjM0YmM5OTFmLi4wZmE5NGNmMjE2OWZkOTA0MThiNTY5MmQzZDE2NjgxOTJkNDg1NWFi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheVBh
Z2UuaHRtbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheVBh
Z2UuaHRtbApAQCAtMzIsNiArMzIsNyBAQAogYm9keSB7CiAgICAgbWFyZ2luOiAwOwogICAgIHBh
ZGRpbmc6IDA7CisgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKIH0KIAogLmZpbGwgewpAQCAt
NDcsMzEgKzQ4LDM1MSBAQCBib2R5IHsKIH0KIAogLm1lc3NhZ2UtbGluZSB7CisgICAgbWFyZ2lu
OiAxMHB4IDA7CiAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogfQogCiAubWVzc2FnZS1ib3ggewot
ICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1
NSwgMjU1LCAxOTQpOwogICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYigxMjgsIDEyOCwgMTI4KTsK
ICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Ci0gICAgbWFyZ2luOiAxMHB4IDA7CiAgICAgcGFk
ZGluZzogMnB4IDRweDsKIH0KIAorLnB4IHsKKyAgICBjb2xvcjogcmdiKDEyOCwgMTI4LCAxMjgp
OworfQorCisjZWxlbWVudC10aXRsZSB7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHot
aW5kZXg6IDEwOworfQorCisjdGFnLW5hbWUgeworICAgIGNvbG9yOiByZ2IoMTM2LCAxOCwgMTI4
KTsKK30KKworI25vZGUtaWQgeworICAgIGNvbG9yOiByZ2IoMjYsIDI2LCAxNjYpOworfQogPC9z
dHlsZT4KIDxzY3JpcHQ+Ci1mdW5jdGlvbiBzZXRQYXVzZWRJbkRlYnVnZ2VyTWVzc2FnZShtZXNz
YWdlKQorY29uc3QgbGlnaHRHcmlkQ29sb3IgPSAicmdiYSgwLDAsMCwwLjIpIjsKK2NvbnN0IGRh
cmtHcmlkQ29sb3IgPSAicmdiYSgwLDAsMCwwLjUpIjsKK2NvbnN0IHRyYW5zcGFyZW50Q29sb3Ig
PSAicmdiYSgwLCAwLCAwLCAwKSI7CisKK2Z1bmN0aW9uIHRha2VMYXN0KGFycmF5KQoreworICAg
IGlmICghYXJyYXkubGVuZ3RoKQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB2YXIgcmVzdWx0
ID0gYXJyYXkuc3BsaWNlKGFycmF5Lmxlbmd0aCAtIDEsIDEpOworICAgIHJldHVybiByZXN1bHRb
MF07Cit9CisKK2Z1bmN0aW9uIGRyYXdQYXVzZWRJbkRlYnVnZ2VyTWVzc2FnZShtZXNzYWdlKQog
eworICAgIGlmICghbWVzc2FnZSkKKyAgICAgIHJldHVybjsKICAgICB2YXIgcGF1c2VkSW5EZWJ1
Z2dlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwYXVzZWQtaW4tZGVidWdnZXIiKTsKLSAg
ICBpZiAobWVzc2FnZSkgewotICAgICAgICBwYXVzZWRJbkRlYnVnZ2VyLnRleHRDb250ZW50ID0g
bWVzc2FnZTsKLSAgICAgICAgcGF1c2VkSW5EZWJ1Z2dlci5zdHlsZS52aXNpYmlsaXR5ID0gInZp
c2libGUiOwotICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoImRpbW1lZCIpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIHBhdXNlZEluRGVidWdnZXIuc3R5bGUudmlzaWJpbGl0eSA9
ICJoaWRkZW4iOwotICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoImRpbW1l
ZCIpOworICAgIHBhdXNlZEluRGVidWdnZXIudGV4dENvbnRlbnQgPSBtZXNzYWdlOworICAgIHBh
dXNlZEluRGVidWdnZXIuc3R5bGUudmlzaWJpbGl0eSA9ICJ2aXNpYmxlIjsKKyAgICBkb2N1bWVu
dC5ib2R5LmNsYXNzTGlzdC5hZGQoImRpbW1lZCIpOworfQorCitmdW5jdGlvbiBfZHJhd0dyaWQo
aGlnaGxpZ2h0KQoreworICAgIGNvbnRleHQuc2F2ZSgpOworCisgICAgdmFyIHdpZHRoID0gY2Fu
dmFzLndpZHRoOworICAgIHZhciBoZWlnaHQgPSBjYW52YXMuaGVpZ2h0OworCisgICAgY29udGV4
dC5maWxsU3R5bGUgPSAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpIjsKKyAgICBjb250ZXh0LmZp
bGxSZWN0KDAsIDAsIGNhbnZhcy53aWR0aCwgMTUpOworICAgIGNvbnRleHQuZmlsbFJlY3QoMCwg
MTUsIDE1LCBjYW52YXMuaGVpZ2h0KTsKKyAgICAKKyAgICBjb250ZXh0LnRyYW5zbGF0ZSgtaGln
aGxpZ2h0LnNjcm9sbFgsIDAuNSAtIGhpZ2hsaWdodC5zY3JvbGxZKTsKKyAgICBjb250ZXh0Lmxp
bmVXaWR0aCA9IDE7CisKKyAgICBjb25zdCBncmlkU3ViU3RlcCA9IDU7CisgICAgY29uc3QgZ3Jp
ZFN0ZXAgPSA1MDsKKworICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSBsaWdodEdyaWRDb2xvcjsK
KworICAgIGZvciAodmFyIHkgPSBncmlkU3ViU3RlcDsgeSA8IGhpZ2hsaWdodC5zY3JvbGxZICsg
aGVpZ2h0OyB5ICs9IGdyaWRTdWJTdGVwKSB7CisgICAgICAgIGlmICghKHkgJSBncmlkU3RlcCkp
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTsKKyAg
ICAgICAgY29udGV4dC5tb3ZlVG8oaGlnaGxpZ2h0LnNjcm9sbFgsIHkpOworICAgICAgICBjb250
ZXh0LmxpbmVUbyhoaWdobGlnaHQuc2Nyb2xsWCArIGdyaWRTdWJTdGVwLCB5KTsKKyAgICAgICAg
Y29udGV4dC5zdHJva2UoKTsKICAgICB9CisKKyAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gZGFy
a0dyaWRDb2xvcjsKKyAgICBjb250ZXh0LmZpbGxTdHlsZSA9IGRhcmtHcmlkQ29sb3I7CisgICAg
Zm9yICh2YXIgeSA9IGdyaWRTdGVwOyB5IDwgaGVpZ2h0ICsgaGlnaGxpZ2h0LnNjcm9sbFk7IHkg
Kz0gZ3JpZFN0ZXApIHsKKyAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTsKKyAgICAgICAgY29u
dGV4dC5tb3ZlVG8oaGlnaGxpZ2h0LnNjcm9sbFgsIHkpOworICAgICAgICB2YXIgbWFya0xlbmd0
aCA9ICh5ICUgKGdyaWRTdGVwICogMikpID8gNSA6IDg7CisgICAgICAgIGNvbnRleHQubGluZVRv
KGhpZ2hsaWdodC5zY3JvbGxYICsgbWFya0xlbmd0aCwgeSk7CisgICAgICAgIGNvbnRleHQuc3Ry
b2tlKCk7CisgICAgICAgIGlmICghKHkgJSAoZ3JpZFN0ZXAgKiAyKSkpIHsKKyAgICAgICAgICAg
IGNvbnRleHQuc2F2ZSgpOworICAgICAgICAgICAgY29udGV4dC50cmFuc2xhdGUoaGlnaGxpZ2h0
LnNjcm9sbFgsIHkpOworICAgICAgICAgICAgY29udGV4dC5yb3RhdGUoLU1hdGguUEkgLyAyKTsK
KyAgICAgICAgICAgIGNvbnRleHQuZmlsbFRleHQoeSwgMiwgMTMpOworICAgICAgICAgICAgY29u
dGV4dC5yZXN0b3JlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb250ZXh0LnRyYW5zbGF0
ZSgwLjUsIC0wLjUpOworCisgICAgY29udGV4dC5zdHJva2VTdHlsZSA9IGxpZ2h0R3JpZENvbG9y
OworICAgIGZvciAodmFyIHggPSBncmlkU3ViU3RlcDsgeCA8IGhpZ2hsaWdodC5zY3JvbGxYICsg
d2lkdGg7IHggKz0gZ3JpZFN1YlN0ZXApIHsKKyAgICAgICAgaWYgKCEoeCAlIGdyaWRTdGVwKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpOworICAg
ICAgICBjb250ZXh0Lm1vdmVUbyh4LCBoaWdobGlnaHQuc2Nyb2xsWSk7CisgICAgICAgIGNvbnRl
eHQubGluZVRvKHgsIGhpZ2hsaWdodC5zY3JvbGxZICsgZ3JpZFN1YlN0ZXApOworICAgICAgICBj
b250ZXh0LnN0cm9rZSgpOworICAgIH0KKworICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSBkYXJr
R3JpZENvbG9yOworICAgIGNvbnRleHQuZmlsbFN0eWxlID0gZGFya0dyaWRDb2xvcjsKKyAgICBm
b3IgKHZhciB4ID0gZ3JpZFN0ZXA7IHggPCB3aWR0aCArIGhpZ2hsaWdodC5zY3JvbGxYOyB4ICs9
IGdyaWRTdGVwKSB7CisgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7CisgICAgICAgIGNvbnRl
eHQubW92ZVRvKHgsIGhpZ2hsaWdodC5zY3JvbGxZKTsKKyAgICAgICAgdmFyIG1hcmtMZW5ndGgg
PSAoeCAlIChncmlkU3RlcCAqIDIpKSA/IDUgOiA4OworICAgICAgICBjb250ZXh0LmxpbmVUbyh4
LCBoaWdobGlnaHQuc2Nyb2xsWSArIG1hcmtMZW5ndGgpOworICAgICAgICBjb250ZXh0LnN0cm9r
ZSgpOworICAgICAgICBpZiAoISh4ICUgKGdyaWRTdGVwICogMikpKQorICAgICAgICAgICAgY29u
dGV4dC5maWxsVGV4dCh4LCB4ICsgMiwgaGlnaGxpZ2h0LnNjcm9sbFkgKyAxMyk7CisgICAgfQor
ICAgIGNvbnRleHQucmVzdG9yZSgpOworfQorCitmdW5jdGlvbiBxdWFkVG9QYXRoKHF1YWQpCit7
CisgICAgY29udGV4dC5iZWdpblBhdGgoKTsKKyAgICBjb250ZXh0Lm1vdmVUbyhxdWFkWzBdLngs
IHF1YWRbMF0ueSk7CisgICAgY29udGV4dC5saW5lVG8ocXVhZFsxXS54LCBxdWFkWzFdLnkpOwor
ICAgIGNvbnRleHQubGluZVRvKHF1YWRbMl0ueCwgcXVhZFsyXS55KTsKKyAgICBjb250ZXh0Lmxp
bmVUbyhxdWFkWzNdLngsIHF1YWRbM10ueSk7CisgICAgY29udGV4dC5jbG9zZVBhdGgoKTsKKyAg
ICByZXR1cm4gY29udGV4dDsKK30KKworZnVuY3Rpb24gZHJhd091dGxpbmVkUXVhZChxdWFkLCBm
aWxsQ29sb3IsIG91dGxpbmVDb2xvcikKK3sKKyAgICBjb250ZXh0LnNhdmUoKTsKKyAgICBjb250
ZXh0LmxpbmVXaWR0aCA9IDI7CisgICAgcXVhZFRvUGF0aChxdWFkKS5jbGlwKCk7CisgICAgY29u
dGV4dC5maWxsU3R5bGUgPSBmaWxsQ29sb3I7CisgICAgY29udGV4dC5maWxsKCk7CisgICAgaWYg
KG91dGxpbmVDb2xvcikgeworICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gb3V0bGluZUNv
bG9yOworICAgICAgICBjb250ZXh0LnN0cm9rZSgpOworICAgIH0KKyAgICBjb250ZXh0LnJlc3Rv
cmUoKTsKK30KKworZnVuY3Rpb24gZHJhd091dGxpbmVkUXVhZFdpdGhDbGlwKHF1YWQsIGNsaXBR
dWFkLCBmaWxsQ29sb3IpCit7CisgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJjYW52YXMiKTsKKyAgICBjb250ZXh0LmZpbGxTdHlsZSA9IGZpbGxDb2xvcjsKKyAgICBj
b250ZXh0LnNhdmUoKTsKKyAgICBjb250ZXh0LmxpbmVXaWR0aCA9IDA7CisgICAgcXVhZFRvUGF0
aChxdWFkKS5maWxsKCk7CisgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAi
ZGVzdGluYXRpb24tb3V0IjsKKyAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICJyZWQiOworICAgIHF1
YWRUb1BhdGgoY2xpcFF1YWQpLmZpbGwoKTsKKyAgICBjb250ZXh0LnJlc3RvcmUoKTsKK30KKwor
ZnVuY3Rpb24gcXVhZEVxdWFscyhxdWFkMSwgcXVhZDIpCit7CisgICAgcmV0dXJuIHF1YWQxWzBd
LnggPT09IHF1YWQyWzBdLnggJiYgcXVhZDFbMF0ueSA9PT0gcXVhZDJbMF0ueSAmJgorICAgICAg
ICBxdWFkMVsxXS54ID09PSBxdWFkMlsxXS54ICYmIHF1YWQxWzFdLnkgPT09IHF1YWQyWzFdLnkg
JiYKKyAgICAgICAgcXVhZDFbMl0ueCA9PT0gcXVhZDJbMl0ueCAmJiBxdWFkMVsyXS55ID09PSBx
dWFkMlsyXS55ICYmCisgICAgICAgIHF1YWQxWzNdLnggPT09IHF1YWQyWzNdLnggJiYgcXVhZDFb
M10ueSA9PT0gcXVhZDJbM10ueTsKK30KKworZnVuY3Rpb24gcmVzZXQoKQoreworICAgIHdpbmRv
dy5jYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisgICAgd2luZG93
LmNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKKyAgICBjYW52YXMud2lkdGggPSBk
b2N1bWVudC5ib2R5Lm9mZnNldFdpZHRoOworICAgIGNhbnZhcy5oZWlnaHQgPSBkb2N1bWVudC5i
b2R5Lm9mZnNldEhlaWdodDsKKworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwYXVzZWQt
aW4tZGVidWdnZXIiKS5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7CisgICAgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImVsZW1lbnQtdGl0bGUiKS5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRl
biI7CisgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCJkaW1tZWQiKTsKK30KKwor
ZnVuY3Rpb24gX2RyYXdFbGVtZW50VGl0bGUoaGlnaGxpZ2h0KQoreworICAgIHZhciBlbGVtZW50
SW5mbyA9IGhpZ2hsaWdodC5lbGVtZW50SW5mbzsKKyAgICBpZiAoIWhpZ2hsaWdodC5lbGVtZW50
SW5mbykKKyAgICAgICAgcmV0dXJuOworCisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRh
Zy1uYW1lIikudGV4dENvbnRlbnQgPSBlbGVtZW50SW5mby50YWdOYW1lOworICAgIGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJub2RlLWlkIikudGV4dENvbnRlbnQgPSBlbGVtZW50SW5mby5ub2Rl
SWQgPyAiIyIgKyBlbGVtZW50SW5mby5ub2RlSWQgOiAiIjsKKyAgICBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiY2xhc3MtbmFtZSIpLnRleHRDb250ZW50ID0gZWxlbWVudEluZm8uY2xhc3NOYW1l
IHx8ICIiOworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJub2RlLXdpZHRoIikudGV4dENv
bnRlbnQgPSBlbGVtZW50SW5mby5ub2RlV2lkdGg7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoIm5vZGUtaGVpZ2h0IikudGV4dENvbnRlbnQgPSBlbGVtZW50SW5mby5ub2RlSGVpZ2h0Owor
ICAgIHZhciBlbGVtZW50VGl0bGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZWxlbWVudC10
aXRsZSIpOworCisgICAgdmFyIG1hcmdpblF1YWQgPSBoaWdobGlnaHQucXVhZHNbMF07CisKKyAg
ICB2YXIgdGl0bGVXaWR0aCA9IGVsZW1lbnRUaXRsZS5vZmZzZXRXaWR0aCArIDY7CisgICAgdmFy
IHRpdGxlSGVpZ2h0ID0gZWxlbWVudFRpdGxlLm9mZnNldEhlaWdodCArIDQ7CisKKyAgICB2YXIg
YW5jaG9yVG9wID0gbWFyZ2luUXVhZFswXS55OworICAgIHZhciBhbmNob3JCb3R0b20gPSBtYXJn
aW5RdWFkWzNdLnkKKworICAgIGNvbnN0IGFycm93SGVpZ2h0ID0gNzsKKyAgICB2YXIgcmVuZGVy
QXJyb3dVcCA9IGZhbHNlOworICAgIHZhciByZW5kZXJBcnJvd0Rvd24gPSBmYWxzZTsKKworICAg
IHZhciBib3hYID0gTWF0aC5tYXgoMiwgbWFyZ2luUXVhZFswXS54KTsKKyAgICBpZiAoYm94WCAr
IHRpdGxlV2lkdGggPiBjYW52YXMud2lkdGgpCisgICAgICAgIGJveFggPSBjYW52YXMud2lkdGgg
LSB0aXRsZVdpZHRoIC0gMjsKKworICAgIHZhciBib3hZOworICAgIGlmIChhbmNob3JUb3AgPiBj
YW52YXMuaGVpZ2h0KSB7CisgICAgICAgIGJveFkgPSBjYW52YXMuaGVpZ2h0IC0gdGl0bGVIZWln
aHQgLSBhcnJvd0hlaWdodDsKKyAgICAgICAgcmVuZGVyQXJyb3dEb3duID0gdHJ1ZTsKKyAgICB9
IGVsc2UgaWYgKGFuY2hvckJvdHRvbSA8IDApIHsKKyAgICAgICAgYm94WSA9IGFycm93SGVpZ2h0
OworICAgICAgICByZW5kZXJBcnJvd1VwID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKGFuY2hvckJv
dHRvbSArIHRpdGxlSGVpZ2h0ICsgYXJyb3dIZWlnaHQgPCBjYW52YXMuaGVpZ2h0KSB7CisgICAg
ICAgIGJveFkgPSBhbmNob3JCb3R0b20gKyBhcnJvd0hlaWdodCAtIDQ7CisgICAgICAgIHJlbmRl
ckFycm93VXAgPSB0cnVlOworICAgIH0gZWxzZSBpZiAoYW5jaG9yVG9wIC0gdGl0bGVIZWlnaHQg
LSBhcnJvd0hlaWdodCA+IDApIHsKKyAgICAgICAgYm94WSA9IGFuY2hvclRvcCAtIHRpdGxlSGVp
Z2h0IC0gYXJyb3dIZWlnaHQgKyAzOworICAgICAgICByZW5kZXJBcnJvd0Rvd24gPSB0cnVlOwor
ICAgIH0gZWxzZQorICAgICAgICBib3hZID0gYXJyb3dIZWlnaHQ7CisKKyAgICBjb250ZXh0LnNh
dmUoKTsKKyAgICBjb250ZXh0LnRyYW5zbGF0ZSgwLjUsIDAuNSk7CisgICAgY29udGV4dC5iZWdp
blBhdGgoKTsKKyAgICBjb250ZXh0Lm1vdmVUbyhib3hYLCBib3hZKTsKKyAgICBpZiAocmVuZGVy
QXJyb3dVcCkgeworICAgICAgICBjb250ZXh0LmxpbmVUbyhib3hYICsgMiAqIGFycm93SGVpZ2h0
LCBib3hZKTsKKyAgICAgICAgY29udGV4dC5saW5lVG8oYm94WCArIDMgKiBhcnJvd0hlaWdodCwg
Ym94WSAtIGFycm93SGVpZ2h0KTsKKyAgICAgICAgY29udGV4dC5saW5lVG8oYm94WCArIDQgKiBh
cnJvd0hlaWdodCwgYm94WSk7CisgICAgfQorICAgIGNvbnRleHQubGluZVRvKGJveFggKyB0aXRs
ZVdpZHRoLCBib3hZKTsKKyAgICBjb250ZXh0LmxpbmVUbyhib3hYICsgdGl0bGVXaWR0aCwgYm94
WSArIHRpdGxlSGVpZ2h0KTsKKyAgICBpZiAocmVuZGVyQXJyb3dEb3duKSB7CisgICAgICAgIGNv
bnRleHQubGluZVRvKGJveFggKyA0ICogYXJyb3dIZWlnaHQsIGJveFkgKyB0aXRsZUhlaWdodCk7
CisgICAgICAgIGNvbnRleHQubGluZVRvKGJveFggKyAzICogYXJyb3dIZWlnaHQsIGJveFkgKyB0
aXRsZUhlaWdodCArIGFycm93SGVpZ2h0KTsKKyAgICAgICAgY29udGV4dC5saW5lVG8oYm94WCAr
IDIgKiBhcnJvd0hlaWdodCwgYm94WSArIHRpdGxlSGVpZ2h0KTsKKyAgICB9CisgICAgY29udGV4
dC5saW5lVG8oYm94WCwgYm94WSArIHRpdGxlSGVpZ2h0KTsKKyAgICBjb250ZXh0LmNsb3NlUGF0
aCgpOworICAgIGNvbnRleHQuZmlsbFN0eWxlID0gInJnYigyNTUsIDI1NSwgMTk0KSI7CisgICAg
Y29udGV4dC5maWxsKCk7CisgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICJyZ2IoMTI4LCAxMjgs
IDEyOCkiOworICAgIGNvbnRleHQuc3Ryb2tlKCk7CisKKyAgICBjb250ZXh0LnJlc3RvcmUoKTsK
KworICAgIGVsZW1lbnRUaXRsZS5zdHlsZS52aXNpYmlsaXR5ID0gInZpc2libGUiOworICAgIGVs
ZW1lbnRUaXRsZS5zdHlsZS50b3AgPSAoYm94WSArIDMpICsgInB4IjsKKyAgICBlbGVtZW50VGl0
bGUuc3R5bGUubGVmdCA9IChib3hYICsgMykgKyAicHgiOworfQorCitmdW5jdGlvbiBfZHJhd1J1
bGVycyhoaWdobGlnaHQpCit7CisgICAgY29udGV4dC5zYXZlKCk7CisgICAgY29udGV4dC5zdHJv
a2VTdHlsZSA9ICJyZ2JhKDEyOCwgMTI4LCAxMjgsIDAuMykiOworICAgIGNvbnRleHQubGluZVdp
ZHRoID0gMTsKKyAgICBjb250ZXh0LnRyYW5zbGF0ZSgwLjUsIDAuNSk7CisgICAgdmFyIGxlZnRt
b3N0WEZvclkgPSB7fTsKKyAgICB2YXIgdG9wbW9zdFlGb3JYID0ge307CisKKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGhpZ2hsaWdodC5xdWFkcy5sZW5ndGg7ICsraSkgeworICAgICAgICB2YXIg
cXVhZCA9IGhpZ2hsaWdodC5xdWFkc1tpXTsKKyAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBx
dWFkLmxlbmd0aDsgKytqKSB7CisgICAgICAgICAgICB2YXIgeCA9IHF1YWRbal0ueDsKKyAgICAg
ICAgICAgIHZhciB5ID0gcXVhZFtqXS55OworICAgICAgICAgICAgdG9wbW9zdFlGb3JYW01hdGgu
cm91bmQoeCldID0gTWF0aC5taW4odG9wbW9zdFlGb3JYW3hdIHx8IE51bWJlci5NQVhfVkFMVUUs
IE1hdGgucm91bmQocXVhZFtqXS55KSk7CisgICAgICAgICAgICBsZWZ0bW9zdFhGb3JZW01hdGgu
cm91bmQoeSldID0gTWF0aC5taW4obGVmdG1vc3RYRm9yWVt5XSB8fCBOdW1iZXIuTUFYX1ZBTFVF
LCBNYXRoLnJvdW5kKHF1YWRbal0ueCkpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh2
YXIgeSBpbiBsZWZ0bW9zdFhGb3JZKSB7CisgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7Cisg
ICAgICAgIGNvbnRleHQubW92ZVRvKDAsIHkpOworICAgICAgICBjb250ZXh0LmxpbmVUbyhsZWZ0
bW9zdFhGb3JZW3ldLCB5KTsKKyAgICAgICAgY29udGV4dC5zdHJva2UoKTsKKyAgICB9CisKKyAg
ICBmb3IgKHZhciB4IGluIHRvcG1vc3RZRm9yWCkgeworICAgICAgICBjb250ZXh0LmJlZ2luUGF0
aCgpOworICAgICAgICBjb250ZXh0Lm1vdmVUbyh4LCAwKTsKKyAgICAgICAgY29udGV4dC5saW5l
VG8oeCwgdG9wbW9zdFlGb3JYW3hdKTsKKyAgICAgICAgY29udGV4dC5zdHJva2UoKTsKKyAgfQor
CisgICAgY29udGV4dC5yZXN0b3JlKCk7Cit9CisKK2Z1bmN0aW9uIGRyYXdOb2RlSGlnaGxpZ2h0
KGhpZ2hsaWdodCkKK3sKKyAgICBfZHJhd0dyaWQoaGlnaGxpZ2h0KTsKKworICAgIGlmICghaGln
aGxpZ2h0LnF1YWRzLmxlbmd0aCkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29udGV4dC5zYXZl
KCk7CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhpZ2hsaWdodC5xdWFkcy5sZW5ndGg7ICsr
aSkgeworICAgICAgICB2YXIgcXVhZCA9IGhpZ2hsaWdodC5xdWFkc1tpXTsKKyAgICAgICAgZm9y
ICh2YXIgaiA9IDA7IGogPCBxdWFkLmxlbmd0aDsgKytqKSB7CisgICAgICAgICAgICBxdWFkW2pd
LnggLT0gaGlnaGxpZ2h0LnNjcm9sbFg7CisgICAgICAgICAgICBxdWFkW2pdLnkgLT0gaGlnaGxp
Z2h0LnNjcm9sbFk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2YXIgcXVhZHMgPSBoaWdobGln
aHQucXVhZHMuc2xpY2UoKTsKKyAgICB2YXIgY29udGVudFF1YWQgPSB0YWtlTGFzdChxdWFkcyk7
CisgICAgdmFyIHBhZGRpbmdRdWFkID0gdGFrZUxhc3QocXVhZHMpOworICAgIHZhciBib3JkZXJR
dWFkID0gdGFrZUxhc3QocXVhZHMpOworICAgIHZhciBtYXJnaW5RdWFkID0gdGFrZUxhc3QocXVh
ZHMpOworCisgICAgdmFyIGhhc0NvbnRlbnQgPSBjb250ZW50UXVhZCAmJiBoaWdobGlnaHQuY29u
dGVudENvbG9yICE9PSB0cmFuc3BhcmVudENvbG9yIHx8IGhpZ2hsaWdodC5jb250ZW50T3V0bGlu
ZUNvbG9yICE9PSB0cmFuc3BhcmVudENvbG9yOworICAgIHZhciBoYXNQYWRkaW5nID0gcGFkZGlu
Z1F1YWQgJiYgaGlnaGxpZ2h0LnBhZGRpbmdDb2xvciAhPT0gdHJhbnNwYXJlbnRDb2xvcjsKKyAg
ICB2YXIgaGFzQm9yZGVyID0gYm9yZGVyUXVhZCAmJiBoaWdobGlnaHQuYm9yZGVyQ29sb3IgIT09
IHRyYW5zcGFyZW50Q29sb3I7CisgICAgdmFyIGhhc01hcmdpbiA9IG1hcmdpblF1YWQgJiYgaGln
aGxpZ2h0Lm1hcmdpbkNvbG9yICE9PSB0cmFuc3BhcmVudENvbG9yOworCisgICAgdmFyIGNsaXBR
dWFkOworICAgIGlmIChoYXNNYXJnaW4gJiYgKCFoYXNCb3JkZXIgfHwgIXF1YWRFcXVhbHMobWFy
Z2luUXVhZCwgYm9yZGVyUXVhZCkpKSB7CisgICAgICAgIGRyYXdPdXRsaW5lZFF1YWRXaXRoQ2xp
cChtYXJnaW5RdWFkLCBib3JkZXJRdWFkLCBoaWdobGlnaHQubWFyZ2luQ29sb3IpOworICAgICAg
ICBjbGlwUXVhZCA9IGJvcmRlclF1YWQ7CisgICAgfQorICAgIGlmIChoYXNCb3JkZXIgJiYgKCFo
YXNQYWRkaW5nIHx8ICFxdWFkRXF1YWxzKGJvcmRlclF1YWQsIHBhZGRpbmdRdWFkKSkpIHsKKyAg
ICAgICAgZHJhd091dGxpbmVkUXVhZFdpdGhDbGlwKGJvcmRlclF1YWQsIHBhZGRpbmdRdWFkLCBo
aWdobGlnaHQuYm9yZGVyQ29sb3IpOworICAgICAgICBjbGlwUXVhZCA9IHBhZGRpbmdRdWFkOwor
ICAgIH0KKyAgICBpZiAoaGFzUGFkZGluZyAmJiAoIWhhc0NvbnRlbnQgfHwgIXF1YWRFcXVhbHMo
cGFkZGluZ1F1YWQsIGNvbnRlbnRRdWFkKSkpIHsKKyAgICAgICAgZHJhd091dGxpbmVkUXVhZFdp
dGhDbGlwKHBhZGRpbmdRdWFkLCBjb250ZW50UXVhZCwgaGlnaGxpZ2h0LnBhZGRpbmdDb2xvcik7
CisgICAgICAgIGNsaXBRdWFkID0gY29udGVudFF1YWQ7CisgICAgfQorICAgIGlmIChoYXNDb250
ZW50KQorICAgICAgICBkcmF3T3V0bGluZWRRdWFkKGNvbnRlbnRRdWFkLCBoaWdobGlnaHQuY29u
dGVudENvbG9yLCBoaWdobGlnaHQuY29udGVudE91dGxpbmVDb2xvcik7CisKKyAgICBfZHJhd0Vs
ZW1lbnRUaXRsZShoaWdobGlnaHQpOworICAgIF9kcmF3UnVsZXJzKGhpZ2hsaWdodCk7CisgICAg
Y29udGV4dC5yZXN0b3JlKCk7Cit9CisKK2Z1bmN0aW9uIGRyYXdSZWN0SGlnaGxpZ2h0KGhpZ2hs
aWdodCkKK3sKKyAgICBjb250ZXh0LnNhdmUoKTsKKyAgICBkcmF3T3V0bGluZWRRdWFkKGhpZ2hs
aWdodC5xdWFkc1swXSwgaGlnaGxpZ2h0LmNvbnRlbnRDb2xvciwgaGlnaGxpZ2h0LmNvbnRlbnRP
dXRsaW5lQ29sb3IpOworICAgIGNvbnRleHQucmVzdG9yZSgpOwogfQogCiBmdW5jdGlvbiBkaXNw
YXRjaChtZXNzYWdlKQpAQCAtNzksOSArNDAwLDIzIEBAIGZ1bmN0aW9uIGRpc3BhdGNoKG1lc3Nh
Z2UpCiAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IG1lc3NhZ2Uuc2hpZnQoKTsKICAgICB3aW5kb3db
ZnVuY3Rpb25OYW1lXS5hcHBseShudWxsLCBtZXNzYWdlKTsKIH0KKworZnVuY3Rpb24gbG9nKHRl
eHQpCit7CisgICAgdmFyIGxvZ0VudHJ5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7
CisgICAgbG9nRW50cnkudGV4dENvbnRlbnQgPSB0ZXh0OworICAgIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJsb2ciKS5hcHBlbmRDaGlsZChsb2dFbnRyeSk7Cit9CisKIDwvc2NyaXB0PgogPC9o
ZWFkPgogPGJvZHkgY2xhc3M9ImZpbGwiPgogPGRpdiBjbGFzcz0ibWVzc2FnZS1saW5lIj48c3Bh
biBjbGFzcz0ibWVzc2FnZS1ib3giIGlkPSJwYXVzZWQtaW4tZGVidWdnZXIiPjwvc3Bhbj48L2Rp
dj4KIDwvYm9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgY2xhc3M9ImZpbGwiPjwvY2FudmFzPgor
PGRpdiBpZD0iZWxlbWVudC10aXRsZSI+CisgIDxzcGFuIGlkPSJ0YWctbmFtZSI+PC9zcGFuPjxz
cGFuIGlkPSJub2RlLWlkIj48L3NwYW4+PHNwYW4gaWQ9ImNsYXNzLW5hbWUiPjwvc3Bhbj4KKyAg
PHNwYW4gaWQ9Im5vZGUtd2lkdGgiPjwvc3Bhbj48c3BhbiBjbGFzcz0icHgiPnB4PC9zcGFuPjxz
cGFuIGNsYXNzPSJweCI+ICYjeEQ3OyA8L3NwYW4+PHNwYW4gaWQ9Im5vZGUtaGVpZ2h0Ij48L3Nw
YW4+PHNwYW4gY2xhc3M9InB4Ij5weDwvc3Bhbj4KKzwvZGl2PgorPGRpdiBpZD0ibG9nIj48L2Rp
dj4KIDwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JQYWdlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VB
Z2VudC5jcHAKaW5kZXggYjY4NDlmYTg5MjRmZDFkNWEwZDY1N2MyZGE4NGQyMzMxYWQwNDM4Zi4u
YTc5NGM3MDgxYjI4ODFmM2ZhNTJjYTIxMGE4ODNlZWU2YTM3MjU2MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKQEAgLTkxNSw2ICs5MTUs
MTIgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpZExheW91dCgpCiAKICAgICBpZiAoY3Vy
cmVudFdpZHRoICYmIGN1cnJlbnRIZWlnaHQpCiAgICAgICAgIG1fY2xpZW50LT5hdXRvWm9vbVBh
Z2VUb0ZpdFdpZHRoKCk7CisgICAgbV9vdmVybGF5LT51cGRhdGUoKTsKK30KKwordm9pZCBJbnNw
ZWN0b3JQYWdlQWdlbnQ6OmRpZFNjcm9sbCgpCit7CisgICAgbV9vdmVybGF5LT51cGRhdGUoKTsK
IH0KIAogUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UGFnZTo6RnJhbWU+IEluc3BlY3RvclBhZ2VB
Z2VudDo6YnVpbGRPYmplY3RGb3JGcmFtZShGcmFtZSogZnJhbWUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmgKaW5kZXggN2I5MTc3OWY5N2FlMzhiNmMy
MWFjMTMzNGUxZTM1ODg2NGI1ZmRkMC4uM2U0ZWMxMTAxMTRlNWMwNjc4ZTI1YWZhYjBhZjM4NzAx
N2NmZjNlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBh
Z2VBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdl
bnQuaApAQCAtMTM3LDYgKzEzNyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHdpbGxQYWludChHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBMYXlvdXRSZWN0Jik7CiAgICAgdm9pZCBkaWRQYWludCgpOwog
ICAgIHZvaWQgZGlkTGF5b3V0KCk7CisgICAgdm9pZCBkaWRTY3JvbGwoKTsKIAogICAgIC8vIElu
c3BlY3RvciBDb250cm9sbGVyIEFQSQogICAgIHZpcnR1YWwgdm9pZCBzZXRGcm9udGVuZChJbnNw
ZWN0b3JGcm9udGVuZCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCmluZGV4IDQzNjIyMmQ4ODUyZWQy
ZmQxMGQ0ZjNlNzg2NjI1N2U0NWJhOTUzNjcuLmNjYTRhMDkyNWY3ZGUyYmU5YjgwMWZlNDBiZDE5
MDExZDIyMWJlNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKQEAgLTk1LDYgKzk1LDcgQEAgdm9p
ZCBDaHJvbWU6OmludmFsaWRhdGVDb250ZW50c0ZvclNsb3dTY3JvbGwoY29uc3QgSW50UmVjdCYg
dXBkYXRlUmVjdCwgYm9vbCBpbW0KIHZvaWQgQ2hyb21lOjpzY3JvbGwoY29uc3QgSW50U2l6ZSYg
c2Nyb2xsRGVsdGEsIGNvbnN0IEludFJlY3QmIHJlY3RUb1Njcm9sbCwgY29uc3QgSW50UmVjdCYg
Y2xpcFJlY3QpCiB7CiAgICAgbV9jbGllbnQtPnNjcm9sbChzY3JvbGxEZWx0YSwgcmVjdFRvU2Ny
b2xsLCBjbGlwUmVjdCk7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRTY3JvbGwo
bV9wYWdlKTsKIH0KIAogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161484</attachid>
            <date>2012-08-30 08:56:19 -0700</date>
            <delta_ts>2012-08-31 01:36:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95456-20120830195607.patch</filename>
            <type>text/plain</type>
            <size>47626</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3MTQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGY1ODE2MDk5OWI1YzI2
MDhhYTkzMzE2ZDc2MmNmNDMyNzEzNzdmYi4uN2UzOGI0MjczNjg2YzMwZWE3ZGZiYjUwYTRhNWMz
ZTdjZTdmMGFkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDEyLTA4LTMwICBQYXZl
bCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IHJlbmRlciBib3ggbW9kZWwgZWxlbWVudHMgYW5kIGdyaWQgb24gaW5zcGVjdG9yIG92ZXJs
YXkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NDU2
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBj
aGFuZ2UgbWlncmF0ZXMgbmF0aXZlIHJlbmRlcmluZyBmb3IgYm94IG1vZGVsIHRvIHRoZSBJbnNw
ZWN0b3JPdmVybGF5LgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRh
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6ZGlkU2Nyb2xsSW1wbCk6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3Rvckluc3RydW1lbnRhdGlvbi5oOgorICAgICAgICAoSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkU2Ny
b2xsKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JP
dmVybGF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmRyYXdOb2Rl
SGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmRyYXdSZWN0
SGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6Om92ZXJsYXlQ
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmV2YWx1YXRlSW5PdmVy
bGF5KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5oOgorICAgICAgICAo
V2ViQ29yZTo6SGlnaGxpZ2h0OjpzZXRDb2xvcnMpOgorICAgICAgICAoSGlnaGxpZ2h0KToKKyAg
ICAgICAgKEluc3BlY3Rvck92ZXJsYXkpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JP
dmVybGF5UGFnZS5odG1sOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpkaWRMYXlvdXQpOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6
OmRpZFNjcm9sbCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oOgor
ICAgICAgICAqIHBhZ2UvQ2hyb21lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZTo6c2Ny
b2xsKToKKwogMjAxMi0wOC0zMCAgS2Vpc2hpIEhhdHRvcmkgIDxrZWlzaGlAd2Via2l0Lm9yZz4K
IAogICAgICAgICBUaWNrIG1hcmtzIGRvbid0IG1hdGNoIHRodW1iIHdoZW4gYXBwbHlpbmcgcGFk
ZGluZyBvciBib3JkZXIgdG8gaW5wdXQgdHlwZT1yYW5nZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcAppbmRleCBhZjQ0NzI4
YzY0NjEwMDhiYWYzOTQ3ZjNkYjY5N2Y2MjRmYTZjNmU3Li40MWI3YmM4MWFkZWRhMGFlODgxZWJl
OTZlZWY3ZDA3ZTYzZDE0OWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcApAQCAtMjQ5LDYgKzI0OSwxMiBAQCB2b2lk
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnRJbXBsKElu
c3RydW1lbnRpbmdBZ2VudHMqCiAgICAgICAgIGRvbUFnZW50LT5tb3VzZURpZE1vdmVPdmVyRWxl
bWVudChyZXN1bHQsIG1vZGlmaWVyRmxhZ3MpOwogfQogCit2b2lkIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6ZGlkU2Nyb2xsSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5n
QWdlbnRzKQoreworICAgIGlmIChJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCA9IGluc3Ry
dW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvclBhZ2VBZ2VudCgpKQorICAgICAgICBwYWdlQWdlbnQt
PmRpZFNjcm9sbCgpOworfQorCiBib29sIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aGFuZGxl
TW91c2VQcmVzc0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cykK
IHsKICAgICBpZiAoSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zdHJ1bWVudGluZ0Fn
ZW50cy0+aW5zcGVjdG9yRE9NQWdlbnQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaAppbmRleCBkYjMzNWJmYWY0NTBjYzMxOGNi
Y2U0ZGY2MTgxMTI3ZGQyNTRmNWM4Li4wY2MwY2MyMWMwNGYzNGQxNTdkNjA5Y2U3OGVkNTlkMjYz
ZmM2ZmJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvcklu
c3RydW1lbnRhdGlvbi5oCkBAIC0xNDUsNiArMTQ1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2
b2lkIGRpZEludmFsaWRhdGVMYXlvdXQoRnJhbWUqKTsKICAgICBzdGF0aWMgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uQ29va2llIHdpbGxMYXlvdXQoRnJhbWUqKTsKICAgICBzdGF0aWMgdm9pZCBk
aWRMYXlvdXQoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJik7CisgICAgc3Rh
dGljIHZvaWQgZGlkU2Nyb2xsKFBhZ2UqKTsKICAgICBzdGF0aWMgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uQ29va2llIHdpbGxMb2FkWEhSKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBYTUxIdHRw
UmVxdWVzdCopOwogICAgIHN0YXRpYyB2b2lkIGRpZExvYWRYSFIoY29uc3QgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uQ29va2llJik7CiAgICAgc3RhdGljIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bkNvb2tpZSB3aWxsUGFpbnQoRnJhbWUqLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXlvdXRS
ZWN0Jik7CkBAIC0zMjEsNiArMzIyLDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBkaWRJ
bnZhbGlkYXRlTGF5b3V0SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgRnJhbWUqKTsKICAgICBz
dGF0aWMgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIHdpbGxMYXlvdXRJbXBsKEluc3Ry
dW1lbnRpbmdBZ2VudHMqLCBGcmFtZSopOwogICAgIHN0YXRpYyB2b2lkIGRpZExheW91dEltcGwo
Y29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJik7CisgICAgc3RhdGljIHZvaWQg
ZGlkU2Nyb2xsSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKik7CiAgICAgc3RhdGljIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbkNvb2tpZSB3aWxsTG9hZFhIUkltcGwoSW5zdHJ1bWVudGluZ0FnZW50
cyosIFhNTEh0dHBSZXF1ZXN0KiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogICAgIHN0YXRp
YyB2b2lkIGRpZExvYWRYSFJJbXBsKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tp
ZSYpOwogICAgIHN0YXRpYyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2lsbFBhaW50
SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5b3V0
UmVjdCYsIEZyYW1lKik7CkBAIC04NDAsNiArODQyLDE1IEBAIGlubGluZSB2b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6ZGlkTGF5b3V0KGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bkNvCiAjZW5kaWYKIH0KIAoraW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpk
aWRTY3JvbGwoUGFnZSogcGFnZSkKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgIEZBU1Rf
UkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOworICAgIGlmIChJbnN0cnVtZW50aW5nQWdl
bnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvclBhZ2UocGFn
ZSkpCisgICAgICAgIGRpZFNjcm9sbEltcGwoaW5zdHJ1bWVudGluZ0FnZW50cyk7CisjZW5kaWYK
K30KKwogaW5saW5lIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OndpbGxMb2FkWEhSKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IFhNTEh0dHBSZXF1ZXN0KiByZXF1ZXN0KQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAKaW5kZXggNjk5ZWI0
YjgwM2U3YmNlYWZlNjcwMDM2YWM0ZGFjNjBhNGEzNmFjNy4uYzU5Y2EyNTkwYjIyMjRkNWRkOTk2
ZWU1YzgzMzI1OTk0NGNhOTY4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3Rvck92ZXJsYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JPdmVybGF5LmNwcApAQCAtMzUsNDcgKzM1LDI2IEBACiAjaW5jbHVkZSAiRG9jdW1lbnRM
b2FkZXIuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRW1wdHlDbGllbnRzLmgi
Ci0jaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgotI2luY2x1ZGUgIkZv
bnRGYW1pbHkuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIK
ICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JPdmVybGF5
UGFnZS5oIgotI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgogI2luY2x1ZGUgIk5vZGUuaCIK
ICNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJC
b3hNb2RlbE9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUgIlJl
bmRlck9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTY3JpcHRT
b3VyY2VDb2RlLmgiCiAjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJTZXR0aW5n
cy5oIgogI2luY2x1ZGUgIlN0eWxlZEVsZW1lbnQuaCIKLSNpbmNsdWRlICJUZXh0UnVuLmgiCi0j
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIG5hbWVzcGFjZSB7CiAKLSNpZiBPUyhXSU5ET1dTKQotc3RhdGljIGNvbnN0IHVuc2lnbmVk
IGZvbnRIZWlnaHRQeCA9IDEyOwotI2VsaWYgT1MoTUFDX09TX1gpIHx8IE9TKFVOSVgpCi1zdGF0
aWMgY29uc3QgdW5zaWduZWQgZm9udEhlaWdodFB4ID0gMTE7Ci0jZW5kaWYKLQotY29uc3Qgc3Rh
dGljIGludCByZWN0SW5mbGF0ZVB4ID0gNDsKLWNvbnN0IHN0YXRpYyBpbnQgYm9yZGVyV2lkdGhQ
eCA9IDE7Ci1jb25zdCBzdGF0aWMgaW50IHRvb2x0aXBQYWRkaW5nID0gNDsKLQotY29uc3Qgc3Rh
dGljIGludCBhcnJvd1RpcE9mZnNldCA9IDIwOwotY29uc3Qgc3RhdGljIGZsb2F0IGFycm93SGVp
Z2h0ID0gNzsKLWNvbnN0IHN0YXRpYyBmbG9hdCBhcnJvd0hhbGZXaWR0aCA9IDc7Ci0KIFBhdGgg
cXVhZFRvUGF0aChjb25zdCBGbG9hdFF1YWQmIHF1YWQpCiB7CiAgICAgUGF0aCBxdWFkUGF0aDsK
QEAgLTExMSwyNTYgKzkwLDYgQEAgdm9pZCBkcmF3T3V0bGluZWRRdWFkKEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgRmxvYXRRdWFkJiBxdWFkLCBjb25zdCBDb2wKICAgICBjb250ZXh0
LT5maWxsUGF0aChxdWFkUGF0aCk7CiB9CiAKLXZvaWQgZHJhd091dGxpbmVkUXVhZFdpdGhDbGlw
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRRdWFkJiBxdWFkLCBjb25zdCBG
bG9hdFF1YWQmIGNsaXBRdWFkLCBjb25zdCBDb2xvciYgZmlsbENvbG9yKQotewotICAgIGNvbnRl
eHQtPnNhdmUoKTsKLSAgICBQYXRoIGNsaXBRdWFkUGF0aCA9IHF1YWRUb1BhdGgoY2xpcFF1YWQp
OwotICAgIGNvbnRleHQtPmNsaXBPdXQoY2xpcFF1YWRQYXRoKTsKLSAgICBkcmF3T3V0bGluZWRR
dWFkKGNvbnRleHQsIHF1YWQsIGZpbGxDb2xvciwgQ29sb3I6OnRyYW5zcGFyZW50KTsKLSAgICBj
b250ZXh0LT5yZXN0b3JlKCk7Ci19Ci0KLXZvaWQgZHJhd0hpZ2hsaWdodEZvckJveChHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UXVhZCYgY29udGVudFF1YWQsIGNvbnN0IEZs
b2F0UXVhZCYgcGFkZGluZ1F1YWQsIGNvbnN0IEZsb2F0UXVhZCYgYm9yZGVyUXVhZCwgY29uc3Qg
RmxvYXRRdWFkJiBtYXJnaW5RdWFkLCBjb25zdCBIaWdobGlnaHRDb25maWcmIGhpZ2hsaWdodENv
bmZpZykKLXsKLSAgICBib29sIGhhc01hcmdpbiA9IGhpZ2hsaWdodENvbmZpZy5tYXJnaW4gIT0g
Q29sb3I6OnRyYW5zcGFyZW50OwotICAgIGJvb2wgaGFzQm9yZGVyID0gaGlnaGxpZ2h0Q29uZmln
LmJvcmRlciAhPSBDb2xvcjo6dHJhbnNwYXJlbnQ7Ci0gICAgYm9vbCBoYXNQYWRkaW5nID0gaGln
aGxpZ2h0Q29uZmlnLnBhZGRpbmcgIT0gQ29sb3I6OnRyYW5zcGFyZW50OwotICAgIGJvb2wgaGFz
Q29udGVudCA9IGhpZ2hsaWdodENvbmZpZy5jb250ZW50ICE9IENvbG9yOjp0cmFuc3BhcmVudCB8
fCBoaWdobGlnaHRDb25maWcuY29udGVudE91dGxpbmUgIT0gQ29sb3I6OnRyYW5zcGFyZW50Owot
Ci0gICAgRmxvYXRRdWFkIGNsaXBRdWFkOwotICAgIENvbG9yIGNsaXBDb2xvcjsKLSAgICBpZiAo
aGFzTWFyZ2luICYmICghaGFzQm9yZGVyIHx8IG1hcmdpblF1YWQgIT0gYm9yZGVyUXVhZCkpIHsK
LSAgICAgICAgZHJhd091dGxpbmVkUXVhZFdpdGhDbGlwKGNvbnRleHQsIG1hcmdpblF1YWQsIGJv
cmRlclF1YWQsIGhpZ2hsaWdodENvbmZpZy5tYXJnaW4pOwotICAgICAgICBjbGlwUXVhZCA9IGJv
cmRlclF1YWQ7Ci0gICAgfQotICAgIGlmIChoYXNCb3JkZXIgJiYgKCFoYXNQYWRkaW5nIHx8IGJv
cmRlclF1YWQgIT0gcGFkZGluZ1F1YWQpKSB7Ci0gICAgICAgIGRyYXdPdXRsaW5lZFF1YWRXaXRo
Q2xpcChjb250ZXh0LCBib3JkZXJRdWFkLCBwYWRkaW5nUXVhZCwgaGlnaGxpZ2h0Q29uZmlnLmJv
cmRlcik7Ci0gICAgICAgIGNsaXBRdWFkID0gcGFkZGluZ1F1YWQ7Ci0gICAgfQotICAgIGlmICho
YXNQYWRkaW5nICYmICghaGFzQ29udGVudCB8fCBwYWRkaW5nUXVhZCAhPSBjb250ZW50UXVhZCkp
IHsKLSAgICAgICAgZHJhd091dGxpbmVkUXVhZFdpdGhDbGlwKGNvbnRleHQsIHBhZGRpbmdRdWFk
LCBjb250ZW50UXVhZCwgaGlnaGxpZ2h0Q29uZmlnLnBhZGRpbmcpOwotICAgICAgICBjbGlwUXVh
ZCA9IGNvbnRlbnRRdWFkOwotICAgIH0KLSAgICBpZiAoaGFzQ29udGVudCkKLSAgICAgICAgZHJh
d091dGxpbmVkUXVhZChjb250ZXh0LCBjb250ZW50UXVhZCwgaGlnaGxpZ2h0Q29uZmlnLmNvbnRl
bnQsIGhpZ2hsaWdodENvbmZpZy5jb250ZW50T3V0bGluZSk7Ci19Ci0KLXZvaWQgZHJhd0hpZ2hs
aWdodEZvclNWR1JlbmRlcmVyKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVmVjdG9y
PEZsb2F0UXVhZD4mIGFic29sdXRlUXVhZHMsIGNvbnN0IEhpZ2hsaWdodENvbmZpZyYgaGlnaGxp
Z2h0Q29uZmlnKQotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYWJzb2x1dGVRdWFkcy5z
aXplKCk7ICsraSkKLSAgICAgICAgZHJhd091dGxpbmVkUXVhZChjb250ZXh0LCBhYnNvbHV0ZVF1
YWRzW2ldLCBoaWdobGlnaHRDb25maWcuY29udGVudCwgQ29sb3I6OnRyYW5zcGFyZW50KTsKLX0K
LQotaW50IGRyYXdTdWJzdHJpbmcoY29uc3QgVGV4dFJ1biYgZ2xvYmFsVGV4dFJ1biwgaW50IG9m
ZnNldCwgaW50IGxlbmd0aCwgY29uc3QgQ29sb3ImIHRleHRDb2xvciwgY29uc3QgRm9udCYgZm9u
dCwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiB0aXRsZVJlY3Qp
Ci17Ci0gICAgY29udGV4dC0+c2V0RmlsbENvbG9yKHRleHRDb2xvciwgQ29sb3JTcGFjZURldmlj
ZVJHQik7Ci0gICAgY29udGV4dC0+ZHJhd1RleHQoZm9udCwgZ2xvYmFsVGV4dFJ1biwgSW50UG9p
bnQodGl0bGVSZWN0LnBpeGVsU25hcHBlZFgoKSArIHJlY3RJbmZsYXRlUHgsIHRpdGxlUmVjdC5w
aXhlbFNuYXBwZWRZKCkgKyBmb250LmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCkpLCBvZmZzZXQsIG9m
ZnNldCArIGxlbmd0aCk7Ci0gICAgcmV0dXJuIG9mZnNldCArIGxlbmd0aDsKLX0KLQotZmxvYXQg
Y2FsY3VsYXRlQXJyb3dUaXBYKGNvbnN0IExheW91dFJlY3QmIGFuY2hvckJveCwgY29uc3QgTGF5
b3V0UmVjdCYgdGl0bGVSZWN0KQotewotICAgIGNvbnN0IHN0YXRpYyBpbnQgYW5jaG9yVGlwT2Zm
c2V0UHggPSAyOwotCi0gICAgaW50IG1pblggPSB0aXRsZVJlY3QueCgpICsgYXJyb3dIYWxmV2lk
dGg7Ci0gICAgaW50IG1heFggPSB0aXRsZVJlY3QubWF4WCgpIC0gYXJyb3dIYWxmV2lkdGg7Ci0g
ICAgaW50IGFuY2hvclggPSBhbmNob3JCb3gueCgpOwotICAgIGludCBhbmNob3JNYXhYID0gYW5j
aG9yQm94Lm1heFgoKTsKLQotICAgIGludCB4ID0gdGl0bGVSZWN0LngoKSArIGFycm93VGlwT2Zm
c2V0OyAvLyBEZWZhdWx0IHRvb2x0aXAgcG9zaXRpb24uCi0gICAgaWYgKHggPCBhbmNob3JYKQot
ICAgICAgICB4ID0gYW5jaG9yWCArIGFuY2hvclRpcE9mZnNldFB4OwotICAgIGVsc2UgaWYgKHgg
PiBhbmNob3JNYXhYKQotICAgICAgICB4ID0gYW5jaG9yTWF4WCAtIGFuY2hvclRpcE9mZnNldFB4
OwotCi0gICAgaWYgKHggPCBtaW5YKQotICAgICAgICB4ID0gbWluWDsKLSAgICBlbHNlIGlmICh4
ID4gbWF4WCkKLSAgICAgICAgeCA9IG1heFg7Ci0KLSAgICByZXR1cm4geDsKLX0KLQotdm9pZCBz
ZXRVcEZvbnREZXNjcmlwdGlvbihGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgV2Vi
Q29yZTo6U2V0dGluZ3MqIHNldHRpbmdzKQotewotI2RlZmluZSBUT09MVElQX0ZPTlRfRkFNSUxJ
RVMoc2l6ZSwgLi4uKSBcCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgdG9vbHRpcEZvbnRGYWNlU2l6
ZSA9IHNpemU7XAotc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyogdG9vbHRpcEZvbnRGYWNlW3Np
emVdID0geyBfX1ZBX0FSR1NfXyB9OwotCi0jaWYgT1MoV0lORE9XUykKLVRPT0xUSVBfRk9OVF9G
QU1JTElFUygyLCBuZXcgQXRvbWljU3RyaW5nKCJDb25zb2xhcyIpLCBuZXcgQXRvbWljU3RyaW5n
KCJMdWNpZGEgQ29uc29sZSIpKQotI2VsaWYgT1MoTUFDX09TX1gpCi1UT09MVElQX0ZPTlRfRkFN
SUxJRVMoMiwgbmV3IEF0b21pY1N0cmluZygiTWVubG8iKSwgbmV3IEF0b21pY1N0cmluZygiTW9u
YWNvIikpCi0jZWxpZiBPUyhVTklYKQotVE9PTFRJUF9GT05UX0ZBTUlMSUVTKDEsIG5ldyBBdG9t
aWNTdHJpbmcoImRlamF2dSBzYW5zIG1vbm8iKSkKLSNlbmRpZgotLy8gSW4gdGhlIGRlZmF1bHQg
Y2FzZSwgd2UgZ2V0IHRoZSBzZXR0aW5ncy1wcm92aWRlZCBtb25vc3BhY2UgZm9udC4KLQotI3Vu
ZGVmIFRPT0xUSVBfRk9OVF9GQU1JTElFUwotCi0gICAgZm9udERlc2NyaXB0aW9uLnNldFJlbmRl
cmluZ01vZGUoc2V0dGluZ3MtPmZvbnRSZW5kZXJpbmdNb2RlKCkpOwotICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRDb21wdXRlZFNpemUoZm9udEhlaWdodFB4KTsKLQotICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgZml4ZWRGb250RmFtaWx5ID0gc2V0dGluZ3MtPmZpeGVkRm9udEZhbWlseSgpOwotICAg
IGlmICghZml4ZWRGb250RmFtaWx5LmlzRW1wdHkoKSkgewotICAgICAgICBmb250RGVzY3JpcHRp
b24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246Ok1vbm9zcGFjZUZhbWlseSk7Ci0g
ICAgICAgIEZvbnRGYW1pbHkqIGN1cnJlbnRGYW1pbHkgPSAwOwotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgdG9vbHRpcEZvbnRGYWNlU2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBp
ZiAoIWN1cnJlbnRGYW1pbHkpIHsKLSAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uZmly
c3RGYW1pbHkoKS5zZXRGYW1pbHkoKnRvb2x0aXBGb250RmFjZVtpXSk7Ci0gICAgICAgICAgICAg
ICAgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkuYXBwZW5kRmFtaWx5KDApOwotICAgICAg
ICAgICAgICAgIGN1cnJlbnRGYW1pbHkgPSAmZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCk7
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFJlZlB0cjxTaGFyZWRGb250
RmFtaWx5PiBuZXdGYW1pbHkgPSBTaGFyZWRGb250RmFtaWx5OjpjcmVhdGUoKTsKLSAgICAgICAg
ICAgICAgICBuZXdGYW1pbHktPnNldEZhbWlseSgqdG9vbHRpcEZvbnRGYWNlW2ldKTsKLSAgICAg
ICAgICAgICAgICBjdXJyZW50RmFtaWx5LT5hcHBlbmRGYW1pbHkobmV3RmFtaWx5KTsKLSAgICAg
ICAgICAgICAgICBjdXJyZW50RmFtaWx5ID0gbmV3RmFtaWx5LmdldCgpOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxTaGFyZWRGb250RmFtaWx5PiBuZXdGYW1pbHkg
PSBTaGFyZWRGb250RmFtaWx5OjpjcmVhdGUoKTsKLSAgICAgICAgbmV3RmFtaWx5LT5zZXRGYW1p
bHkoZml4ZWRGb250RmFtaWx5KTsKLSAgICAgICAgY3VycmVudEZhbWlseS0+YXBwZW5kRmFtaWx5
KG5ld0ZhbWlseSk7Ci0gICAgICAgIGN1cnJlbnRGYW1pbHkgPSBuZXdGYW1pbHkuZ2V0KCk7Ci0g
ICAgfQotfQotCi12b2lkIGRyYXdFbGVtZW50VGl0bGUoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBOb2RlKiBub2RlLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBJbnRSZWN0JiBib3Vu
ZGluZ0JveCwgY29uc3QgSW50UmVjdCYgYW5jaG9yQm94LCBjb25zdCBGbG9hdFJlY3QmIHZpc2li
bGVSZWN0LCBXZWJDb3JlOjpTZXR0aW5ncyogc2V0dGluZ3MpCi17Ci0gICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChDb2xvciwgYmFja2dyb3VuZENvbG9yLCAoMjU1LCAyNTUsIDE5NCkpOwotICAgIERF
RklORV9TVEFUSUNfTE9DQUwoQ29sb3IsIHRhZ0NvbG9yLCAoMTM2LCAxOCwgMTI4KSk7IC8vIFNh
bWUgYXMgLndlYmtpdC1odG1sLXRhZy4KLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKENvbG9yLCBh
dHRyQ29sb3IsICgyNiwgMjYsIDE2NikpOyAvLyBTYW1lIGFzIC53ZWJraXQtaHRtbC1hdHRyaWJ1
dGUtdmFsdWUuCi0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChDb2xvciwgbm9ybWFsQ29sb3IsIChD
b2xvcjo6YmxhY2spKTsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKENvbG9yLCBweEFuZEJvcmRl
ckNvbG9yLCAoMTI4LCAxMjgsIDEyOCkpOwotCi0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJp
bmcsIHB4U3RyaW5nLCAoQVNDSUlMaXRlcmFsKCJweCIpKSk7Ci0gICAgY29uc3Qgc3RhdGljIFVD
aGFyIHRpbWVzVUNoYXJbXSA9IHsgMHgwMDIwLCAweDAwRDcsIDB4MDAyMCwgMCB9OwotICAgIERF
RklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCB0aW1lc1N0cmluZywgKHRpbWVzVUNoYXIpKTsgLy8g
JnRpbWVzOyBzdHJpbmcKLQotICAgIEZvbnRDYWNoZVB1cmdlUHJldmVudGVyIGZvbnRDYWNoZVB1
cmdlUHJldmVudGVyOwotCi0gICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1l
bnQqPihub2RlKTsKLSAgICBib29sIGlzWEhUTUwgPSBlbGVtZW50LT5kb2N1bWVudCgpLT5pc1hI
VE1MRG9jdW1lbnQoKTsKLSAgICBTdHJpbmdCdWlsZGVyIG5vZGVUaXRsZTsKLSAgICBub2RlVGl0
bGUuYXBwZW5kKGlzWEhUTUwgPyBlbGVtZW50LT5ub2RlTmFtZSgpIDogZWxlbWVudC0+bm9kZU5h
bWUoKS5sb3dlcigpKTsKLSAgICB1bnNpZ25lZCB0YWdOYW1lTGVuZ3RoID0gbm9kZVRpdGxlLmxl
bmd0aCgpOwotCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBpZFZhbHVlID0gZWxlbWVudC0+Z2V0
SWRBdHRyaWJ1dGUoKTsKLSAgICB1bnNpZ25lZCBpZFN0cmluZ0xlbmd0aCA9IDA7Ci0gICAgU3Ry
aW5nIGlkU3RyaW5nOwotICAgIGlmICghaWRWYWx1ZS5pc051bGwoKSAmJiAhaWRWYWx1ZS5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgbm9kZVRpdGxlLmFwcGVuZCgiIyIpOwotICAgICAgICBub2RlVGl0
bGUuYXBwZW5kKGlkVmFsdWUpOwotICAgICAgICBpZFN0cmluZ0xlbmd0aCA9IDEgKyBpZFZhbHVl
Lmxlbmd0aCgpOwotICAgIH0KLQotICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiB1c2VkQ2xhc3NO
YW1lczsKLSAgICB1bnNpZ25lZCBjbGFzc2VzU3RyaW5nTGVuZ3RoID0gMDsKLSAgICBpZiAoZWxl
bWVudC0+aGFzQ2xhc3MoKSAmJiBlbGVtZW50LT5pc1N0eWxlZEVsZW1lbnQoKSkgewotICAgICAg
ICBjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBjbGFzc05hbWVzU3RyaW5nID0gc3RhdGljX2Nhc3Q8
U3R5bGVkRWxlbWVudCo+KGVsZW1lbnQpLT5jbGFzc05hbWVzKCk7Ci0gICAgICAgIHNpemVfdCBj
bGFzc05hbWVDb3VudCA9IGNsYXNzTmFtZXNTdHJpbmcuc2l6ZSgpOwotICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGNsYXNzTmFtZUNvdW50OyArK2kpIHsKLSAgICAgICAgICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgY2xhc3NOYW1lID0gY2xhc3NOYW1lc1N0cmluZ1tpXTsKLSAgICAgICAg
ICAgIGlmICh1c2VkQ2xhc3NOYW1lcy5jb250YWlucyhjbGFzc05hbWUpKQotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgdXNlZENsYXNzTmFtZXMuYWRkKGNsYXNzTmFtZSk7
Ci0gICAgICAgICAgICBub2RlVGl0bGUuYXBwZW5kKCIuIik7Ci0gICAgICAgICAgICBub2RlVGl0
bGUuYXBwZW5kKGNsYXNzTmFtZSk7Ci0gICAgICAgICAgICBjbGFzc2VzU3RyaW5nTGVuZ3RoICs9
IDEgKyBjbGFzc05hbWUubGVuZ3RoKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBSZW5kZXJC
b3hNb2RlbE9iamVjdCogbW9kZWxPYmplY3QgPSByZW5kZXJlci0+aXNCb3hNb2RlbE9iamVjdCgp
ID8gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChyZW5kZXJlcikgOiAwOwotCi0gICAgU3RyaW5nIHdp
ZHRoTnVtYmVyUGFydCA9ICIgIiArIFN0cmluZzo6bnVtYmVyKG1vZGVsT2JqZWN0ID8gYWRqdXN0
Rm9yQWJzb2x1dGVab29tKG1vZGVsT2JqZWN0LT5waXhlbFNuYXBwZWRPZmZzZXRXaWR0aCgpLCBt
b2RlbE9iamVjdCkgOiBib3VuZGluZ0JveC53aWR0aCgpKTsKLSAgICBub2RlVGl0bGUuYXBwZW5k
KHdpZHRoTnVtYmVyUGFydCk7Ci0gICAgbm9kZVRpdGxlLmFwcGVuZChweFN0cmluZyk7Ci0gICAg
bm9kZVRpdGxlLmFwcGVuZCh0aW1lc1N0cmluZyk7Ci0gICAgU3RyaW5nIGhlaWdodE51bWJlclBh
cnQgPSBTdHJpbmc6Om51bWJlcihtb2RlbE9iamVjdCA/IGFkanVzdEZvckFic29sdXRlWm9vbSht
b2RlbE9iamVjdC0+cGl4ZWxTbmFwcGVkT2Zmc2V0SGVpZ2h0KCksIG1vZGVsT2JqZWN0KSA6IGJv
dW5kaW5nQm94LmhlaWdodCgpKTsKLSAgICBub2RlVGl0bGUuYXBwZW5kKGhlaWdodE51bWJlclBh
cnQpOwotICAgIG5vZGVUaXRsZS5hcHBlbmQocHhTdHJpbmcpOwotCi0gICAgRm9udERlc2NyaXB0
aW9uIGRlc2M7Ci0gICAgc2V0VXBGb250RGVzY3JpcHRpb24oZGVzYywgc2V0dGluZ3MpOwotICAg
IEZvbnQgZm9udCA9IEZvbnQoZGVzYywgMCwgMCk7Ci0gICAgZm9udC51cGRhdGUoMCk7Ci0KLSAg
ICBUZXh0UnVuIG5vZGVUaXRsZVJ1bihub2RlVGl0bGUudG9TdHJpbmcoKSk7Ci0gICAgSW50UG9p
bnQgdGl0bGVCYXNlUG9pbnQgPSBJbnRQb2ludChhbmNob3JCb3gueCgpLCBhbmNob3JCb3gubWF4
WSgpIC0gMSk7Ci0gICAgdGl0bGVCYXNlUG9pbnQubW92ZShyZWN0SW5mbGF0ZVB4LCByZWN0SW5m
bGF0ZVB4KTsKLSAgICBJbnRSZWN0IHRpdGxlUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoZm9udC5z
ZWxlY3Rpb25SZWN0Rm9yVGV4dChub2RlVGl0bGVSdW4sIHRpdGxlQmFzZVBvaW50LCBmb250SGVp
Z2h0UHgpKTsKLSAgICB0aXRsZVJlY3QuaW5mbGF0ZShyZWN0SW5mbGF0ZVB4KTsKLQotICAgIC8v
IFRoZSBpbml0aWFsIG9mZnNldHMgbmVlZGVkIHRvIGNvbXBlbnNhdGUgZm9yIGEgMXB4LXRoaWNr
IGJvcmRlciBzdHJva2UgKHdoaWNoIGlzIG5vdCBhIHBhcnQgb2YgdGhlIHJlY3RhbmdsZSkuCi0g
ICAgaW50IGR4ID0gLWJvcmRlcldpZHRoUHg7Ci0gICAgaW50IGR5ID0gYm9yZGVyV2lkdGhQeDsK
LQotICAgIC8vIElmIHRoZSB0aXAgc3RpY2tzIGJleW9uZCB0aGUgcmlnaHQgb2YgdmlzaWJsZVJl
Y3QsIHJpZ2h0LWFsaWduIHRoZSB0aXAgd2l0aCB0aGUgc2FpZCBib3VuZGFyeS4KLSAgICBpZiAo
dGl0bGVSZWN0Lm1heFgoKSArIGR4ID4gdmlzaWJsZVJlY3QubWF4WCgpKQotICAgICAgICBkeCA9
IHZpc2libGVSZWN0Lm1heFgoKSAtIHRpdGxlUmVjdC5tYXhYKCk7Ci0KLSAgICAvLyBJZiB0aGUg
dGlwIHN0aWNrcyBiZXlvbmQgdGhlIGxlZnQgb2YgdmlzaWJsZVJlY3QsIGxlZnQtYWxpZ24gdGhl
IHRpcCB3aXRoIHRoZSBzYWlkIGJvdW5kYXJ5LgotICAgIGlmICh0aXRsZVJlY3QueCgpICsgZHgg
PCB2aXNpYmxlUmVjdC54KCkpCi0gICAgICAgIGR4ID0gdmlzaWJsZVJlY3QueCgpIC0gdGl0bGVS
ZWN0LngoKSAtIGJvcmRlcldpZHRoUHg7Ci0KLSAgICAvLyBJZiB0aGUgdGlwIHN0aWNrcyBiZXlv
bmQgdGhlIGJvdHRvbSBvZiB2aXNpYmxlUmVjdCwgc2hvdyB0aGUgdGlwIGF0IHRvcCBvZiBib3Vu
ZGluZyBib3guCi0gICAgaWYgKHRpdGxlUmVjdC5tYXhZKCkgKyBkeSA+IHZpc2libGVSZWN0Lm1h
eFkoKSkgewotICAgICAgICBkeSA9IGFuY2hvckJveC55KCkgLSB0aXRsZVJlY3QubWF4WSgpIC0g
Ym9yZGVyV2lkdGhQeDsKLSAgICAgICAgLy8gSWYgdGhlIHRpcCBzdGlsbCBzdGlja3MgYmV5b25k
IHRoZSBib3R0b20gb2YgdmlzaWJsZVJlY3QsIGJvdHRvbS1hbGlnbiB0aGUgdGlwIHdpdGggdGhl
IHNhaWQgYm91bmRhcnkuCi0gICAgICAgIGlmICh0aXRsZVJlY3QubWF4WSgpICsgZHkgPiB2aXNp
YmxlUmVjdC5tYXhZKCkpCi0gICAgICAgICAgICBkeSA9IHZpc2libGVSZWN0Lm1heFkoKSAtIHRp
dGxlUmVjdC5tYXhZKCk7Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIHRpcCBzdGlja3MgYmV5b25k
IHRoZSB0b3Agb2YgdmlzaWJsZVJlY3QsIHNob3cgdGhlIHRpcCBhdCB0b3Agb2YgdmlzaWJsZVJl
Y3QuCi0gICAgaWYgKHRpdGxlUmVjdC55KCkgKyBkeSA8IHZpc2libGVSZWN0LnkoKSkKLSAgICAg
ICAgZHkgPSB2aXNpYmxlUmVjdC55KCkgLSB0aXRsZVJlY3QueSgpICsgYm9yZGVyV2lkdGhQeDsK
LQotICAgIHRpdGxlUmVjdC5tb3ZlKGR4LCBkeSk7Ci0KLSAgICBib29sIGlzQXJyb3dBdFRvcCA9
IHRpdGxlUmVjdC55KCkgPiBhbmNob3JCb3gueSgpOwotICAgIHRpdGxlUmVjdC5tb3ZlKDAsIHRv
b2x0aXBQYWRkaW5nICogKGlzQXJyb3dBdFRvcCA/IDEgOiAtMSkpOwotCi0gICAgewotICAgICAg
ICBmbG9hdCBhcnJvd1RpcFggPSBjYWxjdWxhdGVBcnJvd1RpcFgoYW5jaG9yQm94LCB0aXRsZVJl
Y3QpOwotICAgICAgICBpbnQgYXJyb3dCYXNlWSA9IGlzQXJyb3dBdFRvcCA/IHRpdGxlUmVjdC55
KCkgOiB0aXRsZVJlY3QubWF4WSgpOwotICAgICAgICBpbnQgYXJyb3dPcHBvc2l0ZVkgPSBpc0Fy
cm93QXRUb3AgPyB0aXRsZVJlY3QubWF4WSgpIDogdGl0bGVSZWN0LnkoKTsKLQotICAgICAgICBG
bG9hdFBvaW50IHBvaW50c1s4XTsKLSAgICAgICAgcG9pbnRzWzBdID0gRmxvYXRQb2ludChhcnJv
d1RpcFggLSBhcnJvd0hhbGZXaWR0aCwgYXJyb3dCYXNlWSk7Ci0gICAgICAgIHBvaW50c1sxXSA9
IEZsb2F0UG9pbnQoYXJyb3dUaXBYLCBhcnJvd0Jhc2VZICsgYXJyb3dIZWlnaHQgKiAoaXNBcnJv
d0F0VG9wID8gLTEgOiAxKSk7Ci0gICAgICAgIHBvaW50c1syXSA9IEZsb2F0UG9pbnQoYXJyb3dU
aXBYICsgYXJyb3dIYWxmV2lkdGgsIGFycm93QmFzZVkpOwotICAgICAgICBwb2ludHNbM10gPSBG
bG9hdFBvaW50KHRpdGxlUmVjdC5tYXhYKCksIGFycm93QmFzZVkpOwotICAgICAgICBwb2ludHNb
NF0gPSBGbG9hdFBvaW50KHRpdGxlUmVjdC5tYXhYKCksIGFycm93T3Bwb3NpdGVZKTsKLSAgICAg
ICAgcG9pbnRzWzVdID0gRmxvYXRQb2ludCh0aXRsZVJlY3QueCgpLCBhcnJvd09wcG9zaXRlWSk7
Ci0gICAgICAgIHBvaW50c1s2XSA9IEZsb2F0UG9pbnQodGl0bGVSZWN0LngoKSwgYXJyb3dCYXNl
WSk7Ci0gICAgICAgIHBvaW50c1s3XSA9IHBvaW50c1swXTsKLQotICAgICAgICBQYXRoIHBhdGg7
Ci0gICAgICAgIHBhdGgubW92ZVRvKHBvaW50c1swXSk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAx
OyBpIDwgODsgKytpKQotICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8ocG9pbnRzW2ldKTsKLQot
ICAgICAgICBjb250ZXh0LT5zYXZlKCk7Ci0gICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgwLjVm
LCAwLjVmKTsKLSAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IocHhBbmRCb3JkZXJDb2xv
ciwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihi
YWNrZ3JvdW5kQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwotICAgICAgICBjb250ZXh0LT5z
ZXRTdHJva2VUaGlja25lc3MoYm9yZGVyV2lkdGhQeCk7Ci0gICAgICAgIGNvbnRleHQtPmZpbGxQ
YXRoKHBhdGgpOwotICAgICAgICBjb250ZXh0LT5zdHJva2VQYXRoKHBhdGgpOwotICAgICAgICBj
b250ZXh0LT5yZXN0b3JlKCk7Ci0gICAgfQotCi0gICAgaW50IGN1cnJlbnRQb3MgPSAwOwotICAg
IGN1cnJlbnRQb3MgPSBkcmF3U3Vic3RyaW5nKG5vZGVUaXRsZVJ1biwgY3VycmVudFBvcywgdGFn
TmFtZUxlbmd0aCwgdGFnQ29sb3IsIGZvbnQsIGNvbnRleHQsIHRpdGxlUmVjdCk7Ci0gICAgaWYg
KGlkU3RyaW5nTGVuZ3RoKQotICAgICAgICBjdXJyZW50UG9zID0gZHJhd1N1YnN0cmluZyhub2Rl
VGl0bGVSdW4sIGN1cnJlbnRQb3MsIGlkU3RyaW5nTGVuZ3RoLCBhdHRyQ29sb3IsIGZvbnQsIGNv
bnRleHQsIHRpdGxlUmVjdCk7Ci0gICAgaWYgKGNsYXNzZXNTdHJpbmdMZW5ndGgpCi0gICAgICAg
IGN1cnJlbnRQb3MgPSBkcmF3U3Vic3RyaW5nKG5vZGVUaXRsZVJ1biwgY3VycmVudFBvcywgY2xh
c3Nlc1N0cmluZ0xlbmd0aCwgYXR0ckNvbG9yLCBmb250LCBjb250ZXh0LCB0aXRsZVJlY3QpOwot
ICAgIGN1cnJlbnRQb3MgPSBkcmF3U3Vic3RyaW5nKG5vZGVUaXRsZVJ1biwgY3VycmVudFBvcywg
d2lkdGhOdW1iZXJQYXJ0Lmxlbmd0aCgpLCBub3JtYWxDb2xvciwgZm9udCwgY29udGV4dCwgdGl0
bGVSZWN0KTsKLSAgICBjdXJyZW50UG9zID0gZHJhd1N1YnN0cmluZyhub2RlVGl0bGVSdW4sIGN1
cnJlbnRQb3MsIHB4U3RyaW5nLmxlbmd0aCgpICsgdGltZXNTdHJpbmcubGVuZ3RoKCksIHB4QW5k
Qm9yZGVyQ29sb3IsIGZvbnQsIGNvbnRleHQsIHRpdGxlUmVjdCk7Ci0gICAgY3VycmVudFBvcyA9
IGRyYXdTdWJzdHJpbmcobm9kZVRpdGxlUnVuLCBjdXJyZW50UG9zLCBoZWlnaHROdW1iZXJQYXJ0
Lmxlbmd0aCgpLCBub3JtYWxDb2xvciwgZm9udCwgY29udGV4dCwgdGl0bGVSZWN0KTsKLSAgICBk
cmF3U3Vic3RyaW5nKG5vZGVUaXRsZVJ1biwgY3VycmVudFBvcywgcHhTdHJpbmcubGVuZ3RoKCks
IHB4QW5kQm9yZGVyQ29sb3IsIGZvbnQsIGNvbnRleHQsIHRpdGxlUmVjdCk7Ci19Ci0KIHN0YXRp
YyB2b2lkIGNvbnRlbnRzUXVhZFRvUGFnZShjb25zdCBGcmFtZVZpZXcqIG1haW5WaWV3LCBjb25z
dCBGcmFtZVZpZXcqIHZpZXcsIEZsb2F0UXVhZCYgcXVhZCkKIHsKICAgICBxdWFkLnNldFAxKHZp
ZXctPmNvbnRlbnRzVG9Sb290Vmlldyhyb3VuZGVkSW50UG9pbnQocXVhZC5wMSgpKSkpOwpAQCAt
MzcwLDcgKzk5LDcgQEAgc3RhdGljIHZvaWQgY29udGVudHNRdWFkVG9QYWdlKGNvbnN0IEZyYW1l
VmlldyogbWFpblZpZXcsIGNvbnN0IEZyYW1lVmlldyogdmlldywKICAgICBxdWFkICs9IG1haW5W
aWV3LT5zY3JvbGxPZmZzZXQoKTsKIH0KIAotc3RhdGljIHZvaWQgZ2V0T3JEcmF3Tm9kZUhpZ2hs
aWdodChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIE5vZGUqIG5vZGUsIGNvbnN0IEhpZ2hsaWdo
dENvbmZpZyYgaGlnaGxpZ2h0Q29uZmlnLCBIaWdobGlnaHQqIGhpZ2hsaWdodCkKK3N0YXRpYyB2
b2lkIGJ1aWxkTm9kZUhpZ2hsaWdodChOb2RlKiBub2RlLCBjb25zdCBIaWdobGlnaHRDb25maWcm
IGhpZ2hsaWdodENvbmZpZywgSGlnaGxpZ2h0KiBoaWdobGlnaHQpCiB7CiAgICAgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CiAgICAgRnJhbWUqIGNvbnRhaW5pbmdG
cmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCk7CkBAIC0zNzgsNiArMTA3LDcgQEAgc3Rh
dGljIHZvaWQgZ2V0T3JEcmF3Tm9kZUhpZ2hsaWdodChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IE5vZGUqIG5vZGUsIGNvbnN0IEgKICAgICBpZiAoIXJlbmRlcmVyIHx8ICFjb250YWluaW5nRnJh
bWUpCiAgICAgICAgIHJldHVybjsKIAorICAgIGhpZ2hsaWdodC0+c2V0Q29sb3JzKGhpZ2hsaWdo
dENvbmZpZyk7CiAgICAgRnJhbWVWaWV3KiBjb250YWluaW5nVmlldyA9IGNvbnRhaW5pbmdGcmFt
ZS0+dmlldygpOwogICAgIEZyYW1lVmlldyogbWFpblZpZXcgPSBjb250YWluaW5nRnJhbWUtPnBh
Z2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKTsKICAgICBJbnRSZWN0IGJvdW5kaW5nQm94ID0gcGl4
ZWxTbmFwcGVkSW50UmVjdChjb250YWluaW5nVmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KHJlbmRl
cmVyLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpKSk7CkBAIC0zODUsOSArMTE1LDYgQEAgc3Rh
dGljIHZvaWQgZ2V0T3JEcmF3Tm9kZUhpZ2hsaWdodChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IE5vZGUqIG5vZGUsIGNvbnN0IEgKICAgICBJbnRSZWN0IHRpdGxlQW5jaG9yQm94ID0gYm91bmRp
bmdCb3g7CiAKICAgICBGbG9hdFJlY3QgdmlzaWJsZVJlY3QgPSBtYWluVmlldy0+dmlzaWJsZUNv
bnRlbnRSZWN0KCk7Ci0gICAgLy8gRG9uJ3QgdHJhbnNsYXRlIHRoZSBjb250ZXh0IGlmIHRoZSBm
cmFtZSBpcyByZW5kZXJlZCBpbiBwYWdlIGNvb3JkaW5hdGVzLgotICAgIGlmIChjb250ZXh0ICYm
ICFtYWluVmlldy0+ZGVsZWdhdGVzU2Nyb2xsaW5nKCkpCi0gICAgICAgIGNvbnRleHQtPnRyYW5z
bGF0ZSgtdmlzaWJsZVJlY3QueCgpLCAtdmlzaWJsZVJlY3QueSgpKTsKIAogICAgIC8vIFJlbmRl
clNWR1Jvb3Qgc2hvdWxkIGJlIGhpZ2hsaWdodGVkIHRocm91Z2ggdGhlIGlzQm94KCkgY29kZSBw
YXRoLCBhbGwgb3RoZXIgU1ZHIGVsZW1lbnRzIHNob3VsZCBqdXN0IGR1bXAgdGhlaXIgYWJzb2x1
dGVRdWFkcygpLgogI2lmIEVOQUJMRShTVkcpCkBAIC00MDEsOSArMTI4LDYgQEAgc3RhdGljIHZv
aWQgZ2V0T3JEcmF3Tm9kZUhpZ2hsaWdodChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIE5vZGUq
IG5vZGUsIGNvbnN0IEgKICAgICAgICAgcmVuZGVyZXItPmFic29sdXRlUXVhZHMoaGlnaGxpZ2h0
LT5xdWFkcyk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaGlnaGxpZ2h0LT5xdWFk
cy5zaXplKCk7ICsraSkKICAgICAgICAgICAgIGNvbnRlbnRzUXVhZFRvUGFnZShtYWluVmlldywg
Y29udGFpbmluZ1ZpZXcsIGhpZ2hsaWdodC0+cXVhZHNbaV0pOwotCi0gICAgICAgIGlmIChjb250
ZXh0KQotICAgICAgICAgICAgZHJhd0hpZ2hsaWdodEZvclNWR1JlbmRlcmVyKGNvbnRleHQsIGhp
Z2hsaWdodC0+cXVhZHMsIGhpZ2hsaWdodENvbmZpZyk7CiAgICAgfSBlbHNlIGlmIChyZW5kZXJl
ci0+aXNCb3goKSB8fCByZW5kZXJlci0+aXNSZW5kZXJJbmxpbmUoKSkgewogICAgICAgICBMYXlv
dXRSZWN0IGNvbnRlbnRCb3g7CiAgICAgICAgIExheW91dFJlY3QgcGFkZGluZ0JveDsKQEAgLTQ1
NSwzOSArMTc5LDE3IEBAIHN0YXRpYyB2b2lkIGdldE9yRHJhd05vZGVIaWdobGlnaHQoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBOb2RlKiBub2RlLCBjb25zdCBICiAgICAgICAgIGhpZ2hsaWdo
dC0+cXVhZHMuYXBwZW5kKGFic0JvcmRlclF1YWQpOwogICAgICAgICBoaWdobGlnaHQtPnF1YWRz
LmFwcGVuZChhYnNQYWRkaW5nUXVhZCk7CiAgICAgICAgIGhpZ2hsaWdodC0+cXVhZHMuYXBwZW5k
KGFic0NvbnRlbnRRdWFkKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgICAgIGRy
YXdIaWdobGlnaHRGb3JCb3goY29udGV4dCwgYWJzQ29udGVudFF1YWQsIGFic1BhZGRpbmdRdWFk
LCBhYnNCb3JkZXJRdWFkLCBhYnNNYXJnaW5RdWFkLCBoaWdobGlnaHRDb25maWcpOwogICAgIH0K
LQotICAgIC8vIERyYXcgbm9kZSB0aXRsZSBpZiBuZWNlc3NhcnkuCi0KLSAgICBpZiAoIW5vZGUt
PmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGNvbnRleHQgJiYg
aGlnaGxpZ2h0Q29uZmlnLnNob3dJbmZvKQotICAgICAgICBkcmF3RWxlbWVudFRpdGxlKGNvbnRl
eHQsIG5vZGUsIHJlbmRlcmVyLCBwaXhlbFNuYXBwZWRJbnRSZWN0KGJvdW5kaW5nQm94KSwgcGl4
ZWxTbmFwcGVkSW50UmVjdCh0aXRsZUFuY2hvckJveCksIHZpc2libGVSZWN0LCBjb250YWluaW5n
RnJhbWUtPnNldHRpbmdzKCkpOwogfQogCi1zdGF0aWMgdm9pZCBnZXRPckRyYXdSZWN0SGlnaGxp
Z2h0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgUGFnZSogcGFnZSwgSW50UmVjdCogcmVjdCwg
Y29uc3QgSGlnaGxpZ2h0Q29uZmlnJiBoaWdobGlnaHRDb25maWcsIEhpZ2hsaWdodCAqaGlnaGxp
Z2h0KQorc3RhdGljIHZvaWQgYnVpbGRSZWN0SGlnaGxpZ2h0KFBhZ2UqIHBhZ2UsIEludFJlY3Qq
IHJlY3QsIGNvbnN0IEhpZ2hsaWdodENvbmZpZyYgaGlnaGxpZ2h0Q29uZmlnLCBIaWdobGlnaHQg
KmhpZ2hsaWdodCkKIHsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsKLQorICAgIGhp
Z2hsaWdodC0+c2V0Q29sb3JzKGhpZ2hsaWdodENvbmZpZyk7CiAgICAgRmxvYXRSZWN0IGhpZ2hs
aWdodFJlY3QoKnJlY3QpOwotCiAgICAgaGlnaGxpZ2h0LT50eXBlID0gSGlnaGxpZ2h0VHlwZVJl
Y3RzOwogICAgIGhpZ2hsaWdodC0+cXVhZHMuYXBwZW5kKGhpZ2hsaWdodFJlY3QpOwotCi0gICAg
aWYgKGNvbnRleHQpIHsKLSAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gcGFnZS0+bWFpbkZyYW1l
KCktPnZpZXcoKTsKLSAgICAgICAgaWYgKCF2aWV3LT5kZWxlZ2F0ZXNTY3JvbGxpbmcoKSkgewot
ICAgICAgICAgICAgRmxvYXRSZWN0IHZpc2libGVSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRS
ZWN0KCk7Ci0gICAgICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUoLXZpc2libGVSZWN0LngoKSwg
LXZpc2libGVSZWN0LnkoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBkcmF3T3V0bGluZWRRdWFk
KGNvbnRleHQsIGhpZ2hsaWdodFJlY3QsIGhpZ2hsaWdodENvbmZpZy5jb250ZW50LCBoaWdobGln
aHRDb25maWcuY29udGVudE91dGxpbmUpOwotICAgIH0KIH0KIAogfSAvLyBhbm9ueW1vdXMgbmFt
ZXNwYWNlCkBAIC01MDQsMTIgKzIwNiwxMyBAQCBJbnNwZWN0b3JPdmVybGF5Ojp+SW5zcGVjdG9y
T3ZlcmxheSgpCiAKIHZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6cGFpbnQoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KQogewotICAgIGRyYXdOb2RlSGlnaGxpZ2h0KCZjb250ZXh0KTsKLSAgICBkcmF3
UmVjdEhpZ2hsaWdodCgmY29udGV4dCk7Ci0KLSAgICBpZiAobV9wYXVzZWRJbkRlYnVnZ2VyTWVz
c2FnZS5pc051bGwoKSkKKyAgICBpZiAobV9wYXVzZWRJbkRlYnVnZ2VyTWVzc2FnZS5pc051bGwo
KSAmJiAhbV9oaWdobGlnaHROb2RlICYmICFtX2hpZ2hsaWdodFJlY3QpCisgICAgICAgIHJldHVy
bjsKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7Cisg
ICAgRnJhbWVWaWV3KiB2aWV3ID0gb3ZlcmxheVBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKTsK
KyAgICBpZiAodmlldy0+bmVlZHNMYXlvdXQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGRyYXdP
dmVybGF5UGFnZSgmY29udGV4dCk7CisgICAgdmlldy0+cGFpbnQoJmNvbnRleHQsIEludFJlY3Qo
MCwgMCwgdmlldy0+d2lkdGgoKSwgdmlldy0+aGVpZ2h0KCkpKTsKIH0KIAogdm9pZCBJbnNwZWN0
b3JPdmVybGF5OjpkcmF3T3V0bGluZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExh
eW91dFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKQEAgLTUyNCwxOSArMjI3LDE1IEBA
IHZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6Z2V0SGlnaGxpZ2h0KEhpZ2hsaWdodCogaGlnaGxpZ2h0
KSBjb25zdAogICAgICAgICByZXR1cm47CiAKICAgICBoaWdobGlnaHQtPnR5cGUgPSBIaWdobGln
aHRUeXBlUmVjdHM7Ci0gICAgaWYgKG1faGlnaGxpZ2h0Tm9kZSkgewotICAgICAgICBoaWdobGln
aHQtPnNldENvbG9ycyhtX25vZGVIaWdobGlnaHRDb25maWcpOwotICAgICAgICBnZXRPckRyYXdO
b2RlSGlnaGxpZ2h0KDAsIG1faGlnaGxpZ2h0Tm9kZS5nZXQoKSwgbV9ub2RlSGlnaGxpZ2h0Q29u
ZmlnLCBoaWdobGlnaHQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGhpZ2hsaWdodC0+c2V0Q29s
b3JzKG1fcmVjdEhpZ2hsaWdodENvbmZpZyk7Ci0gICAgICAgIGdldE9yRHJhd1JlY3RIaWdobGln
aHQoMCwgbV9wYWdlLCBtX2hpZ2hsaWdodFJlY3QuZ2V0KCksIG1fcmVjdEhpZ2hsaWdodENvbmZp
ZywgaGlnaGxpZ2h0KTsKLSAgICB9CisgICAgaWYgKG1faGlnaGxpZ2h0Tm9kZSkKKyAgICAgICAg
YnVpbGROb2RlSGlnaGxpZ2h0KG1faGlnaGxpZ2h0Tm9kZS5nZXQoKSwgbV9ub2RlSGlnaGxpZ2h0
Q29uZmlnLCBoaWdobGlnaHQpOworICAgIGVsc2UKKyAgICAgICAgYnVpbGRSZWN0SGlnaGxpZ2h0
KG1fcGFnZSwgbV9oaWdobGlnaHRSZWN0LmdldCgpLCBtX3JlY3RIaWdobGlnaHRDb25maWcsIGhp
Z2hsaWdodCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6c2V0UGF1c2VkSW5EZWJ1Z2dl
ck1lc3NhZ2UoY29uc3QgU3RyaW5nKiBtZXNzYWdlKQogewogICAgIG1fcGF1c2VkSW5EZWJ1Z2dl
ck1lc3NhZ2UgPSBtZXNzYWdlID8gKm1lc3NhZ2UgOiBTdHJpbmcoKTsKLSAgICBldmFsdWF0ZUlu
T3ZlcmxheSgic2V0UGF1c2VkSW5EZWJ1Z2dlck1lc3NhZ2UiLCBtX3BhdXNlZEluRGVidWdnZXJN
ZXNzYWdlKTsKICAgICB1cGRhdGUoKTsKIH0KIApAQCAtNTc3LDM0ICsyNzYsMTIyIEBAIHZvaWQg
SW5zcGVjdG9yT3ZlcmxheTo6dXBkYXRlKCkKICAgICBGcmFtZVZpZXcqIG92ZXJsYXlWaWV3ID0g
b3ZlcmxheVBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKTsKICAgICBJbnRSZWN0IHZpc2libGVS
ZWN0ID0gZW5jbG9zaW5nSW50UmVjdCh2aWV3LT52aXNpYmxlQ29udGVudFJlY3QoKSk7CiAgICAg
b3ZlcmxheVZpZXctPnJlc2l6ZSh2aXNpYmxlUmVjdC53aWR0aCgpLCB2aXNpYmxlUmVjdC5oZWln
aHQoKSk7CisKKyAgICAvLyBDbGVhciBjYW52YXMgYW5kIHBhaW50IHRoaW5ncy4KKyAgICByZXNl
dCgpOworCisgICAgZHJhd05vZGVIaWdobGlnaHQoKTsKKyAgICBkcmF3UmVjdEhpZ2hsaWdodCgp
OworICAgIGRyYXdQYXVzZWRJbkRlYnVnZ2VyTWVzc2FnZSgpOworCisgICAgLy8gUG9zaXRpb24g
RE9NIGVsZW1lbnRzLgorICAgIG92ZXJsYXlQYWdlKCktPm1haW5GcmFtZSgpLT5kb2N1bWVudCgp
LT5yZWNhbGNTdHlsZShOb2RlOjpGb3JjZSk7CiAgICAgaWYgKG92ZXJsYXlWaWV3LT5uZWVkc0xh
eW91dCgpKQogICAgICAgICBvdmVybGF5Vmlldy0+bGF5b3V0KCk7CisKKyAgICAvLyBLaWNrIHBh
aW50LgogICAgIG1fY2xpZW50LT5oaWdobGlnaHQoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JPdmVy
bGF5OjpkcmF3Tm9kZUhpZ2hsaWdodChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCitzdGF0aWMg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JQb2ludChjb25zdCBGbG9hdFBv
aW50JiBwb2ludCkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3QgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIG9iamVjdC0+c2V0TnVtYmVyKCJ4IiwgcG9pbnQu
eCgpKTsKKyAgICBvYmplY3QtPnNldE51bWJlcigieSIsIHBvaW50LnkoKSk7CisgICAgcmV0dXJu
IG9iamVjdC5yZWxlYXNlKCk7Cit9CisKK3N0YXRpYyBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGJ1
aWxkQXJyYXlGb3JRdWFkKGNvbnN0IEZsb2F0UXVhZCYgcXVhZCkKK3sKKyAgICBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IGFycmF5ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIGFycmF5
LT5wdXNoT2JqZWN0KGJ1aWxkT2JqZWN0Rm9yUG9pbnQocXVhZC5wMSgpKSk7CisgICAgYXJyYXkt
PnB1c2hPYmplY3QoYnVpbGRPYmplY3RGb3JQb2ludChxdWFkLnAyKCkpKTsKKyAgICBhcnJheS0+
cHVzaE9iamVjdChidWlsZE9iamVjdEZvclBvaW50KHF1YWQucDMoKSkpOworICAgIGFycmF5LT5w
dXNoT2JqZWN0KGJ1aWxkT2JqZWN0Rm9yUG9pbnQocXVhZC5wNCgpKSk7CisgICAgcmV0dXJuIGFy
cmF5LnJlbGVhc2UoKTsKK30KKworc3RhdGljIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxk
T2JqZWN0Rm9ySGlnaGxpZ2h0KEZyYW1lVmlldyogbWFpblZpZXcsIGNvbnN0IEhpZ2hsaWdodCYg
aGlnaGxpZ2h0KQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcnJheSA9
IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGhp
Z2hsaWdodC5xdWFkcy5zaXplKCk7ICsraSkKKyAgICAgICAgYXJyYXktPnB1c2hBcnJheShidWls
ZEFycmF5Rm9yUXVhZChoaWdobGlnaHQucXVhZHNbaV0pKTsKKyAgICBvYmplY3QtPnNldEFycmF5
KCJxdWFkcyIsIGFycmF5LnJlbGVhc2UoKSk7CisgICAgb2JqZWN0LT5zZXRTdHJpbmcoImNvbnRl
bnRDb2xvciIsIGhpZ2hsaWdodC5jb250ZW50Q29sb3Iuc2VyaWFsaXplZCgpKTsKKyAgICBvYmpl
Y3QtPnNldFN0cmluZygiY29udGVudE91dGxpbmVDb2xvciIsIGhpZ2hsaWdodC5jb250ZW50T3V0
bGluZUNvbG9yLnNlcmlhbGl6ZWQoKSk7CisgICAgb2JqZWN0LT5zZXRTdHJpbmcoInBhZGRpbmdD
b2xvciIsIGhpZ2hsaWdodC5wYWRkaW5nQ29sb3Iuc2VyaWFsaXplZCgpKTsKKyAgICBvYmplY3Qt
PnNldFN0cmluZygiYm9yZGVyQ29sb3IiLCBoaWdobGlnaHQuYm9yZGVyQ29sb3Iuc2VyaWFsaXpl
ZCgpKTsKKyAgICBvYmplY3QtPnNldFN0cmluZygibWFyZ2luQ29sb3IiLCBoaWdobGlnaHQubWFy
Z2luQ29sb3Iuc2VyaWFsaXplZCgpKTsKKworICAgIEZsb2F0UmVjdCB2aXNpYmxlUmVjdCA9IG1h
aW5WaWV3LT52aXNpYmxlQ29udGVudFJlY3QoKTsKKyAgICBpZiAoIW1haW5WaWV3LT5kZWxlZ2F0
ZXNTY3JvbGxpbmcoKSkgeworICAgICAgICBvYmplY3QtPnNldE51bWJlcigic2Nyb2xsWCIsIHZp
c2libGVSZWN0LngoKSk7CisgICAgICAgIG9iamVjdC0+c2V0TnVtYmVyKCJzY3JvbGxZIiwgdmlz
aWJsZVJlY3QueSgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBvYmplY3QtPnNldE51bWJlcigi
c2Nyb2xsWCIsIDApOworICAgICAgICBvYmplY3QtPnNldE51bWJlcigic2Nyb2xsWSIsIDApOwor
ICAgIH0KKworICAgIHJldHVybiBvYmplY3QucmVsZWFzZSgpOworfQorCit2b2lkIEluc3BlY3Rv
ck92ZXJsYXk6OmRyYXdOb2RlSGlnaGxpZ2h0KCkKIHsKICAgICBpZiAoIW1faGlnaGxpZ2h0Tm9k
ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSGlnaGxpZ2h0IGhpZ2hsaWdodDsKLSAgICBnZXRP
ckRyYXdOb2RlSGlnaGxpZ2h0KGNvbnRleHQsIG1faGlnaGxpZ2h0Tm9kZS5nZXQoKSwgbV9ub2Rl
SGlnaGxpZ2h0Q29uZmlnLCAmaGlnaGxpZ2h0KTsKKyAgICBidWlsZE5vZGVIaWdobGlnaHQobV9o
aWdobGlnaHROb2RlLmdldCgpLCBtX25vZGVIaWdobGlnaHRDb25maWcsICZoaWdobGlnaHQpOwor
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGhpZ2hsaWdodE9iamVjdCA9IGJ1aWxkT2JqZWN0
Rm9ySGlnaGxpZ2h0KG1fcGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKSwgaGlnaGxpZ2h0KTsKKwor
ICAgIE5vZGUqIG5vZGUgPSBtX2hpZ2hsaWdodE5vZGUuZ2V0KCk7CisgICAgaWYgKG5vZGUtPmlz
RWxlbWVudE5vZGUoKSAmJiBtX25vZGVIaWdobGlnaHRDb25maWcuc2hvd0luZm8gJiYgbm9kZS0+
cmVuZGVyZXIoKSAmJiBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpKSB7CisgICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGVsZW1lbnRJbmZvID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKKyAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudChub2RlKTsKKyAgICAgICAg
Ym9vbCBpc1hIVE1MID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+aXNYSFRNTERvY3VtZW50KCk7Cisg
ICAgICAgIGVsZW1lbnRJbmZvLT5zZXRTdHJpbmcoInRhZ05hbWUiLCBpc1hIVE1MID8gZWxlbWVu
dC0+bm9kZU5hbWUoKSA6IGVsZW1lbnQtPm5vZGVOYW1lKCkubG93ZXIoKSk7CisgICAgICAgIGVs
ZW1lbnRJbmZvLT5zZXRTdHJpbmcoImlkVmFsdWUiLCBlbGVtZW50LT5nZXRJZEF0dHJpYnV0ZSgp
KTsKKyAgICAgICAgSGFzaFNldDxBdG9taWNTdHJpbmc+IHVzZWRDbGFzc05hbWVzOworICAgICAg
ICBpZiAoZWxlbWVudC0+aGFzQ2xhc3MoKSAmJiBlbGVtZW50LT5pc1N0eWxlZEVsZW1lbnQoKSkg
eworICAgICAgICAgICAgU3RyaW5nIGNsYXNzTmFtZXM7CisgICAgICAgICAgICBjb25zdCBTcGFj
ZVNwbGl0U3RyaW5nJiBjbGFzc05hbWVzU3RyaW5nID0gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVu
dCo+KGVsZW1lbnQpLT5jbGFzc05hbWVzKCk7CisgICAgICAgICAgICBzaXplX3QgY2xhc3NOYW1l
Q291bnQgPSBjbGFzc05hbWVzU3RyaW5nLnNpemUoKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgY2xhc3NOYW1lQ291bnQ7ICsraSkgeworICAgICAgICAgICAgICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgY2xhc3NOYW1lID0gY2xhc3NOYW1lc1N0cmluZ1tpXTsKKyAgICAgICAg
ICAgICAgICBpZiAodXNlZENsYXNzTmFtZXMuY29udGFpbnMoY2xhc3NOYW1lKSkKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgdXNlZENsYXNzTmFtZXMuYWRk
KGNsYXNzTmFtZSk7CisgICAgICAgICAgICAgICAgY2xhc3NOYW1lcyArPSBtYWtlU3RyaW5nKCIu
IiwgY2xhc3NOYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsZW1lbnRJbmZvLT5z
ZXRTdHJpbmcoImNsYXNzTmFtZSIsIGNsYXNzTmFtZXMpOworICAgICAgICB9CisKKyAgICAgICAg
UmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CisgICAgICAgIEZyYW1l
KiBjb250YWluaW5nRnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpOworICAgICAgICBG
cmFtZVZpZXcqIGNvbnRhaW5pbmdWaWV3ID0gY29udGFpbmluZ0ZyYW1lLT52aWV3KCk7CisgICAg
ICAgIEludFJlY3QgYm91bmRpbmdCb3ggPSBwaXhlbFNuYXBwZWRJbnRSZWN0KGNvbnRhaW5pbmdW
aWV3LT5jb250ZW50c1RvUm9vdFZpZXcocmVuZGVyZXItPmFic29sdXRlQm91bmRpbmdCb3hSZWN0
KCkpKTsKKyAgICAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIG1vZGVsT2JqZWN0ID0gcmVuZGVy
ZXItPmlzQm94TW9kZWxPYmplY3QoKSA/IHRvUmVuZGVyQm94TW9kZWxPYmplY3QocmVuZGVyZXIp
IDogMDsKKyAgICAgICAgZWxlbWVudEluZm8tPnNldFN0cmluZygibm9kZVdpZHRoIiwgU3RyaW5n
OjpudW1iZXIobW9kZWxPYmplY3QgPyBhZGp1c3RGb3JBYnNvbHV0ZVpvb20obW9kZWxPYmplY3Qt
PnBpeGVsU25hcHBlZE9mZnNldFdpZHRoKCksIG1vZGVsT2JqZWN0KSA6IGJvdW5kaW5nQm94Lndp
ZHRoKCkpKTsKKyAgICAgICAgZWxlbWVudEluZm8tPnNldFN0cmluZygibm9kZUhlaWdodCIsIFN0
cmluZzo6bnVtYmVyKG1vZGVsT2JqZWN0ID8gYWRqdXN0Rm9yQWJzb2x1dGVab29tKG1vZGVsT2Jq
ZWN0LT5waXhlbFNuYXBwZWRPZmZzZXRIZWlnaHQoKSwgbW9kZWxPYmplY3QpIDogYm91bmRpbmdC
b3guaGVpZ2h0KCkpKTsKKyAgICAgICAgaGlnaGxpZ2h0T2JqZWN0LT5zZXRPYmplY3QoImVsZW1l
bnRJbmZvIiwgZWxlbWVudEluZm8ucmVsZWFzZSgpKTsKKyAgICB9CisgICAgZXZhbHVhdGVJbk92
ZXJsYXkoImRyYXdOb2RlSGlnaGxpZ2h0IiwgaGlnaGxpZ2h0T2JqZWN0KTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JPdmVybGF5OjpkcmF3UmVjdEhpZ2hsaWdodChHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQpCit2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmRyYXdSZWN0SGlnaGxpZ2h0KCkKIHsKICAgICBp
ZiAoIW1faGlnaGxpZ2h0UmVjdCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSGlnaGxpZ2h0IGhp
Z2hsaWdodDsKLSAgICBnZXRPckRyYXdSZWN0SGlnaGxpZ2h0KGNvbnRleHQsIG1fcGFnZSwgbV9o
aWdobGlnaHRSZWN0LmdldCgpLCBtX3JlY3RIaWdobGlnaHRDb25maWcsICZoaWdobGlnaHQpOwor
ICAgIGJ1aWxkUmVjdEhpZ2hsaWdodChtX3BhZ2UsIG1faGlnaGxpZ2h0UmVjdC5nZXQoKSwgbV9y
ZWN0SGlnaGxpZ2h0Q29uZmlnLCAmaGlnaGxpZ2h0KTsKKyAgICBldmFsdWF0ZUluT3ZlcmxheSgi
aGlnaGxpZ2h0UmVjdCIsIGJ1aWxkT2JqZWN0Rm9ySGlnaGxpZ2h0KG1fcGFnZS0+bWFpbkZyYW1l
KCktPnZpZXcoKSwgaGlnaGxpZ2h0KSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6ZHJh
d092ZXJsYXlQYWdlKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKK3ZvaWQgSW5zcGVjdG9yT3Zl
cmxheTo6ZHJhd1BhdXNlZEluRGVidWdnZXJNZXNzYWdlKCkKIHsKLSAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNvbnRleHQpOwotICAgIEZyYW1lVmlldyogdmlldyA9
IG92ZXJsYXlQYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCk7Ci0gICAgdmlldy0+cGFpbnQoY29u
dGV4dCwgSW50UmVjdCgwLCAwLCB2aWV3LT53aWR0aCgpLCB2aWV3LT5oZWlnaHQoKSkpOworICAg
IGV2YWx1YXRlSW5PdmVybGF5KCJkcmF3UGF1c2VkSW5EZWJ1Z2dlck1lc3NhZ2UiLCBtX3BhdXNl
ZEluRGVidWdnZXJNZXNzYWdlKTsKIH0KIAogUGFnZSogSW5zcGVjdG9yT3ZlcmxheTo6b3Zlcmxh
eVBhZ2UoKQpAQCAtNjM1LDggKzQyMiwxMyBAQCBQYWdlKiBJbnNwZWN0b3JPdmVybGF5OjpvdmVy
bGF5UGFnZSgpCiAgICAgb3ZlcmxheVNldHRpbmdzLT5zZXRQaWN0b2dyYXBoRm9udEZhbWlseShz
ZXR0aW5ncy0+cGljdG9ncmFwaEZvbnRGYW1pbHkoKSk7CiAgICAgb3ZlcmxheVNldHRpbmdzLT5z
ZXRNaW5pbXVtRm9udFNpemUoc2V0dGluZ3MtPm1pbmltdW1Gb250U2l6ZSgpKTsKICAgICBvdmVy
bGF5U2V0dGluZ3MtPnNldE1pbmltdW1Mb2dpY2FsRm9udFNpemUoc2V0dGluZ3MtPm1pbmltdW1M
b2dpY2FsRm9udFNpemUoKSk7Ci0gICAgb3ZlcmxheVNldHRpbmdzLT5zZXREZWZhdWx0Rm9udFNp
emUoc2V0dGluZ3MtPmRlZmF1bHRGb250U2l6ZSgpKTsKLSAgICBvdmVybGF5U2V0dGluZ3MtPnNl
dERlZmF1bHRGaXhlZEZvbnRTaXplKHNldHRpbmdzLT5kZWZhdWx0Rml4ZWRGb250U2l6ZSgpKTsK
KyNpZiBPUyhXSU5ET1dTKQorb3ZlcmxheVNldHRpbmdzLT5zZXREZWZhdWx0Rm9udFNpemUoMTIp
Oworb3ZlcmxheVNldHRpbmdzLT5zZXREZWZhdWx0Rml4ZWRGb250U2l6ZSgxMik7CisjZWxpZiBP
UyhNQUNfT1NfWCkgfHwgT1MoVU5JWCkKK292ZXJsYXlTZXR0aW5ncy0+c2V0RGVmYXVsdEZvbnRT
aXplKDExKTsKK292ZXJsYXlTZXR0aW5ncy0+c2V0RGVmYXVsdEZpeGVkRm9udFNpemUoMTEpOwor
I2VuZGlmCiAgICAgb3ZlcmxheVNldHRpbmdzLT5zZXRNZWRpYUVuYWJsZWQoZmFsc2UpOwogICAg
IG92ZXJsYXlTZXR0aW5ncy0+c2V0U2NyaXB0RW5hYmxlZCh0cnVlKTsKICAgICBvdmVybGF5U2V0
dGluZ3MtPnNldFBsdWdpbnNFbmFibGVkKGZhbHNlKTsKQEAgLTY1Niw2ICs0NDgsMTEgQEAgUGFn
ZSogSW5zcGVjdG9yT3ZlcmxheTo6b3ZlcmxheVBhZ2UoKQogICAgIHJldHVybiBtX292ZXJsYXlQ
YWdlLmdldCgpOwogfQogCit2b2lkIEluc3BlY3Rvck92ZXJsYXk6OnJlc2V0KCkKK3sKKyAgICBl
dmFsdWF0ZUluT3ZlcmxheSgicmVzZXQiLCAiIik7Cit9CisKIHZvaWQgSW5zcGVjdG9yT3Zlcmxh
eTo6ZXZhbHVhdGVJbk92ZXJsYXkoY29uc3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IFN0cmluZyYg
YXJndW1lbnQpCiB7CiAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBjb21tYW5kID0gSW5zcGVj
dG9yQXJyYXk6OmNyZWF0ZSgpOwpAQCAtNjY0LDYgKzQ2MSwxNCBAQCB2b2lkIEluc3BlY3Rvck92
ZXJsYXk6OmV2YWx1YXRlSW5PdmVybGF5KGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBTdHJp
bmcmIGFyZwogICAgIG92ZXJsYXlQYWdlKCktPm1haW5GcmFtZSgpLT5zY3JpcHQoKS0+ZXZhbHVh
dGUoU2NyaXB0U291cmNlQ29kZShtYWtlU3RyaW5nKCJkaXNwYXRjaCgiLCBjb21tYW5kLT50b0pT
T05TdHJpbmcoKSwgIikiKSkpOwogfQogCit2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmV2YWx1YXRl
SW5PdmVybGF5KGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVl
PiBhcmd1bWVudCkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNvbW1hbmQgPSBJbnNw
ZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgY29tbWFuZC0+cHVzaFN0cmluZyhtZXRob2QpOwor
ICAgIGNvbW1hbmQtPnB1c2hWYWx1ZShhcmd1bWVudCk7CisgICAgb3ZlcmxheVBhZ2UoKS0+bWFp
bkZyYW1lKCktPnNjcmlwdCgpLT5ldmFsdWF0ZShTY3JpcHRTb3VyY2VDb2RlKG1ha2VTdHJpbmco
ImRpc3BhdGNoKCIsIGNvbW1hbmQtPnRvSlNPTlN0cmluZygpLCAiKSIpKSk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5oIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuaAppbmRleCBhYmM4YmNlOTdmZjZj
Y2E1M2Q4ZDhjOTJjODFkNmZkMTFiNmIwYmIyLi5kZDQ3MzI4MmE4YmNjMWRmMWU0Mjg0MDFhMjU5
NTI2M2E0MWY1MzIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yT3ZlcmxheS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVy
bGF5LmgKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAi
RmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiAjaW5jbHVkZSAiTGF5
b3V0VHlwZXMuaCIKICNpbmNsdWRlICJOb2RlLmgiCiAKQEAgLTY2LDEyICs2NywxNCBAQCBzdHJ1
Y3QgSGlnaGxpZ2h0IHsKICAgICB2b2lkIHNldENvbG9ycyhjb25zdCBIaWdobGlnaHRDb25maWcm
IGhpZ2hsaWdodENvbmZpZykKICAgICB7CiAgICAgICAgIGNvbnRlbnRDb2xvciA9IGhpZ2hsaWdo
dENvbmZpZy5jb250ZW50OworICAgICAgICBjb250ZW50T3V0bGluZUNvbG9yID0gaGlnaGxpZ2h0
Q29uZmlnLmNvbnRlbnRPdXRsaW5lOwogICAgICAgICBwYWRkaW5nQ29sb3IgPSBoaWdobGlnaHRD
b25maWcucGFkZGluZzsKICAgICAgICAgYm9yZGVyQ29sb3IgPSBoaWdobGlnaHRDb25maWcuYm9y
ZGVyOwogICAgICAgICBtYXJnaW5Db2xvciA9IGhpZ2hsaWdodENvbmZpZy5tYXJnaW47CiAgICAg
fQogCiAgICAgQ29sb3IgY29udGVudENvbG9yOworICAgIENvbG9yIGNvbnRlbnRPdXRsaW5lQ29s
b3I7CiAgICAgQ29sb3IgcGFkZGluZ0NvbG9yOwogICAgIENvbG9yIGJvcmRlckNvbG9yOwogICAg
IENvbG9yIG1hcmdpbkNvbG9yOwpAQCAtOTAsNiArOTMsNyBAQCBwdWJsaWM6CiAgICAgfQogICAg
IH5JbnNwZWN0b3JPdmVybGF5KCk7CiAKKyAgICB2b2lkIHVwZGF0ZSgpOwogICAgIHZvaWQgcGFp
bnQoR3JhcGhpY3NDb250ZXh0Jik7CiAgICAgdm9pZCBkcmF3T3V0bGluZShHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBMYXlvdXRSZWN0JiwgY29uc3QgQ29sb3ImKTsKICAgICB2b2lkIGdldEhpZ2hs
aWdodChIaWdobGlnaHQqKSBjb25zdDsKQEAgLTEwNSwxMiArMTA5LDEzIEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgSW5zcGVjdG9yT3ZlcmxheShQYWdlKiwgSW5zcGVjdG9yQ2xpZW50Kik7CiAK
LSAgICB2b2lkIHVwZGF0ZSgpOwotICAgIHZvaWQgZHJhd05vZGVIaWdobGlnaHQoR3JhcGhpY3ND
b250ZXh0Kik7Ci0gICAgdm9pZCBkcmF3UmVjdEhpZ2hsaWdodChHcmFwaGljc0NvbnRleHQqKTsK
LSAgICB2b2lkIGRyYXdPdmVybGF5UGFnZShHcmFwaGljc0NvbnRleHQqKTsKKyAgICB2b2lkIGRy
YXdOb2RlSGlnaGxpZ2h0KCk7CisgICAgdm9pZCBkcmF3UmVjdEhpZ2hsaWdodCgpOworICAgIHZv
aWQgZHJhd1BhdXNlZEluRGVidWdnZXJNZXNzYWdlKCk7CiAgICAgUGFnZSogb3ZlcmxheVBhZ2Uo
KTsKKyAgICB2b2lkIHJlc2V0KCk7CiAgICAgdm9pZCBldmFsdWF0ZUluT3ZlcmxheShjb25zdCBT
dHJpbmcmIG1ldGhvZCwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCk7CisgICAgdm9pZCBldmFsdWF0
ZUluT3ZlcmxheShjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4gYXJndW1lbnQpOwogCiAgICAgUGFnZSogbV9wYWdlOwogICAgIEluc3BlY3RvckNsaWVudCog
bV9jbGllbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
T3ZlcmxheVBhZ2UuaHRtbCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVy
bGF5UGFnZS5odG1sCmluZGV4IGZhNjgyYzMyMDQ4YzVjNzE5MGMyNWYzN2IzZjc0NWJiMzRiYzk5
MWYuLjBmYTk0Y2YyMTY5ZmQ5MDQxOGI1NjkyZDNkMTY2ODE5MmQ0ODU1YWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5UGFnZS5odG1sCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5UGFnZS5odG1sCkBAIC0z
Miw2ICszMiw3IEBACiBib2R5IHsKICAgICBtYXJnaW46IDA7CiAgICAgcGFkZGluZzogMDsKKyAg
ICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogfQogCiAuZmlsbCB7CkBAIC00NywzMSArNDgsMzUx
IEBAIGJvZHkgewogfQogCiAubWVzc2FnZS1saW5lIHsKKyAgICBtYXJnaW46IDEwcHggMDsKICAg
ICB0ZXh0LWFsaWduOiBjZW50ZXI7CiB9CiAKIC5tZXNzYWdlLWJveCB7Ci0gICAgZm9udC1mYW1p
bHk6IG1vbm9zcGFjZTsKICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjU1LCAyNTUsIDE5NCk7
CiAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiKDEyOCwgMTI4LCAxMjgpOwogICAgIGRpc3BsYXk6
IGlubGluZS1ibG9jazsKLSAgICBtYXJnaW46IDEwcHggMDsKICAgICBwYWRkaW5nOiAycHggNHB4
OwogfQogCisucHggeworICAgIGNvbG9yOiByZ2IoMTI4LCAxMjgsIDEyOCk7Cit9CisKKyNlbGVt
ZW50LXRpdGxlIHsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgei1pbmRleDogMTA7Cit9
CisKKyN0YWctbmFtZSB7CisgICAgY29sb3I6IHJnYigxMzYsIDE4LCAxMjgpOworfQorCisjbm9k
ZS1pZCB7CisgICAgY29sb3I6IHJnYigyNiwgMjYsIDE2Nik7Cit9CiA8L3N0eWxlPgogPHNjcmlw
dD4KLWZ1bmN0aW9uIHNldFBhdXNlZEluRGVidWdnZXJNZXNzYWdlKG1lc3NhZ2UpCitjb25zdCBs
aWdodEdyaWRDb2xvciA9ICJyZ2JhKDAsMCwwLDAuMikiOworY29uc3QgZGFya0dyaWRDb2xvciA9
ICJyZ2JhKDAsMCwwLDAuNSkiOworY29uc3QgdHJhbnNwYXJlbnRDb2xvciA9ICJyZ2JhKDAsIDAs
IDAsIDApIjsKKworZnVuY3Rpb24gdGFrZUxhc3QoYXJyYXkpCit7CisgICAgaWYgKCFhcnJheS5s
ZW5ndGgpCisgICAgICAgIHJldHVybiBudWxsOworICAgIHZhciByZXN1bHQgPSBhcnJheS5zcGxp
Y2UoYXJyYXkubGVuZ3RoIC0gMSwgMSk7CisgICAgcmV0dXJuIHJlc3VsdFswXTsKK30KKworZnVu
Y3Rpb24gZHJhd1BhdXNlZEluRGVidWdnZXJNZXNzYWdlKG1lc3NhZ2UpCiB7CisgICAgaWYgKCFt
ZXNzYWdlKQorICAgICAgcmV0dXJuOwogICAgIHZhciBwYXVzZWRJbkRlYnVnZ2VyID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoInBhdXNlZC1pbi1kZWJ1Z2dlciIpOwotICAgIGlmIChtZXNzYWdl
KSB7Ci0gICAgICAgIHBhdXNlZEluRGVidWdnZXIudGV4dENvbnRlbnQgPSBtZXNzYWdlOwotICAg
ICAgICBwYXVzZWRJbkRlYnVnZ2VyLnN0eWxlLnZpc2liaWxpdHkgPSAidmlzaWJsZSI7Ci0gICAg
ICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgiZGltbWVkIik7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgcGF1c2VkSW5EZWJ1Z2dlci5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7Ci0g
ICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgiZGltbWVkIik7CisgICAgcGF1
c2VkSW5EZWJ1Z2dlci50ZXh0Q29udGVudCA9IG1lc3NhZ2U7CisgICAgcGF1c2VkSW5EZWJ1Z2dl
ci5zdHlsZS52aXNpYmlsaXR5ID0gInZpc2libGUiOworICAgIGRvY3VtZW50LmJvZHkuY2xhc3NM
aXN0LmFkZCgiZGltbWVkIik7Cit9CisKK2Z1bmN0aW9uIF9kcmF3R3JpZChoaWdobGlnaHQpCit7
CisgICAgY29udGV4dC5zYXZlKCk7CisKKyAgICB2YXIgd2lkdGggPSBjYW52YXMud2lkdGg7Cisg
ICAgdmFyIGhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7CisKKyAgICBjb250ZXh0LmZpbGxTdHlsZSA9
ICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNikiOworICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwg
Y2FudmFzLndpZHRoLCAxNSk7CisgICAgY29udGV4dC5maWxsUmVjdCgwLCAxNSwgMTUsIGNhbnZh
cy5oZWlnaHQpOworICAgIAorICAgIGNvbnRleHQudHJhbnNsYXRlKC1oaWdobGlnaHQuc2Nyb2xs
WCwgMC41IC0gaGlnaGxpZ2h0LnNjcm9sbFkpOworICAgIGNvbnRleHQubGluZVdpZHRoID0gMTsK
KworICAgIGNvbnN0IGdyaWRTdWJTdGVwID0gNTsKKyAgICBjb25zdCBncmlkU3RlcCA9IDUwOwor
CisgICAgY29udGV4dC5zdHJva2VTdHlsZSA9IGxpZ2h0R3JpZENvbG9yOworCisgICAgZm9yICh2
YXIgeSA9IGdyaWRTdWJTdGVwOyB5IDwgaGlnaGxpZ2h0LnNjcm9sbFkgKyBoZWlnaHQ7IHkgKz0g
Z3JpZFN1YlN0ZXApIHsKKyAgICAgICAgaWYgKCEoeSAlIGdyaWRTdGVwKSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpOworICAgICAgICBjb250ZXh0
Lm1vdmVUbyhoaWdobGlnaHQuc2Nyb2xsWCwgeSk7CisgICAgICAgIGNvbnRleHQubGluZVRvKGhp
Z2hsaWdodC5zY3JvbGxYICsgZ3JpZFN1YlN0ZXAsIHkpOworICAgICAgICBjb250ZXh0LnN0cm9r
ZSgpOwogICAgIH0KKworICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSBkYXJrR3JpZENvbG9yOwor
ICAgIGNvbnRleHQuZmlsbFN0eWxlID0gZGFya0dyaWRDb2xvcjsKKyAgICBmb3IgKHZhciB5ID0g
Z3JpZFN0ZXA7IHkgPCBoZWlnaHQgKyBoaWdobGlnaHQuc2Nyb2xsWTsgeSArPSBncmlkU3RlcCkg
eworICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpOworICAgICAgICBjb250ZXh0Lm1vdmVUbyho
aWdobGlnaHQuc2Nyb2xsWCwgeSk7CisgICAgICAgIHZhciBtYXJrTGVuZ3RoID0gKHkgJSAoZ3Jp
ZFN0ZXAgKiAyKSkgPyA1IDogODsKKyAgICAgICAgY29udGV4dC5saW5lVG8oaGlnaGxpZ2h0LnNj
cm9sbFggKyBtYXJrTGVuZ3RoLCB5KTsKKyAgICAgICAgY29udGV4dC5zdHJva2UoKTsKKyAgICAg
ICAgaWYgKCEoeSAlIChncmlkU3RlcCAqIDIpKSkgeworICAgICAgICAgICAgY29udGV4dC5zYXZl
KCk7CisgICAgICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZShoaWdobGlnaHQuc2Nyb2xsWCwgeSk7
CisgICAgICAgICAgICBjb250ZXh0LnJvdGF0ZSgtTWF0aC5QSSAvIDIpOworICAgICAgICAgICAg
Y29udGV4dC5maWxsVGV4dCh5LCAyLCAxMyk7CisgICAgICAgICAgICBjb250ZXh0LnJlc3RvcmUo
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbnRleHQudHJhbnNsYXRlKDAuNSwgLTAuNSk7
CisKKyAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gbGlnaHRHcmlkQ29sb3I7CisgICAgZm9yICh2
YXIgeCA9IGdyaWRTdWJTdGVwOyB4IDwgaGlnaGxpZ2h0LnNjcm9sbFggKyB3aWR0aDsgeCArPSBn
cmlkU3ViU3RlcCkgeworICAgICAgICBpZiAoISh4ICUgZ3JpZFN0ZXApKQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7CisgICAgICAgIGNvbnRleHQu
bW92ZVRvKHgsIGhpZ2hsaWdodC5zY3JvbGxZKTsKKyAgICAgICAgY29udGV4dC5saW5lVG8oeCwg
aGlnaGxpZ2h0LnNjcm9sbFkgKyBncmlkU3ViU3RlcCk7CisgICAgICAgIGNvbnRleHQuc3Ryb2tl
KCk7CisgICAgfQorCisgICAgY29udGV4dC5zdHJva2VTdHlsZSA9IGRhcmtHcmlkQ29sb3I7Cisg
ICAgY29udGV4dC5maWxsU3R5bGUgPSBkYXJrR3JpZENvbG9yOworICAgIGZvciAodmFyIHggPSBn
cmlkU3RlcDsgeCA8IHdpZHRoICsgaGlnaGxpZ2h0LnNjcm9sbFg7IHggKz0gZ3JpZFN0ZXApIHsK
KyAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTsKKyAgICAgICAgY29udGV4dC5tb3ZlVG8oeCwg
aGlnaGxpZ2h0LnNjcm9sbFkpOworICAgICAgICB2YXIgbWFya0xlbmd0aCA9ICh4ICUgKGdyaWRT
dGVwICogMikpID8gNSA6IDg7CisgICAgICAgIGNvbnRleHQubGluZVRvKHgsIGhpZ2hsaWdodC5z
Y3JvbGxZICsgbWFya0xlbmd0aCk7CisgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7CisgICAgICAg
IGlmICghKHggJSAoZ3JpZFN0ZXAgKiAyKSkpCisgICAgICAgICAgICBjb250ZXh0LmZpbGxUZXh0
KHgsIHggKyAyLCBoaWdobGlnaHQuc2Nyb2xsWSArIDEzKTsKKyAgICB9CisgICAgY29udGV4dC5y
ZXN0b3JlKCk7Cit9CisKK2Z1bmN0aW9uIHF1YWRUb1BhdGgocXVhZCkKK3sKKyAgICBjb250ZXh0
LmJlZ2luUGF0aCgpOworICAgIGNvbnRleHQubW92ZVRvKHF1YWRbMF0ueCwgcXVhZFswXS55KTsK
KyAgICBjb250ZXh0LmxpbmVUbyhxdWFkWzFdLngsIHF1YWRbMV0ueSk7CisgICAgY29udGV4dC5s
aW5lVG8ocXVhZFsyXS54LCBxdWFkWzJdLnkpOworICAgIGNvbnRleHQubGluZVRvKHF1YWRbM10u
eCwgcXVhZFszXS55KTsKKyAgICBjb250ZXh0LmNsb3NlUGF0aCgpOworICAgIHJldHVybiBjb250
ZXh0OworfQorCitmdW5jdGlvbiBkcmF3T3V0bGluZWRRdWFkKHF1YWQsIGZpbGxDb2xvciwgb3V0
bGluZUNvbG9yKQoreworICAgIGNvbnRleHQuc2F2ZSgpOworICAgIGNvbnRleHQubGluZVdpZHRo
ID0gMjsKKyAgICBxdWFkVG9QYXRoKHF1YWQpLmNsaXAoKTsKKyAgICBjb250ZXh0LmZpbGxTdHls
ZSA9IGZpbGxDb2xvcjsKKyAgICBjb250ZXh0LmZpbGwoKTsKKyAgICBpZiAob3V0bGluZUNvbG9y
KSB7CisgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSBvdXRsaW5lQ29sb3I7CisgICAgICAg
IGNvbnRleHQuc3Ryb2tlKCk7CisgICAgfQorICAgIGNvbnRleHQucmVzdG9yZSgpOworfQorCitm
dW5jdGlvbiBkcmF3T3V0bGluZWRRdWFkV2l0aENsaXAocXVhZCwgY2xpcFF1YWQsIGZpbGxDb2xv
cikKK3sKKyAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIp
OworICAgIGNvbnRleHQuZmlsbFN0eWxlID0gZmlsbENvbG9yOworICAgIGNvbnRleHQuc2F2ZSgp
OworICAgIGNvbnRleHQubGluZVdpZHRoID0gMDsKKyAgICBxdWFkVG9QYXRoKHF1YWQpLmZpbGwo
KTsKKyAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICJkZXN0aW5hdGlvbi1v
dXQiOworICAgIGNvbnRleHQuZmlsbFN0eWxlID0gInJlZCI7CisgICAgcXVhZFRvUGF0aChjbGlw
UXVhZCkuZmlsbCgpOworICAgIGNvbnRleHQucmVzdG9yZSgpOworfQorCitmdW5jdGlvbiBxdWFk
RXF1YWxzKHF1YWQxLCBxdWFkMikKK3sKKyAgICByZXR1cm4gcXVhZDFbMF0ueCA9PT0gcXVhZDJb
MF0ueCAmJiBxdWFkMVswXS55ID09PSBxdWFkMlswXS55ICYmCisgICAgICAgIHF1YWQxWzFdLngg
PT09IHF1YWQyWzFdLnggJiYgcXVhZDFbMV0ueSA9PT0gcXVhZDJbMV0ueSAmJgorICAgICAgICBx
dWFkMVsyXS54ID09PSBxdWFkMlsyXS54ICYmIHF1YWQxWzJdLnkgPT09IHF1YWQyWzJdLnkgJiYK
KyAgICAgICAgcXVhZDFbM10ueCA9PT0gcXVhZDJbM10ueCAmJiBxdWFkMVszXS55ID09PSBxdWFk
MlszXS55OworfQorCitmdW5jdGlvbiByZXNldCgpCit7CisgICAgd2luZG93LmNhbnZhcyA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKyAgICB3aW5kb3cuY29udGV4dCA9IGNh
bnZhcy5nZXRDb250ZXh0KCIyZCIpOworICAgIGNhbnZhcy53aWR0aCA9IGRvY3VtZW50LmJvZHku
b2Zmc2V0V2lkdGg7CisgICAgY2FudmFzLmhlaWdodCA9IGRvY3VtZW50LmJvZHkub2Zmc2V0SGVp
Z2h0OworCisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhdXNlZC1pbi1kZWJ1Z2dlciIp
LnN0eWxlLnZpc2liaWxpdHkgPSAiaGlkZGVuIjsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgiZWxlbWVudC10aXRsZSIpLnN0eWxlLnZpc2liaWxpdHkgPSAiaGlkZGVuIjsKKyAgICBkb2N1
bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoImRpbW1lZCIpOworfQorCitmdW5jdGlvbiBfZHJh
d0VsZW1lbnRUaXRsZShoaWdobGlnaHQpCit7CisgICAgdmFyIGVsZW1lbnRJbmZvID0gaGlnaGxp
Z2h0LmVsZW1lbnRJbmZvOworICAgIGlmICghaGlnaGxpZ2h0LmVsZW1lbnRJbmZvKQorICAgICAg
ICByZXR1cm47CisKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGFnLW5hbWUiKS50ZXh0
Q29udGVudCA9IGVsZW1lbnRJbmZvLnRhZ05hbWU7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoIm5vZGUtaWQiKS50ZXh0Q29udGVudCA9IGVsZW1lbnRJbmZvLm5vZGVJZCA/ICIjIiArIGVs
ZW1lbnRJbmZvLm5vZGVJZCA6ICIiOworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjbGFz
cy1uYW1lIikudGV4dENvbnRlbnQgPSBlbGVtZW50SW5mby5jbGFzc05hbWUgfHwgIiI7CisgICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm5vZGUtd2lkdGgiKS50ZXh0Q29udGVudCA9IGVsZW1l
bnRJbmZvLm5vZGVXaWR0aDsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibm9kZS1oZWln
aHQiKS50ZXh0Q29udGVudCA9IGVsZW1lbnRJbmZvLm5vZGVIZWlnaHQ7CisgICAgdmFyIGVsZW1l
bnRUaXRsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJlbGVtZW50LXRpdGxlIik7CisKKyAg
ICB2YXIgbWFyZ2luUXVhZCA9IGhpZ2hsaWdodC5xdWFkc1swXTsKKworICAgIHZhciB0aXRsZVdp
ZHRoID0gZWxlbWVudFRpdGxlLm9mZnNldFdpZHRoICsgNjsKKyAgICB2YXIgdGl0bGVIZWlnaHQg
PSBlbGVtZW50VGl0bGUub2Zmc2V0SGVpZ2h0ICsgNDsKKworICAgIHZhciBhbmNob3JUb3AgPSBt
YXJnaW5RdWFkWzBdLnk7CisgICAgdmFyIGFuY2hvckJvdHRvbSA9IG1hcmdpblF1YWRbM10ueQor
CisgICAgY29uc3QgYXJyb3dIZWlnaHQgPSA3OworICAgIHZhciByZW5kZXJBcnJvd1VwID0gZmFs
c2U7CisgICAgdmFyIHJlbmRlckFycm93RG93biA9IGZhbHNlOworCisgICAgdmFyIGJveFggPSBN
YXRoLm1heCgyLCBtYXJnaW5RdWFkWzBdLngpOworICAgIGlmIChib3hYICsgdGl0bGVXaWR0aCA+
IGNhbnZhcy53aWR0aCkKKyAgICAgICAgYm94WCA9IGNhbnZhcy53aWR0aCAtIHRpdGxlV2lkdGgg
LSAyOworCisgICAgdmFyIGJveFk7CisgICAgaWYgKGFuY2hvclRvcCA+IGNhbnZhcy5oZWlnaHQp
IHsKKyAgICAgICAgYm94WSA9IGNhbnZhcy5oZWlnaHQgLSB0aXRsZUhlaWdodCAtIGFycm93SGVp
Z2h0OworICAgICAgICByZW5kZXJBcnJvd0Rvd24gPSB0cnVlOworICAgIH0gZWxzZSBpZiAoYW5j
aG9yQm90dG9tIDwgMCkgeworICAgICAgICBib3hZID0gYXJyb3dIZWlnaHQ7CisgICAgICAgIHJl
bmRlckFycm93VXAgPSB0cnVlOworICAgIH0gZWxzZSBpZiAoYW5jaG9yQm90dG9tICsgdGl0bGVI
ZWlnaHQgKyBhcnJvd0hlaWdodCA8IGNhbnZhcy5oZWlnaHQpIHsKKyAgICAgICAgYm94WSA9IGFu
Y2hvckJvdHRvbSArIGFycm93SGVpZ2h0IC0gNDsKKyAgICAgICAgcmVuZGVyQXJyb3dVcCA9IHRy
dWU7CisgICAgfSBlbHNlIGlmIChhbmNob3JUb3AgLSB0aXRsZUhlaWdodCAtIGFycm93SGVpZ2h0
ID4gMCkgeworICAgICAgICBib3hZID0gYW5jaG9yVG9wIC0gdGl0bGVIZWlnaHQgLSBhcnJvd0hl
aWdodCArIDM7CisgICAgICAgIHJlbmRlckFycm93RG93biA9IHRydWU7CisgICAgfSBlbHNlCisg
ICAgICAgIGJveFkgPSBhcnJvd0hlaWdodDsKKworICAgIGNvbnRleHQuc2F2ZSgpOworICAgIGNv
bnRleHQudHJhbnNsYXRlKDAuNSwgMC41KTsKKyAgICBjb250ZXh0LmJlZ2luUGF0aCgpOworICAg
IGNvbnRleHQubW92ZVRvKGJveFgsIGJveFkpOworICAgIGlmIChyZW5kZXJBcnJvd1VwKSB7Cisg
ICAgICAgIGNvbnRleHQubGluZVRvKGJveFggKyAyICogYXJyb3dIZWlnaHQsIGJveFkpOworICAg
ICAgICBjb250ZXh0LmxpbmVUbyhib3hYICsgMyAqIGFycm93SGVpZ2h0LCBib3hZIC0gYXJyb3dI
ZWlnaHQpOworICAgICAgICBjb250ZXh0LmxpbmVUbyhib3hYICsgNCAqIGFycm93SGVpZ2h0LCBi
b3hZKTsKKyAgICB9CisgICAgY29udGV4dC5saW5lVG8oYm94WCArIHRpdGxlV2lkdGgsIGJveFkp
OworICAgIGNvbnRleHQubGluZVRvKGJveFggKyB0aXRsZVdpZHRoLCBib3hZICsgdGl0bGVIZWln
aHQpOworICAgIGlmIChyZW5kZXJBcnJvd0Rvd24pIHsKKyAgICAgICAgY29udGV4dC5saW5lVG8o
Ym94WCArIDQgKiBhcnJvd0hlaWdodCwgYm94WSArIHRpdGxlSGVpZ2h0KTsKKyAgICAgICAgY29u
dGV4dC5saW5lVG8oYm94WCArIDMgKiBhcnJvd0hlaWdodCwgYm94WSArIHRpdGxlSGVpZ2h0ICsg
YXJyb3dIZWlnaHQpOworICAgICAgICBjb250ZXh0LmxpbmVUbyhib3hYICsgMiAqIGFycm93SGVp
Z2h0LCBib3hZICsgdGl0bGVIZWlnaHQpOworICAgIH0KKyAgICBjb250ZXh0LmxpbmVUbyhib3hY
LCBib3hZICsgdGl0bGVIZWlnaHQpOworICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7CisgICAgY29u
dGV4dC5maWxsU3R5bGUgPSAicmdiKDI1NSwgMjU1LCAxOTQpIjsKKyAgICBjb250ZXh0LmZpbGwo
KTsKKyAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gInJnYigxMjgsIDEyOCwgMTI4KSI7CisgICAg
Y29udGV4dC5zdHJva2UoKTsKKworICAgIGNvbnRleHQucmVzdG9yZSgpOworCisgICAgZWxlbWVu
dFRpdGxlLnN0eWxlLnZpc2liaWxpdHkgPSAidmlzaWJsZSI7CisgICAgZWxlbWVudFRpdGxlLnN0
eWxlLnRvcCA9IChib3hZICsgMykgKyAicHgiOworICAgIGVsZW1lbnRUaXRsZS5zdHlsZS5sZWZ0
ID0gKGJveFggKyAzKSArICJweCI7Cit9CisKK2Z1bmN0aW9uIF9kcmF3UnVsZXJzKGhpZ2hsaWdo
dCkKK3sKKyAgICBjb250ZXh0LnNhdmUoKTsKKyAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gInJn
YmEoMTI4LCAxMjgsIDEyOCwgMC4zKSI7CisgICAgY29udGV4dC5saW5lV2lkdGggPSAxOworICAg
IGNvbnRleHQudHJhbnNsYXRlKDAuNSwgMC41KTsKKyAgICB2YXIgbGVmdG1vc3RYRm9yWSA9IHt9
OworICAgIHZhciB0b3Btb3N0WUZvclggPSB7fTsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
aGlnaGxpZ2h0LnF1YWRzLmxlbmd0aDsgKytpKSB7CisgICAgICAgIHZhciBxdWFkID0gaGlnaGxp
Z2h0LnF1YWRzW2ldOworICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHF1YWQubGVuZ3RoOyAr
K2opIHsKKyAgICAgICAgICAgIHZhciB4ID0gcXVhZFtqXS54OworICAgICAgICAgICAgdmFyIHkg
PSBxdWFkW2pdLnk7CisgICAgICAgICAgICB0b3Btb3N0WUZvclhbTWF0aC5yb3VuZCh4KV0gPSBN
YXRoLm1pbih0b3Btb3N0WUZvclhbeF0gfHwgTnVtYmVyLk1BWF9WQUxVRSwgTWF0aC5yb3VuZChx
dWFkW2pdLnkpKTsKKyAgICAgICAgICAgIGxlZnRtb3N0WEZvcllbTWF0aC5yb3VuZCh5KV0gPSBN
YXRoLm1pbihsZWZ0bW9zdFhGb3JZW3ldIHx8IE51bWJlci5NQVhfVkFMVUUsIE1hdGgucm91bmQo
cXVhZFtqXS54KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHZhciB5IGluIGxlZnRt
b3N0WEZvclkpIHsKKyAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTsKKyAgICAgICAgY29udGV4
dC5tb3ZlVG8oMCwgeSk7CisgICAgICAgIGNvbnRleHQubGluZVRvKGxlZnRtb3N0WEZvcllbeV0s
IHkpOworICAgICAgICBjb250ZXh0LnN0cm9rZSgpOworICAgIH0KKworICAgIGZvciAodmFyIHgg
aW4gdG9wbW9zdFlGb3JYKSB7CisgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7CisgICAgICAg
IGNvbnRleHQubW92ZVRvKHgsIDApOworICAgICAgICBjb250ZXh0LmxpbmVUbyh4LCB0b3Btb3N0
WUZvclhbeF0pOworICAgICAgICBjb250ZXh0LnN0cm9rZSgpOworICB9CisKKyAgICBjb250ZXh0
LnJlc3RvcmUoKTsKK30KKworZnVuY3Rpb24gZHJhd05vZGVIaWdobGlnaHQoaGlnaGxpZ2h0KQor
eworICAgIF9kcmF3R3JpZChoaWdobGlnaHQpOworCisgICAgaWYgKCFoaWdobGlnaHQucXVhZHMu
bGVuZ3RoKQorICAgICAgICByZXR1cm47CisKKyAgICBjb250ZXh0LnNhdmUoKTsKKworICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgaGlnaGxpZ2h0LnF1YWRzLmxlbmd0aDsgKytpKSB7CisgICAgICAg
IHZhciBxdWFkID0gaGlnaGxpZ2h0LnF1YWRzW2ldOworICAgICAgICBmb3IgKHZhciBqID0gMDsg
aiA8IHF1YWQubGVuZ3RoOyArK2opIHsKKyAgICAgICAgICAgIHF1YWRbal0ueCAtPSBoaWdobGln
aHQuc2Nyb2xsWDsKKyAgICAgICAgICAgIHF1YWRbal0ueSAtPSBoaWdobGlnaHQuc2Nyb2xsWTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHZhciBxdWFkcyA9IGhpZ2hsaWdodC5xdWFkcy5zbGlj
ZSgpOworICAgIHZhciBjb250ZW50UXVhZCA9IHRha2VMYXN0KHF1YWRzKTsKKyAgICB2YXIgcGFk
ZGluZ1F1YWQgPSB0YWtlTGFzdChxdWFkcyk7CisgICAgdmFyIGJvcmRlclF1YWQgPSB0YWtlTGFz
dChxdWFkcyk7CisgICAgdmFyIG1hcmdpblF1YWQgPSB0YWtlTGFzdChxdWFkcyk7CisKKyAgICB2
YXIgaGFzQ29udGVudCA9IGNvbnRlbnRRdWFkICYmIGhpZ2hsaWdodC5jb250ZW50Q29sb3IgIT09
IHRyYW5zcGFyZW50Q29sb3IgfHwgaGlnaGxpZ2h0LmNvbnRlbnRPdXRsaW5lQ29sb3IgIT09IHRy
YW5zcGFyZW50Q29sb3I7CisgICAgdmFyIGhhc1BhZGRpbmcgPSBwYWRkaW5nUXVhZCAmJiBoaWdo
bGlnaHQucGFkZGluZ0NvbG9yICE9PSB0cmFuc3BhcmVudENvbG9yOworICAgIHZhciBoYXNCb3Jk
ZXIgPSBib3JkZXJRdWFkICYmIGhpZ2hsaWdodC5ib3JkZXJDb2xvciAhPT0gdHJhbnNwYXJlbnRD
b2xvcjsKKyAgICB2YXIgaGFzTWFyZ2luID0gbWFyZ2luUXVhZCAmJiBoaWdobGlnaHQubWFyZ2lu
Q29sb3IgIT09IHRyYW5zcGFyZW50Q29sb3I7CisKKyAgICB2YXIgY2xpcFF1YWQ7CisgICAgaWYg
KGhhc01hcmdpbiAmJiAoIWhhc0JvcmRlciB8fCAhcXVhZEVxdWFscyhtYXJnaW5RdWFkLCBib3Jk
ZXJRdWFkKSkpIHsKKyAgICAgICAgZHJhd091dGxpbmVkUXVhZFdpdGhDbGlwKG1hcmdpblF1YWQs
IGJvcmRlclF1YWQsIGhpZ2hsaWdodC5tYXJnaW5Db2xvcik7CisgICAgICAgIGNsaXBRdWFkID0g
Ym9yZGVyUXVhZDsKKyAgICB9CisgICAgaWYgKGhhc0JvcmRlciAmJiAoIWhhc1BhZGRpbmcgfHwg
IXF1YWRFcXVhbHMoYm9yZGVyUXVhZCwgcGFkZGluZ1F1YWQpKSkgeworICAgICAgICBkcmF3T3V0
bGluZWRRdWFkV2l0aENsaXAoYm9yZGVyUXVhZCwgcGFkZGluZ1F1YWQsIGhpZ2hsaWdodC5ib3Jk
ZXJDb2xvcik7CisgICAgICAgIGNsaXBRdWFkID0gcGFkZGluZ1F1YWQ7CisgICAgfQorICAgIGlm
IChoYXNQYWRkaW5nICYmICghaGFzQ29udGVudCB8fCAhcXVhZEVxdWFscyhwYWRkaW5nUXVhZCwg
Y29udGVudFF1YWQpKSkgeworICAgICAgICBkcmF3T3V0bGluZWRRdWFkV2l0aENsaXAocGFkZGlu
Z1F1YWQsIGNvbnRlbnRRdWFkLCBoaWdobGlnaHQucGFkZGluZ0NvbG9yKTsKKyAgICAgICAgY2xp
cFF1YWQgPSBjb250ZW50UXVhZDsKKyAgICB9CisgICAgaWYgKGhhc0NvbnRlbnQpCisgICAgICAg
IGRyYXdPdXRsaW5lZFF1YWQoY29udGVudFF1YWQsIGhpZ2hsaWdodC5jb250ZW50Q29sb3IsIGhp
Z2hsaWdodC5jb250ZW50T3V0bGluZUNvbG9yKTsKKworICAgIF9kcmF3RWxlbWVudFRpdGxlKGhp
Z2hsaWdodCk7CisgICAgX2RyYXdSdWxlcnMoaGlnaGxpZ2h0KTsKKyAgICBjb250ZXh0LnJlc3Rv
cmUoKTsKK30KKworZnVuY3Rpb24gZHJhd1JlY3RIaWdobGlnaHQoaGlnaGxpZ2h0KQoreworICAg
IGNvbnRleHQuc2F2ZSgpOworICAgIGRyYXdPdXRsaW5lZFF1YWQoaGlnaGxpZ2h0LnF1YWRzWzBd
LCBoaWdobGlnaHQuY29udGVudENvbG9yLCBoaWdobGlnaHQuY29udGVudE91dGxpbmVDb2xvcik7
CisgICAgY29udGV4dC5yZXN0b3JlKCk7CiB9CiAKIGZ1bmN0aW9uIGRpc3BhdGNoKG1lc3NhZ2Up
CkBAIC03OSw5ICs0MDAsMjMgQEAgZnVuY3Rpb24gZGlzcGF0Y2gobWVzc2FnZSkKICAgICB2YXIg
ZnVuY3Rpb25OYW1lID0gbWVzc2FnZS5zaGlmdCgpOwogICAgIHdpbmRvd1tmdW5jdGlvbk5hbWVd
LmFwcGx5KG51bGwsIG1lc3NhZ2UpOwogfQorCitmdW5jdGlvbiBsb2codGV4dCkKK3sKKyAgICB2
YXIgbG9nRW50cnkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICBsb2dFbnRy
eS50ZXh0Q29udGVudCA9IHRleHQ7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvZyIp
LmFwcGVuZENoaWxkKGxvZ0VudHJ5KTsKK30KKwogPC9zY3JpcHQ+CiA8L2hlYWQ+CiA8Ym9keSBj
bGFzcz0iZmlsbCI+CiA8ZGl2IGNsYXNzPSJtZXNzYWdlLWxpbmUiPjxzcGFuIGNsYXNzPSJtZXNz
YWdlLWJveCIgaWQ9InBhdXNlZC1pbi1kZWJ1Z2dlciI+PC9zcGFuPjwvZGl2PgogPC9ib2R5Pgor
PGNhbnZhcyBpZD0iY2FudmFzIiBjbGFzcz0iZmlsbCI+PC9jYW52YXM+Cis8ZGl2IGlkPSJlbGVt
ZW50LXRpdGxlIj4KKyAgPHNwYW4gaWQ9InRhZy1uYW1lIj48L3NwYW4+PHNwYW4gaWQ9Im5vZGUt
aWQiPjwvc3Bhbj48c3BhbiBpZD0iY2xhc3MtbmFtZSI+PC9zcGFuPgorICA8c3BhbiBpZD0ibm9k
ZS13aWR0aCI+PC9zcGFuPjxzcGFuIGNsYXNzPSJweCI+cHg8L3NwYW4+PHNwYW4gY2xhc3M9InB4
Ij4gJiN4RDc7IDwvc3Bhbj48c3BhbiBpZD0ibm9kZS1oZWlnaHQiPjwvc3Bhbj48c3BhbiBjbGFz
cz0icHgiPnB4PC9zcGFuPgorPC9kaXY+Cis8ZGl2IGlkPSJsb2ciPjwvZGl2PgogPC9odG1sPgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAppbmRl
eCBiNjg0OWZhODkyNGZkMWQ1YTBkNjU3YzJkYTg0ZDIzMzFhZDA0MzhmLi5hNzk0YzcwODFiMjg4
MWYzZmE1MmNhMjEwYTg4M2VlZTZhMzcyNTYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcApAQCAtOTE1LDYgKzkxNSwxMiBAQCB2b2lkIElu
c3BlY3RvclBhZ2VBZ2VudDo6ZGlkTGF5b3V0KCkKIAogICAgIGlmIChjdXJyZW50V2lkdGggJiYg
Y3VycmVudEhlaWdodCkKICAgICAgICAgbV9jbGllbnQtPmF1dG9ab29tUGFnZVRvRml0V2lkdGgo
KTsKKyAgICBtX292ZXJsYXktPnVwZGF0ZSgpOworfQorCit2b2lkIEluc3BlY3RvclBhZ2VBZ2Vu
dDo6ZGlkU2Nyb2xsKCkKK3sKKyAgICBtX292ZXJsYXktPnVwZGF0ZSgpOwogfQogCiBQYXNzUmVm
UHRyPFR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZT4gSW5zcGVjdG9yUGFnZUFnZW50OjpidWlsZE9i
amVjdEZvckZyYW1lKEZyYW1lKiBmcmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JQYWdlQWdlbnQuaAppbmRleCA3YjkxNzc5Zjk3YWUzOGI2YzIxYWMxMzM0ZTFlMzU4
ODY0YjVmZGQwLi4zZTRlYzExMDExNGU1YzA2NzhlMjVhZmFiMGFmMzg3MDE3Y2ZmM2VmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oCkBAIC0xMzcs
NiArMTM3LDcgQEAgcHVibGljOgogICAgIHZvaWQgd2lsbFBhaW50KEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IExheW91dFJlY3QmKTsKICAgICB2b2lkIGRpZFBhaW50KCk7CiAgICAgdm9pZCBkaWRM
YXlvdXQoKTsKKyAgICB2b2lkIGRpZFNjcm9sbCgpOwogCiAgICAgLy8gSW5zcGVjdG9yIENvbnRy
b2xsZXIgQVBJCiAgICAgdmlydHVhbCB2b2lkIHNldEZyb250ZW5kKEluc3BlY3RvckZyb250ZW5k
Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKaW5kZXggNDM2MjIyZDg4NTJlZDJmZDEwZDRmM2U3ODY2
MjU3ZTQ1YmE5NTM2Ny4uY2NhNGEwOTI1ZjdkZTJiZTliODAxZmU0MGJkMTkwMTFkMjIxYmU1ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcApAQCAtOTUsNiArOTUsNyBAQCB2b2lkIENocm9tZTo6aW52
YWxpZGF0ZUNvbnRlbnRzRm9yU2xvd1Njcm9sbChjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBi
b29sIGltbQogdm9pZCBDaHJvbWU6OnNjcm9sbChjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSwg
Y29uc3QgSW50UmVjdCYgcmVjdFRvU2Nyb2xsLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKIHsK
ICAgICBtX2NsaWVudC0+c2Nyb2xsKHNjcm9sbERlbHRhLCByZWN0VG9TY3JvbGwsIGNsaXBSZWN0
KTsKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFNjcm9sbChtX3BhZ2UpOwogfQog
CiAjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161637</attachid>
            <date>2012-08-31 01:36:16 -0700</date>
            <delta_ts>2012-08-31 01:54:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95456-20120831123603.patch</filename>
            <type>text/plain</type>
            <size>48668</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3MjM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmU4NmQzN2JhODg3NDRi
NmVmMGNmNzljMjA3MjVkNWQyMDYyYTgxMy4uMTk2NTBmNTBlZWU3MDM1OWMwYmNhMTdlM2FjYThl
ZjA1MmE1OTUxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDEyLTA4LTMwICBQYXZl
bCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IHJlbmRlciBib3ggbW9kZWwgZWxlbWVudHMgYW5kIGdyaWQgb24gaW5zcGVjdG9yIG92ZXJs
YXkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NDU2
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBj
aGFuZ2UgbWlncmF0ZXMgbmF0aXZlIHJlbmRlcmluZyBmb3IgYm94IG1vZGVsIHRvIHRoZSBJbnNw
ZWN0b3JPdmVybGF5LgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRh
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6ZGlkU2Nyb2xsSW1wbCk6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3Rvckluc3RydW1lbnRhdGlvbi5oOgorICAgICAgICAoSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkU2Ny
b2xsKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JP
dmVybGF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmRyYXdOb2Rl
SGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmRyYXdSZWN0
SGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6Om92ZXJsYXlQ
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmV2YWx1YXRlSW5PdmVy
bGF5KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5oOgorICAgICAgICAo
V2ViQ29yZTo6SGlnaGxpZ2h0OjpzZXRDb2xvcnMpOgorICAgICAgICAoSGlnaGxpZ2h0KToKKyAg
ICAgICAgKEluc3BlY3Rvck92ZXJsYXkpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JP
dmVybGF5UGFnZS5odG1sOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpkaWRMYXlvdXQpOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6
OmRpZFNjcm9sbCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oOgor
ICAgICAgICAqIHBhZ2UvQ2hyb21lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZTo6c2Ny
b2xsKToKKwogMjAxMi0wOC0zMSAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiByZW5kZXIgcGF0aCB0byBmaWxlIGFuZCBsaW5l
IG51bWJlciBhcyBzdWJ0aXRsZXMgaW4gc2VsZWN0b3IgZGlhbG9nLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcAppbmRleCBh
ZjQ0NzI4YzY0NjEwMDhiYWYzOTQ3ZjNkYjY5N2Y2MjRmYTZjNmU3Li40MWI3YmM4MWFkZWRhMGFl
ODgxZWJlOTZlZWY3ZDA3ZTYzZDE0OWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcApAQCAtMjQ5LDYgKzI0OSwxMiBA
QCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnRJ
bXBsKEluc3RydW1lbnRpbmdBZ2VudHMqCiAgICAgICAgIGRvbUFnZW50LT5tb3VzZURpZE1vdmVP
dmVyRWxlbWVudChyZXN1bHQsIG1vZGlmaWVyRmxhZ3MpOwogfQogCit2b2lkIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6ZGlkU2Nyb2xsSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVt
ZW50aW5nQWdlbnRzKQoreworICAgIGlmIChJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCA9
IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvclBhZ2VBZ2VudCgpKQorICAgICAgICBwYWdl
QWdlbnQtPmRpZFNjcm9sbCgpOworfQorCiBib29sIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
aGFuZGxlTW91c2VQcmVzc0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0Fn
ZW50cykKIHsKICAgICBpZiAoSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zdHJ1bWVu
dGluZ0FnZW50cy0+aW5zcGVjdG9yRE9NQWdlbnQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaAppbmRleCBkYjMzNWJmYWY0NTBj
YzMxOGNiY2U0ZGY2MTgxMTI3ZGQyNTRmNWM4Li4wY2MwY2MyMWMwNGYzNGQxNTdkNjA5Y2U3OGVk
NTlkMjYzZmM2ZmJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbi5oCkBAIC0xNDUsNiArMTQ1LDcgQEAgcHVibGljOgogICAgIHN0
YXRpYyB2b2lkIGRpZEludmFsaWRhdGVMYXlvdXQoRnJhbWUqKTsKICAgICBzdGF0aWMgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIHdpbGxMYXlvdXQoRnJhbWUqKTsKICAgICBzdGF0aWMg
dm9pZCBkaWRMYXlvdXQoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJik7Cisg
ICAgc3RhdGljIHZvaWQgZGlkU2Nyb2xsKFBhZ2UqKTsKICAgICBzdGF0aWMgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uQ29va2llIHdpbGxMb2FkWEhSKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBY
TUxIdHRwUmVxdWVzdCopOwogICAgIHN0YXRpYyB2b2lkIGRpZExvYWRYSFIoY29uc3QgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJik7CiAgICAgc3RhdGljIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbkNvb2tpZSB3aWxsUGFpbnQoRnJhbWUqLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBM
YXlvdXRSZWN0Jik7CkBAIC0zMjEsNiArMzIyLDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9p
ZCBkaWRJbnZhbGlkYXRlTGF5b3V0SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgRnJhbWUqKTsK
ICAgICBzdGF0aWMgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIHdpbGxMYXlvdXRJbXBs
KEluc3RydW1lbnRpbmdBZ2VudHMqLCBGcmFtZSopOwogICAgIHN0YXRpYyB2b2lkIGRpZExheW91
dEltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJik7CisgICAgc3RhdGlj
IHZvaWQgZGlkU2Nyb2xsSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKik7CiAgICAgc3RhdGljIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSB3aWxsTG9hZFhIUkltcGwoSW5zdHJ1bWVudGlu
Z0FnZW50cyosIFhNTEh0dHBSZXF1ZXN0KiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogICAg
IHN0YXRpYyB2b2lkIGRpZExvYWRYSFJJbXBsKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bkNvb2tpZSYpOwogICAgIHN0YXRpYyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2ls
bFBhaW50SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
TGF5b3V0UmVjdCYsIEZyYW1lKik7CkBAIC04NDAsNiArODQyLDE1IEBAIGlubGluZSB2b2lkIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTGF5b3V0KGNvbnN0IEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbkNvCiAjZW5kaWYKIH0KIAoraW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpkaWRTY3JvbGwoUGFnZSogcGFnZSkKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAg
IEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOworICAgIGlmIChJbnN0cnVtZW50
aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvclBh
Z2UocGFnZSkpCisgICAgICAgIGRpZFNjcm9sbEltcGwoaW5zdHJ1bWVudGluZ0FnZW50cyk7Cisj
ZW5kaWYKK30KKwogaW5saW5lIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OndpbGxMb2FkWEhSKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIFhNTEh0dHBSZXF1ZXN0KiByZXF1ZXN0KQogewogI2lmIEVOQUJMRShJTlNQRUNUT1Ip
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAKaW5kZXgg
Njk5ZWI0YjgwM2U3YmNlYWZlNjcwMDM2YWM0ZGFjNjBhNGEzNmFjNy4uNzljMjY2NDk4ZjI4N2U2
YjU0YmFkNDA5YTlhMjIwMTU3YmIxODE2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JPdmVybGF5LmNwcApAQCAtMzUsMTkgKzM1LDE0IEBACiAjaW5jbHVkZSAiRG9j
dW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRW1wdHlDbGll
bnRzLmgiCi0jaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgotI2luY2x1
ZGUgIkZvbnRGYW1pbHkuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzVHlw
ZXMuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JP
dmVybGF5UGFnZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgogI2luY2x1ZGUgIk5v
ZGUuaCIKICNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJS
ZW5kZXJCb3hNb2RlbE9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1
ZGUgIlJlbmRlck9iamVjdC5oIgpAQCAtNTUsMjcgKzUwLDExIEBACiAjaW5jbHVkZSAiU2NyaXB0
VmFsdWUuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlN0eWxlZEVsZW1lbnQu
aCIKLSNpbmNsdWRlICJUZXh0UnVuLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRl
ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSB7CiAKLSNpZiBPUyhXSU5E
T1dTKQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGZvbnRIZWlnaHRQeCA9IDEyOwotI2VsaWYgT1Mo
TUFDX09TX1gpIHx8IE9TKFVOSVgpCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgZm9udEhlaWdodFB4
ID0gMTE7Ci0jZW5kaWYKLQotY29uc3Qgc3RhdGljIGludCByZWN0SW5mbGF0ZVB4ID0gNDsKLWNv
bnN0IHN0YXRpYyBpbnQgYm9yZGVyV2lkdGhQeCA9IDE7Ci1jb25zdCBzdGF0aWMgaW50IHRvb2x0
aXBQYWRkaW5nID0gNDsKLQotY29uc3Qgc3RhdGljIGludCBhcnJvd1RpcE9mZnNldCA9IDIwOwot
Y29uc3Qgc3RhdGljIGZsb2F0IGFycm93SGVpZ2h0ID0gNzsKLWNvbnN0IHN0YXRpYyBmbG9hdCBh
cnJvd0hhbGZXaWR0aCA9IDc7Ci0KIFBhdGggcXVhZFRvUGF0aChjb25zdCBGbG9hdFF1YWQmIHF1
YWQpCiB7CiAgICAgUGF0aCBxdWFkUGF0aDsKQEAgLTExMSwyNTYgKzkwLDYgQEAgdm9pZCBkcmF3
T3V0bGluZWRRdWFkKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRRdWFkJiBx
dWFkLCBjb25zdCBDb2wKICAgICBjb250ZXh0LT5maWxsUGF0aChxdWFkUGF0aCk7CiB9CiAKLXZv
aWQgZHJhd091dGxpbmVkUXVhZFdpdGhDbGlwKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgRmxvYXRRdWFkJiBxdWFkLCBjb25zdCBGbG9hdFF1YWQmIGNsaXBRdWFkLCBjb25zdCBDb2xv
ciYgZmlsbENvbG9yKQotewotICAgIGNvbnRleHQtPnNhdmUoKTsKLSAgICBQYXRoIGNsaXBRdWFk
UGF0aCA9IHF1YWRUb1BhdGgoY2xpcFF1YWQpOwotICAgIGNvbnRleHQtPmNsaXBPdXQoY2xpcFF1
YWRQYXRoKTsKLSAgICBkcmF3T3V0bGluZWRRdWFkKGNvbnRleHQsIHF1YWQsIGZpbGxDb2xvciwg
Q29sb3I6OnRyYW5zcGFyZW50KTsKLSAgICBjb250ZXh0LT5yZXN0b3JlKCk7Ci19Ci0KLXZvaWQg
ZHJhd0hpZ2hsaWdodEZvckJveChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0
UXVhZCYgY29udGVudFF1YWQsIGNvbnN0IEZsb2F0UXVhZCYgcGFkZGluZ1F1YWQsIGNvbnN0IEZs
b2F0UXVhZCYgYm9yZGVyUXVhZCwgY29uc3QgRmxvYXRRdWFkJiBtYXJnaW5RdWFkLCBjb25zdCBI
aWdobGlnaHRDb25maWcmIGhpZ2hsaWdodENvbmZpZykKLXsKLSAgICBib29sIGhhc01hcmdpbiA9
IGhpZ2hsaWdodENvbmZpZy5tYXJnaW4gIT0gQ29sb3I6OnRyYW5zcGFyZW50OwotICAgIGJvb2wg
aGFzQm9yZGVyID0gaGlnaGxpZ2h0Q29uZmlnLmJvcmRlciAhPSBDb2xvcjo6dHJhbnNwYXJlbnQ7
Ci0gICAgYm9vbCBoYXNQYWRkaW5nID0gaGlnaGxpZ2h0Q29uZmlnLnBhZGRpbmcgIT0gQ29sb3I6
OnRyYW5zcGFyZW50OwotICAgIGJvb2wgaGFzQ29udGVudCA9IGhpZ2hsaWdodENvbmZpZy5jb250
ZW50ICE9IENvbG9yOjp0cmFuc3BhcmVudCB8fCBoaWdobGlnaHRDb25maWcuY29udGVudE91dGxp
bmUgIT0gQ29sb3I6OnRyYW5zcGFyZW50OwotCi0gICAgRmxvYXRRdWFkIGNsaXBRdWFkOwotICAg
IENvbG9yIGNsaXBDb2xvcjsKLSAgICBpZiAoaGFzTWFyZ2luICYmICghaGFzQm9yZGVyIHx8IG1h
cmdpblF1YWQgIT0gYm9yZGVyUXVhZCkpIHsKLSAgICAgICAgZHJhd091dGxpbmVkUXVhZFdpdGhD
bGlwKGNvbnRleHQsIG1hcmdpblF1YWQsIGJvcmRlclF1YWQsIGhpZ2hsaWdodENvbmZpZy5tYXJn
aW4pOwotICAgICAgICBjbGlwUXVhZCA9IGJvcmRlclF1YWQ7Ci0gICAgfQotICAgIGlmIChoYXNC
b3JkZXIgJiYgKCFoYXNQYWRkaW5nIHx8IGJvcmRlclF1YWQgIT0gcGFkZGluZ1F1YWQpKSB7Ci0g
ICAgICAgIGRyYXdPdXRsaW5lZFF1YWRXaXRoQ2xpcChjb250ZXh0LCBib3JkZXJRdWFkLCBwYWRk
aW5nUXVhZCwgaGlnaGxpZ2h0Q29uZmlnLmJvcmRlcik7Ci0gICAgICAgIGNsaXBRdWFkID0gcGFk
ZGluZ1F1YWQ7Ci0gICAgfQotICAgIGlmIChoYXNQYWRkaW5nICYmICghaGFzQ29udGVudCB8fCBw
YWRkaW5nUXVhZCAhPSBjb250ZW50UXVhZCkpIHsKLSAgICAgICAgZHJhd091dGxpbmVkUXVhZFdp
dGhDbGlwKGNvbnRleHQsIHBhZGRpbmdRdWFkLCBjb250ZW50UXVhZCwgaGlnaGxpZ2h0Q29uZmln
LnBhZGRpbmcpOwotICAgICAgICBjbGlwUXVhZCA9IGNvbnRlbnRRdWFkOwotICAgIH0KLSAgICBp
ZiAoaGFzQ29udGVudCkKLSAgICAgICAgZHJhd091dGxpbmVkUXVhZChjb250ZXh0LCBjb250ZW50
UXVhZCwgaGlnaGxpZ2h0Q29uZmlnLmNvbnRlbnQsIGhpZ2hsaWdodENvbmZpZy5jb250ZW50T3V0
bGluZSk7Ci19Ci0KLXZvaWQgZHJhd0hpZ2hsaWdodEZvclNWR1JlbmRlcmVyKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgVmVjdG9yPEZsb2F0UXVhZD4mIGFic29sdXRlUXVhZHMsIGNv
bnN0IEhpZ2hsaWdodENvbmZpZyYgaGlnaGxpZ2h0Q29uZmlnKQotewotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgYWJzb2x1dGVRdWFkcy5zaXplKCk7ICsraSkKLSAgICAgICAgZHJhd091dGxp
bmVkUXVhZChjb250ZXh0LCBhYnNvbHV0ZVF1YWRzW2ldLCBoaWdobGlnaHRDb25maWcuY29udGVu
dCwgQ29sb3I6OnRyYW5zcGFyZW50KTsKLX0KLQotaW50IGRyYXdTdWJzdHJpbmcoY29uc3QgVGV4
dFJ1biYgZ2xvYmFsVGV4dFJ1biwgaW50IG9mZnNldCwgaW50IGxlbmd0aCwgY29uc3QgQ29sb3Im
IHRleHRDb2xvciwgY29uc3QgRm9udCYgZm9udCwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBMYXlvdXRSZWN0JiB0aXRsZVJlY3QpCi17Ci0gICAgY29udGV4dC0+c2V0RmlsbENvbG9y
KHRleHRDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgY29udGV4dC0+ZHJhd1RleHQo
Zm9udCwgZ2xvYmFsVGV4dFJ1biwgSW50UG9pbnQodGl0bGVSZWN0LnBpeGVsU25hcHBlZFgoKSAr
IHJlY3RJbmZsYXRlUHgsIHRpdGxlUmVjdC5waXhlbFNuYXBwZWRZKCkgKyBmb250LmZvbnRNZXRy
aWNzKCkuaGVpZ2h0KCkpLCBvZmZzZXQsIG9mZnNldCArIGxlbmd0aCk7Ci0gICAgcmV0dXJuIG9m
ZnNldCArIGxlbmd0aDsKLX0KLQotZmxvYXQgY2FsY3VsYXRlQXJyb3dUaXBYKGNvbnN0IExheW91
dFJlY3QmIGFuY2hvckJveCwgY29uc3QgTGF5b3V0UmVjdCYgdGl0bGVSZWN0KQotewotICAgIGNv
bnN0IHN0YXRpYyBpbnQgYW5jaG9yVGlwT2Zmc2V0UHggPSAyOwotCi0gICAgaW50IG1pblggPSB0
aXRsZVJlY3QueCgpICsgYXJyb3dIYWxmV2lkdGg7Ci0gICAgaW50IG1heFggPSB0aXRsZVJlY3Qu
bWF4WCgpIC0gYXJyb3dIYWxmV2lkdGg7Ci0gICAgaW50IGFuY2hvclggPSBhbmNob3JCb3gueCgp
OwotICAgIGludCBhbmNob3JNYXhYID0gYW5jaG9yQm94Lm1heFgoKTsKLQotICAgIGludCB4ID0g
dGl0bGVSZWN0LngoKSArIGFycm93VGlwT2Zmc2V0OyAvLyBEZWZhdWx0IHRvb2x0aXAgcG9zaXRp
b24uCi0gICAgaWYgKHggPCBhbmNob3JYKQotICAgICAgICB4ID0gYW5jaG9yWCArIGFuY2hvclRp
cE9mZnNldFB4OwotICAgIGVsc2UgaWYgKHggPiBhbmNob3JNYXhYKQotICAgICAgICB4ID0gYW5j
aG9yTWF4WCAtIGFuY2hvclRpcE9mZnNldFB4OwotCi0gICAgaWYgKHggPCBtaW5YKQotICAgICAg
ICB4ID0gbWluWDsKLSAgICBlbHNlIGlmICh4ID4gbWF4WCkKLSAgICAgICAgeCA9IG1heFg7Ci0K
LSAgICByZXR1cm4geDsKLX0KLQotdm9pZCBzZXRVcEZvbnREZXNjcmlwdGlvbihGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbiwgV2ViQ29yZTo6U2V0dGluZ3MqIHNldHRpbmdzKQotewot
I2RlZmluZSBUT09MVElQX0ZPTlRfRkFNSUxJRVMoc2l6ZSwgLi4uKSBcCi1zdGF0aWMgY29uc3Qg
dW5zaWduZWQgdG9vbHRpcEZvbnRGYWNlU2l6ZSA9IHNpemU7XAotc3RhdGljIGNvbnN0IEF0b21p
Y1N0cmluZyogdG9vbHRpcEZvbnRGYWNlW3NpemVdID0geyBfX1ZBX0FSR1NfXyB9OwotCi0jaWYg
T1MoV0lORE9XUykKLVRPT0xUSVBfRk9OVF9GQU1JTElFUygyLCBuZXcgQXRvbWljU3RyaW5nKCJD
b25zb2xhcyIpLCBuZXcgQXRvbWljU3RyaW5nKCJMdWNpZGEgQ29uc29sZSIpKQotI2VsaWYgT1Mo
TUFDX09TX1gpCi1UT09MVElQX0ZPTlRfRkFNSUxJRVMoMiwgbmV3IEF0b21pY1N0cmluZygiTWVu
bG8iKSwgbmV3IEF0b21pY1N0cmluZygiTW9uYWNvIikpCi0jZWxpZiBPUyhVTklYKQotVE9PTFRJ
UF9GT05UX0ZBTUlMSUVTKDEsIG5ldyBBdG9taWNTdHJpbmcoImRlamF2dSBzYW5zIG1vbm8iKSkK
LSNlbmRpZgotLy8gSW4gdGhlIGRlZmF1bHQgY2FzZSwgd2UgZ2V0IHRoZSBzZXR0aW5ncy1wcm92
aWRlZCBtb25vc3BhY2UgZm9udC4KLQotI3VuZGVmIFRPT0xUSVBfRk9OVF9GQU1JTElFUwotCi0g
ICAgZm9udERlc2NyaXB0aW9uLnNldFJlbmRlcmluZ01vZGUoc2V0dGluZ3MtPmZvbnRSZW5kZXJp
bmdNb2RlKCkpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoZm9udEhlaWdo
dFB4KTsKLQotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZml4ZWRGb250RmFtaWx5ID0gc2V0dGlu
Z3MtPmZpeGVkRm9udEZhbWlseSgpOwotICAgIGlmICghZml4ZWRGb250RmFtaWx5LmlzRW1wdHko
KSkgewotICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3Jp
cHRpb246Ok1vbm9zcGFjZUZhbWlseSk7Ci0gICAgICAgIEZvbnRGYW1pbHkqIGN1cnJlbnRGYW1p
bHkgPSAwOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG9vbHRpcEZvbnRGYWNl
U2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIWN1cnJlbnRGYW1pbHkpIHsKLSAgICAgICAg
ICAgICAgICBmb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKS5zZXRGYW1pbHkoKnRvb2x0aXBG
b250RmFjZVtpXSk7Ci0gICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5
KCkuYXBwZW5kRmFtaWx5KDApOwotICAgICAgICAgICAgICAgIGN1cnJlbnRGYW1pbHkgPSAmZm9u
dERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIFJlZlB0cjxTaGFyZWRGb250RmFtaWx5PiBuZXdGYW1pbHkgPSBTaGFyZWRGb250
RmFtaWx5OjpjcmVhdGUoKTsKLSAgICAgICAgICAgICAgICBuZXdGYW1pbHktPnNldEZhbWlseSgq
dG9vbHRpcEZvbnRGYWNlW2ldKTsKLSAgICAgICAgICAgICAgICBjdXJyZW50RmFtaWx5LT5hcHBl
bmRGYW1pbHkobmV3RmFtaWx5KTsKLSAgICAgICAgICAgICAgICBjdXJyZW50RmFtaWx5ID0gbmV3
RmFtaWx5LmdldCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxT
aGFyZWRGb250RmFtaWx5PiBuZXdGYW1pbHkgPSBTaGFyZWRGb250RmFtaWx5OjpjcmVhdGUoKTsK
LSAgICAgICAgbmV3RmFtaWx5LT5zZXRGYW1pbHkoZml4ZWRGb250RmFtaWx5KTsKLSAgICAgICAg
Y3VycmVudEZhbWlseS0+YXBwZW5kRmFtaWx5KG5ld0ZhbWlseSk7Ci0gICAgICAgIGN1cnJlbnRG
YW1pbHkgPSBuZXdGYW1pbHkuZ2V0KCk7Ci0gICAgfQotfQotCi12b2lkIGRyYXdFbGVtZW50VGl0
bGUoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBOb2RlKiBub2RlLCBSZW5kZXJPYmplY3QqIHJl
bmRlcmVyLCBjb25zdCBJbnRSZWN0JiBib3VuZGluZ0JveCwgY29uc3QgSW50UmVjdCYgYW5jaG9y
Qm94LCBjb25zdCBGbG9hdFJlY3QmIHZpc2libGVSZWN0LCBXZWJDb3JlOjpTZXR0aW5ncyogc2V0
dGluZ3MpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChDb2xvciwgYmFja2dyb3VuZENvbG9y
LCAoMjU1LCAyNTUsIDE5NCkpOwotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ29sb3IsIHRhZ0Nv
bG9yLCAoMTM2LCAxOCwgMTI4KSk7IC8vIFNhbWUgYXMgLndlYmtpdC1odG1sLXRhZy4KLSAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKENvbG9yLCBhdHRyQ29sb3IsICgyNiwgMjYsIDE2NikpOyAvLyBT
YW1lIGFzIC53ZWJraXQtaHRtbC1hdHRyaWJ1dGUtdmFsdWUuCi0gICAgREVGSU5FX1NUQVRJQ19M
T0NBTChDb2xvciwgbm9ybWFsQ29sb3IsIChDb2xvcjo6YmxhY2spKTsKLSAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKENvbG9yLCBweEFuZEJvcmRlckNvbG9yLCAoMTI4LCAxMjgsIDEyOCkpOwotCi0g
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHB4U3RyaW5nLCAoQVNDSUlMaXRlcmFsKCJw
eCIpKSk7Ci0gICAgY29uc3Qgc3RhdGljIFVDaGFyIHRpbWVzVUNoYXJbXSA9IHsgMHgwMDIwLCAw
eDAwRDcsIDB4MDAyMCwgMCB9OwotICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCB0aW1l
c1N0cmluZywgKHRpbWVzVUNoYXIpKTsgLy8gJnRpbWVzOyBzdHJpbmcKLQotICAgIEZvbnRDYWNo
ZVB1cmdlUHJldmVudGVyIGZvbnRDYWNoZVB1cmdlUHJldmVudGVyOwotCi0gICAgRWxlbWVudCog
ZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKTsKLSAgICBib29sIGlzWEhUTUwg
PSBlbGVtZW50LT5kb2N1bWVudCgpLT5pc1hIVE1MRG9jdW1lbnQoKTsKLSAgICBTdHJpbmdCdWls
ZGVyIG5vZGVUaXRsZTsKLSAgICBub2RlVGl0bGUuYXBwZW5kKGlzWEhUTUwgPyBlbGVtZW50LT5u
b2RlTmFtZSgpIDogZWxlbWVudC0+bm9kZU5hbWUoKS5sb3dlcigpKTsKLSAgICB1bnNpZ25lZCB0
YWdOYW1lTGVuZ3RoID0gbm9kZVRpdGxlLmxlbmd0aCgpOwotCi0gICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBpZFZhbHVlID0gZWxlbWVudC0+Z2V0SWRBdHRyaWJ1dGUoKTsKLSAgICB1bnNpZ25lZCBp
ZFN0cmluZ0xlbmd0aCA9IDA7Ci0gICAgU3RyaW5nIGlkU3RyaW5nOwotICAgIGlmICghaWRWYWx1
ZS5pc051bGwoKSAmJiAhaWRWYWx1ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgbm9kZVRpdGxlLmFw
cGVuZCgiIyIpOwotICAgICAgICBub2RlVGl0bGUuYXBwZW5kKGlkVmFsdWUpOwotICAgICAgICBp
ZFN0cmluZ0xlbmd0aCA9IDEgKyBpZFZhbHVlLmxlbmd0aCgpOwotICAgIH0KLQotICAgIEhhc2hT
ZXQ8QXRvbWljU3RyaW5nPiB1c2VkQ2xhc3NOYW1lczsKLSAgICB1bnNpZ25lZCBjbGFzc2VzU3Ry
aW5nTGVuZ3RoID0gMDsKLSAgICBpZiAoZWxlbWVudC0+aGFzQ2xhc3MoKSAmJiBlbGVtZW50LT5p
c1N0eWxlZEVsZW1lbnQoKSkgewotICAgICAgICBjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBjbGFz
c05hbWVzU3RyaW5nID0gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KGVsZW1lbnQpLT5jbGFz
c05hbWVzKCk7Ci0gICAgICAgIHNpemVfdCBjbGFzc05hbWVDb3VudCA9IGNsYXNzTmFtZXNTdHJp
bmcuc2l6ZSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNsYXNzTmFtZUNvdW50
OyArK2kpIHsKLSAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY2xhc3NOYW1lID0gY2xh
c3NOYW1lc1N0cmluZ1tpXTsKLSAgICAgICAgICAgIGlmICh1c2VkQ2xhc3NOYW1lcy5jb250YWlu
cyhjbGFzc05hbWUpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgdXNl
ZENsYXNzTmFtZXMuYWRkKGNsYXNzTmFtZSk7Ci0gICAgICAgICAgICBub2RlVGl0bGUuYXBwZW5k
KCIuIik7Ci0gICAgICAgICAgICBub2RlVGl0bGUuYXBwZW5kKGNsYXNzTmFtZSk7Ci0gICAgICAg
ICAgICBjbGFzc2VzU3RyaW5nTGVuZ3RoICs9IDEgKyBjbGFzc05hbWUubGVuZ3RoKCk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogbW9kZWxPYmplY3QgPSBy
ZW5kZXJlci0+aXNCb3hNb2RlbE9iamVjdCgpID8gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChyZW5k
ZXJlcikgOiAwOwotCi0gICAgU3RyaW5nIHdpZHRoTnVtYmVyUGFydCA9ICIgIiArIFN0cmluZzo6
bnVtYmVyKG1vZGVsT2JqZWN0ID8gYWRqdXN0Rm9yQWJzb2x1dGVab29tKG1vZGVsT2JqZWN0LT5w
aXhlbFNuYXBwZWRPZmZzZXRXaWR0aCgpLCBtb2RlbE9iamVjdCkgOiBib3VuZGluZ0JveC53aWR0
aCgpKTsKLSAgICBub2RlVGl0bGUuYXBwZW5kKHdpZHRoTnVtYmVyUGFydCk7Ci0gICAgbm9kZVRp
dGxlLmFwcGVuZChweFN0cmluZyk7Ci0gICAgbm9kZVRpdGxlLmFwcGVuZCh0aW1lc1N0cmluZyk7
Ci0gICAgU3RyaW5nIGhlaWdodE51bWJlclBhcnQgPSBTdHJpbmc6Om51bWJlcihtb2RlbE9iamVj
dCA/IGFkanVzdEZvckFic29sdXRlWm9vbShtb2RlbE9iamVjdC0+cGl4ZWxTbmFwcGVkT2Zmc2V0
SGVpZ2h0KCksIG1vZGVsT2JqZWN0KSA6IGJvdW5kaW5nQm94LmhlaWdodCgpKTsKLSAgICBub2Rl
VGl0bGUuYXBwZW5kKGhlaWdodE51bWJlclBhcnQpOwotICAgIG5vZGVUaXRsZS5hcHBlbmQocHhT
dHJpbmcpOwotCi0gICAgRm9udERlc2NyaXB0aW9uIGRlc2M7Ci0gICAgc2V0VXBGb250RGVzY3Jp
cHRpb24oZGVzYywgc2V0dGluZ3MpOwotICAgIEZvbnQgZm9udCA9IEZvbnQoZGVzYywgMCwgMCk7
Ci0gICAgZm9udC51cGRhdGUoMCk7Ci0KLSAgICBUZXh0UnVuIG5vZGVUaXRsZVJ1bihub2RlVGl0
bGUudG9TdHJpbmcoKSk7Ci0gICAgSW50UG9pbnQgdGl0bGVCYXNlUG9pbnQgPSBJbnRQb2ludChh
bmNob3JCb3gueCgpLCBhbmNob3JCb3gubWF4WSgpIC0gMSk7Ci0gICAgdGl0bGVCYXNlUG9pbnQu
bW92ZShyZWN0SW5mbGF0ZVB4LCByZWN0SW5mbGF0ZVB4KTsKLSAgICBJbnRSZWN0IHRpdGxlUmVj
dCA9IGVuY2xvc2luZ0ludFJlY3QoZm9udC5zZWxlY3Rpb25SZWN0Rm9yVGV4dChub2RlVGl0bGVS
dW4sIHRpdGxlQmFzZVBvaW50LCBmb250SGVpZ2h0UHgpKTsKLSAgICB0aXRsZVJlY3QuaW5mbGF0
ZShyZWN0SW5mbGF0ZVB4KTsKLQotICAgIC8vIFRoZSBpbml0aWFsIG9mZnNldHMgbmVlZGVkIHRv
IGNvbXBlbnNhdGUgZm9yIGEgMXB4LXRoaWNrIGJvcmRlciBzdHJva2UgKHdoaWNoIGlzIG5vdCBh
IHBhcnQgb2YgdGhlIHJlY3RhbmdsZSkuCi0gICAgaW50IGR4ID0gLWJvcmRlcldpZHRoUHg7Ci0g
ICAgaW50IGR5ID0gYm9yZGVyV2lkdGhQeDsKLQotICAgIC8vIElmIHRoZSB0aXAgc3RpY2tzIGJl
eW9uZCB0aGUgcmlnaHQgb2YgdmlzaWJsZVJlY3QsIHJpZ2h0LWFsaWduIHRoZSB0aXAgd2l0aCB0
aGUgc2FpZCBib3VuZGFyeS4KLSAgICBpZiAodGl0bGVSZWN0Lm1heFgoKSArIGR4ID4gdmlzaWJs
ZVJlY3QubWF4WCgpKQotICAgICAgICBkeCA9IHZpc2libGVSZWN0Lm1heFgoKSAtIHRpdGxlUmVj
dC5tYXhYKCk7Ci0KLSAgICAvLyBJZiB0aGUgdGlwIHN0aWNrcyBiZXlvbmQgdGhlIGxlZnQgb2Yg
dmlzaWJsZVJlY3QsIGxlZnQtYWxpZ24gdGhlIHRpcCB3aXRoIHRoZSBzYWlkIGJvdW5kYXJ5Lgot
ICAgIGlmICh0aXRsZVJlY3QueCgpICsgZHggPCB2aXNpYmxlUmVjdC54KCkpCi0gICAgICAgIGR4
ID0gdmlzaWJsZVJlY3QueCgpIC0gdGl0bGVSZWN0LngoKSAtIGJvcmRlcldpZHRoUHg7Ci0KLSAg
ICAvLyBJZiB0aGUgdGlwIHN0aWNrcyBiZXlvbmQgdGhlIGJvdHRvbSBvZiB2aXNpYmxlUmVjdCwg
c2hvdyB0aGUgdGlwIGF0IHRvcCBvZiBib3VuZGluZyBib3guCi0gICAgaWYgKHRpdGxlUmVjdC5t
YXhZKCkgKyBkeSA+IHZpc2libGVSZWN0Lm1heFkoKSkgewotICAgICAgICBkeSA9IGFuY2hvckJv
eC55KCkgLSB0aXRsZVJlY3QubWF4WSgpIC0gYm9yZGVyV2lkdGhQeDsKLSAgICAgICAgLy8gSWYg
dGhlIHRpcCBzdGlsbCBzdGlja3MgYmV5b25kIHRoZSBib3R0b20gb2YgdmlzaWJsZVJlY3QsIGJv
dHRvbS1hbGlnbiB0aGUgdGlwIHdpdGggdGhlIHNhaWQgYm91bmRhcnkuCi0gICAgICAgIGlmICh0
aXRsZVJlY3QubWF4WSgpICsgZHkgPiB2aXNpYmxlUmVjdC5tYXhZKCkpCi0gICAgICAgICAgICBk
eSA9IHZpc2libGVSZWN0Lm1heFkoKSAtIHRpdGxlUmVjdC5tYXhZKCk7Ci0gICAgfQotCi0gICAg
Ly8gSWYgdGhlIHRpcCBzdGlja3MgYmV5b25kIHRoZSB0b3Agb2YgdmlzaWJsZVJlY3QsIHNob3cg
dGhlIHRpcCBhdCB0b3Agb2YgdmlzaWJsZVJlY3QuCi0gICAgaWYgKHRpdGxlUmVjdC55KCkgKyBk
eSA8IHZpc2libGVSZWN0LnkoKSkKLSAgICAgICAgZHkgPSB2aXNpYmxlUmVjdC55KCkgLSB0aXRs
ZVJlY3QueSgpICsgYm9yZGVyV2lkdGhQeDsKLQotICAgIHRpdGxlUmVjdC5tb3ZlKGR4LCBkeSk7
Ci0KLSAgICBib29sIGlzQXJyb3dBdFRvcCA9IHRpdGxlUmVjdC55KCkgPiBhbmNob3JCb3gueSgp
OwotICAgIHRpdGxlUmVjdC5tb3ZlKDAsIHRvb2x0aXBQYWRkaW5nICogKGlzQXJyb3dBdFRvcCA/
IDEgOiAtMSkpOwotCi0gICAgewotICAgICAgICBmbG9hdCBhcnJvd1RpcFggPSBjYWxjdWxhdGVB
cnJvd1RpcFgoYW5jaG9yQm94LCB0aXRsZVJlY3QpOwotICAgICAgICBpbnQgYXJyb3dCYXNlWSA9
IGlzQXJyb3dBdFRvcCA/IHRpdGxlUmVjdC55KCkgOiB0aXRsZVJlY3QubWF4WSgpOwotICAgICAg
ICBpbnQgYXJyb3dPcHBvc2l0ZVkgPSBpc0Fycm93QXRUb3AgPyB0aXRsZVJlY3QubWF4WSgpIDog
dGl0bGVSZWN0LnkoKTsKLQotICAgICAgICBGbG9hdFBvaW50IHBvaW50c1s4XTsKLSAgICAgICAg
cG9pbnRzWzBdID0gRmxvYXRQb2ludChhcnJvd1RpcFggLSBhcnJvd0hhbGZXaWR0aCwgYXJyb3dC
YXNlWSk7Ci0gICAgICAgIHBvaW50c1sxXSA9IEZsb2F0UG9pbnQoYXJyb3dUaXBYLCBhcnJvd0Jh
c2VZICsgYXJyb3dIZWlnaHQgKiAoaXNBcnJvd0F0VG9wID8gLTEgOiAxKSk7Ci0gICAgICAgIHBv
aW50c1syXSA9IEZsb2F0UG9pbnQoYXJyb3dUaXBYICsgYXJyb3dIYWxmV2lkdGgsIGFycm93QmFz
ZVkpOwotICAgICAgICBwb2ludHNbM10gPSBGbG9hdFBvaW50KHRpdGxlUmVjdC5tYXhYKCksIGFy
cm93QmFzZVkpOwotICAgICAgICBwb2ludHNbNF0gPSBGbG9hdFBvaW50KHRpdGxlUmVjdC5tYXhY
KCksIGFycm93T3Bwb3NpdGVZKTsKLSAgICAgICAgcG9pbnRzWzVdID0gRmxvYXRQb2ludCh0aXRs
ZVJlY3QueCgpLCBhcnJvd09wcG9zaXRlWSk7Ci0gICAgICAgIHBvaW50c1s2XSA9IEZsb2F0UG9p
bnQodGl0bGVSZWN0LngoKSwgYXJyb3dCYXNlWSk7Ci0gICAgICAgIHBvaW50c1s3XSA9IHBvaW50
c1swXTsKLQotICAgICAgICBQYXRoIHBhdGg7Ci0gICAgICAgIHBhdGgubW92ZVRvKHBvaW50c1sw
XSk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgODsgKytpKQotICAgICAgICAgICAgcGF0
aC5hZGRMaW5lVG8ocG9pbnRzW2ldKTsKLQotICAgICAgICBjb250ZXh0LT5zYXZlKCk7Ci0gICAg
ICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgwLjVmLCAwLjVmKTsKLSAgICAgICAgY29udGV4dC0+c2V0
U3Ryb2tlQ29sb3IocHhBbmRCb3JkZXJDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAg
ICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihiYWNrZ3JvdW5kQ29sb3IsIENvbG9yU3BhY2VEZXZp
Y2VSR0IpOwotICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VUaGlja25lc3MoYm9yZGVyV2lkdGhQ
eCk7Ci0gICAgICAgIGNvbnRleHQtPmZpbGxQYXRoKHBhdGgpOwotICAgICAgICBjb250ZXh0LT5z
dHJva2VQYXRoKHBhdGgpOwotICAgICAgICBjb250ZXh0LT5yZXN0b3JlKCk7Ci0gICAgfQotCi0g
ICAgaW50IGN1cnJlbnRQb3MgPSAwOwotICAgIGN1cnJlbnRQb3MgPSBkcmF3U3Vic3RyaW5nKG5v
ZGVUaXRsZVJ1biwgY3VycmVudFBvcywgdGFnTmFtZUxlbmd0aCwgdGFnQ29sb3IsIGZvbnQsIGNv
bnRleHQsIHRpdGxlUmVjdCk7Ci0gICAgaWYgKGlkU3RyaW5nTGVuZ3RoKQotICAgICAgICBjdXJy
ZW50UG9zID0gZHJhd1N1YnN0cmluZyhub2RlVGl0bGVSdW4sIGN1cnJlbnRQb3MsIGlkU3RyaW5n
TGVuZ3RoLCBhdHRyQ29sb3IsIGZvbnQsIGNvbnRleHQsIHRpdGxlUmVjdCk7Ci0gICAgaWYgKGNs
YXNzZXNTdHJpbmdMZW5ndGgpCi0gICAgICAgIGN1cnJlbnRQb3MgPSBkcmF3U3Vic3RyaW5nKG5v
ZGVUaXRsZVJ1biwgY3VycmVudFBvcywgY2xhc3Nlc1N0cmluZ0xlbmd0aCwgYXR0ckNvbG9yLCBm
b250LCBjb250ZXh0LCB0aXRsZVJlY3QpOwotICAgIGN1cnJlbnRQb3MgPSBkcmF3U3Vic3RyaW5n
KG5vZGVUaXRsZVJ1biwgY3VycmVudFBvcywgd2lkdGhOdW1iZXJQYXJ0Lmxlbmd0aCgpLCBub3Jt
YWxDb2xvciwgZm9udCwgY29udGV4dCwgdGl0bGVSZWN0KTsKLSAgICBjdXJyZW50UG9zID0gZHJh
d1N1YnN0cmluZyhub2RlVGl0bGVSdW4sIGN1cnJlbnRQb3MsIHB4U3RyaW5nLmxlbmd0aCgpICsg
dGltZXNTdHJpbmcubGVuZ3RoKCksIHB4QW5kQm9yZGVyQ29sb3IsIGZvbnQsIGNvbnRleHQsIHRp
dGxlUmVjdCk7Ci0gICAgY3VycmVudFBvcyA9IGRyYXdTdWJzdHJpbmcobm9kZVRpdGxlUnVuLCBj
dXJyZW50UG9zLCBoZWlnaHROdW1iZXJQYXJ0Lmxlbmd0aCgpLCBub3JtYWxDb2xvciwgZm9udCwg
Y29udGV4dCwgdGl0bGVSZWN0KTsKLSAgICBkcmF3U3Vic3RyaW5nKG5vZGVUaXRsZVJ1biwgY3Vy
cmVudFBvcywgcHhTdHJpbmcubGVuZ3RoKCksIHB4QW5kQm9yZGVyQ29sb3IsIGZvbnQsIGNvbnRl
eHQsIHRpdGxlUmVjdCk7Ci19Ci0KIHN0YXRpYyB2b2lkIGNvbnRlbnRzUXVhZFRvUGFnZShjb25z
dCBGcmFtZVZpZXcqIG1haW5WaWV3LCBjb25zdCBGcmFtZVZpZXcqIHZpZXcsIEZsb2F0UXVhZCYg
cXVhZCkKIHsKICAgICBxdWFkLnNldFAxKHZpZXctPmNvbnRlbnRzVG9Sb290Vmlldyhyb3VuZGVk
SW50UG9pbnQocXVhZC5wMSgpKSkpOwpAQCAtMzcwLDcgKzk5LDcgQEAgc3RhdGljIHZvaWQgY29u
dGVudHNRdWFkVG9QYWdlKGNvbnN0IEZyYW1lVmlldyogbWFpblZpZXcsIGNvbnN0IEZyYW1lVmll
dyogdmlldywKICAgICBxdWFkICs9IG1haW5WaWV3LT5zY3JvbGxPZmZzZXQoKTsKIH0KIAotc3Rh
dGljIHZvaWQgZ2V0T3JEcmF3Tm9kZUhpZ2hsaWdodChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IE5vZGUqIG5vZGUsIGNvbnN0IEhpZ2hsaWdodENvbmZpZyYgaGlnaGxpZ2h0Q29uZmlnLCBIaWdo
bGlnaHQqIGhpZ2hsaWdodCkKK3N0YXRpYyB2b2lkIGJ1aWxkTm9kZUhpZ2hsaWdodChOb2RlKiBu
b2RlLCBjb25zdCBIaWdobGlnaHRDb25maWcmIGhpZ2hsaWdodENvbmZpZywgSGlnaGxpZ2h0KiBo
aWdobGlnaHQpCiB7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVy
KCk7CiAgICAgRnJhbWUqIGNvbnRhaW5pbmdGcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1l
KCk7CkBAIC0zNzgsNiArMTA3LDcgQEAgc3RhdGljIHZvaWQgZ2V0T3JEcmF3Tm9kZUhpZ2hsaWdo
dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIE5vZGUqIG5vZGUsIGNvbnN0IEgKICAgICBpZiAo
IXJlbmRlcmVyIHx8ICFjb250YWluaW5nRnJhbWUpCiAgICAgICAgIHJldHVybjsKIAorICAgIGhp
Z2hsaWdodC0+c2V0Q29sb3JzKGhpZ2hsaWdodENvbmZpZyk7CiAgICAgRnJhbWVWaWV3KiBjb250
YWluaW5nVmlldyA9IGNvbnRhaW5pbmdGcmFtZS0+dmlldygpOwogICAgIEZyYW1lVmlldyogbWFp
blZpZXcgPSBjb250YWluaW5nRnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKTsKICAg
ICBJbnRSZWN0IGJvdW5kaW5nQm94ID0gcGl4ZWxTbmFwcGVkSW50UmVjdChjb250YWluaW5nVmll
dy0+Y29udGVudHNUb1Jvb3RWaWV3KHJlbmRlcmVyLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgp
KSk7CkBAIC0zODUsOSArMTE1LDYgQEAgc3RhdGljIHZvaWQgZ2V0T3JEcmF3Tm9kZUhpZ2hsaWdo
dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIE5vZGUqIG5vZGUsIGNvbnN0IEgKICAgICBJbnRS
ZWN0IHRpdGxlQW5jaG9yQm94ID0gYm91bmRpbmdCb3g7CiAKICAgICBGbG9hdFJlY3QgdmlzaWJs
ZVJlY3QgPSBtYWluVmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7Ci0gICAgLy8gRG9uJ3QgdHJh
bnNsYXRlIHRoZSBjb250ZXh0IGlmIHRoZSBmcmFtZSBpcyByZW5kZXJlZCBpbiBwYWdlIGNvb3Jk
aW5hdGVzLgotICAgIGlmIChjb250ZXh0ICYmICFtYWluVmlldy0+ZGVsZWdhdGVzU2Nyb2xsaW5n
KCkpCi0gICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgtdmlzaWJsZVJlY3QueCgpLCAtdmlzaWJs
ZVJlY3QueSgpKTsKIAogICAgIC8vIFJlbmRlclNWR1Jvb3Qgc2hvdWxkIGJlIGhpZ2hsaWdodGVk
IHRocm91Z2ggdGhlIGlzQm94KCkgY29kZSBwYXRoLCBhbGwgb3RoZXIgU1ZHIGVsZW1lbnRzIHNo
b3VsZCBqdXN0IGR1bXAgdGhlaXIgYWJzb2x1dGVRdWFkcygpLgogI2lmIEVOQUJMRShTVkcpCkBA
IC00MDEsOSArMTI4LDYgQEAgc3RhdGljIHZvaWQgZ2V0T3JEcmF3Tm9kZUhpZ2hsaWdodChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIE5vZGUqIG5vZGUsIGNvbnN0IEgKICAgICAgICAgcmVuZGVy
ZXItPmFic29sdXRlUXVhZHMoaGlnaGxpZ2h0LT5xdWFkcyk7CiAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgaGlnaGxpZ2h0LT5xdWFkcy5zaXplKCk7ICsraSkKICAgICAgICAgICAgIGNv
bnRlbnRzUXVhZFRvUGFnZShtYWluVmlldywgY29udGFpbmluZ1ZpZXcsIGhpZ2hsaWdodC0+cXVh
ZHNbaV0pOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICAgICAgZHJhd0hpZ2hsaWdo
dEZvclNWR1JlbmRlcmVyKGNvbnRleHQsIGhpZ2hsaWdodC0+cXVhZHMsIGhpZ2hsaWdodENvbmZp
Zyk7CiAgICAgfSBlbHNlIGlmIChyZW5kZXJlci0+aXNCb3goKSB8fCByZW5kZXJlci0+aXNSZW5k
ZXJJbmxpbmUoKSkgewogICAgICAgICBMYXlvdXRSZWN0IGNvbnRlbnRCb3g7CiAgICAgICAgIExh
eW91dFJlY3QgcGFkZGluZ0JveDsKQEAgLTQ1NSwzOSArMTc5LDE3IEBAIHN0YXRpYyB2b2lkIGdl
dE9yRHJhd05vZGVIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBOb2RlKiBub2Rl
LCBjb25zdCBICiAgICAgICAgIGhpZ2hsaWdodC0+cXVhZHMuYXBwZW5kKGFic0JvcmRlclF1YWQp
OwogICAgICAgICBoaWdobGlnaHQtPnF1YWRzLmFwcGVuZChhYnNQYWRkaW5nUXVhZCk7CiAgICAg
ICAgIGhpZ2hsaWdodC0+cXVhZHMuYXBwZW5kKGFic0NvbnRlbnRRdWFkKTsKLQotICAgICAgICBp
ZiAoY29udGV4dCkKLSAgICAgICAgICAgIGRyYXdIaWdobGlnaHRGb3JCb3goY29udGV4dCwgYWJz
Q29udGVudFF1YWQsIGFic1BhZGRpbmdRdWFkLCBhYnNCb3JkZXJRdWFkLCBhYnNNYXJnaW5RdWFk
LCBoaWdobGlnaHRDb25maWcpOwogICAgIH0KLQotICAgIC8vIERyYXcgbm9kZSB0aXRsZSBpZiBu
ZWNlc3NhcnkuCi0KLSAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKGNvbnRleHQgJiYgaGlnaGxpZ2h0Q29uZmlnLnNob3dJbmZvKQotICAg
ICAgICBkcmF3RWxlbWVudFRpdGxlKGNvbnRleHQsIG5vZGUsIHJlbmRlcmVyLCBwaXhlbFNuYXBw
ZWRJbnRSZWN0KGJvdW5kaW5nQm94KSwgcGl4ZWxTbmFwcGVkSW50UmVjdCh0aXRsZUFuY2hvckJv
eCksIHZpc2libGVSZWN0LCBjb250YWluaW5nRnJhbWUtPnNldHRpbmdzKCkpOwogfQogCi1zdGF0
aWMgdm9pZCBnZXRPckRyYXdSZWN0SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
UGFnZSogcGFnZSwgSW50UmVjdCogcmVjdCwgY29uc3QgSGlnaGxpZ2h0Q29uZmlnJiBoaWdobGln
aHRDb25maWcsIEhpZ2hsaWdodCAqaGlnaGxpZ2h0KQorc3RhdGljIHZvaWQgYnVpbGRSZWN0SGln
aGxpZ2h0KFBhZ2UqIHBhZ2UsIEludFJlY3QqIHJlY3QsIGNvbnN0IEhpZ2hsaWdodENvbmZpZyYg
aGlnaGxpZ2h0Q29uZmlnLCBIaWdobGlnaHQgKmhpZ2hsaWdodCkKIHsKICAgICBpZiAoIXBhZ2Up
CiAgICAgICAgIHJldHVybjsKLQorICAgIGhpZ2hsaWdodC0+c2V0Q29sb3JzKGhpZ2hsaWdodENv
bmZpZyk7CiAgICAgRmxvYXRSZWN0IGhpZ2hsaWdodFJlY3QoKnJlY3QpOwotCiAgICAgaGlnaGxp
Z2h0LT50eXBlID0gSGlnaGxpZ2h0VHlwZVJlY3RzOwogICAgIGhpZ2hsaWdodC0+cXVhZHMuYXBw
ZW5kKGhpZ2hsaWdodFJlY3QpOwotCi0gICAgaWYgKGNvbnRleHQpIHsKLSAgICAgICAgRnJhbWVW
aWV3KiB2aWV3ID0gcGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKTsKLSAgICAgICAgaWYgKCF2aWV3
LT5kZWxlZ2F0ZXNTY3JvbGxpbmcoKSkgewotICAgICAgICAgICAgRmxvYXRSZWN0IHZpc2libGVS
ZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7Ci0gICAgICAgICAgICBjb250ZXh0LT50
cmFuc2xhdGUoLXZpc2libGVSZWN0LngoKSwgLXZpc2libGVSZWN0LnkoKSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBkcmF3T3V0bGluZWRRdWFkKGNvbnRleHQsIGhpZ2hsaWdodFJlY3QsIGhpZ2hs
aWdodENvbmZpZy5jb250ZW50LCBoaWdobGlnaHRDb25maWcuY29udGVudE91dGxpbmUpOwotICAg
IH0KIH0KIAogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCkBAIC01MDQsMTIgKzIwNiwxMiBAQCBJ
bnNwZWN0b3JPdmVybGF5Ojp+SW5zcGVjdG9yT3ZlcmxheSgpCiAKIHZvaWQgSW5zcGVjdG9yT3Zl
cmxheTo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewotICAgIGRyYXdOb2RlSGln
aGxpZ2h0KCZjb250ZXh0KTsKLSAgICBkcmF3UmVjdEhpZ2hsaWdodCgmY29udGV4dCk7Ci0KLSAg
ICBpZiAobV9wYXVzZWRJbkRlYnVnZ2VyTWVzc2FnZS5pc051bGwoKSkKKyAgICBpZiAobV9wYXVz
ZWRJbkRlYnVnZ2VyTWVzc2FnZS5pc051bGwoKSAmJiAhbV9oaWdobGlnaHROb2RlICYmICFtX2hp
Z2hsaWdodFJlY3QpCiAgICAgICAgIHJldHVybjsKLSAgICBkcmF3T3ZlcmxheVBhZ2UoJmNvbnRl
eHQpOworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsK
KyAgICBGcmFtZVZpZXcqIHZpZXcgPSBvdmVybGF5UGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygp
OworICAgIEFTU0VSVCghdmlldy0+bmVlZHNMYXlvdXQoKSk7CisgICAgdmlldy0+cGFpbnQoJmNv
bnRleHQsIEludFJlY3QoMCwgMCwgdmlldy0+d2lkdGgoKSwgdmlldy0+aGVpZ2h0KCkpKTsKIH0K
IAogdm9pZCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3T3V0bGluZShHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IExheW91dFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKQEAgLTUy
NCwxOSArMjI2LDE1IEBAIHZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6Z2V0SGlnaGxpZ2h0KEhpZ2hs
aWdodCogaGlnaGxpZ2h0KSBjb25zdAogICAgICAgICByZXR1cm47CiAKICAgICBoaWdobGlnaHQt
PnR5cGUgPSBIaWdobGlnaHRUeXBlUmVjdHM7Ci0gICAgaWYgKG1faGlnaGxpZ2h0Tm9kZSkgewot
ICAgICAgICBoaWdobGlnaHQtPnNldENvbG9ycyhtX25vZGVIaWdobGlnaHRDb25maWcpOwotICAg
ICAgICBnZXRPckRyYXdOb2RlSGlnaGxpZ2h0KDAsIG1faGlnaGxpZ2h0Tm9kZS5nZXQoKSwgbV9u
b2RlSGlnaGxpZ2h0Q29uZmlnLCBoaWdobGlnaHQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGhp
Z2hsaWdodC0+c2V0Q29sb3JzKG1fcmVjdEhpZ2hsaWdodENvbmZpZyk7Ci0gICAgICAgIGdldE9y
RHJhd1JlY3RIaWdobGlnaHQoMCwgbV9wYWdlLCBtX2hpZ2hsaWdodFJlY3QuZ2V0KCksIG1fcmVj
dEhpZ2hsaWdodENvbmZpZywgaGlnaGxpZ2h0KTsKLSAgICB9CisgICAgaWYgKG1faGlnaGxpZ2h0
Tm9kZSkKKyAgICAgICAgYnVpbGROb2RlSGlnaGxpZ2h0KG1faGlnaGxpZ2h0Tm9kZS5nZXQoKSwg
bV9ub2RlSGlnaGxpZ2h0Q29uZmlnLCBoaWdobGlnaHQpOworICAgIGVsc2UKKyAgICAgICAgYnVp
bGRSZWN0SGlnaGxpZ2h0KG1fcGFnZSwgbV9oaWdobGlnaHRSZWN0LmdldCgpLCBtX3JlY3RIaWdo
bGlnaHRDb25maWcsIGhpZ2hsaWdodCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6c2V0
UGF1c2VkSW5EZWJ1Z2dlck1lc3NhZ2UoY29uc3QgU3RyaW5nKiBtZXNzYWdlKQogewogICAgIG1f
cGF1c2VkSW5EZWJ1Z2dlck1lc3NhZ2UgPSBtZXNzYWdlID8gKm1lc3NhZ2UgOiBTdHJpbmcoKTsK
LSAgICBldmFsdWF0ZUluT3ZlcmxheSgic2V0UGF1c2VkSW5EZWJ1Z2dlck1lc3NhZ2UiLCBtX3Bh
dXNlZEluRGVidWdnZXJNZXNzYWdlKTsKICAgICB1cGRhdGUoKTsKIH0KIApAQCAtNTc3LDM0ICsy
NzUsMTIzIEBAIHZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6dXBkYXRlKCkKICAgICBGcmFtZVZpZXcq
IG92ZXJsYXlWaWV3ID0gb3ZlcmxheVBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKTsKICAgICBJ
bnRSZWN0IHZpc2libGVSZWN0ID0gZW5jbG9zaW5nSW50UmVjdCh2aWV3LT52aXNpYmxlQ29udGVu
dFJlY3QoKSk7CiAgICAgb3ZlcmxheVZpZXctPnJlc2l6ZSh2aXNpYmxlUmVjdC53aWR0aCgpLCB2
aXNpYmxlUmVjdC5oZWlnaHQoKSk7CisKKyAgICAvLyBDbGVhciBjYW52YXMgYW5kIHBhaW50IHRo
aW5ncy4KKyAgICByZXNldCgpOworCisgICAgZHJhd05vZGVIaWdobGlnaHQoKTsKKyAgICBkcmF3
UmVjdEhpZ2hsaWdodCgpOworICAgIGRyYXdQYXVzZWRJbkRlYnVnZ2VyTWVzc2FnZSgpOworCisg
ICAgLy8gUG9zaXRpb24gRE9NIGVsZW1lbnRzLgorICAgIG92ZXJsYXlQYWdlKCktPm1haW5GcmFt
ZSgpLT5kb2N1bWVudCgpLT5yZWNhbGNTdHlsZShOb2RlOjpGb3JjZSk7CiAgICAgaWYgKG92ZXJs
YXlWaWV3LT5uZWVkc0xheW91dCgpKQogICAgICAgICBvdmVybGF5Vmlldy0+bGF5b3V0KCk7CisK
KyAgICAvLyBLaWNrIHBhaW50LgogICAgIG1fY2xpZW50LT5oaWdobGlnaHQoKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3Tm9kZUhpZ2hsaWdodChHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQpCitzdGF0aWMgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JQb2lu
dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBvYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIG9iamVjdC0+c2V0TnVt
YmVyKCJ4IiwgcG9pbnQueCgpKTsKKyAgICBvYmplY3QtPnNldE51bWJlcigieSIsIHBvaW50Lnko
KSk7CisgICAgcmV0dXJuIG9iamVjdC5yZWxlYXNlKCk7Cit9CisKK3N0YXRpYyBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IGJ1aWxkQXJyYXlGb3JRdWFkKGNvbnN0IEZsb2F0UXVhZCYgcXVhZCkKK3sK
KyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFycmF5ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0
ZSgpOworICAgIGFycmF5LT5wdXNoT2JqZWN0KGJ1aWxkT2JqZWN0Rm9yUG9pbnQocXVhZC5wMSgp
KSk7CisgICAgYXJyYXktPnB1c2hPYmplY3QoYnVpbGRPYmplY3RGb3JQb2ludChxdWFkLnAyKCkp
KTsKKyAgICBhcnJheS0+cHVzaE9iamVjdChidWlsZE9iamVjdEZvclBvaW50KHF1YWQucDMoKSkp
OworICAgIGFycmF5LT5wdXNoT2JqZWN0KGJ1aWxkT2JqZWN0Rm9yUG9pbnQocXVhZC5wNCgpKSk7
CisgICAgcmV0dXJuIGFycmF5LnJlbGVhc2UoKTsKK30KKworc3RhdGljIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9ySGlnaGxpZ2h0KEZyYW1lVmlldyogbWFpblZpZXcsIGNv
bnN0IEhpZ2hsaWdodCYgaGlnaGxpZ2h0KQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IG9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBhcnJheSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGhpZ2hsaWdodC5xdWFkcy5zaXplKCk7ICsraSkKKyAgICAgICAgYXJyYXkt
PnB1c2hBcnJheShidWlsZEFycmF5Rm9yUXVhZChoaWdobGlnaHQucXVhZHNbaV0pKTsKKyAgICBv
YmplY3QtPnNldEFycmF5KCJxdWFkcyIsIGFycmF5LnJlbGVhc2UoKSk7CisgICAgb2JqZWN0LT5z
ZXRTdHJpbmcoImNvbnRlbnRDb2xvciIsIGhpZ2hsaWdodC5jb250ZW50Q29sb3Iuc2VyaWFsaXpl
ZCgpKTsKKyAgICBvYmplY3QtPnNldFN0cmluZygiY29udGVudE91dGxpbmVDb2xvciIsIGhpZ2hs
aWdodC5jb250ZW50T3V0bGluZUNvbG9yLnNlcmlhbGl6ZWQoKSk7CisgICAgb2JqZWN0LT5zZXRT
dHJpbmcoInBhZGRpbmdDb2xvciIsIGhpZ2hsaWdodC5wYWRkaW5nQ29sb3Iuc2VyaWFsaXplZCgp
KTsKKyAgICBvYmplY3QtPnNldFN0cmluZygiYm9yZGVyQ29sb3IiLCBoaWdobGlnaHQuYm9yZGVy
Q29sb3Iuc2VyaWFsaXplZCgpKTsKKyAgICBvYmplY3QtPnNldFN0cmluZygibWFyZ2luQ29sb3Ii
LCBoaWdobGlnaHQubWFyZ2luQ29sb3Iuc2VyaWFsaXplZCgpKTsKKworICAgIEZsb2F0UmVjdCB2
aXNpYmxlUmVjdCA9IG1haW5WaWV3LT52aXNpYmxlQ29udGVudFJlY3QoKTsKKyAgICBpZiAoIW1h
aW5WaWV3LT5kZWxlZ2F0ZXNTY3JvbGxpbmcoKSkgeworICAgICAgICBvYmplY3QtPnNldE51bWJl
cigic2Nyb2xsWCIsIHZpc2libGVSZWN0LngoKSk7CisgICAgICAgIG9iamVjdC0+c2V0TnVtYmVy
KCJzY3JvbGxZIiwgdmlzaWJsZVJlY3QueSgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBvYmpl
Y3QtPnNldE51bWJlcigic2Nyb2xsWCIsIDApOworICAgICAgICBvYmplY3QtPnNldE51bWJlcigi
c2Nyb2xsWSIsIDApOworICAgIH0KKworICAgIHJldHVybiBvYmplY3QucmVsZWFzZSgpOworfQor
Cit2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmRyYXdOb2RlSGlnaGxpZ2h0KCkKIHsKICAgICBpZiAo
IW1faGlnaGxpZ2h0Tm9kZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSGlnaGxpZ2h0IGhpZ2hs
aWdodDsKLSAgICBnZXRPckRyYXdOb2RlSGlnaGxpZ2h0KGNvbnRleHQsIG1faGlnaGxpZ2h0Tm9k
ZS5nZXQoKSwgbV9ub2RlSGlnaGxpZ2h0Q29uZmlnLCAmaGlnaGxpZ2h0KTsKKyAgICBidWlsZE5v
ZGVIaWdobGlnaHQobV9oaWdobGlnaHROb2RlLmdldCgpLCBtX25vZGVIaWdobGlnaHRDb25maWcs
ICZoaWdobGlnaHQpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGhpZ2hsaWdodE9iamVj
dCA9IGJ1aWxkT2JqZWN0Rm9ySGlnaGxpZ2h0KG1fcGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKSwg
aGlnaGxpZ2h0KTsKKworICAgIE5vZGUqIG5vZGUgPSBtX2hpZ2hsaWdodE5vZGUuZ2V0KCk7Cisg
ICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiBtX25vZGVIaWdobGlnaHRDb25maWcuc2hv
d0luZm8gJiYgbm9kZS0+cmVuZGVyZXIoKSAmJiBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpKSB7
CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGVsZW1lbnRJbmZvID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudChu
b2RlKTsKKyAgICAgICAgYm9vbCBpc1hIVE1MID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+aXNYSFRN
TERvY3VtZW50KCk7CisgICAgICAgIGVsZW1lbnRJbmZvLT5zZXRTdHJpbmcoInRhZ05hbWUiLCBp
c1hIVE1MID8gZWxlbWVudC0+bm9kZU5hbWUoKSA6IGVsZW1lbnQtPm5vZGVOYW1lKCkubG93ZXIo
KSk7CisgICAgICAgIGVsZW1lbnRJbmZvLT5zZXRTdHJpbmcoImlkVmFsdWUiLCBlbGVtZW50LT5n
ZXRJZEF0dHJpYnV0ZSgpKTsKKyAgICAgICAgSGFzaFNldDxBdG9taWNTdHJpbmc+IHVzZWRDbGFz
c05hbWVzOworICAgICAgICBpZiAoZWxlbWVudC0+aGFzQ2xhc3MoKSAmJiBlbGVtZW50LT5pc1N0
eWxlZEVsZW1lbnQoKSkgeworICAgICAgICAgICAgU3RyaW5nIGNsYXNzTmFtZXM7CisgICAgICAg
ICAgICBjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBjbGFzc05hbWVzU3RyaW5nID0gc3RhdGljX2Nh
c3Q8U3R5bGVkRWxlbWVudCo+KGVsZW1lbnQpLT5jbGFzc05hbWVzKCk7CisgICAgICAgICAgICBz
aXplX3QgY2xhc3NOYW1lQ291bnQgPSBjbGFzc05hbWVzU3RyaW5nLnNpemUoKTsKKyAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2xhc3NOYW1lQ291bnQ7ICsraSkgeworICAgICAg
ICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY2xhc3NOYW1lID0gY2xhc3NOYW1lc1N0cmlu
Z1tpXTsKKyAgICAgICAgICAgICAgICBpZiAodXNlZENsYXNzTmFtZXMuY29udGFpbnMoY2xhc3NO
YW1lKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgdXNl
ZENsYXNzTmFtZXMuYWRkKGNsYXNzTmFtZSk7CisgICAgICAgICAgICAgICAgY2xhc3NOYW1lcyAr
PSBtYWtlU3RyaW5nKCIuIiwgY2xhc3NOYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsZW1lbnRJbmZvLT5zZXRTdHJpbmcoImNsYXNzTmFtZSIsIGNsYXNzTmFtZXMpOworICAgICAg
ICB9CisKKyAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7
CisgICAgICAgIEZyYW1lKiBjb250YWluaW5nRnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFt
ZSgpOworICAgICAgICBGcmFtZVZpZXcqIGNvbnRhaW5pbmdWaWV3ID0gY29udGFpbmluZ0ZyYW1l
LT52aWV3KCk7CisgICAgICAgIEludFJlY3QgYm91bmRpbmdCb3ggPSBwaXhlbFNuYXBwZWRJbnRS
ZWN0KGNvbnRhaW5pbmdWaWV3LT5jb250ZW50c1RvUm9vdFZpZXcocmVuZGVyZXItPmFic29sdXRl
Qm91bmRpbmdCb3hSZWN0KCkpKTsKKyAgICAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIG1vZGVs
T2JqZWN0ID0gcmVuZGVyZXItPmlzQm94TW9kZWxPYmplY3QoKSA/IHRvUmVuZGVyQm94TW9kZWxP
YmplY3QocmVuZGVyZXIpIDogMDsKKyAgICAgICAgZWxlbWVudEluZm8tPnNldFN0cmluZygibm9k
ZVdpZHRoIiwgU3RyaW5nOjpudW1iZXIobW9kZWxPYmplY3QgPyBhZGp1c3RGb3JBYnNvbHV0ZVpv
b20obW9kZWxPYmplY3QtPnBpeGVsU25hcHBlZE9mZnNldFdpZHRoKCksIG1vZGVsT2JqZWN0KSA6
IGJvdW5kaW5nQm94LndpZHRoKCkpKTsKKyAgICAgICAgZWxlbWVudEluZm8tPnNldFN0cmluZygi
bm9kZUhlaWdodCIsIFN0cmluZzo6bnVtYmVyKG1vZGVsT2JqZWN0ID8gYWRqdXN0Rm9yQWJzb2x1
dGVab29tKG1vZGVsT2JqZWN0LT5waXhlbFNuYXBwZWRPZmZzZXRIZWlnaHQoKSwgbW9kZWxPYmpl
Y3QpIDogYm91bmRpbmdCb3guaGVpZ2h0KCkpKTsKKyAgICAgICAgaGlnaGxpZ2h0T2JqZWN0LT5z
ZXRPYmplY3QoImVsZW1lbnRJbmZvIiwgZWxlbWVudEluZm8ucmVsZWFzZSgpKTsKKyAgICB9Cisg
ICAgZXZhbHVhdGVJbk92ZXJsYXkoImRyYXdOb2RlSGlnaGxpZ2h0IiwgaGlnaGxpZ2h0T2JqZWN0
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3UmVjdEhpZ2hsaWdodChHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQpCit2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmRyYXdSZWN0SGlnaGxp
Z2h0KCkKIHsKICAgICBpZiAoIW1faGlnaGxpZ2h0UmVjdCkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgSGlnaGxpZ2h0IGhpZ2hsaWdodDsKLSAgICBnZXRPckRyYXdSZWN0SGlnaGxpZ2h0KGNvbnRl
eHQsIG1fcGFnZSwgbV9oaWdobGlnaHRSZWN0LmdldCgpLCBtX3JlY3RIaWdobGlnaHRDb25maWcs
ICZoaWdobGlnaHQpOworICAgIGJ1aWxkUmVjdEhpZ2hsaWdodChtX3BhZ2UsIG1faGlnaGxpZ2h0
UmVjdC5nZXQoKSwgbV9yZWN0SGlnaGxpZ2h0Q29uZmlnLCAmaGlnaGxpZ2h0KTsKKyAgICBldmFs
dWF0ZUluT3ZlcmxheSgiaGlnaGxpZ2h0UmVjdCIsIGJ1aWxkT2JqZWN0Rm9ySGlnaGxpZ2h0KG1f
cGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKSwgaGlnaGxpZ2h0KSk7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yT3ZlcmxheTo6ZHJhd092ZXJsYXlQYWdlKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKK3Zv
aWQgSW5zcGVjdG9yT3ZlcmxheTo6ZHJhd1BhdXNlZEluRGVidWdnZXJNZXNzYWdlKCkKIHsKLSAg
ICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNvbnRleHQpOwotICAgIEZy
YW1lVmlldyogdmlldyA9IG92ZXJsYXlQYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCk7Ci0gICAg
dmlldy0+cGFpbnQoY29udGV4dCwgSW50UmVjdCgwLCAwLCB2aWV3LT53aWR0aCgpLCB2aWV3LT5o
ZWlnaHQoKSkpOworICAgIGlmICghbV9wYXVzZWRJbkRlYnVnZ2VyTWVzc2FnZS5pc051bGwoKSkK
KyAgICAgICAgZXZhbHVhdGVJbk92ZXJsYXkoImRyYXdQYXVzZWRJbkRlYnVnZ2VyTWVzc2FnZSIs
IG1fcGF1c2VkSW5EZWJ1Z2dlck1lc3NhZ2UpOwogfQogCiBQYWdlKiBJbnNwZWN0b3JPdmVybGF5
OjpvdmVybGF5UGFnZSgpCkBAIC02MjEsMTMgKzQwOCw2IEBAIFBhZ2UqIEluc3BlY3Rvck92ZXJs
YXk6Om92ZXJsYXlQYWdlKCkKICAgICBTZXR0aW5ncyogb3ZlcmxheVNldHRpbmdzID0gbV9vdmVy
bGF5UGFnZS0+c2V0dGluZ3MoKTsKIAogICAgIG92ZXJsYXlTZXR0aW5ncy0+c2V0U3RhbmRhcmRG
b250RmFtaWx5KHNldHRpbmdzLT5zdGFuZGFyZEZvbnRGYW1pbHkoKSk7Ci0jaWYgT1MoV0lORE9X
UykKLSAgICBvdmVybGF5U2V0dGluZ3MtPnNldEZpeGVkRm9udEZhbWlseSgiQ29uc29sYXMiKTsK
LSNlbGlmIE9TKE1BQ19PU19YKQotICAgIG92ZXJsYXlTZXR0aW5ncy0+c2V0Rml4ZWRGb250RmFt
aWx5KCJNZW5sbyIpOwotI2VsaWYgT1MoVU5JWCkKLSAgICBvdmVybGF5U2V0dGluZ3MtPnNldEZp
eGVkRm9udEZhbWlseSgiZGVqYXZ1IHNhbnMgbW9ubyIpOwotI2VuZGlmCiAgICAgb3ZlcmxheVNl
dHRpbmdzLT5zZXRTZXJpZkZvbnRGYW1pbHkoc2V0dGluZ3MtPnNlcmlmRm9udEZhbWlseSgpKTsK
ICAgICBvdmVybGF5U2V0dGluZ3MtPnNldFNhbnNTZXJpZkZvbnRGYW1pbHkoc2V0dGluZ3MtPnNh
bnNTZXJpZkZvbnRGYW1pbHkoKSk7CiAgICAgb3ZlcmxheVNldHRpbmdzLT5zZXRDdXJzaXZlRm9u
dEZhbWlseShzZXR0aW5ncy0+Y3Vyc2l2ZUZvbnRGYW1pbHkoKSk7CkBAIC02MzUsOCArNDE1LDYg
QEAgUGFnZSogSW5zcGVjdG9yT3ZlcmxheTo6b3ZlcmxheVBhZ2UoKQogICAgIG92ZXJsYXlTZXR0
aW5ncy0+c2V0UGljdG9ncmFwaEZvbnRGYW1pbHkoc2V0dGluZ3MtPnBpY3RvZ3JhcGhGb250RmFt
aWx5KCkpOwogICAgIG92ZXJsYXlTZXR0aW5ncy0+c2V0TWluaW11bUZvbnRTaXplKHNldHRpbmdz
LT5taW5pbXVtRm9udFNpemUoKSk7CiAgICAgb3ZlcmxheVNldHRpbmdzLT5zZXRNaW5pbXVtTG9n
aWNhbEZvbnRTaXplKHNldHRpbmdzLT5taW5pbXVtTG9naWNhbEZvbnRTaXplKCkpOwotICAgIG92
ZXJsYXlTZXR0aW5ncy0+c2V0RGVmYXVsdEZvbnRTaXplKHNldHRpbmdzLT5kZWZhdWx0Rm9udFNp
emUoKSk7Ci0gICAgb3ZlcmxheVNldHRpbmdzLT5zZXREZWZhdWx0Rml4ZWRGb250U2l6ZShzZXR0
aW5ncy0+ZGVmYXVsdEZpeGVkRm9udFNpemUoKSk7CiAgICAgb3ZlcmxheVNldHRpbmdzLT5zZXRN
ZWRpYUVuYWJsZWQoZmFsc2UpOwogICAgIG92ZXJsYXlTZXR0aW5ncy0+c2V0U2NyaXB0RW5hYmxl
ZCh0cnVlKTsKICAgICBvdmVybGF5U2V0dGluZ3MtPnNldFBsdWdpbnNFbmFibGVkKGZhbHNlKTsK
QEAgLTY1Myw5ICs0MzEsMjIgQEAgUGFnZSogSW5zcGVjdG9yT3ZlcmxheTo6b3ZlcmxheVBhZ2Uo
KQogICAgIGxvYWRlci0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+d3JpdGVyKCktPmFkZERhdGEo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oSW5zcGVjdG9yT3ZlcmxheVBhZ2VfaHRtbCks
IHNpemVvZihJbnNwZWN0b3JPdmVybGF5UGFnZV9odG1sKSk7CiAgICAgbG9hZGVyLT5hY3RpdmVE
b2N1bWVudExvYWRlcigpLT53cml0ZXIoKS0+ZW5kKCk7CiAKKyNpZiBPUyhXSU5ET1dTKQorICAg
IGV2YWx1YXRlSW5PdmVybGF5KCJzZXRQbGF0Zm9ybSIsICJ3aW5kb3dzIik7CisjZWxpZiBPUyhN
QUNfT1NfWCkKKyAgICBldmFsdWF0ZUluT3ZlcmxheSgic2V0UGxhdGZvcm0iLCAibWFjIik7Cisj
ZWxpZiBPUyhVTklYKQorICAgIGV2YWx1YXRlSW5PdmVybGF5KCJzZXRQbGF0Zm9ybSIsICJsaW51
eCIpOworI2VuZGlmCisKICAgICByZXR1cm4gbV9vdmVybGF5UGFnZS5nZXQoKTsKIH0KIAordm9p
ZCBJbnNwZWN0b3JPdmVybGF5OjpyZXNldCgpCit7CisgICAgZXZhbHVhdGVJbk92ZXJsYXkoInJl
c2V0IiwgIiIpOworfQorCiB2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmV2YWx1YXRlSW5PdmVybGF5
KGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50KQogewogICAgIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gY29tbWFuZCA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsK
QEAgLTY2NCw2ICs0NTUsMTQgQEAgdm9pZCBJbnNwZWN0b3JPdmVybGF5OjpldmFsdWF0ZUluT3Zl
cmxheShjb25zdCBTdHJpbmcmIG1ldGhvZCwgY29uc3QgU3RyaW5nJiBhcmcKICAgICBvdmVybGF5
UGFnZSgpLT5tYWluRnJhbWUoKS0+c2NyaXB0KCktPmV2YWx1YXRlKFNjcmlwdFNvdXJjZUNvZGUo
bWFrZVN0cmluZygiZGlzcGF0Y2goIiwgY29tbWFuZC0+dG9KU09OU3RyaW5nKCksICIpIikpKTsK
IH0KIAordm9pZCBJbnNwZWN0b3JPdmVybGF5OjpldmFsdWF0ZUluT3ZlcmxheShjb25zdCBTdHJp
bmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gYXJndW1lbnQpCit7CisgICAg
UmVmUHRyPEluc3BlY3RvckFycmF5PiBjb21tYW5kID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgp
OworICAgIGNvbW1hbmQtPnB1c2hTdHJpbmcobWV0aG9kKTsKKyAgICBjb21tYW5kLT5wdXNoVmFs
dWUoYXJndW1lbnQpOworICAgIG92ZXJsYXlQYWdlKCktPm1haW5GcmFtZSgpLT5zY3JpcHQoKS0+
ZXZhbHVhdGUoU2NyaXB0U291cmNlQ29kZShtYWtlU3RyaW5nKCJkaXNwYXRjaCgiLCBjb21tYW5k
LT50b0pTT05TdHJpbmcoKSwgIikiKSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
ICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JPdmVybGF5LmgKaW5kZXggYWJjOGJjZTk3ZmY2Y2NhNTNkOGQ4YzkyYzgxZDZmZDEx
YjZiMGJiMi4uNzJkNTQzMThhY2I0MjM1OGZkZGY0Mzk2YThjODhiZTIxZGUzYzRhYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5oCkBAIC00NCw2ICs0NCw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENvbG9yOwogY2xhc3MgR3JhcGhpY3NDb250
ZXh0OwogY2xhc3MgSW5zcGVjdG9yQ2xpZW50OworY2xhc3MgSW5zcGVjdG9yVmFsdWU7CiBjbGFz
cyBJbnRSZWN0OwogY2xhc3MgTm9kZTsKIGNsYXNzIFBhZ2U7CkBAIC02NiwxMiArNjcsMTQgQEAg
c3RydWN0IEhpZ2hsaWdodCB7CiAgICAgdm9pZCBzZXRDb2xvcnMoY29uc3QgSGlnaGxpZ2h0Q29u
ZmlnJiBoaWdobGlnaHRDb25maWcpCiAgICAgewogICAgICAgICBjb250ZW50Q29sb3IgPSBoaWdo
bGlnaHRDb25maWcuY29udGVudDsKKyAgICAgICAgY29udGVudE91dGxpbmVDb2xvciA9IGhpZ2hs
aWdodENvbmZpZy5jb250ZW50T3V0bGluZTsKICAgICAgICAgcGFkZGluZ0NvbG9yID0gaGlnaGxp
Z2h0Q29uZmlnLnBhZGRpbmc7CiAgICAgICAgIGJvcmRlckNvbG9yID0gaGlnaGxpZ2h0Q29uZmln
LmJvcmRlcjsKICAgICAgICAgbWFyZ2luQ29sb3IgPSBoaWdobGlnaHRDb25maWcubWFyZ2luOwog
ICAgIH0KIAogICAgIENvbG9yIGNvbnRlbnRDb2xvcjsKKyAgICBDb2xvciBjb250ZW50T3V0bGlu
ZUNvbG9yOwogICAgIENvbG9yIHBhZGRpbmdDb2xvcjsKICAgICBDb2xvciBib3JkZXJDb2xvcjsK
ICAgICBDb2xvciBtYXJnaW5Db2xvcjsKQEAgLTkwLDYgKzkzLDcgQEAgcHVibGljOgogICAgIH0K
ICAgICB+SW5zcGVjdG9yT3ZlcmxheSgpOwogCisgICAgdm9pZCB1cGRhdGUoKTsKICAgICB2b2lk
IHBhaW50KEdyYXBoaWNzQ29udGV4dCYpOwogICAgIHZvaWQgZHJhd091dGxpbmUoR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgTGF5b3V0UmVjdCYsIGNvbnN0IENvbG9yJik7CiAgICAgdm9pZCBnZXRI
aWdobGlnaHQoSGlnaGxpZ2h0KikgY29uc3Q7CkBAIC0xMDUsMTIgKzEwOSwxMyBAQCBwdWJsaWM6
CiBwcml2YXRlOgogICAgIEluc3BlY3Rvck92ZXJsYXkoUGFnZSosIEluc3BlY3RvckNsaWVudCop
OwogCi0gICAgdm9pZCB1cGRhdGUoKTsKLSAgICB2b2lkIGRyYXdOb2RlSGlnaGxpZ2h0KEdyYXBo
aWNzQ29udGV4dCopOwotICAgIHZvaWQgZHJhd1JlY3RIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0
Kik7Ci0gICAgdm9pZCBkcmF3T3ZlcmxheVBhZ2UoR3JhcGhpY3NDb250ZXh0Kik7CisgICAgdm9p
ZCBkcmF3Tm9kZUhpZ2hsaWdodCgpOworICAgIHZvaWQgZHJhd1JlY3RIaWdobGlnaHQoKTsKKyAg
ICB2b2lkIGRyYXdQYXVzZWRJbkRlYnVnZ2VyTWVzc2FnZSgpOwogICAgIFBhZ2UqIG92ZXJsYXlQ
YWdlKCk7CisgICAgdm9pZCByZXNldCgpOwogICAgIHZvaWQgZXZhbHVhdGVJbk92ZXJsYXkoY29u
c3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQpOworICAgIHZvaWQgZXZh
bHVhdGVJbk92ZXJsYXkoY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9y
VmFsdWU+IGFyZ3VtZW50KTsKIAogICAgIFBhZ2UqIG1fcGFnZTsKICAgICBJbnNwZWN0b3JDbGll
bnQqIG1fY2xpZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3Rvck92ZXJsYXlQYWdlLmh0bWwgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
T3ZlcmxheVBhZ2UuaHRtbAppbmRleCBmYTY4MmMzMjA0OGM1YzcxOTBjMjVmMzdiM2Y3NDViYjM0
YmM5OTFmLi5iNzAzOTg1MjQyZjMyMjgyZjEyYThmMDgxNTZjMDgwN2YyZWIzZTRhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheVBhZ2UuaHRtbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheVBhZ2UuaHRtbApA
QCAtMzQsNiArMzQsMjEgQEAgYm9keSB7CiAgICAgcGFkZGluZzogMDsKIH0KIAorYm9keS5wbGF0
Zm9ybS1tYWMgeworICAgIGZvbnQtc2l6ZTogMTFweDsKKyAgICBmb250LWZhbWlseTogTWVubG8s
IE1vbmFjbzsKK30KKworYm9keS5wbGF0Zm9ybS13aW5kb3dzIHsKKyAgICBmb250LXNpemU6IDEy
cHg7CisgICAgZm9udC1mYW1pbHk6IENvbnNvbGFzLCBMdWNpZGEgQ29uc29sZTsKK30KKworYm9k
eS5wbGF0Zm9ybS1saW51eCB7CisgICAgZm9udC1zaXplOiAxMXB4OworICAgIGZvbnQtZmFtaWx5
OiBkZWphdnUgc2FucyBtb25vOworfQorCiAuZmlsbCB7CiAgICAgcG9zaXRpb246IGFic29sdXRl
OwogICAgIHRvcDogMDsKQEAgLTQ3LDMxICs2MiwzNDcgQEAgYm9keSB7CiB9CiAKIC5tZXNzYWdl
LWxpbmUgeworICAgIG1hcmdpbjogMTBweCAwOwogICAgIHRleHQtYWxpZ246IGNlbnRlcjsKIH0K
IAogLm1lc3NhZ2UtYm94IHsKLSAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgIGJhY2tn
cm91bmQtY29sb3I6IHJnYigyNTUsIDI1NSwgMTk0KTsKICAgICBib3JkZXI6IDFweCBzb2xpZCBy
Z2IoMTI4LCAxMjgsIDEyOCk7CiAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwotICAgIG1hcmdp
bjogMTBweCAwOwogICAgIHBhZGRpbmc6IDJweCA0cHg7CiB9CiAKKy5weCB7CisgICAgY29sb3I6
IHJnYigxMjgsIDEyOCwgMTI4KTsKK30KKworI2VsZW1lbnQtdGl0bGUgeworICAgIHBvc2l0aW9u
OiBhYnNvbHV0ZTsKKyAgICB6LWluZGV4OiAxMDsKK30KKworI3RhZy1uYW1lIHsKKyAgICBjb2xv
cjogcmdiKDEzNiwgMTgsIDEyOCk7Cit9CisKKyNub2RlLWlkIHsKKyAgICBjb2xvcjogcmdiKDI2
LCAyNiwgMTY2KTsKK30KIDwvc3R5bGU+CiA8c2NyaXB0PgotZnVuY3Rpb24gc2V0UGF1c2VkSW5E
ZWJ1Z2dlck1lc3NhZ2UobWVzc2FnZSkKK2NvbnN0IGxpZ2h0R3JpZENvbG9yID0gInJnYmEoMCww
LDAsMC4yKSI7Citjb25zdCBkYXJrR3JpZENvbG9yID0gInJnYmEoMCwwLDAsMC41KSI7Citjb25z
dCB0cmFuc3BhcmVudENvbG9yID0gInJnYmEoMCwgMCwgMCwgMCkiOworCitmdW5jdGlvbiBkcmF3
UGF1c2VkSW5EZWJ1Z2dlck1lc3NhZ2UobWVzc2FnZSkKIHsKICAgICB2YXIgcGF1c2VkSW5EZWJ1
Z2dlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwYXVzZWQtaW4tZGVidWdnZXIiKTsKLSAg
ICBpZiAobWVzc2FnZSkgewotICAgICAgICBwYXVzZWRJbkRlYnVnZ2VyLnRleHRDb250ZW50ID0g
bWVzc2FnZTsKLSAgICAgICAgcGF1c2VkSW5EZWJ1Z2dlci5zdHlsZS52aXNpYmlsaXR5ID0gInZp
c2libGUiOwotICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoImRpbW1lZCIpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIHBhdXNlZEluRGVidWdnZXIuc3R5bGUudmlzaWJpbGl0eSA9
ICJoaWRkZW4iOwotICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoImRpbW1l
ZCIpOworICAgIHBhdXNlZEluRGVidWdnZXIudGV4dENvbnRlbnQgPSBtZXNzYWdlOworICAgIHBh
dXNlZEluRGVidWdnZXIuc3R5bGUudmlzaWJpbGl0eSA9ICJ2aXNpYmxlIjsKKyAgICBkb2N1bWVu
dC5ib2R5LmNsYXNzTGlzdC5hZGQoImRpbW1lZCIpOworfQorCitmdW5jdGlvbiBfZHJhd0dyaWQo
aGlnaGxpZ2h0KQoreworICAgIGNvbnRleHQuc2F2ZSgpOworCisgICAgdmFyIHdpZHRoID0gY2Fu
dmFzLndpZHRoOworICAgIHZhciBoZWlnaHQgPSBjYW52YXMuaGVpZ2h0OworCisgICAgY29udGV4
dC5maWxsU3R5bGUgPSAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpIjsKKyAgICBjb250ZXh0LmZp
bGxSZWN0KDAsIDAsIGNhbnZhcy53aWR0aCwgMTUpOworICAgIGNvbnRleHQuZmlsbFJlY3QoMCwg
MTUsIDE1LCBjYW52YXMuaGVpZ2h0KTsKKyAgICAKKyAgICBjb250ZXh0LnRyYW5zbGF0ZSgtaGln
aGxpZ2h0LnNjcm9sbFgsIDAuNSAtIGhpZ2hsaWdodC5zY3JvbGxZKTsKKyAgICBjb250ZXh0Lmxp
bmVXaWR0aCA9IDE7CisKKyAgICBjb25zdCBncmlkU3ViU3RlcCA9IDU7CisgICAgY29uc3QgZ3Jp
ZFN0ZXAgPSA1MDsKKworICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSBsaWdodEdyaWRDb2xvcjsK
KworICAgIGZvciAodmFyIHkgPSBncmlkU3ViU3RlcDsgeSA8IGhpZ2hsaWdodC5zY3JvbGxZICsg
aGVpZ2h0OyB5ICs9IGdyaWRTdWJTdGVwKSB7CisgICAgICAgIGlmICghKHkgJSBncmlkU3RlcCkp
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTsKKyAg
ICAgICAgY29udGV4dC5tb3ZlVG8oaGlnaGxpZ2h0LnNjcm9sbFgsIHkpOworICAgICAgICBjb250
ZXh0LmxpbmVUbyhoaWdobGlnaHQuc2Nyb2xsWCArIGdyaWRTdWJTdGVwLCB5KTsKKyAgICAgICAg
Y29udGV4dC5zdHJva2UoKTsKICAgICB9CisKKyAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gZGFy
a0dyaWRDb2xvcjsKKyAgICBjb250ZXh0LmZpbGxTdHlsZSA9IGRhcmtHcmlkQ29sb3I7CisgICAg
Zm9yICh2YXIgeSA9IGdyaWRTdGVwOyB5IDwgaGVpZ2h0ICsgaGlnaGxpZ2h0LnNjcm9sbFk7IHkg
Kz0gZ3JpZFN0ZXApIHsKKyAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTsKKyAgICAgICAgY29u
dGV4dC5tb3ZlVG8oaGlnaGxpZ2h0LnNjcm9sbFgsIHkpOworICAgICAgICB2YXIgbWFya0xlbmd0
aCA9ICh5ICUgKGdyaWRTdGVwICogMikpID8gNSA6IDg7CisgICAgICAgIGNvbnRleHQubGluZVRv
KGhpZ2hsaWdodC5zY3JvbGxYICsgbWFya0xlbmd0aCwgeSk7CisgICAgICAgIGNvbnRleHQuc3Ry
b2tlKCk7CisgICAgICAgIGlmICghKHkgJSAoZ3JpZFN0ZXAgKiAyKSkpIHsKKyAgICAgICAgICAg
IGNvbnRleHQuc2F2ZSgpOworICAgICAgICAgICAgY29udGV4dC50cmFuc2xhdGUoaGlnaGxpZ2h0
LnNjcm9sbFgsIHkpOworICAgICAgICAgICAgY29udGV4dC5yb3RhdGUoLU1hdGguUEkgLyAyKTsK
KyAgICAgICAgICAgIGNvbnRleHQuZmlsbFRleHQoeSwgMiwgMTMpOworICAgICAgICAgICAgY29u
dGV4dC5yZXN0b3JlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb250ZXh0LnRyYW5zbGF0
ZSgwLjUsIC0wLjUpOworCisgICAgY29udGV4dC5zdHJva2VTdHlsZSA9IGxpZ2h0R3JpZENvbG9y
OworICAgIGZvciAodmFyIHggPSBncmlkU3ViU3RlcDsgeCA8IGhpZ2hsaWdodC5zY3JvbGxYICsg
d2lkdGg7IHggKz0gZ3JpZFN1YlN0ZXApIHsKKyAgICAgICAgaWYgKCEoeCAlIGdyaWRTdGVwKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpOworICAg
ICAgICBjb250ZXh0Lm1vdmVUbyh4LCBoaWdobGlnaHQuc2Nyb2xsWSk7CisgICAgICAgIGNvbnRl
eHQubGluZVRvKHgsIGhpZ2hsaWdodC5zY3JvbGxZICsgZ3JpZFN1YlN0ZXApOworICAgICAgICBj
b250ZXh0LnN0cm9rZSgpOworICAgIH0KKworICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSBkYXJr
R3JpZENvbG9yOworICAgIGNvbnRleHQuZmlsbFN0eWxlID0gZGFya0dyaWRDb2xvcjsKKyAgICBm
b3IgKHZhciB4ID0gZ3JpZFN0ZXA7IHggPCB3aWR0aCArIGhpZ2hsaWdodC5zY3JvbGxYOyB4ICs9
IGdyaWRTdGVwKSB7CisgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7CisgICAgICAgIGNvbnRl
eHQubW92ZVRvKHgsIGhpZ2hsaWdodC5zY3JvbGxZKTsKKyAgICAgICAgdmFyIG1hcmtMZW5ndGgg
PSAoeCAlIChncmlkU3RlcCAqIDIpKSA/IDUgOiA4OworICAgICAgICBjb250ZXh0LmxpbmVUbyh4
LCBoaWdobGlnaHQuc2Nyb2xsWSArIG1hcmtMZW5ndGgpOworICAgICAgICBjb250ZXh0LnN0cm9r
ZSgpOworICAgICAgICBpZiAoISh4ICUgKGdyaWRTdGVwICogMikpKQorICAgICAgICAgICAgY29u
dGV4dC5maWxsVGV4dCh4LCB4ICsgMiwgaGlnaGxpZ2h0LnNjcm9sbFkgKyAxMyk7CisgICAgfQor
ICAgIGNvbnRleHQucmVzdG9yZSgpOworfQorCitmdW5jdGlvbiBxdWFkVG9QYXRoKHF1YWQpCit7
CisgICAgY29udGV4dC5iZWdpblBhdGgoKTsKKyAgICBjb250ZXh0Lm1vdmVUbyhxdWFkWzBdLngs
IHF1YWRbMF0ueSk7CisgICAgY29udGV4dC5saW5lVG8ocXVhZFsxXS54LCBxdWFkWzFdLnkpOwor
ICAgIGNvbnRleHQubGluZVRvKHF1YWRbMl0ueCwgcXVhZFsyXS55KTsKKyAgICBjb250ZXh0Lmxp
bmVUbyhxdWFkWzNdLngsIHF1YWRbM10ueSk7CisgICAgY29udGV4dC5jbG9zZVBhdGgoKTsKKyAg
ICByZXR1cm4gY29udGV4dDsKK30KKworZnVuY3Rpb24gZHJhd091dGxpbmVkUXVhZChxdWFkLCBm
aWxsQ29sb3IsIG91dGxpbmVDb2xvcikKK3sKKyAgICBjb250ZXh0LnNhdmUoKTsKKyAgICBjb250
ZXh0LmxpbmVXaWR0aCA9IDI7CisgICAgcXVhZFRvUGF0aChxdWFkKS5jbGlwKCk7CisgICAgY29u
dGV4dC5maWxsU3R5bGUgPSBmaWxsQ29sb3I7CisgICAgY29udGV4dC5maWxsKCk7CisgICAgaWYg
KG91dGxpbmVDb2xvcikgeworICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gb3V0bGluZUNv
bG9yOworICAgICAgICBjb250ZXh0LnN0cm9rZSgpOworICAgIH0KKyAgICBjb250ZXh0LnJlc3Rv
cmUoKTsKK30KKworZnVuY3Rpb24gZHJhd091dGxpbmVkUXVhZFdpdGhDbGlwKHF1YWQsIGNsaXBR
dWFkLCBmaWxsQ29sb3IpCit7CisgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJjYW52YXMiKTsKKyAgICBjb250ZXh0LmZpbGxTdHlsZSA9IGZpbGxDb2xvcjsKKyAgICBj
b250ZXh0LnNhdmUoKTsKKyAgICBjb250ZXh0LmxpbmVXaWR0aCA9IDA7CisgICAgcXVhZFRvUGF0
aChxdWFkKS5maWxsKCk7CisgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAi
ZGVzdGluYXRpb24tb3V0IjsKKyAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICJyZWQiOworICAgIHF1
YWRUb1BhdGgoY2xpcFF1YWQpLmZpbGwoKTsKKyAgICBjb250ZXh0LnJlc3RvcmUoKTsKK30KKwor
ZnVuY3Rpb24gcXVhZEVxdWFscyhxdWFkMSwgcXVhZDIpCit7CisgICAgcmV0dXJuIHF1YWQxWzBd
LnggPT09IHF1YWQyWzBdLnggJiYgcXVhZDFbMF0ueSA9PT0gcXVhZDJbMF0ueSAmJgorICAgICAg
ICBxdWFkMVsxXS54ID09PSBxdWFkMlsxXS54ICYmIHF1YWQxWzFdLnkgPT09IHF1YWQyWzFdLnkg
JiYKKyAgICAgICAgcXVhZDFbMl0ueCA9PT0gcXVhZDJbMl0ueCAmJiBxdWFkMVsyXS55ID09PSBx
dWFkMlsyXS55ICYmCisgICAgICAgIHF1YWQxWzNdLnggPT09IHF1YWQyWzNdLnggJiYgcXVhZDFb
M10ueSA9PT0gcXVhZDJbM10ueTsKK30KKworZnVuY3Rpb24gcmVzZXQoKQoreworICAgIHdpbmRv
dy5jYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisgICAgd2luZG93
LmNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKKyAgICBjYW52YXMud2lkdGggPSBk
b2N1bWVudC5ib2R5Lm9mZnNldFdpZHRoOworICAgIGNhbnZhcy5oZWlnaHQgPSBkb2N1bWVudC5i
b2R5Lm9mZnNldEhlaWdodDsKKworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwYXVzZWQt
aW4tZGVidWdnZXIiKS5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7CisgICAgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImVsZW1lbnQtdGl0bGUiKS5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRl
biI7CisgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCJkaW1tZWQiKTsKKyAgICBs
b2coZG9jdW1lbnQuYm9keS5jbGFzc05hbWUpOworfQorCitmdW5jdGlvbiBfZHJhd0VsZW1lbnRU
aXRsZShoaWdobGlnaHQpCit7CisgICAgdmFyIGVsZW1lbnRJbmZvID0gaGlnaGxpZ2h0LmVsZW1l
bnRJbmZvOworICAgIGlmICghaGlnaGxpZ2h0LmVsZW1lbnRJbmZvKQorICAgICAgICByZXR1cm47
CisKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGFnLW5hbWUiKS50ZXh0Q29udGVudCA9
IGVsZW1lbnRJbmZvLnRhZ05hbWU7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm5vZGUt
aWQiKS50ZXh0Q29udGVudCA9IGVsZW1lbnRJbmZvLm5vZGVJZCA/ICIjIiArIGVsZW1lbnRJbmZv
Lm5vZGVJZCA6ICIiOworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjbGFzcy1uYW1lIiku
dGV4dENvbnRlbnQgPSBlbGVtZW50SW5mby5jbGFzc05hbWUgfHwgIiI7CisgICAgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoIm5vZGUtd2lkdGgiKS50ZXh0Q29udGVudCA9IGVsZW1lbnRJbmZvLm5v
ZGVXaWR0aDsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibm9kZS1oZWlnaHQiKS50ZXh0
Q29udGVudCA9IGVsZW1lbnRJbmZvLm5vZGVIZWlnaHQ7CisgICAgdmFyIGVsZW1lbnRUaXRsZSA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJlbGVtZW50LXRpdGxlIik7CisKKyAgICB2YXIgbWFy
Z2luUXVhZCA9IGhpZ2hsaWdodC5xdWFkc1swXTsKKworICAgIHZhciB0aXRsZVdpZHRoID0gZWxl
bWVudFRpdGxlLm9mZnNldFdpZHRoICsgNjsKKyAgICB2YXIgdGl0bGVIZWlnaHQgPSBlbGVtZW50
VGl0bGUub2Zmc2V0SGVpZ2h0ICsgNDsKKworICAgIHZhciBhbmNob3JUb3AgPSBtYXJnaW5RdWFk
WzBdLnk7CisgICAgdmFyIGFuY2hvckJvdHRvbSA9IG1hcmdpblF1YWRbM10ueQorCisgICAgY29u
c3QgYXJyb3dIZWlnaHQgPSA3OworICAgIHZhciByZW5kZXJBcnJvd1VwID0gZmFsc2U7CisgICAg
dmFyIHJlbmRlckFycm93RG93biA9IGZhbHNlOworCisgICAgdmFyIGJveFggPSBNYXRoLm1heCgy
LCBtYXJnaW5RdWFkWzBdLngpOworICAgIGlmIChib3hYICsgdGl0bGVXaWR0aCA+IGNhbnZhcy53
aWR0aCkKKyAgICAgICAgYm94WCA9IGNhbnZhcy53aWR0aCAtIHRpdGxlV2lkdGggLSAyOworCisg
ICAgdmFyIGJveFk7CisgICAgaWYgKGFuY2hvclRvcCA+IGNhbnZhcy5oZWlnaHQpIHsKKyAgICAg
ICAgYm94WSA9IGNhbnZhcy5oZWlnaHQgLSB0aXRsZUhlaWdodCAtIGFycm93SGVpZ2h0OworICAg
ICAgICByZW5kZXJBcnJvd0Rvd24gPSB0cnVlOworICAgIH0gZWxzZSBpZiAoYW5jaG9yQm90dG9t
IDwgMCkgeworICAgICAgICBib3hZID0gYXJyb3dIZWlnaHQ7CisgICAgICAgIHJlbmRlckFycm93
VXAgPSB0cnVlOworICAgIH0gZWxzZSBpZiAoYW5jaG9yQm90dG9tICsgdGl0bGVIZWlnaHQgKyBh
cnJvd0hlaWdodCA8IGNhbnZhcy5oZWlnaHQpIHsKKyAgICAgICAgYm94WSA9IGFuY2hvckJvdHRv
bSArIGFycm93SGVpZ2h0IC0gNDsKKyAgICAgICAgcmVuZGVyQXJyb3dVcCA9IHRydWU7CisgICAg
fSBlbHNlIGlmIChhbmNob3JUb3AgLSB0aXRsZUhlaWdodCAtIGFycm93SGVpZ2h0ID4gMCkgewor
ICAgICAgICBib3hZID0gYW5jaG9yVG9wIC0gdGl0bGVIZWlnaHQgLSBhcnJvd0hlaWdodCArIDM7
CisgICAgICAgIHJlbmRlckFycm93RG93biA9IHRydWU7CisgICAgfSBlbHNlCisgICAgICAgIGJv
eFkgPSBhcnJvd0hlaWdodDsKKworICAgIGNvbnRleHQuc2F2ZSgpOworICAgIGNvbnRleHQudHJh
bnNsYXRlKDAuNSwgMC41KTsKKyAgICBjb250ZXh0LmJlZ2luUGF0aCgpOworICAgIGNvbnRleHQu
bW92ZVRvKGJveFgsIGJveFkpOworICAgIGlmIChyZW5kZXJBcnJvd1VwKSB7CisgICAgICAgIGNv
bnRleHQubGluZVRvKGJveFggKyAyICogYXJyb3dIZWlnaHQsIGJveFkpOworICAgICAgICBjb250
ZXh0LmxpbmVUbyhib3hYICsgMyAqIGFycm93SGVpZ2h0LCBib3hZIC0gYXJyb3dIZWlnaHQpOwor
ICAgICAgICBjb250ZXh0LmxpbmVUbyhib3hYICsgNCAqIGFycm93SGVpZ2h0LCBib3hZKTsKKyAg
ICB9CisgICAgY29udGV4dC5saW5lVG8oYm94WCArIHRpdGxlV2lkdGgsIGJveFkpOworICAgIGNv
bnRleHQubGluZVRvKGJveFggKyB0aXRsZVdpZHRoLCBib3hZICsgdGl0bGVIZWlnaHQpOworICAg
IGlmIChyZW5kZXJBcnJvd0Rvd24pIHsKKyAgICAgICAgY29udGV4dC5saW5lVG8oYm94WCArIDQg
KiBhcnJvd0hlaWdodCwgYm94WSArIHRpdGxlSGVpZ2h0KTsKKyAgICAgICAgY29udGV4dC5saW5l
VG8oYm94WCArIDMgKiBhcnJvd0hlaWdodCwgYm94WSArIHRpdGxlSGVpZ2h0ICsgYXJyb3dIZWln
aHQpOworICAgICAgICBjb250ZXh0LmxpbmVUbyhib3hYICsgMiAqIGFycm93SGVpZ2h0LCBib3hZ
ICsgdGl0bGVIZWlnaHQpOworICAgIH0KKyAgICBjb250ZXh0LmxpbmVUbyhib3hYLCBib3hZICsg
dGl0bGVIZWlnaHQpOworICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7CisgICAgY29udGV4dC5maWxs
U3R5bGUgPSAicmdiKDI1NSwgMjU1LCAxOTQpIjsKKyAgICBjb250ZXh0LmZpbGwoKTsKKyAgICBj
b250ZXh0LnN0cm9rZVN0eWxlID0gInJnYigxMjgsIDEyOCwgMTI4KSI7CisgICAgY29udGV4dC5z
dHJva2UoKTsKKworICAgIGNvbnRleHQucmVzdG9yZSgpOworCisgICAgZWxlbWVudFRpdGxlLnN0
eWxlLnZpc2liaWxpdHkgPSAidmlzaWJsZSI7CisgICAgZWxlbWVudFRpdGxlLnN0eWxlLnRvcCA9
IChib3hZICsgMykgKyAicHgiOworICAgIGVsZW1lbnRUaXRsZS5zdHlsZS5sZWZ0ID0gKGJveFgg
KyAzKSArICJweCI7Cit9CisKK2Z1bmN0aW9uIF9kcmF3UnVsZXJzKGhpZ2hsaWdodCkKK3sKKyAg
ICBjb250ZXh0LnNhdmUoKTsKKyAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gInJnYmEoMTI4LCAx
MjgsIDEyOCwgMC4zKSI7CisgICAgY29udGV4dC5saW5lV2lkdGggPSAxOworICAgIGNvbnRleHQu
dHJhbnNsYXRlKDAuNSwgMC41KTsKKyAgICB2YXIgbGVmdG1vc3RYRm9yWSA9IHt9OworICAgIHZh
ciB0b3Btb3N0WUZvclggPSB7fTsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGlnaGxpZ2h0
LnF1YWRzLmxlbmd0aDsgKytpKSB7CisgICAgICAgIHZhciBxdWFkID0gaGlnaGxpZ2h0LnF1YWRz
W2ldOworICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHF1YWQubGVuZ3RoOyArK2opIHsKKyAg
ICAgICAgICAgIHZhciB4ID0gcXVhZFtqXS54OworICAgICAgICAgICAgdmFyIHkgPSBxdWFkW2pd
Lnk7CisgICAgICAgICAgICB0b3Btb3N0WUZvclhbTWF0aC5yb3VuZCh4KV0gPSBNYXRoLm1pbih0
b3Btb3N0WUZvclhbeF0gfHwgTnVtYmVyLk1BWF9WQUxVRSwgTWF0aC5yb3VuZChxdWFkW2pdLnkp
KTsKKyAgICAgICAgICAgIGxlZnRtb3N0WEZvcllbTWF0aC5yb3VuZCh5KV0gPSBNYXRoLm1pbihs
ZWZ0bW9zdFhGb3JZW3ldIHx8IE51bWJlci5NQVhfVkFMVUUsIE1hdGgucm91bmQocXVhZFtqXS54
KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHZhciB5IGluIGxlZnRtb3N0WEZvclkp
IHsKKyAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTsKKyAgICAgICAgY29udGV4dC5tb3ZlVG8o
MCwgeSk7CisgICAgICAgIGNvbnRleHQubGluZVRvKGxlZnRtb3N0WEZvcllbeV0sIHkpOworICAg
ICAgICBjb250ZXh0LnN0cm9rZSgpOworICAgIH0KKworICAgIGZvciAodmFyIHggaW4gdG9wbW9z
dFlGb3JYKSB7CisgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7CisgICAgICAgIGNvbnRleHQu
bW92ZVRvKHgsIDApOworICAgICAgICBjb250ZXh0LmxpbmVUbyh4LCB0b3Btb3N0WUZvclhbeF0p
OworICAgICAgICBjb250ZXh0LnN0cm9rZSgpOworICB9CisKKyAgICBjb250ZXh0LnJlc3RvcmUo
KTsKK30KKworZnVuY3Rpb24gZHJhd05vZGVIaWdobGlnaHQoaGlnaGxpZ2h0KQoreworICAgIF9k
cmF3R3JpZChoaWdobGlnaHQpOworCisgICAgaWYgKCFoaWdobGlnaHQucXVhZHMubGVuZ3RoKQor
ICAgICAgICByZXR1cm47CisKKyAgICBjb250ZXh0LnNhdmUoKTsKKworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgaGlnaGxpZ2h0LnF1YWRzLmxlbmd0aDsgKytpKSB7CisgICAgICAgIHZhciBxdWFk
ID0gaGlnaGxpZ2h0LnF1YWRzW2ldOworICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHF1YWQu
bGVuZ3RoOyArK2opIHsKKyAgICAgICAgICAgIHF1YWRbal0ueCAtPSBoaWdobGlnaHQuc2Nyb2xs
WDsKKyAgICAgICAgICAgIHF1YWRbal0ueSAtPSBoaWdobGlnaHQuc2Nyb2xsWTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHZhciBxdWFkcyA9IGhpZ2hsaWdodC5xdWFkcy5zbGljZSgpOworICAg
IHZhciBjb250ZW50UXVhZCA9IHF1YWRzLnBvcCgpOworICAgIHZhciBwYWRkaW5nUXVhZCA9IHF1
YWRzLnBvcCgpOworICAgIHZhciBib3JkZXJRdWFkID0gcXVhZHMucG9wKCk7CisgICAgdmFyIG1h
cmdpblF1YWQgPSBxdWFkcy5wb3AoKTsKKworICAgIHZhciBoYXNDb250ZW50ID0gY29udGVudFF1
YWQgJiYgaGlnaGxpZ2h0LmNvbnRlbnRDb2xvciAhPT0gdHJhbnNwYXJlbnRDb2xvciB8fCBoaWdo
bGlnaHQuY29udGVudE91dGxpbmVDb2xvciAhPT0gdHJhbnNwYXJlbnRDb2xvcjsKKyAgICB2YXIg
aGFzUGFkZGluZyA9IHBhZGRpbmdRdWFkICYmIGhpZ2hsaWdodC5wYWRkaW5nQ29sb3IgIT09IHRy
YW5zcGFyZW50Q29sb3I7CisgICAgdmFyIGhhc0JvcmRlciA9IGJvcmRlclF1YWQgJiYgaGlnaGxp
Z2h0LmJvcmRlckNvbG9yICE9PSB0cmFuc3BhcmVudENvbG9yOworICAgIHZhciBoYXNNYXJnaW4g
PSBtYXJnaW5RdWFkICYmIGhpZ2hsaWdodC5tYXJnaW5Db2xvciAhPT0gdHJhbnNwYXJlbnRDb2xv
cjsKKworICAgIHZhciBjbGlwUXVhZDsKKyAgICBpZiAoaGFzTWFyZ2luICYmICghaGFzQm9yZGVy
IHx8ICFxdWFkRXF1YWxzKG1hcmdpblF1YWQsIGJvcmRlclF1YWQpKSkgeworICAgICAgICBkcmF3
T3V0bGluZWRRdWFkV2l0aENsaXAobWFyZ2luUXVhZCwgYm9yZGVyUXVhZCwgaGlnaGxpZ2h0Lm1h
cmdpbkNvbG9yKTsKKyAgICAgICAgY2xpcFF1YWQgPSBib3JkZXJRdWFkOworICAgIH0KKyAgICBp
ZiAoaGFzQm9yZGVyICYmICghaGFzUGFkZGluZyB8fCAhcXVhZEVxdWFscyhib3JkZXJRdWFkLCBw
YWRkaW5nUXVhZCkpKSB7CisgICAgICAgIGRyYXdPdXRsaW5lZFF1YWRXaXRoQ2xpcChib3JkZXJR
dWFkLCBwYWRkaW5nUXVhZCwgaGlnaGxpZ2h0LmJvcmRlckNvbG9yKTsKKyAgICAgICAgY2xpcFF1
YWQgPSBwYWRkaW5nUXVhZDsKKyAgICB9CisgICAgaWYgKGhhc1BhZGRpbmcgJiYgKCFoYXNDb250
ZW50IHx8ICFxdWFkRXF1YWxzKHBhZGRpbmdRdWFkLCBjb250ZW50UXVhZCkpKSB7CisgICAgICAg
IGRyYXdPdXRsaW5lZFF1YWRXaXRoQ2xpcChwYWRkaW5nUXVhZCwgY29udGVudFF1YWQsIGhpZ2hs
aWdodC5wYWRkaW5nQ29sb3IpOworICAgICAgICBjbGlwUXVhZCA9IGNvbnRlbnRRdWFkOworICAg
IH0KKyAgICBpZiAoaGFzQ29udGVudCkKKyAgICAgICAgZHJhd091dGxpbmVkUXVhZChjb250ZW50
UXVhZCwgaGlnaGxpZ2h0LmNvbnRlbnRDb2xvciwgaGlnaGxpZ2h0LmNvbnRlbnRPdXRsaW5lQ29s
b3IpOworCisgICAgX2RyYXdFbGVtZW50VGl0bGUoaGlnaGxpZ2h0KTsKKyAgICBfZHJhd1J1bGVy
cyhoaWdobGlnaHQpOworICAgIGNvbnRleHQucmVzdG9yZSgpOworfQorCitmdW5jdGlvbiBkcmF3
UmVjdEhpZ2hsaWdodChoaWdobGlnaHQpCit7CisgICAgY29udGV4dC5zYXZlKCk7CisgICAgZHJh
d091dGxpbmVkUXVhZChoaWdobGlnaHQucXVhZHNbMF0sIGhpZ2hsaWdodC5jb250ZW50Q29sb3Is
IGhpZ2hsaWdodC5jb250ZW50T3V0bGluZUNvbG9yKTsKKyAgICBjb250ZXh0LnJlc3RvcmUoKTsK
K30KKworZnVuY3Rpb24gc2V0UGxhdGZvcm0ocGxhdGZvcm0pCit7CisgICAgZG9jdW1lbnQuYm9k
eS5jbGFzc0xpc3QuYWRkKCJwbGF0Zm9ybS0iICsgcGxhdGZvcm0pOwogfQogCiBmdW5jdGlvbiBk
aXNwYXRjaChtZXNzYWdlKQpAQCAtNzksOSArNDEwLDIzIEBAIGZ1bmN0aW9uIGRpc3BhdGNoKG1l
c3NhZ2UpCiAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IG1lc3NhZ2Uuc2hpZnQoKTsKICAgICB3aW5k
b3dbZnVuY3Rpb25OYW1lXS5hcHBseShudWxsLCBtZXNzYWdlKTsKIH0KKworZnVuY3Rpb24gbG9n
KHRleHQpCit7CisgICAgdmFyIGxvZ0VudHJ5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2
Iik7CisgICAgbG9nRW50cnkudGV4dENvbnRlbnQgPSB0ZXh0OworICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJsb2ciKS5hcHBlbmRDaGlsZChsb2dFbnRyeSk7Cit9CisKIDwvc2NyaXB0Pgog
PC9oZWFkPgogPGJvZHkgY2xhc3M9ImZpbGwiPgogPGRpdiBjbGFzcz0ibWVzc2FnZS1saW5lIj48
c3BhbiBjbGFzcz0ibWVzc2FnZS1ib3giIGlkPSJwYXVzZWQtaW4tZGVidWdnZXIiPjwvc3Bhbj48
L2Rpdj4KIDwvYm9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgY2xhc3M9ImZpbGwiPjwvY2FudmFz
PgorPGRpdiBpZD0iZWxlbWVudC10aXRsZSI+CisgIDxzcGFuIGlkPSJ0YWctbmFtZSI+PC9zcGFu
PjxzcGFuIGlkPSJub2RlLWlkIj48L3NwYW4+PHNwYW4gaWQ9ImNsYXNzLW5hbWUiPjwvc3Bhbj4K
KyAgPHNwYW4gaWQ9Im5vZGUtd2lkdGgiPjwvc3Bhbj48c3BhbiBjbGFzcz0icHgiPnB4PC9zcGFu
PjxzcGFuIGNsYXNzPSJweCI+ICYjeEQ3OyA8L3NwYW4+PHNwYW4gaWQ9Im5vZGUtaGVpZ2h0Ij48
L3NwYW4+PHNwYW4gY2xhc3M9InB4Ij5weDwvc3Bhbj4KKzwvZGl2PgorPGRpdiBpZD0ibG9nIj48
L2Rpdj4KIDwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JQYWdlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBh
Z2VBZ2VudC5jcHAKaW5kZXggOTljYTJmODc0OTU3YWI1MDgzYTg0NTQyNzA0ZDRlNDUxYmYyNTdm
NS4uNzA3Yzc1MTVlNWQ2OGYyNDQ3NjMxYmZlYmRiOTY3MTdkNzYyYTBhMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKQEAgLTkxNCw2ICs5
MTQsMTIgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpZExheW91dCgpCiAKICAgICBpZiAo
Y3VycmVudFdpZHRoICYmIGN1cnJlbnRIZWlnaHQpCiAgICAgICAgIG1fY2xpZW50LT5hdXRvWm9v
bVBhZ2VUb0ZpdFdpZHRoKCk7CisgICAgbV9vdmVybGF5LT51cGRhdGUoKTsKK30KKwordm9pZCBJ
bnNwZWN0b3JQYWdlQWdlbnQ6OmRpZFNjcm9sbCgpCit7CisgICAgbV9vdmVybGF5LT51cGRhdGUo
KTsKIH0KIAogUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UGFnZTo6RnJhbWU+IEluc3BlY3RvclBh
Z2VBZ2VudDo6YnVpbGRPYmplY3RGb3JGcmFtZShGcmFtZSogZnJhbWUpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmgKaW5kZXggN2I5MTc3OWY5N2FlMzhi
NmMyMWFjMTMzNGUxZTM1ODg2NGI1ZmRkMC4uM2U0ZWMxMTAxMTRlNWMwNjc4ZTI1YWZhYjBhZjM4
NzAxN2NmZjNlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clBhZ2VBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdl
QWdlbnQuaApAQCAtMTM3LDYgKzEzNyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHdpbGxQYWludChH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXlvdXRSZWN0Jik7CiAgICAgdm9pZCBkaWRQYWludCgp
OwogICAgIHZvaWQgZGlkTGF5b3V0KCk7CisgICAgdm9pZCBkaWRTY3JvbGwoKTsKIAogICAgIC8v
IEluc3BlY3RvciBDb250cm9sbGVyIEFQSQogICAgIHZpcnR1YWwgdm9pZCBzZXRGcm9udGVuZChJ
bnNwZWN0b3JGcm9udGVuZCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJv
bWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCmluZGV4IDQzNjIyMmQ4ODUy
ZWQyZmQxMGQ0ZjNlNzg2NjI1N2U0NWJhOTUzNjcuLmNjYTRhMDkyNWY3ZGUyYmU5YjgwMWZlNDBi
ZDE5MDExZDIyMWJlNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKQEAgLTk1LDYgKzk1LDcgQEAg
dm9pZCBDaHJvbWU6OmludmFsaWRhdGVDb250ZW50c0ZvclNsb3dTY3JvbGwoY29uc3QgSW50UmVj
dCYgdXBkYXRlUmVjdCwgYm9vbCBpbW0KIHZvaWQgQ2hyb21lOjpzY3JvbGwoY29uc3QgSW50U2l6
ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IEludFJlY3QmIHJlY3RUb1Njcm9sbCwgY29uc3QgSW50UmVj
dCYgY2xpcFJlY3QpCiB7CiAgICAgbV9jbGllbnQtPnNjcm9sbChzY3JvbGxEZWx0YSwgcmVjdFRv
U2Nyb2xsLCBjbGlwUmVjdCk7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRTY3Jv
bGwobV9wYWdlKTsKIH0KIAogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161639</attachid>
            <date>2012-08-31 01:54:21 -0700</date>
            <delta_ts>2012-08-31 01:57:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95456-20120831125407.patch</filename>
            <type>text/plain</type>
            <size>48689</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3MjM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmU4NmQzN2JhODg3NDRi
NmVmMGNmNzljMjA3MjVkNWQyMDYyYTgxMy4uMTk2NTBmNTBlZWU3MDM1OWMwYmNhMTdlM2FjYThl
ZjA1MmE1OTUxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDEyLTA4LTMwICBQYXZl
bCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IHJlbmRlciBib3ggbW9kZWwgZWxlbWVudHMgYW5kIGdyaWQgb24gaW5zcGVjdG9yIG92ZXJs
YXkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NDU2
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBj
aGFuZ2UgbWlncmF0ZXMgbmF0aXZlIHJlbmRlcmluZyBmb3IgYm94IG1vZGVsIHRvIHRoZSBJbnNw
ZWN0b3JPdmVybGF5LgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRh
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6ZGlkU2Nyb2xsSW1wbCk6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3Rvckluc3RydW1lbnRhdGlvbi5oOgorICAgICAgICAoSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkU2Ny
b2xsKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JP
dmVybGF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmRyYXdOb2Rl
SGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmRyYXdSZWN0
SGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6Om92ZXJsYXlQ
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmV2YWx1YXRlSW5PdmVy
bGF5KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5oOgorICAgICAgICAo
V2ViQ29yZTo6SGlnaGxpZ2h0OjpzZXRDb2xvcnMpOgorICAgICAgICAoSGlnaGxpZ2h0KToKKyAg
ICAgICAgKEluc3BlY3Rvck92ZXJsYXkpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JP
dmVybGF5UGFnZS5odG1sOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpkaWRMYXlvdXQpOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6
OmRpZFNjcm9sbCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oOgor
ICAgICAgICAqIHBhZ2UvQ2hyb21lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZTo6c2Ny
b2xsKToKKwogMjAxMi0wOC0zMSAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiByZW5kZXIgcGF0aCB0byBmaWxlIGFuZCBsaW5l
IG51bWJlciBhcyBzdWJ0aXRsZXMgaW4gc2VsZWN0b3IgZGlhbG9nLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcAppbmRleCBh
ZjQ0NzI4YzY0NjEwMDhiYWYzOTQ3ZjNkYjY5N2Y2MjRmYTZjNmU3Li40MWI3YmM4MWFkZWRhMGFl
ODgxZWJlOTZlZWY3ZDA3ZTYzZDE0OWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcApAQCAtMjQ5LDYgKzI0OSwxMiBA
QCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnRJ
bXBsKEluc3RydW1lbnRpbmdBZ2VudHMqCiAgICAgICAgIGRvbUFnZW50LT5tb3VzZURpZE1vdmVP
dmVyRWxlbWVudChyZXN1bHQsIG1vZGlmaWVyRmxhZ3MpOwogfQogCit2b2lkIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6ZGlkU2Nyb2xsSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVt
ZW50aW5nQWdlbnRzKQoreworICAgIGlmIChJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCA9
IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvclBhZ2VBZ2VudCgpKQorICAgICAgICBwYWdl
QWdlbnQtPmRpZFNjcm9sbCgpOworfQorCiBib29sIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
aGFuZGxlTW91c2VQcmVzc0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0Fn
ZW50cykKIHsKICAgICBpZiAoSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zdHJ1bWVu
dGluZ0FnZW50cy0+aW5zcGVjdG9yRE9NQWdlbnQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaAppbmRleCBkYjMzNWJmYWY0NTBj
YzMxOGNiY2U0ZGY2MTgxMTI3ZGQyNTRmNWM4Li4wY2MwY2MyMWMwNGYzNGQxNTdkNjA5Y2U3OGVk
NTlkMjYzZmM2ZmJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbi5oCkBAIC0xNDUsNiArMTQ1LDcgQEAgcHVibGljOgogICAgIHN0
YXRpYyB2b2lkIGRpZEludmFsaWRhdGVMYXlvdXQoRnJhbWUqKTsKICAgICBzdGF0aWMgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIHdpbGxMYXlvdXQoRnJhbWUqKTsKICAgICBzdGF0aWMg
dm9pZCBkaWRMYXlvdXQoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJik7Cisg
ICAgc3RhdGljIHZvaWQgZGlkU2Nyb2xsKFBhZ2UqKTsKICAgICBzdGF0aWMgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uQ29va2llIHdpbGxMb2FkWEhSKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBY
TUxIdHRwUmVxdWVzdCopOwogICAgIHN0YXRpYyB2b2lkIGRpZExvYWRYSFIoY29uc3QgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJik7CiAgICAgc3RhdGljIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbkNvb2tpZSB3aWxsUGFpbnQoRnJhbWUqLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBM
YXlvdXRSZWN0Jik7CkBAIC0zMjEsNiArMzIyLDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9p
ZCBkaWRJbnZhbGlkYXRlTGF5b3V0SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgRnJhbWUqKTsK
ICAgICBzdGF0aWMgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIHdpbGxMYXlvdXRJbXBs
KEluc3RydW1lbnRpbmdBZ2VudHMqLCBGcmFtZSopOwogICAgIHN0YXRpYyB2b2lkIGRpZExheW91
dEltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJik7CisgICAgc3RhdGlj
IHZvaWQgZGlkU2Nyb2xsSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKik7CiAgICAgc3RhdGljIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSB3aWxsTG9hZFhIUkltcGwoSW5zdHJ1bWVudGlu
Z0FnZW50cyosIFhNTEh0dHBSZXF1ZXN0KiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogICAg
IHN0YXRpYyB2b2lkIGRpZExvYWRYSFJJbXBsKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bkNvb2tpZSYpOwogICAgIHN0YXRpYyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2ls
bFBhaW50SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
TGF5b3V0UmVjdCYsIEZyYW1lKik7CkBAIC04NDAsNiArODQyLDE1IEBAIGlubGluZSB2b2lkIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTGF5b3V0KGNvbnN0IEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbkNvCiAjZW5kaWYKIH0KIAoraW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpkaWRTY3JvbGwoUGFnZSogcGFnZSkKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAg
IEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOworICAgIGlmIChJbnN0cnVtZW50
aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvclBh
Z2UocGFnZSkpCisgICAgICAgIGRpZFNjcm9sbEltcGwoaW5zdHJ1bWVudGluZ0FnZW50cyk7Cisj
ZW5kaWYKK30KKwogaW5saW5lIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OndpbGxMb2FkWEhSKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIFhNTEh0dHBSZXF1ZXN0KiByZXF1ZXN0KQogewogI2lmIEVOQUJMRShJTlNQRUNUT1Ip
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAKaW5kZXgg
Njk5ZWI0YjgwM2U3YmNlYWZlNjcwMDM2YWM0ZGFjNjBhNGEzNmFjNy4uOWE5ZGMwMzg0NzlmYTdl
M2RkZjBjNGFhMDUxZDFiMjRlMjllYmIwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JPdmVybGF5LmNwcApAQCAtMzUsMTkgKzM1LDE0IEBACiAjaW5jbHVkZSAiRG9j
dW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRW1wdHlDbGll
bnRzLmgiCi0jaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgotI2luY2x1
ZGUgIkZvbnRGYW1pbHkuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzVHlw
ZXMuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JP
dmVybGF5UGFnZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgogI2luY2x1ZGUgIk5v
ZGUuaCIKICNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJS
ZW5kZXJCb3hNb2RlbE9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1
ZGUgIlJlbmRlck9iamVjdC5oIgpAQCAtNTUsMjcgKzUwLDExIEBACiAjaW5jbHVkZSAiU2NyaXB0
VmFsdWUuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlN0eWxlZEVsZW1lbnQu
aCIKLSNpbmNsdWRlICJUZXh0UnVuLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRl
ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSB7CiAKLSNpZiBPUyhXSU5E
T1dTKQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGZvbnRIZWlnaHRQeCA9IDEyOwotI2VsaWYgT1Mo
TUFDX09TX1gpIHx8IE9TKFVOSVgpCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgZm9udEhlaWdodFB4
ID0gMTE7Ci0jZW5kaWYKLQotY29uc3Qgc3RhdGljIGludCByZWN0SW5mbGF0ZVB4ID0gNDsKLWNv
bnN0IHN0YXRpYyBpbnQgYm9yZGVyV2lkdGhQeCA9IDE7Ci1jb25zdCBzdGF0aWMgaW50IHRvb2x0
aXBQYWRkaW5nID0gNDsKLQotY29uc3Qgc3RhdGljIGludCBhcnJvd1RpcE9mZnNldCA9IDIwOwot
Y29uc3Qgc3RhdGljIGZsb2F0IGFycm93SGVpZ2h0ID0gNzsKLWNvbnN0IHN0YXRpYyBmbG9hdCBh
cnJvd0hhbGZXaWR0aCA9IDc7Ci0KIFBhdGggcXVhZFRvUGF0aChjb25zdCBGbG9hdFF1YWQmIHF1
YWQpCiB7CiAgICAgUGF0aCBxdWFkUGF0aDsKQEAgLTExMSwyNTYgKzkwLDYgQEAgdm9pZCBkcmF3
T3V0bGluZWRRdWFkKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRRdWFkJiBx
dWFkLCBjb25zdCBDb2wKICAgICBjb250ZXh0LT5maWxsUGF0aChxdWFkUGF0aCk7CiB9CiAKLXZv
aWQgZHJhd091dGxpbmVkUXVhZFdpdGhDbGlwKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgRmxvYXRRdWFkJiBxdWFkLCBjb25zdCBGbG9hdFF1YWQmIGNsaXBRdWFkLCBjb25zdCBDb2xv
ciYgZmlsbENvbG9yKQotewotICAgIGNvbnRleHQtPnNhdmUoKTsKLSAgICBQYXRoIGNsaXBRdWFk
UGF0aCA9IHF1YWRUb1BhdGgoY2xpcFF1YWQpOwotICAgIGNvbnRleHQtPmNsaXBPdXQoY2xpcFF1
YWRQYXRoKTsKLSAgICBkcmF3T3V0bGluZWRRdWFkKGNvbnRleHQsIHF1YWQsIGZpbGxDb2xvciwg
Q29sb3I6OnRyYW5zcGFyZW50KTsKLSAgICBjb250ZXh0LT5yZXN0b3JlKCk7Ci19Ci0KLXZvaWQg
ZHJhd0hpZ2hsaWdodEZvckJveChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0
UXVhZCYgY29udGVudFF1YWQsIGNvbnN0IEZsb2F0UXVhZCYgcGFkZGluZ1F1YWQsIGNvbnN0IEZs
b2F0UXVhZCYgYm9yZGVyUXVhZCwgY29uc3QgRmxvYXRRdWFkJiBtYXJnaW5RdWFkLCBjb25zdCBI
aWdobGlnaHRDb25maWcmIGhpZ2hsaWdodENvbmZpZykKLXsKLSAgICBib29sIGhhc01hcmdpbiA9
IGhpZ2hsaWdodENvbmZpZy5tYXJnaW4gIT0gQ29sb3I6OnRyYW5zcGFyZW50OwotICAgIGJvb2wg
aGFzQm9yZGVyID0gaGlnaGxpZ2h0Q29uZmlnLmJvcmRlciAhPSBDb2xvcjo6dHJhbnNwYXJlbnQ7
Ci0gICAgYm9vbCBoYXNQYWRkaW5nID0gaGlnaGxpZ2h0Q29uZmlnLnBhZGRpbmcgIT0gQ29sb3I6
OnRyYW5zcGFyZW50OwotICAgIGJvb2wgaGFzQ29udGVudCA9IGhpZ2hsaWdodENvbmZpZy5jb250
ZW50ICE9IENvbG9yOjp0cmFuc3BhcmVudCB8fCBoaWdobGlnaHRDb25maWcuY29udGVudE91dGxp
bmUgIT0gQ29sb3I6OnRyYW5zcGFyZW50OwotCi0gICAgRmxvYXRRdWFkIGNsaXBRdWFkOwotICAg
IENvbG9yIGNsaXBDb2xvcjsKLSAgICBpZiAoaGFzTWFyZ2luICYmICghaGFzQm9yZGVyIHx8IG1h
cmdpblF1YWQgIT0gYm9yZGVyUXVhZCkpIHsKLSAgICAgICAgZHJhd091dGxpbmVkUXVhZFdpdGhD
bGlwKGNvbnRleHQsIG1hcmdpblF1YWQsIGJvcmRlclF1YWQsIGhpZ2hsaWdodENvbmZpZy5tYXJn
aW4pOwotICAgICAgICBjbGlwUXVhZCA9IGJvcmRlclF1YWQ7Ci0gICAgfQotICAgIGlmIChoYXNC
b3JkZXIgJiYgKCFoYXNQYWRkaW5nIHx8IGJvcmRlclF1YWQgIT0gcGFkZGluZ1F1YWQpKSB7Ci0g
ICAgICAgIGRyYXdPdXRsaW5lZFF1YWRXaXRoQ2xpcChjb250ZXh0LCBib3JkZXJRdWFkLCBwYWRk
aW5nUXVhZCwgaGlnaGxpZ2h0Q29uZmlnLmJvcmRlcik7Ci0gICAgICAgIGNsaXBRdWFkID0gcGFk
ZGluZ1F1YWQ7Ci0gICAgfQotICAgIGlmIChoYXNQYWRkaW5nICYmICghaGFzQ29udGVudCB8fCBw
YWRkaW5nUXVhZCAhPSBjb250ZW50UXVhZCkpIHsKLSAgICAgICAgZHJhd091dGxpbmVkUXVhZFdp
dGhDbGlwKGNvbnRleHQsIHBhZGRpbmdRdWFkLCBjb250ZW50UXVhZCwgaGlnaGxpZ2h0Q29uZmln
LnBhZGRpbmcpOwotICAgICAgICBjbGlwUXVhZCA9IGNvbnRlbnRRdWFkOwotICAgIH0KLSAgICBp
ZiAoaGFzQ29udGVudCkKLSAgICAgICAgZHJhd091dGxpbmVkUXVhZChjb250ZXh0LCBjb250ZW50
UXVhZCwgaGlnaGxpZ2h0Q29uZmlnLmNvbnRlbnQsIGhpZ2hsaWdodENvbmZpZy5jb250ZW50T3V0
bGluZSk7Ci19Ci0KLXZvaWQgZHJhd0hpZ2hsaWdodEZvclNWR1JlbmRlcmVyKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgVmVjdG9yPEZsb2F0UXVhZD4mIGFic29sdXRlUXVhZHMsIGNv
bnN0IEhpZ2hsaWdodENvbmZpZyYgaGlnaGxpZ2h0Q29uZmlnKQotewotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgYWJzb2x1dGVRdWFkcy5zaXplKCk7ICsraSkKLSAgICAgICAgZHJhd091dGxp
bmVkUXVhZChjb250ZXh0LCBhYnNvbHV0ZVF1YWRzW2ldLCBoaWdobGlnaHRDb25maWcuY29udGVu
dCwgQ29sb3I6OnRyYW5zcGFyZW50KTsKLX0KLQotaW50IGRyYXdTdWJzdHJpbmcoY29uc3QgVGV4
dFJ1biYgZ2xvYmFsVGV4dFJ1biwgaW50IG9mZnNldCwgaW50IGxlbmd0aCwgY29uc3QgQ29sb3Im
IHRleHRDb2xvciwgY29uc3QgRm9udCYgZm9udCwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBMYXlvdXRSZWN0JiB0aXRsZVJlY3QpCi17Ci0gICAgY29udGV4dC0+c2V0RmlsbENvbG9y
KHRleHRDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgY29udGV4dC0+ZHJhd1RleHQo
Zm9udCwgZ2xvYmFsVGV4dFJ1biwgSW50UG9pbnQodGl0bGVSZWN0LnBpeGVsU25hcHBlZFgoKSAr
IHJlY3RJbmZsYXRlUHgsIHRpdGxlUmVjdC5waXhlbFNuYXBwZWRZKCkgKyBmb250LmZvbnRNZXRy
aWNzKCkuaGVpZ2h0KCkpLCBvZmZzZXQsIG9mZnNldCArIGxlbmd0aCk7Ci0gICAgcmV0dXJuIG9m
ZnNldCArIGxlbmd0aDsKLX0KLQotZmxvYXQgY2FsY3VsYXRlQXJyb3dUaXBYKGNvbnN0IExheW91
dFJlY3QmIGFuY2hvckJveCwgY29uc3QgTGF5b3V0UmVjdCYgdGl0bGVSZWN0KQotewotICAgIGNv
bnN0IHN0YXRpYyBpbnQgYW5jaG9yVGlwT2Zmc2V0UHggPSAyOwotCi0gICAgaW50IG1pblggPSB0
aXRsZVJlY3QueCgpICsgYXJyb3dIYWxmV2lkdGg7Ci0gICAgaW50IG1heFggPSB0aXRsZVJlY3Qu
bWF4WCgpIC0gYXJyb3dIYWxmV2lkdGg7Ci0gICAgaW50IGFuY2hvclggPSBhbmNob3JCb3gueCgp
OwotICAgIGludCBhbmNob3JNYXhYID0gYW5jaG9yQm94Lm1heFgoKTsKLQotICAgIGludCB4ID0g
dGl0bGVSZWN0LngoKSArIGFycm93VGlwT2Zmc2V0OyAvLyBEZWZhdWx0IHRvb2x0aXAgcG9zaXRp
b24uCi0gICAgaWYgKHggPCBhbmNob3JYKQotICAgICAgICB4ID0gYW5jaG9yWCArIGFuY2hvclRp
cE9mZnNldFB4OwotICAgIGVsc2UgaWYgKHggPiBhbmNob3JNYXhYKQotICAgICAgICB4ID0gYW5j
aG9yTWF4WCAtIGFuY2hvclRpcE9mZnNldFB4OwotCi0gICAgaWYgKHggPCBtaW5YKQotICAgICAg
ICB4ID0gbWluWDsKLSAgICBlbHNlIGlmICh4ID4gbWF4WCkKLSAgICAgICAgeCA9IG1heFg7Ci0K
LSAgICByZXR1cm4geDsKLX0KLQotdm9pZCBzZXRVcEZvbnREZXNjcmlwdGlvbihGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbiwgV2ViQ29yZTo6U2V0dGluZ3MqIHNldHRpbmdzKQotewot
I2RlZmluZSBUT09MVElQX0ZPTlRfRkFNSUxJRVMoc2l6ZSwgLi4uKSBcCi1zdGF0aWMgY29uc3Qg
dW5zaWduZWQgdG9vbHRpcEZvbnRGYWNlU2l6ZSA9IHNpemU7XAotc3RhdGljIGNvbnN0IEF0b21p
Y1N0cmluZyogdG9vbHRpcEZvbnRGYWNlW3NpemVdID0geyBfX1ZBX0FSR1NfXyB9OwotCi0jaWYg
T1MoV0lORE9XUykKLVRPT0xUSVBfRk9OVF9GQU1JTElFUygyLCBuZXcgQXRvbWljU3RyaW5nKCJD
b25zb2xhcyIpLCBuZXcgQXRvbWljU3RyaW5nKCJMdWNpZGEgQ29uc29sZSIpKQotI2VsaWYgT1Mo
TUFDX09TX1gpCi1UT09MVElQX0ZPTlRfRkFNSUxJRVMoMiwgbmV3IEF0b21pY1N0cmluZygiTWVu
bG8iKSwgbmV3IEF0b21pY1N0cmluZygiTW9uYWNvIikpCi0jZWxpZiBPUyhVTklYKQotVE9PTFRJ
UF9GT05UX0ZBTUlMSUVTKDEsIG5ldyBBdG9taWNTdHJpbmcoImRlamF2dSBzYW5zIG1vbm8iKSkK
LSNlbmRpZgotLy8gSW4gdGhlIGRlZmF1bHQgY2FzZSwgd2UgZ2V0IHRoZSBzZXR0aW5ncy1wcm92
aWRlZCBtb25vc3BhY2UgZm9udC4KLQotI3VuZGVmIFRPT0xUSVBfRk9OVF9GQU1JTElFUwotCi0g
ICAgZm9udERlc2NyaXB0aW9uLnNldFJlbmRlcmluZ01vZGUoc2V0dGluZ3MtPmZvbnRSZW5kZXJp
bmdNb2RlKCkpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoZm9udEhlaWdo
dFB4KTsKLQotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZml4ZWRGb250RmFtaWx5ID0gc2V0dGlu
Z3MtPmZpeGVkRm9udEZhbWlseSgpOwotICAgIGlmICghZml4ZWRGb250RmFtaWx5LmlzRW1wdHko
KSkgewotICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3Jp
cHRpb246Ok1vbm9zcGFjZUZhbWlseSk7Ci0gICAgICAgIEZvbnRGYW1pbHkqIGN1cnJlbnRGYW1p
bHkgPSAwOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG9vbHRpcEZvbnRGYWNl
U2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIWN1cnJlbnRGYW1pbHkpIHsKLSAgICAgICAg
ICAgICAgICBmb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKS5zZXRGYW1pbHkoKnRvb2x0aXBG
b250RmFjZVtpXSk7Ci0gICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5
KCkuYXBwZW5kRmFtaWx5KDApOwotICAgICAgICAgICAgICAgIGN1cnJlbnRGYW1pbHkgPSAmZm9u
dERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIFJlZlB0cjxTaGFyZWRGb250RmFtaWx5PiBuZXdGYW1pbHkgPSBTaGFyZWRGb250
RmFtaWx5OjpjcmVhdGUoKTsKLSAgICAgICAgICAgICAgICBuZXdGYW1pbHktPnNldEZhbWlseSgq
dG9vbHRpcEZvbnRGYWNlW2ldKTsKLSAgICAgICAgICAgICAgICBjdXJyZW50RmFtaWx5LT5hcHBl
bmRGYW1pbHkobmV3RmFtaWx5KTsKLSAgICAgICAgICAgICAgICBjdXJyZW50RmFtaWx5ID0gbmV3
RmFtaWx5LmdldCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxT
aGFyZWRGb250RmFtaWx5PiBuZXdGYW1pbHkgPSBTaGFyZWRGb250RmFtaWx5OjpjcmVhdGUoKTsK
LSAgICAgICAgbmV3RmFtaWx5LT5zZXRGYW1pbHkoZml4ZWRGb250RmFtaWx5KTsKLSAgICAgICAg
Y3VycmVudEZhbWlseS0+YXBwZW5kRmFtaWx5KG5ld0ZhbWlseSk7Ci0gICAgICAgIGN1cnJlbnRG
YW1pbHkgPSBuZXdGYW1pbHkuZ2V0KCk7Ci0gICAgfQotfQotCi12b2lkIGRyYXdFbGVtZW50VGl0
bGUoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBOb2RlKiBub2RlLCBSZW5kZXJPYmplY3QqIHJl
bmRlcmVyLCBjb25zdCBJbnRSZWN0JiBib3VuZGluZ0JveCwgY29uc3QgSW50UmVjdCYgYW5jaG9y
Qm94LCBjb25zdCBGbG9hdFJlY3QmIHZpc2libGVSZWN0LCBXZWJDb3JlOjpTZXR0aW5ncyogc2V0
dGluZ3MpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChDb2xvciwgYmFja2dyb3VuZENvbG9y
LCAoMjU1LCAyNTUsIDE5NCkpOwotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ29sb3IsIHRhZ0Nv
bG9yLCAoMTM2LCAxOCwgMTI4KSk7IC8vIFNhbWUgYXMgLndlYmtpdC1odG1sLXRhZy4KLSAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKENvbG9yLCBhdHRyQ29sb3IsICgyNiwgMjYsIDE2NikpOyAvLyBT
YW1lIGFzIC53ZWJraXQtaHRtbC1hdHRyaWJ1dGUtdmFsdWUuCi0gICAgREVGSU5FX1NUQVRJQ19M
T0NBTChDb2xvciwgbm9ybWFsQ29sb3IsIChDb2xvcjo6YmxhY2spKTsKLSAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKENvbG9yLCBweEFuZEJvcmRlckNvbG9yLCAoMTI4LCAxMjgsIDEyOCkpOwotCi0g
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHB4U3RyaW5nLCAoQVNDSUlMaXRlcmFsKCJw
eCIpKSk7Ci0gICAgY29uc3Qgc3RhdGljIFVDaGFyIHRpbWVzVUNoYXJbXSA9IHsgMHgwMDIwLCAw
eDAwRDcsIDB4MDAyMCwgMCB9OwotICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCB0aW1l
c1N0cmluZywgKHRpbWVzVUNoYXIpKTsgLy8gJnRpbWVzOyBzdHJpbmcKLQotICAgIEZvbnRDYWNo
ZVB1cmdlUHJldmVudGVyIGZvbnRDYWNoZVB1cmdlUHJldmVudGVyOwotCi0gICAgRWxlbWVudCog
ZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKTsKLSAgICBib29sIGlzWEhUTUwg
PSBlbGVtZW50LT5kb2N1bWVudCgpLT5pc1hIVE1MRG9jdW1lbnQoKTsKLSAgICBTdHJpbmdCdWls
ZGVyIG5vZGVUaXRsZTsKLSAgICBub2RlVGl0bGUuYXBwZW5kKGlzWEhUTUwgPyBlbGVtZW50LT5u
b2RlTmFtZSgpIDogZWxlbWVudC0+bm9kZU5hbWUoKS5sb3dlcigpKTsKLSAgICB1bnNpZ25lZCB0
YWdOYW1lTGVuZ3RoID0gbm9kZVRpdGxlLmxlbmd0aCgpOwotCi0gICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBpZFZhbHVlID0gZWxlbWVudC0+Z2V0SWRBdHRyaWJ1dGUoKTsKLSAgICB1bnNpZ25lZCBp
ZFN0cmluZ0xlbmd0aCA9IDA7Ci0gICAgU3RyaW5nIGlkU3RyaW5nOwotICAgIGlmICghaWRWYWx1
ZS5pc051bGwoKSAmJiAhaWRWYWx1ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgbm9kZVRpdGxlLmFw
cGVuZCgiIyIpOwotICAgICAgICBub2RlVGl0bGUuYXBwZW5kKGlkVmFsdWUpOwotICAgICAgICBp
ZFN0cmluZ0xlbmd0aCA9IDEgKyBpZFZhbHVlLmxlbmd0aCgpOwotICAgIH0KLQotICAgIEhhc2hT
ZXQ8QXRvbWljU3RyaW5nPiB1c2VkQ2xhc3NOYW1lczsKLSAgICB1bnNpZ25lZCBjbGFzc2VzU3Ry
aW5nTGVuZ3RoID0gMDsKLSAgICBpZiAoZWxlbWVudC0+aGFzQ2xhc3MoKSAmJiBlbGVtZW50LT5p
c1N0eWxlZEVsZW1lbnQoKSkgewotICAgICAgICBjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBjbGFz
c05hbWVzU3RyaW5nID0gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KGVsZW1lbnQpLT5jbGFz
c05hbWVzKCk7Ci0gICAgICAgIHNpemVfdCBjbGFzc05hbWVDb3VudCA9IGNsYXNzTmFtZXNTdHJp
bmcuc2l6ZSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNsYXNzTmFtZUNvdW50
OyArK2kpIHsKLSAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY2xhc3NOYW1lID0gY2xh
c3NOYW1lc1N0cmluZ1tpXTsKLSAgICAgICAgICAgIGlmICh1c2VkQ2xhc3NOYW1lcy5jb250YWlu
cyhjbGFzc05hbWUpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgdXNl
ZENsYXNzTmFtZXMuYWRkKGNsYXNzTmFtZSk7Ci0gICAgICAgICAgICBub2RlVGl0bGUuYXBwZW5k
KCIuIik7Ci0gICAgICAgICAgICBub2RlVGl0bGUuYXBwZW5kKGNsYXNzTmFtZSk7Ci0gICAgICAg
ICAgICBjbGFzc2VzU3RyaW5nTGVuZ3RoICs9IDEgKyBjbGFzc05hbWUubGVuZ3RoKCk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogbW9kZWxPYmplY3QgPSBy
ZW5kZXJlci0+aXNCb3hNb2RlbE9iamVjdCgpID8gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChyZW5k
ZXJlcikgOiAwOwotCi0gICAgU3RyaW5nIHdpZHRoTnVtYmVyUGFydCA9ICIgIiArIFN0cmluZzo6
bnVtYmVyKG1vZGVsT2JqZWN0ID8gYWRqdXN0Rm9yQWJzb2x1dGVab29tKG1vZGVsT2JqZWN0LT5w
aXhlbFNuYXBwZWRPZmZzZXRXaWR0aCgpLCBtb2RlbE9iamVjdCkgOiBib3VuZGluZ0JveC53aWR0
aCgpKTsKLSAgICBub2RlVGl0bGUuYXBwZW5kKHdpZHRoTnVtYmVyUGFydCk7Ci0gICAgbm9kZVRp
dGxlLmFwcGVuZChweFN0cmluZyk7Ci0gICAgbm9kZVRpdGxlLmFwcGVuZCh0aW1lc1N0cmluZyk7
Ci0gICAgU3RyaW5nIGhlaWdodE51bWJlclBhcnQgPSBTdHJpbmc6Om51bWJlcihtb2RlbE9iamVj
dCA/IGFkanVzdEZvckFic29sdXRlWm9vbShtb2RlbE9iamVjdC0+cGl4ZWxTbmFwcGVkT2Zmc2V0
SGVpZ2h0KCksIG1vZGVsT2JqZWN0KSA6IGJvdW5kaW5nQm94LmhlaWdodCgpKTsKLSAgICBub2Rl
VGl0bGUuYXBwZW5kKGhlaWdodE51bWJlclBhcnQpOwotICAgIG5vZGVUaXRsZS5hcHBlbmQocHhT
dHJpbmcpOwotCi0gICAgRm9udERlc2NyaXB0aW9uIGRlc2M7Ci0gICAgc2V0VXBGb250RGVzY3Jp
cHRpb24oZGVzYywgc2V0dGluZ3MpOwotICAgIEZvbnQgZm9udCA9IEZvbnQoZGVzYywgMCwgMCk7
Ci0gICAgZm9udC51cGRhdGUoMCk7Ci0KLSAgICBUZXh0UnVuIG5vZGVUaXRsZVJ1bihub2RlVGl0
bGUudG9TdHJpbmcoKSk7Ci0gICAgSW50UG9pbnQgdGl0bGVCYXNlUG9pbnQgPSBJbnRQb2ludChh
bmNob3JCb3gueCgpLCBhbmNob3JCb3gubWF4WSgpIC0gMSk7Ci0gICAgdGl0bGVCYXNlUG9pbnQu
bW92ZShyZWN0SW5mbGF0ZVB4LCByZWN0SW5mbGF0ZVB4KTsKLSAgICBJbnRSZWN0IHRpdGxlUmVj
dCA9IGVuY2xvc2luZ0ludFJlY3QoZm9udC5zZWxlY3Rpb25SZWN0Rm9yVGV4dChub2RlVGl0bGVS
dW4sIHRpdGxlQmFzZVBvaW50LCBmb250SGVpZ2h0UHgpKTsKLSAgICB0aXRsZVJlY3QuaW5mbGF0
ZShyZWN0SW5mbGF0ZVB4KTsKLQotICAgIC8vIFRoZSBpbml0aWFsIG9mZnNldHMgbmVlZGVkIHRv
IGNvbXBlbnNhdGUgZm9yIGEgMXB4LXRoaWNrIGJvcmRlciBzdHJva2UgKHdoaWNoIGlzIG5vdCBh
IHBhcnQgb2YgdGhlIHJlY3RhbmdsZSkuCi0gICAgaW50IGR4ID0gLWJvcmRlcldpZHRoUHg7Ci0g
ICAgaW50IGR5ID0gYm9yZGVyV2lkdGhQeDsKLQotICAgIC8vIElmIHRoZSB0aXAgc3RpY2tzIGJl
eW9uZCB0aGUgcmlnaHQgb2YgdmlzaWJsZVJlY3QsIHJpZ2h0LWFsaWduIHRoZSB0aXAgd2l0aCB0
aGUgc2FpZCBib3VuZGFyeS4KLSAgICBpZiAodGl0bGVSZWN0Lm1heFgoKSArIGR4ID4gdmlzaWJs
ZVJlY3QubWF4WCgpKQotICAgICAgICBkeCA9IHZpc2libGVSZWN0Lm1heFgoKSAtIHRpdGxlUmVj
dC5tYXhYKCk7Ci0KLSAgICAvLyBJZiB0aGUgdGlwIHN0aWNrcyBiZXlvbmQgdGhlIGxlZnQgb2Yg
dmlzaWJsZVJlY3QsIGxlZnQtYWxpZ24gdGhlIHRpcCB3aXRoIHRoZSBzYWlkIGJvdW5kYXJ5Lgot
ICAgIGlmICh0aXRsZVJlY3QueCgpICsgZHggPCB2aXNpYmxlUmVjdC54KCkpCi0gICAgICAgIGR4
ID0gdmlzaWJsZVJlY3QueCgpIC0gdGl0bGVSZWN0LngoKSAtIGJvcmRlcldpZHRoUHg7Ci0KLSAg
ICAvLyBJZiB0aGUgdGlwIHN0aWNrcyBiZXlvbmQgdGhlIGJvdHRvbSBvZiB2aXNpYmxlUmVjdCwg
c2hvdyB0aGUgdGlwIGF0IHRvcCBvZiBib3VuZGluZyBib3guCi0gICAgaWYgKHRpdGxlUmVjdC5t
YXhZKCkgKyBkeSA+IHZpc2libGVSZWN0Lm1heFkoKSkgewotICAgICAgICBkeSA9IGFuY2hvckJv
eC55KCkgLSB0aXRsZVJlY3QubWF4WSgpIC0gYm9yZGVyV2lkdGhQeDsKLSAgICAgICAgLy8gSWYg
dGhlIHRpcCBzdGlsbCBzdGlja3MgYmV5b25kIHRoZSBib3R0b20gb2YgdmlzaWJsZVJlY3QsIGJv
dHRvbS1hbGlnbiB0aGUgdGlwIHdpdGggdGhlIHNhaWQgYm91bmRhcnkuCi0gICAgICAgIGlmICh0
aXRsZVJlY3QubWF4WSgpICsgZHkgPiB2aXNpYmxlUmVjdC5tYXhZKCkpCi0gICAgICAgICAgICBk
eSA9IHZpc2libGVSZWN0Lm1heFkoKSAtIHRpdGxlUmVjdC5tYXhZKCk7Ci0gICAgfQotCi0gICAg
Ly8gSWYgdGhlIHRpcCBzdGlja3MgYmV5b25kIHRoZSB0b3Agb2YgdmlzaWJsZVJlY3QsIHNob3cg
dGhlIHRpcCBhdCB0b3Agb2YgdmlzaWJsZVJlY3QuCi0gICAgaWYgKHRpdGxlUmVjdC55KCkgKyBk
eSA8IHZpc2libGVSZWN0LnkoKSkKLSAgICAgICAgZHkgPSB2aXNpYmxlUmVjdC55KCkgLSB0aXRs
ZVJlY3QueSgpICsgYm9yZGVyV2lkdGhQeDsKLQotICAgIHRpdGxlUmVjdC5tb3ZlKGR4LCBkeSk7
Ci0KLSAgICBib29sIGlzQXJyb3dBdFRvcCA9IHRpdGxlUmVjdC55KCkgPiBhbmNob3JCb3gueSgp
OwotICAgIHRpdGxlUmVjdC5tb3ZlKDAsIHRvb2x0aXBQYWRkaW5nICogKGlzQXJyb3dBdFRvcCA/
IDEgOiAtMSkpOwotCi0gICAgewotICAgICAgICBmbG9hdCBhcnJvd1RpcFggPSBjYWxjdWxhdGVB
cnJvd1RpcFgoYW5jaG9yQm94LCB0aXRsZVJlY3QpOwotICAgICAgICBpbnQgYXJyb3dCYXNlWSA9
IGlzQXJyb3dBdFRvcCA/IHRpdGxlUmVjdC55KCkgOiB0aXRsZVJlY3QubWF4WSgpOwotICAgICAg
ICBpbnQgYXJyb3dPcHBvc2l0ZVkgPSBpc0Fycm93QXRUb3AgPyB0aXRsZVJlY3QubWF4WSgpIDog
dGl0bGVSZWN0LnkoKTsKLQotICAgICAgICBGbG9hdFBvaW50IHBvaW50c1s4XTsKLSAgICAgICAg
cG9pbnRzWzBdID0gRmxvYXRQb2ludChhcnJvd1RpcFggLSBhcnJvd0hhbGZXaWR0aCwgYXJyb3dC
YXNlWSk7Ci0gICAgICAgIHBvaW50c1sxXSA9IEZsb2F0UG9pbnQoYXJyb3dUaXBYLCBhcnJvd0Jh
c2VZICsgYXJyb3dIZWlnaHQgKiAoaXNBcnJvd0F0VG9wID8gLTEgOiAxKSk7Ci0gICAgICAgIHBv
aW50c1syXSA9IEZsb2F0UG9pbnQoYXJyb3dUaXBYICsgYXJyb3dIYWxmV2lkdGgsIGFycm93QmFz
ZVkpOwotICAgICAgICBwb2ludHNbM10gPSBGbG9hdFBvaW50KHRpdGxlUmVjdC5tYXhYKCksIGFy
cm93QmFzZVkpOwotICAgICAgICBwb2ludHNbNF0gPSBGbG9hdFBvaW50KHRpdGxlUmVjdC5tYXhY
KCksIGFycm93T3Bwb3NpdGVZKTsKLSAgICAgICAgcG9pbnRzWzVdID0gRmxvYXRQb2ludCh0aXRs
ZVJlY3QueCgpLCBhcnJvd09wcG9zaXRlWSk7Ci0gICAgICAgIHBvaW50c1s2XSA9IEZsb2F0UG9p
bnQodGl0bGVSZWN0LngoKSwgYXJyb3dCYXNlWSk7Ci0gICAgICAgIHBvaW50c1s3XSA9IHBvaW50
c1swXTsKLQotICAgICAgICBQYXRoIHBhdGg7Ci0gICAgICAgIHBhdGgubW92ZVRvKHBvaW50c1sw
XSk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgODsgKytpKQotICAgICAgICAgICAgcGF0
aC5hZGRMaW5lVG8ocG9pbnRzW2ldKTsKLQotICAgICAgICBjb250ZXh0LT5zYXZlKCk7Ci0gICAg
ICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgwLjVmLCAwLjVmKTsKLSAgICAgICAgY29udGV4dC0+c2V0
U3Ryb2tlQ29sb3IocHhBbmRCb3JkZXJDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAg
ICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihiYWNrZ3JvdW5kQ29sb3IsIENvbG9yU3BhY2VEZXZp
Y2VSR0IpOwotICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VUaGlja25lc3MoYm9yZGVyV2lkdGhQ
eCk7Ci0gICAgICAgIGNvbnRleHQtPmZpbGxQYXRoKHBhdGgpOwotICAgICAgICBjb250ZXh0LT5z
dHJva2VQYXRoKHBhdGgpOwotICAgICAgICBjb250ZXh0LT5yZXN0b3JlKCk7Ci0gICAgfQotCi0g
ICAgaW50IGN1cnJlbnRQb3MgPSAwOwotICAgIGN1cnJlbnRQb3MgPSBkcmF3U3Vic3RyaW5nKG5v
ZGVUaXRsZVJ1biwgY3VycmVudFBvcywgdGFnTmFtZUxlbmd0aCwgdGFnQ29sb3IsIGZvbnQsIGNv
bnRleHQsIHRpdGxlUmVjdCk7Ci0gICAgaWYgKGlkU3RyaW5nTGVuZ3RoKQotICAgICAgICBjdXJy
ZW50UG9zID0gZHJhd1N1YnN0cmluZyhub2RlVGl0bGVSdW4sIGN1cnJlbnRQb3MsIGlkU3RyaW5n
TGVuZ3RoLCBhdHRyQ29sb3IsIGZvbnQsIGNvbnRleHQsIHRpdGxlUmVjdCk7Ci0gICAgaWYgKGNs
YXNzZXNTdHJpbmdMZW5ndGgpCi0gICAgICAgIGN1cnJlbnRQb3MgPSBkcmF3U3Vic3RyaW5nKG5v
ZGVUaXRsZVJ1biwgY3VycmVudFBvcywgY2xhc3Nlc1N0cmluZ0xlbmd0aCwgYXR0ckNvbG9yLCBm
b250LCBjb250ZXh0LCB0aXRsZVJlY3QpOwotICAgIGN1cnJlbnRQb3MgPSBkcmF3U3Vic3RyaW5n
KG5vZGVUaXRsZVJ1biwgY3VycmVudFBvcywgd2lkdGhOdW1iZXJQYXJ0Lmxlbmd0aCgpLCBub3Jt
YWxDb2xvciwgZm9udCwgY29udGV4dCwgdGl0bGVSZWN0KTsKLSAgICBjdXJyZW50UG9zID0gZHJh
d1N1YnN0cmluZyhub2RlVGl0bGVSdW4sIGN1cnJlbnRQb3MsIHB4U3RyaW5nLmxlbmd0aCgpICsg
dGltZXNTdHJpbmcubGVuZ3RoKCksIHB4QW5kQm9yZGVyQ29sb3IsIGZvbnQsIGNvbnRleHQsIHRp
dGxlUmVjdCk7Ci0gICAgY3VycmVudFBvcyA9IGRyYXdTdWJzdHJpbmcobm9kZVRpdGxlUnVuLCBj
dXJyZW50UG9zLCBoZWlnaHROdW1iZXJQYXJ0Lmxlbmd0aCgpLCBub3JtYWxDb2xvciwgZm9udCwg
Y29udGV4dCwgdGl0bGVSZWN0KTsKLSAgICBkcmF3U3Vic3RyaW5nKG5vZGVUaXRsZVJ1biwgY3Vy
cmVudFBvcywgcHhTdHJpbmcubGVuZ3RoKCksIHB4QW5kQm9yZGVyQ29sb3IsIGZvbnQsIGNvbnRl
eHQsIHRpdGxlUmVjdCk7Ci19Ci0KIHN0YXRpYyB2b2lkIGNvbnRlbnRzUXVhZFRvUGFnZShjb25z
dCBGcmFtZVZpZXcqIG1haW5WaWV3LCBjb25zdCBGcmFtZVZpZXcqIHZpZXcsIEZsb2F0UXVhZCYg
cXVhZCkKIHsKICAgICBxdWFkLnNldFAxKHZpZXctPmNvbnRlbnRzVG9Sb290Vmlldyhyb3VuZGVk
SW50UG9pbnQocXVhZC5wMSgpKSkpOwpAQCAtMzcwLDcgKzk5LDcgQEAgc3RhdGljIHZvaWQgY29u
dGVudHNRdWFkVG9QYWdlKGNvbnN0IEZyYW1lVmlldyogbWFpblZpZXcsIGNvbnN0IEZyYW1lVmll
dyogdmlldywKICAgICBxdWFkICs9IG1haW5WaWV3LT5zY3JvbGxPZmZzZXQoKTsKIH0KIAotc3Rh
dGljIHZvaWQgZ2V0T3JEcmF3Tm9kZUhpZ2hsaWdodChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IE5vZGUqIG5vZGUsIGNvbnN0IEhpZ2hsaWdodENvbmZpZyYgaGlnaGxpZ2h0Q29uZmlnLCBIaWdo
bGlnaHQqIGhpZ2hsaWdodCkKK3N0YXRpYyB2b2lkIGJ1aWxkTm9kZUhpZ2hsaWdodChOb2RlKiBu
b2RlLCBjb25zdCBIaWdobGlnaHRDb25maWcmIGhpZ2hsaWdodENvbmZpZywgSGlnaGxpZ2h0KiBo
aWdobGlnaHQpCiB7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVy
KCk7CiAgICAgRnJhbWUqIGNvbnRhaW5pbmdGcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1l
KCk7CkBAIC0zNzgsMTcgKzEwNywxMyBAQCBzdGF0aWMgdm9pZCBnZXRPckRyYXdOb2RlSGlnaGxp
Z2h0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgTm9kZSogbm9kZSwgY29uc3QgSAogICAgIGlm
ICghcmVuZGVyZXIgfHwgIWNvbnRhaW5pbmdGcmFtZSkKICAgICAgICAgcmV0dXJuOwogCisgICAg
aGlnaGxpZ2h0LT5zZXRDb2xvcnMoaGlnaGxpZ2h0Q29uZmlnKTsKICAgICBGcmFtZVZpZXcqIGNv
bnRhaW5pbmdWaWV3ID0gY29udGFpbmluZ0ZyYW1lLT52aWV3KCk7CiAgICAgRnJhbWVWaWV3KiBt
YWluVmlldyA9IGNvbnRhaW5pbmdGcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpOwog
ICAgIEludFJlY3QgYm91bmRpbmdCb3ggPSBwaXhlbFNuYXBwZWRJbnRSZWN0KGNvbnRhaW5pbmdW
aWV3LT5jb250ZW50c1RvUm9vdFZpZXcocmVuZGVyZXItPmFic29sdXRlQm91bmRpbmdCb3hSZWN0
KCkpKTsKICAgICBib3VuZGluZ0JveC5tb3ZlKG1haW5WaWV3LT5zY3JvbGxPZmZzZXQoKSk7CiAg
ICAgSW50UmVjdCB0aXRsZUFuY2hvckJveCA9IGJvdW5kaW5nQm94OwogCi0gICAgRmxvYXRSZWN0
IHZpc2libGVSZWN0ID0gbWFpblZpZXctPnZpc2libGVDb250ZW50UmVjdCgpOwotICAgIC8vIERv
bid0IHRyYW5zbGF0ZSB0aGUgY29udGV4dCBpZiB0aGUgZnJhbWUgaXMgcmVuZGVyZWQgaW4gcGFn
ZSBjb29yZGluYXRlcy4KLSAgICBpZiAoY29udGV4dCAmJiAhbWFpblZpZXctPmRlbGVnYXRlc1Nj
cm9sbGluZygpKQotICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUoLXZpc2libGVSZWN0LngoKSwg
LXZpc2libGVSZWN0LnkoKSk7Ci0KICAgICAvLyBSZW5kZXJTVkdSb290IHNob3VsZCBiZSBoaWdo
bGlnaHRlZCB0aHJvdWdoIHRoZSBpc0JveCgpIGNvZGUgcGF0aCwgYWxsIG90aGVyIFNWRyBlbGVt
ZW50cyBzaG91bGQganVzdCBkdW1wIHRoZWlyIGFic29sdXRlUXVhZHMoKS4KICNpZiBFTkFCTEUo
U1ZHKQogICAgIGJvb2wgaXNTVkdSZW5kZXJlciA9IHJlbmRlcmVyLT5ub2RlKCkgJiYgcmVuZGVy
ZXItPm5vZGUoKS0+aXNTVkdFbGVtZW50KCkgJiYgIXJlbmRlcmVyLT5pc1NWR1Jvb3QoKTsKQEAg
LTQwMSw5ICsxMjYsNiBAQCBzdGF0aWMgdm9pZCBnZXRPckRyYXdOb2RlSGlnaGxpZ2h0KEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgTm9kZSogbm9kZSwgY29uc3QgSAogICAgICAgICByZW5kZXJl
ci0+YWJzb2x1dGVRdWFkcyhoaWdobGlnaHQtPnF1YWRzKTsKICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBoaWdobGlnaHQtPnF1YWRzLnNpemUoKTsgKytpKQogICAgICAgICAgICAgY29u
dGVudHNRdWFkVG9QYWdlKG1haW5WaWV3LCBjb250YWluaW5nVmlldywgaGlnaGxpZ2h0LT5xdWFk
c1tpXSk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgICAgICBkcmF3SGlnaGxpZ2h0
Rm9yU1ZHUmVuZGVyZXIoY29udGV4dCwgaGlnaGxpZ2h0LT5xdWFkcywgaGlnaGxpZ2h0Q29uZmln
KTsKICAgICB9IGVsc2UgaWYgKHJlbmRlcmVyLT5pc0JveCgpIHx8IHJlbmRlcmVyLT5pc1JlbmRl
cklubGluZSgpKSB7CiAgICAgICAgIExheW91dFJlY3QgY29udGVudEJveDsKICAgICAgICAgTGF5
b3V0UmVjdCBwYWRkaW5nQm94OwpAQCAtNDU1LDM5ICsxNzcsMTcgQEAgc3RhdGljIHZvaWQgZ2V0
T3JEcmF3Tm9kZUhpZ2hsaWdodChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIE5vZGUqIG5vZGUs
IGNvbnN0IEgKICAgICAgICAgaGlnaGxpZ2h0LT5xdWFkcy5hcHBlbmQoYWJzQm9yZGVyUXVhZCk7
CiAgICAgICAgIGhpZ2hsaWdodC0+cXVhZHMuYXBwZW5kKGFic1BhZGRpbmdRdWFkKTsKICAgICAg
ICAgaGlnaGxpZ2h0LT5xdWFkcy5hcHBlbmQoYWJzQ29udGVudFF1YWQpOwotCi0gICAgICAgIGlm
IChjb250ZXh0KQotICAgICAgICAgICAgZHJhd0hpZ2hsaWdodEZvckJveChjb250ZXh0LCBhYnND
b250ZW50UXVhZCwgYWJzUGFkZGluZ1F1YWQsIGFic0JvcmRlclF1YWQsIGFic01hcmdpblF1YWQs
IGhpZ2hsaWdodENvbmZpZyk7CiAgICAgfQotCi0gICAgLy8gRHJhdyBub2RlIHRpdGxlIGlmIG5l
Y2Vzc2FyeS4KLQotICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoY29udGV4dCAmJiBoaWdobGlnaHRDb25maWcuc2hvd0luZm8pCi0gICAg
ICAgIGRyYXdFbGVtZW50VGl0bGUoY29udGV4dCwgbm9kZSwgcmVuZGVyZXIsIHBpeGVsU25hcHBl
ZEludFJlY3QoYm91bmRpbmdCb3gpLCBwaXhlbFNuYXBwZWRJbnRSZWN0KHRpdGxlQW5jaG9yQm94
KSwgdmlzaWJsZVJlY3QsIGNvbnRhaW5pbmdGcmFtZS0+c2V0dGluZ3MoKSk7CiB9CiAKLXN0YXRp
YyB2b2lkIGdldE9yRHJhd1JlY3RIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBQ
YWdlKiBwYWdlLCBJbnRSZWN0KiByZWN0LCBjb25zdCBIaWdobGlnaHRDb25maWcmIGhpZ2hsaWdo
dENvbmZpZywgSGlnaGxpZ2h0ICpoaWdobGlnaHQpCitzdGF0aWMgdm9pZCBidWlsZFJlY3RIaWdo
bGlnaHQoUGFnZSogcGFnZSwgSW50UmVjdCogcmVjdCwgY29uc3QgSGlnaGxpZ2h0Q29uZmlnJiBo
aWdobGlnaHRDb25maWcsIEhpZ2hsaWdodCAqaGlnaGxpZ2h0KQogewogICAgIGlmICghcGFnZSkK
ICAgICAgICAgcmV0dXJuOwotCisgICAgaGlnaGxpZ2h0LT5zZXRDb2xvcnMoaGlnaGxpZ2h0Q29u
ZmlnKTsKICAgICBGbG9hdFJlY3QgaGlnaGxpZ2h0UmVjdCgqcmVjdCk7Ci0KICAgICBoaWdobGln
aHQtPnR5cGUgPSBIaWdobGlnaHRUeXBlUmVjdHM7CiAgICAgaGlnaGxpZ2h0LT5xdWFkcy5hcHBl
bmQoaGlnaGxpZ2h0UmVjdCk7Ci0KLSAgICBpZiAoY29udGV4dCkgewotICAgICAgICBGcmFtZVZp
ZXcqIHZpZXcgPSBwYWdlLT5tYWluRnJhbWUoKS0+dmlldygpOwotICAgICAgICBpZiAoIXZpZXct
PmRlbGVnYXRlc1Njcm9sbGluZygpKSB7Ci0gICAgICAgICAgICBGbG9hdFJlY3QgdmlzaWJsZVJl
Y3QgPSB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QoKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnRy
YW5zbGF0ZSgtdmlzaWJsZVJlY3QueCgpLCAtdmlzaWJsZVJlY3QueSgpKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGRyYXdPdXRsaW5lZFF1YWQoY29udGV4dCwgaGlnaGxpZ2h0UmVjdCwgaGlnaGxp
Z2h0Q29uZmlnLmNvbnRlbnQsIGhpZ2hsaWdodENvbmZpZy5jb250ZW50T3V0bGluZSk7Ci0gICAg
fQogfQogCiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKQEAgLTUwNCwxMiArMjA0LDEyIEBAIElu
c3BlY3Rvck92ZXJsYXk6On5JbnNwZWN0b3JPdmVybGF5KCkKIAogdm9pZCBJbnNwZWN0b3JPdmVy
bGF5OjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgZHJhd05vZGVIaWdo
bGlnaHQoJmNvbnRleHQpOwotICAgIGRyYXdSZWN0SGlnaGxpZ2h0KCZjb250ZXh0KTsKLQotICAg
IGlmIChtX3BhdXNlZEluRGVidWdnZXJNZXNzYWdlLmlzTnVsbCgpKQorICAgIGlmIChtX3BhdXNl
ZEluRGVidWdnZXJNZXNzYWdlLmlzTnVsbCgpICYmICFtX2hpZ2hsaWdodE5vZGUgJiYgIW1faGln
aGxpZ2h0UmVjdCkKICAgICAgICAgcmV0dXJuOwotICAgIGRyYXdPdmVybGF5UGFnZSgmY29udGV4
dCk7CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwor
ICAgIEZyYW1lVmlldyogdmlldyA9IG92ZXJsYXlQYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCk7
CisgICAgQVNTRVJUKCF2aWV3LT5uZWVkc0xheW91dCgpKTsKKyAgICB2aWV3LT5wYWludCgmY29u
dGV4dCwgSW50UmVjdCgwLCAwLCB2aWV3LT53aWR0aCgpLCB2aWV3LT5oZWlnaHQoKSkpOwogfQog
CiB2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmRyYXdPdXRsaW5lKEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQpAQCAtNTI0
LDE5ICsyMjQsMTUgQEAgdm9pZCBJbnNwZWN0b3JPdmVybGF5OjpnZXRIaWdobGlnaHQoSGlnaGxp
Z2h0KiBoaWdobGlnaHQpIGNvbnN0CiAgICAgICAgIHJldHVybjsKIAogICAgIGhpZ2hsaWdodC0+
dHlwZSA9IEhpZ2hsaWdodFR5cGVSZWN0czsKLSAgICBpZiAobV9oaWdobGlnaHROb2RlKSB7Ci0g
ICAgICAgIGhpZ2hsaWdodC0+c2V0Q29sb3JzKG1fbm9kZUhpZ2hsaWdodENvbmZpZyk7Ci0gICAg
ICAgIGdldE9yRHJhd05vZGVIaWdobGlnaHQoMCwgbV9oaWdobGlnaHROb2RlLmdldCgpLCBtX25v
ZGVIaWdobGlnaHRDb25maWcsIGhpZ2hsaWdodCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaGln
aGxpZ2h0LT5zZXRDb2xvcnMobV9yZWN0SGlnaGxpZ2h0Q29uZmlnKTsKLSAgICAgICAgZ2V0T3JE
cmF3UmVjdEhpZ2hsaWdodCgwLCBtX3BhZ2UsIG1faGlnaGxpZ2h0UmVjdC5nZXQoKSwgbV9yZWN0
SGlnaGxpZ2h0Q29uZmlnLCBoaWdobGlnaHQpOwotICAgIH0KKyAgICBpZiAobV9oaWdobGlnaHRO
b2RlKQorICAgICAgICBidWlsZE5vZGVIaWdobGlnaHQobV9oaWdobGlnaHROb2RlLmdldCgpLCBt
X25vZGVIaWdobGlnaHRDb25maWcsIGhpZ2hsaWdodCk7CisgICAgZWxzZQorICAgICAgICBidWls
ZFJlY3RIaWdobGlnaHQobV9wYWdlLCBtX2hpZ2hsaWdodFJlY3QuZ2V0KCksIG1fcmVjdEhpZ2hs
aWdodENvbmZpZywgaGlnaGxpZ2h0KTsKIH0KIAogdm9pZCBJbnNwZWN0b3JPdmVybGF5OjpzZXRQ
YXVzZWRJbkRlYnVnZ2VyTWVzc2FnZShjb25zdCBTdHJpbmcqIG1lc3NhZ2UpCiB7CiAgICAgbV9w
YXVzZWRJbkRlYnVnZ2VyTWVzc2FnZSA9IG1lc3NhZ2UgPyAqbWVzc2FnZSA6IFN0cmluZygpOwot
ICAgIGV2YWx1YXRlSW5PdmVybGF5KCJzZXRQYXVzZWRJbkRlYnVnZ2VyTWVzc2FnZSIsIG1fcGF1
c2VkSW5EZWJ1Z2dlck1lc3NhZ2UpOwogICAgIHVwZGF0ZSgpOwogfQogCkBAIC01NzcsMzQgKzI3
MywxMjMgQEAgdm9pZCBJbnNwZWN0b3JPdmVybGF5Ojp1cGRhdGUoKQogICAgIEZyYW1lVmlldyog
b3ZlcmxheVZpZXcgPSBvdmVybGF5UGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpOwogICAgIElu
dFJlY3QgdmlzaWJsZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHZpZXctPnZpc2libGVDb250ZW50
UmVjdCgpKTsKICAgICBvdmVybGF5Vmlldy0+cmVzaXplKHZpc2libGVSZWN0LndpZHRoKCksIHZp
c2libGVSZWN0LmhlaWdodCgpKTsKKworICAgIC8vIENsZWFyIGNhbnZhcyBhbmQgcGFpbnQgdGhp
bmdzLgorICAgIHJlc2V0KCk7CisKKyAgICBkcmF3Tm9kZUhpZ2hsaWdodCgpOworICAgIGRyYXdS
ZWN0SGlnaGxpZ2h0KCk7CisgICAgZHJhd1BhdXNlZEluRGVidWdnZXJNZXNzYWdlKCk7CisKKyAg
ICAvLyBQb3NpdGlvbiBET00gZWxlbWVudHMuCisgICAgb3ZlcmxheVBhZ2UoKS0+bWFpbkZyYW1l
KCktPmRvY3VtZW50KCktPnJlY2FsY1N0eWxlKE5vZGU6OkZvcmNlKTsKICAgICBpZiAob3Zlcmxh
eVZpZXctPm5lZWRzTGF5b3V0KCkpCiAgICAgICAgIG92ZXJsYXlWaWV3LT5sYXlvdXQoKTsKKwor
ICAgIC8vIEtpY2sgcGFpbnQuCiAgICAgbV9jbGllbnQtPmhpZ2hsaWdodCgpOwogfQogCi12b2lk
IEluc3BlY3Rvck92ZXJsYXk6OmRyYXdOb2RlSGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCkKK3N0YXRpYyBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvclBvaW50
KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IG9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgb2JqZWN0LT5zZXROdW1i
ZXIoIngiLCBwb2ludC54KCkpOworICAgIG9iamVjdC0+c2V0TnVtYmVyKCJ5IiwgcG9pbnQueSgp
KTsKKyAgICByZXR1cm4gb2JqZWN0LnJlbGVhc2UoKTsKK30KKworc3RhdGljIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gYnVpbGRBcnJheUZvclF1YWQoY29uc3QgRmxvYXRRdWFkJiBxdWFkKQorewor
ICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCk7CisgICAgYXJyYXktPnB1c2hPYmplY3QoYnVpbGRPYmplY3RGb3JQb2ludChxdWFkLnAxKCkp
KTsKKyAgICBhcnJheS0+cHVzaE9iamVjdChidWlsZE9iamVjdEZvclBvaW50KHF1YWQucDIoKSkp
OworICAgIGFycmF5LT5wdXNoT2JqZWN0KGJ1aWxkT2JqZWN0Rm9yUG9pbnQocXVhZC5wMygpKSk7
CisgICAgYXJyYXktPnB1c2hPYmplY3QoYnVpbGRPYmplY3RGb3JQb2ludChxdWFkLnA0KCkpKTsK
KyAgICByZXR1cm4gYXJyYXkucmVsZWFzZSgpOworfQorCitzdGF0aWMgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gYnVpbGRPYmplY3RGb3JIaWdobGlnaHQoRnJhbWVWaWV3KiBtYWluVmlldywgY29u
c3QgSGlnaGxpZ2h0JiBoaWdobGlnaHQpCit7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
b2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IGFycmF5ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgaGlnaGxpZ2h0LnF1YWRzLnNpemUoKTsgKytpKQorICAgICAgICBhcnJheS0+
cHVzaEFycmF5KGJ1aWxkQXJyYXlGb3JRdWFkKGhpZ2hsaWdodC5xdWFkc1tpXSkpOworICAgIG9i
amVjdC0+c2V0QXJyYXkoInF1YWRzIiwgYXJyYXkucmVsZWFzZSgpKTsKKyAgICBvYmplY3QtPnNl
dFN0cmluZygiY29udGVudENvbG9yIiwgaGlnaGxpZ2h0LmNvbnRlbnRDb2xvci5zZXJpYWxpemVk
KCkpOworICAgIG9iamVjdC0+c2V0U3RyaW5nKCJjb250ZW50T3V0bGluZUNvbG9yIiwgaGlnaGxp
Z2h0LmNvbnRlbnRPdXRsaW5lQ29sb3Iuc2VyaWFsaXplZCgpKTsKKyAgICBvYmplY3QtPnNldFN0
cmluZygicGFkZGluZ0NvbG9yIiwgaGlnaGxpZ2h0LnBhZGRpbmdDb2xvci5zZXJpYWxpemVkKCkp
OworICAgIG9iamVjdC0+c2V0U3RyaW5nKCJib3JkZXJDb2xvciIsIGhpZ2hsaWdodC5ib3JkZXJD
b2xvci5zZXJpYWxpemVkKCkpOworICAgIG9iamVjdC0+c2V0U3RyaW5nKCJtYXJnaW5Db2xvciIs
IGhpZ2hsaWdodC5tYXJnaW5Db2xvci5zZXJpYWxpemVkKCkpOworCisgICAgRmxvYXRSZWN0IHZp
c2libGVSZWN0ID0gbWFpblZpZXctPnZpc2libGVDb250ZW50UmVjdCgpOworICAgIGlmICghbWFp
blZpZXctPmRlbGVnYXRlc1Njcm9sbGluZygpKSB7CisgICAgICAgIG9iamVjdC0+c2V0TnVtYmVy
KCJzY3JvbGxYIiwgdmlzaWJsZVJlY3QueCgpKTsKKyAgICAgICAgb2JqZWN0LT5zZXROdW1iZXIo
InNjcm9sbFkiLCB2aXNpYmxlUmVjdC55KCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIG9iamVj
dC0+c2V0TnVtYmVyKCJzY3JvbGxYIiwgMCk7CisgICAgICAgIG9iamVjdC0+c2V0TnVtYmVyKCJz
Y3JvbGxZIiwgMCk7CisgICAgfQorCisgICAgcmV0dXJuIG9iamVjdC5yZWxlYXNlKCk7Cit9CisK
K3ZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6ZHJhd05vZGVIaWdobGlnaHQoKQogewogICAgIGlmICgh
bV9oaWdobGlnaHROb2RlKQogICAgICAgICByZXR1cm47CiAKICAgICBIaWdobGlnaHQgaGlnaGxp
Z2h0OwotICAgIGdldE9yRHJhd05vZGVIaWdobGlnaHQoY29udGV4dCwgbV9oaWdobGlnaHROb2Rl
LmdldCgpLCBtX25vZGVIaWdobGlnaHRDb25maWcsICZoaWdobGlnaHQpOworICAgIGJ1aWxkTm9k
ZUhpZ2hsaWdodChtX2hpZ2hsaWdodE5vZGUuZ2V0KCksIG1fbm9kZUhpZ2hsaWdodENvbmZpZywg
JmhpZ2hsaWdodCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaGlnaGxpZ2h0T2JqZWN0
ID0gYnVpbGRPYmplY3RGb3JIaWdobGlnaHQobV9wYWdlLT5tYWluRnJhbWUoKS0+dmlldygpLCBo
aWdobGlnaHQpOworCisgICAgTm9kZSogbm9kZSA9IG1faGlnaGxpZ2h0Tm9kZS5nZXQoKTsKKyAg
ICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIG1fbm9kZUhpZ2hsaWdodENvbmZpZy5zaG93
SW5mbyAmJiBub2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCkpIHsK
KyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZWxlbWVudEluZm8gPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KG5v
ZGUpOworICAgICAgICBib29sIGlzWEhUTUwgPSBlbGVtZW50LT5kb2N1bWVudCgpLT5pc1hIVE1M
RG9jdW1lbnQoKTsKKyAgICAgICAgZWxlbWVudEluZm8tPnNldFN0cmluZygidGFnTmFtZSIsIGlz
WEhUTUwgPyBlbGVtZW50LT5ub2RlTmFtZSgpIDogZWxlbWVudC0+bm9kZU5hbWUoKS5sb3dlcigp
KTsKKyAgICAgICAgZWxlbWVudEluZm8tPnNldFN0cmluZygiaWRWYWx1ZSIsIGVsZW1lbnQtPmdl
dElkQXR0cmlidXRlKCkpOworICAgICAgICBIYXNoU2V0PEF0b21pY1N0cmluZz4gdXNlZENsYXNz
TmFtZXM7CisgICAgICAgIGlmIChlbGVtZW50LT5oYXNDbGFzcygpICYmIGVsZW1lbnQtPmlzU3R5
bGVkRWxlbWVudCgpKSB7CisgICAgICAgICAgICBTdHJpbmcgY2xhc3NOYW1lczsKKyAgICAgICAg
ICAgIGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIGNsYXNzTmFtZXNTdHJpbmcgPSBzdGF0aWNfY2Fz
dDxTdHlsZWRFbGVtZW50Kj4oZWxlbWVudCktPmNsYXNzTmFtZXMoKTsKKyAgICAgICAgICAgIHNp
emVfdCBjbGFzc05hbWVDb3VudCA9IGNsYXNzTmFtZXNTdHJpbmcuc2l6ZSgpOworICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjbGFzc05hbWVDb3VudDsgKytpKSB7CisgICAgICAg
ICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBjbGFzc05hbWUgPSBjbGFzc05hbWVzU3RyaW5n
W2ldOworICAgICAgICAgICAgICAgIGlmICh1c2VkQ2xhc3NOYW1lcy5jb250YWlucyhjbGFzc05h
bWUpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB1c2Vk
Q2xhc3NOYW1lcy5hZGQoY2xhc3NOYW1lKTsKKyAgICAgICAgICAgICAgICBjbGFzc05hbWVzICs9
IG1ha2VTdHJpbmcoIi4iLCBjbGFzc05hbWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxlbWVudEluZm8tPnNldFN0cmluZygiY2xhc3NOYW1lIiwgY2xhc3NOYW1lcyk7CisgICAgICAg
IH0KKworICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsK
KyAgICAgICAgRnJhbWUqIGNvbnRhaW5pbmdGcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1l
KCk7CisgICAgICAgIEZyYW1lVmlldyogY29udGFpbmluZ1ZpZXcgPSBjb250YWluaW5nRnJhbWUt
PnZpZXcoKTsKKyAgICAgICAgSW50UmVjdCBib3VuZGluZ0JveCA9IHBpeGVsU25hcHBlZEludFJl
Y3QoY29udGFpbmluZ1ZpZXctPmNvbnRlbnRzVG9Sb290VmlldyhyZW5kZXJlci0+YWJzb2x1dGVC
b3VuZGluZ0JveFJlY3QoKSkpOworICAgICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogbW9kZWxP
YmplY3QgPSByZW5kZXJlci0+aXNCb3hNb2RlbE9iamVjdCgpID8gdG9SZW5kZXJCb3hNb2RlbE9i
amVjdChyZW5kZXJlcikgOiAwOworICAgICAgICBlbGVtZW50SW5mby0+c2V0U3RyaW5nKCJub2Rl
V2lkdGgiLCBTdHJpbmc6Om51bWJlcihtb2RlbE9iamVjdCA/IGFkanVzdEZvckFic29sdXRlWm9v
bShtb2RlbE9iamVjdC0+cGl4ZWxTbmFwcGVkT2Zmc2V0V2lkdGgoKSwgbW9kZWxPYmplY3QpIDog
Ym91bmRpbmdCb3gud2lkdGgoKSkpOworICAgICAgICBlbGVtZW50SW5mby0+c2V0U3RyaW5nKCJu
b2RlSGVpZ2h0IiwgU3RyaW5nOjpudW1iZXIobW9kZWxPYmplY3QgPyBhZGp1c3RGb3JBYnNvbHV0
ZVpvb20obW9kZWxPYmplY3QtPnBpeGVsU25hcHBlZE9mZnNldEhlaWdodCgpLCBtb2RlbE9iamVj
dCkgOiBib3VuZGluZ0JveC5oZWlnaHQoKSkpOworICAgICAgICBoaWdobGlnaHRPYmplY3QtPnNl
dE9iamVjdCgiZWxlbWVudEluZm8iLCBlbGVtZW50SW5mby5yZWxlYXNlKCkpOworICAgIH0KKyAg
ICBldmFsdWF0ZUluT3ZlcmxheSgiZHJhd05vZGVIaWdobGlnaHQiLCBoaWdobGlnaHRPYmplY3Qp
OwogfQogCi12b2lkIEluc3BlY3Rvck92ZXJsYXk6OmRyYXdSZWN0SGlnaGxpZ2h0KEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCkKK3ZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6ZHJhd1JlY3RIaWdobGln
aHQoKQogewogICAgIGlmICghbV9oaWdobGlnaHRSZWN0KQogICAgICAgICByZXR1cm47CiAKICAg
ICBIaWdobGlnaHQgaGlnaGxpZ2h0OwotICAgIGdldE9yRHJhd1JlY3RIaWdobGlnaHQoY29udGV4
dCwgbV9wYWdlLCBtX2hpZ2hsaWdodFJlY3QuZ2V0KCksIG1fcmVjdEhpZ2hsaWdodENvbmZpZywg
JmhpZ2hsaWdodCk7CisgICAgYnVpbGRSZWN0SGlnaGxpZ2h0KG1fcGFnZSwgbV9oaWdobGlnaHRS
ZWN0LmdldCgpLCBtX3JlY3RIaWdobGlnaHRDb25maWcsICZoaWdobGlnaHQpOworICAgIGV2YWx1
YXRlSW5PdmVybGF5KCJoaWdobGlnaHRSZWN0IiwgYnVpbGRPYmplY3RGb3JIaWdobGlnaHQobV9w
YWdlLT5tYWluRnJhbWUoKS0+dmlldygpLCBoaWdobGlnaHQpKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JPdmVybGF5OjpkcmF3T3ZlcmxheVBhZ2UoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQordm9p
ZCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3UGF1c2VkSW5EZWJ1Z2dlck1lc3NhZ2UoKQogewotICAg
IEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY29udGV4dCk7Ci0gICAgRnJh
bWVWaWV3KiB2aWV3ID0gb3ZlcmxheVBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKTsKLSAgICB2
aWV3LT5wYWludChjb250ZXh0LCBJbnRSZWN0KDAsIDAsIHZpZXctPndpZHRoKCksIHZpZXctPmhl
aWdodCgpKSk7CisgICAgaWYgKCFtX3BhdXNlZEluRGVidWdnZXJNZXNzYWdlLmlzTnVsbCgpKQor
ICAgICAgICBldmFsdWF0ZUluT3ZlcmxheSgiZHJhd1BhdXNlZEluRGVidWdnZXJNZXNzYWdlIiwg
bV9wYXVzZWRJbkRlYnVnZ2VyTWVzc2FnZSk7CiB9CiAKIFBhZ2UqIEluc3BlY3Rvck92ZXJsYXk6
Om92ZXJsYXlQYWdlKCkKQEAgLTYyMSwxMyArNDA2LDYgQEAgUGFnZSogSW5zcGVjdG9yT3Zlcmxh
eTo6b3ZlcmxheVBhZ2UoKQogICAgIFNldHRpbmdzKiBvdmVybGF5U2V0dGluZ3MgPSBtX292ZXJs
YXlQYWdlLT5zZXR0aW5ncygpOwogCiAgICAgb3ZlcmxheVNldHRpbmdzLT5zZXRTdGFuZGFyZEZv
bnRGYW1pbHkoc2V0dGluZ3MtPnN0YW5kYXJkRm9udEZhbWlseSgpKTsKLSNpZiBPUyhXSU5ET1dT
KQotICAgIG92ZXJsYXlTZXR0aW5ncy0+c2V0Rml4ZWRGb250RmFtaWx5KCJDb25zb2xhcyIpOwot
I2VsaWYgT1MoTUFDX09TX1gpCi0gICAgb3ZlcmxheVNldHRpbmdzLT5zZXRGaXhlZEZvbnRGYW1p
bHkoIk1lbmxvIik7Ci0jZWxpZiBPUyhVTklYKQotICAgIG92ZXJsYXlTZXR0aW5ncy0+c2V0Rml4
ZWRGb250RmFtaWx5KCJkZWphdnUgc2FucyBtb25vIik7Ci0jZW5kaWYKICAgICBvdmVybGF5U2V0
dGluZ3MtPnNldFNlcmlmRm9udEZhbWlseShzZXR0aW5ncy0+c2VyaWZGb250RmFtaWx5KCkpOwog
ICAgIG92ZXJsYXlTZXR0aW5ncy0+c2V0U2Fuc1NlcmlmRm9udEZhbWlseShzZXR0aW5ncy0+c2Fu
c1NlcmlmRm9udEZhbWlseSgpKTsKICAgICBvdmVybGF5U2V0dGluZ3MtPnNldEN1cnNpdmVGb250
RmFtaWx5KHNldHRpbmdzLT5jdXJzaXZlRm9udEZhbWlseSgpKTsKQEAgLTYzNSw4ICs0MTMsNiBA
QCBQYWdlKiBJbnNwZWN0b3JPdmVybGF5OjpvdmVybGF5UGFnZSgpCiAgICAgb3ZlcmxheVNldHRp
bmdzLT5zZXRQaWN0b2dyYXBoRm9udEZhbWlseShzZXR0aW5ncy0+cGljdG9ncmFwaEZvbnRGYW1p
bHkoKSk7CiAgICAgb3ZlcmxheVNldHRpbmdzLT5zZXRNaW5pbXVtRm9udFNpemUoc2V0dGluZ3Mt
Pm1pbmltdW1Gb250U2l6ZSgpKTsKICAgICBvdmVybGF5U2V0dGluZ3MtPnNldE1pbmltdW1Mb2dp
Y2FsRm9udFNpemUoc2V0dGluZ3MtPm1pbmltdW1Mb2dpY2FsRm9udFNpemUoKSk7Ci0gICAgb3Zl
cmxheVNldHRpbmdzLT5zZXREZWZhdWx0Rm9udFNpemUoc2V0dGluZ3MtPmRlZmF1bHRGb250U2l6
ZSgpKTsKLSAgICBvdmVybGF5U2V0dGluZ3MtPnNldERlZmF1bHRGaXhlZEZvbnRTaXplKHNldHRp
bmdzLT5kZWZhdWx0Rml4ZWRGb250U2l6ZSgpKTsKICAgICBvdmVybGF5U2V0dGluZ3MtPnNldE1l
ZGlhRW5hYmxlZChmYWxzZSk7CiAgICAgb3ZlcmxheVNldHRpbmdzLT5zZXRTY3JpcHRFbmFibGVk
KHRydWUpOwogICAgIG92ZXJsYXlTZXR0aW5ncy0+c2V0UGx1Z2luc0VuYWJsZWQoZmFsc2UpOwpA
QCAtNjUzLDkgKzQyOSwyMiBAQCBQYWdlKiBJbnNwZWN0b3JPdmVybGF5OjpvdmVybGF5UGFnZSgp
CiAgICAgbG9hZGVyLT5hY3RpdmVEb2N1bWVudExvYWRlcigpLT53cml0ZXIoKS0+YWRkRGF0YShy
ZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihJbnNwZWN0b3JPdmVybGF5UGFnZV9odG1sKSwg
c2l6ZW9mKEluc3BlY3Rvck92ZXJsYXlQYWdlX2h0bWwpKTsKICAgICBsb2FkZXItPmFjdGl2ZURv
Y3VtZW50TG9hZGVyKCktPndyaXRlcigpLT5lbmQoKTsKIAorI2lmIE9TKFdJTkRPV1MpCisgICAg
ZXZhbHVhdGVJbk92ZXJsYXkoInNldFBsYXRmb3JtIiwgIndpbmRvd3MiKTsKKyNlbGlmIE9TKE1B
Q19PU19YKQorICAgIGV2YWx1YXRlSW5PdmVybGF5KCJzZXRQbGF0Zm9ybSIsICJtYWMiKTsKKyNl
bGlmIE9TKFVOSVgpCisgICAgZXZhbHVhdGVJbk92ZXJsYXkoInNldFBsYXRmb3JtIiwgImxpbnV4
Iik7CisjZW5kaWYKKwogICAgIHJldHVybiBtX292ZXJsYXlQYWdlLmdldCgpOwogfQogCit2b2lk
IEluc3BlY3Rvck92ZXJsYXk6OnJlc2V0KCkKK3sKKyAgICBldmFsdWF0ZUluT3ZlcmxheSgicmVz
ZXQiLCAiIik7Cit9CisKIHZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6ZXZhbHVhdGVJbk92ZXJsYXko
Y29uc3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQpCiB7CiAgICAgUmVm
UHRyPEluc3BlY3RvckFycmF5PiBjb21tYW5kID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwpA
QCAtNjY0LDYgKzQ1MywxNCBAQCB2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmV2YWx1YXRlSW5PdmVy
bGF5KGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBTdHJpbmcmIGFyZwogICAgIG92ZXJsYXlQ
YWdlKCktPm1haW5GcmFtZSgpLT5zY3JpcHQoKS0+ZXZhbHVhdGUoU2NyaXB0U291cmNlQ29kZSht
YWtlU3RyaW5nKCJkaXNwYXRjaCgiLCBjb21tYW5kLT50b0pTT05TdHJpbmcoKSwgIikiKSkpOwog
fQogCit2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmV2YWx1YXRlSW5PdmVybGF5KGNvbnN0IFN0cmlu
ZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBhcmd1bWVudCkKK3sKKyAgICBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNvbW1hbmQgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7
CisgICAgY29tbWFuZC0+cHVzaFN0cmluZyhtZXRob2QpOworICAgIGNvbW1hbmQtPnB1c2hWYWx1
ZShhcmd1bWVudCk7CisgICAgb3ZlcmxheVBhZ2UoKS0+bWFpbkZyYW1lKCktPnNjcmlwdCgpLT5l
dmFsdWF0ZShTY3JpcHRTb3VyY2VDb2RlKG1ha2VTdHJpbmcoImRpc3BhdGNoKCIsIGNvbW1hbmQt
PnRvSlNPTlN0cmluZygpLCAiKSIpKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3Rvck92ZXJsYXkuaAppbmRleCBhYmM4YmNlOTdmZjZjY2E1M2Q4ZDhjOTJjODFkNmZkMTFi
NmIwYmIyLi43MmQ1NDMxOGFjYjQyMzU4ZmRkZjQzOTZhOGM4OGJlMjFkZTNjNGFhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmgKQEAgLTQ0LDYgKzQ0LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ29sb3I7CiBjbGFzcyBHcmFwaGljc0NvbnRl
eHQ7CiBjbGFzcyBJbnNwZWN0b3JDbGllbnQ7CitjbGFzcyBJbnNwZWN0b3JWYWx1ZTsKIGNsYXNz
IEludFJlY3Q7CiBjbGFzcyBOb2RlOwogY2xhc3MgUGFnZTsKQEAgLTY2LDEyICs2NywxNCBAQCBz
dHJ1Y3QgSGlnaGxpZ2h0IHsKICAgICB2b2lkIHNldENvbG9ycyhjb25zdCBIaWdobGlnaHRDb25m
aWcmIGhpZ2hsaWdodENvbmZpZykKICAgICB7CiAgICAgICAgIGNvbnRlbnRDb2xvciA9IGhpZ2hs
aWdodENvbmZpZy5jb250ZW50OworICAgICAgICBjb250ZW50T3V0bGluZUNvbG9yID0gaGlnaGxp
Z2h0Q29uZmlnLmNvbnRlbnRPdXRsaW5lOwogICAgICAgICBwYWRkaW5nQ29sb3IgPSBoaWdobGln
aHRDb25maWcucGFkZGluZzsKICAgICAgICAgYm9yZGVyQ29sb3IgPSBoaWdobGlnaHRDb25maWcu
Ym9yZGVyOwogICAgICAgICBtYXJnaW5Db2xvciA9IGhpZ2hsaWdodENvbmZpZy5tYXJnaW47CiAg
ICAgfQogCiAgICAgQ29sb3IgY29udGVudENvbG9yOworICAgIENvbG9yIGNvbnRlbnRPdXRsaW5l
Q29sb3I7CiAgICAgQ29sb3IgcGFkZGluZ0NvbG9yOwogICAgIENvbG9yIGJvcmRlckNvbG9yOwog
ICAgIENvbG9yIG1hcmdpbkNvbG9yOwpAQCAtOTAsNiArOTMsNyBAQCBwdWJsaWM6CiAgICAgfQog
ICAgIH5JbnNwZWN0b3JPdmVybGF5KCk7CiAKKyAgICB2b2lkIHVwZGF0ZSgpOwogICAgIHZvaWQg
cGFpbnQoR3JhcGhpY3NDb250ZXh0Jik7CiAgICAgdm9pZCBkcmF3T3V0bGluZShHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBMYXlvdXRSZWN0JiwgY29uc3QgQ29sb3ImKTsKICAgICB2b2lkIGdldEhp
Z2hsaWdodChIaWdobGlnaHQqKSBjb25zdDsKQEAgLTEwNSwxMiArMTA5LDEzIEBAIHB1YmxpYzoK
IHByaXZhdGU6CiAgICAgSW5zcGVjdG9yT3ZlcmxheShQYWdlKiwgSW5zcGVjdG9yQ2xpZW50Kik7
CiAKLSAgICB2b2lkIHVwZGF0ZSgpOwotICAgIHZvaWQgZHJhd05vZGVIaWdobGlnaHQoR3JhcGhp
Y3NDb250ZXh0Kik7Ci0gICAgdm9pZCBkcmF3UmVjdEhpZ2hsaWdodChHcmFwaGljc0NvbnRleHQq
KTsKLSAgICB2b2lkIGRyYXdPdmVybGF5UGFnZShHcmFwaGljc0NvbnRleHQqKTsKKyAgICB2b2lk
IGRyYXdOb2RlSGlnaGxpZ2h0KCk7CisgICAgdm9pZCBkcmF3UmVjdEhpZ2hsaWdodCgpOworICAg
IHZvaWQgZHJhd1BhdXNlZEluRGVidWdnZXJNZXNzYWdlKCk7CiAgICAgUGFnZSogb3ZlcmxheVBh
Z2UoKTsKKyAgICB2b2lkIHJlc2V0KCk7CiAgICAgdm9pZCBldmFsdWF0ZUluT3ZlcmxheShjb25z
dCBTdHJpbmcmIG1ldGhvZCwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCk7CisgICAgdm9pZCBldmFs
dWF0ZUluT3ZlcmxheShjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4gYXJndW1lbnQpOwogCiAgICAgUGFnZSogbV9wYWdlOwogICAgIEluc3BlY3RvckNsaWVu
dCogbV9jbGllbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yT3ZlcmxheVBhZ2UuaHRtbCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JP
dmVybGF5UGFnZS5odG1sCmluZGV4IGZhNjgyYzMyMDQ4YzVjNzE5MGMyNWYzN2IzZjc0NWJiMzRi
Yzk5MWYuLjIxZDRjNjMyMzcxYjQyNjgyNGIzZmMyZTUzYTJlNjkwMmM4NWFiZjQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5UGFnZS5odG1sCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5UGFnZS5odG1sCkBA
IC0zNCw2ICszNCwyMSBAQCBib2R5IHsKICAgICBwYWRkaW5nOiAwOwogfQogCitib2R5LnBsYXRm
b3JtLW1hYyB7CisgICAgZm9udC1zaXplOiAxMXB4OworICAgIGZvbnQtZmFtaWx5OiBNZW5sbywg
TW9uYWNvOworfQorCitib2R5LnBsYXRmb3JtLXdpbmRvd3MgeworICAgIGZvbnQtc2l6ZTogMTJw
eDsKKyAgICBmb250LWZhbWlseTogQ29uc29sYXMsIEx1Y2lkYSBDb25zb2xlOworfQorCitib2R5
LnBsYXRmb3JtLWxpbnV4IHsKKyAgICBmb250LXNpemU6IDExcHg7CisgICAgZm9udC1mYW1pbHk6
IGRlamF2dSBzYW5zIG1vbm87Cit9CisKIC5maWxsIHsKICAgICBwb3NpdGlvbjogYWJzb2x1dGU7
CiAgICAgdG9wOiAwOwpAQCAtNDcsMzEgKzYyLDM0NiBAQCBib2R5IHsKIH0KIAogLm1lc3NhZ2Ut
bGluZSB7CisgICAgbWFyZ2luOiAxMHB4IDA7CiAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogfQog
CiAubWVzc2FnZS1ib3ggewotICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgYmFja2dy
b3VuZC1jb2xvcjogcmdiKDI1NSwgMjU1LCAxOTQpOwogICAgIGJvcmRlcjogMXB4IHNvbGlkIHJn
YigxMjgsIDEyOCwgMTI4KTsKICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Ci0gICAgbWFyZ2lu
OiAxMHB4IDA7CiAgICAgcGFkZGluZzogMnB4IDRweDsKIH0KIAorLnB4IHsKKyAgICBjb2xvcjog
cmdiKDEyOCwgMTI4LCAxMjgpOworfQorCisjZWxlbWVudC10aXRsZSB7CisgICAgcG9zaXRpb246
IGFic29sdXRlOworICAgIHotaW5kZXg6IDEwOworfQorCisjdGFnLW5hbWUgeworICAgIGNvbG9y
OiByZ2IoMTM2LCAxOCwgMTI4KTsKK30KKworI25vZGUtaWQgeworICAgIGNvbG9yOiByZ2IoMjYs
IDI2LCAxNjYpOworfQogPC9zdHlsZT4KIDxzY3JpcHQ+Ci1mdW5jdGlvbiBzZXRQYXVzZWRJbkRl
YnVnZ2VyTWVzc2FnZShtZXNzYWdlKQorY29uc3QgbGlnaHRHcmlkQ29sb3IgPSAicmdiYSgwLDAs
MCwwLjIpIjsKK2NvbnN0IGRhcmtHcmlkQ29sb3IgPSAicmdiYSgwLDAsMCwwLjUpIjsKK2NvbnN0
IHRyYW5zcGFyZW50Q29sb3IgPSAicmdiYSgwLCAwLCAwLCAwKSI7CisKK2Z1bmN0aW9uIGRyYXdQ
YXVzZWRJbkRlYnVnZ2VyTWVzc2FnZShtZXNzYWdlKQogewogICAgIHZhciBwYXVzZWRJbkRlYnVn
Z2VyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhdXNlZC1pbi1kZWJ1Z2dlciIpOwotICAg
IGlmIChtZXNzYWdlKSB7Ci0gICAgICAgIHBhdXNlZEluRGVidWdnZXIudGV4dENvbnRlbnQgPSBt
ZXNzYWdlOwotICAgICAgICBwYXVzZWRJbkRlYnVnZ2VyLnN0eWxlLnZpc2liaWxpdHkgPSAidmlz
aWJsZSI7Ci0gICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgiZGltbWVkIik7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgcGF1c2VkSW5EZWJ1Z2dlci5zdHlsZS52aXNpYmlsaXR5ID0g
ImhpZGRlbiI7Ci0gICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgiZGltbWVk
Iik7CisgICAgcGF1c2VkSW5EZWJ1Z2dlci50ZXh0Q29udGVudCA9IG1lc3NhZ2U7CisgICAgcGF1
c2VkSW5EZWJ1Z2dlci5zdHlsZS52aXNpYmlsaXR5ID0gInZpc2libGUiOworICAgIGRvY3VtZW50
LmJvZHkuY2xhc3NMaXN0LmFkZCgiZGltbWVkIik7Cit9CisKK2Z1bmN0aW9uIF9kcmF3R3JpZCho
aWdobGlnaHQpCit7CisgICAgY29udGV4dC5zYXZlKCk7CisKKyAgICB2YXIgd2lkdGggPSBjYW52
YXMud2lkdGg7CisgICAgdmFyIGhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7CisKKyAgICBjb250ZXh0
LmZpbGxTdHlsZSA9ICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNikiOworICAgIGNvbnRleHQuZmls
bFJlY3QoMCwgMCwgY2FudmFzLndpZHRoLCAxNSk7CisgICAgY29udGV4dC5maWxsUmVjdCgwLCAx
NSwgMTUsIGNhbnZhcy5oZWlnaHQpOworICAgIAorICAgIGNvbnRleHQudHJhbnNsYXRlKC1oaWdo
bGlnaHQuc2Nyb2xsWCwgMC41IC0gaGlnaGxpZ2h0LnNjcm9sbFkpOworICAgIGNvbnRleHQubGlu
ZVdpZHRoID0gMTsKKworICAgIGNvbnN0IGdyaWRTdWJTdGVwID0gNTsKKyAgICBjb25zdCBncmlk
U3RlcCA9IDUwOworCisgICAgY29udGV4dC5zdHJva2VTdHlsZSA9IGxpZ2h0R3JpZENvbG9yOwor
CisgICAgZm9yICh2YXIgeSA9IGdyaWRTdWJTdGVwOyB5IDwgaGlnaGxpZ2h0LnNjcm9sbFkgKyBo
ZWlnaHQ7IHkgKz0gZ3JpZFN1YlN0ZXApIHsKKyAgICAgICAgaWYgKCEoeSAlIGdyaWRTdGVwKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpOworICAg
ICAgICBjb250ZXh0Lm1vdmVUbyhoaWdobGlnaHQuc2Nyb2xsWCwgeSk7CisgICAgICAgIGNvbnRl
eHQubGluZVRvKGhpZ2hsaWdodC5zY3JvbGxYICsgZ3JpZFN1YlN0ZXAsIHkpOworICAgICAgICBj
b250ZXh0LnN0cm9rZSgpOwogICAgIH0KKworICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSBkYXJr
R3JpZENvbG9yOworICAgIGNvbnRleHQuZmlsbFN0eWxlID0gZGFya0dyaWRDb2xvcjsKKyAgICBm
b3IgKHZhciB5ID0gZ3JpZFN0ZXA7IHkgPCBoZWlnaHQgKyBoaWdobGlnaHQuc2Nyb2xsWTsgeSAr
PSBncmlkU3RlcCkgeworICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpOworICAgICAgICBjb250
ZXh0Lm1vdmVUbyhoaWdobGlnaHQuc2Nyb2xsWCwgeSk7CisgICAgICAgIHZhciBtYXJrTGVuZ3Ro
ID0gKHkgJSAoZ3JpZFN0ZXAgKiAyKSkgPyA1IDogODsKKyAgICAgICAgY29udGV4dC5saW5lVG8o
aGlnaGxpZ2h0LnNjcm9sbFggKyBtYXJrTGVuZ3RoLCB5KTsKKyAgICAgICAgY29udGV4dC5zdHJv
a2UoKTsKKyAgICAgICAgaWYgKCEoeSAlIChncmlkU3RlcCAqIDIpKSkgeworICAgICAgICAgICAg
Y29udGV4dC5zYXZlKCk7CisgICAgICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZShoaWdobGlnaHQu
c2Nyb2xsWCwgeSk7CisgICAgICAgICAgICBjb250ZXh0LnJvdGF0ZSgtTWF0aC5QSSAvIDIpOwor
ICAgICAgICAgICAgY29udGV4dC5maWxsVGV4dCh5LCAyLCAxMyk7CisgICAgICAgICAgICBjb250
ZXh0LnJlc3RvcmUoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbnRleHQudHJhbnNsYXRl
KDAuNSwgLTAuNSk7CisKKyAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gbGlnaHRHcmlkQ29sb3I7
CisgICAgZm9yICh2YXIgeCA9IGdyaWRTdWJTdGVwOyB4IDwgaGlnaGxpZ2h0LnNjcm9sbFggKyB3
aWR0aDsgeCArPSBncmlkU3ViU3RlcCkgeworICAgICAgICBpZiAoISh4ICUgZ3JpZFN0ZXApKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7CisgICAg
ICAgIGNvbnRleHQubW92ZVRvKHgsIGhpZ2hsaWdodC5zY3JvbGxZKTsKKyAgICAgICAgY29udGV4
dC5saW5lVG8oeCwgaGlnaGxpZ2h0LnNjcm9sbFkgKyBncmlkU3ViU3RlcCk7CisgICAgICAgIGNv
bnRleHQuc3Ryb2tlKCk7CisgICAgfQorCisgICAgY29udGV4dC5zdHJva2VTdHlsZSA9IGRhcmtH
cmlkQ29sb3I7CisgICAgY29udGV4dC5maWxsU3R5bGUgPSBkYXJrR3JpZENvbG9yOworICAgIGZv
ciAodmFyIHggPSBncmlkU3RlcDsgeCA8IHdpZHRoICsgaGlnaGxpZ2h0LnNjcm9sbFg7IHggKz0g
Z3JpZFN0ZXApIHsKKyAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTsKKyAgICAgICAgY29udGV4
dC5tb3ZlVG8oeCwgaGlnaGxpZ2h0LnNjcm9sbFkpOworICAgICAgICB2YXIgbWFya0xlbmd0aCA9
ICh4ICUgKGdyaWRTdGVwICogMikpID8gNSA6IDg7CisgICAgICAgIGNvbnRleHQubGluZVRvKHgs
IGhpZ2hsaWdodC5zY3JvbGxZICsgbWFya0xlbmd0aCk7CisgICAgICAgIGNvbnRleHQuc3Ryb2tl
KCk7CisgICAgICAgIGlmICghKHggJSAoZ3JpZFN0ZXAgKiAyKSkpCisgICAgICAgICAgICBjb250
ZXh0LmZpbGxUZXh0KHgsIHggKyAyLCBoaWdobGlnaHQuc2Nyb2xsWSArIDEzKTsKKyAgICB9Cisg
ICAgY29udGV4dC5yZXN0b3JlKCk7Cit9CisKK2Z1bmN0aW9uIHF1YWRUb1BhdGgocXVhZCkKK3sK
KyAgICBjb250ZXh0LmJlZ2luUGF0aCgpOworICAgIGNvbnRleHQubW92ZVRvKHF1YWRbMF0ueCwg
cXVhZFswXS55KTsKKyAgICBjb250ZXh0LmxpbmVUbyhxdWFkWzFdLngsIHF1YWRbMV0ueSk7Cisg
ICAgY29udGV4dC5saW5lVG8ocXVhZFsyXS54LCBxdWFkWzJdLnkpOworICAgIGNvbnRleHQubGlu
ZVRvKHF1YWRbM10ueCwgcXVhZFszXS55KTsKKyAgICBjb250ZXh0LmNsb3NlUGF0aCgpOworICAg
IHJldHVybiBjb250ZXh0OworfQorCitmdW5jdGlvbiBkcmF3T3V0bGluZWRRdWFkKHF1YWQsIGZp
bGxDb2xvciwgb3V0bGluZUNvbG9yKQoreworICAgIGNvbnRleHQuc2F2ZSgpOworICAgIGNvbnRl
eHQubGluZVdpZHRoID0gMjsKKyAgICBxdWFkVG9QYXRoKHF1YWQpLmNsaXAoKTsKKyAgICBjb250
ZXh0LmZpbGxTdHlsZSA9IGZpbGxDb2xvcjsKKyAgICBjb250ZXh0LmZpbGwoKTsKKyAgICBpZiAo
b3V0bGluZUNvbG9yKSB7CisgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSBvdXRsaW5lQ29s
b3I7CisgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7CisgICAgfQorICAgIGNvbnRleHQucmVzdG9y
ZSgpOworfQorCitmdW5jdGlvbiBkcmF3T3V0bGluZWRRdWFkV2l0aENsaXAocXVhZCwgY2xpcFF1
YWQsIGZpbGxDb2xvcikKK3sKKyAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImNhbnZhcyIpOworICAgIGNvbnRleHQuZmlsbFN0eWxlID0gZmlsbENvbG9yOworICAgIGNv
bnRleHQuc2F2ZSgpOworICAgIGNvbnRleHQubGluZVdpZHRoID0gMDsKKyAgICBxdWFkVG9QYXRo
KHF1YWQpLmZpbGwoKTsKKyAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICJk
ZXN0aW5hdGlvbi1vdXQiOworICAgIGNvbnRleHQuZmlsbFN0eWxlID0gInJlZCI7CisgICAgcXVh
ZFRvUGF0aChjbGlwUXVhZCkuZmlsbCgpOworICAgIGNvbnRleHQucmVzdG9yZSgpOworfQorCitm
dW5jdGlvbiBxdWFkRXF1YWxzKHF1YWQxLCBxdWFkMikKK3sKKyAgICByZXR1cm4gcXVhZDFbMF0u
eCA9PT0gcXVhZDJbMF0ueCAmJiBxdWFkMVswXS55ID09PSBxdWFkMlswXS55ICYmCisgICAgICAg
IHF1YWQxWzFdLnggPT09IHF1YWQyWzFdLnggJiYgcXVhZDFbMV0ueSA9PT0gcXVhZDJbMV0ueSAm
JgorICAgICAgICBxdWFkMVsyXS54ID09PSBxdWFkMlsyXS54ICYmIHF1YWQxWzJdLnkgPT09IHF1
YWQyWzJdLnkgJiYKKyAgICAgICAgcXVhZDFbM10ueCA9PT0gcXVhZDJbM10ueCAmJiBxdWFkMVsz
XS55ID09PSBxdWFkMlszXS55OworfQorCitmdW5jdGlvbiByZXNldCgpCit7CisgICAgd2luZG93
LmNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKyAgICB3aW5kb3cu
Y29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOworICAgIGNhbnZhcy53aWR0aCA9IGRv
Y3VtZW50LmJvZHkub2Zmc2V0V2lkdGg7CisgICAgY2FudmFzLmhlaWdodCA9IGRvY3VtZW50LmJv
ZHkub2Zmc2V0SGVpZ2h0OworCisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhdXNlZC1p
bi1kZWJ1Z2dlciIpLnN0eWxlLnZpc2liaWxpdHkgPSAiaGlkZGVuIjsKKyAgICBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiZWxlbWVudC10aXRsZSIpLnN0eWxlLnZpc2liaWxpdHkgPSAiaGlkZGVu
IjsKKyAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoImRpbW1lZCIpOworfQorCitm
dW5jdGlvbiBfZHJhd0VsZW1lbnRUaXRsZShoaWdobGlnaHQpCit7CisgICAgdmFyIGVsZW1lbnRJ
bmZvID0gaGlnaGxpZ2h0LmVsZW1lbnRJbmZvOworICAgIGlmICghaGlnaGxpZ2h0LmVsZW1lbnRJ
bmZvKQorICAgICAgICByZXR1cm47CisKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGFn
LW5hbWUiKS50ZXh0Q29udGVudCA9IGVsZW1lbnRJbmZvLnRhZ05hbWU7CisgICAgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoIm5vZGUtaWQiKS50ZXh0Q29udGVudCA9IGVsZW1lbnRJbmZvLm5vZGVJ
ZCA/ICIjIiArIGVsZW1lbnRJbmZvLm5vZGVJZCA6ICIiOworICAgIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJjbGFzcy1uYW1lIikudGV4dENvbnRlbnQgPSBlbGVtZW50SW5mby5jbGFzc05hbWUg
fHwgIiI7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm5vZGUtd2lkdGgiKS50ZXh0Q29u
dGVudCA9IGVsZW1lbnRJbmZvLm5vZGVXaWR0aDsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgibm9kZS1oZWlnaHQiKS50ZXh0Q29udGVudCA9IGVsZW1lbnRJbmZvLm5vZGVIZWlnaHQ7Cisg
ICAgdmFyIGVsZW1lbnRUaXRsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJlbGVtZW50LXRp
dGxlIik7CisKKyAgICB2YXIgbWFyZ2luUXVhZCA9IGhpZ2hsaWdodC5xdWFkc1swXTsKKworICAg
IHZhciB0aXRsZVdpZHRoID0gZWxlbWVudFRpdGxlLm9mZnNldFdpZHRoICsgNjsKKyAgICB2YXIg
dGl0bGVIZWlnaHQgPSBlbGVtZW50VGl0bGUub2Zmc2V0SGVpZ2h0ICsgNDsKKworICAgIHZhciBh
bmNob3JUb3AgPSBtYXJnaW5RdWFkWzBdLnk7CisgICAgdmFyIGFuY2hvckJvdHRvbSA9IG1hcmdp
blF1YWRbM10ueQorCisgICAgY29uc3QgYXJyb3dIZWlnaHQgPSA3OworICAgIHZhciByZW5kZXJB
cnJvd1VwID0gZmFsc2U7CisgICAgdmFyIHJlbmRlckFycm93RG93biA9IGZhbHNlOworCisgICAg
dmFyIGJveFggPSBNYXRoLm1heCgyLCBtYXJnaW5RdWFkWzBdLngpOworICAgIGlmIChib3hYICsg
dGl0bGVXaWR0aCA+IGNhbnZhcy53aWR0aCkKKyAgICAgICAgYm94WCA9IGNhbnZhcy53aWR0aCAt
IHRpdGxlV2lkdGggLSAyOworCisgICAgdmFyIGJveFk7CisgICAgaWYgKGFuY2hvclRvcCA+IGNh
bnZhcy5oZWlnaHQpIHsKKyAgICAgICAgYm94WSA9IGNhbnZhcy5oZWlnaHQgLSB0aXRsZUhlaWdo
dCAtIGFycm93SGVpZ2h0OworICAgICAgICByZW5kZXJBcnJvd0Rvd24gPSB0cnVlOworICAgIH0g
ZWxzZSBpZiAoYW5jaG9yQm90dG9tIDwgMCkgeworICAgICAgICBib3hZID0gYXJyb3dIZWlnaHQ7
CisgICAgICAgIHJlbmRlckFycm93VXAgPSB0cnVlOworICAgIH0gZWxzZSBpZiAoYW5jaG9yQm90
dG9tICsgdGl0bGVIZWlnaHQgKyBhcnJvd0hlaWdodCA8IGNhbnZhcy5oZWlnaHQpIHsKKyAgICAg
ICAgYm94WSA9IGFuY2hvckJvdHRvbSArIGFycm93SGVpZ2h0IC0gNDsKKyAgICAgICAgcmVuZGVy
QXJyb3dVcCA9IHRydWU7CisgICAgfSBlbHNlIGlmIChhbmNob3JUb3AgLSB0aXRsZUhlaWdodCAt
IGFycm93SGVpZ2h0ID4gMCkgeworICAgICAgICBib3hZID0gYW5jaG9yVG9wIC0gdGl0bGVIZWln
aHQgLSBhcnJvd0hlaWdodCArIDM7CisgICAgICAgIHJlbmRlckFycm93RG93biA9IHRydWU7Cisg
ICAgfSBlbHNlCisgICAgICAgIGJveFkgPSBhcnJvd0hlaWdodDsKKworICAgIGNvbnRleHQuc2F2
ZSgpOworICAgIGNvbnRleHQudHJhbnNsYXRlKDAuNSwgMC41KTsKKyAgICBjb250ZXh0LmJlZ2lu
UGF0aCgpOworICAgIGNvbnRleHQubW92ZVRvKGJveFgsIGJveFkpOworICAgIGlmIChyZW5kZXJB
cnJvd1VwKSB7CisgICAgICAgIGNvbnRleHQubGluZVRvKGJveFggKyAyICogYXJyb3dIZWlnaHQs
IGJveFkpOworICAgICAgICBjb250ZXh0LmxpbmVUbyhib3hYICsgMyAqIGFycm93SGVpZ2h0LCBi
b3hZIC0gYXJyb3dIZWlnaHQpOworICAgICAgICBjb250ZXh0LmxpbmVUbyhib3hYICsgNCAqIGFy
cm93SGVpZ2h0LCBib3hZKTsKKyAgICB9CisgICAgY29udGV4dC5saW5lVG8oYm94WCArIHRpdGxl
V2lkdGgsIGJveFkpOworICAgIGNvbnRleHQubGluZVRvKGJveFggKyB0aXRsZVdpZHRoLCBib3hZ
ICsgdGl0bGVIZWlnaHQpOworICAgIGlmIChyZW5kZXJBcnJvd0Rvd24pIHsKKyAgICAgICAgY29u
dGV4dC5saW5lVG8oYm94WCArIDQgKiBhcnJvd0hlaWdodCwgYm94WSArIHRpdGxlSGVpZ2h0KTsK
KyAgICAgICAgY29udGV4dC5saW5lVG8oYm94WCArIDMgKiBhcnJvd0hlaWdodCwgYm94WSArIHRp
dGxlSGVpZ2h0ICsgYXJyb3dIZWlnaHQpOworICAgICAgICBjb250ZXh0LmxpbmVUbyhib3hYICsg
MiAqIGFycm93SGVpZ2h0LCBib3hZICsgdGl0bGVIZWlnaHQpOworICAgIH0KKyAgICBjb250ZXh0
LmxpbmVUbyhib3hYLCBib3hZICsgdGl0bGVIZWlnaHQpOworICAgIGNvbnRleHQuY2xvc2VQYXRo
KCk7CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAicmdiKDI1NSwgMjU1LCAxOTQpIjsKKyAgICBj
b250ZXh0LmZpbGwoKTsKKyAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gInJnYigxMjgsIDEyOCwg
MTI4KSI7CisgICAgY29udGV4dC5zdHJva2UoKTsKKworICAgIGNvbnRleHQucmVzdG9yZSgpOwor
CisgICAgZWxlbWVudFRpdGxlLnN0eWxlLnZpc2liaWxpdHkgPSAidmlzaWJsZSI7CisgICAgZWxl
bWVudFRpdGxlLnN0eWxlLnRvcCA9IChib3hZICsgMykgKyAicHgiOworICAgIGVsZW1lbnRUaXRs
ZS5zdHlsZS5sZWZ0ID0gKGJveFggKyAzKSArICJweCI7Cit9CisKK2Z1bmN0aW9uIF9kcmF3UnVs
ZXJzKGhpZ2hsaWdodCkKK3sKKyAgICBjb250ZXh0LnNhdmUoKTsKKyAgICBjb250ZXh0LnN0cm9r
ZVN0eWxlID0gInJnYmEoMTI4LCAxMjgsIDEyOCwgMC4zKSI7CisgICAgY29udGV4dC5saW5lV2lk
dGggPSAxOworICAgIGNvbnRleHQudHJhbnNsYXRlKDAuNSwgMC41KTsKKyAgICB2YXIgbGVmdG1v
c3RYRm9yWSA9IHt9OworICAgIHZhciB0b3Btb3N0WUZvclggPSB7fTsKKworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgaGlnaGxpZ2h0LnF1YWRzLmxlbmd0aDsgKytpKSB7CisgICAgICAgIHZhciBx
dWFkID0gaGlnaGxpZ2h0LnF1YWRzW2ldOworICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHF1
YWQubGVuZ3RoOyArK2opIHsKKyAgICAgICAgICAgIHZhciB4ID0gcXVhZFtqXS54OworICAgICAg
ICAgICAgdmFyIHkgPSBxdWFkW2pdLnk7CisgICAgICAgICAgICB0b3Btb3N0WUZvclhbTWF0aC5y
b3VuZCh4KV0gPSBNYXRoLm1pbih0b3Btb3N0WUZvclhbeF0gfHwgTnVtYmVyLk1BWF9WQUxVRSwg
TWF0aC5yb3VuZChxdWFkW2pdLnkpKTsKKyAgICAgICAgICAgIGxlZnRtb3N0WEZvcllbTWF0aC5y
b3VuZCh5KV0gPSBNYXRoLm1pbihsZWZ0bW9zdFhGb3JZW3ldIHx8IE51bWJlci5NQVhfVkFMVUUs
IE1hdGgucm91bmQocXVhZFtqXS54KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHZh
ciB5IGluIGxlZnRtb3N0WEZvclkpIHsKKyAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTsKKyAg
ICAgICAgY29udGV4dC5tb3ZlVG8oMCwgeSk7CisgICAgICAgIGNvbnRleHQubGluZVRvKGxlZnRt
b3N0WEZvcllbeV0sIHkpOworICAgICAgICBjb250ZXh0LnN0cm9rZSgpOworICAgIH0KKworICAg
IGZvciAodmFyIHggaW4gdG9wbW9zdFlGb3JYKSB7CisgICAgICAgIGNvbnRleHQuYmVnaW5QYXRo
KCk7CisgICAgICAgIGNvbnRleHQubW92ZVRvKHgsIDApOworICAgICAgICBjb250ZXh0LmxpbmVU
byh4LCB0b3Btb3N0WUZvclhbeF0pOworICAgICAgICBjb250ZXh0LnN0cm9rZSgpOworICB9CisK
KyAgICBjb250ZXh0LnJlc3RvcmUoKTsKK30KKworZnVuY3Rpb24gZHJhd05vZGVIaWdobGlnaHQo
aGlnaGxpZ2h0KQoreworICAgIF9kcmF3R3JpZChoaWdobGlnaHQpOworCisgICAgaWYgKCFoaWdo
bGlnaHQucXVhZHMubGVuZ3RoKQorICAgICAgICByZXR1cm47CisKKyAgICBjb250ZXh0LnNhdmUo
KTsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGlnaGxpZ2h0LnF1YWRzLmxlbmd0aDsgKytp
KSB7CisgICAgICAgIHZhciBxdWFkID0gaGlnaGxpZ2h0LnF1YWRzW2ldOworICAgICAgICBmb3Ig
KHZhciBqID0gMDsgaiA8IHF1YWQubGVuZ3RoOyArK2opIHsKKyAgICAgICAgICAgIHF1YWRbal0u
eCAtPSBoaWdobGlnaHQuc2Nyb2xsWDsKKyAgICAgICAgICAgIHF1YWRbal0ueSAtPSBoaWdobGln
aHQuc2Nyb2xsWTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZhciBxdWFkcyA9IGhpZ2hsaWdo
dC5xdWFkcy5zbGljZSgpOworICAgIHZhciBjb250ZW50UXVhZCA9IHF1YWRzLnBvcCgpOworICAg
IHZhciBwYWRkaW5nUXVhZCA9IHF1YWRzLnBvcCgpOworICAgIHZhciBib3JkZXJRdWFkID0gcXVh
ZHMucG9wKCk7CisgICAgdmFyIG1hcmdpblF1YWQgPSBxdWFkcy5wb3AoKTsKKworICAgIHZhciBo
YXNDb250ZW50ID0gY29udGVudFF1YWQgJiYgaGlnaGxpZ2h0LmNvbnRlbnRDb2xvciAhPT0gdHJh
bnNwYXJlbnRDb2xvciB8fCBoaWdobGlnaHQuY29udGVudE91dGxpbmVDb2xvciAhPT0gdHJhbnNw
YXJlbnRDb2xvcjsKKyAgICB2YXIgaGFzUGFkZGluZyA9IHBhZGRpbmdRdWFkICYmIGhpZ2hsaWdo
dC5wYWRkaW5nQ29sb3IgIT09IHRyYW5zcGFyZW50Q29sb3I7CisgICAgdmFyIGhhc0JvcmRlciA9
IGJvcmRlclF1YWQgJiYgaGlnaGxpZ2h0LmJvcmRlckNvbG9yICE9PSB0cmFuc3BhcmVudENvbG9y
OworICAgIHZhciBoYXNNYXJnaW4gPSBtYXJnaW5RdWFkICYmIGhpZ2hsaWdodC5tYXJnaW5Db2xv
ciAhPT0gdHJhbnNwYXJlbnRDb2xvcjsKKworICAgIHZhciBjbGlwUXVhZDsKKyAgICBpZiAoaGFz
TWFyZ2luICYmICghaGFzQm9yZGVyIHx8ICFxdWFkRXF1YWxzKG1hcmdpblF1YWQsIGJvcmRlclF1
YWQpKSkgeworICAgICAgICBkcmF3T3V0bGluZWRRdWFkV2l0aENsaXAobWFyZ2luUXVhZCwgYm9y
ZGVyUXVhZCwgaGlnaGxpZ2h0Lm1hcmdpbkNvbG9yKTsKKyAgICAgICAgY2xpcFF1YWQgPSBib3Jk
ZXJRdWFkOworICAgIH0KKyAgICBpZiAoaGFzQm9yZGVyICYmICghaGFzUGFkZGluZyB8fCAhcXVh
ZEVxdWFscyhib3JkZXJRdWFkLCBwYWRkaW5nUXVhZCkpKSB7CisgICAgICAgIGRyYXdPdXRsaW5l
ZFF1YWRXaXRoQ2xpcChib3JkZXJRdWFkLCBwYWRkaW5nUXVhZCwgaGlnaGxpZ2h0LmJvcmRlckNv
bG9yKTsKKyAgICAgICAgY2xpcFF1YWQgPSBwYWRkaW5nUXVhZDsKKyAgICB9CisgICAgaWYgKGhh
c1BhZGRpbmcgJiYgKCFoYXNDb250ZW50IHx8ICFxdWFkRXF1YWxzKHBhZGRpbmdRdWFkLCBjb250
ZW50UXVhZCkpKSB7CisgICAgICAgIGRyYXdPdXRsaW5lZFF1YWRXaXRoQ2xpcChwYWRkaW5nUXVh
ZCwgY29udGVudFF1YWQsIGhpZ2hsaWdodC5wYWRkaW5nQ29sb3IpOworICAgICAgICBjbGlwUXVh
ZCA9IGNvbnRlbnRRdWFkOworICAgIH0KKyAgICBpZiAoaGFzQ29udGVudCkKKyAgICAgICAgZHJh
d091dGxpbmVkUXVhZChjb250ZW50UXVhZCwgaGlnaGxpZ2h0LmNvbnRlbnRDb2xvciwgaGlnaGxp
Z2h0LmNvbnRlbnRPdXRsaW5lQ29sb3IpOworCisgICAgX2RyYXdFbGVtZW50VGl0bGUoaGlnaGxp
Z2h0KTsKKyAgICBfZHJhd1J1bGVycyhoaWdobGlnaHQpOworICAgIGNvbnRleHQucmVzdG9yZSgp
OworfQorCitmdW5jdGlvbiBkcmF3UmVjdEhpZ2hsaWdodChoaWdobGlnaHQpCit7CisgICAgY29u
dGV4dC5zYXZlKCk7CisgICAgZHJhd091dGxpbmVkUXVhZChoaWdobGlnaHQucXVhZHNbMF0sIGhp
Z2hsaWdodC5jb250ZW50Q29sb3IsIGhpZ2hsaWdodC5jb250ZW50T3V0bGluZUNvbG9yKTsKKyAg
ICBjb250ZXh0LnJlc3RvcmUoKTsKK30KKworZnVuY3Rpb24gc2V0UGxhdGZvcm0ocGxhdGZvcm0p
Cit7CisgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCJwbGF0Zm9ybS0iICsgcGxhdGZv
cm0pOwogfQogCiBmdW5jdGlvbiBkaXNwYXRjaChtZXNzYWdlKQpAQCAtNzksOSArNDA5LDIzIEBA
IGZ1bmN0aW9uIGRpc3BhdGNoKG1lc3NhZ2UpCiAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IG1lc3Nh
Z2Uuc2hpZnQoKTsKICAgICB3aW5kb3dbZnVuY3Rpb25OYW1lXS5hcHBseShudWxsLCBtZXNzYWdl
KTsKIH0KKworZnVuY3Rpb24gbG9nKHRleHQpCit7CisgICAgdmFyIGxvZ0VudHJ5ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgbG9nRW50cnkudGV4dENvbnRlbnQgPSB0ZXh0
OworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2ciKS5hcHBlbmRDaGlsZChsb2dFbnRy
eSk7Cit9CisKIDwvc2NyaXB0PgogPC9oZWFkPgogPGJvZHkgY2xhc3M9ImZpbGwiPgogPGRpdiBj
bGFzcz0ibWVzc2FnZS1saW5lIj48c3BhbiBjbGFzcz0ibWVzc2FnZS1ib3giIGlkPSJwYXVzZWQt
aW4tZGVidWdnZXIiPjwvc3Bhbj48L2Rpdj4KIDwvYm9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIg
Y2xhc3M9ImZpbGwiPjwvY2FudmFzPgorPGRpdiBpZD0iZWxlbWVudC10aXRsZSI+CisgIDxzcGFu
IGlkPSJ0YWctbmFtZSI+PC9zcGFuPjxzcGFuIGlkPSJub2RlLWlkIj48L3NwYW4+PHNwYW4gaWQ9
ImNsYXNzLW5hbWUiPjwvc3Bhbj4KKyAgPHNwYW4gaWQ9Im5vZGUtd2lkdGgiPjwvc3Bhbj48c3Bh
biBjbGFzcz0icHgiPnB4PC9zcGFuPjxzcGFuIGNsYXNzPSJweCI+ICYjeEQ3OyA8L3NwYW4+PHNw
YW4gaWQ9Im5vZGUtaGVpZ2h0Ij48L3NwYW4+PHNwYW4gY2xhc3M9InB4Ij5weDwvc3Bhbj4KKzwv
ZGl2PgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KIDwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKaW5kZXggOTljYTJmODc0OTU3YWI1MDgz
YTg0NTQyNzA0ZDRlNDUxYmYyNTdmNS4uNzA3Yzc1MTVlNWQ2OGYyNDQ3NjMxYmZlYmRiOTY3MTdk
NzYyYTBhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBh
Z2VBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VB
Z2VudC5jcHAKQEAgLTkxNCw2ICs5MTQsMTIgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRp
ZExheW91dCgpCiAKICAgICBpZiAoY3VycmVudFdpZHRoICYmIGN1cnJlbnRIZWlnaHQpCiAgICAg
ICAgIG1fY2xpZW50LT5hdXRvWm9vbVBhZ2VUb0ZpdFdpZHRoKCk7CisgICAgbV9vdmVybGF5LT51
cGRhdGUoKTsKK30KKwordm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpZFNjcm9sbCgpCit7Cisg
ICAgbV9vdmVybGF5LT51cGRhdGUoKTsKIH0KIAogUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UGFn
ZTo6RnJhbWU+IEluc3BlY3RvclBhZ2VBZ2VudDo6YnVpbGRPYmplY3RGb3JGcmFtZShGcmFtZSog
ZnJhbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFn
ZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmgK
aW5kZXggN2I5MTc3OWY5N2FlMzhiNmMyMWFjMTMzNGUxZTM1ODg2NGI1ZmRkMC4uM2U0ZWMxMTAx
MTRlNWMwNjc4ZTI1YWZhYjBhZjM4NzAxN2NmZjNlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaApAQCAtMTM3LDYgKzEzNyw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHdpbGxQYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXlvdXRSZWN0Jik7
CiAgICAgdm9pZCBkaWRQYWludCgpOwogICAgIHZvaWQgZGlkTGF5b3V0KCk7CisgICAgdm9pZCBk
aWRTY3JvbGwoKTsKIAogICAgIC8vIEluc3BlY3RvciBDb250cm9sbGVyIEFQSQogICAgIHZpcnR1
YWwgdm9pZCBzZXRGcm9udGVuZChJbnNwZWN0b3JGcm9udGVuZCopOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUu
Y3BwCmluZGV4IDQzNjIyMmQ4ODUyZWQyZmQxMGQ0ZjNlNzg2NjI1N2U0NWJhOTUzNjcuLmNjYTRh
MDkyNWY3ZGUyYmU5YjgwMWZlNDBiZDE5MDExZDIyMWJlNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5j
cHAKQEAgLTk1LDYgKzk1LDcgQEAgdm9pZCBDaHJvbWU6OmludmFsaWRhdGVDb250ZW50c0ZvclNs
b3dTY3JvbGwoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgYm9vbCBpbW0KIHZvaWQgQ2hyb21l
OjpzY3JvbGwoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IEludFJlY3QmIHJlY3RU
b1Njcm9sbCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCiB7CiAgICAgbV9jbGllbnQtPnNjcm9s
bChzY3JvbGxEZWx0YSwgcmVjdFRvU2Nyb2xsLCBjbGlwUmVjdCk7CisgICAgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpkaWRTY3JvbGwobV9wYWdlKTsKIH0KIAogI2lmIFVTRShUSUxFRF9CQUNL
SU5HX1NUT1JFKQo=
</data>
<flag name="review"
          id="172513"
          type_id="1"
          status="+"
          setter="vsevik"
    />
          </attachment>
      

    </bug>

</bugzilla>