<?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>127565</bug_id>
          
          <creation_ts>2014-01-24 10:22:02 -0800</creation_ts>
          <short_desc>[New Multicolumn] Eliminate RenderMultiColumnBlock</short_desc>
          <delta_ts>2014-01-24 11:51:16 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          <cc>bunhere</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>rakuco</cc>
    
    <cc>WebkitBugTracker</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>971641</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2014-01-24 10:22:02 -0800</bug_when>
    <thetext>Fold the RenderMultiColumnBlock back into RenderBlockFlow so that all block flows have multi-column capability (including table cells, list items and the RenderView).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971642</commentid>
    <comment_count>1</comment_count>
      <attachid>222117</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2014-01-24 10:27:57 -0800</bug_when>
    <thetext>Created attachment 222117
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971643</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-01-24 10:30:36 -0800</bug_when>
    <thetext>Attachment 222117 did not pass style-queue:


ERROR: Source/WebCore/rendering/RenderBlockFlow.cpp:3200:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/rendering/RenderBlockFlow.cpp:3208:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Total errors found: 2 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971644</commentid>
    <comment_count>3</comment_count>
      <attachid>222117</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-01-24 10:35:29 -0800</bug_when>
    <thetext>Comment on attachment 222117
Patch

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

&gt; Source/WebCore/rendering/RenderBlockFlow.cpp:3214
&gt; +            if (minColumnCount &gt;= desiredColumnCount) {
&gt; +                // The forced page breaks are in control of the balancing.  Just set the column height to the
&gt; +                // maximum page break distance.
&gt; +                if (!pageLogicalHeight) {
&gt; +                    LayoutUnit distanceBetweenBreaks = std::max&lt;LayoutUnit&gt;(colInfo-&gt;maximumDistanceBetweenForcedBreaks(),
&gt; +                        view().layoutState()-&gt;pageLogicalOffset(this, borderAndPaddingBefore() + layoutOverflowLogicalBottom) - colInfo-&gt;forcedBreakOffset());
&gt; +                    columnHeight = std::max(colInfo-&gt;minimumColumnHeight(), distanceBetweenBreaks);
&gt; +                }

This is getting deep, helper functions might be useful.

&gt; Source/WebCore/rendering/RenderMultiColumnFlowThread.cpp:125
&gt; -    RenderMultiColumnBlock* parentBlock = toRenderMultiColumnBlock(parent());
&gt; +    RenderBlockFlow* parentBlock = toRenderBlockFlow(parent());

i would just use auto, toRenderBlockFlow already names the type. 
parentFlow would be a more informative variable name.

&gt; Source/WebCore/rendering/RenderMultiColumnSet.cpp:48
&gt; -    RenderMultiColumnBlock* multicolBlock = toRenderMultiColumnBlock(parent());
&gt; +    RenderBlockFlow* multicolBlock = toRenderBlockFlow(parent());

same here, &apos;multicolumnFlow&apos;

&gt; Source/WebCore/rendering/RenderMultiColumnSet.cpp:202
&gt; +    RenderBlockFlow* parentBlock = toRenderBlockFlow(parent());

same here

&gt; Source/WebCore/rendering/RenderMultiColumnSet.cpp:224
&gt; -    RenderMultiColumnBlock* multicolBlock = toRenderMultiColumnBlock(parent());
&gt; +    RenderBlockFlow* multicolBlock = toRenderBlockFlow(parent());

same here

&gt; Source/WebCore/rendering/RenderMultiColumnSet.cpp:268
&gt; +    RenderBlockFlow* parentBlock = toRenderBlockFlow(parent());

same here</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971682</commentid>
    <comment_count>4</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2014-01-24 11:51:16 -0800</bug_when>
    <thetext>Landed in r162712 (with additional fix for GTK makefile).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222117</attachid>
            <date>2014-01-24 10:27:57 -0800</date>
            <delta_ts>2014-01-24 10:35:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>56260</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MjcwNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1IEBACisyMDE0LTAxLTI0ICBEYXZpZCBI
eWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KKworICAgICAgICBbTmV3IE11bHRpY29sdW1uXSBFbGlt
aW5hdGUgUmVuZGVyTXVsdGlDb2x1bW5CbG9jaworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3NTY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBlbGltaW5hdGVzIFJlbmRlck11bHRpQ29s
dW1uQmxvY2sgYW5kIGZvbGRzIGFsbCBvZiBpdHMgcmVtYWluaW5nIGNvZGUKKyAgICAgICAgYmFj
ayBpbnRvIFJlbmRlckJsb2NrRmxvdy4gVGhpcyBhbGxvd3MgYWxsIGJsb2NrIGZsb3dzIHRvIHN1
cHBvcnQgbXVsdGktY29sdW1uCisgICAgICAgIGxheW91dCwgaW5jbHVkaW5nIHRhYmxlIGNlbGxz
LCBsaXN0IGl0ZW1zLCBhbmQgdGhlIFJlbmRlclZpZXcgaXRzZWxmLgorCisgICAgICAgICogQ01h
a2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS5vcmRlcjoKKyAgICAgICAgKiBXZWJDb3Jl
LnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qOgorICAgICAgICAqIFdlYkNvcmUudmN4cHJvai9XZWJD
b3JlLnZjeHByb2ouZmlsdGVyczoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgIFJlbW92ZSBSZW5kZXJNdWx0aUNvbHVtbkJsb2NrIGZyb20gdGhl
IG1ha2VmaWxlcy4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRqdXN0SW50cmluc2ljTG9naWNhbFdpZHRoc0Zv
ckNvbHVtbnMpOgorICAgICAgICBUd2VhayB0aGUgY29tbWVudCwgc2luY2UgaXQgd2FzIG5vIGxv
bmdlciBhY2N1cmF0ZS4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOgorICAg
ICAgICBNb3ZlIHNvbWUgZnVuY3Rpb25zIGRvd24gaW50byBSZW5kZXJCbG9ja0Zsb3cuCisKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrRmxvdzo6UmVuZGVyQmxvY2tGbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJsb2NrRmxvdzo6Y3JlYXRlTXVsdGlDb2x1bW5GbG93VGhyZWFkSWZOZWVkZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpzdHlsZURpZENoYW5nZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OnJlbGF5b3V0Rm9yUGFnaW5hdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmxheW91dFNwZWNpYWxFeGNsdWRlZENoaWxk
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6dXBkYXRlTG9naWNhbFdpZHRo
QW5kQ29sdW1uV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjphZGRD
aGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmNoZWNrRm9yUGFnaW5h
dGlvbkxvZ2ljYWxIZWlnaHRDaGFuZ2UpOgorICAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxv
Y2tGbG93Lmg6CisgICAgICAgICBNb3ZlIGEgYnVuY2ggb2YgZnVuY3Rpb25zIGZyb20gUmVuZGVy
TXVsdGlDb2x1bW5CbG9jayB1cCBpbnRvIFJlbmRlckJsb2NrRmxvdy4KKworICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojppc1Vu
c3BsaXR0YWJsZUZvclBhZ2luYXRpb24pOgorICAgICAgICBDYWxscyBpc011bHRpQ29sdW1uQmxv
Y2tGbG93KCkgbm93IGluc3RlYWQgb2YgdGVzdGluZyBmb3IgYSBzcGVjaWZpYyByZW5kZXJlciB0
eXBlLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6Y3JlYXRlRm9yKToKKyAgICAgICAgUmVtb3ZlIHRoZSBt
dWx0aWNvbHVtbiBibG9jayBjcmVhdGlvbiBjb2RlLCBzaW5jZSB3ZSBhbHdheXMgbWFrZSBhIGJs
b2NrIGZsb3cgbm93LgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uQmxv
Y2suY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkJs
b2NrLmg6IFJlbW92ZWQuCisgICAgICAgIE51a2UgdGhlIGZpbGVzLgorCisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6OmluaXRpYWxMb2dpY2FsV2lkdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjphdXRvR2VuZXJhdGVS
ZWdpb25zVG9CbG9ja09mZnNldCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck11bHRpQ29s
dW1uU2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29sdW1uU2V0OjpoZWln
aHRBZGp1c3RlZEZvclNldE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNv
bHVtblNldDo6YWRkRm9yY2VkQnJlYWspOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTXVsdGlD
b2x1bW5TZXQ6OnJlY2FsY3VsYXRlQmFsYW5jZWRIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTXVsdGlDb2x1bW5TZXQ6OnVwZGF0ZUxvZ2ljYWxXaWR0aCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJNdWx0aUNvbHVtblNldDo6cHJlcGFyZUZvckxheW91dCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtblNldDo6Y29sdW1uR2FwKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlck11bHRpQ29sdW1uU2V0OjpwYWludENvbHVtblJ1bGVzKToKKyAgICAgICAgQ2hh
bmdlIGFsbCBvZiB0aGUgZnVuY3Rpb25zIGluIHRoZSBtdWx0aWNvbHVtbnNldCBhbmQgbXVsdGlj
b2x1bW5mbG93dGhyZWFkIGNsYXNzZXMKKyAgICAgICAgdG8gY2FzdCB0aGUgcGFyZW50IHRvIGEg
UmVuZGVyQmxvY2tGbG93IG5vdyBpbnN0ZWFkIG9mIGEgUmVuZGVyTXVsdGlDb2x1bW5CbG9jay4K
KyAgICAgICAgQ2hhbmdlIHRoZSBjb2RlIHRvIGNhbGwgdGhyb3VnaCB0byBtdWx0aUNvbHVtbkZs
b3dUaHJlYWQoKSBmb3IgY29sdW1uLXNwZWNpZmljIGluZm9ybWF0aW9uCisgICAgICAgIGZvciB0
aGF0IHBhcmVudCBibG9jay4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6aXNNdWx0aUNvbHVtbkJsb2NrRmxvdyk6
CisgICAgICAgIFJlbW92ZSBpc1JlbmRlck11bHRpQ29sdW1uQmxvY2soKSBhbmQgcmVwbGFjZSB3
aXRoIGlzTXVsdGlDb2x1bW5CbG9ja0Zsb3coKS4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJpbmdBbGxJbk9uZS5jcHA6CisgICAgICAgIFJlbW92ZSBSZW5kZXJNdWx0aUNvbHVtbkJsb2Nr
IGluY2x1ZGUuCisgICAgICAgIAogMjAxNC0wMS0yNCAgRGFuaWVsIEJhdGVzICA8ZGFiYXRlc0Bh
cHBsZS5jb20+CiAKICAgICAgICAgRml4IHRoZSBXaW5kb3dzIGJ1aWxkIGFmdGVyIDxodHRwOi8v
dHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8xNjI3MDQ+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dAkocmV2aXNpb24gMTYyNzAxKQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTIxNTksNyArMjE1OSw2IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAg
ICByZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9scy5jcHAKICAgICByZW5kZXJpbmcvUmVuZGVy
TWVudUxpc3QuY3BwCiAgICAgcmVuZGVyaW5nL1JlbmRlck1ldGVyLmNwcAotICAgIHJlbmRlcmlu
Zy9SZW5kZXJNdWx0aUNvbHVtbkJsb2NrLmNwcAogICAgIHJlbmRlcmluZy9SZW5kZXJNdWx0aUNv
bHVtbkZsb3dUaHJlYWQuY3BwCiAgICAgcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uU2V0LmNw
cAogICAgIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5jcHAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUub3JkZXIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5vcmRlcgkocmV2aXNpb24gMTYyNzAxKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5v
cmRlcgkod29ya2luZyBjb3B5KQpAQCAtMjM0NDgsNyArMjM0NDgsNiBAQCBfX1pUVk43V2ViQ29y
ZTI5UmVuZGVyTWVkaWFDb250cm9sVGltZURpCiBfX1pUVk43V2ViQ29yZTMxUmVuZGVyVGV4dFRy
YWNrQ29udGFpbmVyRWxlbWVudEUKIF9fWlRWTjdXZWJDb3JlMTRSZW5kZXJNZW51TGlzdEUKIF9f
WlRWTjdXZWJDb3JlMTFSZW5kZXJNZXRlckUKLV9fWlRWTjdXZWJDb3JlMjJSZW5kZXJNdWx0aUNv
bHVtbkJsb2NrRQogX19aVFZON1dlYkNvcmUyN1JlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZEUK
IF9fWlRWTjdXZWJDb3JlMjBSZW5kZXJNdWx0aUNvbHVtblNldEUKIF9fWlRWTjdXZWJDb3JlMjFS
ZW5kZXJOYW1lZEZsb3dUaHJlYWRFCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHBy
b2ovV2ViQ29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE2MjcwMSkKKysrIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEw
Mjk5LDIwICsxMDI5OSw2IEBACiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSIn
JChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufFdpbjMyJyI+dHJ1ZTwv
RXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSIn
JChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufHg2NCciPnRydWU8L0V4
Y2x1ZGVkRnJvbUJ1aWxkPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccmVuZGVyaW5nXFJlbmRlck11bHRpQ29sdW1uQmxvY2suY3BwIj4KLSAgICAgIDxFeGNs
dWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09
J0RlYnVnfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Ci0gICAgICA8RXhjbHVkZWRG
cm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1
Z3x4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KLSAgICAgIDxFeGNsdWRlZEZyb21CdWls
ZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnX1dpbkNh
aXJvfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Ci0gICAgICA8RXhjbHVkZWRGcm9t
QnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z19X
aW5DYWlyb3x4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KLSAgICAgIDxFeGNsdWRlZEZy
b21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVn
U3VmZml4fFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Ci0gICAgICA8RXhjbHVkZWRG
cm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1
Z1N1ZmZpeHx4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KLSAgICAgIDxFeGNsdWRlZEZy
b21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVh
c2V8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KLSAgICAgIDxFeGNsdWRlZEZyb21C
dWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8
eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Ci0gICAgICA8RXhjbHVkZWRGcm9tQnVpbGQg
Q29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlX1dpbkNh
aXJvfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Ci0gICAgICA8RXhjbHVkZWRGcm9t
QnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNl
X1dpbkNhaXJvfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgotICAgICAgPEV4Y2x1ZGVk
RnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJv
ZHVjdGlvbnxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgotICAgICAgPEV4Y2x1ZGVk
RnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJv
ZHVjdGlvbnx4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KLSAgICA8L0NsQ29tcGlsZT4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xSZW5kZXJNdWx0aUNvbHVtbkZs
b3dUaHJlYWQuY3BwIj4KICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENv
bmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRG
cm9tQnVpbGQ+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1
cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWls
ZD4KQEAgLTE5ODk0LDcgKzE5ODgwLDYgQEAKICAgICA8Q3VzdG9tQnVpbGRTdGVwIEluY2x1ZGU9
Ii4uXHJlbmRlcmluZ1xSZW5kZXJNZWRpYUNvbnRyb2xzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxyZW5kZXJpbmdcUmVuZGVyTWVudUxpc3QuaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xSZW5kZXJNZXRlci5oIiAvPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccmVuZGVyaW5nXFJlbmRlck11bHRpQ29sdW1uQmxvY2suaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJl
YWQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xSZW5kZXJNdWx0
aUNvbHVtblNldC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXFJl
bmRlck5hbWVkRmxvd0ZyYWdtZW50LmgiIC8+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCShyZXZpc2lvbiAx
NjI3MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9q
LmZpbHRlcnMJKHdvcmtpbmcgY29weSkKQEAgLTI0OTksOSArMjQ5OSw2IEBACiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcUmVuZGVyTWV0ZXIuY3BwIj4KICAgICAgIDxGaWx0
ZXI+cmVuZGVyaW5nPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxyZW5kZXJpbmdcUmVuZGVyTXVsdGlDb2x1bW5CbG9jay5jcHAiPgotICAgICAg
PEZpbHRlcj5yZW5kZXJpbmc8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuY3Bw
Ij4KICAgICAgIDxGaWx0ZXI+cmVuZGVyaW5nPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CkBA
IC05MzUzLDkgKzkzNTAsNiBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5n
XFJlbmRlck1ldGVyLmgiPgogICAgICAgPEZpbHRlcj5yZW5kZXJpbmc8L0ZpbHRlcj4KICAgICA8
L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xSZW5kZXJN
dWx0aUNvbHVtbkJsb2NrLmgiPgotICAgICAgPEZpbHRlcj5yZW5kZXJpbmc8L0ZpbHRlcj4KLSAg
ICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xSZW5k
ZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuaCI+CiAgICAgICA8RmlsdGVyPnJlbmRlcmluZzwvRmls
dGVyPgogICAgIDwvQ2xJbmNsdWRlPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTYyNzAxKQorKysgU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC00OTQwLDcgKzQ5NDAsNiBAQAogCQlCQzNDMzlCNjBDMEQzRDhEMDA1RjREN0EgLyogSlNN
ZWRpYUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkMzQzM5QjQwQzBEM0Q4RDAwNUY0RDdBIC8qIEpTTWVkaWFMaXN0LmNwcCAqLzsgfTsKIAkJ
QkMzQzM5QjcwQzBEM0Q4RDAwNUY0RDdBIC8qIEpTTWVkaWFMaXN0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzNDMzlCNTBDMEQzRDhEMDA1RjREN0Eg
LyogSlNNZWRpYUxpc3QuaCAqLzsgfTsKIAkJQkM0MzY4RTgwQzIyNkUzMjAwNUVGQjVGIC8qIFJl
Y3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNDM2
OEU3MEMyMjZFMzIwMDVFRkI1RiAvKiBSZWN0LmggKi87IH07Ci0JCUJDNDU4MjdGMTUxMjk5QzEw
MDYxQTU1NiAvKiBSZW5kZXJNdWx0aUNvbHVtbkJsb2NrLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNDU4MjdFMTUxMjk5QzEwMDYxQTU1NiAvKiBS
ZW5kZXJNdWx0aUNvbHVtbkJsb2NrLmNwcCAqLzsgfTsKIAkJQkM0NkMxRUUwQzBEREJERjAwMjBD
RkMzIC8qIEpTQ1NTUnVsZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQzQ2QzFFRDBDMEREQkRGMDAyMENGQzMgLyogSlNDU1NSdWxlQ3Vz
dG9tLmNwcCAqLzsgfTsKIAkJQkM0NkMxRkEwQzBEREM4RjAwMjBDRkMzIC8qIEpTQ1NTQ2hhcnNl
dFJ1bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QkM0NkMxRjAwQzBEREM4RjAwMjBDRkMzIC8qIEpTQ1NTQ2hhcnNldFJ1bGUuY3BwICovOyB9Owog
CQlCQzQ2QzFGQjBDMEREQzhGMDAyMENGQzMgLyogSlNDU1NDaGFyc2V0UnVsZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM0NkMxRjEwQzBEREM4RjAw
MjBDRkMzIC8qIEpTQ1NTQ2hhcnNldFJ1bGUuaCAqLzsgfTsKQEAgLTUxODYsNyArNTE4NSw2IEBA
CiAJCUJDQzA2NTg5MEYzQ0UyQTcwMENEMkQ4NyAvKiBKU0NsaWVudFJlY3RMaXN0LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQzA2NTg1MEYzQ0Uy
QTcwMENEMkQ4NyAvKiBKU0NsaWVudFJlY3RMaXN0LmNwcCAqLzsgfTsKIAkJQkNDMDY1OEEwRjND
RTJBNzAwQ0QyRDg3IC8qIEpTQ2xpZW50UmVjdExpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQzA2NTg2MEYzQ0UyQTcwMENEMkQ4NyAvKiBKU0Ns
aWVudFJlY3RMaXN0LmggKi87IH07CiAJCUJDQzQzODc4MEU4ODZDQzcwMDUzM0RENSAvKiBKU0hU
TUxJbnB1dEVsZW1lbnRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkNDNDM4NzcwRTg4NkNDNzAwNTMzREQ1IC8qIEpTSFRNTElucHV0RWxl
bWVudEN1c3RvbS5jcHAgKi87IH07Ci0JCUJDQzUyRkQ2MTUxMjk4RDIwMDNGOTE0QiAvKiBSZW5k
ZXJNdWx0aUNvbHVtbkJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQ0M1MkZENTE1MTI5OEQxMDAzRjkxNEIgLyogUmVuZGVyTXVsdGlDb2x1bW5C
bG9jay5oICovOyB9OwogCQlCQ0M1NzMzNTBENjk1QkJFMDA2RUY1MTcgLyogRE9NUHJvZ3Jlc3NF
dmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkND
NTczMzMwRDY5NUJCRTAwNkVGNTE3IC8qIERPTVByb2dyZXNzRXZlbnQuaCAqLzsgfTsKIAkJQkND
NTczMzYwRDY5NUJCRTAwNkVGNTE3IC8qIERPTVByb2dyZXNzRXZlbnQubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0M1NzMzNDBENjk1QkJFMDA2RUY1
MTcgLyogRE9NUHJvZ3Jlc3NFdmVudC5tbSAqLzsgfTsKIAkJQkNDNTczMzgwRDY5NUJENzAwNkVG
NTE3IC8qIERPTVByb2dyZXNzRXZlbnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNDNTczMzcwRDY5NUJENzAwNkVGNTE3IC8qIERPTVBy
b2dyZXNzRXZlbnRJbnRlcm5hbC5oICovOyB9OwpAQCAtMTIxMjQsNyArMTIxMjIsNiBAQAogCQlC
QzNDMzlCNDBDMEQzRDhEMDA1RjREN0EgLyogSlNNZWRpYUxpc3QuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWVkaWFMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQkMzQzM5QjUwQzBEM0Q4RDAwNUY0RDdBIC8qIEpTTWVkaWFMaXN0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU01lZGlhTGlzdC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCQzQzNjhFNzBDMjI2RTMyMDA1RUZCNUYgLyogUmVjdC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVjdC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlCQzQ1ODI3RTE1MTI5OUMxMDA2MUE1NTYgLyogUmVuZGVyTXVsdGlD
b2x1bW5CbG9jay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5k
ZXJNdWx0aUNvbHVtbkJsb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM0
NkMxRUQwQzBEREJERjAwMjBDRkMzIC8qIEpTQ1NTUnVsZUN1c3RvbS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDU1NSdWxlQ3VzdG9tLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM0NkMxRjAwQzBEREM4RjAwMjBDRkMzIC8qIEpTQ1NTQ2hh
cnNldFJ1bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ1NT
Q2hhcnNldFJ1bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzQ2QzFGMTBD
MEREQzhGMDAyMENGQzMgLyogSlNDU1NDaGFyc2V0UnVsZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNDU1NDaGFyc2V0UnVsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTIzOTQsNyArMTIzOTEsNiBAQAogCQlCQ0MwNjU4NTBGM0NFMkE3MDBDRDJEODcg
LyogSlNDbGllbnRSZWN0TGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0NsaWVudFJlY3RMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QkNDMDY1ODYwRjNDRTJBNzAwQ0QyRDg3IC8qIEpTQ2xpZW50UmVjdExpc3QuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDbGllbnRSZWN0TGlzdC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCQ0M0Mzg3NzBFODg2Q0M3MDA1MzNERDUgLyogSlNIVE1MSW5wdXRF
bGVtZW50Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
SFRNTElucHV0RWxlbWVudEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUJDQzUyRkQ1MTUxMjk4RDEwMDNGOTE0QiAvKiBSZW5kZXJNdWx0aUNvbHVtbkJsb2NrLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlck11bHRpQ29sdW1uQmxvY2suaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNDNTczMzMwRDY5NUJCRTAwNkVGNTE3IC8q
IERPTVByb2dyZXNzRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9N
UHJvZ3Jlc3NFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0M1NzMzNDBE
Njk1QkJFMDA2RUY1MTcgLyogRE9NUHJvZ3Jlc3NFdmVudC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IERPTVByb2dyZXNzRXZlbnQubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUJDQzU3MzM3MEQ2OTVCRDcwMDZFRjUxNyAvKiBET01Qcm9ncmVzc0V2
ZW50SW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NUHJvZ3Jl
c3NFdmVudEludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMTc0Myw4
ICsyMTczOSw2IEBACiAJCQkJQUJEREZFNzQwQTVDNkU3MDAwQTNFMTFEIC8qIFJlbmRlck1lbnVM
aXN0LmggKi8sCiAJCQkJQTQ1NDQyNEMxMTlCMzY4NzAwOUJFOTEyIC8qIFJlbmRlck1ldGVyLmNw
cCAqLywKIAkJCQlBNDU0NDI0RDExOUIzNjg3MDA5QkU5MTIgLyogUmVuZGVyTWV0ZXIuaCAqLywK
LQkJCQlCQzQ1ODI3RTE1MTI5OUMxMDA2MUE1NTYgLyogUmVuZGVyTXVsdGlDb2x1bW5CbG9jay5j
cHAgKi8sCi0JCQkJQkNDNTJGRDUxNTEyOThEMTAwM0Y5MTRCIC8qIFJlbmRlck11bHRpQ29sdW1u
QmxvY2suaCAqLywKIAkJCQkxQTM1ODZERDE1MjY0QzQ1MDAyMkE2NTkgLyogUmVuZGVyTXVsdGlD
b2x1bW5GbG93VGhyZWFkLmNwcCAqLywKIAkJCQkxQTM1ODZERTE1MjY0QzQ1MDAyMkE2NTkgLyog
UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmggKi8sCiAJCQkJQkNFMzJCOUQxNTE3QzIyNzAw
RjU0MkVDIC8qIFJlbmRlck11bHRpQ29sdW1uU2V0LmNwcCAqLywKQEAgLTI1MDA1LDcgKzI0OTk5
LDYgQEAKIAkJCQk0MUZBMzAzRjEzMTZDMjlDMDBDMEJGQzUgLyogUmVuZGVyTWVkaWFDb250cm9s
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUJEREZFN0EwQTVDNkU3MDAwQTNFMTFEIC8qIFJlbmRl
ck1lbnVMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNDU0NDI0RjExOUIzNjg3MDA5QkU5MTIg
LyogUmVuZGVyTWV0ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCUJDQzUyRkQ2MTUxMjk4RDIwMDNG
OTE0QiAvKiBSZW5kZXJNdWx0aUNvbHVtbkJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTM1
ODZFMDE1MjY0QzQ1MDAyMkE2NTkgLyogUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQ0UzMkI5QzE1MTdDMEIyMDBGNTQyRUMgLyogUmVuZGVyTXVsdGlD
b2x1bW5TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxRkUxMzdCMTg0RDIxQkIwMDg5MkYxMyAv
KiBDcnlwdG9BbGdvcml0aG1BRVNfS1cuaCBpbiBIZWFkZXJzICovLApAQCAtMjgzNTgsNyArMjgz
NTEsNiBAQAogCQkJCTQxRkEzMDNFMTMxNkMyOUMwMEMwQkZDNSAvKiBSZW5kZXJNZWRpYUNvbnRy
b2xzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUFCRERGRTc5MEE1QzZFNzAwMEEzRTExRCAvKiBS
ZW5kZXJNZW51TGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNDU0NDI0RTExOUIzNjg3MDA5
QkU5MTIgLyogUmVuZGVyTWV0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQkM0NTgyN0YxNTEy
OTlDMTAwNjFBNTU2IC8qIFJlbmRlck11bHRpQ29sdW1uQmxvY2suY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMUEzNTg2REYxNTI2NEM0NTAwMjJBNjU5IC8qIFJlbmRlck11bHRpQ29sdW1uRmxvd1Ro
cmVhZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0UzMkI5RTE1MTdDMjI3MDBGNTQyRUMgLyog
UmVuZGVyTXVsdGlDb2x1bW5TZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEzRkY5QzMxNTI2
NTM1OTAwMjI4OEExIC8qIFJlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAgaW4gU291cmNlcyAqLywK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24g
MTYyNzAxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTU1OCwzNyArMTU1OCw2IEBAIGJvb2wgUmVuZGVyQmxvY2s6OnVwZGF0
ZUxvZ2ljYWxXaWR0aEFuZEMKICAgICByZXR1cm4gb2xkV2lkdGggIT0gbG9naWNhbFdpZHRoKCkg
fHwgb2xkQ29sdW1uV2lkdGggIT0gZGVzaXJlZENvbHVtbldpZHRoKCkgfHwgaGFzQm9yZGVyT3JQ
YWRkaW5nTG9naWNhbFdpZHRoQ2hhbmdlZDsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6Y2hlY2tG
b3JQYWdpbmF0aW9uTG9naWNhbEhlaWdodENoYW5nZShMYXlvdXRVbml0JiBwYWdlTG9naWNhbEhl
aWdodCwgYm9vbCYgcGFnZUxvZ2ljYWxIZWlnaHRDaGFuZ2VkLCBib29sJiBoYXNTcGVjaWZpZWRQ
YWdlTG9naWNhbEhlaWdodCkKLXsKLSAgICBDb2x1bW5JbmZvKiBjb2xJbmZvID0gY29sdW1uSW5m
bygpOwotICAgIGlmIChoYXNDb2x1bW5zKCkpIHsKLSAgICAgICAgaWYgKCFwYWdlTG9naWNhbEhl
aWdodCkgewotICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBnbyBhaGVhZCBhbmQgc2V0IG91ciBl
eHBsaWNpdCBwYWdlIGhlaWdodCBpZiBvbmUgZXhpc3RzLCBzbyB0aGF0IHdlIGNhbgotICAgICAg
ICAgICAgLy8gYXZvaWQgZG9pbmcgdHdvIGxheW91dCBwYXNzZXMuCi0gICAgICAgICAgICB1cGRh
dGVMb2dpY2FsSGVpZ2h0KCk7Ci0gICAgICAgICAgICBMYXlvdXRVbml0IGNvbHVtbkhlaWdodCA9
IGlzUmVuZGVyVmlldygpID8gdmlldygpLnBhZ2VPclZpZXdMb2dpY2FsSGVpZ2h0KCkgOiBjb250
ZW50TG9naWNhbEhlaWdodCgpOwotICAgICAgICAgICAgaWYgKGNvbHVtbkhlaWdodCA+IDApIHsK
LSAgICAgICAgICAgICAgICBwYWdlTG9naWNhbEhlaWdodCA9IGNvbHVtbkhlaWdodDsKLSAgICAg
ICAgICAgICAgICBoYXNTcGVjaWZpZWRQYWdlTG9naWNhbEhlaWdodCA9IHRydWU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KDApOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKGNvbEluZm8tPmNvbHVtbkhlaWdodCgpICE9IHBhZ2VMb2dpY2FsSGVpZ2h0ICYm
IGV2ZXJIYWRMYXlvdXQoKSkKLSAgICAgICAgICAgIHBhZ2VMb2dpY2FsSGVpZ2h0Q2hhbmdlZCA9
IHRydWU7Ci0KLSAgICAgICAgY29sSW5mby0+c2V0Q29sdW1uSGVpZ2h0KHBhZ2VMb2dpY2FsSGVp
Z2h0KTsKLSAgICAgICAgCi0gICAgICAgIGlmICghaGFzU3BlY2lmaWVkUGFnZUxvZ2ljYWxIZWln
aHQgJiYgIXBhZ2VMb2dpY2FsSGVpZ2h0KQotICAgICAgICAgICAgY29sSW5mby0+Y2xlYXJGb3Jj
ZWRCcmVha3MoKTsKLQotICAgICAgICBjb2xJbmZvLT5zZXRQYWdpbmF0aW9uVW5pdChwYWdpbmF0
aW9uVW5pdCgpKTsKLSAgICB9IGVsc2UgaWYgKGlzUmVuZGVyRmxvd1RocmVhZCgpKSB7Ci0gICAg
ICAgIHBhZ2VMb2dpY2FsSGVpZ2h0ID0gMTsgLy8gVGhpcyBpcyBqdXN0IGEgaGFjayB0byBhbHdh
eXMgbWFrZSBzdXJlIHdlIGhhdmUgYSBwYWdlIGxvZ2ljYWwgaGVpZ2h0LgotICAgICAgICBwYWdl
TG9naWNhbEhlaWdodENoYW5nZWQgPSB0b1JlbmRlckZsb3dUaHJlYWQodGhpcyktPnBhZ2VMb2dp
Y2FsU2l6ZUNoYW5nZWQoKTsKLSAgICB9Ci19Ci0KIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJs
b2NrKGJvb2wsIExheW91dFVuaXQpCiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC00
MTEyLDggKzQwODEsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlUHJlZmVycmVkTG9naWNh
CiAKIHZvaWQgUmVuZGVyQmxvY2s6OmFkanVzdEludHJpbnNpY0xvZ2ljYWxXaWR0aHNGb3JDb2x1
bW5zKExheW91dFVuaXQmIG1pbkxvZ2ljYWxXaWR0aCwgTGF5b3V0VW5pdCYgbWF4TG9naWNhbFdp
ZHRoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBtYWtlIHRoaXMgbWV0aG9kIHZpcnR1YWwgYW5k
IG1vdmUgdGhlIGNvZGUgdG8gUmVuZGVyTXVsdGlDb2x1bW5CbG9jayBvbmNlIHRoZSBvbGQKLSAg
ICAvLyBtdWx0aWNvbCBjb2RlIGlzIGdvbmUuCisgICAgLy8gRklYTUU6IE1vdmUgdGhpcyBjb2Rl
IHRvIFJlbmRlckJsb2NrRmxvdy4KIAogICAgIGlmICghc3R5bGUoKS5oYXNBdXRvQ29sdW1uQ291
bnQoKSB8fCAhc3R5bGUoKS5oYXNBdXRvQ29sdW1uV2lkdGgoKSkgewogICAgICAgICAvLyBUaGUg
bWluL21heCBpbnRyaW5zaWMgd2lkdGhzIGNhbGN1bGF0ZWQgcmVhbGx5IHRlbGwgaG93IG11Y2gg
c3BhY2UgZWxlbWVudHMgbmVlZCB3aGVuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suaAkocmV2aXNpb24gMTYyNzAxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0MSw3ICs0NDEsNiBAQCBwcm90ZWN0
ZWQ6CiAKICAgICB2b2lkIHVwZGF0ZUJsb2NrQ2hpbGREaXJ0eUJpdHNCZWZvcmVMYXlvdXQoYm9v
bCByZWxheW91dENoaWxkcmVuLCBSZW5kZXJCb3gmKTsKIAotICAgIHZpcnR1YWwgdm9pZCBjaGVj
a0ZvclBhZ2luYXRpb25Mb2dpY2FsSGVpZ2h0Q2hhbmdlKExheW91dFVuaXQmIHBhZ2VMb2dpY2Fs
SGVpZ2h0LCBib29sJiBwYWdlTG9naWNhbEhlaWdodENoYW5nZWQsIGJvb2wmIGhhc1NwZWNpZmll
ZFBhZ2VMb2dpY2FsSGVpZ2h0KTsKICAgICB2b2lkIHByZXBhcmVTaGFwZXNBbmRQYWdpbmF0aW9u
QmVmb3JlQmxvY2tMYXlvdXQoYm9vbCYpOwogCiBwcml2YXRlOgpAQCAtNDgxLDkgKzQ4MCw2IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBpbnNlcnRJbnRvVHJhY2tlZFJlbmRlcmVyTWFwcyhSZW5kZXJC
b3gmIGRlc2NlbmRhbnQsIFRyYWNrZWREZXNjZW5kYW50c01hcComLCBUcmFja2VkQ29udGFpbmVy
TWFwKiYpOwogICAgIHN0YXRpYyB2b2lkIHJlbW92ZUZyb21UcmFja2VkUmVuZGVyZXJNYXBzKFJl
bmRlckJveCYgZGVzY2VuZGFudCwgVHJhY2tlZERlc2NlbmRhbnRzTWFwKiYsIFRyYWNrZWRDb250
YWluZXJNYXAqJik7CiAKLSAgICAvLyBDYWxsZWQgdG8gbGF5IG91dCB0aGUgbGVnZW5kIGZvciBh
IGZpZWxkc2V0IG9yIHRoZSBydWJ5IHRleHQgb2YgYSBydWJ5IHJ1bi4KLSAgICB2aXJ0dWFsIFJl
bmRlck9iamVjdCogbGF5b3V0U3BlY2lhbEV4Y2x1ZGVkQ2hpbGQoYm9vbCAvKnJlbGF5b3V0Q2hp
bGRyZW4qLykgeyByZXR1cm4gMDsgfQotCiAgICAgdm9pZCBjcmVhdGVGaXJzdExldHRlclJlbmRl
cmVyKFJlbmRlck9iamVjdCogZmlyc3RMZXR0ZXJCbG9jaywgUmVuZGVyVGV4dCogY3VycmVudFRl
eHRDaGlsZCk7CiAgICAgdm9pZCB1cGRhdGVGaXJzdExldHRlclN0eWxlKFJlbmRlck9iamVjdCog
Zmlyc3RMZXR0ZXJCbG9jaywgUmVuZGVyT2JqZWN0KiBmaXJzdExldHRlckNvbnRhaW5lcik7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCShy
ZXZpc2lvbiAxNjI3MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tG
bG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsOCBAQAogI2luY2x1ZGUgIlJlbmRl
ckZsb3dUaHJlYWQuaCIKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgIlJl
bmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmgiCisj
aW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5TZXQuaCIKICNpbmNsdWRlICJSZW5kZXJOYW1lZEZs
b3dGcmFnbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKICNpbmNsdWRlICJSZW5kZXJW
aWV3LmgiCkBAIC0xMDEsNiArMTAzLDcgQEAgUmVuZGVyQmxvY2tGbG93OjpSZW5kZXJCbG9ja0Zs
b3coRWxlbWVudAogI2VuZGlmCiB7CiAgICAgc2V0Q2hpbGRyZW5JbmxpbmUodHJ1ZSk7CisgICAg
Y3JlYXRlTXVsdGlDb2x1bW5GbG93VGhyZWFkSWZOZWVkZWQoKTsKIH0KIAogUmVuZGVyQmxvY2tG
bG93OjpSZW5kZXJCbG9ja0Zsb3coRG9jdW1lbnQmIGRvY3VtZW50LCBQYXNzUmVmPFJlbmRlclN0
eWxlPiBzdHlsZSkKQEAgLTExMSwxMiArMTE0LDI1IEBAIFJlbmRlckJsb2NrRmxvdzo6UmVuZGVy
QmxvY2tGbG93KERvY3VtZW4KICNlbmRpZgogewogICAgIHNldENoaWxkcmVuSW5saW5lKHRydWUp
OworICAgIGNyZWF0ZU11bHRpQ29sdW1uRmxvd1RocmVhZElmTmVlZGVkKCk7CiB9CiAKIFJlbmRl
ckJsb2NrRmxvdzo6flJlbmRlckJsb2NrRmxvdygpCiB7CiB9CiAKK3ZvaWQgUmVuZGVyQmxvY2tG
bG93OjpjcmVhdGVNdWx0aUNvbHVtbkZsb3dUaHJlYWRJZk5lZWRlZCgpCit7CisgICAgaWYgKChz
dHlsZSgpLmhhc0F1dG9Db2x1bW5Db3VudCgpICYmIHN0eWxlKCkuaGFzQXV0b0NvbHVtbldpZHRo
KCkpIHx8ICFkb2N1bWVudCgpLnJlZ2lvbkJhc2VkQ29sdW1uc0VuYWJsZWQoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIHNldENoaWxkcmVuSW5saW5lKGZhbHNlKTsKKyAgICBSZW5kZXJN
dWx0aUNvbHVtbkZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBuZXcgUmVuZGVyTXVsdGlDb2x1bW5G
bG93VGhyZWFkKGRvY3VtZW50KCksIFJlbmRlclN0eWxlOjpjcmVhdGVBbm9ueW1vdXNTdHlsZVdp
dGhEaXNwbGF5KCZzdHlsZSgpLCBCTE9DSykpOworICAgIGZsb3dUaHJlYWQtPmluaXRpYWxpemVT
dHlsZSgpOworICAgIFJlbmRlckJsb2NrOjphZGRDaGlsZChmbG93VGhyZWFkKTsKKyAgICBzZXRN
dWx0aUNvbHVtbkZsb3dUaHJlYWQoZmxvd1RocmVhZCk7Cit9CisKIHZvaWQgUmVuZGVyQmxvY2tG
bG93OjppbnNlcnRlZEludG9UcmVlKCkKIHsKICAgICBSZW5kZXJCbG9jazo6aW5zZXJ0ZWRJbnRv
VHJlZSgpOwpAQCAtMTgyNSw2ICsxODQxLDExIEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpzdHls
ZURpZENoYW5nZShTdHkKIAogICAgIGlmIChkaWZmID49IFN0eWxlRGlmZmVyZW5jZVJlcGFpbnQp
CiAgICAgICAgIGludmFsaWRhdGVMaW5lTGF5b3V0UGF0aCgpOworICAgIAorICAgIGlmIChtdWx0
aUNvbHVtbkZsb3dUaHJlYWQoKSkgeworICAgICAgICBmb3IgKFJlbmRlckJveCogY2hpbGQgPSBm
aXJzdENoaWxkQm94KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZ0JveCgpKQor
ICAgICAgICAgICAgY2hpbGQtPnNldFN0eWxlKFJlbmRlclN0eWxlOjpjcmVhdGVBbm9ueW1vdXNT
dHlsZVdpdGhEaXNwbGF5KCZzdHlsZSgpLCBCTE9DSykpOworICAgIH0KIH0KIAogdm9pZCBSZW5k
ZXJCbG9ja0Zsb3c6OnN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3Qg
UmVuZGVyU3R5bGUmIG5ld1N0eWxlKQpAQCAtMzE2NSw1NCArMzE4Niw5NiBAQCB2b2lkIFJlbmRl
ckJsb2NrRmxvdzo6cGFpbnRJbmxpbmVDaGlsZHJlCiAKIGJvb2wgUmVuZGVyQmxvY2tGbG93Ojpy
ZWxheW91dEZvclBhZ2luYXRpb24oYm9vbCBoYXNTcGVjaWZpZWRQYWdlTG9naWNhbEhlaWdodCwg
TGF5b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdodCwgTGF5b3V0U3RhdGVNYWludGFpbmVyJiBzdGF0
ZVB1c2hlcikKIHsKLSAgICBpZiAoIWhhc0NvbHVtbnMoKSkKKyAgICBpZiAoIWhhc0NvbHVtbnMo
KSAmJiAhbXVsdGlDb2x1bW5GbG93VGhyZWFkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIFJlZlB0cjxSZW5kZXJPdmVyZmxvdz4gc2F2ZWRPdmVyZmxvdyA9IG1fb3ZlcmZsb3cucmVs
ZWFzZSgpOwotICAgIGlmIChjaGlsZHJlbklubGluZSgpKQotICAgICAgICBhZGRPdmVyZmxvd0Zy
b21JbmxpbmVDaGlsZHJlbigpOwotICAgIGVsc2UKLSAgICAgICAgYWRkT3ZlcmZsb3dGcm9tQmxv
Y2tDaGlsZHJlbigpOwotICAgIExheW91dFVuaXQgbGF5b3V0T3ZlcmZsb3dMb2dpY2FsQm90dG9t
ID0gKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBsYXlvdXRPdmVyZmxvd1JlY3QoKS5tYXhZ
KCkgOiBsYXlvdXRPdmVyZmxvd1JlY3QoKS5tYXhYKCkpIC0gYm9yZGVyQW5kUGFkZGluZ0JlZm9y
ZSgpOworICAgIGlmIChoYXNDb2x1bW5zKCkpIHsKKyAgICAgICAgUmVmUHRyPFJlbmRlck92ZXJm
bG93PiBzYXZlZE92ZXJmbG93ID0gbV9vdmVyZmxvdy5yZWxlYXNlKCk7CisgICAgICAgIGlmIChj
aGlsZHJlbklubGluZSgpKQorICAgICAgICAgICAgYWRkT3ZlcmZsb3dGcm9tSW5saW5lQ2hpbGRy
ZW4oKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYWRkT3ZlcmZsb3dGcm9tQmxvY2tDaGls
ZHJlbigpOworICAgICAgICBMYXlvdXRVbml0IGxheW91dE92ZXJmbG93TG9naWNhbEJvdHRvbSA9
IChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbGF5b3V0T3ZlcmZsb3dSZWN0KCkubWF4WSgp
IDogbGF5b3V0T3ZlcmZsb3dSZWN0KCkubWF4WCgpKSAtIGJvcmRlckFuZFBhZGRpbmdCZWZvcmUo
KTsKIAotICAgIC8vIEZJWE1FOiBXZSBkb24ndCBiYWxhbmNlIHByb3Blcmx5IGF0IGFsbCBpbiB0
aGUgcHJlc2VuY2Ugb2YgZm9yY2VkIHBhZ2UgYnJlYWtzLiAgV2UgbmVlZCB0byB1bmRlcnN0YW5k
IHdoYXQKLSAgICAvLyB0aGUgZGlzdGFuY2UgYmV0d2VlbiBmb3JjZWQgcGFnZSBicmVha3MgaXMg
c28gdGhhdCB3ZSBjYW4gYXZvaWQgbWFraW5nIHRoZSBtaW5pbXVtIGNvbHVtbiBoZWlnaHQgdG9v
IHRhbGwuCi0gICAgQ29sdW1uSW5mbyogY29sSW5mbyA9IGNvbHVtbkluZm8oKTsKLSAgICBpZiAo
IWhhc1NwZWNpZmllZFBhZ2VMb2dpY2FsSGVpZ2h0KSB7Ci0gICAgICAgIExheW91dFVuaXQgY29s
dW1uSGVpZ2h0ID0gcGFnZUxvZ2ljYWxIZWlnaHQ7Ci0gICAgICAgIGludCBtaW5Db2x1bW5Db3Vu
dCA9IGNvbEluZm8tPmZvcmNlZEJyZWFrcygpICsgMTsKLSAgICAgICAgaW50IGRlc2lyZWRDb2x1
bW5Db3VudCA9IGNvbEluZm8tPmRlc2lyZWRDb2x1bW5Db3VudCgpOwotICAgICAgICBpZiAobWlu
Q29sdW1uQ291bnQgPj0gZGVzaXJlZENvbHVtbkNvdW50KSB7Ci0gICAgICAgICAgICAvLyBUaGUg
Zm9yY2VkIHBhZ2UgYnJlYWtzIGFyZSBpbiBjb250cm9sIG9mIHRoZSBiYWxhbmNpbmcuICBKdXN0
IHNldCB0aGUgY29sdW1uIGhlaWdodCB0byB0aGUKLSAgICAgICAgICAgIC8vIG1heGltdW0gcGFn
ZSBicmVhayBkaXN0YW5jZS4KLSAgICAgICAgICAgIGlmICghcGFnZUxvZ2ljYWxIZWlnaHQpIHsK
LSAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGRpc3RhbmNlQmV0d2VlbkJyZWFrcyA9IHN0ZDo6
bWF4PExheW91dFVuaXQ+KGNvbEluZm8tPm1heGltdW1EaXN0YW5jZUJldHdlZW5Gb3JjZWRCcmVh
a3MoKSwKLSAgICAgICAgICAgICAgICAgICAgdmlldygpLmxheW91dFN0YXRlKCktPnBhZ2VMb2dp
Y2FsT2Zmc2V0KHRoaXMsIGJvcmRlckFuZFBhZGRpbmdCZWZvcmUoKSArIGxheW91dE92ZXJmbG93
TG9naWNhbEJvdHRvbSkgLSBjb2xJbmZvLT5mb3JjZWRCcmVha09mZnNldCgpKTsKLSAgICAgICAg
ICAgICAgICBjb2x1bW5IZWlnaHQgPSBzdGQ6Om1heChjb2xJbmZvLT5taW5pbXVtQ29sdW1uSGVp
Z2h0KCksIGRpc3RhbmNlQmV0d2VlbkJyZWFrcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0g
ZWxzZSBpZiAobGF5b3V0T3ZlcmZsb3dMb2dpY2FsQm90dG9tID4gYm91bmRlZE11bHRpcGx5KHBh
Z2VMb2dpY2FsSGVpZ2h0LCBkZXNpcmVkQ29sdW1uQ291bnQpKSB7Ci0gICAgICAgICAgICAvLyBO
b3cgdGhhdCB3ZSBrbm93IHRoZSBpbnRyaW5zaWMgaGVpZ2h0IG9mIHRoZSBjb2x1bW5zLCB3ZSBo
YXZlIHRvIHJlYmFsYW5jZSB0aGVtLgotICAgICAgICAgICAgY29sdW1uSGVpZ2h0ID0gc3RkOjpt
YXg8TGF5b3V0VW5pdD4oY29sSW5mby0+bWluaW11bUNvbHVtbkhlaWdodCgpLCBjZWlsZigoZmxv
YXQpbGF5b3V0T3ZlcmZsb3dMb2dpY2FsQm90dG9tIC8gZGVzaXJlZENvbHVtbkNvdW50KSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChjb2x1bW5IZWlnaHQgJiYgY29sdW1uSGVp
Z2h0ICE9IHBhZ2VMb2dpY2FsSGVpZ2h0KSB7Ci0gICAgICAgICAgICBzdGF0ZVB1c2hlci5wb3Ao
KTsKLSAgICAgICAgICAgIHNldEV2ZXJIYWRMYXlvdXQodHJ1ZSk7Ci0gICAgICAgICAgICBsYXlv
dXRCbG9jayhmYWxzZSwgY29sdW1uSGVpZ2h0KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9Ci0gICAgfSAKKyAgICAgICAgLy8gRklYTUU6IFdlIGRvbid0IGJhbGFuY2UgcHJv
cGVybHkgYXQgYWxsIGluIHRoZSBwcmVzZW5jZSBvZiBmb3JjZWQgcGFnZSBicmVha3MuICBXZSBu
ZWVkIHRvIHVuZGVyc3RhbmQgd2hhdAorICAgICAgICAvLyB0aGUgZGlzdGFuY2UgYmV0d2VlbiBm
b3JjZWQgcGFnZSBicmVha3MgaXMgc28gdGhhdCB3ZSBjYW4gYXZvaWQgbWFraW5nIHRoZSBtaW5p
bXVtIGNvbHVtbiBoZWlnaHQgdG9vIHRhbGwuCisgICAgICAgIENvbHVtbkluZm8qIGNvbEluZm8g
PSBjb2x1bW5JbmZvKCk7CisgICAgICAgIGlmICghaGFzU3BlY2lmaWVkUGFnZUxvZ2ljYWxIZWln
aHQpIHsKKyAgICAgICAgICAgIExheW91dFVuaXQgY29sdW1uSGVpZ2h0ID0gcGFnZUxvZ2ljYWxI
ZWlnaHQ7CisgICAgICAgICAgICBpbnQgbWluQ29sdW1uQ291bnQgPSBjb2xJbmZvLT5mb3JjZWRC
cmVha3MoKSArIDE7CisgICAgICAgICAgICBpbnQgZGVzaXJlZENvbHVtbkNvdW50ID0gY29sSW5m
by0+ZGVzaXJlZENvbHVtbkNvdW50KCk7CisgICAgICAgICAgICBpZiAobWluQ29sdW1uQ291bnQg
Pj0gZGVzaXJlZENvbHVtbkNvdW50KSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIGZvcmNlZCBw
YWdlIGJyZWFrcyBhcmUgaW4gY29udHJvbCBvZiB0aGUgYmFsYW5jaW5nLiAgSnVzdCBzZXQgdGhl
IGNvbHVtbiBoZWlnaHQgdG8gdGhlCisgICAgICAgICAgICAgICAgLy8gbWF4aW11bSBwYWdlIGJy
ZWFrIGRpc3RhbmNlLgorICAgICAgICAgICAgICAgIGlmICghcGFnZUxvZ2ljYWxIZWlnaHQpIHsK
KyAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBkaXN0YW5jZUJldHdlZW5CcmVha3MgPSBz
dGQ6Om1heDxMYXlvdXRVbml0Pihjb2xJbmZvLT5tYXhpbXVtRGlzdGFuY2VCZXR3ZWVuRm9yY2Vk
QnJlYWtzKCksCisgICAgICAgICAgICAgICAgICAgICAgICB2aWV3KCkubGF5b3V0U3RhdGUoKS0+
cGFnZUxvZ2ljYWxPZmZzZXQodGhpcywgYm9yZGVyQW5kUGFkZGluZ0JlZm9yZSgpICsgbGF5b3V0
T3ZlcmZsb3dMb2dpY2FsQm90dG9tKSAtIGNvbEluZm8tPmZvcmNlZEJyZWFrT2Zmc2V0KCkpOwor
ICAgICAgICAgICAgICAgICAgICBjb2x1bW5IZWlnaHQgPSBzdGQ6Om1heChjb2xJbmZvLT5taW5p
bXVtQ29sdW1uSGVpZ2h0KCksIGRpc3RhbmNlQmV0d2VlbkJyZWFrcyk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChsYXlvdXRPdmVyZmxvd0xvZ2ljYWxCb3R0b20g
PiBib3VuZGVkTXVsdGlwbHkocGFnZUxvZ2ljYWxIZWlnaHQsIGRlc2lyZWRDb2x1bW5Db3VudCkp
IHsKKyAgICAgICAgICAgICAgICAvLyBOb3cgdGhhdCB3ZSBrbm93IHRoZSBpbnRyaW5zaWMgaGVp
Z2h0IG9mIHRoZSBjb2x1bW5zLCB3ZSBoYXZlIHRvIHJlYmFsYW5jZSB0aGVtLgorICAgICAgICAg
ICAgICAgIGNvbHVtbkhlaWdodCA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KGNvbEluZm8tPm1pbmlt
dW1Db2x1bW5IZWlnaHQoKSwgY2VpbGYoKGZsb2F0KWxheW91dE92ZXJmbG93TG9naWNhbEJvdHRv
bSAvIGRlc2lyZWRDb2x1bW5Db3VudCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBpZiAoY29sdW1uSGVpZ2h0ICYmIGNvbHVtbkhlaWdodCAhPSBwYWdlTG9naWNh
bEhlaWdodCkgeworICAgICAgICAgICAgICAgIHN0YXRlUHVzaGVyLnBvcCgpOworICAgICAgICAg
ICAgICAgIHNldEV2ZXJIYWRMYXlvdXQodHJ1ZSk7CisgICAgICAgICAgICAgICAgbGF5b3V0Qmxv
Y2soZmFsc2UsIGNvbHVtbkhlaWdodCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0gCiAKLSAgICBpZiAocGFnZUxvZ2ljYWxIZWlnaHQpCi0g
ICAgICAgIGNvbEluZm8tPnNldENvbHVtbkNvdW50QW5kSGVpZ2h0KGNlaWxmKChmbG9hdClsYXlv
dXRPdmVyZmxvd0xvZ2ljYWxCb3R0b20gLyBwYWdlTG9naWNhbEhlaWdodCksIHBhZ2VMb2dpY2Fs
SGVpZ2h0KTsKKyAgICAgICAgaWYgKHBhZ2VMb2dpY2FsSGVpZ2h0KQorICAgICAgICAgICAgY29s
SW5mby0+c2V0Q29sdW1uQ291bnRBbmRIZWlnaHQoY2VpbGYoKGZsb2F0KWxheW91dE92ZXJmbG93
TG9naWNhbEJvdHRvbSAvIHBhZ2VMb2dpY2FsSGVpZ2h0KSwgcGFnZUxvZ2ljYWxIZWlnaHQpOwog
Ci0gICAgaWYgKGNvbHVtbkNvdW50KGNvbEluZm8pKSB7Ci0gICAgICAgIHNldExvZ2ljYWxIZWln
aHQoYm9yZGVyQW5kUGFkZGluZ0JlZm9yZSgpICsgY29sSW5mby0+Y29sdW1uSGVpZ2h0KCkgKyBi
b3JkZXJBbmRQYWRkaW5nQWZ0ZXIoKSArIHNjcm9sbGJhckxvZ2ljYWxIZWlnaHQoKSk7Ci0gICAg
ICAgIGNsZWFyT3ZlcmZsb3coKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbV9vdmVyZmxvdyA9IHNh
dmVkT3ZlcmZsb3cucmVsZWFzZSgpOworICAgICAgICBpZiAoY29sdW1uQ291bnQoY29sSW5mbykp
IHsKKyAgICAgICAgICAgIHNldExvZ2ljYWxIZWlnaHQoYm9yZGVyQW5kUGFkZGluZ0JlZm9yZSgp
ICsgY29sSW5mby0+Y29sdW1uSGVpZ2h0KCkgKyBib3JkZXJBbmRQYWRkaW5nQWZ0ZXIoKSArIHNj
cm9sbGJhckxvZ2ljYWxIZWlnaHQoKSk7CisgICAgICAgICAgICBjbGVhck92ZXJmbG93KCk7Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9vdmVyZmxvdyA9IHNhdmVkT3ZlcmZsb3cucmVs
ZWFzZSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogICAgIAotICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAoIW11bHRpQ29sdW1uRmxvd1RocmVhZCgpLT5zaG91bGRSZWxheW91dEZv
clBhZ2luYXRpb24oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIG11bHRpQ29s
dW1uRmxvd1RocmVhZCgpLT5zZXROZWVkc1JlYmFsYW5jaW5nKGZhbHNlKTsKKyAgICBtdWx0aUNv
bHVtbkZsb3dUaHJlYWQoKS0+c2V0SW5CYWxhbmNpbmdQYXNzKHRydWUpOyAvLyBQcmV2ZW50IHJl
LWVudGVyaW5nIHRoaXMgbWV0aG9kIChhbmQgcmVjdXJzaW9uIGludG8gbGF5b3V0KS4KKworICAg
IGJvb2wgbmVlZHNSZWxheW91dDsKKyAgICBib29sIG5lZWRlZFJlbGF5b3V0ID0gZmFsc2U7Cisg
ICAgYm9vbCBmaXJzdFBhc3MgPSB0cnVlOworICAgIGRvIHsKKyAgICAgICAgLy8gQ29sdW1uIGhl
aWdodHMgbWF5IGNoYW5nZSBoZXJlIGJlY2F1c2Ugb2YgYmFsYW5jaW5nLiBXZSBtYXkgaGF2ZSB0
byBkbyBtdWx0aXBsZSBsYXlvdXQKKyAgICAgICAgLy8gcGFzc2VzLCBkZXBlbmRpbmcgb24gaG93
IHRoZSBjb250ZW50cyBpcyBmaXR0ZWQgdG8gdGhlIGNoYW5nZWQgY29sdW1uIGhlaWdodHMuIElu
IG1vc3QKKyAgICAgICAgLy8gY2FzZXMsIGxheWluZyBvdXQgYWdhaW4gdHdpY2Ugb3IgZXZlbiBq
dXN0IG9uY2Ugd2lsbCBzdWZmaWNlLiBTb21ldGltZXMgd2UgbmVlZCBtb3JlCisgICAgICAgIC8v
IHBhc3NlcyB0aGFuIHRoYXQsIHRob3VnaCwgYnV0IHRoZSBudW1iZXIgb2YgcmV0cmllcyBzaG91
bGQgbm90IGV4Y2VlZCB0aGUgbnVtYmVyIG9mCisgICAgICAgIC8vIGNvbHVtbnMsIHVubGVzcyB3
ZSBoYXZlIGEgYnVnLgorICAgICAgICBuZWVkc1JlbGF5b3V0ID0gZmFsc2U7CisgICAgICAgIGZv
ciAoUmVuZGVyQm94KiBjaGlsZEJveCA9IGZpcnN0Q2hpbGRCb3goKTsgY2hpbGRCb3g7IGNoaWxk
Qm94ID0gY2hpbGRCb3gtPm5leHRTaWJsaW5nQm94KCkpCisgICAgICAgICAgICBpZiAoY2hpbGRC
b3ggIT0gbXVsdGlDb2x1bW5GbG93VGhyZWFkKCkgJiYgY2hpbGRCb3gtPmlzUmVuZGVyTXVsdGlD
b2x1bW5TZXQoKSkgeworICAgICAgICAgICAgICAgIFJlbmRlck11bHRpQ29sdW1uU2V0KiBtdWx0
aWNvbFNldCA9IHRvUmVuZGVyTXVsdGlDb2x1bW5TZXQoY2hpbGRCb3gpOworICAgICAgICAgICAg
ICAgIGlmIChtdWx0aWNvbFNldC0+cmVjYWxjdWxhdGVCYWxhbmNlZEhlaWdodChmaXJzdFBhc3Mp
KSB7CisgICAgICAgICAgICAgICAgICAgIG11bHRpY29sU2V0LT5zZXRDaGlsZE5lZWRzTGF5b3V0
KE1hcmtPbmx5VGhpcyk7CisgICAgICAgICAgICAgICAgICAgIG5lZWRzUmVsYXlvdXQgPSB0cnVl
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICBpZiAobmVlZHNS
ZWxheW91dCkgeworICAgICAgICAgICAgLy8gTGF5b3V0IGFnYWluLiBDb2x1bW4gYmFsYW5jaW5n
IHJlc3VsdGVkIGluIGEgbmV3IGhlaWdodC4KKyAgICAgICAgICAgIG5lZWRlZFJlbGF5b3V0ID0g
dHJ1ZTsKKyAgICAgICAgICAgIG11bHRpQ29sdW1uRmxvd1RocmVhZCgpLT5zZXRDaGlsZE5lZWRz
TGF5b3V0KE1hcmtPbmx5VGhpcyk7CisgICAgICAgICAgICBzZXRDaGlsZE5lZWRzTGF5b3V0KE1h
cmtPbmx5VGhpcyk7CisgICAgICAgICAgICBpZiAoZmlyc3RQYXNzKQorICAgICAgICAgICAgICAg
IHN0YXRlUHVzaGVyLnBvcCgpOworICAgICAgICAgICAgbGF5b3V0QmxvY2soZmFsc2UpOworICAg
ICAgICB9CisgICAgICAgIGZpcnN0UGFzcyA9IGZhbHNlOworICAgIH0gd2hpbGUgKG5lZWRzUmVs
YXlvdXQpOworICAgIAorICAgIG11bHRpQ29sdW1uRmxvd1RocmVhZCgpLT5zZXRJbkJhbGFuY2lu
Z1Bhc3MoZmFsc2UpOworICAgIAorICAgIHJldHVybiBuZWVkZWRSZWxheW91dDsKIH0KIAogYm9v
bCBSZW5kZXJCbG9ja0Zsb3c6Omhhc0xpbmVzKCkgY29uc3QKQEAgLTM0MTEsNSArMzQ3NCwxMDkg
QEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmFkanVzdENvbXB1dGVkRm9udAogfQogI2VuZGlmIC8v
IEVOQUJMRShJT1NfVEVYVF9BVVRPU0laSU5HKQogCitSZW5kZXJPYmplY3QqIFJlbmRlckJsb2Nr
Rmxvdzo6bGF5b3V0U3BlY2lhbEV4Y2x1ZGVkQ2hpbGQoYm9vbCByZWxheW91dENoaWxkcmVuKQor
eworICAgIGlmICghbXVsdGlDb2x1bW5GbG93VGhyZWFkKCkpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgLy8gVXBkYXRlIHRoZSBkaW1lbnNpb25zIG9mIG91ciByZWdpb25zIGJlZm9yZSB3ZSBs
YXkgb3V0IHRoZSBmbG93IHRocmVhZC4KKyAgICAvLyBGSVhNRTogRXZlbnR1YWxseSB0aGlzIGlz
IGdvaW5nIHRvIGdldCB3YXkgbW9yZSBjb21wbGljYXRlZCwgYW5kIHdlIHdpbGwgYmUgZGVzdHJv
eWluZyByZWdpb25zCisgICAgLy8gaW5zdGVhZCBvZiB0cnlpbmcgdG8ga2VlcCB0aGVtIGFyb3Vu
ZC4KKyAgICBib29sIHNob3VsZEludmFsaWRhdGVSZWdpb25zID0gZmFsc2U7CisgICAgZm9yIChS
ZW5kZXJCb3gqIGNoaWxkQm94ID0gZmlyc3RDaGlsZEJveCgpOyBjaGlsZEJveDsgY2hpbGRCb3gg
PSBjaGlsZEJveC0+bmV4dFNpYmxpbmdCb3goKSkgeworICAgICAgICBpZiAoY2hpbGRCb3ggPT0g
bXVsdGlDb2x1bW5GbG93VGhyZWFkKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICBpZiAocmVsYXlvdXRDaGlsZHJlbiB8fCBjaGlsZEJveC0+bmVlZHNMYXlvdXQoKSkgeworICAg
ICAgICAgICAgaWYgKCFtdWx0aUNvbHVtbkZsb3dUaHJlYWQoKS0+aW5CYWxhbmNpbmdQYXNzKCkg
JiYgY2hpbGRCb3gtPmlzUmVuZGVyTXVsdGlDb2x1bW5TZXQoKSkKKyAgICAgICAgICAgICAgICB0
b1JlbmRlck11bHRpQ29sdW1uU2V0KGNoaWxkQm94KS0+cHJlcGFyZUZvckxheW91dCgpOworICAg
ICAgICAgICAgc2hvdWxkSW52YWxpZGF0ZVJlZ2lvbnMgPSB0cnVlOworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIGlmIChzaG91bGRJbnZhbGlkYXRlUmVnaW9ucykKKyAgICAgICAgbXVsdGlD
b2x1bW5GbG93VGhyZWFkKCktPmludmFsaWRhdGVSZWdpb25zKCk7CisKKyAgICBpZiAocmVsYXlv
dXRDaGlsZHJlbikKKyAgICAgICAgbXVsdGlDb2x1bW5GbG93VGhyZWFkKCktPnNldENoaWxkTmVl
ZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKKyAgICAKKyAgICBpZiAobXVsdGlDb2x1bW5GbG93VGhy
ZWFkKCktPnJlcXVpcmVzQmFsYW5jaW5nKCkpIHsKKyAgICAgICAgLy8gQXQgdGhlIGVuZCBvZiBt
dWx0aWNvbCBsYXlvdXQsIHJlbGF5b3V0Rm9yUGFnaW5hdGlvbigpIGlzIGNhbGxlZCB1bmNvbmRp
dGlvbmFsbHksIGJ1dCBpZgorICAgICAgICAvLyBubyBjaGlsZHJlbiBhcmUgdG8gYmUgbGFpZCBv
dXQgKGUuZy4gZml4ZWQgd2lkdGggd2l0aCBsYXlvdXQgYWxyZWFkeSBiZWluZyB1cC10by1kYXRl
KSwKKyAgICAgICAgLy8gd2Ugd2FudCB0byBwcmV2ZW50IGl0IGZyb20gZG9pbmcgYW55IHdvcmss
IHNvIHRoYXQgdGhlIGNvbHVtbiBiYWxhbmNpbmcgbWFjaGluZXJ5IGRvZXNuJ3QKKyAgICAgICAg
Ly8ga2ljayBpbiBhbmQgdHJpZ2dlciBhZGRpdGlvbmFsIHVubmVjZXNzYXJ5IGxheW91dCBwYXNz
ZXMuIEFjdHVhbGx5LCBpdCdzIG5vdCBqdXN0IGEgZ29vZAorICAgICAgICAvLyBpZGVhIGluIGdl
bmVyYWwgdG8gbm90IHdhc3RlIHRpbWUgb24gYmFsYW5jaW5nIGNvbnRlbnQgdGhhdCBoYXNuJ3Qg
YmVlbiByZS1sYWlkIG91dDsgd2UKKyAgICAgICAgLy8gYXJlIGFjdHVhbGx5IHJlcXVpcmVkIHRv
IGd1YXJhbnRlZSB0aGlzLiBUaGUgY2FsY3VsYXRpb24gb2YgaW1wbGljaXQgYnJlYWtzIG5lZWRz
IHRvIGJlCisgICAgICAgIC8vIHByZWNlZGVkIGJ5IGEgcHJvcGVyIGxheW91dCBwYXNzLCBzaW5j
ZSBpdCdzIGxheW91dCB0aGF0IHNldHMgdXAgY29udGVudCBydW5zLCBhbmQgdGhlCisgICAgICAg
IC8vIHJ1bnMgZ2V0IGRlbGV0ZWQgcmlnaHQgYWZ0ZXIgZXZlcnkgcGFzcy4KKyAgICAgICAgbXVs
dGlDb2x1bW5GbG93VGhyZWFkKCktPnNldE5lZWRzUmViYWxhbmNpbmcoc2hvdWxkSW52YWxpZGF0
ZVJlZ2lvbnMgfHwgbXVsdGlDb2x1bW5GbG93VGhyZWFkKCktPm5lZWRzTGF5b3V0KCkpOworICAg
IH0KKworICAgIHNldExvZ2ljYWxUb3BGb3JDaGlsZCgqbXVsdGlDb2x1bW5GbG93VGhyZWFkKCks
IGJvcmRlckFuZFBhZGRpbmdCZWZvcmUoKSk7CisgICAgbXVsdGlDb2x1bW5GbG93VGhyZWFkKCkt
PmxheW91dElmTmVlZGVkKCk7CisgICAgZGV0ZXJtaW5lTG9naWNhbExlZnRQb3NpdGlvbkZvckNo
aWxkKCptdWx0aUNvbHVtbkZsb3dUaHJlYWQoKSk7CisgICAgCisgICAgcmV0dXJuIG11bHRpQ29s
dW1uRmxvd1RocmVhZCgpOworfQorCisKK2Jvb2wgUmVuZGVyQmxvY2tGbG93Ojp1cGRhdGVMb2dp
Y2FsV2lkdGhBbmRDb2x1bW5XaWR0aCgpCit7CisgICAgYm9vbCByZWxheW91dENoaWxkcmVuID0g
UmVuZGVyQmxvY2s6OnVwZGF0ZUxvZ2ljYWxXaWR0aEFuZENvbHVtbldpZHRoKCk7CisgICAgaWYg
KG11bHRpQ29sdW1uRmxvd1RocmVhZCgpICYmIG11bHRpQ29sdW1uRmxvd1RocmVhZCgpLT5jb21w
dXRlQ29sdW1uQ291bnRBbmRXaWR0aCgpKQorICAgICAgICByZWxheW91dENoaWxkcmVuID0gdHJ1
ZTsKKyAgICByZXR1cm4gcmVsYXlvdXRDaGlsZHJlbjsKK30KKworCit2b2lkIFJlbmRlckJsb2Nr
Rmxvdzo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZv
cmVDaGlsZCkKK3sKKyAgICBpZiAobXVsdGlDb2x1bW5GbG93VGhyZWFkKCkpCisgICAgICAgIHJl
dHVybiBtdWx0aUNvbHVtbkZsb3dUaHJlYWQoKS0+YWRkQ2hpbGQobmV3Q2hpbGQsIGJlZm9yZUNo
aWxkKTsKKyAgICBSZW5kZXJCbG9jazo6YWRkQ2hpbGQobmV3Q2hpbGQsIGJlZm9yZUNoaWxkKTsK
K30KKworCit2b2lkIFJlbmRlckJsb2NrRmxvdzo6Y2hlY2tGb3JQYWdpbmF0aW9uTG9naWNhbEhl
aWdodENoYW5nZShMYXlvdXRVbml0JiBwYWdlTG9naWNhbEhlaWdodCwgYm9vbCYgcGFnZUxvZ2lj
YWxIZWlnaHRDaGFuZ2VkLCBib29sJiBoYXNTcGVjaWZpZWRQYWdlTG9naWNhbEhlaWdodCkKK3sK
KyAgICAvLyBJZiB3ZSBkb24ndCB1c2UgZWl0aGVyIG9mIHRoZSB0d28gY29sdW1uIGltcGxlbWVu
dGF0aW9ucyBvciBhIGZsb3cgdGhyZWFkLCB0aGVuIGJhaWwuCisgICAgaWYgKCFpc1JlbmRlckZs
b3dUaHJlYWQoKSAmJiAhbXVsdGlDb2x1bW5GbG93VGhyZWFkKCkgJiYgIWhhc0NvbHVtbnMoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIFdlIGRvbid0IGFjdHVhbGx5IHVwZGF0ZSBh
bnkgb2YgdGhlIHZhcmlhYmxlcy4gV2UganVzdCBzdWJjbGFzc2VkIHRvIGFkanVzdCBvdXIgY29s
dW1uIGhlaWdodC4KKyAgICBpZiAobXVsdGlDb2x1bW5GbG93VGhyZWFkKCkpIHsKKyAgICAgICAg
dXBkYXRlTG9naWNhbEhlaWdodCgpOworICAgICAgICBtdWx0aUNvbHVtbkZsb3dUaHJlYWQoKS0+
c2V0Q29sdW1uSGVpZ2h0QXZhaWxhYmxlKHN0ZDo6bWF4PExheW91dFVuaXQ+KGNvbnRlbnRMb2dp
Y2FsSGVpZ2h0KCksIDApKTsKKyAgICAgICAgc2V0TG9naWNhbEhlaWdodCgwKTsKKyAgICB9IGVs
c2UgaWYgKGhhc0NvbHVtbnMoKSkgeworICAgICAgICBDb2x1bW5JbmZvKiBjb2xJbmZvID0gY29s
dW1uSW5mbygpOworICAgIAorICAgICAgICBpZiAoIXBhZ2VMb2dpY2FsSGVpZ2h0KSB7CisgICAg
ICAgICAgICAvLyBXZSBuZWVkIHRvIGdvIGFoZWFkIGFuZCBzZXQgb3VyIGV4cGxpY2l0IHBhZ2Ug
aGVpZ2h0IGlmIG9uZSBleGlzdHMsIHNvIHRoYXQgd2UgY2FuCisgICAgICAgICAgICAvLyBhdm9p
ZCBkb2luZyB0d28gbGF5b3V0IHBhc3Nlcy4KKyAgICAgICAgICAgIHVwZGF0ZUxvZ2ljYWxIZWln
aHQoKTsKKyAgICAgICAgICAgIExheW91dFVuaXQgY29sdW1uSGVpZ2h0ID0gaXNSZW5kZXJWaWV3
KCkgPyB2aWV3KCkucGFnZU9yVmlld0xvZ2ljYWxIZWlnaHQoKSA6IGNvbnRlbnRMb2dpY2FsSGVp
Z2h0KCk7CisgICAgICAgICAgICBpZiAoY29sdW1uSGVpZ2h0ID4gMCkgeworICAgICAgICAgICAg
ICAgIHBhZ2VMb2dpY2FsSGVpZ2h0ID0gY29sdW1uSGVpZ2h0OworICAgICAgICAgICAgICAgIGhh
c1NwZWNpZmllZFBhZ2VMb2dpY2FsSGVpZ2h0ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHNldExvZ2ljYWxIZWlnaHQoMCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29s
SW5mby0+Y29sdW1uSGVpZ2h0KCkgIT0gcGFnZUxvZ2ljYWxIZWlnaHQgJiYgZXZlckhhZExheW91
dCgpKQorICAgICAgICAgICAgcGFnZUxvZ2ljYWxIZWlnaHRDaGFuZ2VkID0gdHJ1ZTsKKworICAg
ICAgICBjb2xJbmZvLT5zZXRDb2x1bW5IZWlnaHQocGFnZUxvZ2ljYWxIZWlnaHQpOworICAgICAg
ICAKKyAgICAgICAgaWYgKCFoYXNTcGVjaWZpZWRQYWdlTG9naWNhbEhlaWdodCAmJiAhcGFnZUxv
Z2ljYWxIZWlnaHQpCisgICAgICAgICAgICBjb2xJbmZvLT5jbGVhckZvcmNlZEJyZWFrcygpOwor
CisgICAgICAgIGNvbEluZm8tPnNldFBhZ2luYXRpb25Vbml0KHBhZ2luYXRpb25Vbml0KCkpOwor
ICAgIH0gZWxzZSBpZiAoaXNSZW5kZXJGbG93VGhyZWFkKCkpIHsKKyAgICAgICAgcGFnZUxvZ2lj
YWxIZWlnaHQgPSAxOyAvLyBUaGlzIGlzIGp1c3QgYSBoYWNrIHRvIGFsd2F5cyBtYWtlIHN1cmUg
d2UgaGF2ZSBhIHBhZ2UgbG9naWNhbCBoZWlnaHQuCisgICAgICAgIHBhZ2VMb2dpY2FsSGVpZ2h0
Q2hhbmdlZCA9IHRvUmVuZGVyRmxvd1RocmVhZCh0aGlzKS0+cGFnZUxvZ2ljYWxTaXplQ2hhbmdl
ZCgpOworICAgIH0KK30KKwogfQogLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmgJKHJldmlzaW9uIDE2MjcwMikKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuaAkod29ya2luZyBjb3B5
KQpAQCAtMzc0LDYgKzM3NCwxMCBAQCBwdWJsaWM6CiAgICAgTGF5b3V0VW5pdCBwYWdlUmVtYWlu
aW5nTG9naWNhbEhlaWdodEZvck9mZnNldChMYXlvdXRVbml0IG9mZnNldCwgUGFnZUJvdW5kYXJ5
UnVsZSA9IEluY2x1ZGVQYWdlQm91bmRhcnkpIGNvbnN0OwogICAgIGJvb2wgaGFzTmV4dFBhZ2Uo
TGF5b3V0VW5pdCBsb2dpY2FsT2Zmc2V0LCBQYWdlQm91bmRhcnlSdWxlID0gRXhjbHVkZVBhZ2VC
b3VuZGFyeSkgY29uc3Q7CiAKKyAgICB2b2lkIGFkZENoaWxkKFJlbmRlck9iamVjdCogbmV3Q2hp
bGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKSBvdmVycmlkZTsKKyAgICAKKyAgICB2
b2lkIGNyZWF0ZU11bHRpQ29sdW1uRmxvd1RocmVhZElmTmVlZGVkKCk7CisgICAgCiBwcm90ZWN0
ZWQ6CiAgICAgLy8gQSBwYWdlIGJyZWFrIGlzIHJlcXVpcmVkIGF0IHNvbWUgb2Zmc2V0IGR1ZSB0
byBzcGFjZSBzaG9ydGFnZSBpbiB0aGUgY3VycmVudCBmcmFnbWVudGFpbmVyLgogICAgIHZvaWQg
c2V0UGFnZUJyZWFrKExheW91dFVuaXQgb2Zmc2V0LCBMYXlvdXRVbml0IHNwYWNlU2hvcnRhZ2Up
OwpAQCAtNDI3LDggKzQzMSwxOCBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2aXJ0dWFsIGludCBmaXJz
dExpbmVCYXNlbGluZSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgaW50IGlubGluZUJs
b2NrQmFzZWxpbmUoTGluZURpcmVjdGlvbk1vZGUpIGNvbnN0IG92ZXJyaWRlOworICAgIAorICAg
IGJvb2wgdXBkYXRlTG9naWNhbFdpZHRoQW5kQ29sdW1uV2lkdGgoKSBvdmVycmlkZTsKIAorICAg
IHZpcnR1YWwgYm9vbCBpc011bHRpQ29sdW1uQmxvY2tGbG93KCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gbXVsdGlDb2x1bW5GbG93VGhyZWFkKCk7IH0KKyAgICAKIHByaXZhdGU6CisgICAgLy8g
Q2FsbGVkIHRvIGxheSBvdXQgdGhlIGxlZ2VuZCBmb3IgYSBmaWVsZHNldCBvciB0aGUgcnVieSB0
ZXh0IG9mIGEgcnVieSBydW4uIEFsc28gdXNlZCBieSBtdWx0aS1jb2x1bW4gbGF5b3V0IHRvIGhh
bmRsZQorICAgIC8vIHRoZSBmbG93IHRocmVhZCBjaGlsZC4KKyAgICB2aXJ0dWFsIFJlbmRlck9i
amVjdCogbGF5b3V0U3BlY2lhbEV4Y2x1ZGVkQ2hpbGQoYm9vbCAvKnJlbGF5b3V0Q2hpbGRyZW4q
Lyk7CisKKyAgICB2b2lkIGNoZWNrRm9yUGFnaW5hdGlvbkxvZ2ljYWxIZWlnaHRDaGFuZ2UoTGF5
b3V0VW5pdCYgcGFnZUxvZ2ljYWxIZWlnaHQsIGJvb2wmIHBhZ2VMb2dpY2FsSGVpZ2h0Q2hhbmdl
ZCwgYm9vbCYgaGFzU3BlY2lmaWVkUGFnZUxvZ2ljYWxIZWlnaHQpOworICAgIAogICAgIHZpcnR1
YWwgdm9pZCBwYWludElubGluZUNoaWxkcmVuKFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50
Jikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50RmxvYXRzKFBhaW50SW5mbyYsIGNv
bnN0IExheW91dFBvaW50JiwgYm9vbCBwcmVzZXJ2ZVBoYXNlID0gZmFsc2UpIG92ZXJyaWRlOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gMTYy
NzAxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ0MzYsNyArNDQzNiw3IEBAIGJvb2wgUmVuZGVyQm94Ojppc1Vuc3BsaXR0YWJs
ZUZvclBhZ2luYXQKICAgICByZXR1cm4gaXNSZXBsYWNlZCgpIHx8IGhhc1Vuc3BsaXR0YWJsZVNj
cm9sbGluZ092ZXJmbG93KCkgfHwgKHBhcmVudCgpICYmIGlzV3JpdGluZ01vZGVSb290KCkpCiAg
ICAgICAgIC8vIEZJWE1FOiBUcmVhdCBtdWx0aS1jb2x1bW4gZWxlbWVudHMgYXMgdW5zcGxpdHRh
YmxlIGZvciBub3cuIFJlbW92ZSBvbmNlIHdlIGltcGxlbWVudCB0aGUgY29ycmVjdAogICAgICAg
ICAvLyBmcmFnbWVudGF0aW9uIG1vZGVsIGZvciBtdWx0aWNvbHVtbi4KLSAgICAgICAgfHwgaXNS
ZW5kZXJNdWx0aUNvbHVtbkJsb2NrKCk7CisgICAgICAgIHx8IGlzTXVsdGlDb2x1bW5CbG9ja0Zs
b3coKTsKIH0KIAogTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmxpbmVIZWlnaHQoYm9vbCAvKmZpcnN0
TGluZSovLCBMaW5lRGlyZWN0aW9uTW9kZSBkaXJlY3Rpb24sIExpbmVQb3NpdGlvbk1vZGUgLyps
aW5lUG9zaXRpb25Nb2RlKi8pIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjI3MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDYg
QEAKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlckxpbmVCcmVhay5o
IgogI2luY2x1ZGUgIlJlbmRlckxpc3RJdGVtLmgiCi0jaW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1
bW5CbG9jay5oIgogI2luY2x1ZGUgIlJlbmRlclJlZ2lvbi5oIgogI2luY2x1ZGUgIlJlbmRlclJ1
YnkuaCIKICNpbmNsdWRlICJSZW5kZXJSdWJ5VGV4dC5oIgpAQCAtMTI0LDggKzEyMyw2IEBAIFJl
bmRlckVsZW1lbnQ6On5SZW5kZXJFbGVtZW50KCkKIAogUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+
IFJlbmRlckVsZW1lbnQ6OmNyZWF0ZUZvcihFbGVtZW50JiBlbGVtZW50LCBQYXNzUmVmPFJlbmRl
clN0eWxlPiBzdHlsZSkKIHsKLSAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBlbGVtZW50LmRvY3Vt
ZW50KCk7Ci0KICAgICAvLyBNaW5pbWFsIHN1cHBvcnQgZm9yIGNvbnRlbnQgcHJvcGVydGllcyBy
ZXBsYWNpbmcgYW4gZW50aXJlIGVsZW1lbnQuCiAgICAgLy8gV29ya3Mgb25seSBpZiB3ZSBoYXZl
IGV4YWN0bHkgb25lIHBpZWNlIG9mIGNvbnRlbnQgYW5kIGl0J3MgYSBVUkwuCiAgICAgLy8gT3Ro
ZXJ3aXNlIGFjdHMgYXMgaWYgd2UgZGlkbid0IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgpAQCAtMTU3
LDggKzE1NCw2IEBAIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBSZW5kZXJFbGVtZW50OjoKICAg
ICBjYXNlIElOTElORV9CTE9DSzoKICAgICBjYXNlIFJVTl9JTjoKICAgICBjYXNlIENPTVBBQ1Q6
Ci0gICAgICAgIGlmICgoIXN0eWxlLmdldCgpLmhhc0F1dG9Db2x1bW5Db3VudCgpIHx8ICFzdHls
ZS5nZXQoKS5oYXNBdXRvQ29sdW1uV2lkdGgoKSkgJiYgZG9jdW1lbnQucmVnaW9uQmFzZWRDb2x1
bW5zRW5hYmxlZCgpKQotICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVJlbmRlcmVyPFJlbmRlck11
bHRpQ29sdW1uQmxvY2s+KGVsZW1lbnQsIHN0ZDo6bW92ZShzdHlsZSkpOwogICAgICAgICByZXR1
cm4gY3JlYXRlUmVuZGVyZXI8UmVuZGVyQmxvY2tGbG93PihlbGVtZW50LCBzdGQ6Om1vdmUoc3R5
bGUpKTsKICAgICBjYXNlIExJU1RfSVRFTToKICAgICAgICAgcmV0dXJuIGNyZWF0ZVJlbmRlcmVy
PFJlbmRlckxpc3RJdGVtPihlbGVtZW50LCBzdGQ6Om1vdmUoc3R5bGUpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkJsb2NrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5CbG9jay5jcHAJ
KHJldmlzaW9uIDE2MjcwMikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0
aUNvbHVtbkJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxOTggKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uQmxvY2suaCIKLQotI2lu
Y2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZC5oIgotI2luY2x1ZGUgIlJlbmRlck11
bHRpQ29sdW1uU2V0LmgiCi0jaW5jbHVkZSAiUmVuZGVyVmlldy5oIgotI2luY2x1ZGUgIlN0eWxl
SW5oZXJpdGVkRGF0YS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlbmRlck11bHRpQ29s
dW1uQmxvY2s6OlJlbmRlck11bHRpQ29sdW1uQmxvY2soRWxlbWVudCYgZWxlbWVudCwgUGFzc1Jl
ZjxSZW5kZXJTdHlsZT4gc3R5bGVQdHIpCi0gICAgOiBSZW5kZXJCbG9ja0Zsb3coZWxlbWVudCwg
c3RkOjptb3ZlKHN0eWxlUHRyKSkKLXsKLSAgICBzZXRDaGlsZHJlbklubGluZShmYWxzZSk7Ci0g
ICAgUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkKiBmbG93VGhyZWFkID0gbmV3IFJlbmRlck11
bHRpQ29sdW1uRmxvd1RocmVhZChkb2N1bWVudCgpLCBSZW5kZXJTdHlsZTo6Y3JlYXRlQW5vbnlt
b3VzU3R5bGVXaXRoRGlzcGxheSgmc3R5bGUoKSwgQkxPQ0spKTsKLSAgICBmbG93VGhyZWFkLT5p
bml0aWFsaXplU3R5bGUoKTsKLSAgICBSZW5kZXJCbG9ja0Zsb3c6OmFkZENoaWxkKGZsb3dUaHJl
YWQpOwotICAgIHNldE11bHRpQ29sdW1uRmxvd1RocmVhZChmbG93VGhyZWFkKTsKLX0KLQotYm9v
bCBSZW5kZXJNdWx0aUNvbHVtbkJsb2NrOjpyZXF1aXJlc0JhbGFuY2luZygpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG11bHRpQ29sdW1uRmxvd1RocmVhZCgpLT5yZXF1aXJlc0JhbGFuY2luZygpOwot
fQotCi1MYXlvdXRVbml0IFJlbmRlck11bHRpQ29sdW1uQmxvY2s6OmNvbHVtbkhlaWdodEF2YWls
YWJsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG11bHRpQ29sdW1uRmxvd1RocmVhZCgpLT5jb2x1
bW5IZWlnaHRBdmFpbGFibGUoKTsKLX0KLQotTGF5b3V0VW5pdCBSZW5kZXJNdWx0aUNvbHVtbkJs
b2NrOjpjb2x1bW5XaWR0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG11bHRpQ29sdW1uRmxvd1Ro
cmVhZCgpLT5jb2x1bW5XaWR0aCgpOwotfQotCi11bnNpZ25lZCBSZW5kZXJNdWx0aUNvbHVtbkJs
b2NrOjpjb2x1bW5Db3VudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG11bHRpQ29sdW1uRmxvd1Ro
cmVhZCgpLT5jb2x1bW5Db3VudCgpOwotfQotICAgIAotdm9pZCBSZW5kZXJNdWx0aUNvbHVtbkJs
b2NrOjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5
bGUqIG9sZFN0eWxlKQotewotICAgIFJlbmRlckJsb2NrRmxvdzo6c3R5bGVEaWRDaGFuZ2UoZGlm
Ziwgb2xkU3R5bGUpOwotICAgIGZvciAoUmVuZGVyQm94KiBjaGlsZCA9IGZpcnN0Q2hpbGRCb3go
KTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nQm94KCkpCi0gICAgICAgIGNoaWxk
LT5zZXRTdHlsZShSZW5kZXJTdHlsZTo6Y3JlYXRlQW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheSgm
c3R5bGUoKSwgQkxPQ0spKTsKLX0KLQotYm9vbCBSZW5kZXJNdWx0aUNvbHVtbkJsb2NrOjp1cGRh
dGVMb2dpY2FsV2lkdGhBbmRDb2x1bW5XaWR0aCgpCi17Ci0gICAgYm9vbCByZWxheW91dENoaWxk
cmVuID0gUmVuZGVyQmxvY2tGbG93Ojp1cGRhdGVMb2dpY2FsV2lkdGhBbmRDb2x1bW5XaWR0aCgp
OwotICAgIGlmIChtdWx0aUNvbHVtbkZsb3dUaHJlYWQoKS0+Y29tcHV0ZUNvbHVtbkNvdW50QW5k
V2lkdGgoKSkKLSAgICAgICAgcmVsYXlvdXRDaGlsZHJlbiA9IHRydWU7Ci0gICAgcmV0dXJuIHJl
bGF5b3V0Q2hpbGRyZW47Ci19Ci0KLXZvaWQgUmVuZGVyTXVsdGlDb2x1bW5CbG9jazo6Y2hlY2tG
b3JQYWdpbmF0aW9uTG9naWNhbEhlaWdodENoYW5nZShMYXlvdXRVbml0JiAvKnBhZ2VMb2dpY2Fs
SGVpZ2h0Ki8sIGJvb2wmIC8qcGFnZUxvZ2ljYWxIZWlnaHRDaGFuZ2VkKi8sIGJvb2wmIC8qaGFz
U3BlY2lmaWVkUGFnZUxvZ2ljYWxIZWlnaHQqLykKLXsKLSAgICAvLyBXZSBkb24ndCBhY3R1YWxs
eSB1cGRhdGUgYW55IG9mIHRoZSB2YXJpYWJsZXMuIFdlIGp1c3Qgc3ViY2xhc3NlZCB0byBhZGp1
c3Qgb3VyIGNvbHVtbiBoZWlnaHQuCi0gICAgdXBkYXRlTG9naWNhbEhlaWdodCgpOwotICAgIG11
bHRpQ29sdW1uRmxvd1RocmVhZCgpLT5zZXRDb2x1bW5IZWlnaHRBdmFpbGFibGUoc3RkOjptYXg8
TGF5b3V0VW5pdD4oY29udGVudExvZ2ljYWxIZWlnaHQoKSwgMCkpOwotICAgIHNldExvZ2ljYWxI
ZWlnaHQoMCk7Ci19Ci0KLWJvb2wgUmVuZGVyTXVsdGlDb2x1bW5CbG9jazo6cmVsYXlvdXRGb3JQ
YWdpbmF0aW9uKGJvb2wsIExheW91dFVuaXQsIExheW91dFN0YXRlTWFpbnRhaW5lciYgc3RhdGVQ
dXNoZXIpCi17Ci0gICAgaWYgKCFtdWx0aUNvbHVtbkZsb3dUaHJlYWQoKS0+c2hvdWxkUmVsYXlv
dXRGb3JQYWdpbmF0aW9uKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBtdWx0
aUNvbHVtbkZsb3dUaHJlYWQoKS0+c2V0TmVlZHNSZWJhbGFuY2luZyhmYWxzZSk7Ci0gICAgbXVs
dGlDb2x1bW5GbG93VGhyZWFkKCktPnNldEluQmFsYW5jaW5nUGFzcyh0cnVlKTsgLy8gUHJldmVu
dCByZS1lbnRlcmluZyB0aGlzIG1ldGhvZCAoYW5kIHJlY3Vyc2lvbiBpbnRvIGxheW91dCkuCi0K
LSAgICBib29sIG5lZWRzUmVsYXlvdXQ7Ci0gICAgYm9vbCBuZWVkZWRSZWxheW91dCA9IGZhbHNl
OwotICAgIGJvb2wgZmlyc3RQYXNzID0gdHJ1ZTsKLSAgICBkbyB7Ci0gICAgICAgIC8vIENvbHVt
biBoZWlnaHRzIG1heSBjaGFuZ2UgaGVyZSBiZWNhdXNlIG9mIGJhbGFuY2luZy4gV2UgbWF5IGhh
dmUgdG8gZG8gbXVsdGlwbGUgbGF5b3V0Ci0gICAgICAgIC8vIHBhc3NlcywgZGVwZW5kaW5nIG9u
IGhvdyB0aGUgY29udGVudHMgaXMgZml0dGVkIHRvIHRoZSBjaGFuZ2VkIGNvbHVtbiBoZWlnaHRz
LiBJbiBtb3N0Ci0gICAgICAgIC8vIGNhc2VzLCBsYXlpbmcgb3V0IGFnYWluIHR3aWNlIG9yIGV2
ZW4ganVzdCBvbmNlIHdpbGwgc3VmZmljZS4gU29tZXRpbWVzIHdlIG5lZWQgbW9yZQotICAgICAg
ICAvLyBwYXNzZXMgdGhhbiB0aGF0LCB0aG91Z2gsIGJ1dCB0aGUgbnVtYmVyIG9mIHJldHJpZXMg
c2hvdWxkIG5vdCBleGNlZWQgdGhlIG51bWJlciBvZgotICAgICAgICAvLyBjb2x1bW5zLCB1bmxl
c3Mgd2UgaGF2ZSBhIGJ1Zy4KLSAgICAgICAgbmVlZHNSZWxheW91dCA9IGZhbHNlOwotICAgICAg
ICBmb3IgKFJlbmRlckJveCogY2hpbGRCb3ggPSBmaXJzdENoaWxkQm94KCk7IGNoaWxkQm94OyBj
aGlsZEJveCA9IGNoaWxkQm94LT5uZXh0U2libGluZ0JveCgpKQotICAgICAgICAgICAgaWYgKGNo
aWxkQm94ICE9IG11bHRpQ29sdW1uRmxvd1RocmVhZCgpICYmIGNoaWxkQm94LT5pc1JlbmRlck11
bHRpQ29sdW1uU2V0KCkpIHsKLSAgICAgICAgICAgICAgICBSZW5kZXJNdWx0aUNvbHVtblNldCog
bXVsdGljb2xTZXQgPSB0b1JlbmRlck11bHRpQ29sdW1uU2V0KGNoaWxkQm94KTsKLSAgICAgICAg
ICAgICAgICBpZiAobXVsdGljb2xTZXQtPnJlY2FsY3VsYXRlQmFsYW5jZWRIZWlnaHQoZmlyc3RQ
YXNzKSkgewotICAgICAgICAgICAgICAgICAgICBtdWx0aWNvbFNldC0+c2V0Q2hpbGROZWVkc0xh
eW91dChNYXJrT25seVRoaXMpOwotICAgICAgICAgICAgICAgICAgICBuZWVkc1JlbGF5b3V0ID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG5l
ZWRzUmVsYXlvdXQpIHsKLSAgICAgICAgICAgIC8vIExheW91dCBhZ2Fpbi4gQ29sdW1uIGJhbGFu
Y2luZyByZXN1bHRlZCBpbiBhIG5ldyBoZWlnaHQuCi0gICAgICAgICAgICBuZWVkZWRSZWxheW91
dCA9IHRydWU7Ci0gICAgICAgICAgICBtdWx0aUNvbHVtbkZsb3dUaHJlYWQoKS0+c2V0Q2hpbGRO
ZWVkc0xheW91dChNYXJrT25seVRoaXMpOwotICAgICAgICAgICAgc2V0Q2hpbGROZWVkc0xheW91
dChNYXJrT25seVRoaXMpOwotICAgICAgICAgICAgaWYgKGZpcnN0UGFzcykKLSAgICAgICAgICAg
ICAgICBzdGF0ZVB1c2hlci5wb3AoKTsKLSAgICAgICAgICAgIGxheW91dEJsb2NrKGZhbHNlKTsK
LSAgICAgICAgfQotICAgICAgICBmaXJzdFBhc3MgPSBmYWxzZTsKLSAgICB9IHdoaWxlIChuZWVk
c1JlbGF5b3V0KTsKLSAgICAKLSAgICBtdWx0aUNvbHVtbkZsb3dUaHJlYWQoKS0+c2V0SW5CYWxh
bmNpbmdQYXNzKGZhbHNlKTsKLSAgICAKLSAgICByZXR1cm4gbmVlZGVkUmVsYXlvdXQ7Ci19Ci0K
LXZvaWQgUmVuZGVyTXVsdGlDb2x1bW5CbG9jazo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBuZXdD
aGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKLXsKLSAgICBtdWx0aUNvbHVtbkZsb3dU
aHJlYWQoKS0+YWRkQ2hpbGQobmV3Q2hpbGQsIGJlZm9yZUNoaWxkKTsKLX0KLSAgICAKLVJlbmRl
ck9iamVjdCogUmVuZGVyTXVsdGlDb2x1bW5CbG9jazo6bGF5b3V0U3BlY2lhbEV4Y2x1ZGVkQ2hp
bGQoYm9vbCByZWxheW91dENoaWxkcmVuKQotewotICAgIC8vIFVwZGF0ZSB0aGUgZGltZW5zaW9u
cyBvZiBvdXIgcmVnaW9ucyBiZWZvcmUgd2UgbGF5IG91dCB0aGUgZmxvdyB0aHJlYWQuCi0gICAg
Ly8gRklYTUU6IEV2ZW50dWFsbHkgdGhpcyBpcyBnb2luZyB0byBnZXQgd2F5IG1vcmUgY29tcGxp
Y2F0ZWQsIGFuZCB3ZSB3aWxsIGJlIGRlc3Ryb3lpbmcgcmVnaW9ucwotICAgIC8vIGluc3RlYWQg
b2YgdHJ5aW5nIHRvIGtlZXAgdGhlbSBhcm91bmQuCi0gICAgYm9vbCBzaG91bGRJbnZhbGlkYXRl
UmVnaW9ucyA9IGZhbHNlOwotICAgIGZvciAoUmVuZGVyQm94KiBjaGlsZEJveCA9IGZpcnN0Q2hp
bGRCb3goKTsgY2hpbGRCb3g7IGNoaWxkQm94ID0gY2hpbGRCb3gtPm5leHRTaWJsaW5nQm94KCkp
IHsKLSAgICAgICAgaWYgKGNoaWxkQm94ID09IG11bHRpQ29sdW1uRmxvd1RocmVhZCgpKQotICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKHJlbGF5b3V0Q2hpbGRyZW4gfHwgY2hp
bGRCb3gtPm5lZWRzTGF5b3V0KCkpIHsKLSAgICAgICAgICAgIGlmICghbXVsdGlDb2x1bW5GbG93
VGhyZWFkKCktPmluQmFsYW5jaW5nUGFzcygpICYmIGNoaWxkQm94LT5pc1JlbmRlck11bHRpQ29s
dW1uU2V0KCkpCi0gICAgICAgICAgICAgICAgdG9SZW5kZXJNdWx0aUNvbHVtblNldChjaGlsZEJv
eCktPnByZXBhcmVGb3JMYXlvdXQoKTsKLSAgICAgICAgICAgIHNob3VsZEludmFsaWRhdGVSZWdp
b25zID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpZiAoc2hvdWxkSW52YWxp
ZGF0ZVJlZ2lvbnMpCi0gICAgICAgIG11bHRpQ29sdW1uRmxvd1RocmVhZCgpLT5pbnZhbGlkYXRl
UmVnaW9ucygpOwotCi0gICAgaWYgKHJlbGF5b3V0Q2hpbGRyZW4pCi0gICAgICAgIG11bHRpQ29s
dW1uRmxvd1RocmVhZCgpLT5zZXRDaGlsZE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7Ci0gICAg
Ci0gICAgaWYgKG11bHRpQ29sdW1uRmxvd1RocmVhZCgpLT5yZXF1aXJlc0JhbGFuY2luZygpKSB7
Ci0gICAgICAgIC8vIEF0IHRoZSBlbmQgb2YgbXVsdGljb2wgbGF5b3V0LCByZWxheW91dEZvclBh
Z2luYXRpb24oKSBpcyBjYWxsZWQgdW5jb25kaXRpb25hbGx5LCBidXQgaWYKLSAgICAgICAgLy8g
bm8gY2hpbGRyZW4gYXJlIHRvIGJlIGxhaWQgb3V0IChlLmcuIGZpeGVkIHdpZHRoIHdpdGggbGF5
b3V0IGFscmVhZHkgYmVpbmcgdXAtdG8tZGF0ZSksCi0gICAgICAgIC8vIHdlIHdhbnQgdG8gcHJl
dmVudCBpdCBmcm9tIGRvaW5nIGFueSB3b3JrLCBzbyB0aGF0IHRoZSBjb2x1bW4gYmFsYW5jaW5n
IG1hY2hpbmVyeSBkb2Vzbid0Ci0gICAgICAgIC8vIGtpY2sgaW4gYW5kIHRyaWdnZXIgYWRkaXRp
b25hbCB1bm5lY2Vzc2FyeSBsYXlvdXQgcGFzc2VzLiBBY3R1YWxseSwgaXQncyBub3QganVzdCBh
IGdvb2QKLSAgICAgICAgLy8gaWRlYSBpbiBnZW5lcmFsIHRvIG5vdCB3YXN0ZSB0aW1lIG9uIGJh
bGFuY2luZyBjb250ZW50IHRoYXQgaGFzbid0IGJlZW4gcmUtbGFpZCBvdXQ7IHdlCi0gICAgICAg
IC8vIGFyZSBhY3R1YWxseSByZXF1aXJlZCB0byBndWFyYW50ZWUgdGhpcy4gVGhlIGNhbGN1bGF0
aW9uIG9mIGltcGxpY2l0IGJyZWFrcyBuZWVkcyB0byBiZQotICAgICAgICAvLyBwcmVjZWRlZCBi
eSBhIHByb3BlciBsYXlvdXQgcGFzcywgc2luY2UgaXQncyBsYXlvdXQgdGhhdCBzZXRzIHVwIGNv
bnRlbnQgcnVucywgYW5kIHRoZQotICAgICAgICAvLyBydW5zIGdldCBkZWxldGVkIHJpZ2h0IGFm
dGVyIGV2ZXJ5IHBhc3MuCi0gICAgICAgIG11bHRpQ29sdW1uRmxvd1RocmVhZCgpLT5zZXROZWVk
c1JlYmFsYW5jaW5nKHNob3VsZEludmFsaWRhdGVSZWdpb25zIHx8IG11bHRpQ29sdW1uRmxvd1Ro
cmVhZCgpLT5uZWVkc0xheW91dCgpKTsKLSAgICB9Ci0KLSAgICBzZXRMb2dpY2FsVG9wRm9yQ2hp
bGQoKm11bHRpQ29sdW1uRmxvd1RocmVhZCgpLCBib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCkpOwot
ICAgIG11bHRpQ29sdW1uRmxvd1RocmVhZCgpLT5sYXlvdXRJZk5lZWRlZCgpOwotICAgIGRldGVy
bWluZUxvZ2ljYWxMZWZ0UG9zaXRpb25Gb3JDaGlsZCgqbXVsdGlDb2x1bW5GbG93VGhyZWFkKCkp
OwotICAgIAotICAgIHJldHVybiBtdWx0aUNvbHVtbkZsb3dUaHJlYWQoKTsKLX0KLQotY29uc3Qg
Y2hhciogUmVuZGVyTXVsdGlDb2x1bW5CbG9jazo6cmVuZGVyTmFtZSgpIGNvbnN0Ci17Ci0gICAg
aWYgKGlzRmxvYXRpbmcoKSkKLSAgICAgICAgcmV0dXJuICJSZW5kZXJNdWx0aUNvbHVtbkJsb2Nr
IChmbG9hdGluZykiOwotICAgIGlmIChpc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkKLSAgICAgICAg
cmV0dXJuICJSZW5kZXJNdWx0aUNvbHVtbkJsb2NrIChwb3NpdGlvbmVkKSI7Ci0gICAgaWYgKGlz
QW5vbnltb3VzQmxvY2soKSkKLSAgICAgICAgcmV0dXJuICJSZW5kZXJNdWx0aUNvbHVtbkJsb2Nr
IChhbm9ueW1vdXMpIjsKLSAgICAvLyBGSVhNRTogVGVtcG9yYXJ5IGhhY2sgd2hpbGUgdGhlIG5l
dyBnZW5lcmF0ZWQgY29udGVudCBzeXN0ZW0gaXMgYmVpbmcgaW1wbGVtZW50ZWQuCi0gICAgaWYg
KGlzUHNldWRvRWxlbWVudCgpKQotICAgICAgICByZXR1cm4gIlJlbmRlck11bHRpQ29sdW1uQmxv
Y2sgKGdlbmVyYXRlZCkiOwotICAgIGlmIChpc0Fub255bW91cygpKQotICAgICAgICByZXR1cm4g
IlJlbmRlck11bHRpQ29sdW1uQmxvY2sgKGdlbmVyYXRlZCkiOwotICAgIGlmIChpc1JlbFBvc2l0
aW9uZWQoKSkKLSAgICAgICAgcmV0dXJuICJSZW5kZXJNdWx0aUNvbHVtbkJsb2NrIChyZWxhdGl2
ZSBwb3NpdGlvbmVkKSI7Ci0gICAgcmV0dXJuICJSZW5kZXJNdWx0aUNvbHVtbkJsb2NrIjsKLX0K
LQotfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uQmxv
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlD
b2x1bW5CbG9jay5oCShyZXZpc2lvbiAxNjI3MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTXVsdGlDb2x1bW5CbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcyICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLQotI2lmbmRlZiBSZW5kZXJNdWx0aUNvbHVtbkJsb2NrX2gKLSNkZWZpbmUgUmVuZGVyTXVs
dGlDb2x1bW5CbG9ja19oCi0KLSNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ7Ci0KLWNs
YXNzIFJlbmRlck11bHRpQ29sdW1uQmxvY2sgZmluYWwgOiBwdWJsaWMgUmVuZGVyQmxvY2tGbG93
IHsKLXB1YmxpYzoKLSAgICBSZW5kZXJNdWx0aUNvbHVtbkJsb2NrKEVsZW1lbnQmLCBQYXNzUmVm
PFJlbmRlclN0eWxlPik7Ci0gICAgRWxlbWVudCYgZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRv
RWxlbWVudChub2RlRm9yTm9uQW5vbnltb3VzKCkpOyB9Ci0KLSAgICBMYXlvdXRVbml0IGNvbHVt
bkhlaWdodEF2YWlsYWJsZSgpIGNvbnN0OwotCi0gICAgTGF5b3V0VW5pdCBjb2x1bW5XaWR0aCgp
IGNvbnN0OwotICAgIHVuc2lnbmVkIGNvbHVtbkNvdW50KCkgY29uc3Q7Ci0KLSAgICBib29sIHJl
cXVpcmVzQmFsYW5jaW5nKCkgY29uc3Q7Ci0gICAgCi1wcml2YXRlOgotICAgIHZpcnR1YWwgYm9v
bCBpc1JlbmRlck11bHRpQ29sdW1uQmxvY2soKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAg
dmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFJl
bmRlck9iamVjdCogbGF5b3V0U3BlY2lhbEV4Y2x1ZGVkQ2hpbGQoYm9vbCByZWxheW91dENoaWxk
cmVuKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURp
ZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKikgb3ZlcnJpZGU7Ci0gICAgCi0gICAgdmlydHVh
bCBib29sIHVwZGF0ZUxvZ2ljYWxXaWR0aEFuZENvbHVtbldpZHRoKCkgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCB2b2lkIGNoZWNrRm9yUGFnaW5hdGlvbkxvZ2ljYWxIZWlnaHRDaGFuZ2UoTGF5b3V0
VW5pdCYgcGFnZUxvZ2ljYWxIZWlnaHQsIGJvb2wmIHBhZ2VMb2dpY2FsSGVpZ2h0Q2hhbmdlZCwg
Ym9vbCYgaGFzU3BlY2lmaWVkUGFnZUxvZ2ljYWxIZWlnaHQpIG92ZXJyaWRlOwotICAgIHZpcnR1
YWwgYm9vbCByZWxheW91dEZvclBhZ2luYXRpb24oYm9vbCBoYXNTcGVjaWZpZWRQYWdlTG9naWNh
bEhlaWdodCwgTGF5b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdodCwgTGF5b3V0U3RhdGVNYWludGFp
bmVyJikgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0
KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApIG92ZXJyaWRlOwotCi0g
ICAgdm9pZCBjb21wdXRlQ29sdW1uQ291bnRBbmRXaWR0aCgpOwotCi0gICAgdm9pZCBlbnN1cmVD
b2x1bW5TZXRzKCk7Ci19OwotCi1SRU5ERVJfT0JKRUNUX1RZUEVfQ0FTVFMoUmVuZGVyTXVsdGlD
b2x1bW5CbG9jaywgaXNSZW5kZXJNdWx0aUNvbHVtbkJsb2NrKCkpCi0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIFJlbmRlck11bHRpQ29sdW1uQmxvY2tfaAotCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5G
bG93VGhyZWFkLmNwcAkocmV2aXNpb24gMTYyNzAyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDcgKzI2LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZW5kZXJNdWx0aUNv
bHVtbkZsb3dUaHJlYWQuaCIKIAotI2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uQmxvY2suaCIK
ICNpbmNsdWRlICJSZW5kZXJNdWx0aUNvbHVtblNldC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC02MCw4ICs1OSw3IEBAIHZvaWQgUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjpjb21w
dXQKIAogTGF5b3V0VW5pdCBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6OmluaXRpYWxMb2dp
Y2FsV2lkdGgoKSBjb25zdAogewotICAgIFJlbmRlck11bHRpQ29sdW1uQmxvY2sqIHBhcmVudEJs
b2NrID0gdG9SZW5kZXJNdWx0aUNvbHVtbkJsb2NrKHBhcmVudCgpKTsKLSAgICByZXR1cm4gcGFy
ZW50QmxvY2stPmNvbHVtbldpZHRoKCk7CisgICAgcmV0dXJuIGNvbHVtbldpZHRoKCk7CiB9CiAK
IGJvb2wgUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjpjb21wdXRlQ29sdW1uQ291bnRBbmRX
aWR0aCgpCkBAIC0xMjQsNyArMTIyLDcgQEAgdm9pZCBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJl
YWQ6OmF1dG9HZQogICAgIAogICAgIGludmFsaWRhdGVSZWdpb25zKCk7CiAKLSAgICBSZW5kZXJN
dWx0aUNvbHVtbkJsb2NrKiBwYXJlbnRCbG9jayA9IHRvUmVuZGVyTXVsdGlDb2x1bW5CbG9jayhw
YXJlbnQoKSk7CisgICAgUmVuZGVyQmxvY2tGbG93KiBwYXJlbnRCbG9jayA9IHRvUmVuZGVyQmxv
Y2tGbG93KHBhcmVudCgpKTsKICAgICBmaXJzdFNldCA9IG5ldyBSZW5kZXJNdWx0aUNvbHVtblNl
dCgqdGhpcywgUmVuZGVyU3R5bGU6OmNyZWF0ZUFub255bW91c1N0eWxlV2l0aERpc3BsYXkoJnBh
cmVudEJsb2NrLT5zdHlsZSgpLCBCTE9DSykpOwogICAgIGZpcnN0U2V0LT5pbml0aWFsaXplU3R5
bGUoKTsKICAgICBwYXJlbnRCbG9jay0+UmVuZGVyQmxvY2s6OmFkZENoaWxkKGZpcnN0U2V0KTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1u
U2V0LmNwcAkocmV2aXNpb24gMTYyNzAyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck11bHRpQ29sdW1uU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAog
CiAjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKLSNpbmNs
dWRlICJSZW5kZXJNdWx0aUNvbHVtbkJsb2NrLmgiCiAjaW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1
bW5GbG93VGhyZWFkLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ2LDcgKzQ1LDcgQEAg
UmVuZGVyTXVsdGlDb2x1bW5TZXQ6OlJlbmRlck11bHRpQ29sdW1uUwogCiBMYXlvdXRVbml0IFJl
bmRlck11bHRpQ29sdW1uU2V0OjpoZWlnaHRBZGp1c3RlZEZvclNldE9mZnNldChMYXlvdXRVbml0
IGhlaWdodCkgY29uc3QKIHsKLSAgICBSZW5kZXJNdWx0aUNvbHVtbkJsb2NrKiBtdWx0aWNvbEJs
b2NrID0gdG9SZW5kZXJNdWx0aUNvbHVtbkJsb2NrKHBhcmVudCgpKTsKKyAgICBSZW5kZXJCbG9j
a0Zsb3cqIG11bHRpY29sQmxvY2sgPSB0b1JlbmRlckJsb2NrRmxvdyhwYXJlbnQoKSk7CiAgICAg
TGF5b3V0VW5pdCBjb250ZW50TG9naWNhbFRvcCA9IGxvZ2ljYWxUb3AoKSAtIG11bHRpY29sQmxv
Y2stPmJvcmRlckFuZFBhZGRpbmdCZWZvcmUoKTsKIAogICAgIGhlaWdodCAtPSBjb250ZW50TG9n
aWNhbFRvcDsKQEAgLTE1Miw3ICsxNTEsNyBAQCB2b2lkIFJlbmRlck11bHRpQ29sdW1uU2V0Ojpj
bGVhckZvcmNlZEJyCiAKIHZvaWQgUmVuZGVyTXVsdGlDb2x1bW5TZXQ6OmFkZEZvcmNlZEJyZWFr
KExheW91dFVuaXQgb2Zmc2V0RnJvbUZpcnN0UGFnZSkKIHsKLSAgICBpZiAoIXRvUmVuZGVyTXVs
dGlDb2x1bW5CbG9jayhwYXJlbnQoKSktPnJlcXVpcmVzQmFsYW5jaW5nKCkpCisgICAgaWYgKCF0
b1JlbmRlckJsb2NrRmxvdyhwYXJlbnQoKSktPm11bHRpQ29sdW1uRmxvd1RocmVhZCgpLT5yZXF1
aXJlc0JhbGFuY2luZygpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCFtX2NvbnRlbnRSdW5z
LmlzRW1wdHkoKSAmJiBvZmZzZXRGcm9tRmlyc3RQYWdlIDw9IG1fY29udGVudFJ1bnMubGFzdCgp
LmJyZWFrT2Zmc2V0KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE2NCw3ICsxNjMsNyBAQCB2b2lk
IFJlbmRlck11bHRpQ29sdW1uU2V0OjphZGRGb3JjZWRCcmVhCiAKIGJvb2wgUmVuZGVyTXVsdGlD
b2x1bW5TZXQ6OnJlY2FsY3VsYXRlQmFsYW5jZWRIZWlnaHQoYm9vbCBpbml0aWFsKQogewotICAg
IEFTU0VSVCh0b1JlbmRlck11bHRpQ29sdW1uQmxvY2socGFyZW50KCkpLT5yZXF1aXJlc0JhbGFu
Y2luZygpKTsKKyAgICBBU1NFUlQodG9SZW5kZXJCbG9ja0Zsb3cocGFyZW50KCkpLT5tdWx0aUNv
bHVtbkZsb3dUaHJlYWQoKS0+cmVxdWlyZXNCYWxhbmNpbmcoKSk7CiAKICAgICBMYXlvdXRVbml0
IG9sZENvbHVtbkhlaWdodCA9IG1fY29tcHV0ZWRDb2x1bW5IZWlnaHQ7CiAgICAgaWYgKGluaXRp
YWwpCkBAIC0yMDAsOCArMTk5LDggQEAgdm9pZCBSZW5kZXJNdWx0aUNvbHVtblNldDo6cmVjb3Jk
U3BhY2VTaAogCiB2b2lkIFJlbmRlck11bHRpQ29sdW1uU2V0Ojp1cGRhdGVMb2dpY2FsV2lkdGgo
KQogewotICAgIFJlbmRlck11bHRpQ29sdW1uQmxvY2sqIHBhcmVudEJsb2NrID0gdG9SZW5kZXJN
dWx0aUNvbHVtbkJsb2NrKHBhcmVudCgpKTsKLSAgICBzZXRDb21wdXRlZENvbHVtbldpZHRoQW5k
Q291bnQocGFyZW50QmxvY2stPmNvbHVtbldpZHRoKCksIHBhcmVudEJsb2NrLT5jb2x1bW5Db3Vu
dCgpKTsgLy8gRklYTUU6IFRoaXMgd2lsbCBldmVudHVhbGx5IHZhcnkgaWYgd2UgYXJlIGNvbnRh
aW5lZCBpbnNpZGUgcmVnaW9ucy4KKyAgICBSZW5kZXJCbG9ja0Zsb3cqIHBhcmVudEJsb2NrID0g
dG9SZW5kZXJCbG9ja0Zsb3cocGFyZW50KCkpOworICAgIHNldENvbXB1dGVkQ29sdW1uV2lkdGhB
bmRDb3VudChwYXJlbnRCbG9jay0+bXVsdGlDb2x1bW5GbG93VGhyZWFkKCktPmNvbHVtbldpZHRo
KCksIHBhcmVudEJsb2NrLT5tdWx0aUNvbHVtbkZsb3dUaHJlYWQoKS0+Y29sdW1uQ291bnQoKSk7
IC8vIEZJWE1FOiBUaGlzIHdpbGwgZXZlbnR1YWxseSB2YXJ5IGlmIHdlIGFyZSBjb250YWluZWQg
aW5zaWRlIHJlZ2lvbnMuCiAgICAgCiAgICAgLy8gRklYTUU6IFdoZW4gd2UgYWRkIHJlZ2lvbnMg
c3VwcG9ydCwgd2UnbGwgc3RhcnQgaXQgb2ZmIGF0IHRoZSB3aWR0aCBvZiB0aGUgbXVsdGktY29s
dW1uCiAgICAgLy8gYmxvY2sgaW4gdGhhdCBwYXJ0aWN1bGFyIHJlZ2lvbi4KQEAgLTIyMiw3ICsy
MjEsNyBAQCB2b2lkIFJlbmRlck11bHRpQ29sdW1uU2V0Ojp1cGRhdGVMb2dpY2FsCiAKIHZvaWQg
UmVuZGVyTXVsdGlDb2x1bW5TZXQ6OnByZXBhcmVGb3JMYXlvdXQoKQogewotICAgIFJlbmRlck11
bHRpQ29sdW1uQmxvY2sqIG11bHRpY29sQmxvY2sgPSB0b1JlbmRlck11bHRpQ29sdW1uQmxvY2so
cGFyZW50KCkpOworICAgIFJlbmRlckJsb2NrRmxvdyogbXVsdGljb2xCbG9jayA9IHRvUmVuZGVy
QmxvY2tGbG93KHBhcmVudCgpKTsKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgbXVsdGljb2xTdHls
ZSA9IG11bHRpY29sQmxvY2stPnN0eWxlKCk7CiAKICAgICAvLyBTZXQgYm94IGxvZ2ljYWwgdG9w
LgpAQCAtMjQ4LDcgKzI0Nyw3IEBAIHZvaWQgUmVuZGVyTXVsdGlDb2x1bW5TZXQ6OnByZXBhcmVG
b3JMYXkKICAgICAgICAgbV9tYXhDb2x1bW5IZWlnaHQgPSBoZWlnaHRBZGp1c3RlZEZvclNldE9m
ZnNldChtX21heENvbHVtbkhlaWdodCk7CiAgICAgICAgIG1fY29tcHV0ZWRDb2x1bW5IZWlnaHQg
PSAwOyAvLyBSZXN0YXJ0IGJhbGFuY2luZy4KICAgICB9IGVsc2UKLSAgICAgICAgc2V0QW5kQ29u
c3RyYWluQ29sdW1uSGVpZ2h0KGhlaWdodEFkanVzdGVkRm9yU2V0T2Zmc2V0KG11bHRpY29sQmxv
Y2stPmNvbHVtbkhlaWdodEF2YWlsYWJsZSgpKSk7CisgICAgICAgIHNldEFuZENvbnN0cmFpbkNv
bHVtbkhlaWdodChoZWlnaHRBZGp1c3RlZEZvclNldE9mZnNldChtdWx0aWNvbEJsb2NrLT5tdWx0
aUNvbHVtbkZsb3dUaHJlYWQoKS0+Y29sdW1uSGVpZ2h0QXZhaWxhYmxlKCkpKTsKIAogICAgIGNs
ZWFyRm9yY2VkQnJlYWtzKCk7CiAKQEAgLTI2Niw3ICsyNjUsNyBAQCBMYXlvdXRVbml0IFJlbmRl
ck11bHRpQ29sdW1uU2V0Ojpjb2x1bW5HCiB7CiAgICAgLy8gRklYTUU6IEV2ZW50dWFsbHkgd2Ug
d2lsbCBjYWNoZSB0aGUgY29sdW1uIGdhcCB3aGVuIHRoZSB3aWR0aHMgb2YgY29sdW1ucyBzdGFy
dCB2YXJ5aW5nLCBidXQgZm9yIG5vdyB3ZSBqdXN0CiAgICAgLy8gZ28gdG8gdGhlIHBhcmVudCBi
bG9jayB0byBnZXQgdGhlIGdhcC4KLSAgICBSZW5kZXJNdWx0aUNvbHVtbkJsb2NrKiBwYXJlbnRC
bG9jayA9IHRvUmVuZGVyTXVsdGlDb2x1bW5CbG9jayhwYXJlbnQoKSk7CisgICAgUmVuZGVyQmxv
Y2tGbG93KiBwYXJlbnRCbG9jayA9IHRvUmVuZGVyQmxvY2tGbG93KHBhcmVudCgpKTsKICAgICBp
ZiAocGFyZW50QmxvY2stPnN0eWxlKCkuaGFzTm9ybWFsQ29sdW1uR2FwKCkpCiAgICAgICAgIHJl
dHVybiBwYXJlbnRCbG9jay0+c3R5bGUoKS5mb250RGVzY3JpcHRpb24oKS5jb21wdXRlZFBpeGVs
U2l6ZSgpOyAvLyAiMWVtIiBpcyByZWNvbW1lbmRlZCBhcyB0aGUgbm9ybWFsIGdhcCBzZXR0aW5n
LiBNYXRjaGVzIDxwPiBtYXJnaW5zLgogICAgIHJldHVybiBwYXJlbnRCbG9jay0+c3R5bGUoKS5j
b2x1bW5HYXAoKTsKQEAgLTM5Niw3ICszOTUsNyBAQCB2b2lkIFJlbmRlck11bHRpQ29sdW1uU2V0
OjpwYWludENvbHVtblJ1CiAgICAgaWYgKHBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2Fi
bGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbnN0IFJlbmRlclN0eWxlJiBibG9ja1N0
eWxlID0gdG9SZW5kZXJNdWx0aUNvbHVtbkJsb2NrKHBhcmVudCgpKS0+c3R5bGUoKTsKKyAgICBj
b25zdCBSZW5kZXJTdHlsZSYgYmxvY2tTdHlsZSA9IHBhcmVudCgpLT5zdHlsZSgpOwogICAgIGNv
bnN0IENvbG9yJiBydWxlQ29sb3IgPSBibG9ja1N0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihD
U1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGVDb2xvcik7CiAgICAgYm9vbCBydWxlVHJhbnNwYXJl
bnQgPSBibG9ja1N0eWxlLmNvbHVtblJ1bGVJc1RyYW5zcGFyZW50KCk7CiAgICAgRUJvcmRlclN0
eWxlIHJ1bGVTdHlsZSA9IGJsb2NrU3R5bGUuY29sdW1uUnVsZVN0eWxlKCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCShyZXZpc2lvbiAxNjI3MDEpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTM2OSw3ICszNjksNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0luRmxvd1JlbmRlckZsb3dUaHJl
YWQoKSBjb25zdCB7IHJldHVybiBpc1JlbmRlckZsb3dUaHJlYWQoKSAmJiAhaXNPdXRPZkZsb3dQ
b3NpdGlvbmVkKCk7IH0KICAgICBib29sIGlzT3V0T2ZGbG93UmVuZGVyRmxvd1RocmVhZCgpIGNv
bnN0IHsgcmV0dXJuIGlzUmVuZGVyRmxvd1RocmVhZCgpICYmIGlzT3V0T2ZGbG93UG9zaXRpb25l
ZCgpOyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJNdWx0aUNvbHVtbkJsb2NrKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNNdWx0aUNvbHVtbkJsb2Nr
RmxvdygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzUmVuZGVy
TXVsdGlDb2x1bW5TZXQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgdmlydHVhbCBi
b29sIGlzUmVuZGVyU2Nyb2xsYmFyUGFydCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyaW5nQWxsSW5PbmUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJpbmdBbGxJbk9uZS5jcHAJKHJl
dmlzaW9uIDE2MjcwMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJpbmdBbGxJ
bk9uZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDYgQEAKICNpbmNsdWRlICJSZW5k
ZXJNZWRpYUNvbnRyb2xzLmNwcCIKICNpbmNsdWRlICJSZW5kZXJNZW51TGlzdC5jcHAiCiAjaW5j
bHVkZSAiUmVuZGVyTWV0ZXIuY3BwIgotI2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uQmxvY2su
Y3BwIgogI2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZC5jcHAiCiAjaW5jbHVk
ZSAiUmVuZGVyTXVsdGlDb2x1bW5TZXQuY3BwIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5jcHAi
Cg==
</data>
<flag name="review"
          id="246087"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>