<?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>53961</bug_id>
          
          <creation_ts>2011-02-07 16:28:43 -0800</creation_ts>
          <short_desc>Implement a calendar picker</short_desc>
          <delta_ts>2012-06-28 18:16:00 -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>Forms</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>54174</dependson>
    
    <dependson>54175</dependson>
    
    <dependson>61415</dependson>
    
    <dependson>79078</dependson>
    
    <dependson>80106</dependson>
    
    <dependson>80478</dependson>
    
    <dependson>81081</dependson>
    
    <dependson>83001</dependson>
    
    <dependson>83011</dependson>
    
    <dependson>83129</dependson>
    
    <dependson>83235</dependson>
    
    <dependson>83258</dependson>
    
    <dependson>83656</dependson>
    
    <dependson>83668</dependson>
    
    <dependson>83672</dependson>
    
    <dependson>83685</dependson>
    
    <dependson>83990</dependson>
    
    <dependson>83991</dependson>
    
    <dependson>84007</dependson>
    
    <dependson>84388</dependson>
    
    <dependson>84389</dependson>
    
    <dependson>84390</dependson>
    
    <dependson>84826</dependson>
    
    <dependson>84827</dependson>
    
    <dependson>85272</dependson>
    
    <dependson>85331</dependson>
    
    <dependson>85337</dependson>
          <blocked>29359</blocked>
    
    <blocked>83852</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kent Tamura">tkent</reporter>
          <assigned_to name="Kent Tamura">tkent</assigned_to>
          <cc>abarth</cc>
    
    <cc>adele</cc>
    
    <cc>ap</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>donggwan.kim</cc>
    
    <cc>fishd</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>haizhang</cc>
    
    <cc>hyatt</cc>
    
    <cc>james</cc>
    
    <cc>joepeck</cc>
    
    <cc>jonlee</cc>
    
    <cc>jshin</cc>
    
    <cc>manyoso</cc>
    
    <cc>marcoos+bwo</cc>
    
    <cc>mathias</cc>
    
    <cc>melo</cc>
    
    <cc>mifenton</cc>
    
    <cc>mjs</cc>
    
    <cc>mstaikos</cc>
    
    <cc>peter</cc>
    
    <cc>priyajeet.hora</cc>
    
    <cc>rjkroege</cc>
    
    <cc>tonikitoo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>346934</commentid>
    <comment_count>0</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-02-07 16:28:43 -0800</bug_when>
    <thetext>Implement a calendar picker for date, datetime, datetime-local, and week types.

My plan is:
 - Use Windows::showModalDialog() from C++ code
 - Add a mechanism to load an internal resource via a URL to open it by showModalDialog()
 - Develop a calendar picker UI by HTML + CSS + JavaScript</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347207</commentid>
    <comment_count>1</comment_count>
      <attachid>81609</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-02-08 00:15:26 -0800</bug_when>
    <thetext>Created attachment 81609
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347210</commentid>
    <comment_count>2</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-02-08 00:21:09 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created an attachment (id=81609) [details]
&gt; WIP patch

This patch introduces x-webkit URL scheme.  It needs some hacks against the loader and SecurityOrigin.

I wonder if this is a right approach.  I couldn&apos;t use simple file: URLs for a calendar picker file because of SecurityOrigin restrictions.

Using showModalDialog() might be not good for user experience and the SecurityOrigin restriction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347381</commentid>
    <comment_count>3</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-02-08 07:57:54 -0800</bug_when>
    <thetext>What do you guys think about implementing createPopup API for this? https://bugs.webkit.org/show_bug.cgi?id=16730</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347407</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-02-08 08:40:24 -0800</bug_when>
    <thetext>showModalDialog: ugh. Can we make this non-modal?

Are we just doing Gregorian, or other calendars as well?

Is there a spec for this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347757</commentid>
    <comment_count>5</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-02-08 15:51:18 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; What do you guys think about implementing createPopup API for this? 
(In reply to comment #4)
&gt; showModalDialog: ugh. Can we make this non-modal?

Yeah, createPopup() should be much better.  I&apos;ll try to implement it.
A modal dialog stops everything including other tabs and Inspector.  Too bad.

&gt; Are we just doing Gregorian, or other calendars as well?
&gt; Is there a spec for this?

The HTML specification doesn&apos;t define a picker UI for &lt;input type=date&gt;.  We should support other calendars if they have popular demand.  Anyway, the input and output of the calendar picker should be date strings in Gregorian calendar.

The requirements are:
 - input: minimum date, maximum date, step value
 - output: ISO-8601 date in YYYY-MM-DD format, or ISO-8601 week in YYYY-Wnn format
 - should be localized by the browser locale

I investigated a way to use OS-native calendar controls in OS X and Windows, and concluded they were not usable in WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347875</commentid>
    <comment_count>6</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-02-08 18:09:05 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; What do you guys think about implementing createPopup API for this? 
&gt; 
&gt; Yeah, createPopup() should be much better.  I&apos;ll try to implement it.

I checked createPopup() behavior, and found it&apos;s not so good.

http://msdn.microsoft.com/en-us/library/ms533025(v=vs.85).aspx
&gt; * The popup object never has focus when it is displayed so processes continue to run in the parent window.
&gt; * The popup object does not support text boxes of any kind.
&gt; * No elements inside of the popup object can be selected.

These are not good.  I have confirmed a popup document never fires keyboard events.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347884</commentid>
    <comment_count>7</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-02-08 18:38:28 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; &gt; What do you guys think about implementing createPopup API for this? 
&gt; &gt; 
&gt; &gt; Yeah, createPopup() should be much better.  I&apos;ll try to implement it.
&gt; 
&gt; I checked createPopup() behavior, and found it&apos;s not so good.
&gt; 
&gt; http://msdn.microsoft.com/en-us/library/ms533025(v=vs.85).aspx
&gt; &gt; * The popup object never has focus when it is displayed so processes continue to run in the parent window.
&gt; &gt; * The popup object does not support text boxes of any kind.
&gt; &gt; * No elements inside of the popup object can be selected.
&gt; 
&gt; These are not good.  I have confirmed a popup document never fires keyboard events.

Yeah, that makes sense. Perhaps we need to define a better abstraction of a similar kind?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348878</commentid>
    <comment_count>8</comment_count>
      <attachid>81937</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-02-10 01:25:17 -0800</bug_when>
    <thetext>Created attachment 81937
WIP patch 2

Proof of concept code for shadow &lt;iframe&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352689</commentid>
    <comment_count>9</comment_count>
      <attachid>82769</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-02-17 01:54:08 -0800</bug_when>
    <thetext>Created attachment 82769
WIP patch 3

Calendar picker works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352694</commentid>
    <comment_count>10</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-02-17 02:11:11 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Created an attachment (id=82769) [details]
&gt; WIP patch 3
&gt; 
&gt; Calendar picker works.

I&apos;ll suspend the development until shadow DOM refactoring (Bug 48698) is completed.  I&apos;d like to add a button to kick the calendar picker to RenderTextControlSingleLine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355105</commentid>
    <comment_count>11</comment_count>
      <attachid>83281</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-02-22 00:41:31 -0800</bug_when>
    <thetext>Created attachment 83281
WIP patch 4

* Supports keyboard operations.\n* Adjust picker position\n* Fix a TAB focus issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362346</commentid>
    <comment_count>12</comment_count>
      <attachid>84707</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-03-04 01:01:35 -0800</bug_when>
    <thetext>Created attachment 84707
WIP patch 5

* Apply feedbacks from Chrome UI/UX teams.
* Fix some bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363701</commentid>
    <comment_count>13</comment_count>
    <who name="Darth">priyajeet.hora</who>
    <bug_when>2011-03-07 17:22:48 -0800</bug_when>
    <thetext>Would be nice to optionally have keyboard shortcuts for calendar date picking. Pressing T chooses today&apos;s date, M moves a month ahead keeping day inact etc. So like having accessKey&apos;s definable for the calendar buttons.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557928</commentid>
    <comment_count>14</comment_count>
      <attachid>127315</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-02-15 23:11:00 -0800</bug_when>
    <thetext>Created attachment 127315
WIP Patch 6 (HTMLPopup)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557941</commentid>
    <comment_count>15</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-02-15 23:29:45 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; Created an attachment (id=127315) [details]
&gt; WIP Patch 6 (HTMLPopup)

I stopped using shadow DOM.

The idea is very close to createPopup API which Dimitri wrote in comment #3.
 * Introduce HTMLPopup class
   It is created and deleted by WebCore::Chrome.
   HTMLPopupClient provides an HTML source and can receive resultant values from the popup.
 * DateInputType implements HTMLPopupClient.

Because iOS and Android don&apos;t need a calendar picker for type=date, I&apos;ll add ENABLE_CALENDAR_PICKER flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567643</commentid>
    <comment_count>16</comment_count>
      <attachid>127315</attachid>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2012-02-29 08:39:43 -0800</bug_when>
    <thetext>Comment on attachment 127315
WIP Patch 6 (HTMLPopup)

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

&gt; Source/WebKit/chromium/src/WebHTMLPopupImpl.cpp:159
&gt; +    m_page-&gt;settings()-&gt;setScriptEnabled(true);

This could be modified to adjust settings for DIP/touch enablement correct?

&gt; Source/WebKit/chromium/src/WebHTMLPopupImpl.cpp:279
&gt; +        // GESTURE and TOUCH

you could make a bug for me for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568121</commentid>
    <comment_count>17</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-02-29 17:10:20 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 127315 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=127315&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/chromium/src/WebHTMLPopupImpl.cpp:159
&gt; &gt; +    m_page-&gt;settings()-&gt;setScriptEnabled(true);
&gt; 
&gt; This could be modified to adjust settings for DIP/touch enablement correct?

Yes, of course we should support them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594179</commentid>
    <comment_count>18</comment_count>
      <attachid>135271</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-04-02 21:24:31 -0700</bug_when>
    <thetext>Created attachment 135271
WIP Patch 7</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660020</commentid>
    <comment_count>19</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-06-28 18:16:00 -0700</bug_when>
    <thetext>Major parts of the implementation were completed. Closing.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81609</attachid>
            <date>2011-02-08 00:15:26 -0800</date>
            <delta_ts>2011-02-10 01:25:12 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>bug-53961-20110208171524.patch</filename>
            <type>text/plain</type>
            <size>19261</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzc4OTAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Rl
cml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCmlu
ZGV4IDQwYmJkN2YwNzk5Nzk3ZjAwZDZkYmZhYzQ2ZTgxNTUzNWUzMjMzYzUuLjM0NWM4ZjE2MmQy
Y2NjMGY5YjQ1ZGEyODExOTkxMmFlNWU0ODZlZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMu
bWFrZQpAQCAtNTQ4LDYgKzU0OCw3IEBAIGFsbCA6IFwKICAgICBcCiAgICAgSlNKYXZhU2NyaXB0
Q2FsbEZyYW1lLmggXAogICAgIFwKKyAgICBDYWxlbmRhclBpY2tlci5oIFwKICAgICBDU1NHcmFt
bWFyLmNwcCBcCiAgICAgQ1NTUHJvcGVydHlOYW1lcy5oIFwKICAgICBDU1NWYWx1ZUtleXdvcmRz
LmggXApAQCAtNzY5LDYgKzc3MCwyMyBAQCBYTUxOYW1lcy5jcHAgOiBkb20vbWFrZV9uYW1lcy5w
bCB4bWwveG1sYXR0cnMuaW4KIAogIyAtLS0tLS0tLQogCisjIERhdGEgZm9yIEhUTUwgVUkgaW1w
bGVtZW50YXRpb25zCisKK0NBTEVOREFSUElDS0VSX0ZSQUdNRU5UUyA9ICQoV2ViQ29yZSkvUmVz
b3VyY2VzL2NhbGVuZGFycGlja2VyL2hlYWRlci5odG1sIFwKKwkkKFdlYkNvcmUpL1Jlc291cmNl
cy9jYWxlbmRhcnBpY2tlci9tYWluLmpzIFwKKwkkKFdlYkNvcmUpL1Jlc291cmNlcy9jYWxlbmRh
cnBpY2tlci9mb290ZXIuaHRtbAorCisjIFRoZSBzdWZmaXggLmNzcyBpcyBhIGhhY2sgdG8gdXNl
IG1ha2UtY3NzLWZpbGUtYXJyYXlzLnBsCitDQUxFTkRBUlBJQ0tFUl9GSUxFID0gY2FsZW5kYXJQ
aWNrZXIuY3NzCisKKyQoQ0FMRU5EQVJQSUNLRVJfRklMRSk6ICQoQ0FMRU5EQVJQSUNLRVJfRlJB
R01FTlRTKQorCWNhdCAkKENBTEVOREFSUElDS0VSX0ZSQUdNRU5UUykgPiAkQAorCitDYWxlbmRh
clBpY2tlci5oIDogY3NzL21ha2UtY3NzLWZpbGUtYXJyYXlzLnBsICQoQ0FMRU5EQVJQSUNLRVJf
RklMRSkKKwlwZXJsICQ8ICRAIENhbGVuZGFyUGlja2VyLmNwcCAkKENBTEVOREFSUElDS0VSX0ZJ
TEUpCisKKyMgLS0tLS0tLS0KKwogIyBTVkcgdGFnIGFuZCBhdHRyaWJ1dGUgbmFtZXMsIGFuZCBl
bGVtZW50IGZhY3RvcnkKIAogaWZlcSAoJChmaW5kc3RyaW5nIEVOQUJMRV9TVkdfVVNFLCQoRkVB
VFVSRV9ERUZJTkVTKSksIEVOQUJMRV9TVkdfVVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvUmVzb3VyY2VzL2NhbGVuZGFycGlja2VyL2Zvb3Rlci5odG1sIGIvU291cmNlL1dlYkNvcmUv
UmVzb3VyY2VzL2NhbGVuZGFycGlja2VyL2Zvb3Rlci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJiMTNkMzJm
YjZhNzNkZjUxYWQ2ZjQwYTEwMjE2Mjg1ZDI5ZWRhODgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9SZXNvdXJjZXMvY2FsZW5kYXJwaWNrZXIvZm9vdGVyLmh0bWwKQEAgLTAsMCAr
MSw1IEBACis8L3NjcmlwdD4KKzxociAvPgorPGRpdj5ob2dlPC9kaXY+Cis8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvY2FsZW5kYXJwaWNrZXIv
aGVhZGVyLmh0bWwgYi9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvY2FsZW5kYXJwaWNrZXIvaGVh
ZGVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uN2YwODc3ODAyMjljZjlhMDFiZTM1YmRiY2QzNWJkN2U4Y2M5
MmY4OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9jYWxlbmRh
cnBpY2tlci9oZWFkZXIuaHRtbApAQCAtMCwwICsxLDkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0
bWw+Cis8aGVhZD4KKzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8c3R5bGU+Cis8L3N0eWxlPgorPGJv
ZHk+Cis8ZGl2IGlkPW1haW4+PC9kaXY+Cis8c2NyaXB0PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvUmVzb3VyY2VzL2NhbGVuZGFycGlja2VyL21haW4uanMgYi9Tb3VyY2UvV2ViQ29yZS9S
ZXNvdXJjZXMvY2FsZW5kYXJwaWNrZXIvbWFpbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZGVkMDY0ZTMxYjFk
NzMwMmJjMDE1MDZmOGNmYTYxZTA0MzdhYWVlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvUmVzb3VyY2VzL2NhbGVuZGFycGlja2VyL21haW4uanMKQEAgLTAsMCArMSwzNiBAQAor
Ly8gRklYTUU6CisvLyBUaGlzIGlzIGluY29tcGxldGUhIEknbGwgaW1wbGVtZW50IGEgY2FsZW5k
YXIgcGlja2VyIGhlcmUuCisKK3ZhciBhcmdzOworaWYgKCF3aW5kb3cuZGlhbG9nQXJndW1lbnRz
KSB7CisgICAgYXJncyA9IHsKKwkibW9udGhMYWJlbHMiIDogWyJtMSIsICJtMiIsICJtMyIsICJt
NCIsICJtNSIsICJtNiIsICJtNyIsICJtOCIsICJtOSIsICJtMTAiLCAibTExIiwgIm0xMiJdLAor
ICAgIH07Cit9IGVsc2UgeworICAgIGFyZ3MgPSBKU09OLnBhcnNlKGRpYWxvZ0FyZ3VtZW50cyk7
Cit9CisKK2Z1bmN0aW9uICQoaWQpIHsKKyAgICByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoaWQpOworfQorCitmdW5jdGlvbiBnZXRBcmd1bWVudEVycm9yKCkgeworICAgIGNvbnNvbGUu
bG9nKCcnICsgYXJncyk7CisgICAgaWYgKCFhcmdzLm1vbnRoTGFiZWxzKQorCXJldHVybiAiTm8g
bW9udGhMYWJlbHMuIjsKKyAgICBpZiAoYXJncy5tb250aExhYmVscy5sZW5ndGggIT0gMTIpCisJ
cmV0dXJuICJtb250aExhYmVscyBpcyBub3QgYW4gYXJyYXkgd2l0aCAxMiBlbGVtZW50cy4iOwor
ICAgIHJldHVybiAiIjsKK30KKworCit2YXIgZXJyb3JTdHJpbmcgPSBnZXRBcmd1bWVudEVycm9y
KCk7CitpZiAoZXJyb3JTdHJpbmcubGVuZ3RoID4gMCkgeworICAgICQoJ21haW4nKS50ZXh0Q29u
dGVudCA9ICdJbnRlcm5hbCBlcnJvcjogJyArIGVycm9yU3RyaW5nOworfSBlbHNlIHsKKyAgICAk
KCdtYWluJykuaW5uZXJIVE1MID0gJzxkaXY+MjAxMSAnICsgYXJncy5tb250aExhYmVsc1sxXSAr
ICc8L2Rpdj48ZGl2PmRpYWxvZ0FyZ3VtZW50czogJyArIHdpbmRvdy5kaWFsb2dBcmd1bWVudHMg
KyAnPC9kaXY+PGRpdj48YnV0dG9uIHR5cGU9YnV0dG9uIGlkPWIxPkV4aXQgd2l0aCBuZXcgdmFs
dWU8L2J1dHRvbj4gPGJ1dHRvbiB0eXBlPWJ1dHRvbiBpZD1iMj5DYW5jZWw8L2J1dHRvbj48L2Rp
dj4nOworICAgICQoJ2IxJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHsg
d2luZG93LnJldHVyblZhbHVlID0gWzEsICIyMDExLTAyLTA0Il07IHdpbmRvdy5jbG9zZSgpOyB9
KTsKKyAgICAkKCdiMicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7IHdp
bmRvdy5yZXR1cm5WYWx1ZSA9IFswXTsgd2luZG93LmNsb3NlKCk7IH0pOworfQorCisKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAy
YjI0NDk1YTIzNGI2NWI1ZDUzZTlkZTg1ZDc4NDE4OGFkMGVlM2JlLi5lMzhlMDFiYmYzMmY2MWIz
MWMxY2RiNTRhMTJlYTBkYWE4ZTZiYjJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01NjM0LDYgKzU2MzQsOCBAQAogCQlGNEVB
RjRBRjEwQzc0MkIxMDA5MTAwRDMgLyogT3BlblR5cGVTYW5pdGl6ZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0RUFGNEFEMTBDNzQyQjEwMDkxMDBE
MyAvKiBPcGVuVHlwZVNhbml0aXplci5oICovOyB9OwogCQlGNTE0MkM2OTEyM0YxMkIwMDBGNUJE
NEMgLyogTG9jYWxpemVkTnVtYmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGNTE0MkM2ODEyM0YxMkIwMDBGNUJENEMgLyogTG9jYWxpemVkTnVtYmVy
LmggKi87IH07CiAJCUY1MTQyQzZCMTIzRjEyQzUwMEY1QkQ0QyAvKiBMb2NhbGl6ZWROdW1iZXJO
b25lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1
MTQyQzZBMTIzRjEyQzUwMEY1QkQ0QyAvKiBMb2NhbGl6ZWROdW1iZXJOb25lLmNwcCAqLzsgfTsK
KwkJRjUyM0M5QTgxMkZGQjc3QzAwMUU0NTFCIC8qIENhbGVuZGFyUGlja2VyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNDOUE3MTJGRkI3N0Mw
MDFFNDUxQiAvKiBDYWxlbmRhclBpY2tlci5jcHAgKi87IH07CisJCUY1MjNDOUFBMTJGRkI3RUYw
MDFFNDUxQiAvKiBDYWxlbmRhclBpY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRjUyM0M5QTkxMkZGQjdFRjAwMUU0NTFCIC8qIENhbGVuZGFyUGlj
a2VyLmggKi87IH07CiAJCUY1NUIzREFEMTI1MUYxMkQwMDNFRjI2OSAvKiBCYXNlVGV4dElucHV0
VHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NTVCM0Q3OTEyNTFGMTJEMDAzRUYyNjkgLyogQmFzZVRleHRJbnB1dFR5cGUuY3BwICovOyB9Owog
CQlGNTVCM0RBRTEyNTFGMTJEMDAzRUYyNjkgLyogQmFzZVRleHRJbnB1dFR5cGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1NUIzRDdBMTI1MUYxMkQw
MDNFRjI2OSAvKiBCYXNlVGV4dElucHV0VHlwZS5oICovOyB9OwogCQlGNTVCM0RBRjEyNTFGMTJE
MDAzRUYyNjkgLyogQnV0dG9uSW5wdXRUeXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1NUIzRDdCMTI1MUYxMkQwMDNFRjI2OSAvKiBCdXR0b25J
bnB1dFR5cGUuY3BwICovOyB9OwpAQCAtMTIwMDAsNiArMTIwMDIsOCBAQAogCQlGNEVBRjRBRDEw
Qzc0MkIxMDA5MTAwRDMgLyogT3BlblR5cGVTYW5pdGl6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gT3BlblR5cGVTYW5pdGl6ZXIuaDsgcGF0aCA9IG9wZW50eXBlL09wZW5U
eXBlU2FuaXRpemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY1MTQyQzY4MTIz
RjEyQjAwMEY1QkQ0QyAvKiBMb2NhbGl6ZWROdW1iZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTG9jYWxpemVkTnVtYmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUY1MTQyQzZBMTIzRjEyQzUwMEY1QkQ0QyAvKiBMb2NhbGl6ZWROdW1iZXJOb25lLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExvY2FsaXplZE51bWJlck5vbmUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGNTIzQzlBNzEyRkZCNzdDMDAxRTQ1
MUIgLyogQ2FsZW5kYXJQaWNrZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gQ2FsZW5kYXJQaWNrZXIuY3BwOyBwYXRoID0gQ2FsZW5kYXJQaWNrZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGNTIzQzlBOTEyRkZCN0VGMDAxRTQ1MUIgLyogQ2Fs
ZW5kYXJQaWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ2FsZW5kYXJQ
aWNrZXIuaDsgcGF0aCA9IENhbGVuZGFyUGlja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUY1MjNEMjNCMDJERTQzOTYwMTg2MzVDQSAvKiBIVE1MRG9jdW1lbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTERv
Y3VtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFi
cyA9IDA7IH07CiAJCUY1MjNEMjNDMDJERTQzOTYwMTg2MzVDQSAvKiBIVE1MRG9jdW1lbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lk
dGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTERv
Y3VtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMg
PSAwOyB9OwogCQlGNTIzRDIzRTAyREU0Mzk2MDE4NjM1Q0EgLyogSFRNTEVsZW1lbnQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0
aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRN
TEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNU
YWJzID0gMDsgfTsKQEAgLTEzNzMwLDYgKzEzNzM0LDggQEAKIAkJNjU2NTgwRUMwOUQxMkIyMDAw
MEU2MUQ3IC8qIERlcml2ZWQgU291cmNlcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJ
Y2hpbGRyZW4gPSAoCisJCQkJRjUyM0M5QTcxMkZGQjc3QzAwMUU0NTFCIC8qIENhbGVuZGFyaWNr
ZXIuY3BwICovLAorCQkJCUY1MjNDOUE5MTJGRkI3RUYwMDFFNDUxQiAvKiBDYWxlbmRhclBpY2tl
ci5oICovLAogCQkJCTY1NjU4MUFDMDlEMTRFRTYwMDBFNjFENyAvKiBDaGFyc2V0RGF0YS5jcHAg
Ki8sCiAJCQkJRTQwNkYzRkIxMTk4MzA3RDAwOUQ1OUQ2IC8qIENvbG9yRGF0YS5jcHAgKi8sCiAJ
CQkJNjU2NTgxNDQwOUQxMzA0MzAwMEU2MUQ3IC8qIENTU0dyYW1tYXIuY3BwICovLApAQCAtMTk1
NzYsNiArMTk1ODIsNyBAQAogCQkJCUJDRDUzMzY0MEVENjg0ODkwMDg4NzQ2OCAvKiBDYWNoZWRT
Y3JpcHRTb3VyY2VQcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNCMTZDMjgwOTc5QzNC
RDAwNDY3NzQxIC8qIENhY2hlZFhTTFN0eWxlU2hlZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkz
RjE5OTUwMDgyNDVFNTkwMDFFOUFCQyAvKiBDYWNoZVBvbGljeS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJRjUyM0M5QUExMkZGQjdFRjAwMUU0NTFCIC8qIENhbGVuZGFyUGlja2VyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk2RTRFOTFBRDEwRjdGQjMxMDBBMjc3OUMgLyogQ2FudmFzQ29udGV4dEF0dHJp
YnV0ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5NDg0RkMyMTAyQ0YyM0MwMDE4N0REMyAvKiBD
YW52YXNHcmFkaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDk0ODRGQzUxMDJDRjIzQzAwMTg3
REQzIC8qIENhbnZhc1BhdHRlcm4uaCBpbiBIZWFkZXJzICovLApAQCAtMjI4NTEsNiArMjI4NTgs
NyBAQAogCQkJCUQwRDE0MUIyMTJCMkJGNTIwMEUzOTYyMCAvKiBDYWNoZWRSZXNvdXJjZVJlcXVl
c3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNCMTZDMjMwOTc5QzNCRDAwNDY3NzQxIC8qIENh
Y2hlZFNjcmlwdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0IxNkMyNzA5NzlDM0JEMDA0Njc3
NDEgLyogQ2FjaGVkWFNMU3R5bGVTaGVldC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGNTIzQzlB
ODEyRkZCNzdDMDAxRTQ1MUIgLyogQ2FsZW5kYXJQaWNrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNkU0RTkxQUMxMEY3RkIzMTAwQTI3NzlDIC8qIENhbnZhc0NvbnRleHRBdHRyaWJ1dGVzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTQ5NDg0RkMxMTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNH
cmFkaWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OTQ4NEZDNDEwMkNGMjNDMDAxODdERDMg
LyogQ2FudmFzUGF0dGVybi5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAppbmRleCAyNWY5NWZhNmIxZDVjZWQz
ZmU2Zjk2Y2QyODIyZGFkNWJlZGRmYTRiLi43ZGFhMzg0NjJmM2FkNmIzZGU2YTEwMzQ3OGEwZTQx
NzM4YjU0ZDQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdp
bmRvd0N1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5k
b3dDdXN0b20uY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiSlNIaXN0b3J5LmgiCiAj
aW5jbHVkZSAiSlNJbWFnZUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiSlNMb2NhdGlvbi5oIgor
I2luY2x1ZGUgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgogI2luY2x1ZGUgIkpTTWVzc2FnZUNo
YW5uZWwuaCIKICNpbmNsdWRlICJKU01lc3NhZ2VQb3J0Q3VzdG9tLmgiCiAjaW5jbHVkZSAiSlNP
cHRpb25Db25zdHJ1Y3Rvci5oIgpAQCAtNDYsNiArNDcsNyBAQAogI2luY2x1ZGUgIlNldHRpbmdz
LmgiCiAjaW5jbHVkZSAiU2hhcmVkV29ya2VyUmVwb3NpdG9yeS5oIgogI2luY2x1ZGUgPHJ1bnRp
bWUvSlNGdW5jdGlvbi5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+CiAjaW5jbHVkZSA8
cnVudGltZS9Qcm90b3R5cGVGdW5jdGlvbi5oPgogCiAjaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFC
TEUoQkxPQikKQEAgLTcxNyw2ICs3MTksNTEgQEAgSlNWYWx1ZSBKU0RPTVdpbmRvdzo6c2hvd01v
ZGFsRGlhbG9nKEV4ZWNTdGF0ZSogZXhlYykKICAgICByZXR1cm4gaGFuZGxlci5yZXR1cm5WYWx1
ZSgpOwogfQogCitpbnQgc2hvd01vZGFsUGlja2VyRGlhbG9nKERPTVdpbmRvdyogd2luZG93LCBj
b25zdCBTdHJpbmcmIHVybFN0cmluZywgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBjb25zdCBTdHJp
bmcmIGRpYWxvZ0ZlYXR1cmVzLCBTdHJpbmcmIHJlc3VsdFN0cmluZykKK3sKKyAgICBBU1NFUlQo
d2luZG93KTsKKyAgICBBU1NFUlQod2luZG93LT5kb2N1bWVudCgpKTsKKyAgICBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTUdsb2JhbE9iamVjdCh3aW5kb3ctPmRvY3Vt
ZW50KCksIG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKTsKKyAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0
KTsKKworICAgIC8vIFRha2VuIGZyb20gU2NoZWR1bGVkQWN0aW9uOjpleGVjdXRlRnVuY3Rpb25J
bkNvbnRleHQoKS4KKyAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
IEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOworICAgIEpTVmFs
dWUgZnVuY3Rpb24gPSBnbG9iYWxPYmplY3QtPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJz
aG93TW9kYWxEaWFsb2ciKSk7CisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUg
Y2FsbFR5cGUgPSBnZXRDYWxsRGF0YShmdW5jdGlvbiwgY2FsbERhdGEpOworICAgIEFTU0VSVChj
YWxsVHlwZSAhPSBDYWxsVHlwZU5vbmUpOworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7
CisgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0
YSgpOworICAgIGFyZ3MuYXBwZW5kKEpTVmFsdWUoanNTdHJpbmcoZ2xvYmFsRGF0YSwgVVN0cmlu
Zyh1cmxTdHJpbmcuaW1wbCgpKSkpKTsKKyAgICBhcmdzLmFwcGVuZChKU1ZhbHVlKGpzU3RyaW5n
KGdsb2JhbERhdGEsIFVTdHJpbmcoY29udGV4dC5pbXBsKCkpKSkpOworICAgIGFyZ3MuYXBwZW5k
KEpTVmFsdWUoanNTdHJpbmcoZ2xvYmFsRGF0YSwgVVN0cmluZyhkaWFsb2dGZWF0dXJlcy5pbXBs
KCkpKSkpOworICAgIGdsb2JhbERhdGEtPnRpbWVvdXRDaGVja2VyLnN0YXJ0KCk7CisgICAgSlNW
YWx1ZSByZXN1bHRWYWx1ZSA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6Y2FsbChleGVjLCBmdW5j
dGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBnbG9iYWxPYmplY3QsIGFyZ3MpOworICAgIGdsb2Jh
bERhdGEtPnRpbWVvdXRDaGVja2VyLnN0b3AoKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgICAgIHJlcG9ydEN1cnJlbnRFeGNlcHRpb24oZXhlYyk7CisKKyAgICBpZiAoIWlz
SlNBcnJheShnbG9iYWxEYXRhLCByZXN1bHRWYWx1ZSkpCisgICAgICAgIHJldHVybiAwOworICAg
IEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheShyZXN1bHRWYWx1ZSk7CisgICAgQVNTRVJUKGFycmF5
LT5sZW5ndGgoKSk7CisgICAgaWYgKGFycmF5LT5sZW5ndGgoKSA8IDEpCisgICAgICAgIHJldHVy
biAwOworICAgIEpTVmFsdWUgZXhpdENvZGVWYWx1ZSA9IGFycmF5LT5nZXRJbmRleCgwKTsKKyAg
ICBBU1NFUlQoZXhpdENvZGVWYWx1ZS5pc051bWJlcigpKTsKKyAgICBpbnQgZXhpdENvZGUgPSBl
eGl0Q29kZVZhbHVlLmFzSW50MzIoKTsKKyAgICBBU1NFUlQoZXhpdENvZGUgPT0gMCB8fCBleGl0
Q29kZSA9PSAxKTsKKyAgICBpZiAoZXhpdENvZGUgPT0gMSkgeworICAgICAgICBBU1NFUlQoYXJy
YXktPmxlbmd0aCgpID49IDIpOworICAgICAgICBpZiAoYXJyYXktPmxlbmd0aCgpIDwgMikKKyAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXN1bHRTdHJpbmcgPSBTdHJpbmcoYXJyYXkt
PmdldEluZGV4KDEpLnRvU3RyaW5nKGV4ZWMpLmltcGwoKSk7CisgICAgfQorICAgIGZwcmludGYo
c3RkZXJyLCAiJXM6IGV4aXRDb2RlPSVkIHN0cmluZz0nJXMnXG4iLCBfX2Z1bmNfXywgZXhpdENv
ZGUsIHJlc3VsdFN0cmluZy51dGY4KCkuZGF0YSgpKTsKKyAgICByZXR1cm4gZXhpdENvZGU7Cit9
CisKIEpTVmFsdWUgSlNET01XaW5kb3c6OnBvc3RNZXNzYWdlKEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbWVzc2FnZSA9IFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRGF0ZUlucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0RhdGVJbnB1dFR5cGUuY3BwCmluZGV4IDM0MDlkM2I0ZjhlN2FlYjJjNjg4NzlkMDY1
MGM4N2Q2M2M5ODBlZTMuLjVjZGVkOWQ5ZDhlOTkxMTMxZWFlMzAxYjE2NmM1MGU0MmFiZjdlZjMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRGF0ZUlucHV0VHlwZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9EYXRlSW5wdXRUeXBlLmNwcApAQCAtMzEsOSArMzEsMTUgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJEYXRlSW5wdXRUeXBlLmgiCiAKKyNpbmNs
dWRlICJCbG9iRGF0YS5oIgorI2luY2x1ZGUgIkJsb2JSZWdpc3RyeS5oIgorI2luY2x1ZGUgIkJs
b2JVUkwuaCIKKyNpbmNsdWRlICJDYWxlbmRhclBpY2tlci5oIgogI2luY2x1ZGUgIkRhdGVDb21w
b25lbnRzLmgiCisjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxl
bWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIlRocmVhZGFibGVCbG9i
UmVnaXN0cnkuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC05MSw0ICs5NywzMCBAQCBib29sIERhdGVJbnB1dFR5cGU6OnNldE1pbGxpc2Vj
b25kVG9EYXRlQ29tcG9uZW50cyhkb3VibGUgdmFsdWUsIERhdGVDb21wb25lbnRzKgogICAgIHJl
dHVybiBkYXRlLT5zZXRNaWxsaXNlY29uZHNTaW5jZUVwb2NoRm9yRGF0ZSh2YWx1ZSk7CiB9CiAK
Ky8vIFNob3VsZCBtb3ZlIHRvIEJhc2VEYXRlQW5kVGltZUlucHV0VHlwZSBiZWNhdXNlIGl0IHdp
bGwgYmUgdXNlZCBieSBkYXRlLCBkYXRldGltZSwgZGF0ZXRpbWUtbG9jYWwsIGFuZCB3ZWVrPwor
c3RhdGljIEtVUkwgbWFrZUNhbGVuZGFyUGlja2VyKCkKK3sKKyAgICBLVVJMIHBpY2tlclVSTChQ
YXJzZWRVUkxTdHJpbmcsICJ4LXdlYmtpdDovLy9jYWxlbmRhcnBpY2tlci9pbmRleC5odG1sIik7
CisgICAgaWYgKGJsb2JSZWdpc3RyeSgpLmhhc0Jsb2JVUkwocGlja2VyVVJMKSkKKyAgICAgICAg
cmV0dXJuIHBpY2tlclVSTDsKKyAgICBPd25QdHI8QmxvYkRhdGE+IGJsb2JEYXRhID0gQmxvYkRh
dGE6OmNyZWF0ZSgpOworICAgIGJsb2JEYXRhLT5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7
CisgICAgUmVmUHRyPFJhd0RhdGE+IHJhdyA9IFJhd0RhdGE6OmNyZWF0ZSgpOworICAgIHJhdy0+
bXV0YWJsZURhdGEoKS0+YXBwZW5kKGNhbGVuZGFyUGlja2VyVXNlckFnZW50U3R5bGVTaGVldCwg
c2l6ZW9mKGNhbGVuZGFyUGlja2VyVXNlckFnZW50U3R5bGVTaGVldCkpOworICAgIGJsb2JEYXRh
LT5hcHBlbmREYXRhKHJhdy5yZWxlYXNlKCksIDAsIHNpemVvZihjYWxlbmRhclBpY2tlclVzZXJB
Z2VudFN0eWxlU2hlZXQpKTsKKyAgICBibG9iUmVnaXN0cnkoKS5yZWdpc3RlckJsb2JVUkwocGlj
a2VyVVJMLCBibG9iRGF0YS5yZWxlYXNlKCkpOworICAgIHJldHVybiBwaWNrZXJVUkw7Cit9CisK
K3ZvaWQgRGF0ZUlucHV0VHlwZTo6aGFuZGxlTW91c2VEb3duRXZlbnQoTW91c2VFdmVudCopCit7
CisgICAgS1VSTCBwaWNrZXJVUkwgPSBtYWtlQ2FsZW5kYXJQaWNrZXIoKTsKKworICAgIFN0cmlu
ZyByZXN1bHQ7CisgICAgLy8gRklYTUU6IHBhc3NpbmcgbWluL21heC9zdGVwLCBhbmQgbG9jYWxp
emVkIHN0cmluZ3MuCisgICAgaW50IGV4aXRDb2RlID0gc2hvd01vZGFsUGlja2VyRGlhbG9nKGVs
ZW1lbnQoKS0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCksIHBpY2tlclVSTCwgIntcIm1vbnRoTGFi
ZWxzXCI6W1wiSmFudWFyeVwiLCBcIkZlYnJ1YXJ5XCIsIFwiTWFyY2hcIiwgXCJBcHJpbFwiLCBc
Ik1heVwiLCBcIkp1bmVcIiwgXCJKdWx5XCIsIFwiQXVndXN0XCIsIFwiU2VwdGVtYmVyXCIsIFwi
T2N0b2JlclwiLCBcIk5vdmVtYmVyXCIsIFwiRGVjZW1iZXJcIl19IiwgIm1lbnViYXI9MDt0b29s
YmFyPTA7bG9jYXRpb249MDtzdGF0dXM9MDsiLCByZXN1bHQpOworICAgIGlmIChleGl0Q29kZSkK
KyAgICAgICAgZWxlbWVudCgpLT5zZXRWYWx1ZShyZXN1bHQpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0RhdGVJbnB1dFR5cGUu
aCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRGF0ZUlucHV0VHlwZS5oCmluZGV4IDk2NWQ5ZWFiYTE0
N2FjNTIxYmYxZjU3ZWJmNjI0NWU3NmYxODcwM2QuLmI5NDYxMmEwZTcxMGY2MGEwNmZlNDUzYTI4
MjZlMTcxYjY2YzZiM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRGF0ZUlucHV0
VHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRGF0ZUlucHV0VHlwZS5oCkBAIC00OSw2
ICs0OSw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIHBhcnNlZFN0ZXBWYWx1ZVNob3Vs
ZEJlSW50ZWdlcigpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYXJzZVRvRGF0ZUNvbXBvbmVu
dHNJbnRlcm5hbChjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCwgRGF0ZUNvbXBvbmVudHMq
KSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc2V0TWlsbGlzZWNvbmRUb0RhdGVDb21wb25lbnRz
KGRvdWJsZSwgRGF0ZUNvbXBvbmVudHMqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxl
TW91c2VEb3duRXZlbnQoTW91c2VFdmVudCopOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1BvbGljeUNoZWNrZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL1BvbGljeUNoZWNrZXIuY3BwCmluZGV4IDI2ODAzODY5NDQ3
NThhNGE0NTkzNDJjODk1Yzc3MGIwMDYxZDkyN2YuLmViNjFmODZlNGNhNGRjNjYxNTY3YmY4NzU1
Y2EwZjc4MWZkYmUzMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Qb2xpY3lD
aGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUG9saWN5Q2hlY2tlci5jcHAK
QEAgLTc4LDYgKzc4LDEyIEBAIHZvaWQgUG9saWN5Q2hlY2tlcjo6Y2hlY2tOYXZpZ2F0aW9uUG9s
aWN5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgRG9jdW1lCiAgICAgICAgIGZ1bmN0
aW9uKGFyZ3VtZW50LCByZXF1ZXN0LCAwLCB0cnVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
KworICAgIC8vIFdlIGFsd2F5cyBhbGxvdyBpbnRlcm5hbCBVUkxzLgorICAgIGlmIChyZXF1ZXN0
LnVybCgpLnByb3RvY29sSXMoIngtd2Via2l0IikpIHsKKyAgICAgICAgZnVuY3Rpb24oYXJndW1l
bnQsIHJlcXVlc3QsIDAsIHRydWUpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIAogICAg
IGxvYWRlci0+c2V0TGFzdENoZWNrZWRSZXF1ZXN0KHJlcXVlc3QpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01X
aW5kb3cuaAppbmRleCBhMWU0NDYyZTg1OTY3YzExYWFmZTJkOTU0ZTVlYTQ4MGUyOTllZjc4Li4z
ZDJlZWU0OWRiYzE5N2E1NmMyYWIzZDk1MTA2NWQxOTRjYmNlZDAyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9N
V2luZG93LmgKQEAgLTQ5Myw2ICs0OTMsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IHJldHVybiBtX2RlZmF1bHRTdGF0dXM7CiAgICAgfSAKIAorLy8gTm90ZTogdGhlIGltcGxtZW5l
dGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24gaXMgbm90IGluIERPTVdpbmRvdy5jcHAgYmVjYXVzZSBp
dCBkZXBlbmRzIG9uIEphdmFTY3JpcHQgYmluZGluZy4KK2ludCBzaG93TW9kYWxQaWNrZXJEaWFs
b2coRE9NV2luZG93KiwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsIGNvbnN0IFN0cmluZyYgY29u
dGV4dCwgY29uc3QgU3RyaW5nJiBkaWFsb2dGZWF0dXJlcywgU3RyaW5nJiByZXN1bHQpOworCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBET01XaW5kb3dfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAppbmRleCBjNzUwNWYzZjRlNWMyMzJlMTM0OTY4ZGJk
YjBjODU1N2UwMjMyNTAyLi5iNjJiZjg0MWI0NWRmM2FlMDdhMTU2MTRmYTBmNDc3ODc2YmNjZjdl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcApAQCAtMTc3LDYgKzE3Nyw4
IEBAIGJvb2wgU2VjdXJpdHlPcmlnaW46OmNhbkFjY2Vzcyhjb25zdCBTZWN1cml0eU9yaWdpbiog
b3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKG1fdW5pdmVyc2FsQWNjZXNzKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBpZiAob3RoZXItPm1fcHJvdG9jb2wgPT0gIngtd2Via2l0IikKKyAgICAg
ICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAodGhpcyA9PSBvdGhlcikKICAgICAgICAgcmV0dXJu
IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JS
ZWdpc3RyeS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnku
aAppbmRleCA3ZTY0MjMzZDJhNDIzYjZiMjMxZTUyN2MzNGI3YWQ1NDcyMjllZDJiLi44MTAwNjdm
NjViZWQzMDQyZjFjMjFiNGRiOTM5YTliYjlmZmUxNGZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5LmgKQEAgLTU4LDYgKzU4LDcgQEAgcHVibGlj
OgogICAgIC8vIFJlZ2lzdGVycyBhIGJsb2IgVVJMIHJlZmVycmluZyB0byB0aGUgYmxvYiBkYXRh
IGlkZW50aWZpZWQgYnkgdGhlIHNwZWNpZmllZCBzcmNVUkwuCiAgICAgdmlydHVhbCB2b2lkIHJl
Z2lzdGVyQmxvYlVSTChjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYgc3JjVVJMKSA9IDA7CiAKKyAg
ICB2aXJ0dWFsIGJvb2wgaGFzQmxvYlVSTChjb25zdCBLVVJMJikgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCB1bnJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJMJikgPSAwOwogICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gY3JlYXRlUmVzb3VyY2VIYW5kbGUoY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiwgUmVzb3VyY2VIYW5kbGVDbGllbnQqKSA9IDA7CiAgICAgdmlydHVhbCBib29s
IGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3Vy
Y2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpID0gMDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1w
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwu
Y3BwCmluZGV4IDgzNTE3ZjEwZTVhZjdiYmE2YTc5Mjc5NWJiMjdiMGVmY2Y1Mzg5YjcuLjdmYTZm
ZjAyMTJiOTQwOTA4NmZmYjNkNzMyNjA5MTY2ZDAyZmU4ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcApAQCAtMTYzLDYg
KzE2MywxMiBAQCB2b2lkIEJsb2JSZWdpc3RyeUltcGw6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBL
VVJMJiB1cmwsIGNvbnN0IEtVUkwmIHNyY1VSTCkKICAgICBtX2Jsb2JzLnNldCh1cmwuc3RyaW5n
KCksIHNyYyk7CiB9CiAKK2Jvb2wgQmxvYlJlZ2lzdHJ5SW1wbDo6aGFzQmxvYlVSTChjb25zdCBL
VVJMJiB1cmwpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICByZXR1cm4gbV9i
bG9icy5jb250YWlucyh1cmwuc3RyaW5nKCkpOworfQorCiB2b2lkIEJsb2JSZWdpc3RyeUltcGw6
OnVucmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmIHVybCkKIHsKICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9C
bG9iUmVnaXN0cnlJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JS
ZWdpc3RyeUltcGwuaAppbmRleCBmNjE2NjY0ODA3NjJjNGVlMGMwNDg2YjdjMzNlMWRkMmJkNGRk
ZTlhLi41ODA1NDMwOTk3ZGY3NWY1N2VmNGMxODBlZTNkZDc0Y2Y3MzRkMDRhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuaApAQCAt
NTUsNiArNTUsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJCbG9iVVJM
KGNvbnN0IEtVUkwmLCBQYXNzT3duUHRyPEJsb2JEYXRhPik7CiAgICAgdmlydHVhbCB2b2lkIHJl
Z2lzdGVyQmxvYlVSTChjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYgc3JjVVJMKTsKKyAgICB2aXJ0
dWFsIGJvb2wgaGFzQmxvYlVSTChjb25zdCBLVVJMJik7CiAgICAgdmlydHVhbCB2b2lkIHVucmVn
aXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmKTsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UmVzb3Vy
Y2VIYW5kbGU+IGNyZWF0ZVJlc291cmNlSGFuZGxlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFJl
c291cmNlSGFuZGxlQ2xpZW50Kik7CiAgICAgdmlydHVhbCBib29sIGxvYWRSZXNvdXJjZVN5bmNo
cm9ub3VzbHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3VyY2VFcnJvciYsIFJlc291cmNl
UmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcAppbmRleCA5OTEwYWMxYzUzOTc0YjM4
YzllMDU3MzUxMTMzMjY4ZTlmYTU0OTlmLi4wMGQ0YWQyM2ViOTU3MDg2NDQ2ZjYyYzljNGRhZTUw
MzU2NDFjNmE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jl
c291cmNlSGFuZGxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jl
c291cmNlSGFuZGxlLmNwcApAQCAtNjEsNiArNjEsMTUgQEAgUGFzc1JlZlB0cjxSZXNvdXJjZUhh
bmRsZT4gUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwg
Y28KICAgICAgICAgICAgIHJldHVybiBoYW5kbGU7CiAgICAgfQogI2VuZGlmCisgICAgaWYgKHJl
cXVlc3QudXJsKCkucHJvdG9jb2xJcygieC13ZWJraXQiKSkgeworICAgICAgICAvLyBCbG9iUmVz
b3VyY2VIYW5kbGUgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBieSBNYWluUmVzb3VyY2VMb2Fk
ZXIuCisgICAgICAgIC8vIElmIHdlIGRvIGl0LCB3ZSdsbCBzZWUgc29tZSBhc3NlcnRpb24gZmFp
bHVyZXMgYW5kIHVzZS1hZnRlci1mcmVlIGNyYXNoZXMuCisgICAgICAgIGlmIChibG9iUmVnaXN0
cnkoKS5oYXNCbG9iVVJMKHJlcXVlc3QudXJsKCkpKSB7CisgICAgICAgICAgICBQYXNzUmVmUHRy
PFJlc291cmNlSGFuZGxlPiBoYW5kbGUgPSBibG9iUmVnaXN0cnkoKS5jcmVhdGVSZXNvdXJjZUhh
bmRsZShyZXF1ZXN0LCBjbGllbnQpOworICAgICAgICAgICAgaWYgKGhhbmRsZSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gaGFuZGxlOworICAgICAgICB9CisgICAgfQogCiAgICAgUmVmUHRyPFJl
c291cmNlSGFuZGxlPiBuZXdIYW5kbGUoYWRvcHRSZWYobmV3IFJlc291cmNlSGFuZGxlKHJlcXVl
c3QsIGNsaWVudCwgZGVmZXJzTG9hZGluZywgc2hvdWxkQ29udGVudFNuaWZmKSkpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81937</attachid>
            <date>2011-02-10 01:25:17 -0800</date>
            <delta_ts>2011-02-17 01:54:03 -0800</delta_ts>
            <desc>WIP patch 2</desc>
            <filename>bug-53961-20110210182515.patch</filename>
            <type>text/plain</type>
            <size>18557</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzgxNzkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Rl
cml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCmlu
ZGV4IDQwYmJkN2YwNzk5Nzk3ZjAwZDZkYmZhYzQ2ZTgxNTUzNWUzMjMzYzUuLjI4NTU5NDAyZjhh
MTg2ZjFjZGEyMmQzNTAxZThmNjllZjE1N2I4NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMu
bWFrZQpAQCAtNTQ4LDYgKzU0OCw3IEBAIGFsbCA6IFwKICAgICBcCiAgICAgSlNKYXZhU2NyaXB0
Q2FsbEZyYW1lLmggXAogICAgIFwKKyAgICBDYWxlbmRhclBpY2tlci5oIFwKICAgICBDU1NHcmFt
bWFyLmNwcCBcCiAgICAgQ1NTUHJvcGVydHlOYW1lcy5oIFwKICAgICBDU1NWYWx1ZUtleXdvcmRz
LmggXApAQCAtNzY5LDYgKzc3MCwyMCBAQCBYTUxOYW1lcy5jcHAgOiBkb20vbWFrZV9uYW1lcy5w
bCB4bWwveG1sYXR0cnMuaW4KIAogIyAtLS0tLS0tLQogCisjIERhdGEgZm9yIEhUTUwgVUkgaW1w
bGVtZW50YXRpb25zCisKK0NBTEVOREFSUElDS0VSX0ZSQUdNRU5UUyA9ICQoV2ViQ29yZSkvUmVz
b3VyY2VzL2NhbGVuZGFycGlja2VyL21haW4uanMKKworQ0FMRU5EQVJQSUNLRVJfRklMRSA9IGNh
bGVuZGFyUGlja2VyLmpzCisKKyQoQ0FMRU5EQVJQSUNLRVJfRklMRSk6ICQoQ0FMRU5EQVJQSUNL
RVJfRlJBR01FTlRTKQorCWNhdCAkKENBTEVOREFSUElDS0VSX0ZSQUdNRU5UUykgPiAkQAorCitD
YWxlbmRhclBpY2tlci5oIDogJChXZWJDb3JlKS9tYWtlLWZpbGUtYXJyYXlzLnBsICQoQ0FMRU5E
QVJQSUNLRVJfRklMRSkKKwlwZXJsICQ8ICRAIENhbGVuZGFyUGlja2VyLmNwcCAkKENBTEVOREFS
UElDS0VSX0ZJTEUpCisKKyMgLS0tLS0tLS0KKwogIyBTVkcgdGFnIGFuZCBhdHRyaWJ1dGUgbmFt
ZXMsIGFuZCBlbGVtZW50IGZhY3RvcnkKIAogaWZlcSAoJChmaW5kc3RyaW5nIEVOQUJMRV9TVkdf
VVNFLCQoRkVBVFVSRV9ERUZJTkVTKSksIEVOQUJMRV9TVkdfVVNFKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvUmVzb3VyY2VzL2NhbGVuZGFycGlja2VyL21haW4uanMgYi9Tb3VyY2UvV2Vi
Q29yZS9SZXNvdXJjZXMvY2FsZW5kYXJwaWNrZXIvbWFpbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yY2M3ZjIw
NTJkZGRlOTg1NzNjNjE4MGFiZGZlM2E3OGNmY2FiNjAyCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvUmVzb3VyY2VzL2NhbGVuZGFycGlja2VyL21haW4uanMKQEAgLTAsMCArMSw4
OSBAQAorLy8gRklYTUU6CisvLyBUaGlzIGlzIGluY29tcGxldGUhIEknbGwgaW1wbGVtZW50IGEg
Y2FsZW5kYXIgcGlja2VyIGhlcmUuCisKK3ZhciBhcmd1bWVudHNSZWNlaXZlZCA9IGZhbHNlOwor
d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBoYW5kbGVNZXNzYWdlLCBmYWxzZSk7
Cit3aW5kb3cuc2V0VGltZW91dChoYW5kbGVBcmd1bWVudHNUaW1lb3V0LCAzMDAwKTsKKworZnVu
Y3Rpb24gaGFuZGxlTWVzc2FnZShldmVudCkgeworICAgIGlmIChhcmd1bWVudHNSZWNlaXZlZCkK
KyAgICAgICAgcmV0dXJuOworICAgIGFyZ3VtZW50c1JlY2VpdmVkID0gdHJ1ZTsKKyAgICBpbml0
aWFsaXplKEpTT04ucGFyc2UoZXZlbnQuZGF0YSkpOworfQorCitmdW5jdGlvbiBoYW5kbGVBcmd1
bWVudHNUaW1lb3V0KCkgeworICAgIGlmIChhcmd1bWVudHNSZWNlaXZlZCkKKyAgICAgICAgcmV0
dXJuOworICAgIGlmICh3aW5kb3cuZGlhbG9nQXJndW1lbnRzKQorICAgICAgICBpbml0aWFsaXpl
KGRpYWxvZ0FyZ3VtZW50cyk7CisgICAgZWxzZSB7CisgICAgICAgIHZhciBhcmdzID0geworICAg
ICAgICAgICAgIm1vbnRoTGFiZWxzIiA6IFsibTEiLCAibTIiLCAibTMiLCAibTQiLCAibTUiLCAi
bTYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibTciLCAibTgiLCAibTkiLCAibTEw
IiwgIm0xMSIsICJtMTIiXSwKKyAgICAgICAgICAgICJkYXlMYWJlbHMiIDogWyJkMSIsICJkMiIs
ICJkMyIsICJkNCIsICJkNSIsICJkNiIsICJkNyJdLAorICAgICAgICB9OworICAgICAgICBpbml0
aWFsaXplKGFyZ3MpOworICAgIH0KK30KKworZnVuY3Rpb24gJChpZCkgeworICAgIHJldHVybiBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZUVsZW1lbnQo
dGFnTmFtZSwgb3B0X2NsYXNzLCBvcHRfdGV4dCkgeworICAgIHZhciBlbGVtZW50ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTsKKyAgICBpZiAob3B0X2NsYXNzKQorICAgICAgICBl
bGVtZW50LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCBvcHRfY2xhc3MpOworICAgIGlmIChvcHRfdGV4
dCkKKyAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShv
cHRfdGV4dCkpOworICAgIHJldHVybiBlbGVtZW50OworfQorCitmdW5jdGlvbiBnZXRBcmd1bWVu
dEVycm9yKGFyZ3MpIHsKKyAgICBpZiAoIWFyZ3MubW9udGhMYWJlbHMpCisgICAgICAgIHJldHVy
biAiTm8gbW9udGhMYWJlbHMuIjsKKyAgICBpZiAoYXJncy5tb250aExhYmVscy5sZW5ndGggIT0g
MTIpCisgICAgICAgIHJldHVybiAibW9udGhMYWJlbHMgaXMgbm90IGFuIGFycmF5IHdpdGggMTIg
ZWxlbWVudHMuIjsKKyAgICBpZiAoIWFyZ3MuZGF5TGFiZWxzKQorICAgICAgICByZXR1cm4gIk5v
IGRheUxhYmVscy4iOworICAgIGlmIChhcmdzLmRheUxhYmVscy5sZW5ndGggIT0gNykKKyAgICAg
ICAgcmV0dXJuICJkYXlMYWJlbHMgaXMgbm90IGFuIGFycmF5IHdpdGggNyBlbGVtZW50cy4iOwor
ICAgIHJldHVybiAiIjsKK30KKworZnVuY3Rpb24gaW5pdGlhbGl6ZShhcmdzKSB7CisgICAgdmFy
IHN0eWxlID0gY3JlYXRlRWxlbWVudCgnc3R5bGUnLCB1bmRlZmluZWQsIFNUWUxFU0hFRVQpOwor
ICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5maXJzdENoaWxkLmFwcGVuZENoaWxkKHN0eWxl
KTsKKyAgICB2YXIgZXJyb3JTdHJpbmcgPSBnZXRBcmd1bWVudEVycm9yKGFyZ3MpOworICAgIGlm
IChlcnJvclN0cmluZy5sZW5ndGggPiAwKSB7CisgICAgICAgICQoJ21haW4nKS50ZXh0Q29udGVu
dCA9ICdJbnRlcm5hbCBlcnJvcjogJyArIGVycm9yU3RyaW5nOworICAgIH0gZWxzZSB7CisgICAg
ICAgICQoJ21haW4nKS5pbm5lckhUTUwgPSAnPGgzPjIwMTEgJyArIGFyZ3MubW9udGhMYWJlbHNb
MV0gKyAnPC9oMz48ZGl2IGlkPWRheXM+PC9kaXY+JworICAgICAgICAgICAgKyAnPGRpdj48YnV0
dG9uIHR5cGU9YnV0dG9uIGlkPWIxPkV4aXQgd2l0aCBuZXcgdmFsdWU8L2J1dHRvbj4nCisgICAg
ICAgICAgICArICcgPGJ1dHRvbiB0eXBlPWJ1dHRvbiBpZD1iMj5DYW5jZWw8L2J1dHRvbj48L2Rp
dj4nOworICAgICAgICAkKCdiMScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlU3Vi
bWl0KTsKKyAgICAgICAgJCgnYjInKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZUNh
bmNlbCk7CisgICAgICAgIHZhciBkYXlzID0gJCgnZGF5cycpOworICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IDc7IGkrKykgeworICAgICAgICAgICAgZGF5cy5hcHBlbmRDaGlsZChjcmVhdGVF
bGVtZW50KCdkaXYnLCAnZGF5TGFiZWwnLCBhcmdzLmRheUxhYmVsc1tpXSkpOworICAgICAgICB9
CisgICAgfQorfQorCitmdW5jdGlvbiBoYW5kbGVTdWJtaXQoKSB7CisgICAgdmFyIGV2ZW50ID0g
ZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ1RleHRFdmVudCcpOworICAgIGV2ZW50LmluaXRUZXh0RXZl
bnQoJ3RleHRJbnB1dCcsIGZhbHNlLCBmYWxzZSwgd2luZG93LCAnMjAxMS0wMi0wNCcpOworICAg
IHdpbmRvdy5mcmFtZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChldmVudCk7Cit9CisKK2Z1bmN0aW9u
IGhhbmRsZUNhbmNlbCgpIHsKKyAgICB2YXIgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgi
RXZlbnQiKTsKKyAgICBldmVudC5pbml0RXZlbnQoJ2Fib3J0JywgZmFsc2UsIGZhbHNlKTsKKyAg
ICB3aW5kb3cuZnJhbWVFbGVtZW50LmRpc3BhdGNoRXZlbnQoZXZlbnQpOworfQorCisKK3ZhciBT
VFlMRVNIRUVUID0KKyJib2R5IHtiYWNrZ3JvdW5kLWNvbG9yOiAjZGRmZmRkO30iCisrICIuZGF5
TGFiZWwgeyBmbG9hdDogbGVmdDsgfSI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMmIyNDQ5NWEyMzRiNjViNWQ1M2U5ZGU4NWQ3
ODQxODhhZDBlZTNiZS4uZTM4ZTAxYmJmMzJmNjFiMzFjMWNkYjU0YTEyZWEwZGFhOGU2YmIyYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtNTYzNCw2ICs1NjM0LDggQEAKIAkJRjRFQUY0QUYxMEM3NDJCMTAwOTEwMEQzIC8qIE9w
ZW5UeXBlU2FuaXRpemVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGNEVBRjRBRDEwQzc0MkIxMDA5MTAwRDMgLyogT3BlblR5cGVTYW5pdGl6ZXIuaCAq
LzsgfTsKIAkJRjUxNDJDNjkxMjNGMTJCMDAwRjVCRDRDIC8qIExvY2FsaXplZE51bWJlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUxNDJDNjgxMjNG
MTJCMDAwRjVCRDRDIC8qIExvY2FsaXplZE51bWJlci5oICovOyB9OwogCQlGNTE0MkM2QjEyM0Yx
MkM1MDBGNUJENEMgLyogTG9jYWxpemVkTnVtYmVyTm9uZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTE0MkM2QTEyM0YxMkM1MDBGNUJENEMgLyog
TG9jYWxpemVkTnVtYmVyTm9uZS5jcHAgKi87IH07CisJCUY1MjNDOUE4MTJGRkI3N0MwMDFFNDUx
QiAvKiBDYWxlbmRhclBpY2tlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGNTIzQzlBNzEyRkZCNzdDMDAxRTQ1MUIgLyogQ2FsZW5kYXJQaWNrZXIu
Y3BwICovOyB9OworCQlGNTIzQzlBQTEyRkZCN0VGMDAxRTQ1MUIgLyogQ2FsZW5kYXJQaWNrZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNDOUE5
MTJGRkI3RUYwMDFFNDUxQiAvKiBDYWxlbmRhclBpY2tlci5oICovOyB9OwogCQlGNTVCM0RBRDEy
NTFGMTJEMDAzRUYyNjkgLyogQmFzZVRleHRJbnB1dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU1QjNENzkxMjUxRjEyRDAwM0VGMjY5IC8q
IEJhc2VUZXh0SW5wdXRUeXBlLmNwcCAqLzsgfTsKIAkJRjU1QjNEQUUxMjUxRjEyRDAwM0VGMjY5
IC8qIEJhc2VUZXh0SW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGNTVCM0Q3QTEyNTFGMTJEMDAzRUYyNjkgLyogQmFzZVRleHRJbnB1dFR5
cGUuaCAqLzsgfTsKIAkJRjU1QjNEQUYxMjUxRjEyRDAwM0VGMjY5IC8qIEJ1dHRvbklucHV0VHlw
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTVC
M0Q3QjEyNTFGMTJEMDAzRUYyNjkgLyogQnV0dG9uSW5wdXRUeXBlLmNwcCAqLzsgfTsKQEAgLTEy
MDAwLDYgKzEyMDAyLDggQEAKIAkJRjRFQUY0QUQxMEM3NDJCMTAwOTEwMEQzIC8qIE9wZW5UeXBl
U2FuaXRpemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE9wZW5UeXBlU2Fu
aXRpemVyLmg7IHBhdGggPSBvcGVudHlwZS9PcGVuVHlwZVNhbml0aXplci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGNTE0MkM2ODEyM0YxMkIwMDBGNUJENEMgLyogTG9jYWxpemVk
TnVtYmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvY2FsaXplZE51bWJl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNTE0MkM2QTEyM0YxMkM1MDBGNUJE
NEMgLyogTG9jYWxpemVkTnVtYmVyTm9uZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBMb2NhbGl6ZWROdW1iZXJOb25lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRjUyM0M5QTcxMkZGQjc3QzAwMUU0NTFCIC8qIENhbGVuZGFyUGlja2VyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENhbGVuZGFyUGlja2VyLmNwcDsg
cGF0aCA9IENhbGVuZGFyUGlja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RjUyM0M5QTkxMkZGQjdFRjAwMUU0NTFCIC8qIENhbGVuZGFyUGlja2VyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENhbGVuZGFyUGlja2VyLmg7IHBhdGggPSBDYWxlbmRhclBp
Y2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNTIzRDIzQjAyREU0Mzk2MDE4
NjM1Q0EgLyogSFRNTERvY3VtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxEb2N1bWVudC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNTIzRDIzQzAyREU0
Mzk2MDE4NjM1Q0EgLyogSFRNTERvY3VtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxEb2N1bWVudC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjUyM0QyM0UwMkRFNDM5
NjAxODYzNUNBIC8qIEhUTUxFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CkBAIC0xMzczMCw2ICsx
MzczNCw4IEBACiAJCTY1NjU4MEVDMDlEMTJCMjAwMDBFNjFENyAvKiBEZXJpdmVkIFNvdXJjZXMg
Ki8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUY1MjNDOUE3
MTJGRkI3N0MwMDFFNDUxQiAvKiBDYWxlbmRhcmlja2VyLmNwcCAqLywKKwkJCQlGNTIzQzlBOTEy
RkZCN0VGMDAxRTQ1MUIgLyogQ2FsZW5kYXJQaWNrZXIuaCAqLywKIAkJCQk2NTY1ODFBQzA5RDE0
RUU2MDAwRTYxRDcgLyogQ2hhcnNldERhdGEuY3BwICovLAogCQkJCUU0MDZGM0ZCMTE5ODMwN0Qw
MDlENTlENiAvKiBDb2xvckRhdGEuY3BwICovLAogCQkJCTY1NjU4MTQ0MDlEMTMwNDMwMDBFNjFE
NyAvKiBDU1NHcmFtbWFyLmNwcCAqLywKQEAgLTE5NTc2LDYgKzE5NTgyLDcgQEAKIAkJCQlCQ0Q1
MzM2NDBFRDY4NDg5MDA4ODc0NjggLyogQ2FjaGVkU2NyaXB0U291cmNlUHJvdmlkZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDQjE2QzI4MDk3OUMzQkQwMDQ2Nzc0MSAvKiBDYWNoZWRYU0xTdHls
ZVNoZWV0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOTk1MDA4MjQ1RTU5MDAxRTlBQkMgLyog
Q2FjaGVQb2xpY3kuaCBpbiBIZWFkZXJzICovLAorCQkJCUY1MjNDOUFBMTJGRkI3RUYwMDFFNDUx
QiAvKiBDYWxlbmRhclBpY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkU0RTkxQUQxMEY3RkIz
MTAwQTI3NzlDIC8qIENhbnZhc0NvbnRleHRBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0OTQ4NEZDMjEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFzR3JhZGllbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTQ5NDg0RkM1MTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNQYXR0ZXJuLmggaW4g
SGVhZGVycyAqLywKQEAgLTIyODUxLDYgKzIyODU4LDcgQEAKIAkJCQlEMEQxNDFCMjEyQjJCRjUy
MDBFMzk2MjAgLyogQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUJDQjE2QzIzMDk3OUMzQkQwMDQ2Nzc0MSAvKiBDYWNoZWRTY3JpcHQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkNCMTZDMjcwOTc5QzNCRDAwNDY3NzQxIC8qIENhY2hlZFhTTFN0eWxlU2hlZXQu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRjUyM0M5QTgxMkZGQjc3QzAwMUU0NTFCIC8qIENhbGVu
ZGFyUGlja2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTZFNEU5MUFDMTBGN0ZCMzEwMEEyNzc5
QyAvKiBDYW52YXNDb250ZXh0QXR0cmlidXRlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OTQ4
NEZDMTEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFzR3JhZGllbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNDk0ODRGQzQxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1BhdHRlcm4uY3BwIGluIFNv
dXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvaHRtbC5jc3MgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvaHRtbC5jc3MKaW5kZXggMGYxM2ZjYjczOTQ5NzcyYzcyM2JkYTkwZjg5
MDJmOTA1MTZlY2YyMC4uYWU3MWZiYmMyZGVjMGU0ZWM1NWI5YWExN2JiMzg2ZmZjNDA3MWNiNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL2h0bWwuY3NzCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9odG1sLmNzcwpAQCAtNjQwLDYgKzY0MCwyNiBAQCBvdXRwdXQgewogICAgIGxlZnQ6
IDJweDsgLyogPG91dGVyLWFycm93IHBvc2l0aW9uPiArIDxtZXNzYWdlIGJvcmRlciB3aWR0aD4g
LSA8Ym9yZGVyIGJveCB3aWR0aCBvZiBvdXRlci1hcnJvdz4gICovCiB9CiAKKy8qIENhbGVuZGFy
IHBpY2tlciAqLworCis6Oi13ZWJraXQtZGlhbG9nLWJhY2tncm91bmQgeworICAgIHotaW5kZXg6
IDIxNDc0ODM2NDY7CisgICAgd2lkdGg6IDEwMCU7CisgICAgaGVpZ2h0OiAxMDAlOworICAgIHBv
c2l0aW9uOiBmaXhlZDsKKyAgICB0b3A6IDA7CisgICAgbGVmdDogMDsKKyAgICBiYWNrZ3JvdW5k
LWNvbG9yOiBibGFjazsKKyAgICBvcGFjaXR5OiAwLjE7Cit9CisKKzo6LXdlYmtpdC1kaWFsb2ct
ZnJhbWUgeworICAgIHotaW5kZXg6IDIxNDc0ODM2NDc7CisgICAgcG9zaXRpb246IGFic29sdXRl
OworICAgIGJhY2tncm91bmQtY29sb3I6ICNkZGVlZmY7CisgICAgYm9yZGVyOiAwcHg7Cit9CisK
IC8qIG1ldGVyICovCiAKIG1ldGVyIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
RGF0ZUlucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0RhdGVJbnB1dFR5cGUuY3Bw
CmluZGV4IDM0MDlkM2I0ZjhlN2FlYjJjNjg4NzlkMDY1MGM4N2Q2M2M5ODBlZTMuLmYxNjIwYzNj
ZjM4NTlhYTU3NmY4NzQ0MWNiMzc3N2FkNmE3NzlmMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvRGF0ZUlucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9EYXRl
SW5wdXRUeXBlLmNwcApAQCAtMzEsOSArMzEsMTcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJEYXRlSW5wdXRUeXBlLmgiCiAKKyNpbmNsdWRlICJDYWxlbmRhclBpY2tlci5oIgog
I2luY2x1ZGUgIkRhdGVDb21wb25lbnRzLmgiCisjaW5jbHVkZSAiRE9NV2luZG93LmgiCisjaW5j
bHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiSFRNTElG
cmFtZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAi
SFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFNjcmlwdEVsZW1lbnQuaCIKKyNpbmNsdWRlICJT
ZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKKyNpbmNsdWRlICJUZXh0RXZlbnQuaCIKICNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00OCw2ICs1Niwx
MSBAQCBQYXNzT3duUHRyPElucHV0VHlwZT4gRGF0ZUlucHV0VHlwZTo6Y3JlYXRlKEhUTUxJbnB1
dEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEYXRlSW5wdXRUeXBl
KGVsZW1lbnQpKTsKIH0KIAorRGF0ZUlucHV0VHlwZTo6fkRhdGVJbnB1dFR5cGUoKQoreworICAg
IGNsb3NlRGlhbG9nKCk7Cit9CisKIGNvbnN0IEF0b21pY1N0cmluZyYgRGF0ZUlucHV0VHlwZTo6
Zm9ybUNvbnRyb2xUeXBlKCkgY29uc3QKIHsKICAgICByZXR1cm4gSW5wdXRUeXBlTmFtZXM6OmRh
dGUoKTsKQEAgLTkxLDQgKzEwNCwxMzQgQEAgYm9vbCBEYXRlSW5wdXRUeXBlOjpzZXRNaWxsaXNl
Y29uZFRvRGF0ZUNvbXBvbmVudHMoZG91YmxlIHZhbHVlLCBEYXRlQ29tcG9uZW50cyoKICAgICBy
ZXR1cm4gZGF0ZS0+c2V0TWlsbGlzZWNvbmRzU2luY2VFcG9jaEZvckRhdGUodmFsdWUpOwogfQog
CisvLyBGSVhNRTogc2hvdWxkIGJlIG1vdmVkIHRvIFdlYkNvcmUvaHRtbC9zaGFkb3cvCitjbGFz
cyBEaWFsb2dCYWNrZ3JvdW5kRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudCB7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGNyZWF0ZShEYXRlSW5wdXRUeXBl
KiBpbnB1dFR5cGUsIERvY3VtZW50KiBkb2MpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IERpYWxvZ0JhY2tncm91bmRFbGVtZW50KGlucHV0VHlwZSwgZG9jKSk7CisgICAgfQor
Citwcml2YXRlOgorICAgIERpYWxvZ0JhY2tncm91bmRFbGVtZW50KERhdGVJbnB1dFR5cGUqIGlu
cHV0VHlwZSwgRG9jdW1lbnQqIGRvYykKKyAgICAgICAgOiBIVE1MRWxlbWVudChkaXZUYWcsIGRv
YykKKyAgICAgICAgLCBtX2lucHV0VHlwZShpbnB1dFR5cGUpIHsgfQorCisgICAgdmlydHVhbCBj
b25zdCBBdG9taWNTdHJpbmcmIHNoYWRvd1BzZXVkb0lkKCkgY29uc3QKKyAgICB7CisgICAgICAg
IERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBwc2V1ZG9JZCwgKCItd2Vi
a2l0LWRpYWxvZy1iYWNrZ3JvdW5kIikpOworICAgICAgICByZXR1cm4gcHNldWRvSWQ7CisgICAg
fQorCisgICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQor
ICAgIHsKKyAgICAgICAgaWYgKGV2ZW50LT5pc01vdXNlRXZlbnQoKSkgeworICAgICAgICAgICAg
ZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgICAgICBpZiAoZXZlbnQtPnR5cGUo
KSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCkKKyAgICAgICAgICAgICAgICBtX2lucHV0VHlw
ZS0+Y2xvc2VEaWFsb2coKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICBIVE1MRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7CisgICAgfQorCisgICAg
RGF0ZUlucHV0VHlwZSogbV9pbnB1dFR5cGU7Cit9OworCisvLyBGSVhNRTogc2hvdWxkIGJlIG1v
dmVkIHRvIFdlYkNvcmUvaHRtbC9zaGFkb3cvCitjbGFzcyBJRnJhbWVXaXRoUHNldWRvSWQgOiBw
dWJsaWMgSFRNTElGcmFtZUVsZW1lbnQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PElGcmFtZVdpdGhQc2V1ZG9JZD4gY3JlYXRlKERhdGVJbnB1dFR5cGUqIGlucHV0VHlwZSwgRG9j
dW1lbnQqIGRvY3VtZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJRnJh
bWVXaXRoUHNldWRvSWQoaW5wdXRUeXBlLCBkb2N1bWVudCkpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBJRnJhbWVXaXRoUHNldWRvSWQoRGF0ZUlucHV0VHlwZSogaW5wdXRUeXBlLCBEb2N1bWVu
dCogZG9jdW1lbnQpCisgICAgICAgIDogSFRNTElGcmFtZUVsZW1lbnQoaWZyYW1lVGFnLCBkb2N1
bWVudCkKKyAgICAgICAgLCBtX2lucHV0VHlwZShpbnB1dFR5cGUpIHsgfTsKKworICAgIHZpcnR1
YWwgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0CisgICAgeworICAg
ICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgcHNldWRvSWQsICgi
LXdlYmtpdC1kaWFsb2ctZnJhbWUiKSk7CisgICAgICAgIHJldHVybiBwc2V1ZG9JZDsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCisg
ICAgeworICAgICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkudGV4dElucHV0
RXZlbnQpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAidGV4dElucHV0XG4iKTsKKyAg
ICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICAgICAgbV9pbnB1
dFR5cGUtPmNsb3NlRGlhbG9nQW5kU2V0VmFsdWUoc3RhdGljX2Nhc3Q8VGV4dEV2ZW50Kj4oZXZl
bnQpLT5kYXRhKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVsc2UgaWYgKGV2
ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmFib3J0RXZlbnQpIHsKKyAgICAgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiY2FuY2VsXG4iKTsKKyAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0
SGFuZGxlZCgpOworICAgICAgICAgICAgbV9pbnB1dFR5cGUtPmNsb3NlRGlhbG9nKCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgSFRNTElGcmFtZUVsZW1lbnQ6OmRl
ZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOworICAgIH0KKworICAgIERhdGVJbnB1dFR5cGUqIG1f
aW5wdXRUeXBlOworfTsKKwordm9pZCBEYXRlSW5wdXRUeXBlOjpoYW5kbGVNb3VzZURvd25FdmVu
dChNb3VzZUV2ZW50KiBldmVudCkKK3sKKyAgICAvLyBTaG91bGQgYmUgbW92ZWQgdG8gYSByZW5k
ZXJlcj8KKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBEb2N1bWVudCogZG9jID0gZWxl
bWVudCgpLT5kb2N1bWVudCgpOworICAgIGlmIChtX3NoYWRvdykgeworICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIiVzOiBhbHJlYWR5IGhhcyBhIGNhbGVuZGFyIGZyYW1lLlxuIiwgX19mdW5jX18p
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgp
OworCisgICAgbV9zaGFkb3cgPSBIVE1MRWxlbWVudDo6Y3JlYXRlKGRpdlRhZywgZG9jKTsKKyAg
ICBpZiAoZWxlbWVudCgpLT5zaGFkb3dSb290KCkpIHsKKyAgICAgICAgZWxlbWVudCgpLT5zaGFk
b3dSb290KCktPmFwcGVuZENoaWxkKG1fc2hhZG93LmdldCgpLCBlYyk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZWxlbWVudCgpLT5zZXRTaGFkb3dSb290KG1fc2hhZG93KTsKKyAgICAgICAgbV9z
aGFkb3ctPmF0dGFjaCgpOworICAgIH0KKworICAgIG1fc2hhZG93LT5hcHBlbmRDaGlsZChEaWFs
b2dCYWNrZ3JvdW5kRWxlbWVudDo6Y3JlYXRlKHRoaXMsIGRvYyksIGVjKTsKKyAgICBSZWZQdHI8
SUZyYW1lV2l0aFBzZXVkb0lkPiBmcmFtZSA9IElGcmFtZVdpdGhQc2V1ZG9JZDo6Y3JlYXRlKHRo
aXMsIGRvYyk7CisgICAgbV9zaGFkb3ctPmFwcGVuZENoaWxkKGZyYW1lLmdldCgpLCBlYyk7Cisg
ICAgLy8gSFRNTEZyYW1lRWxlbWVudEJhc2Ugc3RhcnRzIGxvYWRpbmcgaW4gaW5zZXJ0ZWRJbnRv
RG9jdW1lbnQoKS4gV2UgbmVlZCB0bworICAgIC8vIGtpY2sgbG9hZGluZyBleHBsaWNpdGx5IGJl
Y2F1c2UgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKSBpc24ndCBjYWxsZWQgZm9yCisgICAgLy8gc2hh
ZG93IG5vZGVzLgorICAgIGZyYW1lLT5zZXRMb2NhdGlvbigiIik7CisgICAgRG9jdW1lbnQqIGRp
YWxvZ0RvY3VtZW50ID0gZnJhbWUtPmNvbnRlbnREb2N1bWVudCgpOworICAgIGZwcmludGYoc3Rk
ZXJyLCAiJXMgY29udGVudERvYz0lcFxuIiwgX19mdW5jX18sIGRpYWxvZ0RvY3VtZW50KTsKKyAg
ICBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KGRpYWxvZ0RvY3VtZW50LT5kb2N1bWVudEVsZW1l
bnQoKSktPnNldElubmVySFRNTCgiPGhlYWQ+PC9oZWFkPjxib2R5PjxkaXYgaWQ9bWFpbj5Mb2Fk
aW5nLi4uPC9kaXY+PC9ib2R5PiIsIGVjKTsKKyAgICBSZWZQdHI8SFRNTFNjcmlwdEVsZW1lbnQ+
IHNjcmlwdCA9IEhUTUxTY3JpcHRFbGVtZW50OjpjcmVhdGUoc2NyaXB0VGFnLCBkaWFsb2dEb2N1
bWVudCwgZmFsc2UpOworICAgIFN0cmluZyBzY3JpcHRTb3VyY2UoY2FsZW5kYXJQaWNrZXJKcywg
c2l6ZW9mKGNhbGVuZGFyUGlja2VySnMpKTsKKyAgICBzY3JpcHQtPnNldFRleHQoc2NyaXB0U291
cmNlKTsKKyAgICBkaWFsb2dEb2N1bWVudC0+Ym9keSgpLT5hcHBlbmRDaGlsZChzY3JpcHQucmVs
ZWFzZSgpLCBlYyk7CisKKyAgICAvLyBGSVhNRTogQnVpbGQgd2l0aCBsb2NhbGl6ZWQgbGFiZWxz
LgorICAgIFN0cmluZyBtZXNzYWdlKCJ7XCJtb250aExhYmVsc1wiOltcIkphbnVhcnlcIiwgXCJG
ZWJydWFyeVwiLCBcIk1hcmNoXCIsIFwiQXByaWxcIiwgXCJNYXlcIiwgXCJKdW5lXCIsIFwiSnVs
eVwiLCBcIkF1Z3VzdFwiLCBcIlNlcHRlbWJlclwiLCBcIk9jdG9iZXJcIiwgXCJOb3ZlbWJlclwi
LCBcIkRlY2VtYmVyXCJdLCIKKyAgICAgICAgICAgICAgICAgICAiXCJkYXlMYWJlbHNcIjpbXCJN
b25cIiwgXCJUdWVcIiwgXCJXZWRcIiwgXCJUaHVcIiwgXCJGcmlcIiwgXCJTYXRcIiwgXCJTdW5c
Il19Iik7CisgICAgZnJhbWUtPmNvbnRlbnRXaW5kb3coKS0+cG9zdE1lc3NhZ2UoU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjpjcmVhdGUobWVzc2FnZSksIHN0YXRpY19jYXN0PE1lc3NhZ2VQb3J0Kj4o
MCksICIqIiwgZWxlbWVudCgpLT5kb2N1bWVudCgpLT5kb21XaW5kb3coKSwgZWMpOworfQorCit2
b2lkIERhdGVJbnB1dFR5cGU6OmNsb3NlRGlhbG9nKCkKK3sKKyAgICBpZiAoIW1fc2hhZG93KQor
ICAgICAgICByZXR1cm47CisgICAgaWYgKG1fc2hhZG93LT5pc1NoYWRvd1Jvb3QoKSkKKyAgICAg
ICAgZWxlbWVudCgpLT5zZXRTaGFkb3dSb290KDApOworICAgIGVsc2UgeworICAgICAgICBFeGNl
cHRpb25Db2RlIGVjOworICAgICAgICBlbGVtZW50KCktPnNoYWRvd1Jvb3QoKS0+cmVtb3ZlQ2hp
bGQobV9zaGFkb3cuZ2V0KCksIGVjKTsKKyAgICB9CisgICAgbV9zaGFkb3cgPSAwOworfQorCit2
b2lkIERhdGVJbnB1dFR5cGU6OmNsb3NlRGlhbG9nQW5kU2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKK3sKKyAgICBjbG9zZURpYWxvZygpOworICAgIGVsZW1lbnQoKS0+c2V0VmFsdWVGb3JV
c2VyKHZhbHVlKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9EYXRlSW5wdXRUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0Rh
dGVJbnB1dFR5cGUuaAppbmRleCA5NjVkOWVhYmExNDdhYzUyMWJmMWY1N2ViZjYyNDVlNzZmMTg3
MDNkLi5mMTU0NzE1YTAzZjU1MWRkZWVkNjk4MTJlZmVhMGRhYmZhYTVkZjk1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0RhdGVJbnB1dFR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0RhdGVJbnB1dFR5cGUuaApAQCAtMzUsOSArMzUsMTQgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCitjbGFzcyBIVE1MRWxlbWVudDsKKwogY2xhc3MgRGF0ZUlucHV0VHlwZSA6IHB1
YmxpYyBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNz
T3duUHRyPElucHV0VHlwZT4gY3JlYXRlKEhUTUxJbnB1dEVsZW1lbnQqKTsKKyAgICB2aXJ0dWFs
IH5EYXRlSW5wdXRUeXBlKCk7CisgICAgdm9pZCBjbG9zZURpYWxvZygpOworICAgIHZvaWQgY2xv
c2VEaWFsb2dBbmRTZXRWYWx1ZShjb25zdCBTdHJpbmcmKTsKIAogcHJpdmF0ZToKICAgICBEYXRl
SW5wdXRUeXBlKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpIDogQmFzZURhdGVBbmRUaW1lSW5w
dXRUeXBlKGVsZW1lbnQpIHsgfQpAQCAtNDksNiArNTQsOSBAQCBwcml2YXRlOgogICAgIHZpcnR1
YWwgYm9vbCBwYXJzZWRTdGVwVmFsdWVTaG91bGRCZUludGVnZXIoKSBjb25zdDsKICAgICB2aXJ0
dWFsIGJvb2wgcGFyc2VUb0RhdGVDb21wb25lbnRzSW50ZXJuYWwoY29uc3QgVUNoYXIqLCB1bnNp
Z25lZCBsZW5ndGgsIERhdGVDb21wb25lbnRzKikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHNl
dE1pbGxpc2Vjb25kVG9EYXRlQ29tcG9uZW50cyhkb3VibGUsIERhdGVDb21wb25lbnRzKikgY29u
c3Q7CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZU1vdXNlRG93bkV2ZW50KE1vdXNlRXZlbnQqKTsK
KworICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gbV9zaGFkb3c7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1l
bnRCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3Bw
CmluZGV4IGNmMDc5ZWFhYWE3MDZmMjcxNTljMTU4MDBhODhhYTAxNDAyMmZmNGIuLjJiMjEyZWMz
ZmM0Yjk0Mzk2YjVlYzY3MzM4ODUzMGI0OGU4Mjk3MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwCkBAIC0yMTMsNyArMjEzLDcgQEAgdm9pZCBIVE1M
RnJhbWVFbGVtZW50QmFzZTo6c2V0TG9jYXRpb24oY29uc3QgU3RyaW5nJiBzdHIpCiAKICAgICBt
X1VSTCA9IEF0b21pY1N0cmluZyhzdHIpOwogCi0gICAgaWYgKGluRG9jdW1lbnQoKSkKKyAgICBp
ZiAoaW5Eb2N1bWVudCgpIHx8IHNoYWRvd0FuY2VzdG9yTm9kZSgpLT5pbkRvY3VtZW50KCkpCiAg
ICAgICAgIG9wZW5VUkwoZmFsc2UsIGZhbHNlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MSUZyYW1lRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxJRnJhbWVFbGVtZW50LmNwcAppbmRleCAwNmFmMDkzNmI3OGRjYjk5ZjcyOTdiNTEzZGQxNzgw
NjNiM2U1MzMzLi5mZDk0ODY3OWZlNmJkMGRkYTIyMjkxNTZjZjhlZjJjYzkyNDcyMGNhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJRnJhbWVFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJRnJhbWVFbGVtZW50LmNwcApAQCAtMzYsNyArMzYsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLWlu
bGluZSBIVE1MSUZyYW1lRWxlbWVudDo6SFRNTElGcmFtZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQorSFRNTElGcmFtZUVsZW1lbnQ6OkhU
TUxJRnJhbWVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBk
b2N1bWVudCkKICAgICA6IEhUTUxGcmFtZUVsZW1lbnRCYXNlKHRhZ05hbWUsIGRvY3VtZW50KQog
ewogICAgIEFTU0VSVChoYXNUYWdOYW1lKGlmcmFtZVRhZykpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MSUZyYW1lRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MSUZyYW1lRWxlbWVudC5oCmluZGV4IDYxY2Q2YjY4ZWQ2NDhhMzIyNTllZjQ1N2JlZTQ4ODA1
NzMwZjM3MjYuLjEwYjUxOGY1ZWY1ZDEwOTQ3NjUyMDJjYWE5ZGM4Mjg4ZmEyNTFhMzQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElGcmFtZUVsZW1lbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxJRnJhbWVFbGVtZW50LmgKQEAgLTMyLDkgKzMyLDEwIEBAIGNs
YXNzIEhUTUxJRnJhbWVFbGVtZW50IDogcHVibGljIEhUTUxGcmFtZUVsZW1lbnRCYXNlIHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MSUZyYW1lRWxlbWVudD4gY3JlYXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCi1wcml2YXRlOgorcHJvdGVjdGVkOgog
ICAgIEhUTUxJRnJhbWVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwog
Citwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82769</attachid>
            <date>2011-02-17 01:54:08 -0800</date>
            <delta_ts>2011-02-22 00:41:25 -0800</delta_ts>
            <desc>WIP patch 3</desc>
            <filename>bug-53961-20110217185406.patch</filename>
            <type>text/plain</type>
            <size>38950</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzg2ODIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Rl
cml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCmlu
ZGV4IGZlNTViMjhjYzNjNzUyMjU1ODEwNTUzMzFjNDM4OTUzNTViODIxZWQuLmVjODM1ZmYwOTkw
ZmJhZjNiZDRjNzk4ZGMzMTllYWI5MDkwNWJkYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMu
bWFrZQpAQCAtNTQ2LDYgKzU0Niw3IEBAIGFsbCA6IFwKICAgICBcCiAgICAgSlNKYXZhU2NyaXB0
Q2FsbEZyYW1lLmggXAogICAgIFwKKyAgICBDYWxlbmRhclBpY2tlci5oIFwKICAgICBDU1NHcmFt
bWFyLmNwcCBcCiAgICAgQ1NTUHJvcGVydHlOYW1lcy5oIFwKICAgICBDU1NWYWx1ZUtleXdvcmRz
LmggXApAQCAtNzY3LDYgKzc2OCwxNiBAQCBYTUxOYW1lcy5jcHAgOiBkb20vbWFrZV9uYW1lcy5w
bCB4bWwveG1sYXR0cnMuaW4KIAogIyAtLS0tLS0tLQogCisjIERhdGEgZm9yIEhUTUwgVUkgaW1w
bGVtZW50YXRpb25zCisKK0NBTEVOREFSUElDS0VSX0ZJTEVTID0gJChXZWJDb3JlKS9SZXNvdXJj
ZXMvY2FsZW5kYXJQaWNrZXIuanMgXAorCSQoV2ViQ29yZSkvUmVzb3VyY2VzL2NhbGVuZGFyUGlj
a2VyLmNzcworCitDYWxlbmRhclBpY2tlci5oIDogJChXZWJDb3JlKS9tYWtlLWZpbGUtYXJyYXlz
LnB5ICQoQ0FMRU5EQVJQSUNLRVJfRklMRVMpCisJcHl0aG9uICQ8ICRAIENhbGVuZGFyUGlja2Vy
LmNwcCAkKENBTEVOREFSUElDS0VSX0ZJTEVTKQorCisjIC0tLS0tLS0tCisKICMgU1ZHIHRhZyBh
bmQgYXR0cmlidXRlIG5hbWVzLCBhbmQgZWxlbWVudCBmYWN0b3J5CiAKIGlmZXEgKCQoZmluZHN0
cmluZyBFTkFCTEVfU1ZHX1VTRSwkKEZFQVRVUkVfREVGSU5FUykpLCBFTkFCTEVfU1ZHX1VTRSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9jYWxlbmRhclBpY2tlci5jc3Mg
Yi9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvY2FsZW5kYXJQaWNrZXIuY3NzCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjJmODQzZDQwNWY5ZDRlNjU1MjA2YWVlMTNkYjZmMDIzMWI0MThhMzgKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvY2FsZW5kYXJQaWNrZXIuY3NzCkBAIC0wLDAg
KzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCitib2R5IHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGRlZWZmOworICAgIGZvbnQ6
IC13ZWJraXQtc21hbGwtY29udHJvbDsKKyAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwor
fQorCisuZGF5cy1hcmVhIHsKKyAgICBtYXJnaW4tdG9wOiA2cHg7CisgICAgbWFyZ2luLWJvdHRv
bTogNnB4OworfQorCisuZGF5LWxhYmVsLWNvbnRhaW5lciB7CisgICAgZGlzcGxheTogYmxvY2s7
Cit9CisuZGF5LWxhYmVsIHsKKyAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgICAgYm9yZGVy
OiBzb2xpZCAxcHggI2NjZWVjYzsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgLXdlYmtp
dC1ib3gtc2l6aW5nOiBib3JkZXItYm94OworICAgIHdpZHRoOjE0LjI4NTclOworfQorCisud2Vl
ay1jb250YWluZXIgeworICAgIGRpc3BsYXk6IGJsb2NrOworfQorLmRheSB7CisgICAgZGlzcGxh
eTogaW5saW5lLWJsb2NrOworICAgIHBhZGRpbmc6IDFweDsKKyAgICB0ZXh0LWFsaWduOiBjZW50
ZXI7CisgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CisgICAgLXdlYmtpdC1ib3gtc2l6aW5n
OiBib3JkZXItYm94OworICAgIHdpZHRoOjE0LjI4NTclOworfQorLmF2YWlsYWJsZSB7CisgICAg
Y3Vyc29yOiBkZWZhdWx0OworICAgIHRleHQtc2hhZG93OiAxcHggMXB4IDFweCAjY2NjOworfQor
LmF2YWlsYWJsZTpob3ZlciB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogaGlnaGxpZ2h0OworICAg
IGNvbG9yOiBoaWdobGlnaHR0ZXh0OworfQorLnVuYXZhaWxhYmxlIHsKKyAgICBjb2xvcjogZ3Jh
eXRleHQ7CisgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKK30KKy51bmF2YWlsYWJsZS11cCB7Cisg
ICAgY29sb3I6IGdyYXl0ZXh0OworICAgIGN1cnNvcjogbi1yZXNpemU7Cit9CisudW5hdmFpbGFi
bGUtZG93biB7CisgICAgY29sb3I6IGdyYXl0ZXh0OworICAgIGN1cnNvcjogcy1yZXNpemU7Cit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvY2FsZW5kYXJQaWNrZXIuanMg
Yi9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvY2FsZW5kYXJQaWNrZXIuanMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NmYwYmMxMmIwNmViM2UzMjk3NTNlMWViYmZiNmJmZmNjYTI5NjFlZAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9jYWxlbmRhclBpY2tlci5qcwpAQCAtMCwwICsx
LDQxMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIEZJWE1FOgorLy8gIC0gS2V5Ym9hcmQgb3BlcmF0aW9uCisvLyAgLSBUb3VjaCBl
dmVudD8KKy8vICAtIFJUTAorCisvKioKKyAqIFRoZSBudW1iZXIgb2Ygd2VlayBsaW5lcyBpbiB0
aGUgc2NyZWVuLgorICogQGNvbnN0CisgKiBAdHlwZSB7bnVtYmVyfQorICovCit2YXIgV0VFS1Mg
PSA2OworCit2YXIgQ0xBU1MgPSB7CisgICAgQVZBSUxBQkxFOiAnYXZhaWxhYmxlJywKKyAgICBD
QU5DRUxfQlVUVE9OOiAnY2FuY2VsLWJ1dHRvbicsCisgICAgQ0xFQVJfQlVUVE9OOiAnY2xlYXIt
YnV0dG9uJywKKyAgICBEQVk6ICdkYXknLAorICAgIERBWVNfQVJFQTogJ2RheXMtYXJlYScsCisg
ICAgREFZX0xBQkVMOiAnZGF5LWxhYmVsJywKKyAgICBEQVlfTEFCRUxfQ09OVEFJTkVSOiAnZGF5
LWxhYmVsLWNvbnRhaW5lcicsCisgICAgTU9OVEhfU0VMRUNUT1I6ICdtb250aC1zZWxlY3Rvcics
CisgICAgVE9EQVlfQlVUVE9OOiAndG9kYXktYnV0dG9uJywKKyAgICBUT0RBWV9DTEVBUl9BUkVB
OiAndG9kYXktY2xlYXItYXJlYScsCisgICAgVU5BVkFJTEFCTEU6ICd1bmF2YWlsYWJsZScsCisg
ICAgVU5BVkFJTEFCTEVfRE9XTjogJ3VuYXZhaWxhYmxlLWRvd24nLAorICAgIFVOQVZBSUxBQkxF
X1VQOiAndW5hdmFpbGFibGUtdXAnLAorICAgIFdFRUtfQ09OVEFJTkVSOiAnd2Vlay1jb250YWlu
ZXInLAorICAgIFlFQVJfTU9OVEhfQVJFQTogJ3llYXItbW9udGgtYXJlYScsCisgICAgWUVBUl9T
RUxFQ1RPUjogJ3llYXItc2VsZWN0b3InLAorfTsKKworLyoqCisgKiBAdHlwZSB7T2JqZWN0fQor
ICovCit2YXIgZ2xvYmFsID0geworICAgIGFyZ3VtZW50c1JlY2VpdmVkOiBmYWxzZSwKKyAgICBw
YXJhbXM6IG51bGwsCit9OworCit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGhh
bmRsZU1lc3NhZ2UsIGZhbHNlKTsKK3dpbmRvdy5zZXRUaW1lb3V0KGhhbmRsZUFyZ3VtZW50c1Rp
bWVvdXQsIDEwMDApOworCisvKioKKyAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50OworICovCitmdW5j
dGlvbiBoYW5kbGVNZXNzYWdlKGV2ZW50KSB7CisgICAgaWYgKGdsb2JhbC5hcmd1bWVudHNSZWNl
aXZlZCkKKyAgICAgICAgcmV0dXJuOworICAgIGdsb2JhbC5hcmd1bWVudHNSZWNlaXZlZCA9IHRy
dWU7CisgICAgaW5pdGlhbGl6ZShKU09OLnBhcnNlKGV2ZW50LmRhdGEpKTsKK30KKworZnVuY3Rp
b24gaGFuZGxlQXJndW1lbnRzVGltZW91dCgpIHsKKyAgICBpZiAoZ2xvYmFsLmFyZ3VtZW50c1Jl
Y2VpdmVkKQorICAgICAgICByZXR1cm47CisgICAgaWYgKHdpbmRvdy5kaWFsb2dBcmd1bWVudHMp
IHsKKyAgICAgICAgaW5pdGlhbGl6ZShkaWFsb2dBcmd1bWVudHMpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIHZhciBhcmdzID0geworICAgICAgICBtb250aExhYmVscyA6IFsnbTEnLCAn
bTInLCAnbTMnLCAnbTQnLCAnbTUnLCAnbTYnLAorICAgICAgICAgICAgICAgICAgICAgICAnbTcn
LCAnbTgnLCAnbTknLCAnbTEwJywgJ20xMScsICdtMTInXSwKKyAgICAgICAgZGF5TGFiZWxzIDog
WydkMScsICdkMicsICdkMycsICdkNCcsICdkNScsICdkNicsICdkNyddLAorICAgICAgICB0b2Rh
eUxhYmVsIDogJ1RvZGF5JywKKyAgICAgICAgY2xlYXJMYWJlbCA6ICdDbGVhcicsCisgICAgICAg
IGNhbmNlbExhYmVsIDogJ0NhbmNlbCcsCisgICAgICAgIHdlZWtTdGFydERheSA6IDAsCisgICAg
ICAgIHN0ZXAgOiAyLAorICAgICAgICBtYXggOiAnMjAxMS0wMi0wMScsCisgICAgfTsKKyAgICBp
bml0aWFsaXplKGFyZ3MpOworfQorCisvKioKKyAqIEBwYXJhbSB7c3RyaW5nfSBpZAorICovCitm
dW5jdGlvbiAkKGlkKSB7CisgICAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsK
K30KKworLyoqCisgKiBAcGFyYW0ge3N0cmluZ30gdGFnTmFtZQorICogQHBhcmFtIHtzdHJpbmd9
IG9wdF9jbGFzcworICogQHBhcmFtIHtzdHJpbmd9IG9wdF90ZXh0CisgKi8KK2Z1bmN0aW9uIGNy
ZWF0ZUVsZW1lbnQodGFnTmFtZSwgb3B0X2NsYXNzLCBvcHRfdGV4dCkgeworICAgIHZhciBlbGVt
ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTsKKyAgICBpZiAob3B0X2NsYXNz
KQorICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCBvcHRfY2xhc3MpOworICAg
IGlmIChvcHRfdGV4dCkKKyAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVh
dGVUZXh0Tm9kZShvcHRfdGV4dCkpOworICAgIHJldHVybiBlbGVtZW50OworfQorCisvKioKKyAq
IEBwYXJhbSB7IU9iamVjdH0gYXJncworICovCitmdW5jdGlvbiBnZXRBcmd1bWVudEVycm9yKGFy
Z3MpIHsKKyAgICBpZiAoIWFyZ3MubW9udGhMYWJlbHMpCisgICAgICAgIHJldHVybiAnTm8gbW9u
dGhMYWJlbHMuJzsKKyAgICBpZiAoYXJncy5tb250aExhYmVscy5sZW5ndGggIT0gMTIpCisgICAg
ICAgIHJldHVybiAnbW9udGhMYWJlbHMgaXMgbm90IGFuIGFycmF5IHdpdGggMTIgZWxlbWVudHMu
JzsKKyAgICBpZiAoIWFyZ3MuZGF5TGFiZWxzKQorICAgICAgICByZXR1cm4gJ05vIGRheUxhYmVs
cy4nOworICAgIGlmIChhcmdzLmRheUxhYmVscy5sZW5ndGggIT0gNykKKyAgICAgICAgcmV0dXJu
ICdkYXlMYWJlbHMgaXMgbm90IGFuIGFycmF5IHdpdGggNyBlbGVtZW50cy4nOworICAgIGlmICgh
YXJncy5jYW5jZWxMYWJlbCkKKyAgICAgICAgcmV0dXJuICdObyBjYW5jZWxMYWJlbC4nOworICAg
IGlmICghYXJncy5jbGVhckxhYmVsKQorICAgICAgICByZXR1cm4gJ05vIGNsZWFyTGFiZWwuJzsK
KyAgICBpZiAoIWFyZ3MudG9kYXlMYWJlbCkKKyAgICAgICAgcmV0dXJuICdObyB0b2RheUxhYmVs
Lic7CisgICAgcmV0dXJuICcnOworfQorCitmdW5jdGlvbiBjcmVhdGVEYXRlRnJvbVN0cmluZyhv
cHRfY3VycmVudCkgeworICAgIGlmIChvcHRfY3VycmVudCkgeworICAgICAgICB2YXIgcmVzdWx0
ID0gb3B0X2N1cnJlbnQubWF0Y2goLyhcZCspLShcZCspLShcZCspLyk7CisgICAgICAgIGlmIChy
ZXN1bHQpCisgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoTnVtYmVyKHJlc3Vs
dFsxXSksIE51bWJlcihyZXN1bHRbMl0pIC0gMSwgTnVtYmVyKHJlc3VsdFszXSkpKTsKKyAgICB9
CisgICAgdmFyIG5vdyA9IG5ldyBEYXRlKCk7CisgICAgLy8gQ3JlYXRlIFVUQyBkYXRlIHdpdGgg
c2FtZSBudW1iZXJzIGFzIGxvY2FsIGRhdGUuCisgICAgcmV0dXJuIG5ldyBEYXRlKERhdGUuVVRD
KG5vdy5nZXRGdWxsWWVhcigpLCBub3cuZ2V0TW9udGgoKSwgbm93LmdldERhdGUoKSkpOworfQor
CisvKioKKyAqIEBwYXJhbSB7IU9iamVjdH0gYXJncworICovCitmdW5jdGlvbiBpbml0aWFsaXpl
KGFyZ3MpIHsKKyAgICB2YXIgZXJyb3JTdHJpbmcgPSBnZXRBcmd1bWVudEVycm9yKGFyZ3MpOwor
ICAgIGlmIChlcnJvclN0cmluZy5sZW5ndGggPiAwKSB7CisgICAgICAgICQoJ21haW4nKS50ZXh0
Q29udGVudCA9ICdJbnRlcm5hbCBlcnJvcjogJyArIGVycm9yU3RyaW5nOworICAgIH0gZWxzZSB7
CisgICAgICAgIGdsb2JhbC5wYXJhbXMgPSBhcmdzOworICAgICAgICBjaGVja0xpbWl0cygpOwor
ICAgICAgICBsYXlvdXQoKTsKKyAgICAgICAgLy8gRklYTUU6IHRoaXMgbWlnaHQgc2hvdyB1bmF2
YWlsYWJsZSBtb250aC4KKyAgICAgICAgc2VsZWN0RGF0ZShjcmVhdGVEYXRlRnJvbVN0cmluZyhh
cmdzLmN1cnJlbnRWYWx1ZSkpOworICAgIH0KK30KKworZnVuY3Rpb24gY2hlY2tMaW1pdHMoKSB7
CisgICAgLy8gSGFyZCBsaW1pdHMgb2YgdHlwZT1kYXRlLiBTZWUgV2ViQ29yZS9odG1sL0RhdGVD
b21wb25lbnRzLmguCisgICAgZ2xvYmFsLm1pbmltdW1EYXRlID0gbmV3IERhdGUoLTYyMTM1NTk2
ODAwMDAwLjApOworICAgIGdsb2JhbC5tYXhpbXVtRGF0ZSA9IG5ldyBEYXRlKDg2NDAwMDAwMDAw
MDAwMDAuMCk7CisgICAgLy8gU2VlIFdlYkNvcmUvaHRtbC9EYXRlSW5wdXRUeXBlLmNwcC4KKyAg
ICBnbG9iYWwuc3RlcCA9IDg2NDAwMDAwOworICAgIGlmIChnbG9iYWwucGFyYW1zLm1pbikgewor
ICAgICAgICAvLyBXZSBhc3N1bWUgcGFyYW1zLm1pbiBpcyBhIHZhbGlkIGRhdGUuCisgICAgICAg
IGdsb2JhbC5taW5pbXVtRGF0ZSA9IGNyZWF0ZURhdGVGcm9tU3RyaW5nKGdsb2JhbC5wYXJhbXMu
bWluKTsKKyAgICB9CisgICAgaWYgKGdsb2JhbC5wYXJhbXMubWF4KSB7CisgICAgICAgIC8vIFdl
IGFzc3VtZSBwYXJhbXMubWF4IGlzIGEgdmFsaWQgZGF0ZS4KKyAgICAgICAgZ2xvYmFsLm1heGlt
dW1EYXRlID0gY3JlYXRlRGF0ZUZyb21TdHJpbmcoZ2xvYmFsLnBhcmFtcy5tYXgpOworICAgIH0K
KyAgICBpZiAoZ2xvYmFsLnBhcmFtcy5zdGVwKSB7CisgICAgICAgIGdsb2JhbC5zdGVwICo9IGds
b2JhbC5wYXJhbXMuc3RlcDsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGxheW91dCgpIHsKKyAgICB2
YXIgbWFpbiA9ICQoJ21haW4nKTsKKyAgICB2YXIgcGFyYW1zID0gZ2xvYmFsLnBhcmFtczsKKyAg
ICBtYWluLnJlbW92ZUNoaWxkKG1haW4uZmlyc3RDaGlsZCk7CisKKyAgICAvLyBTaG91bGQgd2Ug
dXNlIHR5cGU9bW9udGg/CisgICAgZ2xvYmFsLnllYXIgPSBjcmVhdGVFbGVtZW50KCdpbnB1dCcs
IENMQVNTLllFQVJfU0VMRUNUT1IpOworICAgIGdsb2JhbC55ZWFyLnR5cGUgPSAnbnVtYmVyJzsK
KyAgICBnbG9iYWwueWVhci5taW4gPSBnbG9iYWwubWluaW11bURhdGUuZ2V0VVRDRnVsbFllYXIo
KTsKKyAgICBnbG9iYWwueWVhci5tYXggPSBnbG9iYWwubWF4aW11bURhdGUuZ2V0VVRDRnVsbFll
YXIoKTsKKyAgICBnbG9iYWwueWVhci5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBoYW5kbGVZ
ZWFyTW9udGhDaGFuZ2UpOworICAgIGdsb2JhbC55ZWFyLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0
JywgaGFuZGxlWWVhck1vbnRoQ2hhbmdlKTsKKyAgICBnbG9iYWwubW9udGggPSBjcmVhdGVFbGVt
ZW50KCdzZWxlY3QnLCBDTEFTUy5NT05USF9TRUxFQ1RPUik7CisgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCAxMjsgaSsrKSB7CisgICAgICAgIGdsb2JhbC5tb250aC5hcHBlbmRDaGlsZChjcmVhdGVF
bGVtZW50KCdvcHRpb24nLCB1bmRlZmluZWQsIHBhcmFtcy5tb250aExhYmVsc1tpXSkpOworICAg
IH0KKyAgICBnbG9iYWwubW9udGguYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgaGFuZGxlWWVh
ck1vbnRoQ2hhbmdlKTsKKyAgICB2YXIgZWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQoJ2RpdicsIENM
QVNTLllFQVJfTU9OVEhfQVJFQSk7CisgICAgZWxlbWVudC5hcHBlbmRDaGlsZChnbG9iYWwueWVh
cik7CisgICAgZWxlbWVudC5hcHBlbmRDaGlsZChnbG9iYWwubW9udGgpOworICAgIG1haW4uYXBw
ZW5kQ2hpbGQoZWxlbWVudCk7CisKKyAgICBlbGVtZW50ID0gY3JlYXRlRWxlbWVudCgnZGl2Jywg
Q0xBU1MuREFZU19BUkVBKTsKKyAgICBlbGVtZW50LnRhYkluZGV4ID0gMDsKKyAgICBlbGVtZW50
LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlRGF5Q2xpY2spOworICAgIHZhciBjb250
YWluZXIgPSBjcmVhdGVFbGVtZW50KCdkaXYnLCBDTEFTUy5EQVlfTEFCRUxfQ09OVEFJTkVSKTsK
KyAgICB2YXIgd2Vla1N0YXJ0RGF5ID0gZ2xvYmFsLnBhcmFtcy53ZWVrU3RhcnREYXkgfHwgMDsK
KyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDc7IGkrKykgeworICAgICAgICBjb250YWluZXIuYXBw
ZW5kQ2hpbGQoY3JlYXRlRWxlbWVudCgnZGl2JywgQ0xBU1MuREFZX0xBQkVMLCBwYXJhbXMuZGF5
TGFiZWxzWyh3ZWVrU3RhcnREYXkgKyBpKSAlIDddKSk7CisgICAgfQorICAgIGVsZW1lbnQuYXBw
ZW5kQ2hpbGQoY29udGFpbmVyKTsKKyAgICB2YXIgZGF5cyA9IFtdOworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgV0VFS1M7IGkrKykgeworICAgICAgICBjb250YWluZXIgPSBjcmVhdGVFbGVtZW50
KCdkaXYnLCBDTEFTUy5XRUVLX0NPTlRBSU5FUik7CisgICAgICAgIHZhciB3ZWVrID0gW107Cisg
ICAgICAgIGZvciAodmFyIGQgPSAwOyBkIDwgNzsgZCsrKSB7CisgICAgICAgICAgICB2YXIgZGF5
ID0gY3JlYXRlRWxlbWVudCgnZGl2JywgQ0xBU1MuREFZLCAnICcpOworICAgICAgICAgICAgd2Vl
ay5wdXNoKGRheSk7CisgICAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZGF5KTsKKyAg
ICAgICAgfQorICAgICAgICBkYXlzLnB1c2god2Vlayk7CisgICAgICAgIGVsZW1lbnQuYXBwZW5k
Q2hpbGQoY29udGFpbmVyKTsKKyAgICB9CisgICAgZ2xvYmFsLmRheXMgPSBkYXlzOworICAgIG1h
aW4uYXBwZW5kQ2hpbGQoZWxlbWVudCk7CisKKyAgICBlbGVtZW50ID0gY3JlYXRlRWxlbWVudCgn
ZGl2JywgQ0xBU1MuVE9EQVlfQ0xFQVJfQVJFQSk7CisgICAgZ2xvYmFsLnRvZGF5ID0gY3JlYXRl
RWxlbWVudCgnaW5wdXQnLCBDTEFTUy5UT0RBWV9CVVRUT04pOworICAgIGdsb2JhbC50b2RheS50
eXBlID0gJ2J1dHRvbic7CisgICAgZ2xvYmFsLnRvZGF5LnZhbHVlID0gcGFyYW1zLnRvZGF5TGFi
ZWw7CisgICAgZ2xvYmFsLnRvZGF5LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlVG9k
YXkpOworICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoZ2xvYmFsLnRvZGF5KTsKKyAgICBnbG9iYWwu
Y2xlYXIgPSBudWxsOworICAgIGlmICghcGFyYW1zLnJlcXVpcmVkKSB7CisgICAgICAgIGdsb2Jh
bC5jbGVhciA9IGNyZWF0ZUVsZW1lbnQoJ2lucHV0JywgQ0xBU1MuQ0xFQVJfQlVUVE9OKTsKKyAg
ICAgICAgZ2xvYmFsLmNsZWFyLnR5cGUgPSAnYnV0dG9uJzsKKyAgICAgICAgZ2xvYmFsLmNsZWFy
LnZhbHVlID0gcGFyYW1zLmNsZWFyTGFiZWw7CisgICAgICAgIGdsb2JhbC5jbGVhci5hZGRFdmVu
dExpc3RlbmVyKCdjbGljaycsIGhhbmRsZUNsZWFyKTsKKyAgICAgICAgZWxlbWVudC5hcHBlbmRD
aGlsZChnbG9iYWwuY2xlYXIpOworICAgIH0KKyAgICBnbG9iYWwuY2FuY2VsID0gY3JlYXRlRWxl
bWVudCgnaW5wdXQnLCBDTEFTUy5DQU5DRUxfQlVUVE9OKTsKKyAgICBnbG9iYWwuY2FuY2VsLnR5
cGUgPSAnYnV0dG9uJzsKKyAgICBnbG9iYWwuY2FuY2VsLnZhbHVlID0gcGFyYW1zLmNhbmNlbExh
YmVsOworICAgIGdsb2JhbC5jYW5jZWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVD
YW5jZWwpOworICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoZ2xvYmFsLmNhbmNlbCk7CisgICAgbWFp
bi5hcHBlbmRDaGlsZChlbGVtZW50KTsKK30KKworZnVuY3Rpb24gc3RlcE1pc21hdGNoKHRpbWUp
IHsKKyAgICByZXR1cm4gKHRpbWUgLSBnbG9iYWwubWluaW11bURhdGUuZ2V0VGltZSgpKSAlIGds
b2JhbC5zdGVwICE9IDA7Cit9CitmdW5jdGlvbiBvdXRPZlJhbmdlKHRpbWUpIHsKKyAgICByZXR1
cm4gdGltZSA8IGdsb2JhbC5taW5pbXVtRGF0ZS5nZXRUaW1lKCkgfHwgdGltZSA+IGdsb2JhbC5t
YXhpbXVtRGF0ZS5nZXRUaW1lKCk7Cit9CisKK2Z1bmN0aW9uIGlzVmFsaWREYXRlKHRpbWUpIHsK
KyAgICByZXR1cm4gIW91dE9mUmFuZ2UodGltZSkgJiYgIXN0ZXBNaXNtYXRjaCh0aW1lKTsKK30K
KworLyoqCisgKiBAcGFyYW0ge251bWJlcn0geWVhcgorICogQHBhcmFtIHtudW1iZXJ9IG1vbnRo
CisgKi8KK2Z1bmN0aW9uIHNob3dNb250aCh5ZWFyLCBtb250aCkgeworICAgIHZhciBkYXlJdGVy
YXRvciA9IG5ldyBEYXRlKERhdGUuVVRDKHllYXIsIG1vbnRoLCAxKSk7CisgICAgZGF5SXRlcmF0
b3Iuc2V0VVRDRnVsbFllYXIoeWVhcik7CisgICAgdmFyIG1vbnRoU3RhcnREYXkgPSBkYXlJdGVy
YXRvci5nZXREYXkoKTsKKyAgICB2YXIgd2Vla1N0YXJ0RGF5ID0gZ2xvYmFsLnBhcmFtcy53ZWVr
U3RhcnREYXkgfHwgMDsKKyAgICB2YXIgc3RhcnRPZmZzZXQgPSB3ZWVrU3RhcnREYXkgLSBtb250
aFN0YXJ0RGF5OworICAgIGlmIChzdGFydE9mZnNldCA+PSAwKSB7CisgICAgICAgIHN0YXJ0T2Zm
c2V0IC09IDc7CisgICAgfQorICAgIGRheUl0ZXJhdG9yLnNldFVUQ0RhdGUoc3RhcnRPZmZzZXQg
KyAxKTsKKyAgICBmb3IgKHZhciB3ID0gMDsgdyA8IFdFRUtTOyB3KyspIHsKKyAgICAgICAgZm9y
ICh2YXIgZCA9IDA7IGQgPCA3OyBkKyspIHsKKyAgICAgICAgICAgIHZhciBlbGVtZW50ID0gZ2xv
YmFsLmRheXNbd11bZF07CisgICAgICAgICAgICBlbGVtZW50LmlubmVyVGV4dCA9IFN0cmluZyhk
YXlJdGVyYXRvci5nZXRVVENEYXRlKCkpOworICAgICAgICAgICAgZWxlbWVudC5jbGFzc05hbWUg
PSBDTEFTUy5EQVk7CisgICAgICAgICAgICBlbGVtZW50LmRhdGFzZXQuc3VibWl0VmFsdWUgPSAn
JzsKKyAgICAgICAgICAgIHZhciB0aW1lID0gZGF5SXRlcmF0b3IuZ2V0VGltZSgpOworICAgICAg
ICAgICAgaWYgKG91dE9mUmFuZ2UodGltZSkpIHsKKyAgICAgICAgICAgICAgICBlbGVtZW50LmNs
YXNzTGlzdC5hZGQoQ0xBU1MuVU5BVkFJTEFCTEUpOworICAgICAgICAgICAgfSBlbHNlIGlmIChk
YXlJdGVyYXRvci5nZXRVVENNb250aCgpIDwgbW9udGggfHwgKG1vbnRoID09IDAgJiYgZGF5SXRl
cmF0b3IuZ2V0VVRDTW9udGgoKSA9PSAxMSkpIHsKKyAgICAgICAgICAgICAgICBlbGVtZW50LmNs
YXNzTGlzdC5hZGQoQ0xBU1MuVU5BVkFJTEFCTEVfVVApOworICAgICAgICAgICAgfSBlbHNlIGlm
IChkYXlJdGVyYXRvci5nZXRVVENNb250aCgpID4gbW9udGggfHwgKG1vbnRoID09IDExICYmIGRh
eUl0ZXJhdG9yLmdldFVUQ01vbnRoKCkgPT0gMCkpIHsKKyAgICAgICAgICAgICAgICBlbGVtZW50
LmNsYXNzTGlzdC5hZGQoQ0xBU1MuVU5BVkFJTEFCTEVfRE9XTik7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKHN0ZXBNaXNtYXRjaCh0aW1lKSkgeworICAgICAgICAgICAgICAgIGVsZW1lbnQuY2xh
c3NMaXN0LmFkZChDTEFTUy5VTkFWQUlMQUJMRSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlz
TmFOKHRpbWUpKSB7CisgICAgICAgICAgICAgICAgZWxlbWVudC5pbm5lclRleHQgPSAnLSc7Cisg
ICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTLlVOQVZBSUxBQkxFKTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3Qu
YWRkKENMQVNTLkFWQUlMQUJMRSk7CisgICAgICAgICAgICAgICAgZWxlbWVudC5kYXRhc2V0LnN1
Ym1pdFZhbHVlID0gY3JlYXRlRGF0ZVN0cmluZyh5ZWFyLCBtb250aCwgZGF5SXRlcmF0b3IuZ2V0
VVRDRGF0ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRheUl0ZXJhdG9yLnNldERh
dGUoZGF5SXRlcmF0b3IuZ2V0VVRDRGF0ZSgpICsgMSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBnbG9iYWwudG9kYXkuZGlzYWJsZWQgPSAhaXNWYWxpZERhdGUoY3JlYXRlRGF0ZUZyb21TdHJp
bmcoKS5nZXRUaW1lKCkpOworCisgICAgdmFyIG1pblllYXIgPSBnbG9iYWwubWluaW11bURhdGUu
Z2V0VVRDRnVsbFllYXIoKTsKKyAgICB2YXIgbWF4WWVhciA9IGdsb2JhbC5tYXhpbXVtRGF0ZS5n
ZXRVVENGdWxsWWVhcigpOworICAgIGlmICh5ZWFyIDwgbWluWWVhciB8fCB5ZWFyID4gbWF4WWVh
cikgeworICAgICAgICBnbG9iYWwubW9udGguZGlzYWJsZWQgPSB0cnVlOworICAgIH0gZWxzZSB7
CisgICAgICAgIGdsb2JhbC5tb250aC5kaXNhYmxlZCA9IGZhbHNlOworICAgICAgICB2YXIgbWlu
TW9udGggPSBnbG9iYWwubWluaW11bURhdGUuZ2V0VVRDTW9udGgoKTsKKyAgICAgICAgdmFyIG1h
eE1vbnRoID0gZ2xvYmFsLm1heGltdW1EYXRlLmdldFVUQ01vbnRoKCk7CisgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgMTI7IGkrKykgeworICAgICAgICAgICAgZ2xvYmFsLm1vbnRoW2ldLmRp
c2FibGVkID0geWVhciA9PSBtaW5ZZWFyICYmIGkgPCBtaW5Nb250aCB8fCB5ZWFyID09IG1heFll
YXIgJiYgaSA+IG1heE1vbnRoOworICAgICAgICB9CisgICAgfQorfQorCisvKioKKyAqIEBwYXJh
bSB7bnVtYmVyfSB5ZWFyCisgKiBAcGFyYW0ge251bWJlcn0gbW9udGgKKyAqLworZnVuY3Rpb24g
c2V0TW9udGgoeWVhciwgbW9udGgpIHsKKyAgICBnbG9iYWwueWVhci52YWx1ZSA9IFN0cmluZyh5
ZWFyKTsKKyAgICBnbG9iYWwubW9udGguc2VsZWN0ZWRJbmRleCA9IG1vbnRoOworICAgIHNob3dN
b250aCh5ZWFyLCBtb250aCk7Cit9CisKK2Z1bmN0aW9uIHNlbGVjdERhdGUoZGF0ZSkgeworICAg
IHNldE1vbnRoKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSwgZGF0ZS5nZXRVVENNb250aCgpKTsKK30K
KworZnVuY3Rpb24gaGFuZGxlWWVhck1vbnRoQ2hhbmdlKCkgeworICAgIGlmIChnbG9iYWwueWVh
ci52YWx1ZS5sZW5ndGggPD0gMCkKKyAgICAgICAgcmV0dXJuOworICAgIHNob3dNb250aChOdW1i
ZXIoZ2xvYmFsLnllYXIudmFsdWUpLCBnbG9iYWwubW9udGguc2VsZWN0ZWRJbmRleCk7Cit9CisK
Ky8qKgorICogQHBhcmFtIHtFdmVudH0gZXZlbnQ7CisgKi8KK2Z1bmN0aW9uIGhhbmRsZURheUNs
aWNrKGV2ZW50KSB7CisgICAgdmFyIHllYXIgPSBOdW1iZXIoZ2xvYmFsLnllYXIudmFsdWUpOwor
ICAgIHZhciBtb250aCA9IGdsb2JhbC5tb250aC5zZWxlY3RlZEluZGV4OworICAgIHZhciBjbGFz
c0xpc3QgPSBldmVudC50YXJnZXQuY2xhc3NMaXN0OworICAgIGlmIChjbGFzc0xpc3QuY29udGFp
bnMoQ0xBU1MuVU5BVkFJTEFCTEVfVVApKSB7CisgICAgICAgIGlmIChtb250aCA9PSAwKSB7Cisg
ICAgICAgICAgICB5ZWFyLS07CisgICAgICAgICAgICBtb250aCA9IDExOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgbW9udGgtLTsKKyAgICAgICAgfQorICAgICAgICBzZXRNb250aCh5
ZWFyLCBtb250aCk7CisgICAgfSBlbHNlIGlmIChjbGFzc0xpc3QuY29udGFpbnMoQ0xBU1MuVU5B
VkFJTEFCTEVfRE9XTikpIHsKKyAgICAgICAgaWYgKG1vbnRoID09IDExKSB7CisgICAgICAgICAg
ICB5ZWFyKys7CisgICAgICAgICAgICBtb250aCA9IDA7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBtb250aCsrOworICAgICAgICB9CisgICAgICAgIHNldE1vbnRoKHllYXIsIG1vbnRo
KTsKKyAgICB9IGVsc2UgaWYgKGNsYXNzTGlzdC5jb250YWlucyhDTEFTUy5BVkFJTEFCTEUpKSB7
CisgICAgICAgIHN1Ym1pdFZhbHVlKGV2ZW50LnRhcmdldC5kYXRhc2V0LnN1Ym1pdFZhbHVlKTsK
KyAgICB9Cit9CisKKy8qKgorICogQHBhcmFtIHtudW1iZXJ9IHllYXIKKyAqIEBwYXJhbSB7bnVt
YmVyfSBtb250aAorICogQHBhcmFtIHtudW1iZXJ9IGRheQorICogQHJldHVybiB7c3RyaW5nfQor
ICovCitmdW5jdGlvbiBjcmVhdGVEYXRlU3RyaW5nKHllYXIsIG1vbnRoLCBkYXkpIHsKKyAgICB2
YXIgeWVhclN0cmluZyA9IFN0cmluZyh5ZWFyKTsKKyAgICBpZiAoeWVhclN0cmluZy5sZW5ndGgg
PCA0KQorICAgICAgICB5ZWFyU3RyaW5nID0gKCcwMDAnICsgeWVhclN0cmluZykuc3Vic3RyKC00
LCA0KTsKKyAgICByZXR1cm4geWVhclN0cmluZyArICctJyArICgnMCcgKyAobW9udGggKyAxKSku
c3Vic3RyKC0yLCAyKSArICctJyArICgnMCcgKyBkYXkpLnN1YnN0cigtMiwgMikKK30KKworZnVu
Y3Rpb24gaGFuZGxlVG9kYXkoKSB7CisgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgpOworICAgIHNl
dE1vbnRoKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpKTsKKyAgICBzdWJtaXRW
YWx1ZShjcmVhdGVEYXRlU3RyaW5nKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgp
LCBkYXRlLmdldERhdGUoKSkpOworfQorCitmdW5jdGlvbiBoYW5kbGVDbGVhcigpIHsKKyAgICBz
dWJtaXRWYWx1ZSgnJyk7Cit9CisKKy8qKgorICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlCisgKi8K
K2Z1bmN0aW9uIHN1Ym1pdFZhbHVlKHZhbHVlKSB7CisgICAgdmFyIGV2ZW50ID0gZG9jdW1lbnQu
Y3JlYXRlRXZlbnQoJ1RleHRFdmVudCcpOworICAgIGV2ZW50LmluaXRUZXh0RXZlbnQoJ3RleHRJ
bnB1dCcsIGZhbHNlLCBmYWxzZSwgd2luZG93LCB2YWx1ZSk7CisgICAgd2luZG93LmZyYW1lRWxl
bWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKK30KKworZnVuY3Rpb24gaGFuZGxlQ2FuY2VsKCkg
eworICAgIHZhciBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpOworICAgIGV2
ZW50LmluaXRFdmVudCgnYWJvcnQnLCBmYWxzZSwgZmFsc2UpOworICAgIHdpbmRvdy5mcmFtZUVs
ZW1lbnQuZGlzcGF0Y2hFdmVudChldmVudCk7Cit9CisKKy8vIC0tLQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvUmVzb3VyY2VzL2NhbGVuZGFyUGlja2VyX3Rlc3QuaHRtbCBiL1NvdXJjZS9X
ZWJDb3JlL1Jlc291cmNlcy9jYWxlbmRhclBpY2tlcl90ZXN0Lmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2U0
ZGI0NGI4MDc3ZTUyNmYxMGRlNmQwY2YxY2MxNTc3ZjRiNDc1NgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9jYWxlbmRhclBpY2tlcl90ZXN0Lmh0bWwKQEAgLTAs
MCArMSw3MCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgY2hhcnNl
dD11dGYtOD4KKzx0aXRsZT5DYWxlbmRhciBQaWNrZXIgdGVzdDwvdGl0bGU+Cis8L2hlYWQ+Cis8
Ym9keT4KKworPGlmcmFtZSBoZWlnaHQ9MjAwPgorPC9pZnJhbWU+CisKKzxvbCBpZD1jb25zb2xl
PgorPC9vbD4KKworPHNjcmlwdD4KK3ZhciBmcmFtZSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlU
YWdOYW1lKCdpZnJhbWUnKVswXTsKK3ZhciBkb2MgPSBmcmFtZS5jb250ZW50RG9jdW1lbnQ7Citk
b2MuZG9jdW1lbnRFbGVtZW50LmlubmVySFRNTCA9ICc8aGVhZD48L2hlYWQ+PGJvZHk+PGRpdiBp
ZD1tYWluPkxvYWRpbmcuLi48L2Rpdj48L2JvZHk+JzsKK3ZhciBsaW5rID0gZG9jLmNyZWF0ZUVs
ZW1lbnQoJ2xpbmsnKTsKK2xpbmsucmVsID0gJ3N0eWxlc2hlZXQnOworbGluay5ocmVmID0gJ2Nh
bGVuZGFyUGlja2VyLmNzcz8nICsgTWF0aC5yYW5kb20oKTsKK2RvYy5oZWFkLmFwcGVuZENoaWxk
KGxpbmspOwordmFyIHNjcmlwdCA9IGRvYy5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKK3Njcmlw
dC5zcmMgPSAnY2FsZW5kYXJQaWNrZXIuanM/JyArIE1hdGgucmFuZG9tKCk7Citkb2MuYm9keS5h
cHBlbmRDaGlsZChzY3JpcHQpOworCit2YXIgYXJnc19lbiA9IHsKKyAgICBtb250aExhYmVscyA6
IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScs
CisgICAgJ0p1bHknLCAnQXVndXN0JywgJ1NlcHRlbWJlcicsICdPY3RvYmVyJywgJ05vdmVtYmVy
JywgJ0RlY2VtYmVyJ10sCisgICAgZGF5TGFiZWxzIDogWydTdW4nLCAnTW9uJywgJ1R1ZScsICdX
ZWQnLCAnVGh1JywgJ0ZyaScsICdTYXQnXSwKKyAgICB0b2RheUxhYmVsIDogJ1RvZGF5JywKKyAg
ICBjbGVhckxhYmVsIDogJ0NsZWFyJywKKyAgICBjYW5jZWxMYWJlbCA6ICdDYW5jZWwnLAorICAg
IHdlZWtTdGFydERheSA6IDAsCisgICAgc3RlcCA6IDIsCisgICAgbWF4IDogJzIwMTEtMDItMDEn
LAorfTsKK3ZhciBhcmdzX2phID0geworICAgIG1vbnRoTGFiZWxzIDogWycx5pyIJywgJzLmnIgn
LCAnM+aciCcsICc05pyIJywgJzXmnIgnLCAnNuaciCcsCisgICAgJzfmnIgnLCAnOOaciCcsICc5
5pyIJywgJzEw5pyIJywgJzEx5pyIJywgJzEy5pyIJ10sCisgICAgZGF5TGFiZWxzIDogWyfml6Un
LCAn5pyIJywgJ+eBqycsICfmsLQnLCAn5pyoJywgJ+mHkScsICflnJ8nXSwKKyAgICB0b2RheUxh
YmVsIDogJ+S7iuaXpScsCisgICAgY2xlYXJMYWJlbCA6ICfjgq/jg6rjgqInLAorICAgIGNhbmNl
bExhYmVsIDogJ+WPluOCiua2iOOBlycsCisgICAgd2Vla1N0YXJ0RGF5IDogMCwKKyAgICBzdGVw
IDogMiwKKyAgICBtYXggOiAnMjAxMS0wMi0wMScsCit9Oworc2V0VGltZW91dChmdW5jdGlvbigp
IHsgZnJhbWUuY29udGVudFdpbmRvdy5wb3N0TWVzc2FnZShKU09OLnN0cmluZ2lmeShhcmdzX2ph
KSwgIioiKTsgfSwgMTAwKTsKKworCitmcmFtZS5hZGRFdmVudExpc3RlbmVyKCd0ZXh0SW5wdXQn
LCBoYW5kbGVUZXh0SW5wdXQpOworZnJhbWUuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBoYW5k
bGVBYm9ydCk7CisKK2Z1bmN0aW9uIGxvZyhzdHIpIHsKKyAgICB2YXIgZSA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2xpJyk7CisgICAgZS5pbm5lclRleHQgPSBzdHI7CisgICAgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5hcHBlbmRDaGlsZChlKTsKK30KKworZnVuY3Rpb24g
aGFuZGxlVGV4dElucHV0KGV2ZW50KSB7CisgICAgbG9nKCd0ZXh0SW5wdXQgZGF0ZT0nICsgZXZl
bnQuZGF0YSk7Cit9CisKK2Z1bmN0aW9uIGhhbmRsZUFib3J0KGV2ZW50KSB7CisgICAgbG9nKCdh
Ym9ydCcpOworfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNWQ2ZTMwNjUwYmRm
Yjk0MmRmOTNmMGNlM2MyOTkwMzYzOGYwZDA0Ni4uMmFkOTFlN2Y5MGZhZjg3NjViNWVkNzFhYmQx
NTYxZWY1MjU1Yzk0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtNTYzMyw2ICs1NjMzLDggQEAKIAkJRjRFQUY0QUYxMEM3NDJC
MTAwOTEwMEQzIC8qIE9wZW5UeXBlU2FuaXRpemVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNEVBRjRBRDEwQzc0MkIxMDA5MTAwRDMgLyogT3BlblR5
cGVTYW5pdGl6ZXIuaCAqLzsgfTsKIAkJRjUxNDJDNjkxMjNGMTJCMDAwRjVCRDRDIC8qIExvY2Fs
aXplZE51bWJlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRjUxNDJDNjgxMjNGMTJCMDAwRjVCRDRDIC8qIExvY2FsaXplZE51bWJlci5oICovOyB9Owog
CQlGNTE0MkM2QjEyM0YxMkM1MDBGNUJENEMgLyogTG9jYWxpemVkTnVtYmVyTm9uZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTE0MkM2QTEyM0Yx
MkM1MDBGNUJENEMgLyogTG9jYWxpemVkTnVtYmVyTm9uZS5jcHAgKi87IH07CisJCUY1MjNDOUE4
MTJGRkI3N0MwMDFFNDUxQiAvKiBDYWxlbmRhclBpY2tlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzQzlBNzEyRkZCNzdDMDAxRTQ1MUIgLyog
Q2FsZW5kYXJQaWNrZXIuY3BwICovOyB9OworCQlGNTIzQzlBQTEyRkZCN0VGMDAxRTQ1MUIgLyog
Q2FsZW5kYXJQaWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEY1MjNDOUE5MTJGRkI3RUYwMDFFNDUxQiAvKiBDYWxlbmRhclBpY2tlci5oICovOyB9
OwogCQlGNTVCM0RBRDEyNTFGMTJEMDAzRUYyNjkgLyogQmFzZVRleHRJbnB1dFR5cGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU1QjNENzkxMjUx
RjEyRDAwM0VGMjY5IC8qIEJhc2VUZXh0SW5wdXRUeXBlLmNwcCAqLzsgfTsKIAkJRjU1QjNEQUUx
MjUxRjEyRDAwM0VGMjY5IC8qIEJhc2VUZXh0SW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTVCM0Q3QTEyNTFGMTJEMDAzRUYyNjkgLyog
QmFzZVRleHRJbnB1dFR5cGUuaCAqLzsgfTsKIAkJRjU1QjNEQUYxMjUxRjEyRDAwM0VGMjY5IC8q
IEJ1dHRvbklucHV0VHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGNTVCM0Q3QjEyNTFGMTJEMDAzRUYyNjkgLyogQnV0dG9uSW5wdXRUeXBlLmNw
cCAqLzsgfTsKQEAgLTExOTk2LDYgKzExOTk4LDggQEAKIAkJRjRFQUY0QUQxMEM3NDJCMTAwOTEw
MEQzIC8qIE9wZW5UeXBlU2FuaXRpemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IE9wZW5UeXBlU2FuaXRpemVyLmg7IHBhdGggPSBvcGVudHlwZS9PcGVuVHlwZVNhbml0aXpl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNTE0MkM2ODEyM0YxMkIwMDBGNUJE
NEMgLyogTG9jYWxpemVkTnVtYmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IExvY2FsaXplZE51bWJlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNTE0MkM2
QTEyM0YxMkM1MDBGNUJENEMgLyogTG9jYWxpemVkTnVtYmVyTm9uZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMb2NhbGl6ZWROdW1iZXJOb25lLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjUyM0M5QTcxMkZGQjc3QzAwMUU0NTFCIC8qIENhbGVu
ZGFyUGlja2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENhbGVu
ZGFyUGlja2VyLmNwcDsgcGF0aCA9IENhbGVuZGFyUGlja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRjUyM0M5QTkxMkZGQjdFRjAwMUU0NTFCIC8qIENhbGVuZGFyUGlja2Vy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENhbGVuZGFyUGlja2VyLmg7IHBh
dGggPSBDYWxlbmRhclBpY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNTIz
RDIzQjAyREU0Mzk2MDE4NjM1Q0EgLyogSFRNTERvY3VtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxEb2N1bWVudC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9Owog
CQlGNTIzRDIzQzAyREU0Mzk2MDE4NjM1Q0EgLyogSFRNTERvY3VtZW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxEb2N1bWVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJ
RjUyM0QyM0UwMkRFNDM5NjAxODYzNUNBIC8qIEhUTUxFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxFbGVtZW50LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07
CkBAIC0xMzcxNSw2ICsxMzcxOSw4IEBACiAJCTY1NjU4MEVDMDlEMTJCMjAwMDBFNjFENyAvKiBE
ZXJpdmVkIFNvdXJjZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KAorCQkJCUY1MjNDOUE3MTJGRkI3N0MwMDFFNDUxQiAvKiBDYWxlbmRhcmlja2VyLmNwcCAqLywK
KwkJCQlGNTIzQzlBOTEyRkZCN0VGMDAxRTQ1MUIgLyogQ2FsZW5kYXJQaWNrZXIuaCAqLywKIAkJ
CQk2NTY1ODFBQzA5RDE0RUU2MDAwRTYxRDcgLyogQ2hhcnNldERhdGEuY3BwICovLAogCQkJCUU0
MDZGM0ZCMTE5ODMwN0QwMDlENTlENiAvKiBDb2xvckRhdGEuY3BwICovLAogCQkJCTY1NjU4MTQ0
MDlEMTMwNDMwMDBFNjFENyAvKiBDU1NHcmFtbWFyLmNwcCAqLywKQEAgLTE5NTY5LDYgKzE5NTc1
LDcgQEAKIAkJCQlCQ0Q1MzM2NDBFRDY4NDg5MDA4ODc0NjggLyogQ2FjaGVkU2NyaXB0U291cmNl
UHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQjE2QzI4MDk3OUMzQkQwMDQ2Nzc0MSAv
KiBDYWNoZWRYU0xTdHlsZVNoZWV0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOTk1MDA4MjQ1
RTU5MDAxRTlBQkMgLyogQ2FjaGVQb2xpY3kuaCBpbiBIZWFkZXJzICovLAorCQkJCUY1MjNDOUFB
MTJGRkI3RUYwMDFFNDUxQiAvKiBDYWxlbmRhclBpY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NkU0RTkxQUQxMEY3RkIzMTAwQTI3NzlDIC8qIENhbnZhc0NvbnRleHRBdHRyaWJ1dGVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk0OTQ4NEZDMjEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFzR3JhZGll
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5NDg0RkM1MTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52
YXNQYXR0ZXJuLmggaW4gSGVhZGVycyAqLywKQEAgLTIyODQzLDYgKzIyODUwLDcgQEAKIAkJCQlE
MEQxNDFCMjEyQjJCRjUyMDBFMzk2MjAgLyogQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUJDQjE2QzIzMDk3OUMzQkQwMDQ2Nzc0MSAvKiBDYWNoZWRTY3JpcHQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNCMTZDMjcwOTc5QzNCRDAwNDY3NzQxIC8qIENhY2hl
ZFhTTFN0eWxlU2hlZXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRjUyM0M5QTgxMkZGQjc3QzAw
MUU0NTFCIC8qIENhbGVuZGFyUGlja2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTZFNEU5MUFD
MTBGN0ZCMzEwMEEyNzc5QyAvKiBDYW52YXNDb250ZXh0QXR0cmlidXRlcy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk0OTQ4NEZDMTEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFzR3JhZGllbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNDk0ODRGQzQxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1Bh
dHRlcm4uY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
aHRtbC5jc3MgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvaHRtbC5jc3MKaW5kZXggMGYxM2ZjYjczOTQ5
NzcyYzcyM2JkYTkwZjg5MDJmOTA1MTZlY2YyMC4uYWU3MWZiYmMyZGVjMGU0ZWM1NWI5YWExN2Ji
Mzg2ZmZjNDA3MWNiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL2h0bWwuY3NzCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9odG1sLmNzcwpAQCAtNjQwLDYgKzY0MCwyNiBAQCBvdXRw
dXQgewogICAgIGxlZnQ6IDJweDsgLyogPG91dGVyLWFycm93IHBvc2l0aW9uPiArIDxtZXNzYWdl
IGJvcmRlciB3aWR0aD4gLSA8Ym9yZGVyIGJveCB3aWR0aCBvZiBvdXRlci1hcnJvdz4gICovCiB9
CiAKKy8qIENhbGVuZGFyIHBpY2tlciAqLworCis6Oi13ZWJraXQtZGlhbG9nLWJhY2tncm91bmQg
eworICAgIHotaW5kZXg6IDIxNDc0ODM2NDY7CisgICAgd2lkdGg6IDEwMCU7CisgICAgaGVpZ2h0
OiAxMDAlOworICAgIHBvc2l0aW9uOiBmaXhlZDsKKyAgICB0b3A6IDA7CisgICAgbGVmdDogMDsK
KyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBibGFjazsKKyAgICBvcGFjaXR5OiAwLjE7Cit9CisKKzo6
LXdlYmtpdC1kaWFsb2ctZnJhbWUgeworICAgIHotaW5kZXg6IDIxNDc0ODM2NDc7CisgICAgcG9z
aXRpb246IGFic29sdXRlOworICAgIGJhY2tncm91bmQtY29sb3I6ICNkZGVlZmY7CisgICAgYm9y
ZGVyOiAwcHg7Cit9CisKIC8qIG1ldGVyICovCiAKIG1ldGVyIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvRGF0ZUlucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0Rh
dGVJbnB1dFR5cGUuY3BwCmluZGV4IDM0MDlkM2I0ZjhlN2FlYjJjNjg4NzlkMDY1MGM4N2Q2M2M5
ODBlZTMuLjg1MTNlNDJhYTNlMWMzMTU4ZDU2YTcxMDk3NjhhMTZhYTg5NTFhZjAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRGF0ZUlucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9EYXRlSW5wdXRUeXBlLmNwcApAQCAtMzEsOSArMzEsMTcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJEYXRlSW5wdXRUeXBlLmgiCiAKKyNpbmNsdWRlICJDYWxl
bmRhclBpY2tlci5oIgorI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkRhdGVDb21w
b25lbnRzLmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJIVE1MSUZyYW1lRWxlbWVu
dC5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMu
aCIKKyNpbmNsdWRlICJIVE1MU2NyaXB0RWxlbWVudC5oIgorI2luY2x1ZGUgIk1vdXNlRXZlbnQu
aCIKKyNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKKyNpbmNsdWRlICJUZXh0RXZl
bnQuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC00Myw2ICs1MSwxMSBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogc3RhdGljIGNv
bnN0IGRvdWJsZSBkYXRlRGVmYXVsdFN0ZXAgPSAxLjA7CiBzdGF0aWMgY29uc3QgZG91YmxlIGRh
dGVTdGVwU2NhbGVGYWN0b3IgPSA4NjQwMDAwMC4wOwogCitEYXRlSW5wdXRUeXBlOjpEYXRlSW5w
dXRUeXBlKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpCisgICAgOiBCYXNlRGF0ZUFuZFRpbWVJ
bnB1dFR5cGUoZWxlbWVudCkKK3sKK30KKwogUGFzc093blB0cjxJbnB1dFR5cGU+IERhdGVJbnB1
dFR5cGU6OmNyZWF0ZShIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KQogewogICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgRGF0ZUlucHV0VHlwZShlbGVtZW50KSk7CkBAIC05MSw0ICsxMDQsMTcwIEBA
IGJvb2wgRGF0ZUlucHV0VHlwZTo6c2V0TWlsbGlzZWNvbmRUb0RhdGVDb21wb25lbnRzKGRvdWJs
ZSB2YWx1ZSwgRGF0ZUNvbXBvbmVudHMqCiAgICAgcmV0dXJuIGRhdGUtPnNldE1pbGxpc2Vjb25k
c1NpbmNlRXBvY2hGb3JEYXRlKHZhbHVlKTsKIH0KIAorLy8gRklYTUU6IHNob3VsZCBiZSBtb3Zl
ZCB0byBXZWJDb3JlL2h0bWwvc2hhZG93LworY2xhc3MgRGlhbG9nQmFja2dyb3VuZEVsZW1lbnQg
OiBwdWJsaWMgSFRNTEVsZW1lbnQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhU
TUxFbGVtZW50PiBjcmVhdGUoRGF0ZUlucHV0VHlwZSogaW5wdXRUeXBlLCBEb2N1bWVudCogZG9j
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEaWFsb2dCYWNrZ3JvdW5kRWxl
bWVudChpbnB1dFR5cGUsIGRvYykpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBEaWFsb2dCYWNr
Z3JvdW5kRWxlbWVudChEYXRlSW5wdXRUeXBlKiBpbnB1dFR5cGUsIERvY3VtZW50KiBkb2MpCisg
ICAgICAgIDogSFRNTEVsZW1lbnQoZGl2VGFnLCBkb2MpCisgICAgICAgICwgbV9pbnB1dFR5cGUo
aW5wdXRUeXBlKSB7IH0KKworICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQ
c2V1ZG9JZCgpIGNvbnN0CisgICAgeworICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0
IEF0b21pY1N0cmluZywgcHNldWRvSWQsICgiLXdlYmtpdC1kaWFsb2ctYmFja2dyb3VuZCIpKTsK
KyAgICAgICAgcmV0dXJuIHBzZXVkb0lkOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkZWZh
dWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKKyAgICB7CisgICAgICAgIGlmIChldmVudC0+
aXNNb3VzZUV2ZW50KCkpIHsKKyAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgp
OworICAgICAgICAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZl
bnQpCisgICAgICAgICAgICAgICAgbV9pbnB1dFR5cGUtPmNsb3NlRGlhbG9nKCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgSFRNTEVsZW1lbnQ6OmRlZmF1bHRFdmVu
dEhhbmRsZXIoZXZlbnQpOworICAgIH0KKworICAgIERhdGVJbnB1dFR5cGUqIG1faW5wdXRUeXBl
OworfTsKKworLy8gRklYTUU6IHNob3VsZCBiZSBtb3ZlZCB0byBXZWJDb3JlL2h0bWwvc2hhZG93
LworY2xhc3MgSUZyYW1lV2l0aFBzZXVkb0lkIDogcHVibGljIEhUTUxJRnJhbWVFbGVtZW50IHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJRnJhbWVXaXRoUHNldWRvSWQ+IGNyZWF0
ZShEYXRlSW5wdXRUeXBlKiBpbnB1dFR5cGUsIERvY3VtZW50KiBkb2N1bWVudCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSUZyYW1lV2l0aFBzZXVkb0lkKGlucHV0VHlwZSwg
ZG9jdW1lbnQpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSUZyYW1lV2l0aFBzZXVkb0lkKERh
dGVJbnB1dFR5cGUqIGlucHV0VHlwZSwgRG9jdW1lbnQqIGRvY3VtZW50KQorICAgICAgICA6IEhU
TUxJRnJhbWVFbGVtZW50KGlmcmFtZVRhZywgZG9jdW1lbnQpCisgICAgICAgICwgbV9pbnB1dFR5
cGUoaW5wdXRUeXBlKSB7IH07CisKKyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgc2hh
ZG93UHNldWRvSWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChj
b25zdCBBdG9taWNTdHJpbmcsIHBzZXVkb0lkLCAoIi13ZWJraXQtZGlhbG9nLWZyYW1lIikpOwor
ICAgICAgICByZXR1cm4gcHNldWRvSWQ7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRlZmF1
bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQorICAgIHsKKyAgICAgICAgaWYgKGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLnRleHRJbnB1dEV2ZW50KSB7CisgICAgICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgInRleHRJbnB1dFxuIik7CisgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVs
dEhhbmRsZWQoKTsKKyAgICAgICAgICAgIG1faW5wdXRUeXBlLT5jbG9zZURpYWxvZ0FuZFNldFZh
bHVlKHN0YXRpY19jYXN0PFRleHRFdmVudCo+KGV2ZW50KS0+ZGF0YSgpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5h
bWVzKCkuYWJvcnRFdmVudCkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJjYW5jZWxc
biIpOworICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgICAg
ICBtX2lucHV0VHlwZS0+Y2xvc2VEaWFsb2coKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBIVE1MSUZyYW1lRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVu
dCk7CisgICAgfQorCisgICAgRGF0ZUlucHV0VHlwZSogbV9pbnB1dFR5cGU7Cit9OworCitzdGF0
aWMgdm9pZCBidWlsZFBpY2tlckRvY3VtZW50KEhUTUxJRnJhbWVFbGVtZW50KiBmcmFtZSkKK3sK
KyAgICBEb2N1bWVudCogZGlhbG9nRG9jdW1lbnQgPSBmcmFtZS0+Y29udGVudERvY3VtZW50KCk7
CisgICAgZnByaW50ZihzdGRlcnIsICIlcyBkaWFsb2dEb2M9JXBcbiIsIF9fZnVuY19fLCBkaWFs
b2dEb2N1bWVudCk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgU3RyaW5nIHN0eWxl
KGNhbGVuZGFyUGlja2VyQ3NzLCBzaXplb2YoY2FsZW5kYXJQaWNrZXJDc3MpKTsKKyAgICBzdGF0
aWNfY2FzdDxIVE1MRWxlbWVudCo+KGRpYWxvZ0RvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKSkt
PnNldElubmVySFRNTCgiPGhlYWQ+PHN0eWxlPiIgKyBzdHlsZSArICI8L3N0eWxlPjwvaGVhZD48
Ym9keT48ZGl2IGlkPW1haW4+TG9hZGluZy4uLjwvZGl2PjwvYm9keT4iLCBlYyk7CisgICAgUmVm
UHRyPEhUTUxTY3JpcHRFbGVtZW50PiBzY3JpcHQgPSBIVE1MU2NyaXB0RWxlbWVudDo6Y3JlYXRl
KHNjcmlwdFRhZywgZGlhbG9nRG9jdW1lbnQsIGZhbHNlKTsKKyAgICBTdHJpbmcgc2NyaXB0U291
cmNlKGNhbGVuZGFyUGlja2VySnMsIHNpemVvZihjYWxlbmRhclBpY2tlckpzKSk7CisgICAgc2Ny
aXB0LT5zZXRUZXh0KHNjcmlwdFNvdXJjZSk7CisgICAgZGlhbG9nRG9jdW1lbnQtPmJvZHkoKS0+
YXBwZW5kQ2hpbGQoc2NyaXB0LnJlbGVhc2UoKSwgZWMpOworfQorCitzdGF0aWMgdm9pZCBzZW5k
TWVzc2FnZShIVE1MSUZyYW1lRWxlbWVudCogZnJhbWUsIERPTVdpbmRvdyogd2luZG93LCBIVE1M
SW5wdXRFbGVtZW50KiBlbGVtZW50KQoreworICAgIERhdGVDb21wb25lbnRzIGRhdGU7CisgICAg
ZGF0ZS5zZXRNaWxsaXNlY29uZHNTaW5jZUVwb2NoRm9yRGF0ZShlbGVtZW50LT5taW5pbXVtKCkp
OworICAgIFN0cmluZyBtaW5TdHJpbmcgPSBkYXRlLnRvU3RyaW5nKCk7CisgICAgZGF0ZS5zZXRN
aWxsaXNlY29uZHNTaW5jZUVwb2NoRm9yRGF0ZShlbGVtZW50LT5tYXhpbXVtKCkpOworICAgIFN0
cmluZyBtYXhTdHJpbmcgPSBkYXRlLnRvU3RyaW5nKCk7CisgICAgZG91YmxlIHN0ZXA7CisgICAg
U3RyaW5nIHN0ZXBTdHJpbmcgPSBlbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKHN0ZXBBdHRyKTsK
KyAgICBpZiAoc3RlcFN0cmluZy5pc0VtcHR5KCkgfHwgIWVsZW1lbnQtPmdldEFsbG93ZWRWYWx1
ZVN0ZXAoJnN0ZXApKQorICAgICAgICBzdGVwU3RyaW5nID0gIjEiOworCisgICAgLy8gRklYTUU6
IEJ1aWxkIHdpdGggbG9jYWxpemVkIGxhYmVscy4KKyAgICBTdHJpbmcgbWVzc2FnZSA9IFN0cmlu
Zzo6Zm9ybWF0KAorICAgICAgICAie1wibW9udGhMYWJlbHNcIjpbXCJKYW51YXJ5XCIsIFwiRmVi
cnVhcnlcIiwgXCJNYXJjaFwiLCBcIkFwcmlsXCIsIFwiTWF5XCIsIFwiSnVuZVwiLCAiCisgICAg
ICAgICJcIkp1bHlcIiwgXCJBdWd1c3RcIiwgXCJTZXB0ZW1iZXJcIiwgXCJPY3RvYmVyXCIsIFwi
Tm92ZW1iZXJcIiwgXCJEZWNlbWJlclwiXSwiCisgICAgICAgICJcImRheUxhYmVsc1wiOltcIk1v
blwiLCBcIlR1ZVwiLCBcIldlZFwiLCBcIlRodVwiLCBcIkZyaVwiLCBcIlNhdFwiLCBcIlN1blwi
XSwiCisgICAgICAgICJcImNhbmNlbExhYmVsXCI6XCJDYW5jZWxcIiwiCisgICAgICAgICJcImNs
ZWFyTGFiZWxcIjpcIkNsZWFyXCIsIgorICAgICAgICAiXCJ0b2RheUxhYmVsXCI6XCJUb2RheVwi
LCIKKyAgICAgICAgIlwicmVxdWlyZWRcIjolcywiCisgICAgICAgICJcIm1pblwiOlwiJXNcIiwi
CisgICAgICAgICJcIm1heFwiOlwiJXNcIiwiCisgICAgICAgICJcInN0ZXBcIjpcIiVzXCIsIgor
ICAgICAgICAiXCJjdXJyZW50VmFsdWVcIjpcIiVzXCIiCisgICAgICAgICJ9IiwKKyAgICAgICAg
ZWxlbWVudC0+cmVxdWlyZWQoKSA/ICJ0cnVlIiA6ICJmYWxzZSIsCisgICAgICAgIG1pblN0cmlu
Zy51dGY4KCkuZGF0YSgpLAorICAgICAgICBtYXhTdHJpbmcudXRmOCgpLmRhdGEoKSwKKyAgICAg
ICAgc3RlcFN0cmluZy51dGY4KCkuZGF0YSgpLAorICAgICAgICBlbGVtZW50LT52YWx1ZSgpLnV0
ZjgoKS5kYXRhKCkpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGZyYW1lLT5jb250
ZW50V2luZG93KCktPnBvc3RNZXNzYWdlKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKG1l
c3NhZ2UpLCBzdGF0aWNfY2FzdDxNZXNzYWdlUG9ydCo+KDApLCAiKiIsIHdpbmRvdywgZWMpOwor
fQorCit2b2lkIERhdGVJbnB1dFR5cGU6OmhhbmRsZU1vdXNlRG93bkV2ZW50KE1vdXNlRXZlbnQq
IGV2ZW50KQoreworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYWRkIGEgYnV0dG9uIHRvIG9wZW4g
YSBjYWxlbmRlciBwaWNrZXIuCisgICAgLy8gWWF5ISBNYWtpbmcgUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lIG1vcmUgY29tcGxleCEhIQorCisgICAgQVNTRVJUKCFtX3BpY2tlckZyYW1lKTsK
KyAgICAvLyBTaG91bGQgYmUgbW92ZWQgdG8gYSByZW5kZXJlcj8KKyAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICBEb2N1bWVudCogZG9jID0gZWxlbWVudCgpLT5kb2N1bWVudCgpOworICAg
IGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworCisgICAgTm9kZSogc2hhZG93Um9vdCA9IGVs
ZW1lbnQoKS0+c2hhZG93Um9vdCgpOworICAgIEFTU0VSVChzaGFkb3dSb290KTsKKyAgICBtX2Rp
YWxvZ0JhY2tncm91bmQgPSBEaWFsb2dCYWNrZ3JvdW5kRWxlbWVudDo6Y3JlYXRlKHRoaXMsIGRv
Yyk7CisgICAgc2hhZG93Um9vdC0+YXBwZW5kQ2hpbGQobV9kaWFsb2dCYWNrZ3JvdW5kLmdldCgp
LCBlYyk7CisgICAgbV9waWNrZXJGcmFtZSA9IElGcmFtZVdpdGhQc2V1ZG9JZDo6Y3JlYXRlKHRo
aXMsIGRvYyk7CisgICAgbV9waWNrZXJGcmFtZS0+c2V0QXR0cmlidXRlKGhlaWdodEF0dHIsICIy
MDAiKTsKKyAgICBzaGFkb3dSb290LT5hcHBlbmRDaGlsZChtX3BpY2tlckZyYW1lLmdldCgpLCBl
Yyk7CisgICAgLy8gRklYTUU6IEFkanVzdCB0aGUgaWZyYW1lIHBvc2l0aW9uLgorCisgICAgYnVp
bGRQaWNrZXJEb2N1bWVudChtX3BpY2tlckZyYW1lLmdldCgpKTsKKyAgICBzZW5kTWVzc2FnZSht
X3BpY2tlckZyYW1lLmdldCgpLCBkb2MtPmRvbVdpbmRvdygpLCBlbGVtZW50KCkpOworfQorCit2
b2lkIERhdGVJbnB1dFR5cGU6OmNyZWF0ZVNoYWRvd1N1YnRyZWUoKQoreworICAgIG1fcm9vdCA9
IEhUTUxFbGVtZW50OjpjcmVhdGUoc3BhblRhZywgZWxlbWVudCgpLT5kb2N1bWVudCgpKTsKKyAg
ICBlbGVtZW50KCktPnNldFNoYWRvd1Jvb3QobV9yb290KTsKK30KKwordm9pZCBEYXRlSW5wdXRU
eXBlOjpjbG9zZURpYWxvZygpCit7CisgICAgQVNTRVJUKG1fcGlja2VyRnJhbWUpOworICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGVsZW1lbnQoKS0+c2hhZG93Um9vdCgpLT5yZW1vdmVD
aGlsZChtX2RpYWxvZ0JhY2tncm91bmQuZ2V0KCksIGVjKTsKKyAgICBlbGVtZW50KCktPnNoYWRv
d1Jvb3QoKS0+cmVtb3ZlQ2hpbGQobV9waWNrZXJGcmFtZS5nZXQoKSwgZWMpOworICAgIG1fZGlh
bG9nQmFja2dyb3VuZCA9IDA7CisgICAgbV9waWNrZXJGcmFtZSA9IDA7Cit9CisKK3ZvaWQgRGF0
ZUlucHV0VHlwZTo6Y2xvc2VEaWFsb2dBbmRTZXRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQor
eworICAgIGNsb3NlRGlhbG9nKCk7CisgICAgZWxlbWVudCgpLT5zZXRWYWx1ZUZvclVzZXIodmFs
dWUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0RhdGVJbnB1dFR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRGF0ZUlucHV0
VHlwZS5oCmluZGV4IDk2NWQ5ZWFiYTE0N2FjNTIxYmYxZjU3ZWJmNjI0NWU3NmYxODcwM2QuLjAw
ZDNlODk0YWZjM2Y5NDc5ODIzZjYyYjQ1OThiYTljYTRlMjJiMjYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvRGF0ZUlucHV0VHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
RGF0ZUlucHV0VHlwZS5oCkBAIC0zNSwxMiArMzUsMTcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCitjbGFzcyBIVE1MRWxlbWVudDsKK2NsYXNzIEhUTUxJRnJhbWVFbGVtZW50OworCiBjbGFz
cyBEYXRlSW5wdXRUeXBlIDogcHVibGljIEJhc2VEYXRlQW5kVGltZUlucHV0VHlwZSB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8SW5wdXRUeXBlPiBjcmVhdGUoSFRNTElucHV0RWxl
bWVudCopOworICAgIHZvaWQgY2xvc2VEaWFsb2coKTsKKyAgICB2b2lkIGNsb3NlRGlhbG9nQW5k
U2V0VmFsdWUoY29uc3QgU3RyaW5nJik7CiAKIHByaXZhdGU6Ci0gICAgRGF0ZUlucHV0VHlwZShI
VE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KSA6IEJhc2VEYXRlQW5kVGltZUlucHV0VHlwZShlbGVt
ZW50KSB7IH0KKyAgICBEYXRlSW5wdXRUeXBlKEhUTUxJbnB1dEVsZW1lbnQqKTsKICAgICB2aXJ0
dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xUeXBlKCkgY29uc3Q7CiAgICAgdmly
dHVhbCBkb3VibGUgbWluaW11bSgpIGNvbnN0OwogICAgIHZpcnR1YWwgZG91YmxlIG1heGltdW0o
KSBjb25zdDsKQEAgLTQ5LDYgKzU0LDEyIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIHBh
cnNlZFN0ZXBWYWx1ZVNob3VsZEJlSW50ZWdlcigpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBw
YXJzZVRvRGF0ZUNvbXBvbmVudHNJbnRlcm5hbChjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0
aCwgRGF0ZUNvbXBvbmVudHMqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc2V0TWlsbGlzZWNv
bmRUb0RhdGVDb21wb25lbnRzKGRvdWJsZSwgRGF0ZUNvbXBvbmVudHMqKSBjb25zdDsKKyAgICB2
aXJ0dWFsIHZvaWQgaGFuZGxlTW91c2VEb3duRXZlbnQoTW91c2VFdmVudCopOworICAgIHZpcnR1
YWwgdm9pZCBjcmVhdGVTaGFkb3dTdWJ0cmVlKCk7CisKKyAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+
IG1fcm9vdDsKKyAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IG1fZGlhbG9nQmFja2dyb3VuZDsKKyAg
ICBSZWZQdHI8SFRNTElGcmFtZUVsZW1lbnQ+IG1fcGlja2VyRnJhbWU7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJRnJh
bWVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElGcmFtZUVsZW1lbnQuY3Bw
CmluZGV4IDA2YWYwOTM2Yjc4ZGNiOTlmNzI5N2I1MTNkZDE3ODA2M2IzZTUzMzMuLmZkOTQ4Njc5
ZmU2YmQwZGRhMjIyOTE1NmNmOGVmMmNjOTI0NzIwY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTElGcmFtZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTElGcmFtZUVsZW1lbnQuY3BwCkBAIC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotaW5saW5lIEhUTUxJRnJhbWVFbGVt
ZW50OjpIVE1MSUZyYW1lRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1
bWVudCogZG9jdW1lbnQpCitIVE1MSUZyYW1lRWxlbWVudDo6SFRNTElGcmFtZUVsZW1lbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQogICAgIDogSFRN
TEZyYW1lRWxlbWVudEJhc2UodGFnTmFtZSwgZG9jdW1lbnQpCiB7CiAgICAgQVNTRVJUKGhhc1Rh
Z05hbWUoaWZyYW1lVGFnKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJ
RnJhbWVFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJRnJhbWVFbGVtZW50LmgK
aW5kZXggNjFjZDZiNjhlZDY0OGEzMjI1OWVmNDU3YmVlNDg4MDU3MzBmMzcyNi4uMTBiNTE4ZjVl
ZjVkMTA5NDc2NTIwMmNhYTlkYzgyODhmYTI1MWEzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MSUZyYW1lRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TElGcmFtZUVsZW1lbnQuaApAQCAtMzIsOSArMzIsMTAgQEAgY2xhc3MgSFRNTElGcmFtZUVsZW1l
bnQgOiBwdWJsaWMgSFRNTEZyYW1lRWxlbWVudEJhc2UgewogcHVibGljOgogICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEhUTUxJRnJhbWVFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYs
IERvY3VtZW50Kik7CiAKLXByaXZhdGU6Citwcm90ZWN0ZWQ6CiAgICAgSFRNTElGcmFtZUVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKK3ByaXZhdGU6CiAgICAgdmly
dHVhbCBib29sIG1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYsIE1hcHBlZEF0dHJpYnV0
ZUVudHJ5JikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0
dHJpYnV0ZSopOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9tYWtlLWZpbGUtYXJyYXlz
LnB5IGIvU291cmNlL1dlYkNvcmUvbWFrZS1maWxlLWFycmF5cy5weQpuZXcgZmlsZSBtb2RlIDEw
MDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZmE2
NjliZjIwYWQxMTdjZjQzNDkwMDVhZjk4NmU5ZGJhMTA5MGU3Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvbWFrZS1maWxlLWFycmF5cy5weQpAQCAtMCwwICsxLDc3IEBACisjIS91
c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoK
KyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjIFVzYWdlOiBtYWtlLWZpbGUt
YXJyYXlzLnB5IDxoZWFkZXItZmlsZS1uYW1lPiA8Y3BwLWZpbGUtbmFtZT4gPGlucHV0LWZpbGU+
Li4uCisKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgcmUKK2ltcG9ydCBzeXMKKworCitkZWYgbWFr
ZV92YXJpYWJsZV9uYW1lX2FuZF9yZWFkKGZpbGVfbmFtZSwgb3Blbl9mbGFnKToKKyAgICByZXN1
bHQgPSByZS5tYXRjaChyIihcdyspXC4oXHcrKSIsIG9zLnBhdGguYmFzZW5hbWUoZmlsZV9uYW1l
KSkKKyAgICBpZiBub3QgcmVzdWx0OgorICAgICAgICBwcmludCAiSW52YWxpZCBpbnB1dCBmaWxl
IG5hbWU6Iiwgb3MucGF0aC5iYXNlbmFtZShmaWxlX25hbWUpCisgICAgICAgIHN5cy5leGl0KDEp
CisgICAgcHJpbnQgIlByb2Nlc3NpbmciLCBmaWxlX25hbWUKKyAgICB2YXJpYWJsZV9uYW1lID0g
cmVzdWx0Lmdyb3VwKDEpWzBdLmxvd2VyKCkgKyByZXN1bHQuZ3JvdXAoMSlbMTpdICsgcmVzdWx0
Lmdyb3VwKDIpLmNhcGl0YWxpemUoKQorICAgIGZpbGUgPSBvcGVuKGZpbGVfbmFtZSwgb3Blbl9m
bGFnKQorICAgIGNvbnRlbnQgPSBmaWxlLnJlYWQoKQorICAgIGZpbGUuY2xvc2UoKQorICAgIHJl
dHVybiAodmFyaWFibGVfbmFtZSwgY29udGVudCkKKworCitkZWYgbWFpbigpOgorICAgIGlmIGxl
bihzeXMuYXJndikgPCA0OgorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgaGVhZGVyX2ZpbGUg
PSBvcGVuKHN5cy5hcmd2WzFdLCAidyIpCisgICAgY3BwX2ZpbGUgPSBvcGVuKHN5cy5hcmd2WzJd
LCAidyIpCisgICAgaGVhZGVyX2ZpbGUud3JpdGUoIm5hbWVzcGFjZSBXZWJDb3JlIHtcbiIpCisg
ICAgY3BwX2ZpbGUud3JpdGUoIm5hbWVzcGFjZSBXZWJDb3JlIHtcbiIpCisKKyAgICBmb3IgbmFt
ZSBpbiBzeXMuYXJndlszOl06CisgICAgICAgICh2YXJpYWJsZV9uYW1lLCBjb250ZW50KSA9IG1h
a2VfdmFyaWFibGVfbmFtZV9hbmRfcmVhZChuYW1lLCAicmIiKQorICAgICAgICBzaXplID0gbGVu
KGNvbnRlbnQpCisgICAgICAgIGhlYWRlcl9maWxlLndyaXRlKCJleHRlcm4gY29uc3QgY2hhciAl
c1slZF07XG4iICUgKHZhcmlhYmxlX25hbWUsIHNpemUpKQorICAgICAgICBjcHBfZmlsZS53cml0
ZSgiZXh0ZXJuIGNvbnN0IGNoYXIgJXNbJWRdID0ge1xuIiAlICh2YXJpYWJsZV9uYW1lLCBzaXpl
KSkKKyAgICAgICAgZm9yIGluZGV4IGluIHJhbmdlKHNpemUpOgorICAgICAgICAgICAgY3BwX2Zp
bGUud3JpdGUoIiVkIiAlIG9yZChjb250ZW50W2luZGV4XSkpCisgICAgICAgICAgICBjcHBfZmls
ZS53cml0ZSgiLCIgaWYgaW5kZXggIT0gbGVuKGNvbnRlbnQpIC0gMSBlbHNlICJ9O1xuIikKKyAg
ICAgICAgICAgIGlmIGluZGV4ICUgMjAgPT0gMTk6CisgICAgICAgICAgICAgICAgY3BwX2ZpbGUu
d3JpdGUoIlxuIikKKyAgICAgICAgY3BwX2ZpbGUud3JpdGUoIlxuIikKKworICAgIGhlYWRlcl9m
aWxlLndyaXRlKCJ9XG4iKQorICAgIGNwcF9maWxlLndyaXRlKCJ9XG4iKQorICAgIGhlYWRlcl9m
aWxlLmNsb3NlKCkKKyAgICBjcHBfZmlsZS5jbG9zZSgpCisKK2lmIF9fbmFtZV9fID09ICJfX21h
aW5fXyI6CisgICAgbWFpbigpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83281</attachid>
            <date>2011-02-22 00:41:31 -0800</date>
            <delta_ts>2011-03-04 01:01:29 -0800</delta_ts>
            <desc>WIP patch 4</desc>
            <filename>bug-53961-20110222174129.patch</filename>
            <type>text/plain</type>
            <size>51011</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzkxOTQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3MjIwNTM0MDNmOGQ2MzI1
MGYxNTZlNGMzYzExYTNhOTE3ZWFjMTc5Li44ZDkzZjBhNzY3NTNmNWNiZDNkYmNhOGVlOGIzZjhl
ZDY4N2VhYmE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODkgQEAKKzIwMTEtMDItMjIgIEtlbnQg
VGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBhIGNhbGVuZGFyIHBpY2tlcgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTM5NjEKKworICAgICAg
ICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6
CisgICAgICAgICogUmVzb3VyY2VzL2NhbGVuZGFyUGlja2VyLmNzczogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUvaHRtbC9EYXRlSW5wdXRUeXBlLmguCisgICAgICAgIChib2R5KToKKyAgICAg
ICAgKCNtYWluKToKKyAgICAgICAgKC55ZWFyLXNlbGVjdG9yKToKKyAgICAgICAgKC5tb250aC1z
ZWxlY3Rvcik6CisgICAgICAgICguZGF5cy1hcmVhLWNvbnRhaW5lcik6CisgICAgICAgICguZGF5
cy1hcmVhKToKKyAgICAgICAgKC5kYXktbGFiZWwtY29udGFpbmVyKToKKyAgICAgICAgKC5kYXkt
bGFiZWwpOgorICAgICAgICAoLndlZWstY29udGFpbmVyKToKKyAgICAgICAgKC5kYXkpOgorICAg
ICAgICAoLmF2YWlsYWJsZSk6CisgICAgICAgICguYXZhaWxhYmxlLmRheS1zZWxlY3RlZCk6Cisg
ICAgICAgICgudW5hdmFpbGFibGUpOgorICAgICAgICAoLnVuYXZhaWxhYmxlLXVwKToKKyAgICAg
ICAgKC51bmF2YWlsYWJsZS1kb3duKToKKyAgICAgICAgKC51bmF2YWlsYWJsZS5kYXktc2VsZWN0
ZWQpOgorICAgICAgICAoLnRvZGF5LWJ1dHRvbik6CisgICAgICAgICguY2xlYXItYnV0dG9uKToK
KyAgICAgICAgKC5jYW5jZWwtYnV0dG9uKToKKyAgICAgICAgKiBSZXNvdXJjZXMvY2FsZW5kYXJQ
aWNrZXIuanM6IEFkZGVkLgorICAgICAgICAoaGFuZGxlTWVzc2FnZSk6CisgICAgICAgIChoYW5k
bGVBcmd1bWVudHNUaW1lb3V0KToKKyAgICAgICAgKGNyZWF0ZUVsZW1lbnQpOgorICAgICAgICAo
Z2V0QXJndW1lbnRFcnJvcik6CisgICAgICAgIChjcmVhdGVEYXRlRnJvbVN0cmluZyk6CisgICAg
ICAgIChpbml0aWFsaXplKToKKyAgICAgICAgKCk6CisgICAgICAgIChsYXlvdXQpOgorICAgICAg
ICAoc3RlcE1pc21hdGNoKToKKyAgICAgICAgKG91dE9mUmFuZ2UpOgorICAgICAgICAoaXNWYWxp
ZERhdGUpOgorICAgICAgICAocmVuZGVyTW9udGgpOgorICAgICAgICAobmF2aWdhdGVUb01vbnRo
KToKKyAgICAgICAgKG5hdmlnYXRlVG9Nb250aFdpdGhBbmltYXRpb24pOgorICAgICAgICAobW92
ZUluRGF5cyk6CisgICAgICAgIChoYW5kbGVZZWFyTW9udGhDaGFuZ2UpOgorICAgICAgICAobWF5
YmVTZXRQcmV2aW91c01vbnRoKToKKyAgICAgICAgKG1heWJlU2V0TmV4dE1vbnRoKToKKyAgICAg
ICAgKGhhbmRsZURheUNsaWNrKToKKyAgICAgICAgKGhhbmRsZU1vdXNlT3Zlcik6CisgICAgICAg
IChoYW5kbGVEYXlzQXJlYUtleSk6CisgICAgICAgICh1cGRhdGVTZWxlY3Rpb24pOgorICAgICAg
ICAoY3JlYXRlRGF0ZVN0cmluZyk6CisgICAgICAgIChoYW5kbGVUb2RheSk6CisgICAgICAgICho
YW5kbGVDbGVhcik6CisgICAgICAgIChzdWJtaXRWYWx1ZSk6CisgICAgICAgIChoYW5kbGVDYW5j
ZWwpOgorICAgICAgICAoaGFuZGxlR2xvYmFsS2V5KToKKyAgICAgICAgKiBSZXNvdXJjZXMvY2Fs
ZW5kYXJQaWNrZXJfdGVzdC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogY3NzL2h0bWwuY3NzOgorICAgICAgICAoOjot
d2Via2l0LWRpYWxvZy1iYWNrZ3JvdW5kKToKKyAgICAgICAgKDo6LXdlYmtpdC1kaWFsb2ctZnJh
bWUpOgorICAgICAgICAqIGh0bWwvRGF0ZUlucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRlSW5wdXRUeXBlOjpEYXRlSW5wdXRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpYWxv
Z0JhY2tncm91bmRFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlhbG9nQmFj
a2dyb3VuZEVsZW1lbnQ6OkRpYWxvZ0JhY2tncm91bmRFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpYWxvZ0JhY2tncm91bmRFbGVtZW50OjpzaGFkb3dQc2V1ZG9JZCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaWFsb2dCYWNrZ3JvdW5kRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJRnJhbWVXaXRoUHNldWRvSWQ6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJRnJhbWVXaXRoUHNldWRvSWQ6OklGcmFtZVdpdGhQc2V1ZG9JZCk6CisgICAgICAg
IChXZWJDb3JlOjpJRnJhbWVXaXRoUHNldWRvSWQ6OnNoYWRvd1BzZXVkb0lkKToKKyAgICAgICAg
KFdlYkNvcmU6OklGcmFtZVdpdGhQc2V1ZG9JZDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAg
ICAgIChXZWJDb3JlOjpidWlsZFBpY2tlckRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnNl
bmRNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVJbnB1dFR5cGU6OmhhbmRsZU1vdXNl
RG93bkV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVJbnB1dFR5cGU6OmNyZWF0ZVNoYWRv
d1N1YnRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZUlucHV0VHlwZTo6Y2xvc2VEaWFsb2cp
OgorICAgICAgICAoV2ViQ29yZTo6RGF0ZUlucHV0VHlwZTo6Y2xvc2VEaWFsb2dBbmRTZXRWYWx1
ZSk6CisgICAgICAgICogaHRtbC9EYXRlSW5wdXRUeXBlLmg6CisgICAgICAgICogaHRtbC9IVE1M
SUZyYW1lRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSUZyYW1lRWxlbWVudDo6
SFRNTElGcmFtZUVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRNTElGcmFtZUVsZW1lbnQuaDoK
KyAgICAgICAgKiBtYWtlLWZpbGUtYXJyYXlzLnB5OiBBZGRlZC4KKwogMjAxMS0wMi0yMCAgR2F2
aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgQnVpbGQg
Zml4IChyZW1vdmUgaW5jbHVkZXMpLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvRGVyaXZl
ZFNvdXJjZXMubWFrZSBiL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXgg
ODE1ZDI0MTEzMTMzODAyZDM5Y2VlNDg1ODNhYzQyNjc1ZGUwYjcwMi4uOTAzMjgwYmM1MWZkOWI0
ODQwMzdlNDc5MDMwYjViMDRjM2VmNDhkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvRGVy
aXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtl
CkBAIC01NDgsNiArNTQ4LDcgQEAgYWxsIDogXAogICAgIFwKICAgICBKU0phdmFTY3JpcHRDYWxs
RnJhbWUuaCBcCiAgICAgXAorICAgIENhbGVuZGFyUGlja2VyLmggXAogICAgIENTU0dyYW1tYXIu
Y3BwIFwKICAgICBDU1NQcm9wZXJ0eU5hbWVzLmggXAogICAgIENTU1ZhbHVlS2V5d29yZHMuaCBc
CkBAIC03NjksNiArNzcwLDE2IEBAIFhNTE5hbWVzLmNwcCA6IGRvbS9tYWtlX25hbWVzLnBsIHht
bC94bWxhdHRycy5pbgogCiAjIC0tLS0tLS0tCiAKKyMgRGF0YSBmb3IgSFRNTCBVSSBpbXBsZW1l
bnRhdGlvbnMKKworQ0FMRU5EQVJQSUNLRVJfRklMRVMgPSAkKFdlYkNvcmUpL1Jlc291cmNlcy9j
YWxlbmRhclBpY2tlci5qcyBcCisJJChXZWJDb3JlKS9SZXNvdXJjZXMvY2FsZW5kYXJQaWNrZXIu
Y3NzCisKK0NhbGVuZGFyUGlja2VyLmggOiAkKFdlYkNvcmUpL21ha2UtZmlsZS1hcnJheXMucHkg
JChDQUxFTkRBUlBJQ0tFUl9GSUxFUykKKwlweXRob24gJDwgJEAgQ2FsZW5kYXJQaWNrZXIuY3Bw
ICQoQ0FMRU5EQVJQSUNLRVJfRklMRVMpCisKKyMgLS0tLS0tLS0KKwogIyBTVkcgdGFnIGFuZCBh
dHRyaWJ1dGUgbmFtZXMsIGFuZCBlbGVtZW50IGZhY3RvcnkKIAogaWZlcSAoJChmaW5kc3RyaW5n
IEVOQUJMRV9TVkdfVVNFLCQoRkVBVFVSRV9ERUZJTkVTKSksIEVOQUJMRV9TVkdfVVNFKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL2NhbGVuZGFyUGlja2VyLmNzcyBiL1Nv
dXJjZS9XZWJDb3JlL1Jlc291cmNlcy9jYWxlbmRhclBpY2tlci5jc3MKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDY4
ZTZjOTQ3NDljOGQ3OTI0MzU0MGQ0Y2M2NDJkNjNkYTIyYTlkYQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9jYWxlbmRhclBpY2tlci5jc3MKQEAgLTAsMCArMSwx
MTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCitib2R5IHsKKyAgICBmb250OiAtd2Via2l0LXNtYWxsLWNvbnRyb2w7CisgICAgLXdlYmtp
dC11c2VyLXNlbGVjdDogbm9uZTsKKyAgICBtYXJnaW46IDA7Cit9CisKKyNtYWluIHsKKyAgICBw
YWRkaW5nOiA2cHg7Cit9CisKKy55ZWFyLXNlbGVjdG9yIHsKKyAgICB3aWR0aDogNmVtOworICAg
IHRleHQtYWxpZ246IHJpZ2h0OworfQorCisubW9udGgtc2VsZWN0b3IgeworfQorCisuZGF5cy1h
cmVhLWNvbnRhaW5lciB7CisgICAgbWFyZ2luLXRvcDogNnB4OworICAgIG1hcmdpbi1ib3R0b206
IDZweDsKKyAgICBvdmVyZmxvdzogaGlkZGVuOworfQorCisuZGF5cy1hcmVhIHsgLyogPHRhYmxl
PiAqLworICAgIHdpZHRoOiAxMDAlOworICAgIHRhYmxlLWxheW91dDogZml4ZWQ7CisgICAgYm9y
ZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsKKyAgICBib3JkZXItc3BhY2luZzogMHB4OworICAgIGJv
cmRlcjogc29saWQgMXB4IGJsYWNrOworICAgIGZvbnQ6IC13ZWJraXQtc21hbGwtY29udHJvbDsK
K30KKworLmRheS1sYWJlbC1jb250YWluZXIgeyAvKiA8dHI+ICovCit9CisuZGF5LWxhYmVsIHsg
LyogPHRoPiAqLworICAgIGJhY2tncm91bmQtY29sb3I6ICNjY2VlZWU7CisgICAgYm9yZGVyOiBz
b2xpZCAxcHggI2NjZWVlZTsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgLXdlYmtpdC1i
b3gtc2l6aW5nOiBib3JkZXItYm94OworfQorCisud2Vlay1jb250YWluZXIgeyAvKiA8dHI+ICov
Cit9CisuZGF5IHsgLyogPHRkPiAqLworICAgIHBhZGRpbmc6IDFweDsKKyAgICB0ZXh0LWFsaWdu
OiBjZW50ZXI7CisgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CisgICAgLXdlYmtpdC1ib3gt
c2l6aW5nOiBib3JkZXItYm94OworfQorLmF2YWlsYWJsZSB7CisgICAgY3Vyc29yOiBkZWZhdWx0
OworICAgIHRleHQtc2hhZG93OiAxcHggMXB4IDFweCAjY2NjOworICAgIGJhY2tncm91bmQtY29s
b3I6IHdoaXRlOworICAgIGJvcmRlcjogMXB4IHNvbGlkIHdoaXRlOworfQorCisuYXZhaWxhYmxl
LmRheS1zZWxlY3RlZCB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogaGlnaGxpZ2h0OworICAgIGNv
bG9yOiBoaWdobGlnaHR0ZXh0OworfQorCisudW5hdmFpbGFibGUgeworICAgIGN1cnNvcjogbm90
LWFsbG93ZWQ7CisgICAgY29sb3I6IGdyYXl0ZXh0OworICAgIGJhY2tncm91bmQtY29sb3I6ICNm
YWZhZmE7CisgICAgYm9yZGVyOiAxcHggc29saWQgI2ZhZmFmYTsKK30KKy51bmF2YWlsYWJsZS11
cCB7CisgICAgY3Vyc29yOiB3LXJlc2l6ZTsKK30KKy51bmF2YWlsYWJsZS1kb3duIHsKKyAgICBj
dXJzb3I6IGUtcmVzaXplOworfQorLnVuYXZhaWxhYmxlLmRheS1zZWxlY3RlZCB7CisgICAgYm9y
ZGVyOiAxcHggc29saWQgaGlnaGxpZ2h0OworfQorCisudG9kYXktYnV0dG9uIHsKK30KKy5jbGVh
ci1idXR0b24geworfQorLmNhbmNlbC1idXR0b24geworICAgIGZsb2F0OiByaWdodDsKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9jYWxlbmRhclBpY2tlci5qcyBiL1Nv
dXJjZS9XZWJDb3JlL1Jlc291cmNlcy9jYWxlbmRhclBpY2tlci5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MGVl
NjgzN2VjYTFlN2Q3MTY1MTM2M2RkZjA1OGU3ZjhmYTNiOTUxCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL2NhbGVuZGFyUGlja2VyLmpzCkBAIC0wLDAgKzEsNjQz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRklYTUU6CisvLyAgLSBSVEwKKy8vICAtIFRvdWNoIGV2ZW50PworCisvKioKKyAqIFRo
ZSBudW1iZXIgb2Ygd2VlayBsaW5lcyBpbiB0aGUgc2NyZWVuLgorICogQGNvbnN0CisgKiBAdHlw
ZSB7bnVtYmVyfQorICovCit2YXIgV0VFS1MgPSA2OworCit2YXIgQ0xBU1MgPSB7CisgICAgQVZB
SUxBQkxFOiAnYXZhaWxhYmxlJywKKyAgICBDQU5DRUxfQlVUVE9OOiAnY2FuY2VsLWJ1dHRvbics
CisgICAgQ0xFQVJfQlVUVE9OOiAnY2xlYXItYnV0dG9uJywKKyAgICBEQVk6ICdkYXknLAorICAg
IERBWVNfQVJFQTogJ2RheXMtYXJlYScsCisgICAgREFZU19BUkVBX0NPTlRBSU5FUjogJ2RheXMt
YXJlYS1jb250YWluZXInLAorICAgIERBWV9MQUJFTDogJ2RheS1sYWJlbCcsCisgICAgREFZX0xB
QkVMX0NPTlRBSU5FUjogJ2RheS1sYWJlbC1jb250YWluZXInLAorICAgIE1PTlRIX1NFTEVDVE9S
OiAnbW9udGgtc2VsZWN0b3InLAorICAgIFNFTEVDVEVEOiAnZGF5LXNlbGVjdGVkJywKKyAgICBU
T0RBWV9CVVRUT046ICd0b2RheS1idXR0b24nLAorICAgIFRPREFZX0NMRUFSX0FSRUE6ICd0b2Rh
eS1jbGVhci1hcmVhJywKKyAgICBVTkFWQUlMQUJMRTogJ3VuYXZhaWxhYmxlJywKKyAgICBVTkFW
QUlMQUJMRV9ET1dOOiAndW5hdmFpbGFibGUtZG93bicsCisgICAgVU5BVkFJTEFCTEVfVVA6ICd1
bmF2YWlsYWJsZS11cCcsCisgICAgV0VFS19DT05UQUlORVI6ICd3ZWVrLWNvbnRhaW5lcicsCisg
ICAgWUVBUl9NT05USF9BUkVBOiAneWVhci1tb250aC1hcmVhJywKKyAgICBZRUFSX1NFTEVDVE9S
OiAneWVhci1zZWxlY3RvcicsCit9OworCisvKioKKyAqIEB0eXBlIHtPYmplY3R9CisgKi8KK3Zh
ciBnbG9iYWwgPSB7CisgICAgYXJndW1lbnRzUmVjZWl2ZWQ6IGZhbHNlLAorICAgIGxhc3RYOiAt
MSwKKyAgICBsYXN0WTogLTEsCisgICAgbGFzdFllYXI6IC0xLAorICAgIGxhc3RNb250aDogLTEs
CisgICAgcGFyYW1zOiBudWxsLAorfTsKKword2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3Nh
Z2UnLCBoYW5kbGVNZXNzYWdlLCBmYWxzZSk7Cit3aW5kb3cuc2V0VGltZW91dChoYW5kbGVBcmd1
bWVudHNUaW1lb3V0LCAxMDAwKTsKKworLyoqCisgKiBAcGFyYW0ge0V2ZW50fSBldmVudDsKKyAq
LworZnVuY3Rpb24gaGFuZGxlTWVzc2FnZShldmVudCkgeworICAgIGlmIChnbG9iYWwuYXJndW1l
bnRzUmVjZWl2ZWQpCisgICAgICAgIHJldHVybjsKKyAgICBnbG9iYWwuYXJndW1lbnRzUmVjZWl2
ZWQgPSB0cnVlOworICAgIGluaXRpYWxpemUoSlNPTi5wYXJzZShldmVudC5kYXRhKSk7Cit9CisK
K2Z1bmN0aW9uIGhhbmRsZUFyZ3VtZW50c1RpbWVvdXQoKSB7CisgICAgaWYgKGdsb2JhbC5hcmd1
bWVudHNSZWNlaXZlZCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICh3aW5kb3cuZGlhbG9nQXJn
dW1lbnRzKSB7CisgICAgICAgIGluaXRpYWxpemUoZGlhbG9nQXJndW1lbnRzKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICB2YXIgYXJncyA9IHsKKyAgICAgICAgbW9udGhMYWJlbHMgOiBb
J20xJywgJ20yJywgJ20zJywgJ200JywgJ201JywgJ202JywKKyAgICAgICAgICAgICAgICAgICAg
ICAgJ203JywgJ204JywgJ205JywgJ20xMCcsICdtMTEnLCAnbTEyJ10sCisgICAgICAgIGRheUxh
YmVscyA6IFsnZDEnLCAnZDInLCAnZDMnLCAnZDQnLCAnZDUnLCAnZDYnLCAnZDcnXSwKKyAgICAg
ICAgdG9kYXlMYWJlbCA6ICdUb2RheScsCisgICAgICAgIGNsZWFyTGFiZWwgOiAnQ2xlYXInLAor
ICAgICAgICBjYW5jZWxMYWJlbCA6ICdDYW5jZWwnLAorICAgICAgICB3ZWVrU3RhcnREYXkgOiAw
LAorICAgICAgICBzdGVwIDogMiwKKyAgICAgICAgbWF4IDogJzIwMTEtMDItMDEnLAorICAgIH07
CisgICAgaW5pdGlhbGl6ZShhcmdzKTsKK30KKworLyoqCisgKiBAcGFyYW0ge3N0cmluZ30gaWQK
KyAqLworZnVuY3Rpb24gJChpZCkgeworICAgIHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZChpZCk7Cit9CisKKy8qKgorICogQHBhcmFtIHtzdHJpbmd9IHRhZ05hbWUKKyAqIEBwYXJhbSB7
c3RyaW5nfSBvcHRfY2xhc3MKKyAqIEBwYXJhbSB7c3RyaW5nfSBvcHRfdGV4dAorICovCitmdW5j
dGlvbiBjcmVhdGVFbGVtZW50KHRhZ05hbWUsIG9wdF9jbGFzcywgb3B0X3RleHQpIHsKKyAgICB2
YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7CisgICAgaWYgKG9w
dF9jbGFzcykKKyAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgb3B0X2NsYXNz
KTsKKyAgICBpZiAob3B0X3RleHQpCisgICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1l
bnQuY3JlYXRlVGV4dE5vZGUob3B0X3RleHQpKTsKKyAgICByZXR1cm4gZWxlbWVudDsKK30KKwor
LyoqCisgKiBAcGFyYW0geyFPYmplY3R9IGFyZ3MKKyAqLworZnVuY3Rpb24gZ2V0QXJndW1lbnRF
cnJvcihhcmdzKSB7CisgICAgaWYgKCFhcmdzLm1vbnRoTGFiZWxzKQorICAgICAgICByZXR1cm4g
J05vIG1vbnRoTGFiZWxzLic7CisgICAgaWYgKGFyZ3MubW9udGhMYWJlbHMubGVuZ3RoICE9IDEy
KQorICAgICAgICByZXR1cm4gJ21vbnRoTGFiZWxzIGlzIG5vdCBhbiBhcnJheSB3aXRoIDEyIGVs
ZW1lbnRzLic7CisgICAgaWYgKCFhcmdzLmRheUxhYmVscykKKyAgICAgICAgcmV0dXJuICdObyBk
YXlMYWJlbHMuJzsKKyAgICBpZiAoYXJncy5kYXlMYWJlbHMubGVuZ3RoICE9IDcpCisgICAgICAg
IHJldHVybiAnZGF5TGFiZWxzIGlzIG5vdCBhbiBhcnJheSB3aXRoIDcgZWxlbWVudHMuJzsKKyAg
ICBpZiAoIWFyZ3MuY2FuY2VsTGFiZWwpCisgICAgICAgIHJldHVybiAnTm8gY2FuY2VsTGFiZWwu
JzsKKyAgICBpZiAoIWFyZ3MuY2xlYXJMYWJlbCkKKyAgICAgICAgcmV0dXJuICdObyBjbGVhckxh
YmVsLic7CisgICAgaWYgKCFhcmdzLnRvZGF5TGFiZWwpCisgICAgICAgIHJldHVybiAnTm8gdG9k
YXlMYWJlbC4nOworICAgIHJldHVybiAnJzsKK30KKworZnVuY3Rpb24gY3JlYXRlRGF0ZUZyb21T
dHJpbmcob3B0X2N1cnJlbnQpIHsKKyAgICBpZiAob3B0X2N1cnJlbnQpIHsKKyAgICAgICAgdmFy
IHJlc3VsdCA9IG9wdF9jdXJyZW50Lm1hdGNoKC8oXGQrKS0oXGQrKS0oXGQrKS8pOworICAgICAg
ICBpZiAocmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKE51bWJl
cihyZXN1bHRbMV0pLCBOdW1iZXIocmVzdWx0WzJdKSAtIDEsIE51bWJlcihyZXN1bHRbM10pKSk7
CisgICAgfQorICAgIHZhciBub3cgPSBuZXcgRGF0ZSgpOworICAgIC8vIENyZWF0ZSBVVEMgZGF0
ZSB3aXRoIHNhbWUgbnVtYmVycyBhcyBsb2NhbCBkYXRlLgorICAgIHJldHVybiBuZXcgRGF0ZShE
YXRlLlVUQyhub3cuZ2V0RnVsbFllYXIoKSwgbm93LmdldE1vbnRoKCksIG5vdy5nZXREYXRlKCkp
KTsKK30KKworLyoqCisgKiBAcGFyYW0geyFPYmplY3R9IGFyZ3MKKyAqLworZnVuY3Rpb24gaW5p
dGlhbGl6ZShhcmdzKSB7CisgICAgdmFyIGVycm9yU3RyaW5nID0gZ2V0QXJndW1lbnRFcnJvcihh
cmdzKTsKKyAgICBpZiAoZXJyb3JTdHJpbmcubGVuZ3RoID4gMCkgeworICAgICAgICAkKCdtYWlu
JykudGV4dENvbnRlbnQgPSAnSW50ZXJuYWwgZXJyb3I6ICcgKyBlcnJvclN0cmluZzsKKyAgICB9
IGVsc2UgeworICAgICAgICBnbG9iYWwucGFyYW1zID0gYXJnczsKKyAgICAgICAgY2hlY2tMaW1p
dHMoKTsKKyAgICAgICAgbGF5b3V0KCk7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIG1pZ2h0IHNo
b3cgdW5hdmFpbGFibGUgbW9udGguCisgICAgICAgIC8vIFdoYXQgc2hvdWxkIHdlIHNob3cgaWYg
dGhlIGN1cnJlbnQgdmFsdWUgb3IgdG9kYXkgaXMgb3V0IG9mIHJhbmdlPworICAgICAgICBzZWxl
Y3REYXRlKGNyZWF0ZURhdGVGcm9tU3RyaW5nKGFyZ3MuY3VycmVudFZhbHVlKSk7CisgICAgICAg
IHdpbmRvdy5mcmFtZUVsZW1lbnQuaGVpZ2h0ID0gJCgnbWFpbicpLm9mZnNldEhlaWdodCArIDQ7
CisgICAgICAgIHdpbmRvdy5mcmFtZUVsZW1lbnQuc3R5bGUub3BhY2l0eSA9ICcxLjAnOworICAg
ICAgICB3aW5kb3cuZnJhbWVFbGVtZW50LnN0eWxlLndlYmtpdFRyYW5zaXRpb24gPSAnb3BhY2l0
eSAwLjJzIGVhc2UnOworICAgIH0KK30KKworZnVuY3Rpb24gY2hlY2tMaW1pdHMoKSB7CisgICAg
Ly8gSGFyZCBsaW1pdHMgb2YgdHlwZT1kYXRlLiBTZWUgV2ViQ29yZS9odG1sL0RhdGVDb21wb25l
bnRzLmguCisgICAgZ2xvYmFsLm1pbmltdW1EYXRlID0gbmV3IERhdGUoLTYyMTM1NTk2ODAwMDAw
LjApOworICAgIGdsb2JhbC5tYXhpbXVtRGF0ZSA9IG5ldyBEYXRlKDg2NDAwMDAwMDAwMDAwMDAu
MCk7CisgICAgLy8gU2VlIFdlYkNvcmUvaHRtbC9EYXRlSW5wdXRUeXBlLmNwcC4KKyAgICBnbG9i
YWwuc3RlcCA9IDg2NDAwMDAwOworICAgIGlmIChnbG9iYWwucGFyYW1zLm1pbikgeworICAgICAg
ICAvLyBXZSBhc3N1bWUgcGFyYW1zLm1pbiBpcyBhIHZhbGlkIGRhdGUuCisgICAgICAgIGdsb2Jh
bC5taW5pbXVtRGF0ZSA9IGNyZWF0ZURhdGVGcm9tU3RyaW5nKGdsb2JhbC5wYXJhbXMubWluKTsK
KyAgICB9CisgICAgaWYgKGdsb2JhbC5wYXJhbXMubWF4KSB7CisgICAgICAgIC8vIFdlIGFzc3Vt
ZSBwYXJhbXMubWF4IGlzIGEgdmFsaWQgZGF0ZS4KKyAgICAgICAgZ2xvYmFsLm1heGltdW1EYXRl
ID0gY3JlYXRlRGF0ZUZyb21TdHJpbmcoZ2xvYmFsLnBhcmFtcy5tYXgpOworICAgIH0KKyAgICBp
ZiAoZ2xvYmFsLnBhcmFtcy5zdGVwKSB7CisgICAgICAgIGdsb2JhbC5zdGVwICo9IGdsb2JhbC5w
YXJhbXMuc3RlcDsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGxheW91dCgpIHsKKyAgICB2YXIgbWFp
biA9ICQoJ21haW4nKTsKKyAgICB2YXIgcGFyYW1zID0gZ2xvYmFsLnBhcmFtczsKKyAgICBtYWlu
LnJlbW92ZUNoaWxkKG1haW4uZmlyc3RDaGlsZCk7CisgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVu
dExpc3RlbmVyKCdrZXlkb3duJywgaGFuZGxlR2xvYmFsS2V5KTsKKworICAgIC8vIFNob3VsZCB3
ZSB1c2UgdHlwZT1tb250aD8KKyAgICBnbG9iYWwueWVhciA9IGNyZWF0ZUVsZW1lbnQoJ2lucHV0
JywgQ0xBU1MuWUVBUl9TRUxFQ1RPUik7CisgICAgZ2xvYmFsLnllYXIudHlwZSA9ICdudW1iZXIn
OworICAgIGdsb2JhbC55ZWFyLm1pbiA9IGdsb2JhbC5taW5pbXVtRGF0ZS5nZXRVVENGdWxsWWVh
cigpOworICAgIGdsb2JhbC55ZWFyLm1heCA9IGdsb2JhbC5tYXhpbXVtRGF0ZS5nZXRVVENGdWxs
WWVhcigpOworICAgIGdsb2JhbC55ZWFyLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGhhbmRs
ZVllYXJNb250aENoYW5nZSk7CisgICAgZ2xvYmFsLnllYXIuYWRkRXZlbnRMaXN0ZW5lcignaW5w
dXQnLCBoYW5kbGVZZWFyTW9udGhDaGFuZ2UpOworICAgIGdsb2JhbC5tb250aCA9IGNyZWF0ZUVs
ZW1lbnQoJ3NlbGVjdCcsIENMQVNTLk1PTlRIX1NFTEVDVE9SKTsKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IDEyOyBpKyspIHsKKyAgICAgICAgZ2xvYmFsLm1vbnRoLmFwcGVuZENoaWxkKGNyZWF0
ZUVsZW1lbnQoJ29wdGlvbicsIHVuZGVmaW5lZCwgcGFyYW1zLm1vbnRoTGFiZWxzW2ldKSk7Cisg
ICAgfQorICAgIGdsb2JhbC5tb250aC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBoYW5kbGVZ
ZWFyTW9udGhDaGFuZ2UpOworICAgIHZhciBlbGVtZW50ID0gY3JlYXRlRWxlbWVudCgnZGl2Jywg
Q0xBU1MuWUVBUl9NT05USF9BUkVBKTsKKyAgICBlbGVtZW50LmFwcGVuZENoaWxkKGdsb2JhbC55
ZWFyKTsKKyAgICBlbGVtZW50LmFwcGVuZENoaWxkKGdsb2JhbC5tb250aCk7CisgICAgbWFpbi5h
cHBlbmRDaGlsZChlbGVtZW50KTsKKworICAgIGVsZW1lbnQgPSBjcmVhdGVFbGVtZW50KCd0YWJs
ZScsIENMQVNTLkRBWVNfQVJFQSk7CisgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGlj
aycsIGhhbmRsZURheUNsaWNrKTsKKyAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNl
b3ZlcicsIGhhbmRsZU1vdXNlT3Zlcik7CisgICAgdmFyIGNvbnRhaW5lciA9IGNyZWF0ZUVsZW1l
bnQoJ3RyJywgQ0xBU1MuREFZX0xBQkVMX0NPTlRBSU5FUik7CisgICAgdmFyIHdlZWtTdGFydERh
eSA9IGdsb2JhbC5wYXJhbXMud2Vla1N0YXJ0RGF5IHx8IDA7CisgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCA3OyBpKyspIHsKKyAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1l
bnQoJ3RoJywgQ0xBU1MuREFZX0xBQkVMLCBwYXJhbXMuZGF5TGFiZWxzWyh3ZWVrU3RhcnREYXkg
KyBpKSAlIDddKSk7CisgICAgfQorICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTsK
KyAgICB2YXIgZGF5cyA9IFtdOworICAgIGZvciAodmFyIHcgPSAwOyB3IDwgV0VFS1M7IHcrKykg
eworICAgICAgICBjb250YWluZXIgPSBjcmVhdGVFbGVtZW50KCd0cicsIENMQVNTLldFRUtfQ09O
VEFJTkVSKTsKKyAgICAgICAgdmFyIHdlZWsgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgZCA9IDA7
IGQgPCA3OyBkKyspIHsKKyAgICAgICAgICAgIHZhciBkYXkgPSBjcmVhdGVFbGVtZW50KCd0ZCcs
IENMQVNTLkRBWSwgJyAnKTsKKyAgICAgICAgICAgIGRheS5zZXRBdHRyaWJ1dGUoJ2RhdGEtcG9z
aXRpb24teCcsIFN0cmluZyhkKSk7CisgICAgICAgICAgICBkYXkuc2V0QXR0cmlidXRlKCdkYXRh
LXBvc2l0aW9uLXknLCBTdHJpbmcodykpOworICAgICAgICAgICAgd2Vlay5wdXNoKGRheSk7Cisg
ICAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZGF5KTsKKyAgICAgICAgfQorICAgICAg
ICBkYXlzLnB1c2god2Vlayk7CisgICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoY29udGFpbmVy
KTsKKyAgICB9CisgICAgZ2xvYmFsLmRheXMgPSBkYXlzOworICAgIGdsb2JhbC5kYXlzQXJlYSA9
IGVsZW1lbnQ7CisgICAgY29udGFpbmVyID0gY3JlYXRlRWxlbWVudCgnZGl2JywgQ0xBU1MuREFZ
U19BUkVBX0NPTlRBSU5FUik7CisgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGVsZW1lbnQpOwor
ICAgIGNvbnRhaW5lci50YWJJbmRleCA9IDA7CisgICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVu
ZXIoJ2tleWRvd24nLCBoYW5kbGVEYXlzQXJlYUtleSk7CisgICAgbWFpbi5hcHBlbmRDaGlsZChj
b250YWluZXIpOworCisgICAgZWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQoJ2RpdicsIENMQVNTLlRP
REFZX0NMRUFSX0FSRUEpOworICAgIGdsb2JhbC50b2RheSA9IGNyZWF0ZUVsZW1lbnQoJ2lucHV0
JywgQ0xBU1MuVE9EQVlfQlVUVE9OKTsKKyAgICBnbG9iYWwudG9kYXkudHlwZSA9ICdidXR0b24n
OworICAgIGdsb2JhbC50b2RheS52YWx1ZSA9IHBhcmFtcy50b2RheUxhYmVsOworICAgIGdsb2Jh
bC50b2RheS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZVRvZGF5KTsKKyAgICBlbGVt
ZW50LmFwcGVuZENoaWxkKGdsb2JhbC50b2RheSk7CisgICAgZ2xvYmFsLmNsZWFyID0gbnVsbDsK
KyAgICBpZiAoIXBhcmFtcy5yZXF1aXJlZCkgeworICAgICAgICBnbG9iYWwuY2xlYXIgPSBjcmVh
dGVFbGVtZW50KCdpbnB1dCcsIENMQVNTLkNMRUFSX0JVVFRPTik7CisgICAgICAgIGdsb2JhbC5j
bGVhci50eXBlID0gJ2J1dHRvbic7CisgICAgICAgIGdsb2JhbC5jbGVhci52YWx1ZSA9IHBhcmFt
cy5jbGVhckxhYmVsOworICAgICAgICBnbG9iYWwuY2xlYXIuYWRkRXZlbnRMaXN0ZW5lcignY2xp
Y2snLCBoYW5kbGVDbGVhcik7CisgICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoZ2xvYmFsLmNs
ZWFyKTsKKyAgICB9CisgICAgZ2xvYmFsLmNhbmNlbCA9IGNyZWF0ZUVsZW1lbnQoJ2lucHV0Jywg
Q0xBU1MuQ0FOQ0VMX0JVVFRPTik7CisgICAgZ2xvYmFsLmNhbmNlbC50eXBlID0gJ2J1dHRvbic7
CisgICAgZ2xvYmFsLmNhbmNlbC52YWx1ZSA9IHBhcmFtcy5jYW5jZWxMYWJlbDsKKyAgICBnbG9i
YWwuY2FuY2VsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlQ2FuY2VsKTsKKyAgICBl
bGVtZW50LmFwcGVuZENoaWxkKGdsb2JhbC5jYW5jZWwpOworICAgIG1haW4uYXBwZW5kQ2hpbGQo
ZWxlbWVudCk7CisKKyAgICBjb250YWluZXIuZm9jdXMoKTsKK30KKworZnVuY3Rpb24gc3RlcE1p
c21hdGNoKHRpbWUpIHsKKyAgICByZXR1cm4gKHRpbWUgLSBnbG9iYWwubWluaW11bURhdGUuZ2V0
VGltZSgpKSAlIGdsb2JhbC5zdGVwICE9IDA7Cit9CitmdW5jdGlvbiBvdXRPZlJhbmdlKHRpbWUp
IHsKKyAgICByZXR1cm4gdGltZSA8IGdsb2JhbC5taW5pbXVtRGF0ZS5nZXRUaW1lKCkgfHwgdGlt
ZSA+IGdsb2JhbC5tYXhpbXVtRGF0ZS5nZXRUaW1lKCk7Cit9CisKK2Z1bmN0aW9uIGlzVmFsaWRE
YXRlKHRpbWUpIHsKKyAgICByZXR1cm4gIW91dE9mUmFuZ2UodGltZSkgJiYgIXN0ZXBNaXNtYXRj
aCh0aW1lKTsKK30KKworLyoqCisgKiBAcGFyYW0ge251bWJlcn0geWVhcgorICogQHBhcmFtIHtu
dW1iZXJ9IG1vbnRoCisgKi8KK2Z1bmN0aW9uIHJlbmRlck1vbnRoKHllYXIsIG1vbnRoKSB7Cisg
ICAgZ2xvYmFsLmxhc3RZZWFyID0geWVhcjsKKyAgICBnbG9iYWwubGFzdE1vbnRoID0gbW9udGg7
CisgICAgdmFyIGRheUl0ZXJhdG9yID0gbmV3IERhdGUoRGF0ZS5VVEMoeWVhciwgbW9udGgsIDEp
KTsKKyAgICBkYXlJdGVyYXRvci5zZXRVVENGdWxsWWVhcih5ZWFyKTsKKyAgICB2YXIgbW9udGhT
dGFydERheSA9IGRheUl0ZXJhdG9yLmdldERheSgpOworICAgIHZhciB3ZWVrU3RhcnREYXkgPSBn
bG9iYWwucGFyYW1zLndlZWtTdGFydERheSB8fCAwOworICAgIHZhciBzdGFydE9mZnNldCA9IHdl
ZWtTdGFydERheSAtIG1vbnRoU3RhcnREYXk7CisgICAgaWYgKHN0YXJ0T2Zmc2V0ID49IDApIHsK
KyAgICAgICAgc3RhcnRPZmZzZXQgLT0gNzsKKyAgICB9CisgICAgZGF5SXRlcmF0b3Iuc2V0VVRD
RGF0ZShzdGFydE9mZnNldCArIDEpOworICAgIGZvciAodmFyIHcgPSAwOyB3IDwgV0VFS1M7IHcr
KykgeworICAgICAgICBmb3IgKHZhciBkID0gMDsgZCA8IDc7IGQrKykgeworICAgICAgICAgICAg
dmFyIGl0ZXJZZWFyID0gZGF5SXRlcmF0b3IuZ2V0VVRDRnVsbFllYXIoKTsKKyAgICAgICAgICAg
IHZhciBpdGVyTW9udGggPSBkYXlJdGVyYXRvci5nZXRVVENNb250aCgpOworICAgICAgICAgICAg
dmFyIHRpbWUgPSBkYXlJdGVyYXRvci5nZXRUaW1lKCk7CisgICAgICAgICAgICB2YXIgZWxlbWVu
dCA9IGdsb2JhbC5kYXlzW3ddW2RdOworICAgICAgICAgICAgZWxlbWVudC5pbm5lclRleHQgPSBT
dHJpbmcoZGF5SXRlcmF0b3IuZ2V0VVRDRGF0ZSgpKTsKKyAgICAgICAgICAgIGVsZW1lbnQuY2xh
c3NOYW1lID0gQ0xBU1MuREFZOworICAgICAgICAgICAgZWxlbWVudC5kYXRhc2V0LnN1Ym1pdFZh
bHVlID0gY3JlYXRlRGF0ZVN0cmluZyhpdGVyWWVhciwgaXRlck1vbnRoLCBkYXlJdGVyYXRvci5n
ZXRVVENEYXRlKCkpOworICAgICAgICAgICAgaWYgKG91dE9mUmFuZ2UodGltZSkpIHsKKyAgICAg
ICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1MuVU5BVkFJTEFCTEUpOworICAg
ICAgICAgICAgfSBlbHNlIGlmICgoaXRlclllYXIgPT0geWVhciAmJiBkYXlJdGVyYXRvci5nZXRV
VENNb250aCgpIDwgbW9udGgpIHx8IChtb250aCA9PSAwICYmIGl0ZXJNb250aCA9PSAxMSkpIHsK
KyAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1MuVU5BVkFJTEFCTEUp
OworICAgICAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTUy5VTkFWQUlMQUJM
RV9VUCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKChpdGVyWWVhciA9PSB5ZWFyICYmIGRheUl0
ZXJhdG9yLmdldFVUQ01vbnRoKCkgPiBtb250aCkgfHwgKG1vbnRoID09IDExICYmIGl0ZXJNb250
aCA9PSAwKSkgeworICAgICAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTUy5V
TkFWQUlMQUJMRSk7CisgICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNT
LlVOQVZBSUxBQkxFX0RPV04pOworICAgICAgICAgICAgfSBlbHNlIGlmIChzdGVwTWlzbWF0Y2go
dGltZSkpIHsKKyAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1MuVU5B
VkFJTEFCTEUpOworICAgICAgICAgICAgfSBlbHNlIGlmIChpc05hTih0aW1lKSkgeworICAgICAg
ICAgICAgICAgIGVsZW1lbnQuaW5uZXJUZXh0ID0gJy0nOworICAgICAgICAgICAgICAgIGVsZW1l
bnQuY2xhc3NMaXN0LmFkZChDTEFTUy5VTkFWQUlMQUJMRSk7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTUy5BVkFJTEFCTEUp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGF5SXRlcmF0b3Iuc2V0RGF0ZShkYXlJdGVy
YXRvci5nZXRVVENEYXRlKCkgKyAxKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGdsb2JhbC50
b2RheS5kaXNhYmxlZCA9ICFpc1ZhbGlkRGF0ZShjcmVhdGVEYXRlRnJvbVN0cmluZygpLmdldFRp
bWUoKSk7CisKKyAgICB2YXIgbWluWWVhciA9IGdsb2JhbC5taW5pbXVtRGF0ZS5nZXRVVENGdWxs
WWVhcigpOworICAgIHZhciBtYXhZZWFyID0gZ2xvYmFsLm1heGltdW1EYXRlLmdldFVUQ0Z1bGxZ
ZWFyKCk7CisgICAgaWYgKHllYXIgPCBtaW5ZZWFyIHx8IHllYXIgPiBtYXhZZWFyKSB7CisgICAg
ICAgIGdsb2JhbC5tb250aC5kaXNhYmxlZCA9IHRydWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Z2xvYmFsLm1vbnRoLmRpc2FibGVkID0gZmFsc2U7CisgICAgICAgIHZhciBtaW5Nb250aCA9IGds
b2JhbC5taW5pbXVtRGF0ZS5nZXRVVENNb250aCgpOworICAgICAgICB2YXIgbWF4TW9udGggPSBn
bG9iYWwubWF4aW11bURhdGUuZ2V0VVRDTW9udGgoKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCAxMjsgaSsrKSB7CisgICAgICAgICAgICBnbG9iYWwubW9udGhbaV0uZGlzYWJsZWQgPSB5
ZWFyID09IG1pblllYXIgJiYgaSA8IG1pbk1vbnRoIHx8IHllYXIgPT0gbWF4WWVhciAmJiBpID4g
bWF4TW9udGg7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8qKgorICogQHBhcmFtIHtudW1iZXJ9
IHllYXIKKyAqIEBwYXJhbSB7bnVtYmVyfSBtb250aAorICovCitmdW5jdGlvbiBuYXZpZ2F0ZVRv
TW9udGgoeWVhciwgbW9udGgpIHsKKyAgICBnbG9iYWwueWVhci52YWx1ZSA9IFN0cmluZyh5ZWFy
KTsKKyAgICBnbG9iYWwubW9udGguc2VsZWN0ZWRJbmRleCA9IG1vbnRoOworICAgIHJlbmRlck1v
bnRoKHllYXIsIG1vbnRoKTsKK30KKworLyoqCisgKiBAcGFyYW0ge251bWJlcn0geWVhcgorICog
QHBhcmFtIHtudW1iZXJ9IG1vbnRoCisgKiBAcGFyYW0ge2Jvb2xlYW59IHJpZ2h0IGZhbHNlOmxl
ZnQsIHRydWU6cmlnaHQKKyAqLworZnVuY3Rpb24gbmF2aWdhdGVUb01vbnRoV2l0aEFuaW1hdGlv
bih5ZWFyLCBtb250aCkgeworICAgIGlmIChnbG9iYWwubGFzdFllYXIgPj0gMCAmJiBnbG9iYWwu
bGFzdE1vbnRoID49IDApIHsKKyAgICAgICAgaWYgKHllYXIgPT0gZ2xvYmFsLmxhc3RZZWFyICYm
IG1vbnRoID09IGdsb2JhbC5sYXN0TW9udGgpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICB2YXIgZGVjcmVhc2luZyA9IGZhbHNlOworICAgICAgICBpZiAoeWVhciA8
IGdsb2JhbC5sYXN0WWVhcikgeworICAgICAgICAgICAgZGVjcmVhc2luZyA9IHRydWU7CisgICAg
ICAgIH0gZWxzZSBpZiAoeWVhciA+IGdsb2JhbC5sYXN0WWVhcikgeworICAgICAgICAgICAgZGVj
cmVhc2luZyA9IGZhbHNlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGVjcmVhc2lu
ZyA9IG1vbnRoIDwgZ2xvYmFsLmxhc3RNb250aDsKKyAgICAgICAgfQorICAgICAgICB2YXIgZGF5
c1N0eWxlID0gZ2xvYmFsLmRheXNBcmVhLnN0eWxlOworICAgICAgICBnbG9iYWwuZGF5c0FyZWEu
YWRkRXZlbnRMaXN0ZW5lcignd2Via2l0VHJhbnNpdGlvbkVuZCcsIG1vdmVJbkRheXMpOworICAg
ICAgICBkYXlzU3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnOworICAgICAgICBkYXlzU3R5bGUu
d2Via2l0VHJhbnNpdGlvbiA9ICdsZWZ0IDAuMnMgZWFzZSc7CisgICAgICAgIGRheXNTdHlsZS5s
ZWZ0ID0gKGRlY3JlYXNpbmcgPyAnJyA6ICctJykgKyBnbG9iYWwuZGF5c0FyZWEub2Zmc2V0V2lk
dGggKyAncHgnOworICAgIH0KKyAgICBuYXZpZ2F0ZVRvTW9udGgoeWVhciwgbW9udGgpOworfQor
CitmdW5jdGlvbiBtb3ZlSW5EYXlzKCkgeworICAgIHZhciBkYXlzU3R5bGUgPSBnbG9iYWwuZGF5
c0FyZWEuc3R5bGU7CisgICAgZ2xvYmFsLmRheXNBcmVhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3dl
YmtpdFRyYW5zaXRpb25FbmQnLCBtb3ZlSW5EYXlzKTsKKyAgICBkYXlzU3R5bGUud2Via2l0VHJh
bnNpdGlvbiA9ICcnOworICAgIGRheXNTdHlsZS5sZWZ0ID0gKGRheXNTdHlsZS5sZWZ0LmNoYXJB
dCgwKSA9PSAnLScgPyAnJyA6ICctJykgKyBnbG9iYWwuZGF5c0FyZWEub2Zmc2V0V2lkdGggKyAn
cHgnOworICAgIGdsb2JhbC5kYXlzQXJlYS5vZmZzZXRMZWZ0OyAvLyBGb3JjZSB0byBsYXlvdXQu
CisgICAgZGF5c1N0eWxlLndlYmtpdFRyYW5zaXRpb24gPSAnbGVmdCAwLjJzIGVhc2UnOworICAg
IGRheXNTdHlsZS5sZWZ0ID0gJzBweCc7Cit9CisKKy8qKgorICogQHBhcmFtIHtEYXRlfSBkYXRl
CisgKi8KK2Z1bmN0aW9uIHNlbGVjdERhdGUoZGF0ZSkgeworICAgIG5hdmlnYXRlVG9Nb250aFdp
dGhBbmltYXRpb24oZGF0ZS5nZXRVVENGdWxsWWVhcigpLCBkYXRlLmdldFVUQ01vbnRoKCkpOwor
ICAgIHZhciBkYXRlU3RyaW5nID0gY3JlYXRlRGF0ZVN0cmluZyhkYXRlLmdldFVUQ0Z1bGxZZWFy
KCksIGRhdGUuZ2V0VVRDTW9udGgoKSwgZGF0ZS5nZXRVVENEYXRlKCkpOworICAgIGZvciAodmFy
IHcgPSAwOyB3IDwgV0VFS1M7IHcrKykgeworICAgICAgICBmb3IgKHZhciBkID0gMDsgZCA8IDc7
IGQrKykgeworICAgICAgICAgICAgaWYgKGdsb2JhbC5kYXlzW3ddW2RdLmRhdGFzZXQuc3VibWl0
VmFsdWUgPT0gZGF0ZVN0cmluZykgeworICAgICAgICAgICAgICAgIGdsb2JhbC5kYXlzW3ddW2Rd
LmNsYXNzTGlzdC5hZGQoQ0xBU1MuU0VMRUNURUQpOworICAgICAgICAgICAgICAgIGdsb2JhbC5s
YXN0WCA9IGQ7CisgICAgICAgICAgICAgICAgZ2xvYmFsLmxhc3RZID0gdzsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworZnVuY3Rp
b24gaGFuZGxlWWVhck1vbnRoQ2hhbmdlKCkgeworICAgIGlmIChnbG9iYWwueWVhci52YWx1ZS5s
ZW5ndGggPD0gMCkKKyAgICAgICAgcmV0dXJuOworICAgIHZhciBuZXdZZWFyID0gTnVtYmVyKGds
b2JhbC55ZWFyLnZhbHVlKTsKKyAgICB2YXIgbmV3TW9udGggPSBnbG9iYWwubW9udGguc2VsZWN0
ZWRJbmRleDsKKyAgICBpZiAobmV3WWVhciA9PSBnbG9iYWwubGFzdFllYXIgJiYgbmV3TW9udGgg
PT0gZ2xvYmFsLmxhc3RNb250aCkKKyAgICAgICAgcmV0dXJuOworICAgIC8vcmVuZGVyTW9udGgo
bmV3WWVhciwgbmV3TW9udGgpOworICAgIG5hdmlnYXRlVG9Nb250aFdpdGhBbmltYXRpb24obmV3
WWVhciwgbmV3TW9udGgpOworICAgIGdsb2JhbC5kYXlzW2dsb2JhbC5sYXN0WV1bZ2xvYmFsLmxh
c3RYXS5jbGFzc0xpc3QuYWRkKENMQVNTLlNFTEVDVEVEKTsKK30KKworZnVuY3Rpb24gbWF5YmVT
ZXRQcmV2aW91c01vbnRoKCkgeworICAgIHZhciB5ZWFyID0gTnVtYmVyKGdsb2JhbC55ZWFyLnZh
bHVlKTsKKyAgICB2YXIgbW9udGggPSBnbG9iYWwubW9udGguc2VsZWN0ZWRJbmRleDsKKyAgICB2
YXIgdGhpc01vbnRoU3RhcnRUaW1lID0gRGF0ZS5VVEMoeWVhciwgbW9udGgsIDEpOworICAgIGlm
IChnbG9iYWwubWluaW11bURhdGUuZ2V0VGltZSgpID49IHRoaXNNb250aFN0YXJ0VGltZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtb250aCA9PSAwKSB7CisgICAgICAgIHllYXIt
LTsKKyAgICAgICAgbW9udGggPSAxMTsKKyAgICB9IGVsc2UgeworICAgICAgICBtb250aC0tOwor
ICAgIH0KKyAgICBuYXZpZ2F0ZVRvTW9udGhXaXRoQW5pbWF0aW9uKHllYXIsIG1vbnRoKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworZnVuY3Rpb24gbWF5YmVTZXROZXh0TW9udGgoKSB7CisgICAg
dmFyIHllYXIgPSBOdW1iZXIoZ2xvYmFsLnllYXIudmFsdWUpOworICAgIHZhciBtb250aCA9IGds
b2JhbC5tb250aC5zZWxlY3RlZEluZGV4OworICAgIGlmIChtb250aCA9PSAxMSkgeworICAgICAg
ICB5ZWFyKys7CisgICAgICAgIG1vbnRoID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICBtb250
aCsrOworICAgIH0KKyAgICB2YXIgbmV4dE1vbnRoU3RhcnRUaW1lID0gRGF0ZS5VVEMoeWVhciwg
bW9udGgsIDEpOworICAgIGlmIChnbG9iYWwubWF4aW11bURhdGUuZ2V0VGltZSgpIDwgbmV4dE1v
bnRoU3RhcnRUaW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbmF2aWdhdGVUb01vbnRo
V2l0aEFuaW1hdGlvbih5ZWFyLCBtb250aCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8qKgor
ICogQHBhcmFtIHtFdmVudH0gZXZlbnQKKyAqLworZnVuY3Rpb24gaGFuZGxlRGF5Q2xpY2soZXZl
bnQpIHsKKyAgICB2YXIgeWVhciA9IE51bWJlcihnbG9iYWwueWVhci52YWx1ZSk7CisgICAgdmFy
IG1vbnRoID0gZ2xvYmFsLm1vbnRoLnNlbGVjdGVkSW5kZXg7CisgICAgdmFyIGNsYXNzTGlzdCA9
IGV2ZW50LnRhcmdldC5jbGFzc0xpc3Q7CisgICAgaWYgKGNsYXNzTGlzdC5jb250YWlucyhDTEFT
Uy5VTkFWQUlMQUJMRV9VUCkpIHsKKyAgICAgICAgbWF5YmVTZXRQcmV2aW91c01vbnRoKCk7Cisg
ICAgfSBlbHNlIGlmIChjbGFzc0xpc3QuY29udGFpbnMoQ0xBU1MuVU5BVkFJTEFCTEVfRE9XTikp
IHsKKyAgICAgICAgbWF5YmVTZXROZXh0TW9udGgoKTsKKyAgICB9IGVsc2UgaWYgKGNsYXNzTGlz
dC5jb250YWlucyhDTEFTUy5BVkFJTEFCTEUpKSB7CisgICAgICAgIHN1Ym1pdFZhbHVlKGV2ZW50
LnRhcmdldC5kYXRhc2V0LnN1Ym1pdFZhbHVlKTsKKyAgICB9Cit9CisKKy8qKgorICogQHBhcmFt
IHtNb3VzZUV2ZW50fSBldmVudAorICovCitmdW5jdGlvbiBoYW5kbGVNb3VzZU92ZXIoZXZlbnQp
IHsKKyAgICB2YXIgbm9kZSA9IGV2ZW50LnRhcmdldDsKKyAgICBpZiAoIW5vZGUuY2xhc3NMaXN0
LmNvbnRhaW5zKENMQVNTLkRBWSkpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAo
Z2xvYmFsLmxhc3RYID49IDAgJiYgZ2xvYmFsLmxhc3RZID49IDApIHsKKyAgICAgICAgZ2xvYmFs
LmRheXNbZ2xvYmFsLmxhc3RZXVtnbG9iYWwubGFzdFhdLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1Mu
U0VMRUNURUQpOworICAgIH0KKyAgICBub2RlLmNsYXNzTGlzdC5hZGQoQ0xBU1MuU0VMRUNURUQp
OworICAgIGdsb2JhbC5sYXN0WCA9IE51bWJlcihub2RlLmRhdGFzZXQucG9zaXRpb25YKTsKKyAg
ICBnbG9iYWwubGFzdFkgPSBOdW1iZXIobm9kZS5kYXRhc2V0LnBvc2l0aW9uWSk7Cit9CisKKy8q
KgorICogQHBhcmFtIHtLZXlib2FyZEV2ZW50fSBldmVudAorICovCitmdW5jdGlvbiBoYW5kbGVE
YXlzQXJlYUtleShldmVudCkgeworICAgIGlmIChnbG9iYWwubGFzdFggPCAwIHx8IGdsb2JhbC5s
YXN0WSA8IDApIHsKKyAgICAgICAgY29uc29sZS5sb2coJ0ZhaWwhICBXZSBzaG91bGQgaGF2ZSBs
YXN0WCBhbmQgbGFzdFkuJyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgdmFyIGtleSA9
IGV2ZW50LmtleUlkZW50aWZpZXI7CisgICAgY29uc29sZS5sb2coJ0tJOiAnICsga2V5KTsKKyAg
ICB2YXIgeCA9IGdsb2JhbC5sYXN0WDsKKyAgICB2YXIgeSA9IGdsb2JhbC5sYXN0WTsKKyAgICBp
ZiAoa2V5ID09ICdMZWZ0JykgeworICAgICAgICBpZiAoeCA9PSAwKSB7CisgICAgICAgICAgICBp
ZiAoeSA9PSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtYXliZVNldFByZXZpb3VzTW9udGgo
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHkgPSBXRUVL
UyAtIDE7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHktLTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHggPSA2OworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgeC0tOworICAgICAgICB9CisgICAgICAgIHVwZGF0ZVNlbGVjdGlvbihldmVudCwgeCwgeSk7
CisgICAgfSBlbHNlIGlmIChrZXkgPT0gJ1VwJykgeworICAgICAgICBpZiAoeSA9PSAwKSB7Cisg
ICAgICAgICAgICBpZiAoIW1heWJlU2V0UHJldmlvdXNNb250aCgpKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIHkgPSBXRUVLUyAtIDE7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICB5LS07CisgICAgICAgIH0KKyAgICAgICAgdXBkYXRlU2VsZWN0aW9uKGV2ZW50
LCB4LCB5KTsKKyAgICB9IGVsc2UgaWYgKGtleSA9PSAnUmlnaHQnKSB7CisgICAgICAgIGlmICh4
ID09IDYpIHsKKyAgICAgICAgICAgIGlmICh5ID09IFdFRUtTIC0gMSkgeworICAgICAgICAgICAg
ICAgIGlmICghbWF5YmVTZXROZXh0TW9udGgoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgIHkgPSAwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICB5Kys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB4ID0gMDsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIHgrKzsKKyAgICAgICAgfQorICAgICAgICB1cGRhdGVTZWxl
Y3Rpb24oZXZlbnQsIHgsIHkpOworICAgIH0gZWxzZSBpZiAoa2V5ID09ICdEb3duJykgeworICAg
ICAgICBpZiAoeSA9PSBXRUVLUyAtIDEpIHsKKyAgICAgICAgICAgIGlmICghbWF5YmVTZXROZXh0
TW9udGgoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB5ID0gMDsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHkrKzsKKyAgICAgICAgfQorICAgICAgICB1cGRh
dGVTZWxlY3Rpb24oZXZlbnQsIHgsIHkpOworICAgIH0gZWxzZSBpZiAoa2V5ID09ICdQYWdlVXAn
KSB7CisgICAgICAgIGlmICghbWF5YmVTZXRQcmV2aW91c01vbnRoKCkpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIHVwZGF0ZVNlbGVjdGlvbihldmVudCwgeCwgeSk7CisgICAgfSBlbHNl
IGlmIChrZXkgPT0gJ1BhZ2VEb3duJykgeworICAgICAgICBpZiAoIW1heWJlU2V0TmV4dE1vbnRo
KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHVwZGF0ZVNlbGVjdGlvbihldmVudCwg
eCwgeSk7CisgICAgfSBlbHNlIGlmIChrZXkgPT0gJ0VudGVyJykgeworICAgICAgICB2YXIgZGF5
Tm9kZSA9IGdsb2JhbC5kYXlzW3ldW3hdOworICAgICAgICBpZiAoZGF5Tm9kZS5jbGFzc0xpc3Qu
Y29udGFpbnMoQ0xBU1MuQVZBSUxBQkxFKSkgeworICAgICAgICAgICAgc3VibWl0VmFsdWUoZGF5
Tm9kZS5kYXRhc2V0LnN1Ym1pdFZhbHVlKTsKKyAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdh
dGlvbigpOworICAgICAgICB9IGVsc2UgaWYgKGRheU5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKENM
QVNTLlVOQVZBSUxBQkxFX1VQKSkgeworICAgICAgICAgICAgbWF5YmVTZXRQcmV2aW91c01vbnRo
KCk7CisgICAgICAgICAgICB1cGRhdGVTZWxlY3Rpb24oZXZlbnQsIHgsIHkpOworICAgICAgICB9
IGVsc2UgaWYgKGRheU5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTLlVOQVZBSUxBQkxFX0RP
V04pKSB7CisgICAgICAgICAgICBtYXliZVNldE5leHRNb250aCgpOworICAgICAgICAgICAgdXBk
YXRlU2VsZWN0aW9uKGV2ZW50LCB4LCB5KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoa2V5
ID09ICdVKzAwNTQnKSB7IC8vICd0JworICAgICAgICBnbG9iYWwuZGF5c1tnbG9iYWwubGFzdFld
W2dsb2JhbC5sYXN0WF0uY2xhc3NMaXN0LnJlbW92ZShDTEFTUy5TRUxFQ1RFRCk7CisgICAgICAg
IHNlbGVjdERhdGUobmV3IERhdGUoKSk7CisgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigp
OworICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgIH0KK30KKworZnVuY3Rpb24g
dXBkYXRlU2VsZWN0aW9uKGV2ZW50LCB4LCB5KSB7CisgICAgZ2xvYmFsLmRheXNbZ2xvYmFsLmxh
c3RZXVtnbG9iYWwubGFzdFhdLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1MuU0VMRUNURUQpOworICAg
IGdsb2JhbC5kYXlzW3ldW3hdLmNsYXNzTGlzdC5hZGQoQ0xBU1MuU0VMRUNURUQpOworICAgIGds
b2JhbC5sYXN0WCA9IHg7CisgICAgZ2xvYmFsLmxhc3RZID0geTsKKyAgICBldmVudC5zdG9wUHJv
cGFnYXRpb24oKTsKKyAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworfQorCisvKioKKyAqIEBw
YXJhbSB7bnVtYmVyfSB5ZWFyCisgKiBAcGFyYW0ge251bWJlcn0gbW9udGgKKyAqIEBwYXJhbSB7
bnVtYmVyfSBkYXkKKyAqIEByZXR1cm4ge3N0cmluZ30KKyAqLworZnVuY3Rpb24gY3JlYXRlRGF0
ZVN0cmluZyh5ZWFyLCBtb250aCwgZGF5KSB7CisgICAgdmFyIHllYXJTdHJpbmcgPSBTdHJpbmco
eWVhcik7CisgICAgaWYgKHllYXJTdHJpbmcubGVuZ3RoIDwgNCkKKyAgICAgICAgeWVhclN0cmlu
ZyA9ICgnMDAwJyArIHllYXJTdHJpbmcpLnN1YnN0cigtNCwgNCk7CisgICAgcmV0dXJuIHllYXJT
dHJpbmcgKyAnLScgKyAoJzAnICsgKG1vbnRoICsgMSkpLnN1YnN0cigtMiwgMikgKyAnLScgKyAo
JzAnICsgZGF5KS5zdWJzdHIoLTIsIDIpCit9CisKK2Z1bmN0aW9uIGhhbmRsZVRvZGF5KCkgewor
ICAgIHZhciBkYXRlID0gbmV3IERhdGUoKTsKKyAgICBzZWxlY3REYXRlKGRhdGUpOworICAgIHN1
Ym1pdFZhbHVlKGNyZWF0ZURhdGVTdHJpbmcoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1v
bnRoKCksIGRhdGUuZ2V0RGF0ZSgpKSk7Cit9CisKK2Z1bmN0aW9uIGhhbmRsZUNsZWFyKCkgewor
ICAgIHN1Ym1pdFZhbHVlKCcnKTsKK30KKworLyoqCisgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUK
KyAqLworZnVuY3Rpb24gc3VibWl0VmFsdWUodmFsdWUpIHsKKyAgICB2YXIgZXZlbnQgPSBkb2N1
bWVudC5jcmVhdGVFdmVudCgnVGV4dEV2ZW50Jyk7CisgICAgZXZlbnQuaW5pdFRleHRFdmVudCgn
dGV4dElucHV0JywgZmFsc2UsIGZhbHNlLCB3aW5kb3csIHZhbHVlKTsKKyAgICB3aW5kb3cuZnJh
bWVFbGVtZW50LmRpc3BhdGNoRXZlbnQoZXZlbnQpOworfQorCitmdW5jdGlvbiBoYW5kbGVDYW5j
ZWwoKSB7CisgICAgdmFyIGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7Cisg
ICAgZXZlbnQuaW5pdEV2ZW50KCdhYm9ydCcsIGZhbHNlLCBmYWxzZSk7CisgICAgd2luZG93LmZy
YW1lRWxlbWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKK30KKworLyoqCisgKiBAcGFyYW0ge0tl
eWJvYXJkRXZlbnR9IGV2ZW50CisgKi8KK2Z1bmN0aW9uIGhhbmRsZUdsb2JhbEtleShldmVudCkg
eworICAgIGlmIChldmVudC5rZXlJZGVudGlmaWVyICE9ICdVKzAwMDknKSB7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgaWYgKCFldmVudC5zaGlmdEtleSAmJiBkb2N1bWVudC5hY3RpdmVF
bGVtZW50ID09IGdsb2JhbC5jYW5jZWwpIHsKKyAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9u
KCk7CisgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgIGdsb2JhbC55ZWFy
LmZvY3VzKCk7CisgICAgfSBlbHNlIGlmIChldmVudC5zaGlmdEtleSAmJiBkb2N1bWVudC5hY3Rp
dmVFbGVtZW50ID09IGdsb2JhbC55ZWFyKSB7CisgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlv
bigpOworICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICBnbG9iYWwuY2Fu
Y2VsLmZvY3VzKCk7CisgICAgfQorfQorCisvLyAtLS0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1Jlc291cmNlcy9jYWxlbmRhclBpY2tlcl90ZXN0Lmh0bWwgYi9Tb3VyY2UvV2ViQ29yZS9S
ZXNvdXJjZXMvY2FsZW5kYXJQaWNrZXJfdGVzdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhlNmFjYzQ5OTY5
ZGY5Nzk1NjczY2VjN2FkODI3ZjQ3YjY3OTE4NzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9SZXNvdXJjZXMvY2FsZW5kYXJQaWNrZXJfdGVzdC5odG1sCkBAIC0wLDAgKzEsODUg
QEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGNoYXJzZXQ9dXRmLTg+
Cis8dGl0bGU+Q2FsZW5kYXIgUGlja2VyIHRlc3Q8L3RpdGxlPgorPHN0eWxlPgoraWZyYW1lIHsK
KyAgICB6LWluZGV4OiAyMTQ3NDgzNjQ3OworLyogICAgcG9zaXRpb246IGFic29sdXRlOyovCisg
ICAgYmFja2dyb3VuZC1jb2xvcjogI2RkZWVmZjsKKyAgICBib3JkZXI6IHNvbGlkIDJweCAjODg5
OWFhOworICAgIGJvcmRlci1yYWRpdXM6IDRweDsKKyAgICB3aWR0aDogMjE2cHg7CisvKiAgICBo
ZWlnaHQ6IDIxNnB4OyovCisgICAgYm94LXNoYWRvdzogNHB4IDRweCA0cHggI2NjYzsKKyAgICBv
cGFjaXR5OiAwOworfQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorCis8ZGl2PjxpbnB1dCB0
eXBlPWRhdGUgaWQ9ZGF0ZT48L2Rpdj4KKzxpZnJhbWU+PC9pZnJhbWU+CisKKzxvbCBpZD1jb25z
b2xlIHN0eWxlPSJoZWlnaHQ6MjAwMHB4OyI+Cis8L29sPgorCis8c2NyaXB0PgordmFyIGZyYW1l
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lmcmFtZScpWzBdOwordmFyIGRvYyA9
IGZyYW1lLmNvbnRlbnREb2N1bWVudDsKK2RvYy5kb2N1bWVudEVsZW1lbnQuaW5uZXJIVE1MID0g
JzxoZWFkPjwvaGVhZD48Ym9keT48ZGl2IGlkPW1haW4+TG9hZGluZy4uLjwvZGl2PjwvYm9keT4n
OwordmFyIGxpbmsgPSBkb2MuY3JlYXRlRWxlbWVudCgnbGluaycpOworbGluay5yZWwgPSAnc3R5
bGVzaGVldCc7CitsaW5rLmhyZWYgPSAnY2FsZW5kYXJQaWNrZXIuY3NzPycgKyAobmV3IERhdGUo
KSkuZ2V0VGltZSgpOworZG9jLmhlYWQuYXBwZW5kQ2hpbGQobGluayk7Cit2YXIgc2NyaXB0ID0g
ZG9jLmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOworc2NyaXB0LnNyYyA9ICdjYWxlbmRhclBpY2tl
ci5qcz8nICsgKG5ldyBEYXRlKCkpLmdldFRpbWUoKTsKK2RvYy5ib2R5LmFwcGVuZENoaWxkKHNj
cmlwdCk7CisKK3ZhciBhcmdzX2VuID0geworICAgIG1vbnRoTGFiZWxzIDogWydKYW51YXJ5Jywg
J0ZlYnJ1YXJ5JywgJ01hcmNoJywgJ0FwcmlsJywgJ01heScsICdKdW5lJywKKyAgICAnSnVseScs
ICdBdWd1c3QnLCAnU2VwdGVtYmVyJywgJ09jdG9iZXInLCAnTm92ZW1iZXInLCAnRGVjZW1iZXIn
XSwKKyAgICBkYXlMYWJlbHMgOiBbJ1N1bicsICdNb24nLCAnVHVlJywgJ1dlZCcsICdUaHUnLCAn
RnJpJywgJ1NhdCddLAorICAgIHRvZGF5TGFiZWwgOiAnVG9kYXknLAorICAgIGNsZWFyTGFiZWwg
OiAnQ2xlYXInLAorICAgIGNhbmNlbExhYmVsIDogJ0NhbmNlbCcsCisgICAgd2Vla1N0YXJ0RGF5
IDogMCwKKyAgICBzdGVwIDogMSwKKyAgICBtYXggOiAnMjAxMTAtMTItMzEnLAorfTsKK3ZhciBh
cmdzX2phID0geworICAgIG1vbnRoTGFiZWxzIDogWycx5pyIJywgJzLmnIgnLCAnM+aciCcsICc0
5pyIJywgJzXmnIgnLCAnNuaciCcsCisgICAgJzfmnIgnLCAnOOaciCcsICc55pyIJywgJzEw5pyI
JywgJzEx5pyIJywgJzEy5pyIJ10sCisgICAgZGF5TGFiZWxzIDogWyfml6UnLCAn5pyIJywgJ+eB
qycsICfmsLQnLCAn5pyoJywgJ+mHkScsICflnJ8nXSwKKyAgICB0b2RheUxhYmVsIDogJ+S7iuaX
pScsCisgICAgY2xlYXJMYWJlbCA6ICfjgq/jg6rjgqInLAorICAgIGNhbmNlbExhYmVsIDogJ+WP
luOCiua2iOOBlycsCisgICAgd2Vla1N0YXJ0RGF5IDogMCwKKyAgICBzdGVwIDogMSwKKyAgICBt
YXggOiAnMjAxMS0wMy0xNScsCit9Oworc2V0VGltZW91dChmdW5jdGlvbigpIHsgZnJhbWUuY29u
dGVudFdpbmRvdy5wb3N0TWVzc2FnZShKU09OLnN0cmluZ2lmeShhcmdzX2VuKSwgIioiKTsgfSwg
MTAwKTsKKworCitmcmFtZS5hZGRFdmVudExpc3RlbmVyKCd0ZXh0SW5wdXQnLCBoYW5kbGVUZXh0
SW5wdXQpOworZnJhbWUuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBoYW5kbGVBYm9ydCk7CisK
K2Z1bmN0aW9uIGxvZyhzdHIpIHsKKyAgICB2YXIgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J2xpJyk7CisgICAgZS5pbm5lclRleHQgPSBzdHI7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ2NvbnNvbGUnKS5hcHBlbmRDaGlsZChlKTsKK30KKworZnVuY3Rpb24gaGFuZGxlVGV4dElu
cHV0KGV2ZW50KSB7CisgICAgbG9nKCd0ZXh0SW5wdXQgZGF0ZT0nICsgZXZlbnQuZGF0YSk7Cisg
ICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RhdGUnKS52YWx1ZSA9IGV2ZW50LmRhdGE7Cit9
CisKK2Z1bmN0aW9uIGhhbmRsZUFib3J0KGV2ZW50KSB7CisgICAgbG9nKCdhYm9ydCcpOworfQor
Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBiY2M1ZDkwMzk5ZmM0YWYxZDE1YmVj
MjQ1MjIzNjE4MzJhYjVmZmE2Li45YjU2NGJmMDdlOTI3YmY2ZmM3MjM5N2E1YzE5ZWNiYmZkMGQ0
YjM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC01NjQ0LDYgKzU2NDQsOCBAQAogCQlGNEVBRjRBRjEwQzc0MkIxMDA5MTAwRDMg
LyogT3BlblR5cGVTYW5pdGl6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEY0RUFGNEFEMTBDNzQyQjEwMDkxMDBEMyAvKiBPcGVuVHlwZVNhbml0aXpl
ci5oICovOyB9OwogCQlGNTE0MkM2OTEyM0YxMkIwMDBGNUJENEMgLyogTG9jYWxpemVkTnVtYmVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTE0MkM2
ODEyM0YxMkIwMDBGNUJENEMgLyogTG9jYWxpemVkTnVtYmVyLmggKi87IH07CiAJCUY1MTQyQzZC
MTIzRjEyQzUwMEY1QkQ0QyAvKiBMb2NhbGl6ZWROdW1iZXJOb25lLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MTQyQzZBMTIzRjEyQzUwMEY1QkQ0
QyAvKiBMb2NhbGl6ZWROdW1iZXJOb25lLmNwcCAqLzsgfTsKKwkJRjUyM0M5QTgxMkZGQjc3QzAw
MUU0NTFCIC8qIENhbGVuZGFyUGlja2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNDOUE3MTJGRkI3N0MwMDFFNDUxQiAvKiBDYWxlbmRhclBp
Y2tlci5jcHAgKi87IH07CisJCUY1MjNDOUFBMTJGRkI3RUYwMDFFNDUxQiAvKiBDYWxlbmRhclBp
Y2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUy
M0M5QTkxMkZGQjdFRjAwMUU0NTFCIC8qIENhbGVuZGFyUGlja2VyLmggKi87IH07CiAJCUY1NUIz
REFEMTI1MUYxMkQwMDNFRjI2OSAvKiBCYXNlVGV4dElucHV0VHlwZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTVCM0Q3OTEyNTFGMTJEMDAzRUYy
NjkgLyogQmFzZVRleHRJbnB1dFR5cGUuY3BwICovOyB9OwogCQlGNTVCM0RBRTEyNTFGMTJEMDAz
RUYyNjkgLyogQmFzZVRleHRJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEY1NUIzRDdBMTI1MUYxMkQwMDNFRjI2OSAvKiBCYXNlVGV4dElu
cHV0VHlwZS5oICovOyB9OwogCQlGNTVCM0RBRjEyNTFGMTJEMDAzRUYyNjkgLyogQnV0dG9uSW5w
dXRUeXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEY1NUIzRDdCMTI1MUYxMkQwMDNFRjI2OSAvKiBCdXR0b25JbnB1dFR5cGUuY3BwICovOyB9OwpA
QCAtMTIwMjAsNiArMTIwMjIsOCBAQAogCQlGNEVBRjRBRDEwQzc0MkIxMDA5MTAwRDMgLyogT3Bl
blR5cGVTYW5pdGl6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gT3BlblR5
cGVTYW5pdGl6ZXIuaDsgcGF0aCA9IG9wZW50eXBlL09wZW5UeXBlU2FuaXRpemVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY1MTQyQzY4MTIzRjEyQjAwMEY1QkQ0QyAvKiBMb2Nh
bGl6ZWROdW1iZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9jYWxpemVk
TnVtYmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY1MTQyQzZBMTIzRjEyQzUw
MEY1QkQ0QyAvKiBMb2NhbGl6ZWROdW1iZXJOb25lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IExvY2FsaXplZE51bWJlck5vbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlGNTIzQzlBNzEyRkZCNzdDMDAxRTQ1MUIgLyogQ2FsZW5kYXJQaWNrZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ2FsZW5kYXJQaWNrZXIu
Y3BwOyBwYXRoID0gQ2FsZW5kYXJQaWNrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGNTIzQzlBOTEyRkZCN0VGMDAxRTQ1MUIgLyogQ2FsZW5kYXJQaWNrZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ2FsZW5kYXJQaWNrZXIuaDsgcGF0aCA9IENhbGVu
ZGFyUGlja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY1MjNEMjNCMDJERTQz
OTYwMTg2MzVDQSAvKiBIVE1MRG9jdW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTERvY3VtZW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1MjNEMjND
MDJERTQzOTYwMTg2MzVDQSAvKiBIVE1MRG9jdW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTERvY3VtZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNTIzRDIzRTAy
REU0Mzk2MDE4NjM1Q0EgLyogSFRNTEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTEVsZW1lbnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKQEAgLTEzNzQ1
LDYgKzEzNzQ5LDggQEAKIAkJNjU2NTgwRUMwOUQxMkIyMDAwMEU2MUQ3IC8qIERlcml2ZWQgU291
cmNlcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJRjUy
M0M5QTcxMkZGQjc3QzAwMUU0NTFCIC8qIENhbGVuZGFyaWNrZXIuY3BwICovLAorCQkJCUY1MjND
OUE5MTJGRkI3RUYwMDFFNDUxQiAvKiBDYWxlbmRhclBpY2tlci5oICovLAogCQkJCTY1NjU4MUFD
MDlEMTRFRTYwMDBFNjFENyAvKiBDaGFyc2V0RGF0YS5jcHAgKi8sCiAJCQkJRTQwNkYzRkIxMTk4
MzA3RDAwOUQ1OUQ2IC8qIENvbG9yRGF0YS5jcHAgKi8sCiAJCQkJNjU2NTgxNDQwOUQxMzA0MzAw
MEU2MUQ3IC8qIENTU0dyYW1tYXIuY3BwICovLApAQCAtMTk2MDYsNiArMTk2MTIsNyBAQAogCQkJ
CUJDRDUzMzY0MEVENjg0ODkwMDg4NzQ2OCAvKiBDYWNoZWRTY3JpcHRTb3VyY2VQcm92aWRlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkNCMTZDMjgwOTc5QzNCRDAwNDY3NzQxIC8qIENhY2hlZFhT
TFN0eWxlU2hlZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OTUwMDgyNDVFNTkwMDFFOUFC
QyAvKiBDYWNoZVBvbGljeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRjUyM0M5QUExMkZGQjdFRjAw
MUU0NTFCIC8qIENhbGVuZGFyUGlja2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RTRFOTFBRDEw
RjdGQjMxMDBBMjc3OUMgLyogQ2FudmFzQ29udGV4dEF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTQ5NDg0RkMyMTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNHcmFkaWVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNDk0ODRGQzUxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1BhdHRlcm4u
aCBpbiBIZWFkZXJzICovLApAQCAtMjI4ODYsNiArMjI4OTMsNyBAQAogCQkJCUQwRDE0MUIyMTJC
MkJGNTIwMEUzOTYyMCAvKiBDYWNoZWRSZXNvdXJjZVJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQkNCMTZDMjMwOTc5QzNCRDAwNDY3NzQxIC8qIENhY2hlZFNjcmlwdC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCQ0IxNkMyNzA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVkWFNMU3R5bGVT
aGVldC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGNTIzQzlBODEyRkZCNzdDMDAxRTQ1MUIgLyog
Q2FsZW5kYXJQaWNrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNkU0RTkxQUMxMEY3RkIzMTAw
QTI3NzlDIC8qIENhbnZhc0NvbnRleHRBdHRyaWJ1dGVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTQ5NDg0RkMxMTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNHcmFkaWVudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk0OTQ4NEZDNDEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFzUGF0dGVybi5jcHAg
aW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9odG1sLmNzcyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9odG1sLmNzcwppbmRleCAwZjEzZmNiNzM5NDk3NzJjNzIzYmRh
OTBmODkwMmY5MDUxNmVjZjIwLi42YjJlYjg4NDBhOTE4ZGM1NGUyMzM5ZTk4M2FhNDUxMDc0MDAw
ODZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvaHRtbC5jc3MKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL2h0bWwuY3NzCkBAIC02NDAsNiArNjQwLDMxIEBAIG91dHB1dCB7CiAgICAg
bGVmdDogMnB4OyAvKiA8b3V0ZXItYXJyb3cgcG9zaXRpb24+ICsgPG1lc3NhZ2UgYm9yZGVyIHdp
ZHRoPiAtIDxib3JkZXIgYm94IHdpZHRoIG9mIG91dGVyLWFycm93PiAgKi8KIH0KIAorLyogQ2Fs
ZW5kYXIgcGlja2VyICovCisKKzo6LXdlYmtpdC1kaWFsb2ctYmFja2dyb3VuZCB7CisgICAgei1p
bmRleDogMjE0NzQ4MzY0NjsKKyAgICB3aWR0aDogMTAwJTsKKyAgICBoZWlnaHQ6IDEwMCU7Cisg
ICAgcG9zaXRpb246IGZpeGVkOworICAgIHRvcDogMDsKKyAgICBsZWZ0OiAwOworICAgIGJhY2tn
cm91bmQtY29sb3I6IGJsYWNrOworICAgIG9wYWNpdHk6IDAuMTsKK30KKworOjotd2Via2l0LWRp
YWxvZy1mcmFtZSB7CisgICAgei1pbmRleDogMjE0NzQ4MzY0NzsKKyAgICBwb3NpdGlvbjogYWJz
b2x1dGU7CisgICAgYmFja2dyb3VuZC1jb2xvcjogI2RkZWVmZjsKKyAgICBib3JkZXI6IHNvbGlk
IDJweCAjODg5OWFhOworICAgIGJvcmRlci1yYWRpdXM6IDRweDsKKyAgICB3aWR0aDogMjE2cHg7
CisgICAgaGVpZ2h0OiAyMTZweDsKKyAgICBib3gtc2hhZG93OiA4cHggOHB4IDhweCBncmF5Owor
ICAgIG9wYWNpdHk6IDA7Cit9CisKIC8qIG1ldGVyICovCiAKIG1ldGVyIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvRGF0ZUlucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0RhdGVJbnB1dFR5cGUuY3BwCmluZGV4IDM0MDlkM2I0ZjhlN2FlYjJjNjg4NzlkMDY1MGM4
N2Q2M2M5ODBlZTMuLjcwYzJiNWRmYzdhMmNlOWZmMmY0Yzg3NzYyMzBhZjE1MGJmODIwZWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRGF0ZUlucHV0VHlwZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9EYXRlSW5wdXRUeXBlLmNwcApAQCAtMzEsOSArMzEsMTggQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJEYXRlSW5wdXRUeXBlLmgiCiAKKyNpbmNsdWRl
ICJDYWxlbmRhclBpY2tlci5oIgorI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkRh
dGVDb21wb25lbnRzLmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJIVE1MSUZyYW1l
RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MU2NyaXB0RWxlbWVudC5oIgorI2luY2x1ZGUgIkludFJl
Y3QuaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmgiCisjaW5jbHVkZSAiVGV4dEV2ZW50LmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDMsNiArNTIsMTEgQEAgdXNpbmcgbmFt
ZXNwYWNlIEhUTUxOYW1lczsKIHN0YXRpYyBjb25zdCBkb3VibGUgZGF0ZURlZmF1bHRTdGVwID0g
MS4wOwogc3RhdGljIGNvbnN0IGRvdWJsZSBkYXRlU3RlcFNjYWxlRmFjdG9yID0gODY0MDAwMDAu
MDsKIAorRGF0ZUlucHV0VHlwZTo6RGF0ZUlucHV0VHlwZShIVE1MSW5wdXRFbGVtZW50KiBlbGVt
ZW50KQorICAgIDogQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlKGVsZW1lbnQpCit7Cit9CisKIFBh
c3NPd25QdHI8SW5wdXRUeXBlPiBEYXRlSW5wdXRUeXBlOjpjcmVhdGUoSFRNTElucHV0RWxlbWVu
dCogZWxlbWVudCkKIHsKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERhdGVJbnB1dFR5cGUoZWxl
bWVudCkpOwpAQCAtOTEsNCArMTA1LDE3MSBAQCBib29sIERhdGVJbnB1dFR5cGU6OnNldE1pbGxp
c2Vjb25kVG9EYXRlQ29tcG9uZW50cyhkb3VibGUgdmFsdWUsIERhdGVDb21wb25lbnRzKgogICAg
IHJldHVybiBkYXRlLT5zZXRNaWxsaXNlY29uZHNTaW5jZUVwb2NoRm9yRGF0ZSh2YWx1ZSk7CiB9
CiAKKy8vIEZJWE1FOiBzaG91bGQgYmUgbW92ZWQgdG8gV2ViQ29yZS9odG1sL3NoYWRvdy8KK2Ns
YXNzIERpYWxvZ0JhY2tncm91bmRFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50IHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gY3JlYXRlKERhdGVJbnB1dFR5
cGUqIGlucHV0VHlwZSwgRG9jdW1lbnQqIGRvYykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgRGlhbG9nQmFja2dyb3VuZEVsZW1lbnQoaW5wdXRUeXBlLCBkb2MpKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgRGlhbG9nQmFja2dyb3VuZEVsZW1lbnQoRGF0ZUlucHV0VHlwZSog
aW5wdXRUeXBlLCBEb2N1bWVudCogZG9jKQorICAgICAgICA6IEhUTUxFbGVtZW50KGRpdlRhZywg
ZG9jKQorICAgICAgICAsIG1faW5wdXRUeXBlKGlucHV0VHlwZSkgeyB9CisKKyAgICB2aXJ0dWFs
IGNvbnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIHBzZXVkb0lkLCAoIi13
ZWJraXQtZGlhbG9nLWJhY2tncm91bmQiKSk7CisgICAgICAgIHJldHVybiBwc2V1ZG9JZDsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQp
CisgICAgeworICAgICAgICBpZiAoZXZlbnQtPmlzTW91c2VFdmVudCgpKSB7CisgICAgICAgICAg
ICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAgIGlmIChldmVudC0+dHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50KQorICAgICAgICAgICAgICAgIG1faW5wdXRU
eXBlLT5jbG9zZURpYWxvZygpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIEhUTUxFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKKyAgICB9CisKKyAg
ICBEYXRlSW5wdXRUeXBlKiBtX2lucHV0VHlwZTsKK307CisKKy8vIEZJWE1FOiBzaG91bGQgYmUg
bW92ZWQgdG8gV2ViQ29yZS9odG1sL3NoYWRvdy8KK2NsYXNzIElGcmFtZVdpdGhQc2V1ZG9JZCA6
IHB1YmxpYyBIVE1MSUZyYW1lRWxlbWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8SUZyYW1lV2l0aFBzZXVkb0lkPiBjcmVhdGUoRGF0ZUlucHV0VHlwZSogaW5wdXRUeXBlLCBE
b2N1bWVudCogZG9jdW1lbnQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElG
cmFtZVdpdGhQc2V1ZG9JZChpbnB1dFR5cGUsIGRvY3VtZW50KSk7CisgICAgfQorCitwcml2YXRl
OgorICAgIElGcmFtZVdpdGhQc2V1ZG9JZChEYXRlSW5wdXRUeXBlKiBpbnB1dFR5cGUsIERvY3Vt
ZW50KiBkb2N1bWVudCkKKyAgICAgICAgOiBIVE1MSUZyYW1lRWxlbWVudChpZnJhbWVUYWcsIGRv
Y3VtZW50KQorICAgICAgICAsIG1faW5wdXRUeXBlKGlucHV0VHlwZSkgeyB9OworCisgICAgdmly
dHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHNoYWRvd1BzZXVkb0lkKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBwc2V1ZG9JZCwg
KCItd2Via2l0LWRpYWxvZy1mcmFtZSIpKTsKKyAgICAgICAgcmV0dXJuIHBzZXVkb0lkOworICAg
IH0KKworICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkK
KyAgICB7CisgICAgICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS50ZXh0SW5w
dXRFdmVudCkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJ0ZXh0SW5wdXRcbiIpOwor
ICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgICAgICBtX2lu
cHV0VHlwZS0+Y2xvc2VEaWFsb2dBbmRTZXRWYWx1ZShzdGF0aWNfY2FzdDxUZXh0RXZlbnQqPihl
dmVudCktPmRhdGEoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
aWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmFib3J0RXZlbnQpIHsKKyAgICAgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiY2FuY2VsXG4iKTsKKyAgICAgICAgICAgIGV2ZW50LT5zZXRE
ZWZhdWx0SGFuZGxlZCgpOworICAgICAgICAgICAgbV9pbnB1dFR5cGUtPmNsb3NlRGlhbG9nKCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgSFRNTElGcmFtZUVsZW1l
bnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOworICAgIH0KKworICAgIERhdGVJbnB1dFR5
cGUqIG1faW5wdXRUeXBlOworfTsKKworc3RhdGljIHZvaWQgYnVpbGRQaWNrZXJEb2N1bWVudChI
VE1MSUZyYW1lRWxlbWVudCogZnJhbWUpCit7CisgICAgZnJhbWUtPmNvbnRlbnRXaW5kb3coKS0+
Zm9jdXMoKTsKKyAgICBEb2N1bWVudCogZGlhbG9nRG9jdW1lbnQgPSBmcmFtZS0+Y29udGVudERv
Y3VtZW50KCk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgU3RyaW5nIHN0eWxlKGNh
bGVuZGFyUGlja2VyQ3NzLCBzaXplb2YoY2FsZW5kYXJQaWNrZXJDc3MpKTsKKyAgICBzdGF0aWNf
Y2FzdDxIVE1MRWxlbWVudCo+KGRpYWxvZ0RvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKSktPnNl
dElubmVySFRNTCgiPGhlYWQ+PHN0eWxlPiIgKyBzdHlsZSArICI8L3N0eWxlPjwvaGVhZD48Ym9k
eT48ZGl2IGlkPW1haW4+TG9hZGluZy4uLjwvZGl2PjwvYm9keT4iLCBlYyk7CisgICAgUmVmUHRy
PEhUTUxTY3JpcHRFbGVtZW50PiBzY3JpcHQgPSBIVE1MU2NyaXB0RWxlbWVudDo6Y3JlYXRlKHNj
cmlwdFRhZywgZGlhbG9nRG9jdW1lbnQsIGZhbHNlKTsKKyAgICBTdHJpbmcgc2NyaXB0U291cmNl
KGNhbGVuZGFyUGlja2VySnMsIHNpemVvZihjYWxlbmRhclBpY2tlckpzKSk7CisgICAgc2NyaXB0
LT5zZXRUZXh0KHNjcmlwdFNvdXJjZSk7CisgICAgZGlhbG9nRG9jdW1lbnQtPmJvZHkoKS0+YXBw
ZW5kQ2hpbGQoc2NyaXB0LnJlbGVhc2UoKSwgZWMpOworfQorCitzdGF0aWMgdm9pZCBzZW5kTWVz
c2FnZShIVE1MSUZyYW1lRWxlbWVudCogZnJhbWUsIERPTVdpbmRvdyogd2luZG93LCBIVE1MSW5w
dXRFbGVtZW50KiBlbGVtZW50KQoreworICAgIERhdGVDb21wb25lbnRzIGRhdGU7CisgICAgZGF0
ZS5zZXRNaWxsaXNlY29uZHNTaW5jZUVwb2NoRm9yRGF0ZShlbGVtZW50LT5taW5pbXVtKCkpOwor
ICAgIFN0cmluZyBtaW5TdHJpbmcgPSBkYXRlLnRvU3RyaW5nKCk7CisgICAgZGF0ZS5zZXRNaWxs
aXNlY29uZHNTaW5jZUVwb2NoRm9yRGF0ZShlbGVtZW50LT5tYXhpbXVtKCkpOworICAgIFN0cmlu
ZyBtYXhTdHJpbmcgPSBkYXRlLnRvU3RyaW5nKCk7CisgICAgZG91YmxlIHN0ZXA7CisgICAgU3Ry
aW5nIHN0ZXBTdHJpbmcgPSBlbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKHN0ZXBBdHRyKTsKKyAg
ICBpZiAoc3RlcFN0cmluZy5pc0VtcHR5KCkgfHwgIWVsZW1lbnQtPmdldEFsbG93ZWRWYWx1ZVN0
ZXAoJnN0ZXApKQorICAgICAgICBzdGVwU3RyaW5nID0gIjEiOworCisgICAgLy8gRklYTUU6IEJ1
aWxkIHdpdGggbG9jYWxpemVkIGxhYmVscy4KKyAgICBTdHJpbmcgbWVzc2FnZSA9IFN0cmluZzo6
Zm9ybWF0KAorICAgICAgICAie1wibW9udGhMYWJlbHNcIjpbXCJKYW51YXJ5XCIsIFwiRmVicnVh
cnlcIiwgXCJNYXJjaFwiLCBcIkFwcmlsXCIsIFwiTWF5XCIsIFwiSnVuZVwiLCAiCisgICAgICAg
ICJcIkp1bHlcIiwgXCJBdWd1c3RcIiwgXCJTZXB0ZW1iZXJcIiwgXCJPY3RvYmVyXCIsIFwiTm92
ZW1iZXJcIiwgXCJEZWNlbWJlclwiXSwiCisgICAgICAgICJcImRheUxhYmVsc1wiOltcIk1vblwi
LCBcIlR1ZVwiLCBcIldlZFwiLCBcIlRodVwiLCBcIkZyaVwiLCBcIlNhdFwiLCBcIlN1blwiXSwi
CisgICAgICAgICJcImNhbmNlbExhYmVsXCI6XCJDYW5jZWxcIiwiCisgICAgICAgICJcImNsZWFy
TGFiZWxcIjpcIkNsZWFyXCIsIgorICAgICAgICAiXCJ0b2RheUxhYmVsXCI6XCJUb2RheVwiLCIK
KyAgICAgICAgIlwicmVxdWlyZWRcIjolcywiCisgICAgICAgICJcIm1pblwiOlwiJXNcIiwiCisg
ICAgICAgICJcIm1heFwiOlwiJXNcIiwiCisgICAgICAgICJcInN0ZXBcIjpcIiVzXCIsIgorICAg
ICAgICAiXCJjdXJyZW50VmFsdWVcIjpcIiVzXCIiCisgICAgICAgICJ9IiwKKyAgICAgICAgZWxl
bWVudC0+cmVxdWlyZWQoKSA/ICJ0cnVlIiA6ICJmYWxzZSIsCisgICAgICAgIG1pblN0cmluZy51
dGY4KCkuZGF0YSgpLAorICAgICAgICBtYXhTdHJpbmcudXRmOCgpLmRhdGEoKSwKKyAgICAgICAg
c3RlcFN0cmluZy51dGY4KCkuZGF0YSgpLAorICAgICAgICBlbGVtZW50LT52YWx1ZSgpLnV0Zjgo
KS5kYXRhKCkpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGZyYW1lLT5jb250ZW50
V2luZG93KCktPnBvc3RNZXNzYWdlKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKG1lc3Nh
Z2UpLCBzdGF0aWNfY2FzdDxNZXNzYWdlUG9ydCo+KDApLCAiKiIsIHdpbmRvdywgZWMpOworfQor
Cit2b2lkIERhdGVJbnB1dFR5cGU6OmhhbmRsZU1vdXNlRG93bkV2ZW50KE1vdXNlRXZlbnQqIGV2
ZW50KQoreworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYWRkIGEgYnV0dG9uIHRvIG9wZW4gYSBj
YWxlbmRlciBwaWNrZXIuCisgICAgLy8gWWF5ISBNYWtpbmcgUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lIG1vcmUgY29tcGxleCEhIQorCisgICAgQVNTRVJUKCFtX3BpY2tlckZyYW1lKTsKKyAg
ICAvLyBTaG91bGQgYmUgbW92ZWQgdG8gYSByZW5kZXJlcj8KKyAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKKyAgICBEb2N1bWVudCogZG9jID0gZWxlbWVudCgpLT5kb2N1bWVudCgpOworICAgIGV2
ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworCisgICAgTm9kZSogc2hhZG93Um9vdCA9IGVsZW1l
bnQoKS0+c2hhZG93Um9vdCgpOworICAgIEFTU0VSVChzaGFkb3dSb290KTsKKyAgICBtX2RpYWxv
Z0JhY2tncm91bmQgPSBEaWFsb2dCYWNrZ3JvdW5kRWxlbWVudDo6Y3JlYXRlKHRoaXMsIGRvYyk7
CisgICAgc2hhZG93Um9vdC0+YXBwZW5kQ2hpbGQobV9kaWFsb2dCYWNrZ3JvdW5kLmdldCgpLCBl
Yyk7CisgICAgbV9waWNrZXJGcmFtZSA9IElGcmFtZVdpdGhQc2V1ZG9JZDo6Y3JlYXRlKHRoaXMs
IGRvYyk7CisgICAgc2hhZG93Um9vdC0+YXBwZW5kQ2hpbGQobV9waWNrZXJGcmFtZS5nZXQoKSwg
ZWMpOworICAgIEludFJlY3QgaW5wdXRCb3VuZFJlY3QgPSBlbGVtZW50KCktPmdldFJlY3QoKTsK
KyAgICBTdHJpbmcgc3R5bGVWYWx1ZSA9ICJ0b3A6IiArIFN0cmluZzo6bnVtYmVyKGlucHV0Qm91
bmRSZWN0Lm1heFkoKSkgKyAicHg7IjsKKyAgICBtX3BpY2tlckZyYW1lLT5zZXRBdHRyaWJ1dGUo
c3R5bGVBdHRyLCBzdHlsZVZhbHVlKTsKKworICAgIGJ1aWxkUGlja2VyRG9jdW1lbnQobV9waWNr
ZXJGcmFtZS5nZXQoKSk7CisgICAgc2VuZE1lc3NhZ2UobV9waWNrZXJGcmFtZS5nZXQoKSwgZG9j
LT5kb21XaW5kb3coKSwgZWxlbWVudCgpKTsKK30KKwordm9pZCBEYXRlSW5wdXRUeXBlOjpjcmVh
dGVTaGFkb3dTdWJ0cmVlKCkKK3sKKyAgICBtX3Jvb3QgPSBIVE1MRWxlbWVudDo6Y3JlYXRlKHNw
YW5UYWcsIGVsZW1lbnQoKS0+ZG9jdW1lbnQoKSk7CisgICAgZWxlbWVudCgpLT5zZXRTaGFkb3dS
b290KG1fcm9vdCk7Cit9CisKK3ZvaWQgRGF0ZUlucHV0VHlwZTo6Y2xvc2VEaWFsb2coKQorewor
ICAgIEFTU0VSVChtX3BpY2tlckZyYW1lKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAg
ICBlbGVtZW50KCktPnNoYWRvd1Jvb3QoKS0+cmVtb3ZlQ2hpbGQobV9kaWFsb2dCYWNrZ3JvdW5k
LmdldCgpLCBlYyk7CisgICAgZWxlbWVudCgpLT5zaGFkb3dSb290KCktPnJlbW92ZUNoaWxkKG1f
cGlja2VyRnJhbWUuZ2V0KCksIGVjKTsKKyAgICBtX2RpYWxvZ0JhY2tncm91bmQgPSAwOworICAg
IG1fcGlja2VyRnJhbWUgPSAwOworfQorCit2b2lkIERhdGVJbnB1dFR5cGU6OmNsb3NlRGlhbG9n
QW5kU2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBjbG9zZURpYWxvZygpOwor
ICAgIGVsZW1lbnQoKS0+c2V0VmFsdWVGb3JVc2VyKHZhbHVlKTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9EYXRlSW5wdXRUeXBl
LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0RhdGVJbnB1dFR5cGUuaAppbmRleCA5NjVkOWVhYmEx
NDdhYzUyMWJmMWY1N2ViZjYyNDVlNzZmMTg3MDNkLi4wMGQzZTg5NGFmYzNmOTQ3OTgyM2Y2MmI0
NTk4YmE5Y2E0ZTIyYjI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0RhdGVJbnB1
dFR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0RhdGVJbnB1dFR5cGUuaApAQCAtMzUs
MTIgKzM1LDE3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSFRNTEVsZW1lbnQ7
CitjbGFzcyBIVE1MSUZyYW1lRWxlbWVudDsKKwogY2xhc3MgRGF0ZUlucHV0VHlwZSA6IHB1Ymxp
YyBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3du
UHRyPElucHV0VHlwZT4gY3JlYXRlKEhUTUxJbnB1dEVsZW1lbnQqKTsKKyAgICB2b2lkIGNsb3Nl
RGlhbG9nKCk7CisgICAgdm9pZCBjbG9zZURpYWxvZ0FuZFNldFZhbHVlKGNvbnN0IFN0cmluZyYp
OwogCiBwcml2YXRlOgotICAgIERhdGVJbnB1dFR5cGUoSFRNTElucHV0RWxlbWVudCogZWxlbWVu
dCkgOiBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUoZWxlbWVudCkgeyB9CisgICAgRGF0ZUlucHV0
VHlwZShIVE1MSW5wdXRFbGVtZW50Kik7CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcm
IGZvcm1Db250cm9sVHlwZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgZG91YmxlIG1pbmltdW0oKSBj
b25zdDsKICAgICB2aXJ0dWFsIGRvdWJsZSBtYXhpbXVtKCkgY29uc3Q7CkBAIC00OSw2ICs1NCwx
MiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBwYXJzZWRTdGVwVmFsdWVTaG91bGRCZUlu
dGVnZXIoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFyc2VUb0RhdGVDb21wb25lbnRzSW50
ZXJuYWwoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgsIERhdGVDb21wb25lbnRzKikgY29u
c3Q7CiAgICAgdmlydHVhbCBib29sIHNldE1pbGxpc2Vjb25kVG9EYXRlQ29tcG9uZW50cyhkb3Vi
bGUsIERhdGVDb21wb25lbnRzKikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZU1vdXNl
RG93bkV2ZW50KE1vdXNlRXZlbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlU2hhZG93U3Vi
dHJlZSgpOworCisgICAgUmVmUHRyPEhUTUxFbGVtZW50PiBtX3Jvb3Q7CisgICAgUmVmUHRyPEhU
TUxFbGVtZW50PiBtX2RpYWxvZ0JhY2tncm91bmQ7CisgICAgUmVmUHRyPEhUTUxJRnJhbWVFbGVt
ZW50PiBtX3BpY2tlckZyYW1lOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSUZyYW1lRWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxJRnJhbWVFbGVtZW50LmNwcAppbmRleCAwNmFmMDkzNmI3OGRjYjk5
ZjcyOTdiNTEzZGQxNzgwNjNiM2U1MzMzLi5mZDk0ODY3OWZlNmJkMGRkYTIyMjkxNTZjZjhlZjJj
YzkyNDcyMGNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJRnJhbWVFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJRnJhbWVFbGVtZW50LmNwcApA
QCAtMzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBI
VE1MTmFtZXM7CiAKLWlubGluZSBIVE1MSUZyYW1lRWxlbWVudDo6SFRNTElGcmFtZUVsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQorSFRNTElG
cmFtZUVsZW1lbnQ6OkhUTUxJRnJhbWVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIERvY3VtZW50KiBkb2N1bWVudCkKICAgICA6IEhUTUxGcmFtZUVsZW1lbnRCYXNlKHRhZ05h
bWUsIGRvY3VtZW50KQogewogICAgIEFTU0VSVChoYXNUYWdOYW1lKGlmcmFtZVRhZykpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSUZyYW1lRWxlbWVudC5oIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MSUZyYW1lRWxlbWVudC5oCmluZGV4IDYxY2Q2YjY4ZWQ2NDhhMzIy
NTllZjQ1N2JlZTQ4ODA1NzMwZjM3MjYuLjEwYjUxOGY1ZWY1ZDEwOTQ3NjUyMDJjYWE5ZGM4Mjg4
ZmEyNTFhMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElGcmFtZUVsZW1l
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJRnJhbWVFbGVtZW50LmgKQEAgLTMy
LDkgKzMyLDEwIEBAIGNsYXNzIEhUTUxJRnJhbWVFbGVtZW50IDogcHVibGljIEhUTUxGcmFtZUVs
ZW1lbnRCYXNlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MSUZyYW1lRWxl
bWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCi1wcml2YXRl
OgorcHJvdGVjdGVkOgogICAgIEhUTUxJRnJhbWVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBEb2N1bWVudCopOwogCitwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYpIGNvbnN0OwogICAgIHZp
cnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbWFrZS1maWxlLWFycmF5cy5weSBiL1NvdXJjZS9XZWJDb3JlL21h
a2UtZmlsZS1hcnJheXMucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmZhNjY5YmYyMGFkMTE3Y2Y0MzQ5MDA1YWY5
ODZlOWRiYTEwOTBlNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL21ha2UtZmls
ZS1hcnJheXMucHkKQEAgLTAsMCArMSw3NyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENv
cHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworIyBVc2FnZTogbWFrZS1maWxlLWFycmF5cy5weSA8aGVhZGVyLWZpbGUt
bmFtZT4gPGNwcC1maWxlLW5hbWU+IDxpbnB1dC1maWxlPi4uLgorCitpbXBvcnQgb3MucGF0aAor
aW1wb3J0IHJlCitpbXBvcnQgc3lzCisKKworZGVmIG1ha2VfdmFyaWFibGVfbmFtZV9hbmRfcmVh
ZChmaWxlX25hbWUsIG9wZW5fZmxhZyk6CisgICAgcmVzdWx0ID0gcmUubWF0Y2gociIoXHcrKVwu
KFx3KykiLCBvcy5wYXRoLmJhc2VuYW1lKGZpbGVfbmFtZSkpCisgICAgaWYgbm90IHJlc3VsdDoK
KyAgICAgICAgcHJpbnQgIkludmFsaWQgaW5wdXQgZmlsZSBuYW1lOiIsIG9zLnBhdGguYmFzZW5h
bWUoZmlsZV9uYW1lKQorICAgICAgICBzeXMuZXhpdCgxKQorICAgIHByaW50ICJQcm9jZXNzaW5n
IiwgZmlsZV9uYW1lCisgICAgdmFyaWFibGVfbmFtZSA9IHJlc3VsdC5ncm91cCgxKVswXS5sb3dl
cigpICsgcmVzdWx0Lmdyb3VwKDEpWzE6XSArIHJlc3VsdC5ncm91cCgyKS5jYXBpdGFsaXplKCkK
KyAgICBmaWxlID0gb3BlbihmaWxlX25hbWUsIG9wZW5fZmxhZykKKyAgICBjb250ZW50ID0gZmls
ZS5yZWFkKCkKKyAgICBmaWxlLmNsb3NlKCkKKyAgICByZXR1cm4gKHZhcmlhYmxlX25hbWUsIGNv
bnRlbnQpCisKKworZGVmIG1haW4oKToKKyAgICBpZiBsZW4oc3lzLmFyZ3YpIDwgNDoKKyAgICAg
ICAgc3lzLmV4aXQoMSkKKworICAgIGhlYWRlcl9maWxlID0gb3BlbihzeXMuYXJndlsxXSwgInci
KQorICAgIGNwcF9maWxlID0gb3BlbihzeXMuYXJndlsyXSwgInciKQorICAgIGhlYWRlcl9maWxl
LndyaXRlKCJuYW1lc3BhY2UgV2ViQ29yZSB7XG4iKQorICAgIGNwcF9maWxlLndyaXRlKCJuYW1l
c3BhY2UgV2ViQ29yZSB7XG4iKQorCisgICAgZm9yIG5hbWUgaW4gc3lzLmFyZ3ZbMzpdOgorICAg
ICAgICAodmFyaWFibGVfbmFtZSwgY29udGVudCkgPSBtYWtlX3ZhcmlhYmxlX25hbWVfYW5kX3Jl
YWQobmFtZSwgInJiIikKKyAgICAgICAgc2l6ZSA9IGxlbihjb250ZW50KQorICAgICAgICBoZWFk
ZXJfZmlsZS53cml0ZSgiZXh0ZXJuIGNvbnN0IGNoYXIgJXNbJWRdO1xuIiAlICh2YXJpYWJsZV9u
YW1lLCBzaXplKSkKKyAgICAgICAgY3BwX2ZpbGUud3JpdGUoImV4dGVybiBjb25zdCBjaGFyICVz
WyVkXSA9IHtcbiIgJSAodmFyaWFibGVfbmFtZSwgc2l6ZSkpCisgICAgICAgIGZvciBpbmRleCBp
biByYW5nZShzaXplKToKKyAgICAgICAgICAgIGNwcF9maWxlLndyaXRlKCIlZCIgJSBvcmQoY29u
dGVudFtpbmRleF0pKQorICAgICAgICAgICAgY3BwX2ZpbGUud3JpdGUoIiwiIGlmIGluZGV4ICE9
IGxlbihjb250ZW50KSAtIDEgZWxzZSAifTtcbiIpCisgICAgICAgICAgICBpZiBpbmRleCAlIDIw
ID09IDE5OgorICAgICAgICAgICAgICAgIGNwcF9maWxlLndyaXRlKCJcbiIpCisgICAgICAgIGNw
cF9maWxlLndyaXRlKCJcbiIpCisKKyAgICBoZWFkZXJfZmlsZS53cml0ZSgifVxuIikKKyAgICBj
cHBfZmlsZS53cml0ZSgifVxuIikKKyAgICBoZWFkZXJfZmlsZS5jbG9zZSgpCisgICAgY3BwX2Zp
bGUuY2xvc2UoKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84707</attachid>
            <date>2011-03-04 01:01:35 -0800</date>
            <delta_ts>2012-02-15 23:10:53 -0800</delta_ts>
            <desc>WIP patch 5</desc>
            <filename>bug-53961-20110304180133.patch</filename>
            <type>text/plain</type>
            <size>61129</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODAyOTIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwMzM1ZjIzOWQ0OWE4NzA3
ZGY3ZjkzZDY0M2NjNTI1MWU4ZjYyNTAyLi5kNWUxZmRlOGYwZTFlZjdkYTFmM2JiMjRlNDIwNGNh
MjllODFhYmI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODkgQEAKKzIwMTEtMDItMjIgIEtlbnQg
VGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBhIGNhbGVuZGFyIHBpY2tlcgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTM5NjEKKworICAgICAg
ICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6
CisgICAgICAgICogUmVzb3VyY2VzL2NhbGVuZGFyUGlja2VyLmNzczogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUvaHRtbC9EYXRlSW5wdXRUeXBlLmguCisgICAgICAgIChib2R5KToKKyAgICAg
ICAgKCNtYWluKToKKyAgICAgICAgKC55ZWFyLXNlbGVjdG9yKToKKyAgICAgICAgKC5tb250aC1z
ZWxlY3Rvcik6CisgICAgICAgICguZGF5cy1hcmVhLWNvbnRhaW5lcik6CisgICAgICAgICguZGF5
cy1hcmVhKToKKyAgICAgICAgKC5kYXktbGFiZWwtY29udGFpbmVyKToKKyAgICAgICAgKC5kYXkt
bGFiZWwpOgorICAgICAgICAoLndlZWstY29udGFpbmVyKToKKyAgICAgICAgKC5kYXkpOgorICAg
ICAgICAoLmF2YWlsYWJsZSk6CisgICAgICAgICguYXZhaWxhYmxlLmRheS1zZWxlY3RlZCk6Cisg
ICAgICAgICgudW5hdmFpbGFibGUpOgorICAgICAgICAoLnVuYXZhaWxhYmxlLXVwKToKKyAgICAg
ICAgKC51bmF2YWlsYWJsZS1kb3duKToKKyAgICAgICAgKC51bmF2YWlsYWJsZS5kYXktc2VsZWN0
ZWQpOgorICAgICAgICAoLnRvZGF5LWJ1dHRvbik6CisgICAgICAgICguY2xlYXItYnV0dG9uKToK
KyAgICAgICAgKC5jYW5jZWwtYnV0dG9uKToKKyAgICAgICAgKiBSZXNvdXJjZXMvY2FsZW5kYXJQ
aWNrZXIuanM6IEFkZGVkLgorICAgICAgICAoaGFuZGxlTWVzc2FnZSk6CisgICAgICAgIChoYW5k
bGVBcmd1bWVudHNUaW1lb3V0KToKKyAgICAgICAgKGNyZWF0ZUVsZW1lbnQpOgorICAgICAgICAo
Z2V0QXJndW1lbnRFcnJvcik6CisgICAgICAgIChjcmVhdGVEYXRlRnJvbVN0cmluZyk6CisgICAg
ICAgIChpbml0aWFsaXplKToKKyAgICAgICAgKCk6CisgICAgICAgIChsYXlvdXQpOgorICAgICAg
ICAoc3RlcE1pc21hdGNoKToKKyAgICAgICAgKG91dE9mUmFuZ2UpOgorICAgICAgICAoaXNWYWxp
ZERhdGUpOgorICAgICAgICAocmVuZGVyTW9udGgpOgorICAgICAgICAobmF2aWdhdGVUb01vbnRo
KToKKyAgICAgICAgKG5hdmlnYXRlVG9Nb250aFdpdGhBbmltYXRpb24pOgorICAgICAgICAobW92
ZUluRGF5cyk6CisgICAgICAgIChoYW5kbGVZZWFyTW9udGhDaGFuZ2UpOgorICAgICAgICAobWF5
YmVTZXRQcmV2aW91c01vbnRoKToKKyAgICAgICAgKG1heWJlU2V0TmV4dE1vbnRoKToKKyAgICAg
ICAgKGhhbmRsZURheUNsaWNrKToKKyAgICAgICAgKGhhbmRsZU1vdXNlT3Zlcik6CisgICAgICAg
IChoYW5kbGVEYXlzQXJlYUtleSk6CisgICAgICAgICh1cGRhdGVTZWxlY3Rpb24pOgorICAgICAg
ICAoY3JlYXRlRGF0ZVN0cmluZyk6CisgICAgICAgIChoYW5kbGVUb2RheSk6CisgICAgICAgICho
YW5kbGVDbGVhcik6CisgICAgICAgIChzdWJtaXRWYWx1ZSk6CisgICAgICAgIChoYW5kbGVDYW5j
ZWwpOgorICAgICAgICAoaGFuZGxlR2xvYmFsS2V5KToKKyAgICAgICAgKiBSZXNvdXJjZXMvY2Fs
ZW5kYXJQaWNrZXJfdGVzdC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogY3NzL2h0bWwuY3NzOgorICAgICAgICAoOjot
d2Via2l0LWRpYWxvZy1iYWNrZ3JvdW5kKToKKyAgICAgICAgKDo6LXdlYmtpdC1kaWFsb2ctZnJh
bWUpOgorICAgICAgICAqIGh0bWwvRGF0ZUlucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRlSW5wdXRUeXBlOjpEYXRlSW5wdXRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpYWxv
Z0JhY2tncm91bmRFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlhbG9nQmFj
a2dyb3VuZEVsZW1lbnQ6OkRpYWxvZ0JhY2tncm91bmRFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpYWxvZ0JhY2tncm91bmRFbGVtZW50OjpzaGFkb3dQc2V1ZG9JZCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaWFsb2dCYWNrZ3JvdW5kRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJRnJhbWVXaXRoUHNldWRvSWQ6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJRnJhbWVXaXRoUHNldWRvSWQ6OklGcmFtZVdpdGhQc2V1ZG9JZCk6CisgICAgICAg
IChXZWJDb3JlOjpJRnJhbWVXaXRoUHNldWRvSWQ6OnNoYWRvd1BzZXVkb0lkKToKKyAgICAgICAg
KFdlYkNvcmU6OklGcmFtZVdpdGhQc2V1ZG9JZDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAg
ICAgIChXZWJDb3JlOjpidWlsZFBpY2tlckRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnNl
bmRNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVJbnB1dFR5cGU6OmhhbmRsZU1vdXNl
RG93bkV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVJbnB1dFR5cGU6OmNyZWF0ZVNoYWRv
d1N1YnRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZUlucHV0VHlwZTo6Y2xvc2VEaWFsb2cp
OgorICAgICAgICAoV2ViQ29yZTo6RGF0ZUlucHV0VHlwZTo6Y2xvc2VEaWFsb2dBbmRTZXRWYWx1
ZSk6CisgICAgICAgICogaHRtbC9EYXRlSW5wdXRUeXBlLmg6CisgICAgICAgICogaHRtbC9IVE1M
SUZyYW1lRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSUZyYW1lRWxlbWVudDo6
SFRNTElGcmFtZUVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRNTElGcmFtZUVsZW1lbnQuaDoK
KyAgICAgICAgKiBtYWtlLWZpbGUtYXJyYXlzLnB5OiBBZGRlZC4KKwogMjAxMS0wMy0wMyAgQ2hy
aXMgTWFycmluICA8Y21hcnJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2lt
b24gRnJhc2VyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFr
ZSBiL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggZTMzNGYxMWNmMjY2
ZGVkZjUyMDhmZWU1MGZhY2RiNzQ5MTk2MmEyYi4uYTdkOGIyODdlYTFkYzEwZWJjYTc2MTNkODY3
YjhmZjI1YWM3ZGM0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMu
bWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC01NDgsNiAr
NTQ4LDcgQEAgYWxsIDogXAogICAgIFwKICAgICBKU0phdmFTY3JpcHRDYWxsRnJhbWUuaCBcCiAg
ICAgXAorICAgIENhbGVuZGFyUGlja2VyLmggXAogICAgIENTU0dyYW1tYXIuY3BwIFwKICAgICBD
U1NQcm9wZXJ0eU5hbWVzLmggXAogICAgIENTU1ZhbHVlS2V5d29yZHMuaCBcCkBAIC03NzgsNiAr
Nzc5LDE2IEBAIFhNTE5hbWVzLmNwcCA6IGRvbS9tYWtlX25hbWVzLnBsIHhtbC94bWxhdHRycy5p
bgogCiAjIC0tLS0tLS0tCiAKKyMgRGF0YSBmb3IgSFRNTCBVSSBpbXBsZW1lbnRhdGlvbnMKKwor
Q0FMRU5EQVJQSUNLRVJfRklMRVMgPSAkKFdlYkNvcmUpL1Jlc291cmNlcy9jYWxlbmRhclBpY2tl
ci5qcyBcCisJJChXZWJDb3JlKS9SZXNvdXJjZXMvY2FsZW5kYXJQaWNrZXIuY3NzCisKK0NhbGVu
ZGFyUGlja2VyLmggOiAkKFdlYkNvcmUpL21ha2UtZmlsZS1hcnJheXMucHkgJChDQUxFTkRBUlBJ
Q0tFUl9GSUxFUykKKwlweXRob24gJDwgJEAgQ2FsZW5kYXJQaWNrZXIuY3BwICQoQ0FMRU5EQVJQ
SUNLRVJfRklMRVMpCisKKyMgLS0tLS0tLS0KKwogIyBTVkcgdGFnIGFuZCBhdHRyaWJ1dGUgbmFt
ZXMsIGFuZCBlbGVtZW50IGZhY3RvcnkKIAogaWZlcSAoJChmaW5kc3RyaW5nIEVOQUJMRV9TVkdf
VVNFLCQoRkVBVFVSRV9ERUZJTkVTKSksIEVOQUJMRV9TVkdfVVNFKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvUmVzb3VyY2VzL2NhbGVuZGFyUGlja2VyLmNzcyBiL1NvdXJjZS9XZWJDb3Jl
L1Jlc291cmNlcy9jYWxlbmRhclBpY2tlci5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTQ3YTUwMDA1MGRmNGRh
YWVjM2Y0NGY4ZjRiOTA3NWE4ZGQ4ZmFlNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1Jlc291cmNlcy9jYWxlbmRhclBpY2tlci5jc3MKQEAgLTAsMCArMSwxOTkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitib2R5IHsK
KyAgICBmb250OiAtd2Via2l0LXNtYWxsLWNvbnRyb2w7CisgICAgLXdlYmtpdC11c2VyLXNlbGVj
dDogbm9uZTsKKyAgICBtYXJnaW46IDZweDsKKyAgICBtYXJnaW4tdG9wOiAwcHg7CisgICAgbWFy
Z2luLWxlZnQ6IDBweDsKK30KKworLm5vLWZvY3VzLXJpbmcgOmZvY3VzIHsKKyAgICBvdXRsaW5l
OiBub25lOworfQorCisuYnViYmxlLWFycm93IHsKKyAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2w7
CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIGxlZnQ6IDY0cHg7CisgICAgd2lkdGg6IDE4
cHg7CisgICAgaGVpZ2h0OiAxOHB4OworICAgIGJhY2tncm91bmQtY29sb3I6ICNmMGY4ZmY7Cisg
ICAgYm9yZGVyOiBzb2xpZCAxcHggIzg4OTlhYTsKKyAgICBib3gtc2hhZG93OiBpbnNldCAycHgg
MnB4IDJweCB3aGl0ZTsKKyAgICB6LWluZGV4OiA5OTsKKworICAgIC13ZWJraXQtdHJhbnNmb3Jt
LW9yaWdpbjogMCAwOworICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpOworfQor
CisuYnViYmxlLWJvcmRlci1jYW5jZWxsZXIgeworICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsK
KyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmOGZmOworICAgIGhlaWdodDogM3B4OyAvKiBib3Jk
ZXIgKyBpbnNldCBzaGFkb3cgb2YgI21haW4gKi8KKyAgICB3aWR0aDogMjEuNXB4OyAvKiB3aWR0
aCAoYW5kIGhlaWdodCkgKiBzcXJ0KDIpIC0gNCAqLworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsK
KyAgICBsZWZ0OiA1My41cHg7CisgICAgdG9wOiAxMnB4OworICAgIHotaW5kZXg6IDEwMTsKK30K
KworI21haW4geworICAgIHotaW5kZXg6IDEwMDsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7Cisg
ICAgdG9wOiAtOHB4OworICAgIHBhZGRpbmc6IDZweDsKKyAgICBiYWNrZ3JvdW5kOiAtd2Via2l0
LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBmcm9tKCNmMGY4ZmYpLCB0
bygjY2NkZGVlKSk7CisgICAgYm9yZGVyOiBzb2xpZCAxcHggIzg4OTlhYTsKKyAgICBib3JkZXIt
cmFkaXVzOiA2cHg7CisgICAgYm94LXNoYWRvdzogaW5zZXQgMnB4IDJweCAycHggd2hpdGUsCisg
ICAgICAgIGluc2V0IC0ycHggLTJweCAxcHggcmdiYSgwLDAsMCwwLjEpLAorICAgICAgICA0cHgg
NHB4IDRweCAjY2NjOworfQorCisueWVhci1tb250aC1hcmVhIHsKK30KKworLnllYXItbW9udGgt
dXBwZXIgeworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKK30KKworLnllYXItc2VsZWN0b3Igewor
ICAgIHdpZHRoOiA2ZW07CisgICAgdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKKy5tb250aC1zZWxl
Y3RvciB7Cit9CisKKy55ZWFyLW1vbnRoLWJ1dHRvbnMgeworfQorCisueWVhci1tb250aC1idXR0
b24geworICAgIC8qLXdlYmtpdC1hcHBlYXJhbmNlOiBzcXVhcmUtYnV0dG9uOyovCit9CisKKy55
ZWFyLW1vbnRoLWJ1dHRvbi1sZWZ0IHsKKyAgICBmbG9hdDogbGVmdDsKKyAgICB3aWR0aDogNTAl
OworfQorCisueWVhci1tb250aC1idXR0b24tcmlnaHQgeworICAgIGZsb2F0OiBsZWZ0OworICAg
IHdpZHRoOiA1MCU7CisgICAgdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKKy5kYXlzLWFyZWEtY29u
dGFpbmVyIHsKKyAgICBjbGVhcjogbGVmdDsKKyAgICBtYXJnaW4tdG9wOiA2cHg7CisgICAgbWFy
Z2luLWJvdHRvbTogNnB4OworICAgIG92ZXJmbG93OiBoaWRkZW47Cit9CisKKy5kYXlzLWFyZWEg
eyAvKiA8dGFibGU+ICovCisgICAgd2lkdGg6IDEwMCU7CisgICAgdGFibGUtbGF5b3V0OiBmaXhl
ZDsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKKyAgICBib3JkZXItY29sbGFwc2U6IHNl
cGFyYXRlOworICAgIGJvcmRlci1zcGFjaW5nOiAwcHg7CisgICAgYm9yZGVyOiBzb2xpZCAxcHgg
YmxhY2s7CisgICAgZm9udDogLXdlYmtpdC1zbWFsbC1jb250cm9sOworfQorCisuZGF5LWxhYmVs
LWNvbnRhaW5lciB7IC8qIDx0cj4gKi8KK30KKy5kYXktbGFiZWwgeyAvKiA8dGg+ICovCisgICAg
YmFja2dyb3VuZC1jb2xvcjogI2NjZWVlZTsKKyAgICBib3JkZXI6IHNvbGlkIDFweCAjY2NlZWVl
OworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRl
ci1ib3g7Cit9CisKKy53ZWVrLWNvbnRhaW5lciB7IC8qIDx0cj4gKi8KK30KKy5kYXkgeyAvKiA8
dGQ+ICovCisgICAgcGFkZGluZzogMXB4OworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICBi
YWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKKyAgICBib3JkZXI6IDFweCBzb2xpZCB3aGl0ZTsKKyAg
ICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7Cit9CisuYXZhaWxhYmxlIHsKKyAgICBj
dXJzb3I6IGRlZmF1bHQ7CisgICAgZm9udC13ZWlnaHQ6IDcwMDsKKy8qICAgIHRleHQtc2hhZG93
OiAxcHggMXB4IDFweCAjZGRkOyovCisgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CisgICAg
Ym9yZGVyOiAxcHggc29saWQgd2hpdGU7CisgICAgYm9yZGVyLXJhZGl1czogNXB4OworICAgIC13
ZWJraXQtdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKK30KKworLm5vdC10aGlzLW1vbnRoIHsK
KyAgICBmb250LXdlaWdodDogNDAwOworICAgIHRleHQtc2hhZG93OiBub25lOworICAgIGNvbG9y
OiBncmF5dGV4dDsKK30KKworLmF2YWlsYWJsZS5kYXktc2VsZWN0ZWQgeworICAgIGJhY2tncm91
bmQtY29sb3I6IGhpZ2hsaWdodDsKKyAgICBjb2xvcjogaGlnaGxpZ2h0dGV4dDsKKyAgICB0ZXh0
LXNoYWRvdzogbm9uZTsKKy8vICAgIGJhY2tncm91bmQ6IC13ZWJraXQtZ3JhZGllbnQobGluZWFy
LCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGZyb20oI2NjZWVmZiksIHRvKGhpZ2hsaWdodCkpOwor
fQorCisudW5hdmFpbGFibGUgeworLyogICAgY3Vyc29yOiBub3QtYWxsb3dlZDsqLworICAgIGN1
cnNvcjogZGVmYXVsdDsKKyAgICBjb2xvcjogZ3JheXRleHQ7CisgICAgYmFja2dyb3VuZC1jb2xv
cjogI2ZhZmFmYTsKKyAgICBib3JkZXI6IDFweCBzb2xpZCAjZmFmYWZhOworICAgIC13ZWJraXQt
dHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMnMgZWFzZTsKK30KKy51bmF2YWlsYWJsZS11cCB7
CisvKiAgICBjdXJzb3I6IHctcmVzaXplOyovCisvKiBUTyBCRSBSRU1PVkVEICovCit9CisudW5h
dmFpbGFibGUtZG93biB7CisvKiAgICBjdXJzb3I6IGUtcmVzaXplOyovCisvKiBUTyBCRSBSRU1P
VkVEICovCit9CisudW5hdmFpbGFibGUuZGF5LXNlbGVjdGVkIHsKKyAgICBib3JkZXI6IDFweCBz
b2xpZCBoaWdobGlnaHQ7Cit9CisKKy50b2RheS1idXR0b24geworfQorLmNsZWFyLWJ1dHRvbiB7
Cit9CisuY2FuY2VsLWJ1dHRvbiB7CisgICAgZmxvYXQ6IHJpZ2h0OworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL2NhbGVuZGFyUGlja2VyLmpzIGIvU291cmNlL1dlYkNv
cmUvUmVzb3VyY2VzL2NhbGVuZGFyUGlja2VyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgwZTA3MzQ3ZjA2Mzk1
NWQ2YmU5ZDk4ZWQ3OTU4YjEzNzI0YmNlNjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9SZXNvdXJjZXMvY2FsZW5kYXJQaWNrZXIuanMKQEAgLTAsMCArMSw4NTkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBGSVhN
RToKKy8vICAtIFJUTAorLy8gIC0gVG91Y2ggZXZlbnQ/CisKKy8qKgorICogVGhlIG51bWJlciBv
ZiB3ZWVrIGxpbmVzIGluIHRoZSBzY3JlZW4uCisgKiBAY29uc3QKKyAqIEB0eXBlIHtudW1iZXJ9
CisgKi8KK3ZhciBXRUVLUyA9IDY7CisKK3ZhciBDTEFTUyA9IHsKKyAgICBBVkFJTEFCTEU6ICdh
dmFpbGFibGUnLAorICAgIEJVQkJMRV9BUlJPVzogJ2J1YmJsZS1hcnJvdycsCisgICAgQlVCQkxF
X0JPUkRFUl9DQU5DRUxMRVI6ICdidWJibGUtYm9yZGVyLWNhbmNlbGxlcicsCisgICAgQ0FOQ0VM
X0JVVFRPTjogJ2NhbmNlbC1idXR0b24nLAorICAgIENMRUFSX0JVVFRPTjogJ2NsZWFyLWJ1dHRv
bicsCisgICAgREFZOiAnZGF5JywKKyAgICBEQVlTX0FSRUE6ICdkYXlzLWFyZWEnLAorICAgIERB
WVNfQVJFQV9DT05UQUlORVI6ICdkYXlzLWFyZWEtY29udGFpbmVyJywKKyAgICBEQVlfTEFCRUw6
ICdkYXktbGFiZWwnLAorICAgIERBWV9MQUJFTF9DT05UQUlORVI6ICdkYXktbGFiZWwtY29udGFp
bmVyJywKKyAgICBNT05USF9TRUxFQ1RPUjogJ21vbnRoLXNlbGVjdG9yJywKKyAgICBOT19GT0NV
U19SSU5HOiAnbm8tZm9jdXMtcmluZycsCisgICAgTk9UX1RISVNfTU9OVEg6ICdub3QtdGhpcy1t
b250aCcsCisgICAgU0VMRUNURUQ6ICdkYXktc2VsZWN0ZWQnLAorICAgIFRPREFZX0JVVFRPTjog
J3RvZGF5LWJ1dHRvbicsCisgICAgVE9EQVlfQ0xFQVJfQVJFQTogJ3RvZGF5LWNsZWFyLWFyZWEn
LAorICAgIFVOQVZBSUxBQkxFOiAndW5hdmFpbGFibGUnLAorICAgIFVOQVZBSUxBQkxFX0RPV046
ICd1bmF2YWlsYWJsZS1kb3duJywKKyAgICBVTkFWQUlMQUJMRV9VUDogJ3VuYXZhaWxhYmxlLXVw
JywKKyAgICBXRUVLX0NPTlRBSU5FUjogJ3dlZWstY29udGFpbmVyJywKKyAgICBZRUFSX01PTlRI
X0FSRUE6ICd5ZWFyLW1vbnRoLWFyZWEnLAorICAgIFlFQVJfTU9OVEhfQlVUVE9OOiAneWVhci1t
b250aC1idXR0b24nLAorICAgIFlFQVJfTU9OVEhfQlVUVE9OUzogJ3llYXItbW9udGgtYnV0dG9u
cycsCisgICAgWUVBUl9NT05USF9CVVRUT05fTEVGVDogJ3llYXItbW9udGgtYnV0dG9uLWxlZnQn
LAorICAgIFlFQVJfTU9OVEhfQlVUVE9OX1JJR0hUOiAneWVhci1tb250aC1idXR0b24tcmlnaHQn
LAorICAgIFlFQVJfTU9OVEhfVVBQRVI6ICd5ZWFyLW1vbnRoLXVwcGVyJywKKyAgICBZRUFSX1NF
TEVDVE9SOiAneWVhci1zZWxlY3RvcicsCit9OworCisvKioKKyAqIEB0eXBlIHtPYmplY3R9Cisg
Ki8KK3ZhciBnbG9iYWwgPSB7CisgICAgYXJndW1lbnRzUmVjZWl2ZWQ6IGZhbHNlLAorICAgIGxh
c3RYOiAtMSwKKyAgICBsYXN0WTogLTEsCisgICAgbGFzdFllYXI6IC0xLAorICAgIGxhc3RNb250
aDogLTEsCisgICAgcGFyYW1zOiBudWxsLAorfTsKKword2luZG93LmFkZEV2ZW50TGlzdGVuZXIo
J21lc3NhZ2UnLCBoYW5kbGVNZXNzYWdlLCBmYWxzZSk7Cit3aW5kb3cuc2V0VGltZW91dChoYW5k
bGVBcmd1bWVudHNUaW1lb3V0LCAxMDAvKjEwMDAqLyk7CisKKy8qKgorICogQHBhcmFtIHtFdmVu
dH0gZXZlbnQ7CisgKi8KK2Z1bmN0aW9uIGhhbmRsZU1lc3NhZ2UoZXZlbnQpIHsKKyAgICBpZiAo
Z2xvYmFsLmFyZ3VtZW50c1JlY2VpdmVkKQorICAgICAgICByZXR1cm47CisgICAgZ2xvYmFsLmFy
Z3VtZW50c1JlY2VpdmVkID0gdHJ1ZTsKKyAgICBpbml0aWFsaXplKEpTT04ucGFyc2UoZXZlbnQu
ZGF0YSkpOworfQorCitmdW5jdGlvbiBoYW5kbGVBcmd1bWVudHNUaW1lb3V0KCkgeworICAgIGlm
IChnbG9iYWwuYXJndW1lbnRzUmVjZWl2ZWQpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAod2lu
ZG93LmRpYWxvZ0FyZ3VtZW50cykgeworICAgICAgICBpbml0aWFsaXplKGRpYWxvZ0FyZ3VtZW50
cyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgdmFyIGFyZ3MgPSB7CisgICAgICAgIG1v
bnRoTGFiZWxzIDogWydtMScsICdtMicsICdtMycsICdtNCcsICdtNScsICdtNicsCisgICAgICAg
ICAgICAgICAgICAgICAgICdtNycsICdtOCcsICdtOScsICdtMTAnLCAnbTExJywgJ20xMiddLAor
ICAgICAgICBkYXlMYWJlbHMgOiBbJ2QxJywgJ2QyJywgJ2QzJywgJ2Q0JywgJ2Q1JywgJ2Q2Jywg
J2Q3J10sCisgICAgICAgIHRvZGF5TGFiZWwgOiAnVG9kYXknLAorICAgICAgICBjbGVhckxhYmVs
IDogJ0NsZWFyJywKKyAgICAgICAgY2FuY2VsTGFiZWwgOiAnQ2FuY2VsJywKKyAgICAgICAgd2Vl
a1N0YXJ0RGF5IDogMCwKKyAgICAgICAgc3RlcCA6IDIsCisgICAgICAgIG1heCA6ICcyMDExLTAy
LTAxJywKKyAgICB9OworICAgIGluaXRpYWxpemUoYXJncyk7Cit9CisKKy8qKgorICogQHBhcmFt
IHtzdHJpbmd9IGlkCisgKi8KK2Z1bmN0aW9uICQoaWQpIHsKKyAgICByZXR1cm4gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoaWQpOworfQorCisvKioKKyAqIEBwYXJhbSB7c3RyaW5nfSB0YWdOYW1l
CisgKiBAcGFyYW0ge3N0cmluZ30gb3B0X2NsYXNzCisgKiBAcGFyYW0ge3N0cmluZ30gb3B0X3Rl
eHQKKyAqLworZnVuY3Rpb24gY3JlYXRlRWxlbWVudCh0YWdOYW1lLCBvcHRfY2xhc3MsIG9wdF90
ZXh0KSB7CisgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUp
OworICAgIGlmIChvcHRfY2xhc3MpCisgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdjbGFz
cycsIG9wdF9jbGFzcyk7CisgICAgaWYgKG9wdF90ZXh0KQorICAgICAgICBlbGVtZW50LmFwcGVu
ZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG9wdF90ZXh0KSk7CisgICAgcmV0dXJuIGVs
ZW1lbnQ7Cit9CisKKy8qKgorICogQHBhcmFtIHshT2JqZWN0fSBhcmdzCisgKi8KK2Z1bmN0aW9u
IGdldEFyZ3VtZW50RXJyb3IoYXJncykgeworICAgIGlmICghYXJncy5tb250aExhYmVscykKKyAg
ICAgICAgcmV0dXJuICdObyBtb250aExhYmVscy4nOworICAgIGlmIChhcmdzLm1vbnRoTGFiZWxz
Lmxlbmd0aCAhPSAxMikKKyAgICAgICAgcmV0dXJuICdtb250aExhYmVscyBpcyBub3QgYW4gYXJy
YXkgd2l0aCAxMiBlbGVtZW50cy4nOworICAgIGlmICghYXJncy5kYXlMYWJlbHMpCisgICAgICAg
IHJldHVybiAnTm8gZGF5TGFiZWxzLic7CisgICAgaWYgKGFyZ3MuZGF5TGFiZWxzLmxlbmd0aCAh
PSA3KQorICAgICAgICByZXR1cm4gJ2RheUxhYmVscyBpcyBub3QgYW4gYXJyYXkgd2l0aCA3IGVs
ZW1lbnRzLic7CisgICAgaWYgKCFhcmdzLmNhbmNlbExhYmVsKQorICAgICAgICByZXR1cm4gJ05v
IGNhbmNlbExhYmVsLic7CisgICAgaWYgKCFhcmdzLmNsZWFyTGFiZWwpCisgICAgICAgIHJldHVy
biAnTm8gY2xlYXJMYWJlbC4nOworICAgIGlmICghYXJncy50b2RheUxhYmVsKQorICAgICAgICBy
ZXR1cm4gJ05vIHRvZGF5TGFiZWwuJzsKKyAgICByZXR1cm4gJyc7Cit9CisKK2Z1bmN0aW9uIGNy
ZWF0ZURhdGVGcm9tU3RyaW5nKG9wdF9jdXJyZW50KSB7CisgICAgaWYgKG9wdF9jdXJyZW50KSB7
CisgICAgICAgIHZhciByZXN1bHQgPSBvcHRfY3VycmVudC5tYXRjaCgvKFxkKyktKFxkKyktKFxk
KykvKTsKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShE
YXRlLlVUQyhOdW1iZXIocmVzdWx0WzFdKSwgTnVtYmVyKHJlc3VsdFsyXSkgLSAxLCBOdW1iZXIo
cmVzdWx0WzNdKSkpOworICAgIH0KKyAgICB2YXIgbm93ID0gbmV3IERhdGUoKTsKKyAgICAvLyBD
cmVhdGUgVVRDIGRhdGUgd2l0aCBzYW1lIG51bWJlcnMgYXMgbG9jYWwgZGF0ZS4KKyAgICByZXR1
cm4gbmV3IERhdGUoRGF0ZS5VVEMobm93LmdldEZ1bGxZZWFyKCksIG5vdy5nZXRNb250aCgpLCBu
b3cuZ2V0RGF0ZSgpKSk7Cit9CisKKy8qKgorICogQHBhcmFtIHshT2JqZWN0fSBhcmdzCisgKi8K
K2Z1bmN0aW9uIGluaXRpYWxpemUoYXJncykgeworICAgIHZhciBtYWluID0gJCgnbWFpbicpOwor
ICAgIG1haW4uY2xhc3NMaXN0LmFkZChDTEFTUy5OT19GT0NVU19SSU5HKTsKKyAgICB2YXIgZXJy
b3JTdHJpbmcgPSBnZXRBcmd1bWVudEVycm9yKGFyZ3MpOworICAgIGlmIChlcnJvclN0cmluZy5s
ZW5ndGggPiAwKSB7CisgICAgICAgIG1haW4udGV4dENvbnRlbnQgPSAnSW50ZXJuYWwgZXJyb3I6
ICcgKyBlcnJvclN0cmluZzsKKyAgICB9IGVsc2UgeworICAgICAgICBnbG9iYWwucGFyYW1zID0g
YXJnczsKKyAgICAgICAgY2hlY2tMaW1pdHMoKTsKKyAgICAgICAgbGF5b3V0KCk7CisgICAgICAg
IC8vIEZJWE1FOiBUaGlzIG1pZ2h0IHNob3cgdW5hdmFpbGFibGUgbW9udGguCisgICAgICAgIC8v
IFdoYXQgc2hvdWxkIHdlIHNob3cgaWYgdGhlIGN1cnJlbnQgdmFsdWUgb3IgdG9kYXkgaXMgb3V0
IG9mIHJhbmdlPworICAgICAgICBzZWxlY3REYXRlKGNyZWF0ZURhdGVGcm9tU3RyaW5nKGFyZ3Mu
Y3VycmVudFZhbHVlKSk7CisKKyAgICAgICAgd2luZG93LmZyYW1lRWxlbWVudC5oZWlnaHQgPSBt
YWluLm9mZnNldEhlaWdodCArIDg7CisgICAgICAgIHdpbmRvdy5mcmFtZUVsZW1lbnQuc3R5bGUu
b3BhY2l0eSA9ICcxLjAnOworICAgICAgICB3aW5kb3cuZnJhbWVFbGVtZW50LnN0eWxlLndlYmtp
dFRyYW5zaXRpb24gPSAnb3BhY2l0eSAwLjJzIGVhc2UnOworICAgIH0KK30KKworZnVuY3Rpb24g
Y2hlY2tMaW1pdHMoKSB7CisgICAgLy8gSGFyZCBsaW1pdHMgb2YgdHlwZT1kYXRlLiBTZWUgV2Vi
Q29yZS9odG1sL0RhdGVDb21wb25lbnRzLmguCisgICAgZ2xvYmFsLm1pbmltdW1EYXRlID0gbmV3
IERhdGUoLTYyMTM1NTk2ODAwMDAwLjApOworICAgIGdsb2JhbC5tYXhpbXVtRGF0ZSA9IG5ldyBE
YXRlKDg2NDAwMDAwMDAwMDAwMDAuMCk7CisgICAgLy8gU2VlIFdlYkNvcmUvaHRtbC9EYXRlSW5w
dXRUeXBlLmNwcC4KKyAgICBnbG9iYWwuc3RlcCA9IDg2NDAwMDAwOworICAgIGlmIChnbG9iYWwu
cGFyYW1zLm1pbikgeworICAgICAgICAvLyBXZSBhc3N1bWUgcGFyYW1zLm1pbiBpcyBhIHZhbGlk
IGRhdGUuCisgICAgICAgIGdsb2JhbC5taW5pbXVtRGF0ZSA9IGNyZWF0ZURhdGVGcm9tU3RyaW5n
KGdsb2JhbC5wYXJhbXMubWluKTsKKyAgICB9CisgICAgaWYgKGdsb2JhbC5wYXJhbXMubWF4KSB7
CisgICAgICAgIC8vIFdlIGFzc3VtZSBwYXJhbXMubWF4IGlzIGEgdmFsaWQgZGF0ZS4KKyAgICAg
ICAgZ2xvYmFsLm1heGltdW1EYXRlID0gY3JlYXRlRGF0ZUZyb21TdHJpbmcoZ2xvYmFsLnBhcmFt
cy5tYXgpOworICAgIH0KKyAgICBpZiAoZ2xvYmFsLnBhcmFtcy5zdGVwKSB7CisgICAgICAgIGds
b2JhbC5zdGVwICo9IGdsb2JhbC5wYXJhbXMuc3RlcDsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGxh
eW91dCgpIHsKKyAgICB2YXIgbWFpbiA9ICQoJ21haW4nKTsKKyAgICB2YXIgcGFyYW1zID0gZ2xv
YmFsLnBhcmFtczsKKyAgICBtYWluLnJlbW92ZUNoaWxkKG1haW4uZmlyc3RDaGlsZCk7CisgICAg
ZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgaGFuZGxlR2xvYmFsS2V5
KTsKKworICAgIG1haW4ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoY3JlYXRlRWxlbWVudCgnZGl2
JywgQ0xBU1MuQlVCQkxFX0FSUk9XKSwgbWFpbik7CisgICAgbWFpbi5wYXJlbnROb2RlLmluc2Vy
dEJlZm9yZShjcmVhdGVFbGVtZW50KCdkaXYnLCBDTEFTUy5CVUJCTEVfQk9SREVSX0NBTkNFTExF
UiksIG1haW4pOworCisgICAgZ2xvYmFsLnllYXJNb250aENvbnRyb2xsZXIgPSBuZXcgWWVhck1v
bnRoQ29udHJvbGxlcjIoKTsKKyAgICBnbG9iYWwueWVhck1vbnRoQ29udHJvbGxlci5hdHRhY2go
cGFyYW1zLCBtYWluKTsKKyAgICB2YXIgY29udGFpbmVyID0gbGF5b3V0RGF5cyhwYXJhbXMsIG1h
aW4pOworICAgIGxheW91dEJ1dHRvbnMocGFyYW1zLCBtYWluKTsKKworICAgIGNvbnRhaW5lci5m
b2N1cygpOworfQorCitmdW5jdGlvbiBsYXlvdXREYXlzKHBhcmFtcywgbWFpbikgeworICAgIHZh
ciBlbGVtZW50ID0gY3JlYXRlRWxlbWVudCgndGFibGUnLCBDTEFTUy5EQVlTX0FSRUEpOworICAg
IGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVEYXlDbGljayk7CisgICAg
ZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLCBoYW5kbGVNb3VzZU92ZXIpOwor
ICAgIHZhciBjb250YWluZXIgPSBjcmVhdGVFbGVtZW50KCd0cicsIENMQVNTLkRBWV9MQUJFTF9D
T05UQUlORVIpOworICAgIHZhciB3ZWVrU3RhcnREYXkgPSBnbG9iYWwucGFyYW1zLndlZWtTdGFy
dERheSB8fCAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNzsgaSsrKSB7CisgICAgICAgIGNv
bnRhaW5lci5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KCd0aCcsIENMQVNTLkRBWV9MQUJFTCwg
cGFyYW1zLmRheUxhYmVsc1sod2Vla1N0YXJ0RGF5ICsgaSkgJSA3XSkpOworICAgIH0KKyAgICBl
bGVtZW50LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7CisgICAgdmFyIGRheXMgPSBbXTsKKyAgICBm
b3IgKHZhciB3ID0gMDsgdyA8IFdFRUtTOyB3KyspIHsKKyAgICAgICAgY29udGFpbmVyID0gY3Jl
YXRlRWxlbWVudCgndHInLCBDTEFTUy5XRUVLX0NPTlRBSU5FUik7CisgICAgICAgIHZhciB3ZWVr
ID0gW107CisgICAgICAgIGZvciAodmFyIGQgPSAwOyBkIDwgNzsgZCsrKSB7CisgICAgICAgICAg
ICB2YXIgZGF5ID0gY3JlYXRlRWxlbWVudCgndGQnLCBDTEFTUy5EQVksICcgJyk7CisgICAgICAg
ICAgICBkYXkuc2V0QXR0cmlidXRlKCdkYXRhLXBvc2l0aW9uLXgnLCBTdHJpbmcoZCkpOworICAg
ICAgICAgICAgZGF5LnNldEF0dHJpYnV0ZSgnZGF0YS1wb3NpdGlvbi15JywgU3RyaW5nKHcpKTsK
KyAgICAgICAgICAgIHdlZWsucHVzaChkYXkpOworICAgICAgICAgICAgY29udGFpbmVyLmFwcGVu
ZENoaWxkKGRheSk7CisgICAgICAgIH0KKyAgICAgICAgZGF5cy5wdXNoKHdlZWspOworICAgICAg
ICBlbGVtZW50LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7CisgICAgfQorICAgIGdsb2JhbC5kYXlz
ID0gZGF5czsKKyAgICBnbG9iYWwuZGF5c0FyZWEgPSBlbGVtZW50OworICAgIGNvbnRhaW5lciA9
IGNyZWF0ZUVsZW1lbnQoJ2RpdicsIENMQVNTLkRBWVNfQVJFQV9DT05UQUlORVIpOworICAgIGNv
bnRhaW5lci5hcHBlbmRDaGlsZChlbGVtZW50KTsKKyAgICBjb250YWluZXIudGFiSW5kZXggPSAw
OworICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgaGFuZGxlRGF5c0Fy
ZWFLZXkpOworICAgIG1haW4uYXBwZW5kQ2hpbGQoY29udGFpbmVyKTsKKyAgICByZXR1cm4gY29u
dGFpbmVyOworfQorCitmdW5jdGlvbiBsYXlvdXRCdXR0b25zKHBhcmFtcywgbWFpbikgeworICAg
IHZhciBlbGVtZW50ID0gY3JlYXRlRWxlbWVudCgnZGl2JywgQ0xBU1MuVE9EQVlfQ0xFQVJfQVJF
QSk7CisgICAgZ2xvYmFsLnRvZGF5ID0gY3JlYXRlRWxlbWVudCgnaW5wdXQnLCBDTEFTUy5UT0RB
WV9CVVRUT04pOworICAgIGdsb2JhbC50b2RheS50eXBlID0gJ2J1dHRvbic7CisgICAgZ2xvYmFs
LnRvZGF5LnZhbHVlID0gcGFyYW1zLnRvZGF5TGFiZWw7CisgICAgZ2xvYmFsLnRvZGF5LmFkZEV2
ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlVG9kYXkpOworICAgIGVsZW1lbnQuYXBwZW5kQ2hp
bGQoZ2xvYmFsLnRvZGF5KTsKKyAgICBnbG9iYWwuY2xlYXIgPSBudWxsOworICAgIGlmICghcGFy
YW1zLnJlcXVpcmVkKSB7CisgICAgICAgIGdsb2JhbC5jbGVhciA9IGNyZWF0ZUVsZW1lbnQoJ2lu
cHV0JywgQ0xBU1MuQ0xFQVJfQlVUVE9OKTsKKyAgICAgICAgZ2xvYmFsLmNsZWFyLnR5cGUgPSAn
YnV0dG9uJzsKKyAgICAgICAgZ2xvYmFsLmNsZWFyLnZhbHVlID0gcGFyYW1zLmNsZWFyTGFiZWw7
CisgICAgICAgIGdsb2JhbC5jbGVhci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZUNs
ZWFyKTsKKyAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChnbG9iYWwuY2xlYXIpOworICAgIH0K
KyAgICAvL2dsb2JhbC5jYW5jZWwgPSBjcmVhdGVFbGVtZW50KCdpbnB1dCcsIENMQVNTLkNBTkNF
TF9CVVRUT04pOworICAgIC8vZ2xvYmFsLmNhbmNlbC50eXBlID0gJ2J1dHRvbic7CisgICAgLy9n
bG9iYWwuY2FuY2VsLnZhbHVlID0gcGFyYW1zLmNhbmNlbExhYmVsOworICAgIC8vZ2xvYmFsLmNh
bmNlbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZUNhbmNlbCk7CisgICAgLy9lbGVt
ZW50LmFwcGVuZENoaWxkKGdsb2JhbC5jYW5jZWwpOworICAgIG1haW4uYXBwZW5kQ2hpbGQoZWxl
bWVudCk7CisKKyAgICBnbG9iYWwubGFzdEZvY3VzYWJsZUNvbnRyb2wgPSBnbG9iYWwuY2xlYXIg
fHwgZ2xvYmFsLnRvZGF5OworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8qKgorICogQGNvbnN0cnVjdG9y
CisgKi8KK2Z1bmN0aW9uIFllYXJNb250aENvbnRyb2xsZXIoKSB7CisgICAgdGhpcy55ZWFyID0g
bnVsbDsKKyAgICB0aGlzLm1vbnRoID0gbnVsbDsKK30KKworWWVhck1vbnRoQ29udHJvbGxlci5w
cm90b3R5cGUuYXR0YWNoID0gZnVuY3Rpb24ocGFyYW1zLCBtYWluKSB7CisgICAgLy8gU2hvdWxk
IHdlIHVzZSB0eXBlPW1vbnRoPworICAgIHRoaXMueWVhciA9IGNyZWF0ZUVsZW1lbnQoJ2lucHV0
JywgQ0xBU1MuWUVBUl9TRUxFQ1RPUik7CisgICAgdGhpcy55ZWFyLnR5cGUgPSAnbnVtYmVyJzsK
KyAgICB0aGlzLnllYXIubWluID0gZ2xvYmFsLm1pbmltdW1EYXRlLmdldFVUQ0Z1bGxZZWFyKCk7
CisgICAgdGhpcy55ZWFyLm1heCA9IGdsb2JhbC5tYXhpbXVtRGF0ZS5nZXRVVENGdWxsWWVhcigp
OworICAgIHRoaXMueWVhci5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLmhhbmRsZVll
YXJNb250aENoYW5nZS5iaW5kKHRoaXMpKTsKKyAgICB0aGlzLnllYXIuYWRkRXZlbnRMaXN0ZW5l
cignaW5wdXQnLCB0aGlzLmhhbmRsZVllYXJNb250aENoYW5nZS5iaW5kKHRoaXMpKTsKKyAgICB0
aGlzLm1vbnRoID0gY3JlYXRlRWxlbWVudCgnc2VsZWN0JywgQ0xBU1MuTU9OVEhfU0VMRUNUT1Ip
OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTI7IGkrKykgeworICAgICAgICB0aGlzLm1vbnRo
LmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQoJ29wdGlvbicsIHVuZGVmaW5lZCwgcGFyYW1zLm1v
bnRoTGFiZWxzW2ldKSk7CisgICAgfQorICAgIHRoaXMubW9udGguYWRkRXZlbnRMaXN0ZW5lcign
Y2hhbmdlJywgdGhpcy5oYW5kbGVZZWFyTW9udGhDaGFuZ2UuYmluZCh0aGlzKSk7CisgICAgdmFy
IGVsZW1lbnQgPSBjcmVhdGVFbGVtZW50KCdkaXYnLCBDTEFTUy5ZRUFSX01PTlRIX0FSRUEpOwor
ICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy55ZWFyKTsKKyAgICBlbGVtZW50LmFwcGVuZENo
aWxkKHRoaXMubW9udGgpOworICAgIG1haW4uYXBwZW5kQ2hpbGQoZWxlbWVudCk7CisKKyAgICBn
bG9iYWwuZmlyc3RGb2N1c2FibGVDb250cm9sID0gdGhpcy55ZWFyOworfTsKKworWWVhck1vbnRo
Q29udHJvbGxlci5wcm90b3R5cGUuZ2V0WWVhciA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBO
dW1iZXIodGhpcy55ZWFyLnZhbHVlKTsKK30KKworWWVhck1vbnRoQ29udHJvbGxlci5wcm90b3R5
cGUuZ2V0TW9udGggPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gTnVtYmVyKHRoaXMubW9udGgu
c2VsZWN0ZWRJbmRleCk7Cit9CisKK1llYXJNb250aENvbnRyb2xsZXIucHJvdG90eXBlLnNldFll
YXJNb250aCA9IGZ1bmN0aW9uKHllYXIsIG1vbnRoKSB7CisgICAgdGhpcy55ZWFyLnZhbHVlID0g
U3RyaW5nKHllYXIpOworICAgIHRoaXMubW9udGguc2VsZWN0ZWRJbmRleCA9IG1vbnRoOworICAg
IHRoaXMudXBkYXRlVUkoKTsKK307CisKK1llYXJNb250aENvbnRyb2xsZXIucHJvdG90eXBlLnVw
ZGF0ZVVJID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIG1pblllYXIgPSBnbG9iYWwubWluaW11bURh
dGUuZ2V0VVRDRnVsbFllYXIoKTsKKyAgICB2YXIgbWF4WWVhciA9IGdsb2JhbC5tYXhpbXVtRGF0
ZS5nZXRVVENGdWxsWWVhcigpOworICAgIHZhciB5ZWFyID0gdGhpcy5nZXRZZWFyKCk7CisgICAg
aWYgKHllYXIgPCBtaW5ZZWFyIHx8IHllYXIgPiBtYXhZZWFyKSB7CisgICAgICAgIHRoaXMubW9u
dGguZGlzYWJsZWQgPSB0cnVlOworICAgIH0gZWxzZSB7CisgICAgICAgIHRoaXMubW9udGguZGlz
YWJsZWQgPSBmYWxzZTsKKyAgICAgICAgdmFyIG1pbk1vbnRoID0gZ2xvYmFsLm1pbmltdW1EYXRl
LmdldFVUQ01vbnRoKCk7CisgICAgICAgIHZhciBtYXhNb250aCA9IGdsb2JhbC5tYXhpbXVtRGF0
ZS5nZXRVVENNb250aCgpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEyOyBpKyspIHsK
KyAgICAgICAgICAgIHRoaXMubW9udGhbaV0uZGlzYWJsZWQgPSB5ZWFyID09IG1pblllYXIgJiYg
aSA8IG1pbk1vbnRoIHx8IHllYXIgPT0gbWF4WWVhciAmJiBpID4gbWF4TW9udGg7CisgICAgICAg
IH0KKyAgICB9Cit9CisKK1llYXJNb250aENvbnRyb2xsZXIucHJvdG90eXBlLmhhbmRsZVllYXJN
b250aENoYW5nZSA9IGZ1bmN0aW9uKCkgeworICAgIGlmICh0aGlzLnllYXIudmFsdWUubGVuZ3Ro
IDw9IDApCisgICAgICAgIHJldHVybjsKKyAgICB2YXIgbmV3WWVhciA9IE51bWJlcih0aGlzLnll
YXIudmFsdWUpOworICAgIHZhciBuZXdNb250aCA9IHRoaXMubW9udGguc2VsZWN0ZWRJbmRleDsK
KyAgICBpZiAobmV3WWVhciA9PSBnbG9iYWwubGFzdFllYXIgJiYgbmV3TW9udGggPT0gZ2xvYmFs
Lmxhc3RNb250aCkKKyAgICAgICAgcmV0dXJuOworICAgIC8vcmVuZGVyTW9udGgobmV3WWVhciwg
bmV3TW9udGgpOworICAgIG5hdmlnYXRlVG9Nb250aFdpdGhBbmltYXRpb24obmV3WWVhciwgbmV3
TW9udGgpOworICAgIGdsb2JhbC5kYXlzW2dsb2JhbC5sYXN0WV1bZ2xvYmFsLmxhc3RYXS5jbGFz
c0xpc3QuYWRkKENMQVNTLlNFTEVDVEVEKTsKK30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKioKKyAqIEBj
b25zdHJ1Y3RvcgorICovCitmdW5jdGlvbiBZZWFyTW9udGhDb250cm9sbGVyMigpIHsKKyAgICB0
aGlzLmN1cnJlbnRZZWFyID0gLTE7CisgICAgdGhpcy5jdXJyZW50TW9udGggPSAtMTsKK30KKwor
WWVhck1vbnRoQ29udHJvbGxlcjIucHJvdG90eXBlLmF0dGFjaCA9IGZ1bmN0aW9uKHBhcmFtcywg
bWFpbikgeworICAgIHZhciBlbGVtZW50ID0gY3JlYXRlRWxlbWVudCgnZGl2JywgQ0xBU1MuWUVB
Ul9NT05USF9BUkVBKTsKKworICAgIHZhciBlbGVtZW50MiA9IGNyZWF0ZUVsZW1lbnQoJ2Rpdics
IENMQVNTLllFQVJfTU9OVEhfVVBQRVIpOworICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoZWxlbWVu
dDIpOworICAgIHRoaXMubW9udGggPSBjcmVhdGVFbGVtZW50KCdzZWxlY3QnLCBDTEFTUy5NT05U
SF9TRUxFQ1RPUik7CisgICAgdGhpcy5tb250aC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0
aGlzLmhhbmRsZVllYXJNb250aENoYW5nZS5iaW5kKHRoaXMpKTsKKyAgICBlbGVtZW50Mi5hcHBl
bmRDaGlsZCh0aGlzLm1vbnRoKTsKKworICAgIGVsZW1lbnQyID0gY3JlYXRlRWxlbWVudCgnZGl2
JywgQ0xBU1MuWUVBUl9NT05USF9CVVRUT05TKTsKKyAgICBlbGVtZW50LmFwcGVuZENoaWxkKGVs
ZW1lbnQyKTsKKyAgICB2YXIgZWxlbWVudDMgPSBjcmVhdGVFbGVtZW50KCdkaXYnLCBDTEFTUy5Z
RUFSX01PTlRIX0JVVFRPTl9MRUZUKTsKKyAgICBlbGVtZW50Mi5hcHBlbmRDaGlsZChlbGVtZW50
Myk7CisgICAgdGhpcy5sZWZ0MyA9IGNyZWF0ZUVsZW1lbnQoJ2lucHV0JywgQ0xBU1MuWUVBUl9N
T05USF9CVVRUT04pOworICAgIHRoaXMubGVmdDMudHlwZSA9ICdidXR0b24nOworICAgIHRoaXMu
bGVmdDMudmFsdWUgPSAnPDw8JzsKKyAgICB0aGlzLmxlZnQzLmFkZEV2ZW50TGlzdGVuZXIoJ2Ns
aWNrJywgdGhpcy5oYW5kbGVCdXR0b25DbGljay5iaW5kKHRoaXMpKTsKKyAgICBlbGVtZW50My5h
cHBlbmRDaGlsZCh0aGlzLmxlZnQzKTsKKworICAgIHRoaXMubGVmdDIgPSBjcmVhdGVFbGVtZW50
KCdpbnB1dCcsIENMQVNTLllFQVJfTU9OVEhfQlVUVE9OKTsKKyAgICB0aGlzLmxlZnQyLnR5cGUg
PSAnYnV0dG9uJzsKKyAgICB0aGlzLmxlZnQyLnZhbHVlID0gJzw8JzsKKyAgICB0aGlzLmxlZnQy
LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5oYW5kbGVCdXR0b25DbGljay5iaW5kKHRo
aXMpKTsKKyAgICBlbGVtZW50My5hcHBlbmRDaGlsZCh0aGlzLmxlZnQyKTsKKworICAgIHRoaXMu
bGVmdDEgPSBjcmVhdGVFbGVtZW50KCdpbnB1dCcsIENMQVNTLllFQVJfTU9OVEhfQlVUVE9OKTsK
KyAgICB0aGlzLmxlZnQxLnR5cGUgPSAnYnV0dG9uJzsKKyAgICB0aGlzLmxlZnQxLnZhbHVlID0g
JzwnOworICAgIHRoaXMubGVmdDEuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmhhbmRs
ZUJ1dHRvbkNsaWNrLmJpbmQodGhpcykpOworICAgIGVsZW1lbnQzLmFwcGVuZENoaWxkKHRoaXMu
bGVmdDEpOworCisgICAgZWxlbWVudDMgPSBjcmVhdGVFbGVtZW50KCdkaXYnLCBDTEFTUy5ZRUFS
X01PTlRIX0JVVFRPTl9SSUdIVCk7CisgICAgZWxlbWVudDIuYXBwZW5kQ2hpbGQoZWxlbWVudDMp
OworICAgIHRoaXMucmlnaHQxID0gY3JlYXRlRWxlbWVudCgnaW5wdXQnLCBDTEFTUy5ZRUFSX01P
TlRIX0JVVFRPTik7CisgICAgdGhpcy5yaWdodDEudHlwZSA9ICdidXR0b24nOworICAgIHRoaXMu
cmlnaHQxLnZhbHVlID0gJz4nOworICAgIHRoaXMucmlnaHQxLmFkZEV2ZW50TGlzdGVuZXIoJ2Ns
aWNrJywgdGhpcy5oYW5kbGVCdXR0b25DbGljay5iaW5kKHRoaXMpKTsKKyAgICBlbGVtZW50My5h
cHBlbmRDaGlsZCh0aGlzLnJpZ2h0MSk7CisKKyAgICB0aGlzLnJpZ2h0MiA9IGNyZWF0ZUVsZW1l
bnQoJ2lucHV0JywgQ0xBU1MuWUVBUl9NT05USF9CVVRUT04pOworICAgIHRoaXMucmlnaHQyLnR5
cGUgPSAnYnV0dG9uJzsKKyAgICB0aGlzLnJpZ2h0Mi52YWx1ZSA9ICc+Pic7CisgICAgdGhpcy5y
aWdodDIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmhhbmRsZUJ1dHRvbkNsaWNrLmJp
bmQodGhpcykpOworICAgIGVsZW1lbnQzLmFwcGVuZENoaWxkKHRoaXMucmlnaHQyKTsKKworICAg
IHRoaXMucmlnaHQzID0gY3JlYXRlRWxlbWVudCgnaW5wdXQnLCBDTEFTUy5ZRUFSX01PTlRIX0JV
VFRPTik7CisgICAgdGhpcy5yaWdodDMudHlwZSA9ICdidXR0b24nOworICAgIHRoaXMucmlnaHQz
LnZhbHVlID0gJz4+Pic7CisgICAgdGhpcy5yaWdodDMuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2sn
LCB0aGlzLmhhbmRsZUJ1dHRvbkNsaWNrLmJpbmQodGhpcykpOworICAgIGVsZW1lbnQzLmFwcGVu
ZENoaWxkKHRoaXMucmlnaHQzKTsKKworICAgIG1haW4uYXBwZW5kQ2hpbGQoZWxlbWVudCk7Cisg
ICAgZ2xvYmFsLmZpcnN0Rm9jdXNhYmxlQ29udHJvbCA9IHRoaXMubGVmdDM7Cit9OworCitZZWFy
TW9udGhDb250cm9sbGVyMi5wcm90b3R5cGUuZ2V0WWVhciA9IGZ1bmN0aW9uKCkgeworICAgIHJl
dHVybiB0aGlzLmN1cnJlbnRZZWFyOworfQorCitZZWFyTW9udGhDb250cm9sbGVyMi5wcm90b3R5
cGUuZ2V0TW9udGggPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5jdXJyZW50TW9udGg7
Cit9CisKK1llYXJNb250aENvbnRyb2xsZXIyLnByb3RvdHlwZS5zZXRZZWFyTW9udGggPSBmdW5j
dGlvbih5ZWFyLCBtb250aCkgeworICAgIHRoaXMuY3VycmVudFllYXIgPSB5ZWFyOworICAgIHRo
aXMuY3VycmVudE1vbnRoID0gbW9udGg7CisgICAgdGhpcy51cGRhdGVVSSgpOworfTsKKworWWVh
ck1vbnRoQ29udHJvbGxlcjIucHJvdG90eXBlLnVwZGF0ZVVJID0gZnVuY3Rpb24oKSB7CisgICAg
dmFyIG1pbiA9IGdsb2JhbC5taW5pbXVtRGF0ZS5nZXRVVENGdWxsWWVhcigpICogMTIgKyBnbG9i
YWwubWluaW11bURhdGUuZ2V0VVRDTW9udGgoKTsKKyAgICB2YXIgbWF4ID0gZ2xvYmFsLm1heGlt
dW1EYXRlLmdldFVUQ0Z1bGxZZWFyKCkgKiAxMiArIGdsb2JhbC5tYXhpbXVtRGF0ZS5nZXRVVENN
b250aCgpOworICAgIHZhciBjdXJyZW50ID0gdGhpcy5jdXJyZW50WWVhciAqIDEyICsgdGhpcy5j
dXJyZW50TW9udGg7CisgICAgdGhpcy5sZWZ0My5kaXNhYmxlZCA9IGN1cnJlbnQgLSAxMyA8IG1p
bjsKKyAgICB0aGlzLmxlZnQyLmRpc2FibGVkID0gY3VycmVudCAtIDIgPCBtaW47CisgICAgdGhp
cy5sZWZ0MS5kaXNhYmxlZCA9IGN1cnJlbnQgLSAxIDwgbWluOworICAgIHRoaXMucmlnaHQxLmRp
c2FibGVkID0gY3VycmVudCArIDEgPiBtYXg7CisgICAgdGhpcy5yaWdodDIuZGlzYWJsZWQgPSBj
dXJyZW50ICsgMiA+IG1heDsKKyAgICB0aGlzLnJpZ2h0My5kaXNhYmxlZCA9IGN1cnJlbnQgKyAx
MyA+IG1heDsKKyAgICB3aGlsZSAodGhpcy5tb250aC5oYXNDaGlsZE5vZGVzKCkpIHsKKyAgICAg
ICAgdGhpcy5tb250aC5yZW1vdmVDaGlsZCh0aGlzLm1vbnRoLmZpcnN0Q2hpbGQpOworICAgIH0K
KyAgICBmb3IgKHZhciBtID0gY3VycmVudCAtIDY7IG0gPD0gY3VycmVudCArIDY7IG0rKykgewor
ICAgICAgICBpZiAobSA8IG1pbiB8fCBtID4gbWF4KQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIHZhciB5ZWFyTW9udGhMYWJlbCA9IGdsb2JhbC5wYXJhbXMubW9udGhMYWJlbHNbbSAl
IDEyXSArICcgJyArIFN0cmluZyhNYXRoLmZsb29yKG0gLyAxMikpOy8vIFhYWCBsb2NhbGl6YXRp
b24KKyAgICAgICAgdmFyIG9wdGlvbiA9IGNyZWF0ZUVsZW1lbnQoJ29wdGlvbicsIHVuZGVmaW5l
ZCwgeWVhck1vbnRoTGFiZWwpOworICAgICAgICBvcHRpb24udmFsdWUgPSBTdHJpbmcoTWF0aC5m
bG9vcihtIC8gMTIpKSArICctJyArIFN0cmluZyhtICUgMTIpOworICAgICAgICB0aGlzLm1vbnRo
LmFwcGVuZENoaWxkKG9wdGlvbik7CisgICAgICAgIGlmIChtID09IGN1cnJlbnQpIHsKKyAgICAg
ICAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9Cit9CisKK1ll
YXJNb250aENvbnRyb2xsZXIyLnByb3RvdHlwZS5oYW5kbGVZZWFyTW9udGhDaGFuZ2UgPSBmdW5j
dGlvbigpIHsKKyAgICB2YXIgcmVzdWx0ID0gdGhpcy5tb250aC52YWx1ZS5tYXRjaCgvKFxkKykt
KFxkKykvKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IHZhciBuZXdZZWFyID0gTnVtYmVyKHJlc3VsdFsxXSk7CisgICAgdmFyIG5ld01vbnRoID0gTnVt
YmVyKHJlc3VsdFsyXSk7CisgICAgaWYgKG5ld1llYXIgPT0gZ2xvYmFsLmxhc3RZZWFyICYmIG5l
d01vbnRoID09IGdsb2JhbC5sYXN0TW9udGgpCisgICAgICAgIHJldHVybjsKKyAgICAvLyBGSVhN
RTogbmF2aWdhdGVUb01vbnRoV2l0aEFuaW1hdGlvbigpIHNob3VsZCBoYW5kbGUgQ0xBU1MuU0xF
Q1RFRD8KKyAgICBuYXZpZ2F0ZVRvTW9udGhXaXRoQW5pbWF0aW9uKG5ld1llYXIsIG5ld01vbnRo
KTsKKyAgICBnbG9iYWwuZGF5c1tnbG9iYWwubGFzdFldW2dsb2JhbC5sYXN0WF0uY2xhc3NMaXN0
LmFkZChDTEFTUy5TRUxFQ1RFRCk7Cit9CisKK1llYXJNb250aENvbnRyb2xsZXIyLnByb3RvdHlw
ZS5oYW5kbGVCdXR0b25DbGljayA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgdmFyIG1pbiA9IGds
b2JhbC5taW5pbXVtRGF0ZS5nZXRVVENGdWxsWWVhcigpICogMTIgKyBnbG9iYWwubWluaW11bURh
dGUuZ2V0VVRDTW9udGgoKTsKKyAgICB2YXIgbWF4ID0gZ2xvYmFsLm1heGltdW1EYXRlLmdldFVU
Q0Z1bGxZZWFyKCkgKiAxMiArIGdsb2JhbC5tYXhpbXVtRGF0ZS5nZXRVVENNb250aCgpOworICAg
IHZhciBjdXJyZW50ID0gdGhpcy5jdXJyZW50WWVhciAqIDEyICsgdGhpcy5jdXJyZW50TW9udGg7
CisgICAgdmFyIHVwZGF0ZWQ7CisgICAgaWYgKGV2ZW50LnRhcmdldCA9PSB0aGlzLmxlZnQzKSB7
CisgICAgICAgIHVwZGF0ZWQgPSBjdXJyZW50IC0gMTIwID49IG1pbiA/IGN1cnJlbnQgLSAxMjAg
OiBtaW47CisgICAgfSBlbHNlIGlmIChldmVudC50YXJnZXQgPT0gdGhpcy5sZWZ0MikgeworICAg
ICAgICB1cGRhdGVkID0gY3VycmVudCAtIDEyID49IG1pbiA/IGN1cnJlbnQgLSAxMiA6IG1pbjsK
KyAgICB9IGVsc2UgaWYgKGV2ZW50LnRhcmdldCA9PSB0aGlzLmxlZnQxKSB7CisgICAgICAgIHVw
ZGF0ZWQgPSBjdXJyZW50IC0gMTsKKyAgICB9IGVsc2UgaWYgKGV2ZW50LnRhcmdldCA9PSB0aGlz
LnJpZ2h0MSkgeworICAgICAgICB1cGRhdGVkID0gY3VycmVudCArIDE7CisgICAgfSBlbHNlIGlm
IChldmVudC50YXJnZXQgPT0gdGhpcy5yaWdodDIpIHsKKyAgICAgICAgdXBkYXRlZCA9IGN1cnJl
bnQgKyAxMiA8PSBtYXggPyBjdXJyZW50ICsgMTIgOiBtYXg7CisgICAgfSBlbHNlIGlmIChldmVu
dC50YXJnZXQgPT0gdGhpcy5yaWdodDMpIHsKKyAgICAgICAgdXBkYXRlZCA9IGN1cnJlbnQgKyAx
MjAgPD0gbWF4ID8gY3VycmVudCArIDEyMCA6IG1heDsKKyAgICB9IGVsc2UgeworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIG5hdmlnYXRlVG9Nb250aFdpdGhBbmltYXRpb24oTWF0aC5mbG9v
cih1cGRhdGVkIC8gMTIpLCB1cGRhdGVkICUgMTIpOworICAgIGdsb2JhbC5kYXlzW2dsb2JhbC5s
YXN0WV1bZ2xvYmFsLmxhc3RYXS5jbGFzc0xpc3QuYWRkKENMQVNTLlNFTEVDVEVEKTsKK30KKyAg
ICAKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKworZnVuY3Rpb24gc3RlcE1pc21hdGNoKHRpbWUpIHsKKyAgICByZXR1
cm4gKHRpbWUgLSBnbG9iYWwubWluaW11bURhdGUuZ2V0VGltZSgpKSAlIGdsb2JhbC5zdGVwICE9
IDA7Cit9CitmdW5jdGlvbiBvdXRPZlJhbmdlKHRpbWUpIHsKKyAgICByZXR1cm4gdGltZSA8IGds
b2JhbC5taW5pbXVtRGF0ZS5nZXRUaW1lKCkgfHwgdGltZSA+IGdsb2JhbC5tYXhpbXVtRGF0ZS5n
ZXRUaW1lKCk7Cit9CisKK2Z1bmN0aW9uIGlzVmFsaWREYXRlKHRpbWUpIHsKKyAgICByZXR1cm4g
IW91dE9mUmFuZ2UodGltZSkgJiYgIXN0ZXBNaXNtYXRjaCh0aW1lKTsKK30KKworLyoqCisgKiBA
cGFyYW0ge251bWJlcn0geWVhcgorICogQHBhcmFtIHtudW1iZXJ9IG1vbnRoCisgKi8KK2Z1bmN0
aW9uIHJlbmRlck1vbnRoKHllYXIsIG1vbnRoKSB7CisgICAgZ2xvYmFsLmxhc3RZZWFyID0geWVh
cjsKKyAgICBnbG9iYWwubGFzdE1vbnRoID0gbW9udGg7CisgICAgdmFyIGRheUl0ZXJhdG9yID0g
bmV3IERhdGUoRGF0ZS5VVEMoeWVhciwgbW9udGgsIDEpKTsKKyAgICBkYXlJdGVyYXRvci5zZXRV
VENGdWxsWWVhcih5ZWFyKTsKKyAgICB2YXIgbW9udGhTdGFydERheSA9IGRheUl0ZXJhdG9yLmdl
dFVUQ0RheSgpOworICAgIHZhciB3ZWVrU3RhcnREYXkgPSBnbG9iYWwucGFyYW1zLndlZWtTdGFy
dERheSB8fCAwOworICAgIHZhciBzdGFydE9mZnNldCA9IHdlZWtTdGFydERheSAtIG1vbnRoU3Rh
cnREYXk7CisgICAgaWYgKHN0YXJ0T2Zmc2V0ID49IDApIHsKKyAgICAgICAgc3RhcnRPZmZzZXQg
LT0gNzsKKyAgICB9CisgICAgZGF5SXRlcmF0b3Iuc2V0VVRDRGF0ZShzdGFydE9mZnNldCArIDEp
OworICAgIGZvciAodmFyIHcgPSAwOyB3IDwgV0VFS1M7IHcrKykgeworICAgICAgICBmb3IgKHZh
ciBkID0gMDsgZCA8IDc7IGQrKykgeworICAgICAgICAgICAgdmFyIGl0ZXJZZWFyID0gZGF5SXRl
cmF0b3IuZ2V0VVRDRnVsbFllYXIoKTsKKyAgICAgICAgICAgIHZhciBpdGVyTW9udGggPSBkYXlJ
dGVyYXRvci5nZXRVVENNb250aCgpOworICAgICAgICAgICAgdmFyIHRpbWUgPSBkYXlJdGVyYXRv
ci5nZXRUaW1lKCk7CisgICAgICAgICAgICB2YXIgZWxlbWVudCA9IGdsb2JhbC5kYXlzW3ddW2Rd
OworICAgICAgICAgICAgZWxlbWVudC5pbm5lclRleHQgPSBTdHJpbmcoZGF5SXRlcmF0b3IuZ2V0
VVRDRGF0ZSgpKTsKKyAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gQ0xBU1MuREFZOwor
ICAgICAgICAgICAgZWxlbWVudC5kYXRhc2V0LnN1Ym1pdFZhbHVlID0gY3JlYXRlRGF0ZVN0cmlu
ZyhpdGVyWWVhciwgaXRlck1vbnRoLCBkYXlJdGVyYXRvci5nZXRVVENEYXRlKCkpOworICAgICAg
ICAgICAgaWYgKG91dE9mUmFuZ2UodGltZSkpIHsKKyAgICAgICAgICAgICAgICBlbGVtZW50LmNs
YXNzTGlzdC5hZGQoQ0xBU1MuVU5BVkFJTEFCTEUpOworICAgICAgICAgICAgfSBlbHNlIGlmIChz
dGVwTWlzbWF0Y2godGltZSkpIHsKKyAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5h
ZGQoQ0xBU1MuVU5BVkFJTEFCTEUpOworICAgICAgICAgICAgfSBlbHNlIGlmICgoaXRlclllYXIg
PT0geWVhciAmJiBkYXlJdGVyYXRvci5nZXRVVENNb250aCgpIDwgbW9udGgpIHx8IChtb250aCA9
PSAwICYmIGl0ZXJNb250aCA9PSAxMSkpIHsKKyAgICAgICAgICAgICAgICAvL2VsZW1lbnQuY2xh
c3NMaXN0LmFkZChDTEFTUy5VTkFWQUlMQUJMRSk7CisgICAgICAgICAgICAgICAgLy9lbGVtZW50
LmNsYXNzTGlzdC5hZGQoQ0xBU1MuVU5BVkFJTEFCTEVfVVApOworICAgICAgICAgICAgICAgIGVs
ZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTUy5BVkFJTEFCTEUpOworICAgICAgICAgICAgICAgIGVs
ZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTUy5OT1RfVEhJU19NT05USCk7CisgICAgICAgICAgICB9
IGVsc2UgaWYgKChpdGVyWWVhciA9PSB5ZWFyICYmIGRheUl0ZXJhdG9yLmdldFVUQ01vbnRoKCkg
PiBtb250aCkgfHwgKG1vbnRoID09IDExICYmIGl0ZXJNb250aCA9PSAwKSkgeworICAgICAgICAg
ICAgICAgIC8vZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTLlVOQVZBSUxBQkxFKTsKKyAgICAg
ICAgICAgICAgICAvL2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTUy5VTkFWQUlMQUJMRV9ET1dO
KTsKKyAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1MuQVZBSUxBQkxF
KTsKKyAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1MuTk9UX1RISVNf
TU9OVEgpOworICAgICAgICAgICAgfSBlbHNlIGlmIChpc05hTih0aW1lKSkgeworICAgICAgICAg
ICAgICAgIGVsZW1lbnQuaW5uZXJUZXh0ID0gJy0nOworICAgICAgICAgICAgICAgIGVsZW1lbnQu
Y2xhc3NMaXN0LmFkZChDTEFTUy5VTkFWQUlMQUJMRSk7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTUy5BVkFJTEFCTEUpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZGF5SXRlcmF0b3Iuc2V0VVRDRGF0ZShkYXlJdGVy
YXRvci5nZXRVVENEYXRlKCkgKyAxKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGdsb2JhbC50
b2RheS5kaXNhYmxlZCA9ICFpc1ZhbGlkRGF0ZShjcmVhdGVEYXRlRnJvbVN0cmluZygpLmdldFRp
bWUoKSk7Cit9CisKKy8qKgorICogQHBhcmFtIHtudW1iZXJ9IHllYXIKKyAqIEBwYXJhbSB7bnVt
YmVyfSBtb250aAorICovCitmdW5jdGlvbiBuYXZpZ2F0ZVRvTW9udGgoeWVhciwgbW9udGgpIHsK
KyAgICBnbG9iYWwueWVhck1vbnRoQ29udHJvbGxlci5zZXRZZWFyTW9udGgoeWVhciwgbW9udGgp
OworICAgIHJlbmRlck1vbnRoKHllYXIsIG1vbnRoKTsKK30KKworLyoqCisgKiBAcGFyYW0ge251
bWJlcn0geWVhcgorICogQHBhcmFtIHtudW1iZXJ9IG1vbnRoCisgKiBAcGFyYW0ge2Jvb2xlYW59
IHJpZ2h0IGZhbHNlOmxlZnQsIHRydWU6cmlnaHQKKyAqLworZnVuY3Rpb24gbmF2aWdhdGVUb01v
bnRoV2l0aEFuaW1hdGlvbih5ZWFyLCBtb250aCkgeworICAgIGlmIChnbG9iYWwubGFzdFllYXIg
Pj0gMCAmJiBnbG9iYWwubGFzdE1vbnRoID49IDApIHsKKyAgICAgICAgaWYgKHllYXIgPT0gZ2xv
YmFsLmxhc3RZZWFyICYmIG1vbnRoID09IGdsb2JhbC5sYXN0TW9udGgpIHsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgZGVjcmVhc2luZyA9IGZhbHNlOworICAg
ICAgICBpZiAoeWVhciA8IGdsb2JhbC5sYXN0WWVhcikgeworICAgICAgICAgICAgZGVjcmVhc2lu
ZyA9IHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAoeWVhciA+IGdsb2JhbC5sYXN0WWVhcikgewor
ICAgICAgICAgICAgZGVjcmVhc2luZyA9IGZhbHNlOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgZGVjcmVhc2luZyA9IG1vbnRoIDwgZ2xvYmFsLmxhc3RNb250aDsKKyAgICAgICAgfQor
ICAgICAgICB2YXIgZGF5c1N0eWxlID0gZ2xvYmFsLmRheXNBcmVhLnN0eWxlOworICAgICAgICBn
bG9iYWwuZGF5c0FyZWEuYWRkRXZlbnRMaXN0ZW5lcignd2Via2l0VHJhbnNpdGlvbkVuZCcsIG1v
dmVJbkRheXMpOworICAgICAgICBkYXlzU3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnOworICAg
ICAgICBkYXlzU3R5bGUud2Via2l0VHJhbnNpdGlvbiA9ICdsZWZ0IDAuMTVzIGVhc2UnOworICAg
ICAgICBkYXlzU3R5bGUubGVmdCA9IChkZWNyZWFzaW5nID8gJycgOiAnLScpICsgZ2xvYmFsLmRh
eXNBcmVhLm9mZnNldFdpZHRoICsgJ3B4JzsKKyAgICB9CisgICAgbmF2aWdhdGVUb01vbnRoKHll
YXIsIG1vbnRoKTsKK30KKworZnVuY3Rpb24gbW92ZUluRGF5cygpIHsKKyAgICB2YXIgZGF5c1N0
eWxlID0gZ2xvYmFsLmRheXNBcmVhLnN0eWxlOworICAgIGdsb2JhbC5kYXlzQXJlYS5yZW1vdmVF
dmVudExpc3RlbmVyKCd3ZWJraXRUcmFuc2l0aW9uRW5kJywgbW92ZUluRGF5cyk7CisgICAgZGF5
c1N0eWxlLndlYmtpdFRyYW5zaXRpb24gPSAnJzsKKyAgICBkYXlzU3R5bGUubGVmdCA9IChkYXlz
U3R5bGUubGVmdC5jaGFyQXQoMCkgPT0gJy0nID8gJycgOiAnLScpICsgZ2xvYmFsLmRheXNBcmVh
Lm9mZnNldFdpZHRoICsgJ3B4JzsKKyAgICBnbG9iYWwuZGF5c0FyZWEub2Zmc2V0TGVmdDsgLy8g
Rm9yY2UgdG8gbGF5b3V0LgorICAgIGRheXNTdHlsZS53ZWJraXRUcmFuc2l0aW9uID0gJ2xlZnQg
MC4xNXMgZWFzZSc7CisgICAgZGF5c1N0eWxlLmxlZnQgPSAnMHB4JzsKK30KKworLyoqCisgKiBA
cGFyYW0ge0RhdGV9IGRhdGUKKyAqLworZnVuY3Rpb24gc2VsZWN0RGF0ZShkYXRlKSB7CisgICAg
bmF2aWdhdGVUb01vbnRoV2l0aEFuaW1hdGlvbihkYXRlLmdldFVUQ0Z1bGxZZWFyKCksIGRhdGUu
Z2V0VVRDTW9udGgoKSk7CisgICAgdmFyIGRhdGVTdHJpbmcgPSBjcmVhdGVEYXRlU3RyaW5nKGRh
dGUuZ2V0VVRDRnVsbFllYXIoKSwgZGF0ZS5nZXRVVENNb250aCgpLCBkYXRlLmdldFVUQ0RhdGUo
KSk7CisgICAgZm9yICh2YXIgdyA9IDA7IHcgPCBXRUVLUzsgdysrKSB7CisgICAgICAgIGZvciAo
dmFyIGQgPSAwOyBkIDwgNzsgZCsrKSB7CisgICAgICAgICAgICBpZiAoZ2xvYmFsLmRheXNbd11b
ZF0uZGF0YXNldC5zdWJtaXRWYWx1ZSA9PSBkYXRlU3RyaW5nKSB7CisgICAgICAgICAgICAgICAg
Z2xvYmFsLmRheXNbd11bZF0uY2xhc3NMaXN0LmFkZChDTEFTUy5TRUxFQ1RFRCk7CisgICAgICAg
ICAgICAgICAgZ2xvYmFsLmxhc3RYID0gZDsKKyAgICAgICAgICAgICAgICBnbG9iYWwubGFzdFkg
PSB3OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorfQorCitmdW5jdGlvbiBtYXliZVNldFByZXZpb3VzTW9udGgoKSB7CisgICAgdmFyIHll
YXIgPSBnbG9iYWwueWVhck1vbnRoQ29udHJvbGxlci5nZXRZZWFyKCk7CisgICAgdmFyIG1vbnRo
ID0gZ2xvYmFsLnllYXJNb250aENvbnRyb2xsZXIuZ2V0TW9udGgoKTsKKyAgICB2YXIgdGhpc01v
bnRoU3RhcnRUaW1lID0gRGF0ZS5VVEMoeWVhciwgbW9udGgsIDEpOworICAgIGlmIChnbG9iYWwu
bWluaW11bURhdGUuZ2V0VGltZSgpID49IHRoaXNNb250aFN0YXJ0VGltZSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmIChtb250aCA9PSAwKSB7CisgICAgICAgIHllYXItLTsKKyAgICAg
ICAgbW9udGggPSAxMTsKKyAgICB9IGVsc2UgeworICAgICAgICBtb250aC0tOworICAgIH0KKyAg
ICBuYXZpZ2F0ZVRvTW9udGhXaXRoQW5pbWF0aW9uKHllYXIsIG1vbnRoKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworZnVuY3Rpb24gbWF5YmVTZXROZXh0TW9udGgoKSB7CisgICAgdmFyIHllYXIg
PSBnbG9iYWwueWVhck1vbnRoQ29udHJvbGxlci5nZXRZZWFyKCk7CisgICAgdmFyIG1vbnRoID0g
Z2xvYmFsLnllYXJNb250aENvbnRyb2xsZXIuZ2V0TW9udGgoKTsKKyAgICBpZiAobW9udGggPT0g
MTEpIHsKKyAgICAgICAgeWVhcisrOworICAgICAgICBtb250aCA9IDA7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgbW9udGgrKzsKKyAgICB9CisgICAgdmFyIG5leHRNb250aFN0YXJ0VGltZSA9IERh
dGUuVVRDKHllYXIsIG1vbnRoLCAxKTsKKyAgICBpZiAoZ2xvYmFsLm1heGltdW1EYXRlLmdldFRp
bWUoKSA8IG5leHRNb250aFN0YXJ0VGltZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG5h
dmlnYXRlVG9Nb250aFdpdGhBbmltYXRpb24oeWVhciwgbW9udGgpOworICAgIHJldHVybiB0cnVl
OworfQorCisvKioKKyAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50CisgKi8KK2Z1bmN0aW9uIGhhbmRs
ZURheUNsaWNrKGV2ZW50KSB7CisgICAgdmFyIHllYXIgPSBnbG9iYWwueWVhck1vbnRoQ29udHJv
bGxlci5nZXRZZWFyKCk7CisgICAgdmFyIG1vbnRoID0gZ2xvYmFsLnllYXJNb250aENvbnRyb2xs
ZXIuZ2V0TW9udGgoKTsKKyAgICB2YXIgY2xhc3NMaXN0ID0gZXZlbnQudGFyZ2V0LmNsYXNzTGlz
dDsKKyAgICBpZiAoY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTLlVOQVZBSUxBQkxFX1VQKSkgewor
ICAgICAgICBtYXliZVNldFByZXZpb3VzTW9udGgoKTsKKyAgICB9IGVsc2UgaWYgKGNsYXNzTGlz
dC5jb250YWlucyhDTEFTUy5VTkFWQUlMQUJMRV9ET1dOKSkgeworICAgICAgICBtYXliZVNldE5l
eHRNb250aCgpOworICAgIH0gZWxzZSBpZiAoY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTLkFWQUlM
QUJMRSkpIHsKKyAgICAgICAgc3VibWl0VmFsdWUoZXZlbnQudGFyZ2V0LmRhdGFzZXQuc3VibWl0
VmFsdWUpOworICAgIH0KK30KKworLyoqCisgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50Cisg
Ki8KK2Z1bmN0aW9uIGhhbmRsZU1vdXNlT3ZlcihldmVudCkgeworICAgIHZhciBub2RlID0gZXZl
bnQudGFyZ2V0OworICAgIGlmICghbm9kZS5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1MuREFZKSkg
eworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChnbG9iYWwubGFzdFggPj0gMCAmJiBn
bG9iYWwubGFzdFkgPj0gMCkgeworICAgICAgICBnbG9iYWwuZGF5c1tnbG9iYWwubGFzdFldW2ds
b2JhbC5sYXN0WF0uY2xhc3NMaXN0LnJlbW92ZShDTEFTUy5TRUxFQ1RFRCk7CisgICAgfQorICAg
IG5vZGUuY2xhc3NMaXN0LmFkZChDTEFTUy5TRUxFQ1RFRCk7CisgICAgZ2xvYmFsLmxhc3RYID0g
TnVtYmVyKG5vZGUuZGF0YXNldC5wb3NpdGlvblgpOworICAgIGdsb2JhbC5sYXN0WSA9IE51bWJl
cihub2RlLmRhdGFzZXQucG9zaXRpb25ZKTsKK30KKworLyoqCisgKiBAcGFyYW0ge0tleWJvYXJk
RXZlbnR9IGV2ZW50CisgKi8KK2Z1bmN0aW9uIGhhbmRsZURheXNBcmVhS2V5KGV2ZW50KSB7Cisg
ICAgaWYgKGdsb2JhbC5sYXN0WCA8IDAgfHwgZ2xvYmFsLmxhc3RZIDwgMCkgeworICAgICAgICBj
b25zb2xlLmxvZygnRmFpbCEgIFdlIHNob3VsZCBoYXZlIGxhc3RYIGFuZCBsYXN0WS4nKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtYXliZVVwZGF0ZUZvY3VzU3R5bGUoKTsKKyAgICB2
YXIga2V5ID0gZXZlbnQua2V5SWRlbnRpZmllcjsKKyAgICAvL2NvbnNvbGUubG9nKCdLSTogJyAr
IGtleSk7CisgICAgdmFyIHggPSBnbG9iYWwubGFzdFg7CisgICAgdmFyIHkgPSBnbG9iYWwubGFz
dFk7CisgICAgaWYgKGtleSA9PSAnTGVmdCcpIHsKKyAgICAgICAgaWYgKHggPT0gMCkgeworICAg
ICAgICAgICAgaWYgKHkgPT0gMCkgeworICAgICAgICAgICAgICAgIGlmICghbWF5YmVTZXRQcmV2
aW91c01vbnRoKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICB5ID0gV0VFS1MgLSAxOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB5
LS07CisgICAgICAgICAgICB9CisgICAgICAgICAgICB4ID0gNjsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIHgtLTsKKyAgICAgICAgfQorICAgICAgICB1cGRhdGVTZWxlY3Rpb24oZXZl
bnQsIHgsIHkpOworICAgIH0gZWxzZSBpZiAoa2V5ID09ICdVcCcpIHsKKyAgICAgICAgaWYgKHkg
PT0gMCkgeworICAgICAgICAgICAgaWYgKCFtYXliZVNldFByZXZpb3VzTW9udGgoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB5ID0gV0VFS1MgLSAxOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgeS0tOworICAgICAgICB9CisgICAgICAgIHVwZGF0ZVNlbGVj
dGlvbihldmVudCwgeCwgeSk7CisgICAgfSBlbHNlIGlmIChrZXkgPT0gJ1JpZ2h0JykgeworICAg
ICAgICBpZiAoeCA9PSA2KSB7CisgICAgICAgICAgICBpZiAoeSA9PSBXRUVLUyAtIDEpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoIW1heWJlU2V0TmV4dE1vbnRoKCkpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB5ID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgeSsrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgeCA9IDA7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB4Kys7CisgICAgICAgIH0KKyAgICAgICAg
dXBkYXRlU2VsZWN0aW9uKGV2ZW50LCB4LCB5KTsKKyAgICB9IGVsc2UgaWYgKGtleSA9PSAnRG93
bicpIHsKKyAgICAgICAgaWYgKHkgPT0gV0VFS1MgLSAxKSB7CisgICAgICAgICAgICBpZiAoIW1h
eWJlU2V0TmV4dE1vbnRoKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
eSA9IDA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB5Kys7CisgICAgICAgIH0KKyAg
ICAgICAgdXBkYXRlU2VsZWN0aW9uKGV2ZW50LCB4LCB5KTsKKyAgICB9IGVsc2UgaWYgKGtleSA9
PSAnUGFnZVVwJykgeworICAgICAgICBpZiAoIW1heWJlU2V0UHJldmlvdXNNb250aCgpKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB1cGRhdGVTZWxlY3Rpb24oZXZlbnQsIHgsIHkpOwor
ICAgIH0gZWxzZSBpZiAoa2V5ID09ICdQYWdlRG93bicpIHsKKyAgICAgICAgaWYgKCFtYXliZVNl
dE5leHRNb250aCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB1cGRhdGVTZWxlY3Rp
b24oZXZlbnQsIHgsIHkpOworICAgIH0gZWxzZSBpZiAoa2V5ID09ICdFbnRlcicpIHsKKyAgICAg
ICAgdmFyIGRheU5vZGUgPSBnbG9iYWwuZGF5c1t5XVt4XTsKKyAgICAgICAgaWYgKGRheU5vZGUu
Y2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTLkFWQUlMQUJMRSkpIHsKKyAgICAgICAgICAgIHN1Ym1p
dFZhbHVlKGRheU5vZGUuZGF0YXNldC5zdWJtaXRWYWx1ZSk7CisgICAgICAgICAgICBldmVudC5z
dG9wUHJvcGFnYXRpb24oKTsKKyAgICAgICAgfSBlbHNlIGlmIChkYXlOb2RlLmNsYXNzTGlzdC5j
b250YWlucyhDTEFTUy5VTkFWQUlMQUJMRV9VUCkpIHsKKyAgICAgICAgICAgIG1heWJlU2V0UHJl
dmlvdXNNb250aCgpOworICAgICAgICAgICAgdXBkYXRlU2VsZWN0aW9uKGV2ZW50LCB4LCB5KTsK
KyAgICAgICAgfSBlbHNlIGlmIChkYXlOb2RlLmNsYXNzTGlzdC5jb250YWlucyhDTEFTUy5VTkFW
QUlMQUJMRV9ET1dOKSkgeworICAgICAgICAgICAgbWF5YmVTZXROZXh0TW9udGgoKTsKKyAgICAg
ICAgICAgIHVwZGF0ZVNlbGVjdGlvbihldmVudCwgeCwgeSk7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgaWYgKGtleSA9PSAnVSswMDU0JykgeyAvLyAndCcKKyAgICAgICAgZ2xvYmFsLmRheXNbZ2xv
YmFsLmxhc3RZXVtnbG9iYWwubGFzdFhdLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1MuU0VMRUNURUQp
OworICAgICAgICBzZWxlY3REYXRlKG5ldyBEYXRlKCkpOworICAgICAgICBldmVudC5zdG9wUHJv
cGFnYXRpb24oKTsKKyAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICB9Cit9CisK
K2Z1bmN0aW9uIHVwZGF0ZVNlbGVjdGlvbihldmVudCwgeCwgeSkgeworICAgIGdsb2JhbC5kYXlz
W2dsb2JhbC5sYXN0WV1bZ2xvYmFsLmxhc3RYXS5jbGFzc0xpc3QucmVtb3ZlKENMQVNTLlNFTEVD
VEVEKTsKKyAgICBnbG9iYWwuZGF5c1t5XVt4XS5jbGFzc0xpc3QuYWRkKENMQVNTLlNFTEVDVEVE
KTsKKyAgICBnbG9iYWwubGFzdFggPSB4OworICAgIGdsb2JhbC5sYXN0WSA9IHk7CisgICAgZXZl
bnQuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKK30KKwor
LyoqCisgKiBAcGFyYW0ge251bWJlcn0geWVhcgorICogQHBhcmFtIHtudW1iZXJ9IG1vbnRoCisg
KiBAcGFyYW0ge251bWJlcn0gZGF5CisgKiBAcmV0dXJuIHtzdHJpbmd9CisgKi8KK2Z1bmN0aW9u
IGNyZWF0ZURhdGVTdHJpbmcoeWVhciwgbW9udGgsIGRheSkgeworICAgIHZhciB5ZWFyU3RyaW5n
ID0gU3RyaW5nKHllYXIpOworICAgIGlmICh5ZWFyU3RyaW5nLmxlbmd0aCA8IDQpCisgICAgICAg
IHllYXJTdHJpbmcgPSAoJzAwMCcgKyB5ZWFyU3RyaW5nKS5zdWJzdHIoLTQsIDQpOworICAgIHJl
dHVybiB5ZWFyU3RyaW5nICsgJy0nICsgKCcwJyArIChtb250aCArIDEpKS5zdWJzdHIoLTIsIDIp
ICsgJy0nICsgKCcwJyArIGRheSkuc3Vic3RyKC0yLCAyKQorfQorCitmdW5jdGlvbiBoYW5kbGVU
b2RheSgpIHsKKyAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKCk7CisgICAgc2VsZWN0RGF0ZShkYXRl
KTsKKyAgICBzdWJtaXRWYWx1ZShjcmVhdGVEYXRlU3RyaW5nKGRhdGUuZ2V0RnVsbFllYXIoKSwg
ZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSkpOworfQorCitmdW5jdGlvbiBoYW5kbGVD
bGVhcigpIHsKKyAgICBzdWJtaXRWYWx1ZSgnJyk7Cit9CisKKy8qKgorICogQHBhcmFtIHtzdHJp
bmd9IHZhbHVlCisgKi8KK2Z1bmN0aW9uIHN1Ym1pdFZhbHVlKHZhbHVlKSB7CisgICAgdmFyIGV2
ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ1RleHRFdmVudCcpOworICAgIGV2ZW50LmluaXRU
ZXh0RXZlbnQoJ3RleHRJbnB1dCcsIGZhbHNlLCBmYWxzZSwgd2luZG93LCB2YWx1ZSk7CisgICAg
d2luZG93LmZyYW1lRWxlbWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKK30KKworZnVuY3Rpb24g
aGFuZGxlQ2FuY2VsKCkgeworICAgIHZhciBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdF
dmVudCcpOworICAgIGV2ZW50LmluaXRFdmVudCgnYWJvcnQnLCBmYWxzZSwgZmFsc2UpOworICAg
IHdpbmRvdy5mcmFtZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChldmVudCk7Cit9CisKKy8qKgorICog
QHBhcmFtIHtLZXlib2FyZEV2ZW50fSBldmVudAorICovCitmdW5jdGlvbiBoYW5kbGVHbG9iYWxL
ZXkoZXZlbnQpIHsKKyAgICBtYXliZVVwZGF0ZUZvY3VzU3R5bGUoKTsKKyAgICBpZiAoZXZlbnQu
a2V5SWRlbnRpZmllciAhPSAnVSswMDA5JykgeworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGlmICghZXZlbnQuc2hpZnRLZXkgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBnbG9iYWwu
bGFzdEZvY3VzYWJsZUNvbnRyb2wpIHsKKyAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7
CisgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgIGdsb2JhbC5maXJzdEZv
Y3VzYWJsZUNvbnRyb2wuZm9jdXMoKTsKKyAgICB9IGVsc2UgaWYgKGV2ZW50LnNoaWZ0S2V5ICYm
IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT0gZ2xvYmFsLmZpcnN0Rm9jdXNhYmxlQ29udHJvbCkg
eworICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICAgICAgZXZlbnQucHJldmVu
dERlZmF1bHQoKTsKKyAgICAgICAgZ2xvYmFsLmxhc3RGb2N1c2FibGVDb250cm9sLmZvY3VzKCk7
CisgICAgfQorfQorCitmdW5jdGlvbiBtYXliZVVwZGF0ZUZvY3VzU3R5bGUoKSB7CisgICAgaWYg
KGdsb2JhbC5oYWRLZXlFdmVudCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGdsb2Jh
bC5oYWRLZXlFdmVudCA9IHRydWU7CisgICAgJCgnbWFpbicpLmNsYXNzTGlzdC5yZW1vdmUoQ0xB
U1MuTk9fRk9DVVNfUklORyk7Cit9CisKKy8vIC0tLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvUmVzb3VyY2VzL2NhbGVuZGFyUGlja2VyX3Rlc3QuaHRtbCBiL1NvdXJjZS9XZWJDb3JlL1Jl
c291cmNlcy9jYWxlbmRhclBpY2tlcl90ZXN0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODgxNDgyZTcxMmRh
NjcxZmI1NjVhNTkwOGU3NDUwMDgwZDM5ZTUzOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1Jlc291cmNlcy9jYWxlbmRhclBpY2tlcl90ZXN0Lmh0bWwKQEAgLTAsMCArMSw4OCBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgY2hhcnNldD11dGYtOD4K
Kzx0aXRsZT5DYWxlbmRhciBQaWNrZXIgdGVzdDwvdGl0bGU+Cis8c3R5bGU+Citib2R5IHsKKyAg
YmFja2dyb3VuZC1jb2xvcjogI2ZmZWVlZTsKK30KK2lmcmFtZSB7CisgICAgei1pbmRleDogMjE0
NzQ4MzY0NzsKKy8qICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsqLworLyogICAgYmFja2dyb3VuZC1j
b2xvcjogI2RkZWVmZjsgKi8KKyAgICB3aWR0aDogMjU2cHg7CisgICAgaGVpZ2h0OiAyNTZweDsK
Ky8qICAgIGJveC1zaGFkb3c6IDRweCA0cHggNHB4ICNjY2M7Ki8KKyAgICBvcGFjaXR5OiAwOwor
ICAgIGJvcmRlcjogMDsKKyAgICBvdmVyZmxvdzogaGlkZGVuOworfQorPC9zdHlsZT4KKzwvaGVh
ZD4KKzxib2R5PgorCis8ZGl2PjxpbnB1dCB0eXBlPWRhdGUgaWQ9ZGF0ZT48L2Rpdj4KKzxpZnJh
bWU+PC9pZnJhbWU+CisKKzxvbCBpZD1jb25zb2xlIHN0eWxlPSJoZWlnaHQ6MjAwMHB4OyI+Cis8
L29sPgorCis8c2NyaXB0PgordmFyIGZyYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05h
bWUoJ2lmcmFtZScpWzBdOwordmFyIGRvYyA9IGZyYW1lLmNvbnRlbnREb2N1bWVudDsKK2RvYy5k
b2N1bWVudEVsZW1lbnQuaW5uZXJIVE1MID0gJzxoZWFkPjwvaGVhZD48Ym9keT48ZGl2IGlkPW1h
aW4+TG9hZGluZy4uLjwvZGl2PjwvYm9keT4nOwordmFyIGxpbmsgPSBkb2MuY3JlYXRlRWxlbWVu
dCgnbGluaycpOworbGluay5yZWwgPSAnc3R5bGVzaGVldCc7CitsaW5rLmhyZWYgPSAnY2FsZW5k
YXJQaWNrZXIuY3NzPycgKyAobmV3IERhdGUoKSkuZ2V0VGltZSgpOworZG9jLmhlYWQuYXBwZW5k
Q2hpbGQobGluayk7Cit2YXIgc2NyaXB0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOwor
c2NyaXB0LnNyYyA9ICdjYWxlbmRhclBpY2tlci5qcz8nICsgKG5ldyBEYXRlKCkpLmdldFRpbWUo
KTsKK2RvYy5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdCk7CisKK3ZhciBhcmdzX2VuID0geworICAg
IG1vbnRoTGFiZWxzIDogWydKYW51YXJ5JywgJ0ZlYnJ1YXJ5JywgJ01hcmNoJywgJ0FwcmlsJywg
J01heScsICdKdW5lJywKKyAgICAnSnVseScsICdBdWd1c3QnLCAnU2VwdGVtYmVyJywgJ09jdG9i
ZXInLCAnTm92ZW1iZXInLCAnRGVjZW1iZXInXSwKKyAgICBkYXlMYWJlbHMgOiBbJ1N1bicsICdN
b24nLCAnVHVlJywgJ1dlZCcsICdUaHUnLCAnRnJpJywgJ1NhdCddLAorICAgIHRvZGF5TGFiZWwg
OiAnVG9kYXknLAorICAgIGNsZWFyTGFiZWwgOiAnQ2xlYXInLAorICAgIGNhbmNlbExhYmVsIDog
J0NhbmNlbCcsCisgICAgd2Vla1N0YXJ0RGF5IDogMCwKKyAgICBzdGVwIDogMSwKKyAgICBtYXgg
OiAnMjAxMS0xMi0zMScsCit9OwordmFyIGFyZ3NfamEgPSB7CisgICAgbW9udGhMYWJlbHMgOiBb
JzHmnIgnLCAnMuaciCcsICcz5pyIJywgJzTmnIgnLCAnNeaciCcsICc25pyIJywKKyAgICAnN+ac
iCcsICc45pyIJywgJznmnIgnLCAnMTDmnIgnLCAnMTHmnIgnLCAnMTLmnIgnXSwKKyAgICBkYXlM
YWJlbHMgOiBbJ+aXpScsICfmnIgnLCAn54GrJywgJ+awtCcsICfmnKgnLCAn6YeRJywgJ+Wcnydd
LAorICAgIHRvZGF5TGFiZWwgOiAn5LuK5pelJywKKyAgICBjbGVhckxhYmVsIDogJ+OCr+ODquOC
oicsCisgICAgY2FuY2VsTGFiZWwgOiAn5Y+W44KK5raI44GXJywKKyAgICB3ZWVrU3RhcnREYXkg
OiAwLAorICAgIHN0ZXAgOiAxLAorICAgIG1heCA6ICcyMDExLTAzLTE1JywKK307CitzZXRUaW1l
b3V0KGZ1bmN0aW9uKCkgeyBmcmFtZS5jb250ZW50V2luZG93LnBvc3RNZXNzYWdlKEpTT04uc3Ry
aW5naWZ5KGFyZ3NfZW4pLCAiKiIpOyB9LCAxMDApOworCisKK2ZyYW1lLmFkZEV2ZW50TGlzdGVu
ZXIoJ3RleHRJbnB1dCcsIGhhbmRsZVRleHRJbnB1dCk7CitmcmFtZS5hZGRFdmVudExpc3RlbmVy
KCdhYm9ydCcsIGhhbmRsZUFib3J0KTsKKworZnVuY3Rpb24gbG9nKHN0cikgeworICAgIHZhciBl
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGknKTsKKyAgICBlLmlubmVyVGV4dCA9IHN0cjsK
KyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmFwcGVuZENoaWxkKGUpOwor
fQorCitmdW5jdGlvbiBoYW5kbGVUZXh0SW5wdXQoZXZlbnQpIHsKKyAgICBsb2coJ3RleHRJbnB1
dCBkYXRlPScgKyBldmVudC5kYXRhKTsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGF0
ZScpLnZhbHVlID0gZXZlbnQuZGF0YTsKK30KKworZnVuY3Rpb24gaGFuZGxlQWJvcnQoZXZlbnQp
IHsKKyAgICBsb2coJ2Fib3J0Jyk7Cit9CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IDQxNjM0ZjA2ZDYwMmVhYWI2YmUwMmM0MzlmY2RhZDg2Njg3MTg2OTQuLmVjZjZjMGUxZWQ1
MDhhNDBhMDBkMmFlYzcyMWQzOTE5MTc1MWQ1OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTU2MTAsNiArNTYxMCw4IEBACiAJ
CUY0RUFGNEFFMTBDNzQyQjEwMDkxMDBEMyAvKiBPcGVuVHlwZVNhbml0aXplci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNEVBRjRBQzEwQzc0MkIx
MDA5MTAwRDMgLyogT3BlblR5cGVTYW5pdGl6ZXIuY3BwICovOyB9OwogCQlGNEVBRjRBRjEwQzc0
MkIxMDA5MTAwRDMgLyogT3BlblR5cGVTYW5pdGl6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0RUFGNEFEMTBDNzQyQjEwMDkxMDBEMyAvKiBPcGVu
VHlwZVNhbml0aXplci5oICovOyB9OwogCQlGNTE0MkM2OTEyM0YxMkIwMDBGNUJENEMgLyogTG9j
YWxpemVkTnVtYmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGNTE0MkM2ODEyM0YxMkIwMDBGNUJENEMgLyogTG9jYWxpemVkTnVtYmVyLmggKi87IH07
CisJCUY1MjNDOUE4MTJGRkI3N0MwMDFFNDUxQiAvKiBDYWxlbmRhclBpY2tlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzQzlBNzEyRkZCNzdD
MDAxRTQ1MUIgLyogQ2FsZW5kYXJQaWNrZXIuY3BwICovOyB9OworCQlGNTIzQzlBQTEyRkZCN0VG
MDAxRTQ1MUIgLyogQ2FsZW5kYXJQaWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNDOUE5MTJGRkI3RUYwMDFFNDUxQiAvKiBDYWxlbmRhclBp
Y2tlci5oICovOyB9OwogCQlGNTVCM0RBRDEyNTFGMTJEMDAzRUYyNjkgLyogQmFzZVRleHRJbnB1
dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RjU1QjNENzkxMjUxRjEyRDAwM0VGMjY5IC8qIEJhc2VUZXh0SW5wdXRUeXBlLmNwcCAqLzsgfTsK
IAkJRjU1QjNEQUUxMjUxRjEyRDAwM0VGMjY5IC8qIEJhc2VUZXh0SW5wdXRUeXBlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTVCM0Q3QTEyNTFGMTJE
MDAzRUYyNjkgLyogQmFzZVRleHRJbnB1dFR5cGUuaCAqLzsgfTsKIAkJRjU1QjNEQUYxMjUxRjEy
RDAwM0VGMjY5IC8qIEJ1dHRvbklucHV0VHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTVCM0Q3QjEyNTFGMTJEMDAzRUYyNjkgLyogQnV0dG9u
SW5wdXRUeXBlLmNwcCAqLzsgfTsKQEAgLTEyMDIzLDYgKzEyMDI1LDggQEAKIAkJRjRFQUY0QUMx
MEM3NDJCMTAwOTEwMEQzIC8qIE9wZW5UeXBlU2FuaXRpemVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE9wZW5UeXBlU2FuaXRpemVyLmNwcDsgcGF0aCA9IG9wZW50
eXBlL09wZW5UeXBlU2FuaXRpemVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RjRFQUY0QUQxMEM3NDJCMTAwOTEwMEQzIC8qIE9wZW5UeXBlU2FuaXRpemVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE9wZW5UeXBlU2FuaXRpemVyLmg7IHBhdGggPSBvcGVu
dHlwZS9PcGVuVHlwZVNhbml0aXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
NTE0MkM2ODEyM0YxMkIwMDBGNUJENEMgLyogTG9jYWxpemVkTnVtYmVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvY2FsaXplZE51bWJlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlGNTIzQzlBNzEyRkZCNzdDMDAxRTQ1MUIgLyogQ2FsZW5kYXJQaWNrZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ2FsZW5kYXJQaWNrZXIu
Y3BwOyBwYXRoID0gQ2FsZW5kYXJQaWNrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGNTIzQzlBOTEyRkZCN0VGMDAxRTQ1MUIgLyogQ2FsZW5kYXJQaWNrZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ2FsZW5kYXJQaWNrZXIuaDsgcGF0aCA9IENhbGVu
ZGFyUGlja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY1MjNEMjNCMDJERTQz
OTYwMTg2MzVDQSAvKiBIVE1MRG9jdW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTERvY3VtZW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1MjNEMjND
MDJERTQzOTYwMTg2MzVDQSAvKiBIVE1MRG9jdW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTERvY3VtZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNTIzRDIzRTAy
REU0Mzk2MDE4NjM1Q0EgLyogSFRNTEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTEVsZW1lbnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKQEAgLTEzNzcw
LDYgKzEzNzc0LDggQEAKIAkJNjU2NTgwRUMwOUQxMkIyMDAwMEU2MUQ3IC8qIERlcml2ZWQgU291
cmNlcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJRjUy
M0M5QTcxMkZGQjc3QzAwMUU0NTFCIC8qIENhbGVuZGFyaWNrZXIuY3BwICovLAorCQkJCUY1MjND
OUE5MTJGRkI3RUYwMDFFNDUxQiAvKiBDYWxlbmRhclBpY2tlci5oICovLAogCQkJCTY1NjU4MUFD
MDlEMTRFRTYwMDBFNjFENyAvKiBDaGFyc2V0RGF0YS5jcHAgKi8sCiAJCQkJRTQwNkYzRkIxMTk4
MzA3RDAwOUQ1OUQ2IC8qIENvbG9yRGF0YS5jcHAgKi8sCiAJCQkJNjU2NTgxNDQwOUQxMzA0MzAw
MEU2MUQ3IC8qIENTU0dyYW1tYXIuY3BwICovLApAQCAtMTk2NDEsNiArMTk2NDcsNyBAQAogCQkJ
CUJDRDUzMzY0MEVENjg0ODkwMDg4NzQ2OCAvKiBDYWNoZWRTY3JpcHRTb3VyY2VQcm92aWRlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkNCMTZDMjgwOTc5QzNCRDAwNDY3NzQxIC8qIENhY2hlZFhT
TFN0eWxlU2hlZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OTUwMDgyNDVFNTkwMDFFOUFC
QyAvKiBDYWNoZVBvbGljeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRjUyM0M5QUExMkZGQjdFRjAw
MUU0NTFCIC8qIENhbGVuZGFyUGlja2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RTRFOTFBRDEw
RjdGQjMxMDBBMjc3OUMgLyogQ2FudmFzQ29udGV4dEF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTQ5NDg0RkMyMTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNHcmFkaWVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNDk0ODRGQzUxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1BhdHRlcm4u
aCBpbiBIZWFkZXJzICovLApAQCAtMjI5MzAsNiArMjI5MzcsNyBAQAogCQkJCUQwRDE0MUIyMTJC
MkJGNTIwMEUzOTYyMCAvKiBDYWNoZWRSZXNvdXJjZVJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQkNCMTZDMjMwOTc5QzNCRDAwNDY3NzQxIC8qIENhY2hlZFNjcmlwdC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCQ0IxNkMyNzA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVkWFNMU3R5bGVT
aGVldC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGNTIzQzlBODEyRkZCNzdDMDAxRTQ1MUIgLyog
Q2FsZW5kYXJQaWNrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNkU0RTkxQUMxMEY3RkIzMTAw
QTI3NzlDIC8qIENhbnZhc0NvbnRleHRBdHRyaWJ1dGVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTQ5NDg0RkMxMTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNHcmFkaWVudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk0OTQ4NEZDNDEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFzUGF0dGVybi5jcHAg
aW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9odG1sLmNzcyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9odG1sLmNzcwppbmRleCA2MTE3OGQwZDk1OGMwZGQ0OWE4ZDRh
NWI4ZDBmOWI4YmY0NjIxYmYzLi4wNjBiMjQwM2NiODM2YTI1MDZkNDg4NWJmZmE0MDQwZmFhYzk0
Y2ExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvaHRtbC5jc3MKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL2h0bWwuY3NzCkBAIC02MzgsNiArNjM4LDI5IEBAIG91dHB1dCB7CiAgICAg
bGVmdDogMnB4OyAvKiA8b3V0ZXItYXJyb3cgcG9zaXRpb24+ICsgPG1lc3NhZ2UgYm9yZGVyIHdp
ZHRoPiAtIDxib3JkZXIgYm94IHdpZHRoIG9mIG91dGVyLWFycm93PiAgKi8KIH0KIAorLyogQ2Fs
ZW5kYXIgcGlja2VyICovCisKKzo6LXdlYmtpdC1kaWFsb2ctYmFja2dyb3VuZCB7CisgICAgei1p
bmRleDogMjE0NzQ4MzY0NjsKKyAgICB3aWR0aDogMTAwJTsKKyAgICBoZWlnaHQ6IDEwMCU7Cisg
ICAgcG9zaXRpb246IGZpeGVkOworICAgIHRvcDogMDsKKyAgICBsZWZ0OiAwOworICAgIGJhY2tn
cm91bmQtY29sb3I6IGJsYWNrOworICAgIG9wYWNpdHk6IDAuMTsKK30KKworOjotd2Via2l0LWRp
YWxvZy1mcmFtZSB7CisgICAgei1pbmRleDogMjE0NzQ4MzY0NzsKKyAgICBwb3NpdGlvbjogYWJz
b2x1dGU7CisgICAgYm9yZGVyOiAwOworICAgIHdpZHRoOiAyMTZweDsKKyAgICBoZWlnaHQ6IDIz
NHB4OworICAgIG9wYWNpdHk6IDA7CisgICAgb3ZlcmZsb3c6IGhpZGRlbjsKK30KKwogLyogbWV0
ZXIgKi8KIAogbWV0ZXIgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9EYXRlSW5w
dXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRGF0ZUlucHV0VHlwZS5jcHAKaW5kZXgg
MzQwOWQzYjRmOGU3YWViMmM2ODg3OWQwNjUwYzg3ZDYzYzk4MGVlMy4uNzBjMmI1ZGZjN2EyY2U5
ZmYyZjRjODc3NjIzMGFmMTUwYmY4MjBlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9EYXRlSW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0RhdGVJbnB1dFR5
cGUuY3BwCkBAIC0zMSw5ICszMSwxOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkRhdGVJbnB1dFR5cGUuaCIKIAorI2luY2x1ZGUgIkNhbGVuZGFyUGlja2VyLmgiCisjaW5jbHVk
ZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRGF0ZUNvbXBvbmVudHMuaCIKKyNpbmNsdWRlICJF
dmVudC5oIgorI2luY2x1ZGUgIkhUTUxJRnJhbWVFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTElu
cHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxTY3Jp
cHRFbGVtZW50LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIk1vdXNlRXZlbnQu
aCIKKyNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKKyNpbmNsdWRlICJUZXh0RXZl
bnQuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC00Myw2ICs1MiwxMSBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogc3RhdGljIGNv
bnN0IGRvdWJsZSBkYXRlRGVmYXVsdFN0ZXAgPSAxLjA7CiBzdGF0aWMgY29uc3QgZG91YmxlIGRh
dGVTdGVwU2NhbGVGYWN0b3IgPSA4NjQwMDAwMC4wOwogCitEYXRlSW5wdXRUeXBlOjpEYXRlSW5w
dXRUeXBlKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpCisgICAgOiBCYXNlRGF0ZUFuZFRpbWVJ
bnB1dFR5cGUoZWxlbWVudCkKK3sKK30KKwogUGFzc093blB0cjxJbnB1dFR5cGU+IERhdGVJbnB1
dFR5cGU6OmNyZWF0ZShIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KQogewogICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgRGF0ZUlucHV0VHlwZShlbGVtZW50KSk7CkBAIC05MSw0ICsxMDUsMTcxIEBA
IGJvb2wgRGF0ZUlucHV0VHlwZTo6c2V0TWlsbGlzZWNvbmRUb0RhdGVDb21wb25lbnRzKGRvdWJs
ZSB2YWx1ZSwgRGF0ZUNvbXBvbmVudHMqCiAgICAgcmV0dXJuIGRhdGUtPnNldE1pbGxpc2Vjb25k
c1NpbmNlRXBvY2hGb3JEYXRlKHZhbHVlKTsKIH0KIAorLy8gRklYTUU6IHNob3VsZCBiZSBtb3Zl
ZCB0byBXZWJDb3JlL2h0bWwvc2hhZG93LworY2xhc3MgRGlhbG9nQmFja2dyb3VuZEVsZW1lbnQg
OiBwdWJsaWMgSFRNTEVsZW1lbnQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhU
TUxFbGVtZW50PiBjcmVhdGUoRGF0ZUlucHV0VHlwZSogaW5wdXRUeXBlLCBEb2N1bWVudCogZG9j
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEaWFsb2dCYWNrZ3JvdW5kRWxl
bWVudChpbnB1dFR5cGUsIGRvYykpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBEaWFsb2dCYWNr
Z3JvdW5kRWxlbWVudChEYXRlSW5wdXRUeXBlKiBpbnB1dFR5cGUsIERvY3VtZW50KiBkb2MpCisg
ICAgICAgIDogSFRNTEVsZW1lbnQoZGl2VGFnLCBkb2MpCisgICAgICAgICwgbV9pbnB1dFR5cGUo
aW5wdXRUeXBlKSB7IH0KKworICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQ
c2V1ZG9JZCgpIGNvbnN0CisgICAgeworICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0
IEF0b21pY1N0cmluZywgcHNldWRvSWQsICgiLXdlYmtpdC1kaWFsb2ctYmFja2dyb3VuZCIpKTsK
KyAgICAgICAgcmV0dXJuIHBzZXVkb0lkOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkZWZh
dWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKKyAgICB7CisgICAgICAgIGlmIChldmVudC0+
aXNNb3VzZUV2ZW50KCkpIHsKKyAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgp
OworICAgICAgICAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZl
bnQpCisgICAgICAgICAgICAgICAgbV9pbnB1dFR5cGUtPmNsb3NlRGlhbG9nKCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgSFRNTEVsZW1lbnQ6OmRlZmF1bHRFdmVu
dEhhbmRsZXIoZXZlbnQpOworICAgIH0KKworICAgIERhdGVJbnB1dFR5cGUqIG1faW5wdXRUeXBl
OworfTsKKworLy8gRklYTUU6IHNob3VsZCBiZSBtb3ZlZCB0byBXZWJDb3JlL2h0bWwvc2hhZG93
LworY2xhc3MgSUZyYW1lV2l0aFBzZXVkb0lkIDogcHVibGljIEhUTUxJRnJhbWVFbGVtZW50IHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJRnJhbWVXaXRoUHNldWRvSWQ+IGNyZWF0
ZShEYXRlSW5wdXRUeXBlKiBpbnB1dFR5cGUsIERvY3VtZW50KiBkb2N1bWVudCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSUZyYW1lV2l0aFBzZXVkb0lkKGlucHV0VHlwZSwg
ZG9jdW1lbnQpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSUZyYW1lV2l0aFBzZXVkb0lkKERh
dGVJbnB1dFR5cGUqIGlucHV0VHlwZSwgRG9jdW1lbnQqIGRvY3VtZW50KQorICAgICAgICA6IEhU
TUxJRnJhbWVFbGVtZW50KGlmcmFtZVRhZywgZG9jdW1lbnQpCisgICAgICAgICwgbV9pbnB1dFR5
cGUoaW5wdXRUeXBlKSB7IH07CisKKyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgc2hh
ZG93UHNldWRvSWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChj
b25zdCBBdG9taWNTdHJpbmcsIHBzZXVkb0lkLCAoIi13ZWJraXQtZGlhbG9nLWZyYW1lIikpOwor
ICAgICAgICByZXR1cm4gcHNldWRvSWQ7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRlZmF1
bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQorICAgIHsKKyAgICAgICAgaWYgKGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLnRleHRJbnB1dEV2ZW50KSB7CisgICAgICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgInRleHRJbnB1dFxuIik7CisgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVs
dEhhbmRsZWQoKTsKKyAgICAgICAgICAgIG1faW5wdXRUeXBlLT5jbG9zZURpYWxvZ0FuZFNldFZh
bHVlKHN0YXRpY19jYXN0PFRleHRFdmVudCo+KGV2ZW50KS0+ZGF0YSgpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5h
bWVzKCkuYWJvcnRFdmVudCkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJjYW5jZWxc
biIpOworICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgICAg
ICBtX2lucHV0VHlwZS0+Y2xvc2VEaWFsb2coKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBIVE1MSUZyYW1lRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVu
dCk7CisgICAgfQorCisgICAgRGF0ZUlucHV0VHlwZSogbV9pbnB1dFR5cGU7Cit9OworCitzdGF0
aWMgdm9pZCBidWlsZFBpY2tlckRvY3VtZW50KEhUTUxJRnJhbWVFbGVtZW50KiBmcmFtZSkKK3sK
KyAgICBmcmFtZS0+Y29udGVudFdpbmRvdygpLT5mb2N1cygpOworICAgIERvY3VtZW50KiBkaWFs
b2dEb2N1bWVudCA9IGZyYW1lLT5jb250ZW50RG9jdW1lbnQoKTsKKyAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICBTdHJpbmcgc3R5bGUoY2FsZW5kYXJQaWNrZXJDc3MsIHNpemVvZihjYWxl
bmRhclBpY2tlckNzcykpOworICAgIHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4oZGlhbG9nRG9j
dW1lbnQtPmRvY3VtZW50RWxlbWVudCgpKS0+c2V0SW5uZXJIVE1MKCI8aGVhZD48c3R5bGU+IiAr
IHN0eWxlICsgIjwvc3R5bGU+PC9oZWFkPjxib2R5PjxkaXYgaWQ9bWFpbj5Mb2FkaW5nLi4uPC9k
aXY+PC9ib2R5PiIsIGVjKTsKKyAgICBSZWZQdHI8SFRNTFNjcmlwdEVsZW1lbnQ+IHNjcmlwdCA9
IEhUTUxTY3JpcHRFbGVtZW50OjpjcmVhdGUoc2NyaXB0VGFnLCBkaWFsb2dEb2N1bWVudCwgZmFs
c2UpOworICAgIFN0cmluZyBzY3JpcHRTb3VyY2UoY2FsZW5kYXJQaWNrZXJKcywgc2l6ZW9mKGNh
bGVuZGFyUGlja2VySnMpKTsKKyAgICBzY3JpcHQtPnNldFRleHQoc2NyaXB0U291cmNlKTsKKyAg
ICBkaWFsb2dEb2N1bWVudC0+Ym9keSgpLT5hcHBlbmRDaGlsZChzY3JpcHQucmVsZWFzZSgpLCBl
Yyk7Cit9CisKK3N0YXRpYyB2b2lkIHNlbmRNZXNzYWdlKEhUTUxJRnJhbWVFbGVtZW50KiBmcmFt
ZSwgRE9NV2luZG93KiB3aW5kb3csIEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAg
RGF0ZUNvbXBvbmVudHMgZGF0ZTsKKyAgICBkYXRlLnNldE1pbGxpc2Vjb25kc1NpbmNlRXBvY2hG
b3JEYXRlKGVsZW1lbnQtPm1pbmltdW0oKSk7CisgICAgU3RyaW5nIG1pblN0cmluZyA9IGRhdGUu
dG9TdHJpbmcoKTsKKyAgICBkYXRlLnNldE1pbGxpc2Vjb25kc1NpbmNlRXBvY2hGb3JEYXRlKGVs
ZW1lbnQtPm1heGltdW0oKSk7CisgICAgU3RyaW5nIG1heFN0cmluZyA9IGRhdGUudG9TdHJpbmco
KTsKKyAgICBkb3VibGUgc3RlcDsKKyAgICBTdHJpbmcgc3RlcFN0cmluZyA9IGVsZW1lbnQtPmZh
c3RHZXRBdHRyaWJ1dGUoc3RlcEF0dHIpOworICAgIGlmIChzdGVwU3RyaW5nLmlzRW1wdHkoKSB8
fCAhZWxlbWVudC0+Z2V0QWxsb3dlZFZhbHVlU3RlcCgmc3RlcCkpCisgICAgICAgIHN0ZXBTdHJp
bmcgPSAiMSI7CisKKyAgICAvLyBGSVhNRTogQnVpbGQgd2l0aCBsb2NhbGl6ZWQgbGFiZWxzLgor
ICAgIFN0cmluZyBtZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoCisgICAgICAgICJ7XCJtb250aExh
YmVsc1wiOltcIkphbnVhcnlcIiwgXCJGZWJydWFyeVwiLCBcIk1hcmNoXCIsIFwiQXByaWxcIiwg
XCJNYXlcIiwgXCJKdW5lXCIsICIKKyAgICAgICAgIlwiSnVseVwiLCBcIkF1Z3VzdFwiLCBcIlNl
cHRlbWJlclwiLCBcIk9jdG9iZXJcIiwgXCJOb3ZlbWJlclwiLCBcIkRlY2VtYmVyXCJdLCIKKyAg
ICAgICAgIlwiZGF5TGFiZWxzXCI6W1wiTW9uXCIsIFwiVHVlXCIsIFwiV2VkXCIsIFwiVGh1XCIs
IFwiRnJpXCIsIFwiU2F0XCIsIFwiU3VuXCJdLCIKKyAgICAgICAgIlwiY2FuY2VsTGFiZWxcIjpc
IkNhbmNlbFwiLCIKKyAgICAgICAgIlwiY2xlYXJMYWJlbFwiOlwiQ2xlYXJcIiwiCisgICAgICAg
ICJcInRvZGF5TGFiZWxcIjpcIlRvZGF5XCIsIgorICAgICAgICAiXCJyZXF1aXJlZFwiOiVzLCIK
KyAgICAgICAgIlwibWluXCI6XCIlc1wiLCIKKyAgICAgICAgIlwibWF4XCI6XCIlc1wiLCIKKyAg
ICAgICAgIlwic3RlcFwiOlwiJXNcIiwiCisgICAgICAgICJcImN1cnJlbnRWYWx1ZVwiOlwiJXNc
IiIKKyAgICAgICAgIn0iLAorICAgICAgICBlbGVtZW50LT5yZXF1aXJlZCgpID8gInRydWUiIDog
ImZhbHNlIiwKKyAgICAgICAgbWluU3RyaW5nLnV0ZjgoKS5kYXRhKCksCisgICAgICAgIG1heFN0
cmluZy51dGY4KCkuZGF0YSgpLAorICAgICAgICBzdGVwU3RyaW5nLnV0ZjgoKS5kYXRhKCksCisg
ICAgICAgIGVsZW1lbnQtPnZhbHVlKCkudXRmOCgpLmRhdGEoKSk7CisgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CisgICAgZnJhbWUtPmNvbnRlbnRXaW5kb3coKS0+cG9zdE1lc3NhZ2UoU2VyaWFs
aXplZFNjcmlwdFZhbHVlOjpjcmVhdGUobWVzc2FnZSksIHN0YXRpY19jYXN0PE1lc3NhZ2VQb3J0
Kj4oMCksICIqIiwgd2luZG93LCBlYyk7Cit9CisKK3ZvaWQgRGF0ZUlucHV0VHlwZTo6aGFuZGxl
TW91c2VEb3duRXZlbnQoTW91c2VFdmVudCogZXZlbnQpCit7CisgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBhZGQgYSBidXR0b24gdG8gb3BlbiBhIGNhbGVuZGVyIHBpY2tlci4KKyAgICAvLyBZYXkh
IE1ha2luZyBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUgbW9yZSBjb21wbGV4ISEhCisKKyAg
ICBBU1NFUlQoIW1fcGlja2VyRnJhbWUpOworICAgIC8vIFNob3VsZCBiZSBtb3ZlZCB0byBhIHJl
bmRlcmVyPworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIERvY3VtZW50KiBkb2MgPSBl
bGVtZW50KCktPmRvY3VtZW50KCk7CisgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisK
KyAgICBOb2RlKiBzaGFkb3dSb290ID0gZWxlbWVudCgpLT5zaGFkb3dSb290KCk7CisgICAgQVNT
RVJUKHNoYWRvd1Jvb3QpOworICAgIG1fZGlhbG9nQmFja2dyb3VuZCA9IERpYWxvZ0JhY2tncm91
bmRFbGVtZW50OjpjcmVhdGUodGhpcywgZG9jKTsKKyAgICBzaGFkb3dSb290LT5hcHBlbmRDaGls
ZChtX2RpYWxvZ0JhY2tncm91bmQuZ2V0KCksIGVjKTsKKyAgICBtX3BpY2tlckZyYW1lID0gSUZy
YW1lV2l0aFBzZXVkb0lkOjpjcmVhdGUodGhpcywgZG9jKTsKKyAgICBzaGFkb3dSb290LT5hcHBl
bmRDaGlsZChtX3BpY2tlckZyYW1lLmdldCgpLCBlYyk7CisgICAgSW50UmVjdCBpbnB1dEJvdW5k
UmVjdCA9IGVsZW1lbnQoKS0+Z2V0UmVjdCgpOworICAgIFN0cmluZyBzdHlsZVZhbHVlID0gInRv
cDoiICsgU3RyaW5nOjpudW1iZXIoaW5wdXRCb3VuZFJlY3QubWF4WSgpKSArICJweDsiOworICAg
IG1fcGlja2VyRnJhbWUtPnNldEF0dHJpYnV0ZShzdHlsZUF0dHIsIHN0eWxlVmFsdWUpOworCisg
ICAgYnVpbGRQaWNrZXJEb2N1bWVudChtX3BpY2tlckZyYW1lLmdldCgpKTsKKyAgICBzZW5kTWVz
c2FnZShtX3BpY2tlckZyYW1lLmdldCgpLCBkb2MtPmRvbVdpbmRvdygpLCBlbGVtZW50KCkpOwor
fQorCit2b2lkIERhdGVJbnB1dFR5cGU6OmNyZWF0ZVNoYWRvd1N1YnRyZWUoKQoreworICAgIG1f
cm9vdCA9IEhUTUxFbGVtZW50OjpjcmVhdGUoc3BhblRhZywgZWxlbWVudCgpLT5kb2N1bWVudCgp
KTsKKyAgICBlbGVtZW50KCktPnNldFNoYWRvd1Jvb3QobV9yb290KTsKK30KKwordm9pZCBEYXRl
SW5wdXRUeXBlOjpjbG9zZURpYWxvZygpCit7CisgICAgQVNTRVJUKG1fcGlja2VyRnJhbWUpOwor
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGVsZW1lbnQoKS0+c2hhZG93Um9vdCgpLT5y
ZW1vdmVDaGlsZChtX2RpYWxvZ0JhY2tncm91bmQuZ2V0KCksIGVjKTsKKyAgICBlbGVtZW50KCkt
PnNoYWRvd1Jvb3QoKS0+cmVtb3ZlQ2hpbGQobV9waWNrZXJGcmFtZS5nZXQoKSwgZWMpOworICAg
IG1fZGlhbG9nQmFja2dyb3VuZCA9IDA7CisgICAgbV9waWNrZXJGcmFtZSA9IDA7Cit9CisKK3Zv
aWQgRGF0ZUlucHV0VHlwZTo6Y2xvc2VEaWFsb2dBbmRTZXRWYWx1ZShjb25zdCBTdHJpbmcmIHZh
bHVlKQoreworICAgIGNsb3NlRGlhbG9nKCk7CisgICAgZWxlbWVudCgpLT5zZXRWYWx1ZUZvclVz
ZXIodmFsdWUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0RhdGVJbnB1dFR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRGF0
ZUlucHV0VHlwZS5oCmluZGV4IDk2NWQ5ZWFiYTE0N2FjNTIxYmYxZjU3ZWJmNjI0NWU3NmYxODcw
M2QuLjAwZDNlODk0YWZjM2Y5NDc5ODIzZjYyYjQ1OThiYTljYTRlMjJiMjYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvRGF0ZUlucHV0VHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvRGF0ZUlucHV0VHlwZS5oCkBAIC0zNSwxMiArMzUsMTcgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCitjbGFzcyBIVE1MRWxlbWVudDsKK2NsYXNzIEhUTUxJRnJhbWVFbGVtZW50Owor
CiBjbGFzcyBEYXRlSW5wdXRUeXBlIDogcHVibGljIEJhc2VEYXRlQW5kVGltZUlucHV0VHlwZSB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8SW5wdXRUeXBlPiBjcmVhdGUoSFRNTElu
cHV0RWxlbWVudCopOworICAgIHZvaWQgY2xvc2VEaWFsb2coKTsKKyAgICB2b2lkIGNsb3NlRGlh
bG9nQW5kU2V0VmFsdWUoY29uc3QgU3RyaW5nJik7CiAKIHByaXZhdGU6Ci0gICAgRGF0ZUlucHV0
VHlwZShIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KSA6IEJhc2VEYXRlQW5kVGltZUlucHV0VHlw
ZShlbGVtZW50KSB7IH0KKyAgICBEYXRlSW5wdXRUeXBlKEhUTUxJbnB1dEVsZW1lbnQqKTsKICAg
ICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xUeXBlKCkgY29uc3Q7CiAg
ICAgdmlydHVhbCBkb3VibGUgbWluaW11bSgpIGNvbnN0OwogICAgIHZpcnR1YWwgZG91YmxlIG1h
eGltdW0oKSBjb25zdDsKQEAgLTQ5LDYgKzU0LDEyIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBi
b29sIHBhcnNlZFN0ZXBWYWx1ZVNob3VsZEJlSW50ZWdlcigpIGNvbnN0OwogICAgIHZpcnR1YWwg
Ym9vbCBwYXJzZVRvRGF0ZUNvbXBvbmVudHNJbnRlcm5hbChjb25zdCBVQ2hhciosIHVuc2lnbmVk
IGxlbmd0aCwgRGF0ZUNvbXBvbmVudHMqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc2V0TWls
bGlzZWNvbmRUb0RhdGVDb21wb25lbnRzKGRvdWJsZSwgRGF0ZUNvbXBvbmVudHMqKSBjb25zdDsK
KyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlTW91c2VEb3duRXZlbnQoTW91c2VFdmVudCopOworICAg
IHZpcnR1YWwgdm9pZCBjcmVhdGVTaGFkb3dTdWJ0cmVlKCk7CisKKyAgICBSZWZQdHI8SFRNTEVs
ZW1lbnQ+IG1fcm9vdDsKKyAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IG1fZGlhbG9nQmFja2dyb3Vu
ZDsKKyAgICBSZWZQdHI8SFRNTElGcmFtZUVsZW1lbnQ+IG1fcGlja2VyRnJhbWU7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxJRnJhbWVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElGcmFtZUVsZW1l
bnQuY3BwCmluZGV4IDA2YWYwOTM2Yjc4ZGNiOTlmNzI5N2I1MTNkZDE3ODA2M2IzZTUzMzMuLmZk
OTQ4Njc5ZmU2YmQwZGRhMjIyOTE1NmNmOGVmMmNjOTI0NzIwY2EgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTElGcmFtZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTElGcmFtZUVsZW1lbnQuY3BwCkBAIC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotaW5saW5lIEhUTUxJRnJh
bWVFbGVtZW50OjpIVE1MSUZyYW1lRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
LCBEb2N1bWVudCogZG9jdW1lbnQpCitIVE1MSUZyYW1lRWxlbWVudDo6SFRNTElGcmFtZUVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQogICAg
IDogSFRNTEZyYW1lRWxlbWVudEJhc2UodGFnTmFtZSwgZG9jdW1lbnQpCiB7CiAgICAgQVNTRVJU
KGhhc1RhZ05hbWUoaWZyYW1lVGFnKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxJRnJhbWVFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJRnJhbWVFbGVt
ZW50LmgKaW5kZXggNjFjZDZiNjhlZDY0OGEzMjI1OWVmNDU3YmVlNDg4MDU3MzBmMzcyNi4uMTBi
NTE4ZjVlZjVkMTA5NDc2NTIwMmNhYTlkYzgyODhmYTI1MWEzNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MSUZyYW1lRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTElGcmFtZUVsZW1lbnQuaApAQCAtMzIsOSArMzIsMTAgQEAgY2xhc3MgSFRNTElGcmFt
ZUVsZW1lbnQgOiBwdWJsaWMgSFRNTEZyYW1lRWxlbWVudEJhc2UgewogcHVibGljOgogICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEhUTUxJRnJhbWVFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYsIERvY3VtZW50Kik7CiAKLXByaXZhdGU6Citwcm90ZWN0ZWQ6CiAgICAgSFRNTElGcmFt
ZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKK3ByaXZhdGU6CiAg
ICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYsIE1hcHBlZEF0
dHJpYnV0ZUVudHJ5JikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmli
dXRlKEF0dHJpYnV0ZSopOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9tYWtlLWZpbGUt
YXJyYXlzLnB5IGIvU291cmNlL1dlYkNvcmUvbWFrZS1maWxlLWFycmF5cy5weQpuZXcgZmlsZSBt
b2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5iZmE2NjliZjIwYWQxMTdjZjQzNDkwMDVhZjk4NmU5ZGJhMTA5MGU3Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvbWFrZS1maWxlLWFycmF5cy5weQpAQCAtMCwwICsxLDc3IEBA
CisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisj
IG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjIFVzYWdlOiBtYWtl
LWZpbGUtYXJyYXlzLnB5IDxoZWFkZXItZmlsZS1uYW1lPiA8Y3BwLWZpbGUtbmFtZT4gPGlucHV0
LWZpbGU+Li4uCisKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgcmUKK2ltcG9ydCBzeXMKKworCitk
ZWYgbWFrZV92YXJpYWJsZV9uYW1lX2FuZF9yZWFkKGZpbGVfbmFtZSwgb3Blbl9mbGFnKToKKyAg
ICByZXN1bHQgPSByZS5tYXRjaChyIihcdyspXC4oXHcrKSIsIG9zLnBhdGguYmFzZW5hbWUoZmls
ZV9uYW1lKSkKKyAgICBpZiBub3QgcmVzdWx0OgorICAgICAgICBwcmludCAiSW52YWxpZCBpbnB1
dCBmaWxlIG5hbWU6Iiwgb3MucGF0aC5iYXNlbmFtZShmaWxlX25hbWUpCisgICAgICAgIHN5cy5l
eGl0KDEpCisgICAgcHJpbnQgIlByb2Nlc3NpbmciLCBmaWxlX25hbWUKKyAgICB2YXJpYWJsZV9u
YW1lID0gcmVzdWx0Lmdyb3VwKDEpWzBdLmxvd2VyKCkgKyByZXN1bHQuZ3JvdXAoMSlbMTpdICsg
cmVzdWx0Lmdyb3VwKDIpLmNhcGl0YWxpemUoKQorICAgIGZpbGUgPSBvcGVuKGZpbGVfbmFtZSwg
b3Blbl9mbGFnKQorICAgIGNvbnRlbnQgPSBmaWxlLnJlYWQoKQorICAgIGZpbGUuY2xvc2UoKQor
ICAgIHJldHVybiAodmFyaWFibGVfbmFtZSwgY29udGVudCkKKworCitkZWYgbWFpbigpOgorICAg
IGlmIGxlbihzeXMuYXJndikgPCA0OgorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgaGVhZGVy
X2ZpbGUgPSBvcGVuKHN5cy5hcmd2WzFdLCAidyIpCisgICAgY3BwX2ZpbGUgPSBvcGVuKHN5cy5h
cmd2WzJdLCAidyIpCisgICAgaGVhZGVyX2ZpbGUud3JpdGUoIm5hbWVzcGFjZSBXZWJDb3JlIHtc
biIpCisgICAgY3BwX2ZpbGUud3JpdGUoIm5hbWVzcGFjZSBXZWJDb3JlIHtcbiIpCisKKyAgICBm
b3IgbmFtZSBpbiBzeXMuYXJndlszOl06CisgICAgICAgICh2YXJpYWJsZV9uYW1lLCBjb250ZW50
KSA9IG1ha2VfdmFyaWFibGVfbmFtZV9hbmRfcmVhZChuYW1lLCAicmIiKQorICAgICAgICBzaXpl
ID0gbGVuKGNvbnRlbnQpCisgICAgICAgIGhlYWRlcl9maWxlLndyaXRlKCJleHRlcm4gY29uc3Qg
Y2hhciAlc1slZF07XG4iICUgKHZhcmlhYmxlX25hbWUsIHNpemUpKQorICAgICAgICBjcHBfZmls
ZS53cml0ZSgiZXh0ZXJuIGNvbnN0IGNoYXIgJXNbJWRdID0ge1xuIiAlICh2YXJpYWJsZV9uYW1l
LCBzaXplKSkKKyAgICAgICAgZm9yIGluZGV4IGluIHJhbmdlKHNpemUpOgorICAgICAgICAgICAg
Y3BwX2ZpbGUud3JpdGUoIiVkIiAlIG9yZChjb250ZW50W2luZGV4XSkpCisgICAgICAgICAgICBj
cHBfZmlsZS53cml0ZSgiLCIgaWYgaW5kZXggIT0gbGVuKGNvbnRlbnQpIC0gMSBlbHNlICJ9O1xu
IikKKyAgICAgICAgICAgIGlmIGluZGV4ICUgMjAgPT0gMTk6CisgICAgICAgICAgICAgICAgY3Bw
X2ZpbGUud3JpdGUoIlxuIikKKyAgICAgICAgY3BwX2ZpbGUud3JpdGUoIlxuIikKKworICAgIGhl
YWRlcl9maWxlLndyaXRlKCJ9XG4iKQorICAgIGNwcF9maWxlLndyaXRlKCJ9XG4iKQorICAgIGhl
YWRlcl9maWxlLmNsb3NlKCkKKyAgICBjcHBfZmlsZS5jbG9zZSgpCisKK2lmIF9fbmFtZV9fID09
ICJfX21haW5fXyI6CisgICAgbWFpbigpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127315</attachid>
            <date>2012-02-15 23:11:00 -0800</date>
            <delta_ts>2012-04-02 21:24:20 -0700</delta_ts>
            <desc>WIP Patch 6 (HTMLPopup)</desc>
            <filename>bug-53961-20120216161058.patch</filename>
            <type>text/plain</type>
            <size>95325</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2MjEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzJlMzc5NGYwYjNiYzBh
ZjUwZWQ0ZDEwMzVlYjJlZWQ3ZmZiNGQ3Ny4uMDU3ZjRmZTgyODM0ODRhYjBjNzg2MWVkNGIxYWYy
ODkxMmIyNTlmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0MiBAQAorMjAxMi0wMi0xNSAgS2Vu
dCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50IGEgY2Fs
ZW5kYXIgcGlja2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01Mzk2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogUmVzb3VyY2VzL2NhbGVuZGFy
UGlja2VyLmNzczogQWRkZWQuCisgICAgICAgIChib2R5KToKKyAgICAgICAgKC5uby1mb2N1cy1y
aW5nIDpmb2N1cyk6CisgICAgICAgICguYnViYmxlLWFycm93KToKKyAgICAgICAgKC5idWJibGUt
YXJyb3ctY2xpcHBlcik6CisgICAgICAgICgjbWFpbik6CisgICAgICAgICgueWVhci1tb250aC1h
cmVhKToKKyAgICAgICAgKC55ZWFyLW1vbnRoLXVwcGVyKToKKyAgICAgICAgKC55ZWFyLXNlbGVj
dG9yKToKKyAgICAgICAgKC5tb250aC1zZWxlY3Rvci1ib3gpOgorICAgICAgICAoLm1vbnRoLXNl
bGVjdG9yKToKKyAgICAgICAgKC55ZWFyLW1vbnRoLWJ1dHRvbnMpOgorICAgICAgICAoLnllYXIt
bW9udGgtYnV0dG9uKToKKyAgICAgICAgKC55ZWFyLW1vbnRoLWJ1dHRvbjpob3Zlcik6CisgICAg
ICAgICgueWVhci1tb250aC1idXR0b246YWN0aXZlKToKKyAgICAgICAgKC55ZWFyLW1vbnRoLWJ1
dHRvbjpkaXNhYmxlZCk6CisgICAgICAgICgueWVhci1tb250aC1idXR0b24tbGVmdCk6CisgICAg
ICAgICgueWVhci1tb250aC1idXR0b24tcmlnaHQpOgorICAgICAgICAoLmRheXMtYXJlYS1jb250
YWluZXIpOgorICAgICAgICAoLmRheXMtYXJlYSk6CisgICAgICAgICguZGF5LWxhYmVsLWNvbnRh
aW5lcik6CisgICAgICAgICguZGF5LWxhYmVsKToKKyAgICAgICAgKC53ZWVrLWNvbnRhaW5lcik6
CisgICAgICAgICguZGF5KToKKyAgICAgICAgKC5hdmFpbGFibGUpOgorICAgICAgICAoLm5vdC10
aGlzLW1vbnRoKToKKyAgICAgICAgKC5hdmFpbGFibGUuZGF5LXNlbGVjdGVkKToKKyAgICAgICAg
KC51bmF2YWlsYWJsZSk6CisgICAgICAgICgudW5hdmFpbGFibGUtdXApOgorICAgICAgICAoLnVu
YXZhaWxhYmxlLWRvd24pOgorICAgICAgICAoLnVuYXZhaWxhYmxlLmRheS1zZWxlY3RlZCk6Cisg
ICAgICAgICgudG9kYXktYnV0dG9uKToKKyAgICAgICAgKC5jbGVhci1idXR0b24pOgorICAgICAg
ICAoLmNhbmNlbC1idXR0b24pOgorICAgICAgICAqIFJlc291cmNlcy9jYWxlbmRhclBpY2tlci5q
czogQWRkZWQuCisgICAgICAgIChjcmVhdGVFbGVtZW50KToKKyAgICAgICAgKGdldExvY2FsZSk6
CisgICAgICAgIChnZXRMYW5ndWFnZSk6CisgICAgICAgIChmb3JtYXRZZWFyTW9udGgpOgorICAg
ICAgICAoaGFuZGxlTWVzc2FnZSk6CisgICAgICAgIChoYW5kbGVBcmd1bWVudHNUaW1lb3V0KToK
KyAgICAgICAgKGdldEFyZ3VtZW50RXJyb3IpOgorICAgICAgICAoY3JlYXRlRGF0ZUZyb21TdHJp
bmcpOgorICAgICAgICAoaW5pdGlhbGl6ZSk6CisgICAgICAgIChjaGVja0xpbWl0cyk6CisgICAg
ICAgIChsYXlvdXQpOgorICAgICAgICAobGF5b3V0RGF5cyk6CisgICAgICAgIChsYXlvdXRCdXR0
b25zKToKKyAgICAgICAgKFllYXJNb250aENvbnRyb2xsZXIpOgorICAgICAgICAoWWVhck1vbnRo
Q29udHJvbGxlci5wcm90b3R5cGUuYXR0YWNoKToKKyAgICAgICAgKFllYXJNb250aENvbnRyb2xs
ZXIucHJvdG90eXBlLmdldFllYXIpOgorICAgICAgICAoWWVhck1vbnRoQ29udHJvbGxlci5wcm90
b3R5cGUuZ2V0TW9udGgpOgorICAgICAgICAoWWVhck1vbnRoQ29udHJvbGxlci5wcm90b3R5cGUu
c2V0WWVhck1vbnRoKToKKyAgICAgICAgKFllYXJNb250aENvbnRyb2xsZXIucHJvdG90eXBlLnVw
ZGF0ZVVJKToKKyAgICAgICAgKFllYXJNb250aENvbnRyb2xsZXIucHJvdG90eXBlLmhhbmRsZVll
YXJNb250aENoYW5nZSk6CisgICAgICAgIChZZWFyTW9udGhDb250cm9sbGVyMik6CisgICAgICAg
IChZZWFyTW9udGhDb250cm9sbGVyMi5wcm90b3R5cGUuYXR0YWNoKToKKyAgICAgICAgKFllYXJN
b250aENvbnRyb2xsZXIyLnByb3RvdHlwZS5hdHRhY2hMZWZ0QnV0dG9ucyk6CisgICAgICAgIChZ
ZWFyTW9udGhDb250cm9sbGVyMi5wcm90b3R5cGUuYXR0YWNoUmlnaHRCdXR0b25zKToKKyAgICAg
ICAgKFllYXJNb250aENvbnRyb2xsZXIyLnByb3RvdHlwZS5nZXRZZWFyKToKKyAgICAgICAgKFll
YXJNb250aENvbnRyb2xsZXIyLnByb3RvdHlwZS5nZXRNb250aCk6CisgICAgICAgIChZZWFyTW9u
dGhDb250cm9sbGVyMi5wcm90b3R5cGUuc2V0WWVhck1vbnRoKToKKyAgICAgICAgKFllYXJNb250
aENvbnRyb2xsZXIyLnByb3RvdHlwZS51cGRhdGVVSSk6CisgICAgICAgIChZZWFyTW9udGhDb250
cm9sbGVyMi5wcm90b3R5cGUuaGFuZGxlWWVhck1vbnRoQ2hhbmdlKToKKyAgICAgICAgKFllYXJN
b250aENvbnRyb2xsZXIyLnByb3RvdHlwZS5oYW5kbGVCdXR0b25DbGljayk6CisgICAgICAgIChZ
ZWFyTW9udGhDb250cm9sbGVyMi5wcm90b3R5cGUubW92ZVJlbGF0aXZlbHkpOgorICAgICAgICAo
c3RlcE1pc21hdGNoKToKKyAgICAgICAgKG91dE9mUmFuZ2UpOgorICAgICAgICAoaXNWYWxpZERh
dGUpOgorICAgICAgICAocmVuZGVyTW9udGgpOgorICAgICAgICAobmF2aWdhdGVUb01vbnRoKToK
KyAgICAgICAgKG5hdmlnYXRlVG9Nb250aFdpdGhBbmltYXRpb24pOgorICAgICAgICAobW92ZUlu
RGF5cyk6CisgICAgICAgIChzZWxlY3REYXRlKToKKyAgICAgICAgKG1heWJlU2V0UHJldmlvdXNN
b250aCk6CisgICAgICAgIChtYXliZVNldE5leHRNb250aCk6CisgICAgICAgIChoYW5kbGVEYXlD
bGljayk6CisgICAgICAgIChoYW5kbGVNb3VzZU92ZXIpOgorICAgICAgICAoaGFuZGxlTW91c2VP
dXQpOgorICAgICAgICAoaGFuZGxlRGF5c0FyZWFLZXkpOgorICAgICAgICAodXBkYXRlU2VsZWN0
aW9uKToKKyAgICAgICAgKGNyZWF0ZURhdGVTdHJpbmcpOgorICAgICAgICAoaGFuZGxlVG9kYXkp
OgorICAgICAgICAoaGFuZGxlQ2xlYXIpOgorICAgICAgICAoc3VibWl0VmFsdWUpOgorICAgICAg
ICAoaGFuZGxlQ2FuY2VsKToKKyAgICAgICAgKGhhbmRsZUdsb2JhbEtleSk6CisgICAgICAgICgp
OgorICAgICAgICAqIFJlc291cmNlcy9jYWxlbmRhclBpY2tlci5wbmc6IEFkZGVkLgorICAgICAg
ICAqIFJlc291cmNlcy9jYWxlbmRhclBpY2tlcl90ZXN0Lmh0bWw6IEFkZGVkLgorICAgICAgICAq
IFdlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAg
ICAgKiBodG1sL0RhdGVJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZUlucHV0
VHlwZTo6RGF0ZUlucHV0VHlwZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGVJbnB1dFR5cGU6On5EYXRlSW5wdXRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGVJbnB1dFR5cGU6OmhhbmRsZUZvY3VzRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZUlu
cHV0VHlwZTo6aGFuZGxlQmx1ckV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVJbnB1dFR5
cGU6OmNsb3NlUG9wdXApOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZUlucHV0VHlwZTo6Y29udGVu
dFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZUlucHV0VHlwZTo6aHRtbFNvdXJjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRlSW5wdXRUeXBlOjpzZXRWYWx1ZUFuZENsb3NlUG9wdXApOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0ZUlucHV0VHlwZTo6ZGlkQ2xvc2VQb3B1cCk6CisgICAgICAg
ICogaHRtbC9EYXRlSW5wdXRUeXBlLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKERh
dGVJbnB1dFR5cGUpOgorICAgICAgICAqIGxvYWRlci9FbXB0eUNsaWVudHMuaDoKKyAgICAgICAg
KCk6CisgICAgICAgICogbWFrZS1maWxlLWFycmF5cy5weTogQWRkZWQuCisgICAgICAgIChtYWtl
X3ZhcmlhYmxlX25hbWVfYW5kX3JlYWQpOgorICAgICAgICAobWFpbik6CisgICAgICAgICogcGFn
ZS9DaHJvbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lOjpvcGVuSFRNTFBvcHVwKToK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lOjpjbG9zZUhUTUxQ
b3B1cCk6CisgICAgICAgICogcGFnZS9DaHJvbWUuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoQ2hyb21lKToKKyAgICAgICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChDaHJvbWVDbGllbnQpOgorICAgICAgICAqIHBsYXRmb3JtL0hU
TUxQb3B1cC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQ
b3B1cFR5cGUuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSFRNTFBvcHVwKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxQb3B1cDo6fkhUTUxQb3B1cCk6CisgICAgICAgICogcGxhdGZv
cm0vSFRNTFBvcHVwQ2xpZW50Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYlBvcHVwTWVudS5oLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChIVE1M
UG9wdXBDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBvcHVwQ2xpZW50Ojp+SFRNTFBv
cHVwQ2xpZW50KToKKwogMjAxMi0wMS0yOSAgRGFsZSBDdXJ0aXMgIDxkYWxlY3VydGlzQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBQcmVwYXJlIFdlYkNvcmUuZ3lwIGZvciBmZm1wZWcgc291cmNl
IHRyYW5zaXRpb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDJmYjdkNmI3ODc3NDhk
MzI1M2EyNGI3ZmI4OTc3NmVmOWM2M2E0ZTEuLmI2MjJkYjBjZTg1YTYwNzA1MTQ1ZWIxM2Q1ZWE4
YzFkNGI1MGViYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjMgQEAK
KzIwMTItMDItMTUgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IEltcGxlbWVudCBhIGNhbGVuZGFyIHBpY2tlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTM5NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogZmVhdHVyZXMuZ3lw
aToKKyAgICAgICAgKiBwdWJsaWMvV2ViUG9wdXBNZW51Lmg6CisgICAgICAgIChXZWJLaXQpOgor
ICAgICAgICAoV2ViSFRNTFBvcHVwKToKKyAgICAgICAgKiBwdWJsaWMvV2ViUG9wdXBUeXBlLmg6
CisgICAgICAgICgpOgorICAgICAgICAqIHB1YmxpYy9XZWJWaWV3Q2xpZW50Lmg6CisgICAgICAg
IChXZWJLaXQpOgorICAgICAgICAqIHNyYy9DaHJvbWVDbGllbnRJbXBsLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbDo6b3BlbkhUTUxQb3B1cCk6CisgICAgICAgIChXZWJL
aXQpOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsOjpjbG9zZUhUTUxQb3B1cCk6
CisgICAgICAgICogc3JjL0Nocm9tZUNsaWVudEltcGwuaDoKKyAgICAgICAgKENocm9tZUNsaWVu
dEltcGwpOgorICAgICAgICAqIHNyYy9XZWJIVE1MUG9wdXBJbXBsLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJLaXQpOgorICAgICAgICAoSFRNTFBvcHVwQ2hyb21lQ2xpZW50KToKKyAgICAgICAg
KFdlYktpdDo6SFRNTFBvcHVwQ2hyb21lQ2xpZW50OjpIVE1MUG9wdXBDaHJvbWVDbGllbnQpOgor
ICAgICAgICAoKToKKyAgICAgICAgKFdlYktpdDo6V2ViSFRNTFBvcHVwSW1wbDo6V2ViSFRNTFBv
cHVwSW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkhUTUxQb3B1cEltcGw6On5XZWJIVE1MUG9w
dXBJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViSFRNTFBvcHVwSW1wbDo6aW5pdCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkhUTUxQb3B1cEltcGw6OmluaXRQYWdlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViSFRNTFBvcHVwSW1wbDo6c2V0VmFsdWVBbmRDbG9zZVBvcHVwQ2FsbGJhY2spOgorICAg
ICAgICAoV2ViS2l0OjpXZWJIVE1MUG9wdXBJbXBsOjpsYXlvdXQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJIVE1MUG9wdXBJbXBsOjpwYWludCk6CisgICAgICAgIChXZWJLaXQ6OldlYkhUTUxQb3B1
cEltcGw6OnJlc2l6ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkhUTUxQb3B1cEltcGw6OmhhbmRs
ZUlucHV0RXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJIVE1MUG9wdXBJbXBsOjpoYW5kbGVL
ZXlFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkhUTUxQb3B1cEltcGw6OnNldEZvY3VzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViSFRNTFBvcHVwSW1wbDo6Y2xvc2UpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJIVE1MUG9wdXBJbXBsOjpjbG9zZVBvcHVwKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
SFRNTFBvcHVwOjpjcmVhdGUpOgorICAgICAgICAqIHNyYy9XZWJIVE1MUG9wdXBJbXBsLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2Vi
SFRNTFBvcHVwSW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkhUTUxQb3B1cEltcGw6OndpZGdl
dENsaWVudCk6CisgICAgICAgICgpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjprZXlFdmVudCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZXdJbXBsOjpjaGFyRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6
cG9wdXBPcGVuZWQpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmll
d0ltcGw6OnBvcHVwQ2xvc2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldEZv
Y3VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmhpZGVQb3B1cHMpOgorICAgICAg
ICAqIHNyYy9XZWJWaWV3SW1wbC5oOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYlZp
ZXdJbXBsKToKKyAgICAgICAgKCk6CisKIDIwMTItMDEtMjggIFNoZXJpZmYgQm90ICA8d2Via2l0
LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuICBSb2xsZWQgREVQ
Uy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9jYWxlbmRhclBpY2tlci5j
c3MgYi9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvY2FsZW5kYXJQaWNrZXIuY3NzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjgwZmM4MzQ4OWJiZjFhNGU5MWZkNzg1ZDA4ZWM0ZjJjMmU1NmQ0ZjIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvY2FsZW5kYXJQaWNrZXIuY3NzCkBAIC0w
LDAgKzEsMjM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworYm9keSB7CisgICAgZm9udDogLXdlYmtpdC1zbWFsbC1jb250cm9sOworICAg
IC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CisgICAgbWFyZ2luOiA2cHg7CisgICAgbWFyZ2lu
LXRvcDogMHB4OworICAgIG1hcmdpbi1sZWZ0OiAwcHg7CisgICAgb3ZlcmZsb3c6IGhpZGRlbjsK
KyAgICB3aWR0aDogMTAwJTsKKyAgICBoZWlnaHQ6IDEwMCU7Cit9CisKKy5uby1mb2N1cy1yaW5n
IDpmb2N1cyB7CisgICAgb3V0bGluZTogbm9uZTsKK30KKworLmJ1YmJsZS1hcnJvdyB7CisgICAg
ZGlzcGxheTogaW5saW5lLWJsb2NrOworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICBsZWZ0
OiA2NHB4OworICAgIHdpZHRoOiAxOHB4OworICAgIGhlaWdodDogMThweDsKKyAgICBiYWNrZ3Jv
dW5kLWNvbG9yOiAjZjBmOGZmOworICAgIGJvcmRlcjogc29saWQgMXB4ICM4ODk5YWE7CisgICAg
Ym9yZGVyLXdpZHRoOiAxcHggMCAwIDFweDsKKyAgICBib3gtc2hhZG93OiBpbnNldCAycHggMnB4
IDJweCB3aGl0ZTsKKyAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IDAgMDsKKyAgICAtd2Vi
a2l0LXRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTsKKyAgICB6LWluZGV4OiAxMDE7Cit9CisKKy5i
dWJibGUtYXJyb3ctY2xpcHBlciB7CisgICAgZGlzcGxheTogYmxvY2s7CisgICAgb3ZlcmZsb3c6
IGhpZGRlbjsKKyAgICBoZWlnaHQ6IDE2LjdweDsKK30KKworI21haW4geworICAgIHotaW5kZXg6
IDEwMDsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgdG9wOiAtM3B4OyAvKiBib3JkZXIt
d2lkdGggKyBzaGFkb3ctaGVpZ2h0ICovCisgICAgcGFkZGluZzogNnB4OworICAgIGJhY2tncm91
bmQ6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGZyb20o
I2YwZjhmZiksIHRvKCNjY2RkZWUpKTsKKyAgICBib3JkZXI6IHNvbGlkIDFweCAjODg5OWFhOwor
ICAgIGJvcmRlci1yYWRpdXM6IDZweDsKKyAgICBib3gtc2hhZG93OiBpbnNldCAycHggMnB4IDJw
eCB3aGl0ZSwKKyAgICAgICAgaW5zZXQgLTJweCAtMnB4IDFweCByZ2JhKDAsMCwwLDAuMSksCisg
ICAgICAgIDRweCA0cHggNHB4ICNjY2M7Cit9CisKKy55ZWFyLW1vbnRoLWFyZWEgeworfQorCisu
eWVhci1tb250aC11cHBlciB7CisvKiAgICB3aWR0aDogMTAwJTsqLworICAgIGRpc3BsYXk6IC13
ZWJraXQtYm94OworfQorCisueWVhci1zZWxlY3RvciB7CisgICAgd2lkdGg6IDZlbTsKKyAgICB0
ZXh0LWFsaWduOiByaWdodDsKK30KKworLm1vbnRoLXNlbGVjdG9yLWJveCB7CisgICAgZGlzcGxh
eTogaW5saW5lLWJveDsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgLXdlYmtpdC1ib3gt
ZmxleDogMjsKK30KKy5tb250aC1zZWxlY3RvciB7Cit9CisKKy55ZWFyLW1vbnRoLWJ1dHRvbnMg
eworfQorCisvKiBGSVhNRTogV2UnZCBsaWtlIHRvIHVzZSB0aGUgc3RhbmRhcmQgYnV0dG9uIGFw
cGVhcmFuY2UgZm9yIG5vbi1NYWMuICovCisueWVhci1tb250aC1idXR0b24geworICAgIC13ZWJr
aXQtYXBwZWFyYW5jZTogbm9uZTsKKyAgICBiYWNrZ3JvdW5kOiAtd2Via2l0LWdyYWRpZW50KGxp
bmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBmcm9tKCNlZWUpLCBjb2xvci1zdG9wKDAuNCwg
I2ZmZiksIGNvbG9yLXN0b3AoMC42LCAjZGRkZGRkKSwgdG8oI2VlZSkpOworICAgIGJvcmRlcjog
c29saWQgMXB4ICM0NDQ7CisgICAgYm9yZGVyLXJhZGl1czogM3B4OworICAgIGJveC1zaGFkb3c6
IGluc2V0IDFweCAxcHggMXB4IHJnYmEoMjU1LDI1NSwyNTUsMC40KSwgaW5zZXQgLTFweCAtMXB4
IDFweCByZ2JhKDI1NSwyNTUsMjU1LDAuNCk7CisgICAgcGFkZGluZy1sZWZ0OiAzcHg7CisgICAg
cGFkZGluZy1yaWdodDogM3B4OworfQorCisueWVhci1tb250aC1idXR0b246aG92ZXIgeworICAg
IGJhY2tncm91bmQ6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0
b20sIGZyb20oI2UwZjBmZiksIGNvbG9yLXN0b3AoMC40LCAjZTBmMGZmKSwgY29sb3Itc3RvcCgw
LjYsICNiMGUwZmYpLCB0bygjYjBlMGZmKSk7CisgICAgYm9yZGVyOiBzb2xpZCAxcHggIzQ0ODsK
K30KKworLnllYXItbW9udGgtYnV0dG9uOmFjdGl2ZSB7CisgICAgYm9yZGVyOiBzb2xpZCAxcHgg
YmxhY2s7CisgICAgYm94LXNoYWRvdzogaW5zZXQgMXB4IDFweCAxcHggcmdiYSgwLDAsMCwwLjMp
LCBpbnNldCAtMXB4IC0xcHggMXB4IHJnYmEoMCwwLDAsMC4zKTsKK30KKworLnllYXItbW9udGgt
YnV0dG9uOmRpc2FibGVkIHsKKyAgICBjb2xvcjogIzg4ODsKKyAgICBiYWNrZ3JvdW5kOiAtd2Vi
a2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBmcm9tKCNlZWUpLCBj
b2xvci1zdG9wKDAuNCwgI2ZmZiksIGNvbG9yLXN0b3AoMC42LCAjZGRkZGRkKSwgdG8oI2VlZSkp
OworICAgIGJvcmRlcjogc29saWQgMXB4ICNjY2M7CisgICAgYm94LXNoYWRvdzogaW5zZXQgMXB4
IDFweCAxcHggcmdiYSgyNTUsMjU1LDI1NSwwLjQpLCBpbnNldCAtMXB4IC0xcHggMXB4IHJnYmEo
MjU1LDI1NSwyNTUsMC40KTsKK30KKworLnllYXItbW9udGgtYnV0dG9uLWxlZnQgeworICAgIGRp
c3BsYXk6IGlubGluZS1ibG9jazsKK30KKworLnllYXItbW9udGgtYnV0dG9uLXJpZ2h0IHsKKyAg
ICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Cit9CisKKy5kYXlzLWFyZWEtY29udGFpbmVyIHsKKy8q
ICAgIGNsZWFyOiBsZWZ0OyovCisgICAgbWFyZ2luLXRvcDogNHB4OworICAgIG1hcmdpbi1ib3R0
b206IDRweDsKKyAgICBvdmVyZmxvdzogaGlkZGVuOworICAgIGJhY2tncm91bmQtY29sb3I6IHdo
aXRlOworICAgIGJvcmRlcjogc29saWQgMXB4IGJsYWNrOworfQorCisuZGF5cy1hcmVhIHsgLyog
PHRhYmxlPiAqLworICAgIHdpZHRoOiAxMDAlOworICAgIHRhYmxlLWxheW91dDogZml4ZWQ7Cisg
ICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CisgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0
ZTsKKyAgICBib3JkZXItc3BhY2luZzogMHB4OworICAgIGZvbnQ6IC13ZWJraXQtc21hbGwtY29u
dHJvbDsKK30KKworLmRheS1sYWJlbC1jb250YWluZXIgeyAvKiA8dHI+ICovCit9CisuZGF5LWxh
YmVsIHsgLyogPHRoPiAqLworICAgIGNvbG9yOiAjMjBjOworICAgIGJhY2tncm91bmQtY29sb3I6
ICNjY2VlZWU7CisgICAgYm9yZGVyOiBzb2xpZCAxcHggI2FhY2NjYzsKKyAgICBib3JkZXItdG9w
LWNvbG9yOiAjZGRmZmZmOworICAgIGJvcmRlci1sZWZ0LWNvbG9yOiAjZGRmZmZmOworICAgIHRl
eHQtYWxpZ246IGNlbnRlcjsKKyAgICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CisK
KyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTNlOWZmOworICAgIGJvcmRlcjogc29saWQgMXB4ICNk
MGQ0ZjA7CisgICAgYm9yZGVyLXRvcC1jb2xvcjogI2YwZjRmZjsKKyAgICBib3JkZXItbGVmdC1j
b2xvcjogI2YwZjRmZjsKKyAgICBmb250LXdlaWdodDogbm9ybWFsOworfQorCisud2Vlay1jb250
YWluZXIgeyAvKiA8dHI+ICovCit9CisuZGF5IHsgLyogPHRkPiAqLworICAgIHBhZGRpbmc6IDFw
eDsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7
CisgICAgYm9yZGVyOiAxcHggc29saWQgd2hpdGU7CisgICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBi
b3JkZXItYm94OworfQorLmF2YWlsYWJsZSB7CisgICAgY3Vyc29yOiBkZWZhdWx0OworICAgIGZv
bnQtd2VpZ2h0OiA3MDA7CisvKiAgICB0ZXh0LXNoYWRvdzogMXB4IDFweCAxcHggI2RkZDsqLwor
ICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOworICAgIGJvcmRlcjogMXB4IHNvbGlkIHdoaXRl
OworICAgIGJvcmRlci1yYWRpdXM6IDVweDsKKyAgICAtd2Via2l0LXRyYW5zaXRpb246IGFsbCAw
LjJzIGVhc2U7Cit9CisKKy5ub3QtdGhpcy1tb250aCB7CisgICAgZm9udC13ZWlnaHQ6IDQwMDsK
KyAgICB0ZXh0LXNoYWRvdzogbm9uZTsKKyAgICBjb2xvcjogZ3JheXRleHQ7Cit9CisKKy5hdmFp
bGFibGUuZGF5LXNlbGVjdGVkIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBoaWdobGlnaHQ7Cisg
ICAgY29sb3I6IGhpZ2hsaWdodHRleHQ7CisgICAgdGV4dC1zaGFkb3c6IG5vbmU7CisvLyAgICBi
YWNrZ3JvdW5kOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9t
LCBmcm9tKCNjY2VlZmYpLCB0byhoaWdobGlnaHQpKTsKK30KKworLnVuYXZhaWxhYmxlIHsKKy8q
ICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7Ki8KKyAgICBjdXJzb3I6IGRlZmF1bHQ7CisgICAgY29s
b3I6IGdyYXl0ZXh0OworICAgIGJhY2tncm91bmQtY29sb3I6ICNmYWZhZmE7CisgICAgYm9yZGVy
OiAxcHggc29saWQgI2ZhZmFmYTsKKyAgICAtd2Via2l0LXRyYW5zaXRpb246IGJvcmRlci1jb2xv
ciAwLjJzIGVhc2U7Cit9CisudW5hdmFpbGFibGUtdXAgeworLyogICAgY3Vyc29yOiB3LXJlc2l6
ZTsqLworLyogVE8gQkUgUkVNT1ZFRCAqLworfQorLnVuYXZhaWxhYmxlLWRvd24geworLyogICAg
Y3Vyc29yOiBlLXJlc2l6ZTsqLworLyogVE8gQkUgUkVNT1ZFRCAqLworfQorLnVuYXZhaWxhYmxl
LmRheS1zZWxlY3RlZCB7CisgICAgYm9yZGVyOiAxcHggc29saWQgaGlnaGxpZ2h0OworfQorCisu
dG9kYXktYnV0dG9uIHsKK30KKy5jbGVhci1idXR0b24geworfQorLmNhbmNlbC1idXR0b24gewor
ICAgIGZsb2F0OiByaWdodDsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Jlc291cmNl
cy9jYWxlbmRhclBpY2tlci5qcyBiL1NvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9jYWxlbmRhclBp
Y2tlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5mZmRlOWZmMzc4MzU4MTE2MGQwN2YwODAzN2JmN2UxNGY5ODEx
MWVkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL2NhbGVuZGFy
UGlja2VyLmpzCkBAIC0wLDAgKzEsOTgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRklYTUU6CisvLyAgLSBSVEwKKy8vICAtIFRv
dWNoIGV2ZW50PworCisvKioKKyAqIFRoZSBudW1iZXIgb2Ygd2VlayBsaW5lcyBpbiB0aGUgc2Ny
ZWVuLgorICogQGNvbnN0CisgKiBAdHlwZSB7bnVtYmVyfQorICovCit2YXIgV0VFS1MgPSA2Owor
Cit2YXIgQ0xBU1MgPSB7CisgICAgQVZBSUxBQkxFOiAnYXZhaWxhYmxlJywKKyAgICBCVUJCTEVf
QVJST1c6ICdidWJibGUtYXJyb3cnLAorICAgIEJVQkJMRV9BUlJPV19DTElQUEVSOiAnYnViYmxl
LWFycm93LWNsaXBwZXInLAorICAgIENBTkNFTF9CVVRUT046ICdjYW5jZWwtYnV0dG9uJywKKyAg
ICBDTEVBUl9CVVRUT046ICdjbGVhci1idXR0b24nLAorICAgIERBWTogJ2RheScsCisgICAgREFZ
U19BUkVBOiAnZGF5cy1hcmVhJywKKyAgICBEQVlTX0FSRUFfQ09OVEFJTkVSOiAnZGF5cy1hcmVh
LWNvbnRhaW5lcicsCisgICAgREFZX0xBQkVMOiAnZGF5LWxhYmVsJywKKyAgICBEQVlfTEFCRUxf
Q09OVEFJTkVSOiAnZGF5LWxhYmVsLWNvbnRhaW5lcicsCisgICAgTU9OVEhfU0VMRUNUT1I6ICdt
b250aC1zZWxlY3RvcicsCisgICAgTk9fRk9DVVNfUklORzogJ25vLWZvY3VzLXJpbmcnLAorICAg
IE5PVF9USElTX01PTlRIOiAnbm90LXRoaXMtbW9udGgnLAorICAgIFNFTEVDVEVEOiAnZGF5LXNl
bGVjdGVkJywKKyAgICBUT0RBWV9CVVRUT046ICd0b2RheS1idXR0b24nLAorICAgIFRPREFZX0NM
RUFSX0FSRUE6ICd0b2RheS1jbGVhci1hcmVhJywKKyAgICBVTkFWQUlMQUJMRTogJ3VuYXZhaWxh
YmxlJywKKyAgICBVTkFWQUlMQUJMRV9ET1dOOiAndW5hdmFpbGFibGUtZG93bicsCisgICAgVU5B
VkFJTEFCTEVfVVA6ICd1bmF2YWlsYWJsZS11cCcsCisgICAgV0VFS19DT05UQUlORVI6ICd3ZWVr
LWNvbnRhaW5lcicsCisgICAgWUVBUl9NT05USF9BUkVBOiAneWVhci1tb250aC1hcmVhJywKKyAg
ICBZRUFSX01PTlRIX0JVVFRPTjogJ3llYXItbW9udGgtYnV0dG9uJywKKyAgICBZRUFSX01PTlRI
X0JVVFRPTlM6ICd5ZWFyLW1vbnRoLWJ1dHRvbnMnLAorICAgIFlFQVJfTU9OVEhfQlVUVE9OX0xF
RlQ6ICd5ZWFyLW1vbnRoLWJ1dHRvbi1sZWZ0JywKKyAgICBZRUFSX01PTlRIX0JVVFRPTl9SSUdI
VDogJ3llYXItbW9udGgtYnV0dG9uLXJpZ2h0JywKKyAgICBZRUFSX01PTlRIX1VQUEVSOiAneWVh
ci1tb250aC11cHBlcicsCisgICAgWUVBUl9TRUxFQ1RPUjogJ3llYXItc2VsZWN0b3InLAorfTsK
KworLyoqCisgKiBAdHlwZSB7T2JqZWN0fQorICovCit2YXIgZ2xvYmFsID0geworICAgIGFyZ3Vt
ZW50c1JlY2VpdmVkOiBmYWxzZSwKKyAgICBsYXN0WDogLTEsCisgICAgbGFzdFk6IC0xLAorICAg
IGxhc3RZZWFyOiAtMSwKKyAgICBsYXN0TW9udGg6IC0xLAorICAgIHBhcmFtczogbnVsbCwKK307
CisKK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgaGFuZGxlTWVzc2FnZSwgZmFs
c2UpOword2luZG93LnNldFRpbWVvdXQoaGFuZGxlQXJndW1lbnRzVGltZW91dCwgMTAwLyoxMDAw
Ki8pOworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisvLyBVdGlsaXR5IGZ1bmN0aW9ucworCisvKioKKyAqIEBwYXJh
bSB7c3RyaW5nfSBpZAorICovCitmdW5jdGlvbiAkKGlkKSB7CisgICAgcmV0dXJuIGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKGlkKTsKK30KKworZnVuY3Rpb24gYmluZChmdW5jLCBjb250ZXh0KSB7
CisgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gZnVuYy5hcHBseShjb250
ZXh0LCBhcmd1bWVudHMpOworICAgIH07Cit9CisKKy8qKgorICogQHBhcmFtIHtzdHJpbmd9IHRh
Z05hbWUKKyAqIEBwYXJhbSB7c3RyaW5nfSBvcHRfY2xhc3MKKyAqIEBwYXJhbSB7c3RyaW5nfSBv
cHRfdGV4dAorICovCitmdW5jdGlvbiBjcmVhdGVFbGVtZW50KHRhZ05hbWUsIG9wdF9jbGFzcywg
b3B0X3RleHQpIHsKKyAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFn
TmFtZSk7CisgICAgaWYgKG9wdF9jbGFzcykKKyAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUo
J2NsYXNzJywgb3B0X2NsYXNzKTsKKyAgICBpZiAob3B0X3RleHQpCisgICAgICAgIGVsZW1lbnQu
YXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUob3B0X3RleHQpKTsKKyAgICByZXR1
cm4gZWxlbWVudDsKK30KKworZnVuY3Rpb24gZ2V0TG9jYWxlKCkgeworICAgIHJldHVybiAoZ2xv
YmFsLnBhcmFtcy5sb2NhbGUgfHwgJ2VuLXVzJykudG9Mb3dlckNhc2UoKTsKK30KKworZnVuY3Rp
b24gZ2V0TGFuZ3VhZ2Uob3B0X2xvY2FsZSkgeworICAgIHZhciBsb2NhbGUgPSBvcHRfbG9jYWxl
IHx8IGdldExvY2FsZSgpOworICAgIHZhciByZXN1bHQgPSBsb2NhbGUubWF0Y2goL14oW2EtekEt
Wl0rKS8pOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gJ2VuJzsKKyAgICByZXR1
cm4gcmVzdWx0WzFdLnRvTG93ZXJDYXNlKCk7Cit9CisKK2Z1bmN0aW9uIGZvcm1hdFllYXJNb250
aCh5ZWFyLCBtb250aCkgeworICAgIHZhciB5ZWFyU3RyaW5nID0gU3RyaW5nKHllYXIpOworICAg
IHZhciBtb250aFN0cmluZyA9IGdsb2JhbC5wYXJhbXMubW9udGhMYWJlbHNbbW9udGhdOworICAg
IHN3aXRjaCAoZ2V0TGFuZ3VhZ2UoKSkgeworICAgIGNhc2UgJ2V1JzoKKyAgICBjYXNlICdmaWwn
OgorICAgIGNhc2UgJ2x0JzoKKyAgICBjYXNlICdtbCc6CisgICAgY2FzZSAnbXQnOgorICAgIGNh
c2UgJ3RsJzoKKyAgICBjYXNlICd1cic6CisgICAgICAgIHJldHVybiB5ZWFyU3RyaW5nICsgJyAn
ICsgbW9udGhTdHJpbmc7CisgICAgY2FzZSAnaHUnOgorICAgICAgICByZXR1cm4geWVhclN0cmlu
ZyArICcuICcgKyBtb250aFN0cmluZzsKKyAgICBjYXNlICdqYSc6CisgICAgICAgIGlmICh5ZWFy
ID4gMTk4OSkKKyAgICAgICAgICAgIHllYXJTdHJpbmcgPSB5ZWFyU3RyaW5nICsgJ+W5tCjlubPm
iJAnICsgKHllYXIgLSAxOTg4KSArICflubQpICc7CisgICAgICAgIGVsc2UgaWYgKHllYXIgPT0g
MTk4OSkKKyAgICAgICAgICAgIHllYXJTdHJpbmcgPSB5ZWFyU3RyaW5nICsgJ+W5tCjlubPmiJDl
hYPlubQpICc7CisgICAgICAgIGVsc2UgaWYgKHllYXIgPj0gMTkyNykKKyAgICAgICAgICAgIHll
YXJTdHJpbmcgPSB5ZWFyU3RyaW5nICsgJ+W5tCjmmK3lkownICsgKHllYXIgLSAxOTI1KSArICfl
ubQpICc7CisgICAgICAgIGVsc2UgaWYgKHllYXIgPiAxOTEyKQorICAgICAgICAgICAgeWVhclN0
cmluZyA9IHllYXJTdHJpbmcgKyAn5bm0KOWkp+atoycgKyAoeWVhciAtIDE5MTEpICsgJ+W5tCkg
JzsKKyAgICAgICAgZWxzZSBpZiAoeWVhciA9PSAxOTEyICYmIG1vbnRoID49IDcpCisgICAgICAg
ICAgICB5ZWFyU3RyaW5nID0geWVhclN0cmluZyArICflubQo5aSn5q2j5YWD5bm0KSAnOworICAg
ICAgICBlbHNlIGlmICh5ZWFyID4gMTg2OCkKKyAgICAgICAgICAgIHllYXJTdHJpbmcgPSB5ZWFy
U3RyaW5nICsgJ+W5tCjmmI7msrsnICsgKHllYXIgLSAxODY3KSArICflubQpICc7CisgICAgICAg
IGVsc2UgaWYgKHllYXIgPT0gMTg2OCkKKyAgICAgICAgICAgIHllYXJTdHJpbmcgPSB5ZWFyU3Ry
aW5nICsgJ+W5tCjmmI7msrvlhYPlubQpICc7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHll
YXJTdHJpbmcgKz0gJ+W5tCAnOworICAgICAgICByZXR1cm4geWVhclN0cmluZyArIG1vbnRoU3Ry
aW5nOworICAgIGNhc2UgJ3poJzoKKyAgICAgICAgcmV0dXJuIHllYXJTdHJpbmcgKyAn5bm0JyAr
IG1vbnRoU3RyaW5nOworICAgIGNhc2UgJ2tvJzoKKyAgICAgICAgcmV0dXJuIHllYXJTdHJpbmcg
KyAn64WEICcgKyBtb250aFN0cmluZzsKKyAgICBjYXNlICdsdic6CisgICAgICAgIHJldHVybiB5
ZWFyU3RyaW5nICsgJy4gZy4gJyArIG1vbnRoU3RyaW5nOworICAgIGNhc2UgJ3B0JzoKKyAgICAg
ICAgcmV0dXJuIG1vbnRoU3RyaW5nICsgJyBkZSAnICsgeWVhclN0cmluZzsKKyAgICBjYXNlICdz
cic6CisgICAgICAgIHJldHVybiBtb250aFN0cmluZyArICcuICcgKyB5ZWFyU3RyaW5nOworICAg
IGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBtb250aFN0cmluZyArICcgJyArIHllYXJTdHJpbmc7
CisgICAgfQorfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBJbml0aWFsaXphdGlvbgorCisvKioKKyAqIEBw
YXJhbSB7RXZlbnR9IGV2ZW50OworICovCitmdW5jdGlvbiBoYW5kbGVNZXNzYWdlKGV2ZW50KSB7
CisgICAgaWYgKGdsb2JhbC5hcmd1bWVudHNSZWNlaXZlZCkKKyAgICAgICAgcmV0dXJuOworICAg
IGdsb2JhbC5hcmd1bWVudHNSZWNlaXZlZCA9IHRydWU7CisgICAgaW5pdGlhbGl6ZShKU09OLnBh
cnNlKGV2ZW50LmRhdGEpKTsKK30KKworZnVuY3Rpb24gaGFuZGxlQXJndW1lbnRzVGltZW91dCgp
IHsKKyAgICBpZiAoZ2xvYmFsLmFyZ3VtZW50c1JlY2VpdmVkKQorICAgICAgICByZXR1cm47Cisg
ICAgaWYgKHdpbmRvdy5kaWFsb2dBcmd1bWVudHMpIHsKKyAgICAgICAgaW5pdGlhbGl6ZShkaWFs
b2dBcmd1bWVudHMpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHZhciBhcmdzID0gewor
ICAgICAgICBtb250aExhYmVscyA6IFsnbTEnLCAnbTInLCAnbTMnLCAnbTQnLCAnbTUnLCAnbTYn
LAorICAgICAgICAgICAgICAgICAgICAgICAnbTcnLCAnbTgnLCAnbTknLCAnbTEwJywgJ20xMScs
ICdtMTInXSwKKyAgICAgICAgZGF5TGFiZWxzIDogWydkMScsICdkMicsICdkMycsICdkNCcsICdk
NScsICdkNicsICdkNyddLAorICAgICAgICB0b2RheUxhYmVsIDogJ1RvZGF5JywKKyAgICAgICAg
Y2xlYXJMYWJlbCA6ICdDbGVhcicsCisgICAgICAgIGNhbmNlbExhYmVsIDogJ0NhbmNlbCcsCisg
ICAgICAgIHdlZWtTdGFydERheSA6IDAsCisgICAgICAgIHN0ZXAgOiAxLAorICAgIH07CisgICAg
aW5pdGlhbGl6ZShhcmdzKTsKK30KKworLyoqCisgKiBAcGFyYW0geyFPYmplY3R9IGFyZ3MKKyAq
LworZnVuY3Rpb24gZ2V0QXJndW1lbnRFcnJvcihhcmdzKSB7CisgICAgaWYgKCFhcmdzLm1vbnRo
TGFiZWxzKQorICAgICAgICByZXR1cm4gJ05vIG1vbnRoTGFiZWxzLic7CisgICAgaWYgKGFyZ3Mu
bW9udGhMYWJlbHMubGVuZ3RoICE9IDEyKQorICAgICAgICByZXR1cm4gJ21vbnRoTGFiZWxzIGlz
IG5vdCBhbiBhcnJheSB3aXRoIDEyIGVsZW1lbnRzLic7CisgICAgaWYgKCFhcmdzLmRheUxhYmVs
cykKKyAgICAgICAgcmV0dXJuICdObyBkYXlMYWJlbHMuJzsKKyAgICBpZiAoYXJncy5kYXlMYWJl
bHMubGVuZ3RoICE9IDcpCisgICAgICAgIHJldHVybiAnZGF5TGFiZWxzIGlzIG5vdCBhbiBhcnJh
eSB3aXRoIDcgZWxlbWVudHMuJzsKKyAgICBpZiAoIWFyZ3MuY2xlYXJMYWJlbCkKKyAgICAgICAg
cmV0dXJuICdObyBjbGVhckxhYmVsLic7CisgICAgaWYgKCFhcmdzLnRvZGF5TGFiZWwpCisgICAg
ICAgIHJldHVybiAnTm8gdG9kYXlMYWJlbC4nOworICAgIGlmIChhcmdzLndlZWtTdGFydERheSkg
eworICAgICAgICBpZiAoYXJncy53ZWVrU3RhcnREYXkgPCAwIHx8IGFyZ3Mud2Vla1N0YXJ0RGF5
ID4gNikKKyAgICAgICAgICAgIHJldHVybiAnSW52YWxpZCB3ZWVrU3RhcnREYXk6ICcgKyBhcmdz
LndlZWtTdGFydERheTsKKyAgICB9CisgICAgcmV0dXJuICcnOworfQorCitmdW5jdGlvbiBjcmVh
dGVEYXRlRnJvbVN0cmluZyhvcHRfY3VycmVudCkgeworICAgIGlmIChvcHRfY3VycmVudCkgewor
ICAgICAgICB2YXIgcmVzdWx0ID0gb3B0X2N1cnJlbnQubWF0Y2goLyhcZCspLShcZCspLShcZCsp
Lyk7CisgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoRGF0
ZS5VVEMoTnVtYmVyKHJlc3VsdFsxXSksIE51bWJlcihyZXN1bHRbMl0pIC0gMSwgTnVtYmVyKHJl
c3VsdFszXSkpKTsKKyAgICB9CisgICAgdmFyIG5vdyA9IG5ldyBEYXRlKCk7CisgICAgLy8gQ3Jl
YXRlIFVUQyBkYXRlIHdpdGggc2FtZSBudW1iZXJzIGFzIGxvY2FsIGRhdGUuCisgICAgcmV0dXJu
IG5ldyBEYXRlKERhdGUuVVRDKG5vdy5nZXRGdWxsWWVhcigpLCBub3cuZ2V0TW9udGgoKSwgbm93
LmdldERhdGUoKSkpOworfQorCisvKioKKyAqIEBwYXJhbSB7IU9iamVjdH0gYXJncworICovCitm
dW5jdGlvbiBpbml0aWFsaXplKGFyZ3MpIHsKKyAgICB2YXIgbWFpbiA9ICQoJ21haW4nKTsKKyAg
ICBtYWluLmNsYXNzTGlzdC5hZGQoQ0xBU1MuTk9fRk9DVVNfUklORyk7CisgICAgdmFyIGNsaXBw
ZXIgPSBjcmVhdGVFbGVtZW50KCdkaXYnLCBDTEFTUy5CVUJCTEVfQVJST1dfQ0xJUFBFUik7Cisg
ICAgbWFpbi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShjbGlwcGVyLCBtYWluKTsKKyAgICBjbGlw
cGVyLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQoJ2RpdicsIENMQVNTLkJVQkJMRV9BUlJPVykp
OworCisgICAgdmFyIGVycm9yU3RyaW5nID0gZ2V0QXJndW1lbnRFcnJvcihhcmdzKTsKKyAgICBp
ZiAoZXJyb3JTdHJpbmcubGVuZ3RoID4gMCkgeworICAgICAgICBtYWluLnRleHRDb250ZW50ID0g
J0ludGVybmFsIGVycm9yOiAnICsgZXJyb3JTdHJpbmc7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Z2xvYmFsLnBhcmFtcyA9IGFyZ3M7CisgICAgICAgIGNoZWNrTGltaXRzKCk7CisgICAgICAgIGxh
eW91dCgpOworICAgICAgICAvLyBGSVhNRTogVGhpcyBtaWdodCBzaG93IHVuYXZhaWxhYmxlIG1v
bnRoLgorICAgICAgICAvLyBXaGF0IHNob3VsZCB3ZSBzaG93IGlmIHRoZSBjdXJyZW50IHZhbHVl
IG9yIHRvZGF5IGlzIG91dCBvZiByYW5nZT8KKyAgICAgICAgc2VsZWN0RGF0ZShjcmVhdGVEYXRl
RnJvbVN0cmluZyhhcmdzLmN1cnJlbnRWYWx1ZSkpOworCisgICAgICAgIHdpbmRvdy5mcmFtZUVs
ZW1lbnQuaGVpZ2h0ID0gZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQgKyA4ICsgJ3B4JzsKKyAg
ICB9CisgICAgd2luZG93LmZyYW1lRWxlbWVudC5zdHlsZS5vcGFjaXR5ID0gJzEuMCc7CisgICAg
d2luZG93LmZyYW1lRWxlbWVudC5zdHlsZS53ZWJraXRUcmFuc2l0aW9uID0gJ2FsbCAwLjJzIGVh
c2UnOworfQorCitmdW5jdGlvbiBjaGVja0xpbWl0cygpIHsKKyAgICAvLyBIYXJkIGxpbWl0cyBv
ZiB0eXBlPWRhdGUuIFNlZSBXZWJDb3JlL2h0bWwvRGF0ZUNvbXBvbmVudHMuaC4KKyAgICBnbG9i
YWwubWluaW11bURhdGUgPSBuZXcgRGF0ZSgtNjIxMzU1OTY4MDAwMDAuMCk7CisgICAgZ2xvYmFs
Lm1heGltdW1EYXRlID0gbmV3IERhdGUoODY0MDAwMDAwMDAwMDAwMC4wKTsKKyAgICAvLyBTZWUg
V2ViQ29yZS9odG1sL0RhdGVJbnB1dFR5cGUuY3BwLgorICAgIGdsb2JhbC5zdGVwID0gODY0MDAw
MDA7CisgICAgaWYgKGdsb2JhbC5wYXJhbXMubWluKSB7CisgICAgICAgIC8vIFdlIGFzc3VtZSBw
YXJhbXMubWluIGlzIGEgdmFsaWQgZGF0ZS4KKyAgICAgICAgZ2xvYmFsLm1pbmltdW1EYXRlID0g
Y3JlYXRlRGF0ZUZyb21TdHJpbmcoZ2xvYmFsLnBhcmFtcy5taW4pOworICAgIH0KKyAgICBpZiAo
Z2xvYmFsLnBhcmFtcy5tYXgpIHsKKyAgICAgICAgLy8gV2UgYXNzdW1lIHBhcmFtcy5tYXggaXMg
YSB2YWxpZCBkYXRlLgorICAgICAgICBnbG9iYWwubWF4aW11bURhdGUgPSBjcmVhdGVEYXRlRnJv
bVN0cmluZyhnbG9iYWwucGFyYW1zLm1heCk7CisgICAgfQorICAgIGlmIChnbG9iYWwucGFyYW1z
LnN0ZXApCisgICAgICAgIGdsb2JhbC5zdGVwICo9IGdsb2JhbC5wYXJhbXMuc3RlcDsKK30KKwor
ZnVuY3Rpb24gbGF5b3V0KCkgeworICAgIHZhciBtYWluID0gJCgnbWFpbicpOworICAgIHZhciBw
YXJhbXMgPSBnbG9iYWwucGFyYW1zOworICAgIG1haW4ucmVtb3ZlQ2hpbGQobWFpbi5maXJzdENo
aWxkKTsKKyAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5k
bGVHbG9iYWxLZXkpOworCisgICAgZ2xvYmFsLnllYXJNb250aENvbnRyb2xsZXIgPSBuZXcgWWVh
ck1vbnRoQ29udHJvbGxlcjIoKTsKKyAgICBnbG9iYWwueWVhck1vbnRoQ29udHJvbGxlci5hdHRh
Y2gocGFyYW1zLCBtYWluKTsKKyAgICB2YXIgY29udGFpbmVyID0gbGF5b3V0RGF5cyhwYXJhbXMs
IG1haW4pOworICAgIGxheW91dEJ1dHRvbnMocGFyYW1zLCBtYWluKTsKKworICAgIGNvbnRhaW5l
ci5mb2N1cygpOworfQorCitmdW5jdGlvbiBsYXlvdXREYXlzKHBhcmFtcywgbWFpbikgeworICAg
IHZhciBlbGVtZW50ID0gY3JlYXRlRWxlbWVudCgndGFibGUnLCBDTEFTUy5EQVlTX0FSRUEpOwor
ICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVEYXlDbGljayk7Cisg
ICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLCBoYW5kbGVNb3VzZU92ZXIp
OworICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCBoYW5kbGVNb3VzZU91
dCk7CisgICAgdmFyIGNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoJ3RyJywgQ0xBU1MuREFZX0xB
QkVMX0NPTlRBSU5FUik7CisgICAgdmFyIHdlZWtTdGFydERheSA9IGdsb2JhbC5wYXJhbXMud2Vl
a1N0YXJ0RGF5IHx8IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA3OyBpKyspCisgICAgICAg
IGNvbnRhaW5lci5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KCd0aCcsIENMQVNTLkRBWV9MQUJF
TCwgcGFyYW1zLmRheUxhYmVsc1sod2Vla1N0YXJ0RGF5ICsgaSkgJSA3XSkpOworICAgIGVsZW1l
bnQuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTsKKyAgICB2YXIgZGF5cyA9IFtdOworICAgIGZvciAo
dmFyIHcgPSAwOyB3IDwgV0VFS1M7IHcrKykgeworICAgICAgICBjb250YWluZXIgPSBjcmVhdGVF
bGVtZW50KCd0cicsIENMQVNTLldFRUtfQ09OVEFJTkVSKTsKKyAgICAgICAgdmFyIHdlZWsgPSBb
XTsKKyAgICAgICAgZm9yICh2YXIgZCA9IDA7IGQgPCA3OyBkKyspIHsKKyAgICAgICAgICAgIHZh
ciBkYXkgPSBjcmVhdGVFbGVtZW50KCd0ZCcsIENMQVNTLkRBWSwgJyAnKTsKKyAgICAgICAgICAg
IGRheS5zZXRBdHRyaWJ1dGUoJ2RhdGEtcG9zaXRpb24teCcsIFN0cmluZyhkKSk7CisgICAgICAg
ICAgICBkYXkuc2V0QXR0cmlidXRlKCdkYXRhLXBvc2l0aW9uLXknLCBTdHJpbmcodykpOworICAg
ICAgICAgICAgd2Vlay5wdXNoKGRheSk7CisgICAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hp
bGQoZGF5KTsKKyAgICAgICAgfQorICAgICAgICBkYXlzLnB1c2god2Vlayk7CisgICAgICAgIGVs
ZW1lbnQuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTsKKyAgICB9CisgICAgZ2xvYmFsLmRheXMgPSBk
YXlzOworICAgIGdsb2JhbC5kYXlzQXJlYSA9IGVsZW1lbnQ7CisgICAgY29udGFpbmVyID0gY3Jl
YXRlRWxlbWVudCgnZGl2JywgQ0xBU1MuREFZU19BUkVBX0NPTlRBSU5FUik7CisgICAgY29udGFp
bmVyLmFwcGVuZENoaWxkKGVsZW1lbnQpOworICAgIGNvbnRhaW5lci50YWJJbmRleCA9IDA7Cisg
ICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVEYXlzQXJlYUtl
eSk7CisgICAgbWFpbi5hcHBlbmRDaGlsZChjb250YWluZXIpOworICAgIHJldHVybiBjb250YWlu
ZXI7Cit9CisKK2Z1bmN0aW9uIGxheW91dEJ1dHRvbnMocGFyYW1zLCBtYWluKSB7CisgICAgdmFy
IGVsZW1lbnQgPSBjcmVhdGVFbGVtZW50KCdkaXYnLCBDTEFTUy5UT0RBWV9DTEVBUl9BUkVBKTsK
KyAgICBnbG9iYWwudG9kYXkgPSBjcmVhdGVFbGVtZW50KCdpbnB1dCcsIENMQVNTLlRPREFZX0JV
VFRPTik7CisgICAgZ2xvYmFsLnRvZGF5LnR5cGUgPSAnYnV0dG9uJzsKKyAgICBnbG9iYWwudG9k
YXkudmFsdWUgPSBwYXJhbXMudG9kYXlMYWJlbDsKKyAgICBnbG9iYWwudG9kYXkuYWRkRXZlbnRM
aXN0ZW5lcignY2xpY2snLCBoYW5kbGVUb2RheSk7CisgICAgZWxlbWVudC5hcHBlbmRDaGlsZChn
bG9iYWwudG9kYXkpOworICAgIGdsb2JhbC5jbGVhciA9IG51bGw7CisgICAgaWYgKCFwYXJhbXMu
cmVxdWlyZWQpIHsKKyAgICAgICAgZ2xvYmFsLmNsZWFyID0gY3JlYXRlRWxlbWVudCgnaW5wdXQn
LCBDTEFTUy5DTEVBUl9CVVRUT04pOworICAgICAgICBnbG9iYWwuY2xlYXIudHlwZSA9ICdidXR0
b24nOworICAgICAgICBnbG9iYWwuY2xlYXIudmFsdWUgPSBwYXJhbXMuY2xlYXJMYWJlbDsKKyAg
ICAgICAgZ2xvYmFsLmNsZWFyLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlQ2xlYXIp
OworICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGdsb2JhbC5jbGVhcik7CisgICAgfQorICAg
IC8vZ2xvYmFsLmNhbmNlbCA9IGNyZWF0ZUVsZW1lbnQoJ2lucHV0JywgQ0xBU1MuQ0FOQ0VMX0JV
VFRPTik7CisgICAgLy9nbG9iYWwuY2FuY2VsLnR5cGUgPSAnYnV0dG9uJzsKKyAgICAvL2dsb2Jh
bC5jYW5jZWwudmFsdWUgPSBwYXJhbXMuY2FuY2VsTGFiZWw7CisgICAgLy9nbG9iYWwuY2FuY2Vs
LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlQ2FuY2VsKTsKKyAgICAvL2VsZW1lbnQu
YXBwZW5kQ2hpbGQoZ2xvYmFsLmNhbmNlbCk7CisgICAgbWFpbi5hcHBlbmRDaGlsZChlbGVtZW50
KTsKKworICAgIGdsb2JhbC5sYXN0Rm9jdXNhYmxlQ29udHJvbCA9IGdsb2JhbC5jbGVhciB8fCBn
bG9iYWwudG9kYXk7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAq
LworZnVuY3Rpb24gWWVhck1vbnRoQ29udHJvbGxlcigpIHsKKyAgICB0aGlzLnllYXIgPSBudWxs
OworICAgIHRoaXMubW9udGggPSBudWxsOworfQorCitZZWFyTW9udGhDb250cm9sbGVyLnByb3Rv
dHlwZS5hdHRhY2ggPSBmdW5jdGlvbihwYXJhbXMsIG1haW4pIHsKKyAgICAvLyBGSVhNRTogU2hv
dWxkIHdlIHVzZSB0eXBlPW1vbnRoPworICAgIHRoaXMueWVhciA9IGNyZWF0ZUVsZW1lbnQoJ2lu
cHV0JywgQ0xBU1MuWUVBUl9TRUxFQ1RPUik7CisgICAgdGhpcy55ZWFyLnR5cGUgPSAnbnVtYmVy
JzsKKyAgICB0aGlzLnllYXIubWluID0gZ2xvYmFsLm1pbmltdW1EYXRlLmdldFVUQ0Z1bGxZZWFy
KCk7CisgICAgdGhpcy55ZWFyLm1heCA9IGdsb2JhbC5tYXhpbXVtRGF0ZS5nZXRVVENGdWxsWWVh
cigpOworICAgIHRoaXMueWVhci5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBiaW5kKHRoaXMu
aGFuZGxlWWVhck1vbnRoQ2hhbmdlLCB0aGlzKSk7CisgICAgdGhpcy55ZWFyLmFkZEV2ZW50TGlz
dGVuZXIoJ2lucHV0JywgYmluZCh0aGlzLmhhbmRsZVllYXJNb250aENoYW5nZSwgdGhpcykpOwor
ICAgIHRoaXMubW9udGggPSBjcmVhdGVFbGVtZW50KCdzZWxlY3QnLCBDTEFTUy5NT05USF9TRUxF
Q1RPUik7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMjsgaSsrKQorICAgICAgICB0aGlzLm1v
bnRoLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQoJ29wdGlvbicsIHVuZGVmaW5lZCwgcGFyYW1z
Lm1vbnRoTGFiZWxzW2ldKSk7CisgICAgdGhpcy5tb250aC5hZGRFdmVudExpc3RlbmVyKCdjaGFu
Z2UnLCBiaW5kKHRoaXMuaGFuZGxlWWVhck1vbnRoQ2hhbmdlLCB0aGlzKSk7CisgICAgdmFyIGVs
ZW1lbnQgPSBjcmVhdGVFbGVtZW50KCdkaXYnLCBDTEFTUy5ZRUFSX01PTlRIX0FSRUEpOworICAg
IGVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy55ZWFyKTsKKyAgICBlbGVtZW50LmFwcGVuZENoaWxk
KHRoaXMubW9udGgpOworICAgIG1haW4uYXBwZW5kQ2hpbGQoZWxlbWVudCk7CisKKyAgICBnbG9i
YWwuZmlyc3RGb2N1c2FibGVDb250cm9sID0gdGhpcy55ZWFyOworfTsKKworWWVhck1vbnRoQ29u
dHJvbGxlci5wcm90b3R5cGUuZ2V0WWVhciA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBOdW1i
ZXIodGhpcy55ZWFyLnZhbHVlKTsKK30KKworWWVhck1vbnRoQ29udHJvbGxlci5wcm90b3R5cGUu
Z2V0TW9udGggPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gTnVtYmVyKHRoaXMubW9udGguc2Vs
ZWN0ZWRJbmRleCk7Cit9CisKK1llYXJNb250aENvbnRyb2xsZXIucHJvdG90eXBlLnNldFllYXJN
b250aCA9IGZ1bmN0aW9uKHllYXIsIG1vbnRoKSB7CisgICAgdGhpcy55ZWFyLnZhbHVlID0gU3Ry
aW5nKHllYXIpOworICAgIHRoaXMubW9udGguc2VsZWN0ZWRJbmRleCA9IG1vbnRoOworICAgIHRo
aXMudXBkYXRlVUkoKTsKK307CisKK1llYXJNb250aENvbnRyb2xsZXIucHJvdG90eXBlLnVwZGF0
ZVVJID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIG1pblllYXIgPSBnbG9iYWwubWluaW11bURhdGUu
Z2V0VVRDRnVsbFllYXIoKTsKKyAgICB2YXIgbWF4WWVhciA9IGdsb2JhbC5tYXhpbXVtRGF0ZS5n
ZXRVVENGdWxsWWVhcigpOworICAgIHZhciB5ZWFyID0gdGhpcy5nZXRZZWFyKCk7CisgICAgaWYg
KHllYXIgPCBtaW5ZZWFyIHx8IHllYXIgPiBtYXhZZWFyKQorICAgICAgICB0aGlzLm1vbnRoLmRp
c2FibGVkID0gdHJ1ZTsKKyAgICBlbHNlIHsKKyAgICAgICAgdGhpcy5tb250aC5kaXNhYmxlZCA9
IGZhbHNlOworICAgICAgICB2YXIgbWluTW9udGggPSBnbG9iYWwubWluaW11bURhdGUuZ2V0VVRD
TW9udGgoKTsKKyAgICAgICAgdmFyIG1heE1vbnRoID0gZ2xvYmFsLm1heGltdW1EYXRlLmdldFVU
Q01vbnRoKCk7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTI7IGkrKykKKyAgICAgICAg
ICAgIHRoaXMubW9udGhbaV0uZGlzYWJsZWQgPSB5ZWFyID09IG1pblllYXIgJiYgaSA8IG1pbk1v
bnRoIHx8IHllYXIgPT0gbWF4WWVhciAmJiBpID4gbWF4TW9udGg7CisgICAgfQorfQorCitZZWFy
TW9udGhDb250cm9sbGVyLnByb3RvdHlwZS5oYW5kbGVZZWFyTW9udGhDaGFuZ2UgPSBmdW5jdGlv
bigpIHsKKyAgICBpZiAodGhpcy55ZWFyLnZhbHVlLmxlbmd0aCA8PSAwKQorICAgICAgICByZXR1
cm47CisgICAgdmFyIG5ld1llYXIgPSBOdW1iZXIodGhpcy55ZWFyLnZhbHVlKTsKKyAgICB2YXIg
bmV3TW9udGggPSB0aGlzLm1vbnRoLnNlbGVjdGVkSW5kZXg7CisgICAgaWYgKG5ld1llYXIgPT0g
Z2xvYmFsLmxhc3RZZWFyICYmIG5ld01vbnRoID09IGdsb2JhbC5sYXN0TW9udGgpCisgICAgICAg
IHJldHVybjsKKyAgICAvL3JlbmRlck1vbnRoKG5ld1llYXIsIG5ld01vbnRoKTsKKyAgICBuYXZp
Z2F0ZVRvTW9udGhXaXRoQW5pbWF0aW9uKG5ld1llYXIsIG5ld01vbnRoKTsKKyAgICBnbG9iYWwu
ZGF5c1tnbG9iYWwubGFzdFldW2dsb2JhbC5sYXN0WF0uY2xhc3NMaXN0LmFkZChDTEFTUy5TRUxF
Q1RFRCk7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqLworZnVu
Y3Rpb24gWWVhck1vbnRoQ29udHJvbGxlcjIoKSB7CisgICAgdGhpcy5jdXJyZW50WWVhciA9IC0x
OworICAgIHRoaXMuY3VycmVudE1vbnRoID0gLTE7Cit9CisKK1llYXJNb250aENvbnRyb2xsZXIy
LnByb3RvdHlwZS5hdHRhY2ggPSBmdW5jdGlvbihwYXJhbXMsIG1haW4pIHsKKyAgICB2YXIgZWxl
bWVudCA9IGNyZWF0ZUVsZW1lbnQoJ2RpdicsIENMQVNTLllFQVJfTU9OVEhfQVJFQSk7CisKKyAg
ICB2YXIgZWxlbWVudDIgPSBjcmVhdGVFbGVtZW50KCdkaXYnLCBDTEFTUy5ZRUFSX01PTlRIX1VQ
UEVSKTsKKyAgICBlbGVtZW50LmFwcGVuZENoaWxkKGVsZW1lbnQyKTsKKworICAgIHRoaXMuYXR0
YWNoTGVmdEJ1dHRvbnMoZWxlbWVudDIpOworCisgICAgdmFyIGJveCA9IGNyZWF0ZUVsZW1lbnQo
J2RpdicsICdtb250aC1zZWxlY3Rvci1ib3gnKTsKKyAgICBlbGVtZW50Mi5hcHBlbmRDaGlsZChi
b3gpOworICAgIHRoaXMubW9udGggPSBjcmVhdGVFbGVtZW50KCdzZWxlY3QnLCBDTEFTUy5NT05U
SF9TRUxFQ1RPUik7CisgICAgdGhpcy5tb250aC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBi
aW5kKHRoaXMuaGFuZGxlWWVhck1vbnRoQ2hhbmdlLCB0aGlzKSk7CisgICAgYm94LmFwcGVuZENo
aWxkKHRoaXMubW9udGgpOworCisgICAgLy9lbGVtZW50MiA9IGNyZWF0ZUVsZW1lbnQoJ2Rpdics
IENMQVNTLllFQVJfTU9OVEhfQlVUVE9OUyk7CisgICAgLy9lbGVtZW50LmFwcGVuZENoaWxkKGVs
ZW1lbnQyKTsKKyAgICB0aGlzLmF0dGFjaFJpZ2h0QnV0dG9ucyhlbGVtZW50Mik7CisKKyAgICBt
YWluLmFwcGVuZENoaWxkKGVsZW1lbnQpOworICAgIGdsb2JhbC5maXJzdEZvY3VzYWJsZUNvbnRy
b2wgPSB0aGlzLmxlZnQyOyAvLyBGSVhNRTogb3IgdGhpcy5tb250aD8KK307CisKK1llYXJNb250
aENvbnRyb2xsZXIyLnByb3RvdHlwZS5hdHRhY2hMZWZ0QnV0dG9ucyA9IGZ1bmN0aW9uKHBhcmVu
dCkgeworICAgIHZhciBlbGVtZW50MyA9IGNyZWF0ZUVsZW1lbnQoJ2RpdicsIENMQVNTLllFQVJf
TU9OVEhfQlVUVE9OX0xFRlQpOworICAgIHBhcmVudC5hcHBlbmRDaGlsZChlbGVtZW50Myk7CisK
KyAgICAvKgorICAgIHRoaXMubGVmdDMgPSBjcmVhdGVFbGVtZW50KCdpbnB1dCcsIENMQVNTLllF
QVJfTU9OVEhfQlVUVE9OKTsKKyAgICB0aGlzLmxlZnQzLnR5cGUgPSAnYnV0dG9uJzsKKyAgICB0
aGlzLmxlZnQzLnZhbHVlID0gJzw8PCc7CisgICAgdGhpcy5sZWZ0My5hZGRFdmVudExpc3RlbmVy
KCdjbGljaycsIGJpbmQodGhpcy5oYW5kbGVCdXR0b25DbGljaywgdGhpcykpOworICAgIGVsZW1l
bnQzLmFwcGVuZENoaWxkKHRoaXMubGVmdDMpOworICAgICovCisKKyAgICB0aGlzLmxlZnQyID0g
Y3JlYXRlRWxlbWVudCgnaW5wdXQnLCBDTEFTUy5ZRUFSX01PTlRIX0JVVFRPTik7CisgICAgdGhp
cy5sZWZ0Mi50eXBlID0gJ2J1dHRvbic7CisgICAgdGhpcy5sZWZ0Mi52YWx1ZSA9ICc8PCc7Cisg
ICAgdGhpcy5sZWZ0Mi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGJpbmQodGhpcy5oYW5kbGVC
dXR0b25DbGljaywgdGhpcykpOworICAgIGVsZW1lbnQzLmFwcGVuZENoaWxkKHRoaXMubGVmdDIp
OworCisgICAgdGhpcy5sZWZ0MSA9IGNyZWF0ZUVsZW1lbnQoJ2lucHV0JywgQ0xBU1MuWUVBUl9N
T05USF9CVVRUT04pOworICAgIHRoaXMubGVmdDEudHlwZSA9ICdidXR0b24nOworICAgIHRoaXMu
bGVmdDEudmFsdWUgPSAnPCc7CisgICAgdGhpcy5sZWZ0MS5hZGRFdmVudExpc3RlbmVyKCdjbGlj
aycsIGJpbmQodGhpcy5oYW5kbGVCdXR0b25DbGljaywgdGhpcykpOworICAgIGVsZW1lbnQzLmFw
cGVuZENoaWxkKHRoaXMubGVmdDEpOworfTsKKworWWVhck1vbnRoQ29udHJvbGxlcjIucHJvdG90
eXBlLmF0dGFjaFJpZ2h0QnV0dG9ucyA9IGZ1bmN0aW9uKHBhcmVudCkgeworICAgIHZhciBlbGVt
ZW50MyA9IGNyZWF0ZUVsZW1lbnQoJ2RpdicsIENMQVNTLllFQVJfTU9OVEhfQlVUVE9OX1JJR0hU
KTsKKyAgICBwYXJlbnQuYXBwZW5kQ2hpbGQoZWxlbWVudDMpOworICAgIHRoaXMucmlnaHQxID0g
Y3JlYXRlRWxlbWVudCgnaW5wdXQnLCBDTEFTUy5ZRUFSX01PTlRIX0JVVFRPTik7CisgICAgdGhp
cy5yaWdodDEudHlwZSA9ICdidXR0b24nOworICAgIHRoaXMucmlnaHQxLnZhbHVlID0gJz4nOwor
ICAgIHRoaXMucmlnaHQxLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYmluZCh0aGlzLmhhbmRs
ZUJ1dHRvbkNsaWNrLCB0aGlzKSk7CisgICAgZWxlbWVudDMuYXBwZW5kQ2hpbGQodGhpcy5yaWdo
dDEpOworCisgICAgdGhpcy5yaWdodDIgPSBjcmVhdGVFbGVtZW50KCdpbnB1dCcsIENMQVNTLllF
QVJfTU9OVEhfQlVUVE9OKTsKKyAgICB0aGlzLnJpZ2h0Mi50eXBlID0gJ2J1dHRvbic7CisgICAg
dGhpcy5yaWdodDIudmFsdWUgPSAnPj4nOworICAgIHRoaXMucmlnaHQyLmFkZEV2ZW50TGlzdGVu
ZXIoJ2NsaWNrJywgYmluZCh0aGlzLmhhbmRsZUJ1dHRvbkNsaWNrLCB0aGlzKSk7CisgICAgZWxl
bWVudDMuYXBwZW5kQ2hpbGQodGhpcy5yaWdodDIpOworCisgICAgLyoKKyAgICB0aGlzLnJpZ2h0
MyA9IGNyZWF0ZUVsZW1lbnQoJ2lucHV0JywgQ0xBU1MuWUVBUl9NT05USF9CVVRUT04pOworICAg
IHRoaXMucmlnaHQzLnR5cGUgPSAnYnV0dG9uJzsKKyAgICB0aGlzLnJpZ2h0My52YWx1ZSA9ICc+
Pj4nOworICAgIHRoaXMucmlnaHQzLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYmluZCh0aGlz
LmhhbmRsZUJ1dHRvbkNsaWNrLCB0aGlzKSk7CisgICAgZWxlbWVudDMuYXBwZW5kQ2hpbGQodGhp
cy5yaWdodDMpOworKi8KK307CisKK1llYXJNb250aENvbnRyb2xsZXIyLnByb3RvdHlwZS5nZXRZ
ZWFyID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMuY3VycmVudFllYXI7Cit9OworCitZ
ZWFyTW9udGhDb250cm9sbGVyMi5wcm90b3R5cGUuZ2V0TW9udGggPSBmdW5jdGlvbigpIHsKKyAg
ICByZXR1cm4gdGhpcy5jdXJyZW50TW9udGg7Cit9OworCitZZWFyTW9udGhDb250cm9sbGVyMi5w
cm90b3R5cGUuc2V0WWVhck1vbnRoID0gZnVuY3Rpb24oeWVhciwgbW9udGgpIHsKKyAgICB0aGlz
LmN1cnJlbnRZZWFyID0geWVhcjsKKyAgICB0aGlzLmN1cnJlbnRNb250aCA9IG1vbnRoOworICAg
IHRoaXMudXBkYXRlVUkoKTsKK307CisKK1llYXJNb250aENvbnRyb2xsZXIyLnByb3RvdHlwZS51
cGRhdGVVSSA9IGZ1bmN0aW9uKCkgeworICAgIHZhciBtaW4gPSBnbG9iYWwubWluaW11bURhdGUu
Z2V0VVRDRnVsbFllYXIoKSAqIDEyICsgZ2xvYmFsLm1pbmltdW1EYXRlLmdldFVUQ01vbnRoKCk7
CisgICAgdmFyIG1heCA9IGdsb2JhbC5tYXhpbXVtRGF0ZS5nZXRVVENGdWxsWWVhcigpICogMTIg
KyBnbG9iYWwubWF4aW11bURhdGUuZ2V0VVRDTW9udGgoKTsKKyAgICB2YXIgY3VycmVudCA9IHRo
aXMuY3VycmVudFllYXIgKiAxMiArIHRoaXMuY3VycmVudE1vbnRoOworICAgIGlmICh0aGlzLmxl
ZnQzKQorICAgICAgICB0aGlzLmxlZnQzLmRpc2FibGVkID0gY3VycmVudCAtIDEzIDwgbWluOwor
ICAgIHRoaXMubGVmdDIuZGlzYWJsZWQgPSBjdXJyZW50IC0gMiA8IG1pbjsKKyAgICB0aGlzLmxl
ZnQxLmRpc2FibGVkID0gY3VycmVudCAtIDEgPCBtaW47CisgICAgdGhpcy5yaWdodDEuZGlzYWJs
ZWQgPSBjdXJyZW50ICsgMSA+IG1heDsKKyAgICB0aGlzLnJpZ2h0Mi5kaXNhYmxlZCA9IGN1cnJl
bnQgKyAyID4gbWF4OworICAgIGlmICh0aGlzLnJpZ2h0MykKKyAgICAgICAgdGhpcy5yaWdodDMu
ZGlzYWJsZWQgPSBjdXJyZW50ICsgMTMgPiBtYXg7CisgICAgd2hpbGUgKHRoaXMubW9udGguaGFz
Q2hpbGROb2RlcygpKQorICAgICAgICB0aGlzLm1vbnRoLnJlbW92ZUNoaWxkKHRoaXMubW9udGgu
Zmlyc3RDaGlsZCk7CisgICAgZm9yICh2YXIgbSA9IGN1cnJlbnQgLSA2OyBtIDw9IGN1cnJlbnQg
KyA2OyBtKyspIHsKKyAgICAgICAgaWYgKG0gPCBtaW4gfHwgbSA+IG1heCkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICB2YXIgb3B0aW9uID0gY3JlYXRlRWxlbWVudCgnb3B0aW9uJywg
dW5kZWZpbmVkLCBmb3JtYXRZZWFyTW9udGgoTWF0aC5mbG9vcihtIC8gMTIpLCBtICUgMTIpKTsK
KyAgICAgICAgb3B0aW9uLnZhbHVlID0gU3RyaW5nKE1hdGguZmxvb3IobSAvIDEyKSkgKyAnLScg
KyBTdHJpbmcobSAlIDEyKTsKKyAgICAgICAgdGhpcy5tb250aC5hcHBlbmRDaGlsZChvcHRpb24p
OworICAgICAgICBpZiAobSA9PSBjdXJyZW50KQorICAgICAgICAgICAgb3B0aW9uLnNlbGVjdGVk
ID0gdHJ1ZTsKKyAgICB9Cit9OworCitZZWFyTW9udGhDb250cm9sbGVyMi5wcm90b3R5cGUuaGFu
ZGxlWWVhck1vbnRoQ2hhbmdlID0gZnVuY3Rpb24oKSB7CisgICAgY29uc29sZS5sb2coJ2hhbmRs
ZVlNQzogJyArIHRoaXMubW9udGgudmFsdWUpOworICAgIHZhciByZXN1bHQgPSB0aGlzLm1vbnRo
LnZhbHVlLm1hdGNoKC8oXGQrKS0oXGQrKS8pOworICAgIGlmICghcmVzdWx0KQorICAgICAgICBy
ZXR1cm47CisgICAgdmFyIG5ld1llYXIgPSBOdW1iZXIocmVzdWx0WzFdKTsKKyAgICB2YXIgbmV3
TW9udGggPSBOdW1iZXIocmVzdWx0WzJdKTsKKyAgICBpZiAobmV3WWVhciA9PSBnbG9iYWwubGFz
dFllYXIgJiYgbmV3TW9udGggPT0gZ2xvYmFsLmxhc3RNb250aCkKKyAgICAgICAgcmV0dXJuOwor
ICAgIC8vIEZJWE1FOiBuYXZpZ2F0ZVRvTW9udGhXaXRoQW5pbWF0aW9uKCkgc2hvdWxkIGhhbmRs
ZSBDTEFTUy5TTEVDVEVEPworICAgIG5hdmlnYXRlVG9Nb250aFdpdGhBbmltYXRpb24obmV3WWVh
ciwgbmV3TW9udGgpOworICAgIGdsb2JhbC5kYXlzW2dsb2JhbC5sYXN0WV1bZ2xvYmFsLmxhc3RY
XS5jbGFzc0xpc3QuYWRkKENMQVNTLlNFTEVDVEVEKTsKK307CisKK1llYXJNb250aENvbnRyb2xs
ZXIyLlBSRVZJT1VTXzEwWUVBUlMgPSAtMTIwOworWWVhck1vbnRoQ29udHJvbGxlcjIuUFJFVklP
VVNfWUVBUiA9IC0xMjsKK1llYXJNb250aENvbnRyb2xsZXIyLlBSRVZJT1VTX01PTlRIID0gLTE7
CitZZWFyTW9udGhDb250cm9sbGVyMi5ORVhUX01PTlRIID0gMTsKK1llYXJNb250aENvbnRyb2xs
ZXIyLk5FWFRfWUVBUiA9IDEyOworWWVhck1vbnRoQ29udHJvbGxlcjIuTkVYVF9ZRUFSUyA9IDEy
MDsKKworWWVhck1vbnRoQ29udHJvbGxlcjIucHJvdG90eXBlLmhhbmRsZUJ1dHRvbkNsaWNrID0g
ZnVuY3Rpb24oZXZlbnQpIHsKKyAgICBpZiAoZXZlbnQudGFyZ2V0ID09IHRoaXMubGVmdDMpCisg
ICAgICAgIHRoaXMubW92ZVJlbGF0aXZlbHkoWWVhck1vbnRoQ29udHJvbGxlcjIuUFJFVklPVVNf
MTBZRUFSUyk7CisgICAgZWxzZSBpZiAoZXZlbnQudGFyZ2V0ID09IHRoaXMubGVmdDIpCisgICAg
ICAgIHRoaXMubW92ZVJlbGF0aXZlbHkoWWVhck1vbnRoQ29udHJvbGxlcjIuUFJFVklPVVNfWUVB
Uik7CisgICAgZWxzZSBpZiAoZXZlbnQudGFyZ2V0ID09IHRoaXMubGVmdDEpCisgICAgICAgIHRo
aXMubW92ZVJlbGF0aXZlbHkoWWVhck1vbnRoQ29udHJvbGxlcjIuUFJFVklPVVNfTU9OVEgpOwor
ICAgIGVsc2UgaWYgKGV2ZW50LnRhcmdldCA9PSB0aGlzLnJpZ2h0MSkKKyAgICAgICAgdGhpcy5t
b3ZlUmVsYXRpdmVseShZZWFyTW9udGhDb250cm9sbGVyMi5ORVhUX01PTlRIKQorICAgIGVsc2Ug
aWYgKGV2ZW50LnRhcmdldCA9PSB0aGlzLnJpZ2h0MikKKyAgICAgICAgdGhpcy5tb3ZlUmVsYXRp
dmVseShZZWFyTW9udGhDb250cm9sbGVyMi5ORVhUX1lFQVIpOworICAgIGVsc2UgaWYgKGV2ZW50
LnRhcmdldCA9PSB0aGlzLnJpZ2h0MykKKyAgICAgICAgdGhpcy5tb3ZlUmVsYXRpdmVseShZZWFy
TW9udGhDb250cm9sbGVyMi5ORVhUXzEwWUVBUlMpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJu
OworfTsKKworWWVhck1vbnRoQ29udHJvbGxlcjIucHJvdG90eXBlLm1vdmVSZWxhdGl2ZWx5ID0g
ZnVuY3Rpb24oYW1vdW50KSB7CisgICAgdmFyIG1pbiA9IGdsb2JhbC5taW5pbXVtRGF0ZS5nZXRV
VENGdWxsWWVhcigpICogMTIgKyBnbG9iYWwubWluaW11bURhdGUuZ2V0VVRDTW9udGgoKTsKKyAg
ICB2YXIgbWF4ID0gZ2xvYmFsLm1heGltdW1EYXRlLmdldFVUQ0Z1bGxZZWFyKCkgKiAxMiArIGds
b2JhbC5tYXhpbXVtRGF0ZS5nZXRVVENNb250aCgpOworICAgIHZhciBjdXJyZW50ID0gdGhpcy5j
dXJyZW50WWVhciAqIDEyICsgdGhpcy5jdXJyZW50TW9udGg7CisgICAgdmFyIHVwZGF0ZWQgPSBj
dXJyZW50OworICAgIGlmIChhbW91bnQgPCAwKSB7CisgICAgICAgIHVwZGF0ZWQgPSBjdXJyZW50
ICsgYW1vdW50ID49IG1pbiA/IGN1cnJlbnQgKyBhbW91bnQgOiBtaW47CisgICAgfSBlbHNlIHsK
KyAgICAgICAgdXBkYXRlZCA9IGN1cnJlbnQgKyBhbW91bnQgPD0gbWF4ID8gY3VycmVudCArIGFt
b3VudCA6IG1heDsKKyAgICB9CisgICAgaWYgKHVwZGF0ZWQgPT0gY3VycmVudCkKKyAgICAgICAg
cmV0dXJuOworICAgIG5hdmlnYXRlVG9Nb250aFdpdGhBbmltYXRpb24oTWF0aC5mbG9vcih1cGRh
dGVkIC8gMTIpLCB1cGRhdGVkICUgMTIpOworICAgIGdsb2JhbC5kYXlzW2dsb2JhbC5sYXN0WV1b
Z2xvYmFsLmxhc3RYXS5jbGFzc0xpc3QuYWRkKENMQVNTLlNFTEVDVEVEKTsKK307CisgICAgCisv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisKK2Z1bmN0aW9uIHN0ZXBNaXNtYXRjaCh0aW1lKSB7CisgICAgcmV0dXJuICh0
aW1lIC0gZ2xvYmFsLm1pbmltdW1EYXRlLmdldFRpbWUoKSkgJSBnbG9iYWwuc3RlcCAhPSAwOwor
fQorCitmdW5jdGlvbiBvdXRPZlJhbmdlKHRpbWUpIHsKKyAgICByZXR1cm4gdGltZSA8IGdsb2Jh
bC5taW5pbXVtRGF0ZS5nZXRUaW1lKCkgfHwgdGltZSA+IGdsb2JhbC5tYXhpbXVtRGF0ZS5nZXRU
aW1lKCk7Cit9CisKK2Z1bmN0aW9uIGlzVmFsaWREYXRlKHRpbWUpIHsKKyAgICByZXR1cm4gIW91
dE9mUmFuZ2UodGltZSkgJiYgIXN0ZXBNaXNtYXRjaCh0aW1lKTsKK30KKworLyoqCisgKiBAcGFy
YW0ge251bWJlcn0geWVhcgorICogQHBhcmFtIHtudW1iZXJ9IG1vbnRoCisgKi8KK2Z1bmN0aW9u
IHJlbmRlck1vbnRoKHllYXIsIG1vbnRoKSB7CisgICAgZ2xvYmFsLmxhc3RZZWFyID0geWVhcjsK
KyAgICBnbG9iYWwubGFzdE1vbnRoID0gbW9udGg7CisgICAgdmFyIGRheUl0ZXJhdG9yID0gbmV3
IERhdGUoRGF0ZS5VVEMoeWVhciwgbW9udGgsIDEpKTsKKyAgICBkYXlJdGVyYXRvci5zZXRVVENG
dWxsWWVhcih5ZWFyKTsKKyAgICB2YXIgbW9udGhTdGFydERheSA9IGRheUl0ZXJhdG9yLmdldFVU
Q0RheSgpOworICAgIHZhciB3ZWVrU3RhcnREYXkgPSBnbG9iYWwucGFyYW1zLndlZWtTdGFydERh
eSB8fCAwOworICAgIHZhciBzdGFydE9mZnNldCA9IHdlZWtTdGFydERheSAtIG1vbnRoU3RhcnRE
YXk7CisgICAgaWYgKHN0YXJ0T2Zmc2V0ID49IDApCisgICAgICAgIHN0YXJ0T2Zmc2V0IC09IDc7
CisgICAgZGF5SXRlcmF0b3Iuc2V0VVRDRGF0ZShzdGFydE9mZnNldCArIDEpOworICAgIGZvciAo
dmFyIHcgPSAwOyB3IDwgV0VFS1M7IHcrKykgeworICAgICAgICBmb3IgKHZhciBkID0gMDsgZCA8
IDc7IGQrKykgeworICAgICAgICAgICAgdmFyIGl0ZXJZZWFyID0gZGF5SXRlcmF0b3IuZ2V0VVRD
RnVsbFllYXIoKTsKKyAgICAgICAgICAgIHZhciBpdGVyTW9udGggPSBkYXlJdGVyYXRvci5nZXRV
VENNb250aCgpOworICAgICAgICAgICAgdmFyIHRpbWUgPSBkYXlJdGVyYXRvci5nZXRUaW1lKCk7
CisgICAgICAgICAgICB2YXIgZWxlbWVudCA9IGdsb2JhbC5kYXlzW3ddW2RdOworICAgICAgICAg
ICAgZWxlbWVudC5pbm5lclRleHQgPSBTdHJpbmcoZGF5SXRlcmF0b3IuZ2V0VVRDRGF0ZSgpKTsK
KyAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gQ0xBU1MuREFZOworICAgICAgICAgICAg
ZWxlbWVudC5kYXRhc2V0LnN1Ym1pdFZhbHVlID0gY3JlYXRlRGF0ZVN0cmluZyhpdGVyWWVhciwg
aXRlck1vbnRoLCBkYXlJdGVyYXRvci5nZXRVVENEYXRlKCkpOworICAgICAgICAgICAgaWYgKG91
dE9mUmFuZ2UodGltZSkpIHsKKyAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQo
Q0xBU1MuVU5BVkFJTEFCTEUpOworICAgICAgICAgICAgfSBlbHNlIGlmIChzdGVwTWlzbWF0Y2go
dGltZSkpIHsKKyAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1MuVU5B
VkFJTEFCTEUpOworICAgICAgICAgICAgfSBlbHNlIGlmICgoaXRlclllYXIgPT0geWVhciAmJiBk
YXlJdGVyYXRvci5nZXRVVENNb250aCgpIDwgbW9udGgpIHx8IChtb250aCA9PSAwICYmIGl0ZXJN
b250aCA9PSAxMSkpIHsKKyAgICAgICAgICAgICAgICAvL2VsZW1lbnQuY2xhc3NMaXN0LmFkZChD
TEFTUy5VTkFWQUlMQUJMRSk7CisgICAgICAgICAgICAgICAgLy9lbGVtZW50LmNsYXNzTGlzdC5h
ZGQoQ0xBU1MuVU5BVkFJTEFCTEVfVVApOworICAgICAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NM
aXN0LmFkZChDTEFTUy5BVkFJTEFCTEUpOworICAgICAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NM
aXN0LmFkZChDTEFTUy5OT1RfVEhJU19NT05USCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKChp
dGVyWWVhciA9PSB5ZWFyICYmIGRheUl0ZXJhdG9yLmdldFVUQ01vbnRoKCkgPiBtb250aCkgfHwg
KG1vbnRoID09IDExICYmIGl0ZXJNb250aCA9PSAwKSkgeworICAgICAgICAgICAgICAgIC8vZWxl
bWVudC5jbGFzc0xpc3QuYWRkKENMQVNTLlVOQVZBSUxBQkxFKTsKKyAgICAgICAgICAgICAgICAv
L2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTUy5VTkFWQUlMQUJMRV9ET1dOKTsKKyAgICAgICAg
ICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1MuQVZBSUxBQkxFKTsKKyAgICAgICAg
ICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1MuTk9UX1RISVNfTU9OVEgpOworICAg
ICAgICAgICAgfSBlbHNlIGlmIChpc05hTih0aW1lKSkgeworICAgICAgICAgICAgICAgIGVsZW1l
bnQuaW5uZXJUZXh0ID0gJy0nOworICAgICAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFk
ZChDTEFTUy5VTkFWQUlMQUJMRSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTUy5BVkFJTEFCTEUpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZGF5SXRlcmF0b3Iuc2V0VVRDRGF0ZShkYXlJdGVyYXRvci5nZXRVVENE
YXRlKCkgKyAxKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGdsb2JhbC50b2RheS5kaXNhYmxl
ZCA9ICFpc1ZhbGlkRGF0ZShjcmVhdGVEYXRlRnJvbVN0cmluZygpLmdldFRpbWUoKSk7Cit9CisK
Ky8qKgorICogQHBhcmFtIHtudW1iZXJ9IHllYXIKKyAqIEBwYXJhbSB7bnVtYmVyfSBtb250aAor
ICovCitmdW5jdGlvbiBuYXZpZ2F0ZVRvTW9udGgoeWVhciwgbW9udGgpIHsKKyAgICBnbG9iYWwu
eWVhck1vbnRoQ29udHJvbGxlci5zZXRZZWFyTW9udGgoeWVhciwgbW9udGgpOworICAgIHJlbmRl
ck1vbnRoKHllYXIsIG1vbnRoKTsKK30KKworLyoqCisgKiBAcGFyYW0ge251bWJlcn0geWVhcgor
ICogQHBhcmFtIHtudW1iZXJ9IG1vbnRoCisgKiBAcGFyYW0ge2Jvb2xlYW59IHJpZ2h0IGZhbHNl
OmxlZnQsIHRydWU6cmlnaHQKKyAqLworZnVuY3Rpb24gbmF2aWdhdGVUb01vbnRoV2l0aEFuaW1h
dGlvbih5ZWFyLCBtb250aCkgeworICAgIGlmIChnbG9iYWwubGFzdFllYXIgPj0gMCAmJiBnbG9i
YWwubGFzdE1vbnRoID49IDApIHsKKyAgICAgICAgaWYgKHllYXIgPT0gZ2xvYmFsLmxhc3RZZWFy
ICYmIG1vbnRoID09IGdsb2JhbC5sYXN0TW9udGgpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIHZhciBkZWNyZWFzaW5nID0gZmFsc2U7CisgICAgICAgIGlmICh5ZWFyIDwgZ2xvYmFsLmxh
c3RZZWFyKSB7CisgICAgICAgICAgICBkZWNyZWFzaW5nID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNl
IGlmICh5ZWFyID4gZ2xvYmFsLmxhc3RZZWFyKSB7CisgICAgICAgICAgICBkZWNyZWFzaW5nID0g
ZmFsc2U7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkZWNyZWFzaW5nID0gbW9udGgg
PCBnbG9iYWwubGFzdE1vbnRoOworICAgICAgICB9CisgICAgICAgIHZhciBkYXlzU3R5bGUgPSBn
bG9iYWwuZGF5c0FyZWEuc3R5bGU7CisgICAgICAgIGdsb2JhbC5kYXlzQXJlYS5hZGRFdmVudExp
c3RlbmVyKCd3ZWJraXRUcmFuc2l0aW9uRW5kJywgbW92ZUluRGF5cyk7CisgICAgICAgIGRheXNT
dHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7CisgICAgICAgIGRheXNTdHlsZS53ZWJraXRUcmFu
c2l0aW9uID0gJ2xlZnQgMC4xcyBlYXNlJzsKKyAgICAgICAgZGF5c1N0eWxlLmxlZnQgPSAoZGVj
cmVhc2luZyA/ICcnIDogJy0nKSArIGdsb2JhbC5kYXlzQXJlYS5vZmZzZXRXaWR0aCArICdweCc7
CisgICAgfQorICAgIG5hdmlnYXRlVG9Nb250aCh5ZWFyLCBtb250aCk7Cit9CisKK2Z1bmN0aW9u
IG1vdmVJbkRheXMoKSB7CisgICAgdmFyIGRheXNTdHlsZSA9IGdsb2JhbC5kYXlzQXJlYS5zdHls
ZTsKKyAgICBnbG9iYWwuZGF5c0FyZWEucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2Via2l0VHJhbnNp
dGlvbkVuZCcsIG1vdmVJbkRheXMpOworICAgIGRheXNTdHlsZS53ZWJraXRUcmFuc2l0aW9uID0g
Jyc7CisgICAgZGF5c1N0eWxlLmxlZnQgPSAoZGF5c1N0eWxlLmxlZnQuY2hhckF0KDApID09ICct
JyA/ICcnIDogJy0nKSArIGdsb2JhbC5kYXlzQXJlYS5vZmZzZXRXaWR0aCArICdweCc7CisgICAg
Z2xvYmFsLmRheXNBcmVhLm9mZnNldExlZnQ7IC8vIEZvcmNlIHRvIGxheW91dC4KKyAgICBkYXlz
U3R5bGUud2Via2l0VHJhbnNpdGlvbiA9ICdsZWZ0IDAuMXMgZWFzZSc7CisgICAgZGF5c1N0eWxl
LmxlZnQgPSAnMHB4JzsKK30KKworLyoqCisgKiBAcGFyYW0ge0RhdGV9IGRhdGUKKyAqLworZnVu
Y3Rpb24gc2VsZWN0RGF0ZShkYXRlKSB7CisgICAgbmF2aWdhdGVUb01vbnRoV2l0aEFuaW1hdGlv
bihkYXRlLmdldFVUQ0Z1bGxZZWFyKCksIGRhdGUuZ2V0VVRDTW9udGgoKSk7CisgICAgdmFyIGRh
dGVTdHJpbmcgPSBjcmVhdGVEYXRlU3RyaW5nKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSwgZGF0ZS5n
ZXRVVENNb250aCgpLCBkYXRlLmdldFVUQ0RhdGUoKSk7CisgICAgZm9yICh2YXIgdyA9IDA7IHcg
PCBXRUVLUzsgdysrKSB7CisgICAgICAgIGZvciAodmFyIGQgPSAwOyBkIDwgNzsgZCsrKSB7Cisg
ICAgICAgICAgICBpZiAoZ2xvYmFsLmRheXNbd11bZF0uZGF0YXNldC5zdWJtaXRWYWx1ZSA9PSBk
YXRlU3RyaW5nKSB7CisgICAgICAgICAgICAgICAgZ2xvYmFsLmRheXNbd11bZF0uY2xhc3NMaXN0
LmFkZChDTEFTUy5TRUxFQ1RFRCk7CisgICAgICAgICAgICAgICAgZ2xvYmFsLmxhc3RYID0gZDsK
KyAgICAgICAgICAgICAgICBnbG9iYWwubGFzdFkgPSB3OworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitmdW5jdGlvbiBtYXliZVNl
dFByZXZpb3VzTW9udGgoKSB7CisgICAgdmFyIHllYXIgPSBnbG9iYWwueWVhck1vbnRoQ29udHJv
bGxlci5nZXRZZWFyKCk7CisgICAgdmFyIG1vbnRoID0gZ2xvYmFsLnllYXJNb250aENvbnRyb2xs
ZXIuZ2V0TW9udGgoKTsKKyAgICB2YXIgdGhpc01vbnRoU3RhcnRUaW1lID0gRGF0ZS5VVEMoeWVh
ciwgbW9udGgsIDEpOworICAgIGlmIChnbG9iYWwubWluaW11bURhdGUuZ2V0VGltZSgpID49IHRo
aXNNb250aFN0YXJ0VGltZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtb250aCA9
PSAwKSB7CisgICAgICAgIHllYXItLTsKKyAgICAgICAgbW9udGggPSAxMTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBtb250aC0tOworICAgIH0KKyAgICBuYXZpZ2F0ZVRvTW9udGhXaXRoQW5pbWF0
aW9uKHllYXIsIG1vbnRoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworZnVuY3Rpb24gbWF5YmVT
ZXROZXh0TW9udGgoKSB7CisgICAgdmFyIHllYXIgPSBnbG9iYWwueWVhck1vbnRoQ29udHJvbGxl
ci5nZXRZZWFyKCk7CisgICAgdmFyIG1vbnRoID0gZ2xvYmFsLnllYXJNb250aENvbnRyb2xsZXIu
Z2V0TW9udGgoKTsKKyAgICBpZiAobW9udGggPT0gMTEpIHsKKyAgICAgICAgeWVhcisrOworICAg
ICAgICBtb250aCA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbW9udGgrKzsKKyAgICB9Cisg
ICAgdmFyIG5leHRNb250aFN0YXJ0VGltZSA9IERhdGUuVVRDKHllYXIsIG1vbnRoLCAxKTsKKyAg
ICBpZiAoZ2xvYmFsLm1heGltdW1EYXRlLmdldFRpbWUoKSA8IG5leHRNb250aFN0YXJ0VGltZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG5hdmlnYXRlVG9Nb250aFdpdGhBbmltYXRpb24o
eWVhciwgbW9udGgpOworICAgIHJldHVybiB0cnVlOworfQorCisvKioKKyAqIEBwYXJhbSB7RXZl
bnR9IGV2ZW50CisgKi8KK2Z1bmN0aW9uIGhhbmRsZURheUNsaWNrKGV2ZW50KSB7CisgICAgdmFy
IHllYXIgPSBnbG9iYWwueWVhck1vbnRoQ29udHJvbGxlci5nZXRZZWFyKCk7CisgICAgdmFyIG1v
bnRoID0gZ2xvYmFsLnllYXJNb250aENvbnRyb2xsZXIuZ2V0TW9udGgoKTsKKyAgICB2YXIgY2xh
c3NMaXN0ID0gZXZlbnQudGFyZ2V0LmNsYXNzTGlzdDsKKyAgICBpZiAoY2xhc3NMaXN0LmNvbnRh
aW5zKENMQVNTLlVOQVZBSUxBQkxFX1VQKSkgeworICAgICAgICBtYXliZVNldFByZXZpb3VzTW9u
dGgoKTsKKyAgICB9IGVsc2UgaWYgKGNsYXNzTGlzdC5jb250YWlucyhDTEFTUy5VTkFWQUlMQUJM
RV9ET1dOKSkgeworICAgICAgICBtYXliZVNldE5leHRNb250aCgpOworICAgIH0gZWxzZSBpZiAo
Y2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTLkFWQUlMQUJMRSkpIHsKKyAgICAgICAgc3VibWl0VmFs
dWUoZXZlbnQudGFyZ2V0LmRhdGFzZXQuc3VibWl0VmFsdWUpOworICAgIH0KK30KKworLyoqCisg
KiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50CisgKi8KK2Z1bmN0aW9uIGhhbmRsZU1vdXNlT3Zl
cihldmVudCkgeworICAgIHZhciBub2RlID0gZXZlbnQudGFyZ2V0OworICAgIGlmIChnbG9iYWwu
bGFzdFggPj0gMCAmJiBnbG9iYWwubGFzdFkgPj0gMCkKKyAgICAgICAgZ2xvYmFsLmRheXNbZ2xv
YmFsLmxhc3RZXVtnbG9iYWwubGFzdFhdLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1MuU0VMRUNURUQp
OworICAgIGlmICghbm9kZS5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1MuREFZKSkgeworICAgICAg
ICBnbG9iYWwubGFzdFggPSAtMTsKKyAgICAgICAgZ2xvYmFsLmxhc3RZID0gLTE7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgbm9kZS5jbGFzc0xpc3QuYWRkKENMQVNTLlNFTEVDVEVEKTsK
KyAgICBnbG9iYWwubGFzdFggPSBOdW1iZXIobm9kZS5kYXRhc2V0LnBvc2l0aW9uWCk7CisgICAg
Z2xvYmFsLmxhc3RZID0gTnVtYmVyKG5vZGUuZGF0YXNldC5wb3NpdGlvblkpOworfQorCisvKioK
KyAqLworZnVuY3Rpb24gaGFuZGxlTW91c2VPdXQoZXZlbnQpIHsKKyAgICBpZiAoZ2xvYmFsLmxh
c3RYID49IDAgJiYgZ2xvYmFsLmxhc3RZID49IDApCisgICAgICAgIGdsb2JhbC5kYXlzW2dsb2Jh
bC5sYXN0WV1bZ2xvYmFsLmxhc3RYXS5jbGFzc0xpc3QucmVtb3ZlKENMQVNTLlNFTEVDVEVEKTsK
KyAgICBnbG9iYWwubGFzdFggPSAtMTsKKyAgICBnbG9iYWwubGFzdFkgPSAtMTsKK30KKworLyoq
CisgKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGV2ZW50CisgKi8KK2Z1bmN0aW9uIGhhbmRsZURh
eXNBcmVhS2V5KGV2ZW50KSB7CisgICAgbWF5YmVVcGRhdGVGb2N1c1N0eWxlKCk7CisgICAgdmFy
IHggPSBnbG9iYWwubGFzdFg7CisgICAgdmFyIHkgPSBnbG9iYWwubGFzdFk7CisgICAgdmFyIGxv
Y2F0ZWQgPSB4ID49IDAgJiYgeSA+PSAgMDsKKyAgICB2YXIga2V5ID0gZXZlbnQua2V5SWRlbnRp
ZmllcjsKKyAgICBpZiAoIWxvY2F0ZWQgJiYgKGtleSA9PSAnTGVmdCcgfHwga2V5ID09ICdVcCcg
fHwga2V5ID09ICdSaWdodCcgfHwga2V5ID09ICdEb3duJykpIHsKKyAgICAgICAgdXBkYXRlU2Vs
ZWN0aW9uKGV2ZW50LCAzLCAyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvL2NvbnNv
bGUubG9nKCdLSTogJyArIGtleSk7CisgICAgaWYgKGtleSA9PSAnTGVmdCcpIHsKKyAgICAgICAg
aWYgKHggPT0gMCkgeworICAgICAgICAgICAgaWYgKHkgPT0gMCkgeworICAgICAgICAgICAgICAg
IGlmICghbWF5YmVTZXRQcmV2aW91c01vbnRoKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICB5ID0gV0VFS1MgLSAxOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICB5LS07CisgICAgICAgICAgICB9CisgICAgICAgICAgICB4ID0gNjsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHgtLTsKKyAgICAgICAgfQorICAgICAgICB1
cGRhdGVTZWxlY3Rpb24oZXZlbnQsIHgsIHkpOworICAgIH0gZWxzZSBpZiAoa2V5ID09ICdVcCcp
IHsKKyAgICAgICAgaWYgKHkgPT0gMCkgeworICAgICAgICAgICAgaWYgKCFtYXliZVNldFByZXZp
b3VzTW9udGgoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB5ID0gV0VF
S1MgLSAxOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgeS0tOworICAgICAgICB9Cisg
ICAgICAgIHVwZGF0ZVNlbGVjdGlvbihldmVudCwgeCwgeSk7CisgICAgfSBlbHNlIGlmIChrZXkg
PT0gJ1JpZ2h0JykgeworICAgICAgICBpZiAoeCA9PSA2KSB7CisgICAgICAgICAgICBpZiAoeSA9
PSBXRUVLUyAtIDEpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1heWJlU2V0TmV4dE1vbnRoKCkp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB5ID0gMDsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgeSsrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgeCA9IDA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB4Kys7Cisg
ICAgICAgIH0KKyAgICAgICAgdXBkYXRlU2VsZWN0aW9uKGV2ZW50LCB4LCB5KTsKKyAgICB9IGVs
c2UgaWYgKGtleSA9PSAnRG93bicpIHsKKyAgICAgICAgaWYgKHkgPT0gV0VFS1MgLSAxKSB7Cisg
ICAgICAgICAgICBpZiAoIW1heWJlU2V0TmV4dE1vbnRoKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgeSA9IDA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB5
Kys7CisgICAgICAgIH0KKyAgICAgICAgdXBkYXRlU2VsZWN0aW9uKGV2ZW50LCB4LCB5KTsKKyAg
ICB9IGVsc2UgaWYgKGtleSA9PSAnUGFnZVVwJykgeworICAgICAgICBpZiAoIW1heWJlU2V0UHJl
dmlvdXNNb250aCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB1cGRhdGVTZWxlY3Rp
b24oZXZlbnQsIHgsIHkpOworICAgIH0gZWxzZSBpZiAoa2V5ID09ICdQYWdlRG93bicpIHsKKyAg
ICAgICAgaWYgKCFtYXliZVNldE5leHRNb250aCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB1cGRhdGVTZWxlY3Rpb24oZXZlbnQsIHgsIHkpOworICAgIH0gZWxzZSBpZiAobG9jYXRl
ZCAmJiBrZXkgPT0gJ0VudGVyJykgeworICAgICAgICB2YXIgZGF5Tm9kZSA9IGdsb2JhbC5kYXlz
W3ldW3hdOworICAgICAgICBpZiAoZGF5Tm9kZS5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1MuQVZB
SUxBQkxFKSkgeworICAgICAgICAgICAgc3VibWl0VmFsdWUoZGF5Tm9kZS5kYXRhc2V0LnN1Ym1p
dFZhbHVlKTsKKyAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOworICAgICAgICB9
IGVsc2UgaWYgKGRheU5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTLlVOQVZBSUxBQkxFX1VQ
KSkgeworICAgICAgICAgICAgbWF5YmVTZXRQcmV2aW91c01vbnRoKCk7CisgICAgICAgICAgICB1
cGRhdGVTZWxlY3Rpb24oZXZlbnQsIHgsIHkpOworICAgICAgICB9IGVsc2UgaWYgKGRheU5vZGUu
Y2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTLlVOQVZBSUxBQkxFX0RPV04pKSB7CisgICAgICAgICAg
ICBtYXliZVNldE5leHRNb250aCgpOworICAgICAgICAgICAgdXBkYXRlU2VsZWN0aW9uKGV2ZW50
LCB4LCB5KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoa2V5ID09ICdVKzAwNTQnKSB7IC8v
ICd0JyAgRklYTUU6IG1vdmUgdG8gZ2xvYmFsIGhhbmRsZXIuCisgICAgICAgIGdsb2JhbC5kYXlz
W2dsb2JhbC5sYXN0WV1bZ2xvYmFsLmxhc3RYXS5jbGFzc0xpc3QucmVtb3ZlKENMQVNTLlNFTEVD
VEVEKTsKKyAgICAgICAgc2VsZWN0RGF0ZShuZXcgRGF0ZSgpKTsKKyAgICAgICAgZXZlbnQuc3Rv
cFByb3BhZ2F0aW9uKCk7CisgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAgfQor
fQorCitmdW5jdGlvbiB1cGRhdGVTZWxlY3Rpb24oZXZlbnQsIHgsIHkpIHsKKyAgICBpZiAoZ2xv
YmFsLmxhc3RYID49IDAgJiYgZ2xvYmFsLmxhc3RZID49IDApCisgICAgICAgIGdsb2JhbC5kYXlz
W2dsb2JhbC5sYXN0WV1bZ2xvYmFsLmxhc3RYXS5jbGFzc0xpc3QucmVtb3ZlKENMQVNTLlNFTEVD
VEVEKTsKKyAgICBpZiAoeCA+PSAwICYmIHkgPj0gMCkgeworICAgICAgICBnbG9iYWwuZGF5c1t5
XVt4XS5jbGFzc0xpc3QuYWRkKENMQVNTLlNFTEVDVEVEKTsKKyAgICAgICAgZ2xvYmFsLmxhc3RY
ID0geDsKKyAgICAgICAgZ2xvYmFsLmxhc3RZID0geTsKKyAgICB9CisgICAgZXZlbnQuc3RvcFBy
b3BhZ2F0aW9uKCk7CisgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKK30KKworLyoqCisgKiBA
cGFyYW0ge251bWJlcn0geWVhcgorICogQHBhcmFtIHtudW1iZXJ9IG1vbnRoCisgKiBAcGFyYW0g
e251bWJlcn0gZGF5CisgKiBAcmV0dXJuIHtzdHJpbmd9CisgKi8KK2Z1bmN0aW9uIGNyZWF0ZURh
dGVTdHJpbmcoeWVhciwgbW9udGgsIGRheSkgeworICAgIHZhciB5ZWFyU3RyaW5nID0gU3RyaW5n
KHllYXIpOworICAgIGlmICh5ZWFyU3RyaW5nLmxlbmd0aCA8IDQpCisgICAgICAgIHllYXJTdHJp
bmcgPSAoJzAwMCcgKyB5ZWFyU3RyaW5nKS5zdWJzdHIoLTQsIDQpOworICAgIHJldHVybiB5ZWFy
U3RyaW5nICsgJy0nICsgKCcwJyArIChtb250aCArIDEpKS5zdWJzdHIoLTIsIDIpICsgJy0nICsg
KCcwJyArIGRheSkuc3Vic3RyKC0yLCAyKQorfQorCitmdW5jdGlvbiBoYW5kbGVUb2RheSgpIHsK
KyAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKCk7CisgICAgc2VsZWN0RGF0ZShkYXRlKTsKKyAgICBz
dWJtaXRWYWx1ZShjcmVhdGVEYXRlU3RyaW5nKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRN
b250aCgpLCBkYXRlLmdldERhdGUoKSkpOworfQorCitmdW5jdGlvbiBoYW5kbGVDbGVhcigpIHsK
KyAgICBzdWJtaXRWYWx1ZSgnJyk7Cit9CisKKy8qKgorICogQHBhcmFtIHtzdHJpbmd9IHZhbHVl
CisgKi8KK2Z1bmN0aW9uIHN1Ym1pdFZhbHVlKHZhbHVlKSB7CisgICAgLy92YXIgZXZlbnQgPSBk
b2N1bWVudC5jcmVhdGVFdmVudCgnVGV4dEV2ZW50Jyk7CisgICAgLy9ldmVudC5pbml0VGV4dEV2
ZW50KCd0ZXh0SW5wdXQnLCBmYWxzZSwgZmFsc2UsIHdpbmRvdywgdmFsdWUpOworICAgIC8vd2lu
ZG93LmZyYW1lRWxlbWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKKyAgICB3aW5kb3cuc2V0VmFs
dWVBbmRDbG9zZVBvcHVwKDAsIHZhbHVlKTsKK30KKworZnVuY3Rpb24gaGFuZGxlQ2FuY2VsKCkg
eworICAgIC8vdmFyIGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7CisgICAg
Ly9ldmVudC5pbml0RXZlbnQoJ2Fib3J0JywgZmFsc2UsIGZhbHNlKTsKKyAgICAvL3dpbmRvdy5m
cmFtZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChldmVudCk7CisgICAgd2luZG93LnNldFZhbHVlQW5k
Q2xvc2VQb3B1cCgtMSwgJycpOworfQorCisvKioKKyAqIEBwYXJhbSB7S2V5Ym9hcmRFdmVudH0g
ZXZlbnQKKyAqLworZnVuY3Rpb24gaGFuZGxlR2xvYmFsS2V5KGV2ZW50KSB7CisgICAgbWF5YmVV
cGRhdGVGb2N1c1N0eWxlKCk7CisgICAgdmFyIGtleSA9IGV2ZW50LmtleUlkZW50aWZpZXI7Cisg
ICAgaWYgKGtleSA9PSAnVSswMDA5JykgeworICAgICAgICBpZiAoIWV2ZW50LnNoaWZ0S2V5ICYm
IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT0gZ2xvYmFsLmxhc3RGb2N1c2FibGVDb250cm9sKSB7
CisgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICAgICAgICAgIGV2ZW50
LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAgICBnbG9iYWwuZmlyc3RGb2N1c2FibGVDb250
cm9sLmZvY3VzKCk7CisgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuc2hpZnRLZXkgJiYgZG9jdW1l
bnQuYWN0aXZlRWxlbWVudCA9PSBnbG9iYWwuZmlyc3RGb2N1c2FibGVDb250cm9sKSB7CisgICAg
ICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICAgICAgICAgIGV2ZW50LnByZXZl
bnREZWZhdWx0KCk7CisgICAgICAgICAgICBnbG9iYWwubGFzdEZvY3VzYWJsZUNvbnRyb2wuZm9j
dXMoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoa2V5ID09ICdVKzAwNEQnKSB7IC8vIG0K
KyAgICAgICAgZ2xvYmFsLnllYXJNb250aENvbnRyb2xsZXIubW92ZVJlbGF0aXZlbHkoZXZlbnQu
c2hpZnRLZXkgPyBZZWFyTW9udGhDb250cm9sbGVyMi5QUkVWSU9VU19NT05USCA6IFllYXJNb250
aENvbnRyb2xsZXIyLk5FWFRfTU9OVEgpOworICAgIH0gZWxzZSBpZiAoa2V5ID09ICdVKzAwNTkn
KSB7IC8vIHkKKyAgICAgICAgZ2xvYmFsLnllYXJNb250aENvbnRyb2xsZXIubW92ZVJlbGF0aXZl
bHkoZXZlbnQuc2hpZnRLZXkgPyBZZWFyTW9udGhDb250cm9sbGVyMi5QUkVWSU9VU19ZRUFSIDog
WWVhck1vbnRoQ29udHJvbGxlcjIuTkVYVF9ZRUFSKTsKKyAgICB9IGVsc2UgaWYgKGtleSA9PSAn
VSswMDQ0JykgeyAvLyBkCisgICAgICAgIGdsb2JhbC55ZWFyTW9udGhDb250cm9sbGVyLm1vdmVS
ZWxhdGl2ZWx5KGV2ZW50LnNoaWZ0S2V5ID8gWWVhck1vbnRoQ29udHJvbGxlcjIuUFJFVklPVVNf
MTBZRUFSUyA6IFllYXJNb250aENvbnRyb2xsZXIyLk5FWFRfMTBZRUFSUyk7CisgICAgfQorfQor
CitmdW5jdGlvbiBtYXliZVVwZGF0ZUZvY3VzU3R5bGUoKSB7CisgICAgaWYgKGdsb2JhbC5oYWRL
ZXlFdmVudCkKKyAgICAgICAgcmV0dXJuOworICAgIGdsb2JhbC5oYWRLZXlFdmVudCA9IHRydWU7
CisgICAgJCgnbWFpbicpLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1MuTk9fRk9DVVNfUklORyk7Cit9
CisKKy8vIC0tLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL2NhbGVuZGFy
UGlja2VyLnBuZyBiL1NvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9jYWxlbmRhclBpY2tlci5wbmcK
bmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMmU3ZjA2YTg5Nzk5NTg1YTU2ODM5NTU4ZDQ0MmJiZDkzMTNhNDVmNApHSVQg
YmluYXJ5IHBhdGNoCmxpdGVyYWwgOTc5CnpjbWVBU0BOPyhvbEh5YHVWQnEhaWEwdnBeM0x3bkUz
P3lCYWJSN2R5akt4OWpQN0xlTCQtRCR8U2tmSlI5VF54bAp6X0grTTlXTXlEclcoZT5KYVJyS0p5
I0w/TyhEM3g+KUJwZWYxRyVHTUd6M09ZMiVQMCltSUNeZ3Ylbio9bjFPLXMKekZiRmRxJnRIKU82
cUdEK2pWS0F1UGIoPTtFSnxldk5YKlBEKGVyWitRN0FMa0d1NSomd3tEMDlEbCskVWFTWEJXCnpQ
ZmskYWtaXjNePn53aShVfklzeyQ/OCtWY3RLbzg7WHNTYXE1YChncm9lYXg8cVEpJmdfQmRIOXY8
KWs+WUgoaQpWK2tEI2dyR1k+dWdRdSZYJVF+bG9DSUdoJkspKFAwCgpsaXRlcmFsIDAKSGNtVj9k
MDAwMDEKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvY2FsZW5kYXJQaWNr
ZXJfdGVzdC5odG1sIGIvU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL2NhbGVuZGFyUGlja2VyX3Rl
c3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi41ZTQ3YTkzYjg0ZDkzNTNiOTk5NzVjZjVjMTdiOWNiOGU4ZjMz
ZmU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL2NhbGVuZGFy
UGlja2VyX3Rlc3QuaHRtbApAQCAtMCwwICsxLDg5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1s
PgorPGhlYWQ+Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPHRpdGxlPkNhbGVuZGFyIFBpY2tlciB0
ZXN0PC90aXRsZT4KKzxzdHlsZT4KK2JvZHkgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZlZWVl
OworfQoraWZyYW1lIHsKKyAgICB6LWluZGV4OiAyMTQ3NDgzNjQ3OworLyogICAgcG9zaXRpb246
IGFic29sdXRlOyovCisvKiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGRlZWZmOyAqLworICAgIHdp
ZHRoOiAyOTBweDsKKyAgICBoZWlnaHQ6IDI1NnB4OworLyogICAgYm94LXNoYWRvdzogNHB4IDRw
eCA0cHggI2NjYzsqLworICAgIG9wYWNpdHk6IDA7CisgICAgYm9yZGVyOiAwOworICAgIG92ZXJm
bG93OiBoaWRkZW47Cit9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+CisKKzxkaXY+PGlucHV0
IHR5cGU9ZGF0ZSBpZD1kYXRlPjwvZGl2PgorPGlmcmFtZT48L2lmcmFtZT4KKworPG9sIGlkPWNv
bnNvbGUgc3R5bGU9ImhlaWdodDoyMDAwcHg7Ij4KKzwvb2w+CisKKzxzY3JpcHQ+Cit2YXIgZnJh
bWUgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaWZyYW1lJylbMF07Cit2YXIgZG9j
ID0gZnJhbWUuY29udGVudERvY3VtZW50OworZG9jLmRvY3VtZW50RWxlbWVudC5pbm5lckhUTUwg
PSAnPGhlYWQ+PC9oZWFkPjxib2R5PjxkaXYgaWQ9bWFpbj5Mb2FkaW5nLi4uPC9kaXY+PC9ib2R5
Pic7Cit2YXIgbGluayA9IGRvYy5jcmVhdGVFbGVtZW50KCdsaW5rJyk7CitsaW5rLnJlbCA9ICdz
dHlsZXNoZWV0JzsKK2xpbmsuaHJlZiA9ICdjYWxlbmRhclBpY2tlci5jc3M/JyArIChuZXcgRGF0
ZSgpKS5nZXRUaW1lKCk7Citkb2MuaGVhZC5hcHBlbmRDaGlsZChsaW5rKTsKK3ZhciBzY3JpcHQg
PSBkb2MuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7CitzY3JpcHQuc3JjID0gJ2NhbGVuZGFyUGlj
a2VyLmpzPycgKyAobmV3IERhdGUoKSkuZ2V0VGltZSgpOworZG9jLmJvZHkuYXBwZW5kQ2hpbGQo
c2NyaXB0KTsKKwordmFyIGFyZ3NfZW4gPSB7CisgICAgbW9udGhMYWJlbHMgOiBbJ0phbnVhcnkn
LCAnRmVicnVhcnknLCAnTWFyY2gnLCAnQXByaWwnLCAnTWF5JywgJ0p1bmUnLAorICAgICdKdWx5
JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJl
ciddLAorICAgIGRheUxhYmVscyA6IFsnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScs
ICdGcmknLCAnU2F0J10sCisgICAgdG9kYXlMYWJlbCA6ICdUb2RheScsCisgICAgY2xlYXJMYWJl
bCA6ICdDbGVhcicsCisgICAgY2FuY2VsTGFiZWwgOiAnQ2FuY2VsJywKKyAgICB3ZWVrU3RhcnRE
YXkgOiAwLAorICAgIHN0ZXAgOiAxLAorICAgIG1heCA6ICcyMDExLTEyLTMxJywKK307Cit2YXIg
YXJnc19qYSA9IHsKKyAgICBsb2NhbGU6ICdqYS1KUCcsCisgICAgbW9udGhMYWJlbHMgOiBbJzHm
nIgnLCAnMuaciCcsICcz5pyIJywgJzTmnIgnLCAnNeaciCcsICc25pyIJywKKyAgICAnN+aciCcs
ICc45pyIJywgJznmnIgnLCAnMTDmnIgnLCAnMTHmnIgnLCAnMTLmnIgnXSwKKyAgICBkYXlMYWJl
bHMgOiBbJ+aXpScsICfmnIgnLCAn54GrJywgJ+awtCcsICfmnKgnLCAn6YeRJywgJ+WcnyddLAor
ICAgIHRvZGF5TGFiZWwgOiAn5LuK5pelJywKKyAgICBjbGVhckxhYmVsIDogJ+OCr+ODquOCoics
CisgICAgY2FuY2VsTGFiZWwgOiAn5Y+W44KK5raI44GXJywKKyAgICB3ZWVrU3RhcnREYXkgOiAw
LAorICAgIHN0ZXAgOiAxLAorICAgIG1heCA6ICcyMDExLTAzLTE1JywKK307CitzZXRUaW1lb3V0
KGZ1bmN0aW9uKCkgeyBmcmFtZS5jb250ZW50V2luZG93LnBvc3RNZXNzYWdlKEpTT04uc3RyaW5n
aWZ5KGFyZ3NfamEpLCAiKiIpOyB9LCAxMDApOworCisKK2ZyYW1lLmFkZEV2ZW50TGlzdGVuZXIo
J3RleHRJbnB1dCcsIGhhbmRsZVRleHRJbnB1dCk7CitmcmFtZS5hZGRFdmVudExpc3RlbmVyKCdh
Ym9ydCcsIGhhbmRsZUFib3J0KTsKKworZnVuY3Rpb24gbG9nKHN0cikgeworICAgIHZhciBlID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGknKTsKKyAgICBlLmlubmVyVGV4dCA9IHN0cjsKKyAg
ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmFwcGVuZENoaWxkKGUpOworfQor
CitmdW5jdGlvbiBoYW5kbGVUZXh0SW5wdXQoZXZlbnQpIHsKKyAgICBsb2coJ3RleHRJbnB1dCBk
YXRlPScgKyBldmVudC5kYXRhKTsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGF0ZScp
LnZhbHVlID0gZXZlbnQuZGF0YTsKK30KKworZnVuY3Rpb24gaGFuZGxlQWJvcnQoZXZlbnQpIHsK
KyAgICBsb2coJ2Fib3J0Jyk7Cit9CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAppbmRleCAwMzU3MjA3NjE3YjZjYWI1YzI5
MWQ3OTM0ZjQxODNmNzY1ZjJlOGE1Li4xZTBjNjA1ZWFlNDAzYjg3MGIyMGFiZWQxZTIxYTZlODAy
OGIxM2JjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cApAQCAtODUyLDYg
Kzg1MiwyMyBAQAogICAgICAgICAgIF0sCiAgICAgICAgIH0sCiAgICAgICAgIHsKKyAgICAgICAg
ICAnYWN0aW9uX25hbWUnOiAnQ2FsZW5kYXJQaWNrZXInLAorICAgICAgICAgICdpbnB1dHMnOiBb
CisgICAgICAgICAgICAnLi4vUmVzb3VyY2VzL2NhbGVuZGFyUGlja2VyLmNzcycsCisgICAgICAg
ICAgICAnLi4vUmVzb3VyY2VzL2NhbGVuZGFyUGlja2VyLmpzJywKKyAgICAgICAgICBdLAorICAg
ICAgICAgICdvdXRwdXRzJzogWworICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9E
SVIpL3dlYmtpdC9DYWxlbmRhclBpY2tlci5oJywKKyAgICAgICAgICAgICc8KFNIQVJFRF9JTlRF
Uk1FRElBVEVfRElSKS93ZWJraXQvQ2FsZW5kYXJQaWNrZXIuY3BwJywKKyAgICAgICAgICBdLAor
ICAgICAgICAgICdhY3Rpb24nOiBbCisgICAgICAgICAgICAncHl0aG9uJywKKyAgICAgICAgICAg
ICcuLi9tYWtlLWZpbGUtYXJyYXlzLnB5JywKKyAgICAgICAgICAgICc8QChfb3V0cHV0cyknLAor
ICAgICAgICAgICAgJzxAKF9pbnB1dHMpJywKKyAgICAgICAgICBdLAorICAgICAgICB9LAorICAg
ICAgICB7CiAgICAgICAgICAgJ2FjdGlvbl9uYW1lJzogJ1hMaW5rTmFtZXMnLAogICAgICAgICAg
ICdpbnB1dHMnOiBbCiAgICAgICAgICAgICAnLi4vZG9tL21ha2VfbmFtZXMucGwnLApAQCAtMTEw
NCw2ICsxMTIxLDcgQEAKICAgICAgICAgIyBBZGRpdGlvbmFsIC5jcHAgZmlsZXMgZnJvbSB3ZWJj
b3JlX2JpbmRpbmdzX3NvdXJjZXMgYWN0aW9ucy4KICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVE
SUFURV9ESVIpL3dlYmtpdC9IVE1MRWxlbWVudEZhY3RvcnkuY3BwJywKICAgICAgICAgJzwoU0hB
UkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdC9IVE1MTmFtZXMuY3BwJywKKyAgICAgICAgJzwo
U0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdC9DYWxlbmRhclBpY2tlci5jcHAnLAogICAg
ICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0L0V2ZW50RmFjdG9yeS5jcHAn
LAogICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0L0V2ZW50SGVhZGVy
cy5oJywKICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdC9FdmVudElu
dGVyZmFjZXMuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMGQ0ZDI4MDg0NjVmMTI1YzdkMmRmMmU0
OGRmMDA1NzU0YWRmMDM3Yi4uY2ZlNWI2MmY3ZTUxZDM0OWI5ZWFlNTIzNGUzZTJhNTUxNWI5YThh
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMjYxLDYgKzI2MSw4IEBACiAgICAgICAgICAgICAncGxh
dGZvcm0vRmlsZVN5c3RlbS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9Ib3N0V2luZG93Lmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL0hpc3RvZ3JhbVN1cHBvcnQuaCcsCisgICAgICAgICAg
ICAncGxhdGZvcm0vSFRNTFBvcHVwLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL0hUTUxQb3B1
cENsaWVudC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9LVVJMLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL0tVUkxIYXNoLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL0xhbmd1YWdlLmgn
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9EYXRlSW5wdXRUeXBlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvRGF0ZUlucHV0VHlwZS5jcHAKaW5kZXggN2I4M2UzZGQzMzI4ZmIz
ZDViZGUzZDQ4NGM0NWE4MjE2NWQ5MGUyYi4uMWRjM2IzNDg4YTczMzRjYjgzY2M3OWYwZmU3ZDg0
MzJkNjdlNjVkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9EYXRlSW5wdXRUeXBl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0RhdGVJbnB1dFR5cGUuY3BwCkBAIC0zMSwx
MCArMzEsMTcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJEYXRlSW5wdXRUeXBl
LmgiCiAKKyNpbmNsdWRlICJDYWxlbmRhclBpY2tlci5oIgorI2luY2x1ZGUgIkNocm9tZS5oIgor
I2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIkRhdGVDb21wb25lbnRzLmgiCisj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxQb3B1cC5oIgorI2luY2x1ZGUgIkhU
TUxQb3B1cENsaWVudC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiAjaWYgRU5BQkxFKElOUFVUX1RZUEVfREFURSkK
IApAQCAtNDUsMTEgKzUyLDIxIEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiBzdGF0aWMg
Y29uc3QgZG91YmxlIGRhdGVEZWZhdWx0U3RlcCA9IDEuMDsKIHN0YXRpYyBjb25zdCBkb3VibGUg
ZGF0ZVN0ZXBTY2FsZUZhY3RvciA9IDg2NDAwMDAwLjA7CiAKK0RhdGVJbnB1dFR5cGU6OkRhdGVJ
bnB1dFR5cGUoSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkKKyAgICA6IEJhc2VEYXRlQW5kVGlt
ZUlucHV0VHlwZShlbGVtZW50KQoreworfQorCiBQYXNzT3duUHRyPElucHV0VHlwZT4gRGF0ZUlu
cHV0VHlwZTo6Y3JlYXRlKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBEYXRlSW5wdXRUeXBlKGVsZW1lbnQpKTsKIH0KIAorRGF0ZUlucHV0VHlw
ZTo6fkRhdGVJbnB1dFR5cGUoKQoreworICAgIGNsb3NlUG9wdXAoKTsKK30KKwogY29uc3QgQXRv
bWljU3RyaW5nJiBEYXRlSW5wdXRUeXBlOjpmb3JtQ29udHJvbFR5cGUoKSBjb25zdAogewogICAg
IHJldHVybiBJbnB1dFR5cGVOYW1lczo6ZGF0ZSgpOwpAQCAtOTgsNiArMTE1LDgzIEBAIGJvb2wg
RGF0ZUlucHV0VHlwZTo6c2V0TWlsbGlzZWNvbmRUb0RhdGVDb21wb25lbnRzKGRvdWJsZSB2YWx1
ZSwgRGF0ZUNvbXBvbmVudHMqCiAgICAgcmV0dXJuIGRhdGUtPnNldE1pbGxpc2Vjb25kc1NpbmNl
RXBvY2hGb3JEYXRlKHZhbHVlKTsKIH0KIAordm9pZCBEYXRlSW5wdXRUeXBlOjpoYW5kbGVGb2N1
c0V2ZW50KCkKK3sKKyAgICAvLyBGSVhNRTogSSBkb24ndCB0aGluayB3ZSBzaG91bGQgc2hvdyBh
IGNhbGVuZGFyIHBpY2tlciBvbiBmb2N1cyBhbmQgaGlkZSBpdCBvbiBibHVyLgorICAgIC8vIFdl
IGhhZCBiZXR0ZXIgYWRkIGEgYnV0dG9uIGxpa2UgYSBtZW51LWxpc3QgPHNlbGVjdD4gb24gV2lu
ZG93cy4KKyAgICBDaHJvbWUqIGNocm9tZSA9IHRoaXMtPmNocm9tZSgpOworICAgIGlmICghY2hy
b21lKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFlbGVtZW50KCktPmRvY3VtZW50KCktPnZp
ZXcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEludFJlY3QgZWxlbWVudFJlY3RJblJvb3RWaWV3
ID0gZWxlbWVudCgpLT5kb2N1bWVudCgpLT52aWV3KCktPmNvbnRlbnRzVG9Sb290VmlldyhlbGVt
ZW50KCktPmdldFJlY3QoKSk7CisgICAgbV9wb3B1cCA9IGNocm9tZS0+b3BlbkhUTUxQb3B1cCh0
aGlzLCBlbGVtZW50UmVjdEluUm9vdFZpZXcpOworfQorCit2b2lkIERhdGVJbnB1dFR5cGU6Omhh
bmRsZUJsdXJFdmVudCgpCit7CisgICAgY2xvc2VQb3B1cCgpOworfQorCit2b2lkIERhdGVJbnB1
dFR5cGU6OmNsb3NlUG9wdXAoKQoreworICAgIGlmIChjaHJvbWUoKSkKKyAgICAgICAgY2hyb21l
KCktPmNsb3NlSFRNTFBvcHVwKG1fcG9wdXApOworfQorCitJbnRTaXplIERhdGVJbnB1dFR5cGU6
OmNvbnRlbnRTaXplKCkKK3sKKyAgICByZXR1cm4gSW50U2l6ZSgzMjAsIDI1Nik7Cit9CisKK1N0
cmluZyBEYXRlSW5wdXRUeXBlOjpodG1sU291cmNlKCkKK3sKKyAgICBEYXRlQ29tcG9uZW50cyBk
YXRlOworICAgIGRhdGUuc2V0TWlsbGlzZWNvbmRzU2luY2VFcG9jaEZvckRhdGUoZWxlbWVudCgp
LT5taW5pbXVtKCkpOworICAgIFN0cmluZyBtaW5TdHJpbmcgPSBkYXRlLnRvU3RyaW5nKCk7Cisg
ICAgZGF0ZS5zZXRNaWxsaXNlY29uZHNTaW5jZUVwb2NoRm9yRGF0ZShlbGVtZW50KCktPm1heGlt
dW0oKSk7CisgICAgU3RyaW5nIG1heFN0cmluZyA9IGRhdGUudG9TdHJpbmcoKTsKKyAgICBkb3Vi
bGUgc3RlcDsKKyAgICBTdHJpbmcgc3RlcFN0cmluZyA9IGVsZW1lbnQoKS0+ZmFzdEdldEF0dHJp
YnV0ZShzdGVwQXR0cik7CisgICAgaWYgKHN0ZXBTdHJpbmcuaXNFbXB0eSgpIHx8ICFlbGVtZW50
KCktPmdldEFsbG93ZWRWYWx1ZVN0ZXAoJnN0ZXApKQorICAgICAgICBzdGVwU3RyaW5nID0gIjEi
OworICAgIFN0cmluZ0J1aWxkZXIgc291cmNlOworICAgIHNvdXJjZS5hcHBlbmQoIjxoZWFkPjxz
dHlsZT5cbiIpOworICAgIHNvdXJjZS5hcHBlbmQoY2FsZW5kYXJQaWNrZXJDc3MsIHNpemVvZihj
YWxlbmRhclBpY2tlckNzcykpOworICAgIHNvdXJjZS5hcHBlbmQoIjwvc3R5bGU+PC9oZWFkPjxi
b2R5PjxkaXYgaWQ9bWFpbj5Mb2FkaW5nLi4uPC9kaXY+PHNjcmlwdD5cbiIpOworICAgIHNvdXJj
ZS5hcHBlbmQoIndpbmRvdy5kaWFsb2dBcmd1bWVudHMgPSB7Iik7CisgICAgc291cmNlLmFwcGVu
ZCgiJ21pbic6JyIgKyBtaW5TdHJpbmcgKyAiJywiKTsKKyAgICBzb3VyY2UuYXBwZW5kKCInbWF4
JzonIiArIG1heFN0cmluZyArICInLCIpOworICAgIHNvdXJjZS5hcHBlbmQoIidzdGVwJzonIiAr
IHN0ZXBTdHJpbmcgKyAiJywiKTsKKyAgICBzb3VyY2UuYXBwZW5kKCInY3VycmVudFZhbHVlJzon
IiArIGVsZW1lbnQoKS0+dmFsdWUoKSArICInLCIpOworICAgIHNvdXJjZS5hcHBlbmQoIidtb250
aExhYmVscyc6WydKYW51YXJ5JywgJ0ZlYnJ1YXJ5JywgJ01hcmNoJywgJ0FwcmlsJywgJ01heScs
ICdKdW5lJywgJ0p1bHknLCAnQXVndXN0JywgJ1NlcHRlbWJlcicsICdPY3RvYmVyJywgJ05vdmVt
YmVyJywgJ0RlY2VtYmVyJ10sXG4iKTsKKyAgICBzb3VyY2UuYXBwZW5kKCInZGF5TGFiZWxzJzog
WydTdW4nLCAnTW9uJywgJ1R1ZScsICdXZWQnLCAnVGh1JywgJ0ZyaScsICdTYXQnXSxcbiIpOwor
ICAgIHNvdXJjZS5hcHBlbmQoIid0b2RheUxhYmVsJzogJ1RvZGF5JyxcbiIpOworICAgIHNvdXJj
ZS5hcHBlbmQoIidjbGVhckxhYmVsJzogJ0NsZWFyJyxcbiIpOworICAgIHNvdXJjZS5hcHBlbmQo
IidjYW5jZWxMYWJlbCc6ICdDYW5jZWwnLFxuIik7CisgICAgc291cmNlLmFwcGVuZCgiJ3dlZWtT
dGFydERheScgOiAwLFxuIik7CisgICAgc291cmNlLmFwcGVuZCgifVxuIik7CisgICAgc291cmNl
LmFwcGVuZChjYWxlbmRhclBpY2tlckpzLCBzaXplb2YoY2FsZW5kYXJQaWNrZXJKcykpOworICAg
IHNvdXJjZS5hcHBlbmQoIjwvc2NyaXB0PjwvYm9keT5cbiIpOworICAgIGZwcmludGYoc3RkZXJy
LCAiR2VuZXJhdGVkIHNvdXJjZTpcbiVzIiwgc291cmNlLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEo
KSk7CisgICAgcmV0dXJuIHNvdXJjZS50b1N0cmluZygpOworfQorCit2b2lkIERhdGVJbnB1dFR5
cGU6OnNldFZhbHVlQW5kQ2xvc2VQb3B1cChpbnQgbnVtVmFsdWUsIGNvbnN0IFN0cmluZyYgc3Ry
aW5nVmFsdWUpCit7CisgICAgQVNTRVJUKG1fcG9wdXApOworICAgIGZwcmludGYoc3RkZXJyLCAi
JXMgbnVtPSVkIHN0cj0nJXMnXG4iLCBfX2Z1bmNfXywgbnVtVmFsdWUsIHN0cmluZ1ZhbHVlLnV0
ZjgoKS5kYXRhKCkpOworICAgIGlmIChudW1WYWx1ZSA+PSAwKQorICAgICAgICBlbGVtZW50KCkt
PnNldFZhbHVlKHN0cmluZ1ZhbHVlLCB0cnVlKTsKKworICAgIGNsb3NlUG9wdXAoKTsKK30KKwor
dm9pZCBEYXRlSW5wdXRUeXBlOjpkaWRDbG9zZVBvcHVwKCkKK3sKKyAgICBtX3BvcHVwID0gMDsK
K30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvRGF0ZUlucHV0VHlwZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9EYXRl
SW5wdXRUeXBlLmgKaW5kZXggYWZiMTg5NWFlNjM3ZTZhMzQzYWZjNzc2ZGJjZTZkNjkzMmQ5OTQy
NS4uZDJkN2ZmZWY5Y2VjNWE2NTAwZDI2ZTdjYWI3ZTU1MmIxMTc5MjVhYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9EYXRlSW5wdXRUeXBlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9EYXRlSW5wdXRUeXBlLmgKQEAgLTMyLDE3ICszMiwyMiBAQAogI2RlZmluZSBEYXRlSW5w
dXRUeXBlX2gKIAogI2luY2x1ZGUgIkJhc2VEYXRlQW5kVGltZUlucHV0VHlwZS5oIgorI2luY2x1
ZGUgIkhUTUxQb3B1cENsaWVudC5oIgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogI2lmIEVO
QUJMRShJTlBVVF9UWVBFX0RBVEUpCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRGF0
ZUlucHV0VHlwZSA6IHB1YmxpYyBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUgeworY2xhc3MgSFRN
TFBvcHVwOworCitjbGFzcyBEYXRlSW5wdXRUeXBlIDogcHVibGljIEJhc2VEYXRlQW5kVGltZUlu
cHV0VHlwZSwgcHVibGljIEhUTUxQb3B1cENsaWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBh
c3NPd25QdHI8SW5wdXRUeXBlPiBjcmVhdGUoSFRNTElucHV0RWxlbWVudCopOworICAgIH5EYXRl
SW5wdXRUeXBlKCk7CiAKIHByaXZhdGU6Ci0gICAgRGF0ZUlucHV0VHlwZShIVE1MSW5wdXRFbGVt
ZW50KiBlbGVtZW50KSA6IEJhc2VEYXRlQW5kVGltZUlucHV0VHlwZShlbGVtZW50KSB7IH0KKyAg
ICBEYXRlSW5wdXRUeXBlKEhUTUxJbnB1dEVsZW1lbnQqKTsKICAgICB2aXJ0dWFsIGNvbnN0IEF0
b21pY1N0cmluZyYgZm9ybUNvbnRyb2xUeXBlKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVh
bCBEYXRlQ29tcG9uZW50czo6VHlwZSBkYXRlVHlwZSgpIGNvbnN0IE9WRVJSSURFOwogICAgIHZp
cnR1YWwgZG91YmxlIG1pbmltdW0oKSBjb25zdCBPVkVSUklERTsKQEAgLTUyLDYgKzU3LDE3IEBA
IHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIHBhcnNlZFN0ZXBWYWx1ZVNob3VsZEJlSW50ZWdl
cigpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgYm9vbCBwYXJzZVRvRGF0ZUNvbXBvbmVu
dHNJbnRlcm5hbChjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCwgRGF0ZUNvbXBvbmVudHMq
KSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgc2V0TWlsbGlzZWNvbmRUb0RhdGVD
b21wb25lbnRzKGRvdWJsZSwgRGF0ZUNvbXBvbmVudHMqKSBjb25zdCBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIHZvaWQgaGFuZGxlRm9jdXNFdmVudCgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9p
ZCBoYW5kbGVCbHVyRXZlbnQoKSBPVkVSUklERTsKKworICAgIC8vIEhUTUxQb3B1cENsaWVudCBm
dW5jdGlvbnM6CisgICAgdmlydHVhbCBJbnRTaXplIGNvbnRlbnRTaXplKCkgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCBTdHJpbmcgaHRtbFNvdXJjZSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRWYWx1ZUFuZENsb3NlUG9wdXAoaW50LCBjb25zdCBTdHJpbmcmKSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkQ2xvc2VQb3B1cCgpIE9WRVJSSURFOworICAgIHZvaWQgY2xvc2VQ
b3B1cCgpOworCisgICAgSFRNTFBvcHVwKiBtX3BvcHVwOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5o
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCmluZGV4IDlkMmRiZjI1Mzlj
MTVhY2EzMmFkNDAzYjE3MjRjNmVlYzNiMTdjZTguLmZiYzc2NmQzZTZlOTdkY2I1OGRiOGQ0NjBl
ZDFmNDc3YzcyZjUyYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNs
aWVudHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKQEAgLTE1
MSw2ICsxNTEsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGhhc09wZW5lZFBvcHVwKCkg
Y29uc3QgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
UG9wdXBNZW51PiBjcmVhdGVQb3B1cE1lbnUoUG9wdXBNZW51Q2xpZW50KikgY29uc3QgeyByZXR1
cm4gYWRvcHRSZWYobmV3IEVtcHR5UG9wdXBNZW51KCkpOyB9CiAgICAgdmlydHVhbCBQYXNzUmVm
UHRyPFNlYXJjaFBvcHVwTWVudT4gY3JlYXRlU2VhcmNoUG9wdXBNZW51KFBvcHVwTWVudUNsaWVu
dCopIGNvbnN0IHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBFbXB0eVNlYXJjaFBvcHVwTWVudSgpKTsg
fQorICAgIHZpcnR1YWwgSFRNTFBvcHVwKiBvcGVuSFRNTFBvcHVwKEhUTUxQb3B1cENsaWVudCos
IGNvbnN0IEludFJlY3QmKSBPVkVSUklERSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCB2b2lk
IGNsb3NlSFRNTFBvcHVwKEhUTUxQb3B1cCopIE9WRVJSSURFIHsgfQogCiAjaWYgRU5BQkxFKENP
TlRFWFRfTUVOVVMpCiAgICAgdmlydHVhbCB2b2lkIHNob3dDb250ZXh0TWVudSgpIHsgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbWFrZS1maWxlLWFycmF5cy5weSBiL1NvdXJjZS9XZWJD
b3JlL21ha2UtZmlsZS1hcnJheXMucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmZhNjY5YmYyMGFkMTE3Y2Y0MzQ5
MDA1YWY5ODZlOWRiYTEwOTBlNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL21h
a2UtZmlsZS1hcnJheXMucHkKQEAgLTAsMCArMSw3NyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9u
CisjIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9u
LgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMg
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisj
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworIyBVc2FnZTogbWFrZS1maWxlLWFycmF5cy5weSA8aGVhZGVy
LWZpbGUtbmFtZT4gPGNwcC1maWxlLW5hbWU+IDxpbnB1dC1maWxlPi4uLgorCitpbXBvcnQgb3Mu
cGF0aAoraW1wb3J0IHJlCitpbXBvcnQgc3lzCisKKworZGVmIG1ha2VfdmFyaWFibGVfbmFtZV9h
bmRfcmVhZChmaWxlX25hbWUsIG9wZW5fZmxhZyk6CisgICAgcmVzdWx0ID0gcmUubWF0Y2gociIo
XHcrKVwuKFx3KykiLCBvcy5wYXRoLmJhc2VuYW1lKGZpbGVfbmFtZSkpCisgICAgaWYgbm90IHJl
c3VsdDoKKyAgICAgICAgcHJpbnQgIkludmFsaWQgaW5wdXQgZmlsZSBuYW1lOiIsIG9zLnBhdGgu
YmFzZW5hbWUoZmlsZV9uYW1lKQorICAgICAgICBzeXMuZXhpdCgxKQorICAgIHByaW50ICJQcm9j
ZXNzaW5nIiwgZmlsZV9uYW1lCisgICAgdmFyaWFibGVfbmFtZSA9IHJlc3VsdC5ncm91cCgxKVsw
XS5sb3dlcigpICsgcmVzdWx0Lmdyb3VwKDEpWzE6XSArIHJlc3VsdC5ncm91cCgyKS5jYXBpdGFs
aXplKCkKKyAgICBmaWxlID0gb3BlbihmaWxlX25hbWUsIG9wZW5fZmxhZykKKyAgICBjb250ZW50
ID0gZmlsZS5yZWFkKCkKKyAgICBmaWxlLmNsb3NlKCkKKyAgICByZXR1cm4gKHZhcmlhYmxlX25h
bWUsIGNvbnRlbnQpCisKKworZGVmIG1haW4oKToKKyAgICBpZiBsZW4oc3lzLmFyZ3YpIDwgNDoK
KyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGhlYWRlcl9maWxlID0gb3BlbihzeXMuYXJndlsx
XSwgInciKQorICAgIGNwcF9maWxlID0gb3BlbihzeXMuYXJndlsyXSwgInciKQorICAgIGhlYWRl
cl9maWxlLndyaXRlKCJuYW1lc3BhY2UgV2ViQ29yZSB7XG4iKQorICAgIGNwcF9maWxlLndyaXRl
KCJuYW1lc3BhY2UgV2ViQ29yZSB7XG4iKQorCisgICAgZm9yIG5hbWUgaW4gc3lzLmFyZ3ZbMzpd
OgorICAgICAgICAodmFyaWFibGVfbmFtZSwgY29udGVudCkgPSBtYWtlX3ZhcmlhYmxlX25hbWVf
YW5kX3JlYWQobmFtZSwgInJiIikKKyAgICAgICAgc2l6ZSA9IGxlbihjb250ZW50KQorICAgICAg
ICBoZWFkZXJfZmlsZS53cml0ZSgiZXh0ZXJuIGNvbnN0IGNoYXIgJXNbJWRdO1xuIiAlICh2YXJp
YWJsZV9uYW1lLCBzaXplKSkKKyAgICAgICAgY3BwX2ZpbGUud3JpdGUoImV4dGVybiBjb25zdCBj
aGFyICVzWyVkXSA9IHtcbiIgJSAodmFyaWFibGVfbmFtZSwgc2l6ZSkpCisgICAgICAgIGZvciBp
bmRleCBpbiByYW5nZShzaXplKToKKyAgICAgICAgICAgIGNwcF9maWxlLndyaXRlKCIlZCIgJSBv
cmQoY29udGVudFtpbmRleF0pKQorICAgICAgICAgICAgY3BwX2ZpbGUud3JpdGUoIiwiIGlmIGlu
ZGV4ICE9IGxlbihjb250ZW50KSAtIDEgZWxzZSAifTtcbiIpCisgICAgICAgICAgICBpZiBpbmRl
eCAlIDIwID09IDE5OgorICAgICAgICAgICAgICAgIGNwcF9maWxlLndyaXRlKCJcbiIpCisgICAg
ICAgIGNwcF9maWxlLndyaXRlKCJcbiIpCisKKyAgICBoZWFkZXJfZmlsZS53cml0ZSgifVxuIikK
KyAgICBjcHBfZmlsZS53cml0ZSgifVxuIikKKyAgICBoZWFkZXJfZmlsZS5jbG9zZSgpCisgICAg
Y3BwX2ZpbGUuY2xvc2UoKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4o
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9DaHJvbWUuY3BwCmluZGV4IDhjM2IwMzI2NDc5NGI2Y2Q0YjhkMWI1Mzk5MzUw
YmJhYzM2N2MzMGUuLmU0ZDBjYjdiZDkxOGYwN2JhZWI3OTRlMDA4ODg2MDI4MzU0M2YyOGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0Nocm9tZS5jcHAKQEAgLTU2NSw2ICs1NjUsMTYgQEAgUGFzc1JlZlB0cjxTZWFy
Y2hQb3B1cE1lbnU+IENocm9tZTo6Y3JlYXRlU2VhcmNoUG9wdXBNZW51KFBvcHVwTWVudUNsaWVu
dCogY2xpZW4KICAgICByZXR1cm4gbV9jbGllbnQtPmNyZWF0ZVNlYXJjaFBvcHVwTWVudShjbGll
bnQpOwogfQogCitIVE1MUG9wdXAqIENocm9tZTo6b3BlbkhUTUxQb3B1cChIVE1MUG9wdXBDbGll
bnQqIGNsaWVudCwgY29uc3QgSW50UmVjdCYgb3JpZ2luQm91bmRzSW5Sb290VmlldykgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9jbGllbnQtPm9wZW5IVE1MUG9wdXAoY2xpZW50LCBvcmlnaW5Cb3Vu
ZHNJblJvb3RWaWV3KTsKK30KKwordm9pZCBDaHJvbWU6OmNsb3NlSFRNTFBvcHVwKEhUTUxQb3B1
cCogcG9wdXApIGNvbnN0Cit7CisgICAgbV9jbGllbnQtPmNsb3NlSFRNTFBvcHVwKHBvcHVwKTsK
K30KKwogI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQogdm9pZCBDaHJvbWU6OnNob3dDb250ZXh0
TWVudSgpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuaAppbmRleCBkNWIzOWJmZTI0NTNjYWEzMTNkNzBhNmFj
Mzg1M2E0ZTRiYjA2N2I2Li5jOGVjMTZlNDFiNTFhNTMxNDBiZjk1NDBhMjIxNzZmN2Y0NTRkYWEw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ2hyb21lLmgKQEAgLTQ1LDYgKzQ1LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIGNsYXNzIEZsb2F0UmVjdDsKICAgICBjbGFzcyBGcmFtZTsKICAgICBjbGFzcyBHZW9s
b2NhdGlvbjsKKyAgICBjbGFzcyBIVE1MUG9wdXA7CisgICAgY2xhc3MgSFRNTFBvcHVwQ2xpZW50
OwogICAgIGNsYXNzIEhpdFRlc3RSZXN1bHQ7CiAgICAgY2xhc3MgSW50UmVjdDsKICAgICBjbGFz
cyBOYXZpZ2F0aW9uQWN0aW9uOwpAQCAtMTc3LDYgKzE3OSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIGJvb2wgaGFzT3BlbmVkUG9wdXAoKSBjb25zdDsKICAgICAgICAgUGFzc1Jl
ZlB0cjxQb3B1cE1lbnU+IGNyZWF0ZVBvcHVwTWVudShQb3B1cE1lbnVDbGllbnQqKSBjb25zdDsK
ICAgICAgICAgUGFzc1JlZlB0cjxTZWFyY2hQb3B1cE1lbnU+IGNyZWF0ZVNlYXJjaFBvcHVwTWVu
dShQb3B1cE1lbnVDbGllbnQqKSBjb25zdDsKKyAgICAgICAgLy8gQ3JlYXRlcyBhbiBIVE1MUG9w
dXAgb2JqZWN0LCBhbmQgc2hvd3MgaXQgYmVzaWRlIG9yaWdpbkJvdW5kc0luUm9vdFZpZXcuCisg
ICAgICAgIC8vIFRoZSByZXR1cm4gdmFsdWUgY2FuIGJlIDAuCisgICAgICAgIEhUTUxQb3B1cCog
b3BlbkhUTUxQb3B1cChIVE1MUG9wdXBDbGllbnQqLCBjb25zdCBJbnRSZWN0JiBvcmlnaW5Cb3Vu
ZHNJblJvb3RWaWV3KSBjb25zdDsKKyAgICAgICAgdm9pZCBjbG9zZUhUTUxQb3B1cChIVE1MUG9w
dXAqKSBjb25zdDsKIAogI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQogICAgICAgICB2b2lkIHNo
b3dDb250ZXh0TWVudSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVD
bGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKaW5kZXggNDg2NjI1
YTk4ZDIwZTFjMDNkNTE1ZWIyMjQ0MmQzODE0MmY4MTMwNy4uNjk1Njc0YTJjZjM0YWViYmEzYzUw
NmM3MzYxZTE0ZTFhZTMwNmNjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJv
bWVDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCkBAIC01
Myw2ICs1Myw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBGcmFtZTsKICAgICBj
bGFzcyBHZW9sb2NhdGlvbjsKICAgICBjbGFzcyBHcmFwaGljc0xheWVyOworICAgIGNsYXNzIEhU
TUxQb3B1cDsKKyAgICBjbGFzcyBIVE1MUG9wdXBDbGllbnQ7CiAgICAgY2xhc3MgSGl0VGVzdFJl
c3VsdDsKICAgICBjbGFzcyBJbnRSZWN0OwogICAgIGNsYXNzIE5hdmlnYXRpb25BY3Rpb247CkBA
IC0zMDYsNiArMzA4LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIGJv
b2wgaGFzT3BlbmVkUG9wdXAoKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxQb3B1cE1lbnU+IGNyZWF0ZVBvcHVwTWVudShQb3B1cE1lbnVDbGllbnQqKSBjb25zdCA9IDA7
CiAgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTZWFyY2hQb3B1cE1lbnU+IGNyZWF0ZVNlYXJj
aFBvcHVwTWVudShQb3B1cE1lbnVDbGllbnQqKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwg
SFRNTFBvcHVwKiBvcGVuSFRNTFBvcHVwKEhUTUxQb3B1cENsaWVudCosIGNvbnN0IEludFJlY3Qm
IG9yaWdpbkJvdW5kc0luUm9vdFZpZXcpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNsb3Nl
SFRNTFBvcHVwKEhUTUxQb3B1cCopID0gMDsKIAogI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQog
ICAgICAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvbnRleHRNZW51KCkgPSAwOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSFRNTFBvcHVwLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9IVE1MUG9wdXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNjFlZTdmZTI1MzA1ODQxMmIyOWUwMTQ0YTRj
ZGRhOTJlNGY1OTk3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
SFRNTFBvcHVwLmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSFRNTFBvcHVwX2gKKyNkZWZpbmUg
SFRNTFBvcHVwX2gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBBbiBIVE1MUG9wdXAgb2Jq
ZWN0IGlzIGNyZWF0ZWQgYnkgQ2hyb21lOjpvcGVuSFRNTFBvcHVwKCksIGFuZCBkZWxldGVkIGJ5
CisvLyBDaHJvbWU6OmNsb3NlSFRNTFBvcHVwKCkuCitjbGFzcyBIVE1MUG9wdXAgeworcHJvdGVj
dGVkOgorICAgIHZpcnR1YWwgfkhUTUxQb3B1cCgpIHsgfQorfTsKKworfQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hUTUxQb3B1cENsaWVudC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vSFRNTFBvcHVwQ2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODI1OGYx
YzY0MDRlYWYyNzY3ZGMzYTIxMmY1ZDAxMmM1MjA0YWRjNQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hUTUxQb3B1cENsaWVudC5oCkBAIC0wLDAgKzEsNTIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIEhUTUxQb3B1cENsaWVudF9oCisjZGVmaW5lIEhUTUxQb3B1cENsaWVudF9oCisKKyNp
bmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSFRNTFBvcHVwQ2xpZW50IHsKK3B1YmxpYzoKKyAg
ICB2aXJ0dWFsIEludFNpemUgY29udGVudFNpemUoKSA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcg
aHRtbFNvdXJjZSgpID0gMDsKKyAgICAvLyBUaGlzIGlzIGNhbGxlZCBieSB0aGUgY29udGVudCBI
VE1MIG9mIGFuIEhUTUxQb3B1cC4KKyAgICAvLyBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZ1
bmN0aW9uIHNob3VsZCBjYWxsIEhUTUxQb3B1cDo6Y2xvc2VQb3B1cCgpLgorICAgIHZpcnR1YWwg
dm9pZCBzZXRWYWx1ZUFuZENsb3NlUG9wdXAoaW50IG51bVZhbHVlLCBjb25zdCBTdHJpbmcmIHN0
cmluZ1ZhbHVlKSA9IDA7CisgICAgLy8gVGhpcyBpcyBjYWxsZWQgd2hlbmV2ZXIgYW4gSFRNTFBv
cHVwIHdhcyBjbG9zZWQuCisgICAgdmlydHVhbCB2b2lkIGRpZENsb3NlUG9wdXAoKSA9IDA7Cisg
ICAgdmlydHVhbCB+SFRNTFBvcHVwQ2xpZW50KCkgeyB9Cit9OworCit9CisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cAppbmRleCAyZDkyYmE1NmMwODY0YTUyYzdkMGM2MjI3ZGQ1NGZj
ZDdmMjM1NWM1Li41Njk0NzI2ODRlMjlkNjU2N2RmNDBiMzBlZmIxN2ZiMWEwNzRkM2E5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBAIC01NDksNiArNTQ5LDggQEAKICAgICAgICAgICAg
ICAgICAnc3JjL1dlYkdseXBoQ2FjaGUuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkdy
YXBoaWNzQ29udGV4dDNELmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJIaXN0b3J5SXRl
bS5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViSFRNTFBvcHVwSW1wbC5jcHAnLAorICAg
ICAgICAgICAgICAgICdzcmMvV2ViSFRNTFBvcHVwSW1wbC5oJywKICAgICAgICAgICAgICAgICAn
c3JjL1dlYkhUVFBCb2R5LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJIVFRQTG9hZElu
Zm8uY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkljb25Mb2FkaW5nQ29tcGxldGlvbklt
cGwuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lw
aSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQppbmRleCBlN2VmMThmOGRm
YWEyZTA5YTIwMDdjMWEzYTIyNzA4ODYzOTBlMTlhLi5jZjczNDA3ZjMyYmEwMmU2NDUwNDdlZTRi
ZjFiOTQ1OGM1MTU0N2NhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1
cmVzLmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCkBAIC01
Niw3ICs1Niw3IEBACiAgICAgICAnRU5BQkxFX0lOUFVUX0NPTE9SPTAnLAogICAgICAgJ0VOQUJM
RV9JTlBVVF9TUEVFQ0g9MScsCiAgICAgICAnRU5BQkxFX0lOUFVUX1RZUEVfQ09MT1I9MCcsCi0g
ICAgICAnRU5BQkxFX0lOUFVUX1RZUEVfREFURT0wJywKKyAgICAgICdFTkFCTEVfSU5QVVRfVFlQ
RV9EQVRFPTEnLAogICAgICAgJ0VOQUJMRV9JTlBVVF9UWVBFX0RBVEVUSU1FPTAnLAogICAgICAg
J0VOQUJMRV9JTlBVVF9UWVBFX0RBVEVUSU1FTE9DQUw9MCcsCiAgICAgICAnRU5BQkxFX0lOUFVU
X1RZUEVfTU9OVEg9MCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJQb3B1cE1lbnUuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBvcHVw
TWVudS5oCmluZGV4IGQ3NzZjMTcxZTIxNjNmZjQzN2Y4YmY1NzM4NTI5YmM4YTJjZmE0YmQuLmMz
MDJmYWMyYmY5ZjZmN2E5ODczMGZhNDQyZTk1NWJhYjYzYjEwZGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBvcHVwTWVudS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYlBvcHVwTWVudS5oCkBAIC00Niw2ICs0NiwxMiBAQCBwdWJs
aWM6CiAgICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRNaW5pbXVtUm93SGVpZ2h0KGlu
dCk7CiB9OwogCisvLyBGSVhNRTogTW92ZSB0byBpdHMgb3duIGZpbGUuCitjbGFzcyBXZWJIVE1M
UG9wdXAgOiBwdWJsaWMgV2ViV2lkZ2V0IHsKK3B1YmxpYzoKKyAgICBXRUJLSVRfRVhQT1JUIHN0
YXRpYyBXZWJIVE1MUG9wdXAqIGNyZWF0ZShXZWJXaWRnZXRDbGllbnQqKTsKK307CisKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYlBvcHVwVHlwZS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViUG9wdXBUeXBlLmgKaW5kZXggOGE1NDZiYWU0MjI3YzdmNTc1OGQ3NmMwYWY3ODdiNjg1
ZWY2ZjZlMy4uZTUyZjM4YjY4MTEwMDZhOWQ1ZGZhYWE2NDUzYjc1MTcxYTJhZDkwZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUG9wdXBUeXBlLmgKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUG9wdXBUeXBlLmgKQEAgLTM1LDggKzM1
LDkgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGVudW0gV2ViUG9wdXBUeXBlIHsKICAgICBXZWJQ
b3B1cFR5cGVOb25lLCAvLyBOb3QgYSBwb3B1cC4KLSAgICBXZWJQb3B1cFR5cGVTZWxlY3QsIC8v
IEEgSFRNTCBzZWxlY3QgKGNvbWJvLWJveCkgcG9wdXAuCisgICAgV2ViUG9wdXBUeXBlU2VsZWN0
LCAvLyBBbiBIVE1MIHNlbGVjdCAobWVudWxpc3QpIHBvcHVwLgogICAgIFdlYlBvcHVwVHlwZVN1
Z2dlc3Rpb24sIC8vIEFuIGF1dG9maWxsL2F1dG9jb21wbGV0ZSBwb3B1cC4KKyAgICBXZWJQb3B1
cFR5cGVIVE1MLCAvLyBBIHBvcHVwIHdoaWNoIGNhbiBlbWJlZCBhbiBIVE1MIHBhZ2UuCiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYlZpZXdDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYlZpZXdDbGllbnQuaAppbmRleCA1YTRkNGU4ZTQ5YzNkNzJhNjhhMGVhOGVlY2Q0MjAyNGVk
Njc4ZTJiLi5hMDRmZWEzYjQ0OTU1ODNmMWRjZjIwMWNmMDhkMjk2ZjAxNDRmOTk1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3Q2xpZW50LmgKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlld0NsaWVudC5oCkBAIC01OCw2ICs1
OCw3IEBAIGNsYXNzIFdlYkZpbGVDaG9vc2VyQ29tcGxldGlvbjsKIGNsYXNzIFdlYkZyYW1lOwog
Y2xhc3MgV2ViR2VvbG9jYXRpb25DbGllbnQ7CiBjbGFzcyBXZWJHZW9sb2NhdGlvblNlcnZpY2U7
CitjbGFzcyBXZWJIVE1MUG9wdXA7CiBjbGFzcyBXZWJJY29uTG9hZGluZ0NvbXBsZXRpb247CiBj
bGFzcyBXZWJJbWFnZTsKIGNsYXNzIFdlYklucHV0RWxlbWVudDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAKaW5kZXggZmIwN2I0YzEwM2ZiMjc5
YTI0YzRmMTY3OGViNTk4OGYzMjE3M2JhNi4uYTczN2E2YjY3M2E0NjU0NGMyODE1NjZlY2UyMThj
OThjNmExM2Q3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21l
Q2xpZW50SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xp
ZW50SW1wbC5jcHAKQEAgLTgyLDYgKzgyLDcgQEAKICNpbmNsdWRlICJXZWJGaWxlQ2hvb3NlckNv
bXBsZXRpb25JbXBsLmgiCiAjaW5jbHVkZSAiV2ViRnJhbWVDbGllbnQuaCIKICNpbmNsdWRlICJX
ZWJGcmFtZUltcGwuaCIKKyNpbmNsdWRlICJXZWJIVE1MUG9wdXBJbXBsLmgiCiAjaW5jbHVkZSAi
V2ViSWNvbkxvYWRpbmdDb21wbGV0aW9uSW1wbC5oIgogI2luY2x1ZGUgIldlYklucHV0RXZlbnQu
aCIKICNpbmNsdWRlICJXZWJLaXQuaCIKQEAgLTk4MCw2ICs5ODEsMzAgQEAgUGFzc1JlZlB0cjxT
ZWFyY2hQb3B1cE1lbnU+IENocm9tZUNsaWVudEltcGw6OmNyZWF0ZVNlYXJjaFBvcHVwTWVudShQ
b3B1cE1lbnVDbGkKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNlYXJjaFBvcHVwTWVudUNocm9t
aXVtKGNsaWVudCkpOwogfQogCitIVE1MUG9wdXAqIENocm9tZUNsaWVudEltcGw6Om9wZW5IVE1M
UG9wdXAoSFRNTFBvcHVwQ2xpZW50KiBjbGllbnQsIGNvbnN0IEludFJlY3QmIG9yaWdpbkJvdW5k
c0luUm9vdFZpZXcpCit7CisgICAgV2ViV2lkZ2V0KiBwb3B1cFdpZGdldCA9IG1fd2ViVmlldy0+
Y2xpZW50KCktPmNyZWF0ZVBvcHVwTWVudShXZWJQb3B1cFR5cGVIVE1MKTsKKyAgICBBU1NFUlQo
cG9wdXBXaWRnZXQpOworICAgIGlmICghcG9wdXBXaWRnZXQpCisgICAgICAgIHJldHVybiAwOwor
ICAgIFdlYkhUTUxQb3B1cEltcGwqIHBvcHVwID0gc3RhdGljX2Nhc3Q8V2ViSFRNTFBvcHVwSW1w
bCo+KHBvcHVwV2lkZ2V0KTsKKyAgICBpZiAoIXBvcHVwLT5pbml0KGNsaWVudCwgcm9vdFZpZXdU
b1NjcmVlbihvcmlnaW5Cb3VuZHNJblJvb3RWaWV3KSkpIHsKKyAgICAgICAgcG9wdXAtPmNsb3Nl
UG9wdXAoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIG1fd2ViVmlldy0+cG9wdXBP
cGVuZWQocG9wdXApOworICAgIHJldHVybiBwb3B1cDsKK30KKwordm9pZCBDaHJvbWVDbGllbnRJ
bXBsOjpjbG9zZUhUTUxQb3B1cChIVE1MUG9wdXAqIHBvcHVwKQoreworICAgIGlmICghcG9wdXAp
CisgICAgICAgIHJldHVybjsKKyAgICBXZWJIVE1MUG9wdXBJbXBsKiBwb3B1cEltcGwgPSBzdGF0
aWNfY2FzdDxXZWJIVE1MUG9wdXBJbXBsKj4ocG9wdXApOworICAgIHBvcHVwSW1wbC0+Y2xvc2VQ
b3B1cCgpOworICAgIG1fd2ViVmlldy0+cG9wdXBDbG9zZWQocG9wdXBJbXBsKTsKK30KKwogYm9v
bCBDaHJvbWVDbGllbnRJbXBsOjpzaG91bGRSdW5Nb2RhbERpYWxvZ0R1cmluZ1BhZ2VEaXNtaXNz
YWwoY29uc3QgRGlhbG9nVHlwZSYgZGlhbG9nVHlwZSwgY29uc3QgU3RyaW5nJiBkaWFsb2dNZXNz
YWdlLCBGcmFtZUxvYWRlcjo6UGFnZURpc21pc3NhbFR5cGUgZGlzbWlzc2FsVHlwZSkgY29uc3QK
IHsKICAgICBjb25zdCBjaGFyKiBrRGlhbG9nc1tdID0geyJhbGVydCIsICJjb25maXJtIiwgInBy
b21wdCIsICJzaG93TW9kYWxEaWFsb2cifTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L0Nocm9tZUNsaWVudEltcGwuaAppbmRleCA4ZmQyNDg4ZDllZTY2MTBmZTEzODU4YjhlYzllNTU4
MGM3NTQwNTI4Li4yZThlMzc0MjhjYzlkZGRiNzE2NmEwMTdhZjQwYzIxZmZhNGI4MmVlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmgKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5oCkBAIC0xOTUs
NiArMTk1LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBoYXNPcGVuZWRQb3B1cCgpIGNv
bnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpQb3B1cE1lbnU+
IGNyZWF0ZVBvcHVwTWVudShXZWJDb3JlOjpQb3B1cE1lbnVDbGllbnQqKSBjb25zdDsKICAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2VhcmNoUG9wdXBNZW51PiBjcmVhdGVTZWFyY2hQ
b3B1cE1lbnUoV2ViQ29yZTo6UG9wdXBNZW51Q2xpZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBX
ZWJDb3JlOjpIVE1MUG9wdXAqIG9wZW5IVE1MUG9wdXAoV2ViQ29yZTo6SFRNTFBvcHVwQ2xpZW50
KiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBj
bG9zZUhUTUxQb3B1cChXZWJDb3JlOjpIVE1MUG9wdXAqKSBPVkVSUklERTsKIAogI2lmIEVOQUJM
RShDT05URVhUX01FTlVTKQogICAgIHZpcnR1YWwgdm9pZCBzaG93Q29udGV4dE1lbnUoKSB7IH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkhUTUxQb3B1cEltcGwu
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSFRNTFBvcHVwSW1wbC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYjA2Mzg0Y2VmMmY4ODQxNGUwMzZmZWJiYzg3Zjg2YTJkNDc4OTIzZgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkhUTUxQb3B1cEltcGwu
Y3BwCkBAIC0wLDAgKzEsMzM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkhU
TUxQb3B1cEltcGwuaCIKKworI2luY2x1ZGUgIkVtcHR5Q2xpZW50cy5oIgorI2luY2x1ZGUgIkZv
Y3VzQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhUTUxQ
b3B1cENsaWVudC5oIgorI2luY2x1ZGUgInBhaW50aW5nL0dyYXBoaWNzQ29udGV4dEJ1aWxkZXIu
aCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJW
OEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOFByb3h5LmgiCisjaW5jbHVkZSAiV2ViSW5wdXRFdmVu
dENvbnZlcnNpb24uaCIKKyNpbmNsdWRlICJXZWJJbnB1dEV2ZW50LmgiCisjaW5jbHVkZSAiV2Vi
V2lkZ2V0Q2xpZW50LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgSFRNTFBvcHVwQ2hyb21lQ2xpZW50IDogcHVibGljIEVtcHR5Q2hy
b21lQ2xpZW50IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShIVE1MUG9wdXBDaHJvbWVDbGll
bnQpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworCitwdWJsaWM6CisgICAgSFRNTFBv
cHVwQ2hyb21lQ2xpZW50KFdlYkhUTUxQb3B1cEltcGwqIHBvcHVwKSA6IG1fcG9wdXAocG9wdXAp
IHsgfQorCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBjbG9zZVdpbmRvd1Nvb24oKSBPVkVS
UklERQorICAgIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJIUENDOjpjbG9zZVdpbmRvd1Nv
b24oKVxuIik7CisgICAgICAgIG1fcG9wdXAtPmNsb3NlUG9wdXAoKTsKKyAgICB9CisKKyNpZiAw
CisgICAgdmlydHVhbCBJbnRQb2ludCBzY3JlZW5Ub1Jvb3RWaWV3KGNvbnN0IEludFBvaW50JiBw
b2ludEluU2NyZWVuKSBjb25zdCBPVkVSUklERQorICAgIHsKKyAgICAgICAgaWYgKCFtX3BvcHVw
LT53aWRnZXRDbGllbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBwb2ludEluU2NyZWVuOworICAg
ICAgICBJbnRQb2ludCBwb2ludChwb2ludEluU2NyZWVuKTsKKyAgICAgICAgV2ViUmVjdCB3aW5k
b3dSZWN0ID0gbV9wb3B1cC0+d2lkZ2V0Q2xpZW50KCktPndpbmRvd1JlY3QoKTsKKyAgICAgICAg
cG9pbnQubW92ZSgtd2luZG93UmVjdC54LCAtd2luZG93UmVjdC55KTsKKyAgICAgICAgcmV0dXJu
IHBvaW50OworICAgIH0KKworICAgIHZpcnR1YWwgSW50UmVjdCByb290Vmlld1RvU2NyZWVuKGNv
bnN0IEludFJlY3QmIHJlY3QpIGNvbnN0IE9WRVJSSURFCisgICAgeworICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHJlY3Q7CisgICAgfQorI2VuZGlmCisKKyAg
ICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZUNvbnRlbnRzQW5kUm9vdFZpZXcoY29uc3QgSW50UmVj
dCYgcGFpbnRSZWN0LCBib29sKSBPVkVSUklERQorICAgIHsKKyAgICAgICAgaWYgKHBhaW50UmVj
dC5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChtX3BvcHVwLT53
aWRnZXRDbGllbnQoKSkKKyAgICAgICAgICAgIG1fcG9wdXAtPndpZGdldENsaWVudCgpLT5kaWRJ
bnZhbGlkYXRlUmVjdChwYWludFJlY3QpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBzY3Jv
bGwoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRS
ZWN0JiBjbGlwUmVjdCkgT1ZFUlJJREUKKyAgICB7CisgICAgICAgIGlmICghbV9wb3B1cC0+d2lk
Z2V0Q2xpZW50KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fcG9wdXAtPndpZGdl
dENsaWVudCgpLT5kaWRTY3JvbGxSZWN0KHNjcm9sbERlbHRhLndpZHRoKCksIHNjcm9sbERlbHRh
LmhlaWdodCgpLCBjbGlwUmVjdCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGludmFsaWRh
dGVDb250ZW50c0ZvclNsb3dTY3JvbGwoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgYm9vbCBp
bW1lZGlhdGUpIE9WRVJSSURFCisgICAgeworICAgICAgICBpbnZhbGlkYXRlQ29udGVudHNBbmRS
b290Vmlldyh1cGRhdGVSZWN0LCBpbW1lZGlhdGUpOworICAgIH0KKworICAgIFdlYkhUTUxQb3B1
cEltcGwqIG1fcG9wdXA7Cit9OworCisvLyBXZWJIVE1MUG9wdXBJbXBsIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXZWJI
VE1MUG9wdXBJbXBsOjpXZWJIVE1MUG9wdXBJbXBsKFdlYldpZGdldENsaWVudCogY2xpZW50KQor
ICAgIDogbV93aWRnZXRDbGllbnQoY2xpZW50KQorICAgICwgbV9zdXBwcmVzc05leHRLZXlwcmVz
c0V2ZW50KGZhbHNlKQoreworICAgIEFTU0VSVChjbGllbnQpOworfQorCitXZWJIVE1MUG9wdXBJ
bXBsOjp+V2ViSFRNTFBvcHVwSW1wbCgpCit7CisgICAgZnByaW50ZihzdGRlcnIsICJ+V2ViSFRN
TFBvcHVwSW1wbFxuIik7Cit9CisKK2Jvb2wgV2ViSFRNTFBvcHVwSW1wbDo6aW5pdChIVE1MUG9w
dXBDbGllbnQqIHBvcHVwQ2xpZW50LCBjb25zdCBJbnRSZWN0JiBvcmlnaW5Cb3VuZHNJblNjcmVl
bikKK3sKKyAgICBpZiAoIW1fd2lkZ2V0Q2xpZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBBU1NFUlQocG9wdXBDbGllbnQpOworICAgIGlmICghcG9wdXBDbGllbnQpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBtX3BvcHVwQ2xpZW50ID0gcG9wdXBDbGllbnQ7CisKKyAgICBp
ZiAoIWluaXRQYWdlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEZJWE1FOiBX
ZSBoYXZlIG5vIHdheXMgdG8gYWRqdXN0IHRoZSBwb3NpdGlvbi4KKyAgICAvLyBPbiBNYWMsIHRo
ZSBXZWJXaWRnZXQgaXMgYSBjaGlsZCBvZiB0aGUgY29udGVudCB3aW5kb3csIGFuZCBpdCBjYW4n
dCBiZSBkcmF3biBvbiB0aGUgb3V0c2lkZSBvZiB0aGUgY29udGVudCB3aWRub3cuCisgICAgSW50
U2l6ZSBzaXplID0gbV9wb3B1cENsaWVudC0+Y29udGVudFNpemUoKTsKKyAgICBtX3dpZGdldENs
aWVudC0+c2V0V2luZG93UmVjdChXZWJSZWN0KG9yaWdpbkJvdW5kc0luU2NyZWVuLngoKSwgb3Jp
Z2luQm91bmRzSW5TY3JlZW4ubWF4WSgpLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpKTsK
KyAgICBtX3dpZGdldENsaWVudC0+c2hvdyhXZWJOYXZpZ2F0aW9uUG9saWN5KCkpOworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIFdlYkhUTUxQb3B1cEltcGw6OmluaXRQYWdlKCkKK3sKKyAg
ICBzdGF0aWMgQ29udGV4dE1lbnVDbGllbnQqIGVtcHR5Q29udGV4dE1lbnVDbGllbnQgPSBuZXcg
RW1wdHlDb250ZXh0TWVudUNsaWVudDsKKyAgICBzdGF0aWMgRGV2aWNlTW90aW9uQ2xpZW50KiBl
bXB0eURldmljZU1vdGlvbkNsaWVudCA9IG5ldyBFbXB0eURldmljZU1vdGlvbkNsaWVudDsKKyAg
ICBzdGF0aWMgRGV2aWNlT3JpZW50YXRpb25DbGllbnQqIGVtcHR5RGV2aWNlT3JpZW50YXRpb25D
bGllbnQgPSBuZXcgRW1wdHlEZXZpY2VPcmllbnRhdGlvbkNsaWVudDsKKyAgICBzdGF0aWMgRHJh
Z0NsaWVudCogZW1wdHlEcmFnQ2xpZW50ID0gbmV3IEVtcHR5RHJhZ0NsaWVudDsKKyAgICBzdGF0
aWMgRWRpdG9yQ2xpZW50KiBlbXB0eUVkaXRvckNsaWVudCA9IG5ldyBFbXB0eUVkaXRvckNsaWVu
dDsKKyAgICBzdGF0aWMgSW5zcGVjdG9yQ2xpZW50KiBlbXB0eUluc3BlY3RvckNsaWVudCA9IG5l
dyBFbXB0eUluc3BlY3RvckNsaWVudDsKKyAgICBzdGF0aWMgRnJhbWVMb2FkZXJDbGllbnQqIGVt
cHR5RnJhbWVMb2FkZXJDbGllbnQgPSAgbmV3IEVtcHR5RnJhbWVMb2FkZXJDbGllbnQ7CisgICAg
UGFnZTo6UGFnZUNsaWVudHMgcGFnZUNsaWVudHM7CisgICAgcGFnZUNsaWVudHMuY2hyb21lQ2xp
ZW50ID0gbmV3IEhUTUxQb3B1cENocm9tZUNsaWVudCh0aGlzKTsKKyAgICBwYWdlQ2xpZW50cy5j
b250ZXh0TWVudUNsaWVudCA9IGVtcHR5Q29udGV4dE1lbnVDbGllbnQ7CisgICAgcGFnZUNsaWVu
dHMuZGV2aWNlTW90aW9uQ2xpZW50ID0gZW1wdHlEZXZpY2VNb3Rpb25DbGllbnQ7CisgICAgcGFn
ZUNsaWVudHMuZGV2aWNlT3JpZW50YXRpb25DbGllbnQgPSBlbXB0eURldmljZU9yaWVudGF0aW9u
Q2xpZW50OworICAgIHBhZ2VDbGllbnRzLmRyYWdDbGllbnQgPSBlbXB0eURyYWdDbGllbnQ7Cisg
ICAgcGFnZUNsaWVudHMuZWRpdG9yQ2xpZW50ID0gZW1wdHlFZGl0b3JDbGllbnQ7CisgICAgcGFn
ZUNsaWVudHMuaW5zcGVjdG9yQ2xpZW50ID0gZW1wdHlJbnNwZWN0b3JDbGllbnQ7CisgICAgbV9w
YWdlID0gYWRvcHRQdHIobmV3IFBhZ2UocGFnZUNsaWVudHMpKTsKKyAgICBtX3BhZ2UtPnNldHRp
bmdzKCktPnNldFNjcmlwdEVuYWJsZWQodHJ1ZSk7CisgICAgbV9wYWdlLT5zZXR0aW5ncygpLT5z
ZXRBbGxvd1NjcmlwdHNUb0Nsb3NlV2luZG93cyh0cnVlKTsKKyAgICBSZWZQdHI8RnJhbWU+IGZy
YW1lID0gRnJhbWU6OmNyZWF0ZShtX3BhZ2UuZ2V0KCksIDAsIGVtcHR5RnJhbWVMb2FkZXJDbGll
bnQpOworICAgIGZyYW1lLT5zZXRWaWV3KEZyYW1lVmlldzo6Y3JlYXRlKGZyYW1lLmdldCgpKSk7
CisgICAgZnJhbWUtPmluaXQoKTsKKyAgICBmcmFtZS0+dmlldygpLT5zZXRUcmFuc3BhcmVudCh0
cnVlKTsKKworICAgIENTdHJpbmcgaHRtbFNvdXJjZSA9IG1fcG9wdXBDbGllbnQtPmh0bWxTb3Vy
Y2UoKS51dGY4KCk7CisgICAgRG9jdW1lbnRXcml0ZXIqIHdyaXRlciA9IGZyYW1lLT5sb2FkZXIo
KS0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+d3JpdGVyKCk7CisgICAgd3JpdGVyLT5zZXRNSU1F
VHlwZSgidGV4dC9odG1sIik7CisgICAgd3JpdGVyLT5iZWdpbihLVVJMKCkpOworICAgIHdyaXRl
ci0+YWRkRGF0YShodG1sU291cmNlLmRhdGEoKSwgaHRtbFNvdXJjZS5sZW5ndGgoKSk7CisgICAg
d3JpdGVyLT5lbmQoKTsKKworICAgIC8vIEZJWE1FOiBDb25uZWN0IEhUTUxQb3B1cENsaWVudCB0
byB0aGUgZ2xvYmFsIHdpbmRvdy4KKyAgICB7CisgICAgICAgIHY4OjpIYW5kbGVTY29wZSBoYW5k
bGVTY29wZTsKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCA9IFY4UHJv
eHk6Om1haW5Xb3JsZENvbnRleHQoZnJhbWUuZ2V0KCkpOworICAgICAgICBpZiAoY29udGV4dC5J
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGdldCBt
YWluIHdvcmxkIGNvbnRleHRcbiIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIHY4OjpDb250ZXh0OjpTY29wZSBzY29wZShjb250ZXh0KTsKKyAgICAgICAg
ZnByaW50ZihzdGRlcnIsICIlczogUmVnaXN0ZXJpbmcgdGhpcz0lcFxuIiwgX19mdW5jX18sIHRo
aXMpOworICAgICAgICBtX3Y4dGhpcyA9IHY4OjpQZXJzaXN0ZW50PHY4OjpFeHRlcm5hbD46Ok5l
dyh2ODo6RXh0ZXJuYWw6Ok5ldyh0aGlzKSk7CisgICAgICAgIHY4OjpMb2NhbDx2ODo6RnVuY3Rp
b25UZW1wbGF0ZT4gdGVtcGwgPSB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KHNldFZhbHVlQW5k
Q2xvc2VQb3B1cENhbGxiYWNrLCBtX3Y4dGhpcyk7CisgICAgICAgIGNvbnRleHQtPkdsb2JhbCgp
LT5TZXQodjg6OlN0cmluZzo6TmV3KCJzZXRWYWx1ZUFuZENsb3NlUG9wdXAiKSwgdjg6OkhhbmRs
ZTx2ODo6RnVuY3Rpb24+KHRlbXBsLT5HZXRGdW5jdGlvbigpKSk7CisgICAgfQorICAgIHJldHVy
biB0cnVlOworfQorCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV2ViSFRNTFBvcHVwSW1wbDo6c2V0
VmFsdWVBbmRDbG9zZVBvcHVwQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sK
KyAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDIpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJO
b3QgZW5vdWdoIGFyZ3VtZW50cyIsIFY4UHJveHk6OlR5cGVFcnJvcik7CisgICAgV2ViSFRNTFBv
cHVwSW1wbCogcG9wdXAgPSBzdGF0aWNfY2FzdDxXZWJIVE1MUG9wdXBJbXBsKj4odjg6OkV4dGVy
bmFsOjpDYXN0KCphcmdzLkRhdGEoKSktPlZhbHVlKCkpOworICAgIEFTU0VSVChwb3B1cCk7Cisg
ICAgZnByaW50ZihzdGRlcnIsICIlczogR290IHRoaXM9JXBcbiIsIF9fZnVuY19fLCBwb3B1cCk7
CisgICAgcG9wdXAtPm1fcG9wdXBDbGllbnQtPnNldFZhbHVlQW5kQ2xvc2VQb3B1cCh0b0ludDMy
KGFyZ3NbMF0pLCB0b1dlYkNvcmVTdHJpbmcoYXJncywgMSkpOworICAgIHJldHVybiB2ODo6VW5k
ZWZpbmVkKCk7Cit9CisKK3ZvaWQgV2ViSFRNTFBvcHVwSW1wbDo6bGF5b3V0KCkKK3sKKyAgICBt
X3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCktPmxheW91dCgpOworfQorCit2b2lkIFdlYkhUTUxQ
b3B1cEltcGw6OnBhaW50KFdlYkNhbnZhcyogY2FudmFzLCBjb25zdCBXZWJSZWN0JiByZWN0KQor
eworICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNz
Q29udGV4dEJ1aWxkZXIgYnVpbGRlcihjYW52YXMpOworICAgIEdyYXBoaWNzQ29udGV4dCYgZ2Mg
PSBidWlsZGVyLmNvbnRleHQoKTsKKyAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCktPnBh
aW50KCZnYywgcmVjdCk7Cit9CisKK3ZvaWQgV2ViSFRNTFBvcHVwSW1wbDo6cmVzaXplKGNvbnN0
IFdlYlNpemUmIG5ld1NpemUpCit7CisjaWYgMAorICAgIGlmIChtX3NpemUgPT0gbmV3U2l6ZSkK
KyAgICAgICAgcmV0dXJuOworICAgIG1fc2l6ZSA9IG5ld1NpemU7CisgICAgaWYgKG1fd2lkZ2V0
KSB7CisgICAgICAgIEludFJlY3QgbmV3R2VvbWV0cnkoMCwgMCwgbmV3U2l6ZS53aWR0aCwgbmV3
U2l6ZS5oZWlnaHQpOworICAgICAgICBtX3dpZGdldC0+c2V0RnJhbWVSZWN0KG5ld0dlb21ldHJ5
KTsKKyAgICB9CisjZW5kaWYKKyAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCktPnJlc2l6
ZShuZXdTaXplKTsKKworICAgIGlmIChtX3dpZGdldENsaWVudCkgeworICAgICAgICBXZWJSZWN0
IGRhbWFnZWRSZWN0KDAsIDAsIG5ld1NpemUud2lkdGgsIG5ld1NpemUuaGVpZ2h0KTsKKyAgICAg
ICAgbV93aWRnZXRDbGllbnQtPmRpZEludmFsaWRhdGVSZWN0KGRhbWFnZWRSZWN0KTsKKyAgICB9
Cit9CisKK2Jvb2wgV2ViSFRNTFBvcHVwSW1wbDo6aGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJ
bnB1dEV2ZW50JiBldmVudCkKK3sKKyAgICBpZiAoIW1fcGFnZSB8fCAhbV9wYWdlLT5tYWluRnJh
bWUoKSB8fCAhbV9wYWdlLT5tYWluRnJhbWUoKS0+dmlldygpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlLT5tYWluRnJhbWUoKTsKKyAgICBzd2l0Y2gg
KGV2ZW50LnR5cGUpIHsKKyAgICBjYXNlIFdlYklucHV0RXZlbnQ6Ok1vdXNlTW92ZToKKyAgICAg
ICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5tb3VzZU1vdmVkKFBsYXRmb3JtTW91c2VFdmVudEJ1
aWxkZXIoZnJhbWUtPnZpZXcoKSwgKnN0YXRpY19jYXN0PGNvbnN0IFdlYk1vdXNlRXZlbnQqPigm
ZXZlbnQpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6
TW91c2VMZWF2ZToKKyAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVNb3VzZU1v
dmVFdmVudChQbGF0Zm9ybU1vdXNlRXZlbnRCdWlsZGVyKGZyYW1lLT52aWV3KCksICpzdGF0aWNf
Y2FzdDxjb25zdCBXZWJNb3VzZUV2ZW50Kj4oJmV2ZW50KSkpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBjYXNlIFdlYklucHV0RXZlbnQ6Ok1vdXNlV2hlZWw6CisgICAgICAgIGZyYW1lLT5l
dmVudEhhbmRsZXIoKS0+aGFuZGxlV2hlZWxFdmVudChQbGF0Zm9ybVdoZWVsRXZlbnRCdWlsZGVy
KGZyYW1lLT52aWV3KCksICpzdGF0aWNfY2FzdDxjb25zdCBXZWJNb3VzZVdoZWVsRXZlbnQqPigm
ZXZlbnQpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6
TW91c2VEb3duOiB7CisgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlTW91c2VQ
cmVzc0V2ZW50KFBsYXRmb3JtTW91c2VFdmVudEJ1aWxkZXIoZnJhbWUtPnZpZXcoKSwgKnN0YXRp
Y19jYXN0PGNvbnN0IFdlYk1vdXNlRXZlbnQqPigmZXZlbnQpKSk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICBjYXNlIFdlYklucHV0RXZlbnQ6Ok1vdXNlVXA6CisgICAgICAgIGZy
YW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQoUGxhdGZvcm1Nb3Vz
ZUV2ZW50QnVpbGRlcihmcmFtZS0+dmlldygpLCAqc3RhdGljX2Nhc3Q8Y29uc3QgV2ViTW91c2VF
dmVudCo+KCZldmVudCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBXZWJJbnB1
dEV2ZW50OjpSYXdLZXlEb3duOgorICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6S2V5RG93bjoKKyAg
ICBjYXNlIFdlYklucHV0RXZlbnQ6OktleVVwOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgbV9zdXBwcmVzc05leHRLZXlwcmVzc0V2ZW50ID0gZmFsc2U7CisgICAgICAg
IGlmIChmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmtleUV2ZW50KFBsYXRmb3JtS2V5Ym9hcmRFdmVu
dEJ1aWxkZXIoKnN0YXRpY19jYXN0PGNvbnN0IFdlYktleWJvYXJkRXZlbnQqPigmZXZlbnQpKSkp
IHsKKyAgICAgICAgICAgIGlmIChldmVudC50eXBlID09IFdlYklucHV0RXZlbnQ6OlJhd0tleURv
d24pCisgICAgICAgICAgICAgICAgbV9zdXBwcmVzc05leHRLZXlwcmVzc0V2ZW50ID0gdHJ1ZTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIFdlYklucHV0RXZlbnQ6
OkNoYXI6IHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJvb2wgc3Vw
cHJlc3MgPSBtX3N1cHByZXNzTmV4dEtleXByZXNzRXZlbnQ7CisgICAgICAgIG1fc3VwcHJlc3NO
ZXh0S2V5cHJlc3NFdmVudCA9IGZhbHNlOworICAgICAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnRC
dWlsZGVyIGV2dCgqc3RhdGljX2Nhc3Q8Y29uc3QgV2ViS2V5Ym9hcmRFdmVudCo+KCZldmVudCkp
OworICAgICAgICBpZiAoIWV2dC5pc0NoYXJhY3RlcktleSgpKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIGlmIChmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZUFjY2Vzc0tl
eShldnQpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChldnQuaXNTeXN0
ZW1LZXkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuICFzdXBw
cmVzcyAmJiBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmtleUV2ZW50KGV2dCk7CisgICAgfQorICAg
ICAgICAvLyBHRVNUVVJFIGFuZCBUT1VDSAorICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2Jvb2wgV2ViSFRN
TFBvcHVwSW1wbDo6aGFuZGxlS2V5RXZlbnQoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50JiBl
dmVudCkKK3sKKyAgICBpZiAoIW1fcGFnZSB8fCAhbV9wYWdlLT5tYWluRnJhbWUoKSB8fCAhbV9w
YWdlLT5tYWluRnJhbWUoKS0+dmlldygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0
dXJuIG1fcGFnZS0+bWFpbkZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5rZXlFdmVudChldmVudCk7
Cit9CisKK3ZvaWQgV2ViSFRNTFBvcHVwSW1wbDo6c2V0Rm9jdXMoYm9vbCBlbmFibGUpCit7Cisg
ICAgaWYgKCFtX3BhZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBtX3BhZ2UtPmZvY3VzQ29udHJv
bGxlcigpLT5zZXRGb2N1c2VkKGVuYWJsZSk7CisgICAgaWYgKGVuYWJsZSkKKyAgICAgICAgbV9w
YWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0QWN0aXZlKHRydWUpOworfQorCit2b2lkIFdlYkhU
TUxQb3B1cEltcGw6OmNsb3NlKCkKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgIldIUEk6OmNsb3Nl
KClcbiIpOworICAgIGlmIChtX3BhZ2UpIHsKKyAgICAgICAgbV9wYWdlLmNsZWFyKCk7CisgICAg
ICAgIG1fdjh0aGlzLkRpc3Bvc2UoKTsKKyAgICB9CisgICAgaWYgKG1fd2lkZ2V0Q2xpZW50KQor
ICAgICAgICBtX3dpZGdldENsaWVudCA9IDA7CisgICAgZGVyZWYoKTsKK30KKwordm9pZCBXZWJI
VE1MUG9wdXBJbXBsOjpjbG9zZVBvcHVwKCkKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgIldIUEk6
OmNsb3NlUG9wdXAoKVxuIik7CisgICAgaWYgKG1fcGFnZSkgeworICAgICAgICBtX3BhZ2UtPnNl
dEdyb3VwTmFtZShTdHJpbmcoKSk7CisgICAgICAgIG1fcGFnZS0+bWFpbkZyYW1lKCktPmxvYWRl
cigpLT5zdG9wQWxsTG9hZGVycygpOworICAgICAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLT5sb2Fk
ZXIoKS0+c3RvcExvYWRpbmcoVW5sb2FkRXZlbnRQb2xpY3lOb25lKTsKKyAgICB9CisgICAgaWYg
KG1fd2lkZ2V0Q2xpZW50KQorICAgICAgICBtX3dpZGdldENsaWVudC0+Y2xvc2VXaWRnZXRTb29u
KCk7CisKKyAgICBtX3BvcHVwQ2xpZW50LT5kaWRDbG9zZVBvcHVwKCk7Cit9CisKKy8vIFdlYkhU
TUxQb3B1cCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKworV2ViSFRNTFBvcHVwKiBXZWJIVE1MUG9wdXA6OmNyZWF0ZShXZWJX
aWRnZXRDbGllbnQqIGNsaWVudCkKK3sKKyAgICAvLyBQYXNzIHRoZSBXZWJIVE1MUG9wdXBJbXBs
J3Mgc2VsZi1yZWZlcmVuY2UgdG8gdGhlIGNhbGxlci4KKyAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFdlYkhUTUxQb3B1cEltcGwoY2xpZW50KSkubGVha1JlZigpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkhUTUxQ
b3B1cEltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkhUTUxQb3B1cEltcGwu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5kYTRlYzQ3ZGMwYmY0NWIxODA4YzFjNTJkNDMxMjUxNTRlNjg3ODUwCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSFRNTFBvcHVw
SW1wbC5oCkBAIC0wLDAgKzEsNTkgQEAKKyNpZm5kZWYgV2ViSFRNTFBvcHVwSW1wbF9oCisjZGVm
aW5lIFdlYkhUTUxQb3B1cEltcGxfaAorCisjaW5jbHVkZSAiSFRNTFBvcHVwLmgiCisvLyNpbmNs
dWRlICJXZWJIVE1MUG9wdXAuaCIKKyNpbmNsdWRlICJXZWJQb3B1cE1lbnUuaCIKKyNpbmNsdWRl
IDx2OC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBIVE1MUG9wdXBDbGllbnQ7CitjbGFz
cyBQYWdlOworY2xhc3MgUGxhdGZvcm1LZXlib2FyZEV2ZW50OworfQorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworY2xhc3MgV2ViSFRNTFBvcHVwSW1wbCA6IHB1YmxpYyBXZWJIVE1MUG9wdXAsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFdlYkNvcmU6OkhUTUxQb3B1cCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBwdWJsaWMgUmVmQ291bnRlZDxXZWJIVE1MUG9wdXBJbXBsPiB7
CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKK3B1YmxpYzoKKyAgICAvLyBDYWxsZWQg
YnkgQ2hyb21lQ2xpZW50SW1wbDo6b3BlbkhUTUxQb3B1cCgpLgorICAgIGJvb2wgaW5pdChXZWJD
b3JlOjpIVE1MUG9wdXBDbGllbnQqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBvcmlnaW5Cb3Vu
ZHNJblNjcmVlbik7CisgICAgLy8gQ2FsbGVkIGJ5IFdlYlZpZXdJbXBsLgorICAgIGJvb2wgaGFu
ZGxlS2V5RXZlbnQoY29uc3QgV2ViQ29yZTo6UGxhdGZvcm1LZXlib2FyZEV2ZW50Jik7CisgICAg
dm9pZCBjbG9zZVBvcHVwKCk7CisgICAgdmlydHVhbCB+V2ViSFRNTFBvcHVwSW1wbCgpOworICAg
IFdlYldpZGdldENsaWVudCogd2lkZ2V0Q2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV93aWRnZXRD
bGllbnQ7IH0KKworcHJpdmF0ZToKKyAgICAvLyBXZWJXaWRnZXQgZnVuY3Rpb25zCisgICAgdmly
dHVhbCB2b2lkIGNvbXBvc2l0ZShib29sKSBPVkVSUklERSB7IC8qIE5JIGluIFdQTUkgKi8gfTsK
KyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHBh
aW50KFdlYkNhbnZhcyosIGNvbnN0IFdlYlJlY3QmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgcmVzaXplKGNvbnN0IFdlYlNpemUmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xv
c2UoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlSW5wdXRFdmVudChjb25zdCBX
ZWJJbnB1dEV2ZW50JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKGJvb2wp
IE9WRVJSSURFOworCisgICAgV2ViSFRNTFBvcHVwSW1wbChXZWJXaWRnZXRDbGllbnQqKTsKKyAg
ICBib29sIGluaXRQYWdlKCk7CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzZXRW
YWx1ZUFuZENsb3NlUG9wdXBDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJik7CisKKyAgICBX
ZWJXaWRnZXRDbGllbnQqIG1fd2lkZ2V0Q2xpZW50OworICAgIE93blB0cjxXZWJDb3JlOjpQYWdl
PiBtX3BhZ2U7CisgICAgV2ViQ29yZTo6SFRNTFBvcHVwQ2xpZW50KiBtX3BvcHVwQ2xpZW50Owor
ICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpFeHRlcm5hbD4gbV92OHRoaXM7CisgICAgYm9vbCBtX3N1
cHByZXNzTmV4dEtleXByZXNzRXZlbnQ7CisKKyAgICBmcmllbmQgY2xhc3MgV2ViSFRNTFBvcHVw
OworICAgIGZyaWVuZCBjbGFzcyBIVE1MUG9wdXBDaHJvbWVDbGllbnQ7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJW
aWV3SW1wbC5jcHAKaW5kZXggZDVhOGJhOGI2ZTM5YTRlNDgxNTJlZWE0MzIwMDNhYzdjZTIzMjc2
Yi4uNjc2M2E3MWI1ZDc2YTY0M2FiODQ0YjA1Y2Q1MzkzNGIwYmQ3NDg2MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApAQCAtMTE4LDYgKzExOCw3IEBACiAj
aW5jbHVkZSAicGxhdGZvcm0vV2ViRHJhZ0RhdGEuaCIKICNpbmNsdWRlICJXZWJGcmFtZUltcGwu
aCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUg
IldlYkhUTUxQb3B1cEltcGwuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJJbWFnZS5oIgogI2lu
Y2x1ZGUgIldlYklucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIldlYklucHV0RXZlbnQuaCIKQEAg
LTY1MCw2ICs2NTEsOCBAQCBib29sIFdlYlZpZXdJbXBsOjprZXlFdmVudChjb25zdCBXZWJLZXli
b2FyZEV2ZW50JiBldmVudCkKICAgICAvLyBub3QgdGhlIHBhZ2UuCiAgICAgaWYgKG1fc2VsZWN0
UG9wdXApCiAgICAgICAgIHJldHVybiBtX3NlbGVjdFBvcHVwLT5oYW5kbGVLZXlFdmVudChQbGF0
Zm9ybUtleWJvYXJkRXZlbnRCdWlsZGVyKGV2ZW50KSk7CisgICAgaWYgKG1faHRtbFBvcHVwKQor
ICAgICAgICByZXR1cm4gbV9odG1sUG9wdXAtPmhhbmRsZUtleUV2ZW50KFBsYXRmb3JtS2V5Ym9h
cmRFdmVudEJ1aWxkZXIoZXZlbnQpKTsKIAogICAgIC8vIEdpdmUgQXV0b2NvbXBsZXRlIGEgY2hh
bmNlIHRvIGNvbnN1bWUgdGhlIGtleSBldmVudHMgaXQgaXMgaW50ZXJlc3RlZCBpbi4KICAgICBp
ZiAoYXV0b2NvbXBsZXRlSGFuZGxlS2V5RXZlbnQoZXZlbnQpKQpAQCAtNzYyLDYgKzc2NSw4IEBA
IGJvb2wgV2ViVmlld0ltcGw6OmNoYXJFdmVudChjb25zdCBXZWJLZXlib2FyZEV2ZW50JiBldmVu
dCkKICAgICAvLyBub3QgdGhlIHBhZ2UuCiAgICAgaWYgKG1fc2VsZWN0UG9wdXApCiAgICAgICAg
IHJldHVybiBtX3NlbGVjdFBvcHVwLT5oYW5kbGVLZXlFdmVudChQbGF0Zm9ybUtleWJvYXJkRXZl
bnRCdWlsZGVyKGV2ZW50KSk7CisgICAgaWYgKG1faHRtbFBvcHVwKQorICAgICAgICByZXR1cm4g
bV9odG1sUG9wdXAtPmhhbmRsZUtleUV2ZW50KFBsYXRmb3JtS2V5Ym9hcmRFdmVudEJ1aWxkZXIo
ZXZlbnQpKTsKIAogICAgIEZyYW1lKiBmcmFtZSA9IGZvY3VzZWRXZWJDb3JlRnJhbWUoKTsKICAg
ICBpZiAoIWZyYW1lKQpAQCAtOTg3LDYgKzk5MiwyMCBAQCB2b2lkICBXZWJWaWV3SW1wbDo6cG9w
dXBDbG9zZWQoV2ViQ29yZTo6UG9wdXBDb250YWluZXIqIHBvcHVwQ29udGFpbmVyKQogICAgIH0K
IH0KIAordm9pZCBXZWJWaWV3SW1wbDo6cG9wdXBPcGVuZWQoV2ViSFRNTFBvcHVwSW1wbCogcG9w
dXApCit7CisgICAgQVNTRVJUKCFtX2h0bWxQb3B1cCk7CisgICAgbV9odG1sUG9wdXAgPSBwb3B1
cDsKKyAgICAvLyBGSVhNRTogU3RvcCB0aGUgY2FyZXQgYmxpbmsKK30KKwordm9pZCBXZWJWaWV3
SW1wbDo6cG9wdXBDbG9zZWQoV2ViSFRNTFBvcHVwSW1wbCogcG9wdXApCit7CisgICAgQVNTRVJU
KG1faHRtbFBvcHVwKTsKKyAgICBtX2h0bWxQb3B1cCA9IDA7CisgICAgLy8gRklYTUU6IFJlc3Vt
ZSB0aGUgY2FyZXQgYmxpbmsKK30KKwogdm9pZCBXZWJWaWV3SW1wbDo6aGlkZUF1dG9maWxsUG9w
dXAoKQogewogICAgIGlmIChtX2F1dG9maWxsUG9wdXBTaG93aW5nKSB7CkBAIC0xNDc0LDggKzE0
OTMsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRGb2N1cyhib29sIGVuYWJsZSkKICAgICAgICAg
fQogICAgICAgICBtX2ltZUFjY2VwdEV2ZW50cyA9IHRydWU7CiAgICAgfSBlbHNlIHsKLSAgICAg
ICAgaGlkZUF1dG9maWxsUG9wdXAoKTsKLSAgICAgICAgaGlkZVNlbGVjdFBvcHVwKCk7CisgICAg
ICAgIGhpZGVQb3B1cHMoKTsKIAogICAgICAgICAvLyBDbGVhciBmb2N1cyBvbiB0aGUgY3VycmVu
dGx5IGZvY3VzZWQgZnJhbWUgaWYgYW55LgogICAgICAgICBpZiAoIW1fcGFnZSkKQEAgLTI1NDMs
NiArMjU2MSw4IEBAIHZvaWQgV2ViVmlld0ltcGw6OmhpZGVQb3B1cHMoKQogewogICAgIGhpZGVT
ZWxlY3RQb3B1cCgpOwogICAgIGhpZGVBdXRvZmlsbFBvcHVwKCk7CisgICAgaWYgKG1faHRtbFBv
cHVwKQorICAgICAgICBtX2h0bWxQb3B1cC0+Y2xvc2VQb3B1cCgpOwogfQogCiB2b2lkIFdlYlZp
ZXdJbXBsOjpwZXJmb3JtQ3VzdG9tQ29udGV4dE1lbnVBY3Rpb24odW5zaWduZWQgYWN0aW9uKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKaW5kZXggMDJiYzVjOTIxZGEz
NmM2ZWNkYjdlMGUxMWFjZTliZjMxN2QyZDJmNS4uMmQzZWVhYjVhNGFiZmU1NDkwODBhZWE5MDNj
NmJiMDBhYjE2MzliMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Vmlld0ltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5o
CkBAIC04OSw2ICs4OSw3IEBAIGNsYXNzIFdlYkRldlRvb2xzQWdlbnRDbGllbnQ7CiBjbGFzcyBX
ZWJEZXZUb29sc0FnZW50UHJpdmF0ZTsKIGNsYXNzIFdlYkZyYW1lSW1wbDsKIGNsYXNzIFdlYkdl
c3R1cmVFdmVudDsKK2NsYXNzIFdlYkhUTUxQb3B1cEltcGw7CiBjbGFzcyBXZWJJbWFnZTsKIGNs
YXNzIFdlYktleWJvYXJkRXZlbnQ7CiBjbGFzcyBXZWJNb3VzZUV2ZW50OwpAQCAtNDEzLDYgKzQx
NCw4IEBAIHB1YmxpYzoKICAgICAvLyBOb3RpZmljYXRpb24gdGhhdCBhIHBvcHVwIHdhcyBvcGVu
ZWQvY2xvc2VkLgogICAgIHZvaWQgcG9wdXBPcGVuZWQoV2ViQ29yZTo6UG9wdXBDb250YWluZXIq
IHBvcHVwQ29udGFpbmVyKTsKICAgICB2b2lkIHBvcHVwQ2xvc2VkKFdlYkNvcmU6OlBvcHVwQ29u
dGFpbmVyKiBwb3B1cENvbnRhaW5lcik7CisgICAgdm9pZCBwb3B1cE9wZW5lZChXZWJIVE1MUG9w
dXBJbXBsKik7CisgICAgdm9pZCBwb3B1cENsb3NlZChXZWJIVE1MUG9wdXBJbXBsKik7CiAKICAg
ICB2b2lkIGhpZGVBdXRvZmlsbFBvcHVwKCk7CiAKQEAgLTYzNiw2ICs2MzksOSBAQCBwcml2YXRl
OgogICAgIC8vIFRoZSBwb3B1cCBhc3NvY2lhdGVkIHdpdGggYSBzZWxlY3QgZWxlbWVudC4KICAg
ICBSZWZQdHI8V2ViQ29yZTo6UG9wdXBDb250YWluZXI+IG1fc2VsZWN0UG9wdXA7CiAKKyAgICAv
LyBUaGUgcG9wdXAgYXNzb2NpYXRlZCB3aXRoIGFuIGlucHV0IGVsZW1lbnQuCisgICAgUmVmUHRy
PFdlYkhUTUxQb3B1cEltcGw+IG1faHRtbFBvcHVwOworCiAgICAgT3duUHRyPFdlYkRldlRvb2xz
QWdlbnRQcml2YXRlPiBtX2RldlRvb2xzQWdlbnQ7CiAgICAgT3duUHRyPFBhZ2VPdmVybGF5TGlz
dD4gbV9wYWdlT3ZlcmxheXM7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135271</attachid>
            <date>2012-04-02 21:24:31 -0700</date>
            <delta_ts>2012-04-02 21:24:31 -0700</delta_ts>
            <desc>WIP Patch 7</desc>
            <filename>bug-53961-20120403132429.patch</filename>
            <type>text/plain</type>
            <size>98106</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyOTc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTJiMTVlZmIyMGFmM2Jh
MWUyOTk2ZDI5OWMwN2Y4N2UxMzRjOGNhNS4uNmQ4MzljNGQzZGUzYzUzYzRhMTFjYzQ5MWM5ZTk2
YTMyMmZkYzQ1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0MiBAQAorMjAxMi0wMi0xNSAgS2Vu
dCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50IGEgY2Fs
ZW5kYXIgcGlja2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01Mzk2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogUmVzb3VyY2VzL2NhbGVuZGFy
UGlja2VyLmNzczogQWRkZWQuCisgICAgICAgIChib2R5KToKKyAgICAgICAgKC5uby1mb2N1cy1y
aW5nIDpmb2N1cyk6CisgICAgICAgICguYnViYmxlLWFycm93KToKKyAgICAgICAgKC5idWJibGUt
YXJyb3ctY2xpcHBlcik6CisgICAgICAgICgjbWFpbik6CisgICAgICAgICgueWVhci1tb250aC1h
cmVhKToKKyAgICAgICAgKC55ZWFyLW1vbnRoLXVwcGVyKToKKyAgICAgICAgKC55ZWFyLXNlbGVj
dG9yKToKKyAgICAgICAgKC5tb250aC1zZWxlY3Rvci1ib3gpOgorICAgICAgICAoLm1vbnRoLXNl
bGVjdG9yKToKKyAgICAgICAgKC55ZWFyLW1vbnRoLWJ1dHRvbnMpOgorICAgICAgICAoLnllYXIt
bW9udGgtYnV0dG9uKToKKyAgICAgICAgKC55ZWFyLW1vbnRoLWJ1dHRvbjpob3Zlcik6CisgICAg
ICAgICgueWVhci1tb250aC1idXR0b246YWN0aXZlKToKKyAgICAgICAgKC55ZWFyLW1vbnRoLWJ1
dHRvbjpkaXNhYmxlZCk6CisgICAgICAgICgueWVhci1tb250aC1idXR0b24tbGVmdCk6CisgICAg
ICAgICgueWVhci1tb250aC1idXR0b24tcmlnaHQpOgorICAgICAgICAoLmRheXMtYXJlYS1jb250
YWluZXIpOgorICAgICAgICAoLmRheXMtYXJlYSk6CisgICAgICAgICguZGF5LWxhYmVsLWNvbnRh
aW5lcik6CisgICAgICAgICguZGF5LWxhYmVsKToKKyAgICAgICAgKC53ZWVrLWNvbnRhaW5lcik6
CisgICAgICAgICguZGF5KToKKyAgICAgICAgKC5hdmFpbGFibGUpOgorICAgICAgICAoLm5vdC10
aGlzLW1vbnRoKToKKyAgICAgICAgKC5hdmFpbGFibGUuZGF5LXNlbGVjdGVkKToKKyAgICAgICAg
KC51bmF2YWlsYWJsZSk6CisgICAgICAgICgudW5hdmFpbGFibGUtdXApOgorICAgICAgICAoLnVu
YXZhaWxhYmxlLWRvd24pOgorICAgICAgICAoLnVuYXZhaWxhYmxlLmRheS1zZWxlY3RlZCk6Cisg
ICAgICAgICgudG9kYXktYnV0dG9uKToKKyAgICAgICAgKC5jbGVhci1idXR0b24pOgorICAgICAg
ICAoLmNhbmNlbC1idXR0b24pOgorICAgICAgICAqIFJlc291cmNlcy9jYWxlbmRhclBpY2tlci5q
czogQWRkZWQuCisgICAgICAgIChjcmVhdGVFbGVtZW50KToKKyAgICAgICAgKGdldExvY2FsZSk6
CisgICAgICAgIChnZXRMYW5ndWFnZSk6CisgICAgICAgIChmb3JtYXRZZWFyTW9udGgpOgorICAg
ICAgICAoaGFuZGxlTWVzc2FnZSk6CisgICAgICAgIChoYW5kbGVBcmd1bWVudHNUaW1lb3V0KToK
KyAgICAgICAgKGdldEFyZ3VtZW50RXJyb3IpOgorICAgICAgICAoY3JlYXRlRGF0ZUZyb21TdHJp
bmcpOgorICAgICAgICAoaW5pdGlhbGl6ZSk6CisgICAgICAgIChjaGVja0xpbWl0cyk6CisgICAg
ICAgIChsYXlvdXQpOgorICAgICAgICAobGF5b3V0RGF5cyk6CisgICAgICAgIChsYXlvdXRCdXR0
b25zKToKKyAgICAgICAgKFllYXJNb250aENvbnRyb2xsZXIpOgorICAgICAgICAoWWVhck1vbnRo
Q29udHJvbGxlci5wcm90b3R5cGUuYXR0YWNoKToKKyAgICAgICAgKFllYXJNb250aENvbnRyb2xs
ZXIucHJvdG90eXBlLmdldFllYXIpOgorICAgICAgICAoWWVhck1vbnRoQ29udHJvbGxlci5wcm90
b3R5cGUuZ2V0TW9udGgpOgorICAgICAgICAoWWVhck1vbnRoQ29udHJvbGxlci5wcm90b3R5cGUu
c2V0WWVhck1vbnRoKToKKyAgICAgICAgKFllYXJNb250aENvbnRyb2xsZXIucHJvdG90eXBlLnVw
ZGF0ZVVJKToKKyAgICAgICAgKFllYXJNb250aENvbnRyb2xsZXIucHJvdG90eXBlLmhhbmRsZVll
YXJNb250aENoYW5nZSk6CisgICAgICAgIChZZWFyTW9udGhDb250cm9sbGVyMik6CisgICAgICAg
IChZZWFyTW9udGhDb250cm9sbGVyMi5wcm90b3R5cGUuYXR0YWNoKToKKyAgICAgICAgKFllYXJN
b250aENvbnRyb2xsZXIyLnByb3RvdHlwZS5hdHRhY2hMZWZ0QnV0dG9ucyk6CisgICAgICAgIChZ
ZWFyTW9udGhDb250cm9sbGVyMi5wcm90b3R5cGUuYXR0YWNoUmlnaHRCdXR0b25zKToKKyAgICAg
ICAgKFllYXJNb250aENvbnRyb2xsZXIyLnByb3RvdHlwZS5nZXRZZWFyKToKKyAgICAgICAgKFll
YXJNb250aENvbnRyb2xsZXIyLnByb3RvdHlwZS5nZXRNb250aCk6CisgICAgICAgIChZZWFyTW9u
dGhDb250cm9sbGVyMi5wcm90b3R5cGUuc2V0WWVhck1vbnRoKToKKyAgICAgICAgKFllYXJNb250
aENvbnRyb2xsZXIyLnByb3RvdHlwZS51cGRhdGVVSSk6CisgICAgICAgIChZZWFyTW9udGhDb250
cm9sbGVyMi5wcm90b3R5cGUuaGFuZGxlWWVhck1vbnRoQ2hhbmdlKToKKyAgICAgICAgKFllYXJN
b250aENvbnRyb2xsZXIyLnByb3RvdHlwZS5oYW5kbGVCdXR0b25DbGljayk6CisgICAgICAgIChZ
ZWFyTW9udGhDb250cm9sbGVyMi5wcm90b3R5cGUubW92ZVJlbGF0aXZlbHkpOgorICAgICAgICAo
c3RlcE1pc21hdGNoKToKKyAgICAgICAgKG91dE9mUmFuZ2UpOgorICAgICAgICAoaXNWYWxpZERh
dGUpOgorICAgICAgICAocmVuZGVyTW9udGgpOgorICAgICAgICAobmF2aWdhdGVUb01vbnRoKToK
KyAgICAgICAgKG5hdmlnYXRlVG9Nb250aFdpdGhBbmltYXRpb24pOgorICAgICAgICAobW92ZUlu
RGF5cyk6CisgICAgICAgIChzZWxlY3REYXRlKToKKyAgICAgICAgKG1heWJlU2V0UHJldmlvdXNN
b250aCk6CisgICAgICAgIChtYXliZVNldE5leHRNb250aCk6CisgICAgICAgIChoYW5kbGVEYXlD
bGljayk6CisgICAgICAgIChoYW5kbGVNb3VzZU92ZXIpOgorICAgICAgICAoaGFuZGxlTW91c2VP
dXQpOgorICAgICAgICAoaGFuZGxlRGF5c0FyZWFLZXkpOgorICAgICAgICAodXBkYXRlU2VsZWN0
aW9uKToKKyAgICAgICAgKGNyZWF0ZURhdGVTdHJpbmcpOgorICAgICAgICAoaGFuZGxlVG9kYXkp
OgorICAgICAgICAoaGFuZGxlQ2xlYXIpOgorICAgICAgICAoc3VibWl0VmFsdWUpOgorICAgICAg
ICAoaGFuZGxlQ2FuY2VsKToKKyAgICAgICAgKGhhbmRsZUdsb2JhbEtleSk6CisgICAgICAgICgp
OgorICAgICAgICAqIFJlc291cmNlcy9jYWxlbmRhclBpY2tlci5wbmc6IEFkZGVkLgorICAgICAg
ICAqIFJlc291cmNlcy9jYWxlbmRhclBpY2tlcl90ZXN0Lmh0bWw6IEFkZGVkLgorICAgICAgICAq
IFdlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAg
ICAgKiBodG1sL0RhdGVJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZUlucHV0
VHlwZTo6RGF0ZUlucHV0VHlwZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGVJbnB1dFR5cGU6On5EYXRlSW5wdXRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGVJbnB1dFR5cGU6OmhhbmRsZUZvY3VzRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZUlu
cHV0VHlwZTo6aGFuZGxlQmx1ckV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVJbnB1dFR5
cGU6OmNsb3NlUG9wdXApOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZUlucHV0VHlwZTo6Y29udGVu
dFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZUlucHV0VHlwZTo6aHRtbFNvdXJjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRlSW5wdXRUeXBlOjpzZXRWYWx1ZUFuZENsb3NlUG9wdXApOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0ZUlucHV0VHlwZTo6ZGlkQ2xvc2VQb3B1cCk6CisgICAgICAg
ICogaHRtbC9EYXRlSW5wdXRUeXBlLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKERh
dGVJbnB1dFR5cGUpOgorICAgICAgICAqIGxvYWRlci9FbXB0eUNsaWVudHMuaDoKKyAgICAgICAg
KCk6CisgICAgICAgICogbWFrZS1maWxlLWFycmF5cy5weTogQWRkZWQuCisgICAgICAgIChtYWtl
X3ZhcmlhYmxlX25hbWVfYW5kX3JlYWQpOgorICAgICAgICAobWFpbik6CisgICAgICAgICogcGFn
ZS9DaHJvbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lOjpvcGVuSFRNTFBvcHVwKToK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lOjpjbG9zZUhUTUxQ
b3B1cCk6CisgICAgICAgICogcGFnZS9DaHJvbWUuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoQ2hyb21lKToKKyAgICAgICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChDaHJvbWVDbGllbnQpOgorICAgICAgICAqIHBsYXRmb3JtL0hU
TUxQb3B1cC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQ
b3B1cFR5cGUuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSFRNTFBvcHVwKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxQb3B1cDo6fkhUTUxQb3B1cCk6CisgICAgICAgICogcGxhdGZv
cm0vSFRNTFBvcHVwQ2xpZW50Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYlBvcHVwTWVudS5oLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChIVE1M
UG9wdXBDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBvcHVwQ2xpZW50Ojp+SFRNTFBv
cHVwQ2xpZW50KToKKwogMjAxMi0wNC0wMiAgQWJoaXNoZWsgQXJ5YSAgPGluZmVybm9AY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIDxzZWxlY3Q+IHNob3VsZG4ndCBpbnRydWRlIGFzIGEgcnVuLWlu
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA1ZWJmN2U2YzM0YjBmMzVmY2RiMGQwNzA4
YmFmZDVkNTY4M2QyNTgxLi4zZTQ5ZTZjMGNmNjZjMTNhNTQwNDE0YTgzMDJmMDE0MTA1YTc5ZmQw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyNSBAQAorMjAxMi0wMi0x
NSAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50
IGEgY2FsZW5kYXIgcGlja2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01Mzk2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAgICAgICAgKiBmZWF0dXJlcy5neXBpOgorICAgICAg
ICAqIHB1YmxpYy9XZWJQb3B1cE1lbnUuaDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChX
ZWJIVE1MUG9wdXApOgorICAgICAgICAqIHB1YmxpYy9XZWJQb3B1cFR5cGUuaDoKKyAgICAgICAg
KCk6CisgICAgICAgICogcHVibGljL1dlYlZpZXdDbGllbnQuaDoKKyAgICAgICAgKFdlYktpdCk6
CisgICAgICAgICogc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpD
aHJvbWVDbGllbnRJbXBsOjpvcGVuSFRNTFBvcHVwKToKKyAgICAgICAgKFdlYktpdCk6CisgICAg
ICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudEltcGw6OmNsb3NlSFRNTFBvcHVwKToKKyAgICAgICAg
KiBzcmMvQ2hyb21lQ2xpZW50SW1wbC5oOgorICAgICAgICAoQ2hyb21lQ2xpZW50SW1wbCk6Cisg
ICAgICAgICogc3JjL1dlYkhUTUxQb3B1cEltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dCk6CisgICAgICAgIChIVE1MUG9wdXBDaHJvbWVDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpI
VE1MUG9wdXBDaHJvbWVDbGllbnQ6OkhUTUxQb3B1cENocm9tZUNsaWVudCk6CisgICAgICAgICgp
OgorICAgICAgICAoV2ViS2l0OjpXZWJIVE1MUG9wdXBJbXBsOjpXZWJIVE1MUG9wdXBJbXBsKToK
KyAgICAgICAgKFdlYktpdDo6V2ViSFRNTFBvcHVwSW1wbDo6fldlYkhUTUxQb3B1cEltcGwpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJIVE1MUG9wdXBJbXBsOjppbml0KToKKyAgICAgICAgKFdlYktp
dDo6V2ViSFRNTFBvcHVwSW1wbDo6aW5pdFBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJIVE1M
UG9wdXBJbXBsOjpzZXRWYWx1ZUFuZENsb3NlUG9wdXBDYWxsYmFjayk6CisgICAgICAgIChXZWJL
aXQ6OldlYkhUTUxQb3B1cEltcGw6OmxheW91dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkhUTUxQ
b3B1cEltcGw6OnBhaW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViSFRNTFBvcHVwSW1wbDo6cmVz
aXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViSFRNTFBvcHVwSW1wbDo6aGFuZGxlSW5wdXRFdmVu
dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkhUTUxQb3B1cEltcGw6OmhhbmRsZUtleUV2ZW50KToK
KyAgICAgICAgKFdlYktpdDo6V2ViSFRNTFBvcHVwSW1wbDo6c2V0Rm9jdXMpOgorICAgICAgICAo
V2ViS2l0OjpXZWJIVE1MUG9wdXBJbXBsOjpjbG9zZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkhU
TUxQb3B1cEltcGw6OmNsb3NlUG9wdXApOgorICAgICAgICAoV2ViS2l0OjpXZWJIVE1MUG9wdXA6
OmNyZWF0ZSk6CisgICAgICAgICogc3JjL1dlYkhUTUxQb3B1cEltcGwuaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJIVE1MUG9wdXBJ
bXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViSFRNTFBvcHVwSW1wbDo6d2lkZ2V0Q2xpZW50KToK
KyAgICAgICAgKCk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlld0ltcGw6OmtleUV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0lt
cGw6OmNoYXJFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpwb3B1cE9wZW5l
ZCk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cG9w
dXBDbG9zZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0Rm9jdXMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6aGlkZVBvcHVwcyk6CisgICAgICAgICogc3JjL1dl
YlZpZXdJbXBsLmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViVmlld0ltcGwpOgor
ICAgICAgICAoKToKKworMjAxMi0wMy0xMyAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBBZGQgUGFnZVBvcHVwIGltcGxlbWVudGF0aW9uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTA4MQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBXZWJQYWdl
UG9wdXBJbXBsIGNsYXNzLCB3aGljaCBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZgorICAgICAgICBX
ZWJDb3JlOjpQYWdlUG9wdXAgaW50ZXJmYWNlIGFuZCBXZWJLaXQ6OldlYlBhZ2VQb3B1cCBpbnRl
cmZhY2UuIEl0J3MgYQorICAgICAgICBXZWJXaWRnZXQgd2hpY2ggaGFzIGEgUGFnZSBvYmplY3Qu
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2UgdGhpcyBtYWtlcyBubyBiZWhhdmlvciBj
aGFuZ2UgeWV0LgorCisgICAgICAgICogV2ViS2l0Lmd5cDogQWRkIFdlYlBhZ2VQb3B1cEltcGwu
aAorICAgICAgICAqIHNyYy9DaHJvbWVDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
Q2hyb21lQ2xpZW50SW1wbDo6aGFzT3BlbmVkUG9wdXApOgorICAgICAgICBEZWxlZ2F0ZSB0byBX
ZWJWaWV3SW1wbDo6aGFzT3BlbmVkUG9wdXAoKS4KKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xp
ZW50SW1wbDo6b3BlblBhZ2VQb3B1cCk6CisgICAgICAgIEFkZGVkLiBDYWxjdWxhdGVzIGEgZ29v
ZCBib3VuZGluZyByZWN0YW5nbGUgb2YgdGhlIHBhZ2UgcG9wdXAgZnJvbSB0aGUKKyAgICAgICAg
c3BlY2lmaWVkIGVsZW1lbnQgcmVjdGFuZ2xlLgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGll
bnRJbXBsOjpjbG9zZVBhZ2VQb3B1cCk6IEFkZGVkLgorICAgICAgICAqIHNyYy9DaHJvbWVDbGll
bnRJbXBsLmg6CisgICAgICAgIChDaHJvbWVDbGllbnRJbXBsKTogQWRkIGRlbGFyYXRpb25zIG9m
IG9wZW5QYWdlUG9wdXAgYW5kIGNsb3NlUGFnZVBvcHVwLgorICAgICAgICAqIHNyYy9XZWJQYWdl
UG9wdXBJbXBsLmNwcDoKKyAgICAgICAgKFBhZ2VQb3B1cENocm9tZUNsaWVudCk6CisgICAgICAg
IFRoaXMgaXMgYSBsaWdodCBpbXBsZW1lbnRhdGlvbiBvZiBDaHJvbWVDbGllbnQgZm9yIHRoZSBw
YWdlIGluCisgICAgICAgIFdlYlBhZ2VQb3B1cEltcGwuIFRoaXMgaXMgYSBmcmllbmQgb2YgV2Vi
UGFnZVBvcHVwSW1wbCBiZWNhc2Ugb2YgZWFzZSBvZgorICAgICAgICBhY2Nlc3MgdG8gaXRzIG1l
bWJlcnMuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQb3B1cEltcGw6OldlYlBhZ2VQb3B1cElt
cGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUG9wdXBJbXBsOjp+V2ViUGFnZVBvcHVwSW1w
bCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQb3B1cEltcGw6OmluaXQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUG9wdXBJbXBsOjppbml0UGFnZSk6CisgICAgICAgIE1ha2UgYSBQYWdl
IGFuZCBpbmplY3Qgc2V0VmFsdWVBbmRDbG9zZVBvcHVwIGZ1bmN0aW9uLgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUG9wdXBJbXBsOjpzZXRWYWx1ZUFuZENsb3NlUG9wdXBDYWxsYmFjayk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQb3B1cEltcGw6OnNpemUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUG9wdXBJbXBsOjphbmltYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBv
cHVwSW1wbDo6Y29tcG9zaXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBvcHVwSW1wbDo6
bGF5b3V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBvcHVwSW1wbDo6cGFpbnQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUG9wdXBJbXBsOjpyZXNpemUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUG9wdXBJbXBsOjpoYW5kbGVJbnB1dEV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVBvcHVwSW1wbDo6aGFuZGxlS2V5RXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUG9wdXBJbXBsOjpzZXRGb2N1cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQb3B1cElt
cGw6OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBvcHVwSW1wbDo6Y2xvc2VQb3B1
cCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQb3B1cDo6Y3JlYXRlKToKKyAgICAgICAgKiBz
cmMvV2ViUGFnZVBvcHVwSW1wbC5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6a2V5RXZlbnQpOiBJZiBhIHZpc2li
bGUgUGFnZVBvcHVwIGV4aXN0cywgZm9yd2FyZCBrZXkgZXZlbnRzIHRvIGl0LgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3SW1wbDo6Y2hhckV2ZW50KTogZGl0dG8uCisgICAgICAgIChXZWJLaXQ6
OldlYlZpZXdJbXBsOjpwb3B1cE9wZW5lZCk6CisgICAgICAgIEFkZGVkLiBSZWdpc3RlciBhbiBv
cGVuaW5nIFBhZ2VQb3B1cC4gU3RvcCBjYXJldCBibGlua2luZy4KKyAgICAgICAgKFdlYktpdDo6
V2ViVmlld0ltcGw6OnBvcHVwQ2xvc2VkKToKKyAgICAgICAgQWRkZWQuIFVucmVnaXN0ZXIgYSBj
bG9zaW5nIFBhZ2VQb3B1cC4gIFJlc3VtZSBjYXJldCBibGlua2luZy4KKyAgICAgICAgKFdlYktp
dDo6V2ViVmlld0ltcGw6OnNldEZvY3VzKToKKyAgICAgICAgVXNlIGhpZGVQb3B1cHMoKSBiZWNh
dXNlIHdlIHdhbnQgdG8gYWRkIGNvZGUgdG8gY2xvc2UgYSBQYWdlUG9wdXAuCisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdJbXBsOjpoaWRlUG9wdXBzKToKKyAgICAgICAgQWRkIGNvZGUgdG8gY2xv
c2UgYSBQYWdlUG9wdXAuCisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmg6CisgICAgICAgIChX
ZWJWaWV3SW1wbCk6IEFkZCBtX3BhZ2VQb3B1cCBkYXRhIG1lbWJlciB0byBzdG9yZSBhIHZpc2li
bGUgUGFnZVBvcHVwLgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6aGFzT3BlbmVkUG9w
dXApOiBBZGRlZC4KKwogMjAxMi0wNC0wMiAgTWFyayBQaWxncmltICA8cGlsZ3JpbUBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgQ2FsbCBkZWNyZW1lbnRTdGF0c0NvdW50ZXIgZGlyZWN0bHkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9jYWxlbmRhclBpY2tlci5jc3MgYi9T
b3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvY2FsZW5kYXJQaWNrZXIuY3NzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk3
YWM3NDI0ZDEyYjM1OGY3YTJlMGIxZTQwMjk3Mzg0ZDliOWMyM2IKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvY2FsZW5kYXJQaWNrZXIuY3NzCkBAIC0wLDAgKzEs
MjUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworaHRtbCB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7Cit9CisKK2Jv
ZHkgeworICAgIGJhY2tncm91bmQtY29sb3I6IHB1cnBsZTsKKyAgICBmb250OiAtd2Via2l0LXNt
YWxsLWNvbnRyb2w7CisgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKKyAgICBtYXJnaW46
IDA7CisgICAgb3ZlcmZsb3c6IGhpZGRlbjsKKyAgICBwYWRkaW5nOiAyMHB4IDBweCAwcHggMHB4
OworfQorCisvKjpmb2N1cyB7CisgICAgb3V0bGluZTogYXV0byA1cHggLXdlYmtpdC1mb2N1cy1y
aW5nLWNvbG9yKi8KKyAgICBvdXRsaW5lOiBzb2xpZCA1cHggbGltZTsKK30qLworCisubm8tZm9j
dXMtcmluZyA6Zm9jdXMgeworICAgIG91dGxpbmU6IG5vbmU7Cit9CisKKy5idWJibGUtYXJyb3cg
eworICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7Cisg
ICAgbGVmdDogNjRweDsKKyAgICB3aWR0aDogMThweDsKKyAgICBoZWlnaHQ6IDE4cHg7CisgICAg
YmFja2dyb3VuZC1jb2xvcjogI2YwZjhmZjsKKyAgICBib3JkZXI6IHNvbGlkIDFweCAjODg5OWFh
OworICAgIGJvcmRlci13aWR0aDogMXB4IDAgMCAxcHg7CisgICAgYm94LXNoYWRvdzogaW5zZXQg
MnB4IDJweCAycHggd2hpdGU7CisgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiAwIDA7Cisg
ICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7CisgICAgei1pbmRleDogMTAxOwor
fQorCisuYnViYmxlLWFycm93LWNsaXBwZXIgeworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIG92
ZXJmbG93OiBoaWRkZW47CisgICAgaGVpZ2h0OiAxNi43cHg7Cit9CisKKyNtYWluIHsKKyAgICB4
eC16LWluZGV4OiAxMDA7CisgICAgeHgtcG9zaXRpb246IHJlbGF0aXZlOworICAgIHh4LXRvcDog
LTNweDsgLyogYm9yZGVyLXdpZHRoICsgc2hhZG93LWhlaWdodCAqLworICAgIHBhZGRpbmc6IDZw
eDsKKyAgICBiYWNrZ3JvdW5kOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxl
ZnQgYm90dG9tLCBmcm9tKCNmMGY4ZmYpLCB0bygjY2NkZGVlKSk7CisgICAgYm9yZGVyOiBzb2xp
ZCAxcHggIzg4OTlhYTsKKyAgICB4eC1ib3JkZXItcmFkaXVzOiA2cHg7CisgICAgYm94LXNoYWRv
dzogaW5zZXQgMnB4IDJweCAycHggd2hpdGUsCisgICAgICAgIGluc2V0IC0ycHggLTJweCAxcHgg
cmdiYSgwLDAsMCwwLjEpOworfQorCisueWVhci1tb250aC1hcmVhIHsKK30KKworLnllYXItbW9u
dGgtdXBwZXIgeworLyogICAgd2lkdGg6IDEwMCU7Ki8KKyAgICBkaXNwbGF5OiAtd2Via2l0LWJv
eDsKK30KKworLnllYXItc2VsZWN0b3IgeworICAgIHdpZHRoOiA2ZW07CisgICAgdGV4dC1hbGln
bjogcmlnaHQ7Cit9CisKKy5tb250aC1zZWxlY3Rvci1ib3ggeworICAgIGRpc3BsYXk6IGlubGlu
ZS1ib3g7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworICAgIC13ZWJraXQtYm94LWZsZXg6IDI7
Cit9CisKKy5tb250aC1zZWxlY3RvciB7CisgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICAg
IGJhY2tncm91bmQtY29sb3I6IHdoaXRlOworICAgIHBhZGRpbmc6IDNweCA2cHggM3B4IDZweDsK
KyAgICBjdXJzb3I6IHBvaW50ZXI7Cit9CisubW9udGgtc2VsZWN0b3I6YWZ0ZXIgeworICAgIGNv
bnRlbnQ6ICIg4pa8IjsKKyAgICBmb250LXNpemU6IHNtYWxsZXI7Cit9CisKKy5tb250aC1zZWxl
Y3Rvci1wb3B1cCB7CisgICAgZGlzcGxheTogbm9uZTsKK30KKworLnllYXItbW9udGgtYnV0dG9u
cyB7Cit9CisKKy8qIEZJWE1FOiBXZSdkIGxpa2UgdG8gdXNlIHRoZSBzdGFuZGFyZCBidXR0b24g
YXBwZWFyYW5jZSBmb3Igbm9uLU1hYy4gKi8KKy55ZWFyLW1vbnRoLWJ1dHRvbiB7CisgICAgLXdl
YmtpdC1hcHBlYXJhbmNlOiBub25lOworICAgIGJhY2tncm91bmQ6IC13ZWJraXQtZ3JhZGllbnQo
bGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGZyb20oI2VlZSksIGNvbG9yLXN0b3AoMC40
LCAjZmZmKSwgY29sb3Itc3RvcCgwLjYsICNkZGRkZGQpLCB0bygjZWVlKSk7CisgICAgYm9yZGVy
OiBzb2xpZCAxcHggIzQ0NDsKKyAgICBib3JkZXItcmFkaXVzOiAzcHg7CisgICAgYm94LXNoYWRv
dzogaW5zZXQgMXB4IDFweCAxcHggcmdiYSgyNTUsMjU1LDI1NSwwLjQpLCBpbnNldCAtMXB4IC0x
cHggMXB4IHJnYmEoMjU1LDI1NSwyNTUsMC40KTsKKyAgICBwYWRkaW5nLWxlZnQ6IDNweDsKKyAg
ICBwYWRkaW5nLXJpZ2h0OiAzcHg7Cit9CisKKy55ZWFyLW1vbnRoLWJ1dHRvbjpob3ZlciB7Cisg
ICAgYmFja2dyb3VuZDogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJv
dHRvbSwgZnJvbSgjZTBmMGZmKSwgY29sb3Itc3RvcCgwLjQsICNlMGYwZmYpLCBjb2xvci1zdG9w
KDAuNiwgI2IwZTBmZiksIHRvKCNiMGUwZmYpKTsKKyAgICBib3JkZXI6IHNvbGlkIDFweCAjNDQ4
OworfQorCisueWVhci1tb250aC1idXR0b246YWN0aXZlIHsKKyAgICBib3JkZXI6IHNvbGlkIDFw
eCBibGFjazsKKyAgICBib3gtc2hhZG93OiBpbnNldCAxcHggMXB4IDFweCByZ2JhKDAsMCwwLDAu
MyksIGluc2V0IC0xcHggLTFweCAxcHggcmdiYSgwLDAsMCwwLjMpOworfQorCisueWVhci1tb250
aC1idXR0b246ZGlzYWJsZWQgeworICAgIGNvbG9yOiAjODg4OworICAgIGJhY2tncm91bmQ6IC13
ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGZyb20oI2VlZSks
IGNvbG9yLXN0b3AoMC40LCAjZmZmKSwgY29sb3Itc3RvcCgwLjYsICNkZGRkZGQpLCB0bygjZWVl
KSk7CisgICAgYm9yZGVyOiBzb2xpZCAxcHggI2NjYzsKKyAgICBib3gtc2hhZG93OiBpbnNldCAx
cHggMXB4IDFweCByZ2JhKDI1NSwyNTUsMjU1LDAuNCksIGluc2V0IC0xcHggLTFweCAxcHggcmdi
YSgyNTUsMjU1LDI1NSwwLjQpOworfQorCisueWVhci1tb250aC1idXR0b24tbGVmdCB7CisgICAg
ZGlzcGxheTogaW5saW5lLWJsb2NrOworfQorCisueWVhci1tb250aC1idXR0b24tcmlnaHQgewor
ICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKK30KKworLmRheXMtYXJlYS1jb250YWluZXIgewor
LyogICAgY2xlYXI6IGxlZnQ7Ki8KKyAgICBtYXJnaW4tdG9wOiA0cHg7CisgICAgbWFyZ2luLWJv
dHRvbTogNHB4OworICAgIG92ZXJmbG93OiBoaWRkZW47CisgICAgYmFja2dyb3VuZC1jb2xvcjog
d2hpdGU7CisgICAgYm9yZGVyOiBzb2xpZCAxcHggYmxhY2s7Cit9CisKKy5kYXlzLWFyZWEgeyAv
KiA8dGFibGU+ICovCisgICAgd2lkdGg6IDEwMCU7CisgICAgdGFibGUtbGF5b3V0OiBmaXhlZDsK
KyAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKKyAgICBib3JkZXItY29sbGFwc2U6IHNlcGFy
YXRlOworICAgIGJvcmRlci1zcGFjaW5nOiAwcHg7CisgICAgZm9udDogLXdlYmtpdC1zbWFsbC1j
b250cm9sOworfQorCisuZGF5LWxhYmVsLWNvbnRhaW5lciB7IC8qIDx0cj4gKi8KK30KKy5kYXkt
bGFiZWwgeyAvKiA8dGg+ICovCisgICAgY29sb3I6ICMyMGM7CisgICAgYmFja2dyb3VuZC1jb2xv
cjogI2NjZWVlZTsKKyAgICBib3JkZXI6IHNvbGlkIDFweCAjYWFjY2NjOworICAgIGJvcmRlci10
b3AtY29sb3I6ICNkZGZmZmY7CisgICAgYm9yZGVyLWxlZnQtY29sb3I6ICNkZGZmZmY7CisgICAg
dGV4dC1hbGlnbjogY2VudGVyOworICAgIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDsK
KworICAgIGJhY2tncm91bmQtY29sb3I6ICNlM2U5ZmY7CisgICAgYm9yZGVyOiBzb2xpZCAxcHgg
I2QwZDRmMDsKKyAgICBib3JkZXItdG9wLWNvbG9yOiAjZjBmNGZmOworICAgIGJvcmRlci1sZWZ0
LWNvbG9yOiAjZjBmNGZmOworICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7Cit9CisKKy53ZWVrLWNv
bnRhaW5lciB7IC8qIDx0cj4gKi8KK30KKy5kYXkgeyAvKiA8dGQ+ICovCisgICAgcGFkZGluZzog
MXB4OworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0
ZTsKKyAgICBib3JkZXI6IDFweCBzb2xpZCB3aGl0ZTsKKyAgICAtd2Via2l0LWJveC1zaXppbmc6
IGJvcmRlci1ib3g7Cit9CisuYXZhaWxhYmxlIHsKKyAgICBjdXJzb3I6IGRlZmF1bHQ7CisgICAg
Zm9udC13ZWlnaHQ6IDcwMDsKKy8qICAgIHRleHQtc2hhZG93OiAxcHggMXB4IDFweCAjZGRkOyov
CisgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CisgICAgYm9yZGVyOiAxcHggc29saWQgd2hp
dGU7CisgICAgYm9yZGVyLXJhZGl1czogNXB4OworICAgIC13ZWJraXQtdHJhbnNpdGlvbjogYWxs
IDAuMnMgZWFzZTsKK30KKworLm5vdC10aGlzLW1vbnRoIHsKKyAgICBmb250LXdlaWdodDogNDAw
OworICAgIHRleHQtc2hhZG93OiBub25lOworICAgIGNvbG9yOiBncmF5dGV4dDsKK30KKworLmF2
YWlsYWJsZS5kYXktc2VsZWN0ZWQgeworICAgIGJhY2tncm91bmQtY29sb3I6IGhpZ2hsaWdodDsK
KyAgICBjb2xvcjogaGlnaGxpZ2h0dGV4dDsKKyAgICB0ZXh0LXNoYWRvdzogbm9uZTsKKy8vICAg
IGJhY2tncm91bmQ6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0
b20sIGZyb20oI2NjZWVmZiksIHRvKGhpZ2hsaWdodCkpOworfQorCisudW5hdmFpbGFibGUgewor
LyogICAgY3Vyc29yOiBub3QtYWxsb3dlZDsqLworICAgIGN1cnNvcjogZGVmYXVsdDsKKyAgICBj
b2xvcjogZ3JheXRleHQ7CisgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZmFmYTsKKyAgICBib3Jk
ZXI6IDFweCBzb2xpZCAjZmFmYWZhOworICAgIC13ZWJraXQtdHJhbnNpdGlvbjogYm9yZGVyLWNv
bG9yIDAuMnMgZWFzZTsKK30KKy51bmF2YWlsYWJsZS11cCB7CisvKiAgICBjdXJzb3I6IHctcmVz
aXplOyovCisvKiBUTyBCRSBSRU1PVkVEICovCit9CisudW5hdmFpbGFibGUtZG93biB7CisvKiAg
ICBjdXJzb3I6IGUtcmVzaXplOyovCisvKiBUTyBCRSBSRU1PVkVEICovCit9CisudW5hdmFpbGFi
bGUuZGF5LXNlbGVjdGVkIHsKKyAgICBib3JkZXI6IDFweCBzb2xpZCBoaWdobGlnaHQ7Cit9CisK
Ky50b2RheS1idXR0b24geworfQorLmNsZWFyLWJ1dHRvbiB7Cit9CisuY2FuY2VsLWJ1dHRvbiB7
CisgICAgZmxvYXQ6IHJpZ2h0OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUmVzb3Vy
Y2VzL2NhbGVuZGFyUGlja2VyLmpzIGIvU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL2NhbGVuZGFy
UGlja2VyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU1ZGQ1NWI0ZjIxMjg0OTE5NzdkMjdhOWZhNjllOGU2YWRl
MzdlZWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvY2FsZW5k
YXJQaWNrZXIuanMKQEAgLTAsMCArMSwxMDE2IEBACisidXNlIHN0cmljdCI7CisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRklYTUU6Cisv
LyAgLSBSVEwKKy8vICAtIFRvdWNoIGV2ZW50PworCisvKioKKyAqIFRoZSBudW1iZXIgb2Ygd2Vl
ayBsaW5lcyBpbiB0aGUgc2NyZWVuLgorICogQGNvbnN0CisgKiBAdHlwZSB7bnVtYmVyfQorICov
Cit2YXIgV0VFS1MgPSA2OworCit2YXIgQ0xBU1MgPSB7CisgICAgQVZBSUxBQkxFOiAnYXZhaWxh
YmxlJywKKyAgICBCVUJCTEVfQVJST1c6ICdidWJibGUtYXJyb3cnLAorICAgIEJVQkJMRV9BUlJP
V19DTElQUEVSOiAnYnViYmxlLWFycm93LWNsaXBwZXInLAorICAgIENBTkNFTF9CVVRUT046ICdj
YW5jZWwtYnV0dG9uJywKKyAgICBDTEVBUl9CVVRUT046ICdjbGVhci1idXR0b24nLAorICAgIERB
WTogJ2RheScsCisgICAgREFZU19BUkVBOiAnZGF5cy1hcmVhJywKKyAgICBEQVlTX0FSRUFfQ09O
VEFJTkVSOiAnZGF5cy1hcmVhLWNvbnRhaW5lcicsCisgICAgREFZX0xBQkVMOiAnZGF5LWxhYmVs
JywKKyAgICBEQVlfTEFCRUxfQ09OVEFJTkVSOiAnZGF5LWxhYmVsLWNvbnRhaW5lcicsCisgICAg
TU9OVEhfU0VMRUNUT1JfQk9YOiAnbW9udGgtc2VsZWN0b3ItYm94JywKKyAgICBNT05USF9TRUxF
Q1RPUjogJ21vbnRoLXNlbGVjdG9yJywKKyAgICBNT05USF9TRUxFQ1RPUl9QT1BVUDogJ21vbnRo
LXNlbGVjdG9yLXBvcHVwJywKKyAgICBOT19GT0NVU19SSU5HOiAnbm8tZm9jdXMtcmluZycsCisg
ICAgTk9UX1RISVNfTU9OVEg6ICdub3QtdGhpcy1tb250aCcsCisgICAgU0VMRUNURUQ6ICdkYXkt
c2VsZWN0ZWQnLAorICAgIFRPREFZX0JVVFRPTjogJ3RvZGF5LWJ1dHRvbicsCisgICAgVE9EQVlf
Q0xFQVJfQVJFQTogJ3RvZGF5LWNsZWFyLWFyZWEnLAorICAgIFVOQVZBSUxBQkxFOiAndW5hdmFp
bGFibGUnLAorICAgIFVOQVZBSUxBQkxFX0RPV046ICd1bmF2YWlsYWJsZS1kb3duJywKKyAgICBV
TkFWQUlMQUJMRV9VUDogJ3VuYXZhaWxhYmxlLXVwJywKKyAgICBXRUVLX0NPTlRBSU5FUjogJ3dl
ZWstY29udGFpbmVyJywKKyAgICBZRUFSX01PTlRIX0FSRUE6ICd5ZWFyLW1vbnRoLWFyZWEnLAor
ICAgIFlFQVJfTU9OVEhfQlVUVE9OOiAneWVhci1tb250aC1idXR0b24nLAorICAgIFlFQVJfTU9O
VEhfQlVUVE9OUzogJ3llYXItbW9udGgtYnV0dG9ucycsCisgICAgWUVBUl9NT05USF9CVVRUT05f
TEVGVDogJ3llYXItbW9udGgtYnV0dG9uLWxlZnQnLAorICAgIFlFQVJfTU9OVEhfQlVUVE9OX1JJ
R0hUOiAneWVhci1tb250aC1idXR0b24tcmlnaHQnLAorICAgIFlFQVJfTU9OVEhfVVBQRVI6ICd5
ZWFyLW1vbnRoLXVwcGVyJywKKyAgICBZRUFSX1NFTEVDVE9SOiAneWVhci1zZWxlY3RvcicsCit9
OworCisvKioKKyAqIEB0eXBlIHtPYmplY3R9CisgKi8KK3ZhciBnbG9iYWwgPSB7CisgICAgYXJn
dW1lbnRzUmVjZWl2ZWQ6IGZhbHNlLAorICAgIGxhc3RYOiAtMSwKKyAgICBsYXN0WTogLTEsCisg
ICAgbGFzdFllYXI6IC0xLAorICAgIGxhc3RNb250aDogLTEsCisgICAgcGFyYW1zOiBudWxsLAor
fTsKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorLy8gVXRpbGl0eSBmdW5jdGlvbnMKKworLyoqCisgKiBAcGFyYW0g
e3N0cmluZ30gaWQKKyAqLworZnVuY3Rpb24gJChpZCkgeworICAgIHJldHVybiBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZChpZCk7Cit9CisKK2Z1bmN0aW9uIGJpbmQoZnVuYywgY29udGV4dCkgewor
ICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkoY29udGV4
dCwgYXJndW1lbnRzKTsKKyAgICB9OworfQorCisvKioKKyAqIEBwYXJhbSB7c3RyaW5nfSB0YWdO
YW1lCisgKiBAcGFyYW0ge3N0cmluZ30gb3B0X2NsYXNzCisgKiBAcGFyYW0ge3N0cmluZ30gb3B0
X3RleHQKKyAqLworZnVuY3Rpb24gY3JlYXRlRWxlbWVudCh0YWdOYW1lLCBvcHRfY2xhc3MsIG9w
dF90ZXh0KSB7CisgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05h
bWUpOworICAgIGlmIChvcHRfY2xhc3MpCisgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdj
bGFzcycsIG9wdF9jbGFzcyk7CisgICAgaWYgKG9wdF90ZXh0KQorICAgICAgICBlbGVtZW50LmFw
cGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG9wdF90ZXh0KSk7CisgICAgcmV0dXJu
IGVsZW1lbnQ7Cit9CisKK2Z1bmN0aW9uIGdldExvY2FsZSgpIHsKKyAgICByZXR1cm4gKGdsb2Jh
bC5wYXJhbXMubG9jYWxlIHx8ICdlbi11cycpLnRvTG93ZXJDYXNlKCk7Cit9CisKK2Z1bmN0aW9u
IGdldExhbmd1YWdlKG9wdF9sb2NhbGUpIHsKKyAgICB2YXIgbG9jYWxlID0gb3B0X2xvY2FsZSB8
fCBnZXRMb2NhbGUoKTsKKyAgICB2YXIgcmVzdWx0ID0gbG9jYWxlLm1hdGNoKC9eKFthLXpBLVpd
KykvKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuICdlbic7CisgICAgcmV0dXJu
IHJlc3VsdFsxXS50b0xvd2VyQ2FzZSgpOworfQorCitmdW5jdGlvbiBmb3JtYXRZZWFyTW9udGgo
eWVhciwgbW9udGgpIHsKKyAgICB2YXIgeWVhclN0cmluZyA9IFN0cmluZyh5ZWFyKTsKKyAgICB2
YXIgbW9udGhTdHJpbmcgPSBnbG9iYWwucGFyYW1zLm1vbnRoTGFiZWxzW21vbnRoXTsKKyAgICBz
d2l0Y2ggKGdldExhbmd1YWdlKCkpIHsKKyAgICBjYXNlICdldSc6CisgICAgY2FzZSAnZmlsJzoK
KyAgICBjYXNlICdsdCc6CisgICAgY2FzZSAnbWwnOgorICAgIGNhc2UgJ210JzoKKyAgICBjYXNl
ICd0bCc6CisgICAgY2FzZSAndXInOgorICAgICAgICByZXR1cm4geWVhclN0cmluZyArICcgJyAr
IG1vbnRoU3RyaW5nOworICAgIGNhc2UgJ2h1JzoKKyAgICAgICAgcmV0dXJuIHllYXJTdHJpbmcg
KyAnLiAnICsgbW9udGhTdHJpbmc7CisgICAgY2FzZSAnamEnOgorICAgICAgICBpZiAoeWVhciA+
IDE5ODkpCisgICAgICAgICAgICB5ZWFyU3RyaW5nID0geWVhclN0cmluZyArICflubQo5bmz5oiQ
JyArICh5ZWFyIC0gMTk4OCkgKyAn5bm0KSAnOworICAgICAgICBlbHNlIGlmICh5ZWFyID09IDE5
ODkpCisgICAgICAgICAgICB5ZWFyU3RyaW5nID0geWVhclN0cmluZyArICflubQo5bmz5oiQ5YWD
5bm0KSAnOworICAgICAgICBlbHNlIGlmICh5ZWFyID49IDE5MjcpCisgICAgICAgICAgICB5ZWFy
U3RyaW5nID0geWVhclN0cmluZyArICflubQo5pit5ZKMJyArICh5ZWFyIC0gMTkyNSkgKyAn5bm0
KSAnOworICAgICAgICBlbHNlIGlmICh5ZWFyID4gMTkxMikKKyAgICAgICAgICAgIHllYXJTdHJp
bmcgPSB5ZWFyU3RyaW5nICsgJ+W5tCjlpKfmraMnICsgKHllYXIgLSAxOTExKSArICflubQpICc7
CisgICAgICAgIGVsc2UgaWYgKHllYXIgPT0gMTkxMiAmJiBtb250aCA+PSA3KQorICAgICAgICAg
ICAgeWVhclN0cmluZyA9IHllYXJTdHJpbmcgKyAn5bm0KOWkp+ato+WFg+W5tCkgJzsKKyAgICAg
ICAgZWxzZSBpZiAoeWVhciA+IDE4NjgpCisgICAgICAgICAgICB5ZWFyU3RyaW5nID0geWVhclN0
cmluZyArICflubQo5piO5rK7JyArICh5ZWFyIC0gMTg2NykgKyAn5bm0KSAnOworICAgICAgICBl
bHNlIGlmICh5ZWFyID09IDE4NjgpCisgICAgICAgICAgICB5ZWFyU3RyaW5nID0geWVhclN0cmlu
ZyArICflubQo5piO5rK75YWD5bm0KSAnOworICAgICAgICBlbHNlCisgICAgICAgICAgICB5ZWFy
U3RyaW5nICs9ICflubQgJzsKKyAgICAgICAgcmV0dXJuIHllYXJTdHJpbmcgKyBtb250aFN0cmlu
ZzsKKyAgICBjYXNlICd6aCc6CisgICAgICAgIHJldHVybiB5ZWFyU3RyaW5nICsgJ+W5tCcgKyBt
b250aFN0cmluZzsKKyAgICBjYXNlICdrbyc6CisgICAgICAgIHJldHVybiB5ZWFyU3RyaW5nICsg
J+uFhCAnICsgbW9udGhTdHJpbmc7CisgICAgY2FzZSAnbHYnOgorICAgICAgICByZXR1cm4geWVh
clN0cmluZyArICcuIGcuICcgKyBtb250aFN0cmluZzsKKyAgICBjYXNlICdwdCc6CisgICAgICAg
IHJldHVybiBtb250aFN0cmluZyArICcgZGUgJyArIHllYXJTdHJpbmc7CisgICAgY2FzZSAnc3In
OgorICAgICAgICByZXR1cm4gbW9udGhTdHJpbmcgKyAnLiAnICsgeWVhclN0cmluZzsKKyAgICBk
ZWZhdWx0OgorICAgICAgICByZXR1cm4gbW9udGhTdHJpbmcgKyAnICcgKyB5ZWFyU3RyaW5nOwor
ICAgIH0KK30KKworZnVuY3Rpb24gY3JlYXRlRGF0ZUZyb21TdHJpbmcob3B0X2N1cnJlbnQpIHsK
KyAgICBpZiAob3B0X2N1cnJlbnQpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IG9wdF9jdXJyZW50
Lm1hdGNoKC8oXGQrKS0oXGQrKS0oXGQrKS8pOworICAgICAgICBpZiAocmVzdWx0KQorICAgICAg
ICAgICAgcmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKE51bWJlcihyZXN1bHRbMV0pLCBOdW1iZXIo
cmVzdWx0WzJdKSAtIDEsIE51bWJlcihyZXN1bHRbM10pKSk7CisgICAgfQorICAgIHZhciBub3cg
PSBuZXcgRGF0ZSgpOworICAgIC8vIENyZWF0ZSBVVEMgZGF0ZSB3aXRoIHNhbWUgbnVtYmVycyBh
cyBsb2NhbCBkYXRlLgorICAgIHJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyhub3cuZ2V0RnVsbFll
YXIoKSwgbm93LmdldE1vbnRoKCksIG5vdy5nZXREYXRlKCkpKTsKK30KKworLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
Ly8gSW5pdGlhbGl6YXRpb24KKworLyoqCisgKiBAcGFyYW0ge0V2ZW50fSBldmVudDsKKyAqLwor
ZnVuY3Rpb24gaGFuZGxlTWVzc2FnZShldmVudCkgeworICAgIGlmIChnbG9iYWwuYXJndW1lbnRz
UmVjZWl2ZWQpCisgICAgICAgIHJldHVybjsKKyAgICBnbG9iYWwuYXJndW1lbnRzUmVjZWl2ZWQg
PSB0cnVlOworICAgIGluaXRpYWxpemUoSlNPTi5wYXJzZShldmVudC5kYXRhKSk7Cit9CisKK2Z1
bmN0aW9uIGhhbmRsZUFyZ3VtZW50c1RpbWVvdXQoKSB7CisgICAgaWYgKGdsb2JhbC5hcmd1bWVu
dHNSZWNlaXZlZCkKKyAgICAgICAgcmV0dXJuOworICAgIHZhciBhcmdzID0geworICAgICAgICBt
b250aExhYmVscyA6IFsnbTEnLCAnbTInLCAnbTMnLCAnbTQnLCAnbTUnLCAnbTYnLAorICAgICAg
ICAgICAgICAgICAgICAgICAnbTcnLCAnbTgnLCAnbTknLCAnbTEwJywgJ20xMScsICdtMTInXSwK
KyAgICAgICAgZGF5TGFiZWxzIDogWydkMScsICdkMicsICdkMycsICdkNCcsICdkNScsICdkNics
ICdkNyddLAorICAgICAgICB0b2RheUxhYmVsIDogJ1RvZGF5JywKKyAgICAgICAgY2xlYXJMYWJl
bCA6ICdDbGVhcicsCisgICAgICAgIGNhbmNlbExhYmVsIDogJ0NhbmNlbCcsCisgICAgICAgIHdl
ZWtTdGFydERheSA6IDAsCisgICAgICAgIHN0ZXAgOiAxLAorICAgIH07CisgICAgaW5pdGlhbGl6
ZShhcmdzKTsKK30KKworLyoqCisgKiBAcGFyYW0geyFPYmplY3R9IGFyZ3MKKyAqLworZnVuY3Rp
b24gZ2V0QXJndW1lbnRFcnJvcihhcmdzKSB7CisgICAgaWYgKCFhcmdzLm1vbnRoTGFiZWxzKQor
ICAgICAgICByZXR1cm4gJ05vIG1vbnRoTGFiZWxzLic7CisgICAgaWYgKGFyZ3MubW9udGhMYWJl
bHMubGVuZ3RoICE9IDEyKQorICAgICAgICByZXR1cm4gJ21vbnRoTGFiZWxzIGlzIG5vdCBhbiBh
cnJheSB3aXRoIDEyIGVsZW1lbnRzLic7CisgICAgaWYgKCFhcmdzLmRheUxhYmVscykKKyAgICAg
ICAgcmV0dXJuICdObyBkYXlMYWJlbHMuJzsKKyAgICBpZiAoYXJncy5kYXlMYWJlbHMubGVuZ3Ro
ICE9IDcpCisgICAgICAgIHJldHVybiAnZGF5TGFiZWxzIGlzIG5vdCBhbiBhcnJheSB3aXRoIDcg
ZWxlbWVudHMuJzsKKyAgICBpZiAoIWFyZ3MuY2xlYXJMYWJlbCkKKyAgICAgICAgcmV0dXJuICdO
byBjbGVhckxhYmVsLic7CisgICAgaWYgKCFhcmdzLnRvZGF5TGFiZWwpCisgICAgICAgIHJldHVy
biAnTm8gdG9kYXlMYWJlbC4nOworICAgIGlmIChhcmdzLndlZWtTdGFydERheSkgeworICAgICAg
ICBpZiAoYXJncy53ZWVrU3RhcnREYXkgPCAwIHx8IGFyZ3Mud2Vla1N0YXJ0RGF5ID4gNikKKyAg
ICAgICAgICAgIHJldHVybiAnSW52YWxpZCB3ZWVrU3RhcnREYXk6ICcgKyBhcmdzLndlZWtTdGFy
dERheTsKKyAgICB9CisgICAgcmV0dXJuICcnOworfQorCisvKioKKyAqIEBwYXJhbSB7IU9iamVj
dH0gYXJncworICovCitmdW5jdGlvbiBpbml0aWFsaXplKGFyZ3MpIHsKKyAgICB2YXIgbWFpbiA9
ICQoJ21haW4nKTsKKyAgICBtYWluLmNsYXNzTGlzdC5hZGQoQ0xBU1MuTk9fRk9DVVNfUklORyk7
CisgICAgLy92YXIgY2xpcHBlciA9IGNyZWF0ZUVsZW1lbnQoJ2RpdicsIENMQVNTLkJVQkJMRV9B
UlJPV19DTElQUEVSKTsKKyAgICAvL21haW4ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoY2xpcHBl
ciwgbWFpbik7CisgICAgLy9jbGlwcGVyLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQoJ2Rpdics
IENMQVNTLkJVQkJMRV9BUlJPVykpOworCisgICAgdmFyIGVycm9yU3RyaW5nID0gZ2V0QXJndW1l
bnRFcnJvcihhcmdzKTsKKyAgICBpZiAoZXJyb3JTdHJpbmcubGVuZ3RoID4gMCkgeworICAgICAg
ICBtYWluLnRleHRDb250ZW50ID0gJ0ludGVybmFsIGVycm9yOiAnICsgZXJyb3JTdHJpbmc7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZ2xvYmFsLnBhcmFtcyA9IGFyZ3M7CisgICAgICAgIGNoZWNr
TGltaXRzKCk7CisgICAgICAgIGxheW91dCgpOworCisgICAgICAgIHZhciBpbml0aWFsRGF0ZSA9
IGNyZWF0ZURhdGVGcm9tU3RyaW5nKGFyZ3MuY3VycmVudFZhbHVlKTsKKyAgICAgICAgaWYgKGlu
aXRpYWxEYXRlIDwgZ2xvYmFsLm1pbmltdW1EYXRlKQorICAgICAgICAgICAgaW5pdGlhbERhdGUg
PSBnbG9iYWwubWluaW11bURhdGU7CisgICAgICAgIGVsc2UgaWYgKGluaXRpYWxEYXRlID4gZ2xv
YmFsLm1heGltdW1EYXRlKQorICAgICAgICAgICAgaW5pdGlhbERhdGUgPSBnbG9iYWwubWF4aW11
bURhdGU7CisgICAgICAgIHNlbGVjdERhdGUoaW5pdGlhbERhdGUpOworCisgICAgICAgIHNldFRp
bWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBpZiAod2luZG93LmZyYW1lRWxlbWVudCkK
KyAgICAgICAgICAgICAgICB3aW5kb3cuZnJhbWVFbGVtZW50LmhlaWdodCA9IGRvY3VtZW50LmJv
ZHkub2Zmc2V0SGVpZ2h0ICsgOCArICdweCc7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICB3aW5kb3cucmVzaXplVG8od2luZG93Lm91dGVyV2lkdGgsIG1haW4ub2Zmc2V0VG9w
ICsgbWFpbi5vZmZzZXRIZWlnaHQpOworCSAgICB9CisgICAgICAgIH0sIDApOworICAgIH0KKyAg
ICBpZiAod2luZG93LmZyYW1lRWxlbWVudCkgeworICAgICAgICB3aW5kb3cuZnJhbWVFbGVtZW50
LnN0eWxlLm9wYWNpdHkgPSAnMS4wJzsKKyAgICAgICAgd2luZG93LmZyYW1lRWxlbWVudC5zdHls
ZS53ZWJraXRUcmFuc2l0aW9uID0gJ2FsbCAwLjJzIGVhc2UnOworICAgIH0KK30KKworZnVuY3Rp
b24gY2hlY2tMaW1pdHMoKSB7CisgICAgLy8gSGFyZCBsaW1pdHMgb2YgdHlwZT1kYXRlLiBTZWUg
V2ViQ29yZS9wbGF0Zm9ybS9EYXRlQ29tcG9uZW50cy5oLgorICAgIGdsb2JhbC5taW5pbXVtRGF0
ZSA9IG5ldyBEYXRlKC02MjEzNTU5NjgwMDAwMC4wKTsKKyAgICBnbG9iYWwubWF4aW11bURhdGUg
PSBuZXcgRGF0ZSg4NjQwMDAwMDAwMDAwMDAwLjApOworICAgIC8vIFNlZSBXZWJDb3JlL2h0bWwv
RGF0ZUlucHV0VHlwZS5jcHAuCisgICAgZ2xvYmFsLnN0ZXAgPSA4NjQwMDAwMDsKKyAgICBpZiAo
Z2xvYmFsLnBhcmFtcy5taW4pIHsKKyAgICAgICAgLy8gV2UgYXNzdW1lIHBhcmFtcy5taW4gaXMg
YSB2YWxpZCBkYXRlLgorICAgICAgICBnbG9iYWwubWluaW11bURhdGUgPSBjcmVhdGVEYXRlRnJv
bVN0cmluZyhnbG9iYWwucGFyYW1zLm1pbik7CisgICAgfQorICAgIGlmIChnbG9iYWwucGFyYW1z
Lm1heCkgeworICAgICAgICAvLyBXZSBhc3N1bWUgcGFyYW1zLm1heCBpcyBhIHZhbGlkIGRhdGUu
CisgICAgICAgIGdsb2JhbC5tYXhpbXVtRGF0ZSA9IGNyZWF0ZURhdGVGcm9tU3RyaW5nKGdsb2Jh
bC5wYXJhbXMubWF4KTsKKyAgICB9CisgICAgaWYgKGdsb2JhbC5wYXJhbXMuc3RlcCkKKyAgICAg
ICAgZ2xvYmFsLnN0ZXAgKj0gZ2xvYmFsLnBhcmFtcy5zdGVwOworfQorCitmdW5jdGlvbiBsYXlv
dXQoKSB7CisgICAgdmFyIG1haW4gPSAkKCdtYWluJyk7CisgICAgdmFyIHBhcmFtcyA9IGdsb2Jh
bC5wYXJhbXM7CisgICAgbWFpbi5yZW1vdmVDaGlsZChtYWluLmZpcnN0Q2hpbGQpOworICAgIGRv
Y3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZUdsb2JhbEtleSk7
CisKKyAgICBnbG9iYWwueWVhck1vbnRoQ29udHJvbGxlciA9IG5ldyBZZWFyTW9udGhDb250cm9s
bGVyMigpOworICAgIGdsb2JhbC55ZWFyTW9udGhDb250cm9sbGVyLmF0dGFjaChwYXJhbXMsIG1h
aW4pOworICAgIHZhciBjb250YWluZXIgPSBsYXlvdXREYXlzKHBhcmFtcywgbWFpbik7CisgICAg
bGF5b3V0QnV0dG9ucyhwYXJhbXMsIG1haW4pOworCisgICAgY29udGFpbmVyLmZvY3VzKCk7Cit9
CisKK2Z1bmN0aW9uIGxheW91dERheXMocGFyYW1zLCBtYWluKSB7CisgICAgdmFyIGVsZW1lbnQg
PSBjcmVhdGVFbGVtZW50KCd0YWJsZScsIENMQVNTLkRBWVNfQVJFQSk7CisgICAgZWxlbWVudC5h
ZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZURheUNsaWNrKTsKKyAgICBlbGVtZW50LmFk
ZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3ZlcicsIGhhbmRsZU1vdXNlT3Zlcik7CisgICAgZWxlbWVu
dC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsIGhhbmRsZU1vdXNlT3V0KTsKKyAgICB2YXIg
Y29udGFpbmVyID0gY3JlYXRlRWxlbWVudCgndHInLCBDTEFTUy5EQVlfTEFCRUxfQ09OVEFJTkVS
KTsKKyAgICB2YXIgd2Vla1N0YXJ0RGF5ID0gZ2xvYmFsLnBhcmFtcy53ZWVrU3RhcnREYXkgfHwg
MDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDc7IGkrKykKKyAgICAgICAgY29udGFpbmVyLmFw
cGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQoJ3RoJywgQ0xBU1MuREFZX0xBQkVMLCBwYXJhbXMuZGF5
TGFiZWxzWyh3ZWVrU3RhcnREYXkgKyBpKSAlIDddKSk7CisgICAgZWxlbWVudC5hcHBlbmRDaGls
ZChjb250YWluZXIpOworICAgIHZhciBkYXlzID0gW107CisgICAgZm9yICh2YXIgdyA9IDA7IHcg
PCBXRUVLUzsgdysrKSB7CisgICAgICAgIGNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoJ3RyJywg
Q0xBU1MuV0VFS19DT05UQUlORVIpOworICAgICAgICB2YXIgd2VlayA9IFtdOworICAgICAgICBm
b3IgKHZhciBkID0gMDsgZCA8IDc7IGQrKykgeworICAgICAgICAgICAgdmFyIGRheSA9IGNyZWF0
ZUVsZW1lbnQoJ3RkJywgQ0xBU1MuREFZLCAnICcpOworICAgICAgICAgICAgZGF5LnNldEF0dHJp
YnV0ZSgnZGF0YS1wb3NpdGlvbi14JywgU3RyaW5nKGQpKTsKKyAgICAgICAgICAgIGRheS5zZXRB
dHRyaWJ1dGUoJ2RhdGEtcG9zaXRpb24teScsIFN0cmluZyh3KSk7CisgICAgICAgICAgICB3ZWVr
LnB1c2goZGF5KTsKKyAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChkYXkpOworICAg
ICAgICB9CisgICAgICAgIGRheXMucHVzaCh3ZWVrKTsKKyAgICAgICAgZWxlbWVudC5hcHBlbmRD
aGlsZChjb250YWluZXIpOworICAgIH0KKyAgICBnbG9iYWwuZGF5cyA9IGRheXM7CisgICAgZ2xv
YmFsLmRheXNBcmVhID0gZWxlbWVudDsKKyAgICBjb250YWluZXIgPSBjcmVhdGVFbGVtZW50KCdk
aXYnLCBDTEFTUy5EQVlTX0FSRUFfQ09OVEFJTkVSKTsKKyAgICBjb250YWluZXIuYXBwZW5kQ2hp
bGQoZWxlbWVudCk7CisgICAgY29udGFpbmVyLnRhYkluZGV4ID0gMDsKKyAgICBjb250YWluZXIu
YWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZURheXNBcmVhS2V5KTsKKyAgICBtYWlu
LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7CisgICAgcmV0dXJuIGNvbnRhaW5lcjsKK30KKworZnVu
Y3Rpb24gbGF5b3V0QnV0dG9ucyhwYXJhbXMsIG1haW4pIHsKKyAgICB2YXIgZWxlbWVudCA9IGNy
ZWF0ZUVsZW1lbnQoJ2RpdicsIENMQVNTLlRPREFZX0NMRUFSX0FSRUEpOworICAgIGdsb2JhbC50
b2RheSA9IGNyZWF0ZUVsZW1lbnQoJ2lucHV0JywgQ0xBU1MuVE9EQVlfQlVUVE9OKTsKKyAgICBn
bG9iYWwudG9kYXkudHlwZSA9ICdidXR0b24nOworICAgIGdsb2JhbC50b2RheS52YWx1ZSA9IHBh
cmFtcy50b2RheUxhYmVsOworICAgIGdsb2JhbC50b2RheS5hZGRFdmVudExpc3RlbmVyKCdjbGlj
aycsIGhhbmRsZVRvZGF5KTsKKyAgICBlbGVtZW50LmFwcGVuZENoaWxkKGdsb2JhbC50b2RheSk7
CisgICAgZ2xvYmFsLmNsZWFyID0gbnVsbDsKKyAgICBpZiAoIXBhcmFtcy5yZXF1aXJlZCkgewor
ICAgICAgICBnbG9iYWwuY2xlYXIgPSBjcmVhdGVFbGVtZW50KCdpbnB1dCcsIENMQVNTLkNMRUFS
X0JVVFRPTik7CisgICAgICAgIGdsb2JhbC5jbGVhci50eXBlID0gJ2J1dHRvbic7CisgICAgICAg
IGdsb2JhbC5jbGVhci52YWx1ZSA9IHBhcmFtcy5jbGVhckxhYmVsOworICAgICAgICBnbG9iYWwu
Y2xlYXIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVDbGVhcik7CisgICAgICAgIGVs
ZW1lbnQuYXBwZW5kQ2hpbGQoZ2xvYmFsLmNsZWFyKTsKKyAgICB9CisgICAgLy9nbG9iYWwuY2Fu
Y2VsID0gY3JlYXRlRWxlbWVudCgnaW5wdXQnLCBDTEFTUy5DQU5DRUxfQlVUVE9OKTsKKyAgICAv
L2dsb2JhbC5jYW5jZWwudHlwZSA9ICdidXR0b24nOworICAgIC8vZ2xvYmFsLmNhbmNlbC52YWx1
ZSA9IHBhcmFtcy5jYW5jZWxMYWJlbDsKKyAgICAvL2dsb2JhbC5jYW5jZWwuYWRkRXZlbnRMaXN0
ZW5lcignY2xpY2snLCBoYW5kbGVDYW5jZWwpOworICAgIC8vZWxlbWVudC5hcHBlbmRDaGlsZChn
bG9iYWwuY2FuY2VsKTsKKyAgICBtYWluLmFwcGVuZENoaWxkKGVsZW1lbnQpOworCisgICAgZ2xv
YmFsLmxhc3RGb2N1c2FibGVDb250cm9sID0gZ2xvYmFsLmNsZWFyIHx8IGdsb2JhbC50b2RheTsK
K30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorCisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICovCitmdW5jdGlvbiBZ
ZWFyTW9udGhDb250cm9sbGVyKCkgeworICAgIHRoaXMueWVhciA9IG51bGw7CisgICAgdGhpcy5t
b250aCA9IG51bGw7Cit9CisKK1llYXJNb250aENvbnRyb2xsZXIucHJvdG90eXBlLmF0dGFjaCA9
IGZ1bmN0aW9uKHBhcmFtcywgbWFpbikgeworICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgdXNlIHR5
cGU9bW9udGggaW4gdGhlIGZ1dHVyZT8KKyAgICB0aGlzLnllYXIgPSBjcmVhdGVFbGVtZW50KCdp
bnB1dCcsIENMQVNTLllFQVJfU0VMRUNUT1IpOworICAgIHRoaXMueWVhci50eXBlID0gJ251bWJl
cic7CisgICAgdGhpcy55ZWFyLm1pbiA9IGdsb2JhbC5taW5pbXVtRGF0ZS5nZXRVVENGdWxsWWVh
cigpOworICAgIHRoaXMueWVhci5tYXggPSBnbG9iYWwubWF4aW11bURhdGUuZ2V0VVRDRnVsbFll
YXIoKTsKKyAgICB0aGlzLnllYXIuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgYmluZCh0aGlz
LmhhbmRsZVllYXJNb250aENoYW5nZSwgdGhpcykpOworICAgIHRoaXMueWVhci5hZGRFdmVudExp
c3RlbmVyKCdpbnB1dCcsIGJpbmQodGhpcy5oYW5kbGVZZWFyTW9udGhDaGFuZ2UsIHRoaXMpKTsK
KyAgICB0aGlzLm1vbnRoID0gY3JlYXRlRWxlbWVudCgnc2VsZWN0JywgQ0xBU1MuTU9OVEhfU0VM
RUNUT1IpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTI7IGkrKykKKyAgICAgICAgdGhpcy5t
b250aC5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KCdvcHRpb24nLCB1bmRlZmluZWQsIHBhcmFt
cy5tb250aExhYmVsc1tpXSkpOworICAgIHRoaXMubW9udGguYWRkRXZlbnRMaXN0ZW5lcignY2hh
bmdlJywgYmluZCh0aGlzLmhhbmRsZVllYXJNb250aENoYW5nZSwgdGhpcykpOworICAgIHZhciBl
bGVtZW50ID0gY3JlYXRlRWxlbWVudCgnZGl2JywgQ0xBU1MuWUVBUl9NT05USF9BUkVBKTsKKyAg
ICBlbGVtZW50LmFwcGVuZENoaWxkKHRoaXMueWVhcik7CisgICAgZWxlbWVudC5hcHBlbmRDaGls
ZCh0aGlzLm1vbnRoKTsKKyAgICBtYWluLmFwcGVuZENoaWxkKGVsZW1lbnQpOworCisgICAgZ2xv
YmFsLmZpcnN0Rm9jdXNhYmxlQ29udHJvbCA9IHRoaXMueWVhcjsKK307CisKK1llYXJNb250aENv
bnRyb2xsZXIucHJvdG90eXBlLmdldFllYXIgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gTnVt
YmVyKHRoaXMueWVhci52YWx1ZSk7Cit9CisKK1llYXJNb250aENvbnRyb2xsZXIucHJvdG90eXBl
LmdldE1vbnRoID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIE51bWJlcih0aGlzLm1vbnRoLnNl
bGVjdGVkSW5kZXgpOworfQorCitZZWFyTW9udGhDb250cm9sbGVyLnByb3RvdHlwZS5zZXRZZWFy
TW9udGggPSBmdW5jdGlvbih5ZWFyLCBtb250aCkgeworICAgIHRoaXMueWVhci52YWx1ZSA9IFN0
cmluZyh5ZWFyKTsKKyAgICB0aGlzLm1vbnRoLnNlbGVjdGVkSW5kZXggPSBtb250aDsKKyAgICB0
aGlzLnVwZGF0ZVVJKCk7Cit9OworCitZZWFyTW9udGhDb250cm9sbGVyLnByb3RvdHlwZS51cGRh
dGVVSSA9IGZ1bmN0aW9uKCkgeworICAgIHZhciBtaW5ZZWFyID0gZ2xvYmFsLm1pbmltdW1EYXRl
LmdldFVUQ0Z1bGxZZWFyKCk7CisgICAgdmFyIG1heFllYXIgPSBnbG9iYWwubWF4aW11bURhdGUu
Z2V0VVRDRnVsbFllYXIoKTsKKyAgICB2YXIgeWVhciA9IHRoaXMuZ2V0WWVhcigpOworICAgIGlm
ICh5ZWFyIDwgbWluWWVhciB8fCB5ZWFyID4gbWF4WWVhcikKKyAgICAgICAgdGhpcy5tb250aC5k
aXNhYmxlZCA9IHRydWU7CisgICAgZWxzZSB7CisgICAgICAgIHRoaXMubW9udGguZGlzYWJsZWQg
PSBmYWxzZTsKKyAgICAgICAgdmFyIG1pbk1vbnRoID0gZ2xvYmFsLm1pbmltdW1EYXRlLmdldFVU
Q01vbnRoKCk7CisgICAgICAgIHZhciBtYXhNb250aCA9IGdsb2JhbC5tYXhpbXVtRGF0ZS5nZXRV
VENNb250aCgpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEyOyBpKyspCisgICAgICAg
ICAgICB0aGlzLm1vbnRoW2ldLmRpc2FibGVkID0geWVhciA9PSBtaW5ZZWFyICYmIGkgPCBtaW5N
b250aCB8fCB5ZWFyID09IG1heFllYXIgJiYgaSA+IG1heE1vbnRoOworICAgIH0KK30KKworWWVh
ck1vbnRoQ29udHJvbGxlci5wcm90b3R5cGUuaGFuZGxlWWVhck1vbnRoQ2hhbmdlID0gZnVuY3Rp
b24oKSB7CisgICAgaWYgKHRoaXMueWVhci52YWx1ZS5sZW5ndGggPD0gMCkKKyAgICAgICAgcmV0
dXJuOworICAgIHZhciBuZXdZZWFyID0gTnVtYmVyKHRoaXMueWVhci52YWx1ZSk7CisgICAgdmFy
IG5ld01vbnRoID0gdGhpcy5tb250aC5zZWxlY3RlZEluZGV4OworICAgIGlmIChuZXdZZWFyID09
IGdsb2JhbC5sYXN0WWVhciAmJiBuZXdNb250aCA9PSBnbG9iYWwubGFzdE1vbnRoKQorICAgICAg
ICByZXR1cm47CisgICAgLy9yZW5kZXJNb250aChuZXdZZWFyLCBuZXdNb250aCk7CisgICAgbmF2
aWdhdGVUb01vbnRoV2l0aEFuaW1hdGlvbihuZXdZZWFyLCBuZXdNb250aCk7CisgICAgZ2xvYmFs
LmRheXNbZ2xvYmFsLmxhc3RZXVtnbG9iYWwubGFzdFhdLmNsYXNzTGlzdC5hZGQoQ0xBU1MuU0VM
RUNURUQpOworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8qKgorICogQGNvbnN0cnVjdG9yCisgKi8KK2Z1
bmN0aW9uIFllYXJNb250aENvbnRyb2xsZXIyKCkgeworICAgIHRoaXMuY3VycmVudFllYXIgPSAt
MTsKKyAgICB0aGlzLmN1cnJlbnRNb250aCA9IC0xOworfQorCitZZWFyTW9udGhDb250cm9sbGVy
Mi5wcm90b3R5cGUuYXR0YWNoID0gZnVuY3Rpb24ocGFyYW1zLCBtYWluKSB7CisgICAgdmFyIGVs
ZW1lbnQgPSBjcmVhdGVFbGVtZW50KCdkaXYnLCBDTEFTUy5ZRUFSX01PTlRIX0FSRUEpOworCisg
ICAgdmFyIGVsZW1lbnQyID0gY3JlYXRlRWxlbWVudCgnZGl2JywgQ0xBU1MuWUVBUl9NT05USF9V
UFBFUik7CisgICAgZWxlbWVudC5hcHBlbmRDaGlsZChlbGVtZW50Mik7CisKKyAgICB0aGlzLmF0
dGFjaExlZnRCdXR0b25zKGVsZW1lbnQyKTsKKworICAgIHZhciBib3ggPSBjcmVhdGVFbGVtZW50
KCdkaXYnLCBDTEFTUy5NT05USF9TRUxFQ1RPUl9CT1gpOworICAgIGVsZW1lbnQyLmFwcGVuZENo
aWxkKGJveCk7CisgICAgLy8gRklYTUU6IFRoZSBwb3B1cC1tZW51IGVtdWxhdGlvbiBieSBhIGxp
c3Rib3ggaXMgbm90IGdyZWF0LgorICAgIHRoaXMubW9udGhQb3B1cCA9IGNyZWF0ZUVsZW1lbnQo
J3NlbGVjdCcsIENMQVNTLk1PTlRIX1NFTEVDVE9SX1BPUFVQKTsKKyAgICB0aGlzLm1vbnRoUG9w
dXAuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgYmluZCh0aGlzLmhhbmRsZVllYXJNb250aENo
YW5nZSwgdGhpcykpOworICAgIGJveC5hcHBlbmRDaGlsZCh0aGlzLm1vbnRoUG9wdXApOworICAg
IHRoaXMubW9udGggPSBjcmVhdGVFbGVtZW50KCdkaXYnLCBDTEFTUy5NT05USF9TRUxFQ1RPUik7
CisgICAgdGhpcy5tb250aC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGJpbmQodGhpcy5zaG93
UG9wdXAsIHRoaXMpKTsKKyAgICBib3guYXBwZW5kQ2hpbGQodGhpcy5tb250aCk7CisKKyAgICAv
L2VsZW1lbnQyID0gY3JlYXRlRWxlbWVudCgnZGl2JywgQ0xBU1MuWUVBUl9NT05USF9CVVRUT05T
KTsKKyAgICAvL2VsZW1lbnQuYXBwZW5kQ2hpbGQoZWxlbWVudDIpOworICAgIHRoaXMuYXR0YWNo
UmlnaHRCdXR0b25zKGVsZW1lbnQyKTsKKworICAgIG1haW4uYXBwZW5kQ2hpbGQoZWxlbWVudCk7
CisgICAgZ2xvYmFsLmZpcnN0Rm9jdXNhYmxlQ29udHJvbCA9IHRoaXMubGVmdDI7IC8vIEZJWE1F
OiBvciB0aGlzLm1vbnRoPworfTsKKworWWVhck1vbnRoQ29udHJvbGxlcjIucHJvdG90eXBlLmF0
dGFjaExlZnRCdXR0b25zID0gZnVuY3Rpb24ocGFyZW50KSB7CisgICAgdmFyIGVsZW1lbnQzID0g
Y3JlYXRlRWxlbWVudCgnZGl2JywgQ0xBU1MuWUVBUl9NT05USF9CVVRUT05fTEVGVCk7CisgICAg
cGFyZW50LmFwcGVuZENoaWxkKGVsZW1lbnQzKTsKKworICAgIC8qCisgICAgdGhpcy5sZWZ0MyA9
IGNyZWF0ZUVsZW1lbnQoJ2lucHV0JywgQ0xBU1MuWUVBUl9NT05USF9CVVRUT04pOworICAgIHRo
aXMubGVmdDMudHlwZSA9ICdidXR0b24nOworICAgIHRoaXMubGVmdDMudmFsdWUgPSAnPDw8JzsK
KyAgICB0aGlzLmxlZnQzLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYmluZCh0aGlzLmhhbmRs
ZUJ1dHRvbkNsaWNrLCB0aGlzKSk7CisgICAgZWxlbWVudDMuYXBwZW5kQ2hpbGQodGhpcy5sZWZ0
Myk7CisgICAgKi8KKworICAgIHRoaXMubGVmdDIgPSBjcmVhdGVFbGVtZW50KCdpbnB1dCcsIENM
QVNTLllFQVJfTU9OVEhfQlVUVE9OKTsKKyAgICB0aGlzLmxlZnQyLnR5cGUgPSAnYnV0dG9uJzsK
KyAgICB0aGlzLmxlZnQyLnZhbHVlID0gJzw8JzsKKyAgICB0aGlzLmxlZnQyLmFkZEV2ZW50TGlz
dGVuZXIoJ2NsaWNrJywgYmluZCh0aGlzLmhhbmRsZUJ1dHRvbkNsaWNrLCB0aGlzKSk7CisgICAg
ZWxlbWVudDMuYXBwZW5kQ2hpbGQodGhpcy5sZWZ0Mik7CisKKyAgICB0aGlzLmxlZnQxID0gY3Jl
YXRlRWxlbWVudCgnaW5wdXQnLCBDTEFTUy5ZRUFSX01PTlRIX0JVVFRPTik7CisgICAgdGhpcy5s
ZWZ0MS50eXBlID0gJ2J1dHRvbic7CisgICAgdGhpcy5sZWZ0MS52YWx1ZSA9ICc8JzsKKyAgICB0
aGlzLmxlZnQxLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYmluZCh0aGlzLmhhbmRsZUJ1dHRv
bkNsaWNrLCB0aGlzKSk7CisgICAgZWxlbWVudDMuYXBwZW5kQ2hpbGQodGhpcy5sZWZ0MSk7Cit9
OworCitZZWFyTW9udGhDb250cm9sbGVyMi5wcm90b3R5cGUuYXR0YWNoUmlnaHRCdXR0b25zID0g
ZnVuY3Rpb24ocGFyZW50KSB7CisgICAgdmFyIGVsZW1lbnQzID0gY3JlYXRlRWxlbWVudCgnZGl2
JywgQ0xBU1MuWUVBUl9NT05USF9CVVRUT05fUklHSFQpOworICAgIHBhcmVudC5hcHBlbmRDaGls
ZChlbGVtZW50Myk7CisgICAgdGhpcy5yaWdodDEgPSBjcmVhdGVFbGVtZW50KCdpbnB1dCcsIENM
QVNTLllFQVJfTU9OVEhfQlVUVE9OKTsKKyAgICB0aGlzLnJpZ2h0MS50eXBlID0gJ2J1dHRvbic7
CisgICAgdGhpcy5yaWdodDEudmFsdWUgPSAnPic7CisgICAgdGhpcy5yaWdodDEuYWRkRXZlbnRM
aXN0ZW5lcignY2xpY2snLCBiaW5kKHRoaXMuaGFuZGxlQnV0dG9uQ2xpY2ssIHRoaXMpKTsKKyAg
ICBlbGVtZW50My5hcHBlbmRDaGlsZCh0aGlzLnJpZ2h0MSk7CisKKyAgICB0aGlzLnJpZ2h0MiA9
IGNyZWF0ZUVsZW1lbnQoJ2lucHV0JywgQ0xBU1MuWUVBUl9NT05USF9CVVRUT04pOworICAgIHRo
aXMucmlnaHQyLnR5cGUgPSAnYnV0dG9uJzsKKyAgICB0aGlzLnJpZ2h0Mi52YWx1ZSA9ICc+Pic7
CisgICAgdGhpcy5yaWdodDIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBiaW5kKHRoaXMuaGFu
ZGxlQnV0dG9uQ2xpY2ssIHRoaXMpKTsKKyAgICBlbGVtZW50My5hcHBlbmRDaGlsZCh0aGlzLnJp
Z2h0Mik7CisKKyAgICAvKgorICAgIHRoaXMucmlnaHQzID0gY3JlYXRlRWxlbWVudCgnaW5wdXQn
LCBDTEFTUy5ZRUFSX01PTlRIX0JVVFRPTik7CisgICAgdGhpcy5yaWdodDMudHlwZSA9ICdidXR0
b24nOworICAgIHRoaXMucmlnaHQzLnZhbHVlID0gJz4+Pic7CisgICAgdGhpcy5yaWdodDMuYWRk
RXZlbnRMaXN0ZW5lcignY2xpY2snLCBiaW5kKHRoaXMuaGFuZGxlQnV0dG9uQ2xpY2ssIHRoaXMp
KTsKKyAgICBlbGVtZW50My5hcHBlbmRDaGlsZCh0aGlzLnJpZ2h0Myk7CisqLworfTsKKworWWVh
ck1vbnRoQ29udHJvbGxlcjIucHJvdG90eXBlLmdldFllYXIgPSBmdW5jdGlvbigpIHsKKyAgICBy
ZXR1cm4gdGhpcy5jdXJyZW50WWVhcjsKK307CisKK1llYXJNb250aENvbnRyb2xsZXIyLnByb3Rv
dHlwZS5nZXRNb250aCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLmN1cnJlbnRNb250
aDsKK307CisKK1llYXJNb250aENvbnRyb2xsZXIyLnByb3RvdHlwZS5zZXRZZWFyTW9udGggPSBm
dW5jdGlvbih5ZWFyLCBtb250aCkgeworICAgIHRoaXMuY3VycmVudFllYXIgPSB5ZWFyOworICAg
IHRoaXMuY3VycmVudE1vbnRoID0gbW9udGg7CisgICAgdGhpcy51cGRhdGVVSSgpOworfTsKKwor
WWVhck1vbnRoQ29udHJvbGxlcjIucHJvdG90eXBlLnVwZGF0ZVVJID0gZnVuY3Rpb24oKSB7Cisg
ICAgdmFyIG1pbiA9IGdsb2JhbC5taW5pbXVtRGF0ZS5nZXRVVENGdWxsWWVhcigpICogMTIgKyBn
bG9iYWwubWluaW11bURhdGUuZ2V0VVRDTW9udGgoKTsKKyAgICB2YXIgbWF4ID0gZ2xvYmFsLm1h
eGltdW1EYXRlLmdldFVUQ0Z1bGxZZWFyKCkgKiAxMiArIGdsb2JhbC5tYXhpbXVtRGF0ZS5nZXRV
VENNb250aCgpOworICAgIHZhciBjdXJyZW50ID0gdGhpcy5jdXJyZW50WWVhciAqIDEyICsgdGhp
cy5jdXJyZW50TW9udGg7CisgICAgaWYgKHRoaXMubGVmdDMpCisgICAgICAgIHRoaXMubGVmdDMu
ZGlzYWJsZWQgPSBjdXJyZW50IC0gMTMgPCBtaW47CisgICAgdGhpcy5sZWZ0Mi5kaXNhYmxlZCA9
IGN1cnJlbnQgLSAyIDwgbWluOworICAgIHRoaXMubGVmdDEuZGlzYWJsZWQgPSBjdXJyZW50IC0g
MSA8IG1pbjsKKyAgICB0aGlzLnJpZ2h0MS5kaXNhYmxlZCA9IGN1cnJlbnQgKyAxID4gbWF4Owor
ICAgIHRoaXMucmlnaHQyLmRpc2FibGVkID0gY3VycmVudCArIDIgPiBtYXg7CisgICAgaWYgKHRo
aXMucmlnaHQzKQorICAgICAgICB0aGlzLnJpZ2h0My5kaXNhYmxlZCA9IGN1cnJlbnQgKyAxMyA+
IG1heDsKKyAgICB0aGlzLm1vbnRoLmlubmVyVGV4dCA9IGZvcm1hdFllYXJNb250aCh0aGlzLmN1
cnJlbnRZZWFyLCB0aGlzLmN1cnJlbnRNb250aCk7CisgICAgd2hpbGUgKHRoaXMubW9udGhQb3B1
cC5oYXNDaGlsZE5vZGVzKCkpCisgICAgICAgIHRoaXMubW9udGhQb3B1cC5yZW1vdmVDaGlsZCh0
aGlzLm1vbnRoUG9wdXAuZmlyc3RDaGlsZCk7CisgICAgZm9yICh2YXIgbSA9IGN1cnJlbnQgLSA2
OyBtIDw9IGN1cnJlbnQgKyA2OyBtKyspIHsKKyAgICAgICAgaWYgKG0gPCBtaW4gfHwgbSA+IG1h
eCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB2YXIgb3B0aW9uID0gY3JlYXRlRWxl
bWVudCgnb3B0aW9uJywgdW5kZWZpbmVkLCBmb3JtYXRZZWFyTW9udGgoTWF0aC5mbG9vcihtIC8g
MTIpLCBtICUgMTIpKTsKKyAgICAgICAgb3B0aW9uLnZhbHVlID0gU3RyaW5nKE1hdGguZmxvb3Io
bSAvIDEyKSkgKyAnLScgKyBTdHJpbmcobSAlIDEyKTsKKyAgICAgICAgdGhpcy5tb250aFBvcHVw
LmFwcGVuZENoaWxkKG9wdGlvbik7CisgICAgICAgIGlmIChtID09IGN1cnJlbnQpCisgICAgICAg
ICAgICBvcHRpb24uc2VsZWN0ZWQgPSB0cnVlOworICAgIH0KK307CisKK1llYXJNb250aENvbnRy
b2xsZXIyLnByb3RvdHlwZS5zaG93UG9wdXAgPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLm1vbnRo
UG9wdXAuc2l6ZSA9IE1hdGgubWF4KDQsIE1hdGgubWluKDEwLCB0aGlzLm1vbnRoUG9wdXAubGVu
Z3RoKSk7CisgICAgdGhpcy5tb250aFBvcHVwLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOworICAg
IHRoaXMubW9udGhQb3B1cC5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7CisgICAgdGhpcy5t
b250aFBvcHVwLnN0eWxlLnpJbmRleCA9ICcxMDAwJzsgLy8gTGFyZ2VyIHRoYW4gdGhlIGRheXMg
YXJlYS4KKyAgICB0aGlzLm1vbnRoUG9wdXAuc3R5bGUubGVmdCA9IHRoaXMubW9udGgub2Zmc2V0
TGVmdCArICdweCc7CisgICAgdGhpcy5tb250aFBvcHVwLnN0eWxlLnRvcCA9IHRoaXMubW9udGgu
b2Zmc2V0VG9wICsgdGhpcy5tb250aC5vZmZzZXRIZWlnaHQgKyAncHgnOworICAgIHRoaXMubW9u
dGhQb3B1cC5mb2N1cygpOworCisgICAgLy8gRklYTUU6IEFkZCBhIHRyYW5zcGFyZW50IGVsZW1l
bnQgd2hpY2ggY292ZXJzIHRoZSB3aG9sZSBjb250ZW50IG9mICNtYWluCisgICAgLy8gaW4gb3Jk
ZXIgdG8gZGlzYWJsZSBtb3VzZSBldmVudCBoYW5kbGluZyBvZiBvdGhlciBlbGVtZW50LgorfTsK
KworWWVhck1vbnRoQ29udHJvbGxlcjIucHJvdG90eXBlLmhhbmRsZVllYXJNb250aENoYW5nZSA9
IGZ1bmN0aW9uKCkgeworICAgIHRoaXMubW9udGhQb3B1cC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUn
OworICAgIGNvbnNvbGUubG9nKCdoYW5kbGVZTUM6ICcgKyB0aGlzLm1vbnRoUG9wdXAudmFsdWUp
OworICAgIHZhciByZXN1bHQgPSB0aGlzLm1vbnRoUG9wdXAudmFsdWUubWF0Y2goLyhcZCspLShc
ZCspLyk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybjsKKyAgICB2YXIgbmV3WWVh
ciA9IE51bWJlcihyZXN1bHRbMV0pOworICAgIHZhciBuZXdNb250aCA9IE51bWJlcihyZXN1bHRb
Ml0pOworICAgIGlmIChuZXdZZWFyID09IGdsb2JhbC5sYXN0WWVhciAmJiBuZXdNb250aCA9PSBn
bG9iYWwubGFzdE1vbnRoKQorICAgICAgICByZXR1cm47CisgICAgLy8gRklYTUU6IG5hdmlnYXRl
VG9Nb250aFdpdGhBbmltYXRpb24oKSBzaG91bGQgaGFuZGxlIENMQVNTLlNMRUNURUQ/CisgICAg
bmF2aWdhdGVUb01vbnRoV2l0aEFuaW1hdGlvbihuZXdZZWFyLCBuZXdNb250aCk7CisgICAgaWYg
KGdsb2JhbC5sYXN0WSA+IDAgJiYgZ2xvYmFsLmxhc3RYID4gMCkKKyAgICAgICAgZ2xvYmFsLmRh
eXNbZ2xvYmFsLmxhc3RZXVtnbG9iYWwubGFzdFhdLmNsYXNzTGlzdC5hZGQoQ0xBU1MuU0VMRUNU
RUQpOworfTsKKworWWVhck1vbnRoQ29udHJvbGxlcjIuUFJFVklPVVNfMTBZRUFSUyA9IC0xMjA7
CitZZWFyTW9udGhDb250cm9sbGVyMi5QUkVWSU9VU19ZRUFSID0gLTEyOworWWVhck1vbnRoQ29u
dHJvbGxlcjIuUFJFVklPVVNfTU9OVEggPSAtMTsKK1llYXJNb250aENvbnRyb2xsZXIyLk5FWFRf
TU9OVEggPSAxOworWWVhck1vbnRoQ29udHJvbGxlcjIuTkVYVF9ZRUFSID0gMTI7CitZZWFyTW9u
dGhDb250cm9sbGVyMi5ORVhUX1lFQVJTID0gMTIwOworCitZZWFyTW9udGhDb250cm9sbGVyMi5w
cm90b3R5cGUuaGFuZGxlQnV0dG9uQ2xpY2sgPSBmdW5jdGlvbihldmVudCkgeworICAgIGlmIChl
dmVudC50YXJnZXQgPT0gdGhpcy5sZWZ0MykKKyAgICAgICAgdGhpcy5tb3ZlUmVsYXRpdmVseShZ
ZWFyTW9udGhDb250cm9sbGVyMi5QUkVWSU9VU18xMFlFQVJTKTsKKyAgICBlbHNlIGlmIChldmVu
dC50YXJnZXQgPT0gdGhpcy5sZWZ0MikKKyAgICAgICAgdGhpcy5tb3ZlUmVsYXRpdmVseShZZWFy
TW9udGhDb250cm9sbGVyMi5QUkVWSU9VU19ZRUFSKTsKKyAgICBlbHNlIGlmIChldmVudC50YXJn
ZXQgPT0gdGhpcy5sZWZ0MSkKKyAgICAgICAgdGhpcy5tb3ZlUmVsYXRpdmVseShZZWFyTW9udGhD
b250cm9sbGVyMi5QUkVWSU9VU19NT05USCk7CisgICAgZWxzZSBpZiAoZXZlbnQudGFyZ2V0ID09
IHRoaXMucmlnaHQxKQorICAgICAgICB0aGlzLm1vdmVSZWxhdGl2ZWx5KFllYXJNb250aENvbnRy
b2xsZXIyLk5FWFRfTU9OVEgpCisgICAgZWxzZSBpZiAoZXZlbnQudGFyZ2V0ID09IHRoaXMucmln
aHQyKQorICAgICAgICB0aGlzLm1vdmVSZWxhdGl2ZWx5KFllYXJNb250aENvbnRyb2xsZXIyLk5F
WFRfWUVBUik7CisgICAgZWxzZSBpZiAoZXZlbnQudGFyZ2V0ID09IHRoaXMucmlnaHQzKQorICAg
ICAgICB0aGlzLm1vdmVSZWxhdGl2ZWx5KFllYXJNb250aENvbnRyb2xsZXIyLk5FWFRfMTBZRUFS
Uyk7CisgICAgZWxzZQorICAgICAgICByZXR1cm47Cit9OworCitZZWFyTW9udGhDb250cm9sbGVy
Mi5wcm90b3R5cGUubW92ZVJlbGF0aXZlbHkgPSBmdW5jdGlvbihhbW91bnQpIHsKKyAgICB2YXIg
bWluID0gZ2xvYmFsLm1pbmltdW1EYXRlLmdldFVUQ0Z1bGxZZWFyKCkgKiAxMiArIGdsb2JhbC5t
aW5pbXVtRGF0ZS5nZXRVVENNb250aCgpOworICAgIHZhciBtYXggPSBnbG9iYWwubWF4aW11bURh
dGUuZ2V0VVRDRnVsbFllYXIoKSAqIDEyICsgZ2xvYmFsLm1heGltdW1EYXRlLmdldFVUQ01vbnRo
KCk7CisgICAgdmFyIGN1cnJlbnQgPSB0aGlzLmN1cnJlbnRZZWFyICogMTIgKyB0aGlzLmN1cnJl
bnRNb250aDsKKyAgICB2YXIgdXBkYXRlZCA9IGN1cnJlbnQ7CisgICAgaWYgKGFtb3VudCA8IDAp
IHsKKyAgICAgICAgdXBkYXRlZCA9IGN1cnJlbnQgKyBhbW91bnQgPj0gbWluID8gY3VycmVudCAr
IGFtb3VudCA6IG1pbjsKKyAgICB9IGVsc2UgeworICAgICAgICB1cGRhdGVkID0gY3VycmVudCAr
IGFtb3VudCA8PSBtYXggPyBjdXJyZW50ICsgYW1vdW50IDogbWF4OworICAgIH0KKyAgICBpZiAo
dXBkYXRlZCA9PSBjdXJyZW50KQorICAgICAgICByZXR1cm47CisgICAgbmF2aWdhdGVUb01vbnRo
V2l0aEFuaW1hdGlvbihNYXRoLmZsb29yKHVwZGF0ZWQgLyAxMiksIHVwZGF0ZWQgJSAxMik7Cisg
ICAgaWYgKGdsb2JhbC5sYXN0WSA+IDAgJiYgZ2xvYmFsLmxhc3RYID4gMCkKKyAgICAgICAgZ2xv
YmFsLmRheXNbZ2xvYmFsLmxhc3RZXVtnbG9iYWwubGFzdFhdLmNsYXNzTGlzdC5hZGQoQ0xBU1Mu
U0VMRUNURUQpOworfTsKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitmdW5jdGlvbiBzdGVwTWlzbWF0Y2godGlt
ZSkgeworICAgIHJldHVybiAodGltZSAtIGdsb2JhbC5taW5pbXVtRGF0ZS5nZXRUaW1lKCkpICUg
Z2xvYmFsLnN0ZXAgIT0gMDsKK30KKworZnVuY3Rpb24gb3V0T2ZSYW5nZSh0aW1lKSB7CisgICAg
cmV0dXJuIHRpbWUgPCBnbG9iYWwubWluaW11bURhdGUuZ2V0VGltZSgpIHx8IHRpbWUgPiBnbG9i
YWwubWF4aW11bURhdGUuZ2V0VGltZSgpOworfQorCitmdW5jdGlvbiBpc1ZhbGlkRGF0ZSh0aW1l
KSB7CisgICAgcmV0dXJuICFvdXRPZlJhbmdlKHRpbWUpICYmICFzdGVwTWlzbWF0Y2godGltZSk7
Cit9CisKKy8qKgorICogQHBhcmFtIHtudW1iZXJ9IHllYXIKKyAqIEBwYXJhbSB7bnVtYmVyfSBt
b250aAorICovCitmdW5jdGlvbiByZW5kZXJNb250aCh5ZWFyLCBtb250aCkgeworICAgIGdsb2Jh
bC5sYXN0WWVhciA9IHllYXI7CisgICAgZ2xvYmFsLmxhc3RNb250aCA9IG1vbnRoOworICAgIHZh
ciBkYXlJdGVyYXRvciA9IG5ldyBEYXRlKERhdGUuVVRDKHllYXIsIG1vbnRoLCAxKSk7CisgICAg
ZGF5SXRlcmF0b3Iuc2V0VVRDRnVsbFllYXIoeWVhcik7CisgICAgdmFyIG1vbnRoU3RhcnREYXkg
PSBkYXlJdGVyYXRvci5nZXRVVENEYXkoKTsKKyAgICB2YXIgd2Vla1N0YXJ0RGF5ID0gZ2xvYmFs
LnBhcmFtcy53ZWVrU3RhcnREYXkgfHwgMDsKKyAgICB2YXIgc3RhcnRPZmZzZXQgPSB3ZWVrU3Rh
cnREYXkgLSBtb250aFN0YXJ0RGF5OworICAgIGlmIChzdGFydE9mZnNldCA+PSAwKQorICAgICAg
ICBzdGFydE9mZnNldCAtPSA3OworICAgIGRheUl0ZXJhdG9yLnNldFVUQ0RhdGUoc3RhcnRPZmZz
ZXQgKyAxKTsKKyAgICBmb3IgKHZhciB3ID0gMDsgdyA8IFdFRUtTOyB3KyspIHsKKyAgICAgICAg
Zm9yICh2YXIgZCA9IDA7IGQgPCA3OyBkKyspIHsKKyAgICAgICAgICAgIHZhciBpdGVyWWVhciA9
IGRheUl0ZXJhdG9yLmdldFVUQ0Z1bGxZZWFyKCk7CisgICAgICAgICAgICB2YXIgaXRlck1vbnRo
ID0gZGF5SXRlcmF0b3IuZ2V0VVRDTW9udGgoKTsKKyAgICAgICAgICAgIHZhciB0aW1lID0gZGF5
SXRlcmF0b3IuZ2V0VGltZSgpOworICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBnbG9iYWwuZGF5
c1t3XVtkXTsKKyAgICAgICAgICAgIGVsZW1lbnQuaW5uZXJUZXh0ID0gU3RyaW5nKGRheUl0ZXJh
dG9yLmdldFVUQ0RhdGUoKSk7CisgICAgICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9IENMQVNT
LkRBWTsKKyAgICAgICAgICAgIGVsZW1lbnQuZGF0YXNldC5zdWJtaXRWYWx1ZSA9IGNyZWF0ZURh
dGVTdHJpbmcoaXRlclllYXIsIGl0ZXJNb250aCwgZGF5SXRlcmF0b3IuZ2V0VVRDRGF0ZSgpKTsK
KyAgICAgICAgICAgIGlmIChvdXRPZlJhbmdlKHRpbWUpKSB7CisgICAgICAgICAgICAgICAgZWxl
bWVudC5jbGFzc0xpc3QuYWRkKENMQVNTLlVOQVZBSUxBQkxFKTsKKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAoc3RlcE1pc21hdGNoKHRpbWUpKSB7CisgICAgICAgICAgICAgICAgZWxlbWVudC5jbGFz
c0xpc3QuYWRkKENMQVNTLlVOQVZBSUxBQkxFKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoKGl0
ZXJZZWFyID09IHllYXIgJiYgZGF5SXRlcmF0b3IuZ2V0VVRDTW9udGgoKSA8IG1vbnRoKSB8fCAo
bW9udGggPT0gMCAmJiBpdGVyTW9udGggPT0gMTEpKSB7CisgICAgICAgICAgICAgICAgLy9lbGVt
ZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1MuVU5BVkFJTEFCTEUpOworICAgICAgICAgICAgICAgIC8v
ZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTLlVOQVZBSUxBQkxFX1VQKTsKKyAgICAgICAgICAg
ICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1MuQVZBSUxBQkxFKTsKKyAgICAgICAgICAg
ICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1MuTk9UX1RISVNfTU9OVEgpOworICAgICAg
ICAgICAgfSBlbHNlIGlmICgoaXRlclllYXIgPT0geWVhciAmJiBkYXlJdGVyYXRvci5nZXRVVENN
b250aCgpID4gbW9udGgpIHx8IChtb250aCA9PSAxMSAmJiBpdGVyTW9udGggPT0gMCkpIHsKKyAg
ICAgICAgICAgICAgICAvL2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTUy5VTkFWQUlMQUJMRSk7
CisgICAgICAgICAgICAgICAgLy9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1MuVU5BVkFJTEFC
TEVfRE9XTik7CisgICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTLkFW
QUlMQUJMRSk7CisgICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTLk5P
VF9USElTX01PTlRIKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOYU4odGltZSkpIHsKKyAg
ICAgICAgICAgICAgICBlbGVtZW50LmlubmVyVGV4dCA9ICctJzsKKyAgICAgICAgICAgICAgICBl
bGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1MuVU5BVkFJTEFCTEUpOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1MuQVZBSUxB
QkxFKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRheUl0ZXJhdG9yLnNldFVUQ0RhdGUo
ZGF5SXRlcmF0b3IuZ2V0VVRDRGF0ZSgpICsgMSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBn
bG9iYWwudG9kYXkuZGlzYWJsZWQgPSAhaXNWYWxpZERhdGUoY3JlYXRlRGF0ZUZyb21TdHJpbmco
KS5nZXRUaW1lKCkpOworfQorCisvKioKKyAqIEBwYXJhbSB7bnVtYmVyfSB5ZWFyCisgKiBAcGFy
YW0ge251bWJlcn0gbW9udGgKKyAqLworZnVuY3Rpb24gbmF2aWdhdGVUb01vbnRoKHllYXIsIG1v
bnRoKSB7CisgICAgZ2xvYmFsLnllYXJNb250aENvbnRyb2xsZXIuc2V0WWVhck1vbnRoKHllYXIs
IG1vbnRoKTsKKyAgICByZW5kZXJNb250aCh5ZWFyLCBtb250aCk7Cit9CisKKy8qKgorICogQHBh
cmFtIHtudW1iZXJ9IHllYXIKKyAqIEBwYXJhbSB7bnVtYmVyfSBtb250aAorICogQHBhcmFtIHti
b29sZWFufSByaWdodCBmYWxzZTpsZWZ0LCB0cnVlOnJpZ2h0CisgKi8KK2Z1bmN0aW9uIG5hdmln
YXRlVG9Nb250aFdpdGhBbmltYXRpb24oeWVhciwgbW9udGgpIHsKKyAgICBpZiAoZ2xvYmFsLmxh
c3RZZWFyID49IDAgJiYgZ2xvYmFsLmxhc3RNb250aCA+PSAwKSB7CisgICAgICAgIGlmICh5ZWFy
ID09IGdsb2JhbC5sYXN0WWVhciAmJiBtb250aCA9PSBnbG9iYWwubGFzdE1vbnRoKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB2YXIgZGVjcmVhc2luZyA9IGZhbHNlOworICAgICAgICBp
ZiAoeWVhciA8IGdsb2JhbC5sYXN0WWVhcikgeworICAgICAgICAgICAgZGVjcmVhc2luZyA9IHRy
dWU7CisgICAgICAgIH0gZWxzZSBpZiAoeWVhciA+IGdsb2JhbC5sYXN0WWVhcikgeworICAgICAg
ICAgICAgZGVjcmVhc2luZyA9IGZhbHNlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ZGVjcmVhc2luZyA9IG1vbnRoIDwgZ2xvYmFsLmxhc3RNb250aDsKKyAgICAgICAgfQorICAgICAg
ICB2YXIgZGF5c1N0eWxlID0gZ2xvYmFsLmRheXNBcmVhLnN0eWxlOworICAgICAgICBnbG9iYWwu
ZGF5c0FyZWEuYWRkRXZlbnRMaXN0ZW5lcignd2Via2l0VHJhbnNpdGlvbkVuZCcsIG1vdmVJbkRh
eXMpOworICAgICAgICBkYXlzU3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnOworICAgICAgICBk
YXlzU3R5bGUud2Via2l0VHJhbnNpdGlvbiA9ICdsZWZ0IDAuMXMgZWFzZSc7CisgICAgICAgIGRh
eXNTdHlsZS5sZWZ0ID0gKGRlY3JlYXNpbmcgPyAnJyA6ICctJykgKyBnbG9iYWwuZGF5c0FyZWEu
b2Zmc2V0V2lkdGggKyAncHgnOworICAgIH0KKyAgICBuYXZpZ2F0ZVRvTW9udGgoeWVhciwgbW9u
dGgpOworfQorCitmdW5jdGlvbiBtb3ZlSW5EYXlzKCkgeworICAgIHZhciBkYXlzU3R5bGUgPSBn
bG9iYWwuZGF5c0FyZWEuc3R5bGU7CisgICAgZ2xvYmFsLmRheXNBcmVhLnJlbW92ZUV2ZW50TGlz
dGVuZXIoJ3dlYmtpdFRyYW5zaXRpb25FbmQnLCBtb3ZlSW5EYXlzKTsKKyAgICBkYXlzU3R5bGUu
d2Via2l0VHJhbnNpdGlvbiA9ICcnOworICAgIGRheXNTdHlsZS5sZWZ0ID0gKGRheXNTdHlsZS5s
ZWZ0LmNoYXJBdCgwKSA9PSAnLScgPyAnJyA6ICctJykgKyBnbG9iYWwuZGF5c0FyZWEub2Zmc2V0
V2lkdGggKyAncHgnOworICAgIGdsb2JhbC5kYXlzQXJlYS5vZmZzZXRMZWZ0OyAvLyBGb3JjZSB0
byBsYXlvdXQuCisgICAgZGF5c1N0eWxlLndlYmtpdFRyYW5zaXRpb24gPSAnbGVmdCAwLjFzIGVh
c2UnOworICAgIGRheXNTdHlsZS5sZWZ0ID0gJzBweCc7Cit9CisKKy8qKgorICogQHBhcmFtIHtE
YXRlfSBkYXRlCisgKi8KK2Z1bmN0aW9uIHNlbGVjdERhdGUoZGF0ZSkgeworICAgIG5hdmlnYXRl
VG9Nb250aFdpdGhBbmltYXRpb24oZGF0ZS5nZXRVVENGdWxsWWVhcigpLCBkYXRlLmdldFVUQ01v
bnRoKCkpOworICAgIHZhciBkYXRlU3RyaW5nID0gY3JlYXRlRGF0ZVN0cmluZyhkYXRlLmdldFVU
Q0Z1bGxZZWFyKCksIGRhdGUuZ2V0VVRDTW9udGgoKSwgZGF0ZS5nZXRVVENEYXRlKCkpOworICAg
IGZvciAodmFyIHcgPSAwOyB3IDwgV0VFS1M7IHcrKykgeworICAgICAgICBmb3IgKHZhciBkID0g
MDsgZCA8IDc7IGQrKykgeworICAgICAgICAgICAgaWYgKGdsb2JhbC5kYXlzW3ddW2RdLmRhdGFz
ZXQuc3VibWl0VmFsdWUgPT0gZGF0ZVN0cmluZykgeworICAgICAgICAgICAgICAgIGdsb2JhbC5k
YXlzW3ddW2RdLmNsYXNzTGlzdC5hZGQoQ0xBU1MuU0VMRUNURUQpOworICAgICAgICAgICAgICAg
IGdsb2JhbC5sYXN0WCA9IGQ7CisgICAgICAgICAgICAgICAgZ2xvYmFsLmxhc3RZID0gdzsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30K
KworZnVuY3Rpb24gbWF5YmVTZXRQcmV2aW91c01vbnRoKCkgeworICAgIHZhciB5ZWFyID0gZ2xv
YmFsLnllYXJNb250aENvbnRyb2xsZXIuZ2V0WWVhcigpOworICAgIHZhciBtb250aCA9IGdsb2Jh
bC55ZWFyTW9udGhDb250cm9sbGVyLmdldE1vbnRoKCk7CisgICAgdmFyIHRoaXNNb250aFN0YXJ0
VGltZSA9IERhdGUuVVRDKHllYXIsIG1vbnRoLCAxKTsKKyAgICBpZiAoZ2xvYmFsLm1pbmltdW1E
YXRlLmdldFRpbWUoKSA+PSB0aGlzTW9udGhTdGFydFRpbWUpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAobW9udGggPT0gMCkgeworICAgICAgICB5ZWFyLS07CisgICAgICAgIG1vbnRo
ID0gMTE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbW9udGgtLTsKKyAgICB9CisgICAgbmF2aWdh
dGVUb01vbnRoV2l0aEFuaW1hdGlvbih5ZWFyLCBtb250aCk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Z1bmN0aW9uIG1heWJlU2V0TmV4dE1vbnRoKCkgeworICAgIHZhciB5ZWFyID0gZ2xvYmFs
LnllYXJNb250aENvbnRyb2xsZXIuZ2V0WWVhcigpOworICAgIHZhciBtb250aCA9IGdsb2JhbC55
ZWFyTW9udGhDb250cm9sbGVyLmdldE1vbnRoKCk7CisgICAgaWYgKG1vbnRoID09IDExKSB7Cisg
ICAgICAgIHllYXIrKzsKKyAgICAgICAgbW9udGggPSAwOworICAgIH0gZWxzZSB7CisgICAgICAg
IG1vbnRoKys7CisgICAgfQorICAgIHZhciBuZXh0TW9udGhTdGFydFRpbWUgPSBEYXRlLlVUQyh5
ZWFyLCBtb250aCwgMSk7CisgICAgaWYgKGdsb2JhbC5tYXhpbXVtRGF0ZS5nZXRUaW1lKCkgPCBu
ZXh0TW9udGhTdGFydFRpbWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBuYXZpZ2F0ZVRv
TW9udGhXaXRoQW5pbWF0aW9uKHllYXIsIG1vbnRoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
LyoqCisgKiBAcGFyYW0ge0V2ZW50fSBldmVudAorICovCitmdW5jdGlvbiBoYW5kbGVEYXlDbGlj
ayhldmVudCkgeworICAgIHZhciB5ZWFyID0gZ2xvYmFsLnllYXJNb250aENvbnRyb2xsZXIuZ2V0
WWVhcigpOworICAgIHZhciBtb250aCA9IGdsb2JhbC55ZWFyTW9udGhDb250cm9sbGVyLmdldE1v
bnRoKCk7CisgICAgdmFyIGNsYXNzTGlzdCA9IGV2ZW50LnRhcmdldC5jbGFzc0xpc3Q7CisgICAg
aWYgKGNsYXNzTGlzdC5jb250YWlucyhDTEFTUy5VTkFWQUlMQUJMRV9VUCkpIHsKKyAgICAgICAg
bWF5YmVTZXRQcmV2aW91c01vbnRoKCk7CisgICAgfSBlbHNlIGlmIChjbGFzc0xpc3QuY29udGFp
bnMoQ0xBU1MuVU5BVkFJTEFCTEVfRE9XTikpIHsKKyAgICAgICAgbWF5YmVTZXROZXh0TW9udGgo
KTsKKyAgICB9IGVsc2UgaWYgKGNsYXNzTGlzdC5jb250YWlucyhDTEFTUy5BVkFJTEFCTEUpKSB7
CisgICAgICAgIHN1Ym1pdFZhbHVlKGV2ZW50LnRhcmdldC5kYXRhc2V0LnN1Ym1pdFZhbHVlKTsK
KyAgICB9Cit9CisKKy8qKgorICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudAorICovCitmdW5j
dGlvbiBoYW5kbGVNb3VzZU92ZXIoZXZlbnQpIHsKKyAgICB2YXIgbm9kZSA9IGV2ZW50LnRhcmdl
dDsKKyAgICBpZiAoZ2xvYmFsLmxhc3RYID49IDAgJiYgZ2xvYmFsLmxhc3RZID49IDApCisgICAg
ICAgIGdsb2JhbC5kYXlzW2dsb2JhbC5sYXN0WV1bZ2xvYmFsLmxhc3RYXS5jbGFzc0xpc3QucmVt
b3ZlKENMQVNTLlNFTEVDVEVEKTsKKyAgICBpZiAoIW5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKENM
QVNTLkRBWSkpIHsKKyAgICAgICAgZ2xvYmFsLmxhc3RYID0gLTE7CisgICAgICAgIGdsb2JhbC5s
YXN0WSA9IC0xOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG5vZGUuY2xhc3NMaXN0LmFk
ZChDTEFTUy5TRUxFQ1RFRCk7CisgICAgZ2xvYmFsLmxhc3RYID0gTnVtYmVyKG5vZGUuZGF0YXNl
dC5wb3NpdGlvblgpOworICAgIGdsb2JhbC5sYXN0WSA9IE51bWJlcihub2RlLmRhdGFzZXQucG9z
aXRpb25ZKTsKK30KKworLyoqCisgKi8KK2Z1bmN0aW9uIGhhbmRsZU1vdXNlT3V0KGV2ZW50KSB7
CisgICAgaWYgKGdsb2JhbC5sYXN0WCA+PSAwICYmIGdsb2JhbC5sYXN0WSA+PSAwKQorICAgICAg
ICBnbG9iYWwuZGF5c1tnbG9iYWwubGFzdFldW2dsb2JhbC5sYXN0WF0uY2xhc3NMaXN0LnJlbW92
ZShDTEFTUy5TRUxFQ1RFRCk7CisgICAgZ2xvYmFsLmxhc3RYID0gLTE7CisgICAgZ2xvYmFsLmxh
c3RZID0gLTE7Cit9CisKKy8qKgorICogQHBhcmFtIHtLZXlib2FyZEV2ZW50fSBldmVudAorICov
CitmdW5jdGlvbiBoYW5kbGVEYXlzQXJlYUtleShldmVudCkgeworICAgIG1heWJlVXBkYXRlRm9j
dXNTdHlsZSgpOworICAgIHZhciB4ID0gZ2xvYmFsLmxhc3RYOworICAgIHZhciB5ID0gZ2xvYmFs
Lmxhc3RZOworICAgIHZhciBsb2NhdGVkID0geCA+PSAwICYmIHkgPj0gIDA7CisgICAgdmFyIGtl
eSA9IGV2ZW50LmtleUlkZW50aWZpZXI7CisgICAgaWYgKCFsb2NhdGVkICYmIChrZXkgPT0gJ0xl
ZnQnIHx8IGtleSA9PSAnVXAnIHx8IGtleSA9PSAnUmlnaHQnIHx8IGtleSA9PSAnRG93bicpKSB7
CisgICAgICAgIHVwZGF0ZVNlbGVjdGlvbihldmVudCwgMywgMik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgLy9jb25zb2xlLmxvZygnS0k6ICcgKyBrZXkpOworICAgIGlmIChrZXkgPT0g
J0xlZnQnKSB7CisgICAgICAgIGlmICh4ID09IDApIHsKKyAgICAgICAgICAgIGlmICh5ID09IDAp
IHsKKyAgICAgICAgICAgICAgICBpZiAoIW1heWJlU2V0UHJldmlvdXNNb250aCgpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgeSA9IFdFRUtTIC0gMTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgeS0tOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgeCA9IDY7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB4LS07Cisg
ICAgICAgIH0KKyAgICAgICAgdXBkYXRlU2VsZWN0aW9uKGV2ZW50LCB4LCB5KTsKKyAgICB9IGVs
c2UgaWYgKGtleSA9PSAnVXAnKSB7CisgICAgICAgIGlmICh5ID09IDApIHsKKyAgICAgICAgICAg
IGlmICghbWF5YmVTZXRQcmV2aW91c01vbnRoKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgeSA9IFdFRUtTIC0gMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IHktLTsKKyAgICAgICAgfQorICAgICAgICB1cGRhdGVTZWxlY3Rpb24oZXZlbnQsIHgsIHkpOwor
ICAgIH0gZWxzZSBpZiAoa2V5ID09ICdSaWdodCcpIHsKKyAgICAgICAgaWYgKHggPT0gNikgewor
ICAgICAgICAgICAgaWYgKHkgPT0gV0VFS1MgLSAxKSB7CisgICAgICAgICAgICAgICAgaWYgKCFt
YXliZVNldE5leHRNb250aCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgICAgeSA9IDA7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHkr
KzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHggPSAwOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgeCsrOworICAgICAgICB9CisgICAgICAgIHVwZGF0ZVNlbGVjdGlvbihldmVu
dCwgeCwgeSk7CisgICAgfSBlbHNlIGlmIChrZXkgPT0gJ0Rvd24nKSB7CisgICAgICAgIGlmICh5
ID09IFdFRUtTIC0gMSkgeworICAgICAgICAgICAgaWYgKCFtYXliZVNldE5leHRNb250aCgpKQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHkgPSAwOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgeSsrOworICAgICAgICB9CisgICAgICAgIHVwZGF0ZVNlbGVjdGlv
bihldmVudCwgeCwgeSk7CisgICAgfSBlbHNlIGlmIChrZXkgPT0gJ1BhZ2VVcCcpIHsKKyAgICAg
ICAgaWYgKCFtYXliZVNldFByZXZpb3VzTW9udGgoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgdXBkYXRlU2VsZWN0aW9uKGV2ZW50LCB4LCB5KTsKKyAgICB9IGVsc2UgaWYgKGtleSA9
PSAnUGFnZURvd24nKSB7CisgICAgICAgIGlmICghbWF5YmVTZXROZXh0TW9udGgoKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgdXBkYXRlU2VsZWN0aW9uKGV2ZW50LCB4LCB5KTsKKyAg
ICB9IGVsc2UgaWYgKGxvY2F0ZWQgJiYga2V5ID09ICdFbnRlcicpIHsKKyAgICAgICAgdmFyIGRh
eU5vZGUgPSBnbG9iYWwuZGF5c1t5XVt4XTsKKyAgICAgICAgaWYgKGRheU5vZGUuY2xhc3NMaXN0
LmNvbnRhaW5zKENMQVNTLkFWQUlMQUJMRSkpIHsKKyAgICAgICAgICAgIHN1Ym1pdFZhbHVlKGRh
eU5vZGUuZGF0YXNldC5zdWJtaXRWYWx1ZSk7CisgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFn
YXRpb24oKTsKKyAgICAgICAgfSBlbHNlIGlmIChkYXlOb2RlLmNsYXNzTGlzdC5jb250YWlucyhD
TEFTUy5VTkFWQUlMQUJMRV9VUCkpIHsKKyAgICAgICAgICAgIG1heWJlU2V0UHJldmlvdXNNb250
aCgpOworICAgICAgICAgICAgdXBkYXRlU2VsZWN0aW9uKGV2ZW50LCB4LCB5KTsKKyAgICAgICAg
fSBlbHNlIGlmIChkYXlOb2RlLmNsYXNzTGlzdC5jb250YWlucyhDTEFTUy5VTkFWQUlMQUJMRV9E
T1dOKSkgeworICAgICAgICAgICAgbWF5YmVTZXROZXh0TW9udGgoKTsKKyAgICAgICAgICAgIHVw
ZGF0ZVNlbGVjdGlvbihldmVudCwgeCwgeSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGtl
eSA9PSAnVSswMDU0JykgeyAvLyAndCcgIEZJWE1FOiBtb3ZlIHRvIGdsb2JhbCBoYW5kbGVyLgor
ICAgICAgICBnbG9iYWwuZGF5c1tnbG9iYWwubGFzdFldW2dsb2JhbC5sYXN0WF0uY2xhc3NMaXN0
LnJlbW92ZShDTEFTUy5TRUxFQ1RFRCk7CisgICAgICAgIHNlbGVjdERhdGUobmV3IERhdGUoKSk7
CisgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOworICAgICAgICBldmVudC5wcmV2ZW50
RGVmYXVsdCgpOworICAgIH0KK30KKworZnVuY3Rpb24gdXBkYXRlU2VsZWN0aW9uKGV2ZW50LCB4
LCB5KSB7CisgICAgaWYgKGdsb2JhbC5sYXN0WCA+PSAwICYmIGdsb2JhbC5sYXN0WSA+PSAwKQor
ICAgICAgICBnbG9iYWwuZGF5c1tnbG9iYWwubGFzdFldW2dsb2JhbC5sYXN0WF0uY2xhc3NMaXN0
LnJlbW92ZShDTEFTUy5TRUxFQ1RFRCk7CisgICAgaWYgKHggPj0gMCAmJiB5ID49IDApIHsKKyAg
ICAgICAgZ2xvYmFsLmRheXNbeV1beF0uY2xhc3NMaXN0LmFkZChDTEFTUy5TRUxFQ1RFRCk7Cisg
ICAgICAgIGdsb2JhbC5sYXN0WCA9IHg7CisgICAgICAgIGdsb2JhbC5sYXN0WSA9IHk7CisgICAg
fQorICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOworICAgIGV2ZW50LnByZXZlbnREZWZhdWx0
KCk7Cit9CisKKy8qKgorICogQHBhcmFtIHtudW1iZXJ9IHllYXIKKyAqIEBwYXJhbSB7bnVtYmVy
fSBtb250aAorICogQHBhcmFtIHtudW1iZXJ9IGRheQorICogQHJldHVybiB7c3RyaW5nfQorICov
CitmdW5jdGlvbiBjcmVhdGVEYXRlU3RyaW5nKHllYXIsIG1vbnRoLCBkYXkpIHsKKyAgICB2YXIg
eWVhclN0cmluZyA9IFN0cmluZyh5ZWFyKTsKKyAgICBpZiAoeWVhclN0cmluZy5sZW5ndGggPCA0
KQorICAgICAgICB5ZWFyU3RyaW5nID0gKCcwMDAnICsgeWVhclN0cmluZykuc3Vic3RyKC00LCA0
KTsKKyAgICByZXR1cm4geWVhclN0cmluZyArICctJyArICgnMCcgKyAobW9udGggKyAxKSkuc3Vi
c3RyKC0yLCAyKSArICctJyArICgnMCcgKyBkYXkpLnN1YnN0cigtMiwgMikKK30KKworZnVuY3Rp
b24gaGFuZGxlVG9kYXkoKSB7CisgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgpOworICAgIHNlbGVj
dERhdGUoZGF0ZSk7CisgICAgc3VibWl0VmFsdWUoY3JlYXRlRGF0ZVN0cmluZyhkYXRlLmdldEZ1
bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCkpKTsKK30KKworZnVuY3Rp
b24gaGFuZGxlQ2xlYXIoKSB7CisgICAgc3VibWl0VmFsdWUoJycpOworfQorCisvKioKKyAqIEBw
YXJhbSB7c3RyaW5nfSB2YWx1ZQorICovCitmdW5jdGlvbiBzdWJtaXRWYWx1ZSh2YWx1ZSkgewor
ICAgIC8vdmFyIGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ1RleHRFdmVudCcpOworICAg
IC8vZXZlbnQuaW5pdFRleHRFdmVudCgndGV4dElucHV0JywgZmFsc2UsIGZhbHNlLCB3aW5kb3cs
IHZhbHVlKTsKKyAgICAvL3dpbmRvdy5mcmFtZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChldmVudCk7
CisgICAgd2luZG93LnNldFZhbHVlQW5kQ2xvc2VQb3B1cCgwLCB2YWx1ZSk7Cit9CisKK2Z1bmN0
aW9uIGhhbmRsZUNhbmNlbCgpIHsKKyAgICAvL3ZhciBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2
ZW50KCdFdmVudCcpOworICAgIC8vZXZlbnQuaW5pdEV2ZW50KCdhYm9ydCcsIGZhbHNlLCBmYWxz
ZSk7CisgICAgLy93aW5kb3cuZnJhbWVFbGVtZW50LmRpc3BhdGNoRXZlbnQoZXZlbnQpOworICAg
IHdpbmRvdy5zZXRWYWx1ZUFuZENsb3NlUG9wdXAoLTEsICcnKTsKK30KKworLyoqCisgKiBAcGFy
YW0ge0tleWJvYXJkRXZlbnR9IGV2ZW50CisgKi8KK2Z1bmN0aW9uIGhhbmRsZUdsb2JhbEtleShl
dmVudCkgeworICAgIG1heWJlVXBkYXRlRm9jdXNTdHlsZSgpOworICAgIHZhciBrZXkgPSBldmVu
dC5rZXlJZGVudGlmaWVyOworICAgIGlmIChrZXkgPT0gJ1UrMDAwOScpIHsKKyAgICAgICAgaWYg
KCFldmVudC5zaGlmdEtleSAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IGdsb2JhbC5sYXN0
Rm9jdXNhYmxlQ29udHJvbCkgeworICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7
CisgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICAgICAgZ2xvYmFs
LmZpcnN0Rm9jdXNhYmxlQ29udHJvbC5mb2N1cygpOworICAgICAgICB9IGVsc2UgaWYgKGV2ZW50
LnNoaWZ0S2V5ICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT0gZ2xvYmFsLmZpcnN0Rm9jdXNh
YmxlQ29udHJvbCkgeworICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAg
ICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICAgICAgZ2xvYmFsLmxhc3RG
b2N1c2FibGVDb250cm9sLmZvY3VzKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGtleSA9
PSAnVSswMDREJykgeyAvLyBtCisgICAgICAgIGdsb2JhbC55ZWFyTW9udGhDb250cm9sbGVyLm1v
dmVSZWxhdGl2ZWx5KGV2ZW50LnNoaWZ0S2V5ID8gWWVhck1vbnRoQ29udHJvbGxlcjIuUFJFVklP
VVNfTU9OVEggOiBZZWFyTW9udGhDb250cm9sbGVyMi5ORVhUX01PTlRIKTsKKyAgICB9IGVsc2Ug
aWYgKGtleSA9PSAnVSswMDU5JykgeyAvLyB5CisgICAgICAgIGdsb2JhbC55ZWFyTW9udGhDb250
cm9sbGVyLm1vdmVSZWxhdGl2ZWx5KGV2ZW50LnNoaWZ0S2V5ID8gWWVhck1vbnRoQ29udHJvbGxl
cjIuUFJFVklPVVNfWUVBUiA6IFllYXJNb250aENvbnRyb2xsZXIyLk5FWFRfWUVBUik7CisgICAg
fSBlbHNlIGlmIChrZXkgPT0gJ1UrMDA0NCcpIHsgLy8gZAorICAgICAgICBnbG9iYWwueWVhck1v
bnRoQ29udHJvbGxlci5tb3ZlUmVsYXRpdmVseShldmVudC5zaGlmdEtleSA/IFllYXJNb250aENv
bnRyb2xsZXIyLlBSRVZJT1VTXzEwWUVBUlMgOiBZZWFyTW9udGhDb250cm9sbGVyMi5ORVhUXzEw
WUVBUlMpOworICAgIH0KK30KKworZnVuY3Rpb24gbWF5YmVVcGRhdGVGb2N1c1N0eWxlKCkgewor
ICAgIGlmIChnbG9iYWwuaGFkS2V5RXZlbnQpCisgICAgICAgIHJldHVybjsKKyAgICBnbG9iYWwu
aGFkS2V5RXZlbnQgPSB0cnVlOworICAgICQoJ21haW4nKS5jbGFzc0xpc3QucmVtb3ZlKENMQVNT
Lk5PX0ZPQ1VTX1JJTkcpOworfQorCitpZiAod2luZG93LmRpYWxvZ0FyZ3VtZW50cykgeworICAg
IGluaXRpYWxpemUoZGlhbG9nQXJndW1lbnRzKTsKK30gZWxzZSB7CisgICAgd2luZG93LmFkZEV2
ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBoYW5kbGVNZXNzYWdlLCBmYWxzZSk7CisgICAgd2luZG93
LnNldFRpbWVvdXQoaGFuZGxlQXJndW1lbnRzVGltZW91dCwgMTAwLyoxMDAwKi8pOworfQorCisv
LyAtLS0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9jYWxlbmRhclBpY2tl
ci5wbmcgYi9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvY2FsZW5kYXJQaWNrZXIucG5nCm5ldyBm
aWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjJlN2YwNmE4OTc5OTU4NWE1NjgzOTU1OGQ0NDJiYmQ5MzEzYTQ1ZjQKR0lUIGJpbmFy
eSBwYXRjaApsaXRlcmFsIDk3OQp6Y21lQVNATj8ob2xIeWB1VkJxIWlhMHZwXjNMd25FMz95QmFi
UjdkeWpLeDlqUDdMZUwkLUQkfFNrZkpSOVReeGwKel9IK005V015RHJXKGU+SmFScktKeSNMP08o
RDN4PilCcGVmMUclR01HejNPWTIlUDApbUlDXmd2JW4qPW4xTy1zCnpGYkZkcSZ0SClPNnFHRCtq
VktBdVBiKD07RUp8ZXZOWCpQRChlclorUTdBTGtHdTUqJnd7RDA5RGwrJFVhU1hCVwp6UGZrJGFr
Wl4zXj5+d2koVX5Jc3skPzgrVmN0S284O1hzU2FxNWAoZ3JvZWF4PHFRKSZnX0JkSDl2PClrPllI
KGkKVitrRCNnckdZPnVnUXUmWCVRfmxvQ0lHaCZLKShQMAoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAx
CgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL2NhbGVuZGFyUGlja2VyX3Rl
c3QuaHRtbCBiL1NvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9jYWxlbmRhclBpY2tlcl90ZXN0Lmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNWU0N2E5M2I4NGQ5MzUzYjk5OTc1Y2Y1YzE3YjljYjhlOGYzM2ZlOQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9jYWxlbmRhclBpY2tl
cl90ZXN0Lmh0bWwKQEAgLTAsMCArMSw4OSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxo
ZWFkPgorPG1ldGEgY2hhcnNldD11dGYtOD4KKzx0aXRsZT5DYWxlbmRhciBQaWNrZXIgdGVzdDwv
dGl0bGU+Cis8c3R5bGU+Citib2R5IHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZWVlZTsKK30K
K2lmcmFtZSB7CisgICAgei1pbmRleDogMjE0NzQ4MzY0NzsKKy8qICAgIHBvc2l0aW9uOiBhYnNv
bHV0ZTsqLworLyogICAgYmFja2dyb3VuZC1jb2xvcjogI2RkZWVmZjsgKi8KKyAgICB3aWR0aDog
MjkwcHg7CisgICAgaGVpZ2h0OiAyNTZweDsKKy8qICAgIGJveC1zaGFkb3c6IDRweCA0cHggNHB4
ICNjY2M7Ki8KKyAgICBvcGFjaXR5OiAwOworICAgIGJvcmRlcjogMDsKKyAgICBvdmVyZmxvdzog
aGlkZGVuOworfQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorCis8ZGl2PjxpbnB1dCB0eXBl
PWRhdGUgaWQ9ZGF0ZT48L2Rpdj4KKzxpZnJhbWU+PC9pZnJhbWU+CisKKzxvbCBpZD1jb25zb2xl
IHN0eWxlPSJoZWlnaHQ6MjAwMHB4OyI+Cis8L29sPgorCis8c2NyaXB0PgordmFyIGZyYW1lID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lmcmFtZScpWzBdOwordmFyIGRvYyA9IGZy
YW1lLmNvbnRlbnREb2N1bWVudDsKK2RvYy5kb2N1bWVudEVsZW1lbnQuaW5uZXJIVE1MID0gJzxo
ZWFkPjwvaGVhZD48Ym9keT48ZGl2IGlkPW1haW4+TG9hZGluZy4uLjwvZGl2PjwvYm9keT4nOwor
dmFyIGxpbmsgPSBkb2MuY3JlYXRlRWxlbWVudCgnbGluaycpOworbGluay5yZWwgPSAnc3R5bGVz
aGVldCc7CitsaW5rLmhyZWYgPSAnY2FsZW5kYXJQaWNrZXIuY3NzPycgKyAobmV3IERhdGUoKSku
Z2V0VGltZSgpOworZG9jLmhlYWQuYXBwZW5kQ2hpbGQobGluayk7Cit2YXIgc2NyaXB0ID0gZG9j
LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOworc2NyaXB0LnNyYyA9ICdjYWxlbmRhclBpY2tlci5q
cz8nICsgKG5ldyBEYXRlKCkpLmdldFRpbWUoKTsKK2RvYy5ib2R5LmFwcGVuZENoaWxkKHNjcmlw
dCk7CisKK3ZhciBhcmdzX2VuID0geworICAgIG1vbnRoTGFiZWxzIDogWydKYW51YXJ5JywgJ0Zl
YnJ1YXJ5JywgJ01hcmNoJywgJ0FwcmlsJywgJ01heScsICdKdW5lJywKKyAgICAnSnVseScsICdB
dWd1c3QnLCAnU2VwdGVtYmVyJywgJ09jdG9iZXInLCAnTm92ZW1iZXInLCAnRGVjZW1iZXInXSwK
KyAgICBkYXlMYWJlbHMgOiBbJ1N1bicsICdNb24nLCAnVHVlJywgJ1dlZCcsICdUaHUnLCAnRnJp
JywgJ1NhdCddLAorICAgIHRvZGF5TGFiZWwgOiAnVG9kYXknLAorICAgIGNsZWFyTGFiZWwgOiAn
Q2xlYXInLAorICAgIGNhbmNlbExhYmVsIDogJ0NhbmNlbCcsCisgICAgd2Vla1N0YXJ0RGF5IDog
MCwKKyAgICBzdGVwIDogMSwKKyAgICBtYXggOiAnMjAxMS0xMi0zMScsCit9OwordmFyIGFyZ3Nf
amEgPSB7CisgICAgbG9jYWxlOiAnamEtSlAnLAorICAgIG1vbnRoTGFiZWxzIDogWycx5pyIJywg
JzLmnIgnLCAnM+aciCcsICc05pyIJywgJzXmnIgnLCAnNuaciCcsCisgICAgJzfmnIgnLCAnOOac
iCcsICc55pyIJywgJzEw5pyIJywgJzEx5pyIJywgJzEy5pyIJ10sCisgICAgZGF5TGFiZWxzIDog
Wyfml6UnLCAn5pyIJywgJ+eBqycsICfmsLQnLCAn5pyoJywgJ+mHkScsICflnJ8nXSwKKyAgICB0
b2RheUxhYmVsIDogJ+S7iuaXpScsCisgICAgY2xlYXJMYWJlbCA6ICfjgq/jg6rjgqInLAorICAg
IGNhbmNlbExhYmVsIDogJ+WPluOCiua2iOOBlycsCisgICAgd2Vla1N0YXJ0RGF5IDogMCwKKyAg
ICBzdGVwIDogMSwKKyAgICBtYXggOiAnMjAxMS0wMy0xNScsCit9Oworc2V0VGltZW91dChmdW5j
dGlvbigpIHsgZnJhbWUuY29udGVudFdpbmRvdy5wb3N0TWVzc2FnZShKU09OLnN0cmluZ2lmeShh
cmdzX2phKSwgIioiKTsgfSwgMTAwKTsKKworCitmcmFtZS5hZGRFdmVudExpc3RlbmVyKCd0ZXh0
SW5wdXQnLCBoYW5kbGVUZXh0SW5wdXQpOworZnJhbWUuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQn
LCBoYW5kbGVBYm9ydCk7CisKK2Z1bmN0aW9uIGxvZyhzdHIpIHsKKyAgICB2YXIgZSA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ2xpJyk7CisgICAgZS5pbm5lclRleHQgPSBzdHI7CisgICAgZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5hcHBlbmRDaGlsZChlKTsKK30KKworZnVu
Y3Rpb24gaGFuZGxlVGV4dElucHV0KGV2ZW50KSB7CisgICAgbG9nKCd0ZXh0SW5wdXQgZGF0ZT0n
ICsgZXZlbnQuZGF0YSk7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RhdGUnKS52YWx1
ZSA9IGV2ZW50LmRhdGE7Cit9CisKK2Z1bmN0aW9uIGhhbmRsZUFib3J0KGV2ZW50KSB7CisgICAg
bG9nKCdhYm9ydCcpOworfQorCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKaW5kZXggYzFkOTc1Nzc2NGE0ZGIwYzMyYmY1YWNl
MDRjZjgxNjBmYWJlYTE0MC4uNGRjMTkwOTJmYTBmYmM0ZTE0Nzc1NzQ1MmEzMTllYzAyYzY0YzVl
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKQEAgLTg0MSw2ICs4NDEs
MjUgQEAKICAgICAgICAgICBdLAogICAgICAgICB9LAogICAgICAgICB7CisgICAgICAgICAgJ2Fj
dGlvbl9uYW1lJzogJ0NhbGVuZGFyUGlja2VyJywKKyAgICAgICAgICAnaW5wdXRzJzogWworICAg
ICAgICAgICAgJy4uL1Jlc291cmNlcy9jYWxlbmRhclBpY2tlci5jc3MnLAorICAgICAgICAgICAg
Jy4uL1Jlc291cmNlcy9jYWxlbmRhclBpY2tlci5qcycsCisgICAgICAgICAgXSwKKyAgICAgICAg
ICAnb3V0cHV0cyc6IFsKKyAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93
ZWJraXQvQ2FsZW5kYXJQaWNrZXIuaCcsCisgICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJ
QVRFX0RJUikvd2Via2l0L0NhbGVuZGFyUGlja2VyLmNwcCcsCisgICAgICAgICAgXSwKKyAgICAg
ICAgICAnYWN0aW9uJzogWworICAgICAgICAgICAgJ3B5dGhvbicsCisgICAgICAgICAgICAnLi4v
bWFrZS1maWxlLWFycmF5cy5weScsCisgICAgICAgICAgICAnLS1jb25kaXRpb249RU5BQkxFKENB
TEVOREFSX1BJQ0tFUiknLAorICAgICAgICAgICAgJy0tb3V0LWg9PChTSEFSRURfSU5URVJNRURJ
QVRFX0RJUikvd2Via2l0L0NhbGVuZGFyUGlja2VyLmgnLAorICAgICAgICAgICAgJy0tb3V0LWNw
cD08KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQvQ2FsZW5kYXJQaWNrZXIuY3BwJywK
KyAgICAgICAgICAgICc8QChfaW5wdXRzKScsCisgICAgICAgICAgXSwKKyAgICAgICAgfSwKKyAg
ICAgICAgewogICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICdYTGlua05hbWVzJywKICAgICAgICAg
ICAnaW5wdXRzJzogWwogICAgICAgICAgICAgJy4uL2RvbS9tYWtlX25hbWVzLnBsJywKQEAgLTEw
NzcsNiArMTA5Niw3IEBACiAgICAgICAgICMgQWRkaXRpb25hbCAuY3BwIGZpbGVzIGZyb20gd2Vi
Y29yZV9iaW5kaW5nc19zb3VyY2VzIGFjdGlvbnMuCiAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1F
RElBVEVfRElSKS93ZWJraXQvSFRNTEVsZW1lbnRGYWN0b3J5LmNwcCcsCiAgICAgICAgICc8KFNI
QVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQvSFRNTE5hbWVzLmNwcCcsCisgICAgICAgICc8
KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQvQ2FsZW5kYXJQaWNrZXIuY3BwJywKICAg
ICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdC9FdmVudEZhY3RvcnkuY3Bw
JywKICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdC9FdmVudEhlYWRl
cnMuaCcsCiAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQvRXZlbnRJ
bnRlcmZhY2VzLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGNhNGEyMDliNWJhZTY3ZTIxNjc4NDVj
Zjk4NDBiMzYzZWY5NjU0OGEuLjQ4MGY4ZmJiZjRhYmE1M2JkN2JhOTY2NTFiMmNhNGEwZmYxMDc1
ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTIzNyw2ICsyMzcsOCBAQAogICAgICAgICAgICAgJ3Bh
Z2UvTWVtb3J5SW5mby5oJywKICAgICAgICAgICAgICdwYWdlL1BhZ2UuaCcsCiAgICAgICAgICAg
ICAncGFnZS9QYWdlR3JvdXAuaCcsCisgICAgICAgICAgICAncGFnZS9QYWdlUG9wdXAuaCcsCisg
ICAgICAgICAgICAncGFnZS9QYWdlUG9wdXBDbGllbnQuaCcsCiAgICAgICAgICAgICAncGFnZS9Q
YWdlU2VyaWFsaXplci5oJywKICAgICAgICAgICAgICdwYWdlL1BhZ2VWaXNpYmlsaXR5U3RhdGUu
aCcsCiAgICAgICAgICAgICAncGFnZS9QcmludENvbnRleHQuaCcsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0RhdGVJbnB1dFR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9E
YXRlSW5wdXRUeXBlLmNwcAppbmRleCAyNGJkZDhiYTE1ZDMyMDAwMTQyZmQ4ZmIzOWMxOWZmN2Ew
YjRkMjNhLi5hODJmMGE5MjMyZDRlOTQ4YmRjMTUxMWQ3MTA2ODI0OTkxNGNlM2ExIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0RhdGVJbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvRGF0ZUlucHV0VHlwZS5jcHAKQEAgLTQ2LDYgKzQ2LDExIEBAIHVzaW5nIG5h
bWVzcGFjZSBIVE1MTmFtZXM7CiBzdGF0aWMgY29uc3QgZG91YmxlIGRhdGVEZWZhdWx0U3RlcCA9
IDEuMDsKIHN0YXRpYyBjb25zdCBkb3VibGUgZGF0ZVN0ZXBTY2FsZUZhY3RvciA9IDg2NDAwMDAw
LjA7CiAKK2lubGluZSBEYXRlSW5wdXRUeXBlOjpEYXRlSW5wdXRUeXBlKEhUTUxJbnB1dEVsZW1l
bnQqIGVsZW1lbnQpCisgICAgOiBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUoZWxlbWVudCkKK3sK
K30KKwogUGFzc093blB0cjxJbnB1dFR5cGU+IERhdGVJbnB1dFR5cGU6OmNyZWF0ZShIVE1MSW5w
dXRFbGVtZW50KiBlbGVtZW50KQogewogICAgIHJldHVybiBhZG9wdFB0cihuZXcgRGF0ZUlucHV0
VHlwZShlbGVtZW50KSk7CkBAIC0xMDMsNyArMTA4LDE0IEBAIGJvb2wgRGF0ZUlucHV0VHlwZTo6
c2V0TWlsbGlzZWNvbmRUb0RhdGVDb21wb25lbnRzKGRvdWJsZSB2YWx1ZSwgRGF0ZUNvbXBvbmVu
dHMqCiB2b2lkIERhdGVJbnB1dFR5cGU6OmNyZWF0ZVNoYWRvd1N1YnRyZWUoKQogewogICAgIEJh
c2VEYXRlQW5kVGltZUlucHV0VHlwZTo6Y3JlYXRlU2hhZG93U3VidHJlZSgpOwotICAgIGNvbnRh
aW5lckVsZW1lbnQoKS0+aW5zZXJ0QmVmb3JlKENhbGVuZGFyUGlja2VyRWxlbWVudDo6Y3JlYXRl
KGVsZW1lbnQoKS0+ZG9jdW1lbnQoKSksIGlubmVyQmxvY2tFbGVtZW50KCktPm5leHRTaWJsaW5n
KCksIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgIG1fcGlja2VyRWxlbWVudCA9IENhbGVuZGFy
UGlja2VyRWxlbWVudDo6Y3JlYXRlKGVsZW1lbnQoKS0+ZG9jdW1lbnQoKSk7CisgICAgY29udGFp
bmVyRWxlbWVudCgpLT5pbnNlcnRCZWZvcmUobV9waWNrZXJFbGVtZW50LmdldCgpLCBpbm5lckJs
b2NrRWxlbWVudCgpLT5uZXh0U2libGluZygpLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKK30KKwor
dm9pZCBEYXRlSW5wdXRUeXBlOjpkZXN0cm95U2hhZG93U3VidHJlZSgpCit7CisgICAgVGV4dEZp
ZWxkSW5wdXRUeXBlOjpkZXN0cm95U2hhZG93U3VidHJlZSgpOworICAgIG1fcGlja2VyRWxlbWVu
dC5jbGVhcigpOwogfQogCiBib29sIERhdGVJbnB1dFR5cGU6Om5lZWRzQ29udGFpbmVyKCkgY29u
c3QKQEAgLTExNSw2ICsxMjcsMTIgQEAgYm9vbCBEYXRlSW5wdXRUeXBlOjpzaG91bGRIYXZlU3Bp
bkJ1dHRvbigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQorCit2b2lkIERhdGVJbnB1
dFR5cGU6OmhhbmRsZUJsdXJFdmVudCgpCit7CisgICAgaWYgKG1fcGlja2VyRWxlbWVudCkKKyAg
ICAgICAgbV9waWNrZXJFbGVtZW50LT5jbG9zZVBvcHVwKCk7Cit9CiAjZW5kaWYgLy8gRU5BQkxF
KENBTEVOREFSX1BJQ0tFUikKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9EYXRlSW5wdXRUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0RhdGVJbnB1dFR5cGUuaAppbmRleCBmMDIwZTJlOWEwZDk3YjNmNzQ2ZTc3NmU3OTdhZDMxMjMw
YTk1YmQ0Li5lMTM1YTIxNTBjNjg5NThiYzI4NTUyYWE2NWUyYmU4MWI4MDhjMTFkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0RhdGVJbnB1dFR5cGUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0RhdGVJbnB1dFR5cGUuaApAQCAtMzIsMTcgKzMyLDIwIEBACiAjZGVmaW5lIERh
dGVJbnB1dFR5cGVfaAogCiAjaW5jbHVkZSAiQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlLmgiCisj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiAjaWYgRU5BQkxFKElOUFVUX1RZUEVfREFURSkKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDYWxlbmRhclBpY2tlckVsZW1lbnQ7CisKIGNs
YXNzIERhdGVJbnB1dFR5cGUgOiBwdWJsaWMgQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlIHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxJbnB1dFR5cGU+IGNyZWF0ZShIVE1MSW5wdXRF
bGVtZW50Kik7CiAKIHByaXZhdGU6Ci0gICAgRGF0ZUlucHV0VHlwZShIVE1MSW5wdXRFbGVtZW50
KiBlbGVtZW50KSA6IEJhc2VEYXRlQW5kVGltZUlucHV0VHlwZShlbGVtZW50KSB7IH0KKyAgICBE
YXRlSW5wdXRUeXBlKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpOwogICAgIHZpcnR1YWwgY29u
c3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5cGUoKSBjb25zdCBPVkVSUklERTsKICAgICB2
aXJ0dWFsIERhdGVDb21wb25lbnRzOjpUeXBlIGRhdGVUeXBlKCkgY29uc3QgT1ZFUlJJREU7CiAg
ICAgdmlydHVhbCBkb3VibGUgbWluaW11bSgpIGNvbnN0IE9WRVJSSURFOwpAQCAtNTQsMTAgKzU3
LDE0IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIHNldE1pbGxpc2Vjb25kVG9EYXRlQ29t
cG9uZW50cyhkb3VibGUsIERhdGVDb21wb25lbnRzKikgY29uc3QgT1ZFUlJJREU7CiAjaWYgRU5B
QkxFKENBTEVOREFSX1BJQ0tFUikKICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlU2hhZG93U3VidHJl
ZSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95U2hhZG93U3VidHJlZSgpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVCbHVyRXZlbnQoKSBPVkVSUklERTsKIAog
ICAgIC8vIFRleHRGaWVsZElucHV0VHlwZSBmdW5jdGlvbnMKICAgICB2aXJ0dWFsIGJvb2wgbmVl
ZHNDb250YWluZXIoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSGF2
ZVNwaW5CdXR0b24oKSBjb25zdCBPVkVSUklERTsKKworICAgIFJlZlB0cjxDYWxlbmRhclBpY2tl
ckVsZW1lbnQ+IG1fcGlja2VyRWxlbWVudDsKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ2FsZW5kYXJQaWNrZXJFbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NhbGVuZGFyUGlja2VyRWxlbWVudC5jcHAKaW5kZXggNDFh
M2QyMDlkMDQ1OGYwNWU2NWQ2NmNhNmVjNjFiM2FhOGM1ZTExOS4uNzM3MTJiNTk2YzI0NDM0ZTRl
NzFjNTVlZGZiNTkyZWNmYTIyYWUwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvQ2FsZW5kYXJQaWNrZXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9DYWxlbmRhclBpY2tlckVsZW1lbnQuY3BwCkBAIC0zMyw3ICszMywxNiBAQAogCiAj
aWYgRU5BQkxFKENBTEVOREFSX1BJQ0tFUikKIAorI2luY2x1ZGUgIkNhbGVuZGFyUGlja2VyLmgi
CisjaW5jbHVkZSAiQ2hyb21lLmgiCisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCisjaW5jbHVk
ZSAiRGF0ZUNvbXBvbmVudHMuaCIKKyNpbmNsdWRlICJEb2N1bWVudFdyaXRlci5oIgorI2luY2x1
ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiSFRNTElucHV0
RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKICNp
bmNsdWRlICJSZW5kZXJEZXRhaWxzTWFya2VyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTU2LDYgKzY1LDExMiBAQCBSZW5kZXJPYmplY3QqIENhbGVuZGFyUGlja2VyRWxlbWVudDo6Y3Jl
YXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdAogICAgIHJldHVybiBuZXcg
KGFyZW5hKSBSZW5kZXJEZXRhaWxzTWFya2VyKHRoaXMpOwogfQogCitpbmxpbmUgSFRNTElucHV0
RWxlbWVudCogQ2FsZW5kYXJQaWNrZXJFbGVtZW50Ojpob3N0SW5wdXQoKQoreworICAgIEFTU0VS
VChzaGFkb3dBbmNlc3Rvck5vZGUoKSk7CisgICAgQVNTRVJUKHNoYWRvd0FuY2VzdG9yTm9kZSgp
LT5oYXNUYWdOYW1lKGlucHV0VGFnKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxJbnB1
dEVsZW1lbnQqPihzaGFkb3dBbmNlc3Rvck5vZGUoKSk7Cit9CisKK3ZvaWQgQ2FsZW5kYXJQaWNr
ZXJFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKK3sKKyAgICAvLyBG
SVhNRTogcmVhZG9ubHkgLyBkaXNhYmxlZCBjaGVjay4KKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9
PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCkgeworICAgICAgICBpZiAoIWRvY3VtZW50KCktPnBh
Z2UoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgQ2hyb21lKiBjaHJvbWUgPSBkb2N1
bWVudCgpLT5wYWdlKCktPmNocm9tZSgpOworICAgICAgICBpZiAoIWNocm9tZSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgaWYgKCFkb2N1bWVudCgpLT52aWV3KCkpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIEludFJlY3QgZWxlbWVudFJlY3RJblJvb3RWaWV3ID0gZG9jdW1l
bnQoKS0+dmlldygpLT5jb250ZW50c1RvUm9vdFZpZXcoaG9zdElucHV0KCktPmdldFJlY3QoKSk7
CisgICAgICAgIG1fcG9wdXAgPSBjaHJvbWUtPmNsaWVudCgpLT5vcGVuUGFnZVBvcHVwKHRoaXMs
IGVsZW1lbnRSZWN0SW5Sb290Vmlldyk7CisgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxl
ZCgpOworICAgIH0KKworICAgIGlmICghZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCkpCisgICAgICAg
IEhUTUxEaXZFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKK30KKwordm9pZCBD
YWxlbmRhclBpY2tlckVsZW1lbnQ6OmNsb3NlUG9wdXAoKQoreworICAgIGlmICghbV9wb3B1cCkK
KyAgICAgICAgcmV0dXJuOworICAgIGlmICghZG9jdW1lbnQoKS0+cGFnZSgpKQorICAgICAgICBy
ZXR1cm47CisgICAgQ2hyb21lKiBjaHJvbWUgPSBkb2N1bWVudCgpLT5wYWdlKCktPmNocm9tZSgp
OworICAgIGlmICghY2hyb21lKQorICAgICAgICByZXR1cm47CisgICAgY2hyb21lLT5jbGllbnQo
KS0+Y2xvc2VQYWdlUG9wdXAobV9wb3B1cCk7Cit9CisKK3ZvaWQgQ2FsZW5kYXJQaWNrZXJFbGVt
ZW50OjpkZXRhY2goKQoreworICAgIGNsb3NlUG9wdXAoKTsKKyAgICBIVE1MRGl2RWxlbWVudDo6
ZGV0YWNoKCk7Cit9CisKK0ludFNpemUgQ2FsZW5kYXJQaWNrZXJFbGVtZW50Ojpjb250ZW50U2l6
ZSgpCit7CisgICAgcmV0dXJuIEludFNpemUoMzIwLCAxNTYpOworfQorCisjZGVmaW5lIGFkZExp
dGVyYWwobGl0ZXJhbCwgd3JpdGVyKSAgICB3cml0ZXIuYWRkRGF0YShsaXRlcmFsLCBzaXplb2Yo
bGl0ZXJhbCkgLSAxKQorCitzdGF0aWMgaW5saW5lIHZvaWQgYWRkU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgc3RyLCBEb2N1bWVudFdyaXRlciYgd3JpdGVyKQoreworICAgIENTdHJpbmcgc3RyOCA9IHN0
ci51dGY4KCk7CisgICAgd3JpdGVyLmFkZERhdGEoc3RyOC5kYXRhKCksIHN0cjgubGVuZ3RoKCkp
OworfQorCit2b2lkIENhbGVuZGFyUGlja2VyRWxlbWVudDo6d3JpdGVEb2N1bWVudChEb2N1bWVu
dFdyaXRlciYgd3JpdGVyKQoreworICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gaG9zdElu
cHV0KCk7CisgICAgRGF0ZUNvbXBvbmVudHMgZGF0ZTsKKyAgICBkYXRlLnNldE1pbGxpc2Vjb25k
c1NpbmNlRXBvY2hGb3JEYXRlKGlucHV0LT5taW5pbXVtKCkpOworICAgIFN0cmluZyBtaW5TdHJp
bmcgPSBkYXRlLnRvU3RyaW5nKCk7CisgICAgZGF0ZS5zZXRNaWxsaXNlY29uZHNTaW5jZUVwb2No
Rm9yRGF0ZShpbnB1dC0+bWF4aW11bSgpKTsKKyAgICBTdHJpbmcgbWF4U3RyaW5nID0gZGF0ZS50
b1N0cmluZygpOworICAgIGRvdWJsZSBzdGVwOworICAgIFN0cmluZyBzdGVwU3RyaW5nID0gaW5w
dXQtPmZhc3RHZXRBdHRyaWJ1dGUoc3RlcEF0dHIpOworICAgIGlmIChzdGVwU3RyaW5nLmlzRW1w
dHkoKSB8fCAhaW5wdXQtPmdldEFsbG93ZWRWYWx1ZVN0ZXAoJnN0ZXApKQorICAgICAgICBzdGVw
U3RyaW5nID0gIjEiOworICAgIFN0cmluZ0J1aWxkZXIgc291cmNlOworICAgIGFkZExpdGVyYWwo
IjwhRE9DVFlQRSBodG1sPjxoZWFkPjxtZXRhIGNoYXJzZXQ9J1VURi04Jz48c3R5bGU+XG4iLCB3
cml0ZXIpOworICAgIHdyaXRlci5hZGREYXRhKGNhbGVuZGFyUGlja2VyQ3NzLCBzaXplb2YoY2Fs
ZW5kYXJQaWNrZXJDc3MpKTsKKyAgICBhZGRMaXRlcmFsKCI8L3N0eWxlPjwvaGVhZD48Ym9keT48
ZGl2IGlkPW1haW4+TG9hZGluZy4uLjwvZGl2PjxzY3JpcHQ+XG4iCisgICAgICAgICAgICAgICAi
d2luZG93LmRpYWxvZ0FyZ3VtZW50cyA9IHtcbiIsIHdyaXRlcik7CisgICAgYWRkU3RyaW5nKCIn
bWluJzogJyIgKyBtaW5TdHJpbmcgKyAiJyxcbiIsIHdyaXRlcik7CisgICAgYWRkU3RyaW5nKCIn
bWF4JzogJyIgKyBtYXhTdHJpbmcgKyAiJyxcbiIsIHdyaXRlcik7CisgICAgYWRkU3RyaW5nKCIn
c3RlcCc6ICciICsgc3RlcFN0cmluZyArICInLFxuIiwgd3JpdGVyKTsKKyAgICBhZGRTdHJpbmco
IidjdXJyZW50VmFsdWUnOiAnIiArIGlucHV0LT52YWx1ZSgpICsgIicsXG4iLCB3cml0ZXIpOwor
ICAgIGFkZExpdGVyYWwoIidsb2NhbGUnOiAnamEtSlAnLFxuIgorICAgICAgICAgICAgICAgIidt
b250aExhYmVscyc6WydKYW51YXJ5JywgJ0ZlYnJ1YXJ5JywgJ01hcmNoJywgJ0FwcmlsJywgJ01h
eScsICdKdW5lJywgJ0p1bHknLCAnQXVndXN0JywgJ1NlcHRlbWJlcicsICdPY3RvYmVyJywgJ05v
dmVtYmVyJywgJ0RlY2VtYmVyJ10sXG4iCisgICAgICAgICAgICAgICAiJ2RheUxhYmVscyc6IFsn
U3VuJywgJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScsICdGcmknLCAnU2F0J10sXG4iCisgICAg
ICAgICAgICAgICAiJ3RvZGF5TGFiZWwnOiAnVG9kYXknLFxuIgorICAgICAgICAgICAgICAgIidj
bGVhckxhYmVsJzogJ0NsZWFyJyxcbiIKKyAgICAgICAgICAgICAgICInY2FuY2VsTGFiZWwnOiAn
Q2FuY2VsJyxcbiIKKyAgICAgICAgICAgICAgICInd2Vla1N0YXJ0RGF5JyA6IDAsXG4iCisgICAg
ICAgICAgICAgICAifVxuIiwgd3JpdGVyKTsKKyAgICB3cml0ZXIuYWRkRGF0YShjYWxlbmRhclBp
Y2tlckpzLCBzaXplb2YoY2FsZW5kYXJQaWNrZXJKcykpOworICAgIGFkZExpdGVyYWwoIjwvc2Ny
aXB0PjwvYm9keT5cbiIsIHdyaXRlcik7Cit9CisKK3ZvaWQgQ2FsZW5kYXJQaWNrZXJFbGVtZW50
OjpzZXRWYWx1ZUFuZENsb3NlUG9wdXAoaW50IG51bVZhbHVlLCBjb25zdCBTdHJpbmcmIHN0cmlu
Z1ZhbHVlKQoreworICAgIEFTU0VSVChtX3BvcHVwKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiVz
IG51bT0lZCBzdHI9JyVzJ1xuIiwgX19mdW5jX18sIG51bVZhbHVlLCBzdHJpbmdWYWx1ZS51dGY4
KCkuZGF0YSgpKTsKKworICAgIGNsb3NlUG9wdXAoKTsKKyAgICBpZiAobnVtVmFsdWUgPj0gMCkK
KyAgICAgICAgaG9zdElucHV0KCktPnNldFZhbHVlKHN0cmluZ1ZhbHVlLCBEaXNwYXRjaENoYW5n
ZUV2ZW50KTsKK30KKwordm9pZCBDYWxlbmRhclBpY2tlckVsZW1lbnQ6OmRpZENsb3NlUG9wdXAo
KQoreworICAgIG1fcG9wdXAgPSAwOworfQorCiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ2FsZW5kYXJQaWNrZXJFbGVtZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9DYWxlbmRhclBpY2tlckVsZW1lbnQuaAppbmRleCA1MWM5Yjhm
YWJmNWNmODY0OGE3OTdiYjQ0NmVjOGI2YTFmOGI5ZDU2Li5lY2U4YTM2MWM5YzFlMzIzMGExOGU4
NjBhMGE0ZDI5M2FkYzk0ZmVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRv
dy9DYWxlbmRhclBpY2tlckVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRv
dy9DYWxlbmRhclBpY2tlckVsZW1lbnQuaApAQCAtMzIsMTcgKzMyLDMzIEBACiAjZGVmaW5lIENh
bGVuZGFyUGlja2VyRWxlbWVudF9oCiAKICNpbmNsdWRlICJIVE1MRGl2RWxlbWVudC5oIgorI2lu
Y2x1ZGUgIlBhZ2VQb3B1cENsaWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNz
IENhbGVuZGFyUGlja2VyRWxlbWVudCA6IHB1YmxpYyBIVE1MRGl2RWxlbWVudCB7CitjbGFzcyBI
VE1MSW5wdXRFbGVtZW50OworY2xhc3MgUGFnZVBvcHVwOworCitjbGFzcyBDYWxlbmRhclBpY2tl
ckVsZW1lbnQgOiBwdWJsaWMgSFRNTERpdkVsZW1lbnQsIHB1YmxpYyBQYWdlUG9wdXBDbGllbnQg
ewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbGVuZGFyUGlja2VyRWxlbWVudD4g
Y3JlYXRlKERvY3VtZW50Kik7CisgICAgdm9pZCBjbG9zZVBvcHVwKCk7CiAKIHByaXZhdGU6CiAg
ICAgQ2FsZW5kYXJQaWNrZXJFbGVtZW50KERvY3VtZW50Kik7CiAgICAgdmlydHVhbCBSZW5kZXJP
YmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKSBPVkVSUklE
RTsKLSAgICAvLyBGSVhNRTogYWRkIGNsaWNrIGhhbmRsaW5nLgorICAgIHZpcnR1YWwgdm9pZCBk
ZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRl
dGFjaCgpIE9WRVJSSURFOworCisgICAgLy8gUGFnZVBvcHVwQ2xpZW50IGZ1bmN0aW9uczoKKyAg
ICB2aXJ0dWFsIEludFNpemUgY29udGVudFNpemUoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgd3JpdGVEb2N1bWVudChEb2N1bWVudFdyaXRlciYpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCBzZXRWYWx1ZUFuZENsb3NlUG9wdXAoaW50LCBjb25zdCBTdHJpbmcmKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2xvc2VQb3B1cCgpIE9WRVJSSURFOworCisgICAgSFRNTElu
cHV0RWxlbWVudCogaG9zdElucHV0KCk7CisKKyAgICBQYWdlUG9wdXAqIG1fcG9wdXA7CiB9Owog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9tYWtlLWZpbGUtYXJyYXlzLnB5IGIvU291
cmNlL1dlYkNvcmUvbWFrZS1maWxlLWFycmF5cy5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YzcwYWE4MjE0NDdj
NDU0N2FiYWJkNjZlNzg1YTQ2MTc5YzAwZmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvbWFrZS1maWxlLWFycmF5cy5weQpAQCAtMCwwICsxLDk5IEBACisjIS91c3IvYmluL2Vu
diBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0
cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjIFVzYWdlOiBtYWtlLWZpbGUtYXJyYXlzLnB5
IFstLWNvbmRpdGlvbj1jb25kaXRpb24tc3RyaW5nXSAtLW91dC1oPTxoZWFkZXItZmlsZS1uYW1l
PiAtLW91dC1jcHA9PGNwcC1maWxlLW5hbWU+IDxpbnB1dC1maWxlPi4uLgorCitpbXBvcnQgb3Mu
cGF0aAoraW1wb3J0IHJlCitpbXBvcnQgc3lzCitmcm9tIG9wdHBhcnNlIGltcG9ydCBPcHRpb25Q
YXJzZXIKKworCitkZWYgbWFrZV92YXJpYWJsZV9uYW1lX2FuZF9yZWFkKGZpbGVfbmFtZSwgb3Bl
bl9mbGFnKToKKyAgICByZXN1bHQgPSByZS5tYXRjaChyIihcdyspXC4oXHcrKSIsIG9zLnBhdGgu
YmFzZW5hbWUoZmlsZV9uYW1lKSkKKyAgICBpZiBub3QgcmVzdWx0OgorICAgICAgICBwcmludCAi
SW52YWxpZCBpbnB1dCBmaWxlIG5hbWU6Iiwgb3MucGF0aC5iYXNlbmFtZShmaWxlX25hbWUpCisg
ICAgICAgIHN5cy5leGl0KDEpCisgICAgcHJpbnQgIlByb2Nlc3NpbmciLCBmaWxlX25hbWUKKyAg
ICB2YXJpYWJsZV9uYW1lID0gcmVzdWx0Lmdyb3VwKDEpWzBdLmxvd2VyKCkgKyByZXN1bHQuZ3Jv
dXAoMSlbMTpdICsgcmVzdWx0Lmdyb3VwKDIpLmNhcGl0YWxpemUoKQorICAgIGZpbGUgPSBvcGVu
KGZpbGVfbmFtZSwgb3Blbl9mbGFnKQorICAgIGNvbnRlbnQgPSBmaWxlLnJlYWQoKQorICAgIGZp
bGUuY2xvc2UoKQorICAgIHJldHVybiAodmFyaWFibGVfbmFtZSwgY29udGVudCkKKworCitkZWYg
bWFpbigpOgorICAgIHBhcnNlciA9IE9wdGlvblBhcnNlcigpCisgICAgcGFyc2VyLmFkZF9vcHRp
b24oIi0tb3V0LWgiLCBkZXN0PSJvdXRfaGVhZGVyIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigi
LS1vdXQtY3BwIiwgZGVzdD0ib3V0X2NwcCIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi0tY29u
ZGl0aW9uIiwgZGVzdD0iZmxhZyIpCisgICAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNl
X2FyZ3MoKQorICAgIGlmIGxlbihhcmdzKSA8IDE6CisgICAgICAgIHBhcnNlci5lcnJvcigiTmVl
ZCBvbmUgb3IgbW9yZSBpbnB1dCBmaWxlcyIpCisgICAgaWYgbm90IG9wdGlvbnMub3V0X2hlYWRl
cjoKKyAgICAgICAgcGFyc2VyLmVycm9yKCJOZWVkIHRvIHNwZWNpZnkgLS1vdXQtaD1maWxlbmFt
ZSIpCisgICAgaWYgbm90IG9wdGlvbnMub3V0X2NwcDoKKyAgICAgICAgcGFyc2VyLmVycm9yKCJO
ZWVkIHRvIHNwZWNpZnkgLS1vdXQtY3BwPWZpbGVuYW1lIikKKworICAgIGhlYWRlcl9maWxlID0g
b3BlbihvcHRpb25zLm91dF9oZWFkZXIsICJ3IikKKyAgICBpZiBvcHRpb25zLmZsYWc6CisgICAg
ICAgIGhlYWRlcl9maWxlLndyaXRlKCIjaWYgIiArIG9wdGlvbnMuZmxhZyArICJcbiIpCisgICAg
aGVhZGVyX2ZpbGUud3JpdGUoIm5hbWVzcGFjZSBXZWJDb3JlIHtcbiIpCisKKyAgICBjcHBfZmls
ZSA9IG9wZW4ob3B0aW9ucy5vdXRfY3BwLCAidyIpCisgICAgY3BwX2ZpbGUud3JpdGUoIiNpbmNs
dWRlIFwiY29uZmlnLmhcIlxuIikKKyAgICBjcHBfZmlsZS53cml0ZSgiI2luY2x1ZGUgXCIiICsg
b3MucGF0aC5iYXNlbmFtZShvcHRpb25zLm91dF9oZWFkZXIpICsgIlwiXG4iKTsKKyAgICBpZiBv
cHRpb25zLmZsYWc6CisgICAgICAgIGNwcF9maWxlLndyaXRlKCIjaWYgIiArIG9wdGlvbnMuZmxh
ZyArICJcbiIpCisgICAgY3BwX2ZpbGUud3JpdGUoIm5hbWVzcGFjZSBXZWJDb3JlIHtcbiIpCisK
KyAgICBmb3IgbmFtZSBpbiBhcmdzOgorICAgICAgICAodmFyaWFibGVfbmFtZSwgY29udGVudCkg
PSBtYWtlX3ZhcmlhYmxlX25hbWVfYW5kX3JlYWQobmFtZSwgInJiIikKKyAgICAgICAgc2l6ZSA9
IGxlbihjb250ZW50KQorICAgICAgICBoZWFkZXJfZmlsZS53cml0ZSgiZXh0ZXJuIGNvbnN0IGNo
YXIgJXNbJWRdO1xuIiAlICh2YXJpYWJsZV9uYW1lLCBzaXplKSkKKyAgICAgICAgY3BwX2ZpbGUu
d3JpdGUoImV4dGVybiBjb25zdCBjaGFyICVzWyVkXSA9IHtcbiIgJSAodmFyaWFibGVfbmFtZSwg
c2l6ZSkpCisgICAgICAgIGZvciBpbmRleCBpbiByYW5nZShzaXplKToKKyAgICAgICAgICAgIGNw
cF9maWxlLndyaXRlKCIlZCIgJSBvcmQoY29udGVudFtpbmRleF0pKQorICAgICAgICAgICAgY3Bw
X2ZpbGUud3JpdGUoIiwiIGlmIGluZGV4ICE9IGxlbihjb250ZW50KSAtIDEgZWxzZSAifTtcbiIp
CisgICAgICAgICAgICBpZiBpbmRleCAlIDIwID09IDE5OgorICAgICAgICAgICAgICAgIGNwcF9m
aWxlLndyaXRlKCJcbiIpCisgICAgICAgIGNwcF9maWxlLndyaXRlKCJcbiIpCisKKyAgICBoZWFk
ZXJfZmlsZS53cml0ZSgifVxuIikKKyAgICBpZiBvcHRpb25zLmZsYWc6CisgICAgICAgIGhlYWRl
cl9maWxlLndyaXRlKCIjZW5kaWZcbiIpCisgICAgaGVhZGVyX2ZpbGUuY2xvc2UoKQorCisgICAg
Y3BwX2ZpbGUud3JpdGUoIn1cbiIpCisgICAgaWYgb3B0aW9ucy5mbGFnOgorICAgICAgICBjcHBf
ZmlsZS53cml0ZSgiI2VuZGlmXG4iKQorICAgIGNwcF9maWxlLmNsb3NlKCkKKworaWYgX19uYW1l
X18gPT0gIl9fbWFpbl9fIjoKKyAgICBtYWluKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApp
bmRleCBiYWY4YjNjZWQxZWRmMzZiM2FkOWE4MjcxZjhiNzk4MjgyNjMwYTQ1Li5kNThmYWIyYmNj
ODk4MjgzMjQ0ZTE3YzBhOTNlNzU2ODViYWI3NDI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwCkBAIC01OTQsNiArNTk0LDcgQEAKICAgICAgICAgICAgICAgICAnc3JjL1dlYk5vdGlmaWNh
dGlvbi5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViT3B0aW9uRWxlbWVudC5jcHAnLAog
ICAgICAgICAgICAgICAgICdzcmMvV2ViUGFnZVBvcHVwSW1wbC5jcHAnLAorICAgICAgICAgICAg
ICAgICdzcmMvV2ViUGFnZVBvcHVwSW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlBh
Z2VTZXJpYWxpemVyLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJQYWdlU2VyaWFsaXpl
ckltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlBhZ2VTZXJpYWxpemVySW1wbC5o
JywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaSBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQppbmRleCBiNDgwZTQ2MjJiOTkwMmEz
NzAxMTVhMjNhMTM2YTA4ZDk0NWM3MDVkLi4yNGYyZjdiN2YyYjMwZDA3ZWZkNWVkMzI0MzA4NTE2
MzgwZDE4YzZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5
cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCkBAIC01Myw3ICs1
Myw3IEBACiAgICAgICAnRU5BQkxFX0lDT05EQVRBQkFTRT0wJywKICAgICAgICdFTkFCTEVfSU5E
RVhFRF9EQVRBQkFTRT0xJywKICAgICAgICdFTkFCTEVfSU5QVVRfU1BFRUNIPTEnLAotICAgICAg
J0VOQUJMRV9JTlBVVF9UWVBFX0RBVEU9MCcsCisgICAgICAnRU5BQkxFX0lOUFVUX1RZUEVfREFU
RT0xJywKICAgICAgICdFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRT0wJywKICAgICAgICdFTkFC
TEVfSU5QVVRfVFlQRV9EQVRFVElNRUxPQ0FMPTAnLAogICAgICAgJ0VOQUJMRV9JTlBVVF9UWVBF
X01PTlRIPTAnLApAQCAtMTMwLDExICsxMzAsMTMgQEAKICAgICAgIFsnT1M9PSJhbmRyb2lkIics
IHsKICAgICAgICAgJ2ZlYXR1cmVfZGVmaW5lcyc6IFsKICAgICAgICAgICAnRU5BQkxFX0NBTEVO
REFSX1BJQ0tFUj0wJywKKyAgICAgICAgICAnRU5BQkxFX1BBR0VfUE9QVVA9MCcsCiAgICAgICAg
ICAgJ0VOQUJMRV9XRUJfQVVESU89MCcsCiAgICAgICAgIF0sCiAgICAgICB9LCB7CiAgICAgICAg
ICdmZWF0dXJlX2RlZmluZXMnOiBbCiAgICAgICAgICAgJ0VOQUJMRV9DQUxFTkRBUl9QSUNLRVI9
MScsCisgICAgICAgICAgJ0VOQUJMRV9QQUdFX1BPUFVQPTEnLAogICAgICAgICAgICdFTkFCTEVf
V0VCX0FVRElPPTEnLAogICAgICAgICBdLAogICAgICAgfV0sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwCmluZGV4IDIzMDhiMGFlOGE2OTM0NDA4
NzZlNGI5YWQ3ZDBjN2I4MjVmZmYxNmIuLjliNDBkMmE0ODYwMGExZWRhYWY1N2RlYTVkNjdjYTI4
YjRiYTlkOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNs
aWVudEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVu
dEltcGwuY3BwCkBAIC01Myw2ICs1Myw3IEBACiAjaW5jbHVkZSAiR2VvbG9jYXRpb24uaCIKICNp
bmNsdWRlICJHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVk
ZSAiUGFnZVBvcHVwQ2xpZW50LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1
ZGUgIkljb24uaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCkBAIC04MSw2ICs4Miw3IEBACiAjaW5j
bHVkZSAiV2ViRmlsZUNob29zZXJDb21wbGV0aW9uSW1wbC5oIgogI2luY2x1ZGUgIldlYkZyYW1l
Q2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgiCisjaW5jbHVkZSAiV2ViUGFnZVBv
cHVwSW1wbC5oIgogI2luY2x1ZGUgIldlYkljb25Mb2FkaW5nQ29tcGxldGlvbkltcGwuaCIKICNp
bmNsdWRlICJXZWJJbnB1dEV2ZW50LmgiCiAjaW5jbHVkZSAiV2ViS2l0LmgiCkBAIC05NjksNyAr
OTcxLDcgQEAgYm9vbCBDaHJvbWVDbGllbnRJbXBsOjpzZWxlY3RJdGVtQWxpZ25tZW50Rm9sbG93
c01lbnVXcml0aW5nRGlyZWN0aW9uKCkKIAogYm9vbCBDaHJvbWVDbGllbnRJbXBsOjpoYXNPcGVu
ZWRQb3B1cCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICEhbV93ZWJWaWV3LT5zZWxlY3RQb3B1cCgp
OworICAgIHJldHVybiBtX3dlYlZpZXctPmhhc09wZW5lZFBvcHVwKCk7CiB9CiAKIFBhc3NSZWZQ
dHI8UG9wdXBNZW51PiBDaHJvbWVDbGllbnRJbXBsOjpjcmVhdGVQb3B1cE1lbnUoUG9wdXBNZW51
Q2xpZW50KiBjbGllbnQpIGNvbnN0CkBAIC05ODUsNiArOTg3LDQxIEBAIFBhc3NSZWZQdHI8U2Vh
cmNoUG9wdXBNZW51PiBDaHJvbWVDbGllbnRJbXBsOjpjcmVhdGVTZWFyY2hQb3B1cE1lbnUoUG9w
dXBNZW51Q2xpCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZWFyY2hQb3B1cE1lbnVDaHJvbWl1
bShjbGllbnQpKTsKIH0KIAorI2lmIEVOQUJMRShQQUdFX1BPUFVQKQorUGFnZVBvcHVwKiBDaHJv
bWVDbGllbnRJbXBsOjpvcGVuUGFnZVBvcHVwKFBhZ2VQb3B1cENsaWVudCogY2xpZW50LCBjb25z
dCBJbnRSZWN0JiBvcmlnaW5Cb3VuZHNJblJvb3RWaWV3KQoreworICAgIEFTU0VSVChjbGllbnQp
OworICAgIGlmIChoYXNPcGVuZWRQb3B1cCgpKQorICAgICAgICBtX3dlYlZpZXctPmhpZGVQb3B1
cHMoKTsKKworICAgIFdlYldpZGdldCogcG9wdXBXaWRnZXQgPSBtX3dlYlZpZXctPmNsaWVudCgp
LT5jcmVhdGVQb3B1cE1lbnUoV2ViUG9wdXBUeXBlUGFnZSk7CisgICAgQVNTRVJUKHBvcHVwV2lk
Z2V0KTsKKyAgICBXZWJQYWdlUG9wdXBJbXBsKiBwb3B1cCA9IHN0YXRpY19jYXN0PFdlYlBhZ2VQ
b3B1cEltcGwqPihwb3B1cFdpZGdldCk7CisgICAgV2ViU2l6ZSByb290Vmlld1NpemUgPSBtX3dl
YlZpZXctPnNpemUoKTsKKyAgICBJbnRTaXplIHBvcHVwU2l6ZSA9IGNsaWVudC0+Y29udGVudFNp
emUoKTsKKyAgICBJbnRSZWN0IHBvcHVwQm91bmRzSW5Sb290VmlldyhJbnRQb2ludChtYXgoMCwg
b3JpZ2luQm91bmRzSW5Sb290Vmlldy54KCkpLCBtYXgoMCwgb3JpZ2luQm91bmRzSW5Sb290Vmll
dy5tYXhZKCkpKSwgcG9wdXBTaXplKTsKKyAgICBpZiAocG9wdXBCb3VuZHNJblJvb3RWaWV3Lm1h
eFkoKSA+IHJvb3RWaWV3U2l6ZS5oZWlnaHQpCisgICAgICAgIHBvcHVwQm91bmRzSW5Sb290Vmll
dy5zZXRZKG1heCgwLCBvcmlnaW5Cb3VuZHNJblJvb3RWaWV3LnkoKSAtIHBvcHVwU2l6ZS5oZWln
aHQoKSkpOworICAgIGlmIChwb3B1cEJvdW5kc0luUm9vdFZpZXcubWF4WCgpID4gcm9vdFZpZXdT
aXplLndpZHRoKQorICAgICAgICBwb3B1cEJvdW5kc0luUm9vdFZpZXcuc2V0WChtYXgoMCwgcm9v
dFZpZXdTaXplLndpZHRoIC0gcG9wdXBTaXplLndpZHRoKCkpKTsKKyAgICBpZiAoIXBvcHVwLT5p
bml0KG1fd2ViVmlldywgY2xpZW50LCByb290Vmlld1RvU2NyZWVuKHBvcHVwQm91bmRzSW5Sb290
VmlldykpKSB7CisgICAgICAgIHBvcHVwLT5jbG9zZVBvcHVwKCk7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KKyAgICBtX3dlYlZpZXctPnBvcHVwT3BlbmVkKHBvcHVwKTsKKyAgICByZXR1cm4g
cG9wdXA7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50SW1wbDo6Y2xvc2VQYWdlUG9wdXAoUGFnZVBv
cHVwKiBwb3B1cCkKK3sKKyAgICBpZiAoIXBvcHVwKQorICAgICAgICByZXR1cm47CisgICAgV2Vi
UGFnZVBvcHVwSW1wbCogcG9wdXBJbXBsID0gc3RhdGljX2Nhc3Q8V2ViUGFnZVBvcHVwSW1wbCo+
KHBvcHVwKTsKKyAgICBtX3dlYlZpZXctPnBvcHVwQ2xvc2VkKHBvcHVwSW1wbCk7CisgICAgcG9w
dXBJbXBsLT5jbG9zZVBvcHVwKCk7Cit9CisjZW5kaWYKKwogYm9vbCBDaHJvbWVDbGllbnRJbXBs
OjpzaG91bGRSdW5Nb2RhbERpYWxvZ0R1cmluZ1BhZ2VEaXNtaXNzYWwoY29uc3QgRGlhbG9nVHlw
ZSYgZGlhbG9nVHlwZSwgY29uc3QgU3RyaW5nJiBkaWFsb2dNZXNzYWdlLCBGcmFtZUxvYWRlcjo6
UGFnZURpc21pc3NhbFR5cGUgZGlzbWlzc2FsVHlwZSkgY29uc3QKIHsKICAgICBjb25zdCBjaGFy
KiBrRGlhbG9nc1tdID0geyJhbGVydCIsICJjb25maXJtIiwgInByb21wdCIsICJzaG93TW9kYWxE
aWFsb2cifTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNs
aWVudEltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwu
aAppbmRleCA0NjFkYjQxYTQ0OWIzYjk1ZGRkYjYzNTU5YzA3ZjUwZDk0NzcxYmZkLi4yMmRhMTJk
MTc4YzEwYWRlZmE2NmU2ZjJmZjM1OWE1ZTA1N2EyMmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5oCkBAIC0xOTUsNiArMTk1LDEwIEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIGJvb2wgaGFzT3BlbmVkUG9wdXAoKSBjb25zdCBPVkVSUklERTsKICAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6UG9wdXBNZW51PiBjcmVhdGVQb3B1cE1lbnUo
V2ViQ29yZTo6UG9wdXBNZW51Q2xpZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRy
PFdlYkNvcmU6OlNlYXJjaFBvcHVwTWVudT4gY3JlYXRlU2VhcmNoUG9wdXBNZW51KFdlYkNvcmU6
OlBvcHVwTWVudUNsaWVudCopIGNvbnN0OworI2lmIEVOQUJMRShQQUdFX1BPUFVQKQorICAgIHZp
cnR1YWwgV2ViQ29yZTo6UGFnZVBvcHVwKiBvcGVuUGFnZVBvcHVwKFdlYkNvcmU6OlBhZ2VQb3B1
cENsaWVudCosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IHZvaWQgY2xvc2VQYWdlUG9wdXAoV2ViQ29yZTo6UGFnZVBvcHVwKikgT1ZFUlJJREU7CisjZW5k
aWYKIAogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRSdW5Nb2RhbERpYWxvZ0R1cmluZ1BhZ2VEaXNt
aXNzYWwoY29uc3QgRGlhbG9nVHlwZSYsIGNvbnN0IFN0cmluZyYgZGlhbG9nTWVzc2FnZSwgV2Vi
Q29yZTo6RnJhbWVMb2FkZXI6OlBhZ2VEaXNtaXNzYWxUeXBlKSBjb25zdDsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFnZVBvcHVwSW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlUG9wdXBJbXBsLmNwcAppbmRleCBiYzgxMGM3
YjFiMTY4ZGI3ZWNiZTIxNWQwMTljNjM0NzNmMWI0ZmQyLi40YWU2ZDhjZTEyNjY5MzViYjQ2MGVm
ZWRjYTNhNWRjMWY5NDJkODc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJQYWdlUG9wdXBJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJQYWdlUG9wdXBJbXBsLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQpAQCAtMjksMjEgKzI5LDM0NCBAQAogICovCiAKICNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXZWJQYWdlUG9wdXBJbXBsLmgiCiAKKyNpbmNsdWRlICJFbXB0
eUNsaWVudHMuaCIKKyNpbmNsdWRlICJGaWxlQ2hvb3Nlci5oIgorI2luY2x1ZGUgIkZvY3VzQ29u
dHJvbGxlci5oIgorI2luY2x1ZGUgIkZvcm1TdGF0ZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5o
IgorI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNs
dWRlICJQYWdlUG9wdXBDbGllbnQuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUg
IlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4UHJveHkuaCIKKyNpbmNsdWRlICJXZWJJbnB1dEV2
ZW50LmgiCisjaW5jbHVkZSAiV2ViSW5wdXRFdmVudENvbnZlcnNpb24uaCIKICNpbmNsdWRlICJX
ZWJQYWdlUG9wdXAuaCIKKyNpbmNsdWRlICJXZWJXaWRnZXRDbGllbnQuaCIKKyNpbmNsdWRlICJw
YWludGluZy9HcmFwaGljc0NvbnRleHRCdWlsZGVyLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorI2lmIEVOQUJMRShQQUdFX1BPUFVQKQorCitj
bGFzcyBQYWdlUG9wdXBDaHJvbWVDbGllbnQgOiBwdWJsaWMgRW1wdHlDaHJvbWVDbGllbnQgewor
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBhZ2VQb3B1cENocm9tZUNsaWVudCk7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CisKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBQYWdlUG9wdXBD
aHJvbWVDbGllbnQoV2ViUGFnZVBvcHVwSW1wbCogcG9wdXApIDogbV9wb3B1cChwb3B1cCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX3BvcHVwLT53aWRnZXRDbGllbnQoKSk7CisgICAgfQorCitw
cml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBjbG9zZVdpbmRvd1Nvb24oKSBPVkVSUklERQorICAg
IHsKKyAgICAgICAgbV9wb3B1cC0+Y2xvc2VQb3B1cCgpOworICAgIH0KKworICAgIHZpcnR1YWwg
RmxvYXRSZWN0IHdpbmRvd1JlY3QoKSBPVkVSUklERQorICAgIHsKKyAgICAgICAgcmV0dXJuIEZs
b2F0UmVjdChtX3BvcHVwLT5tX3dpbmRvd1JlY3RJblNjcmVlbi54LCBtX3BvcHVwLT5tX3dpbmRv
d1JlY3RJblNjcmVlbi55LCBtX3BvcHVwLT5tX3dpbmRvd1JlY3RJblNjcmVlbi53aWR0aCwgbV9w
b3B1cC0+bV93aW5kb3dSZWN0SW5TY3JlZW4uaGVpZ2h0KTsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0V2luZG93UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpIE9WRVJSSURFCisgICAg
eworICAgICAgICBtX3BvcHVwLT5tX3dpbmRvd1JlY3RJblNjcmVlbiA9IEludFJlY3QocmVjdCk7
CisgICAgICAgIG1fcG9wdXAtPndpZGdldENsaWVudCgpLT5zZXRXaW5kb3dSZWN0KG1fcG9wdXAt
Pm1fd2luZG93UmVjdEluU2NyZWVuKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRkTWVz
c2FnZVRvQ29uc29sZShNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBj
b25zdCBTdHJpbmcmIG1lc3NhZ2UsIHVuc2lnbmVkIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJp
bmcmKSBPVkVSUklERQorICAgIHsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiQ09OU09MRSBNRVNTU0FHRToldTogJXNcbiIsIGxpbmVOdW1iZXIsIG1lc3NhZ2UudXRm
OCgpLmRhdGEoKSk7CisjZWxzZQorICAgICAgICBVTlVTRURfUEFSQU0obWVzc2FnZSk7CisgICAg
ICAgIFVOVVNFRF9QQVJBTShsaW5lTnVtYmVyKTsKKyNlbmRpZgorICAgIH0KKworICAgIHZpcnR1
YWwgdm9pZCBpbnZhbGlkYXRlQ29udGVudHNBbmRSb290Vmlldyhjb25zdCBJbnRSZWN0JiBwYWlu
dFJlY3QsIGJvb2wpIE9WRVJSSURFCisgICAgeworICAgICAgICBpZiAocGFpbnRSZWN0LmlzRW1w
dHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9wb3B1cC0+d2lkZ2V0Q2xpZW50
KCktPmRpZEludmFsaWRhdGVSZWN0KHBhaW50UmVjdCk7CisgICAgfQorCisgICAgdmlydHVhbCB2
b2lkIHNjcm9sbChjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSwgY29uc3QgSW50UmVjdCYgc2Ny
b2xsUmVjdCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpIE9WRVJSSURFCisgICAgeworICAgICAg
ICBtX3BvcHVwLT53aWRnZXRDbGllbnQoKS0+ZGlkU2Nyb2xsUmVjdChzY3JvbGxEZWx0YS53aWR0
aCgpLCBzY3JvbGxEZWx0YS5oZWlnaHQoKSwgaW50ZXJzZWN0aW9uKHNjcm9sbFJlY3QsIGNsaXBS
ZWN0KSk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVDb250ZW50c0ZvclNs
b3dTY3JvbGwoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgYm9vbCBpbW1lZGlhdGUpIE9WRVJS
SURFCisgICAgeworICAgICAgICBpbnZhbGlkYXRlQ29udGVudHNBbmRSb290Vmlldyh1cGRhdGVS
ZWN0LCBpbW1lZGlhdGUpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUFuaW1h
dGlvbigpIE9WRVJSSURFCisgICAgeworICAgICAgICBtX3BvcHVwLT53aWRnZXRDbGllbnQoKS0+
c2NoZWR1bGVBbmltYXRpb24oKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQqIHdlYlZpZXco
KSBjb25zdCBPVkVSUklERQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcG9wdXAtPm1fd2ViVmll
dzsKKyAgICB9CisKKyAgICBXZWJQYWdlUG9wdXBJbXBsKiBtX3BvcHVwOworfTsKKwogLy8gV2Vi
UGFnZVBvcHVwSW1wbCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLS8vIEZJWE1FOiBXZWJQYWdlUG9wdXBJbXBsIGltcGxl
bWVudGF0aW9uIHdpbGwgYmUgd3JpdHRlbiBoZXJlLgorV2ViUGFnZVBvcHVwSW1wbDo6V2ViUGFn
ZVBvcHVwSW1wbChXZWJXaWRnZXRDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fd2lkZ2V0Q2xpZW50
KGNsaWVudCkKK3sKKyAgICBBU1NFUlQoY2xpZW50KTsKK30KKworV2ViUGFnZVBvcHVwSW1wbDo6
fldlYlBhZ2VQb3B1cEltcGwoKQoreworfQorCitib29sIFdlYlBhZ2VQb3B1cEltcGw6OmluaXQo
V2ViVmlld0ltcGwqIHdlYlZpZXcsIFBhZ2VQb3B1cENsaWVudCogcG9wdXBDbGllbnQsIGNvbnN0
IEludFJlY3QmIGJvdW5kc0luU2NyZWVuKQoreworICAgIEFTU0VSVCh3ZWJWaWV3KTsKKyAgICBB
U1NFUlQocG9wdXBDbGllbnQpOworICAgIG1fd2ViVmlldyA9IHdlYlZpZXc7CisgICAgbV9wb3B1
cENsaWVudCA9IHBvcHVwQ2xpZW50OworCisgICAgbV93aWRnZXRDbGllbnQtPnNldFdpbmRvd1Jl
Y3QoYm91bmRzSW5TY3JlZW4pOworICAgIG1fd2luZG93UmVjdEluU2NyZWVuID0gYm91bmRzSW5T
Y3JlZW47CisgICAgaWYgKCFpbml0UGFnZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
bV93aWRnZXRDbGllbnQtPnNob3coV2ViTmF2aWdhdGlvblBvbGljeSgpKTsKKworICAgIHNldEZv
Y3VzKHRydWUpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViUGFnZVBvcHVwSW1w
bDo6aW5pdFBhZ2UoKQoreworICAgIFBhZ2U6OlBhZ2VDbGllbnRzIHBhZ2VDbGllbnRzOworICAg
IG1fY2hyb21lQ2xpZW50ID0gYWRvcHRQdHIobmV3IFBhZ2VQb3B1cENocm9tZUNsaWVudCh0aGlz
KSk7CisgICAgcGFnZUNsaWVudHMuY2hyb21lQ2xpZW50ID0gbV9jaHJvbWVDbGllbnQuZ2V0KCk7
CisgICAgc3RhdGljIEVkaXRvckNsaWVudCogZW1wdHlFZGl0b3JDbGllbnQgPSBuZXcgRW1wdHlF
ZGl0b3JDbGllbnQ7CisgICAgcGFnZUNsaWVudHMuZWRpdG9yQ2xpZW50ID0gZW1wdHlFZGl0b3JD
bGllbnQ7CisjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCisgICAgc3RhdGljIENvbnRleHRNZW51
Q2xpZW50KiBlbXB0eUNvbnRleHRNZW51Q2xpZW50ID0gbmV3IEVtcHR5Q29udGV4dE1lbnVDbGll
bnQ7CisgICAgcGFnZUNsaWVudHMuY29udGV4dE1lbnVDbGllbnQgPSBlbXB0eUNvbnRleHRNZW51
Q2xpZW50OworI2VuZGlmCisjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKKyAgICBzdGF0aWMgRHJh
Z0NsaWVudCogZW1wdHlEcmFnQ2xpZW50ID0gbmV3IEVtcHR5RHJhZ0NsaWVudDsKKyAgICBwYWdl
Q2xpZW50cy5kcmFnQ2xpZW50ID0gZW1wdHlEcmFnQ2xpZW50OworI2VuZGlmCisjaWYgRU5BQkxF
KElOU1BFQ1RPUikKKyAgICBzdGF0aWMgSW5zcGVjdG9yQ2xpZW50KiBlbXB0eUluc3BlY3RvckNs
aWVudCA9IG5ldyBFbXB0eUluc3BlY3RvckNsaWVudDsKKyAgICBwYWdlQ2xpZW50cy5pbnNwZWN0
b3JDbGllbnQgPSBlbXB0eUluc3BlY3RvckNsaWVudDsKKyNlbmRpZgorICAgIG1fcGFnZSA9IGFk
b3B0UHRyKG5ldyBQYWdlKHBhZ2VDbGllbnRzKSk7CisgICAgbV9wYWdlLT5zZXR0aW5ncygpLT5z
ZXRTY3JpcHRFbmFibGVkKHRydWUpOworICAgIG1fcGFnZS0+c2V0dGluZ3MoKS0+c2V0QWxsb3dT
Y3JpcHRzVG9DbG9zZVdpbmRvd3ModHJ1ZSk7CisgICAgc3RhdGljIEZyYW1lTG9hZGVyQ2xpZW50
KiBlbXB0eUZyYW1lTG9hZGVyQ2xpZW50ID0gIG5ldyBFbXB0eUZyYW1lTG9hZGVyQ2xpZW50Owor
ICAgIFJlZlB0cjxGcmFtZT4gZnJhbWUgPSBGcmFtZTo6Y3JlYXRlKG1fcGFnZS5nZXQoKSwgMCwg
ZW1wdHlGcmFtZUxvYWRlckNsaWVudCk7CisgICAgZnJhbWUtPnNldFZpZXcoRnJhbWVWaWV3Ojpj
cmVhdGUoZnJhbWUuZ2V0KCkpKTsKKyAgICBmcmFtZS0+aW5pdCgpOworICAgIGZyYW1lLT52aWV3
KCktPnJlc2l6ZShtX3BvcHVwQ2xpZW50LT5jb250ZW50U2l6ZSgpKTsKKyAgICBmcmFtZS0+dmll
dygpLT5zZXRUcmFuc3BhcmVudChmYWxzZSk7CisKKyAgICBEb2N1bWVudFdyaXRlciogd3JpdGVy
ID0gZnJhbWUtPmxvYWRlcigpLT5hY3RpdmVEb2N1bWVudExvYWRlcigpLT53cml0ZXIoKTsKKyAg
ICB3cml0ZXItPnNldE1JTUVUeXBlKCJ0ZXh0L2h0bWwiKTsKKyAgICB3cml0ZXItPnNldEVuY29k
aW5nKCJVVEYtOCIsIGZhbHNlKTsKKyAgICB3cml0ZXItPmJlZ2luKCk7CisgICAgbV9wb3B1cENs
aWVudC0+d3JpdGVEb2N1bWVudCgqd3JpdGVyKTsKKyAgICB3cml0ZXItPmVuZCgpOworCisgICAg
eworICAgICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CisgICAgICAgIHY4OjpIYW5k
bGU8djg6OkNvbnRleHQ+IGNvbnRleHQgPSBWOFByb3h5OjptYWluV29ybGRDb250ZXh0KGZyYW1l
LmdldCgpKTsKKyAgICAgICAgaWYgKGNvbnRleHQuSXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB2ODo6Q29udGV4dDo6U2NvcGUgc2NvcGUoY29udGV4dCk7Cisg
ICAgICAgIG1fdjh0aGlzID0gdjg6OlBlcnNpc3RlbnQ8djg6OkV4dGVybmFsPjo6TmV3KHY4OjpF
eHRlcm5hbDo6TmV3KHRoaXMpKTsKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpGdW5jdGlvblRlbXBs
YXRlPiB0ZW1wbCA9IHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoc2V0VmFsdWVBbmRDbG9zZVBv
cHVwQ2FsbGJhY2ssIG1fdjh0aGlzKTsKKyAgICAgICAgY29udGV4dC0+R2xvYmFsKCktPlNldCh2
ODo6U3RyaW5nOjpOZXcoInNldFZhbHVlQW5kQ2xvc2VQb3B1cCIpLCB2ODo6SGFuZGxlPHY4OjpG
dW5jdGlvbj4odGVtcGwtPkdldEZ1bmN0aW9uKCkpKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBXZWJQYWdlUG9wdXBJbXBsOjpzZXRWYWx1ZUFu
ZENsb3NlUG9wdXBDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIGlm
IChhcmdzLkxlbmd0aCgpIDwgMikKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIk5vdCBlbm91
Z2ggYXJndW1lbnRzIiwgVjhQcm94eTo6VHlwZUVycm9yKTsKKyAgICBXZWJQYWdlUG9wdXBJbXBs
KiBwb3B1cCA9IHN0YXRpY19jYXN0PFdlYlBhZ2VQb3B1cEltcGwqPih2ODo6RXh0ZXJuYWw6OkNh
c3QoKmFyZ3MuRGF0YSgpKS0+VmFsdWUoKSk7CisgICAgQVNTRVJUKHBvcHVwKTsKKyAgICBwb3B1
cC0+bV9wb3B1cENsaWVudC0+c2V0VmFsdWVBbmRDbG9zZVBvcHVwKHRvSW50MzIoYXJnc1swXSks
IHRvV2ViQ29yZVN0cmluZyhhcmdzLCAxKSk7CisgICAgLy8gc2V0VmFsZXVBbmRDbG9zZVBvcHVw
KCkgZGVsZXRlcyB0aGUgcG9wdXAgb2JqZWN0LiBEbyBub3QgYWNjZXNzIGl0LgorICAgIHJldHVy
biB2ODo6VW5kZWZpbmVkKCk7Cit9CisKK1dlYlNpemUgV2ViUGFnZVBvcHVwSW1wbDo6c2l6ZSgp
Cit7CisgICAgcmV0dXJuIG1fcG9wdXBDbGllbnQtPmNvbnRlbnRTaXplKCk7Cit9CisKK3ZvaWQg
V2ViUGFnZVBvcHVwSW1wbDo6YW5pbWF0ZShkb3VibGUgZnJhbWVCZWdpblRpbWUpCit7CisjaWYg
RU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQorICAgIGlmICghZnJhbWVCZWdpblRpbWUp
CisgICAgICAgIGZyYW1lQmVnaW5UaW1lID0gY3VycmVudFRpbWUoKTsKKyAgICBtX3BhZ2UtPm1h
aW5GcmFtZSgpLT52aWV3KCktPnNlcnZpY2VTY3JpcHRlZEFuaW1hdGlvbnMoY29udmVydFNlY29u
ZHNUb0RPTVRpbWVTdGFtcChmcmFtZUJlZ2luVGltZSkpOworI2VuZGlmCit9CisKK3ZvaWQgV2Vi
UGFnZVBvcHVwSW1wbDo6Y29tcG9zaXRlKGJvb2wpCit7Cit9CisKK3ZvaWQgV2ViUGFnZVBvcHVw
SW1wbDo6bGF5b3V0KCkKK3sKKyAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCktPnNldEZy
YW1lUmVjdChtX3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCktPmZyYW1lUmVjdCgpKTsKKyAgICBt
X3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCktPmxheW91dCgpOworfQorCit2b2lkIFdlYlBhZ2VQ
b3B1cEltcGw6OnBhaW50KFdlYkNhbnZhcyogY2FudmFzLCBjb25zdCBXZWJSZWN0JiByZWN0KQor
eworICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNz
Q29udGV4dEJ1aWxkZXIgYnVpbGRlcihjYW52YXMpOworICAgIEdyYXBoaWNzQ29udGV4dCYgZ2Mg
PSBidWlsZGVyLmNvbnRleHQoKTsKKyAgICBnYy5zYXZlKCk7CisgICAgZ2MuY2xpcChyZWN0KTsK
KyAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCktPnBhaW50KCZnYywgcmVjdCk7CisgICAg
Z2MucmVzdG9yZSgpOworfQorCit2b2lkIFdlYlBhZ2VQb3B1cEltcGw6OnJlc2l6ZShjb25zdCBX
ZWJTaXplJiBuZXdTaXplKQoreworICAgIG1fcGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+cmVz
aXplKG5ld1NpemUpOworICAgIG1fd2lkZ2V0Q2xpZW50LT5kaWRJbnZhbGlkYXRlUmVjdChXZWJS
ZWN0KDAsIDAsIG5ld1NpemUud2lkdGgsIG5ld1NpemUuaGVpZ2h0KSk7Cit9CisKK2Jvb2wgV2Vi
UGFnZVBvcHVwSW1wbDo6aGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50JiBldmVu
dCkKK3sKKyAgICBpZiAoIW1fcGFnZS0+bWFpbkZyYW1lKCkgfHwgIW1fcGFnZS0+bWFpbkZyYW1l
KCktPnZpZXcoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEZyYW1lKiBmcmFtZSA9IG1f
cGFnZS0+bWFpbkZyYW1lKCk7CisgICAgc3dpdGNoIChldmVudC50eXBlKSB7CisgICAgY2FzZSBX
ZWJJbnB1dEV2ZW50OjpNb3VzZU1vdmU6CisgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+
bW91c2VNb3ZlZChQbGF0Zm9ybU1vdXNlRXZlbnRCdWlsZGVyKGZyYW1lLT52aWV3KCksICpzdGF0
aWNfY2FzdDxjb25zdCBXZWJNb3VzZUV2ZW50Kj4oJmV2ZW50KSkpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBjYXNlIFdlYklucHV0RXZlbnQ6Ok1vdXNlTGVhdmU6CisgICAgICAgIGZyYW1l
LT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlTW91c2VNb3ZlRXZlbnQoUGxhdGZvcm1Nb3VzZUV2ZW50
QnVpbGRlcihmcmFtZS0+dmlldygpLCAqc3RhdGljX2Nhc3Q8Y29uc3QgV2ViTW91c2VFdmVudCo+
KCZldmVudCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBXZWJJbnB1dEV2ZW50
OjpNb3VzZVdoZWVsOgorICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZVdoZWVs
RXZlbnQoUGxhdGZvcm1XaGVlbEV2ZW50QnVpbGRlcihmcmFtZS0+dmlldygpLCAqc3RhdGljX2Nh
c3Q8Y29uc3QgV2ViTW91c2VXaGVlbEV2ZW50Kj4oJmV2ZW50KSkpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBjYXNlIFdlYklucHV0RXZlbnQ6Ok1vdXNlRG93bjogeworICAgICAgICBmcmFt
ZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZU1vdXNlUHJlc3NFdmVudChQbGF0Zm9ybU1vdXNlRXZl
bnRCdWlsZGVyKGZyYW1lLT52aWV3KCksICpzdGF0aWNfY2FzdDxjb25zdCBXZWJNb3VzZUV2ZW50
Kj4oJmV2ZW50KSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgY2FzZSBXZWJJ
bnB1dEV2ZW50OjpNb3VzZVVwOgorICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRs
ZU1vdXNlUmVsZWFzZUV2ZW50KFBsYXRmb3JtTW91c2VFdmVudEJ1aWxkZXIoZnJhbWUtPnZpZXco
KSwgKnN0YXRpY19jYXN0PGNvbnN0IFdlYk1vdXNlRXZlbnQqPigmZXZlbnQpKSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6UmF3S2V5RG93bjoKKyAgICBj
YXNlIFdlYklucHV0RXZlbnQ6OktleURvd246CisgICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpLZXlV
cDoKKyAgICBjYXNlIFdlYklucHV0RXZlbnQ6OkNoYXI6CisgICAgICAgIC8vIFRoZSBtYWluIFdl
YlZpZXcgcmVjZWl2ZXMga2V5IGV2ZW50cyBhbmQgZm9yd2FyZCB0aGVtIHRvIHRoaXMgdmlhIGhh
bmRsZUtleUV2ZW50KCkuCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorICAgIGNhc2UgV2ViSW5w
dXRFdmVudDo6R2VzdHVyZVNjcm9sbEJlZ2luOgorICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6R2Vz
dHVyZVNjcm9sbEVuZDoKKyAgICBjYXNlIFdlYklucHV0RXZlbnQ6Okdlc3R1cmVTY3JvbGxVcGRh
dGU6CisgICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlRmxpbmdTdGFydDoKKyAgICBjYXNl
IFdlYklucHV0RXZlbnQ6Okdlc3R1cmVGbGluZ0NhbmNlbDoKKyAgICBjYXNlIFdlYklucHV0RXZl
bnQ6Okdlc3R1cmVUYXA6CisgICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlVGFwRG93bjoK
KyAgICBjYXNlIFdlYklucHV0RXZlbnQ6Okdlc3R1cmVEb3VibGVUYXA6CisgICAgICAgIHJldHVy
biBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZUdlc3R1cmVFdmVudChQbGF0Zm9ybUdlc3R1
cmVFdmVudEJ1aWxkZXIoZnJhbWUtPnZpZXcoKSwgKnN0YXRpY19jYXN0PGNvbnN0IFdlYkdlc3R1
cmVFdmVudCo+KCZldmVudCkpKTsKKyAgICBjYXNlIFdlYklucHV0RXZlbnQ6Okdlc3R1cmVQaW5j
aEJlZ2luOgorICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6R2VzdHVyZVBpbmNoRW5kOgorICAgIGNh
c2UgV2ViSW5wdXRFdmVudDo6R2VzdHVyZVBpbmNoVXBkYXRlOgorICAgICAgICAvLyBGSVhNRTog
T25jZSBQbGF0Zm9ybUdlc3R1cmVFdmVudCBpcyB1cGRhdGVkIHRvIHN1cHBvcnQgcGluY2gsIHRo
aXMKKyAgICAgICAgLy8gc2hvdWxkIGNhbGwgaGFuZGxlR2VzdHVyZUV2ZW50LCBqdXN0IGxpa2Ug
aXQgY3VycmVudGx5IGRvZXMgZm9yCisgICAgICAgIC8vIGdlc3R1cmUgc2Nyb2xsLgorICAgICAg
ICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAg
Y2FzZSBXZWJJbnB1dEV2ZW50OjpUb3VjaFN0YXJ0OgorICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6
VG91Y2hNb3ZlOgorICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6VG91Y2hFbmQ6CisgICAgY2FzZSBX
ZWJJbnB1dEV2ZW50OjpUb3VjaENhbmNlbDoKKyAgICAgICAgcmV0dXJuIGZyYW1lLT5ldmVudEhh
bmRsZXIoKS0+aGFuZGxlVG91Y2hFdmVudChQbGF0Zm9ybVRvdWNoRXZlbnRCdWlsZGVyKGZyYW1l
LT52aWV3KCksICpzdGF0aWNfY2FzdDxjb25zdCBXZWJUb3VjaEV2ZW50Kj4oJmV2ZW50KSkpOwor
I2VuZGlmCisKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitib29sIFdlYlBhZ2VQb3B1cEltcGw6OmhhbmRs
ZUtleUV2ZW50KGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCYgZXZlbnQpCit7CisgICAgaWYg
KCFtX3BhZ2UtPm1haW5GcmFtZSgpIHx8ICFtX3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV9wYWdlLT5tYWluRnJhbWUoKS0+ZXZl
bnRIYW5kbGVyKCktPmtleUV2ZW50KGV2ZW50KTsKK30KKwordm9pZCBXZWJQYWdlUG9wdXBJbXBs
OjpzZXRGb2N1cyhib29sIGVuYWJsZSkKK3sKKyAgICBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigp
LT5zZXRGb2N1c2VkKGVuYWJsZSk7CisgICAgaWYgKGVuYWJsZSkKKyAgICAgICAgbV9wYWdlLT5m
b2N1c0NvbnRyb2xsZXIoKS0+c2V0QWN0aXZlKHRydWUpOworfQorCit2b2lkIFdlYlBhZ2VQb3B1
cEltcGw6OmNsb3NlKCkKK3sKKyAgICBpZiAobV9wYWdlKSB7CisgICAgICAgIG1fcGFnZS5jbGVh
cigpOworICAgICAgICBtX2Nocm9tZUNsaWVudC5jbGVhcigpOworICAgICAgICBtX3Y4dGhpcy5E
aXNwb3NlKCk7CisgICAgfQorICAgIGRlcmVmKCk7Cit9CisKK3ZvaWQgV2ViUGFnZVBvcHVwSW1w
bDo6Y2xvc2VQb3B1cCgpCit7CisgICAgaWYgKG1fcGFnZSkgeworICAgICAgICBtX3BhZ2UtPnNl
dEdyb3VwTmFtZShTdHJpbmcoKSk7CisgICAgICAgIG1fcGFnZS0+bWFpbkZyYW1lKCktPmxvYWRl
cigpLT5zdG9wQWxsTG9hZGVycygpOworICAgICAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLT5sb2Fk
ZXIoKS0+c3RvcExvYWRpbmcoVW5sb2FkRXZlbnRQb2xpY3lOb25lKTsKKyAgICB9CisgICAgbV93
aWRnZXRDbGllbnQtPmNsb3NlV2lkZ2V0U29vbigpOworCisgICAgbV9wb3B1cENsaWVudC0+ZGlk
Q2xvc2VQb3B1cCgpOworfQorCisjZW5kaWYgLy8gRU5BQkxFKFBBR0VfUE9QVVApCiAKIC8vIFdl
YlBhZ2VQb3B1cCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAKLVdlYlBhZ2VQb3B1cCogV2ViUGFnZVBvcHVwOjpjcmVhdGUo
V2ViV2lkZ2V0Q2xpZW50KikKK1dlYlBhZ2VQb3B1cCogV2ViUGFnZVBvcHVwOjpjcmVhdGUoV2Vi
V2lkZ2V0Q2xpZW50KiBjbGllbnQpCiB7Ci0gICAgLy8gRklYTUU6IFJldHVybnMgYSBXZWJQYWdl
UG9wdXBJbXBsIG9iamVjdC4KKyNpZiBFTkFCTEUoUEFHRV9QT1BVUCkKKyAgICBBU1NFUlQoY2xp
ZW50KTsKKyAgICBpZiAoIWNsaWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgLy8gUGFzcyB0
aGUgV2ViUGFnZVBvcHVwSW1wbCdzIHNlbGYtcmVmZXJlbmNlIHRvIHRoZSBjYWxsZXIuCisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJQYWdlUG9wdXBJbXBsKGNsaWVudCkpLmxlYWtSZWYoKTsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGNsaWVudCk7CiAgICAgcmV0dXJuIDA7CisjZW5kaWYK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJQYWdlUG9wdXBJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJQYWdlUG9wdXBJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzcyYTYyY2NiYjEwOGQzY2ZiNWUzZGRl
MzNhOGVhZmQzN2M4MDUzYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlBhZ2VQb3B1cEltcGwuaApAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJQYWdl
UG9wdXBJbXBsX2gKKyNkZWZpbmUgV2ViUGFnZVBvcHVwSW1wbF9oCisKKyNpZiBFTkFCTEUoUEFH
RV9QT1BVUCkKKworI2luY2x1ZGUgIlBhZ2VQb3B1cC5oIgorI2luY2x1ZGUgIldlYlBhZ2VQb3B1
cC5oIgorI2luY2x1ZGUgPHY4Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFBhZ2U7Citj
bGFzcyBQYWdlUG9wdXBDbGllbnQ7CitjbGFzcyBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ7Cit9CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBQYWdlUG9wdXBDaHJvbWVDbGllbnQ7CitjbGFz
cyBXZWJWaWV3SW1wbDsKKworY2xhc3MgV2ViUGFnZVBvcHVwSW1wbCA6IHB1YmxpYyBXZWJQYWdl
UG9wdXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFdlYkNvcmU6OlBhZ2VQb3B1
cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgUmVmQ291bnRlZDxXZWJQYWdlUG9w
dXBJbXBsPiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKK3B1YmxpYzoKKyAgICAv
LyBDYWxsZWQgYnkgQ2hyb21lQ2xpZW50SW1wbDo6b3BlblBhZ2VQb3B1cCgpLgorICAgIGJvb2wg
aW5pdChXZWJWaWV3SW1wbCosIFdlYkNvcmU6OlBhZ2VQb3B1cENsaWVudCosIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIGJvdW5kc0luU2NyZWVuKTsKKyAgICAvLyBDYWxsZWQgYnkgV2ViVmlld0lt
cGwuCisgICAgYm9vbCBoYW5kbGVLZXlFdmVudChjb25zdCBXZWJDb3JlOjpQbGF0Zm9ybUtleWJv
YXJkRXZlbnQmKTsKKyAgICB2b2lkIGNsb3NlUG9wdXAoKTsKKyAgICB2aXJ0dWFsIH5XZWJQYWdl
UG9wdXBJbXBsKCk7CisgICAgV2ViV2lkZ2V0Q2xpZW50KiB3aWRnZXRDbGllbnQoKSBjb25zdCB7
IHJldHVybiBtX3dpZGdldENsaWVudDsgfQorCitwcml2YXRlOgorICAgIC8vIFdlYldpZGdldCBm
dW5jdGlvbnMKKyAgICB2aXJ0dWFsIFdlYlNpemUgc2l6ZSgpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCBhbmltYXRlKGRvdWJsZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGNvbXBv
c2l0ZShib29sKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCkgT1ZFUlJJREU7
CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFdlYkNhbnZhcyosIGNvbnN0IFdlYlJlY3QmKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzaXplKGNvbnN0IFdlYlNpemUmKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFu
ZGxlSW5wdXRFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50JikgT1ZFUlJJREU7CisgICAgdmlydHVh
bCB2b2lkIHNldEZvY3VzKGJvb2wpIE9WRVJSSURFOworCisgICAgV2ViUGFnZVBvcHVwSW1wbChX
ZWJXaWRnZXRDbGllbnQqKTsKKyAgICBib29sIGluaXRQYWdlKCk7CisgICAgc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBzZXRWYWx1ZUFuZENsb3NlUG9wdXBDYWxsYmFjayhjb25zdCB2ODo6
QXJndW1lbnRzJik7CisKKyAgICBXZWJXaWRnZXRDbGllbnQqIG1fd2lkZ2V0Q2xpZW50OworICAg
IFdlYlJlY3QgbV93aW5kb3dSZWN0SW5TY3JlZW47CisgICAgV2ViVmlld0ltcGwqIG1fd2ViVmll
dzsKKyAgICBPd25QdHI8V2ViQ29yZTo6UGFnZT4gbV9wYWdlOworICAgIE93blB0cjxQYWdlUG9w
dXBDaHJvbWVDbGllbnQ+IG1fY2hyb21lQ2xpZW50OworICAgIFdlYkNvcmU6OlBhZ2VQb3B1cENs
aWVudCogbV9wb3B1cENsaWVudDsKKyAgICB2ODo6UGVyc2lzdGVudDx2ODo6RXh0ZXJuYWw+IG1f
djh0aGlzOworCisgICAgZnJpZW5kIGNsYXNzIFdlYlBhZ2VQb3B1cDsKKyAgICBmcmllbmQgY2xh
c3MgUGFnZVBvcHVwQ2hyb21lQ2xpZW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cisj
ZW5kaWYgLy8gRU5BQkxFKFBBR0VfUE9QVVApCisjZW5kaWYgLy8gV2ViUGFnZVBvcHVwSW1wbF9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXggNjFlODBh
OGI4MDgxMDRkZmI2ZjY4NmY5MDU0MWRlMGZhZjhmNTdlZC4uNTM2YjdmNmYzOGZmMTNiMzk1MmMz
M2VmZTEyMjRjZDQ3OWUzNTc5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViVmlld0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZp
ZXdJbXBsLmNwcApAQCAtMTI3LDYgKzEyNyw3IEBACiAjaW5jbHVkZSAiV2ViS2l0LmgiCiAjaW5j
bHVkZSAiV2ViTWVkaWFQbGF5ZXJBY3Rpb24uaCIKICNpbmNsdWRlICJXZWJOb2RlLmgiCisjaW5j
bHVkZSAiV2ViUGFnZVBvcHVwSW1wbC5oIgogI2luY2x1ZGUgIldlYlBsdWdpbi5oIgogI2luY2x1
ZGUgIldlYlBsdWdpbkFjdGlvbi5oIgogI2luY2x1ZGUgIldlYlBsdWdpbkNvbnRhaW5lckltcGwu
aCIKQEAgLTcyMyw2ICs3MjQsMTAgQEAgYm9vbCBXZWJWaWV3SW1wbDo6a2V5RXZlbnQoY29uc3Qg
V2ViS2V5Ym9hcmRFdmVudCYgZXZlbnQpCiAgICAgLy8gbm90IHRoZSBwYWdlLgogICAgIGlmICht
X3NlbGVjdFBvcHVwKQogICAgICAgICByZXR1cm4gbV9zZWxlY3RQb3B1cC0+aGFuZGxlS2V5RXZl
bnQoUGxhdGZvcm1LZXlib2FyZEV2ZW50QnVpbGRlcihldmVudCkpOworI2lmIEVOQUJMRShQQUdF
X1BPUFVQKQorICAgIGlmIChtX3BhZ2VQb3B1cCkKKyAgICAgICAgcmV0dXJuIG1fcGFnZVBvcHVw
LT5oYW5kbGVLZXlFdmVudChQbGF0Zm9ybUtleWJvYXJkRXZlbnRCdWlsZGVyKGV2ZW50KSk7Cisj
ZW5kaWYKIAogICAgIC8vIEdpdmUgQXV0b2NvbXBsZXRlIGEgY2hhbmNlIHRvIGNvbnN1bWUgdGhl
IGtleSBldmVudHMgaXQgaXMgaW50ZXJlc3RlZCBpbi4KICAgICBpZiAoYXV0b2NvbXBsZXRlSGFu
ZGxlS2V5RXZlbnQoZXZlbnQpKQpAQCAtODM1LDYgKzg0MCwxMCBAQCBib29sIFdlYlZpZXdJbXBs
OjpjaGFyRXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYgZXZlbnQpCiAgICAgLy8gbm90IHRo
ZSBwYWdlLgogICAgIGlmIChtX3NlbGVjdFBvcHVwKQogICAgICAgICByZXR1cm4gbV9zZWxlY3RQ
b3B1cC0+aGFuZGxlS2V5RXZlbnQoUGxhdGZvcm1LZXlib2FyZEV2ZW50QnVpbGRlcihldmVudCkp
OworI2lmIEVOQUJMRShQQUdFX1BPUFVQKQorICAgIGlmIChtX3BhZ2VQb3B1cCkKKyAgICAgICAg
cmV0dXJuIG1fcGFnZVBvcHVwLT5oYW5kbGVLZXlFdmVudChQbGF0Zm9ybUtleWJvYXJkRXZlbnRC
dWlsZGVyKGV2ZW50KSk7CisjZW5kaWYKIAogICAgIEZyYW1lKiBmcmFtZSA9IGZvY3VzZWRXZWJD
b3JlRnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQpAQCAtMTE5Nyw2ICsxMjA2LDI1IEBAIHZvaWQg
IFdlYlZpZXdJbXBsOjpwb3B1cENsb3NlZChXZWJDb3JlOjpQb3B1cENvbnRhaW5lciogcG9wdXBD
b250YWluZXIpCiAgICAgfQogfQogCisjaWYgRU5BQkxFKFBBR0VfUE9QVVApCit2b2lkIFdlYlZp
ZXdJbXBsOjpwb3B1cE9wZW5lZChXZWJQYWdlUG9wdXBJbXBsKiBwb3B1cCkKK3sKKyAgICBBU1NF
UlQoIW1fcGFnZVBvcHVwKTsKKyAgICBtX3BhZ2VQb3B1cCA9IHBvcHVwOworCisgICAgaWYgKEZy
YW1lKiBmcmFtZSA9IGZvY3VzZWRXZWJDb3JlRnJhbWUoKSkKKyAgICAgICAgZnJhbWUtPnNlbGVj
dGlvbigpLT5zZXRDYXJldFZpc2libGUoZmFsc2UpOworfQorCit2b2lkIFdlYlZpZXdJbXBsOjpw
b3B1cENsb3NlZChXZWJQYWdlUG9wdXBJbXBsKiBwb3B1cCkKK3sKKyAgICBBU1NFUlQobV9wYWdl
UG9wdXAgPT0gcG9wdXApOworICAgIG1fcGFnZVBvcHVwID0gMDsKKyAgICBpZiAoRnJhbWUqIGZy
YW1lID0gZm9jdXNlZFdlYkNvcmVGcmFtZSgpKQorICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCkt
PnBhZ2VBY3RpdmF0aW9uQ2hhbmdlZCgpOworfQorI2VuZGlmCisKIHZvaWQgV2ViVmlld0ltcGw6
OmhpZGVBdXRvZmlsbFBvcHVwKCkKIHsKICAgICBpZiAobV9hdXRvZmlsbFBvcHVwU2hvd2luZykg
ewpAQCAtMTczNiw4ICsxNzY0LDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0Rm9jdXMoYm9vbCBl
bmFibGUpCiAgICAgICAgIH0KICAgICAgICAgbV9pbWVBY2NlcHRFdmVudHMgPSB0cnVlOwogICAg
IH0gZWxzZSB7Ci0gICAgICAgIGhpZGVBdXRvZmlsbFBvcHVwKCk7Ci0gICAgICAgIGhpZGVTZWxl
Y3RQb3B1cCgpOworICAgICAgICBoaWRlUG9wdXBzKCk7CiAKICAgICAgICAgLy8gQ2xlYXIgZm9j
dXMgb24gdGhlIGN1cnJlbnRseSBmb2N1c2VkIGZyYW1lIGlmIGFueS4KICAgICAgICAgaWYgKCFt
X3BhZ2UpCkBAIC0yODI2LDYgKzI4NTMsMTMgQEAgdm9pZCBXZWJWaWV3SW1wbDo6aGlkZVBvcHVw
cygpCiB7CiAgICAgaGlkZVNlbGVjdFBvcHVwKCk7CiAgICAgaGlkZUF1dG9maWxsUG9wdXAoKTsK
KyNpZiBFTkFCTEUoUEFHRV9QT1BVUCkKKyAgICBpZiAobV9wYWdlUG9wdXApIHsKKyAgICAgICAg
V2ViUGFnZVBvcHVwSW1wbCogcGFnZVBvcHVwID0gbV9wYWdlUG9wdXAuZ2V0KCk7CisgICAgICAg
IHBvcHVwQ2xvc2VkKHBhZ2VQb3B1cCk7CisgICAgICAgIHBhZ2VQb3B1cC0+Y2xvc2VQb3B1cCgp
OworICAgIH0KKyNlbmRpZgogfQogCiB2b2lkIFdlYlZpZXdJbXBsOjpwZXJmb3JtQ3VzdG9tQ29u
dGV4dE1lbnVBY3Rpb24odW5zaWduZWQgYWN0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlZpZXdJbXBsLmgKaW5kZXggOTlhMDRiOGM2MzAxMTI1YzNmODRmYTk2NmEzMzFlNTU5MzY3
M2IwOC4uNzE0MDBiOTgxMzU4M2YzNTc1YjMyOTk4NTMyZmQ4ZTIyOTE1NjE0OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCkBAIC05Miw2ICs5Miw3IEBAIGNsYXNz
IFdlYkRldlRvb2xzQWdlbnRDbGllbnQ7CiBjbGFzcyBXZWJEZXZUb29sc0FnZW50UHJpdmF0ZTsK
IGNsYXNzIFdlYkZyYW1lSW1wbDsKIGNsYXNzIFdlYkdlc3R1cmVFdmVudDsKK2NsYXNzIFdlYlBh
Z2VQb3B1cEltcGw7CiBjbGFzcyBXZWJJbWFnZTsKIGNsYXNzIFdlYktleWJvYXJkRXZlbnQ7CiBj
bGFzcyBXZWJNb3VzZUV2ZW50OwpAQCAtNDQ1LDYgKzQ0NiwxMCBAQCBwdWJsaWM6CiAgICAgLy8g
Tm90aWZpY2F0aW9uIHRoYXQgYSBwb3B1cCB3YXMgb3BlbmVkL2Nsb3NlZC4KICAgICB2b2lkIHBv
cHVwT3BlbmVkKFdlYkNvcmU6OlBvcHVwQ29udGFpbmVyKiBwb3B1cENvbnRhaW5lcik7CiAgICAg
dm9pZCBwb3B1cENsb3NlZChXZWJDb3JlOjpQb3B1cENvbnRhaW5lciogcG9wdXBDb250YWluZXIp
OworI2lmIEVOQUJMRShQQUdFX1BPUFVQKQorICAgIHZvaWQgcG9wdXBPcGVuZWQoV2ViUGFnZVBv
cHVwSW1wbCopOworICAgIHZvaWQgcG9wdXBDbG9zZWQoV2ViUGFnZVBvcHVwSW1wbCopOworI2Vu
ZGlmCiAKICAgICB2b2lkIGhpZGVBdXRvZmlsbFBvcHVwKCk7CiAKQEAgLTQ4Miw2ICs0ODcsMTEg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmlsaXR5U3RhdGUoV2ViUGFnZVZp
c2liaWxpdHlTdGF0ZSwgYm9vbCk7CiAKICAgICBXZWJDb3JlOjpQb3B1cENvbnRhaW5lciogc2Vs
ZWN0UG9wdXAoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdFBvcHVwLmdldCgpOyB9CisjaWYgRU5B
QkxFKFBBR0VfUE9QVVApCisgICAgYm9vbCBoYXNPcGVuZWRQb3B1cCgpIGNvbnN0IHsgcmV0dXJu
IG1fc2VsZWN0UG9wdXAgfHwgbV9wYWdlUG9wdXA7IH0KKyNlbHNlCisgICAgYm9vbCBoYXNPcGVu
ZWRQb3B1cCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0UG9wdXA7IH0KKyNlbmRpZgogCiAgICAg
Ly8gUmV0dXJucyB0cnVlIGlmIHRoZSBldmVudCBsZWFkcyB0byBzY3JvbGxpbmcuCiAgICAgc3Rh
dGljIGJvb2wgbWFwS2V5Q29kZUZvclNjcm9sbChpbnQga2V5Q29kZSwKQEAgLTY4NSw2ICs2OTUs
MTEgQEAgcHJpdmF0ZToKICAgICAvLyBUaGUgcG9wdXAgYXNzb2NpYXRlZCB3aXRoIGEgc2VsZWN0
IGVsZW1lbnQuCiAgICAgUmVmUHRyPFdlYkNvcmU6OlBvcHVwQ29udGFpbmVyPiBtX3NlbGVjdFBv
cHVwOwogCisjaWYgRU5BQkxFKFBBR0VfUE9QVVApCisgICAgLy8gVGhlIHBvcHVwIGFzc29jaWF0
ZWQgd2l0aCBhbiBpbnB1dCBlbGVtZW50LgorICAgIFJlZlB0cjxXZWJQYWdlUG9wdXBJbXBsPiBt
X3BhZ2VQb3B1cDsKKyNlbmRpZgorCiAgICAgT3duUHRyPFdlYkRldlRvb2xzQWdlbnRQcml2YXRl
PiBtX2RldlRvb2xzQWdlbnQ7CiAgICAgT3duUHRyPFBhZ2VPdmVybGF5TGlzdD4gbV9wYWdlT3Zl
cmxheXM7CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>