<?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>145455</bug_id>
          
          <creation_ts>2015-05-28 22:19:23 -0700</creation_ts>
          <short_desc>Use modern for-loops in WebCore/page.</short_desc>
          <delta_ts>2015-06-03 13:53:13 -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>WebCore Misc.</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="Hunseop Jeong">hs85.jeong</reporter>
          <assigned_to name="Hunseop Jeong">hs85.jeong</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>dstockwell</cc>
    
    <cc>jamesr</cc>
    
    <cc>luiz</cc>
    
    <cc>mkwst</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tonikitoo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1098077</commentid>
    <comment_count>0</comment_count>
    <who name="Hunseop Jeong">hs85.jeong</who>
    <bug_when>2015-05-28 22:19:23 -0700</bug_when>
    <thetext>Use modern for-loops in WebCore/page.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1098090</commentid>
    <comment_count>1</comment_count>
      <attachid>253897</attachid>
    <who name="Hunseop Jeong">hs85.jeong</who>
    <bug_when>2015-05-29 00:17:24 -0700</bug_when>
    <thetext>Created attachment 253897
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1098120</commentid>
    <comment_count>2</comment_count>
      <attachid>253897</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-05-29 09:09:47 -0700</bug_when>
    <thetext>Comment on attachment 253897
Patch

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

&gt; Source/WebCore/page/DOMWindow.cpp:263
&gt; +        if (!set.contains(&amp;window.get()))

Could use window.ptr() instead of &amp;window.get().

&gt; Source/WebCore/page/DOMWindow.cpp:302
&gt; +        if (!set.contains(&amp;window.get()))

Could use window.ptr() instead of &amp;window.get().

&gt; Source/WebCore/page/DeviceController.cpp:83
&gt; +        listener-&gt;dispatchEvent(event);

The is indented incorrectly. Need to be in four spaces.

&gt; Source/WebCore/page/DeviceController.cpp:98
&gt; +        if (listener-&gt;document()
&gt; +            &amp;&amp; !listener-&gt;document()-&gt;activeDOMObjectsAreSuspended()
&gt; +            &amp;&amp; !listener-&gt;document()-&gt;activeDOMObjectsAreStopped())

I suggest putting listener-&gt;document() into a local variable and then putting this entire if statement on one line.

    auto document = listener-&gt;document();
    if (document &amp;&amp; !document-&gt;activeDOMObjectsAreSuspended() &amp;&amp; !document-&gt;activeDOMObjectsAreStopped())

That will fix the formatting problem we currently see here.

&gt; Source/WebCore/page/DeviceController.cpp:99
&gt; +        listener-&gt;dispatchEvent(getLastEvent());

This line of code needs to be indented; it doesn’t look like it’s guarded by the if!

&gt; Source/WebCore/page/EventHandler.cpp:3869
&gt; +    for (const auto&amp; point : points) {

No need for const here.

&gt; Source/WebCore/page/EventHandler.cpp:3876
&gt; +    for (const auto&amp; point : points) {

No need for const here.

&gt; Source/WebCore/page/Frame.cpp:299
&gt; +        if (Document* doc = frame-&gt;document())

Should rename this document instead of doc.

&gt; Source/WebCore/page/Page.cpp:407
&gt; +    for (auto map : viewModeMap) {
&gt; +        if (text == map.name)
&gt; +            return map.type;
&gt;      }

Needs to be auto&amp;, not auto. Individual view modes are not maps, they are modes, so the local variable should be named &quot;mode&quot;, not &quot;map&quot;.

&gt; Source/WebCore/page/PerformanceUserTiming.cpp:168
&gt; +    for (const auto&amp; entry : performanceEntryMap.values())

No need for const here.

&gt; Source/WebCore/page/WindowFeatures.cpp:243
&gt; +    for (const auto&amp; featureString : vector) {

No need for const here.

&gt; Source/WebCore/page/animation/AnimationController.cpp:195
&gt; +        Element* element = event.element.get();

Should be:

    auto&amp; element = *event.element;

Then use &quot;element.&quot; below instead of &quot;element-&gt;&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1098319</commentid>
    <comment_count>3</comment_count>
      <attachid>253951</attachid>
    <who name="Hunseop Jeong">hs85.jeong</who>
    <bug_when>2015-05-29 23:49:10 -0700</bug_when>
    <thetext>Created attachment 253951
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1098320</commentid>
    <comment_count>4</comment_count>
    <who name="Hunseop Jeong">hs85.jeong</who>
    <bug_when>2015-05-29 23:50:01 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 253897 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=253897&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/page/DOMWindow.cpp:263
&gt; &gt; +        if (!set.contains(&amp;window.get()))
&gt; 
&gt; Could use window.ptr() instead of &amp;window.get().
&gt; 
&gt; &gt; Source/WebCore/page/DOMWindow.cpp:302
&gt; &gt; +        if (!set.contains(&amp;window.get()))
&gt; 
&gt; Could use window.ptr() instead of &amp;window.get().
&gt; 
&gt; &gt; Source/WebCore/page/DeviceController.cpp:83
&gt; &gt; +        listener-&gt;dispatchEvent(event);
&gt; 
&gt; The is indented incorrectly. Need to be in four spaces.
&gt; 
&gt; &gt; Source/WebCore/page/DeviceController.cpp:98
&gt; &gt; +        if (listener-&gt;document()
&gt; &gt; +            &amp;&amp; !listener-&gt;document()-&gt;activeDOMObjectsAreSuspended()
&gt; &gt; +            &amp;&amp; !listener-&gt;document()-&gt;activeDOMObjectsAreStopped())
&gt; 
&gt; I suggest putting listener-&gt;document() into a local variable and then
&gt; putting this entire if statement on one line.
&gt; 
&gt;     auto document = listener-&gt;document();
&gt;     if (document &amp;&amp; !document-&gt;activeDOMObjectsAreSuspended() &amp;&amp;
&gt; !document-&gt;activeDOMObjectsAreStopped())
&gt; 
&gt; That will fix the formatting problem we currently see here.
&gt; 
&gt; &gt; Source/WebCore/page/DeviceController.cpp:99
&gt; &gt; +        listener-&gt;dispatchEvent(getLastEvent());
&gt; 
&gt; This line of code needs to be indented; it doesn’t look like it’s guarded by
&gt; the if!
&gt; 
&gt; &gt; Source/WebCore/page/EventHandler.cpp:3869
&gt; &gt; +    for (const auto&amp; point : points) {
&gt; 
&gt; No need for const here.
&gt; 
&gt; &gt; Source/WebCore/page/EventHandler.cpp:3876
&gt; &gt; +    for (const auto&amp; point : points) {
&gt; 
&gt; No need for const here.
&gt; 
&gt; &gt; Source/WebCore/page/Frame.cpp:299
&gt; &gt; +        if (Document* doc = frame-&gt;document())
&gt; 
&gt; Should rename this document instead of doc.
&gt; 
&gt; &gt; Source/WebCore/page/Page.cpp:407
&gt; &gt; +    for (auto map : viewModeMap) {
&gt; &gt; +        if (text == map.name)
&gt; &gt; +            return map.type;
&gt; &gt;      }
&gt; 
&gt; Needs to be auto&amp;, not auto. Individual view modes are not maps, they are
&gt; modes, so the local variable should be named &quot;mode&quot;, not &quot;map&quot;.
&gt; 
&gt; &gt; Source/WebCore/page/PerformanceUserTiming.cpp:168
&gt; &gt; +    for (const auto&amp; entry : performanceEntryMap.values())
&gt; 
&gt; No need for const here.
&gt; 
&gt; &gt; Source/WebCore/page/WindowFeatures.cpp:243
&gt; &gt; +    for (const auto&amp; featureString : vector) {
&gt; 
&gt; No need for const here.
&gt; 
&gt; &gt; Source/WebCore/page/animation/AnimationController.cpp:195
&gt; &gt; +        Element* element = event.element.get();
&gt; 
&gt; Should be:
&gt; 
&gt;     auto&amp; element = *event.element;
&gt; 
&gt; Then use &quot;element.&quot; below instead of &quot;element-&gt;&quot;.

All done. Thanks to your review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099008</commentid>
    <comment_count>5</comment_count>
    <who name="Hunseop Jeong">hs85.jeong</who>
    <bug_when>2015-06-02 18:32:18 -0700</bug_when>
    <thetext>@Darin,
Could you give me the cq+?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099258</commentid>
    <comment_count>6</comment_count>
      <attachid>253951</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-06-03 13:53:08 -0700</bug_when>
    <thetext>Comment on attachment 253951
Patch

Clearing flags on attachment: 253951

Committed r185167: &lt;http://trac.webkit.org/changeset/185167&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099259</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-06-03 13:53:13 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>253897</attachid>
            <date>2015-05-29 00:17:24 -0700</date>
            <delta_ts>2015-05-29 23:48:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-145455-20150529161708.patch</filename>
            <type>text/plain</type>
            <size>56011</size>
            <attacher name="Hunseop Jeong">hs85.jeong</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg0OTU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2VkNGM5Mjk1ZTk5NTA2
ZDZlNzcxOTBkODNkMDFjZTExYzIwYzczOC4uNjNkNmRlNDhjODYzMjFlYWZhMGIxZjU0Y2IwODZk
OTU1YTliNjEyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk4IEBACisyMDE1LTA1LTI4ICBIdW5z
ZW9wIEplb25nICA8aHM4NS5qZW9uZ0BzYW1zdW5nLmNvbT4KKworICAgICAgICBVc2UgbW9kZXJu
IGZvci1sb29wcyBpbiBXZWJDb3JlL3BhZ2UuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDU0NTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGJlaGF2aW9yIGNoYW5nZXMuCisK
KyAgICAgICAgKiBwYWdlL0Nocm9tZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWU6Om5v
dGlmeVBvcHVwT3BlbmluZ09ic2VydmVycyk6CisgICAgICAgICogcGFnZS9Db250ZW50U2VjdXJp
dHlQb2xpY3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NQU291cmNlTGlzdDo6bWF0Y2hlcyk6
CisgICAgICAgIChXZWJDb3JlOjpDU1BEaXJlY3RpdmVMaXN0OjpnYXRoZXJSZXBvcnRVUklzKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeTo6Y29weVN0YXRlRnJvbSk6
CisgICAgICAgIChXZWJDb3JlOjppc0FsbG93ZWRCeUFsbCk6CisgICAgICAgIChXZWJDb3JlOjpp
c0FsbG93ZWRCeUFsbFdpdGhTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjppc0FsbG93ZWRCeUFs
bFdpdGhDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OmlzQWxsb3dlZEJ5QWxsV2l0aFVSTCk6
CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3k6OmV2YWxEaXNhYmxlZEVy
cm9yTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3k6OmFs
bG93UGx1Z2luVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3k6
OnJlZmxlY3RlZFhTU0Rpc3Bvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1
cml0eVBvbGljeTo6Z2F0aGVyUmVwb3J0VVJJcyk6CisgICAgICAgICogcGFnZS9Db250ZXh0TWVu
dUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVy
Ojpwb3B1bGF0ZSk6CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RE9NV2luZG93OjpkaXNwYXRjaEFsbFBlbmRpbmdCZWZvcmVVbmxvYWRFdmVudHMpOgor
ICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpkaXNwYXRjaEFsbFBlbmRpbmdVbmxvYWRFdmVu
dHMpOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93Ojp3aWxsRGVzdHJveUNhY2hlZEZyYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6d2lsbERlc3Ryb3lEb2N1bWVudEluRnJh
bWUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93Ojp3aWxsRGV0YWNoRG9jdW1lbnRGcm9t
RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpkaXNjb25uZWN0RE9NV2luZG93
UHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OnJlY29ubmVjdERPTVdp
bmRvd1Byb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpnZXRNYXRjaGVk
Q1NTUnVsZXMpOgorICAgICAgICAqIHBhZ2UvRGV2aWNlQ29udHJvbGxlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpEZXZpY2VDb250cm9sbGVyOjpkaXNwYXRjaERldmljZUV2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRldmljZUNvbnRyb2xsZXI6OmZpcmVEZXZpY2VFdmVudCk6CisgICAgICAg
ICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVy
Ojp1cGRhdGVNb3VzZUV2ZW50VGFyZ2V0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhh
bmRsZXI6OmhhbmRsZVRvdWNoRXZlbnQpOgorICAgICAgICAqIHBhZ2UvRm9jdXNDb250cm9sbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJvbGxlcjo6c2V0SXNWaXNpYmxlQW5k
QWN0aXZlSW50ZXJuYWwpOgorICAgICAgICAqIHBhZ2UvRnJhbWUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWU6Om9yaWVudGF0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZTo6aW5qZWN0VXNlclNjcmlwdHNGb3JXb3JsZCk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpzY3JvbGxDb250ZW50c0Zhc3RQYXRo
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2VydmljZVNjcmlwdGVkQW5pbWF0aW9u
cyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnRyYWNrZWRSZXBhaW50UmVjdHNBc1Rl
eHQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojp1cGRhdGVXaWRnZXRQb3NpdGlvbnMp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojpub3RpZnlXaWRnZXRzKToKKyAgICAgICAg
KiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bmV0d29ya1N0YXRlQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpzdHJpbmdUb1ZpZXdNb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OlBhZ2U6OnVwZGF0ZVN0eWxlRm9yQWxsUGFnZXNBZnRlckdsb2JhbENoYW5nZUluRW52
aXJvbm1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6cmVmcmVzaFBsdWdpbnMpOgorICAg
ICAgICAoV2ViQ29yZTo6UGFnZTo6bG9ja0FsbE92ZXJsYXlTY3JvbGxiYXJzVG9IaWRkZW4pOgor
ICAgICAgICAoV2ViQ29yZTo6UGFnZTo6cGx1Z2luVmlld3MpOgorICAgICAgICAoV2ViQ29yZTo6
UGFnZTo6c3RvcmFnZUJsb2NraW5nU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlBh
Z2U6OnNldElzVmlzaWJsZUludGVybmFsKToKKyAgICAgICAgKiBwYWdlL1BhZ2VHcm91cC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6OmNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQp
OgorICAgICAgICAqIHBhZ2UvUGFnZUdyb3VwTG9hZERlZmVycmVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlBhZ2VHcm91cExvYWREZWZlcnJlcjo6UGFnZUdyb3VwTG9hZERlZmVycmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBhZ2VHcm91cExvYWREZWZlcnJlcjo6flBhZ2VHcm91cExvYWREZWZl
cnJlcik6CisgICAgICAgICogcGFnZS9QYWdlU2VyaWFsaXplci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplRnJhbWUpOgorICAgICAgICAqIHBhZ2UvUGVy
Zm9ybWFuY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGVyZm9ybWFuY2U6OndlYmtpdEdldEVu
dHJpZXNCeVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UGVyZm9ybWFuY2U6OndlYmtpdEdldEVu
dHJpZXNCeU5hbWUpOgorICAgICAgICAqIHBhZ2UvUGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpwYXNzZXNUaW1pbmdBbGxvd0NoZWNrKToKKyAgICAgICAg
KiBwYWdlL1BlcmZvcm1hbmNlVXNlclRpbWluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb252
ZXJ0VG9FbnRyeVNlcXVlbmNlKToKKyAgICAgICAgKiBwYWdlL1NlY3VyaXR5UG9saWN5LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNlY3VyaXR5UG9saWN5Ojppc0FjY2Vzc1doaXRlTGlzdGVkKToK
KyAgICAgICAgKiBwYWdlL1VzZXJDb250ZW50VVJMUGF0dGVybi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpVc2VyQ29udGVudFVSTFBhdHRlcm46Om1hdGNoZXNQYXR0ZXJucyk6CisgICAgICAgICog
cGFnZS9XaW5kb3dGZWF0dXJlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXaW5kb3dGZWF0dXJl
czo6cGFyc2VEaWFsb2dGZWF0dXJlcyk6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vQW5pbWF0
aW9uQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25Db250cm9sbGVy
UHJpdmF0ZTo6dXBkYXRlQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25D
b250cm9sbGVyUHJpdmF0ZTo6ZmlyZUV2ZW50c0FuZFVwZGF0ZVN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpzdXNwZW5kQW5pbWF0aW9uc0ZvckRv
Y3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpy
ZXN1bWVBbmltYXRpb25zRm9yRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9u
Q29udHJvbGxlclByaXZhdGU6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyk6CisgICAgICAgICog
cGFnZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2hvcnRoYW5kUHJvcGVydHlXcmFwcGVyOjplcXVhbHMpOgorICAgICAgICAoV2ViQ29yZTo6
U2hvcnRoYW5kUHJvcGVydHlXcmFwcGVyOjpibGVuZCk6CisgICAgICAgICogcGFnZS9zY3JvbGxp
bmcvQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRT
dGF0ZVNjcm9sbGluZ05vZGVTbmFwT2Zmc2V0c0FzRmxvYXQpOgorICAgICAgICAqIHBhZ2Uvc2Ny
b2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGluZ0Nvb3JkaW5hdG9yOjphYnNvbHV0ZU5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uRm9yRnJhbWUp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6Omhhc1Zpc2libGVTbG93
UmVwYWludFZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzKToKKwogMjAxNS0wNS0yOCAgWGFiaWVy
IFJvZHJpZ3VleiBDYWx2YXIgIDxjYWx2YXJpc0BpZ2FsaWEuY29tPiBhbmQgWW91ZW5uIEZhYmxl
dCA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CiAKICAgICAgICAgW1N0cmVhbXMgQVBJXSBS
ZWFkYWJsZVN0cmVhbVJlYWRlciBzaG91bGQgbm90IGJlIGV4cG9zZWQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21l
LmNwcAppbmRleCBiZTI4NWZkMWZlYjY5NDcyZTlmNzI1ODIzZjI0MzVjNGU1OWNlOTYxLi41YjU4
OTYxNTMyYzQ5YjlmYWZkMTUzMGM0ZjRkNTNiMzc0MDBhNDk0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUu
Y3BwCkBAIC02MzUsOCArNjM1LDggQEAgdm9pZCBDaHJvbWU6OnVucmVnaXN0ZXJQb3B1cE9wZW5p
bmdPYnNlcnZlcihQb3B1cE9wZW5pbmdPYnNlcnZlciogb2JzZXJ2ZXIpCiB2b2lkIENocm9tZTo6
bm90aWZ5UG9wdXBPcGVuaW5nT2JzZXJ2ZXJzKCkgY29uc3QKIHsKICAgICBjb25zdCBWZWN0b3I8
UG9wdXBPcGVuaW5nT2JzZXJ2ZXIqPiBvYnNlcnZlcnMobV9wb3B1cE9wZW5pbmdPYnNlcnZlcnMp
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JzZXJ2ZXJzLnNpemUoKTsgKytpKQotICAg
ICAgICBvYnNlcnZlcnNbaV0tPndpbGxPcGVuUG9wdXAoKTsKKyAgICBmb3IgKGF1dG8mIG9ic2Vy
dmVyIDogb2JzZXJ2ZXJzKQorICAgICAgICBvYnNlcnZlci0+d2lsbE9wZW5Qb3B1cCgpOwogfQog
CiB2b2lkIENocm9tZTo6ZGlkQmVnaW5UcmFja2luZ1BvdGVudGlhbExvbmdNb3VzZVByZXNzKGNv
bnN0IEludFBvaW50JiBtb3VzZURvd25Qb3NpdGlvbiwgY29uc3QgSGl0VGVzdFJlc3VsdCYgaGl0
VGVzdFJlc3VsdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGVudFNlY3Vy
aXR5UG9saWN5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGVudFNlY3VyaXR5UG9saWN5
LmNwcAppbmRleCBkYzkwNzJhYjkxZWQwOTk4ODQ0MWIwOTI2MmZmMDhiOGY3ZGJlZWIxLi5mMWVk
OWFkY2ZlOTlkOTA1MWZiMmRkMDRjZGVkYjM0NDQ5MGQ3MjhkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwCkBAIC0zNDMsOCArMzQzLDggQEAgYm9v
bCBDU1BTb3VyY2VMaXN0OjptYXRjaGVzKGNvbnN0IFVSTCYgdXJsKQogCiAgICAgVVJMIGVmZmVj
dGl2ZVVSTCA9IFNlY3VyaXR5T3JpZ2luOjpzaG91bGRVc2VJbm5lclVSTCh1cmwpID8gU2VjdXJp
dHlPcmlnaW46OmV4dHJhY3RJbm5lclVSTCh1cmwpIDogdXJsOwogCi0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2xpc3Quc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fbGlzdFtpXS5t
YXRjaGVzKGVmZmVjdGl2ZVVSTCkpCisgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fbGlzdCkgewor
ICAgICAgICBpZiAoZW50cnkubWF0Y2hlcyhlZmZlY3RpdmVVUkwpKQogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogCkBAIC0xMTAwLDggKzExMDAsOCBAQCBib29sIENTUERpcmVjdGl2
ZUxpc3Q6OmFsbG93Q29ubmVjdFRvU291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb250ZW50U2VjdXJp
dHlQb2xpYwogCiB2b2lkIENTUERpcmVjdGl2ZUxpc3Q6OmdhdGhlclJlcG9ydFVSSXMoRE9NU3Ry
aW5nTGlzdCYgbGlzdCkgY29uc3QKIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcmVw
b3J0VVJJcy5zaXplKCk7ICsraSkKLSAgICAgICAgbGlzdC5hcHBlbmQobV9yZXBvcnRVUklzW2ld
LnN0cmluZygpKTsKKyAgICBmb3IgKGF1dG8mIHVyaSA6IG1fcmVwb3J0VVJJcykKKyAgICAgICAg
bGlzdC5hcHBlbmQodXJpLnN0cmluZygpKTsKIH0KIAogYm9vbCBDU1BEaXJlY3RpdmVMaXN0Ojph
bGxvd0Zvcm1BY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVw
b3J0aW5nU3RhdHVzIHJlcG9ydGluZ1N0YXR1cykgY29uc3QKQEAgLTEzNTIsOCArMTM1Miw4IEBA
IENvbnRlbnRTZWN1cml0eVBvbGljeTo6fkNvbnRlbnRTZWN1cml0eVBvbGljeSgpCiB2b2lkIENv
bnRlbnRTZWN1cml0eVBvbGljeTo6Y29weVN0YXRlRnJvbShjb25zdCBDb250ZW50U2VjdXJpdHlQ
b2xpY3kqIG90aGVyKSAKIHsKICAgICBBU1NFUlQobV9wb2xpY2llcy5pc0VtcHR5KCkpOwotICAg
IGZvciAoQ1NQRGlyZWN0aXZlTGlzdFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG90aGVy
LT5tX3BvbGljaWVzLmJlZ2luKCk7IGl0ZXIgIT0gb3RoZXItPm1fcG9saWNpZXMuZW5kKCk7ICsr
aXRlcikKLSAgICAgICAgZGlkUmVjZWl2ZUhlYWRlcigoKml0ZXIpLT5oZWFkZXIoKSwgKCppdGVy
KS0+aGVhZGVyVHlwZSgpKTsKKyAgICBmb3IgKGF1dG8mIHBvbGljeSA6IG90aGVyLT5tX3BvbGlj
aWVzKQorICAgICAgICBkaWRSZWNlaXZlSGVhZGVyKHBvbGljeS0+aGVhZGVyKCksIHBvbGljeS0+
aGVhZGVyVHlwZSgpKTsKIH0KIAogdm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmRpZFJlY2Vp
dmVIZWFkZXIoY29uc3QgU3RyaW5nJiBoZWFkZXIsIEhlYWRlclR5cGUgdHlwZSkKQEAgLTE0MDEs
OCArMTQwMSw4IEBAIENvbnRlbnRTZWN1cml0eVBvbGljeTo6SGVhZGVyVHlwZSBDb250ZW50U2Vj
dXJpdHlQb2xpY3k6OmRlcHJlY2F0ZWRIZWFkZXJUeXBlKCkKIHRlbXBsYXRlPGJvb2wgKENTUERp
cmVjdGl2ZUxpc3Q6OiphbGxvd2VkKShDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0
YXR1cykgY29uc3Q+CiBib29sIGlzQWxsb3dlZEJ5QWxsKGNvbnN0IENTUERpcmVjdGl2ZUxpc3RW
ZWN0b3ImIHBvbGljaWVzLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1cyBy
ZXBvcnRpbmdTdGF0dXMpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwb2xpY2llcy5z
aXplKCk7ICsraSkgewotICAgICAgICBpZiAoIShwb2xpY2llc1tpXS5nZXQoKS0+KmFsbG93ZWQp
KHJlcG9ydGluZ1N0YXR1cykpCisgICAgZm9yIChhdXRvJiBwb2xpY3kgOiBwb2xpY2llcykgewor
ICAgICAgICBpZiAoIShwb2xpY3kuZ2V0KCktPiphbGxvd2VkKShyZXBvcnRpbmdTdGF0dXMpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE0
MTEsOCArMTQxMSw4IEBAIGJvb2wgaXNBbGxvd2VkQnlBbGwoY29uc3QgQ1NQRGlyZWN0aXZlTGlz
dFZlY3RvciYgcG9saWNpZXMsIENvbnRlbnRTZWN1cml0eVBvbGljCiB0ZW1wbGF0ZTxib29sIChD
U1BEaXJlY3RpdmVMaXN0OjoqYWxsb3dlZCkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBDb250ZW50
U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1cykgY29uc3Q+CiBib29sIGlzQWxsb3dlZEJ5
QWxsV2l0aFN0YXRlKGNvbnN0IENTUERpcmVjdGl2ZUxpc3RWZWN0b3ImIHBvbGljaWVzLCBKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVz
IHJlcG9ydGluZ1N0YXR1cykKIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBvbGljaWVz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICghKHBvbGljaWVzW2ldLmdldCgpLT4qYWxsb3dl
ZCkoc3RhdGUsIHJlcG9ydGluZ1N0YXR1cykpCisgICAgZm9yIChhdXRvJiBwb2xpY3kgOiBwb2xp
Y2llcykgeworICAgICAgICBpZiAoIShwb2xpY3kuZ2V0KCktPiphbGxvd2VkKShzdGF0ZSwgcmVw
b3J0aW5nU3RhdHVzKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0
dXJuIHRydWU7CkBAIC0xNDIxLDggKzE0MjEsOCBAQCBib29sIGlzQWxsb3dlZEJ5QWxsV2l0aFN0
YXRlKGNvbnN0IENTUERpcmVjdGl2ZUxpc3RWZWN0b3ImIHBvbGljaWVzLCBKU0M6OkV4ZWNTdAog
dGVtcGxhdGU8Ym9vbCAoQ1NQRGlyZWN0aXZlTGlzdDo6KmFsbG93ZWQpKGNvbnN0IFN0cmluZyYs
IGNvbnN0IFdURjo6T3JkaW5hbE51bWJlciYsIENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVwb3J0
aW5nU3RhdHVzKSBjb25zdD4KIGJvb2wgaXNBbGxvd2VkQnlBbGxXaXRoQ29udGV4dChjb25zdCBD
U1BEaXJlY3RpdmVMaXN0VmVjdG9yJiBwb2xpY2llcywgY29uc3QgU3RyaW5nJiBjb250ZXh0VVJM
LCBjb25zdCBXVEY6Ok9yZGluYWxOdW1iZXImIGNvbnRleHRMaW5lLCBDb250ZW50U2VjdXJpdHlQ
b2xpY3k6OlJlcG9ydGluZ1N0YXR1cyByZXBvcnRpbmdTdGF0dXMpCiB7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBwb2xpY2llcy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoIShwb2xp
Y2llc1tpXS5nZXQoKS0+KmFsbG93ZWQpKGNvbnRleHRVUkwsIGNvbnRleHRMaW5lLCByZXBvcnRp
bmdTdGF0dXMpKQorICAgIGZvciAoYXV0byYgcG9saWN5IDogcG9saWNpZXMpIHsKKyAgICAgICAg
aWYgKCEocG9saWN5LmdldCgpLT4qYWxsb3dlZCkoY29udGV4dFVSTCwgY29udGV4dExpbmUsIHJl
cG9ydGluZ1N0YXR1cykpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJl
dHVybiB0cnVlOwpAQCAtMTQzNCw4ICsxNDM0LDggQEAgYm9vbCBpc0FsbG93ZWRCeUFsbFdpdGhV
UkwoY29uc3QgQ1NQRGlyZWN0aXZlTGlzdFZlY3RvciYgcG9saWNpZXMsIGNvbnN0IFVSTCYgdXIK
ICAgICBpZiAoU2NoZW1lUmVnaXN0cnk6OnNjaGVtZVNob3VsZEJ5cGFzc0NvbnRlbnRTZWN1cml0
eVBvbGljeSh1cmwucHJvdG9jb2woKSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBwb2xpY2llcy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAo
IShwb2xpY2llc1tpXS5nZXQoKS0+KmFsbG93RnJvbVVSTCkodXJsLCByZXBvcnRpbmdTdGF0dXMp
KQorICAgIGZvciAoYXV0byYgcG9saWN5IDogcG9saWNpZXMpIHsKKyAgICAgICAgaWYgKCEocG9s
aWN5LmdldCgpLT4qYWxsb3dGcm9tVVJMKSh1cmwsIHJlcG9ydGluZ1N0YXR1cykpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwpAQCAtMTQ3MCwxNyAr
MTQ3MCwxNyBAQCBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeTo6YWxsb3dFdmFsKEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgQ29udGVudFNlY3VyaXR5UG9saQogCiBTdHJpbmcgQ29udGVudFNlY3Vy
aXR5UG9saWN5OjpldmFsRGlzYWJsZWRFcnJvck1lc3NhZ2UoKSBjb25zdAogewotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9wb2xpY2llcy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAo
IW1fcG9saWNpZXNbaV0tPmFsbG93RXZhbCgwLCBTdXBwcmVzc1JlcG9ydCkpCi0gICAgICAgICAg
ICByZXR1cm4gbV9wb2xpY2llc1tpXS0+ZXZhbERpc2FibGVkRXJyb3JNZXNzYWdlKCk7CisgICAg
Zm9yIChhdXRvJiBwb2xpY3kgOiBtX3BvbGljaWVzKSB7CisgICAgICAgIGlmICghcG9saWN5LT5h
bGxvd0V2YWwoMCwgU3VwcHJlc3NSZXBvcnQpKQorICAgICAgICAgICAgcmV0dXJuIHBvbGljeS0+
ZXZhbERpc2FibGVkRXJyb3JNZXNzYWdlKCk7CiAgICAgfQogICAgIHJldHVybiBTdHJpbmcoKTsK
IH0KIAogYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmFsbG93UGx1Z2luVHlwZShjb25zdCBT
dHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgdHlwZUF0dHJpYnV0ZSwgY29uc3QgVVJMJiB1cmws
IENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVzIHJlcG9ydGluZ1N0YXR1cykg
Y29uc3QKIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcG9saWNpZXMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgaWYgKCFtX3BvbGljaWVzW2ldLT5hbGxvd1BsdWdpblR5cGUodHlwZSwg
dHlwZUF0dHJpYnV0ZSwgdXJsLCByZXBvcnRpbmdTdGF0dXMpKQorICAgIGZvciAoYXV0byYgcG9s
aWN5IDogbV9wb2xpY2llcykgeworICAgICAgICBpZiAoIXBvbGljeS0+YWxsb3dQbHVnaW5UeXBl
KHR5cGUsIHR5cGVBdHRyaWJ1dGUsIHVybCwgcmVwb3J0aW5nU3RhdHVzKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CkBAIC0xNTQ0LDE3ICsxNTQ0
LDE3IEBAIGJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5Ojppc0FjdGl2ZSgpIGNvbnN0CiBDb250
ZW50U2VjdXJpdHlQb2xpY3k6OlJlZmxlY3RlZFhTU0Rpc3Bvc2l0aW9uIENvbnRlbnRTZWN1cml0
eVBvbGljeTo6cmVmbGVjdGVkWFNTRGlzcG9zaXRpb24oKSBjb25zdAogewogICAgIFJlZmxlY3Rl
ZFhTU0Rpc3Bvc2l0aW9uIGRpc3Bvc2l0aW9uID0gUmVmbGVjdGVkWFNTVW5zZXQ7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX3BvbGljaWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlm
IChtX3BvbGljaWVzW2ldLT5yZWZsZWN0ZWRYU1NEaXNwb3NpdGlvbigpID4gZGlzcG9zaXRpb24p
Ci0gICAgICAgICAgICBkaXNwb3NpdGlvbiA9IHN0ZDo6bWF4KGRpc3Bvc2l0aW9uLCBtX3BvbGlj
aWVzW2ldLT5yZWZsZWN0ZWRYU1NEaXNwb3NpdGlvbigpKTsKKyAgICBmb3IgKGF1dG8mIHBvbGlj
eSA6IG1fcG9saWNpZXMpIHsKKyAgICAgICAgaWYgKHBvbGljeS0+cmVmbGVjdGVkWFNTRGlzcG9z
aXRpb24oKSA+IGRpc3Bvc2l0aW9uKQorICAgICAgICAgICAgZGlzcG9zaXRpb24gPSBzdGQ6Om1h
eChkaXNwb3NpdGlvbiwgcG9saWN5LT5yZWZsZWN0ZWRYU1NEaXNwb3NpdGlvbigpKTsKICAgICB9
CiAgICAgcmV0dXJuIGRpc3Bvc2l0aW9uOwogfQogCiB2b2lkIENvbnRlbnRTZWN1cml0eVBvbGlj
eTo6Z2F0aGVyUmVwb3J0VVJJcyhET01TdHJpbmdMaXN0JiBsaXN0KSBjb25zdAogewotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wb2xpY2llcy5zaXplKCk7ICsraSkKLSAgICAgICAgbV9w
b2xpY2llc1tpXS0+Z2F0aGVyUmVwb3J0VVJJcyhsaXN0KTsKKyAgICBmb3IgKGF1dG8mIHBvbGlj
eSA6IG1fcG9saWNpZXMpCisgICAgICAgIHBvbGljeS0+Z2F0aGVyUmVwb3J0VVJJcyhsaXN0KTsK
IH0KIAogU2VjdXJpdHlPcmlnaW4qIENvbnRlbnRTZWN1cml0eVBvbGljeTo6c2VjdXJpdHlPcmln
aW4oKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNv
bnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIu
Y3BwCmluZGV4IDM4OTJkNjRjMjZmNDE0NTJmODM1ODk3ZmM5YmZjMGZmOTk0NjE4NjguLjI5ZGMw
NjQ4ZjI2OWEzNzA1M2VjZTk0Y2YwMGM5MGE1NTlkMmQ0OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAKQEAgLTk1OSw4ICs5NTksNyBAQCB2b2lk
IENvbnRleHRNZW51Q29udHJvbGxlcjo6cG9wdWxhdGUoKQogICAgICAgICAgICAgICAgIGJvb2wg
YmFkR3JhbW1hcjsKICAgICAgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzID0gZnJh
bWUtPmVkaXRvcigpLmd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsKG1pc3NwZWxs
aW5nLCBiYWRHcmFtbWFyKTsKICAgICAgICAgICAgICAgICBpZiAobWlzc3BlbGxpbmcgfHwgYmFk
R3JhbW1hcikgewotICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IGd1ZXNzZXMuc2l6
ZSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXNpemUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGd1ZXNzZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJ
ZiB0aGVyZSdzIGJhZCBncmFtbWFyIGJ1dCBubyBzdWdnZXN0aW9ucyAoZS5nLiwgcmVwZWF0ZWQg
d29yZCksIGp1c3QgbGVhdmUgb2ZmIHRoZSBzdWdnZXN0aW9ucwogICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gbGlzdCBhbmQgdHJhaWxpbmcgc2VwYXJhdG9yIHJhdGhlciB0aGFuIGFkZGluZyBh
ICJObyBHdWVzc2VzIEZvdW5kIiBpdGVtIChtYXRjaGVzIEFwcEtpdCkKICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChtaXNzcGVsbGluZykgewpAQCAtOTY4LDggKzk2Nyw3IEBAIHZvaWQgQ29u
dGV4dE1lbnVDb250cm9sbGVyOjpwb3B1bGF0ZSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpLCBtX2NvbnRleHRNZW51LmdldCgpKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyBpKysp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcgJmd1ZXNzID0gZ3Vl
c3Nlc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgZ3Vlc3Mg
OiBndWVzc2VzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFndWVzcy5pc0Vt
cHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVt
IGl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdHdWVzcywgZ3Vlc3Mp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKGl0ZW0sIG1fY29u
dGV4dE1lbnUuZ2V0KCkpOwpAQCAtMTAwMiw4ICsxMDAwLDggQEAgdm9pZCBDb250ZXh0TWVudUNv
bnRyb2xsZXI6OnBvcHVsYXRlKCkKICAgICAgICAgICAgICAgICAvLyBTcGVsbGluZyBhbmQgZ3Jh
bW1hciBjaGVja2luZyBpcyBtdXR1YWxseSBleGNsdXNpdmUgd2l0aCBkaWN0YXRpb24gYWx0ZXJu
YXRpdmVzLgogICAgICAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGRpY3RhdGlvbkFsdGVybmF0
aXZlcyA9IG1fY29udGV4dC5oaXRUZXN0UmVzdWx0KCkuZGljdGF0aW9uQWx0ZXJuYXRpdmVzKCk7
CiAgICAgICAgICAgICAgICAgaWYgKCFkaWN0YXRpb25BbHRlcm5hdGl2ZXMuaXNFbXB0eSgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGljdGF0aW9uQWx0
ZXJuYXRpdmVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDb250ZXh0
TWVudUl0ZW0gaXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdEaWN0YXRpb25BbHRl
cm5hdGl2ZSwgZGljdGF0aW9uQWx0ZXJuYXRpdmVzW2ldKTsKKyAgICAgICAgICAgICAgICAgICAg
Zm9yIChhdXRvJiBhbHRlcm5hdGl2ZSA6IGRpY3RhdGlvbkFsdGVybmF0aXZlcykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVtIGl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4
dE1lbnVJdGVtVGFnRGljdGF0aW9uQWx0ZXJuYXRpdmUsIGFsdGVybmF0aXZlKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oaXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRlbSgqc2Vw
YXJhdG9ySXRlbSgpLCBtX2NvbnRleHRNZW51LmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93
LmNwcAppbmRleCBiMmE3ZDdjNTUyYzlkY2Y1MTUwMjk3MTg4OGY0NDYwMDlkZjU0Y2UyLi5mMDAx
YzI1MDZlYzczNWViMGMyZjc2OGU4ZTQwNTMyOTBkNjg1NzE4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01X
aW5kb3cuY3BwCkBAIC0yNTYsMjIgKzI1NiwyMSBAQCBib29sIERPTVdpbmRvdzo6ZGlzcGF0Y2hB
bGxQZW5kaW5nQmVmb3JlVW5sb2FkRXZlbnRzKCkKIAogICAgIFZlY3RvcjxSZWY8RE9NV2luZG93
Pj4gd2luZG93czsKICAgICB3aW5kb3dzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2V0LnNpemUo
KSk7Ci0gICAgZm9yIChhdXRvIGl0ID0gc2V0LmJlZ2luKCksIGVuZCA9IHNldC5lbmQoKTsgaXQg
IT0gZW5kOyArK2l0KQotICAgICAgICB3aW5kb3dzLnVuY2hlY2tlZEFwcGVuZCgqaXQtPmtleSk7
CisgICAgZm9yIChhdXRvJiB3aW5kb3cgOiBzZXQpCisgICAgICAgIHdpbmRvd3MudW5jaGVja2Vk
QXBwZW5kKCp3aW5kb3cua2V5KTsKIAotICAgIGZvciAoUmVmPERPTVdpbmRvdz4mIHdpbmRvd1Jl
ZiA6IHdpbmRvd3MpIHsKLSAgICAgICAgRE9NV2luZG93JiB3aW5kb3cgPSB3aW5kb3dSZWY7Ci0g
ICAgICAgIGlmICghc2V0LmNvbnRhaW5zKCZ3aW5kb3cpKQorICAgIGZvciAoYXV0byYgd2luZG93
IDogd2luZG93cykgeworICAgICAgICBpZiAoIXNldC5jb250YWlucygmd2luZG93LmdldCgpKSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIEZyYW1lKiBmcmFtZSA9IHdpbmRvdy5m
cmFtZSgpOworICAgICAgICBGcmFtZSogZnJhbWUgPSB3aW5kb3ctPmZyYW1lKCk7CiAgICAgICAg
IGlmICghZnJhbWUpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBpZiAoIWZyYW1l
LT5sb2FkZXIoKS5zaG91bGRDbG9zZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgICAgIHdpbmRvdy5lbmFibGVTdWRkZW5UZXJtaW5hdGlvbigpOworICAgICAgICB3aW5kb3ct
PmVuYWJsZVN1ZGRlblRlcm1pbmF0aW9uKCk7CiAgICAgfQogCiAgICAgYWxyZWFkeURpc3BhdGNo
ZWQgPSB0cnVlOwpAQCAtMjk5LDE1ICsyOTgsMTQgQEAgdm9pZCBET01XaW5kb3c6OmRpc3BhdGNo
QWxsUGVuZGluZ1VubG9hZEV2ZW50cygpCiAgICAgZm9yIChhdXRvJiBrZXlWYWx1ZSA6IHNldCkK
ICAgICAgICAgd2luZG93cy51bmNoZWNrZWRBcHBlbmQoKmtleVZhbHVlLmtleSk7CiAKLSAgICBm
b3IgKFJlZjxET01XaW5kb3c+JiB3aW5kb3dSZWYgOiB3aW5kb3dzKSB7Ci0gICAgICAgIERPTVdp
bmRvdyYgd2luZG93ID0gd2luZG93UmVmOwotICAgICAgICBpZiAoIXNldC5jb250YWlucygmd2lu
ZG93KSkKKyAgICBmb3IgKGF1dG8mIHdpbmRvdyA6IHdpbmRvd3MpIHsKKyAgICAgICAgaWYgKCFz
ZXQuY29udGFpbnMoJndpbmRvdy5nZXQoKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAg
ICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChQYWdlVHJhbnNpdGlvbkV2ZW50OjpjcmVhdGUoZXZl
bnROYW1lcygpLnBhZ2VoaWRlRXZlbnQsIGZhbHNlKSwgd2luZG93LmRvY3VtZW50KCkpOwotICAg
ICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS51bmxv
YWRFdmVudCwgZmFsc2UsIGZhbHNlKSwgd2luZG93LmRvY3VtZW50KCkpOworICAgICAgICB3aW5k
b3ctPmRpc3BhdGNoRXZlbnQoUGFnZVRyYW5zaXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMo
KS5wYWdlaGlkZUV2ZW50LCBmYWxzZSksIHdpbmRvdy0+ZG9jdW1lbnQoKSk7CisgICAgICAgIHdp
bmRvdy0+ZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS51bmxvYWRFdmVu
dCwgZmFsc2UsIGZhbHNlKSwgd2luZG93LT5kb2N1bWVudCgpKTsKIAotICAgICAgICB3aW5kb3cu
ZW5hYmxlU3VkZGVuVGVybWluYXRpb24oKTsKKyAgICAgICAgd2luZG93LT5lbmFibGVTdWRkZW5U
ZXJtaW5hdGlvbigpOwogICAgIH0KIAogICAgIGFscmVhZHlEaXNwYXRjaGVkID0gdHJ1ZTsKQEAg
LTQ5NSw4ICs0OTMsOCBAQCB2b2lkIERPTVdpbmRvdzo6d2lsbERlc3Ryb3lDYWNoZWRGcmFtZSgp
CiAgICAgLy8gdW5yZWdpc3RlciB0aGVtc2VsdmVzIGZyb20gdGhlIERPTVdpbmRvdyBhcyBhIHJl
c3VsdCBvZiB0aGUgY2FsbCB0byB3aWxsRGVzdHJveUdsb2JhbE9iamVjdEluQ2FjaGVkRnJhbWUu
CiAgICAgVmVjdG9yPERPTVdpbmRvd1Byb3BlcnR5Kj4gcHJvcGVydGllczsKICAgICBjb3B5VG9W
ZWN0b3IobV9wcm9wZXJ0aWVzLCBwcm9wZXJ0aWVzKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHByb3BlcnRpZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHByb3BlcnRpZXNbaV0tPndpbGxE
ZXN0cm95R2xvYmFsT2JqZWN0SW5DYWNoZWRGcmFtZSgpOworICAgIGZvciAoYXV0byYgcHJvcGVy
dHkgOiBwcm9wZXJ0aWVzKQorICAgICAgICBwcm9wZXJ0eS0+d2lsbERlc3Ryb3lHbG9iYWxPYmpl
Y3RJbkNhY2hlZEZyYW1lKCk7CiB9CiAKIHZvaWQgRE9NV2luZG93Ojp3aWxsRGVzdHJveURvY3Vt
ZW50SW5GcmFtZSgpCkBAIC01MDUsOCArNTAzLDggQEAgdm9pZCBET01XaW5kb3c6OndpbGxEZXN0
cm95RG9jdW1lbnRJbkZyYW1lKCkKICAgICAvLyB1bnJlZ2lzdGVyIHRoZW1zZWx2ZXMgZnJvbSB0
aGUgRE9NV2luZG93IGFzIGEgcmVzdWx0IG9mIHRoZSBjYWxsIHRvIHdpbGxEZXN0cm95R2xvYmFs
T2JqZWN0SW5GcmFtZS4KICAgICBWZWN0b3I8RE9NV2luZG93UHJvcGVydHkqPiBwcm9wZXJ0aWVz
OwogICAgIGNvcHlUb1ZlY3RvcihtX3Byb3BlcnRpZXMsIHByb3BlcnRpZXMpOwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgcHJvcGVydGllcy5zaXplKCk7ICsraSkKLSAgICAgICAgcHJvcGVy
dGllc1tpXS0+d2lsbERlc3Ryb3lHbG9iYWxPYmplY3RJbkZyYW1lKCk7CisgICAgZm9yIChhdXRv
JiBwcm9wZXJ0eSA6IHByb3BlcnRpZXMpCisgICAgICAgIHByb3BlcnR5LT53aWxsRGVzdHJveUds
b2JhbE9iamVjdEluRnJhbWUoKTsKIH0KIAogdm9pZCBET01XaW5kb3c6OndpbGxEZXRhY2hEb2N1
bWVudEZyb21GcmFtZSgpCkBAIC01MTUsOCArNTEzLDggQEAgdm9pZCBET01XaW5kb3c6OndpbGxE
ZXRhY2hEb2N1bWVudEZyb21GcmFtZSgpCiAgICAgLy8gdW5yZWdpc3RlciB0aGVtc2VsdmVzIGZy
b20gdGhlIERPTVdpbmRvdyBhcyBhIHJlc3VsdCBvZiB0aGUgY2FsbCB0byB3aWxsRGV0YWNoR2xv
YmFsT2JqZWN0RnJvbUZyYW1lLgogICAgIFZlY3RvcjxET01XaW5kb3dQcm9wZXJ0eSo+IHByb3Bl
cnRpZXM7CiAgICAgY29weVRvVmVjdG9yKG1fcHJvcGVydGllcywgcHJvcGVydGllcyk7Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLnNpemUoKTsgKytpKQotICAgICAgICBw
cm9wZXJ0aWVzW2ldLT53aWxsRGV0YWNoR2xvYmFsT2JqZWN0RnJvbUZyYW1lKCk7CisgICAgZm9y
IChhdXRvJiBwcm9wZXJ0eSA6IHByb3BlcnRpZXMpCisgICAgICAgIHByb3BlcnR5LT53aWxsRGV0
YWNoR2xvYmFsT2JqZWN0RnJvbUZyYW1lKCk7CiB9CiAKICNpZiBFTkFCTEUoR0FNRVBBRCkKQEAg
LTU3MSw4ICs1NjksOCBAQCB2b2lkIERPTVdpbmRvdzo6ZGlzY29ubmVjdERPTVdpbmRvd1Byb3Bl
cnRpZXMoKQogICAgIC8vIHVucmVnaXN0ZXIgdGhlbXNlbHZlcyBmcm9tIHRoZSBET01XaW5kb3cg
YXMgYSByZXN1bHQgb2YgdGhlIGNhbGwgdG8gZGlzY29ubmVjdEZyYW1lRm9yUGFnZUNhY2hlLgog
ICAgIFZlY3RvcjxET01XaW5kb3dQcm9wZXJ0eSo+IHByb3BlcnRpZXM7CiAgICAgY29weVRvVmVj
dG9yKG1fcHJvcGVydGllcywgcHJvcGVydGllcyk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBwcm9wZXJ0aWVzLnNpemUoKTsgKytpKQotICAgICAgICBwcm9wZXJ0aWVzW2ldLT5kaXNjb25u
ZWN0RnJhbWVGb3JQYWdlQ2FjaGUoKTsKKyAgICBmb3IgKGF1dG8mIHByb3BlcnR5IDogcHJvcGVy
dGllcykKKyAgICAgICAgcHJvcGVydHktPmRpc2Nvbm5lY3RGcmFtZUZvclBhZ2VDYWNoZSgpOwog
fQogCiB2b2lkIERPTVdpbmRvdzo6cmVjb25uZWN0RE9NV2luZG93UHJvcGVydGllcygpCkBAIC01
ODIsOCArNTgwLDggQEAgdm9pZCBET01XaW5kb3c6OnJlY29ubmVjdERPTVdpbmRvd1Byb3BlcnRp
ZXMoKQogICAgIC8vIHVucmVnaXN0ZXIgdGhlbXNlbHZlcyBmcm9tIHRoZSBET01XaW5kb3cgYXMg
YSByZXN1bHQgb2YgdGhlIGNhbGwgdG8gcmVjb25uZWN0RnJvbVBhZ2VDYWNoZS4KICAgICBWZWN0
b3I8RE9NV2luZG93UHJvcGVydHkqPiBwcm9wZXJ0aWVzOwogICAgIGNvcHlUb1ZlY3RvcihtX3By
b3BlcnRpZXMsIHByb3BlcnRpZXMpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvcGVy
dGllcy5zaXplKCk7ICsraSkKLSAgICAgICAgcHJvcGVydGllc1tpXS0+cmVjb25uZWN0RnJhbWVG
cm9tUGFnZUNhY2hlKG1fZnJhbWUpOworICAgIGZvciAoYXV0byYgcHJvcGVydHkgOiBwcm9wZXJ0
aWVzKQorICAgICAgICBwcm9wZXJ0eS0+cmVjb25uZWN0RnJhbWVGcm9tUGFnZUNhY2hlKG1fZnJh
bWUpOwogfQogCiB2b2lkIERPTVdpbmRvdzo6cmVzZXRET01XaW5kb3dQcm9wZXJ0aWVzKCkKQEAg
LTE0NTMsOCArMTQ1MSw4IEBAIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IERPTVdpbmRvdzo6Z2V0
TWF0Y2hlZENTU1J1bGVzKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFN0CiAgICAgICAgIHJldHVy
biAwOwogCiAgICAgUmVmUHRyPFN0YXRpY0NTU1J1bGVMaXN0PiBydWxlTGlzdCA9IFN0YXRpY0NT
U1J1bGVMaXN0OjpjcmVhdGUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWF0Y2hl
ZFJ1bGVzLnNpemUoKTsgKytpKQotICAgICAgICBydWxlTGlzdC0+cnVsZXMoKS5hcHBlbmQobWF0
Y2hlZFJ1bGVzW2ldLT5jcmVhdGVDU1NPTVdyYXBwZXIoKSk7CisgICAgZm9yIChhdXRvJiBydWxl
IDogbWF0Y2hlZFJ1bGVzKQorICAgICAgICBydWxlTGlzdC0+cnVsZXMoKS5hcHBlbmQocnVsZS0+
Y3JlYXRlQ1NTT01XcmFwcGVyKCkpOwogCiAgICAgcmV0dXJuIHJ1bGVMaXN0LnJlbGVhc2UoKTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRGV2aWNlQ29udHJvbGxlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RldmljZUNvbnRyb2xsZXIuY3BwCmluZGV4IGJkNWJhMTky
M2U3NTlkYzZiYjk0MzFlZWQ0MmZhNzNhYmNmYjlmN2IuLmU0ODI4MGY4MjNkOWE4NTM1NGNhOGJk
YTM2ZjQyZDkwN2VlODA4ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRGV2aWNl
Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EZXZpY2VDb250cm9sbGVy
LmNwcApAQCAtNzYsMTEgKzc2LDExIEBAIHZvaWQgRGV2aWNlQ29udHJvbGxlcjo6ZGlzcGF0Y2hE
ZXZpY2VFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCkKICAgICBSZWZQdHI8RXZlbnQ+
IGV2ZW50ID0gcHJwRXZlbnQ7CiAgICAgVmVjdG9yPFJlZlB0cjxET01XaW5kb3c+PiBsaXN0ZW5l
clZlY3RvcjsKICAgICBjb3B5VG9WZWN0b3IobV9saXN0ZW5lcnMsIGxpc3RlbmVyVmVjdG9yKTsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3RlbmVyVmVjdG9yLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIGlmIChsaXN0ZW5lclZlY3RvcltpXS0+ZG9jdW1lbnQoKQotICAgICAgICAgICAg
JiYgIWxpc3RlbmVyVmVjdG9yW2ldLT5kb2N1bWVudCgpLT5hY3RpdmVET01PYmplY3RzQXJlU3Vz
cGVuZGVkKCkKLSAgICAgICAgICAgICYmICFsaXN0ZW5lclZlY3RvcltpXS0+ZG9jdW1lbnQoKS0+
YWN0aXZlRE9NT2JqZWN0c0FyZVN0b3BwZWQoKSkKLSAgICAgICAgbGlzdGVuZXJWZWN0b3JbaV0t
PmRpc3BhdGNoRXZlbnQoZXZlbnQpOworICAgIGZvciAoYXV0byYgbGlzdGVuZXIgOiBsaXN0ZW5l
clZlY3RvcikgeworICAgICAgICBpZiAobGlzdGVuZXItPmRvY3VtZW50KCkKKyAgICAgICAgICAg
ICYmICFsaXN0ZW5lci0+ZG9jdW1lbnQoKS0+YWN0aXZlRE9NT2JqZWN0c0FyZVN1c3BlbmRlZCgp
CisgICAgICAgICAgICAmJiAhbGlzdGVuZXItPmRvY3VtZW50KCktPmFjdGl2ZURPTU9iamVjdHNB
cmVTdG9wcGVkKCkpCisgICAgICAgIGxpc3RlbmVyLT5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKICAg
ICB9CiB9CiAKQEAgLTkyLDExICs5MiwxMSBAQCB2b2lkIERldmljZUNvbnRyb2xsZXI6OmZpcmVE
ZXZpY2VFdmVudCgpCiAgICAgVmVjdG9yPFJlZlB0cjxET01XaW5kb3c+PiBsaXN0ZW5lclZlY3Rv
cjsKICAgICBjb3B5VG9WZWN0b3IobV9sYXN0RXZlbnRMaXN0ZW5lcnMsIGxpc3RlbmVyVmVjdG9y
KTsKICAgICBtX2xhc3RFdmVudExpc3RlbmVycy5jbGVhcigpOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbGlzdGVuZXJWZWN0b3Iuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKGxpc3Rl
bmVyVmVjdG9yW2ldLT5kb2N1bWVudCgpCi0gICAgICAgICAgICAmJiAhbGlzdGVuZXJWZWN0b3Jb
aV0tPmRvY3VtZW50KCktPmFjdGl2ZURPTU9iamVjdHNBcmVTdXNwZW5kZWQoKQotICAgICAgICAg
ICAgJiYgIWxpc3RlbmVyVmVjdG9yW2ldLT5kb2N1bWVudCgpLT5hY3RpdmVET01PYmplY3RzQXJl
U3RvcHBlZCgpKQotICAgICAgICBsaXN0ZW5lclZlY3RvcltpXS0+ZGlzcGF0Y2hFdmVudChnZXRM
YXN0RXZlbnQoKSk7CisgICAgZm9yIChhdXRvJiBsaXN0ZW5lciA6IGxpc3RlbmVyVmVjdG9yKSB7
CisgICAgICAgIGlmIChsaXN0ZW5lci0+ZG9jdW1lbnQoKQorICAgICAgICAgICAgJiYgIWxpc3Rl
bmVyLT5kb2N1bWVudCgpLT5hY3RpdmVET01PYmplY3RzQXJlU3VzcGVuZGVkKCkKKyAgICAgICAg
ICAgICYmICFsaXN0ZW5lci0+ZG9jdW1lbnQoKS0+YWN0aXZlRE9NT2JqZWN0c0FyZVN0b3BwZWQo
KSkKKyAgICAgICAgbGlzdGVuZXItPmRpc3BhdGNoRXZlbnQoZ2V0TGFzdEV2ZW50KCkpOwogICAg
IH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IDhhYzY2ZGNjNDc3
ZTdlMTVkZGE2OWUxYWE5ZDY2MTc1ZmI0NjA1YzYuLmNjMzUyNmE0YjFjMmY4YWU2MmJlODYzNmZk
OGViMTVjMmI1YzNkYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTI1
NTUsOSArMjU1NSw5IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjp1cGRhdGVNb3VzZUV2ZW50VGFyZ2V0
Tm9kZShOb2RlKiB0YXJnZXROb2RlLCBjb25zdCBQbGF0Zm9ybU1vCiAgICAgICAgICAgICAgICAg
bV9sYXN0RWxlbWVudFVuZGVyTW91c2UtPmRpc3BhdGNoTW91c2VFdmVudChwbGF0Zm9ybU1vdXNl
RXZlbnQsIGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50LCAwLCBtX2VsZW1lbnRVbmRlck1vdXNl
LmdldCgpKTsKIAogICAgICAgICAgICAgLy8gU2VuZCBtb3VzZWxlYXZlIHRvIHRoZSBub2RlIGhp
ZXJhcmNoeSBubyBsb25nZXIgdW5kZXIgdGhlIG1vdXNlLgotICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBsZWZ0RWxlbWVudHNDaGFpbi5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgICAgIGlmIChoYXNDYXB0dXJpbmdNb3VzZUxlYXZlTGlzdGVuZXIgfHwgbGVmdEVsZW1lbnRz
Q2hhaW5baV0tPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS5tb3VzZWxlYXZlRXZlbnQp
KQotICAgICAgICAgICAgICAgICAgICBsZWZ0RWxlbWVudHNDaGFpbltpXS0+ZGlzcGF0Y2hNb3Vz
ZUV2ZW50KHBsYXRmb3JtTW91c2VFdmVudCwgZXZlbnROYW1lcygpLm1vdXNlbGVhdmVFdmVudCwg
MCwgbV9lbGVtZW50VW5kZXJNb3VzZS5nZXQoKSk7CisgICAgICAgICAgICBmb3IgKGF1dG8mIGNo
YWluIDogbGVmdEVsZW1lbnRzQ2hhaW4pIHsKKyAgICAgICAgICAgICAgICBpZiAoaGFzQ2FwdHVy
aW5nTW91c2VMZWF2ZUxpc3RlbmVyIHx8IGNoYWluLT5oYXNFdmVudExpc3RlbmVycyhldmVudE5h
bWVzKCkubW91c2VsZWF2ZUV2ZW50KSkKKyAgICAgICAgICAgICAgICAgICAgY2hhaW4tPmRpc3Bh
dGNoTW91c2VFdmVudChwbGF0Zm9ybU1vdXNlRXZlbnQsIGV2ZW50TmFtZXMoKS5tb3VzZWxlYXZl
RXZlbnQsIDAsIG1fZWxlbWVudFVuZGVyTW91c2UuZ2V0KCkpOwogICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICAvLyBTZW5kIG1vdXNlb3ZlciBldmVudCB0byB0aGUgbmV3IG5vZGUuCkBAIC0y
NTY1LDkgKzI1NjUsOSBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6dXBkYXRlTW91c2VFdmVudFRhcmdl
dE5vZGUoTm9kZSogdGFyZ2V0Tm9kZSwgY29uc3QgUGxhdGZvcm1NbwogICAgICAgICAgICAgICAg
IG1fZWxlbWVudFVuZGVyTW91c2UtPmRpc3BhdGNoTW91c2VFdmVudChwbGF0Zm9ybU1vdXNlRXZl
bnQsIGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJFdmVudCwgMCwgbV9sYXN0RWxlbWVudFVuZGVyTW91
c2UuZ2V0KCkpOwogCiAgICAgICAgICAgICAvLyBTZW5kIG1vdXNlbGVhdmUgZXZlbnQgdG8gdGhl
IG5vZGVzIGhpZXJhcmNoeSB1bmRlciB0aGUgbW91c2UuCi0gICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gMCwgc2l6ZSA9IGVudGVyZWRFbGVtZW50c0NoYWluLnNpemUoKTsgaSA8IHNpemU7ICsr
aSkgewotICAgICAgICAgICAgICAgIGlmIChoYXNDYXB0dXJpbmdNb3VzZUVudGVyTGlzdGVuZXIg
fHwgZW50ZXJlZEVsZW1lbnRzQ2hhaW5baV0tPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMo
KS5tb3VzZWVudGVyRXZlbnQpKQotICAgICAgICAgICAgICAgICAgICBlbnRlcmVkRWxlbWVudHND
aGFpbltpXS0+ZGlzcGF0Y2hNb3VzZUV2ZW50KHBsYXRmb3JtTW91c2VFdmVudCwgZXZlbnROYW1l
cygpLm1vdXNlZW50ZXJFdmVudCwgMCwgbV9sYXN0RWxlbWVudFVuZGVyTW91c2UuZ2V0KCkpOwor
ICAgICAgICAgICAgZm9yIChhdXRvJiBjaGFpbiA6IGVudGVyZWRFbGVtZW50c0NoYWluKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGhhc0NhcHR1cmluZ01vdXNlRW50ZXJMaXN0ZW5lciB8fCBjaGFp
bi0+aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLm1vdXNlZW50ZXJFdmVudCkpCisgICAg
ICAgICAgICAgICAgICAgIGNoYWluLT5kaXNwYXRjaE1vdXNlRXZlbnQocGxhdGZvcm1Nb3VzZUV2
ZW50LCBldmVudE5hbWVzKCkubW91c2VlbnRlckV2ZW50LCAwLCBtX2xhc3RFbGVtZW50VW5kZXJN
b3VzZS5nZXQoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgbV9sYXN0RWxl
bWVudFVuZGVyTW91c2UgPSBtX2VsZW1lbnRVbmRlck1vdXNlOwpAQCAtMzg2NCwxOSArMzg2NCwx
NiBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRv
dWNoRXZlbnQmIGV2ZW50KQogCiAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGlj
YXRvcihEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlLCBtX2ZyYW1lLmRvY3VtZW50KCkp
OwogCi0gICAgdW5zaWduZWQgaTsKICAgICBib29sIGZyZXNoVG91Y2hFdmVudHMgPSB0cnVlOwog
ICAgIGJvb2wgYWxsVG91Y2hSZWxlYXNlZCA9IHRydWU7Ci0gICAgZm9yIChpID0gMDsgaSA8IHBv
aW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmIHBv
aW50ID0gcG9pbnRzW2ldOworICAgIGZvciAoY29uc3QgYXV0byYgcG9pbnQgOiBwb2ludHMpIHsK
ICAgICAgICAgaWYgKHBvaW50LnN0YXRlKCkgIT0gUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFBy
ZXNzZWQpCiAgICAgICAgICAgICBmcmVzaFRvdWNoRXZlbnRzID0gZmFsc2U7CiAgICAgICAgIGlm
IChwb2ludC5zdGF0ZSgpICE9IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hSZWxlYXNlZCAmJiBw
b2ludC5zdGF0ZSgpICE9IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hDYW5jZWxsZWQpCiAgICAg
ICAgICAgICBhbGxUb3VjaFJlbGVhc2VkID0gZmFsc2U7CiAgICAgfQogCi0gICAgZm9yIChpID0g
MDsgaSA8IHBvaW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBjb25zdCBQbGF0Zm9ybVRvdWNo
UG9pbnQmIHBvaW50ID0gcG9pbnRzW2ldOworICAgIGZvciAoY29uc3QgYXV0byYgcG9pbnQgOiBw
b2ludHMpIHsKICAgICAgICAgUGxhdGZvcm1Ub3VjaFBvaW50OjpTdGF0ZSBwb2ludFN0YXRlID0g
cG9pbnQuc3RhdGUoKTsKICAgICAgICAgTGF5b3V0UG9pbnQgcGFnZVBvaW50ID0gZG9jdW1lbnRQ
b2ludEZvcldpbmRvd1BvaW50KG1fZnJhbWUsIHBvaW50LnBvcygpKTsKIApAQCAtNDAyMCwxMCAr
NDAxNyw5IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRm
b3JtVG91Y2hFdmVudCYgZXZlbnQpCiAgICAgICAgIGJvb2wgaXNUb3VjaENhbmNlbEV2ZW50ID0g
KHN0YXRlID09IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hDYW5jZWxsZWQpOwogICAgICAgICBS
ZWZQdHI8VG91Y2hMaXN0PiYgZWZmZWN0aXZlVG91Y2hlcyhpc1RvdWNoQ2FuY2VsRXZlbnQgPyBl
bXB0eUxpc3QgOiB0b3VjaGVzKTsKICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBzdGF0ZU5h
bWUoZXZlbnROYW1lRm9yVG91Y2hQb2ludFN0YXRlKHN0YXRpY19jYXN0PFBsYXRmb3JtVG91Y2hQ
b2ludDo6U3RhdGU+KHN0YXRlKSkpOwotICAgICAgICBjb25zdCBFdmVudFRhcmdldFNldCYgdGFy
Z2V0c0ZvclN0YXRlID0gY2hhbmdlZFRvdWNoZXNbc3RhdGVdLm1fdGFyZ2V0czsKIAotICAgICAg
ICBmb3IgKEV2ZW50VGFyZ2V0U2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IHRhcmdldHNGb3JTdGF0
ZS5iZWdpbigpOyBpdCAhPSB0YXJnZXRzRm9yU3RhdGUuZW5kKCk7ICsraXQpIHsKLSAgICAgICAg
ICAgIEV2ZW50VGFyZ2V0KiB0b3VjaEV2ZW50VGFyZ2V0ID0gaXQtPmdldCgpOworICAgICAgICBm
b3IgKGF1dG8mIHRhZ2V0IDogY2hhbmdlZFRvdWNoZXNbc3RhdGVdLm1fdGFyZ2V0cykgeworICAg
ICAgICAgICAgRXZlbnRUYXJnZXQqIHRvdWNoRXZlbnRUYXJnZXQgPSB0YWdldC5nZXQoKTsKICAg
ICAgICAgICAgIFJlZlB0cjxUb3VjaExpc3Q+IHRhcmdldFRvdWNoZXMoaXNUb3VjaENhbmNlbEV2
ZW50ID8gZW1wdHlMaXN0IDogdG91Y2hlc0J5VGFyZ2V0LmdldCh0b3VjaEV2ZW50VGFyZ2V0KSk7
CiAgICAgICAgICAgICBBU1NFUlQodGFyZ2V0VG91Y2hlcyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
Rm9jdXNDb250cm9sbGVyLmNwcAppbmRleCBkOGQyNWNmZThlYzVjOWYzZTZiMzhhOWE3NTkxYWI5
OWY1ZDBhZTMzLi43N2MzODdmYjYzZmMxNjQwODYwYWMyYTA1MDk4NjQ2YWE1NDAzYTNmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCkBAIC03MDAsOCArNzAwLDcgQEAg
dm9pZCBGb2N1c0NvbnRyb2xsZXI6OnNldElzVmlzaWJsZUFuZEFjdGl2ZUludGVybmFsKGJvb2wg
Y29udGVudElzVmlzaWJsZSkKICAgICAgICAgaWYgKCFzY3JvbGxhYmxlQXJlYXMpCiAgICAgICAg
ICAgICBjb250aW51ZTsKIAotICAgICAgICBmb3IgKEhhc2hTZXQ8U2Nyb2xsYWJsZUFyZWEqPjo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBzY3JvbGxhYmxlQXJlYXMtPmJlZ2luKCksIGVuZCA9IHNjcm9s
bGFibGVBcmVhcy0+ZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgU2Nyb2xs
YWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhID0gKml0OworICAgICAgICBmb3IgKGF1dG8mIHNjcm9s
bGFibGVBcmVhIDogKnNjcm9sbGFibGVBcmVhcykgewogICAgICAgICAgICAgQVNTRVJUKHNjcm9s
bGFibGVBcmVhLT5zY3JvbGxiYXJzQ2FuQmVBY3RpdmUoKSB8fCBtX3BhZ2Uuc2hvdWxkU3VwcHJl
c3NTY3JvbGxiYXJBbmltYXRpb25zKCkpOwogCiAgICAgICAgICAgICBjb250ZW50QXJlYURpZFNo
b3dPckhpZGUoc2Nyb2xsYWJsZUFyZWEsIGNvbnRlbnRJc1Zpc2libGUpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1l
LmNwcAppbmRleCBlNTkxY2Y0Mzk2ZDQyZmQ5ZDc0MGQ1NjRiZDcwMjZkNTQ2MzZiZDhiLi44ZTIy
NTEzNGQ1MjI5ZDgxZDUzZGVjNzRiOTAwZWRmMWI2ZDk1NTU5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNw
cApAQCAtMjk1LDggKzI5NSw4IEBAIHZvaWQgRnJhbWU6Om9yaWVudGF0aW9uQ2hhbmdlZCgpCiAg
ICAgZm9yIChGcmFtZSogZnJhbWUgPSB0aGlzOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgp
LnRyYXZlcnNlTmV4dCgpKQogICAgICAgICBmcmFtZXMuYXBwZW5kKCpmcmFtZSk7CiAKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZnJhbWVzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGlm
IChEb2N1bWVudCogZG9jID0gZnJhbWVzW2ldLT5kb2N1bWVudCgpKQorICAgIGZvciAoYXV0byYg
ZnJhbWUgOiBmcmFtZXMpIHsKKyAgICAgICAgaWYgKERvY3VtZW50KiBkb2MgPSBmcmFtZS0+ZG9j
dW1lbnQoKSkKICAgICAgICAgICAgIGRvYy0+ZGlzcGF0Y2hXaW5kb3dFdmVudChFdmVudDo6Y3Jl
YXRlKGV2ZW50TmFtZXMoKS5vcmllbnRhdGlvbmNoYW5nZUV2ZW50LCBmYWxzZSwgZmFsc2UpKTsK
ICAgICB9CiB9CkBAIC03MTksMTAgKzcxOSw3IEBAIHZvaWQgRnJhbWU6OmluamVjdFVzZXJTY3Jp
cHRzRm9yV29ybGQoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgY29uc3QgVXNlclNjcmlwdFZlCiAg
ICAgaWYgKCFkb2MpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxTY3JpcHRTb3VyY2VD
b2RlPiBzb3VyY2VDb2RlOwotICAgIHVuc2lnbmVkIGNvdW50ID0gdXNlclNjcmlwdHMuc2l6ZSgp
OwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIFVz
ZXJTY3JpcHQqIHNjcmlwdCA9IHVzZXJTY3JpcHRzW2ldLmdldCgpOworICAgIGZvciAoYXV0byYg
c2NyaXB0IDogdXNlclNjcmlwdHMpIHsKICAgICAgICAgaWYgKHNjcmlwdC0+aW5qZWN0ZWRGcmFt
ZXMoKSA9PSBJbmplY3RJblRvcEZyYW1lT25seSAmJiBvd25lckVsZW1lbnQoKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggZjJmNDlmN2Iw
ZDk2NGVjYjM5OTcyMTZlNTVjYzk1NWNiMWI1NzEyNS4uZTU3MTYwMWYxYjBhODU4NDA0NmM1YTYz
ZTIzMTNjZDhhMGQ2ZjlhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtMTg3OCwx
MCArMTg3OCw3IEBAIGJvb2wgRnJhbWVWaWV3OjpzY3JvbGxDb250ZW50c0Zhc3RQYXRoKGNvbnN0
IEludFNpemUmIHNjcm9sbERlbHRhLCBjb25zdCBJbnRSZWN0CiAgICAgaG9zdFdpbmRvdygpLT5z
Y3JvbGwoc2Nyb2xsRGVsdGEsIHJlY3RUb1Njcm9sbCwgY2xpcFJlY3QpOwogCiAgICAgLy8gMikg
dXBkYXRlIHRoZSBhcmVhIG9mIGZpeGVkIG9iamVjdHMgdGhhdCBoYXMgYmVlbiBpbnZhbGlkYXRl
ZAotICAgIFZlY3RvcjxJbnRSZWN0PiBzdWJSZWN0c1RvVXBkYXRlID0gcmVnaW9uVG9VcGRhdGUu
cmVjdHMoKTsKLSAgICBzaXplX3Qgdmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHNDb3VudCA9IHN1
YlJlY3RzVG9VcGRhdGUuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmlld3Bv
cnRDb25zdHJhaW5lZE9iamVjdHNDb3VudDsgKytpKSB7Ci0gICAgICAgIEludFJlY3QgdXBkYXRl
UmVjdCA9IHN1YlJlY3RzVG9VcGRhdGVbaV07CisgICAgZm9yIChhdXRvJiB1cGRhdGVSZWN0IDog
cmVnaW9uVG9VcGRhdGUucmVjdHMoKSkgewogICAgICAgICBJbnRSZWN0IHNjcm9sbGVkUmVjdCA9
IHVwZGF0ZVJlY3Q7CiAgICAgICAgIHNjcm9sbGVkUmVjdC5tb3ZlKHNjcm9sbERlbHRhKTsKICAg
ICAgICAgdXBkYXRlUmVjdC51bml0ZShzY3JvbGxlZFJlY3QpOwpAQCAtMjY4NCw4ICsyNjgxLDgg
QEAgdm9pZCBGcmFtZVZpZXc6OnNlcnZpY2VTY3JpcHRlZEFuaW1hdGlvbnMoZG91YmxlIG1vbm90
b25pY0FuaW1hdGlvblN0YXJ0VGltZSkKICAgICBmb3IgKGF1dG8qIGZyYW1lID0gbV9mcmFtZS5w
dHIoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkKICAgICAg
ICAgZG9jdW1lbnRzLmFwcGVuZChmcmFtZS0+ZG9jdW1lbnQoKSk7CiAKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGRvY3VtZW50cy5zaXplKCk7ICsraSkKLSAgICAgICAgZG9jdW1lbnRzW2ld
LT5zZXJ2aWNlU2NyaXB0ZWRBbmltYXRpb25zKG1vbm90b25pY0FuaW1hdGlvblN0YXJ0VGltZSk7
CisgICAgZm9yIChhdXRvJiBkb2N1bWVudCA6IGRvY3VtZW50cykKKyAgICAgICAgZG9jdW1lbnQt
PnNlcnZpY2VTY3JpcHRlZEFuaW1hdGlvbnMobW9ub3RvbmljQW5pbWF0aW9uU3RhcnRUaW1lKTsK
IH0KICNlbmRpZgogCkBAIC00NDE4LDggKzQ0MTUsOCBAQCBTdHJpbmcgRnJhbWVWaWV3Ojp0cmFj
a2VkUmVwYWludFJlY3RzQXNUZXh0KCkgY29uc3QKICAgICBUZXh0U3RyZWFtIHRzOwogICAgIGlm
ICghbV90cmFja2VkUmVwYWludFJlY3RzLmlzRW1wdHkoKSkgewogICAgICAgICB0cyA8PCAiKHJl
cGFpbnQgcmVjdHNcbiI7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90cmFja2Vk
UmVwYWludFJlY3RzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgdHMgPDwgIiAgKHJlY3QgIiA8
PCBMYXlvdXRVbml0KG1fdHJhY2tlZFJlcGFpbnRSZWN0c1tpXS54KCkpIDw8ICIgIiA8PCBMYXlv
dXRVbml0KG1fdHJhY2tlZFJlcGFpbnRSZWN0c1tpXS55KCkpIDw8ICIgIiA8PCBMYXlvdXRVbml0
KG1fdHJhY2tlZFJlcGFpbnRSZWN0c1tpXS53aWR0aCgpKSA8PCAiICIgPDwgTGF5b3V0VW5pdCht
X3RyYWNrZWRSZXBhaW50UmVjdHNbaV0uaGVpZ2h0KCkpIDw8ICIpXG4iOworICAgICAgICBmb3Ig
KGF1dG8mIHJlY3QgOiBtX3RyYWNrZWRSZXBhaW50UmVjdHMpCisgICAgICAgICAgICB0cyA8PCAi
ICAocmVjdCAiIDw8IExheW91dFVuaXQocmVjdC54KCkpIDw8ICIgIiA8PCBMYXlvdXRVbml0KHJl
Y3QueSgpKSA8PCAiICIgPDwgTGF5b3V0VW5pdChyZWN0LndpZHRoKCkpIDw8ICIgIiA8PCBMYXlv
dXRVbml0KHJlY3QuaGVpZ2h0KCkpIDw8ICIpXG4iOwogICAgICAgICB0cyA8PCAiKVxuIjsKICAg
ICB9CiAgICAgcmV0dXJuIHRzLnJlbGVhc2UoKTsKQEAgLTQ3NDMsMjAgKzQ3NDAsMTYgQEAgdm9p
ZCBGcmFtZVZpZXc6OnVwZGF0ZVdpZGdldFBvc2l0aW9ucygpCiAgICAgLy8gdXBkYXRlV2lkZ2V0
UG9zaXRpb24oKSBjYW4gcG9zc2libHkgY2F1c2UgbGF5b3V0IHRvIGJlIHJlLWVudGVyZWQgKHZp
YSBwbHVnLWlucyBydW5uaW5nCiAgICAgLy8gc2NyaXB0cyBpbiByZXNwb25zZSB0byBOUFBfU2V0
V2luZG93LCBmb3IgZXhhbXBsZSksIHNvIHdlIG5lZWQgdG8ga2VlcCB0aGUgV2lkZ2V0cwogICAg
IC8vIGFsaXZlIGR1cmluZyBlbnVtZXJhdGlvbi4KLSAgICBhdXRvIHByb3RlY3RlZFdpZGdldHMg
PSBjb2xsZWN0QW5kUHJvdGVjdFdpZGdldHMobV93aWRnZXRzSW5SZW5kZXJUcmVlKTsKLQotICAg
IGZvciAodW5zaWduZWQgaSA9IDAsIHNpemUgPSBwcm90ZWN0ZWRXaWRnZXRzLnNpemUoKTsgaSA8
IHNpemU7ICsraSkgewotICAgICAgICBpZiAoUmVuZGVyV2lkZ2V0KiByZW5kZXJXaWRnZXQgPSBS
ZW5kZXJXaWRnZXQ6OmZpbmQocHJvdGVjdGVkV2lkZ2V0c1tpXS5nZXQoKSkpCisgICAgZm9yIChh
dXRvJiB3aWRnZXQgOiBjb2xsZWN0QW5kUHJvdGVjdFdpZGdldHMobV93aWRnZXRzSW5SZW5kZXJU
cmVlKSkgeworICAgICAgICBpZiAoUmVuZGVyV2lkZ2V0KiByZW5kZXJXaWRnZXQgPSBSZW5kZXJX
aWRnZXQ6OmZpbmQod2lkZ2V0LmdldCgpKSkKICAgICAgICAgICAgIHJlbmRlcldpZGdldC0+dXBk
YXRlV2lkZ2V0UG9zaXRpb24oKTsKICAgICB9CiB9CiAKIHZvaWQgRnJhbWVWaWV3Ojpub3RpZnlX
aWRnZXRzKFdpZGdldE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pCiB7Ci0gICAgYXV0byBwcm90
ZWN0ZWRXaWRnZXRzID0gY29sbGVjdEFuZFByb3RlY3RXaWRnZXRzKG1fd2lkZ2V0c0luUmVuZGVy
VHJlZSk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBzaXplID0gcHJvdGVjdGVkV2lkZ2V0
cy5zaXplKCk7IGkgPCBzaXplOyArK2kpCi0gICAgICAgIHByb3RlY3RlZFdpZGdldHNbaV0tPm5v
dGlmeVdpZGdldChub3RpZmljYXRpb24pOworICAgIGZvciAoYXV0byYgd2lkZ2V0IDogY29sbGVj
dEFuZFByb3RlY3RXaWRnZXRzKG1fd2lkZ2V0c0luUmVuZGVyVHJlZSkpCisgICAgICAgIHdpZGdl
dC0+bm90aWZ5V2lkZ2V0KG5vdGlmaWNhdGlvbik7CiB9CiAKIHZvaWQgRnJhbWVWaWV3OjpzZXRF
eHBvc2VkUmVjdChGbG9hdFJlY3QgZXhwb3NlZFJlY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAppbmRleCBl
YTQzMWVkNzc4NjNlOGQ4YTk2ODAxMjg4ZGU5ZjkwMWYzNDkxNWFlLi42OGQ4MWI2NWVjZGQ5MDg4
ZDgyNTFhMDlhN2Y5YjMyOTQyZWY2ZGIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1BhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKQEAgLTEyMSwxNSAr
MTIxLDE1IEBAIHN0YXRpYyB2b2lkIG5ldHdvcmtTdGF0ZUNoYW5nZWQoYm9vbCBpc09uTGluZSkK
ICAgICBWZWN0b3I8UmVmPEZyYW1lPj4gZnJhbWVzOwogICAgIAogICAgIC8vIEdldCBhbGwgdGhl
IGZyYW1lcyBvZiBhbGwgdGhlIHBhZ2VzIGluIGFsbCB0aGUgcGFnZSBncm91cHMKLSAgICBmb3Ig
KGF1dG8gaXQgPSBhbGxQYWdlcy0+YmVnaW4oKSwgZW5kID0gYWxsUGFnZXMtPmVuZCgpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSAmKCppdCktPm1haW5G
cmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQorICAg
IGZvciAoYXV0byYgcGFnZSA6ICphbGxQYWdlcykgeworICAgICAgICBmb3IgKEZyYW1lKiBmcmFt
ZSA9ICZwYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2
ZXJzZU5leHQoKSkKICAgICAgICAgICAgIGZyYW1lcy5hcHBlbmQoKmZyYW1lKTsKLSAgICAgICAg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpuZXR3b3JrU3RhdGVDaGFuZ2VkKCppdCk7CisgICAg
ICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bmV0d29ya1N0YXRlQ2hhbmdlZChwYWdlKTsK
ICAgICB9CiAKICAgICBBdG9taWNTdHJpbmcgZXZlbnROYW1lID0gaXNPbkxpbmUgPyBldmVudE5h
bWVzKCkub25saW5lRXZlbnQgOiBldmVudE5hbWVzKCkub2ZmbGluZUV2ZW50OwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBmcmFtZXMuc2l6ZSgpOyBpKyspCi0gICAgICAgIGZyYW1lc1tp
XS0+ZG9jdW1lbnQoKS0+ZGlzcGF0Y2hXaW5kb3dFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFt
ZSwgZmFsc2UsIGZhbHNlKSk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lcykKKyAgICAg
ICAgZnJhbWUtPmRvY3VtZW50KCktPmRpc3BhdGNoV2luZG93RXZlbnQoRXZlbnQ6OmNyZWF0ZShl
dmVudE5hbWUsIGZhbHNlLCBmYWxzZSkpOwogfQogCiBzdGF0aWMgY29uc3QgVmlld1N0YXRlOjpG
bGFncyBQYWdlSW5pdGlhbFZpZXdTdGF0ZSA9IFZpZXdTdGF0ZTo6SXNWaXNpYmxlIHwgVmlld1N0
YXRlOjpJc0luV2luZG93OwpAQCAtNDAxLDkgKzQwMSw5IEBAIHN0YXRpYyBjb25zdCBWaWV3TW9k
ZUluZm8gdmlld01vZGVNYXBbdmlld01vZGVNYXBTaXplXSA9IHsKIAogUGFnZTo6Vmlld01vZGUg
UGFnZTo6c3RyaW5nVG9WaWV3TW9kZShjb25zdCBTdHJpbmcmIHRleHQpCiB7Ci0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCB2aWV3TW9kZU1hcFNpemU7ICsraSkgewotICAgICAgICBpZiAodGV4dCA9
PSB2aWV3TW9kZU1hcFtpXS5uYW1lKQotICAgICAgICAgICAgcmV0dXJuIHZpZXdNb2RlTWFwW2ld
LnR5cGU7CisgICAgZm9yIChhdXRvIG1hcCA6IHZpZXdNb2RlTWFwKSB7CisgICAgICAgIGlmICh0
ZXh0ID09IG1hcC5uYW1lKQorICAgICAgICAgICAgcmV0dXJuIG1hcC50eXBlOwogICAgIH0KICAg
ICByZXR1cm4gUGFnZTo6Vmlld01vZGVJbnZhbGlkOwogfQpAQCAtNDgyLDkgKzQ4Miw4IEBAIHZv
aWQgUGFnZTo6dXBkYXRlU3R5bGVGb3JBbGxQYWdlc0FmdGVyR2xvYmFsQ2hhbmdlSW5FbnZpcm9u
bWVudCgpCiB7CiAgICAgaWYgKCFhbGxQYWdlcykKICAgICAgICAgcmV0dXJuOwotICAgIEhhc2hT
ZXQ8UGFnZSo+OjppdGVyYXRvciBlbmQgPSBhbGxQYWdlcy0+ZW5kKCk7Ci0gICAgZm9yIChIYXNo
U2V0PFBhZ2UqPjo6aXRlcmF0b3IgaXQgPSBhbGxQYWdlcy0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICYoKml0KS0+bWFpbkZyYW1lKCk7IGZy
YW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKKyAgICBmb3IgKGF1
dG8mIHBhZ2UgOiAqYWxsUGFnZXMpIHsKKyAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSAmcGFn
ZS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0
KCkpIHsKICAgICAgICAgICAgIC8vIElmIGEgY2hhbmdlIGluIHRoZSBnbG9iYWwgZW52aXJvbm1l
bnQgaGFzIG9jY3VycmVkLCB3ZSBuZWVkIHRvCiAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgYWxs
IHRoZSBwcm9wZXJ0aWVzIGEgcmVjb21wdXRlZCwgdGhlcmVmb3JlIHdlIGludmFsaWRhdGUKICAg
ICAgICAgICAgIC8vIHRoZSBwcm9wZXJ0aWVzIGNhY2hlLgpAQCAtNDkyLDYgKzQ5MSw3IEBAIHZv
aWQgUGFnZTo6dXBkYXRlU3R5bGVGb3JBbGxQYWdlc0FmdGVyR2xvYmFsQ2hhbmdlSW5FbnZpcm9u
bWVudCgpCiAgICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+aW52YWxpZGF0ZU1hdGNoZWRQ
cm9wZXJ0aWVzQ2FjaGUoKTsKICAgICAgICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5zY2hlZHVs
ZUZvcmNlZFN0eWxlUmVjYWxjKCk7CiAgICAgICAgIH0KKyAgICB9CiB9CiAKIHZvaWQgUGFnZTo6
c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKCkKQEAgLTUxMSwyMSArNTExLDIwIEBAIHZv
aWQgUGFnZTo6cmVmcmVzaFBsdWdpbnMoYm9vbCByZWxvYWQpCiAKICAgICBWZWN0b3I8UmVmPEZy
YW1lPj4gZnJhbWVzTmVlZGluZ1JlbG9hZDsKIAotICAgIGZvciAoYXV0byBpdCA9IGFsbFBhZ2Vz
LT5iZWdpbigpLCBlbmQgPSBhbGxQYWdlcy0+ZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICBQYWdlJiBwYWdlID0gKippdDsKLSAgICAgICAgcGFnZS5tX3BsdWdpbkRhdGEuY2xlYXIo
KTsKKyAgICBmb3IgKGF1dG8mIHBhZ2UgOiAqYWxsUGFnZXMpIHsKKyAgICAgICAgcGFnZS0+bV9w
bHVnaW5EYXRhLmNsZWFyKCk7CiAKICAgICAgICAgaWYgKCFyZWxvYWQpCiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgCi0gICAgICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJnBhZ2UubWFp
bkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsK
KyAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSAmcGFnZS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBm
cmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKICAgICAgICAgICAgIGlmIChm
cmFtZS0+bG9hZGVyKCkuc3ViZnJhbWVMb2FkZXIoKS5jb250YWluc1BsdWdpbnMoKSkKICAgICAg
ICAgICAgICAgICBmcmFtZXNOZWVkaW5nUmVsb2FkLmFwcGVuZCgqZnJhbWUpOwogICAgICAgICB9
CiAgICAgfQogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmcmFtZXNOZWVkaW5nUmVsb2Fk
LnNpemUoKTsgKytpKQotICAgICAgICBmcmFtZXNOZWVkaW5nUmVsb2FkW2ldLT5sb2FkZXIoKS5y
ZWxvYWQoKTsKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVzTmVlZGluZ1JlbG9hZCkKKyAg
ICAgICAgZnJhbWUtPmxvYWRlcigpLnJlbG9hZCgpOwogfQogCiBQbHVnaW5EYXRhJiBQYWdlOjpw
bHVnaW5EYXRhKCkgY29uc3QKQEAgLTkwMCwxMCArODk5LDggQEAgdm9pZCBQYWdlOjpsb2NrQWxs
T3ZlcmxheVNjcm9sbGJhcnNUb0hpZGRlbihib29sIGxvY2tPdmVybGF5U2Nyb2xsYmFycykKICAg
ICAgICAgaWYgKCFzY3JvbGxhYmxlQXJlYXMpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAg
ICAgICBmb3IgKEhhc2hTZXQ8U2Nyb2xsYWJsZUFyZWEqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBz
Y3JvbGxhYmxlQXJlYXMtPmJlZ2luKCksIGVuZCA9IHNjcm9sbGFibGVBcmVhcy0+ZW5kKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVB
cmVhID0gKml0OworICAgICAgICBmb3IgKGF1dG8mIHNjcm9sbGFibGVBcmVhIDogKnNjcm9sbGFi
bGVBcmVhcykKICAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhLT5sb2NrT3ZlcmxheVNjcm9sbGJh
clN0YXRlVG9IaWRkZW4obG9ja092ZXJsYXlTY3JvbGxiYXJzKTsKLSAgICAgICAgfQogICAgIH0K
IH0KICAgICAKQEAgLTExNzYsMTAgKzExNzMsOSBAQCBWZWN0b3I8UmVmPFBsdWdpblZpZXdCYXNl
Pj4gUGFnZTo6cGx1Z2luVmlld3MoKQogICAgICAgICBpZiAoIXZpZXcpCiAgICAgICAgICAgICBi
cmVhazsKIAotICAgICAgICBmb3IgKGF1dG8gaXQgPSB2aWV3LT5jaGlsZHJlbigpLmJlZ2luKCks
IGVuZCA9IHZpZXctPmNoaWxkcmVuKCkuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICAgICAgV2lkZ2V0JiB3aWRnZXQgPSAqKml0OwotICAgICAgICAgICAgaWYgKGlzPFBsdWdpblZp
ZXdCYXNlPih3aWRnZXQpKQotICAgICAgICAgICAgICAgIHZpZXdzLmFwcGVuZChkb3duY2FzdDxQ
bHVnaW5WaWV3QmFzZT4od2lkZ2V0KSk7CisgICAgICAgIGZvciAoYXV0byYgd2lkZ2V0IDogdmll
dy0+Y2hpbGRyZW4oKSkgeworICAgICAgICAgICAgaWYgKGlzPFBsdWdpblZpZXdCYXNlPigqd2lk
Z2V0KSkKKyAgICAgICAgICAgICAgICB2aWV3cy5hcHBlbmQoZG93bmNhc3Q8UGx1Z2luVmlld0Jh
c2U+KCp3aWRnZXQpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTE5MywxMCArMTE4OSw4IEBA
IHZvaWQgUGFnZTo6c3RvcmFnZUJsb2NraW5nU3RhdGVDaGFuZ2VkKCkKIAogICAgIC8vIENvbGxl
Y3QgdGhlIFBsdWdpblZpZXdzIGluIHRvIGEgdmVjdG9yIHRvIGVuc3VyZSB0aGF0IGFjdGlvbiB0
aGUgcGx1Zy1pbiB0YWtlcwogICAgIC8vIGZyb20gYmVsb3cgc3RvcmFnZUJsb2NraW5nU3RhdGVD
aGFuZ2VkIGRvZXMgbm90IGFmZmVjdCB0aGVpciBsaWZldGltZS4KLSAgICBhdXRvIHZpZXdzID0g
cGx1Z2luVmlld3MoKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2aWV3cy5zaXpl
KCk7ICsraSkKLSAgICAgICAgdmlld3NbaV0tPnN0b3JhZ2VCbG9ja2luZ1N0YXRlQ2hhbmdlZCgp
OworICAgIGZvciAoYXV0byYgdmlldyA6IHBsdWdpblZpZXdzKCkpCisgICAgICAgIHZpZXctPnN0
b3JhZ2VCbG9ja2luZ1N0YXRlQ2hhbmdlZCgpOwogfQogCiB2b2lkIFBhZ2U6OmVuYWJsZUxlZ2Fj
eVByaXZhdGVCcm93c2luZyhib29sIHByaXZhdGVCcm93c2luZ0VuYWJsZWQpCkBAIC0xMzEyLDgg
KzEzMDYsOCBAQCB2b2lkIFBhZ2U6OnNldElzVmlzaWJsZUludGVybmFsKGJvb2wgaXNWaXNpYmxl
KQogICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbV9tYWluRnJhbWUuZ2V0KCk7IGZyYW1lOyBmcmFt
ZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpCiAgICAgICAgIGRvY3VtZW50cy5hcHBl
bmQoKmZyYW1lLT5kb2N1bWVudCgpKTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0g
ZG9jdW1lbnRzLnNpemUoKTsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgZG9jdW1lbnRzW2ldLT52
aXNpYmlsaXR5U3RhdGVDaGFuZ2VkKCk7CisgICAgZm9yIChhdXRvJiBkb2N1bWVudCA6IGRvY3Vt
ZW50cykKKyAgICAgICAgZG9jdW1lbnQtPnZpc2liaWxpdHlTdGF0ZUNoYW5nZWQoKTsKIAogICAg
IGlmICghaXNWaXNpYmxlKSB7CiAgICAgICAgIGlmIChtX3NldHRpbmdzLT5oaWRkZW5QYWdlQ1NT
QW5pbWF0aW9uU3VzcGVuc2lvbkVuYWJsZWQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvUGFnZUdyb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmNwcApp
bmRleCBhMDhhOTI5YmVmYmQzYjkzZDA2NTc0MjEwMTM0NzYxYWNlNTBjMjBmLi45Y2Y3ZDU2YzA2
MzIyNzc3MDAxN2FlODViZGI2MjU1YjMwYmNjNWY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2VHcm91cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAu
Y3BwCkBAIC0xMDksOCArMTA5LDggQEAgdm9pZCBQYWdlR3JvdXA6OnJlbW92ZVBhZ2UoUGFnZSYg
cGFnZSkKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiB2b2lkIFBhZ2VHcm91cDo6Y2FwdGlvblBy
ZWZlcmVuY2VzQ2hhbmdlZCgpCiB7Ci0gICAgZm9yIChhdXRvIGl0ID0gbV9wYWdlcy5iZWdpbigp
LCBlbmQgPSBtX3BhZ2VzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICgqaXQpLT5j
YXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkKCk7CisgICAgZm9yIChhdXRvJiBwYWdlIDogbV9wYWdl
cykKKyAgICAgICAgcGFnZS0+Y2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZCgpOwogICAgIFBhZ2VD
YWNoZTo6c2luZ2xldG9uKCkubWFya1BhZ2VzRm9yQ2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZCgp
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cExvYWREZWZl
cnJlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cExvYWREZWZlcnJlci5jcHAK
aW5kZXggYjVmMWNhMzQxYzgyMTQ2NzI3ZmNmNWUxZWQxZmQwM2EyNzAwMDhiMy4uMzUyM2VkYTQ2
MmU0M2JmY2Q1YTRiNzE3NGRkN2IzYzA2NmU2M2NiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUGFnZUdyb3VwTG9hZERlZmVycmVyLmNwcApAQCAtMzMsMTEgKzMzLDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBQYWdlR3JvdXBMb2FkRGVmZXJyZXI6OlBhZ2VHcm91cExvYWREZWZlcnJl
cihQYWdlJiBwYWdlLCBib29sIGRlZmVyU2VsZikKIHsKLSAgICBjb25zdCBIYXNoU2V0PFBhZ2Uq
PiYgcGFnZXMgPSBwYWdlLmdyb3VwKCkucGFnZXMoKTsKLQotICAgIEhhc2hTZXQ8UGFnZSo+Ojpj
b25zdF9pdGVyYXRvciBlbmQgPSBwYWdlcy5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8UGFnZSo+
Ojpjb25zdF9pdGVyYXRvciBpdCA9IHBhZ2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICBQYWdlKiBvdGhlclBhZ2UgPSAqaXQ7CisgICAgZm9yIChhdXRvJiBvdGhlclBhZ2Ug
OiBwYWdlLmdyb3VwKCkucGFnZXMoKSkgewogICAgICAgICBpZiAoKGRlZmVyU2VsZiB8fCBvdGhl
clBhZ2UgIT0gJnBhZ2UpKSB7CiAgICAgICAgICAgICBpZiAoIW90aGVyUGFnZS0+ZGVmZXJzTG9h
ZGluZygpKSB7CiAgICAgICAgICAgICAgICAgbV9kZWZlcnJlZEZyYW1lcy5hcHBlbmQoJm90aGVy
UGFnZS0+bWFpbkZyYW1lKCkpOwpAQCAtNTAsMTYgKzQ2LDE2IEBAIFBhZ2VHcm91cExvYWREZWZl
cnJlcjo6UGFnZUdyb3VwTG9hZERlZmVycmVyKFBhZ2UmIHBhZ2UsIGJvb2wgZGVmZXJTZWxmKQog
ICAgICAgICB9CiAgICAgfQogCi0gICAgc2l6ZV90IGNvdW50ID0gbV9kZWZlcnJlZEZyYW1lcy5z
aXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAgICBp
ZiAoUGFnZSogcGFnZSA9IG1fZGVmZXJyZWRGcmFtZXNbaV0tPnBhZ2UoKSkKKyAgICBmb3IgKGF1
dG8mIGRlZmVycmVkRnJhbWUgOiBtX2RlZmVycmVkRnJhbWVzKSB7CisgICAgICAgIGlmIChQYWdl
KiBwYWdlID0gZGVmZXJyZWRGcmFtZS0+cGFnZSgpKQogICAgICAgICAgICAgcGFnZS0+c2V0RGVm
ZXJzTG9hZGluZyh0cnVlKTsKKyAgICB9CiB9CiAKIFBhZ2VHcm91cExvYWREZWZlcnJlcjo6flBh
Z2VHcm91cExvYWREZWZlcnJlcigpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Rl
ZmVycmVkRnJhbWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChQYWdlKiBwYWdlID0gbV9k
ZWZlcnJlZEZyYW1lc1tpXS0+cGFnZSgpKSB7CisgICAgZm9yIChhdXRvJiBkZWZlcnJlZEZyYW1l
IDogbV9kZWZlcnJlZEZyYW1lcykgeworICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGRlZmVycmVk
RnJhbWUtPnBhZ2UoKSkgewogICAgICAgICAgICAgcGFnZS0+c2V0RGVmZXJzTG9hZGluZyhmYWxz
ZSk7CiAKICAgICAgICAgICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJnBhZ2UtPm1haW5GcmFtZSgp
OyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAppbmRleCA2ZTM4YjYyOWIyOTMxZjFjMjVkYTUzMWVj
ZmRlYjEyOWVkMDY4MTYwLi5lODE0MWNiNmI0YTM3NDcyMGRiMGVkMTc5MDdhMGE1MjJlZDAyNjAx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcApAQCAtMjIxLDggKzIyMSw3
IEBAIHZvaWQgUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUZyYW1lKEZyYW1lKiBmcmFtZSkKICAg
ICBtX3Jlc291cmNlcy0+YXBwZW5kKFJlc291cmNlKHVybCwgZG9jdW1lbnQtPnN1Z2dlc3RlZE1J
TUVUeXBlKCksIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGZyYW1lSFRNTC5kYXRhKCksIGZyYW1lSFRN
TC5sZW5ndGgoKSkpKTsKICAgICBtX3Jlc291cmNlVVJMcy5hZGQodXJsKTsKIAotICAgIGZvciAo
VmVjdG9yPE5vZGUqPjo6aXRlcmF0b3IgaXRlciA9IG5vZGVzLmJlZ2luKCk7IGl0ZXIgIT0gbm9k
ZXMuZW5kKCk7ICsraXRlcikgewotICAgICAgICBOb2RlKiBub2RlID0gKml0ZXI7CisgICAgZm9y
IChhdXRvJiBub2RlIDogbm9kZXMpIHsKICAgICAgICAgaWYgKCFpczxFbGVtZW50Pigqbm9kZSkp
CiAgICAgICAgICAgICBjb250aW51ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9QZXJmb3JtYW5jZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlLmNwcApp
bmRleCBiNjM5OTExMTU0MjQ5NDNjNjZmMjU1ZmMyYzUxMThkNmQ4OGYwNDE2Li42NDg5NmI5YWM3
MzIwOGExYzE1MjA4MGZmMTFhNzlkYjU2NTlmN2VkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1BlcmZvcm1hbmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1h
bmNlLmNwcApAQCAtMTE4LDggKzExOCw4IEBAIFBhc3NSZWZQdHI8UGVyZm9ybWFuY2VFbnRyeUxp
c3Q+IFBlcmZvcm1hbmNlOjp3ZWJraXRHZXRFbnRyaWVzQnlUeXBlKGNvbnN0IFN0cmluCiAKICNp
ZiBFTkFCTEUoUkVTT1VSQ0VfVElNSU5HKQogICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShlbnRy
eVR5cGUsICJyZXNvdXJjZSIpKQotICAgICAgICBmb3IgKFZlY3RvcjxSZWZQdHI8UGVyZm9ybWFu
Y2VFbnRyeT4+Ojpjb25zdF9pdGVyYXRvciByZXNvdXJjZSA9IG1fcmVzb3VyY2VUaW1pbmdCdWZm
ZXIuYmVnaW4oKTsgcmVzb3VyY2UgIT0gbV9yZXNvdXJjZVRpbWluZ0J1ZmZlci5lbmQoKTsgKyty
ZXNvdXJjZSkKLSAgICAgICAgICAgIGVudHJpZXMtPmFwcGVuZCgqcmVzb3VyY2UpOworICAgICAg
ICBmb3IgKGF1dG8mIHJlc291cmNlIDogbV9yZXNvdXJjZVRpbWluZ0J1ZmZlcikKKyAgICAgICAg
ICAgIGVudHJpZXMtPmFwcGVuZChyZXNvdXJjZSk7CiAjZW5kaWYgLy8gRU5BQkxFKFJFU09VUkNF
X1RJTUlORykKIAogI2lmIEVOQUJMRShVU0VSX1RJTUlORykKQEAgLTE0MSw5ICsxNDEsMTAgQEAg
UGFzc1JlZlB0cjxQZXJmb3JtYW5jZUVudHJ5TGlzdD4gUGVyZm9ybWFuY2U6OndlYmtpdEdldEVu
dHJpZXNCeU5hbWUoY29uc3QgU3RyaW4KIAogI2lmIEVOQUJMRShSRVNPVVJDRV9USU1JTkcpCiAg
ICAgaWYgKGVudHJ5VHlwZS5pc051bGwoKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShlbnRyeVR5cGUs
ICJyZXNvdXJjZSIpKQotICAgICAgICBmb3IgKFZlY3RvcjxSZWZQdHI8UGVyZm9ybWFuY2VFbnRy
eT4+Ojpjb25zdF9pdGVyYXRvciByZXNvdXJjZSA9IG1fcmVzb3VyY2VUaW1pbmdCdWZmZXIuYmVn
aW4oKTsgcmVzb3VyY2UgIT0gbV9yZXNvdXJjZVRpbWluZ0J1ZmZlci5lbmQoKTsgKytyZXNvdXJj
ZSkKLSAgICAgICAgICAgIGlmICgoKnJlc291cmNlKS0+bmFtZSgpID09IG5hbWUpCi0gICAgICAg
ICAgICAgICAgZW50cmllcy0+YXBwZW5kKCpyZXNvdXJjZSk7CisgICAgICAgIGZvciAoYXV0byYg
cmVzb3VyY2UgOiBtX3Jlc291cmNlVGltaW5nQnVmZmVyKSB7CisgICAgICAgICAgICBpZiAocmVz
b3VyY2UtPm5hbWUoKSA9PSBuYW1lKQorICAgICAgICAgICAgICAgIGVudHJpZXMtPmFwcGVuZChy
ZXNvdXJjZSk7CisgICAgICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoUkVTT1VSQ0VfVElNSU5HKQog
CiAjaWYgRU5BQkxFKFVTRVJfVElNSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9QZXJmb3JtYW5jZVJlc291cmNlVGltaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGVy
Zm9ybWFuY2VSZXNvdXJjZVRpbWluZy5jcHAKaW5kZXggOWM5N2NjMDFjNmY5MjdiNjc1NTlmODQ5
ZGI0NmRkYjZmYjBmYTYyNC4uYTQ2YWMyNDFlNTcwMGI5ZmFjMDQ5M2M0ODIwY2I2NWZiNTNmMDQ5
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZVJlc291cmNlVGlt
aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlUmVzb3VyY2VUaW1p
bmcuY3BwCkBAIC02OCw5ICs2OCwxMCBAQCBzdGF0aWMgYm9vbCBwYXNzZXNUaW1pbmdBbGxvd0No
ZWNrKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBEb2N1bWVudCogcgogICAgIGNv
bnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4gPSByZXF1ZXN0aW5nRG9jdW1lbnQtPnNlY3VyaXR5
T3JpZ2luKCktPnRvU3RyaW5nKCk7CiAgICAgVmVjdG9yPFN0cmluZz4gdGltaW5nQWxsb3dPcmln
aW5zOwogICAgIHRpbWluZ0FsbG93T3JpZ2luU3RyaW5nLnNwbGl0KCcgJywgdGltaW5nQWxsb3dP
cmlnaW5zKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRpbWluZ0FsbG93T3JpZ2lucy5z
aXplKCk7ICsraSkKLSAgICAgICAgaWYgKHRpbWluZ0FsbG93T3JpZ2luc1tpXSA9PSBzZWN1cml0
eU9yaWdpbikKKyAgICBmb3IgKGF1dG8mIG9yaWdpbiA6IHRpbWluZ0FsbG93T3JpZ2lucykgewor
ICAgICAgICBpZiAob3JpZ2luID09IHNlY3VyaXR5T3JpZ2luKQogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQogCiAgICAgcmV0dXJuIGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZVVzZXJUaW1pbmcuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9QZXJmb3JtYW5jZVVzZXJUaW1pbmcuY3BwCmluZGV4IDFiOWU1NzY4N2M4OGE3MTgwM2Q2
NDYyNTQ3YzMwZjNhNjJiM2NhMGYuLjA4NzE3NWFhMDBiMDRlZDRlZjYwNTU0OThjZjQ5ZDkyNjMz
ZGFiZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VVc2VyVGlt
aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlVXNlclRpbWluZy5j
cHAKQEAgLTE2NSw4ICsxNjUsOCBAQCBzdGF0aWMgVmVjdG9yPFJlZlB0cjxQZXJmb3JtYW5jZUVu
dHJ5PiA+IGNvbnZlcnRUb0VudHJ5U2VxdWVuY2UoY29uc3QgUGVyZm9ybWFuYwogewogICAgIFZl
Y3RvcjxSZWZQdHI8UGVyZm9ybWFuY2VFbnRyeT4gPiBlbnRyaWVzOwogCi0gICAgZm9yIChQZXJm
b3JtYW5jZUVudHJ5TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHBlcmZvcm1hbmNlRW50cnlNYXAu
YmVnaW4oKTsgaXQgIT0gcGVyZm9ybWFuY2VFbnRyeU1hcC5lbmQoKTsgKytpdCkKLSAgICAgICAg
ZW50cmllcy5hcHBlbmRWZWN0b3IoaXQtPnZhbHVlKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGVu
dHJ5IDogcGVyZm9ybWFuY2VFbnRyeU1hcC52YWx1ZXMoKSkKKyAgICAgICAgZW50cmllcy5hcHBl
bmRWZWN0b3IoZW50cnkpOwogCiAgICAgcmV0dXJuIGVudHJpZXM7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5UG9saWN5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvU2VjdXJpdHlQb2xpY3kuY3BwCmluZGV4IDU4MWI1Y2JmZWFlNzVkNWQ1MjVkZWRlMjQ5YWUw
Yjg0OTkyM2Q1YzEuLmUzOTgxNGI0NDQ0ZmVhMzgzMGEwZjBjMzFkNDBmZTM1ZjExNDk0MDQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlQb2xpY3kuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlQb2xpY3kuY3BwCkBAIC0xMTEsMTAgKzExMSwxMCBA
QCBib29sIFNlY3VyaXR5UG9saWN5OjphbGxvd1N1YnN0aXR1dGVEYXRhQWNjZXNzVG9Mb2NhbCgp
CiBib29sIFNlY3VyaXR5UG9saWN5Ojppc0FjY2Vzc1doaXRlTGlzdGVkKGNvbnN0IFNlY3VyaXR5
T3JpZ2luKiBhY3RpdmVPcmlnaW4sIGNvbnN0IFNlY3VyaXR5T3JpZ2luKiB0YXJnZXRPcmlnaW4p
CiB7CiAgICAgaWYgKE9yaWdpbkFjY2Vzc1doaXRlTGlzdCogbGlzdCA9IG9yaWdpbkFjY2Vzc01h
cCgpLmdldChhY3RpdmVPcmlnaW4tPnRvU3RyaW5nKCkpKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbGlzdC0+c2l6ZSgpOyAgKytpKSB7Ci0gICAgICAgICAgIGlmIChsaXN0LT5h
dChpKS5tYXRjaGVzT3JpZ2luKCp0YXJnZXRPcmlnaW4pKQotICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgfQorICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogKmxpc3QpIHsKKyAg
ICAgICAgICAgIGlmIChlbnRyeS5tYXRjaGVzT3JpZ2luKCp0YXJnZXRPcmlnaW4pKQorICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBmYWxz
ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlckNvbnRlbnRVUkxQYXR0
ZXJuLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlckNvbnRlbnRVUkxQYXR0ZXJuLmNwcApp
bmRleCBkZjc3MDZmZTRhMDk0ZWE1NjNjZGJjZTNlNmQzOTA0NDI3NjMwOTM1Li4yZWExOGVjNzVi
YTBkODA5ZDc2NWExYjQ4YTM2NjZjOWNlOWY5OTU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1VzZXJDb250ZW50VVJMUGF0dGVybi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9Vc2VyQ29udGVudFVSTFBhdHRlcm4uY3BwCkBAIC0zNyw5ICszNyw4IEBAIGJvb2wgVXNlckNv
bnRlbnRVUkxQYXR0ZXJuOjptYXRjaGVzUGF0dGVybnMoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+CiAgICAgLy8gSWYgdGhlcmUgaXMgbm8gd2hpdGVsaXN0IGF0IGFsbCwgdGhl
biBhbGwgVVJMcyBhcmUgYXNzdW1lZCB0byBiZSBpbiB0aGUgd2hpdGVsaXN0LgogICAgIGJvb2wg
bWF0Y2hlc1doaXRlbGlzdCA9IHdoaXRlbGlzdC5pc0VtcHR5KCk7CiAgICAgaWYgKCFtYXRjaGVz
V2hpdGVsaXN0KSB7Ci0gICAgICAgIHNpemVfdCB3aGl0ZWxpc3RTaXplID0gd2hpdGVsaXN0LnNp
emUoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3aGl0ZWxpc3RTaXplOyArK2kp
IHsKLSAgICAgICAgICAgIFVzZXJDb250ZW50VVJMUGF0dGVybiBjb250ZW50UGF0dGVybih3aGl0
ZWxpc3RbaV0pOworICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogd2hpdGVsaXN0KSB7CisgICAg
ICAgICAgICBVc2VyQ29udGVudFVSTFBhdHRlcm4gY29udGVudFBhdHRlcm4oZW50cnkpOwogICAg
ICAgICAgICAgaWYgKGNvbnRlbnRQYXR0ZXJuLm1hdGNoZXModXJsKSkgewogICAgICAgICAgICAg
ICAgIG1hdGNoZXNXaGl0ZWxpc3QgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAt
NDksOSArNDgsOCBAQCBib29sIFVzZXJDb250ZW50VVJMUGF0dGVybjo6bWF0Y2hlc1BhdHRlcm5z
KGNvbnN0IFVSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPgogCiAgICAgYm9vbCBtYXRjaGVz
QmxhY2tsaXN0ID0gZmFsc2U7CiAgICAgaWYgKCFibGFja2xpc3QuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIHNpemVfdCBibGFja2xpc3RTaXplID0gYmxhY2tsaXN0LnNpemUoKTsKLSAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBibGFja2xpc3RTaXplOyArK2kpIHsKLSAgICAgICAgICAgIFVz
ZXJDb250ZW50VVJMUGF0dGVybiBjb250ZW50UGF0dGVybihibGFja2xpc3RbaV0pOworICAgICAg
ICBmb3IgKGF1dG8mIGVudHJ5IDogYmxhY2tsaXN0KSB7CisgICAgICAgICAgICBVc2VyQ29udGVu
dFVSTFBhdHRlcm4gY29udGVudFBhdHRlcm4oZW50cnkpOwogICAgICAgICAgICAgaWYgKGNvbnRl
bnRQYXR0ZXJuLm1hdGNoZXModXJsKSkgewogICAgICAgICAgICAgICAgIG1hdGNoZXNCbGFja2xp
c3QgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9XaW5kb3dGZWF0dXJlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1dpbmRv
d0ZlYXR1cmVzLmNwcAppbmRleCAwODI5ODg3NDQ2ZjE1YTFlZmVmYjJlNzk4NDBlOGJjOTUyZWQx
YzJjLi5iMmU3OTcwNGIyMzZmNzE1NmJhOGFmYzFiOWI1MmQyOGIyMTVhOGIyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1dpbmRvd0ZlYXR1cmVzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1dpbmRvd0ZlYXR1cmVzLmNwcApAQCAtMjQwLDEwICsyNDAsNyBAQCB2b2lkIFdp
bmRvd0ZlYXR1cmVzOjpwYXJzZURpYWxvZ0ZlYXR1cmVzKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBE
aWFsb2dGZWF0dXJlc01hcAogewogICAgIFZlY3RvcjxTdHJpbmc+IHZlY3RvcjsKICAgICBzdHJp
bmcuc3BsaXQoJzsnLCB2ZWN0b3IpOwotICAgIHNpemVfdCBzaXplID0gdmVjdG9yLnNpemUoKTsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBjb25zdCBT
dHJpbmcmIGZlYXR1cmVTdHJpbmcgPSB2ZWN0b3JbaV07Ci0KKyAgICBmb3IgKGNvbnN0IGF1dG8m
IGZlYXR1cmVTdHJpbmcgOiB2ZWN0b3IpIHsKICAgICAgICAgc2l6ZV90IHNlcGFyYXRvclBvc2l0
aW9uID0gZmVhdHVyZVN0cmluZy5maW5kKCc9Jyk7CiAgICAgICAgIHNpemVfdCBjb2xvblBvc2l0
aW9uID0gZmVhdHVyZVN0cmluZy5maW5kKCc6Jyk7CiAgICAgICAgIGlmIChzZXBhcmF0b3JQb3Np
dGlvbiAhPSBub3RGb3VuZCAmJiBjb2xvblBvc2l0aW9uICE9IG5vdEZvdW5kKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmNwcApp
bmRleCBjNTQ3NjIzNmIzMTJiY2VhYTMzMzNmY2QwZTBjYjQ0MWUzM2IwMjAzLi5hNGM1ODIyMzRj
NGZhODMwOGNiNGJmZjZhODJkOGY0MDc0ZTdkZTRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmNwcApAQCAtMTE1LDkgKzEx
NSw4IEBAIGRvdWJsZSBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlQW5pbWF0aW9u
cyhTZXRDaGFuZ2VkIGNhbGxTZXRDaGFuZ2VkLyoKICAgICBkb3VibGUgdGltZVRvTmV4dFNlcnZp
Y2UgPSAtMTsKICAgICBib29sIGNhbGxlZFNldENoYW5nZWQgPSBmYWxzZTsKIAotICAgIGF1dG8g
ZW5kID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmVuZCgpOwotICAgIGZvciAoYXV0byBpdCA9IG1f
Y29tcG9zaXRlQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
Q29tcG9zaXRlQW5pbWF0aW9uJiBhbmltYXRpb24gPSAqaXQtPnZhbHVlOworICAgIGZvciAoYXV0
byYgY29tcG9zaXRlQW5pbWF0aW9uIDogbV9jb21wb3NpdGVBbmltYXRpb25zKSB7CisgICAgICAg
IENvbXBvc2l0ZUFuaW1hdGlvbiYgYW5pbWF0aW9uID0gKmNvbXBvc2l0ZUFuaW1hdGlvbi52YWx1
ZTsKICAgICAgICAgaWYgKCFhbmltYXRpb24uaXNTdXNwZW5kZWQoKSAmJiBhbmltYXRpb24uaGFz
QW5pbWF0aW9ucygpKSB7CiAgICAgICAgICAgICBkb3VibGUgdCA9IGFuaW1hdGlvbi50aW1lVG9O
ZXh0U2VydmljZSgpOwogICAgICAgICAgICAgaWYgKHQgIT0gLTEgJiYgKHQgPCB0aW1lVG9OZXh0
U2VydmljZSB8fCB0aW1lVG9OZXh0U2VydmljZSA9PSAtMSkpCkBAIC0xMjUsNyArMTI0LDcgQEAg
ZG91YmxlIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVBbmltYXRpb25zKFNldENo
YW5nZWQgY2FsbFNldENoYW5nZWQvKgogICAgICAgICAgICAgaWYgKCF0aW1lVG9OZXh0U2Vydmlj
ZSkgewogICAgICAgICAgICAgICAgIGlmIChjYWxsU2V0Q2hhbmdlZCAhPSBDYWxsU2V0Q2hhbmdl
ZCkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgRWxlbWVudCog
ZWxlbWVudCA9IGl0LT5rZXktPmVsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICBFbGVtZW50KiBl
bGVtZW50ID0gY29tcG9zaXRlQW5pbWF0aW9uLmtleS0+ZWxlbWVudCgpOwogICAgICAgICAgICAg
ICAgIEFTU0VSVChlbGVtZW50KTsKICAgICAgICAgICAgICAgICBBU1NFUlQoIWVsZW1lbnQtPmRv
Y3VtZW50KCkuaW5QYWdlQ2FjaGUoKSk7CiAgICAgICAgICAgICAgICAgZWxlbWVudC0+c2V0TmVl
ZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CkBAIC0xOTIsMTcgKzE5MSwxNiBA
QCB2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpmaXJlRXZlbnRzQW5kVXBkYXRlU3R5
bGUoKQogCiAgICAgLy8gZmlyZSBhbGwgdGhlIGV2ZW50cwogICAgIFZlY3RvcjxFdmVudFRvRGlz
cGF0Y2g+IGV2ZW50c1RvRGlzcGF0Y2ggPSBXVEY6Om1vdmUobV9ldmVudHNUb0Rpc3BhdGNoKTsK
LSAgICBWZWN0b3I8RXZlbnRUb0Rpc3BhdGNoPjo6Y29uc3RfaXRlcmF0b3IgZXZlbnRzVG9EaXNw
YXRjaEVuZCA9IGV2ZW50c1RvRGlzcGF0Y2guZW5kKCk7Ci0gICAgZm9yIChWZWN0b3I8RXZlbnRU
b0Rpc3BhdGNoPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBldmVudHNUb0Rpc3BhdGNoLmJlZ2luKCk7
IGl0ICE9IGV2ZW50c1RvRGlzcGF0Y2hFbmQ7ICsraXQpIHsKLSAgICAgICAgRWxlbWVudCogZWxl
bWVudCA9IGl0LT5lbGVtZW50LmdldCgpOwotICAgICAgICBpZiAoaXQtPmV2ZW50VHlwZSA9PSBl
dmVudE5hbWVzKCkudHJhbnNpdGlvbmVuZEV2ZW50KQotICAgICAgICAgICAgZWxlbWVudC0+ZGlz
cGF0Y2hFdmVudChUcmFuc2l0aW9uRXZlbnQ6OmNyZWF0ZShpdC0+ZXZlbnRUeXBlLCBpdC0+bmFt
ZSwgaXQtPmVsYXBzZWRUaW1lLCBQc2V1ZG9FbGVtZW50Ojpwc2V1ZG9FbGVtZW50TmFtZUZvckV2
ZW50cyhlbGVtZW50LT5wc2V1ZG9JZCgpKSkpOworICAgIGZvciAoYXV0byYgZXZlbnQgOiBldmVu
dHNUb0Rpc3BhdGNoKSB7CisgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBldmVudC5lbGVtZW50
LmdldCgpOworICAgICAgICBpZiAoZXZlbnQuZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS50cmFu
c2l0aW9uZW5kRXZlbnQpCisgICAgICAgICAgICBlbGVtZW50LT5kaXNwYXRjaEV2ZW50KFRyYW5z
aXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50LmV2ZW50VHlwZSwgZXZlbnQubmFtZSwgZXZlbnQuZWxh
cHNlZFRpbWUsIFBzZXVkb0VsZW1lbnQ6OnBzZXVkb0VsZW1lbnROYW1lRm9yRXZlbnRzKGVsZW1l
bnQtPnBzZXVkb0lkKCkpKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGVsZW1lbnQtPmRp
c3BhdGNoRXZlbnQoQW5pbWF0aW9uRXZlbnQ6OmNyZWF0ZShpdC0+ZXZlbnRUeXBlLCBpdC0+bmFt
ZSwgaXQtPmVsYXBzZWRUaW1lKSk7CisgICAgICAgICAgICBlbGVtZW50LT5kaXNwYXRjaEV2ZW50
KEFuaW1hdGlvbkV2ZW50OjpjcmVhdGUoZXZlbnQuZXZlbnRUeXBlLCBldmVudC5uYW1lLCBldmVu
dC5lbGFwc2VkVGltZSkpOwogICAgIH0KIAotICAgIGZvciAodW5zaWduZWQgaSA9IDAsIHNpemUg
PSBtX2VsZW1lbnRDaGFuZ2VzVG9EaXNwYXRjaC5zaXplKCk7IGkgPCBzaXplOyArK2kpCi0gICAg
ICAgIG1fZWxlbWVudENoYW5nZXNUb0Rpc3BhdGNoW2ldLT5zZXROZWVkc1N0eWxlUmVjYWxjKFN5
bnRoZXRpY1N0eWxlQ2hhbmdlKTsKKyAgICBmb3IgKGF1dG8mIGNoYW5nZSA6IG1fZWxlbWVudENo
YW5nZXNUb0Rpc3BhdGNoKQorICAgICAgICBjaGFuZ2UtPnNldE5lZWRzU3R5bGVSZWNhbGMoU3lu
dGhldGljU3R5bGVDaGFuZ2UpOwogCiAgICAgbV9lbGVtZW50Q2hhbmdlc1RvRGlzcGF0Y2guY2xl
YXIoKTsKIApAQCAtMzExLDkgKzMwOSw5IEBAIHZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZh
dGU6OnN1c3BlbmRBbmltYXRpb25zRm9yRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50CiB7CiAg
ICAgQW5pbWF0aW9uUHJpdmF0ZVVwZGF0ZUJsb2NrIHVwZGF0ZUJsb2NrKCp0aGlzKTsKIAotICAg
IGZvciAoYXV0byBpdCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5iZWdpbigpLCBlbmQgPSBtX2Nv
bXBvc2l0ZUFuaW1hdGlvbnMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAo
Jml0LT5rZXktPmRvY3VtZW50KCkgPT0gZG9jdW1lbnQpCi0gICAgICAgICAgICBpdC0+dmFsdWUt
PnN1c3BlbmRBbmltYXRpb25zKCk7CisgICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2NvbXBv
c2l0ZUFuaW1hdGlvbnMpIHsKKyAgICAgICAgaWYgKCZhbmltYXRpb24ua2V5LT5kb2N1bWVudCgp
ID09IGRvY3VtZW50KQorICAgICAgICAgICAgYW5pbWF0aW9uLnZhbHVlLT5zdXNwZW5kQW5pbWF0
aW9ucygpOwogICAgIH0KIAogICAgIHVwZGF0ZUFuaW1hdGlvblRpbWVyKCk7CkBAIC0zMjMsOSAr
MzIxLDkgQEAgdm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cmVzdW1lQW5pbWF0aW9u
c0ZvckRvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCkKIHsKICAgICBBbmltYXRpb25Qcml2YXRl
VXBkYXRlQmxvY2sgdXBkYXRlQmxvY2soKnRoaXMpOwogCi0gICAgZm9yIChhdXRvIGl0ID0gbV9j
b21wb3NpdGVBbmltYXRpb25zLmJlZ2luKCksIGVuZCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5l
bmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmICgmaXQtPmtleS0+ZG9jdW1lbnQo
KSA9PSBkb2N1bWVudCkKLSAgICAgICAgICAgIGl0LT52YWx1ZS0+cmVzdW1lQW5pbWF0aW9ucygp
OworICAgIGZvciAoYXV0byYgYW5pbWF0aW9uIDogbV9jb21wb3NpdGVBbmltYXRpb25zKSB7Cisg
ICAgICAgIGlmICgmYW5pbWF0aW9uLmtleS0+ZG9jdW1lbnQoKSA9PSBkb2N1bWVudCkKKyAgICAg
ICAgICAgIGFuaW1hdGlvbi52YWx1ZS0+cmVzdW1lQW5pbWF0aW9ucygpOwogICAgIH0KIAogICAg
IHVwZGF0ZUFuaW1hdGlvblRpbWVyKCk7CkBAIC00MzUsOSArNDMzLDkgQEAgdW5zaWduZWQgQW5p
bWF0aW9uQ29udHJvbGxlclByaXZhdGU6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhEb2N1bWVu
dCogZG9jdW1lbnQKIHsKICAgICB1bnNpZ25lZCBjb3VudCA9IDA7CiAgICAgCi0gICAgZm9yIChh
dXRvIGl0ID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmJlZ2luKCksIGVuZCA9IG1fY29tcG9zaXRl
QW5pbWF0aW9ucy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmICgmaXQtPmtl
eS0+ZG9jdW1lbnQoKSA9PSBkb2N1bWVudCkKLSAgICAgICAgICAgIGNvdW50ICs9IGl0LT52YWx1
ZS0+bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCk7CisgICAgZm9yIChhdXRvJiBhbmltYXRpb24g
OiBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMpIHsKKyAgICAgICAgaWYgKCZhbmltYXRpb24ua2V5LT5k
b2N1bWVudCgpID09IGRvY3VtZW50KQorICAgICAgICAgICAgY291bnQgKz0gYW5pbWF0aW9uLnZh
bHVlLT5udW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKTsKICAgICB9CiAKICAgICByZXR1cm4gY291
bnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0
eUFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0
eUFuaW1hdGlvbi5jcHAKaW5kZXggYThkYmJkMGQyMjExZjRmZDFmOTg1OTdjODMzY2Y3OGIyY2Ri
NjMwYi4uOTMwNTdkYjRlOTc4M2IwODcxNzJlYTM4MGY1ODc2OThiODkyMzg5MyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9u
LmNwcApAQCAtMTA0NCw5ICsxMDQ0LDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGVx
dWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0CiAg
ICAgewotICAgICAgICBWZWN0b3I8QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSo+Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBtX3Byb3BlcnR5V3JhcHBlcnMuZW5kKCk7Ci0gICAgICAgIGZvciAo
VmVjdG9yPEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqPjo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX3Byb3BlcnR5V3JhcHBlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
ICAgICBpZiAoISgqaXQpLT5lcXVhbHMoYSwgYikpCisgICAgICAgIGZvciAoYXV0byYgd3JhcHBl
ciA6IG1fcHJvcGVydHlXcmFwcGVycykgeworICAgICAgICAgICAgaWYgKCF3cmFwcGVyLT5lcXVh
bHMoYSwgYikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAg
ICAgIHJldHVybiB0cnVlOwpAQCAtMTA1NCw5ICsxMDUzLDggQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCB2b2lkIGJsZW5kKGNvbnN0IEFuaW1hdGlvbkJhc2UqIGFuaW0sIFJlbmRlclN0eWxlKiBk
c3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHBy
b2dyZXNzKSBjb25zdAogICAgIHsKLSAgICAgICAgVmVjdG9yPEFuaW1hdGlvblByb3BlcnR5V3Jh
cHBlckJhc2UqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wcm9wZXJ0eVdyYXBwZXJzLmVuZCgp
OwotICAgICAgICBmb3IgKFZlY3RvcjxBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKj46OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9wcm9wZXJ0eVdyYXBwZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKLSAgICAgICAgICAgICgqaXQpLT5ibGVuZChhbmltLCBkc3QsIGEsIGIsIHByb2dyZXNz
KTsKKyAgICAgICAgZm9yIChhdXRvJiB3cmFwcGVyIDogbV9wcm9wZXJ0eVdyYXBwZXJzKQorICAg
ICAgICAgICAgd3JhcHBlci0+YmxlbmQoYW5pbSwgZHN0LCBhLCBiLCBwcm9ncmVzcyk7CiAgICAg
fQogCiAgICAgY29uc3QgVmVjdG9yPEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqPiYgcHJv
cGVydHlXcmFwcGVycygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlXcmFwcGVyczsgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXN5bmNTY3JvbGxpbmdDb29y
ZGluYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGlu
Z0Nvb3JkaW5hdG9yLmNwcAppbmRleCBmN2RiMjAwNjYwOTVkNjY0MzBiNTZlZTZjNWU1NzE4MTU5
ZjcwOTMzLi41NWNiODQyYzNmZTJiNTJhODM5Zjg4YzMzZmY4YTk0MTlmMWU3NmE3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5h
dG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGlu
Z0Nvb3JkaW5hdG9yLmNwcApAQCAtNjcsOCArNjcsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0
U3RhdGVTY3JvbGxpbmdOb2RlU25hcE9mZnNldHNBc0Zsb2F0KFNjcm9sbGluZ1N0YXRlU2Nyb2xs
aQogICAgIC8vIEZJWE1FOiBJbmNvcnBvcmF0ZSBjdXJyZW50IHBhZ2Ugc2NhbGUgZmFjdG9yIGlu
IHNuYXBwaW5nIHRvIGRldmljZSBwaXhlbC4gUGVyaGFwcyB3ZSBzaG91bGQganVzdCBjb252ZXJ0
IHRvIGZsb2F0IGhlcmUgYW5kIGxldCBVSSBwcm9jZXNzIGRvIHRoZSBwaXhlbCBzbmFwcGluZz8K
ICAgICBWZWN0b3I8ZmxvYXQ+IHNuYXBPZmZzZXRzQXNGbG9hdDsKICAgICBzbmFwT2Zmc2V0c0Fz
RmxvYXQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzbmFwT2Zmc2V0cy5zaXplKCkpOwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc25hcE9mZnNldHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHNu
YXBPZmZzZXRzQXNGbG9hdC5hcHBlbmQocm91bmRUb0RldmljZVBpeGVsKHNuYXBPZmZzZXRzW2ld
LCBkZXZpY2VTY2FsZUZhY3RvciwgZmFsc2UpKTsKKyAgICBmb3IgKGF1dG8mIG9mZnNldCA6IHNu
YXBPZmZzZXRzKQorICAgICAgICBzbmFwT2Zmc2V0c0FzRmxvYXQuYXBwZW5kKHJvdW5kVG9EZXZp
Y2VQaXhlbChvZmZzZXQsIGRldmljZVNjYWxlRmFjdG9yLCBmYWxzZSkpOwogCiAgICAgaWYgKGF4
aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKQogICAgICAgICBub2RlLnNldEhvcml6
b250YWxTbmFwT2Zmc2V0cyhzbmFwT2Zmc2V0c0FzRmxvYXQpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCmluZGV4IDMz
M2FmYzg3MWE3NTM4ZjZmYjNiZGM0YzNkYmQ0MmIzYWVjZmRhMjkuLjVjNTJiYTBkNjM0ZDI1YWQ0
MDEzNjE5ZWRiYjE1MmIxZGVmMDViMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAKQEAgLTEyOCw4ICsxMjgsNyBA
QCBSZWdpb24gU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmFic29sdXRlTm9uRmFzdFNjcm9sbGFibGVS
ZWdpb25Gb3JGcmFtZShjb25zdCBGcmFtZQogICAgIC8vIHRvIG5vdCBhc2sgZm9yIHJlZ2lvbnMg
YXQgYmFkIHRpbWVzLgogCiAgICAgaWYgKGNvbnN0IEZyYW1lVmlldzo6U2Nyb2xsYWJsZUFyZWFT
ZXQqIHNjcm9sbGFibGVBcmVhcyA9IGZyYW1lVmlldy0+c2Nyb2xsYWJsZUFyZWFzKCkpIHsKLSAg
ICAgICAgZm9yIChGcmFtZVZpZXc6OlNjcm9sbGFibGVBcmVhU2V0Ojpjb25zdF9pdGVyYXRvciBp
dCA9IHNjcm9sbGFibGVBcmVhcy0+YmVnaW4oKSwgZW5kID0gc2Nyb2xsYWJsZUFyZWFzLT5lbmQo
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBTY3JvbGxhYmxlQXJlYSogc2Nyb2xs
YWJsZUFyZWEgPSAqaXQ7CisgICAgICAgIGZvciAoYXV0byYgc2Nyb2xsYWJsZUFyZWEgOiAqc2Ny
b2xsYWJsZUFyZWFzKSB7CiAgICAgICAgICAgICAvLyBDb21wb3NpdGVkIHNjcm9sbGFibGUgYXJl
YXMgY2FuIGJlIHNjcm9sbGVkIG9mZiB0aGUgbWFpbiB0aHJlYWQuCiAgICAgICAgICAgICBpZiAo
c2Nyb2xsYWJsZUFyZWEtPnVzZXNBc3luY1Njcm9sbGluZygpKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwpAQCAtMzEzLDExICszMTIsMTAgQEAgYm9vbCBTY3JvbGxpbmdDb29yZGluYXRvcjo6
aGFzVmlzaWJsZVNsb3dSZXBhaW50Vmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMoY29uc3QKICAg
ICBpZiAoIXZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBmb3IgKEZyYW1lVmlldzo6Vmlld3BvcnRDb25zdHJhaW5lZE9iamVjdFNldDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSB2aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cy0+YmVnaW4oKSwgZW5k
ID0gdmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMtPmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
LSAgICAgICAgUmVuZGVyT2JqZWN0JiB2aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0ID0gKippdDsK
LSAgICAgICAgaWYgKCFpczxSZW5kZXJCb3hNb2RlbE9iamVjdD4odmlld3BvcnRDb25zdHJhaW5l
ZE9iamVjdCkgfHwgIXZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3QuaGFzTGF5ZXIoKSkKKyAgICBm
b3IgKGF1dG8mIHZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3QgOiAqdmlld3BvcnRDb25zdHJhaW5l
ZE9iamVjdHMpIHsKKyAgICAgICAgaWYgKCFpczxSZW5kZXJCb3hNb2RlbE9iamVjdD4oKnZpZXdw
b3J0Q29uc3RyYWluZWRPYmplY3QpIHx8ICF2aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0LT5oYXNM
YXllcigpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIFJlbmRlckxheWVyJiBs
YXllciA9ICpkb3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4odmlld3BvcnRDb25zdHJhaW5l
ZE9iamVjdCkubGF5ZXIoKTsKKyAgICAgICAgUmVuZGVyTGF5ZXImIGxheWVyID0gKmRvd25jYXN0
PFJlbmRlckJveE1vZGVsT2JqZWN0Pigqdmlld3BvcnRDb25zdHJhaW5lZE9iamVjdCkubGF5ZXIo
KTsKICAgICAgICAgLy8gQW55IGV4cGxpY2l0IHJlYXNvbiB0aGF0IGEgZml4ZWQgcG9zaXRpb24g
ZWxlbWVudCBpcyBub3QgY29tcG9zaXRlZCBzaG91bGRuJ3QgY2F1c2Ugc2xvdyBzY3JvbGxpbmcu
CiAgICAgICAgIGlmICghbGF5ZXIuaXNDb21wb3NpdGVkKCkgJiYgbGF5ZXIudmlld3BvcnRDb25z
dHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFzb24oKSA9PSBSZW5kZXJMYXllcjo6Tm9Ob3RDb21wb3Np
dGVkUmVhc29uKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>253951</attachid>
            <date>2015-05-29 23:49:10 -0700</date>
            <delta_ts>2015-06-03 13:53:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-145455-20150530154855.patch</filename>
            <type>text/plain</type>
            <size>56031</size>
            <attacher name="Hunseop Jeong">hs85.jeong</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg1MDI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDBiNGRkMzUxMTIwYTUy
OTc3MmZkMjJiNDkwMWNlOGU0ZjYyZWE5MS4uYmNjNzU3NDY2OTMyMTU1Y2FjMTA1NjczYTViYWM3
Yzk4NTZlN2U5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk4IEBACisyMDE1LTA1LTI5ICBIdW5z
ZW9wIEplb25nICA8aHM4NS5qZW9uZ0BzYW1zdW5nLmNvbT4KKworICAgICAgICBVc2UgbW9kZXJu
IGZvci1sb29wcyBpbiBXZWJDb3JlL3BhZ2UuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDU0NTUKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBB
ZGxlci4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGJlaGF2aW9yIGNoYW5nZXMuCisKKyAg
ICAgICAgKiBwYWdlL0Nocm9tZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWU6Om5vdGlm
eVBvcHVwT3BlbmluZ09ic2VydmVycyk6CisgICAgICAgICogcGFnZS9Db250ZW50U2VjdXJpdHlQ
b2xpY3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NQU291cmNlTGlzdDo6bWF0Y2hlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1BEaXJlY3RpdmVMaXN0OjpnYXRoZXJSZXBvcnRVUklzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeTo6Y29weVN0YXRlRnJvbSk6Cisg
ICAgICAgIChXZWJDb3JlOjppc0FsbG93ZWRCeUFsbCk6CisgICAgICAgIChXZWJDb3JlOjppc0Fs
bG93ZWRCeUFsbFdpdGhTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjppc0FsbG93ZWRCeUFsbFdp
dGhDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OmlzQWxsb3dlZEJ5QWxsV2l0aFVSTCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3k6OmV2YWxEaXNhYmxlZEVycm9y
TWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3k6OmFsbG93
UGx1Z2luVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3k6OnJl
ZmxlY3RlZFhTU0Rpc3Bvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0
eVBvbGljeTo6Z2F0aGVyUmVwb3J0VVJJcyk6CisgICAgICAgICogcGFnZS9Db250ZXh0TWVudUNv
bnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVyOjpw
b3B1bGF0ZSk6CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RE9NV2luZG93OjpkaXNwYXRjaEFsbFBlbmRpbmdCZWZvcmVVbmxvYWRFdmVudHMpOgorICAg
ICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpkaXNwYXRjaEFsbFBlbmRpbmdVbmxvYWRFdmVudHMp
OgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93Ojp3aWxsRGVzdHJveUNhY2hlZEZyYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6d2lsbERlc3Ryb3lEb2N1bWVudEluRnJhbWUp
OgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93Ojp3aWxsRGV0YWNoRG9jdW1lbnRGcm9tRnJh
bWUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpkaXNjb25uZWN0RE9NV2luZG93UHJv
cGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OnJlY29ubmVjdERPTVdpbmRv
d1Byb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpnZXRNYXRjaGVkQ1NT
UnVsZXMpOgorICAgICAgICAqIHBhZ2UvRGV2aWNlQ29udHJvbGxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpEZXZpY2VDb250cm9sbGVyOjpkaXNwYXRjaERldmljZUV2ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkRldmljZUNvbnRyb2xsZXI6OmZpcmVEZXZpY2VFdmVudCk6CisgICAgICAgICog
cGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjp1
cGRhdGVNb3VzZUV2ZW50VGFyZ2V0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRs
ZXI6OmhhbmRsZVRvdWNoRXZlbnQpOgorICAgICAgICAqIHBhZ2UvRm9jdXNDb250cm9sbGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJvbGxlcjo6c2V0SXNWaXNpYmxlQW5kQWN0
aXZlSW50ZXJuYWwpOgorICAgICAgICAqIHBhZ2UvRnJhbWUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWU6Om9yaWVudGF0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6
aW5qZWN0VXNlclNjcmlwdHNGb3JXb3JsZCk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpzY3JvbGxDb250ZW50c0Zhc3RQYXRoKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2VydmljZVNjcmlwdGVkQW5pbWF0aW9ucyk6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnRyYWNrZWRSZXBhaW50UmVjdHNBc1RleHQp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojp1cGRhdGVXaWRnZXRQb3NpdGlvbnMpOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojpub3RpZnlXaWRnZXRzKToKKyAgICAgICAgKiBw
YWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bmV0d29ya1N0YXRlQ2hhbmdlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlOjpzdHJpbmdUb1ZpZXdNb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OlBhZ2U6OnVwZGF0ZVN0eWxlRm9yQWxsUGFnZXNBZnRlckdsb2JhbENoYW5nZUluRW52aXJv
bm1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6cmVmcmVzaFBsdWdpbnMpOgorICAgICAg
ICAoV2ViQ29yZTo6UGFnZTo6bG9ja0FsbE92ZXJsYXlTY3JvbGxiYXJzVG9IaWRkZW4pOgorICAg
ICAgICAoV2ViQ29yZTo6UGFnZTo6cGx1Z2luVmlld3MpOgorICAgICAgICAoV2ViQ29yZTo6UGFn
ZTo6c3RvcmFnZUJsb2NraW5nU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6
OnNldElzVmlzaWJsZUludGVybmFsKToKKyAgICAgICAgKiBwYWdlL1BhZ2VHcm91cC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6OmNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQpOgor
ICAgICAgICAqIHBhZ2UvUGFnZUdyb3VwTG9hZERlZmVycmVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlBhZ2VHcm91cExvYWREZWZlcnJlcjo6UGFnZUdyb3VwTG9hZERlZmVycmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBhZ2VHcm91cExvYWREZWZlcnJlcjo6flBhZ2VHcm91cExvYWREZWZlcnJl
cik6CisgICAgICAgICogcGFnZS9QYWdlU2VyaWFsaXplci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplRnJhbWUpOgorICAgICAgICAqIHBhZ2UvUGVyZm9y
bWFuY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGVyZm9ybWFuY2U6OndlYmtpdEdldEVudHJp
ZXNCeVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UGVyZm9ybWFuY2U6OndlYmtpdEdldEVudHJp
ZXNCeU5hbWUpOgorICAgICAgICAqIHBhZ2UvUGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpwYXNzZXNUaW1pbmdBbGxvd0NoZWNrKToKKyAgICAgICAgKiBw
YWdlL1BlcmZvcm1hbmNlVXNlclRpbWluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0
VG9FbnRyeVNlcXVlbmNlKToKKyAgICAgICAgKiBwYWdlL1NlY3VyaXR5UG9saWN5LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNlY3VyaXR5UG9saWN5Ojppc0FjY2Vzc1doaXRlTGlzdGVkKToKKyAg
ICAgICAgKiBwYWdlL1VzZXJDb250ZW50VVJMUGF0dGVybi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpVc2VyQ29udGVudFVSTFBhdHRlcm46Om1hdGNoZXNQYXR0ZXJucyk6CisgICAgICAgICogcGFn
ZS9XaW5kb3dGZWF0dXJlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXaW5kb3dGZWF0dXJlczo6
cGFyc2VEaWFsb2dGZWF0dXJlcyk6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vQW5pbWF0aW9u
Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25Db250cm9sbGVyUHJp
dmF0ZTo6dXBkYXRlQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25Db250
cm9sbGVyUHJpdmF0ZTo6ZmlyZUV2ZW50c0FuZFVwZGF0ZVN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpzdXNwZW5kQW5pbWF0aW9uc0ZvckRvY3Vt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpyZXN1
bWVBbmltYXRpb25zRm9yRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29u
dHJvbGxlclByaXZhdGU6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyk6CisgICAgICAgICogcGFn
ZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U2hvcnRoYW5kUHJvcGVydHlXcmFwcGVyOjplcXVhbHMpOgorICAgICAgICAoV2ViQ29yZTo6U2hv
cnRoYW5kUHJvcGVydHlXcmFwcGVyOjpibGVuZCk6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcv
QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRTdGF0
ZVNjcm9sbGluZ05vZGVTbmFwT2Zmc2V0c0FzRmxvYXQpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGlu
Z0Nvb3JkaW5hdG9yOjphYnNvbHV0ZU5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uRm9yRnJhbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6Omhhc1Zpc2libGVTbG93UmVw
YWludFZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzKToKKwogMjAxNS0wNS0yOSAgQW5kcmVhcyBL
bGluZyAgPGFrbGluZ0BhcHBsZS5jb20+CiAKICAgICAgICAgW2lPU10gUmVkdWNlIHRpbGluZyBj
b3ZlcmFnZSB3aGVuIGRvaW5nIGEgcHVyZSBwaW5jaCB6b29tIHdpdGggbm8gcGFubmluZy4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvQ2hyb21lLmNwcAppbmRleCBiZTI4NWZkMWZlYjY5NDcyZTlmNzI1ODIzZjI0MzVjNGU1
OWNlOTYxLi41YjU4OTYxNTMyYzQ5YjlmYWZkMTUzMGM0ZjRkNTNiMzc0MDBhNDk0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9DaHJvbWUuY3BwCkBAIC02MzUsOCArNjM1LDggQEAgdm9pZCBDaHJvbWU6OnVucmVnaXN0
ZXJQb3B1cE9wZW5pbmdPYnNlcnZlcihQb3B1cE9wZW5pbmdPYnNlcnZlciogb2JzZXJ2ZXIpCiB2
b2lkIENocm9tZTo6bm90aWZ5UG9wdXBPcGVuaW5nT2JzZXJ2ZXJzKCkgY29uc3QKIHsKICAgICBj
b25zdCBWZWN0b3I8UG9wdXBPcGVuaW5nT2JzZXJ2ZXIqPiBvYnNlcnZlcnMobV9wb3B1cE9wZW5p
bmdPYnNlcnZlcnMpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JzZXJ2ZXJzLnNpemUo
KTsgKytpKQotICAgICAgICBvYnNlcnZlcnNbaV0tPndpbGxPcGVuUG9wdXAoKTsKKyAgICBmb3Ig
KGF1dG8mIG9ic2VydmVyIDogb2JzZXJ2ZXJzKQorICAgICAgICBvYnNlcnZlci0+d2lsbE9wZW5Q
b3B1cCgpOwogfQogCiB2b2lkIENocm9tZTo6ZGlkQmVnaW5UcmFja2luZ1BvdGVudGlhbExvbmdN
b3VzZVByZXNzKGNvbnN0IEludFBvaW50JiBtb3VzZURvd25Qb3NpdGlvbiwgY29uc3QgSGl0VGVz
dFJlc3VsdCYgaGl0VGVzdFJlc3VsdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
Q29udGVudFNlY3VyaXR5UG9saWN5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGVudFNl
Y3VyaXR5UG9saWN5LmNwcAppbmRleCBkYzkwNzJhYjkxZWQwOTk4ODQ0MWIwOTI2MmZmMDhiOGY3
ZGJlZWIxLi5mMWVkOWFkY2ZlOTlkOTA1MWZiMmRkMDRjZGVkYjM0NDQ5MGQ3MjhkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwCkBAIC0zNDMsOCAr
MzQzLDggQEAgYm9vbCBDU1BTb3VyY2VMaXN0OjptYXRjaGVzKGNvbnN0IFVSTCYgdXJsKQogCiAg
ICAgVVJMIGVmZmVjdGl2ZVVSTCA9IFNlY3VyaXR5T3JpZ2luOjpzaG91bGRVc2VJbm5lclVSTCh1
cmwpID8gU2VjdXJpdHlPcmlnaW46OmV4dHJhY3RJbm5lclVSTCh1cmwpIDogdXJsOwogCi0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2xpc3Quc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYg
KG1fbGlzdFtpXS5tYXRjaGVzKGVmZmVjdGl2ZVVSTCkpCisgICAgZm9yIChhdXRvJiBlbnRyeSA6
IG1fbGlzdCkgeworICAgICAgICBpZiAoZW50cnkubWF0Y2hlcyhlZmZlY3RpdmVVUkwpKQogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0xMTAwLDggKzExMDAsOCBAQCBib29s
IENTUERpcmVjdGl2ZUxpc3Q6OmFsbG93Q29ubmVjdFRvU291cmNlKGNvbnN0IFVSTCYgdXJsLCBD
b250ZW50U2VjdXJpdHlQb2xpYwogCiB2b2lkIENTUERpcmVjdGl2ZUxpc3Q6OmdhdGhlclJlcG9y
dFVSSXMoRE9NU3RyaW5nTGlzdCYgbGlzdCkgY29uc3QKIHsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fcmVwb3J0VVJJcy5zaXplKCk7ICsraSkKLSAgICAgICAgbGlzdC5hcHBlbmQobV9y
ZXBvcnRVUklzW2ldLnN0cmluZygpKTsKKyAgICBmb3IgKGF1dG8mIHVyaSA6IG1fcmVwb3J0VVJJ
cykKKyAgICAgICAgbGlzdC5hcHBlbmQodXJpLnN0cmluZygpKTsKIH0KIAogYm9vbCBDU1BEaXJl
Y3RpdmVMaXN0OjphbGxvd0Zvcm1BY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbnRlbnRTZWN1cml0
eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVzIHJlcG9ydGluZ1N0YXR1cykgY29uc3QKQEAgLTEzNTIs
OCArMTM1Miw4IEBAIENvbnRlbnRTZWN1cml0eVBvbGljeTo6fkNvbnRlbnRTZWN1cml0eVBvbGlj
eSgpCiB2b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeTo6Y29weVN0YXRlRnJvbShjb25zdCBDb250
ZW50U2VjdXJpdHlQb2xpY3kqIG90aGVyKSAKIHsKICAgICBBU1NFUlQobV9wb2xpY2llcy5pc0Vt
cHR5KCkpOwotICAgIGZvciAoQ1NQRGlyZWN0aXZlTGlzdFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IG90aGVyLT5tX3BvbGljaWVzLmJlZ2luKCk7IGl0ZXIgIT0gb3RoZXItPm1fcG9saWNp
ZXMuZW5kKCk7ICsraXRlcikKLSAgICAgICAgZGlkUmVjZWl2ZUhlYWRlcigoKml0ZXIpLT5oZWFk
ZXIoKSwgKCppdGVyKS0+aGVhZGVyVHlwZSgpKTsKKyAgICBmb3IgKGF1dG8mIHBvbGljeSA6IG90
aGVyLT5tX3BvbGljaWVzKQorICAgICAgICBkaWRSZWNlaXZlSGVhZGVyKHBvbGljeS0+aGVhZGVy
KCksIHBvbGljeS0+aGVhZGVyVHlwZSgpKTsKIH0KIAogdm9pZCBDb250ZW50U2VjdXJpdHlQb2xp
Y3k6OmRpZFJlY2VpdmVIZWFkZXIoY29uc3QgU3RyaW5nJiBoZWFkZXIsIEhlYWRlclR5cGUgdHlw
ZSkKQEAgLTE0MDEsOCArMTQwMSw4IEBAIENvbnRlbnRTZWN1cml0eVBvbGljeTo6SGVhZGVyVHlw
ZSBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmRlcHJlY2F0ZWRIZWFkZXJUeXBlKCkKIHRlbXBsYXRl
PGJvb2wgKENTUERpcmVjdGl2ZUxpc3Q6OiphbGxvd2VkKShDb250ZW50U2VjdXJpdHlQb2xpY3k6
OlJlcG9ydGluZ1N0YXR1cykgY29uc3Q+CiBib29sIGlzQWxsb3dlZEJ5QWxsKGNvbnN0IENTUERp
cmVjdGl2ZUxpc3RWZWN0b3ImIHBvbGljaWVzLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9y
dGluZ1N0YXR1cyByZXBvcnRpbmdTdGF0dXMpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBwb2xpY2llcy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoIShwb2xpY2llc1tpXS5nZXQo
KS0+KmFsbG93ZWQpKHJlcG9ydGluZ1N0YXR1cykpCisgICAgZm9yIChhdXRvJiBwb2xpY3kgOiBw
b2xpY2llcykgeworICAgICAgICBpZiAoIShwb2xpY3kuZ2V0KCktPiphbGxvd2VkKShyZXBvcnRp
bmdTdGF0dXMpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTE0MTEsOCArMTQxMSw4IEBAIGJvb2wgaXNBbGxvd2VkQnlBbGwoY29uc3QgQ1NQ
RGlyZWN0aXZlTGlzdFZlY3RvciYgcG9saWNpZXMsIENvbnRlbnRTZWN1cml0eVBvbGljCiB0ZW1w
bGF0ZTxib29sIChDU1BEaXJlY3RpdmVMaXN0OjoqYWxsb3dlZCkoSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1cykgY29uc3Q+CiBib29s
IGlzQWxsb3dlZEJ5QWxsV2l0aFN0YXRlKGNvbnN0IENTUERpcmVjdGl2ZUxpc3RWZWN0b3ImIHBv
bGljaWVzLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVw
b3J0aW5nU3RhdHVzIHJlcG9ydGluZ1N0YXR1cykKIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHBvbGljaWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICghKHBvbGljaWVzW2ldLmdl
dCgpLT4qYWxsb3dlZCkoc3RhdGUsIHJlcG9ydGluZ1N0YXR1cykpCisgICAgZm9yIChhdXRvJiBw
b2xpY3kgOiBwb2xpY2llcykgeworICAgICAgICBpZiAoIShwb2xpY3kuZ2V0KCktPiphbGxvd2Vk
KShzdGF0ZSwgcmVwb3J0aW5nU3RhdHVzKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAgICAgcmV0dXJuIHRydWU7CkBAIC0xNDIxLDggKzE0MjEsOCBAQCBib29sIGlzQWxsb3dl
ZEJ5QWxsV2l0aFN0YXRlKGNvbnN0IENTUERpcmVjdGl2ZUxpc3RWZWN0b3ImIHBvbGljaWVzLCBK
U0M6OkV4ZWNTdAogdGVtcGxhdGU8Ym9vbCAoQ1NQRGlyZWN0aXZlTGlzdDo6KmFsbG93ZWQpKGNv
bnN0IFN0cmluZyYsIGNvbnN0IFdURjo6T3JkaW5hbE51bWJlciYsIENvbnRlbnRTZWN1cml0eVBv
bGljeTo6UmVwb3J0aW5nU3RhdHVzKSBjb25zdD4KIGJvb2wgaXNBbGxvd2VkQnlBbGxXaXRoQ29u
dGV4dChjb25zdCBDU1BEaXJlY3RpdmVMaXN0VmVjdG9yJiBwb2xpY2llcywgY29uc3QgU3RyaW5n
JiBjb250ZXh0VVJMLCBjb25zdCBXVEY6Ok9yZGluYWxOdW1iZXImIGNvbnRleHRMaW5lLCBDb250
ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1cyByZXBvcnRpbmdTdGF0dXMpCiB7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwb2xpY2llcy5zaXplKCk7ICsraSkgewotICAgICAg
ICBpZiAoIShwb2xpY2llc1tpXS5nZXQoKS0+KmFsbG93ZWQpKGNvbnRleHRVUkwsIGNvbnRleHRM
aW5lLCByZXBvcnRpbmdTdGF0dXMpKQorICAgIGZvciAoYXV0byYgcG9saWN5IDogcG9saWNpZXMp
IHsKKyAgICAgICAgaWYgKCEocG9saWN5LmdldCgpLT4qYWxsb3dlZCkoY29udGV4dFVSTCwgY29u
dGV4dExpbmUsIHJlcG9ydGluZ1N0YXR1cykpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogICAgIHJldHVybiB0cnVlOwpAQCAtMTQzNCw4ICsxNDM0LDggQEAgYm9vbCBpc0FsbG93
ZWRCeUFsbFdpdGhVUkwoY29uc3QgQ1NQRGlyZWN0aXZlTGlzdFZlY3RvciYgcG9saWNpZXMsIGNv
bnN0IFVSTCYgdXIKICAgICBpZiAoU2NoZW1lUmVnaXN0cnk6OnNjaGVtZVNob3VsZEJ5cGFzc0Nv
bnRlbnRTZWN1cml0eVBvbGljeSh1cmwucHJvdG9jb2woKSkpCiAgICAgICAgIHJldHVybiB0cnVl
OwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwb2xpY2llcy5zaXplKCk7ICsraSkgewot
ICAgICAgICBpZiAoIShwb2xpY2llc1tpXS5nZXQoKS0+KmFsbG93RnJvbVVSTCkodXJsLCByZXBv
cnRpbmdTdGF0dXMpKQorICAgIGZvciAoYXV0byYgcG9saWN5IDogcG9saWNpZXMpIHsKKyAgICAg
ICAgaWYgKCEocG9saWN5LmdldCgpLT4qYWxsb3dGcm9tVVJMKSh1cmwsIHJlcG9ydGluZ1N0YXR1
cykpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwpA
QCAtMTQ3MCwxNyArMTQ3MCwxNyBAQCBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeTo6YWxsb3dF
dmFsKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgQ29udGVudFNlY3VyaXR5UG9saQogCiBTdHJpbmcg
Q29udGVudFNlY3VyaXR5UG9saWN5OjpldmFsRGlzYWJsZWRFcnJvck1lc3NhZ2UoKSBjb25zdAog
ewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wb2xpY2llcy5zaXplKCk7ICsraSkgewot
ICAgICAgICBpZiAoIW1fcG9saWNpZXNbaV0tPmFsbG93RXZhbCgwLCBTdXBwcmVzc1JlcG9ydCkp
Ci0gICAgICAgICAgICByZXR1cm4gbV9wb2xpY2llc1tpXS0+ZXZhbERpc2FibGVkRXJyb3JNZXNz
YWdlKCk7CisgICAgZm9yIChhdXRvJiBwb2xpY3kgOiBtX3BvbGljaWVzKSB7CisgICAgICAgIGlm
ICghcG9saWN5LT5hbGxvd0V2YWwoMCwgU3VwcHJlc3NSZXBvcnQpKQorICAgICAgICAgICAgcmV0
dXJuIHBvbGljeS0+ZXZhbERpc2FibGVkRXJyb3JNZXNzYWdlKCk7CiAgICAgfQogICAgIHJldHVy
biBTdHJpbmcoKTsKIH0KIAogYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmFsbG93UGx1Z2lu
VHlwZShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgdHlwZUF0dHJpYnV0ZSwgY29u
c3QgVVJMJiB1cmwsIENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVzIHJlcG9y
dGluZ1N0YXR1cykgY29uc3QKIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcG9saWNp
ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKCFtX3BvbGljaWVzW2ldLT5hbGxvd1BsdWdp
blR5cGUodHlwZSwgdHlwZUF0dHJpYnV0ZSwgdXJsLCByZXBvcnRpbmdTdGF0dXMpKQorICAgIGZv
ciAoYXV0byYgcG9saWN5IDogbV9wb2xpY2llcykgeworICAgICAgICBpZiAoIXBvbGljeS0+YWxs
b3dQbHVnaW5UeXBlKHR5cGUsIHR5cGVBdHRyaWJ1dGUsIHVybCwgcmVwb3J0aW5nU3RhdHVzKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CkBAIC0x
NTQ0LDE3ICsxNTQ0LDE3IEBAIGJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5Ojppc0FjdGl2ZSgp
IGNvbnN0CiBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlZmxlY3RlZFhTU0Rpc3Bvc2l0aW9uIENv
bnRlbnRTZWN1cml0eVBvbGljeTo6cmVmbGVjdGVkWFNTRGlzcG9zaXRpb24oKSBjb25zdAogewog
ICAgIFJlZmxlY3RlZFhTU0Rpc3Bvc2l0aW9uIGRpc3Bvc2l0aW9uID0gUmVmbGVjdGVkWFNTVW5z
ZXQ7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3BvbGljaWVzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIGlmIChtX3BvbGljaWVzW2ldLT5yZWZsZWN0ZWRYU1NEaXNwb3NpdGlvbigpID4g
ZGlzcG9zaXRpb24pCi0gICAgICAgICAgICBkaXNwb3NpdGlvbiA9IHN0ZDo6bWF4KGRpc3Bvc2l0
aW9uLCBtX3BvbGljaWVzW2ldLT5yZWZsZWN0ZWRYU1NEaXNwb3NpdGlvbigpKTsKKyAgICBmb3Ig
KGF1dG8mIHBvbGljeSA6IG1fcG9saWNpZXMpIHsKKyAgICAgICAgaWYgKHBvbGljeS0+cmVmbGVj
dGVkWFNTRGlzcG9zaXRpb24oKSA+IGRpc3Bvc2l0aW9uKQorICAgICAgICAgICAgZGlzcG9zaXRp
b24gPSBzdGQ6Om1heChkaXNwb3NpdGlvbiwgcG9saWN5LT5yZWZsZWN0ZWRYU1NEaXNwb3NpdGlv
bigpKTsKICAgICB9CiAgICAgcmV0dXJuIGRpc3Bvc2l0aW9uOwogfQogCiB2b2lkIENvbnRlbnRT
ZWN1cml0eVBvbGljeTo6Z2F0aGVyUmVwb3J0VVJJcyhET01TdHJpbmdMaXN0JiBsaXN0KSBjb25z
dAogewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wb2xpY2llcy5zaXplKCk7ICsraSkK
LSAgICAgICAgbV9wb2xpY2llc1tpXS0+Z2F0aGVyUmVwb3J0VVJJcyhsaXN0KTsKKyAgICBmb3Ig
KGF1dG8mIHBvbGljeSA6IG1fcG9saWNpZXMpCisgICAgICAgIHBvbGljeS0+Z2F0aGVyUmVwb3J0
VVJJcyhsaXN0KTsKIH0KIAogU2VjdXJpdHlPcmlnaW4qIENvbnRlbnRTZWN1cml0eVBvbGljeTo6
c2VjdXJpdHlPcmlnaW4oKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9D
b250ZXh0TWVudUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVu
dUNvbnRyb2xsZXIuY3BwCmluZGV4IDM4OTJkNjRjMjZmNDE0NTJmODM1ODk3ZmM5YmZjMGZmOTk0
NjE4NjguLjI5ZGMwNjQ4ZjI2OWEzNzA1M2VjZTk0Y2YwMGM5MGE1NTlkMmQ0OWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAKQEAgLTk1OSw4ICs5
NTksNyBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6cG9wdWxhdGUoKQogICAgICAgICAg
ICAgICAgIGJvb2wgYmFkR3JhbW1hcjsKICAgICAgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBn
dWVzc2VzID0gZnJhbWUtPmVkaXRvcigpLmd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRp
Y2FsKG1pc3NwZWxsaW5nLCBiYWRHcmFtbWFyKTsKICAgICAgICAgICAgICAgICBpZiAobWlzc3Bl
bGxpbmcgfHwgYmFkR3JhbW1hcikgewotICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSA9
IGd1ZXNzZXMuc2l6ZSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXNpemUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGd1ZXNzZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBJZiB0aGVyZSdzIGJhZCBncmFtbWFyIGJ1dCBubyBzdWdnZXN0aW9ucyAoZS5n
LiwgcmVwZWF0ZWQgd29yZCksIGp1c3QgbGVhdmUgb2ZmIHRoZSBzdWdnZXN0aW9ucwogICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gbGlzdCBhbmQgdHJhaWxpbmcgc2VwYXJhdG9yIHJhdGhlciB0
aGFuIGFkZGluZyBhICJObyBHdWVzc2VzIEZvdW5kIiBpdGVtIChtYXRjaGVzIEFwcEtpdCkKICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChtaXNzcGVsbGluZykgewpAQCAtOTY4LDggKzk2Nyw3
IEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpwb3B1bGF0ZSgpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpLCBtX2NvbnRleHRNZW51
LmdldCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcg
Jmd1ZXNzID0gZ3Vlc3Nlc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qg
YXV0byYgZ3Vlc3MgOiBndWVzc2VzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFndWVzcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29u
dGV4dE1lbnVJdGVtIGl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdH
dWVzcywgZ3Vlc3MpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVt
KGl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOwpAQCAtMTAwMiw4ICsxMDAwLDggQEAgdm9pZCBD
b250ZXh0TWVudUNvbnRyb2xsZXI6OnBvcHVsYXRlKCkKICAgICAgICAgICAgICAgICAvLyBTcGVs
bGluZyBhbmQgZ3JhbW1hciBjaGVja2luZyBpcyBtdXR1YWxseSBleGNsdXNpdmUgd2l0aCBkaWN0
YXRpb24gYWx0ZXJuYXRpdmVzLgogICAgICAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGRpY3Rh
dGlvbkFsdGVybmF0aXZlcyA9IG1fY29udGV4dC5oaXRUZXN0UmVzdWx0KCkuZGljdGF0aW9uQWx0
ZXJuYXRpdmVzKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFkaWN0YXRpb25BbHRlcm5hdGl2ZXMu
aXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
ZGljdGF0aW9uQWx0ZXJuYXRpdmVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBDb250ZXh0TWVudUl0ZW0gaXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdE
aWN0YXRpb25BbHRlcm5hdGl2ZSwgZGljdGF0aW9uQWx0ZXJuYXRpdmVzW2ldKTsKKyAgICAgICAg
ICAgICAgICAgICAgZm9yIChhdXRvJiBhbHRlcm5hdGl2ZSA6IGRpY3RhdGlvbkFsdGVybmF0aXZl
cykgeworICAgICAgICAgICAgICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVtIGl0ZW0oQWN0aW9u
VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnRGljdGF0aW9uQWx0ZXJuYXRpdmUsIGFsdGVybmF0aXZl
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oaXRlbSwgbV9jb250ZXh0TWVu
dS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgYXBw
ZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpLCBtX2NvbnRleHRNZW51LmdldCgpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRE9NV2luZG93LmNwcAppbmRleCBiMmE3ZDdjNTUyYzlkY2Y1MTUwMjk3MTg4OGY0NDYwMDlk
ZjU0Y2UyLi5mM2IyYThmNTNhZjc0M2I4YzcxYzI3OGE4OTUxMGJlMGJmMzM5M2E2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9ET01XaW5kb3cuY3BwCkBAIC0yNTYsMjIgKzI1NiwyMSBAQCBib29sIERPTVdpbmRv
dzo6ZGlzcGF0Y2hBbGxQZW5kaW5nQmVmb3JlVW5sb2FkRXZlbnRzKCkKIAogICAgIFZlY3RvcjxS
ZWY8RE9NV2luZG93Pj4gd2luZG93czsKICAgICB3aW5kb3dzLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkoc2V0LnNpemUoKSk7Ci0gICAgZm9yIChhdXRvIGl0ID0gc2V0LmJlZ2luKCksIGVuZCA9IHNl
dC5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICB3aW5kb3dzLnVuY2hlY2tlZEFwcGVu
ZCgqaXQtPmtleSk7CisgICAgZm9yIChhdXRvJiB3aW5kb3cgOiBzZXQpCisgICAgICAgIHdpbmRv
d3MudW5jaGVja2VkQXBwZW5kKCp3aW5kb3cua2V5KTsKIAotICAgIGZvciAoUmVmPERPTVdpbmRv
dz4mIHdpbmRvd1JlZiA6IHdpbmRvd3MpIHsKLSAgICAgICAgRE9NV2luZG93JiB3aW5kb3cgPSB3
aW5kb3dSZWY7Ci0gICAgICAgIGlmICghc2V0LmNvbnRhaW5zKCZ3aW5kb3cpKQorICAgIGZvciAo
YXV0byYgd2luZG93IDogd2luZG93cykgeworICAgICAgICBpZiAoIXNldC5jb250YWlucyh3aW5k
b3cucHRyKCkpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgRnJhbWUqIGZyYW1l
ID0gd2luZG93LmZyYW1lKCk7CisgICAgICAgIEZyYW1lKiBmcmFtZSA9IHdpbmRvdy0+ZnJhbWUo
KTsKICAgICAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAg
IGlmICghZnJhbWUtPmxvYWRlcigpLnNob3VsZENsb3NlKCkpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICAgICAgd2luZG93LmVuYWJsZVN1ZGRlblRlcm1pbmF0aW9uKCk7CisgICAg
ICAgIHdpbmRvdy0+ZW5hYmxlU3VkZGVuVGVybWluYXRpb24oKTsKICAgICB9CiAKICAgICBhbHJl
YWR5RGlzcGF0Y2hlZCA9IHRydWU7CkBAIC0yOTksMTUgKzI5OCwxNCBAQCB2b2lkIERPTVdpbmRv
dzo6ZGlzcGF0Y2hBbGxQZW5kaW5nVW5sb2FkRXZlbnRzKCkKICAgICBmb3IgKGF1dG8mIGtleVZh
bHVlIDogc2V0KQogICAgICAgICB3aW5kb3dzLnVuY2hlY2tlZEFwcGVuZCgqa2V5VmFsdWUua2V5
KTsKIAotICAgIGZvciAoUmVmPERPTVdpbmRvdz4mIHdpbmRvd1JlZiA6IHdpbmRvd3MpIHsKLSAg
ICAgICAgRE9NV2luZG93JiB3aW5kb3cgPSB3aW5kb3dSZWY7Ci0gICAgICAgIGlmICghc2V0LmNv
bnRhaW5zKCZ3aW5kb3cpKQorICAgIGZvciAoYXV0byYgd2luZG93IDogd2luZG93cykgeworICAg
ICAgICBpZiAoIXNldC5jb250YWlucyh3aW5kb3cucHRyKCkpKQogICAgICAgICAgICAgY29udGlu
dWU7CiAKLSAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoUGFnZVRyYW5zaXRpb25FdmVudDo6
Y3JlYXRlKGV2ZW50TmFtZXMoKS5wYWdlaGlkZUV2ZW50LCBmYWxzZSksIHdpbmRvdy5kb2N1bWVu
dCgpKTsKLSAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5h
bWVzKCkudW5sb2FkRXZlbnQsIGZhbHNlLCBmYWxzZSksIHdpbmRvdy5kb2N1bWVudCgpKTsKKyAg
ICAgICAgd2luZG93LT5kaXNwYXRjaEV2ZW50KFBhZ2VUcmFuc2l0aW9uRXZlbnQ6OmNyZWF0ZShl
dmVudE5hbWVzKCkucGFnZWhpZGVFdmVudCwgZmFsc2UpLCB3aW5kb3ctPmRvY3VtZW50KCkpOwor
ICAgICAgICB3aW5kb3ctPmRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCku
dW5sb2FkRXZlbnQsIGZhbHNlLCBmYWxzZSksIHdpbmRvdy0+ZG9jdW1lbnQoKSk7CiAKLSAgICAg
ICAgd2luZG93LmVuYWJsZVN1ZGRlblRlcm1pbmF0aW9uKCk7CisgICAgICAgIHdpbmRvdy0+ZW5h
YmxlU3VkZGVuVGVybWluYXRpb24oKTsKICAgICB9CiAKICAgICBhbHJlYWR5RGlzcGF0Y2hlZCA9
IHRydWU7CkBAIC00OTUsOCArNDkzLDggQEAgdm9pZCBET01XaW5kb3c6OndpbGxEZXN0cm95Q2Fj
aGVkRnJhbWUoKQogICAgIC8vIHVucmVnaXN0ZXIgdGhlbXNlbHZlcyBmcm9tIHRoZSBET01XaW5k
b3cgYXMgYSByZXN1bHQgb2YgdGhlIGNhbGwgdG8gd2lsbERlc3Ryb3lHbG9iYWxPYmplY3RJbkNh
Y2hlZEZyYW1lLgogICAgIFZlY3RvcjxET01XaW5kb3dQcm9wZXJ0eSo+IHByb3BlcnRpZXM7CiAg
ICAgY29weVRvVmVjdG9yKG1fcHJvcGVydGllcywgcHJvcGVydGllcyk7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLnNpemUoKTsgKytpKQotICAgICAgICBwcm9wZXJ0aWVz
W2ldLT53aWxsRGVzdHJveUdsb2JhbE9iamVjdEluQ2FjaGVkRnJhbWUoKTsKKyAgICBmb3IgKGF1
dG8mIHByb3BlcnR5IDogcHJvcGVydGllcykKKyAgICAgICAgcHJvcGVydHktPndpbGxEZXN0cm95
R2xvYmFsT2JqZWN0SW5DYWNoZWRGcmFtZSgpOwogfQogCiB2b2lkIERPTVdpbmRvdzo6d2lsbERl
c3Ryb3lEb2N1bWVudEluRnJhbWUoKQpAQCAtNTA1LDggKzUwMyw4IEBAIHZvaWQgRE9NV2luZG93
Ojp3aWxsRGVzdHJveURvY3VtZW50SW5GcmFtZSgpCiAgICAgLy8gdW5yZWdpc3RlciB0aGVtc2Vs
dmVzIGZyb20gdGhlIERPTVdpbmRvdyBhcyBhIHJlc3VsdCBvZiB0aGUgY2FsbCB0byB3aWxsRGVz
dHJveUdsb2JhbE9iamVjdEluRnJhbWUuCiAgICAgVmVjdG9yPERPTVdpbmRvd1Byb3BlcnR5Kj4g
cHJvcGVydGllczsKICAgICBjb3B5VG9WZWN0b3IobV9wcm9wZXJ0aWVzLCBwcm9wZXJ0aWVzKTsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByb3BlcnRpZXMuc2l6ZSgpOyArK2kpCi0gICAg
ICAgIHByb3BlcnRpZXNbaV0tPndpbGxEZXN0cm95R2xvYmFsT2JqZWN0SW5GcmFtZSgpOworICAg
IGZvciAoYXV0byYgcHJvcGVydHkgOiBwcm9wZXJ0aWVzKQorICAgICAgICBwcm9wZXJ0eS0+d2ls
bERlc3Ryb3lHbG9iYWxPYmplY3RJbkZyYW1lKCk7CiB9CiAKIHZvaWQgRE9NV2luZG93Ojp3aWxs
RGV0YWNoRG9jdW1lbnRGcm9tRnJhbWUoKQpAQCAtNTE1LDggKzUxMyw4IEBAIHZvaWQgRE9NV2lu
ZG93Ojp3aWxsRGV0YWNoRG9jdW1lbnRGcm9tRnJhbWUoKQogICAgIC8vIHVucmVnaXN0ZXIgdGhl
bXNlbHZlcyBmcm9tIHRoZSBET01XaW5kb3cgYXMgYSByZXN1bHQgb2YgdGhlIGNhbGwgdG8gd2ls
bERldGFjaEdsb2JhbE9iamVjdEZyb21GcmFtZS4KICAgICBWZWN0b3I8RE9NV2luZG93UHJvcGVy
dHkqPiBwcm9wZXJ0aWVzOwogICAgIGNvcHlUb1ZlY3RvcihtX3Byb3BlcnRpZXMsIHByb3BlcnRp
ZXMpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvcGVydGllcy5zaXplKCk7ICsraSkK
LSAgICAgICAgcHJvcGVydGllc1tpXS0+d2lsbERldGFjaEdsb2JhbE9iamVjdEZyb21GcmFtZSgp
OworICAgIGZvciAoYXV0byYgcHJvcGVydHkgOiBwcm9wZXJ0aWVzKQorICAgICAgICBwcm9wZXJ0
eS0+d2lsbERldGFjaEdsb2JhbE9iamVjdEZyb21GcmFtZSgpOwogfQogCiAjaWYgRU5BQkxFKEdB
TUVQQUQpCkBAIC01NzEsOCArNTY5LDggQEAgdm9pZCBET01XaW5kb3c6OmRpc2Nvbm5lY3RET01X
aW5kb3dQcm9wZXJ0aWVzKCkKICAgICAvLyB1bnJlZ2lzdGVyIHRoZW1zZWx2ZXMgZnJvbSB0aGUg
RE9NV2luZG93IGFzIGEgcmVzdWx0IG9mIHRoZSBjYWxsIHRvIGRpc2Nvbm5lY3RGcmFtZUZvclBh
Z2VDYWNoZS4KICAgICBWZWN0b3I8RE9NV2luZG93UHJvcGVydHkqPiBwcm9wZXJ0aWVzOwogICAg
IGNvcHlUb1ZlY3RvcihtX3Byb3BlcnRpZXMsIHByb3BlcnRpZXMpOwotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgcHJvcGVydGllcy5zaXplKCk7ICsraSkKLSAgICAgICAgcHJvcGVydGllc1tp
XS0+ZGlzY29ubmVjdEZyYW1lRm9yUGFnZUNhY2hlKCk7CisgICAgZm9yIChhdXRvJiBwcm9wZXJ0
eSA6IHByb3BlcnRpZXMpCisgICAgICAgIHByb3BlcnR5LT5kaXNjb25uZWN0RnJhbWVGb3JQYWdl
Q2FjaGUoKTsKIH0KIAogdm9pZCBET01XaW5kb3c6OnJlY29ubmVjdERPTVdpbmRvd1Byb3BlcnRp
ZXMoKQpAQCAtNTgyLDggKzU4MCw4IEBAIHZvaWQgRE9NV2luZG93OjpyZWNvbm5lY3RET01XaW5k
b3dQcm9wZXJ0aWVzKCkKICAgICAvLyB1bnJlZ2lzdGVyIHRoZW1zZWx2ZXMgZnJvbSB0aGUgRE9N
V2luZG93IGFzIGEgcmVzdWx0IG9mIHRoZSBjYWxsIHRvIHJlY29ubmVjdEZyb21QYWdlQ2FjaGUu
CiAgICAgVmVjdG9yPERPTVdpbmRvd1Byb3BlcnR5Kj4gcHJvcGVydGllczsKICAgICBjb3B5VG9W
ZWN0b3IobV9wcm9wZXJ0aWVzLCBwcm9wZXJ0aWVzKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHByb3BlcnRpZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHByb3BlcnRpZXNbaV0tPnJlY29u
bmVjdEZyYW1lRnJvbVBhZ2VDYWNoZShtX2ZyYW1lKTsKKyAgICBmb3IgKGF1dG8mIHByb3BlcnR5
IDogcHJvcGVydGllcykKKyAgICAgICAgcHJvcGVydHktPnJlY29ubmVjdEZyYW1lRnJvbVBhZ2VD
YWNoZShtX2ZyYW1lKTsKIH0KIAogdm9pZCBET01XaW5kb3c6OnJlc2V0RE9NV2luZG93UHJvcGVy
dGllcygpCkBAIC0xNDUzLDggKzE0NTEsOCBAQCBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBET01X
aW5kb3c6OmdldE1hdGNoZWRDU1NSdWxlcyhFbGVtZW50KiBlbGVtZW50LCBjb25zdCBTdAogICAg
ICAgICByZXR1cm4gMDsKIAogICAgIFJlZlB0cjxTdGF0aWNDU1NSdWxlTGlzdD4gcnVsZUxpc3Qg
PSBTdGF0aWNDU1NSdWxlTGlzdDo6Y3JlYXRlKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1hdGNoZWRSdWxlcy5zaXplKCk7ICsraSkKLSAgICAgICAgcnVsZUxpc3QtPnJ1bGVzKCku
YXBwZW5kKG1hdGNoZWRSdWxlc1tpXS0+Y3JlYXRlQ1NTT01XcmFwcGVyKCkpOworICAgIGZvciAo
YXV0byYgcnVsZSA6IG1hdGNoZWRSdWxlcykKKyAgICAgICAgcnVsZUxpc3QtPnJ1bGVzKCkuYXBw
ZW5kKHJ1bGUtPmNyZWF0ZUNTU09NV3JhcHBlcigpKTsKIAogICAgIHJldHVybiBydWxlTGlzdC5y
ZWxlYXNlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RldmljZUNvbnRy
b2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EZXZpY2VDb250cm9sbGVyLmNwcAppbmRl
eCBiZDViYTE5MjNlNzU5ZGM2YmI5NDMxZWVkNDJmYTczYWJjZmI5ZjdiLi45MjU3NTRlYzQzNjEw
ZTdhN2Y2OTliNjg0ODE1MmU3MmM4NWFmNjIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0RldmljZUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRGV2aWNl
Q29udHJvbGxlci5jcHAKQEAgLTc2LDExICs3NiwxMCBAQCB2b2lkIERldmljZUNvbnRyb2xsZXI6
OmRpc3BhdGNoRGV2aWNlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gcHJwRXZlbnQpCiAgICAgUmVm
UHRyPEV2ZW50PiBldmVudCA9IHBycEV2ZW50OwogICAgIFZlY3RvcjxSZWZQdHI8RE9NV2luZG93
Pj4gbGlzdGVuZXJWZWN0b3I7CiAgICAgY29weVRvVmVjdG9yKG1fbGlzdGVuZXJzLCBsaXN0ZW5l
clZlY3Rvcik7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0ZW5lclZlY3Rvci5zaXpl
KCk7ICsraSkgewotICAgICAgICBpZiAobGlzdGVuZXJWZWN0b3JbaV0tPmRvY3VtZW50KCkKLSAg
ICAgICAgICAgICYmICFsaXN0ZW5lclZlY3RvcltpXS0+ZG9jdW1lbnQoKS0+YWN0aXZlRE9NT2Jq
ZWN0c0FyZVN1c3BlbmRlZCgpCi0gICAgICAgICAgICAmJiAhbGlzdGVuZXJWZWN0b3JbaV0tPmRv
Y3VtZW50KCktPmFjdGl2ZURPTU9iamVjdHNBcmVTdG9wcGVkKCkpCi0gICAgICAgIGxpc3RlbmVy
VmVjdG9yW2ldLT5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKKyAgICBmb3IgKGF1dG8mIGxpc3RlbmVy
IDogbGlzdGVuZXJWZWN0b3IpIHsKKyAgICAgICAgYXV0byBkb2N1bWVudCA9IGxpc3RlbmVyLT5k
b2N1bWVudCgpOworICAgICAgICBpZiAoZG9jdW1lbnQgJiYgIWRvY3VtZW50LT5hY3RpdmVET01P
YmplY3RzQXJlU3VzcGVuZGVkKCkgJiYgIWRvY3VtZW50LT5hY3RpdmVET01PYmplY3RzQXJlU3Rv
cHBlZCgpKQorICAgICAgICAgICAgbGlzdGVuZXItPmRpc3BhdGNoRXZlbnQoZXZlbnQpOwogICAg
IH0KIH0KIApAQCAtOTIsMTEgKzkxLDEwIEBAIHZvaWQgRGV2aWNlQ29udHJvbGxlcjo6ZmlyZURl
dmljZUV2ZW50KCkKICAgICBWZWN0b3I8UmVmUHRyPERPTVdpbmRvdz4+IGxpc3RlbmVyVmVjdG9y
OwogICAgIGNvcHlUb1ZlY3RvcihtX2xhc3RFdmVudExpc3RlbmVycywgbGlzdGVuZXJWZWN0b3Ip
OwogICAgIG1fbGFzdEV2ZW50TGlzdGVuZXJzLmNsZWFyKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBsaXN0ZW5lclZlY3Rvci5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobGlzdGVu
ZXJWZWN0b3JbaV0tPmRvY3VtZW50KCkKLSAgICAgICAgICAgICYmICFsaXN0ZW5lclZlY3Rvcltp
XS0+ZG9jdW1lbnQoKS0+YWN0aXZlRE9NT2JqZWN0c0FyZVN1c3BlbmRlZCgpCi0gICAgICAgICAg
ICAmJiAhbGlzdGVuZXJWZWN0b3JbaV0tPmRvY3VtZW50KCktPmFjdGl2ZURPTU9iamVjdHNBcmVT
dG9wcGVkKCkpCi0gICAgICAgIGxpc3RlbmVyVmVjdG9yW2ldLT5kaXNwYXRjaEV2ZW50KGdldExh
c3RFdmVudCgpKTsKKyAgICBmb3IgKGF1dG8mIGxpc3RlbmVyIDogbGlzdGVuZXJWZWN0b3IpIHsK
KyAgICAgICAgYXV0byBkb2N1bWVudCA9IGxpc3RlbmVyLT5kb2N1bWVudCgpOworICAgICAgICBp
ZiAoZG9jdW1lbnQgJiYgIWRvY3VtZW50LT5hY3RpdmVET01PYmplY3RzQXJlU3VzcGVuZGVkKCkg
JiYgIWRvY3VtZW50LT5hY3RpdmVET01PYmplY3RzQXJlU3RvcHBlZCgpKQorICAgICAgICAgICAg
bGlzdGVuZXItPmRpc3BhdGNoRXZlbnQoZ2V0TGFzdEV2ZW50KCkpOwogICAgIH0KIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IGRiYTJkZjY1NTdjMDg1YmNlNmNlODMx
YjIyNzQzYjc0YzcyYjgxNzUuLjk1YzQzNjJkMjhjYjJjNzJjMzkwMWU1MWE0MTI3Y2NjM2ZmMTUy
NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTI1NTUsOSArMjU1NSw5
IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjp1cGRhdGVNb3VzZUV2ZW50VGFyZ2V0Tm9kZShOb2RlKiB0
YXJnZXROb2RlLCBjb25zdCBQbGF0Zm9ybU1vCiAgICAgICAgICAgICAgICAgbV9sYXN0RWxlbWVu
dFVuZGVyTW91c2UtPmRpc3BhdGNoTW91c2VFdmVudChwbGF0Zm9ybU1vdXNlRXZlbnQsIGV2ZW50
TmFtZXMoKS5tb3VzZW91dEV2ZW50LCAwLCBtX2VsZW1lbnRVbmRlck1vdXNlLmdldCgpKTsKIAog
ICAgICAgICAgICAgLy8gU2VuZCBtb3VzZWxlYXZlIHRvIHRoZSBub2RlIGhpZXJhcmNoeSBubyBs
b25nZXIgdW5kZXIgdGhlIG1vdXNlLgotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBsZWZ0RWxlbWVudHNDaGFpbi5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgIGlmICho
YXNDYXB0dXJpbmdNb3VzZUxlYXZlTGlzdGVuZXIgfHwgbGVmdEVsZW1lbnRzQ2hhaW5baV0tPmhh
c0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS5tb3VzZWxlYXZlRXZlbnQpKQotICAgICAgICAg
ICAgICAgICAgICBsZWZ0RWxlbWVudHNDaGFpbltpXS0+ZGlzcGF0Y2hNb3VzZUV2ZW50KHBsYXRm
b3JtTW91c2VFdmVudCwgZXZlbnROYW1lcygpLm1vdXNlbGVhdmVFdmVudCwgMCwgbV9lbGVtZW50
VW5kZXJNb3VzZS5nZXQoKSk7CisgICAgICAgICAgICBmb3IgKGF1dG8mIGNoYWluIDogbGVmdEVs
ZW1lbnRzQ2hhaW4pIHsKKyAgICAgICAgICAgICAgICBpZiAoaGFzQ2FwdHVyaW5nTW91c2VMZWF2
ZUxpc3RlbmVyIHx8IGNoYWluLT5oYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkubW91c2Vs
ZWF2ZUV2ZW50KSkKKyAgICAgICAgICAgICAgICAgICAgY2hhaW4tPmRpc3BhdGNoTW91c2VFdmVu
dChwbGF0Zm9ybU1vdXNlRXZlbnQsIGV2ZW50TmFtZXMoKS5tb3VzZWxlYXZlRXZlbnQsIDAsIG1f
ZWxlbWVudFVuZGVyTW91c2UuZ2V0KCkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAv
LyBTZW5kIG1vdXNlb3ZlciBldmVudCB0byB0aGUgbmV3IG5vZGUuCkBAIC0yNTY1LDkgKzI1NjUs
OSBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6dXBkYXRlTW91c2VFdmVudFRhcmdldE5vZGUoTm9kZSog
dGFyZ2V0Tm9kZSwgY29uc3QgUGxhdGZvcm1NbwogICAgICAgICAgICAgICAgIG1fZWxlbWVudFVu
ZGVyTW91c2UtPmRpc3BhdGNoTW91c2VFdmVudChwbGF0Zm9ybU1vdXNlRXZlbnQsIGV2ZW50TmFt
ZXMoKS5tb3VzZW92ZXJFdmVudCwgMCwgbV9sYXN0RWxlbWVudFVuZGVyTW91c2UuZ2V0KCkpOwog
CiAgICAgICAgICAgICAvLyBTZW5kIG1vdXNlbGVhdmUgZXZlbnQgdG8gdGhlIG5vZGVzIGhpZXJh
cmNoeSB1bmRlciB0aGUgbW91c2UuCi0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6
ZSA9IGVudGVyZWRFbGVtZW50c0NoYWluLnNpemUoKTsgaSA8IHNpemU7ICsraSkgewotICAgICAg
ICAgICAgICAgIGlmIChoYXNDYXB0dXJpbmdNb3VzZUVudGVyTGlzdGVuZXIgfHwgZW50ZXJlZEVs
ZW1lbnRzQ2hhaW5baV0tPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS5tb3VzZWVudGVy
RXZlbnQpKQotICAgICAgICAgICAgICAgICAgICBlbnRlcmVkRWxlbWVudHNDaGFpbltpXS0+ZGlz
cGF0Y2hNb3VzZUV2ZW50KHBsYXRmb3JtTW91c2VFdmVudCwgZXZlbnROYW1lcygpLm1vdXNlZW50
ZXJFdmVudCwgMCwgbV9sYXN0RWxlbWVudFVuZGVyTW91c2UuZ2V0KCkpOworICAgICAgICAgICAg
Zm9yIChhdXRvJiBjaGFpbiA6IGVudGVyZWRFbGVtZW50c0NoYWluKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGhhc0NhcHR1cmluZ01vdXNlRW50ZXJMaXN0ZW5lciB8fCBjaGFpbi0+aGFzRXZlbnRM
aXN0ZW5lcnMoZXZlbnROYW1lcygpLm1vdXNlZW50ZXJFdmVudCkpCisgICAgICAgICAgICAgICAg
ICAgIGNoYWluLT5kaXNwYXRjaE1vdXNlRXZlbnQocGxhdGZvcm1Nb3VzZUV2ZW50LCBldmVudE5h
bWVzKCkubW91c2VlbnRlckV2ZW50LCAwLCBtX2xhc3RFbGVtZW50VW5kZXJNb3VzZS5nZXQoKSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgbV9sYXN0RWxlbWVudFVuZGVyTW91
c2UgPSBtX2VsZW1lbnRVbmRlck1vdXNlOwpAQCAtMzg1OSwxOSArMzg1OSwxNiBAQCBib29sIEV2
ZW50SGFuZGxlcjo6aGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmIGV2
ZW50KQogCiAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihEZWZpbml0
ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlLCBtX2ZyYW1lLmRvY3VtZW50KCkpOwogCi0gICAgdW5z
aWduZWQgaTsKICAgICBib29sIGZyZXNoVG91Y2hFdmVudHMgPSB0cnVlOwogICAgIGJvb2wgYWxs
VG91Y2hSZWxlYXNlZCA9IHRydWU7Ci0gICAgZm9yIChpID0gMDsgaSA8IHBvaW50cy5zaXplKCk7
ICsraSkgewotICAgICAgICBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmIHBvaW50ID0gcG9pbnRz
W2ldOworICAgIGZvciAoYXV0byYgcG9pbnQgOiBwb2ludHMpIHsKICAgICAgICAgaWYgKHBvaW50
LnN0YXRlKCkgIT0gUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFByZXNzZWQpCiAgICAgICAgICAg
ICBmcmVzaFRvdWNoRXZlbnRzID0gZmFsc2U7CiAgICAgICAgIGlmIChwb2ludC5zdGF0ZSgpICE9
IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hSZWxlYXNlZCAmJiBwb2ludC5zdGF0ZSgpICE9IFBs
YXRmb3JtVG91Y2hQb2ludDo6VG91Y2hDYW5jZWxsZWQpCiAgICAgICAgICAgICBhbGxUb3VjaFJl
bGVhc2VkID0gZmFsc2U7CiAgICAgfQogCi0gICAgZm9yIChpID0gMDsgaSA8IHBvaW50cy5zaXpl
KCk7ICsraSkgewotICAgICAgICBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmIHBvaW50ID0gcG9p
bnRzW2ldOworICAgIGZvciAoYXV0byYgcG9pbnQgOiBwb2ludHMpIHsKICAgICAgICAgUGxhdGZv
cm1Ub3VjaFBvaW50OjpTdGF0ZSBwb2ludFN0YXRlID0gcG9pbnQuc3RhdGUoKTsKICAgICAgICAg
TGF5b3V0UG9pbnQgcGFnZVBvaW50ID0gZG9jdW1lbnRQb2ludEZvcldpbmRvd1BvaW50KG1fZnJh
bWUsIHBvaW50LnBvcygpKTsKIApAQCAtNDAxNSwxMCArNDAxMiw5IEBAIGJvb2wgRXZlbnRIYW5k
bGVyOjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgZXZlbnQpCiAg
ICAgICAgIGJvb2wgaXNUb3VjaENhbmNlbEV2ZW50ID0gKHN0YXRlID09IFBsYXRmb3JtVG91Y2hQ
b2ludDo6VG91Y2hDYW5jZWxsZWQpOwogICAgICAgICBSZWZQdHI8VG91Y2hMaXN0PiYgZWZmZWN0
aXZlVG91Y2hlcyhpc1RvdWNoQ2FuY2VsRXZlbnQgPyBlbXB0eUxpc3QgOiB0b3VjaGVzKTsKICAg
ICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBzdGF0ZU5hbWUoZXZlbnROYW1lRm9yVG91Y2hQb2lu
dFN0YXRlKHN0YXRpY19jYXN0PFBsYXRmb3JtVG91Y2hQb2ludDo6U3RhdGU+KHN0YXRlKSkpOwot
ICAgICAgICBjb25zdCBFdmVudFRhcmdldFNldCYgdGFyZ2V0c0ZvclN0YXRlID0gY2hhbmdlZFRv
dWNoZXNbc3RhdGVdLm1fdGFyZ2V0czsKIAotICAgICAgICBmb3IgKEV2ZW50VGFyZ2V0U2V0Ojpj
b25zdF9pdGVyYXRvciBpdCA9IHRhcmdldHNGb3JTdGF0ZS5iZWdpbigpOyBpdCAhPSB0YXJnZXRz
Rm9yU3RhdGUuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgIEV2ZW50VGFyZ2V0KiB0b3VjaEV2
ZW50VGFyZ2V0ID0gaXQtPmdldCgpOworICAgICAgICBmb3IgKGF1dG8mIHRhZ2V0IDogY2hhbmdl
ZFRvdWNoZXNbc3RhdGVdLm1fdGFyZ2V0cykgeworICAgICAgICAgICAgRXZlbnRUYXJnZXQqIHRv
dWNoRXZlbnRUYXJnZXQgPSB0YWdldC5nZXQoKTsKICAgICAgICAgICAgIFJlZlB0cjxUb3VjaExp
c3Q+IHRhcmdldFRvdWNoZXMoaXNUb3VjaENhbmNlbEV2ZW50ID8gZW1wdHlMaXN0IDogdG91Y2hl
c0J5VGFyZ2V0LmdldCh0b3VjaEV2ZW50VGFyZ2V0KSk7CiAgICAgICAgICAgICBBU1NFUlQodGFy
Z2V0VG91Y2hlcyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250
cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAppbmRl
eCBkOGQyNWNmZThlYzVjOWYzZTZiMzhhOWE3NTkxYWI5OWY1ZDBhZTMzLi43N2MzODdmYjYzZmMx
NjQwODYwYWMyYTA1MDk4NjQ2YWE1NDAzYTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZvY3VzQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0Nv
bnRyb2xsZXIuY3BwCkBAIC03MDAsOCArNzAwLDcgQEAgdm9pZCBGb2N1c0NvbnRyb2xsZXI6OnNl
dElzVmlzaWJsZUFuZEFjdGl2ZUludGVybmFsKGJvb2wgY29udGVudElzVmlzaWJsZSkKICAgICAg
ICAgaWYgKCFzY3JvbGxhYmxlQXJlYXMpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAg
ICBmb3IgKEhhc2hTZXQ8U2Nyb2xsYWJsZUFyZWEqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzY3Jv
bGxhYmxlQXJlYXMtPmJlZ2luKCksIGVuZCA9IHNjcm9sbGFibGVBcmVhcy0+ZW5kKCk7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICAgICAgU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVh
ID0gKml0OworICAgICAgICBmb3IgKGF1dG8mIHNjcm9sbGFibGVBcmVhIDogKnNjcm9sbGFibGVB
cmVhcykgewogICAgICAgICAgICAgQVNTRVJUKHNjcm9sbGFibGVBcmVhLT5zY3JvbGxiYXJzQ2Fu
QmVBY3RpdmUoKSB8fCBtX3BhZ2Uuc2hvdWxkU3VwcHJlc3NTY3JvbGxiYXJBbmltYXRpb25zKCkp
OwogCiAgICAgICAgICAgICBjb250ZW50QXJlYURpZFNob3dPckhpZGUoc2Nyb2xsYWJsZUFyZWEs
IGNvbnRlbnRJc1Zpc2libGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAppbmRleCBlNTkxY2Y0Mzk2ZDQy
ZmQ5ZDc0MGQ1NjRiZDcwMjZkNTQ2MzZiZDhiLi5iMjVjNDBlNDQwYTMwMDc0YzZlZmUzMmRhYjc1
ZGJlYWJjY2I0YTU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcApAQCAtMjk1LDkgKzI5NSw5IEBAIHZv
aWQgRnJhbWU6Om9yaWVudGF0aW9uQ2hhbmdlZCgpCiAgICAgZm9yIChGcmFtZSogZnJhbWUgPSB0
aGlzOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQogICAgICAg
ICBmcmFtZXMuYXBwZW5kKCpmcmFtZSk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZnJhbWVzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGlmIChEb2N1bWVudCogZG9jID0gZnJhbWVz
W2ldLT5kb2N1bWVudCgpKQotICAgICAgICAgICAgZG9jLT5kaXNwYXRjaFdpbmRvd0V2ZW50KEV2
ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLm9yaWVudGF0aW9uY2hhbmdlRXZlbnQsIGZhbHNlLCBm
YWxzZSkpOworICAgIGZvciAoYXV0byYgZnJhbWUgOiBmcmFtZXMpIHsKKyAgICAgICAgaWYgKERv
Y3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpKQorICAgICAgICAgICAgZG9jdW1l
bnQtPmRpc3BhdGNoV2luZG93RXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkub3JpZW50
YXRpb25jaGFuZ2VFdmVudCwgZmFsc2UsIGZhbHNlKSk7CiAgICAgfQogfQogCkBAIC03MTksMTAg
KzcxOSw3IEBAIHZvaWQgRnJhbWU6OmluamVjdFVzZXJTY3JpcHRzRm9yV29ybGQoRE9NV3JhcHBl
cldvcmxkJiB3b3JsZCwgY29uc3QgVXNlclNjcmlwdFZlCiAgICAgaWYgKCFkb2MpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiBzb3VyY2VDb2RlOwotICAg
IHVuc2lnbmVkIGNvdW50ID0gdXNlclNjcmlwdHMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIFVzZXJTY3JpcHQqIHNjcmlwdCA9IHVz
ZXJTY3JpcHRzW2ldLmdldCgpOworICAgIGZvciAoYXV0byYgc2NyaXB0IDogdXNlclNjcmlwdHMp
IHsKICAgICAgICAgaWYgKHNjcmlwdC0+aW5qZWN0ZWRGcmFtZXMoKSA9PSBJbmplY3RJblRvcEZy
YW1lT25seSAmJiBvd25lckVsZW1lbnQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggMDYxZDNkOWNmYWRlZmJhZDYxNTEyOWJmYTZhODUw
NWQ3ODc4YzliYS4uNGQ4ZjYxOGQ0ODUzYzY0NmFiZmY1ODY4NTEwMGQxNjgyMWMyYjFhZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtMTg3OCwxMCArMTg3OCw3IEBAIGJvb2wgRnJh
bWVWaWV3OjpzY3JvbGxDb250ZW50c0Zhc3RQYXRoKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRh
LCBjb25zdCBJbnRSZWN0CiAgICAgaG9zdFdpbmRvdygpLT5zY3JvbGwoc2Nyb2xsRGVsdGEsIHJl
Y3RUb1Njcm9sbCwgY2xpcFJlY3QpOwogCiAgICAgLy8gMikgdXBkYXRlIHRoZSBhcmVhIG9mIGZp
eGVkIG9iamVjdHMgdGhhdCBoYXMgYmVlbiBpbnZhbGlkYXRlZAotICAgIFZlY3RvcjxJbnRSZWN0
PiBzdWJSZWN0c1RvVXBkYXRlID0gcmVnaW9uVG9VcGRhdGUucmVjdHMoKTsKLSAgICBzaXplX3Qg
dmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHNDb3VudCA9IHN1YlJlY3RzVG9VcGRhdGUuc2l6ZSgp
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHND
b3VudDsgKytpKSB7Ci0gICAgICAgIEludFJlY3QgdXBkYXRlUmVjdCA9IHN1YlJlY3RzVG9VcGRh
dGVbaV07CisgICAgZm9yIChhdXRvJiB1cGRhdGVSZWN0IDogcmVnaW9uVG9VcGRhdGUucmVjdHMo
KSkgewogICAgICAgICBJbnRSZWN0IHNjcm9sbGVkUmVjdCA9IHVwZGF0ZVJlY3Q7CiAgICAgICAg
IHNjcm9sbGVkUmVjdC5tb3ZlKHNjcm9sbERlbHRhKTsKICAgICAgICAgdXBkYXRlUmVjdC51bml0
ZShzY3JvbGxlZFJlY3QpOwpAQCAtMjY4Miw4ICsyNjc5LDggQEAgdm9pZCBGcmFtZVZpZXc6OnNl
cnZpY2VTY3JpcHRlZEFuaW1hdGlvbnMoZG91YmxlIG1vbm90b25pY0FuaW1hdGlvblN0YXJ0VGlt
ZSkKICAgICBmb3IgKGF1dG8qIGZyYW1lID0gbV9mcmFtZS5wdHIoKTsgZnJhbWU7IGZyYW1lID0g
ZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkKICAgICAgICAgZG9jdW1lbnRzLmFwcGVuZChm
cmFtZS0+ZG9jdW1lbnQoKSk7CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRvY3VtZW50
cy5zaXplKCk7ICsraSkKLSAgICAgICAgZG9jdW1lbnRzW2ldLT5zZXJ2aWNlU2NyaXB0ZWRBbmlt
YXRpb25zKG1vbm90b25pY0FuaW1hdGlvblN0YXJ0VGltZSk7CisgICAgZm9yIChhdXRvJiBkb2N1
bWVudCA6IGRvY3VtZW50cykKKyAgICAgICAgZG9jdW1lbnQtPnNlcnZpY2VTY3JpcHRlZEFuaW1h
dGlvbnMobW9ub3RvbmljQW5pbWF0aW9uU3RhcnRUaW1lKTsKIH0KICNlbmRpZgogCkBAIC00NDE2
LDggKzQ0MTMsOCBAQCBTdHJpbmcgRnJhbWVWaWV3Ojp0cmFja2VkUmVwYWludFJlY3RzQXNUZXh0
KCkgY29uc3QKICAgICBUZXh0U3RyZWFtIHRzOwogICAgIGlmICghbV90cmFja2VkUmVwYWludFJl
Y3RzLmlzRW1wdHkoKSkgewogICAgICAgICB0cyA8PCAiKHJlcGFpbnQgcmVjdHNcbiI7Ci0gICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90cmFja2VkUmVwYWludFJlY3RzLnNpemUoKTsg
KytpKQotICAgICAgICAgICAgdHMgPDwgIiAgKHJlY3QgIiA8PCBMYXlvdXRVbml0KG1fdHJhY2tl
ZFJlcGFpbnRSZWN0c1tpXS54KCkpIDw8ICIgIiA8PCBMYXlvdXRVbml0KG1fdHJhY2tlZFJlcGFp
bnRSZWN0c1tpXS55KCkpIDw8ICIgIiA8PCBMYXlvdXRVbml0KG1fdHJhY2tlZFJlcGFpbnRSZWN0
c1tpXS53aWR0aCgpKSA8PCAiICIgPDwgTGF5b3V0VW5pdChtX3RyYWNrZWRSZXBhaW50UmVjdHNb
aV0uaGVpZ2h0KCkpIDw8ICIpXG4iOworICAgICAgICBmb3IgKGF1dG8mIHJlY3QgOiBtX3RyYWNr
ZWRSZXBhaW50UmVjdHMpCisgICAgICAgICAgICB0cyA8PCAiICAocmVjdCAiIDw8IExheW91dFVu
aXQocmVjdC54KCkpIDw8ICIgIiA8PCBMYXlvdXRVbml0KHJlY3QueSgpKSA8PCAiICIgPDwgTGF5
b3V0VW5pdChyZWN0LndpZHRoKCkpIDw8ICIgIiA8PCBMYXlvdXRVbml0KHJlY3QuaGVpZ2h0KCkp
IDw8ICIpXG4iOwogICAgICAgICB0cyA8PCAiKVxuIjsKICAgICB9CiAgICAgcmV0dXJuIHRzLnJl
bGVhc2UoKTsKQEAgLTQ3NDEsMjAgKzQ3MzgsMTYgQEAgdm9pZCBGcmFtZVZpZXc6OnVwZGF0ZVdp
ZGdldFBvc2l0aW9ucygpCiAgICAgLy8gdXBkYXRlV2lkZ2V0UG9zaXRpb24oKSBjYW4gcG9zc2li
bHkgY2F1c2UgbGF5b3V0IHRvIGJlIHJlLWVudGVyZWQgKHZpYSBwbHVnLWlucyBydW5uaW5nCiAg
ICAgLy8gc2NyaXB0cyBpbiByZXNwb25zZSB0byBOUFBfU2V0V2luZG93LCBmb3IgZXhhbXBsZSks
IHNvIHdlIG5lZWQgdG8ga2VlcCB0aGUgV2lkZ2V0cwogICAgIC8vIGFsaXZlIGR1cmluZyBlbnVt
ZXJhdGlvbi4KLSAgICBhdXRvIHByb3RlY3RlZFdpZGdldHMgPSBjb2xsZWN0QW5kUHJvdGVjdFdp
ZGdldHMobV93aWRnZXRzSW5SZW5kZXJUcmVlKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDAs
IHNpemUgPSBwcm90ZWN0ZWRXaWRnZXRzLnNpemUoKTsgaSA8IHNpemU7ICsraSkgewotICAgICAg
ICBpZiAoUmVuZGVyV2lkZ2V0KiByZW5kZXJXaWRnZXQgPSBSZW5kZXJXaWRnZXQ6OmZpbmQocHJv
dGVjdGVkV2lkZ2V0c1tpXS5nZXQoKSkpCisgICAgZm9yIChhdXRvJiB3aWRnZXQgOiBjb2xsZWN0
QW5kUHJvdGVjdFdpZGdldHMobV93aWRnZXRzSW5SZW5kZXJUcmVlKSkgeworICAgICAgICBpZiAo
UmVuZGVyV2lkZ2V0KiByZW5kZXJXaWRnZXQgPSBSZW5kZXJXaWRnZXQ6OmZpbmQod2lkZ2V0Lmdl
dCgpKSkKICAgICAgICAgICAgIHJlbmRlcldpZGdldC0+dXBkYXRlV2lkZ2V0UG9zaXRpb24oKTsK
ICAgICB9CiB9CiAKIHZvaWQgRnJhbWVWaWV3Ojpub3RpZnlXaWRnZXRzKFdpZGdldE5vdGlmaWNh
dGlvbiBub3RpZmljYXRpb24pCiB7Ci0gICAgYXV0byBwcm90ZWN0ZWRXaWRnZXRzID0gY29sbGVj
dEFuZFByb3RlY3RXaWRnZXRzKG1fd2lkZ2V0c0luUmVuZGVyVHJlZSk7Ci0KLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwLCBzaXplID0gcHJvdGVjdGVkV2lkZ2V0cy5zaXplKCk7IGkgPCBzaXplOyAr
K2kpCi0gICAgICAgIHByb3RlY3RlZFdpZGdldHNbaV0tPm5vdGlmeVdpZGdldChub3RpZmljYXRp
b24pOworICAgIGZvciAoYXV0byYgd2lkZ2V0IDogY29sbGVjdEFuZFByb3RlY3RXaWRnZXRzKG1f
d2lkZ2V0c0luUmVuZGVyVHJlZSkpCisgICAgICAgIHdpZGdldC0+bm90aWZ5V2lkZ2V0KG5vdGlm
aWNhdGlvbik7CiB9CiAKIHZvaWQgRnJhbWVWaWV3OjpzZXRFeHBvc2VkUmVjdChGbG9hdFJlY3Qg
ZXhwb3NlZFJlY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAppbmRleCBlYTQzMWVkNzc4NjNlOGQ4YTk2ODAx
Mjg4ZGU5ZjkwMWYzNDkxNWFlLi4zNmE1OTk2ZDc0NmVlMjk0ODc1N2ZkOWFlNTRiN2RiZWNjODc3
MDIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKQEAgLTEyMSwxNSArMTIxLDE1IEBAIHN0YXRpYyB2b2lk
IG5ldHdvcmtTdGF0ZUNoYW5nZWQoYm9vbCBpc09uTGluZSkKICAgICBWZWN0b3I8UmVmPEZyYW1l
Pj4gZnJhbWVzOwogICAgIAogICAgIC8vIEdldCBhbGwgdGhlIGZyYW1lcyBvZiBhbGwgdGhlIHBh
Z2VzIGluIGFsbCB0aGUgcGFnZSBncm91cHMKLSAgICBmb3IgKGF1dG8gaXQgPSBhbGxQYWdlcy0+
YmVnaW4oKSwgZW5kID0gYWxsUGFnZXMtPmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgZm9yIChGcmFtZSogZnJhbWUgPSAmKCppdCktPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUg
PSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQorICAgIGZvciAoYXV0byYgcGFnZSA6ICph
bGxQYWdlcykgeworICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZwYWdlLT5tYWluRnJhbWUo
KTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkKICAgICAgICAg
ICAgIGZyYW1lcy5hcHBlbmQoKmZyYW1lKTsKLSAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpuZXR3b3JrU3RhdGVDaGFuZ2VkKCppdCk7CisgICAgICAgIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6bmV0d29ya1N0YXRlQ2hhbmdlZChwYWdlKTsKICAgICB9CiAKICAgICBBdG9taWNT
dHJpbmcgZXZlbnROYW1lID0gaXNPbkxpbmUgPyBldmVudE5hbWVzKCkub25saW5lRXZlbnQgOiBl
dmVudE5hbWVzKCkub2ZmbGluZUV2ZW50OwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBm
cmFtZXMuc2l6ZSgpOyBpKyspCi0gICAgICAgIGZyYW1lc1tpXS0+ZG9jdW1lbnQoKS0+ZGlzcGF0
Y2hXaW5kb3dFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZSwgZmFsc2UsIGZhbHNlKSk7Cisg
ICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lcykKKyAgICAgICAgZnJhbWUtPmRvY3VtZW50KCkt
PmRpc3BhdGNoV2luZG93RXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWUsIGZhbHNlLCBmYWxz
ZSkpOwogfQogCiBzdGF0aWMgY29uc3QgVmlld1N0YXRlOjpGbGFncyBQYWdlSW5pdGlhbFZpZXdT
dGF0ZSA9IFZpZXdTdGF0ZTo6SXNWaXNpYmxlIHwgVmlld1N0YXRlOjpJc0luV2luZG93OwpAQCAt
NDAxLDkgKzQwMSw5IEBAIHN0YXRpYyBjb25zdCBWaWV3TW9kZUluZm8gdmlld01vZGVNYXBbdmll
d01vZGVNYXBTaXplXSA9IHsKIAogUGFnZTo6Vmlld01vZGUgUGFnZTo6c3RyaW5nVG9WaWV3TW9k
ZShjb25zdCBTdHJpbmcmIHRleHQpCiB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2aWV3TW9k
ZU1hcFNpemU7ICsraSkgewotICAgICAgICBpZiAodGV4dCA9PSB2aWV3TW9kZU1hcFtpXS5uYW1l
KQotICAgICAgICAgICAgcmV0dXJuIHZpZXdNb2RlTWFwW2ldLnR5cGU7CisgICAgZm9yIChhdXRv
JiBtb2RlIDogdmlld01vZGVNYXApIHsKKyAgICAgICAgaWYgKHRleHQgPT0gbW9kZS5uYW1lKQor
ICAgICAgICAgICAgcmV0dXJuIG1vZGUudHlwZTsKICAgICB9CiAgICAgcmV0dXJuIFBhZ2U6OlZp
ZXdNb2RlSW52YWxpZDsKIH0KQEAgLTQ4Miw5ICs0ODIsOCBAQCB2b2lkIFBhZ2U6OnVwZGF0ZVN0
eWxlRm9yQWxsUGFnZXNBZnRlckdsb2JhbENoYW5nZUluRW52aXJvbm1lbnQoKQogewogICAgIGlm
ICghYWxsUGFnZXMpCiAgICAgICAgIHJldHVybjsKLSAgICBIYXNoU2V0PFBhZ2UqPjo6aXRlcmF0
b3IgZW5kID0gYWxsUGFnZXMtPmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxQYWdlKj46Oml0ZXJh
dG9yIGl0ID0gYWxsUGFnZXMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgZm9y
IChGcmFtZSogZnJhbWUgPSAmKCppdCktPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFt
ZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7CisgICAgZm9yIChhdXRvJiBwYWdlIDogKmFsbFBh
Z2VzKSB7CisgICAgICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJnBhZ2UtPm1haW5GcmFtZSgpOyBm
cmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7CiAgICAgICAgICAg
ICAvLyBJZiBhIGNoYW5nZSBpbiB0aGUgZ2xvYmFsIGVudmlyb25tZW50IGhhcyBvY2N1cnJlZCwg
d2UgbmVlZCB0bwogICAgICAgICAgICAgLy8gbWFrZSBzdXJlIGFsbCB0aGUgcHJvcGVydGllcyBh
IHJlY29tcHV0ZWQsIHRoZXJlZm9yZSB3ZSBpbnZhbGlkYXRlCiAgICAgICAgICAgICAvLyB0aGUg
cHJvcGVydGllcyBjYWNoZS4KQEAgLTQ5Miw2ICs0OTEsNyBAQCB2b2lkIFBhZ2U6OnVwZGF0ZVN0
eWxlRm9yQWxsUGFnZXNBZnRlckdsb2JhbENoYW5nZUluRW52aXJvbm1lbnQoKQogICAgICAgICAg
ICAgICAgIHN0eWxlUmVzb2x2ZXItPmludmFsaWRhdGVNYXRjaGVkUHJvcGVydGllc0NhY2hlKCk7
CiAgICAgICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+c2NoZWR1bGVGb3JjZWRTdHlsZVJlY2Fs
YygpOwogICAgICAgICB9CisgICAgfQogfQogCiB2b2lkIFBhZ2U6OnNldE5lZWRzUmVjYWxjU3R5
bGVJbkFsbEZyYW1lcygpCkBAIC01MTEsMjEgKzUxMSwyMCBAQCB2b2lkIFBhZ2U6OnJlZnJlc2hQ
bHVnaW5zKGJvb2wgcmVsb2FkKQogCiAgICAgVmVjdG9yPFJlZjxGcmFtZT4+IGZyYW1lc05lZWRp
bmdSZWxvYWQ7CiAKLSAgICBmb3IgKGF1dG8gaXQgPSBhbGxQYWdlcy0+YmVnaW4oKSwgZW5kID0g
YWxsUGFnZXMtPmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUGFnZSYgcGFnZSA9
ICoqaXQ7Ci0gICAgICAgIHBhZ2UubV9wbHVnaW5EYXRhLmNsZWFyKCk7CisgICAgZm9yIChhdXRv
JiBwYWdlIDogKmFsbFBhZ2VzKSB7CisgICAgICAgIHBhZ2UtPm1fcGx1Z2luRGF0YS5jbGVhcigp
OwogCiAgICAgICAgIGlmICghcmVsb2FkKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IAotICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZwYWdlLm1haW5GcmFtZSgpOyBmcmFtZTsg
ZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7CisgICAgICAgIGZvciAoRnJh
bWUqIGZyYW1lID0gJnBhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJl
ZSgpLnRyYXZlcnNlTmV4dCgpKSB7CiAgICAgICAgICAgICBpZiAoZnJhbWUtPmxvYWRlcigpLnN1
YmZyYW1lTG9hZGVyKCkuY29udGFpbnNQbHVnaW5zKCkpCiAgICAgICAgICAgICAgICAgZnJhbWVz
TmVlZGluZ1JlbG9hZC5hcHBlbmQoKmZyYW1lKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgZnJhbWVzTmVlZGluZ1JlbG9hZC5zaXplKCk7ICsraSkKLSAg
ICAgICAgZnJhbWVzTmVlZGluZ1JlbG9hZFtpXS0+bG9hZGVyKCkucmVsb2FkKCk7CisgICAgZm9y
IChhdXRvJiBmcmFtZSA6IGZyYW1lc05lZWRpbmdSZWxvYWQpCisgICAgICAgIGZyYW1lLT5sb2Fk
ZXIoKS5yZWxvYWQoKTsKIH0KIAogUGx1Z2luRGF0YSYgUGFnZTo6cGx1Z2luRGF0YSgpIGNvbnN0
CkBAIC05MDAsMTAgKzg5OSw4IEBAIHZvaWQgUGFnZTo6bG9ja0FsbE92ZXJsYXlTY3JvbGxiYXJz
VG9IaWRkZW4oYm9vbCBsb2NrT3ZlcmxheVNjcm9sbGJhcnMpCiAgICAgICAgIGlmICghc2Nyb2xs
YWJsZUFyZWFzKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgZm9yIChIYXNoU2V0
PFNjcm9sbGFibGVBcmVhKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc2Nyb2xsYWJsZUFyZWFzLT5i
ZWdpbigpLCBlbmQgPSBzY3JvbGxhYmxlQXJlYXMtPmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
LSAgICAgICAgICAgIFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSA9ICppdDsKKyAgICAg
ICAgZm9yIChhdXRvJiBzY3JvbGxhYmxlQXJlYSA6ICpzY3JvbGxhYmxlQXJlYXMpCiAgICAgICAg
ICAgICBzY3JvbGxhYmxlQXJlYS0+bG9ja092ZXJsYXlTY3JvbGxiYXJTdGF0ZVRvSGlkZGVuKGxv
Y2tPdmVybGF5U2Nyb2xsYmFycyk7Ci0gICAgICAgIH0KICAgICB9CiB9CiAgICAgCkBAIC0xMTc2
LDEwICsxMTczLDkgQEAgVmVjdG9yPFJlZjxQbHVnaW5WaWV3QmFzZT4+IFBhZ2U6OnBsdWdpblZp
ZXdzKCkKICAgICAgICAgaWYgKCF2aWV3KQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAg
Zm9yIChhdXRvIGl0ID0gdmlldy0+Y2hpbGRyZW4oKS5iZWdpbigpLCBlbmQgPSB2aWV3LT5jaGls
ZHJlbigpLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIFdpZGdldCYgd2lk
Z2V0ID0gKippdDsKLSAgICAgICAgICAgIGlmIChpczxQbHVnaW5WaWV3QmFzZT4od2lkZ2V0KSkK
LSAgICAgICAgICAgICAgICB2aWV3cy5hcHBlbmQoZG93bmNhc3Q8UGx1Z2luVmlld0Jhc2U+KHdp
ZGdldCkpOworICAgICAgICBmb3IgKGF1dG8mIHdpZGdldCA6IHZpZXctPmNoaWxkcmVuKCkpIHsK
KyAgICAgICAgICAgIGlmIChpczxQbHVnaW5WaWV3QmFzZT4oKndpZGdldCkpCisgICAgICAgICAg
ICAgICAgdmlld3MuYXBwZW5kKGRvd25jYXN0PFBsdWdpblZpZXdCYXNlPigqd2lkZ2V0KSk7CiAg
ICAgICAgIH0KICAgICB9CiAKQEAgLTExOTMsMTAgKzExODksOCBAQCB2b2lkIFBhZ2U6OnN0b3Jh
Z2VCbG9ja2luZ1N0YXRlQ2hhbmdlZCgpCiAKICAgICAvLyBDb2xsZWN0IHRoZSBQbHVnaW5WaWV3
cyBpbiB0byBhIHZlY3RvciB0byBlbnN1cmUgdGhhdCBhY3Rpb24gdGhlIHBsdWctaW4gdGFrZXMK
ICAgICAvLyBmcm9tIGJlbG93IHN0b3JhZ2VCbG9ja2luZ1N0YXRlQ2hhbmdlZCBkb2VzIG5vdCBh
ZmZlY3QgdGhlaXIgbGlmZXRpbWUuCi0gICAgYXV0byB2aWV3cyA9IHBsdWdpblZpZXdzKCk7Ci0K
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmlld3Muc2l6ZSgpOyArK2kpCi0gICAgICAg
IHZpZXdzW2ldLT5zdG9yYWdlQmxvY2tpbmdTdGF0ZUNoYW5nZWQoKTsKKyAgICBmb3IgKGF1dG8m
IHZpZXcgOiBwbHVnaW5WaWV3cygpKQorICAgICAgICB2aWV3LT5zdG9yYWdlQmxvY2tpbmdTdGF0
ZUNoYW5nZWQoKTsKIH0KIAogdm9pZCBQYWdlOjplbmFibGVMZWdhY3lQcml2YXRlQnJvd3Npbmco
Ym9vbCBwcml2YXRlQnJvd3NpbmdFbmFibGVkKQpAQCAtMTMxMiw4ICsxMzA2LDggQEAgdm9pZCBQ
YWdlOjpzZXRJc1Zpc2libGVJbnRlcm5hbChib29sIGlzVmlzaWJsZSkKICAgICBmb3IgKEZyYW1l
KiBmcmFtZSA9IG1fbWFpbkZyYW1lLmdldCgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgp
LnRyYXZlcnNlTmV4dCgpKQogICAgICAgICBkb2N1bWVudHMuYXBwZW5kKCpmcmFtZS0+ZG9jdW1l
bnQoKSk7CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IGRvY3VtZW50cy5zaXplKCk7
IGkgPCBzaXplOyArK2kpCi0gICAgICAgIGRvY3VtZW50c1tpXS0+dmlzaWJpbGl0eVN0YXRlQ2hh
bmdlZCgpOworICAgIGZvciAoYXV0byYgZG9jdW1lbnQgOiBkb2N1bWVudHMpCisgICAgICAgIGRv
Y3VtZW50LT52aXNpYmlsaXR5U3RhdGVDaGFuZ2VkKCk7CiAKICAgICBpZiAoIWlzVmlzaWJsZSkg
ewogICAgICAgICBpZiAobV9zZXR0aW5ncy0+aGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNp
b25FbmFibGVkKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAKaW5kZXggYTA4YTkyOWJlZmJk
M2I5M2QwNjU3NDIxMDEzNDc2MWFjZTUwYzIwZi4uOWNmN2Q1NmMwNjMyMjc3NzAwMTdhZTg1YmRi
NjI1NWIzMGJjYzVmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmNwcApAQCAtMTA5LDggKzEw
OSw4IEBAIHZvaWQgUGFnZUdyb3VwOjpyZW1vdmVQYWdlKFBhZ2UmIHBhZ2UpCiAjaWYgRU5BQkxF
KFZJREVPX1RSQUNLKQogdm9pZCBQYWdlR3JvdXA6OmNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQo
KQogewotICAgIGZvciAoYXV0byBpdCA9IG1fcGFnZXMuYmVnaW4oKSwgZW5kID0gbV9wYWdlcy5l
bmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAoKml0KS0+Y2FwdGlvblByZWZlcmVuY2Vz
Q2hhbmdlZCgpOworICAgIGZvciAoYXV0byYgcGFnZSA6IG1fcGFnZXMpCisgICAgICAgIHBhZ2Ut
PmNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQoKTsKICAgICBQYWdlQ2FjaGU6OnNpbmdsZXRvbigp
Lm1hcmtQYWdlc0ZvckNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQoKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9QYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3BwCmluZGV4IGI1ZjFjYTM0MWM4
MjE0NjcyN2ZjZjVlMWVkMWZkMDNhMjcwMDA4YjMuLjM1MjNlZGE0NjJlNDNiZmNkNWE0YjcxNzRk
ZDdiM2MwNjZlNjNjYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3Vw
TG9hZERlZmVycmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cExvYWRE
ZWZlcnJlci5jcHAKQEAgLTMzLDExICszMyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUGFn
ZUdyb3VwTG9hZERlZmVycmVyOjpQYWdlR3JvdXBMb2FkRGVmZXJyZXIoUGFnZSYgcGFnZSwgYm9v
bCBkZWZlclNlbGYpCiB7Ci0gICAgY29uc3QgSGFzaFNldDxQYWdlKj4mIHBhZ2VzID0gcGFnZS5n
cm91cCgpLnBhZ2VzKCk7Ci0KLSAgICBIYXNoU2V0PFBhZ2UqPjo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gcGFnZXMuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PFBhZ2UqPjo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBwYWdlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUGFnZSogb3Ro
ZXJQYWdlID0gKml0OworICAgIGZvciAoYXV0byYgb3RoZXJQYWdlIDogcGFnZS5ncm91cCgpLnBh
Z2VzKCkpIHsKICAgICAgICAgaWYgKChkZWZlclNlbGYgfHwgb3RoZXJQYWdlICE9ICZwYWdlKSkg
ewogICAgICAgICAgICAgaWYgKCFvdGhlclBhZ2UtPmRlZmVyc0xvYWRpbmcoKSkgewogICAgICAg
ICAgICAgICAgIG1fZGVmZXJyZWRGcmFtZXMuYXBwZW5kKCZvdGhlclBhZ2UtPm1haW5GcmFtZSgp
KTsKQEAgLTUwLDE2ICs0NiwxNiBAQCBQYWdlR3JvdXBMb2FkRGVmZXJyZXI6OlBhZ2VHcm91cExv
YWREZWZlcnJlcihQYWdlJiBwYWdlLCBib29sIGRlZmVyU2VsZikKICAgICAgICAgfQogICAgIH0K
IAotICAgIHNpemVfdCBjb3VudCA9IG1fZGVmZXJyZWRGcmFtZXMuc2l6ZSgpOwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBt
X2RlZmVycmVkRnJhbWVzW2ldLT5wYWdlKCkpCisgICAgZm9yIChhdXRvJiBkZWZlcnJlZEZyYW1l
IDogbV9kZWZlcnJlZEZyYW1lcykgeworICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGRlZmVycmVk
RnJhbWUtPnBhZ2UoKSkKICAgICAgICAgICAgIHBhZ2UtPnNldERlZmVyc0xvYWRpbmcodHJ1ZSk7
CisgICAgfQogfQogCiBQYWdlR3JvdXBMb2FkRGVmZXJyZXI6On5QYWdlR3JvdXBMb2FkRGVmZXJy
ZXIoKQogewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9kZWZlcnJlZEZyYW1lcy5zaXpl
KCk7ICsraSkgewotICAgICAgICBpZiAoUGFnZSogcGFnZSA9IG1fZGVmZXJyZWRGcmFtZXNbaV0t
PnBhZ2UoKSkgeworICAgIGZvciAoYXV0byYgZGVmZXJyZWRGcmFtZSA6IG1fZGVmZXJyZWRGcmFt
ZXMpIHsKKyAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBkZWZlcnJlZEZyYW1lLT5wYWdlKCkpIHsK
ICAgICAgICAgICAgIHBhZ2UtPnNldERlZmVyc0xvYWRpbmcoZmFsc2UpOwogCiAgICAgICAgICAg
ICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZwYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0g
ZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFs
aXplci5jcHAKaW5kZXggNmUzOGI2MjliMjkzMWYxYzI1ZGE1MzFlY2ZkZWIxMjllZDA2ODE2MC4u
ZTgxNDFjYjZiNGEzNzQ3MjBkYjBlZDE3OTA3YTBhNTIyZWQwMjYwMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9QYWdlU2VyaWFsaXplci5jcHAKQEAgLTIyMSw4ICsyMjEsNyBAQCB2b2lkIFBhZ2VTZXJp
YWxpemVyOjpzZXJpYWxpemVGcmFtZShGcmFtZSogZnJhbWUpCiAgICAgbV9yZXNvdXJjZXMtPmFw
cGVuZChSZXNvdXJjZSh1cmwsIGRvY3VtZW50LT5zdWdnZXN0ZWRNSU1FVHlwZSgpLCBTaGFyZWRC
dWZmZXI6OmNyZWF0ZShmcmFtZUhUTUwuZGF0YSgpLCBmcmFtZUhUTUwubGVuZ3RoKCkpKSk7CiAg
ICAgbV9yZXNvdXJjZVVSTHMuYWRkKHVybCk7CiAKLSAgICBmb3IgKFZlY3RvcjxOb2RlKj46Oml0
ZXJhdG9yIGl0ZXIgPSBub2Rlcy5iZWdpbigpOyBpdGVyICE9IG5vZGVzLmVuZCgpOyArK2l0ZXIp
IHsKLSAgICAgICAgTm9kZSogbm9kZSA9ICppdGVyOworICAgIGZvciAoYXV0byYgbm9kZSA6IG5v
ZGVzKSB7CiAgICAgICAgIGlmICghaXM8RWxlbWVudD4oKm5vZGUpKQogICAgICAgICAgICAgY29u
dGludWU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZS5jcHAKaW5kZXggYjYzOTkxMTE1NDI0
OTQzYzY2ZjI1NWZjMmM1MTE4ZDZkODhmMDQxNi4uNjQ4OTZiOWFjNzMyMDhhMWMxNTIwODBmZjEx
YTc5ZGI1NjU5ZjdlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5j
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZS5jcHAKQEAgLTExOCw4
ICsxMTgsOCBAQCBQYXNzUmVmUHRyPFBlcmZvcm1hbmNlRW50cnlMaXN0PiBQZXJmb3JtYW5jZTo6
d2Via2l0R2V0RW50cmllc0J5VHlwZShjb25zdCBTdHJpbgogCiAjaWYgRU5BQkxFKFJFU09VUkNF
X1RJTUlORykKICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZW50cnlUeXBlLCAicmVzb3VyY2Ui
KSkKLSAgICAgICAgZm9yIChWZWN0b3I8UmVmUHRyPFBlcmZvcm1hbmNlRW50cnk+Pjo6Y29uc3Rf
aXRlcmF0b3IgcmVzb3VyY2UgPSBtX3Jlc291cmNlVGltaW5nQnVmZmVyLmJlZ2luKCk7IHJlc291
cmNlICE9IG1fcmVzb3VyY2VUaW1pbmdCdWZmZXIuZW5kKCk7ICsrcmVzb3VyY2UpCi0gICAgICAg
ICAgICBlbnRyaWVzLT5hcHBlbmQoKnJlc291cmNlKTsKKyAgICAgICAgZm9yIChhdXRvJiByZXNv
dXJjZSA6IG1fcmVzb3VyY2VUaW1pbmdCdWZmZXIpCisgICAgICAgICAgICBlbnRyaWVzLT5hcHBl
bmQocmVzb3VyY2UpOwogI2VuZGlmIC8vIEVOQUJMRShSRVNPVVJDRV9USU1JTkcpCiAKICNpZiBF
TkFCTEUoVVNFUl9USU1JTkcpCkBAIC0xNDEsOSArMTQxLDEwIEBAIFBhc3NSZWZQdHI8UGVyZm9y
bWFuY2VFbnRyeUxpc3Q+IFBlcmZvcm1hbmNlOjp3ZWJraXRHZXRFbnRyaWVzQnlOYW1lKGNvbnN0
IFN0cmluCiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfVElNSU5HKQogICAgIGlmIChlbnRyeVR5cGUu
aXNOdWxsKCkgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoZW50cnlUeXBlLCAicmVzb3VyY2UiKSkKLSAg
ICAgICAgZm9yIChWZWN0b3I8UmVmUHRyPFBlcmZvcm1hbmNlRW50cnk+Pjo6Y29uc3RfaXRlcmF0
b3IgcmVzb3VyY2UgPSBtX3Jlc291cmNlVGltaW5nQnVmZmVyLmJlZ2luKCk7IHJlc291cmNlICE9
IG1fcmVzb3VyY2VUaW1pbmdCdWZmZXIuZW5kKCk7ICsrcmVzb3VyY2UpCi0gICAgICAgICAgICBp
ZiAoKCpyZXNvdXJjZSktPm5hbWUoKSA9PSBuYW1lKQotICAgICAgICAgICAgICAgIGVudHJpZXMt
PmFwcGVuZCgqcmVzb3VyY2UpOworICAgICAgICBmb3IgKGF1dG8mIHJlc291cmNlIDogbV9yZXNv
dXJjZVRpbWluZ0J1ZmZlcikgeworICAgICAgICAgICAgaWYgKHJlc291cmNlLT5uYW1lKCkgPT0g
bmFtZSkKKyAgICAgICAgICAgICAgICBlbnRyaWVzLT5hcHBlbmQocmVzb3VyY2UpOworICAgICAg
ICB9CiAjZW5kaWYgLy8gRU5BQkxFKFJFU09VUkNFX1RJTUlORykKIAogI2lmIEVOQUJMRShVU0VS
X1RJTUlORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VSZXNv
dXJjZVRpbWluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlUmVzb3VyY2VU
aW1pbmcuY3BwCmluZGV4IDljOTdjYzAxYzZmOTI3YjY3NTU5Zjg0OWRiNDZkZGI2ZmIwZmE2MjQu
LmE0NmFjMjQxZTU3MDBiOWZhYzA0OTNjNDgyMGNiNjVmYjUzZjA0OTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZVJlc291cmNlVGltaW5nLmNwcApAQCAtNjgsOSAr
NjgsMTAgQEAgc3RhdGljIGJvb2wgcGFzc2VzVGltaW5nQWxsb3dDaGVjayhjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJiByZXNwb25zZSwgRG9jdW1lbnQqIHIKICAgICBjb25zdCBTdHJpbmcmIHNlY3Vy
aXR5T3JpZ2luID0gcmVxdWVzdGluZ0RvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmlu
ZygpOwogICAgIFZlY3RvcjxTdHJpbmc+IHRpbWluZ0FsbG93T3JpZ2luczsKICAgICB0aW1pbmdB
bGxvd09yaWdpblN0cmluZy5zcGxpdCgnICcsIHRpbWluZ0FsbG93T3JpZ2lucyk7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCB0aW1pbmdBbGxvd09yaWdpbnMuc2l6ZSgpOyArK2kpCi0gICAg
ICAgIGlmICh0aW1pbmdBbGxvd09yaWdpbnNbaV0gPT0gc2VjdXJpdHlPcmlnaW4pCisgICAgZm9y
IChhdXRvJiBvcmlnaW4gOiB0aW1pbmdBbGxvd09yaWdpbnMpIHsKKyAgICAgICAgaWYgKG9yaWdp
biA9PSBzZWN1cml0eU9yaWdpbikKICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KIAog
ICAgIHJldHVybiBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGVy
Zm9ybWFuY2VVc2VyVGltaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VV
c2VyVGltaW5nLmNwcAppbmRleCAxYjllNTc2ODdjODhhNzE4MDNkNjQ2MjU0N2MzMGYzYTYyYjNj
YTBmLi5hODAwMjJlMGM5ZTc3Y2ExMDM0MTk3YjE5YTRhYWU2YmY3MmNlYjkwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlVXNlclRpbWluZy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZVVzZXJUaW1pbmcuY3BwCkBAIC0xNjUsOCArMTY1
LDggQEAgc3RhdGljIFZlY3RvcjxSZWZQdHI8UGVyZm9ybWFuY2VFbnRyeT4gPiBjb252ZXJ0VG9F
bnRyeVNlcXVlbmNlKGNvbnN0IFBlcmZvcm1hbmMKIHsKICAgICBWZWN0b3I8UmVmUHRyPFBlcmZv
cm1hbmNlRW50cnk+ID4gZW50cmllczsKIAotICAgIGZvciAoUGVyZm9ybWFuY2VFbnRyeU1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBwZXJmb3JtYW5jZUVudHJ5TWFwLmJlZ2luKCk7IGl0ICE9IHBl
cmZvcm1hbmNlRW50cnlNYXAuZW5kKCk7ICsraXQpCi0gICAgICAgIGVudHJpZXMuYXBwZW5kVmVj
dG9yKGl0LT52YWx1ZSk7CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IHBlcmZvcm1hbmNlRW50cnlN
YXAudmFsdWVzKCkpCisgICAgICAgIGVudHJpZXMuYXBwZW5kVmVjdG9yKGVudHJ5KTsKIAogICAg
IHJldHVybiBlbnRyaWVzOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1
cml0eVBvbGljeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5UG9saWN5LmNwcApp
bmRleCA1ODFiNWNiZmVhZTc1ZDVkNTI1ZGVkZTI0OWFlMGI4NDk5MjNkNWMxLi5lMzk4MTRiNDQ0
NGZlYTM4MzBhMGYwYzMxZDQwZmUzNWYxMTQ5NDA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1NlY3VyaXR5UG9saWN5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3Vy
aXR5UG9saWN5LmNwcApAQCAtMTExLDEwICsxMTEsMTAgQEAgYm9vbCBTZWN1cml0eVBvbGljeTo6
YWxsb3dTdWJzdGl0dXRlRGF0YUFjY2Vzc1RvTG9jYWwoKQogYm9vbCBTZWN1cml0eVBvbGljeTo6
aXNBY2Nlc3NXaGl0ZUxpc3RlZChjb25zdCBTZWN1cml0eU9yaWdpbiogYWN0aXZlT3JpZ2luLCBj
b25zdCBTZWN1cml0eU9yaWdpbiogdGFyZ2V0T3JpZ2luKQogewogICAgIGlmIChPcmlnaW5BY2Nl
c3NXaGl0ZUxpc3QqIGxpc3QgPSBvcmlnaW5BY2Nlc3NNYXAoKS5nZXQoYWN0aXZlT3JpZ2luLT50
b1N0cmluZygpKSkgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3QtPnNpemUo
KTsgICsraSkgewotICAgICAgICAgICBpZiAobGlzdC0+YXQoaSkubWF0Y2hlc09yaWdpbigqdGFy
Z2V0T3JpZ2luKSkKLSAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgIH0KKyAgICAg
ICAgZm9yIChhdXRvJiBlbnRyeSA6ICpsaXN0KSB7CisgICAgICAgICAgICBpZiAoZW50cnkubWF0
Y2hlc09yaWdpbigqdGFyZ2V0T3JpZ2luKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1VzZXJDb250ZW50VVJMUGF0dGVybi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1VzZXJDb250ZW50VVJMUGF0dGVybi5jcHAKaW5kZXggZGY3NzA2ZmU0YTA5NGVhNTYz
Y2RiY2UzZTZkMzkwNDQyNzYzMDkzNS4uMmVhMThlYzc1YmEwZDgwOWQ3NjVhMWI0OGEzNjY2Yzlj
ZTlmOTk1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudFVSTFBh
dHRlcm4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlckNvbnRlbnRVUkxQYXR0ZXJu
LmNwcApAQCAtMzcsOSArMzcsOCBAQCBib29sIFVzZXJDb250ZW50VVJMUGF0dGVybjo6bWF0Y2hl
c1BhdHRlcm5zKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPgogICAgIC8vIElm
IHRoZXJlIGlzIG5vIHdoaXRlbGlzdCBhdCBhbGwsIHRoZW4gYWxsIFVSTHMgYXJlIGFzc3VtZWQg
dG8gYmUgaW4gdGhlIHdoaXRlbGlzdC4KICAgICBib29sIG1hdGNoZXNXaGl0ZWxpc3QgPSB3aGl0
ZWxpc3QuaXNFbXB0eSgpOwogICAgIGlmICghbWF0Y2hlc1doaXRlbGlzdCkgewotICAgICAgICBz
aXplX3Qgd2hpdGVsaXN0U2l6ZSA9IHdoaXRlbGlzdC5zaXplKCk7Ci0gICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgd2hpdGVsaXN0U2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBVc2VyQ29u
dGVudFVSTFBhdHRlcm4gY29udGVudFBhdHRlcm4od2hpdGVsaXN0W2ldKTsKKyAgICAgICAgZm9y
IChhdXRvJiBlbnRyeSA6IHdoaXRlbGlzdCkgeworICAgICAgICAgICAgVXNlckNvbnRlbnRVUkxQ
YXR0ZXJuIGNvbnRlbnRQYXR0ZXJuKGVudHJ5KTsKICAgICAgICAgICAgIGlmIChjb250ZW50UGF0
dGVybi5tYXRjaGVzKHVybCkpIHsKICAgICAgICAgICAgICAgICBtYXRjaGVzV2hpdGVsaXN0ID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTQ5LDkgKzQ4LDggQEAgYm9vbCBVc2Vy
Q29udGVudFVSTFBhdHRlcm46Om1hdGNoZXNQYXR0ZXJucyhjb25zdCBVUkwmIHVybCwgY29uc3Qg
VmVjdG9yPFN0cmluZz4KIAogICAgIGJvb2wgbWF0Y2hlc0JsYWNrbGlzdCA9IGZhbHNlOwogICAg
IGlmICghYmxhY2tsaXN0LmlzRW1wdHkoKSkgewotICAgICAgICBzaXplX3QgYmxhY2tsaXN0U2l6
ZSA9IGJsYWNrbGlzdC5zaXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxh
Y2tsaXN0U2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBVc2VyQ29udGVudFVSTFBhdHRlcm4gY29u
dGVudFBhdHRlcm4oYmxhY2tsaXN0W2ldKTsKKyAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IGJs
YWNrbGlzdCkgeworICAgICAgICAgICAgVXNlckNvbnRlbnRVUkxQYXR0ZXJuIGNvbnRlbnRQYXR0
ZXJuKGVudHJ5KTsKICAgICAgICAgICAgIGlmIChjb250ZW50UGF0dGVybi5tYXRjaGVzKHVybCkp
IHsKICAgICAgICAgICAgICAgICBtYXRjaGVzQmxhY2tsaXN0ID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvV2luZG93RmVhdHVy
ZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9XaW5kb3dGZWF0dXJlcy5jcHAKaW5kZXggMDgy
OTg4NzQ0NmYxNWExZWZlZmIyZTc5ODQwZThiYzk1MmVkMWMyYy4uMTc3NGRjZjRmMGIyZTlmYmI5
NjRhZTlhZWIxNTg1ZWU0MDhkNjRmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9X
aW5kb3dGZWF0dXJlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9XaW5kb3dGZWF0dXJl
cy5jcHAKQEAgLTI0MCwxMCArMjQwLDcgQEAgdm9pZCBXaW5kb3dGZWF0dXJlczo6cGFyc2VEaWFs
b2dGZWF0dXJlcyhjb25zdCBTdHJpbmcmIHN0cmluZywgRGlhbG9nRmVhdHVyZXNNYXAKIHsKICAg
ICBWZWN0b3I8U3RyaW5nPiB2ZWN0b3I7CiAgICAgc3RyaW5nLnNwbGl0KCc7JywgdmVjdG9yKTsK
LSAgICBzaXplX3Qgc2l6ZSA9IHZlY3Rvci5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgY29uc3QgU3RyaW5nJiBmZWF0dXJlU3RyaW5nID0g
dmVjdG9yW2ldOwotCisgICAgZm9yIChhdXRvJiBmZWF0dXJlU3RyaW5nIDogdmVjdG9yKSB7CiAg
ICAgICAgIHNpemVfdCBzZXBhcmF0b3JQb3NpdGlvbiA9IGZlYXR1cmVTdHJpbmcuZmluZCgnPScp
OwogICAgICAgICBzaXplX3QgY29sb25Qb3NpdGlvbiA9IGZlYXR1cmVTdHJpbmcuZmluZCgnOicp
OwogICAgICAgICBpZiAoc2VwYXJhdG9yUG9zaXRpb24gIT0gbm90Rm91bmQgJiYgY29sb25Qb3Np
dGlvbiAhPSBub3RGb3VuZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0
aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRp
b24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKaW5kZXggYzU0NzYyMzZiMzEyYmNlYWEzMzMzZmNk
MGUwY2I0NDFlMzNiMDIwMy4uNzg4NWNhYzc5NTM5MjlkYzNhZjJmMzdmN2NjNmQwZDgxOGRhYWQy
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29u
dHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9u
Q29udHJvbGxlci5jcHAKQEAgLTExNSw5ICsxMTUsOCBAQCBkb3VibGUgQW5pbWF0aW9uQ29udHJv
bGxlclByaXZhdGU6OnVwZGF0ZUFuaW1hdGlvbnMoU2V0Q2hhbmdlZCBjYWxsU2V0Q2hhbmdlZC8q
CiAgICAgZG91YmxlIHRpbWVUb05leHRTZXJ2aWNlID0gLTE7CiAgICAgYm9vbCBjYWxsZWRTZXRD
aGFuZ2VkID0gZmFsc2U7CiAKLSAgICBhdXRvIGVuZCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5l
bmQoKTsKLSAgICBmb3IgKGF1dG8gaXQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIENvbXBvc2l0ZUFuaW1hdGlvbiYgYW5pbWF0aW9u
ID0gKml0LT52YWx1ZTsKKyAgICBmb3IgKGF1dG8mIGNvbXBvc2l0ZUFuaW1hdGlvbiA6IG1fY29t
cG9zaXRlQW5pbWF0aW9ucykgeworICAgICAgICBDb21wb3NpdGVBbmltYXRpb24mIGFuaW1hdGlv
biA9ICpjb21wb3NpdGVBbmltYXRpb24udmFsdWU7CiAgICAgICAgIGlmICghYW5pbWF0aW9uLmlz
U3VzcGVuZGVkKCkgJiYgYW5pbWF0aW9uLmhhc0FuaW1hdGlvbnMoKSkgewogICAgICAgICAgICAg
ZG91YmxlIHQgPSBhbmltYXRpb24udGltZVRvTmV4dFNlcnZpY2UoKTsKICAgICAgICAgICAgIGlm
ICh0ICE9IC0xICYmICh0IDwgdGltZVRvTmV4dFNlcnZpY2UgfHwgdGltZVRvTmV4dFNlcnZpY2Ug
PT0gLTEpKQpAQCAtMTI1LDcgKzEyNCw3IEBAIGRvdWJsZSBBbmltYXRpb25Db250cm9sbGVyUHJp
dmF0ZTo6dXBkYXRlQW5pbWF0aW9ucyhTZXRDaGFuZ2VkIGNhbGxTZXRDaGFuZ2VkLyoKICAgICAg
ICAgICAgIGlmICghdGltZVRvTmV4dFNlcnZpY2UpIHsKICAgICAgICAgICAgICAgICBpZiAoY2Fs
bFNldENoYW5nZWQgIT0gQ2FsbFNldENoYW5nZWQpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBpdC0+a2V5LT5lbGVtZW50KCk7
CisgICAgICAgICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IGNvbXBvc2l0ZUFuaW1hdGlvbi5r
ZXktPmVsZW1lbnQoKTsKICAgICAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudCk7CiAgICAgICAg
ICAgICAgICAgQVNTRVJUKCFlbGVtZW50LT5kb2N1bWVudCgpLmluUGFnZUNhY2hlKCkpOwogICAg
ICAgICAgICAgICAgIGVsZW1lbnQtPnNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhldGljU3R5bGVD
aGFuZ2UpOwpAQCAtMTkyLDE3ICsxOTEsMTYgQEAgdm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJp
dmF0ZTo6ZmlyZUV2ZW50c0FuZFVwZGF0ZVN0eWxlKCkKIAogICAgIC8vIGZpcmUgYWxsIHRoZSBl
dmVudHMKICAgICBWZWN0b3I8RXZlbnRUb0Rpc3BhdGNoPiBldmVudHNUb0Rpc3BhdGNoID0gV1RG
Ojptb3ZlKG1fZXZlbnRzVG9EaXNwYXRjaCk7Ci0gICAgVmVjdG9yPEV2ZW50VG9EaXNwYXRjaD46
OmNvbnN0X2l0ZXJhdG9yIGV2ZW50c1RvRGlzcGF0Y2hFbmQgPSBldmVudHNUb0Rpc3BhdGNoLmVu
ZCgpOwotICAgIGZvciAoVmVjdG9yPEV2ZW50VG9EaXNwYXRjaD46OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gZXZlbnRzVG9EaXNwYXRjaC5iZWdpbigpOyBpdCAhPSBldmVudHNUb0Rpc3BhdGNoRW5kOyAr
K2l0KSB7Ci0gICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBpdC0+ZWxlbWVudC5nZXQoKTsKLSAg
ICAgICAgaWYgKGl0LT5ldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnRyYW5zaXRpb25lbmRFdmVu
dCkKLSAgICAgICAgICAgIGVsZW1lbnQtPmRpc3BhdGNoRXZlbnQoVHJhbnNpdGlvbkV2ZW50Ojpj
cmVhdGUoaXQtPmV2ZW50VHlwZSwgaXQtPm5hbWUsIGl0LT5lbGFwc2VkVGltZSwgUHNldWRvRWxl
bWVudDo6cHNldWRvRWxlbWVudE5hbWVGb3JFdmVudHMoZWxlbWVudC0+cHNldWRvSWQoKSkpKTsK
KyAgICBmb3IgKGF1dG8mIGV2ZW50IDogZXZlbnRzVG9EaXNwYXRjaCkgeworICAgICAgICBFbGVt
ZW50JiBlbGVtZW50ID0gKmV2ZW50LmVsZW1lbnQ7CisgICAgICAgIGlmIChldmVudC5ldmVudFR5
cGUgPT0gZXZlbnROYW1lcygpLnRyYW5zaXRpb25lbmRFdmVudCkKKyAgICAgICAgICAgIGVsZW1l
bnQuZGlzcGF0Y2hFdmVudChUcmFuc2l0aW9uRXZlbnQ6OmNyZWF0ZShldmVudC5ldmVudFR5cGUs
IGV2ZW50Lm5hbWUsIGV2ZW50LmVsYXBzZWRUaW1lLCBQc2V1ZG9FbGVtZW50Ojpwc2V1ZG9FbGVt
ZW50TmFtZUZvckV2ZW50cyhlbGVtZW50LnBzZXVkb0lkKCkpKSk7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGVsZW1lbnQtPmRpc3BhdGNoRXZlbnQoQW5pbWF0aW9uRXZlbnQ6OmNyZWF0ZShp
dC0+ZXZlbnRUeXBlLCBpdC0+bmFtZSwgaXQtPmVsYXBzZWRUaW1lKSk7CisgICAgICAgICAgICBl
bGVtZW50LmRpc3BhdGNoRXZlbnQoQW5pbWF0aW9uRXZlbnQ6OmNyZWF0ZShldmVudC5ldmVudFR5
cGUsIGV2ZW50Lm5hbWUsIGV2ZW50LmVsYXBzZWRUaW1lKSk7CiAgICAgfQogCi0gICAgZm9yICh1
bnNpZ25lZCBpID0gMCwgc2l6ZSA9IG1fZWxlbWVudENoYW5nZXNUb0Rpc3BhdGNoLnNpemUoKTsg
aSA8IHNpemU7ICsraSkKLSAgICAgICAgbV9lbGVtZW50Q2hhbmdlc1RvRGlzcGF0Y2hbaV0tPnNl
dE5lZWRzU3R5bGVSZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOworICAgIGZvciAoYXV0byYg
Y2hhbmdlIDogbV9lbGVtZW50Q2hhbmdlc1RvRGlzcGF0Y2gpCisgICAgICAgIGNoYW5nZS0+c2V0
TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CiAKICAgICBtX2VsZW1lbnRD
aGFuZ2VzVG9EaXNwYXRjaC5jbGVhcigpOwogCkBAIC0zMTEsOSArMzA5LDkgQEAgdm9pZCBBbmlt
YXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c3VzcGVuZEFuaW1hdGlvbnNGb3JEb2N1bWVudChEb2N1
bWVudCogZG9jdW1lbnQKIHsKICAgICBBbmltYXRpb25Qcml2YXRlVXBkYXRlQmxvY2sgdXBkYXRl
QmxvY2soKnRoaXMpOwogCi0gICAgZm9yIChhdXRvIGl0ID0gbV9jb21wb3NpdGVBbmltYXRpb25z
LmJlZ2luKCksIGVuZCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5lbmQoKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgIGlmICgmaXQtPmtleS0+ZG9jdW1lbnQoKSA9PSBkb2N1bWVudCkKLSAg
ICAgICAgICAgIGl0LT52YWx1ZS0+c3VzcGVuZEFuaW1hdGlvbnMoKTsKKyAgICBmb3IgKGF1dG8m
IGFuaW1hdGlvbiA6IG1fY29tcG9zaXRlQW5pbWF0aW9ucykgeworICAgICAgICBpZiAoJmFuaW1h
dGlvbi5rZXktPmRvY3VtZW50KCkgPT0gZG9jdW1lbnQpCisgICAgICAgICAgICBhbmltYXRpb24u
dmFsdWUtPnN1c3BlbmRBbmltYXRpb25zKCk7CiAgICAgfQogCiAgICAgdXBkYXRlQW5pbWF0aW9u
VGltZXIoKTsKQEAgLTMyMyw5ICszMjEsOSBAQCB2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2
YXRlOjpyZXN1bWVBbmltYXRpb25zRm9yRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQogewog
ICAgIEFuaW1hdGlvblByaXZhdGVVcGRhdGVCbG9jayB1cGRhdGVCbG9jaygqdGhpcyk7CiAKLSAg
ICBmb3IgKGF1dG8gaXQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuYmVnaW4oKSwgZW5kID0gbV9j
b21wb3NpdGVBbmltYXRpb25zLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYg
KCZpdC0+a2V5LT5kb2N1bWVudCgpID09IGRvY3VtZW50KQotICAgICAgICAgICAgaXQtPnZhbHVl
LT5yZXN1bWVBbmltYXRpb25zKCk7CisgICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2NvbXBv
c2l0ZUFuaW1hdGlvbnMpIHsKKyAgICAgICAgaWYgKCZhbmltYXRpb24ua2V5LT5kb2N1bWVudCgp
ID09IGRvY3VtZW50KQorICAgICAgICAgICAgYW5pbWF0aW9uLnZhbHVlLT5yZXN1bWVBbmltYXRp
b25zKCk7CiAgICAgfQogCiAgICAgdXBkYXRlQW5pbWF0aW9uVGltZXIoKTsKQEAgLTQzNSw5ICs0
MzMsOSBAQCB1bnNpZ25lZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6bnVtYmVyT2ZBY3Rp
dmVBbmltYXRpb25zKERvY3VtZW50KiBkb2N1bWVudAogewogICAgIHVuc2lnbmVkIGNvdW50ID0g
MDsKICAgICAKLSAgICBmb3IgKGF1dG8gaXQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuYmVnaW4o
KSwgZW5kID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
LSAgICAgICAgaWYgKCZpdC0+a2V5LT5kb2N1bWVudCgpID09IGRvY3VtZW50KQotICAgICAgICAg
ICAgY291bnQgKz0gaXQtPnZhbHVlLT5udW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKTsKKyAgICBm
b3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fY29tcG9zaXRlQW5pbWF0aW9ucykgeworICAgICAgICBp
ZiAoJmFuaW1hdGlvbi5rZXktPmRvY3VtZW50KCkgPT0gZG9jdW1lbnQpCisgICAgICAgICAgICBj
b3VudCArPSBhbmltYXRpb24udmFsdWUtPm51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpOwogICAg
IH0KIAogICAgIHJldHVybiBjb3VudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
YW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
YW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcAppbmRleCBhOGRiYmQwZDIyMTFmNGZk
MWY5ODU5N2M4MzNjZjc4YjJjZGI2MzBiLi45MzA1N2RiNGU5NzgzYjA4NzE3MmVhMzgwZjU4NzY5
OGI4OTIzODkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NQ
cm9wZXJ0eUFuaW1hdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24v
Q1NTUHJvcGVydHlBbmltYXRpb24uY3BwCkBAIC0xMDQ0LDkgKzEwNDQsOCBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5k
ZXJTdHlsZSogYikgY29uc3QKICAgICB7Ci0gICAgICAgIFZlY3RvcjxBbmltYXRpb25Qcm9wZXJ0
eVdyYXBwZXJCYXNlKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcHJvcGVydHlXcmFwcGVycy5l
bmQoKTsKLSAgICAgICAgZm9yIChWZWN0b3I8QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSo+
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcHJvcGVydHlXcmFwcGVycy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlmICghKCppdCktPmVxdWFscyhhLCBiKSkKKyAgICAg
ICAgZm9yIChhdXRvJiB3cmFwcGVyIDogbV9wcm9wZXJ0eVdyYXBwZXJzKSB7CisgICAgICAgICAg
ICBpZiAoIXdyYXBwZXItPmVxdWFscyhhLCBiKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMDU0LDkgKzEwNTMsOCBA
QCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgYmxlbmQoY29uc3QgQW5pbWF0aW9uQmFzZSog
YW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRl
clN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0CiAgICAgewotICAgICAgICBWZWN0b3I8
QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3By
b3BlcnR5V3JhcHBlcnMuZW5kKCk7Ci0gICAgICAgIGZvciAoVmVjdG9yPEFuaW1hdGlvblByb3Bl
cnR5V3JhcHBlckJhc2UqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Byb3BlcnR5V3JhcHBlcnMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgKCppdCktPmJsZW5kKGFuaW0s
IGRzdCwgYSwgYiwgcHJvZ3Jlc3MpOworICAgICAgICBmb3IgKGF1dG8mIHdyYXBwZXIgOiBtX3By
b3BlcnR5V3JhcHBlcnMpCisgICAgICAgICAgICB3cmFwcGVyLT5ibGVuZChhbmltLCBkc3QsIGEs
IGIsIHByb2dyZXNzKTsKICAgICB9CiAKICAgICBjb25zdCBWZWN0b3I8QW5pbWF0aW9uUHJvcGVy
dHlXcmFwcGVyQmFzZSo+JiBwcm9wZXJ0eVdyYXBwZXJzKCkgY29uc3QgeyByZXR1cm4gbV9wcm9w
ZXJ0eVdyYXBwZXJzOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCmluZGV4IGY3ZGIyMDA2NjA5NWQ2
NjQzMGI1NmVlNmM1ZTU3MTgxNTlmNzA5MzMuLjU1Y2I4NDJjM2ZlMmI1MmE4MzlmODhjMzNmZjhh
OTQxOWYxZTc2YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0Fz
eW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCkBAIC02Nyw4ICs2Nyw4IEBAIHN0
YXRpYyBpbmxpbmUgdm9pZCBzZXRTdGF0ZVNjcm9sbGluZ05vZGVTbmFwT2Zmc2V0c0FzRmxvYXQo
U2Nyb2xsaW5nU3RhdGVTY3JvbGxpCiAgICAgLy8gRklYTUU6IEluY29ycG9yYXRlIGN1cnJlbnQg
cGFnZSBzY2FsZSBmYWN0b3IgaW4gc25hcHBpbmcgdG8gZGV2aWNlIHBpeGVsLiBQZXJoYXBzIHdl
IHNob3VsZCBqdXN0IGNvbnZlcnQgdG8gZmxvYXQgaGVyZSBhbmQgbGV0IFVJIHByb2Nlc3MgZG8g
dGhlIHBpeGVsIHNuYXBwaW5nPwogICAgIFZlY3RvcjxmbG9hdD4gc25hcE9mZnNldHNBc0Zsb2F0
OwogICAgIHNuYXBPZmZzZXRzQXNGbG9hdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNuYXBPZmZz
ZXRzLnNpemUoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzbmFwT2Zmc2V0cy5zaXpl
KCk7ICsraSkKLSAgICAgICAgc25hcE9mZnNldHNBc0Zsb2F0LmFwcGVuZChyb3VuZFRvRGV2aWNl
UGl4ZWwoc25hcE9mZnNldHNbaV0sIGRldmljZVNjYWxlRmFjdG9yLCBmYWxzZSkpOworICAgIGZv
ciAoYXV0byYgb2Zmc2V0IDogc25hcE9mZnNldHMpCisgICAgICAgIHNuYXBPZmZzZXRzQXNGbG9h
dC5hcHBlbmQocm91bmRUb0RldmljZVBpeGVsKG9mZnNldCwgZGV2aWNlU2NhbGVGYWN0b3IsIGZh
bHNlKSk7CiAKICAgICBpZiAoYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpCiAg
ICAgICAgIG5vZGUuc2V0SG9yaXpvbnRhbFNuYXBPZmZzZXRzKHNuYXBPZmZzZXRzQXNGbG9hdCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29y
ZGluYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29y
ZGluYXRvci5jcHAKaW5kZXggMzMzYWZjODcxYTc1MzhmNmZiM2JkYzRjM2RiZDQyYjNhZWNmZGEy
OS4uNWM1MmJhMGQ2MzRkMjVhZDQwMTM2MTllZGJiMTUyYjFkZWYwNWIyNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNw
cApAQCAtMTI4LDggKzEyOCw3IEBAIFJlZ2lvbiBTY3JvbGxpbmdDb29yZGluYXRvcjo6YWJzb2x1
dGVOb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbkZvckZyYW1lKGNvbnN0IEZyYW1lCiAgICAgLy8gdG8g
bm90IGFzayBmb3IgcmVnaW9ucyBhdCBiYWQgdGltZXMuCiAKICAgICBpZiAoY29uc3QgRnJhbWVW
aWV3OjpTY3JvbGxhYmxlQXJlYVNldCogc2Nyb2xsYWJsZUFyZWFzID0gZnJhbWVWaWV3LT5zY3Jv
bGxhYmxlQXJlYXMoKSkgewotICAgICAgICBmb3IgKEZyYW1lVmlldzo6U2Nyb2xsYWJsZUFyZWFT
ZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc2Nyb2xsYWJsZUFyZWFzLT5iZWdpbigpLCBlbmQgPSBz
Y3JvbGxhYmxlQXJlYXMtPmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIFNj
cm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSA9ICppdDsKKyAgICAgICAgZm9yIChhdXRvJiBz
Y3JvbGxhYmxlQXJlYSA6ICpzY3JvbGxhYmxlQXJlYXMpIHsKICAgICAgICAgICAgIC8vIENvbXBv
c2l0ZWQgc2Nyb2xsYWJsZSBhcmVhcyBjYW4gYmUgc2Nyb2xsZWQgb2ZmIHRoZSBtYWluIHRocmVh
ZC4KICAgICAgICAgICAgIGlmIChzY3JvbGxhYmxlQXJlYS0+dXNlc0FzeW5jU2Nyb2xsaW5nKCkp
CiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0zMTMsMTEgKzMxMiwxMCBAQCBib29sIFNj
cm9sbGluZ0Nvb3JkaW5hdG9yOjpoYXNWaXNpYmxlU2xvd1JlcGFpbnRWaWV3cG9ydENvbnN0cmFp
bmVkT2JqZWN0cyhjb25zdAogICAgIGlmICghdmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGZvciAoRnJhbWVWaWV3OjpWaWV3cG9ydENvbnN0
cmFpbmVkT2JqZWN0U2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IHZpZXdwb3J0Q29uc3RyYWluZWRP
YmplY3RzLT5iZWdpbigpLCBlbmQgPSB2aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cy0+ZW5kKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBSZW5kZXJPYmplY3QmIHZpZXdwb3J0Q29uc3Ry
YWluZWRPYmplY3QgPSAqKml0OwotICAgICAgICBpZiAoIWlzPFJlbmRlckJveE1vZGVsT2JqZWN0
Pih2aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0KSB8fCAhdmlld3BvcnRDb25zdHJhaW5lZE9iamVj
dC5oYXNMYXllcigpKQorICAgIGZvciAoYXV0byYgdmlld3BvcnRDb25zdHJhaW5lZE9iamVjdCA6
ICp2aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cykgeworICAgICAgICBpZiAoIWlzPFJlbmRlckJv
eE1vZGVsT2JqZWN0Pigqdmlld3BvcnRDb25zdHJhaW5lZE9iamVjdCkgfHwgIXZpZXdwb3J0Q29u
c3RyYWluZWRPYmplY3QtPmhhc0xheWVyKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgUmVuZGVyTGF5ZXImIGxheWVyID0gKmRvd25jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0
Pih2aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0KS5sYXllcigpOworICAgICAgICBSZW5kZXJMYXll
ciYgbGF5ZXIgPSAqZG93bmNhc3Q8UmVuZGVyQm94TW9kZWxPYmplY3Q+KCp2aWV3cG9ydENvbnN0
cmFpbmVkT2JqZWN0KS5sYXllcigpOwogICAgICAgICAvLyBBbnkgZXhwbGljaXQgcmVhc29uIHRo
YXQgYSBmaXhlZCBwb3NpdGlvbiBlbGVtZW50IGlzIG5vdCBjb21wb3NpdGVkIHNob3VsZG4ndCBj
YXVzZSBzbG93IHNjcm9sbGluZy4KICAgICAgICAgaWYgKCFsYXllci5pc0NvbXBvc2l0ZWQoKSAm
JiBsYXllci52aWV3cG9ydENvbnN0cmFpbmVkTm90Q29tcG9zaXRlZFJlYXNvbigpID09IFJlbmRl
ckxheWVyOjpOb05vdENvbXBvc2l0ZWRSZWFzb24pCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>