<?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>91731</bug_id>
          
          <creation_ts>2012-07-19 04:20:43 -0700</creation_ts>
          <short_desc>[EFL][WK2][WTR] Implement EventSenderProxy</short_desc>
          <delta_ts>2012-07-20 15:04:27 -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>WebKit EFL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kangil Han">kangil.han</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>alexander.shalamov</cc>
    
    <cc>cdumez</cc>
    
    <cc>d-r</cc>
    
    <cc>eric</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>haraken</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>morrita</cc>
    
    <cc>rakuco</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sw0524.lee</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>673377</commentid>
    <comment_count>0</comment_count>
    <who name="Kangil Han">kangil.han</who>
    <bug_when>2012-07-19 04:20:43 -0700</bug_when>
    <thetext>WK2 EFL needs EventSenderProxy to send events to WebKitTestRunner.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673420</commentid>
    <comment_count>1</comment_count>
      <attachid>153239</attachid>
    <who name="Kangil Han">kangil.han</who>
    <bug_when>2012-07-19 05:57:16 -0700</bug_when>
    <thetext>Created attachment 153239
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673422</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-19 06:00:30 -0700</bug_when>
    <thetext>Attachment 153239 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Tools/ChangeLog&apos;, u&apos;Tools/WebKitTestRunner...&quot; exit_code: 1
Tools/WebKitTestRunner/EventSenderProxy.h:37:  &quot;wtf/Vector.h&quot; already included at Tools/WebKitTestRunner/EventSenderProxy.h:35  [build/include] [4]
Total errors found: 1 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673438</commentid>
    <comment_count>3</comment_count>
      <attachid>153243</attachid>
    <who name="Kangil Han">kangil.han</who>
    <bug_when>2012-07-19 06:32:26 -0700</bug_when>
    <thetext>Created attachment 153243
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673511</commentid>
    <comment_count>4</comment_count>
      <attachid>153243</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-07-19 07:57:17 -0700</bug_when>
    <thetext>Comment on attachment 153243
patch

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

I would review this patch further. BTW, I wonder how many test cases this patch supports on WTR.

&gt; Tools/WebKitTestRunner/efl/EventSenderProxyEfl.cpp:391
&gt; +    // FIXME: Implement this

Personally, I prefer notImplemented() to this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673595</commentid>
    <comment_count>5</comment_count>
      <attachid>153243</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-07-19 09:48:22 -0700</bug_when>
    <thetext>Comment on attachment 153243
patch

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

&gt; Tools/WebKitTestRunner/EventSenderProxy.h:98
&gt; +    void sendOrQueueEvent(WTREvent);

Pass by const reference instead of by value?

&gt; Tools/WebKitTestRunner/EventSenderProxy.h:99
&gt; +    void dispatchEvent(WTREvent);

Ditto.

&gt; Tools/WebKitTestRunner/EventSenderProxy.h:124
&gt; +    Vector&lt;WTREvent&gt; m_eventQueue;

You only push_back() and pop_front() on this container. Vector is definitely not the best container for this. How about a WTF::Deque? it has O(1) for pop_front() and push_back().

&gt; Tools/WebKitTestRunner/efl/EventSenderProxyEfl.cpp:84
&gt; +    int vertical;

Would add a blank line after this.

&gt; Tools/WebKitTestRunner/efl/EventSenderProxyEfl.cpp:85
&gt; +    WTREvent()

modifiers, horizontal and vertical are not initialized.

&gt; Tools/WebKitTestRunner/efl/EventSenderProxyEfl.cpp:90
&gt; +    }

Would add a blank line after this.

&gt; Tools/WebKitTestRunner/efl/EventSenderProxyEfl.cpp:91
&gt; +    WTREvent(WTREventType eventType, unsigned delay, WKEventModifiers modifiers, int button)

horizontal and vertical are not initialized.

&gt; Tools/WebKitTestRunner/efl/EventSenderProxyEfl.cpp:128
&gt; +    for (unsigned modifier = 0; modifier &lt; 4; ++modifier) {

can we use sizeof(modifierNames)/sizeof(char*) instead of 4 here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674175</commentid>
    <comment_count>6</comment_count>
      <attachid>153414</attachid>
    <who name="Kangil Han">kangil.han</who>
    <bug_when>2012-07-19 22:34:56 -0700</bug_when>
    <thetext>Created attachment 153414
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674183</commentid>
    <comment_count>7</comment_count>
    <who name="Kangil Han">kangil.han</who>
    <bug_when>2012-07-19 22:44:27 -0700</bug_when>
    <thetext>It seems that there are around 700 cases using eventSender. All done, thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674193</commentid>
    <comment_count>8</comment_count>
      <attachid>153414</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-07-19 22:59:28 -0700</bug_when>
    <thetext>Comment on attachment 153414
patch

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

&gt; Tools/WebKitTestRunner/EventSenderProxy.h:97
&gt; +    void sendOrQueueEvent(const WTREvent);

You added &quot;const&quot; but forgot the reference (which is the most important).

&gt; Tools/WebKitTestRunner/EventSenderProxy.h:98
&gt; +    void dispatchEvent(const WTREvent);

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674196</commentid>
    <comment_count>9</comment_count>
      <attachid>153414</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-07-19 23:01:05 -0700</bug_when>
    <thetext>Comment on attachment 153414
patch

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

&gt; Tools/WebKitTestRunner/efl/EventSenderProxyEfl.cpp:87
&gt; +    WTREvent()

Modifiers is not initialized.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674210</commentid>
    <comment_count>10</comment_count>
      <attachid>153423</attachid>
    <who name="Kangil Han">kangil.han</who>
    <bug_when>2012-07-19 23:12:35 -0700</bug_when>
    <thetext>Created attachment 153423
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674211</commentid>
    <comment_count>11</comment_count>
    <who name="Kangil Han">kangil.han</who>
    <bug_when>2012-07-19 23:12:48 -0700</bug_when>
    <thetext>Done, thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674214</commentid>
    <comment_count>12</comment_count>
      <attachid>153423</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-07-19 23:17:19 -0700</bug_when>
    <thetext>Comment on attachment 153423
patch

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

LGTM but:

&gt; Tools/WebKitTestRunner/efl/EventSenderProxyEfl.cpp:313
&gt; +        WTREvent wtrEvent = m_eventQueue.first();

You could use Deque::takeFirst().

&gt; Tools/WebKitTestRunner/efl/EventSenderProxyEfl.cpp:318
&gt; +        m_eventQueue.removeFirst();

This line would become useless.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674216</commentid>
    <comment_count>13</comment_count>
      <attachid>153424</attachid>
    <who name="Kangil Han">kangil.han</who>
    <bug_when>2012-07-19 23:20:09 -0700</bug_when>
    <thetext>Created attachment 153424
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674217</commentid>
    <comment_count>14</comment_count>
    <who name="Kangil Han">kangil.han</who>
    <bug_when>2012-07-19 23:20:22 -0700</bug_when>
    <thetext>Done, thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674218</commentid>
    <comment_count>15</comment_count>
      <attachid>153424</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-07-19 23:21:23 -0700</bug_when>
    <thetext>Comment on attachment 153424
patch

LGTM. Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674219</commentid>
    <comment_count>16</comment_count>
    <who name="Kangil Han">kangil.han</who>
    <bug_when>2012-07-19 23:22:00 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 153424 [details])
&gt; LGTM. Thanks.

Thanks for your review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674220</commentid>
    <comment_count>17</comment_count>
    <who name="Kangil Han">kangil.han</who>
    <bug_when>2012-07-19 23:23:35 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 153243 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=153243&amp;action=review
&gt; 
&gt; I would review this patch further. BTW, I wonder how many test cases this patch supports on WTR.
&gt; 
&gt; &gt; Tools/WebKitTestRunner/efl/EventSenderProxyEfl.cpp:391
&gt; &gt; +    // FIXME: Implement this
&gt; 
&gt; Personally, I prefer notImplemented() to this.

gyuyoung: Informal review, please. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674254</commentid>
    <comment_count>18</comment_count>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2012-07-20 00:16:19 -0700</bug_when>
    <thetext>Looks good to me, too.

It&apos;s really important patch for WTR/Efl.

Thank you very much.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674256</commentid>
    <comment_count>19</comment_count>
      <attachid>153424</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-07-20 00:18:51 -0700</bug_when>
    <thetext>Comment on attachment 153424
patch

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

&gt; Tools/WebKitTestRunner/efl/EventSenderProxyEfl.cpp:48
&gt; +    WTREventTypeNone,

I think it is better to initialize with default value in order to recognize enum type value more easily.

&gt; Tools/WebKitTestRunner/efl/EventSenderProxyEfl.cpp:65
&gt; +    EvasMouseButtonNone,

ditto.

&gt; Tools/WebKitTestRunner/efl/EventSenderProxyEfl.cpp:166
&gt; +        evas_event_feed_mouse_wheel(evas, 1, -10, 0, 0);

Why don&apos;t you make constant variable for scroll direction ? In this case, it looks -10 can be replaced by SCROLL_LEFT. This is more readable.

&gt; Tools/WebKitTestRunner/efl/EventSenderProxyEfl.cpp:298
&gt; +void EventSenderProxy::dispatchEvent(const WTREvent&amp; wtrEvent)

It seems to me *wtr* prefix is not unneeded in *wtrEvent*.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674258</commentid>
    <comment_count>20</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-07-20 00:20:08 -0700</bug_when>
    <thetext>(In reply to comment #19)

&gt; It seems to me *wtr* prefix is not unneeded in *wtrEvent*.

Sorry.

s/is not unneeded/is unneeded/g</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674262</commentid>
    <comment_count>21</comment_count>
      <attachid>153424</attachid>
    <who name="Kangil Han">kangil.han</who>
    <bug_when>2012-07-20 00:26:58 -0700</bug_when>
    <thetext>Comment on attachment 153424
patch

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

&gt;&gt; Tools/WebKitTestRunner/efl/EventSenderProxyEfl.cpp:48
&gt;&gt; +    WTREventTypeNone,
&gt; 
&gt; I think it is better to initialize with default value in order to recognize enum type value more easily.

I am afraid I don&apos;t understand fully here. Would you please elaborate more?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674293</commentid>
    <comment_count>22</comment_count>
      <attachid>153439</attachid>
    <who name="Kangil Han">kangil.han</who>
    <bug_when>2012-07-20 00:59:36 -0700</bug_when>
    <thetext>Created attachment 153439
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674294</commentid>
    <comment_count>23</comment_count>
    <who name="Kangil Han">kangil.han</who>
    <bug_when>2012-07-20 00:59:57 -0700</bug_when>
    <thetext>Done, thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674310</commentid>
    <comment_count>24</comment_count>
      <attachid>153445</attachid>
    <who name="Kangil Han">kangil.han</who>
    <bug_when>2012-07-20 01:19:04 -0700</bug_when>
    <thetext>Created attachment 153445
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674311</commentid>
    <comment_count>25</comment_count>
    <who name="Kangil Han">kangil.han</who>
    <bug_when>2012-07-20 01:20:15 -0700</bug_when>
    <thetext>gyuyoung: I&apos;ve modified all &apos;wtrEvent&apos; variable to &apos;event&apos;. Hope this would look better to you. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674313</commentid>
    <comment_count>26</comment_count>
      <attachid>153445</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-07-20 01:24:48 -0700</bug_when>
    <thetext>Comment on attachment 153445
patch

Looks good to me now. Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674356</commentid>
    <comment_count>27</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2012-07-20 02:21:39 -0700</bug_when>
    <thetext>Kangil, can you test both, before and after your patch with
$ run-webkit-tests -2 --efl --debug 

When I try your patch here, it seems to cause more crashes than it fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674376</commentid>
    <comment_count>28</comment_count>
    <who name="Kangil Han">kangil.han</who>
    <bug_when>2012-07-20 02:39:19 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; Kangil, can you test both, before and after your patch with
&gt; $ run-webkit-tests -2 --efl --debug 
&gt; 
&gt; When I try your patch here, it seems to cause more crashes than it fixes.

I will figure out what happened between them. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674383</commentid>
    <comment_count>29</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2012-07-20 02:42:54 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; (In reply to comment #27)
&gt; &gt; Kangil, can you test both, before and after your patch with
&gt; &gt; $ run-webkit-tests -2 --efl --debug 
&gt; &gt; 
&gt; &gt; When I try your patch here, it seems to cause more crashes than it fixes.
&gt; 
&gt; I will figure out what happened between them. :)

Might not be your patch, I think the assertion failures are related to bug 91719, r123085.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674424</commentid>
    <comment_count>30</comment_count>
    <who name="Kangil Han">kangil.han</who>
    <bug_when>2012-07-20 03:37:03 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; (In reply to comment #28)
&gt; &gt; (In reply to comment #27)
&gt; &gt; &gt; Kangil, can you test both, before and after your patch with
&gt; &gt; &gt; $ run-webkit-tests -2 --efl --debug 
&gt; &gt; &gt; 
&gt; &gt; &gt; When I try your patch here, it seems to cause more crashes than it fixes.
&gt; &gt; 
&gt; &gt; I will figure out what happened between them. :)
&gt; 
&gt; Might not be your patch, I think the assertion failures are related to bug 91719, r123085.

Got it. No more crashes on my side, release build though. :)
I am going to ask a formal review~</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674440</commentid>
    <comment_count>31</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2012-07-20 03:59:21 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; (From update of attachment 153445 [details])
&gt; Looks good to me now. Thanks.

Checked debug build, works fine and reduces number of crashes, LGTM too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674452</commentid>
    <comment_count>32</comment_count>
      <attachid>153445</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-07-20 04:24:39 -0700</bug_when>
    <thetext>Comment on attachment 153445
patch

The patch received full LGTMs from EFL guys. The patch also affects the EFL port only. Per the discussion in IRC, let me rubberstamp it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674458</commentid>
    <comment_count>33</comment_count>
      <attachid>153445</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-20 04:31:28 -0700</bug_when>
    <thetext>Comment on attachment 153445
patch

Clearing flags on attachment: 153445

Committed r123203: &lt;http://trac.webkit.org/changeset/123203&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674459</commentid>
    <comment_count>34</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-20 04:31:36 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153239</attachid>
            <date>2012-07-19 05:57:16 -0700</date>
            <delta_ts>2012-07-19 06:32:26 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>21917</size>
            <attacher name="Kangil Han">kangil.han</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBhYmMy
MzVlLi5iOTVlNjQzIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNTcgQEAKKzIwMTItMDctMTkgIEthbmdpbCBIYW4gIDxrYW5naWwu
aGFuQHNhbXN1bmcuY29tPgorCisgICAgICAgIFtFRkxdW1dLMl1bV1RSXSBJbXBsZW1lbnQgRXZl
bnRTZW5kZXJQcm94eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9OTE3MzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGlzIGlzIGFuIGluaXRpYWwgRUZMIHBvcnQgaW1wbGVtZW50YXRpb24gb2YgRXZlbnRT
ZW5kZXJQcm94eS4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvRXZlbnRTZW5kZXJQcm94
eS5oOgorICAgICAgICAoV1RSKToKKyAgICAgICAgKEV2ZW50U2VuZGVyUHJveHkpOgorICAgICAg
ICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvRXZlbnRTZW5kaW5nQ29udHJvbGxl
ci5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1FZmwuY21ha2U6CisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6
OlRlc3RDb250cm9sbGVyOjpUZXN0Q29udHJvbGxlcik6CisgICAgICAgIChXVFI6OlRlc3RDb250
cm9sbGVyOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKToK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2VmbC9FdmVudFNlbmRlclByb3h5RWZsLmNwcDog
QWRkZWQuCisgICAgICAgIChXVFIpOgorICAgICAgICAoV1RSRXZlbnQpOgorICAgICAgICAoV1RS
OjpXVFJFdmVudDo6V1RSRXZlbnQpOgorICAgICAgICAoV1RSOjpLZXlFdmVudEluZm86OktleUV2
ZW50SW5mbyk6CisgICAgICAgIChLZXlFdmVudEluZm8pOgorICAgICAgICAoV1RSOjpldmFzTW91
c2VCdXR0b24pOgorICAgICAgICAoV1RSOjpzZXRFdmFzTW9kaWZpZXJzKToKKyAgICAgICAgKFdU
Ujo6ZGlzcGF0Y2hNb3VzZURvd25FdmVudCk6CisgICAgICAgIChXVFI6OmRpc3BhdGNoTW91c2VV
cEV2ZW50KToKKyAgICAgICAgKFdUUjo6ZGlzcGF0Y2hNb3VzZU1vdmVFdmVudCk6CisgICAgICAg
IChXVFI6OmRpc3BhdGNoTW91c2VTY3JvbGxCeUV2ZW50KToKKyAgICAgICAgKFdUUjo6a2V5UGFk
TmFtZSk6CisgICAgICAgIChXVFI6OmtleU5hbWUpOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRl
clByb3h5OjpFdmVudFNlbmRlclByb3h5KToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94
eTo6dXBkYXRlQ2xpY2tDb3VudEZvckJ1dHRvbik6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVy
UHJveHk6OmRpc3BhdGNoRXZlbnQpOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5Ojpy
ZXBsYXlTYXZlZEV2ZW50cyk6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6OnNlbmRP
clF1ZXVlRXZlbnQpOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5Ojptb3VzZURvd24p
OgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5Ojptb3VzZVVwKToKKyAgICAgICAgKFdU
Ujo6RXZlbnRTZW5kZXJQcm94eTo6bW91c2VNb3ZlVG8pOgorICAgICAgICAoV1RSOjpFdmVudFNl
bmRlclByb3h5Ojptb3VzZVNjcm9sbEJ5KToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94
eTo6bGVhcEZvcndhcmQpOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5OjprZXlEb3du
KToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6YWRkVG91Y2hQb2ludCk6CisgICAg
ICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6OnVwZGF0ZVRvdWNoUG9pbnQpOgorICAgICAgICAo
V1RSOjpFdmVudFNlbmRlclByb3h5OjpzZXRUb3VjaE1vZGlmaWVyKToKKyAgICAgICAgKFdUUjo6
RXZlbnRTZW5kZXJQcm94eTo6dG91Y2hTdGFydCk6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVy
UHJveHk6OnRvdWNoTW92ZSk6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6OnRvdWNo
RW5kKToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6dG91Y2hDYW5jZWwpOgorICAg
ICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5OjpjbGVhclRvdWNoUG9pbnRzKToKKyAgICAgICAg
KFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6cmVsZWFzZVRvdWNoUG9pbnQpOgorICAgICAgICAoV1RS
OjpFdmVudFNlbmRlclByb3h5OjpjYW5jZWxUb3VjaFBvaW50KToKKyAgICAgICAgKFdUUjo6RXZl
bnRTZW5kZXJQcm94eTo6c2V0VG91Y2hQb2ludFJhZGl1cyk6CisKIDIwMTItMDctMTggIENocmlz
dG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVsLmNvbT4KIAogICAgICAgICBbQ01h
a2VdW0VGTF0gU2hvdWxkIHRyeSB0byBmaW5kIHRoZSBzYW1lIGxpYnNvdXAgdmVyc2lvbiBwdWxs
ZWQgYnkgamhidWlsZApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9FdmVudFNl
bmRlclByb3h5LmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0V2ZW50U2VuZGVyUHJveHkuaApp
bmRleCA4MTY4NTEzLi5hMTI4MjM4IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0V2ZW50U2VuZGVyUHJveHkuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0V2ZW50U2Vu
ZGVyUHJveHkuaApAQCAtMzMsNiArMzMsOCBAQAogI2VsaWYgUExBVEZPUk0oR1RLKQogI2luY2x1
ZGUgPGdkay9nZGsuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjZWxpZiBQTEFURk9STShF
RkwpCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXVFIgewpA
QCAtNDEsNiArNDMsOCBAQCBjbGFzcyBUZXN0Q29udHJvbGxlcjsKIAogI2lmIFBMQVRGT1JNKEdU
SykKIHN0cnVjdCBXVFJFdmVudFF1ZXVlSXRlbTsKKyNlbGlmIFBMQVRGT1JNKEVGTCkKK3N0cnVj
dCBXVFJFdmVudDsKICNlbmRpZgogCiBjbGFzcyBFdmVudFNlbmRlclByb3h5IHsKQEAgLTc3LDcg
KzgxLDcgQEAgcHJpdmF0ZToKICAgICBkb3VibGUgY3VycmVudEV2ZW50VGltZSgpIHsgcmV0dXJu
IG1fdGltZTsgfQogICAgIHZvaWQgdXBkYXRlQ2xpY2tDb3VudEZvckJ1dHRvbihpbnQgYnV0dG9u
KTsKIAotI2lmIFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShHVEspCisjaWYgUExBVEZPUk0oUVQp
IHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKQogICAgIHZvaWQgcmVwbGF5U2F2ZWRF
dmVudHMoKTsKICNlbmRpZgogCkBAIC04OSw2ICs5Myw5IEBAIHByaXZhdGU6CiAjZWxpZiBQTEFU
Rk9STShHVEspCiAgICAgdm9pZCBzZW5kT3JRdWV1ZUV2ZW50KEdka0V2ZW50Kik7CiAgICAgR2Rr
RXZlbnQqIGNyZWF0ZU1vdXNlQnV0dG9uRXZlbnQoR2RrRXZlbnRUeXBlLCB1bnNpZ25lZCBidXR0
b24sIFdLRXZlbnRNb2RpZmllcnMpOworI2VsaWYgUExBVEZPUk0oRUZMKQorICAgIHZvaWQgc2Vu
ZE9yUXVldWVFdmVudChXVFJFdmVudCk7CisgICAgdm9pZCBkaXNwYXRjaEV2ZW50KFdUUkV2ZW50
KTsKICNlbmRpZgogCiAgICAgZG91YmxlIG1fdGltZTsKQEAgLTExMiw2ICsxMTksOSBAQCBwcml2
YXRlOgogICAgIFFQb2ludCBtX3RvdWNoUG9pbnRSYWRpdXM7CiAgICAgYm9vbCBtX3RvdWNoQWN0
aXZlOwogI2VuZGlmCisjZWxpZiBQTEFURk9STShFRkwpCisgICAgVmVjdG9yPFdUUkV2ZW50PiBt
X2V2ZW50UXVldWU7CisgICAgdW5zaWduZWQgbV9tb3VzZUJ1dHRvbjsKICNlbmRpZgogfTsKIApk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9FdmVudFNl
bmRpbmdDb250cm9sbGVyLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuaAppbmRleCA4ZWEyZGIwLi5iMDQwYTQ5IDEwMDY0NAot
LS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0V2ZW50U2VuZGluZ0Nv
bnRyb2xsZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0V2
ZW50U2VuZGluZ0NvbnRyb2xsZXIuaApAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgPFdlYktp
dDIvV0tHZW9tZXRyeS5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKLSNpZiAhUExB
VEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oUVQpICYmICFQTEFURk9STShHVEspCisjaWYgIVBMQVRG
T1JNKE1BQykgJiYgIVBMQVRGT1JNKFFUKSAmJiAhUExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0o
RUZMKQogI2RlZmluZSBVU0VfV0VCUFJPQ0VTU19FVkVOVF9TSU1VTEFUSU9OCiAjZW5kaWYKIApk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybUVmbC5jbWFrZSBiL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggOTQyYzAwMy4uNmM5
MzA5MSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybUVmbC5jbWFr
ZQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC0xOSw2
ICsxOSw3IEBAIFNFVChGb3J3YXJkaW5nTmV0d29ya0hlYWRlcnNGb3JXZWJLaXRUZXN0UnVubmVy
X05BTUUgZm9yd2FyZGluZy1oZWFkZXJzU291cEZvcldlCiBMSVNUKEFQUEVORCBXZWJLaXRUZXN0
UnVubmVyX1NPVVJDRVMKICAgICAke1dFQktJVF9URVNUUlVOTkVSX0RJUn0vY2Fpcm8vVGVzdElu
dm9jYXRpb25DYWlyby5jcHAKIAorICAgICR7V0VCS0lUX1RFU1RSVU5ORVJfRElSfS9lZmwvRXZl
bnRTZW5kZXJQcm94eUVmbC5jcHAKICAgICAke1dFQktJVF9URVNUUlVOTkVSX0RJUn0vZWZsL1Bs
YXRmb3JtV2ViVmlld0VmbC5jcHAKICAgICAke1dFQktJVF9URVNUUlVOTkVSX0RJUn0vZWZsL1Rl
c3RDb250cm9sbGVyRWZsLmNwcAogICAgICR7V0VCS0lUX1RFU1RSVU5ORVJfRElSfS9lZmwvbWFp
bi5jcHAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIu
Y3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKaW5kZXggYzQ3
YzQ3NS4uMGEyY2IyYiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29u
dHJvbGxlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5j
cHAKQEAgLTgxLDcgKzgxLDcgQEAgVGVzdENvbnRyb2xsZXI6OlRlc3RDb250cm9sbGVyKGludCBh
cmdjLCBjb25zdCBjaGFyKiBhcmd2W10pCiAgICAgLCBtX2RpZFByaW50V2ViUHJvY2Vzc0NyYXNo
ZWRNZXNzYWdlKGZhbHNlKQogICAgICwgbV9zaG91bGRFeGl0V2hlbldlYlByb2Nlc3NDcmFzaGVz
KHRydWUpCiAgICAgLCBtX2JlZm9yZVVubG9hZFJldHVyblZhbHVlKHRydWUpCi0jaWYgUExBVEZP
Uk0oTUFDKSB8fCBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oR1RLKQorI2lmIFBMQVRGT1JNKE1B
QykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKQogICAg
ICwgbV9ldmVudFNlbmRlclByb3h5KG5ldyBFdmVudFNlbmRlclByb3h5KHRoaXMpKQogI2VuZGlm
CiB7CkBAIC01OTgsNyArNTk4LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZU1l
c3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUKIAogV0tSZXRh
aW5QdHI8V0tUeXBlUmVmPiBUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVz
c2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSwgV0tUeXBlUmVm
IG1lc3NhZ2VCb2R5KQogewotI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oUVQpIHx8IFBM
QVRGT1JNKEdUSykKKyNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKFFUKSB8fCBQTEFURk9S
TShHVEspIHx8IFBMQVRGT1JNKEVGTCkKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhtZXNzYWdlTmFtZSwgIkV2ZW50U2VuZGVyIikpIHsKICAgICAgICAgQVNTRVJUKFdLR2V0
VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7CiAgICAgICAg
IFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0Rp
Y3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9lZmwvRXZlbnRTZW5kZXJQcm94eUVmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uMTBhMzk5NwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwuY3BwCkBAIC0wLDAgKzEsNDQ2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOSBaYW4gRG9iZXJzZWsgPHphbmRvYmVyc2VrQGdtYWlsLmNv
bT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICog
Q29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgUHJv
RlVTSU9OIEVtYmVkZGVkIFN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVs
ZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiRXZlbnRTZW5kZXJQcm94eS5oIgorCisjaW5jbHVkZSAiUGxhdGZvcm1XZWJWaWV3Lmgi
CisjaW5jbHVkZSAiVGVzdENvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgPEVjb3JlLmg+CisjaW5j
bHVkZSA8RWNvcmVfRXZhcy5oPgorI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9QYXNzT3duQXJyYXlQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXVFIgeworCitl
bnVtIFdUUkV2ZW50VHlwZSB7CisgICAgV1RSRXZlbnRUeXBlTm9uZSwKKyAgICBXVFJFdmVudFR5
cGVNb3VzZURvd24sCisgICAgV1RSRXZlbnRUeXBlTW91c2VVcCwKKyAgICBXVFJFdmVudFR5cGVN
b3VzZU1vdmUsCisgICAgV1RSRXZlbnRUeXBlTW91c2VTY3JvbGxCeSwKKyAgICBXVFJFdmVudFR5
cGVMZWFwRm9yd2FyZAorfTsKKworZW51bSBXVFJNb3VzZUJ1dHRvbiB7CisgICAgV1RSTW91c2VC
dXR0b25Ob25lID0gLTEsCisgICAgV1RSTW91c2VCdXR0b25MZWZ0LAorICAgIFdUUk1vdXNlQnV0
dG9uTWlkZGxlLAorICAgIFdUUk1vdXNlQnV0dG9uUmlnaHQsCisgICAgV1RSTW91c2VCdXR0b25N
aWRkbGVEdXBsaWNhdGVkLAorfTsKKworZW51bSBFdmFzTW91c2VCdXR0b24geworICAgIEV2YXNN
b3VzZUJ1dHRvbk5vbmUsCisgICAgRXZhc01vdXNlQnV0dG9uTGVmdCwKKyAgICBFdmFzTW91c2VC
dXR0b25NaWRkbGUsCisgICAgRXZhc01vdXNlQnV0dG9uUmlnaHQKK307CisKKy8vIEtleSBldmVu
dCBsb2NhdGlvbiBjb2RlIGRlZmluZWQgaW4gRE9NIExldmVsIDMuCitlbnVtIEtleUxvY2F0aW9u
Q29kZSB7CisgICAgRE9NS2V5TG9jYXRpb25TdGFuZGFyZCAgICAgID0gMHgwMCwKKyAgICBET01L
ZXlMb2NhdGlvbkxlZnQgICAgICAgICAgPSAweDAxLAorICAgIERPTUtleUxvY2F0aW9uUmlnaHQg
ICAgICAgICA9IDB4MDIsCisgICAgRE9NS2V5TG9jYXRpb25OdW1wYWQgICAgICAgID0gMHgwMwor
fTsKKworc3RydWN0IFdUUkV2ZW50IHsKKyAgICBXVFJFdmVudFR5cGUgZXZlbnRUeXBlOworICAg
IHVuc2lnbmVkIGRlbGF5OworICAgIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzOworICAgIGlu
dCBidXR0b247CisgICAgaW50IGhvcml6b250YWw7CisgICAgaW50IHZlcnRpY2FsOworICAgIFdU
UkV2ZW50KCkKKyAgICAgICAgOiBldmVudFR5cGUoV1RSRXZlbnRUeXBlTm9uZSkKKyAgICAgICAg
LCBkZWxheSgwKQorICAgICAgICAsIGJ1dHRvbigtMSkKKyAgICB7CisgICAgfQorICAgIFdUUkV2
ZW50KFdUUkV2ZW50VHlwZSBldmVudFR5cGUsIHVuc2lnbmVkIGRlbGF5LCBXS0V2ZW50TW9kaWZp
ZXJzIG1vZGlmaWVycywgaW50IGJ1dHRvbikKKyAgICAgICAgOiBldmVudFR5cGUoZXZlbnRUeXBl
KQorICAgICAgICAsIGRlbGF5KGRlbGF5KQorICAgICAgICAsIG1vZGlmaWVycyhtb2RpZmllcnMp
CisgICAgICAgICwgYnV0dG9uKGJ1dHRvbikKKyAgICB7CisgICAgfQorfTsKKworc3RydWN0IEtl
eUV2ZW50SW5mbyA6IHB1YmxpYyBSZWZDb3VudGVkPEtleUV2ZW50SW5mbz4geworICAgIEtleUV2
ZW50SW5mbyhjb25zdCBDU3RyaW5nJiBrZXlOYW1lLCBjb25zdCBDU3RyaW5nJiBrZXlTdHJpbmcp
CisgICAgICAgIDoga2V5TmFtZShrZXlOYW1lKQorICAgICAgICAsIGtleVN0cmluZyhrZXlTdHJp
bmcpCisgICAgeworICAgIH0KKworICAgIGNvbnN0IENTdHJpbmcga2V5TmFtZTsKKyAgICBjb25z
dCBDU3RyaW5nIGtleVN0cmluZzsKK307CisKK3N0YXRpYyB1bnNpZ25lZCBldmFzTW91c2VCdXR0
b24odW5zaWduZWQgYnV0dG9uKQoreworICAgIGlmIChidXR0b24gPT0gV1RSTW91c2VCdXR0b25M
ZWZ0KQorICAgICAgICByZXR1cm4gRXZhc01vdXNlQnV0dG9uTGVmdDsKKyAgICBpZiAoYnV0dG9u
ID09IFdUUk1vdXNlQnV0dG9uTWlkZGxlKQorICAgICAgICByZXR1cm4gRXZhc01vdXNlQnV0dG9u
TWlkZGxlOworICAgIGlmIChidXR0b24gPT0gV1RSTW91c2VCdXR0b25SaWdodCkKKyAgICAgICAg
cmV0dXJuIEV2YXNNb3VzZUJ1dHRvblJpZ2h0OworICAgIGlmIChidXR0b24gPT0gV1RSTW91c2VC
dXR0b25NaWRkbGVEdXBsaWNhdGVkKQorICAgICAgICByZXR1cm4gRXZhc01vdXNlQnV0dG9uTWlk
ZGxlOworCisgICAgcmV0dXJuIEV2YXNNb3VzZUJ1dHRvbk5vbmU7Cit9CisKK3N0YXRpYyB2b2lk
IHNldEV2YXNNb2RpZmllcnMoRXZhcyogZXZhcywgV0tFdmVudE1vZGlmaWVycyB3a01vZGlmaWVy
cykKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciogbW9kaWZpZXJOYW1lc1tdID0geyAiU2hpZnQi
LCAiQ29udHJvbCIsICJBbHQiLCAiTWV0YSIgfTsKKyAgICBmb3IgKHVuc2lnbmVkIG1vZGlmaWVy
ID0gMDsgbW9kaWZpZXIgPCA0OyArK21vZGlmaWVyKSB7CisgICAgICAgIGlmICh3a01vZGlmaWVy
cyAmICgxIDw8IG1vZGlmaWVyKSkKKyAgICAgICAgICAgIGV2YXNfa2V5X21vZGlmaWVyX29uKGV2
YXMsIG1vZGlmaWVyTmFtZXNbbW9kaWZpZXJdKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
ZXZhc19rZXlfbW9kaWZpZXJfb2ZmKGV2YXMsIG1vZGlmaWVyTmFtZXNbbW9kaWZpZXJdKTsKKyAg
ICB9Cit9CisKK3N0YXRpYyB2b2lkIGRpc3BhdGNoTW91c2VEb3duRXZlbnQoRXZhcyogZXZhcywg
dW5zaWduZWQgYnV0dG9uLCBXS0V2ZW50TW9kaWZpZXJzIHdrTW9kaWZpZXJzKQoreworICAgIHNl
dEV2YXNNb2RpZmllcnMoZXZhcywgd2tNb2RpZmllcnMpOworICAgIGV2YXNfZXZlbnRfZmVlZF9t
b3VzZV9kb3duKGV2YXMsIGJ1dHRvbiwgRVZBU19CVVRUT05fTk9ORSwgMCwgMCk7CisgICAgc2V0
RXZhc01vZGlmaWVycyhldmFzLCAwKTsKK30KKworc3RhdGljIHZvaWQgZGlzcGF0Y2hNb3VzZVVw
RXZlbnQoRXZhcyogZXZhcywgdW5zaWduZWQgYnV0dG9uLCBXS0V2ZW50TW9kaWZpZXJzIHdrTW9k
aWZpZXJzKQoreworICAgIHNldEV2YXNNb2RpZmllcnMoZXZhcywgd2tNb2RpZmllcnMpOworICAg
IGV2YXNfZXZlbnRfZmVlZF9tb3VzZV91cChldmFzLCBidXR0b24sIEVWQVNfQlVUVE9OX05PTkUs
IDAsIDApOworICAgIHNldEV2YXNNb2RpZmllcnMoZXZhcywgMCk7Cit9CisKK3N0YXRpYyB2b2lk
IGRpc3BhdGNoTW91c2VNb3ZlRXZlbnQoRXZhcyogZXZhcywgaW50IHgsIGludCB5KQoreworICAg
IGV2YXNfZXZlbnRfZmVlZF9tb3VzZV9tb3ZlKGV2YXMsIHgsIHksIDAsIDApOworfQorCitzdGF0
aWMgdm9pZCBkaXNwYXRjaE1vdXNlU2Nyb2xsQnlFdmVudChFdmFzKiBldmFzLCBpbnQgaG9yaXpv
bnRhbCwgaW50IHZlcnRpY2FsKQoreworICAgIGlmIChob3Jpem9udGFsID4gMCkKKyAgICAgICAg
ZXZhc19ldmVudF9mZWVkX21vdXNlX3doZWVsKGV2YXMsIDEsIC0xMCwgMCwgMCk7CisgICAgZWxz
ZSBpZiAoaG9yaXpvbnRhbCA8IDApCisgICAgICAgIGV2YXNfZXZlbnRfZmVlZF9tb3VzZV93aGVl
bChldmFzLCAxLCAxMCwgMCwgMCk7CisKKyAgICBpZiAodmVydGljYWwgPiAwKQorICAgICAgICBl
dmFzX2V2ZW50X2ZlZWRfbW91c2Vfd2hlZWwoZXZhcywgMCwgMTAsIDAsIDApOworICAgIGVsc2Ug
aWYgKHZlcnRpY2FsIDwgMCkKKyAgICAgICAgZXZhc19ldmVudF9mZWVkX21vdXNlX3doZWVsKGV2
YXMsIDAsIC0xMCwgMCwgMCk7Cit9CisKK3N0YXRpYyBjb25zdCBQYXNzUmVmUHRyPEtleUV2ZW50
SW5mbz4ga2V5UGFkTmFtZShXS1N0cmluZ1JlZiBrZXlSZWYpCit7CisgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAibGVmdEFycm93IikpCisgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJLUF9MZWZ0IiwgIiIpKTsKKyAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJyaWdodEFycm93IikpCisgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJLUF9SaWdodCIsICIiKSk7CisgICAg
aWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAidXBBcnJvdyIpKQorICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiS1BfVXAiLCAiIikpOworICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgImRvd25BcnJvdyIpKQor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiS1BfRG93biIsICIiKSk7
CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAicGFnZVVwIikp
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJLUF9QcmlvciIsICIi
KSk7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAicGFnZURv
d24iKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIktQX05leHQi
LCAiIikpOworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgImhv
bWUiKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIktQX0hvbWUi
LCAiIikpOworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgImVu
ZCIpKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiS1BfRW5kIiwg
IiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJpbnNl
cnQiKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIktQX0luc2Vy
dCIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAi
ZGVsZXRlIikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJLUF9E
ZWxldGUiLCAiIikpOworCisgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSBXS1N0cmluZ0dldE1heGlt
dW1VVEY4Q1N0cmluZ1NpemUoa2V5UmVmKTsKKyAgICBPd25BcnJheVB0cjxjaGFyPiBidWZmZXIg
PSBhZG9wdEFycmF5UHRyKG5ldyBjaGFyW2J1ZmZlclNpemVdKTsKKyAgICBXS1N0cmluZ0dldFVU
RjhDU3RyaW5nKGtleVJlZiwgYnVmZmVyLmdldCgpLCBidWZmZXJTaXplKTsKKyAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbyhidWZmZXIuZ2V0KCksIGJ1ZmZlci5nZXQoKSkpOwor
fQorCitzdGF0aWMgY29uc3QgUGFzc1JlZlB0cjxLZXlFdmVudEluZm8+IGtleU5hbWUoV0tTdHJp
bmdSZWYga2V5UmVmKQoreworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtl
eVJlZiwgImxlZnRBcnJvdyIpKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50
SW5mbygiTGVmdCIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
a2V5UmVmLCAicmlnaHRBcnJvdyIpKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2
ZW50SW5mbygiUmlnaHQiLCAiIikpOworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKGtleVJlZiwgInVwQXJyb3ciKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlF
dmVudEluZm8oIlVwIiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhrZXlSZWYsICJkb3duQXJyb3ciKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlF
dmVudEluZm8oIkRvd24iLCAiIikpOworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKGtleVJlZiwgInBhZ2VVcCIpKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2
ZW50SW5mbygiUHJpb3IiLCAiIikpOworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKGtleVJlZiwgInBhZ2VEb3duIikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5
RXZlbnRJbmZvKCJOZXh0IiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhrZXlSZWYsICJob21lIikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZl
bnRJbmZvKCJIb21lIiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhrZXlSZWYsICJlbmQiKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudElu
Zm8oIkVuZCIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5
UmVmLCAiaW5zZXJ0IikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZv
KCJJbnNlcnQiLCAiIikpOworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtl
eVJlZiwgImRlbGV0ZSIpKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5m
bygiRGVsZXRlIiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhr
ZXlSZWYsICJwcmludFNjcmVlbiIpKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2
ZW50SW5mbygiUHJpbnQiLCAiIikpOworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKGtleVJlZiwgIm1lbnUiKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVu
dEluZm8oIk1lbnUiLCAiIikpOworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KGtleVJlZiwgIkYxIikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZv
KCJGMSIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVm
LCAiRjIiKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIkYyIiwg
IiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJGMyIp
KQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiRjMiLCAiIikpOwor
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgIkY0IikpCisgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJGNCIsICIiKSk7CisgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAiRjUiKSkKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIkY1IiwgIiIpKTsKKyAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJGNiIpKQorICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEtleUV2ZW50SW5mbygiRjYiLCAiIikpOworICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgIkY3IikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgS2V5RXZlbnRJbmZvKCJGNyIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcoa2V5UmVmLCAiRjgiKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlF
dmVudEluZm8oIkY4IiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhrZXlSZWYsICJGOSIpKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5m
bygiRjkiLCAiIikpOworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJl
ZiwgIkYxMCIpKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiRjEw
IiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJG
MTEiKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIkYxMSIsICIi
KSk7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAiRjEyIikp
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJGMTIiLCAiIikpOwor
CisgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSBXS1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1Np
emUoa2V5UmVmKTsKKyAgICBPd25BcnJheVB0cjxjaGFyPiBidWZmZXIgPSBhZG9wdEFycmF5UHRy
KG5ldyBjaGFyW2J1ZmZlclNpemVdKTsKKyAgICBXS1N0cmluZ0dldFVURjhDU3RyaW5nKGtleVJl
ZiwgYnVmZmVyLmdldCgpLCBidWZmZXJTaXplKTsKKyAgICBjaGFyIGNoYXJDb2RlID0gYnVmZmVy
LmdldCgpWzBdOworCisgICAgaWYgKGNoYXJDb2RlID09ICdcbicgfHwgY2hhckNvZGUgPT0gJ1xy
JykKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIlJldHVybiIsICJc
ciIpKTsKKyAgICBpZiAoY2hhckNvZGUgPT0gJ1x0JykKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBLZXlFdmVudEluZm8oIlRhYiIsICJcdCIpKTsKKyAgICBpZiAoY2hhckNvZGUgPT0gJ1x4
OCcpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJCYWNrU3BhY2Ui
LCAiXHg4IikpOworICAgIGlmIChjaGFyQ29kZSA9PSAnICcpCisgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgS2V5RXZlbnRJbmZvKCJzcGFjZSIsICIgIikpOworCisgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBLZXlFdmVudEluZm8oYnVmZmVyLmdldCgpLCBidWZmZXIuZ2V0KCkpKTsKK30KKwor
RXZlbnRTZW5kZXJQcm94eTo6RXZlbnRTZW5kZXJQcm94eShUZXN0Q29udHJvbGxlciogdGVzdENv
bnRyb2xsZXIpCisgICAgOiBtX3Rlc3RDb250cm9sbGVyKHRlc3RDb250cm9sbGVyKQorICAgICwg
bV90aW1lKDApCisgICAgLCBtX2xlZnRNb3VzZUJ1dHRvbkRvd24oZmFsc2UpCisgICAgLCBtX2Ns
aWNrQ291bnQoMCkKKyAgICAsIG1fY2xpY2tUaW1lKDApCisgICAgLCBtX2NsaWNrQnV0dG9uKFdU
Uk1vdXNlQnV0dG9uTm9uZSkKKyAgICAsIG1fbW91c2VCdXR0b24oV1RSTW91c2VCdXR0b25Ob25l
KQoreworfQorCit2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnVwZGF0ZUNsaWNrQ291bnRGb3JCdXR0
b24oaW50IGJ1dHRvbikKK3sKKyAgICBpZiAobV90aW1lIC0gbV9jbGlja1RpbWUgPCAxICYmIG1f
cG9zaXRpb24gPT0gbV9jbGlja1Bvc2l0aW9uICYmIGJ1dHRvbiA9PSBtX2NsaWNrQnV0dG9uKSB7
CisgICAgICAgICsrbV9jbGlja0NvdW50OworICAgICAgICBtX2NsaWNrVGltZSA9IG1fdGltZTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fY2xpY2tDb3VudCA9IDE7CisgICAgbV9j
bGlja1RpbWUgPSBtX3RpbWU7CisgICAgbV9jbGlja1Bvc2l0aW9uID0gbV9wb3NpdGlvbjsKKyAg
ICBtX2NsaWNrQnV0dG9uID0gYnV0dG9uOworfQorCit2b2lkIEV2ZW50U2VuZGVyUHJveHk6OmRp
c3BhdGNoRXZlbnQoV1RSRXZlbnQgd3RyRXZlbnQpCit7CisgICAgaWYgKHd0ckV2ZW50LmV2ZW50
VHlwZSA9PSBXVFJFdmVudFR5cGVNb3VzZURvd24pCisgICAgICAgIGRpc3BhdGNoTW91c2VEb3du
RXZlbnQoZWNvcmVfZXZhc19nZXQobV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxh
dGZvcm1XaW5kb3coKSksIHd0ckV2ZW50LmJ1dHRvbiwgd3RyRXZlbnQubW9kaWZpZXJzKTsKKyAg
ICBlbHNlIGlmICh3dHJFdmVudC5ldmVudFR5cGUgPT0gV1RSRXZlbnRUeXBlTW91c2VVcCkKKyAg
ICAgICAgZGlzcGF0Y2hNb3VzZVVwRXZlbnQoZWNvcmVfZXZhc19nZXQobV90ZXN0Q29udHJvbGxl
ci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1XaW5kb3coKSksIHd0ckV2ZW50LmJ1dHRvbiwgd3Ry
RXZlbnQubW9kaWZpZXJzKTsKKyAgICBlbHNlIGlmICh3dHJFdmVudC5ldmVudFR5cGUgPT0gV1RS
RXZlbnRUeXBlTW91c2VNb3ZlKQorICAgICAgICBkaXNwYXRjaE1vdXNlTW92ZUV2ZW50KGVjb3Jl
X2V2YXNfZ2V0KG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtV2luZG93
KCkpLCBzdGF0aWNfY2FzdDxpbnQ+KG1fcG9zaXRpb24ueCksIHN0YXRpY19jYXN0PGludD4obV9w
b3NpdGlvbi55KSk7CisgICAgZWxzZSBpZiAod3RyRXZlbnQuZXZlbnRUeXBlID09IFdUUkV2ZW50
VHlwZU1vdXNlU2Nyb2xsQnkpCisgICAgICAgIGRpc3BhdGNoTW91c2VTY3JvbGxCeUV2ZW50KGVj
b3JlX2V2YXNfZ2V0KG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtV2lu
ZG93KCkpLCB3dHJFdmVudC5ob3Jpem9udGFsLCB3dHJFdmVudC52ZXJ0aWNhbCk7Cit9CisKK3Zv
aWQgRXZlbnRTZW5kZXJQcm94eTo6cmVwbGF5U2F2ZWRFdmVudHMoKQoreworICAgIHdoaWxlICgh
bV9ldmVudFF1ZXVlLmlzRW1wdHkoKSkgeworICAgICAgICBXVFJFdmVudCB3dHJFdmVudCA9IG1f
ZXZlbnRRdWV1ZS5maXJzdCgpOworICAgICAgICBpZiAod3RyRXZlbnQuZGVsYXkpCisgICAgICAg
ICAgICB1c2xlZXAod3RyRXZlbnQuZGVsYXkgKiAxMDAwKTsKKworICAgICAgICBkaXNwYXRjaEV2
ZW50KHd0ckV2ZW50KTsKKyAgICAgICAgbV9ldmVudFF1ZXVlLnJlbW92ZSgwKTsKKyAgICB9Cit9
CisKK3ZvaWQgRXZlbnRTZW5kZXJQcm94eTo6c2VuZE9yUXVldWVFdmVudChXVFJFdmVudCB3dHJF
dmVudCkKK3sKKyAgICBpZiAobV9ldmVudFF1ZXVlLmlzRW1wdHkoKSB8fCAhbV9ldmVudFF1ZXVl
Lmxhc3QoKS5kZWxheSkgeworICAgICAgICBkaXNwYXRjaEV2ZW50KHd0ckV2ZW50KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIG1fZXZlbnRRdWV1ZS5hcHBlbmQod3RyRXZlbnQpOwor
ICAgIHJlcGxheVNhdmVkRXZlbnRzKCk7Cit9CisKK3ZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91
c2VEb3duKHVuc2lnbmVkIGJ1dHRvbiwgV0tFdmVudE1vZGlmaWVycyB3a01vZGlmaWVycykKK3sK
KyAgICBpZiAobV9tb3VzZUJ1dHRvbiA9PSBidXR0b24pCisgICAgICAgIHJldHVybjsKKworICAg
IG1fbW91c2VCdXR0b24gPSBidXR0b247CisgICAgdXBkYXRlQ2xpY2tDb3VudEZvckJ1dHRvbihi
dXR0b24pOworCisgICAgc2VuZE9yUXVldWVFdmVudChXVFJFdmVudChXVFJFdmVudFR5cGVNb3Vz
ZURvd24sIDAsIHdrTW9kaWZpZXJzLCBldmFzTW91c2VCdXR0b24oYnV0dG9uKSkpOworfQorCit2
b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlVXAodW5zaWduZWQgYnV0dG9uLCBXS0V2ZW50TW9k
aWZpZXJzIHdrTW9kaWZpZXJzKQoreworICAgIHNlbmRPclF1ZXVlRXZlbnQoV1RSRXZlbnQoV1RS
RXZlbnRUeXBlTW91c2VVcCwgMCwgd2tNb2RpZmllcnMsIGV2YXNNb3VzZUJ1dHRvbihidXR0b24p
KSk7CisKKyAgICBpZiAobV9tb3VzZUJ1dHRvbiA9PSBidXR0b24pCisgICAgICAgIG1fbW91c2VC
dXR0b24gPSBXVFJNb3VzZUJ1dHRvbk5vbmU7CisKKyAgICBtX2NsaWNrUG9zaXRpb24gPSBtX3Bv
c2l0aW9uOworICAgIG1fY2xpY2tUaW1lID0gZWNvcmVfdGltZV9nZXQoKTsKK30KKwordm9pZCBF
dmVudFNlbmRlclByb3h5Ojptb3VzZU1vdmVUbyhkb3VibGUgeCwgZG91YmxlIHkpCit7CisgICAg
bV9wb3NpdGlvbi54ID0geDsKKyAgICBtX3Bvc2l0aW9uLnkgPSB5OworCisgICAgc2VuZE9yUXVl
dWVFdmVudChXVFJFdmVudChXVFJFdmVudFR5cGVNb3VzZU1vdmUsIDAsIDAsIFdUUk1vdXNlQnV0
dG9uTm9uZSkpOworfQorCit2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlU2Nyb2xsQnkoaW50
IGhvcml6b250YWwsIGludCB2ZXJ0aWNhbCkKK3sKKyAgICBXVFJFdmVudCB3dHJFdmVudChXVFJF
dmVudFR5cGVNb3VzZVNjcm9sbEJ5LCAwLCAwLCBXVFJNb3VzZUJ1dHRvbk5vbmUpOworICAgIHd0
ckV2ZW50Lmhvcml6b250YWwgPSBob3Jpem9udGFsOworICAgIHd0ckV2ZW50LnZlcnRpY2FsID0g
dmVydGljYWw7CisgICAgc2VuZE9yUXVldWVFdmVudCh3dHJFdmVudCk7Cit9CisKK3ZvaWQgRXZl
bnRTZW5kZXJQcm94eTo6bGVhcEZvcndhcmQoaW50IG1pbGxpc2Vjb25kcykKK3sKKyAgICBpZiAo
bV9ldmVudFF1ZXVlLmlzRW1wdHkoKSkKKyAgICAgICAgbV9ldmVudFF1ZXVlLmFwcGVuZChXVFJF
dmVudChXVFJFdmVudFR5cGVMZWFwRm9yd2FyZCwgbWlsbGlzZWNvbmRzLCAwLCBXVFJNb3VzZUJ1
dHRvbk5vbmUpKTsKKworICAgIG1fdGltZSArPSBtaWxsaXNlY29uZHMgLyAxMDAwLjA7Cit9CisK
K3ZvaWQgRXZlbnRTZW5kZXJQcm94eTo6a2V5RG93bihXS1N0cmluZ1JlZiBrZXlSZWYsIFdLRXZl
bnRNb2RpZmllcnMgd2tNb2RpZmllcnMsIHVuc2lnbmVkIGxvY2F0aW9uKQoreworICAgIGNvbnN0
IFJlZlB0cjxLZXlFdmVudEluZm8+IGtleUV2ZW50SW5mbyA9IChsb2NhdGlvbiA9PSBET01LZXlM
b2NhdGlvbk51bXBhZCkgPyBrZXlQYWROYW1lKGtleVJlZikgOiBrZXlOYW1lKGtleVJlZik7Cisg
ICAgaWYgKCFrZXlFdmVudEluZm8pCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IGNoYXIq
IGtleU5hbWUgPSBrZXlFdmVudEluZm8tPmtleU5hbWUuZGF0YSgpOworICAgIGNvbnN0IGNoYXIq
IGtleVN0cmluZyA9IGtleUV2ZW50SW5mby0+a2V5U3RyaW5nLmRhdGEoKTsKKworICAgIEV2YXMq
IGV2YXMgPSBlY29yZV9ldmFzX2dldChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5w
bGF0Zm9ybVdpbmRvdygpKTsKKyAgICBzZXRFdmFzTW9kaWZpZXJzKGV2YXMsIHdrTW9kaWZpZXJz
KTsKKyAgICBldmFzX2V2ZW50X2ZlZWRfa2V5X2Rvd24oZXZhcywga2V5TmFtZSwga2V5TmFtZSwg
a2V5U3RyaW5nLCAwLCAwLCAwKTsKKyAgICBldmFzX2V2ZW50X2ZlZWRfa2V5X3VwKGV2YXMsIGtl
eU5hbWUsIGtleU5hbWUsIGtleVN0cmluZywgMCwgMSwgMCk7CisgICAgc2V0RXZhc01vZGlmaWVy
cyhldmFzLCAwKTsKK30KKworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisvLyBUb3VjaCBldmVu
dHMuCit2b2lkIEV2ZW50U2VuZGVyUHJveHk6OmFkZFRvdWNoUG9pbnQoaW50IHgsIGludCB5KQor
eworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcworfQorCit2b2lkIEV2ZW50U2VuZGVyUHJv
eHk6OnVwZGF0ZVRvdWNoUG9pbnQoaW50IGluZGV4LCBpbnQgeCwgaW50IHkpCit7CisgICAgLy8g
RklYTUU6IEltcGxlbWVudCB0aGlzCit9CisKK3ZvaWQgRXZlbnRTZW5kZXJQcm94eTo6c2V0VG91
Y2hNb2RpZmllcihXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVyLCBib29sIGVuYWJsZSkKK3sKKyAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMKK30KKwordm9pZCBFdmVudFNlbmRlclByb3h5Ojp0
b3VjaFN0YXJ0KCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMKK30KKwordm9pZCBF
dmVudFNlbmRlclByb3h5Ojp0b3VjaE1vdmUoKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
dGhpcworfQorCit2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnRvdWNoRW5kKCkKK3sKKyAgICAvLyBG
SVhNRTogSW1wbGVtZW50IHRoaXMKK30KKwordm9pZCBFdmVudFNlbmRlclByb3h5Ojp0b3VjaENh
bmNlbCgpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzCit9CisKK3ZvaWQgRXZlbnRT
ZW5kZXJQcm94eTo6Y2xlYXJUb3VjaFBvaW50cygpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0aGlzCit9CisKK3ZvaWQgRXZlbnRTZW5kZXJQcm94eTo6cmVsZWFzZVRvdWNoUG9pbnQoaW50
IGluZGV4KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcworfQorCit2b2lkIEV2ZW50
U2VuZGVyUHJveHk6OmNhbmNlbFRvdWNoUG9pbnQoaW50IGluZGV4KQoreworICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgdGhpcworfQorCit2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnNldFRvdWNoUG9p
bnRSYWRpdXMoaW50IHJhZGl1c1gsIGludCByYWRpdXNZKQoreworICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgdGhpcworfQorCisjZW5kaWYKKworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153243</attachid>
            <date>2012-07-19 06:32:26 -0700</date>
            <delta_ts>2012-07-19 22:34:56 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>21924</size>
            <attacher name="Kangil Han">kangil.han</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBhYmMy
MzVlLi5iOTVlNjQzIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNTcgQEAKKzIwMTItMDctMTkgIEthbmdpbCBIYW4gIDxrYW5naWwu
aGFuQHNhbXN1bmcuY29tPgorCisgICAgICAgIFtFRkxdW1dLMl1bV1RSXSBJbXBsZW1lbnQgRXZl
bnRTZW5kZXJQcm94eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9OTE3MzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGlzIGlzIGFuIGluaXRpYWwgRUZMIHBvcnQgaW1wbGVtZW50YXRpb24gb2YgRXZlbnRT
ZW5kZXJQcm94eS4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvRXZlbnRTZW5kZXJQcm94
eS5oOgorICAgICAgICAoV1RSKToKKyAgICAgICAgKEV2ZW50U2VuZGVyUHJveHkpOgorICAgICAg
ICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvRXZlbnRTZW5kaW5nQ29udHJvbGxl
ci5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1FZmwuY21ha2U6CisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6
OlRlc3RDb250cm9sbGVyOjpUZXN0Q29udHJvbGxlcik6CisgICAgICAgIChXVFI6OlRlc3RDb250
cm9sbGVyOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKToK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2VmbC9FdmVudFNlbmRlclByb3h5RWZsLmNwcDog
QWRkZWQuCisgICAgICAgIChXVFIpOgorICAgICAgICAoV1RSRXZlbnQpOgorICAgICAgICAoV1RS
OjpXVFJFdmVudDo6V1RSRXZlbnQpOgorICAgICAgICAoV1RSOjpLZXlFdmVudEluZm86OktleUV2
ZW50SW5mbyk6CisgICAgICAgIChLZXlFdmVudEluZm8pOgorICAgICAgICAoV1RSOjpldmFzTW91
c2VCdXR0b24pOgorICAgICAgICAoV1RSOjpzZXRFdmFzTW9kaWZpZXJzKToKKyAgICAgICAgKFdU
Ujo6ZGlzcGF0Y2hNb3VzZURvd25FdmVudCk6CisgICAgICAgIChXVFI6OmRpc3BhdGNoTW91c2VV
cEV2ZW50KToKKyAgICAgICAgKFdUUjo6ZGlzcGF0Y2hNb3VzZU1vdmVFdmVudCk6CisgICAgICAg
IChXVFI6OmRpc3BhdGNoTW91c2VTY3JvbGxCeUV2ZW50KToKKyAgICAgICAgKFdUUjo6a2V5UGFk
TmFtZSk6CisgICAgICAgIChXVFI6OmtleU5hbWUpOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRl
clByb3h5OjpFdmVudFNlbmRlclByb3h5KToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94
eTo6dXBkYXRlQ2xpY2tDb3VudEZvckJ1dHRvbik6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVy
UHJveHk6OmRpc3BhdGNoRXZlbnQpOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5Ojpy
ZXBsYXlTYXZlZEV2ZW50cyk6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6OnNlbmRP
clF1ZXVlRXZlbnQpOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5Ojptb3VzZURvd24p
OgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5Ojptb3VzZVVwKToKKyAgICAgICAgKFdU
Ujo6RXZlbnRTZW5kZXJQcm94eTo6bW91c2VNb3ZlVG8pOgorICAgICAgICAoV1RSOjpFdmVudFNl
bmRlclByb3h5Ojptb3VzZVNjcm9sbEJ5KToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94
eTo6bGVhcEZvcndhcmQpOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5OjprZXlEb3du
KToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6YWRkVG91Y2hQb2ludCk6CisgICAg
ICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6OnVwZGF0ZVRvdWNoUG9pbnQpOgorICAgICAgICAo
V1RSOjpFdmVudFNlbmRlclByb3h5OjpzZXRUb3VjaE1vZGlmaWVyKToKKyAgICAgICAgKFdUUjo6
RXZlbnRTZW5kZXJQcm94eTo6dG91Y2hTdGFydCk6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVy
UHJveHk6OnRvdWNoTW92ZSk6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6OnRvdWNo
RW5kKToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6dG91Y2hDYW5jZWwpOgorICAg
ICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5OjpjbGVhclRvdWNoUG9pbnRzKToKKyAgICAgICAg
KFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6cmVsZWFzZVRvdWNoUG9pbnQpOgorICAgICAgICAoV1RS
OjpFdmVudFNlbmRlclByb3h5OjpjYW5jZWxUb3VjaFBvaW50KToKKyAgICAgICAgKFdUUjo6RXZl
bnRTZW5kZXJQcm94eTo6c2V0VG91Y2hQb2ludFJhZGl1cyk6CisKIDIwMTItMDctMTggIENocmlz
dG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVsLmNvbT4KIAogICAgICAgICBbQ01h
a2VdW0VGTF0gU2hvdWxkIHRyeSB0byBmaW5kIHRoZSBzYW1lIGxpYnNvdXAgdmVyc2lvbiBwdWxs
ZWQgYnkgamhidWlsZApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9FdmVudFNl
bmRlclByb3h5LmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0V2ZW50U2VuZGVyUHJveHkuaApp
bmRleCA4MTY4NTEzLi5iNTVkY2E0IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0V2ZW50U2VuZGVyUHJveHkuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0V2ZW50U2Vu
ZGVyUHJveHkuaApAQCAtMzIsNiArMzIsOSBAQAogI2luY2x1ZGUgPFFUb3VjaEV2ZW50PgogI2Vs
aWYgUExBVEZPUk0oR1RLKQogI2luY2x1ZGUgPGdkay9nZGsuaD4KKyNlbmRpZgorCisjaWYgUExB
VEZPUk0oRUZMKSB8fCBQTEFURk9STShHVEspCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2Vu
ZGlmCiAKQEAgLTQxLDYgKzQ0LDggQEAgY2xhc3MgVGVzdENvbnRyb2xsZXI7CiAKICNpZiBQTEFU
Rk9STShHVEspCiBzdHJ1Y3QgV1RSRXZlbnRRdWV1ZUl0ZW07CisjZWxpZiBQTEFURk9STShFRkwp
CitzdHJ1Y3QgV1RSRXZlbnQ7CiAjZW5kaWYKIAogY2xhc3MgRXZlbnRTZW5kZXJQcm94eSB7CkBA
IC03Nyw3ICs4Miw3IEBAIHByaXZhdGU6CiAgICAgZG91YmxlIGN1cnJlbnRFdmVudFRpbWUoKSB7
IHJldHVybiBtX3RpbWU7IH0KICAgICB2b2lkIHVwZGF0ZUNsaWNrQ291bnRGb3JCdXR0b24oaW50
IGJ1dHRvbik7CiAKLSNpZiBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oR1RLKQorI2lmIFBMQVRG
T1JNKFFUKSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkKICAgICB2b2lkIHJlcGxh
eVNhdmVkRXZlbnRzKCk7CiAjZW5kaWYKIApAQCAtODksNiArOTQsOSBAQCBwcml2YXRlOgogI2Vs
aWYgUExBVEZPUk0oR1RLKQogICAgIHZvaWQgc2VuZE9yUXVldWVFdmVudChHZGtFdmVudCopOwog
ICAgIEdka0V2ZW50KiBjcmVhdGVNb3VzZUJ1dHRvbkV2ZW50KEdka0V2ZW50VHlwZSwgdW5zaWdu
ZWQgYnV0dG9uLCBXS0V2ZW50TW9kaWZpZXJzKTsKKyNlbGlmIFBMQVRGT1JNKEVGTCkKKyAgICB2
b2lkIHNlbmRPclF1ZXVlRXZlbnQoV1RSRXZlbnQpOworICAgIHZvaWQgZGlzcGF0Y2hFdmVudChX
VFJFdmVudCk7CiAjZW5kaWYKIAogICAgIGRvdWJsZSBtX3RpbWU7CkBAIC0xMTIsNiArMTIwLDkg
QEAgcHJpdmF0ZToKICAgICBRUG9pbnQgbV90b3VjaFBvaW50UmFkaXVzOwogICAgIGJvb2wgbV90
b3VjaEFjdGl2ZTsKICNlbmRpZgorI2VsaWYgUExBVEZPUk0oRUZMKQorICAgIFZlY3RvcjxXVFJF
dmVudD4gbV9ldmVudFF1ZXVlOworICAgIHVuc2lnbmVkIG1fbW91c2VCdXR0b247CiAjZW5kaWYK
IH07CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
RXZlbnRTZW5kaW5nQ29udHJvbGxlci5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9FdmVudFNlbmRpbmdDb250cm9sbGVyLmgKaW5kZXggOGVhMmRiMC4uYjA0MGE0OSAx
MDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9FdmVudFNl
bmRpbmdDb250cm9sbGVyLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9FdmVudFNlbmRpbmdDb250cm9sbGVyLmgKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRl
IDxXZWJLaXQyL1dLR2VvbWV0cnkuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCi0j
aWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKFFUKSAmJiAhUExBVEZPUk0oR1RLKQorI2lm
ICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShRVCkgJiYgIVBMQVRGT1JNKEdUSykgJiYgIVBM
QVRGT1JNKEVGTCkKICNkZWZpbmUgVVNFX1dFQlBST0NFU1NfRVZFTlRfU0lNVUxBVElPTgogI2Vu
ZGlmCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1FZmwuY21h
a2UgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDk0MmMw
MDMuLjZjOTMwOTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1F
ZmwuY21ha2UKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybUVmbC5jbWFrZQpA
QCAtMTksNiArMTksNyBAQCBTRVQoRm9yd2FyZGluZ05ldHdvcmtIZWFkZXJzRm9yV2ViS2l0VGVz
dFJ1bm5lcl9OQU1FIGZvcndhcmRpbmctaGVhZGVyc1NvdXBGb3JXZQogTElTVChBUFBFTkQgV2Vi
S2l0VGVzdFJ1bm5lcl9TT1VSQ0VTCiAgICAgJHtXRUJLSVRfVEVTVFJVTk5FUl9ESVJ9L2NhaXJv
L1Rlc3RJbnZvY2F0aW9uQ2Fpcm8uY3BwCiAKKyAgICAke1dFQktJVF9URVNUUlVOTkVSX0RJUn0v
ZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwuY3BwCiAgICAgJHtXRUJLSVRfVEVTVFJVTk5FUl9ESVJ9
L2VmbC9QbGF0Zm9ybVdlYlZpZXdFZmwuY3BwCiAgICAgJHtXRUJLSVRfVEVTVFJVTk5FUl9ESVJ9
L2VmbC9UZXN0Q29udHJvbGxlckVmbC5jcHAKICAgICAke1dFQktJVF9URVNUUlVOTkVSX0RJUn0v
ZWZsL21haW4uY3BwCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250
cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCmlu
ZGV4IGM0N2M0NzUuLjBhMmNiMmIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
VGVzdENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRy
b2xsZXIuY3BwCkBAIC04MSw3ICs4MSw3IEBAIFRlc3RDb250cm9sbGVyOjpUZXN0Q29udHJvbGxl
cihpbnQgYXJnYywgY29uc3QgY2hhciogYXJndltdKQogICAgICwgbV9kaWRQcmludFdlYlByb2Nl
c3NDcmFzaGVkTWVzc2FnZShmYWxzZSkKICAgICAsIG1fc2hvdWxkRXhpdFdoZW5XZWJQcm9jZXNz
Q3Jhc2hlcyh0cnVlKQogICAgICwgbV9iZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZSh0cnVlKQotI2lm
IFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykKKyNpZiBQTEFU
Rk9STShNQUMpIHx8IFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVG
TCkKICAgICAsIG1fZXZlbnRTZW5kZXJQcm94eShuZXcgRXZlbnRTZW5kZXJQcm94eSh0aGlzKSkK
ICNlbmRpZgogewpAQCAtNTk4LDcgKzU5OCw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRpZFJl
Y2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lCiAK
IFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVTeW5jaHJv
bm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUsIFdL
VHlwZVJlZiBtZXNzYWdlQm9keSkKIHsKLSNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKFFU
KSB8fCBQTEFURk9STShHVEspCisjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShRVCkgfHwg
UExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJFdmVudFNlbmRlciIpKSB7CiAgICAgICAgIEFTU0VS
VChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwog
ICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nh
c3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL2VmbC9FdmVudFNlbmRlclByb3h5RWZsLmNwcCBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjEwYTM5OTcKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL2VmbC9FdmVudFNlbmRlclByb3h5RWZsLmNwcApAQCAtMCwwICsxLDQ0NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgWmFuIERvYmVyc2VrIDx6YW5kb2JlcnNla0Bn
bWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRo
ZXIKKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAy
MDExIFByb0ZVU0lPTiBFbWJlZGRlZCBTeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ft
c3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkV2ZW50U2VuZGVyUHJveHkuaCIKKworI2luY2x1ZGUgIlBsYXRmb3JtV2Vi
Vmlldy5oIgorI2luY2x1ZGUgIlRlc3RDb250cm9sbGVyLmgiCisKKyNpbmNsdWRlIDxFY29yZS5o
PgorI2luY2x1ZGUgPEVjb3JlX0V2YXMuaD4KKyNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUGFzc093bkFycmF5UHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV1RS
IHsKKworZW51bSBXVFJFdmVudFR5cGUgeworICAgIFdUUkV2ZW50VHlwZU5vbmUsCisgICAgV1RS
RXZlbnRUeXBlTW91c2VEb3duLAorICAgIFdUUkV2ZW50VHlwZU1vdXNlVXAsCisgICAgV1RSRXZl
bnRUeXBlTW91c2VNb3ZlLAorICAgIFdUUkV2ZW50VHlwZU1vdXNlU2Nyb2xsQnksCisgICAgV1RS
RXZlbnRUeXBlTGVhcEZvcndhcmQKK307CisKK2VudW0gV1RSTW91c2VCdXR0b24geworICAgIFdU
Uk1vdXNlQnV0dG9uTm9uZSA9IC0xLAorICAgIFdUUk1vdXNlQnV0dG9uTGVmdCwKKyAgICBXVFJN
b3VzZUJ1dHRvbk1pZGRsZSwKKyAgICBXVFJNb3VzZUJ1dHRvblJpZ2h0LAorICAgIFdUUk1vdXNl
QnV0dG9uTWlkZGxlRHVwbGljYXRlZCwKK307CisKK2VudW0gRXZhc01vdXNlQnV0dG9uIHsKKyAg
ICBFdmFzTW91c2VCdXR0b25Ob25lLAorICAgIEV2YXNNb3VzZUJ1dHRvbkxlZnQsCisgICAgRXZh
c01vdXNlQnV0dG9uTWlkZGxlLAorICAgIEV2YXNNb3VzZUJ1dHRvblJpZ2h0Cit9OworCisvLyBL
ZXkgZXZlbnQgbG9jYXRpb24gY29kZSBkZWZpbmVkIGluIERPTSBMZXZlbCAzLgorZW51bSBLZXlM
b2NhdGlvbkNvZGUgeworICAgIERPTUtleUxvY2F0aW9uU3RhbmRhcmQgICAgICA9IDB4MDAsCisg
ICAgRE9NS2V5TG9jYXRpb25MZWZ0ICAgICAgICAgID0gMHgwMSwKKyAgICBET01LZXlMb2NhdGlv
blJpZ2h0ICAgICAgICAgPSAweDAyLAorICAgIERPTUtleUxvY2F0aW9uTnVtcGFkICAgICAgICA9
IDB4MDMKK307CisKK3N0cnVjdCBXVFJFdmVudCB7CisgICAgV1RSRXZlbnRUeXBlIGV2ZW50VHlw
ZTsKKyAgICB1bnNpZ25lZCBkZWxheTsKKyAgICBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVyczsK
KyAgICBpbnQgYnV0dG9uOworICAgIGludCBob3Jpem9udGFsOworICAgIGludCB2ZXJ0aWNhbDsK
KyAgICBXVFJFdmVudCgpCisgICAgICAgIDogZXZlbnRUeXBlKFdUUkV2ZW50VHlwZU5vbmUpCisg
ICAgICAgICwgZGVsYXkoMCkKKyAgICAgICAgLCBidXR0b24oLTEpCisgICAgeworICAgIH0KKyAg
ICBXVFJFdmVudChXVFJFdmVudFR5cGUgZXZlbnRUeXBlLCB1bnNpZ25lZCBkZWxheSwgV0tFdmVu
dE1vZGlmaWVycyBtb2RpZmllcnMsIGludCBidXR0b24pCisgICAgICAgIDogZXZlbnRUeXBlKGV2
ZW50VHlwZSkKKyAgICAgICAgLCBkZWxheShkZWxheSkKKyAgICAgICAgLCBtb2RpZmllcnMobW9k
aWZpZXJzKQorICAgICAgICAsIGJ1dHRvbihidXR0b24pCisgICAgeworICAgIH0KK307CisKK3N0
cnVjdCBLZXlFdmVudEluZm8gOiBwdWJsaWMgUmVmQ291bnRlZDxLZXlFdmVudEluZm8+IHsKKyAg
ICBLZXlFdmVudEluZm8oY29uc3QgQ1N0cmluZyYga2V5TmFtZSwgY29uc3QgQ1N0cmluZyYga2V5
U3RyaW5nKQorICAgICAgICA6IGtleU5hbWUoa2V5TmFtZSkKKyAgICAgICAgLCBrZXlTdHJpbmco
a2V5U3RyaW5nKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBDU3RyaW5nIGtleU5hbWU7Cisg
ICAgY29uc3QgQ1N0cmluZyBrZXlTdHJpbmc7Cit9OworCitzdGF0aWMgdW5zaWduZWQgZXZhc01v
dXNlQnV0dG9uKHVuc2lnbmVkIGJ1dHRvbikKK3sKKyAgICBpZiAoYnV0dG9uID09IFdUUk1vdXNl
QnV0dG9uTGVmdCkKKyAgICAgICAgcmV0dXJuIEV2YXNNb3VzZUJ1dHRvbkxlZnQ7CisgICAgaWYg
KGJ1dHRvbiA9PSBXVFJNb3VzZUJ1dHRvbk1pZGRsZSkKKyAgICAgICAgcmV0dXJuIEV2YXNNb3Vz
ZUJ1dHRvbk1pZGRsZTsKKyAgICBpZiAoYnV0dG9uID09IFdUUk1vdXNlQnV0dG9uUmlnaHQpCisg
ICAgICAgIHJldHVybiBFdmFzTW91c2VCdXR0b25SaWdodDsKKyAgICBpZiAoYnV0dG9uID09IFdU
Uk1vdXNlQnV0dG9uTWlkZGxlRHVwbGljYXRlZCkKKyAgICAgICAgcmV0dXJuIEV2YXNNb3VzZUJ1
dHRvbk1pZGRsZTsKKworICAgIHJldHVybiBFdmFzTW91c2VCdXR0b25Ob25lOworfQorCitzdGF0
aWMgdm9pZCBzZXRFdmFzTW9kaWZpZXJzKEV2YXMqIGV2YXMsIFdLRXZlbnRNb2RpZmllcnMgd2tN
b2RpZmllcnMpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIG1vZGlmaWVyTmFtZXNbXSA9IHsg
IlNoaWZ0IiwgIkNvbnRyb2wiLCAiQWx0IiwgIk1ldGEiIH07CisgICAgZm9yICh1bnNpZ25lZCBt
b2RpZmllciA9IDA7IG1vZGlmaWVyIDwgNDsgKyttb2RpZmllcikgeworICAgICAgICBpZiAod2tN
b2RpZmllcnMgJiAoMSA8PCBtb2RpZmllcikpCisgICAgICAgICAgICBldmFzX2tleV9tb2RpZmll
cl9vbihldmFzLCBtb2RpZmllck5hbWVzW21vZGlmaWVyXSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGV2YXNfa2V5X21vZGlmaWVyX29mZihldmFzLCBtb2RpZmllck5hbWVzW21vZGlmaWVy
XSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBkaXNwYXRjaE1vdXNlRG93bkV2ZW50KEV2YXMq
IGV2YXMsIHVuc2lnbmVkIGJ1dHRvbiwgV0tFdmVudE1vZGlmaWVycyB3a01vZGlmaWVycykKK3sK
KyAgICBzZXRFdmFzTW9kaWZpZXJzKGV2YXMsIHdrTW9kaWZpZXJzKTsKKyAgICBldmFzX2V2ZW50
X2ZlZWRfbW91c2VfZG93bihldmFzLCBidXR0b24sIEVWQVNfQlVUVE9OX05PTkUsIDAsIDApOwor
ICAgIHNldEV2YXNNb2RpZmllcnMoZXZhcywgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGRpc3BhdGNo
TW91c2VVcEV2ZW50KEV2YXMqIGV2YXMsIHVuc2lnbmVkIGJ1dHRvbiwgV0tFdmVudE1vZGlmaWVy
cyB3a01vZGlmaWVycykKK3sKKyAgICBzZXRFdmFzTW9kaWZpZXJzKGV2YXMsIHdrTW9kaWZpZXJz
KTsKKyAgICBldmFzX2V2ZW50X2ZlZWRfbW91c2VfdXAoZXZhcywgYnV0dG9uLCBFVkFTX0JVVFRP
Tl9OT05FLCAwLCAwKTsKKyAgICBzZXRFdmFzTW9kaWZpZXJzKGV2YXMsIDApOworfQorCitzdGF0
aWMgdm9pZCBkaXNwYXRjaE1vdXNlTW92ZUV2ZW50KEV2YXMqIGV2YXMsIGludCB4LCBpbnQgeSkK
K3sKKyAgICBldmFzX2V2ZW50X2ZlZWRfbW91c2VfbW92ZShldmFzLCB4LCB5LCAwLCAwKTsKK30K
Kworc3RhdGljIHZvaWQgZGlzcGF0Y2hNb3VzZVNjcm9sbEJ5RXZlbnQoRXZhcyogZXZhcywgaW50
IGhvcml6b250YWwsIGludCB2ZXJ0aWNhbCkKK3sKKyAgICBpZiAoaG9yaXpvbnRhbCA+IDApCisg
ICAgICAgIGV2YXNfZXZlbnRfZmVlZF9tb3VzZV93aGVlbChldmFzLCAxLCAtMTAsIDAsIDApOwor
ICAgIGVsc2UgaWYgKGhvcml6b250YWwgPCAwKQorICAgICAgICBldmFzX2V2ZW50X2ZlZWRfbW91
c2Vfd2hlZWwoZXZhcywgMSwgMTAsIDAsIDApOworCisgICAgaWYgKHZlcnRpY2FsID4gMCkKKyAg
ICAgICAgZXZhc19ldmVudF9mZWVkX21vdXNlX3doZWVsKGV2YXMsIDAsIDEwLCAwLCAwKTsKKyAg
ICBlbHNlIGlmICh2ZXJ0aWNhbCA8IDApCisgICAgICAgIGV2YXNfZXZlbnRfZmVlZF9tb3VzZV93
aGVlbChldmFzLCAwLCAtMTAsIDAsIDApOworfQorCitzdGF0aWMgY29uc3QgUGFzc1JlZlB0cjxL
ZXlFdmVudEluZm8+IGtleVBhZE5hbWUoV0tTdHJpbmdSZWYga2V5UmVmKQoreworICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgImxlZnRBcnJvdyIpKQorICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiS1BfTGVmdCIsICIiKSk7CisgICAg
aWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAicmlnaHRBcnJvdyIpKQor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiS1BfUmlnaHQiLCAiIikp
OworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgInVwQXJyb3ci
KSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIktQX1VwIiwgIiIp
KTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJkb3duQXJy
b3ciKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIktQX0Rvd24i
LCAiIikpOworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgInBh
Z2VVcCIpKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiS1BfUHJp
b3IiLCAiIikpOworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwg
InBhZ2VEb3duIikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJL
UF9OZXh0IiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlS
ZWYsICJob21lIikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJL
UF9Ib21lIiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlS
ZWYsICJlbmQiKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIktQ
X0VuZCIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVm
LCAiaW5zZXJ0IikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJL
UF9JbnNlcnQiLCAiIikpOworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtl
eVJlZiwgImRlbGV0ZSIpKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5m
bygiS1BfRGVsZXRlIiwgIiIpKTsKKworICAgIHNpemVfdCBidWZmZXJTaXplID0gV0tTdHJpbmdH
ZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKGtleVJlZik7CisgICAgT3duQXJyYXlQdHI8Y2hhcj4g
YnVmZmVyID0gYWRvcHRBcnJheVB0cihuZXcgY2hhcltidWZmZXJTaXplXSk7CisgICAgV0tTdHJp
bmdHZXRVVEY4Q1N0cmluZyhrZXlSZWYsIGJ1ZmZlci5nZXQoKSwgYnVmZmVyU2l6ZSk7CisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oYnVmZmVyLmdldCgpLCBidWZmZXIuZ2V0
KCkpKTsKK30KKworc3RhdGljIGNvbnN0IFBhc3NSZWZQdHI8S2V5RXZlbnRJbmZvPiBrZXlOYW1l
KFdLU3RyaW5nUmVmIGtleVJlZikKK3sKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhrZXlSZWYsICJsZWZ0QXJyb3ciKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBL
ZXlFdmVudEluZm8oIkxlZnQiLCAiIikpOworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKGtleVJlZiwgInJpZ2h0QXJyb3ciKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBLZXlFdmVudEluZm8oIlJpZ2h0IiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhrZXlSZWYsICJ1cEFycm93IikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgS2V5RXZlbnRJbmZvKCJVcCIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcoa2V5UmVmLCAiZG93bkFycm93IikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgS2V5RXZlbnRJbmZvKCJEb3duIiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhrZXlSZWYsICJwYWdlVXAiKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBLZXlFdmVudEluZm8oIlByaW9yIiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhrZXlSZWYsICJwYWdlRG93biIpKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEtleUV2ZW50SW5mbygiTmV4dCIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcoa2V5UmVmLCAiaG9tZSIpKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEtleUV2ZW50SW5mbygiSG9tZSIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcoa2V5UmVmLCAiZW5kIikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5
RXZlbnRJbmZvKCJFbmQiLCAiIikpOworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKGtleVJlZiwgImluc2VydCIpKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2
ZW50SW5mbygiSW5zZXJ0IiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhrZXlSZWYsICJkZWxldGUiKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlF
dmVudEluZm8oIkRlbGV0ZSIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcoa2V5UmVmLCAicHJpbnRTY3JlZW4iKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBLZXlFdmVudEluZm8oIlByaW50IiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhrZXlSZWYsICJtZW51IikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
S2V5RXZlbnRJbmZvKCJNZW51IiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhrZXlSZWYsICJGMSIpKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2
ZW50SW5mbygiRjEiLCAiIikpOworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KGtleVJlZiwgIkYyIikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZv
KCJGMiIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVm
LCAiRjMiKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIkYzIiwg
IiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJGNCIp
KQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiRjQiLCAiIikpOwor
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgIkY1IikpCisgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJGNSIsICIiKSk7CisgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAiRjYiKSkKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIkY2IiwgIiIpKTsKKyAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJGNyIpKQorICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEtleUV2ZW50SW5mbygiRjciLCAiIikpOworICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgIkY4IikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgS2V5RXZlbnRJbmZvKCJGOCIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcoa2V5UmVmLCAiRjkiKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlF
dmVudEluZm8oIkY5IiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhrZXlSZWYsICJGMTAiKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudElu
Zm8oIkYxMCIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5
UmVmLCAiRjExIikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJG
MTEiLCAiIikpOworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwg
IkYxMiIpKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiRjEyIiwg
IiIpKTsKKworICAgIHNpemVfdCBidWZmZXJTaXplID0gV0tTdHJpbmdHZXRNYXhpbXVtVVRGOENT
dHJpbmdTaXplKGtleVJlZik7CisgICAgT3duQXJyYXlQdHI8Y2hhcj4gYnVmZmVyID0gYWRvcHRB
cnJheVB0cihuZXcgY2hhcltidWZmZXJTaXplXSk7CisgICAgV0tTdHJpbmdHZXRVVEY4Q1N0cmlu
ZyhrZXlSZWYsIGJ1ZmZlci5nZXQoKSwgYnVmZmVyU2l6ZSk7CisgICAgY2hhciBjaGFyQ29kZSA9
IGJ1ZmZlci5nZXQoKVswXTsKKworICAgIGlmIChjaGFyQ29kZSA9PSAnXG4nIHx8IGNoYXJDb2Rl
ID09ICdccicpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJSZXR1
cm4iLCAiXHIiKSk7CisgICAgaWYgKGNoYXJDb2RlID09ICdcdCcpCisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJUYWIiLCAiXHQiKSk7CisgICAgaWYgKGNoYXJDb2Rl
ID09ICdceDgnKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiQmFj
a1NwYWNlIiwgIlx4OCIpKTsKKyAgICBpZiAoY2hhckNvZGUgPT0gJyAnKQorICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygic3BhY2UiLCAiICIpKTsKKworICAgIHJldHVy
biBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKGJ1ZmZlci5nZXQoKSwgYnVmZmVyLmdldCgpKSk7
Cit9CisKK0V2ZW50U2VuZGVyUHJveHk6OkV2ZW50U2VuZGVyUHJveHkoVGVzdENvbnRyb2xsZXIq
IHRlc3RDb250cm9sbGVyKQorICAgIDogbV90ZXN0Q29udHJvbGxlcih0ZXN0Q29udHJvbGxlcikK
KyAgICAsIG1fdGltZSgwKQorICAgICwgbV9sZWZ0TW91c2VCdXR0b25Eb3duKGZhbHNlKQorICAg
ICwgbV9jbGlja0NvdW50KDApCisgICAgLCBtX2NsaWNrVGltZSgwKQorICAgICwgbV9jbGlja0J1
dHRvbihXVFJNb3VzZUJ1dHRvbk5vbmUpCisgICAgLCBtX21vdXNlQnV0dG9uKFdUUk1vdXNlQnV0
dG9uTm9uZSkKK3sKK30KKwordm9pZCBFdmVudFNlbmRlclByb3h5Ojp1cGRhdGVDbGlja0NvdW50
Rm9yQnV0dG9uKGludCBidXR0b24pCit7CisgICAgaWYgKG1fdGltZSAtIG1fY2xpY2tUaW1lIDwg
MSAmJiBtX3Bvc2l0aW9uID09IG1fY2xpY2tQb3NpdGlvbiAmJiBidXR0b24gPT0gbV9jbGlja0J1
dHRvbikgeworICAgICAgICArK21fY2xpY2tDb3VudDsKKyAgICAgICAgbV9jbGlja1RpbWUgPSBt
X3RpbWU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2NsaWNrQ291bnQgPSAxOwor
ICAgIG1fY2xpY2tUaW1lID0gbV90aW1lOworICAgIG1fY2xpY2tQb3NpdGlvbiA9IG1fcG9zaXRp
b247CisgICAgbV9jbGlja0J1dHRvbiA9IGJ1dHRvbjsKK30KKwordm9pZCBFdmVudFNlbmRlclBy
b3h5OjpkaXNwYXRjaEV2ZW50KFdUUkV2ZW50IHd0ckV2ZW50KQoreworICAgIGlmICh3dHJFdmVu
dC5ldmVudFR5cGUgPT0gV1RSRXZlbnRUeXBlTW91c2VEb3duKQorICAgICAgICBkaXNwYXRjaE1v
dXNlRG93bkV2ZW50KGVjb3JlX2V2YXNfZ2V0KG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3
KCktPnBsYXRmb3JtV2luZG93KCkpLCB3dHJFdmVudC5idXR0b24sIHd0ckV2ZW50Lm1vZGlmaWVy
cyk7CisgICAgZWxzZSBpZiAod3RyRXZlbnQuZXZlbnRUeXBlID09IFdUUkV2ZW50VHlwZU1vdXNl
VXApCisgICAgICAgIGRpc3BhdGNoTW91c2VVcEV2ZW50KGVjb3JlX2V2YXNfZ2V0KG1fdGVzdENv
bnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtV2luZG93KCkpLCB3dHJFdmVudC5idXR0
b24sIHd0ckV2ZW50Lm1vZGlmaWVycyk7CisgICAgZWxzZSBpZiAod3RyRXZlbnQuZXZlbnRUeXBl
ID09IFdUUkV2ZW50VHlwZU1vdXNlTW92ZSkKKyAgICAgICAgZGlzcGF0Y2hNb3VzZU1vdmVFdmVu
dChlY29yZV9ldmFzX2dldChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9y
bVdpbmRvdygpKSwgc3RhdGljX2Nhc3Q8aW50PihtX3Bvc2l0aW9uLngpLCBzdGF0aWNfY2FzdDxp
bnQ+KG1fcG9zaXRpb24ueSkpOworICAgIGVsc2UgaWYgKHd0ckV2ZW50LmV2ZW50VHlwZSA9PSBX
VFJFdmVudFR5cGVNb3VzZVNjcm9sbEJ5KQorICAgICAgICBkaXNwYXRjaE1vdXNlU2Nyb2xsQnlF
dmVudChlY29yZV9ldmFzX2dldChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0
Zm9ybVdpbmRvdygpKSwgd3RyRXZlbnQuaG9yaXpvbnRhbCwgd3RyRXZlbnQudmVydGljYWwpOwor
fQorCit2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnJlcGxheVNhdmVkRXZlbnRzKCkKK3sKKyAgICB3
aGlsZSAoIW1fZXZlbnRRdWV1ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgV1RSRXZlbnQgd3RyRXZl
bnQgPSBtX2V2ZW50UXVldWUuZmlyc3QoKTsKKyAgICAgICAgaWYgKHd0ckV2ZW50LmRlbGF5KQor
ICAgICAgICAgICAgdXNsZWVwKHd0ckV2ZW50LmRlbGF5ICogMTAwMCk7CisKKyAgICAgICAgZGlz
cGF0Y2hFdmVudCh3dHJFdmVudCk7CisgICAgICAgIG1fZXZlbnRRdWV1ZS5yZW1vdmUoMCk7Cisg
ICAgfQorfQorCit2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnNlbmRPclF1ZXVlRXZlbnQoV1RSRXZl
bnQgd3RyRXZlbnQpCit7CisgICAgaWYgKG1fZXZlbnRRdWV1ZS5pc0VtcHR5KCkgfHwgIW1fZXZl
bnRRdWV1ZS5sYXN0KCkuZGVsYXkpIHsKKyAgICAgICAgZGlzcGF0Y2hFdmVudCh3dHJFdmVudCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2V2ZW50UXVldWUuYXBwZW5kKHd0ckV2
ZW50KTsKKyAgICByZXBsYXlTYXZlZEV2ZW50cygpOworfQorCit2b2lkIEV2ZW50U2VuZGVyUHJv
eHk6Om1vdXNlRG93bih1bnNpZ25lZCBidXR0b24sIFdLRXZlbnRNb2RpZmllcnMgd2tNb2RpZmll
cnMpCit7CisgICAgaWYgKG1fbW91c2VCdXR0b24gPT0gYnV0dG9uKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX21vdXNlQnV0dG9uID0gYnV0dG9uOworICAgIHVwZGF0ZUNsaWNrQ291bnRGb3JC
dXR0b24oYnV0dG9uKTsKKworICAgIHNlbmRPclF1ZXVlRXZlbnQoV1RSRXZlbnQoV1RSRXZlbnRU
eXBlTW91c2VEb3duLCAwLCB3a01vZGlmaWVycywgZXZhc01vdXNlQnV0dG9uKGJ1dHRvbikpKTsK
K30KKwordm9pZCBFdmVudFNlbmRlclByb3h5Ojptb3VzZVVwKHVuc2lnbmVkIGJ1dHRvbiwgV0tF
dmVudE1vZGlmaWVycyB3a01vZGlmaWVycykKK3sKKyAgICBzZW5kT3JRdWV1ZUV2ZW50KFdUUkV2
ZW50KFdUUkV2ZW50VHlwZU1vdXNlVXAsIDAsIHdrTW9kaWZpZXJzLCBldmFzTW91c2VCdXR0b24o
YnV0dG9uKSkpOworCisgICAgaWYgKG1fbW91c2VCdXR0b24gPT0gYnV0dG9uKQorICAgICAgICBt
X21vdXNlQnV0dG9uID0gV1RSTW91c2VCdXR0b25Ob25lOworCisgICAgbV9jbGlja1Bvc2l0aW9u
ID0gbV9wb3NpdGlvbjsKKyAgICBtX2NsaWNrVGltZSA9IGVjb3JlX3RpbWVfZ2V0KCk7Cit9CisK
K3ZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VNb3ZlVG8oZG91YmxlIHgsIGRvdWJsZSB5KQor
eworICAgIG1fcG9zaXRpb24ueCA9IHg7CisgICAgbV9wb3NpdGlvbi55ID0geTsKKworICAgIHNl
bmRPclF1ZXVlRXZlbnQoV1RSRXZlbnQoV1RSRXZlbnRUeXBlTW91c2VNb3ZlLCAwLCAwLCBXVFJN
b3VzZUJ1dHRvbk5vbmUpKTsKK30KKwordm9pZCBFdmVudFNlbmRlclByb3h5Ojptb3VzZVNjcm9s
bEJ5KGludCBob3Jpem9udGFsLCBpbnQgdmVydGljYWwpCit7CisgICAgV1RSRXZlbnQgd3RyRXZl
bnQoV1RSRXZlbnRUeXBlTW91c2VTY3JvbGxCeSwgMCwgMCwgV1RSTW91c2VCdXR0b25Ob25lKTsK
KyAgICB3dHJFdmVudC5ob3Jpem9udGFsID0gaG9yaXpvbnRhbDsKKyAgICB3dHJFdmVudC52ZXJ0
aWNhbCA9IHZlcnRpY2FsOworICAgIHNlbmRPclF1ZXVlRXZlbnQod3RyRXZlbnQpOworfQorCit2
b2lkIEV2ZW50U2VuZGVyUHJveHk6OmxlYXBGb3J3YXJkKGludCBtaWxsaXNlY29uZHMpCit7Cisg
ICAgaWYgKG1fZXZlbnRRdWV1ZS5pc0VtcHR5KCkpCisgICAgICAgIG1fZXZlbnRRdWV1ZS5hcHBl
bmQoV1RSRXZlbnQoV1RSRXZlbnRUeXBlTGVhcEZvcndhcmQsIG1pbGxpc2Vjb25kcywgMCwgV1RS
TW91c2VCdXR0b25Ob25lKSk7CisKKyAgICBtX3RpbWUgKz0gbWlsbGlzZWNvbmRzIC8gMTAwMC4w
OworfQorCit2b2lkIEV2ZW50U2VuZGVyUHJveHk6OmtleURvd24oV0tTdHJpbmdSZWYga2V5UmVm
LCBXS0V2ZW50TW9kaWZpZXJzIHdrTW9kaWZpZXJzLCB1bnNpZ25lZCBsb2NhdGlvbikKK3sKKyAg
ICBjb25zdCBSZWZQdHI8S2V5RXZlbnRJbmZvPiBrZXlFdmVudEluZm8gPSAobG9jYXRpb24gPT0g
RE9NS2V5TG9jYXRpb25OdW1wYWQpID8ga2V5UGFkTmFtZShrZXlSZWYpIDoga2V5TmFtZShrZXlS
ZWYpOworICAgIGlmICgha2V5RXZlbnRJbmZvKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25z
dCBjaGFyKiBrZXlOYW1lID0ga2V5RXZlbnRJbmZvLT5rZXlOYW1lLmRhdGEoKTsKKyAgICBjb25z
dCBjaGFyKiBrZXlTdHJpbmcgPSBrZXlFdmVudEluZm8tPmtleVN0cmluZy5kYXRhKCk7CisKKyAg
ICBFdmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQobV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZp
ZXcoKS0+cGxhdGZvcm1XaW5kb3coKSk7CisgICAgc2V0RXZhc01vZGlmaWVycyhldmFzLCB3a01v
ZGlmaWVycyk7CisgICAgZXZhc19ldmVudF9mZWVkX2tleV9kb3duKGV2YXMsIGtleU5hbWUsIGtl
eU5hbWUsIGtleVN0cmluZywgMCwgMCwgMCk7CisgICAgZXZhc19ldmVudF9mZWVkX2tleV91cChl
dmFzLCBrZXlOYW1lLCBrZXlOYW1lLCBrZXlTdHJpbmcsIDAsIDEsIDApOworICAgIHNldEV2YXNN
b2RpZmllcnMoZXZhcywgMCk7Cit9CisKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorLy8gVG91
Y2ggZXZlbnRzLgordm9pZCBFdmVudFNlbmRlclByb3h5OjphZGRUb3VjaFBvaW50KGludCB4LCBp
bnQgeSkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMKK30KKwordm9pZCBFdmVudFNl
bmRlclByb3h5Ojp1cGRhdGVUb3VjaFBvaW50KGludCBpbmRleCwgaW50IHgsIGludCB5KQorewor
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcworfQorCit2b2lkIEV2ZW50U2VuZGVyUHJveHk6
OnNldFRvdWNoTW9kaWZpZXIoV0tFdmVudE1vZGlmaWVycyBtb2RpZmllciwgYm9vbCBlbmFibGUp
Cit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzCit9CisKK3ZvaWQgRXZlbnRTZW5kZXJQ
cm94eTo6dG91Y2hTdGFydCgpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzCit9CisK
K3ZvaWQgRXZlbnRTZW5kZXJQcm94eTo6dG91Y2hNb3ZlKCkKK3sKKyAgICAvLyBGSVhNRTogSW1w
bGVtZW50IHRoaXMKK30KKwordm9pZCBFdmVudFNlbmRlclByb3h5Ojp0b3VjaEVuZCgpCit7Cisg
ICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzCit9CisKK3ZvaWQgRXZlbnRTZW5kZXJQcm94eTo6
dG91Y2hDYW5jZWwoKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcworfQorCit2b2lk
IEV2ZW50U2VuZGVyUHJveHk6OmNsZWFyVG91Y2hQb2ludHMoKQoreworICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgdGhpcworfQorCit2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnJlbGVhc2VUb3VjaFBv
aW50KGludCBpbmRleCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMKK30KKwordm9p
ZCBFdmVudFNlbmRlclByb3h5OjpjYW5jZWxUb3VjaFBvaW50KGludCBpbmRleCkKK3sKKyAgICAv
LyBGSVhNRTogSW1wbGVtZW50IHRoaXMKK30KKwordm9pZCBFdmVudFNlbmRlclByb3h5OjpzZXRU
b3VjaFBvaW50UmFkaXVzKGludCByYWRpdXNYLCBpbnQgcmFkaXVzWSkKK3sKKyAgICAvLyBGSVhN
RTogSW1wbGVtZW50IHRoaXMKK30KKworI2VuZGlmCisKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153414</attachid>
            <date>2012-07-19 22:34:56 -0700</date>
            <delta_ts>2012-07-19 23:12:35 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>22019</size>
            <attacher name="Kangil Han">kangil.han</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBhYmMy
MzVlLi5iOTVlNjQzIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNTcgQEAKKzIwMTItMDctMTkgIEthbmdpbCBIYW4gIDxrYW5naWwu
aGFuQHNhbXN1bmcuY29tPgorCisgICAgICAgIFtFRkxdW1dLMl1bV1RSXSBJbXBsZW1lbnQgRXZl
bnRTZW5kZXJQcm94eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9OTE3MzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGlzIGlzIGFuIGluaXRpYWwgRUZMIHBvcnQgaW1wbGVtZW50YXRpb24gb2YgRXZlbnRT
ZW5kZXJQcm94eS4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvRXZlbnRTZW5kZXJQcm94
eS5oOgorICAgICAgICAoV1RSKToKKyAgICAgICAgKEV2ZW50U2VuZGVyUHJveHkpOgorICAgICAg
ICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvRXZlbnRTZW5kaW5nQ29udHJvbGxl
ci5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1FZmwuY21ha2U6CisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6
OlRlc3RDb250cm9sbGVyOjpUZXN0Q29udHJvbGxlcik6CisgICAgICAgIChXVFI6OlRlc3RDb250
cm9sbGVyOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKToK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2VmbC9FdmVudFNlbmRlclByb3h5RWZsLmNwcDog
QWRkZWQuCisgICAgICAgIChXVFIpOgorICAgICAgICAoV1RSRXZlbnQpOgorICAgICAgICAoV1RS
OjpXVFJFdmVudDo6V1RSRXZlbnQpOgorICAgICAgICAoV1RSOjpLZXlFdmVudEluZm86OktleUV2
ZW50SW5mbyk6CisgICAgICAgIChLZXlFdmVudEluZm8pOgorICAgICAgICAoV1RSOjpldmFzTW91
c2VCdXR0b24pOgorICAgICAgICAoV1RSOjpzZXRFdmFzTW9kaWZpZXJzKToKKyAgICAgICAgKFdU
Ujo6ZGlzcGF0Y2hNb3VzZURvd25FdmVudCk6CisgICAgICAgIChXVFI6OmRpc3BhdGNoTW91c2VV
cEV2ZW50KToKKyAgICAgICAgKFdUUjo6ZGlzcGF0Y2hNb3VzZU1vdmVFdmVudCk6CisgICAgICAg
IChXVFI6OmRpc3BhdGNoTW91c2VTY3JvbGxCeUV2ZW50KToKKyAgICAgICAgKFdUUjo6a2V5UGFk
TmFtZSk6CisgICAgICAgIChXVFI6OmtleU5hbWUpOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRl
clByb3h5OjpFdmVudFNlbmRlclByb3h5KToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94
eTo6dXBkYXRlQ2xpY2tDb3VudEZvckJ1dHRvbik6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVy
UHJveHk6OmRpc3BhdGNoRXZlbnQpOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5Ojpy
ZXBsYXlTYXZlZEV2ZW50cyk6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6OnNlbmRP
clF1ZXVlRXZlbnQpOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5Ojptb3VzZURvd24p
OgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5Ojptb3VzZVVwKToKKyAgICAgICAgKFdU
Ujo6RXZlbnRTZW5kZXJQcm94eTo6bW91c2VNb3ZlVG8pOgorICAgICAgICAoV1RSOjpFdmVudFNl
bmRlclByb3h5Ojptb3VzZVNjcm9sbEJ5KToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94
eTo6bGVhcEZvcndhcmQpOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5OjprZXlEb3du
KToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6YWRkVG91Y2hQb2ludCk6CisgICAg
ICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6OnVwZGF0ZVRvdWNoUG9pbnQpOgorICAgICAgICAo
V1RSOjpFdmVudFNlbmRlclByb3h5OjpzZXRUb3VjaE1vZGlmaWVyKToKKyAgICAgICAgKFdUUjo6
RXZlbnRTZW5kZXJQcm94eTo6dG91Y2hTdGFydCk6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVy
UHJveHk6OnRvdWNoTW92ZSk6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6OnRvdWNo
RW5kKToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6dG91Y2hDYW5jZWwpOgorICAg
ICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5OjpjbGVhclRvdWNoUG9pbnRzKToKKyAgICAgICAg
KFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6cmVsZWFzZVRvdWNoUG9pbnQpOgorICAgICAgICAoV1RS
OjpFdmVudFNlbmRlclByb3h5OjpjYW5jZWxUb3VjaFBvaW50KToKKyAgICAgICAgKFdUUjo6RXZl
bnRTZW5kZXJQcm94eTo6c2V0VG91Y2hQb2ludFJhZGl1cyk6CisKIDIwMTItMDctMTggIENocmlz
dG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVsLmNvbT4KIAogICAgICAgICBbQ01h
a2VdW0VGTF0gU2hvdWxkIHRyeSB0byBmaW5kIHRoZSBzYW1lIGxpYnNvdXAgdmVyc2lvbiBwdWxs
ZWQgYnkgamhidWlsZApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9FdmVudFNl
bmRlclByb3h5LmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0V2ZW50U2VuZGVyUHJveHkuaApp
bmRleCA4MTY4NTEzLi4wMTI3MmRmIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0V2ZW50U2VuZGVyUHJveHkuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0V2ZW50U2Vu
ZGVyUHJveHkuaApAQCAtMzMsNiArMzMsOCBAQAogI2VsaWYgUExBVEZPUk0oR1RLKQogI2luY2x1
ZGUgPGdkay9nZGsuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjZWxpZiBQTEFURk9STShF
RkwpCisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdUUiB7CkBA
IC00MSw2ICs0Myw4IEBAIGNsYXNzIFRlc3RDb250cm9sbGVyOwogCiAjaWYgUExBVEZPUk0oR1RL
KQogc3RydWN0IFdUUkV2ZW50UXVldWVJdGVtOworI2VsaWYgUExBVEZPUk0oRUZMKQorc3RydWN0
IFdUUkV2ZW50OwogI2VuZGlmCiAKIGNsYXNzIEV2ZW50U2VuZGVyUHJveHkgewpAQCAtNzcsNyAr
ODEsNyBAQCBwcml2YXRlOgogICAgIGRvdWJsZSBjdXJyZW50RXZlbnRUaW1lKCkgeyByZXR1cm4g
bV90aW1lOyB9CiAgICAgdm9pZCB1cGRhdGVDbGlja0NvdW50Rm9yQnV0dG9uKGludCBidXR0b24p
OwogCi0jaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykKKyNpZiBQTEFURk9STShRVCkg
fHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpCiAgICAgdm9pZCByZXBsYXlTYXZlZEV2
ZW50cygpOwogI2VuZGlmCiAKQEAgLTg5LDYgKzkzLDkgQEAgcHJpdmF0ZToKICNlbGlmIFBMQVRG
T1JNKEdUSykKICAgICB2b2lkIHNlbmRPclF1ZXVlRXZlbnQoR2RrRXZlbnQqKTsKICAgICBHZGtF
dmVudCogY3JlYXRlTW91c2VCdXR0b25FdmVudChHZGtFdmVudFR5cGUsIHVuc2lnbmVkIGJ1dHRv
biwgV0tFdmVudE1vZGlmaWVycyk7CisjZWxpZiBQTEFURk9STShFRkwpCisgICAgdm9pZCBzZW5k
T3JRdWV1ZUV2ZW50KGNvbnN0IFdUUkV2ZW50KTsKKyAgICB2b2lkIGRpc3BhdGNoRXZlbnQoY29u
c3QgV1RSRXZlbnQpOwogI2VuZGlmCiAKICAgICBkb3VibGUgbV90aW1lOwpAQCAtMTEyLDYgKzEx
OSw5IEBAIHByaXZhdGU6CiAgICAgUVBvaW50IG1fdG91Y2hQb2ludFJhZGl1czsKICAgICBib29s
IG1fdG91Y2hBY3RpdmU7CiAjZW5kaWYKKyNlbGlmIFBMQVRGT1JNKEVGTCkKKyAgICBEZXF1ZTxX
VFJFdmVudD4gbV9ldmVudFF1ZXVlOworICAgIHVuc2lnbmVkIG1fbW91c2VCdXR0b247CiAjZW5k
aWYKIH07CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvRXZlbnRTZW5kaW5nQ29udHJvbGxlci5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9FdmVudFNlbmRpbmdDb250cm9sbGVyLmgKaW5kZXggOGVhMmRiMC4uYjA0MGE0
OSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9FdmVu
dFNlbmRpbmdDb250cm9sbGVyLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9FdmVudFNlbmRpbmdDb250cm9sbGVyLmgKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNs
dWRlIDxXZWJLaXQyL1dLR2VvbWV0cnkuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgog
Ci0jaWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKFFUKSAmJiAhUExBVEZPUk0oR1RLKQor
I2lmICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShRVCkgJiYgIVBMQVRGT1JNKEdUSykgJiYg
IVBMQVRGT1JNKEVGTCkKICNkZWZpbmUgVVNFX1dFQlBST0NFU1NfRVZFTlRfU0lNVUxBVElPTgog
I2VuZGlmCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1FZmwu
Y21ha2UgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDk0
MmMwMDMuLjZjOTMwOTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZv
cm1FZmwuY21ha2UKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybUVmbC5jbWFr
ZQpAQCAtMTksNiArMTksNyBAQCBTRVQoRm9yd2FyZGluZ05ldHdvcmtIZWFkZXJzRm9yV2ViS2l0
VGVzdFJ1bm5lcl9OQU1FIGZvcndhcmRpbmctaGVhZGVyc1NvdXBGb3JXZQogTElTVChBUFBFTkQg
V2ViS2l0VGVzdFJ1bm5lcl9TT1VSQ0VTCiAgICAgJHtXRUJLSVRfVEVTVFJVTk5FUl9ESVJ9L2Nh
aXJvL1Rlc3RJbnZvY2F0aW9uQ2Fpcm8uY3BwCiAKKyAgICAke1dFQktJVF9URVNUUlVOTkVSX0RJ
Un0vZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwuY3BwCiAgICAgJHtXRUJLSVRfVEVTVFJVTk5FUl9E
SVJ9L2VmbC9QbGF0Zm9ybVdlYlZpZXdFZmwuY3BwCiAgICAgJHtXRUJLSVRfVEVTVFJVTk5FUl9E
SVJ9L2VmbC9UZXN0Q29udHJvbGxlckVmbC5jcHAKICAgICAke1dFQktJVF9URVNUUlVOTkVSX0RJ
Un0vZWZsL21haW4uY3BwCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RD
b250cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3Bw
CmluZGV4IGM0N2M0NzUuLjBhMmNiMmIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvVGVzdENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENv
bnRyb2xsZXIuY3BwCkBAIC04MSw3ICs4MSw3IEBAIFRlc3RDb250cm9sbGVyOjpUZXN0Q29udHJv
bGxlcihpbnQgYXJnYywgY29uc3QgY2hhciogYXJndltdKQogICAgICwgbV9kaWRQcmludFdlYlBy
b2Nlc3NDcmFzaGVkTWVzc2FnZShmYWxzZSkKICAgICAsIG1fc2hvdWxkRXhpdFdoZW5XZWJQcm9j
ZXNzQ3Jhc2hlcyh0cnVlKQogICAgICwgbV9iZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZSh0cnVlKQot
I2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykKKyNpZiBQ
TEFURk9STShNQUMpIHx8IFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JN
KEVGTCkKICAgICAsIG1fZXZlbnRTZW5kZXJQcm94eShuZXcgRXZlbnRTZW5kZXJQcm94eSh0aGlz
KSkKICNlbmRpZgogewpAQCAtNTk4LDcgKzU5OCw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRp
ZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1l
CiAKIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVTeW5j
aHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUs
IFdLVHlwZVJlZiBtZXNzYWdlQm9keSkKIHsKLSNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JN
KFFUKSB8fCBQTEFURk9STShHVEspCisjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShRVCkg
fHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJFdmVudFNlbmRlciIpKSB7CiAgICAgICAgIEFT
U0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkp
OwogICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGlj
X2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7CmRpZmYgLS1naXQgYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL2VmbC9FdmVudFNlbmRlclByb3h5RWZsLmNwcCBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmIyYmZmYTUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL2VmbC9FdmVudFNlbmRlclByb3h5RWZsLmNwcApAQCAtMCwwICsxLDQ1MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgWmFuIERvYmVyc2VrIDx6YW5kb2JlcnNl
a0BnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJl
eXRoZXIKKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChD
KSAyMDExIFByb0ZVU0lPTiBFbWJlZGRlZCBTeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
U2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkV2ZW50U2VuZGVyUHJveHkuaCIKKworI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XZWJWaWV3LmgiCisjaW5jbHVkZSAiVGVzdENv
bnRyb2xsZXIuaCIKKworI2luY2x1ZGUgPEVjb3JlLmg+CisjaW5jbHVkZSA8RWNvcmVfRXZhcy5o
PgorI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duQXJy
YXlQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXVFIgeworCitlbnVtIFdUUkV2ZW50VHlwZSB7
CisgICAgV1RSRXZlbnRUeXBlTm9uZSwKKyAgICBXVFJFdmVudFR5cGVNb3VzZURvd24sCisgICAg
V1RSRXZlbnRUeXBlTW91c2VVcCwKKyAgICBXVFJFdmVudFR5cGVNb3VzZU1vdmUsCisgICAgV1RS
RXZlbnRUeXBlTW91c2VTY3JvbGxCeSwKKyAgICBXVFJFdmVudFR5cGVMZWFwRm9yd2FyZAorfTsK
KworZW51bSBXVFJNb3VzZUJ1dHRvbiB7CisgICAgV1RSTW91c2VCdXR0b25Ob25lID0gLTEsCisg
ICAgV1RSTW91c2VCdXR0b25MZWZ0LAorICAgIFdUUk1vdXNlQnV0dG9uTWlkZGxlLAorICAgIFdU
Uk1vdXNlQnV0dG9uUmlnaHQsCisgICAgV1RSTW91c2VCdXR0b25NaWRkbGVEdXBsaWNhdGVkLAor
fTsKKworZW51bSBFdmFzTW91c2VCdXR0b24geworICAgIEV2YXNNb3VzZUJ1dHRvbk5vbmUsCisg
ICAgRXZhc01vdXNlQnV0dG9uTGVmdCwKKyAgICBFdmFzTW91c2VCdXR0b25NaWRkbGUsCisgICAg
RXZhc01vdXNlQnV0dG9uUmlnaHQKK307CisKKy8vIEtleSBldmVudCBsb2NhdGlvbiBjb2RlIGRl
ZmluZWQgaW4gRE9NIExldmVsIDMuCitlbnVtIEtleUxvY2F0aW9uQ29kZSB7CisgICAgRE9NS2V5
TG9jYXRpb25TdGFuZGFyZCAgICAgID0gMHgwMCwKKyAgICBET01LZXlMb2NhdGlvbkxlZnQgICAg
ICAgICAgPSAweDAxLAorICAgIERPTUtleUxvY2F0aW9uUmlnaHQgICAgICAgICA9IDB4MDIsCisg
ICAgRE9NS2V5TG9jYXRpb25OdW1wYWQgICAgICAgID0gMHgwMworfTsKKworc3RydWN0IFdUUkV2
ZW50IHsKKyAgICBXVFJFdmVudFR5cGUgZXZlbnRUeXBlOworICAgIHVuc2lnbmVkIGRlbGF5Owor
ICAgIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzOworICAgIGludCBidXR0b247CisgICAgaW50
IGhvcml6b250YWw7CisgICAgaW50IHZlcnRpY2FsOworCisgICAgV1RSRXZlbnQoKQorICAgICAg
ICA6IGV2ZW50VHlwZShXVFJFdmVudFR5cGVOb25lKQorICAgICAgICAsIGRlbGF5KDApCisgICAg
ICAgICwgYnV0dG9uKC0xKQorICAgICAgICAsIGhvcml6b250YWwoLTEpCisgICAgICAgICwgdmVy
dGljYWwoLTEpCisgICAgeworICAgIH0KKworICAgIFdUUkV2ZW50KFdUUkV2ZW50VHlwZSBldmVu
dFR5cGUsIHVuc2lnbmVkIGRlbGF5LCBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycywgaW50IGJ1
dHRvbikKKyAgICAgICAgOiBldmVudFR5cGUoZXZlbnRUeXBlKQorICAgICAgICAsIGRlbGF5KGRl
bGF5KQorICAgICAgICAsIG1vZGlmaWVycyhtb2RpZmllcnMpCisgICAgICAgICwgYnV0dG9uKGJ1
dHRvbikKKyAgICAgICAgLCBob3Jpem9udGFsKC0xKQorICAgICAgICAsIHZlcnRpY2FsKC0xKQor
ICAgIHsKKyAgICB9Cit9OworCitzdHJ1Y3QgS2V5RXZlbnRJbmZvIDogcHVibGljIFJlZkNvdW50
ZWQ8S2V5RXZlbnRJbmZvPiB7CisgICAgS2V5RXZlbnRJbmZvKGNvbnN0IENTdHJpbmcmIGtleU5h
bWUsIGNvbnN0IENTdHJpbmcmIGtleVN0cmluZykKKyAgICAgICAgOiBrZXlOYW1lKGtleU5hbWUp
CisgICAgICAgICwga2V5U3RyaW5nKGtleVN0cmluZykKKyAgICB7CisgICAgfQorCisgICAgY29u
c3QgQ1N0cmluZyBrZXlOYW1lOworICAgIGNvbnN0IENTdHJpbmcga2V5U3RyaW5nOworfTsKKwor
c3RhdGljIHVuc2lnbmVkIGV2YXNNb3VzZUJ1dHRvbih1bnNpZ25lZCBidXR0b24pCit7CisgICAg
aWYgKGJ1dHRvbiA9PSBXVFJNb3VzZUJ1dHRvbkxlZnQpCisgICAgICAgIHJldHVybiBFdmFzTW91
c2VCdXR0b25MZWZ0OworICAgIGlmIChidXR0b24gPT0gV1RSTW91c2VCdXR0b25NaWRkbGUpCisg
ICAgICAgIHJldHVybiBFdmFzTW91c2VCdXR0b25NaWRkbGU7CisgICAgaWYgKGJ1dHRvbiA9PSBX
VFJNb3VzZUJ1dHRvblJpZ2h0KQorICAgICAgICByZXR1cm4gRXZhc01vdXNlQnV0dG9uUmlnaHQ7
CisgICAgaWYgKGJ1dHRvbiA9PSBXVFJNb3VzZUJ1dHRvbk1pZGRsZUR1cGxpY2F0ZWQpCisgICAg
ICAgIHJldHVybiBFdmFzTW91c2VCdXR0b25NaWRkbGU7CisKKyAgICByZXR1cm4gRXZhc01vdXNl
QnV0dG9uTm9uZTsKK30KKworc3RhdGljIHZvaWQgc2V0RXZhc01vZGlmaWVycyhFdmFzKiBldmFz
LCBXS0V2ZW50TW9kaWZpZXJzIHdrTW9kaWZpZXJzKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBtb2RpZmllck5hbWVzW10gPSB7ICJTaGlmdCIsICJDb250cm9sIiwgIkFsdCIsICJNZXRhIiB9
OworICAgIGZvciAodW5zaWduZWQgbW9kaWZpZXIgPSAwOyBtb2RpZmllciA8IChzaXplb2YobW9k
aWZpZXJOYW1lcykgLyBzaXplb2YoY2hhciopKTsgKyttb2RpZmllcikgeworICAgICAgICBpZiAo
d2tNb2RpZmllcnMgJiAoMSA8PCBtb2RpZmllcikpCisgICAgICAgICAgICBldmFzX2tleV9tb2Rp
Zmllcl9vbihldmFzLCBtb2RpZmllck5hbWVzW21vZGlmaWVyXSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGV2YXNfa2V5X21vZGlmaWVyX29mZihldmFzLCBtb2RpZmllck5hbWVzW21vZGlm
aWVyXSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBkaXNwYXRjaE1vdXNlRG93bkV2ZW50KEV2
YXMqIGV2YXMsIHVuc2lnbmVkIGJ1dHRvbiwgV0tFdmVudE1vZGlmaWVycyB3a01vZGlmaWVycykK
K3sKKyAgICBzZXRFdmFzTW9kaWZpZXJzKGV2YXMsIHdrTW9kaWZpZXJzKTsKKyAgICBldmFzX2V2
ZW50X2ZlZWRfbW91c2VfZG93bihldmFzLCBidXR0b24sIEVWQVNfQlVUVE9OX05PTkUsIDAsIDAp
OworICAgIHNldEV2YXNNb2RpZmllcnMoZXZhcywgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGRpc3Bh
dGNoTW91c2VVcEV2ZW50KEV2YXMqIGV2YXMsIHVuc2lnbmVkIGJ1dHRvbiwgV0tFdmVudE1vZGlm
aWVycyB3a01vZGlmaWVycykKK3sKKyAgICBzZXRFdmFzTW9kaWZpZXJzKGV2YXMsIHdrTW9kaWZp
ZXJzKTsKKyAgICBldmFzX2V2ZW50X2ZlZWRfbW91c2VfdXAoZXZhcywgYnV0dG9uLCBFVkFTX0JV
VFRPTl9OT05FLCAwLCAwKTsKKyAgICBzZXRFdmFzTW9kaWZpZXJzKGV2YXMsIDApOworfQorCitz
dGF0aWMgdm9pZCBkaXNwYXRjaE1vdXNlTW92ZUV2ZW50KEV2YXMqIGV2YXMsIGludCB4LCBpbnQg
eSkKK3sKKyAgICBldmFzX2V2ZW50X2ZlZWRfbW91c2VfbW92ZShldmFzLCB4LCB5LCAwLCAwKTsK
K30KKworc3RhdGljIHZvaWQgZGlzcGF0Y2hNb3VzZVNjcm9sbEJ5RXZlbnQoRXZhcyogZXZhcywg
aW50IGhvcml6b250YWwsIGludCB2ZXJ0aWNhbCkKK3sKKyAgICBpZiAoaG9yaXpvbnRhbCA+IDAp
CisgICAgICAgIGV2YXNfZXZlbnRfZmVlZF9tb3VzZV93aGVlbChldmFzLCAxLCAtMTAsIDAsIDAp
OworICAgIGVsc2UgaWYgKGhvcml6b250YWwgPCAwKQorICAgICAgICBldmFzX2V2ZW50X2ZlZWRf
bW91c2Vfd2hlZWwoZXZhcywgMSwgMTAsIDAsIDApOworCisgICAgaWYgKHZlcnRpY2FsID4gMCkK
KyAgICAgICAgZXZhc19ldmVudF9mZWVkX21vdXNlX3doZWVsKGV2YXMsIDAsIDEwLCAwLCAwKTsK
KyAgICBlbHNlIGlmICh2ZXJ0aWNhbCA8IDApCisgICAgICAgIGV2YXNfZXZlbnRfZmVlZF9tb3Vz
ZV93aGVlbChldmFzLCAwLCAtMTAsIDAsIDApOworfQorCitzdGF0aWMgY29uc3QgUGFzc1JlZlB0
cjxLZXlFdmVudEluZm8+IGtleVBhZE5hbWUoV0tTdHJpbmdSZWYga2V5UmVmKQoreworICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgImxlZnRBcnJvdyIpKQorICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiS1BfTGVmdCIsICIiKSk7Cisg
ICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAicmlnaHRBcnJvdyIp
KQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiS1BfUmlnaHQiLCAi
IikpOworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgInVwQXJy
b3ciKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIktQX1VwIiwg
IiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJkb3du
QXJyb3ciKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIktQX0Rv
d24iLCAiIikpOworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwg
InBhZ2VVcCIpKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiS1Bf
UHJpb3IiLCAiIikpOworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJl
ZiwgInBhZ2VEb3duIikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZv
KCJLUF9OZXh0IiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhr
ZXlSZWYsICJob21lIikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZv
KCJLUF9Ib21lIiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhr
ZXlSZWYsICJlbmQiKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8o
IktQX0VuZCIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5
UmVmLCAiaW5zZXJ0IikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZv
KCJLUF9JbnNlcnQiLCAiIikpOworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KGtleVJlZiwgImRlbGV0ZSIpKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50
SW5mbygiS1BfRGVsZXRlIiwgIiIpKTsKKworICAgIHNpemVfdCBidWZmZXJTaXplID0gV0tTdHJp
bmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKGtleVJlZik7CisgICAgT3duQXJyYXlQdHI8Y2hh
cj4gYnVmZmVyID0gYWRvcHRBcnJheVB0cihuZXcgY2hhcltidWZmZXJTaXplXSk7CisgICAgV0tT
dHJpbmdHZXRVVEY4Q1N0cmluZyhrZXlSZWYsIGJ1ZmZlci5nZXQoKSwgYnVmZmVyU2l6ZSk7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oYnVmZmVyLmdldCgpLCBidWZmZXIu
Z2V0KCkpKTsKK30KKworc3RhdGljIGNvbnN0IFBhc3NSZWZQdHI8S2V5RXZlbnRJbmZvPiBrZXlO
YW1lKFdLU3RyaW5nUmVmIGtleVJlZikKK3sKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhrZXlSZWYsICJsZWZ0QXJyb3ciKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBLZXlFdmVudEluZm8oIkxlZnQiLCAiIikpOworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKGtleVJlZiwgInJpZ2h0QXJyb3ciKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBLZXlFdmVudEluZm8oIlJpZ2h0IiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhrZXlSZWYsICJ1cEFycm93IikpCisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgS2V5RXZlbnRJbmZvKCJVcCIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcoa2V5UmVmLCAiZG93bkFycm93IikpCisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgS2V5RXZlbnRJbmZvKCJEb3duIiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhrZXlSZWYsICJwYWdlVXAiKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBLZXlFdmVudEluZm8oIlByaW9yIiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhrZXlSZWYsICJwYWdlRG93biIpKQorICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEtleUV2ZW50SW5mbygiTmV4dCIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcoa2V5UmVmLCAiaG9tZSIpKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEtleUV2ZW50SW5mbygiSG9tZSIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcoa2V5UmVmLCAiZW5kIikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
S2V5RXZlbnRJbmZvKCJFbmQiLCAiIikpOworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKGtleVJlZiwgImluc2VydCIpKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtl
eUV2ZW50SW5mbygiSW5zZXJ0IiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhrZXlSZWYsICJkZWxldGUiKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBL
ZXlFdmVudEluZm8oIkRlbGV0ZSIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcoa2V5UmVmLCAicHJpbnRTY3JlZW4iKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBLZXlFdmVudEluZm8oIlByaW50IiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhrZXlSZWYsICJtZW51IikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgS2V5RXZlbnRJbmZvKCJNZW51IiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhrZXlSZWYsICJGMSIpKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtl
eUV2ZW50SW5mbygiRjEiLCAiIikpOworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKGtleVJlZiwgIkYyIikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJ
bmZvKCJGMiIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5
UmVmLCAiRjMiKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIkYz
IiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJG
NCIpKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiRjQiLCAiIikp
OworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgIkY1IikpCisg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJGNSIsICIiKSk7CisgICAg
aWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAiRjYiKSkKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIkY2IiwgIiIpKTsKKyAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJGNyIpKQorICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiRjciLCAiIikpOworICAgIGlmIChXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgIkY4IikpCisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgS2V5RXZlbnRJbmZvKCJGOCIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcoa2V5UmVmLCAiRjkiKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBL
ZXlFdmVudEluZm8oIkY5IiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhrZXlSZWYsICJGMTAiKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVu
dEluZm8oIkYxMCIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
a2V5UmVmLCAiRjExIikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZv
KCJGMTEiLCAiIikpOworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJl
ZiwgIkYxMiIpKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiRjEy
IiwgIiIpKTsKKworICAgIHNpemVfdCBidWZmZXJTaXplID0gV0tTdHJpbmdHZXRNYXhpbXVtVVRG
OENTdHJpbmdTaXplKGtleVJlZik7CisgICAgT3duQXJyYXlQdHI8Y2hhcj4gYnVmZmVyID0gYWRv
cHRBcnJheVB0cihuZXcgY2hhcltidWZmZXJTaXplXSk7CisgICAgV0tTdHJpbmdHZXRVVEY4Q1N0
cmluZyhrZXlSZWYsIGJ1ZmZlci5nZXQoKSwgYnVmZmVyU2l6ZSk7CisgICAgY2hhciBjaGFyQ29k
ZSA9IGJ1ZmZlci5nZXQoKVswXTsKKworICAgIGlmIChjaGFyQ29kZSA9PSAnXG4nIHx8IGNoYXJD
b2RlID09ICdccicpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJS
ZXR1cm4iLCAiXHIiKSk7CisgICAgaWYgKGNoYXJDb2RlID09ICdcdCcpCisgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJUYWIiLCAiXHQiKSk7CisgICAgaWYgKGNoYXJD
b2RlID09ICdceDgnKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygi
QmFja1NwYWNlIiwgIlx4OCIpKTsKKyAgICBpZiAoY2hhckNvZGUgPT0gJyAnKQorICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygic3BhY2UiLCAiICIpKTsKKworICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKGJ1ZmZlci5nZXQoKSwgYnVmZmVyLmdldCgp
KSk7Cit9CisKK0V2ZW50U2VuZGVyUHJveHk6OkV2ZW50U2VuZGVyUHJveHkoVGVzdENvbnRyb2xs
ZXIqIHRlc3RDb250cm9sbGVyKQorICAgIDogbV90ZXN0Q29udHJvbGxlcih0ZXN0Q29udHJvbGxl
cikKKyAgICAsIG1fdGltZSgwKQorICAgICwgbV9sZWZ0TW91c2VCdXR0b25Eb3duKGZhbHNlKQor
ICAgICwgbV9jbGlja0NvdW50KDApCisgICAgLCBtX2NsaWNrVGltZSgwKQorICAgICwgbV9jbGlj
a0J1dHRvbihXVFJNb3VzZUJ1dHRvbk5vbmUpCisgICAgLCBtX21vdXNlQnV0dG9uKFdUUk1vdXNl
QnV0dG9uTm9uZSkKK3sKK30KKwordm9pZCBFdmVudFNlbmRlclByb3h5Ojp1cGRhdGVDbGlja0Nv
dW50Rm9yQnV0dG9uKGludCBidXR0b24pCit7CisgICAgaWYgKG1fdGltZSAtIG1fY2xpY2tUaW1l
IDwgMSAmJiBtX3Bvc2l0aW9uID09IG1fY2xpY2tQb3NpdGlvbiAmJiBidXR0b24gPT0gbV9jbGlj
a0J1dHRvbikgeworICAgICAgICArK21fY2xpY2tDb3VudDsKKyAgICAgICAgbV9jbGlja1RpbWUg
PSBtX3RpbWU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2NsaWNrQ291bnQgPSAx
OworICAgIG1fY2xpY2tUaW1lID0gbV90aW1lOworICAgIG1fY2xpY2tQb3NpdGlvbiA9IG1fcG9z
aXRpb247CisgICAgbV9jbGlja0J1dHRvbiA9IGJ1dHRvbjsKK30KKwordm9pZCBFdmVudFNlbmRl
clByb3h5OjpkaXNwYXRjaEV2ZW50KGNvbnN0IFdUUkV2ZW50IHd0ckV2ZW50KQoreworICAgIGlm
ICh3dHJFdmVudC5ldmVudFR5cGUgPT0gV1RSRXZlbnRUeXBlTW91c2VEb3duKQorICAgICAgICBk
aXNwYXRjaE1vdXNlRG93bkV2ZW50KGVjb3JlX2V2YXNfZ2V0KG1fdGVzdENvbnRyb2xsZXItPm1h
aW5XZWJWaWV3KCktPnBsYXRmb3JtV2luZG93KCkpLCB3dHJFdmVudC5idXR0b24sIHd0ckV2ZW50
Lm1vZGlmaWVycyk7CisgICAgZWxzZSBpZiAod3RyRXZlbnQuZXZlbnRUeXBlID09IFdUUkV2ZW50
VHlwZU1vdXNlVXApCisgICAgICAgIGRpc3BhdGNoTW91c2VVcEV2ZW50KGVjb3JlX2V2YXNfZ2V0
KG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtV2luZG93KCkpLCB3dHJF
dmVudC5idXR0b24sIHd0ckV2ZW50Lm1vZGlmaWVycyk7CisgICAgZWxzZSBpZiAod3RyRXZlbnQu
ZXZlbnRUeXBlID09IFdUUkV2ZW50VHlwZU1vdXNlTW92ZSkKKyAgICAgICAgZGlzcGF0Y2hNb3Vz
ZU1vdmVFdmVudChlY29yZV9ldmFzX2dldChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygp
LT5wbGF0Zm9ybVdpbmRvdygpKSwgc3RhdGljX2Nhc3Q8aW50PihtX3Bvc2l0aW9uLngpLCBzdGF0
aWNfY2FzdDxpbnQ+KG1fcG9zaXRpb24ueSkpOworICAgIGVsc2UgaWYgKHd0ckV2ZW50LmV2ZW50
VHlwZSA9PSBXVFJFdmVudFR5cGVNb3VzZVNjcm9sbEJ5KQorICAgICAgICBkaXNwYXRjaE1vdXNl
U2Nyb2xsQnlFdmVudChlY29yZV9ldmFzX2dldChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmll
dygpLT5wbGF0Zm9ybVdpbmRvdygpKSwgd3RyRXZlbnQuaG9yaXpvbnRhbCwgd3RyRXZlbnQudmVy
dGljYWwpOworfQorCit2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnJlcGxheVNhdmVkRXZlbnRzKCkK
K3sKKyAgICB3aGlsZSAoIW1fZXZlbnRRdWV1ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgV1RSRXZl
bnQgd3RyRXZlbnQgPSBtX2V2ZW50UXVldWUuZmlyc3QoKTsKKyAgICAgICAgaWYgKHd0ckV2ZW50
LmRlbGF5KQorICAgICAgICAgICAgdXNsZWVwKHd0ckV2ZW50LmRlbGF5ICogMTAwMCk7CisKKyAg
ICAgICAgZGlzcGF0Y2hFdmVudCh3dHJFdmVudCk7CisgICAgICAgIG1fZXZlbnRRdWV1ZS5yZW1v
dmVGaXJzdCgpOworICAgIH0KK30KKwordm9pZCBFdmVudFNlbmRlclByb3h5OjpzZW5kT3JRdWV1
ZUV2ZW50KGNvbnN0IFdUUkV2ZW50IHd0ckV2ZW50KQoreworICAgIGlmIChtX2V2ZW50UXVldWUu
aXNFbXB0eSgpIHx8ICFtX2V2ZW50UXVldWUubGFzdCgpLmRlbGF5KSB7CisgICAgICAgIGRpc3Bh
dGNoRXZlbnQod3RyRXZlbnQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9ldmVu
dFF1ZXVlLmFwcGVuZCh3dHJFdmVudCk7CisgICAgcmVwbGF5U2F2ZWRFdmVudHMoKTsKK30KKwor
dm9pZCBFdmVudFNlbmRlclByb3h5Ojptb3VzZURvd24odW5zaWduZWQgYnV0dG9uLCBXS0V2ZW50
TW9kaWZpZXJzIHdrTW9kaWZpZXJzKQoreworICAgIGlmIChtX21vdXNlQnV0dG9uID09IGJ1dHRv
bikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9tb3VzZUJ1dHRvbiA9IGJ1dHRvbjsKKyAgICB1
cGRhdGVDbGlja0NvdW50Rm9yQnV0dG9uKGJ1dHRvbik7CisKKyAgICBzZW5kT3JRdWV1ZUV2ZW50
KFdUUkV2ZW50KFdUUkV2ZW50VHlwZU1vdXNlRG93biwgMCwgd2tNb2RpZmllcnMsIGV2YXNNb3Vz
ZUJ1dHRvbihidXR0b24pKSk7Cit9CisKK3ZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VVcCh1
bnNpZ25lZCBidXR0b24sIFdLRXZlbnRNb2RpZmllcnMgd2tNb2RpZmllcnMpCit7CisgICAgc2Vu
ZE9yUXVldWVFdmVudChXVFJFdmVudChXVFJFdmVudFR5cGVNb3VzZVVwLCAwLCB3a01vZGlmaWVy
cywgZXZhc01vdXNlQnV0dG9uKGJ1dHRvbikpKTsKKworICAgIGlmIChtX21vdXNlQnV0dG9uID09
IGJ1dHRvbikKKyAgICAgICAgbV9tb3VzZUJ1dHRvbiA9IFdUUk1vdXNlQnV0dG9uTm9uZTsKKwor
ICAgIG1fY2xpY2tQb3NpdGlvbiA9IG1fcG9zaXRpb247CisgICAgbV9jbGlja1RpbWUgPSBlY29y
ZV90aW1lX2dldCgpOworfQorCit2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlTW92ZVRvKGRv
dWJsZSB4LCBkb3VibGUgeSkKK3sKKyAgICBtX3Bvc2l0aW9uLnggPSB4OworICAgIG1fcG9zaXRp
b24ueSA9IHk7CisKKyAgICBzZW5kT3JRdWV1ZUV2ZW50KFdUUkV2ZW50KFdUUkV2ZW50VHlwZU1v
dXNlTW92ZSwgMCwgMCwgV1RSTW91c2VCdXR0b25Ob25lKSk7Cit9CisKK3ZvaWQgRXZlbnRTZW5k
ZXJQcm94eTo6bW91c2VTY3JvbGxCeShpbnQgaG9yaXpvbnRhbCwgaW50IHZlcnRpY2FsKQorewor
ICAgIFdUUkV2ZW50IHd0ckV2ZW50KFdUUkV2ZW50VHlwZU1vdXNlU2Nyb2xsQnksIDAsIDAsIFdU
Uk1vdXNlQnV0dG9uTm9uZSk7CisgICAgd3RyRXZlbnQuaG9yaXpvbnRhbCA9IGhvcml6b250YWw7
CisgICAgd3RyRXZlbnQudmVydGljYWwgPSB2ZXJ0aWNhbDsKKyAgICBzZW5kT3JRdWV1ZUV2ZW50
KHd0ckV2ZW50KTsKK30KKwordm9pZCBFdmVudFNlbmRlclByb3h5OjpsZWFwRm9yd2FyZChpbnQg
bWlsbGlzZWNvbmRzKQoreworICAgIGlmIChtX2V2ZW50UXVldWUuaXNFbXB0eSgpKQorICAgICAg
ICBtX2V2ZW50UXVldWUuYXBwZW5kKFdUUkV2ZW50KFdUUkV2ZW50VHlwZUxlYXBGb3J3YXJkLCBt
aWxsaXNlY29uZHMsIDAsIFdUUk1vdXNlQnV0dG9uTm9uZSkpOworCisgICAgbV90aW1lICs9IG1p
bGxpc2Vjb25kcyAvIDEwMDAuMDsKK30KKwordm9pZCBFdmVudFNlbmRlclByb3h5OjprZXlEb3du
KFdLU3RyaW5nUmVmIGtleVJlZiwgV0tFdmVudE1vZGlmaWVycyB3a01vZGlmaWVycywgdW5zaWdu
ZWQgbG9jYXRpb24pCit7CisgICAgY29uc3QgUmVmUHRyPEtleUV2ZW50SW5mbz4ga2V5RXZlbnRJ
bmZvID0gKGxvY2F0aW9uID09IERPTUtleUxvY2F0aW9uTnVtcGFkKSA/IGtleVBhZE5hbWUoa2V5
UmVmKSA6IGtleU5hbWUoa2V5UmVmKTsKKyAgICBpZiAoIWtleUV2ZW50SW5mbykKKyAgICAgICAg
cmV0dXJuOworCisgICAgY29uc3QgY2hhcioga2V5TmFtZSA9IGtleUV2ZW50SW5mby0+a2V5TmFt
ZS5kYXRhKCk7CisgICAgY29uc3QgY2hhcioga2V5U3RyaW5nID0ga2V5RXZlbnRJbmZvLT5rZXlT
dHJpbmcuZGF0YSgpOworCisgICAgRXZhcyogZXZhcyA9IGVjb3JlX2V2YXNfZ2V0KG1fdGVzdENv
bnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtV2luZG93KCkpOworICAgIHNldEV2YXNN
b2RpZmllcnMoZXZhcywgd2tNb2RpZmllcnMpOworICAgIGV2YXNfZXZlbnRfZmVlZF9rZXlfZG93
bihldmFzLCBrZXlOYW1lLCBrZXlOYW1lLCBrZXlTdHJpbmcsIDAsIDAsIDApOworICAgIGV2YXNf
ZXZlbnRfZmVlZF9rZXlfdXAoZXZhcywga2V5TmFtZSwga2V5TmFtZSwga2V5U3RyaW5nLCAwLCAx
LCAwKTsKKyAgICBzZXRFdmFzTW9kaWZpZXJzKGV2YXMsIDApOworfQorCisjaWYgRU5BQkxFKFRP
VUNIX0VWRU5UUykKK3ZvaWQgRXZlbnRTZW5kZXJQcm94eTo6YWRkVG91Y2hQb2ludChpbnQgeCwg
aW50IHkpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBFdmVudFNlbmRlclBy
b3h5Ojp1cGRhdGVUb3VjaFBvaW50KGludCBpbmRleCwgaW50IHgsIGludCB5KQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRXZlbnRTZW5kZXJQcm94eTo6c2V0VG91Y2hNb2Rp
ZmllcihXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVyLCBib29sIGVuYWJsZSkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnRvdWNoU3RhcnQoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRXZlbnRTZW5kZXJQcm94eTo6dG91
Y2hNb3ZlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEV2ZW50U2VuZGVy
UHJveHk6OnRvdWNoRW5kKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEV2
ZW50U2VuZGVyUHJveHk6OnRvdWNoQ2FuY2VsKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIEV2ZW50U2VuZGVyUHJveHk6OmNsZWFyVG91Y2hQb2ludHMoKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRXZlbnRTZW5kZXJQcm94eTo6cmVsZWFzZVRvdWNo
UG9pbnQoaW50IGluZGV4KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRXZl
bnRTZW5kZXJQcm94eTo6Y2FuY2VsVG91Y2hQb2ludChpbnQgaW5kZXgpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBFdmVudFNlbmRlclByb3h5OjpzZXRUb3VjaFBvaW50UmFk
aXVzKGludCByYWRpdXNYLCBpbnQgcmFkaXVzWSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCisjZW5kaWYKKworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153423</attachid>
            <date>2012-07-19 23:12:35 -0700</date>
            <delta_ts>2012-07-19 23:20:09 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>22047</size>
            <attacher name="Kangil Han">kangil.han</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBhYmMy
MzVlLi5iOTVlNjQzIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNTcgQEAKKzIwMTItMDctMTkgIEthbmdpbCBIYW4gIDxrYW5naWwu
aGFuQHNhbXN1bmcuY29tPgorCisgICAgICAgIFtFRkxdW1dLMl1bV1RSXSBJbXBsZW1lbnQgRXZl
bnRTZW5kZXJQcm94eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9OTE3MzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGlzIGlzIGFuIGluaXRpYWwgRUZMIHBvcnQgaW1wbGVtZW50YXRpb24gb2YgRXZlbnRT
ZW5kZXJQcm94eS4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvRXZlbnRTZW5kZXJQcm94
eS5oOgorICAgICAgICAoV1RSKToKKyAgICAgICAgKEV2ZW50U2VuZGVyUHJveHkpOgorICAgICAg
ICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvRXZlbnRTZW5kaW5nQ29udHJvbGxl
ci5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1FZmwuY21ha2U6CisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6
OlRlc3RDb250cm9sbGVyOjpUZXN0Q29udHJvbGxlcik6CisgICAgICAgIChXVFI6OlRlc3RDb250
cm9sbGVyOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKToK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2VmbC9FdmVudFNlbmRlclByb3h5RWZsLmNwcDog
QWRkZWQuCisgICAgICAgIChXVFIpOgorICAgICAgICAoV1RSRXZlbnQpOgorICAgICAgICAoV1RS
OjpXVFJFdmVudDo6V1RSRXZlbnQpOgorICAgICAgICAoV1RSOjpLZXlFdmVudEluZm86OktleUV2
ZW50SW5mbyk6CisgICAgICAgIChLZXlFdmVudEluZm8pOgorICAgICAgICAoV1RSOjpldmFzTW91
c2VCdXR0b24pOgorICAgICAgICAoV1RSOjpzZXRFdmFzTW9kaWZpZXJzKToKKyAgICAgICAgKFdU
Ujo6ZGlzcGF0Y2hNb3VzZURvd25FdmVudCk6CisgICAgICAgIChXVFI6OmRpc3BhdGNoTW91c2VV
cEV2ZW50KToKKyAgICAgICAgKFdUUjo6ZGlzcGF0Y2hNb3VzZU1vdmVFdmVudCk6CisgICAgICAg
IChXVFI6OmRpc3BhdGNoTW91c2VTY3JvbGxCeUV2ZW50KToKKyAgICAgICAgKFdUUjo6a2V5UGFk
TmFtZSk6CisgICAgICAgIChXVFI6OmtleU5hbWUpOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRl
clByb3h5OjpFdmVudFNlbmRlclByb3h5KToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94
eTo6dXBkYXRlQ2xpY2tDb3VudEZvckJ1dHRvbik6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVy
UHJveHk6OmRpc3BhdGNoRXZlbnQpOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5Ojpy
ZXBsYXlTYXZlZEV2ZW50cyk6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6OnNlbmRP
clF1ZXVlRXZlbnQpOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5Ojptb3VzZURvd24p
OgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5Ojptb3VzZVVwKToKKyAgICAgICAgKFdU
Ujo6RXZlbnRTZW5kZXJQcm94eTo6bW91c2VNb3ZlVG8pOgorICAgICAgICAoV1RSOjpFdmVudFNl
bmRlclByb3h5Ojptb3VzZVNjcm9sbEJ5KToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94
eTo6bGVhcEZvcndhcmQpOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5OjprZXlEb3du
KToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6YWRkVG91Y2hQb2ludCk6CisgICAg
ICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6OnVwZGF0ZVRvdWNoUG9pbnQpOgorICAgICAgICAo
V1RSOjpFdmVudFNlbmRlclByb3h5OjpzZXRUb3VjaE1vZGlmaWVyKToKKyAgICAgICAgKFdUUjo6
RXZlbnRTZW5kZXJQcm94eTo6dG91Y2hTdGFydCk6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVy
UHJveHk6OnRvdWNoTW92ZSk6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6OnRvdWNo
RW5kKToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6dG91Y2hDYW5jZWwpOgorICAg
ICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5OjpjbGVhclRvdWNoUG9pbnRzKToKKyAgICAgICAg
KFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6cmVsZWFzZVRvdWNoUG9pbnQpOgorICAgICAgICAoV1RS
OjpFdmVudFNlbmRlclByb3h5OjpjYW5jZWxUb3VjaFBvaW50KToKKyAgICAgICAgKFdUUjo6RXZl
bnRTZW5kZXJQcm94eTo6c2V0VG91Y2hQb2ludFJhZGl1cyk6CisKIDIwMTItMDctMTggIENocmlz
dG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVsLmNvbT4KIAogICAgICAgICBbQ01h
a2VdW0VGTF0gU2hvdWxkIHRyeSB0byBmaW5kIHRoZSBzYW1lIGxpYnNvdXAgdmVyc2lvbiBwdWxs
ZWQgYnkgamhidWlsZApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9FdmVudFNl
bmRlclByb3h5LmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0V2ZW50U2VuZGVyUHJveHkuaApp
bmRleCA4MTY4NTEzLi43NmIyMmU4IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0V2ZW50U2VuZGVyUHJveHkuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0V2ZW50U2Vu
ZGVyUHJveHkuaApAQCAtMzMsNiArMzMsOCBAQAogI2VsaWYgUExBVEZPUk0oR1RLKQogI2luY2x1
ZGUgPGdkay9nZGsuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjZWxpZiBQTEFURk9STShF
RkwpCisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdUUiB7CkBA
IC00MSw2ICs0Myw4IEBAIGNsYXNzIFRlc3RDb250cm9sbGVyOwogCiAjaWYgUExBVEZPUk0oR1RL
KQogc3RydWN0IFdUUkV2ZW50UXVldWVJdGVtOworI2VsaWYgUExBVEZPUk0oRUZMKQorc3RydWN0
IFdUUkV2ZW50OwogI2VuZGlmCiAKIGNsYXNzIEV2ZW50U2VuZGVyUHJveHkgewpAQCAtNzcsNyAr
ODEsNyBAQCBwcml2YXRlOgogICAgIGRvdWJsZSBjdXJyZW50RXZlbnRUaW1lKCkgeyByZXR1cm4g
bV90aW1lOyB9CiAgICAgdm9pZCB1cGRhdGVDbGlja0NvdW50Rm9yQnV0dG9uKGludCBidXR0b24p
OwogCi0jaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykKKyNpZiBQTEFURk9STShRVCkg
fHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpCiAgICAgdm9pZCByZXBsYXlTYXZlZEV2
ZW50cygpOwogI2VuZGlmCiAKQEAgLTg5LDYgKzkzLDkgQEAgcHJpdmF0ZToKICNlbGlmIFBMQVRG
T1JNKEdUSykKICAgICB2b2lkIHNlbmRPclF1ZXVlRXZlbnQoR2RrRXZlbnQqKTsKICAgICBHZGtF
dmVudCogY3JlYXRlTW91c2VCdXR0b25FdmVudChHZGtFdmVudFR5cGUsIHVuc2lnbmVkIGJ1dHRv
biwgV0tFdmVudE1vZGlmaWVycyk7CisjZWxpZiBQTEFURk9STShFRkwpCisgICAgdm9pZCBzZW5k
T3JRdWV1ZUV2ZW50KGNvbnN0IFdUUkV2ZW50Jik7CisgICAgdm9pZCBkaXNwYXRjaEV2ZW50KGNv
bnN0IFdUUkV2ZW50Jik7CiAjZW5kaWYKIAogICAgIGRvdWJsZSBtX3RpbWU7CkBAIC0xMTIsNiAr
MTE5LDkgQEAgcHJpdmF0ZToKICAgICBRUG9pbnQgbV90b3VjaFBvaW50UmFkaXVzOwogICAgIGJv
b2wgbV90b3VjaEFjdGl2ZTsKICNlbmRpZgorI2VsaWYgUExBVEZPUk0oRUZMKQorICAgIERlcXVl
PFdUUkV2ZW50PiBtX2V2ZW50UXVldWU7CisgICAgdW5zaWduZWQgbV9tb3VzZUJ1dHRvbjsKICNl
bmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9FdmVudFNlbmRpbmdDb250cm9sbGVyLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuaAppbmRleCA4ZWEyZGIwLi5iMDQw
YTQ5IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0V2
ZW50U2VuZGluZ0NvbnRyb2xsZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuaApAQCAtMzEsNyArMzEsNyBAQAogI2lu
Y2x1ZGUgPFdlYktpdDIvV0tHZW9tZXRyeS5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CiAKLSNpZiAhUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oUVQpICYmICFQTEFURk9STShHVEsp
CisjaWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKFFUKSAmJiAhUExBVEZPUk0oR1RLKSAm
JiAhUExBVEZPUk0oRUZMKQogI2RlZmluZSBVU0VfV0VCUFJPQ0VTU19FVkVOVF9TSU1VTEFUSU9O
CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybUVm
bC5jbWFrZSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXgg
OTQyYzAwMy4uNmM5MzA5MSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0
Zm9ybUVmbC5jbWFrZQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtRWZsLmNt
YWtlCkBAIC0xOSw2ICsxOSw3IEBAIFNFVChGb3J3YXJkaW5nTmV0d29ya0hlYWRlcnNGb3JXZWJL
aXRUZXN0UnVubmVyX05BTUUgZm9yd2FyZGluZy1oZWFkZXJzU291cEZvcldlCiBMSVNUKEFQUEVO
RCBXZWJLaXRUZXN0UnVubmVyX1NPVVJDRVMKICAgICAke1dFQktJVF9URVNUUlVOTkVSX0RJUn0v
Y2Fpcm8vVGVzdEludm9jYXRpb25DYWlyby5jcHAKIAorICAgICR7V0VCS0lUX1RFU1RSVU5ORVJf
RElSfS9lZmwvRXZlbnRTZW5kZXJQcm94eUVmbC5jcHAKICAgICAke1dFQktJVF9URVNUUlVOTkVS
X0RJUn0vZWZsL1BsYXRmb3JtV2ViVmlld0VmbC5jcHAKICAgICAke1dFQktJVF9URVNUUlVOTkVS
X0RJUn0vZWZsL1Rlc3RDb250cm9sbGVyRWZsLmNwcAogICAgICR7V0VCS0lUX1RFU1RSVU5ORVJf
RElSfS9lZmwvbWFpbi5jcHAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVz
dENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5j
cHAKaW5kZXggYzQ3YzQ3NS4uMGEyY2IyYiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9UZXN0Q29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0
Q29udHJvbGxlci5jcHAKQEAgLTgxLDcgKzgxLDcgQEAgVGVzdENvbnRyb2xsZXI6OlRlc3RDb250
cm9sbGVyKGludCBhcmdjLCBjb25zdCBjaGFyKiBhcmd2W10pCiAgICAgLCBtX2RpZFByaW50V2Vi
UHJvY2Vzc0NyYXNoZWRNZXNzYWdlKGZhbHNlKQogICAgICwgbV9zaG91bGRFeGl0V2hlbldlYlBy
b2Nlc3NDcmFzaGVzKHRydWUpCiAgICAgLCBtX2JlZm9yZVVubG9hZFJldHVyblZhbHVlKHRydWUp
Ci0jaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oR1RLKQorI2lm
IFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZP
Uk0oRUZMKQogICAgICwgbV9ldmVudFNlbmRlclByb3h5KG5ldyBFdmVudFNlbmRlclByb3h5KHRo
aXMpKQogI2VuZGlmCiB7CkBAIC01OTgsNyArNTk4LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6
ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5h
bWUKIAogV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZVN5
bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFt
ZSwgV0tUeXBlUmVmIG1lc3NhZ2VCb2R5KQogewotI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZP
Uk0oUVQpIHx8IFBMQVRGT1JNKEdUSykKKyNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKFFU
KSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkKICAgICBpZiAoV0tTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkV2ZW50U2VuZGVyIikpIHsKICAgICAgICAg
QVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQo
KSk7CiAgICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0
aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKZGlmZiAtLWdpdCBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwuY3BwIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9lZmwvRXZlbnRTZW5kZXJQcm94eUVmbC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMTBiMjE2ZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwuY3BwCkBAIC0wLDAgKzEsNDUz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBaYW4gRG9iZXJzZWsgPHphbmRvYmVy
c2VrQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBIb2xnZXIgSGFucyBQZXRlciBG
cmV5dGhlcgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgUHJvRlVTSU9OIEVtYmVkZGVkIFN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRXZlbnRTZW5kZXJQcm94eS5oIgorCisjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVdlYlZpZXcuaCIKKyNpbmNsdWRlICJUZXN0
Q29udHJvbGxlci5oIgorCisjaW5jbHVkZSA8RWNvcmUuaD4KKyNpbmNsdWRlIDxFY29yZV9FdmFz
Lmg+CisjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25B
cnJheVB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdUUiB7CisKK2VudW0gV1RSRXZlbnRUeXBl
IHsKKyAgICBXVFJFdmVudFR5cGVOb25lLAorICAgIFdUUkV2ZW50VHlwZU1vdXNlRG93biwKKyAg
ICBXVFJFdmVudFR5cGVNb3VzZVVwLAorICAgIFdUUkV2ZW50VHlwZU1vdXNlTW92ZSwKKyAgICBX
VFJFdmVudFR5cGVNb3VzZVNjcm9sbEJ5LAorICAgIFdUUkV2ZW50VHlwZUxlYXBGb3J3YXJkCit9
OworCitlbnVtIFdUUk1vdXNlQnV0dG9uIHsKKyAgICBXVFJNb3VzZUJ1dHRvbk5vbmUgPSAtMSwK
KyAgICBXVFJNb3VzZUJ1dHRvbkxlZnQsCisgICAgV1RSTW91c2VCdXR0b25NaWRkbGUsCisgICAg
V1RSTW91c2VCdXR0b25SaWdodCwKKyAgICBXVFJNb3VzZUJ1dHRvbk1pZGRsZUR1cGxpY2F0ZWQs
Cit9OworCitlbnVtIEV2YXNNb3VzZUJ1dHRvbiB7CisgICAgRXZhc01vdXNlQnV0dG9uTm9uZSwK
KyAgICBFdmFzTW91c2VCdXR0b25MZWZ0LAorICAgIEV2YXNNb3VzZUJ1dHRvbk1pZGRsZSwKKyAg
ICBFdmFzTW91c2VCdXR0b25SaWdodAorfTsKKworLy8gS2V5IGV2ZW50IGxvY2F0aW9uIGNvZGUg
ZGVmaW5lZCBpbiBET00gTGV2ZWwgMy4KK2VudW0gS2V5TG9jYXRpb25Db2RlIHsKKyAgICBET01L
ZXlMb2NhdGlvblN0YW5kYXJkICAgICAgPSAweDAwLAorICAgIERPTUtleUxvY2F0aW9uTGVmdCAg
ICAgICAgICA9IDB4MDEsCisgICAgRE9NS2V5TG9jYXRpb25SaWdodCAgICAgICAgID0gMHgwMiwK
KyAgICBET01LZXlMb2NhdGlvbk51bXBhZCAgICAgICAgPSAweDAzCit9OworCitzdHJ1Y3QgV1RS
RXZlbnQgeworICAgIFdUUkV2ZW50VHlwZSBldmVudFR5cGU7CisgICAgdW5zaWduZWQgZGVsYXk7
CisgICAgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnM7CisgICAgaW50IGJ1dHRvbjsKKyAgICBp
bnQgaG9yaXpvbnRhbDsKKyAgICBpbnQgdmVydGljYWw7CisKKyAgICBXVFJFdmVudCgpCisgICAg
ICAgIDogZXZlbnRUeXBlKFdUUkV2ZW50VHlwZU5vbmUpCisgICAgICAgICwgZGVsYXkoMCkKKyAg
ICAgICAgLCBtb2RpZmllcnMoMCkKKyAgICAgICAgLCBidXR0b24oLTEpCisgICAgICAgICwgaG9y
aXpvbnRhbCgtMSkKKyAgICAgICAgLCB2ZXJ0aWNhbCgtMSkKKyAgICB7CisgICAgfQorCisgICAg
V1RSRXZlbnQoV1RSRXZlbnRUeXBlIGV2ZW50VHlwZSwgdW5zaWduZWQgZGVsYXksIFdLRXZlbnRN
b2RpZmllcnMgbW9kaWZpZXJzLCBpbnQgYnV0dG9uKQorICAgICAgICA6IGV2ZW50VHlwZShldmVu
dFR5cGUpCisgICAgICAgICwgZGVsYXkoZGVsYXkpCisgICAgICAgICwgbW9kaWZpZXJzKG1vZGlm
aWVycykKKyAgICAgICAgLCBidXR0b24oYnV0dG9uKQorICAgICAgICAsIGhvcml6b250YWwoLTEp
CisgICAgICAgICwgdmVydGljYWwoLTEpCisgICAgeworICAgIH0KK307CisKK3N0cnVjdCBLZXlF
dmVudEluZm8gOiBwdWJsaWMgUmVmQ291bnRlZDxLZXlFdmVudEluZm8+IHsKKyAgICBLZXlFdmVu
dEluZm8oY29uc3QgQ1N0cmluZyYga2V5TmFtZSwgY29uc3QgQ1N0cmluZyYga2V5U3RyaW5nKQor
ICAgICAgICA6IGtleU5hbWUoa2V5TmFtZSkKKyAgICAgICAgLCBrZXlTdHJpbmcoa2V5U3RyaW5n
KQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBDU3RyaW5nIGtleU5hbWU7CisgICAgY29uc3Qg
Q1N0cmluZyBrZXlTdHJpbmc7Cit9OworCitzdGF0aWMgdW5zaWduZWQgZXZhc01vdXNlQnV0dG9u
KHVuc2lnbmVkIGJ1dHRvbikKK3sKKyAgICBpZiAoYnV0dG9uID09IFdUUk1vdXNlQnV0dG9uTGVm
dCkKKyAgICAgICAgcmV0dXJuIEV2YXNNb3VzZUJ1dHRvbkxlZnQ7CisgICAgaWYgKGJ1dHRvbiA9
PSBXVFJNb3VzZUJ1dHRvbk1pZGRsZSkKKyAgICAgICAgcmV0dXJuIEV2YXNNb3VzZUJ1dHRvbk1p
ZGRsZTsKKyAgICBpZiAoYnV0dG9uID09IFdUUk1vdXNlQnV0dG9uUmlnaHQpCisgICAgICAgIHJl
dHVybiBFdmFzTW91c2VCdXR0b25SaWdodDsKKyAgICBpZiAoYnV0dG9uID09IFdUUk1vdXNlQnV0
dG9uTWlkZGxlRHVwbGljYXRlZCkKKyAgICAgICAgcmV0dXJuIEV2YXNNb3VzZUJ1dHRvbk1pZGRs
ZTsKKworICAgIHJldHVybiBFdmFzTW91c2VCdXR0b25Ob25lOworfQorCitzdGF0aWMgdm9pZCBz
ZXRFdmFzTW9kaWZpZXJzKEV2YXMqIGV2YXMsIFdLRXZlbnRNb2RpZmllcnMgd2tNb2RpZmllcnMp
Cit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIG1vZGlmaWVyTmFtZXNbXSA9IHsgIlNoaWZ0Iiwg
IkNvbnRyb2wiLCAiQWx0IiwgIk1ldGEiIH07CisgICAgZm9yICh1bnNpZ25lZCBtb2RpZmllciA9
IDA7IG1vZGlmaWVyIDwgKHNpemVvZihtb2RpZmllck5hbWVzKSAvIHNpemVvZihjaGFyKikpOyAr
K21vZGlmaWVyKSB7CisgICAgICAgIGlmICh3a01vZGlmaWVycyAmICgxIDw8IG1vZGlmaWVyKSkK
KyAgICAgICAgICAgIGV2YXNfa2V5X21vZGlmaWVyX29uKGV2YXMsIG1vZGlmaWVyTmFtZXNbbW9k
aWZpZXJdKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZXZhc19rZXlfbW9kaWZpZXJfb2Zm
KGV2YXMsIG1vZGlmaWVyTmFtZXNbbW9kaWZpZXJdKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk
IGRpc3BhdGNoTW91c2VEb3duRXZlbnQoRXZhcyogZXZhcywgdW5zaWduZWQgYnV0dG9uLCBXS0V2
ZW50TW9kaWZpZXJzIHdrTW9kaWZpZXJzKQoreworICAgIHNldEV2YXNNb2RpZmllcnMoZXZhcywg
d2tNb2RpZmllcnMpOworICAgIGV2YXNfZXZlbnRfZmVlZF9tb3VzZV9kb3duKGV2YXMsIGJ1dHRv
biwgRVZBU19CVVRUT05fTk9ORSwgMCwgMCk7CisgICAgc2V0RXZhc01vZGlmaWVycyhldmFzLCAw
KTsKK30KKworc3RhdGljIHZvaWQgZGlzcGF0Y2hNb3VzZVVwRXZlbnQoRXZhcyogZXZhcywgdW5z
aWduZWQgYnV0dG9uLCBXS0V2ZW50TW9kaWZpZXJzIHdrTW9kaWZpZXJzKQoreworICAgIHNldEV2
YXNNb2RpZmllcnMoZXZhcywgd2tNb2RpZmllcnMpOworICAgIGV2YXNfZXZlbnRfZmVlZF9tb3Vz
ZV91cChldmFzLCBidXR0b24sIEVWQVNfQlVUVE9OX05PTkUsIDAsIDApOworICAgIHNldEV2YXNN
b2RpZmllcnMoZXZhcywgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGRpc3BhdGNoTW91c2VNb3ZlRXZl
bnQoRXZhcyogZXZhcywgaW50IHgsIGludCB5KQoreworICAgIGV2YXNfZXZlbnRfZmVlZF9tb3Vz
ZV9tb3ZlKGV2YXMsIHgsIHksIDAsIDApOworfQorCitzdGF0aWMgdm9pZCBkaXNwYXRjaE1vdXNl
U2Nyb2xsQnlFdmVudChFdmFzKiBldmFzLCBpbnQgaG9yaXpvbnRhbCwgaW50IHZlcnRpY2FsKQor
eworICAgIGlmIChob3Jpem9udGFsID4gMCkKKyAgICAgICAgZXZhc19ldmVudF9mZWVkX21vdXNl
X3doZWVsKGV2YXMsIDEsIC0xMCwgMCwgMCk7CisgICAgZWxzZSBpZiAoaG9yaXpvbnRhbCA8IDAp
CisgICAgICAgIGV2YXNfZXZlbnRfZmVlZF9tb3VzZV93aGVlbChldmFzLCAxLCAxMCwgMCwgMCk7
CisKKyAgICBpZiAodmVydGljYWwgPiAwKQorICAgICAgICBldmFzX2V2ZW50X2ZlZWRfbW91c2Vf
d2hlZWwoZXZhcywgMCwgMTAsIDAsIDApOworICAgIGVsc2UgaWYgKHZlcnRpY2FsIDwgMCkKKyAg
ICAgICAgZXZhc19ldmVudF9mZWVkX21vdXNlX3doZWVsKGV2YXMsIDAsIC0xMCwgMCwgMCk7Cit9
CisKK3N0YXRpYyBjb25zdCBQYXNzUmVmUHRyPEtleUV2ZW50SW5mbz4ga2V5UGFkTmFtZShXS1N0
cmluZ1JlZiBrZXlSZWYpCit7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
a2V5UmVmLCAibGVmdEFycm93IikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZl
bnRJbmZvKCJLUF9MZWZ0IiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhrZXlSZWYsICJyaWdodEFycm93IikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
S2V5RXZlbnRJbmZvKCJLUF9SaWdodCIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcoa2V5UmVmLCAidXBBcnJvdyIpKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEtleUV2ZW50SW5mbygiS1BfVXAiLCAiIikpOworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKGtleVJlZiwgImRvd25BcnJvdyIpKQorICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEtleUV2ZW50SW5mbygiS1BfRG93biIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAicGFnZVVwIikpCisgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgS2V5RXZlbnRJbmZvKCJLUF9QcmlvciIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAicGFnZURvd24iKSkKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIktQX05leHQiLCAiIikpOworICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgImhvbWUiKSkKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIktQX0hvbWUiLCAiIikpOworICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgImVuZCIpKQorICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiS1BfRW5kIiwgIiIpKTsKKyAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJpbnNlcnQiKSkKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIktQX0luc2VydCIsICIiKSk7CisgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAiZGVsZXRlIikpCisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJLUF9EZWxldGUiLCAiIikpOworCisgICAg
c2l6ZV90IGJ1ZmZlclNpemUgPSBXS1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUoa2V5
UmVmKTsKKyAgICBPd25BcnJheVB0cjxjaGFyPiBidWZmZXIgPSBhZG9wdEFycmF5UHRyKG5ldyBj
aGFyW2J1ZmZlclNpemVdKTsKKyAgICBXS1N0cmluZ0dldFVURjhDU3RyaW5nKGtleVJlZiwgYnVm
ZmVyLmdldCgpLCBidWZmZXJTaXplKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50
SW5mbyhidWZmZXIuZ2V0KCksIGJ1ZmZlci5nZXQoKSkpOworfQorCitzdGF0aWMgY29uc3QgUGFz
c1JlZlB0cjxLZXlFdmVudEluZm8+IGtleU5hbWUoV0tTdHJpbmdSZWYga2V5UmVmKQoreworICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgImxlZnRBcnJvdyIpKQor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiTGVmdCIsICIiKSk7Cisg
ICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAicmlnaHRBcnJvdyIp
KQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiUmlnaHQiLCAiIikp
OworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgInVwQXJyb3ci
KSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIlVwIiwgIiIpKTsK
KyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJkb3duQXJyb3ci
KSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIkRvd24iLCAiIikp
OworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgInBhZ2VVcCIp
KQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiUHJpb3IiLCAiIikp
OworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgInBhZ2VEb3du
IikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJOZXh0IiwgIiIp
KTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJob21lIikp
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJIb21lIiwgIiIpKTsK
KyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJlbmQiKSkKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIkVuZCIsICIiKSk7CisgICAg
aWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAiaW5zZXJ0IikpCisgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJJbnNlcnQiLCAiIikpOworICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgImRlbGV0ZSIpKQorICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiRGVsZXRlIiwgIiIpKTsKKyAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJwcmludFNjcmVlbiIp
KQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiUHJpbnQiLCAiIikp
OworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgIm1lbnUiKSkK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIk1lbnUiLCAiIikpOwor
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgIkYxIikpCisgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJGMSIsICIiKSk7CisgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAiRjIiKSkKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIkYyIiwgIiIpKTsKKyAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJGMyIpKQorICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEtleUV2ZW50SW5mbygiRjMiLCAiIikpOworICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgIkY0IikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgS2V5RXZlbnRJbmZvKCJGNCIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcoa2V5UmVmLCAiRjUiKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlF
dmVudEluZm8oIkY1IiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhrZXlSZWYsICJGNiIpKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5m
bygiRjYiLCAiIikpOworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJl
ZiwgIkY3IikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJGNyIs
ICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAiRjgi
KSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIkY4IiwgIiIpKTsK
KyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJGOSIpKQorICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiRjkiLCAiIikpOworICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgIkYxMCIpKQorICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiRjEwIiwgIiIpKTsKKyAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJGMTEiKSkKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIkYxMSIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAiRjEyIikpCisgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgS2V5RXZlbnRJbmZvKCJGMTIiLCAiIikpOworCisgICAgc2l6ZV90IGJ1ZmZlclNp
emUgPSBXS1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUoa2V5UmVmKTsKKyAgICBPd25B
cnJheVB0cjxjaGFyPiBidWZmZXIgPSBhZG9wdEFycmF5UHRyKG5ldyBjaGFyW2J1ZmZlclNpemVd
KTsKKyAgICBXS1N0cmluZ0dldFVURjhDU3RyaW5nKGtleVJlZiwgYnVmZmVyLmdldCgpLCBidWZm
ZXJTaXplKTsKKyAgICBjaGFyIGNoYXJDb2RlID0gYnVmZmVyLmdldCgpWzBdOworCisgICAgaWYg
KGNoYXJDb2RlID09ICdcbicgfHwgY2hhckNvZGUgPT0gJ1xyJykKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIlJldHVybiIsICJcciIpKTsKKyAgICBpZiAoY2hhckNv
ZGUgPT0gJ1x0JykKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIlRh
YiIsICJcdCIpKTsKKyAgICBpZiAoY2hhckNvZGUgPT0gJ1x4OCcpCisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJCYWNrU3BhY2UiLCAiXHg4IikpOworICAgIGlmIChj
aGFyQ29kZSA9PSAnICcpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZv
KCJzcGFjZSIsICIgIikpOworCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8o
YnVmZmVyLmdldCgpLCBidWZmZXIuZ2V0KCkpKTsKK30KKworRXZlbnRTZW5kZXJQcm94eTo6RXZl
bnRTZW5kZXJQcm94eShUZXN0Q29udHJvbGxlciogdGVzdENvbnRyb2xsZXIpCisgICAgOiBtX3Rl
c3RDb250cm9sbGVyKHRlc3RDb250cm9sbGVyKQorICAgICwgbV90aW1lKDApCisgICAgLCBtX2xl
ZnRNb3VzZUJ1dHRvbkRvd24oZmFsc2UpCisgICAgLCBtX2NsaWNrQ291bnQoMCkKKyAgICAsIG1f
Y2xpY2tUaW1lKDApCisgICAgLCBtX2NsaWNrQnV0dG9uKFdUUk1vdXNlQnV0dG9uTm9uZSkKKyAg
ICAsIG1fbW91c2VCdXR0b24oV1RSTW91c2VCdXR0b25Ob25lKQoreworfQorCit2b2lkIEV2ZW50
U2VuZGVyUHJveHk6OnVwZGF0ZUNsaWNrQ291bnRGb3JCdXR0b24oaW50IGJ1dHRvbikKK3sKKyAg
ICBpZiAobV90aW1lIC0gbV9jbGlja1RpbWUgPCAxICYmIG1fcG9zaXRpb24gPT0gbV9jbGlja1Bv
c2l0aW9uICYmIGJ1dHRvbiA9PSBtX2NsaWNrQnV0dG9uKSB7CisgICAgICAgICsrbV9jbGlja0Nv
dW50OworICAgICAgICBtX2NsaWNrVGltZSA9IG1fdGltZTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIG1fY2xpY2tDb3VudCA9IDE7CisgICAgbV9jbGlja1RpbWUgPSBtX3RpbWU7Cisg
ICAgbV9jbGlja1Bvc2l0aW9uID0gbV9wb3NpdGlvbjsKKyAgICBtX2NsaWNrQnV0dG9uID0gYnV0
dG9uOworfQorCit2b2lkIEV2ZW50U2VuZGVyUHJveHk6OmRpc3BhdGNoRXZlbnQoY29uc3QgV1RS
RXZlbnQmIHd0ckV2ZW50KQoreworICAgIGlmICh3dHJFdmVudC5ldmVudFR5cGUgPT0gV1RSRXZl
bnRUeXBlTW91c2VEb3duKQorICAgICAgICBkaXNwYXRjaE1vdXNlRG93bkV2ZW50KGVjb3JlX2V2
YXNfZ2V0KG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtV2luZG93KCkp
LCB3dHJFdmVudC5idXR0b24sIHd0ckV2ZW50Lm1vZGlmaWVycyk7CisgICAgZWxzZSBpZiAod3Ry
RXZlbnQuZXZlbnRUeXBlID09IFdUUkV2ZW50VHlwZU1vdXNlVXApCisgICAgICAgIGRpc3BhdGNo
TW91c2VVcEV2ZW50KGVjb3JlX2V2YXNfZ2V0KG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3
KCktPnBsYXRmb3JtV2luZG93KCkpLCB3dHJFdmVudC5idXR0b24sIHd0ckV2ZW50Lm1vZGlmaWVy
cyk7CisgICAgZWxzZSBpZiAod3RyRXZlbnQuZXZlbnRUeXBlID09IFdUUkV2ZW50VHlwZU1vdXNl
TW92ZSkKKyAgICAgICAgZGlzcGF0Y2hNb3VzZU1vdmVFdmVudChlY29yZV9ldmFzX2dldChtX3Rl
c3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVdpbmRvdygpKSwgc3RhdGljX2Nh
c3Q8aW50PihtX3Bvc2l0aW9uLngpLCBzdGF0aWNfY2FzdDxpbnQ+KG1fcG9zaXRpb24ueSkpOwor
ICAgIGVsc2UgaWYgKHd0ckV2ZW50LmV2ZW50VHlwZSA9PSBXVFJFdmVudFR5cGVNb3VzZVNjcm9s
bEJ5KQorICAgICAgICBkaXNwYXRjaE1vdXNlU2Nyb2xsQnlFdmVudChlY29yZV9ldmFzX2dldCht
X3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVdpbmRvdygpKSwgd3RyRXZl
bnQuaG9yaXpvbnRhbCwgd3RyRXZlbnQudmVydGljYWwpOworfQorCit2b2lkIEV2ZW50U2VuZGVy
UHJveHk6OnJlcGxheVNhdmVkRXZlbnRzKCkKK3sKKyAgICB3aGlsZSAoIW1fZXZlbnRRdWV1ZS5p
c0VtcHR5KCkpIHsKKyAgICAgICAgV1RSRXZlbnQgd3RyRXZlbnQgPSBtX2V2ZW50UXVldWUuZmly
c3QoKTsKKyAgICAgICAgaWYgKHd0ckV2ZW50LmRlbGF5KQorICAgICAgICAgICAgdXNsZWVwKHd0
ckV2ZW50LmRlbGF5ICogMTAwMCk7CisKKyAgICAgICAgZGlzcGF0Y2hFdmVudCh3dHJFdmVudCk7
CisgICAgICAgIG1fZXZlbnRRdWV1ZS5yZW1vdmVGaXJzdCgpOworICAgIH0KK30KKwordm9pZCBF
dmVudFNlbmRlclByb3h5OjpzZW5kT3JRdWV1ZUV2ZW50KGNvbnN0IFdUUkV2ZW50JiB3dHJFdmVu
dCkKK3sKKyAgICBpZiAobV9ldmVudFF1ZXVlLmlzRW1wdHkoKSB8fCAhbV9ldmVudFF1ZXVlLmxh
c3QoKS5kZWxheSkgeworICAgICAgICBkaXNwYXRjaEV2ZW50KHd0ckV2ZW50KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIG1fZXZlbnRRdWV1ZS5hcHBlbmQod3RyRXZlbnQpOworICAg
IHJlcGxheVNhdmVkRXZlbnRzKCk7Cit9CisKK3ZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VE
b3duKHVuc2lnbmVkIGJ1dHRvbiwgV0tFdmVudE1vZGlmaWVycyB3a01vZGlmaWVycykKK3sKKyAg
ICBpZiAobV9tb3VzZUJ1dHRvbiA9PSBidXR0b24pCisgICAgICAgIHJldHVybjsKKworICAgIG1f
bW91c2VCdXR0b24gPSBidXR0b247CisgICAgdXBkYXRlQ2xpY2tDb3VudEZvckJ1dHRvbihidXR0
b24pOworCisgICAgc2VuZE9yUXVldWVFdmVudChXVFJFdmVudChXVFJFdmVudFR5cGVNb3VzZURv
d24sIDAsIHdrTW9kaWZpZXJzLCBldmFzTW91c2VCdXR0b24oYnV0dG9uKSkpOworfQorCit2b2lk
IEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlVXAodW5zaWduZWQgYnV0dG9uLCBXS0V2ZW50TW9kaWZp
ZXJzIHdrTW9kaWZpZXJzKQoreworICAgIHNlbmRPclF1ZXVlRXZlbnQoV1RSRXZlbnQoV1RSRXZl
bnRUeXBlTW91c2VVcCwgMCwgd2tNb2RpZmllcnMsIGV2YXNNb3VzZUJ1dHRvbihidXR0b24pKSk7
CisKKyAgICBpZiAobV9tb3VzZUJ1dHRvbiA9PSBidXR0b24pCisgICAgICAgIG1fbW91c2VCdXR0
b24gPSBXVFJNb3VzZUJ1dHRvbk5vbmU7CisKKyAgICBtX2NsaWNrUG9zaXRpb24gPSBtX3Bvc2l0
aW9uOworICAgIG1fY2xpY2tUaW1lID0gZWNvcmVfdGltZV9nZXQoKTsKK30KKwordm9pZCBFdmVu
dFNlbmRlclByb3h5Ojptb3VzZU1vdmVUbyhkb3VibGUgeCwgZG91YmxlIHkpCit7CisgICAgbV9w
b3NpdGlvbi54ID0geDsKKyAgICBtX3Bvc2l0aW9uLnkgPSB5OworCisgICAgc2VuZE9yUXVldWVF
dmVudChXVFJFdmVudChXVFJFdmVudFR5cGVNb3VzZU1vdmUsIDAsIDAsIFdUUk1vdXNlQnV0dG9u
Tm9uZSkpOworfQorCit2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlU2Nyb2xsQnkoaW50IGhv
cml6b250YWwsIGludCB2ZXJ0aWNhbCkKK3sKKyAgICBXVFJFdmVudCB3dHJFdmVudChXVFJFdmVu
dFR5cGVNb3VzZVNjcm9sbEJ5LCAwLCAwLCBXVFJNb3VzZUJ1dHRvbk5vbmUpOworICAgIHd0ckV2
ZW50Lmhvcml6b250YWwgPSBob3Jpem9udGFsOworICAgIHd0ckV2ZW50LnZlcnRpY2FsID0gdmVy
dGljYWw7CisgICAgc2VuZE9yUXVldWVFdmVudCh3dHJFdmVudCk7Cit9CisKK3ZvaWQgRXZlbnRT
ZW5kZXJQcm94eTo6bGVhcEZvcndhcmQoaW50IG1pbGxpc2Vjb25kcykKK3sKKyAgICBpZiAobV9l
dmVudFF1ZXVlLmlzRW1wdHkoKSkKKyAgICAgICAgbV9ldmVudFF1ZXVlLmFwcGVuZChXVFJFdmVu
dChXVFJFdmVudFR5cGVMZWFwRm9yd2FyZCwgbWlsbGlzZWNvbmRzLCAwLCBXVFJNb3VzZUJ1dHRv
bk5vbmUpKTsKKworICAgIG1fdGltZSArPSBtaWxsaXNlY29uZHMgLyAxMDAwLjA7Cit9CisKK3Zv
aWQgRXZlbnRTZW5kZXJQcm94eTo6a2V5RG93bihXS1N0cmluZ1JlZiBrZXlSZWYsIFdLRXZlbnRN
b2RpZmllcnMgd2tNb2RpZmllcnMsIHVuc2lnbmVkIGxvY2F0aW9uKQoreworICAgIGNvbnN0IFJl
ZlB0cjxLZXlFdmVudEluZm8+IGtleUV2ZW50SW5mbyA9IChsb2NhdGlvbiA9PSBET01LZXlMb2Nh
dGlvbk51bXBhZCkgPyBrZXlQYWROYW1lKGtleVJlZikgOiBrZXlOYW1lKGtleVJlZik7CisgICAg
aWYgKCFrZXlFdmVudEluZm8pCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IGNoYXIqIGtl
eU5hbWUgPSBrZXlFdmVudEluZm8tPmtleU5hbWUuZGF0YSgpOworICAgIGNvbnN0IGNoYXIqIGtl
eVN0cmluZyA9IGtleUV2ZW50SW5mby0+a2V5U3RyaW5nLmRhdGEoKTsKKworICAgIEV2YXMqIGV2
YXMgPSBlY29yZV9ldmFzX2dldChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0
Zm9ybVdpbmRvdygpKTsKKyAgICBzZXRFdmFzTW9kaWZpZXJzKGV2YXMsIHdrTW9kaWZpZXJzKTsK
KyAgICBldmFzX2V2ZW50X2ZlZWRfa2V5X2Rvd24oZXZhcywga2V5TmFtZSwga2V5TmFtZSwga2V5
U3RyaW5nLCAwLCAwLCAwKTsKKyAgICBldmFzX2V2ZW50X2ZlZWRfa2V5X3VwKGV2YXMsIGtleU5h
bWUsIGtleU5hbWUsIGtleVN0cmluZywgMCwgMSwgMCk7CisgICAgc2V0RXZhc01vZGlmaWVycyhl
dmFzLCAwKTsKK30KKworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCit2b2lkIEV2ZW50U2VuZGVy
UHJveHk6OmFkZFRvdWNoUG9pbnQoaW50IHgsIGludCB5KQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgRXZlbnRTZW5kZXJQcm94eTo6dXBkYXRlVG91Y2hQb2ludChpbnQgaW5k
ZXgsIGludCB4LCBpbnQgeSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEV2
ZW50U2VuZGVyUHJveHk6OnNldFRvdWNoTW9kaWZpZXIoV0tFdmVudE1vZGlmaWVycyBtb2RpZmll
ciwgYm9vbCBlbmFibGUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBFdmVu
dFNlbmRlclByb3h5Ojp0b3VjaFN0YXJ0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnRvdWNoTW92ZSgpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBFdmVudFNlbmRlclByb3h5Ojp0b3VjaEVuZCgpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBFdmVudFNlbmRlclByb3h5Ojp0b3VjaENhbmNlbCgp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBFdmVudFNlbmRlclByb3h5Ojpj
bGVhclRvdWNoUG9pbnRzKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEV2
ZW50U2VuZGVyUHJveHk6OnJlbGVhc2VUb3VjaFBvaW50KGludCBpbmRleCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIEV2ZW50U2VuZGVyUHJveHk6OmNhbmNlbFRvdWNoUG9p
bnQoaW50IGluZGV4KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRXZlbnRT
ZW5kZXJQcm94eTo6c2V0VG91Y2hQb2ludFJhZGl1cyhpbnQgcmFkaXVzWCwgaW50IHJhZGl1c1kp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworI2VuZGlmCisKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153424</attachid>
            <date>2012-07-19 23:20:09 -0700</date>
            <delta_ts>2012-07-20 00:59:36 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>22014</size>
            <attacher name="Kangil Han">kangil.han</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBhYmMy
MzVlLi5iOTVlNjQzIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNTcgQEAKKzIwMTItMDctMTkgIEthbmdpbCBIYW4gIDxrYW5naWwu
aGFuQHNhbXN1bmcuY29tPgorCisgICAgICAgIFtFRkxdW1dLMl1bV1RSXSBJbXBsZW1lbnQgRXZl
bnRTZW5kZXJQcm94eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9OTE3MzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGlzIGlzIGFuIGluaXRpYWwgRUZMIHBvcnQgaW1wbGVtZW50YXRpb24gb2YgRXZlbnRT
ZW5kZXJQcm94eS4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvRXZlbnRTZW5kZXJQcm94
eS5oOgorICAgICAgICAoV1RSKToKKyAgICAgICAgKEV2ZW50U2VuZGVyUHJveHkpOgorICAgICAg
ICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvRXZlbnRTZW5kaW5nQ29udHJvbGxl
ci5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1FZmwuY21ha2U6CisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6
OlRlc3RDb250cm9sbGVyOjpUZXN0Q29udHJvbGxlcik6CisgICAgICAgIChXVFI6OlRlc3RDb250
cm9sbGVyOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKToK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2VmbC9FdmVudFNlbmRlclByb3h5RWZsLmNwcDog
QWRkZWQuCisgICAgICAgIChXVFIpOgorICAgICAgICAoV1RSRXZlbnQpOgorICAgICAgICAoV1RS
OjpXVFJFdmVudDo6V1RSRXZlbnQpOgorICAgICAgICAoV1RSOjpLZXlFdmVudEluZm86OktleUV2
ZW50SW5mbyk6CisgICAgICAgIChLZXlFdmVudEluZm8pOgorICAgICAgICAoV1RSOjpldmFzTW91
c2VCdXR0b24pOgorICAgICAgICAoV1RSOjpzZXRFdmFzTW9kaWZpZXJzKToKKyAgICAgICAgKFdU
Ujo6ZGlzcGF0Y2hNb3VzZURvd25FdmVudCk6CisgICAgICAgIChXVFI6OmRpc3BhdGNoTW91c2VV
cEV2ZW50KToKKyAgICAgICAgKFdUUjo6ZGlzcGF0Y2hNb3VzZU1vdmVFdmVudCk6CisgICAgICAg
IChXVFI6OmRpc3BhdGNoTW91c2VTY3JvbGxCeUV2ZW50KToKKyAgICAgICAgKFdUUjo6a2V5UGFk
TmFtZSk6CisgICAgICAgIChXVFI6OmtleU5hbWUpOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRl
clByb3h5OjpFdmVudFNlbmRlclByb3h5KToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94
eTo6dXBkYXRlQ2xpY2tDb3VudEZvckJ1dHRvbik6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVy
UHJveHk6OmRpc3BhdGNoRXZlbnQpOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5Ojpy
ZXBsYXlTYXZlZEV2ZW50cyk6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6OnNlbmRP
clF1ZXVlRXZlbnQpOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5Ojptb3VzZURvd24p
OgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5Ojptb3VzZVVwKToKKyAgICAgICAgKFdU
Ujo6RXZlbnRTZW5kZXJQcm94eTo6bW91c2VNb3ZlVG8pOgorICAgICAgICAoV1RSOjpFdmVudFNl
bmRlclByb3h5Ojptb3VzZVNjcm9sbEJ5KToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94
eTo6bGVhcEZvcndhcmQpOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5OjprZXlEb3du
KToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6YWRkVG91Y2hQb2ludCk6CisgICAg
ICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6OnVwZGF0ZVRvdWNoUG9pbnQpOgorICAgICAgICAo
V1RSOjpFdmVudFNlbmRlclByb3h5OjpzZXRUb3VjaE1vZGlmaWVyKToKKyAgICAgICAgKFdUUjo6
RXZlbnRTZW5kZXJQcm94eTo6dG91Y2hTdGFydCk6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVy
UHJveHk6OnRvdWNoTW92ZSk6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6OnRvdWNo
RW5kKToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6dG91Y2hDYW5jZWwpOgorICAg
ICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5OjpjbGVhclRvdWNoUG9pbnRzKToKKyAgICAgICAg
KFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6cmVsZWFzZVRvdWNoUG9pbnQpOgorICAgICAgICAoV1RS
OjpFdmVudFNlbmRlclByb3h5OjpjYW5jZWxUb3VjaFBvaW50KToKKyAgICAgICAgKFdUUjo6RXZl
bnRTZW5kZXJQcm94eTo6c2V0VG91Y2hQb2ludFJhZGl1cyk6CisKIDIwMTItMDctMTggIENocmlz
dG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVsLmNvbT4KIAogICAgICAgICBbQ01h
a2VdW0VGTF0gU2hvdWxkIHRyeSB0byBmaW5kIHRoZSBzYW1lIGxpYnNvdXAgdmVyc2lvbiBwdWxs
ZWQgYnkgamhidWlsZApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9FdmVudFNl
bmRlclByb3h5LmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0V2ZW50U2VuZGVyUHJveHkuaApp
bmRleCA4MTY4NTEzLi43NmIyMmU4IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0V2ZW50U2VuZGVyUHJveHkuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0V2ZW50U2Vu
ZGVyUHJveHkuaApAQCAtMzMsNiArMzMsOCBAQAogI2VsaWYgUExBVEZPUk0oR1RLKQogI2luY2x1
ZGUgPGdkay9nZGsuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjZWxpZiBQTEFURk9STShF
RkwpCisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdUUiB7CkBA
IC00MSw2ICs0Myw4IEBAIGNsYXNzIFRlc3RDb250cm9sbGVyOwogCiAjaWYgUExBVEZPUk0oR1RL
KQogc3RydWN0IFdUUkV2ZW50UXVldWVJdGVtOworI2VsaWYgUExBVEZPUk0oRUZMKQorc3RydWN0
IFdUUkV2ZW50OwogI2VuZGlmCiAKIGNsYXNzIEV2ZW50U2VuZGVyUHJveHkgewpAQCAtNzcsNyAr
ODEsNyBAQCBwcml2YXRlOgogICAgIGRvdWJsZSBjdXJyZW50RXZlbnRUaW1lKCkgeyByZXR1cm4g
bV90aW1lOyB9CiAgICAgdm9pZCB1cGRhdGVDbGlja0NvdW50Rm9yQnV0dG9uKGludCBidXR0b24p
OwogCi0jaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykKKyNpZiBQTEFURk9STShRVCkg
fHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpCiAgICAgdm9pZCByZXBsYXlTYXZlZEV2
ZW50cygpOwogI2VuZGlmCiAKQEAgLTg5LDYgKzkzLDkgQEAgcHJpdmF0ZToKICNlbGlmIFBMQVRG
T1JNKEdUSykKICAgICB2b2lkIHNlbmRPclF1ZXVlRXZlbnQoR2RrRXZlbnQqKTsKICAgICBHZGtF
dmVudCogY3JlYXRlTW91c2VCdXR0b25FdmVudChHZGtFdmVudFR5cGUsIHVuc2lnbmVkIGJ1dHRv
biwgV0tFdmVudE1vZGlmaWVycyk7CisjZWxpZiBQTEFURk9STShFRkwpCisgICAgdm9pZCBzZW5k
T3JRdWV1ZUV2ZW50KGNvbnN0IFdUUkV2ZW50Jik7CisgICAgdm9pZCBkaXNwYXRjaEV2ZW50KGNv
bnN0IFdUUkV2ZW50Jik7CiAjZW5kaWYKIAogICAgIGRvdWJsZSBtX3RpbWU7CkBAIC0xMTIsNiAr
MTE5LDkgQEAgcHJpdmF0ZToKICAgICBRUG9pbnQgbV90b3VjaFBvaW50UmFkaXVzOwogICAgIGJv
b2wgbV90b3VjaEFjdGl2ZTsKICNlbmRpZgorI2VsaWYgUExBVEZPUk0oRUZMKQorICAgIERlcXVl
PFdUUkV2ZW50PiBtX2V2ZW50UXVldWU7CisgICAgdW5zaWduZWQgbV9tb3VzZUJ1dHRvbjsKICNl
bmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9FdmVudFNlbmRpbmdDb250cm9sbGVyLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuaAppbmRleCA4ZWEyZGIwLi5iMDQw
YTQ5IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0V2
ZW50U2VuZGluZ0NvbnRyb2xsZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuaApAQCAtMzEsNyArMzEsNyBAQAogI2lu
Y2x1ZGUgPFdlYktpdDIvV0tHZW9tZXRyeS5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CiAKLSNpZiAhUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oUVQpICYmICFQTEFURk9STShHVEsp
CisjaWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKFFUKSAmJiAhUExBVEZPUk0oR1RLKSAm
JiAhUExBVEZPUk0oRUZMKQogI2RlZmluZSBVU0VfV0VCUFJPQ0VTU19FVkVOVF9TSU1VTEFUSU9O
CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybUVm
bC5jbWFrZSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXgg
OTQyYzAwMy4uNmM5MzA5MSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0
Zm9ybUVmbC5jbWFrZQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtRWZsLmNt
YWtlCkBAIC0xOSw2ICsxOSw3IEBAIFNFVChGb3J3YXJkaW5nTmV0d29ya0hlYWRlcnNGb3JXZWJL
aXRUZXN0UnVubmVyX05BTUUgZm9yd2FyZGluZy1oZWFkZXJzU291cEZvcldlCiBMSVNUKEFQUEVO
RCBXZWJLaXRUZXN0UnVubmVyX1NPVVJDRVMKICAgICAke1dFQktJVF9URVNUUlVOTkVSX0RJUn0v
Y2Fpcm8vVGVzdEludm9jYXRpb25DYWlyby5jcHAKIAorICAgICR7V0VCS0lUX1RFU1RSVU5ORVJf
RElSfS9lZmwvRXZlbnRTZW5kZXJQcm94eUVmbC5jcHAKICAgICAke1dFQktJVF9URVNUUlVOTkVS
X0RJUn0vZWZsL1BsYXRmb3JtV2ViVmlld0VmbC5jcHAKICAgICAke1dFQktJVF9URVNUUlVOTkVS
X0RJUn0vZWZsL1Rlc3RDb250cm9sbGVyRWZsLmNwcAogICAgICR7V0VCS0lUX1RFU1RSVU5ORVJf
RElSfS9lZmwvbWFpbi5jcHAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVz
dENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5j
cHAKaW5kZXggYzQ3YzQ3NS4uMGEyY2IyYiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9UZXN0Q29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0
Q29udHJvbGxlci5jcHAKQEAgLTgxLDcgKzgxLDcgQEAgVGVzdENvbnRyb2xsZXI6OlRlc3RDb250
cm9sbGVyKGludCBhcmdjLCBjb25zdCBjaGFyKiBhcmd2W10pCiAgICAgLCBtX2RpZFByaW50V2Vi
UHJvY2Vzc0NyYXNoZWRNZXNzYWdlKGZhbHNlKQogICAgICwgbV9zaG91bGRFeGl0V2hlbldlYlBy
b2Nlc3NDcmFzaGVzKHRydWUpCiAgICAgLCBtX2JlZm9yZVVubG9hZFJldHVyblZhbHVlKHRydWUp
Ci0jaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oR1RLKQorI2lm
IFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZP
Uk0oRUZMKQogICAgICwgbV9ldmVudFNlbmRlclByb3h5KG5ldyBFdmVudFNlbmRlclByb3h5KHRo
aXMpKQogI2VuZGlmCiB7CkBAIC01OTgsNyArNTk4LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6
ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5h
bWUKIAogV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZVN5
bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFt
ZSwgV0tUeXBlUmVmIG1lc3NhZ2VCb2R5KQogewotI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZP
Uk0oUVQpIHx8IFBMQVRGT1JNKEdUSykKKyNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKFFU
KSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkKICAgICBpZiAoV0tTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkV2ZW50U2VuZGVyIikpIHsKICAgICAgICAg
QVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQo
KSk7CiAgICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0
aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKZGlmZiAtLWdpdCBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwuY3BwIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9lZmwvRXZlbnRTZW5kZXJQcm94eUVmbC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMDMwODUwMwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwuY3BwCkBAIC0wLDAgKzEsNDUy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBaYW4gRG9iZXJzZWsgPHphbmRvYmVy
c2VrQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBIb2xnZXIgSGFucyBQZXRlciBG
cmV5dGhlcgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgUHJvRlVTSU9OIEVtYmVkZGVkIFN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRXZlbnRTZW5kZXJQcm94eS5oIgorCisjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVdlYlZpZXcuaCIKKyNpbmNsdWRlICJUZXN0
Q29udHJvbGxlci5oIgorCisjaW5jbHVkZSA8RWNvcmUuaD4KKyNpbmNsdWRlIDxFY29yZV9FdmFz
Lmg+CisjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25B
cnJheVB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdUUiB7CisKK2VudW0gV1RSRXZlbnRUeXBl
IHsKKyAgICBXVFJFdmVudFR5cGVOb25lLAorICAgIFdUUkV2ZW50VHlwZU1vdXNlRG93biwKKyAg
ICBXVFJFdmVudFR5cGVNb3VzZVVwLAorICAgIFdUUkV2ZW50VHlwZU1vdXNlTW92ZSwKKyAgICBX
VFJFdmVudFR5cGVNb3VzZVNjcm9sbEJ5LAorICAgIFdUUkV2ZW50VHlwZUxlYXBGb3J3YXJkCit9
OworCitlbnVtIFdUUk1vdXNlQnV0dG9uIHsKKyAgICBXVFJNb3VzZUJ1dHRvbk5vbmUgPSAtMSwK
KyAgICBXVFJNb3VzZUJ1dHRvbkxlZnQsCisgICAgV1RSTW91c2VCdXR0b25NaWRkbGUsCisgICAg
V1RSTW91c2VCdXR0b25SaWdodCwKKyAgICBXVFJNb3VzZUJ1dHRvbk1pZGRsZUR1cGxpY2F0ZWQs
Cit9OworCitlbnVtIEV2YXNNb3VzZUJ1dHRvbiB7CisgICAgRXZhc01vdXNlQnV0dG9uTm9uZSwK
KyAgICBFdmFzTW91c2VCdXR0b25MZWZ0LAorICAgIEV2YXNNb3VzZUJ1dHRvbk1pZGRsZSwKKyAg
ICBFdmFzTW91c2VCdXR0b25SaWdodAorfTsKKworLy8gS2V5IGV2ZW50IGxvY2F0aW9uIGNvZGUg
ZGVmaW5lZCBpbiBET00gTGV2ZWwgMy4KK2VudW0gS2V5TG9jYXRpb25Db2RlIHsKKyAgICBET01L
ZXlMb2NhdGlvblN0YW5kYXJkICAgICAgPSAweDAwLAorICAgIERPTUtleUxvY2F0aW9uTGVmdCAg
ICAgICAgICA9IDB4MDEsCisgICAgRE9NS2V5TG9jYXRpb25SaWdodCAgICAgICAgID0gMHgwMiwK
KyAgICBET01LZXlMb2NhdGlvbk51bXBhZCAgICAgICAgPSAweDAzCit9OworCitzdHJ1Y3QgV1RS
RXZlbnQgeworICAgIFdUUkV2ZW50VHlwZSBldmVudFR5cGU7CisgICAgdW5zaWduZWQgZGVsYXk7
CisgICAgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnM7CisgICAgaW50IGJ1dHRvbjsKKyAgICBp
bnQgaG9yaXpvbnRhbDsKKyAgICBpbnQgdmVydGljYWw7CisKKyAgICBXVFJFdmVudCgpCisgICAg
ICAgIDogZXZlbnRUeXBlKFdUUkV2ZW50VHlwZU5vbmUpCisgICAgICAgICwgZGVsYXkoMCkKKyAg
ICAgICAgLCBtb2RpZmllcnMoMCkKKyAgICAgICAgLCBidXR0b24oLTEpCisgICAgICAgICwgaG9y
aXpvbnRhbCgtMSkKKyAgICAgICAgLCB2ZXJ0aWNhbCgtMSkKKyAgICB7CisgICAgfQorCisgICAg
V1RSRXZlbnQoV1RSRXZlbnRUeXBlIGV2ZW50VHlwZSwgdW5zaWduZWQgZGVsYXksIFdLRXZlbnRN
b2RpZmllcnMgbW9kaWZpZXJzLCBpbnQgYnV0dG9uKQorICAgICAgICA6IGV2ZW50VHlwZShldmVu
dFR5cGUpCisgICAgICAgICwgZGVsYXkoZGVsYXkpCisgICAgICAgICwgbW9kaWZpZXJzKG1vZGlm
aWVycykKKyAgICAgICAgLCBidXR0b24oYnV0dG9uKQorICAgICAgICAsIGhvcml6b250YWwoLTEp
CisgICAgICAgICwgdmVydGljYWwoLTEpCisgICAgeworICAgIH0KK307CisKK3N0cnVjdCBLZXlF
dmVudEluZm8gOiBwdWJsaWMgUmVmQ291bnRlZDxLZXlFdmVudEluZm8+IHsKKyAgICBLZXlFdmVu
dEluZm8oY29uc3QgQ1N0cmluZyYga2V5TmFtZSwgY29uc3QgQ1N0cmluZyYga2V5U3RyaW5nKQor
ICAgICAgICA6IGtleU5hbWUoa2V5TmFtZSkKKyAgICAgICAgLCBrZXlTdHJpbmcoa2V5U3RyaW5n
KQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBDU3RyaW5nIGtleU5hbWU7CisgICAgY29uc3Qg
Q1N0cmluZyBrZXlTdHJpbmc7Cit9OworCitzdGF0aWMgdW5zaWduZWQgZXZhc01vdXNlQnV0dG9u
KHVuc2lnbmVkIGJ1dHRvbikKK3sKKyAgICBpZiAoYnV0dG9uID09IFdUUk1vdXNlQnV0dG9uTGVm
dCkKKyAgICAgICAgcmV0dXJuIEV2YXNNb3VzZUJ1dHRvbkxlZnQ7CisgICAgaWYgKGJ1dHRvbiA9
PSBXVFJNb3VzZUJ1dHRvbk1pZGRsZSkKKyAgICAgICAgcmV0dXJuIEV2YXNNb3VzZUJ1dHRvbk1p
ZGRsZTsKKyAgICBpZiAoYnV0dG9uID09IFdUUk1vdXNlQnV0dG9uUmlnaHQpCisgICAgICAgIHJl
dHVybiBFdmFzTW91c2VCdXR0b25SaWdodDsKKyAgICBpZiAoYnV0dG9uID09IFdUUk1vdXNlQnV0
dG9uTWlkZGxlRHVwbGljYXRlZCkKKyAgICAgICAgcmV0dXJuIEV2YXNNb3VzZUJ1dHRvbk1pZGRs
ZTsKKworICAgIHJldHVybiBFdmFzTW91c2VCdXR0b25Ob25lOworfQorCitzdGF0aWMgdm9pZCBz
ZXRFdmFzTW9kaWZpZXJzKEV2YXMqIGV2YXMsIFdLRXZlbnRNb2RpZmllcnMgd2tNb2RpZmllcnMp
Cit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIG1vZGlmaWVyTmFtZXNbXSA9IHsgIlNoaWZ0Iiwg
IkNvbnRyb2wiLCAiQWx0IiwgIk1ldGEiIH07CisgICAgZm9yICh1bnNpZ25lZCBtb2RpZmllciA9
IDA7IG1vZGlmaWVyIDwgKHNpemVvZihtb2RpZmllck5hbWVzKSAvIHNpemVvZihjaGFyKikpOyAr
K21vZGlmaWVyKSB7CisgICAgICAgIGlmICh3a01vZGlmaWVycyAmICgxIDw8IG1vZGlmaWVyKSkK
KyAgICAgICAgICAgIGV2YXNfa2V5X21vZGlmaWVyX29uKGV2YXMsIG1vZGlmaWVyTmFtZXNbbW9k
aWZpZXJdKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZXZhc19rZXlfbW9kaWZpZXJfb2Zm
KGV2YXMsIG1vZGlmaWVyTmFtZXNbbW9kaWZpZXJdKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk
IGRpc3BhdGNoTW91c2VEb3duRXZlbnQoRXZhcyogZXZhcywgdW5zaWduZWQgYnV0dG9uLCBXS0V2
ZW50TW9kaWZpZXJzIHdrTW9kaWZpZXJzKQoreworICAgIHNldEV2YXNNb2RpZmllcnMoZXZhcywg
d2tNb2RpZmllcnMpOworICAgIGV2YXNfZXZlbnRfZmVlZF9tb3VzZV9kb3duKGV2YXMsIGJ1dHRv
biwgRVZBU19CVVRUT05fTk9ORSwgMCwgMCk7CisgICAgc2V0RXZhc01vZGlmaWVycyhldmFzLCAw
KTsKK30KKworc3RhdGljIHZvaWQgZGlzcGF0Y2hNb3VzZVVwRXZlbnQoRXZhcyogZXZhcywgdW5z
aWduZWQgYnV0dG9uLCBXS0V2ZW50TW9kaWZpZXJzIHdrTW9kaWZpZXJzKQoreworICAgIHNldEV2
YXNNb2RpZmllcnMoZXZhcywgd2tNb2RpZmllcnMpOworICAgIGV2YXNfZXZlbnRfZmVlZF9tb3Vz
ZV91cChldmFzLCBidXR0b24sIEVWQVNfQlVUVE9OX05PTkUsIDAsIDApOworICAgIHNldEV2YXNN
b2RpZmllcnMoZXZhcywgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGRpc3BhdGNoTW91c2VNb3ZlRXZl
bnQoRXZhcyogZXZhcywgaW50IHgsIGludCB5KQoreworICAgIGV2YXNfZXZlbnRfZmVlZF9tb3Vz
ZV9tb3ZlKGV2YXMsIHgsIHksIDAsIDApOworfQorCitzdGF0aWMgdm9pZCBkaXNwYXRjaE1vdXNl
U2Nyb2xsQnlFdmVudChFdmFzKiBldmFzLCBpbnQgaG9yaXpvbnRhbCwgaW50IHZlcnRpY2FsKQor
eworICAgIGlmIChob3Jpem9udGFsID4gMCkKKyAgICAgICAgZXZhc19ldmVudF9mZWVkX21vdXNl
X3doZWVsKGV2YXMsIDEsIC0xMCwgMCwgMCk7CisgICAgZWxzZSBpZiAoaG9yaXpvbnRhbCA8IDAp
CisgICAgICAgIGV2YXNfZXZlbnRfZmVlZF9tb3VzZV93aGVlbChldmFzLCAxLCAxMCwgMCwgMCk7
CisKKyAgICBpZiAodmVydGljYWwgPiAwKQorICAgICAgICBldmFzX2V2ZW50X2ZlZWRfbW91c2Vf
d2hlZWwoZXZhcywgMCwgMTAsIDAsIDApOworICAgIGVsc2UgaWYgKHZlcnRpY2FsIDwgMCkKKyAg
ICAgICAgZXZhc19ldmVudF9mZWVkX21vdXNlX3doZWVsKGV2YXMsIDAsIC0xMCwgMCwgMCk7Cit9
CisKK3N0YXRpYyBjb25zdCBQYXNzUmVmUHRyPEtleUV2ZW50SW5mbz4ga2V5UGFkTmFtZShXS1N0
cmluZ1JlZiBrZXlSZWYpCit7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
a2V5UmVmLCAibGVmdEFycm93IikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZl
bnRJbmZvKCJLUF9MZWZ0IiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhrZXlSZWYsICJyaWdodEFycm93IikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
S2V5RXZlbnRJbmZvKCJLUF9SaWdodCIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcoa2V5UmVmLCAidXBBcnJvdyIpKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEtleUV2ZW50SW5mbygiS1BfVXAiLCAiIikpOworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKGtleVJlZiwgImRvd25BcnJvdyIpKQorICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEtleUV2ZW50SW5mbygiS1BfRG93biIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAicGFnZVVwIikpCisgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgS2V5RXZlbnRJbmZvKCJLUF9QcmlvciIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAicGFnZURvd24iKSkKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIktQX05leHQiLCAiIikpOworICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgImhvbWUiKSkKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIktQX0hvbWUiLCAiIikpOworICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgImVuZCIpKQorICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiS1BfRW5kIiwgIiIpKTsKKyAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJpbnNlcnQiKSkKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIktQX0luc2VydCIsICIiKSk7CisgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAiZGVsZXRlIikpCisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJLUF9EZWxldGUiLCAiIikpOworCisgICAg
c2l6ZV90IGJ1ZmZlclNpemUgPSBXS1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUoa2V5
UmVmKTsKKyAgICBPd25BcnJheVB0cjxjaGFyPiBidWZmZXIgPSBhZG9wdEFycmF5UHRyKG5ldyBj
aGFyW2J1ZmZlclNpemVdKTsKKyAgICBXS1N0cmluZ0dldFVURjhDU3RyaW5nKGtleVJlZiwgYnVm
ZmVyLmdldCgpLCBidWZmZXJTaXplKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50
SW5mbyhidWZmZXIuZ2V0KCksIGJ1ZmZlci5nZXQoKSkpOworfQorCitzdGF0aWMgY29uc3QgUGFz
c1JlZlB0cjxLZXlFdmVudEluZm8+IGtleU5hbWUoV0tTdHJpbmdSZWYga2V5UmVmKQoreworICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgImxlZnRBcnJvdyIpKQor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiTGVmdCIsICIiKSk7Cisg
ICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAicmlnaHRBcnJvdyIp
KQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiUmlnaHQiLCAiIikp
OworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgInVwQXJyb3ci
KSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIlVwIiwgIiIpKTsK
KyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJkb3duQXJyb3ci
KSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIkRvd24iLCAiIikp
OworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgInBhZ2VVcCIp
KQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiUHJpb3IiLCAiIikp
OworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgInBhZ2VEb3du
IikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJOZXh0IiwgIiIp
KTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJob21lIikp
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJIb21lIiwgIiIpKTsK
KyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJlbmQiKSkKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIkVuZCIsICIiKSk7CisgICAg
aWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAiaW5zZXJ0IikpCisgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJJbnNlcnQiLCAiIikpOworICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgImRlbGV0ZSIpKQorICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiRGVsZXRlIiwgIiIpKTsKKyAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJwcmludFNjcmVlbiIp
KQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiUHJpbnQiLCAiIikp
OworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgIm1lbnUiKSkK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIk1lbnUiLCAiIikpOwor
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgIkYxIikpCisgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJGMSIsICIiKSk7CisgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAiRjIiKSkKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIkYyIiwgIiIpKTsKKyAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJGMyIpKQorICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEtleUV2ZW50SW5mbygiRjMiLCAiIikpOworICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgIkY0IikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgS2V5RXZlbnRJbmZvKCJGNCIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcoa2V5UmVmLCAiRjUiKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlF
dmVudEluZm8oIkY1IiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhrZXlSZWYsICJGNiIpKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5m
bygiRjYiLCAiIikpOworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJl
ZiwgIkY3IikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJGNyIs
ICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAiRjgi
KSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIkY4IiwgIiIpKTsK
KyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJGOSIpKQorICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiRjkiLCAiIikpOworICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgIkYxMCIpKQorICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiRjEwIiwgIiIpKTsKKyAgICBpZiAoV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJGMTEiKSkKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIkYxMSIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAiRjEyIikpCisgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgS2V5RXZlbnRJbmZvKCJGMTIiLCAiIikpOworCisgICAgc2l6ZV90IGJ1ZmZlclNp
emUgPSBXS1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUoa2V5UmVmKTsKKyAgICBPd25B
cnJheVB0cjxjaGFyPiBidWZmZXIgPSBhZG9wdEFycmF5UHRyKG5ldyBjaGFyW2J1ZmZlclNpemVd
KTsKKyAgICBXS1N0cmluZ0dldFVURjhDU3RyaW5nKGtleVJlZiwgYnVmZmVyLmdldCgpLCBidWZm
ZXJTaXplKTsKKyAgICBjaGFyIGNoYXJDb2RlID0gYnVmZmVyLmdldCgpWzBdOworCisgICAgaWYg
KGNoYXJDb2RlID09ICdcbicgfHwgY2hhckNvZGUgPT0gJ1xyJykKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIlJldHVybiIsICJcciIpKTsKKyAgICBpZiAoY2hhckNv
ZGUgPT0gJ1x0JykKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIlRh
YiIsICJcdCIpKTsKKyAgICBpZiAoY2hhckNvZGUgPT0gJ1x4OCcpCisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJCYWNrU3BhY2UiLCAiXHg4IikpOworICAgIGlmIChj
aGFyQ29kZSA9PSAnICcpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZv
KCJzcGFjZSIsICIgIikpOworCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8o
YnVmZmVyLmdldCgpLCBidWZmZXIuZ2V0KCkpKTsKK30KKworRXZlbnRTZW5kZXJQcm94eTo6RXZl
bnRTZW5kZXJQcm94eShUZXN0Q29udHJvbGxlciogdGVzdENvbnRyb2xsZXIpCisgICAgOiBtX3Rl
c3RDb250cm9sbGVyKHRlc3RDb250cm9sbGVyKQorICAgICwgbV90aW1lKDApCisgICAgLCBtX2xl
ZnRNb3VzZUJ1dHRvbkRvd24oZmFsc2UpCisgICAgLCBtX2NsaWNrQ291bnQoMCkKKyAgICAsIG1f
Y2xpY2tUaW1lKDApCisgICAgLCBtX2NsaWNrQnV0dG9uKFdUUk1vdXNlQnV0dG9uTm9uZSkKKyAg
ICAsIG1fbW91c2VCdXR0b24oV1RSTW91c2VCdXR0b25Ob25lKQoreworfQorCit2b2lkIEV2ZW50
U2VuZGVyUHJveHk6OnVwZGF0ZUNsaWNrQ291bnRGb3JCdXR0b24oaW50IGJ1dHRvbikKK3sKKyAg
ICBpZiAobV90aW1lIC0gbV9jbGlja1RpbWUgPCAxICYmIG1fcG9zaXRpb24gPT0gbV9jbGlja1Bv
c2l0aW9uICYmIGJ1dHRvbiA9PSBtX2NsaWNrQnV0dG9uKSB7CisgICAgICAgICsrbV9jbGlja0Nv
dW50OworICAgICAgICBtX2NsaWNrVGltZSA9IG1fdGltZTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIG1fY2xpY2tDb3VudCA9IDE7CisgICAgbV9jbGlja1RpbWUgPSBtX3RpbWU7Cisg
ICAgbV9jbGlja1Bvc2l0aW9uID0gbV9wb3NpdGlvbjsKKyAgICBtX2NsaWNrQnV0dG9uID0gYnV0
dG9uOworfQorCit2b2lkIEV2ZW50U2VuZGVyUHJveHk6OmRpc3BhdGNoRXZlbnQoY29uc3QgV1RS
RXZlbnQmIHd0ckV2ZW50KQoreworICAgIGlmICh3dHJFdmVudC5ldmVudFR5cGUgPT0gV1RSRXZl
bnRUeXBlTW91c2VEb3duKQorICAgICAgICBkaXNwYXRjaE1vdXNlRG93bkV2ZW50KGVjb3JlX2V2
YXNfZ2V0KG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtV2luZG93KCkp
LCB3dHJFdmVudC5idXR0b24sIHd0ckV2ZW50Lm1vZGlmaWVycyk7CisgICAgZWxzZSBpZiAod3Ry
RXZlbnQuZXZlbnRUeXBlID09IFdUUkV2ZW50VHlwZU1vdXNlVXApCisgICAgICAgIGRpc3BhdGNo
TW91c2VVcEV2ZW50KGVjb3JlX2V2YXNfZ2V0KG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3
KCktPnBsYXRmb3JtV2luZG93KCkpLCB3dHJFdmVudC5idXR0b24sIHd0ckV2ZW50Lm1vZGlmaWVy
cyk7CisgICAgZWxzZSBpZiAod3RyRXZlbnQuZXZlbnRUeXBlID09IFdUUkV2ZW50VHlwZU1vdXNl
TW92ZSkKKyAgICAgICAgZGlzcGF0Y2hNb3VzZU1vdmVFdmVudChlY29yZV9ldmFzX2dldChtX3Rl
c3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVdpbmRvdygpKSwgc3RhdGljX2Nh
c3Q8aW50PihtX3Bvc2l0aW9uLngpLCBzdGF0aWNfY2FzdDxpbnQ+KG1fcG9zaXRpb24ueSkpOwor
ICAgIGVsc2UgaWYgKHd0ckV2ZW50LmV2ZW50VHlwZSA9PSBXVFJFdmVudFR5cGVNb3VzZVNjcm9s
bEJ5KQorICAgICAgICBkaXNwYXRjaE1vdXNlU2Nyb2xsQnlFdmVudChlY29yZV9ldmFzX2dldCht
X3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVdpbmRvdygpKSwgd3RyRXZl
bnQuaG9yaXpvbnRhbCwgd3RyRXZlbnQudmVydGljYWwpOworfQorCit2b2lkIEV2ZW50U2VuZGVy
UHJveHk6OnJlcGxheVNhdmVkRXZlbnRzKCkKK3sKKyAgICB3aGlsZSAoIW1fZXZlbnRRdWV1ZS5p
c0VtcHR5KCkpIHsKKyAgICAgICAgV1RSRXZlbnQgd3RyRXZlbnQgPSBtX2V2ZW50UXVldWUudGFr
ZUZpcnN0KCk7CisgICAgICAgIGlmICh3dHJFdmVudC5kZWxheSkKKyAgICAgICAgICAgIHVzbGVl
cCh3dHJFdmVudC5kZWxheSAqIDEwMDApOworCisgICAgICAgIGRpc3BhdGNoRXZlbnQod3RyRXZl
bnQpOworICAgIH0KK30KKwordm9pZCBFdmVudFNlbmRlclByb3h5OjpzZW5kT3JRdWV1ZUV2ZW50
KGNvbnN0IFdUUkV2ZW50JiB3dHJFdmVudCkKK3sKKyAgICBpZiAobV9ldmVudFF1ZXVlLmlzRW1w
dHkoKSB8fCAhbV9ldmVudFF1ZXVlLmxhc3QoKS5kZWxheSkgeworICAgICAgICBkaXNwYXRjaEV2
ZW50KHd0ckV2ZW50KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fZXZlbnRRdWV1
ZS5hcHBlbmQod3RyRXZlbnQpOworICAgIHJlcGxheVNhdmVkRXZlbnRzKCk7Cit9CisKK3ZvaWQg
RXZlbnRTZW5kZXJQcm94eTo6bW91c2VEb3duKHVuc2lnbmVkIGJ1dHRvbiwgV0tFdmVudE1vZGlm
aWVycyB3a01vZGlmaWVycykKK3sKKyAgICBpZiAobV9tb3VzZUJ1dHRvbiA9PSBidXR0b24pCisg
ICAgICAgIHJldHVybjsKKworICAgIG1fbW91c2VCdXR0b24gPSBidXR0b247CisgICAgdXBkYXRl
Q2xpY2tDb3VudEZvckJ1dHRvbihidXR0b24pOworCisgICAgc2VuZE9yUXVldWVFdmVudChXVFJF
dmVudChXVFJFdmVudFR5cGVNb3VzZURvd24sIDAsIHdrTW9kaWZpZXJzLCBldmFzTW91c2VCdXR0
b24oYnV0dG9uKSkpOworfQorCit2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlVXAodW5zaWdu
ZWQgYnV0dG9uLCBXS0V2ZW50TW9kaWZpZXJzIHdrTW9kaWZpZXJzKQoreworICAgIHNlbmRPclF1
ZXVlRXZlbnQoV1RSRXZlbnQoV1RSRXZlbnRUeXBlTW91c2VVcCwgMCwgd2tNb2RpZmllcnMsIGV2
YXNNb3VzZUJ1dHRvbihidXR0b24pKSk7CisKKyAgICBpZiAobV9tb3VzZUJ1dHRvbiA9PSBidXR0
b24pCisgICAgICAgIG1fbW91c2VCdXR0b24gPSBXVFJNb3VzZUJ1dHRvbk5vbmU7CisKKyAgICBt
X2NsaWNrUG9zaXRpb24gPSBtX3Bvc2l0aW9uOworICAgIG1fY2xpY2tUaW1lID0gZWNvcmVfdGlt
ZV9nZXQoKTsKK30KKwordm9pZCBFdmVudFNlbmRlclByb3h5Ojptb3VzZU1vdmVUbyhkb3VibGUg
eCwgZG91YmxlIHkpCit7CisgICAgbV9wb3NpdGlvbi54ID0geDsKKyAgICBtX3Bvc2l0aW9uLnkg
PSB5OworCisgICAgc2VuZE9yUXVldWVFdmVudChXVFJFdmVudChXVFJFdmVudFR5cGVNb3VzZU1v
dmUsIDAsIDAsIFdUUk1vdXNlQnV0dG9uTm9uZSkpOworfQorCit2b2lkIEV2ZW50U2VuZGVyUHJv
eHk6Om1vdXNlU2Nyb2xsQnkoaW50IGhvcml6b250YWwsIGludCB2ZXJ0aWNhbCkKK3sKKyAgICBX
VFJFdmVudCB3dHJFdmVudChXVFJFdmVudFR5cGVNb3VzZVNjcm9sbEJ5LCAwLCAwLCBXVFJNb3Vz
ZUJ1dHRvbk5vbmUpOworICAgIHd0ckV2ZW50Lmhvcml6b250YWwgPSBob3Jpem9udGFsOworICAg
IHd0ckV2ZW50LnZlcnRpY2FsID0gdmVydGljYWw7CisgICAgc2VuZE9yUXVldWVFdmVudCh3dHJF
dmVudCk7Cit9CisKK3ZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bGVhcEZvcndhcmQoaW50IG1pbGxp
c2Vjb25kcykKK3sKKyAgICBpZiAobV9ldmVudFF1ZXVlLmlzRW1wdHkoKSkKKyAgICAgICAgbV9l
dmVudFF1ZXVlLmFwcGVuZChXVFJFdmVudChXVFJFdmVudFR5cGVMZWFwRm9yd2FyZCwgbWlsbGlz
ZWNvbmRzLCAwLCBXVFJNb3VzZUJ1dHRvbk5vbmUpKTsKKworICAgIG1fdGltZSArPSBtaWxsaXNl
Y29uZHMgLyAxMDAwLjA7Cit9CisKK3ZvaWQgRXZlbnRTZW5kZXJQcm94eTo6a2V5RG93bihXS1N0
cmluZ1JlZiBrZXlSZWYsIFdLRXZlbnRNb2RpZmllcnMgd2tNb2RpZmllcnMsIHVuc2lnbmVkIGxv
Y2F0aW9uKQoreworICAgIGNvbnN0IFJlZlB0cjxLZXlFdmVudEluZm8+IGtleUV2ZW50SW5mbyA9
IChsb2NhdGlvbiA9PSBET01LZXlMb2NhdGlvbk51bXBhZCkgPyBrZXlQYWROYW1lKGtleVJlZikg
OiBrZXlOYW1lKGtleVJlZik7CisgICAgaWYgKCFrZXlFdmVudEluZm8pCisgICAgICAgIHJldHVy
bjsKKworICAgIGNvbnN0IGNoYXIqIGtleU5hbWUgPSBrZXlFdmVudEluZm8tPmtleU5hbWUuZGF0
YSgpOworICAgIGNvbnN0IGNoYXIqIGtleVN0cmluZyA9IGtleUV2ZW50SW5mby0+a2V5U3RyaW5n
LmRhdGEoKTsKKworICAgIEV2YXMqIGV2YXMgPSBlY29yZV9ldmFzX2dldChtX3Rlc3RDb250cm9s
bGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVdpbmRvdygpKTsKKyAgICBzZXRFdmFzTW9kaWZp
ZXJzKGV2YXMsIHdrTW9kaWZpZXJzKTsKKyAgICBldmFzX2V2ZW50X2ZlZWRfa2V5X2Rvd24oZXZh
cywga2V5TmFtZSwga2V5TmFtZSwga2V5U3RyaW5nLCAwLCAwLCAwKTsKKyAgICBldmFzX2V2ZW50
X2ZlZWRfa2V5X3VwKGV2YXMsIGtleU5hbWUsIGtleU5hbWUsIGtleVN0cmluZywgMCwgMSwgMCk7
CisgICAgc2V0RXZhc01vZGlmaWVycyhldmFzLCAwKTsKK30KKworI2lmIEVOQUJMRShUT1VDSF9F
VkVOVFMpCit2b2lkIEV2ZW50U2VuZGVyUHJveHk6OmFkZFRvdWNoUG9pbnQoaW50IHgsIGludCB5
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRXZlbnRTZW5kZXJQcm94eTo6
dXBkYXRlVG91Y2hQb2ludChpbnQgaW5kZXgsIGludCB4LCBpbnQgeSkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnNldFRvdWNoTW9kaWZpZXIo
V0tFdmVudE1vZGlmaWVycyBtb2RpZmllciwgYm9vbCBlbmFibGUpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBFdmVudFNlbmRlclByb3h5Ojp0b3VjaFN0YXJ0KCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnRvdWNoTW92
ZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBFdmVudFNlbmRlclByb3h5
Ojp0b3VjaEVuZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBFdmVudFNl
bmRlclByb3h5Ojp0b3VjaENhbmNlbCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBFdmVudFNlbmRlclByb3h5OjpjbGVhclRvdWNoUG9pbnRzKCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnJlbGVhc2VUb3VjaFBvaW50
KGludCBpbmRleCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEV2ZW50U2Vu
ZGVyUHJveHk6OmNhbmNlbFRvdWNoUG9pbnQoaW50IGluZGV4KQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgRXZlbnRTZW5kZXJQcm94eTo6c2V0VG91Y2hQb2ludFJhZGl1cyhp
bnQgcmFkaXVzWCwgaW50IHJhZGl1c1kpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
I2VuZGlmCisKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153439</attachid>
            <date>2012-07-20 00:59:36 -0700</date>
            <delta_ts>2012-07-20 01:19:04 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>22149</size>
            <attacher name="Kangil Han">kangil.han</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBhYmMy
MzVlLi5iOTVlNjQzIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNTcgQEAKKzIwMTItMDctMTkgIEthbmdpbCBIYW4gIDxrYW5naWwu
aGFuQHNhbXN1bmcuY29tPgorCisgICAgICAgIFtFRkxdW1dLMl1bV1RSXSBJbXBsZW1lbnQgRXZl
bnRTZW5kZXJQcm94eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9OTE3MzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGlzIGlzIGFuIGluaXRpYWwgRUZMIHBvcnQgaW1wbGVtZW50YXRpb24gb2YgRXZlbnRT
ZW5kZXJQcm94eS4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvRXZlbnRTZW5kZXJQcm94
eS5oOgorICAgICAgICAoV1RSKToKKyAgICAgICAgKEV2ZW50U2VuZGVyUHJveHkpOgorICAgICAg
ICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvRXZlbnRTZW5kaW5nQ29udHJvbGxl
ci5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1FZmwuY21ha2U6CisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6
OlRlc3RDb250cm9sbGVyOjpUZXN0Q29udHJvbGxlcik6CisgICAgICAgIChXVFI6OlRlc3RDb250
cm9sbGVyOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKToK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2VmbC9FdmVudFNlbmRlclByb3h5RWZsLmNwcDog
QWRkZWQuCisgICAgICAgIChXVFIpOgorICAgICAgICAoV1RSRXZlbnQpOgorICAgICAgICAoV1RS
OjpXVFJFdmVudDo6V1RSRXZlbnQpOgorICAgICAgICAoV1RSOjpLZXlFdmVudEluZm86OktleUV2
ZW50SW5mbyk6CisgICAgICAgIChLZXlFdmVudEluZm8pOgorICAgICAgICAoV1RSOjpldmFzTW91
c2VCdXR0b24pOgorICAgICAgICAoV1RSOjpzZXRFdmFzTW9kaWZpZXJzKToKKyAgICAgICAgKFdU
Ujo6ZGlzcGF0Y2hNb3VzZURvd25FdmVudCk6CisgICAgICAgIChXVFI6OmRpc3BhdGNoTW91c2VV
cEV2ZW50KToKKyAgICAgICAgKFdUUjo6ZGlzcGF0Y2hNb3VzZU1vdmVFdmVudCk6CisgICAgICAg
IChXVFI6OmRpc3BhdGNoTW91c2VTY3JvbGxCeUV2ZW50KToKKyAgICAgICAgKFdUUjo6a2V5UGFk
TmFtZSk6CisgICAgICAgIChXVFI6OmtleU5hbWUpOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRl
clByb3h5OjpFdmVudFNlbmRlclByb3h5KToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94
eTo6dXBkYXRlQ2xpY2tDb3VudEZvckJ1dHRvbik6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVy
UHJveHk6OmRpc3BhdGNoRXZlbnQpOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5Ojpy
ZXBsYXlTYXZlZEV2ZW50cyk6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6OnNlbmRP
clF1ZXVlRXZlbnQpOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5Ojptb3VzZURvd24p
OgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5Ojptb3VzZVVwKToKKyAgICAgICAgKFdU
Ujo6RXZlbnRTZW5kZXJQcm94eTo6bW91c2VNb3ZlVG8pOgorICAgICAgICAoV1RSOjpFdmVudFNl
bmRlclByb3h5Ojptb3VzZVNjcm9sbEJ5KToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94
eTo6bGVhcEZvcndhcmQpOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5OjprZXlEb3du
KToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6YWRkVG91Y2hQb2ludCk6CisgICAg
ICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6OnVwZGF0ZVRvdWNoUG9pbnQpOgorICAgICAgICAo
V1RSOjpFdmVudFNlbmRlclByb3h5OjpzZXRUb3VjaE1vZGlmaWVyKToKKyAgICAgICAgKFdUUjo6
RXZlbnRTZW5kZXJQcm94eTo6dG91Y2hTdGFydCk6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVy
UHJveHk6OnRvdWNoTW92ZSk6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6OnRvdWNo
RW5kKToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6dG91Y2hDYW5jZWwpOgorICAg
ICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5OjpjbGVhclRvdWNoUG9pbnRzKToKKyAgICAgICAg
KFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6cmVsZWFzZVRvdWNoUG9pbnQpOgorICAgICAgICAoV1RS
OjpFdmVudFNlbmRlclByb3h5OjpjYW5jZWxUb3VjaFBvaW50KToKKyAgICAgICAgKFdUUjo6RXZl
bnRTZW5kZXJQcm94eTo6c2V0VG91Y2hQb2ludFJhZGl1cyk6CisKIDIwMTItMDctMTggIENocmlz
dG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVsLmNvbT4KIAogICAgICAgICBbQ01h
a2VdW0VGTF0gU2hvdWxkIHRyeSB0byBmaW5kIHRoZSBzYW1lIGxpYnNvdXAgdmVyc2lvbiBwdWxs
ZWQgYnkgamhidWlsZApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9FdmVudFNl
bmRlclByb3h5LmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0V2ZW50U2VuZGVyUHJveHkuaApp
bmRleCA4MTY4NTEzLi43NmIyMmU4IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0V2ZW50U2VuZGVyUHJveHkuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0V2ZW50U2Vu
ZGVyUHJveHkuaApAQCAtMzMsNiArMzMsOCBAQAogI2VsaWYgUExBVEZPUk0oR1RLKQogI2luY2x1
ZGUgPGdkay9nZGsuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjZWxpZiBQTEFURk9STShF
RkwpCisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdUUiB7CkBA
IC00MSw2ICs0Myw4IEBAIGNsYXNzIFRlc3RDb250cm9sbGVyOwogCiAjaWYgUExBVEZPUk0oR1RL
KQogc3RydWN0IFdUUkV2ZW50UXVldWVJdGVtOworI2VsaWYgUExBVEZPUk0oRUZMKQorc3RydWN0
IFdUUkV2ZW50OwogI2VuZGlmCiAKIGNsYXNzIEV2ZW50U2VuZGVyUHJveHkgewpAQCAtNzcsNyAr
ODEsNyBAQCBwcml2YXRlOgogICAgIGRvdWJsZSBjdXJyZW50RXZlbnRUaW1lKCkgeyByZXR1cm4g
bV90aW1lOyB9CiAgICAgdm9pZCB1cGRhdGVDbGlja0NvdW50Rm9yQnV0dG9uKGludCBidXR0b24p
OwogCi0jaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykKKyNpZiBQTEFURk9STShRVCkg
fHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpCiAgICAgdm9pZCByZXBsYXlTYXZlZEV2
ZW50cygpOwogI2VuZGlmCiAKQEAgLTg5LDYgKzkzLDkgQEAgcHJpdmF0ZToKICNlbGlmIFBMQVRG
T1JNKEdUSykKICAgICB2b2lkIHNlbmRPclF1ZXVlRXZlbnQoR2RrRXZlbnQqKTsKICAgICBHZGtF
dmVudCogY3JlYXRlTW91c2VCdXR0b25FdmVudChHZGtFdmVudFR5cGUsIHVuc2lnbmVkIGJ1dHRv
biwgV0tFdmVudE1vZGlmaWVycyk7CisjZWxpZiBQTEFURk9STShFRkwpCisgICAgdm9pZCBzZW5k
T3JRdWV1ZUV2ZW50KGNvbnN0IFdUUkV2ZW50Jik7CisgICAgdm9pZCBkaXNwYXRjaEV2ZW50KGNv
bnN0IFdUUkV2ZW50Jik7CiAjZW5kaWYKIAogICAgIGRvdWJsZSBtX3RpbWU7CkBAIC0xMTIsNiAr
MTE5LDkgQEAgcHJpdmF0ZToKICAgICBRUG9pbnQgbV90b3VjaFBvaW50UmFkaXVzOwogICAgIGJv
b2wgbV90b3VjaEFjdGl2ZTsKICNlbmRpZgorI2VsaWYgUExBVEZPUk0oRUZMKQorICAgIERlcXVl
PFdUUkV2ZW50PiBtX2V2ZW50UXVldWU7CisgICAgdW5zaWduZWQgbV9tb3VzZUJ1dHRvbjsKICNl
bmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9FdmVudFNlbmRpbmdDb250cm9sbGVyLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuaAppbmRleCA4ZWEyZGIwLi5iMDQw
YTQ5IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0V2
ZW50U2VuZGluZ0NvbnRyb2xsZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuaApAQCAtMzEsNyArMzEsNyBAQAogI2lu
Y2x1ZGUgPFdlYktpdDIvV0tHZW9tZXRyeS5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CiAKLSNpZiAhUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oUVQpICYmICFQTEFURk9STShHVEsp
CisjaWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKFFUKSAmJiAhUExBVEZPUk0oR1RLKSAm
JiAhUExBVEZPUk0oRUZMKQogI2RlZmluZSBVU0VfV0VCUFJPQ0VTU19FVkVOVF9TSU1VTEFUSU9O
CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybUVm
bC5jbWFrZSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXgg
OTQyYzAwMy4uNmM5MzA5MSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0
Zm9ybUVmbC5jbWFrZQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtRWZsLmNt
YWtlCkBAIC0xOSw2ICsxOSw3IEBAIFNFVChGb3J3YXJkaW5nTmV0d29ya0hlYWRlcnNGb3JXZWJL
aXRUZXN0UnVubmVyX05BTUUgZm9yd2FyZGluZy1oZWFkZXJzU291cEZvcldlCiBMSVNUKEFQUEVO
RCBXZWJLaXRUZXN0UnVubmVyX1NPVVJDRVMKICAgICAke1dFQktJVF9URVNUUlVOTkVSX0RJUn0v
Y2Fpcm8vVGVzdEludm9jYXRpb25DYWlyby5jcHAKIAorICAgICR7V0VCS0lUX1RFU1RSVU5ORVJf
RElSfS9lZmwvRXZlbnRTZW5kZXJQcm94eUVmbC5jcHAKICAgICAke1dFQktJVF9URVNUUlVOTkVS
X0RJUn0vZWZsL1BsYXRmb3JtV2ViVmlld0VmbC5jcHAKICAgICAke1dFQktJVF9URVNUUlVOTkVS
X0RJUn0vZWZsL1Rlc3RDb250cm9sbGVyRWZsLmNwcAogICAgICR7V0VCS0lUX1RFU1RSVU5ORVJf
RElSfS9lZmwvbWFpbi5jcHAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVz
dENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5j
cHAKaW5kZXggYzQ3YzQ3NS4uMGEyY2IyYiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9UZXN0Q29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0
Q29udHJvbGxlci5jcHAKQEAgLTgxLDcgKzgxLDcgQEAgVGVzdENvbnRyb2xsZXI6OlRlc3RDb250
cm9sbGVyKGludCBhcmdjLCBjb25zdCBjaGFyKiBhcmd2W10pCiAgICAgLCBtX2RpZFByaW50V2Vi
UHJvY2Vzc0NyYXNoZWRNZXNzYWdlKGZhbHNlKQogICAgICwgbV9zaG91bGRFeGl0V2hlbldlYlBy
b2Nlc3NDcmFzaGVzKHRydWUpCiAgICAgLCBtX2JlZm9yZVVubG9hZFJldHVyblZhbHVlKHRydWUp
Ci0jaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oR1RLKQorI2lm
IFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZP
Uk0oRUZMKQogICAgICwgbV9ldmVudFNlbmRlclByb3h5KG5ldyBFdmVudFNlbmRlclByb3h5KHRo
aXMpKQogI2VuZGlmCiB7CkBAIC01OTgsNyArNTk4LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6
ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5h
bWUKIAogV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZVN5
bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFt
ZSwgV0tUeXBlUmVmIG1lc3NhZ2VCb2R5KQogewotI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZP
Uk0oUVQpIHx8IFBMQVRGT1JNKEdUSykKKyNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKFFU
KSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkKICAgICBpZiAoV0tTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkV2ZW50U2VuZGVyIikpIHsKICAgICAgICAg
QVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQo
KSk7CiAgICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0
aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKZGlmZiAtLWdpdCBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwuY3BwIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9lZmwvRXZlbnRTZW5kZXJQcm94eUVmbC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNTBiM2Q0ZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwuY3BwCkBAIC0wLDAgKzEsNDU3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBaYW4gRG9iZXJzZWsgPHphbmRvYmVy
c2VrQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBIb2xnZXIgSGFucyBQZXRlciBG
cmV5dGhlcgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgUHJvRlVTSU9OIEVtYmVkZGVkIFN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRXZlbnRTZW5kZXJQcm94eS5oIgorCisjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVdlYlZpZXcuaCIKKyNpbmNsdWRlICJUZXN0
Q29udHJvbGxlci5oIgorCisjaW5jbHVkZSA8RWNvcmUuaD4KKyNpbmNsdWRlIDxFY29yZV9FdmFz
Lmg+CisjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25B
cnJheVB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdUUiB7CisKK2VudW0gV1RSRXZlbnRUeXBl
IHsKKyAgICBXVFJFdmVudFR5cGVOb25lID0gMCwKKyAgICBXVFJFdmVudFR5cGVNb3VzZURvd24s
CisgICAgV1RSRXZlbnRUeXBlTW91c2VVcCwKKyAgICBXVFJFdmVudFR5cGVNb3VzZU1vdmUsCisg
ICAgV1RSRXZlbnRUeXBlTW91c2VTY3JvbGxCeSwKKyAgICBXVFJFdmVudFR5cGVMZWFwRm9yd2Fy
ZAorfTsKKworZW51bSBXVFJNb3VzZUJ1dHRvbiB7CisgICAgV1RSTW91c2VCdXR0b25Ob25lID0g
LTEsCisgICAgV1RSTW91c2VCdXR0b25MZWZ0LAorICAgIFdUUk1vdXNlQnV0dG9uTWlkZGxlLAor
ICAgIFdUUk1vdXNlQnV0dG9uUmlnaHQsCisgICAgV1RSTW91c2VCdXR0b25NaWRkbGVEdXBsaWNh
dGVkLAorfTsKKworZW51bSBFdmFzTW91c2VCdXR0b24geworICAgIEV2YXNNb3VzZUJ1dHRvbk5v
bmUgPSAwLAorICAgIEV2YXNNb3VzZUJ1dHRvbkxlZnQsCisgICAgRXZhc01vdXNlQnV0dG9uTWlk
ZGxlLAorICAgIEV2YXNNb3VzZUJ1dHRvblJpZ2h0Cit9OworCisvLyBLZXkgZXZlbnQgbG9jYXRp
b24gY29kZSBkZWZpbmVkIGluIERPTSBMZXZlbCAzLgorZW51bSBLZXlMb2NhdGlvbkNvZGUgewor
ICAgIERPTUtleUxvY2F0aW9uU3RhbmRhcmQgICAgICA9IDB4MDAsCisgICAgRE9NS2V5TG9jYXRp
b25MZWZ0ICAgICAgICAgID0gMHgwMSwKKyAgICBET01LZXlMb2NhdGlvblJpZ2h0ICAgICAgICAg
PSAweDAyLAorICAgIERPTUtleUxvY2F0aW9uTnVtcGFkICAgICAgICA9IDB4MDMKK307CisKK3N0
cnVjdCBXVFJFdmVudCB7CisgICAgV1RSRXZlbnRUeXBlIGV2ZW50VHlwZTsKKyAgICB1bnNpZ25l
ZCBkZWxheTsKKyAgICBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVyczsKKyAgICBpbnQgYnV0dG9u
OworICAgIGludCBob3Jpem9udGFsOworICAgIGludCB2ZXJ0aWNhbDsKKworICAgIFdUUkV2ZW50
KCkKKyAgICAgICAgOiBldmVudFR5cGUoV1RSRXZlbnRUeXBlTm9uZSkKKyAgICAgICAgLCBkZWxh
eSgwKQorICAgICAgICAsIG1vZGlmaWVycygwKQorICAgICAgICAsIGJ1dHRvbigtMSkKKyAgICAg
ICAgLCBob3Jpem9udGFsKC0xKQorICAgICAgICAsIHZlcnRpY2FsKC0xKQorICAgIHsKKyAgICB9
CisKKyAgICBXVFJFdmVudChXVFJFdmVudFR5cGUgZXZlbnRUeXBlLCB1bnNpZ25lZCBkZWxheSwg
V0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMsIGludCBidXR0b24pCisgICAgICAgIDogZXZlbnRU
eXBlKGV2ZW50VHlwZSkKKyAgICAgICAgLCBkZWxheShkZWxheSkKKyAgICAgICAgLCBtb2RpZmll
cnMobW9kaWZpZXJzKQorICAgICAgICAsIGJ1dHRvbihidXR0b24pCisgICAgICAgICwgaG9yaXpv
bnRhbCgtMSkKKyAgICAgICAgLCB2ZXJ0aWNhbCgtMSkKKyAgICB7CisgICAgfQorfTsKKworc3Ry
dWN0IEtleUV2ZW50SW5mbyA6IHB1YmxpYyBSZWZDb3VudGVkPEtleUV2ZW50SW5mbz4geworICAg
IEtleUV2ZW50SW5mbyhjb25zdCBDU3RyaW5nJiBrZXlOYW1lLCBjb25zdCBDU3RyaW5nJiBrZXlT
dHJpbmcpCisgICAgICAgIDoga2V5TmFtZShrZXlOYW1lKQorICAgICAgICAsIGtleVN0cmluZyhr
ZXlTdHJpbmcpCisgICAgeworICAgIH0KKworICAgIGNvbnN0IENTdHJpbmcga2V5TmFtZTsKKyAg
ICBjb25zdCBDU3RyaW5nIGtleVN0cmluZzsKK307CisKK3N0YXRpYyB1bnNpZ25lZCBldmFzTW91
c2VCdXR0b24odW5zaWduZWQgYnV0dG9uKQoreworICAgIGlmIChidXR0b24gPT0gV1RSTW91c2VC
dXR0b25MZWZ0KQorICAgICAgICByZXR1cm4gRXZhc01vdXNlQnV0dG9uTGVmdDsKKyAgICBpZiAo
YnV0dG9uID09IFdUUk1vdXNlQnV0dG9uTWlkZGxlKQorICAgICAgICByZXR1cm4gRXZhc01vdXNl
QnV0dG9uTWlkZGxlOworICAgIGlmIChidXR0b24gPT0gV1RSTW91c2VCdXR0b25SaWdodCkKKyAg
ICAgICAgcmV0dXJuIEV2YXNNb3VzZUJ1dHRvblJpZ2h0OworICAgIGlmIChidXR0b24gPT0gV1RS
TW91c2VCdXR0b25NaWRkbGVEdXBsaWNhdGVkKQorICAgICAgICByZXR1cm4gRXZhc01vdXNlQnV0
dG9uTWlkZGxlOworCisgICAgcmV0dXJuIEV2YXNNb3VzZUJ1dHRvbk5vbmU7Cit9CisKK3N0YXRp
YyB2b2lkIHNldEV2YXNNb2RpZmllcnMoRXZhcyogZXZhcywgV0tFdmVudE1vZGlmaWVycyB3a01v
ZGlmaWVycykKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciogbW9kaWZpZXJOYW1lc1tdID0geyAi
U2hpZnQiLCAiQ29udHJvbCIsICJBbHQiLCAiTWV0YSIgfTsKKyAgICBmb3IgKHVuc2lnbmVkIG1v
ZGlmaWVyID0gMDsgbW9kaWZpZXIgPCAoc2l6ZW9mKG1vZGlmaWVyTmFtZXMpIC8gc2l6ZW9mKGNo
YXIqKSk7ICsrbW9kaWZpZXIpIHsKKyAgICAgICAgaWYgKHdrTW9kaWZpZXJzICYgKDEgPDwgbW9k
aWZpZXIpKQorICAgICAgICAgICAgZXZhc19rZXlfbW9kaWZpZXJfb24oZXZhcywgbW9kaWZpZXJO
YW1lc1ttb2RpZmllcl0pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBldmFzX2tleV9tb2Rp
Zmllcl9vZmYoZXZhcywgbW9kaWZpZXJOYW1lc1ttb2RpZmllcl0pOworICAgIH0KK30KKworc3Rh
dGljIHZvaWQgZGlzcGF0Y2hNb3VzZURvd25FdmVudChFdmFzKiBldmFzLCB1bnNpZ25lZCBidXR0
b24sIFdLRXZlbnRNb2RpZmllcnMgd2tNb2RpZmllcnMpCit7CisgICAgc2V0RXZhc01vZGlmaWVy
cyhldmFzLCB3a01vZGlmaWVycyk7CisgICAgZXZhc19ldmVudF9mZWVkX21vdXNlX2Rvd24oZXZh
cywgYnV0dG9uLCBFVkFTX0JVVFRPTl9OT05FLCAwLCAwKTsKKyAgICBzZXRFdmFzTW9kaWZpZXJz
KGV2YXMsIDApOworfQorCitzdGF0aWMgdm9pZCBkaXNwYXRjaE1vdXNlVXBFdmVudChFdmFzKiBl
dmFzLCB1bnNpZ25lZCBidXR0b24sIFdLRXZlbnRNb2RpZmllcnMgd2tNb2RpZmllcnMpCit7Cisg
ICAgc2V0RXZhc01vZGlmaWVycyhldmFzLCB3a01vZGlmaWVycyk7CisgICAgZXZhc19ldmVudF9m
ZWVkX21vdXNlX3VwKGV2YXMsIGJ1dHRvbiwgRVZBU19CVVRUT05fTk9ORSwgMCwgMCk7CisgICAg
c2V0RXZhc01vZGlmaWVycyhldmFzLCAwKTsKK30KKworc3RhdGljIHZvaWQgZGlzcGF0Y2hNb3Vz
ZU1vdmVFdmVudChFdmFzKiBldmFzLCBpbnQgeCwgaW50IHkpCit7CisgICAgZXZhc19ldmVudF9m
ZWVkX21vdXNlX21vdmUoZXZhcywgeCwgeSwgMCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGRpc3Bh
dGNoTW91c2VTY3JvbGxCeUV2ZW50KEV2YXMqIGV2YXMsIGludCBob3Jpem9udGFsLCBpbnQgdmVy
dGljYWwpCit7CisgICAgY29uc3QgaW50IFNDUk9MTExFRlQgPSAtMTA7CisgICAgY29uc3QgaW50
IFNDUk9MTFJJR0hUID0gMTA7CisgICAgY29uc3QgaW50IFNDUk9MTERPV04gPSAtMTA7CisgICAg
Y29uc3QgaW50IFNDUk9MTFVQID0gMTA7CisKKyAgICBpZiAoaG9yaXpvbnRhbCA+IDApCisgICAg
ICAgIGV2YXNfZXZlbnRfZmVlZF9tb3VzZV93aGVlbChldmFzLCAxLCBTQ1JPTExMRUZULCAwLCAw
KTsKKyAgICBlbHNlIGlmIChob3Jpem9udGFsIDwgMCkKKyAgICAgICAgZXZhc19ldmVudF9mZWVk
X21vdXNlX3doZWVsKGV2YXMsIDEsIFNDUk9MTFJJR0hULCAwLCAwKTsKKworICAgIGlmICh2ZXJ0
aWNhbCA+IDApCisgICAgICAgIGV2YXNfZXZlbnRfZmVlZF9tb3VzZV93aGVlbChldmFzLCAwLCBT
Q1JPTExVUCwgMCwgMCk7CisgICAgZWxzZSBpZiAodmVydGljYWwgPCAwKQorICAgICAgICBldmFz
X2V2ZW50X2ZlZWRfbW91c2Vfd2hlZWwoZXZhcywgMCwgU0NST0xMRE9XTiwgMCwgMCk7Cit9CisK
K3N0YXRpYyBjb25zdCBQYXNzUmVmUHRyPEtleUV2ZW50SW5mbz4ga2V5UGFkTmFtZShXS1N0cmlu
Z1JlZiBrZXlSZWYpCit7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5
UmVmLCAibGVmdEFycm93IikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJ
bmZvKCJLUF9MZWZ0IiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhrZXlSZWYsICJyaWdodEFycm93IikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5
RXZlbnRJbmZvKCJLUF9SaWdodCIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcoa2V5UmVmLCAidXBBcnJvdyIpKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEtleUV2ZW50SW5mbygiS1BfVXAiLCAiIikpOworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKGtleVJlZiwgImRvd25BcnJvdyIpKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEtleUV2ZW50SW5mbygiS1BfRG93biIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcoa2V5UmVmLCAicGFnZVVwIikpCisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgS2V5RXZlbnRJbmZvKCJLUF9QcmlvciIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAicGFnZURvd24iKSkKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIktQX05leHQiLCAiIikpOworICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgImhvbWUiKSkKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIktQX0hvbWUiLCAiIikpOworICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgImVuZCIpKQorICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEtleUV2ZW50SW5mbygiS1BfRW5kIiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJpbnNlcnQiKSkKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIktQX0luc2VydCIsICIiKSk7CisgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAiZGVsZXRlIikpCisgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJLUF9EZWxldGUiLCAiIikpOworCisgICAgc2l6
ZV90IGJ1ZmZlclNpemUgPSBXS1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUoa2V5UmVm
KTsKKyAgICBPd25BcnJheVB0cjxjaGFyPiBidWZmZXIgPSBhZG9wdEFycmF5UHRyKG5ldyBjaGFy
W2J1ZmZlclNpemVdKTsKKyAgICBXS1N0cmluZ0dldFVURjhDU3RyaW5nKGtleVJlZiwgYnVmZmVy
LmdldCgpLCBidWZmZXJTaXplKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5m
byhidWZmZXIuZ2V0KCksIGJ1ZmZlci5nZXQoKSkpOworfQorCitzdGF0aWMgY29uc3QgUGFzc1Jl
ZlB0cjxLZXlFdmVudEluZm8+IGtleU5hbWUoV0tTdHJpbmdSZWYga2V5UmVmKQoreworICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgImxlZnRBcnJvdyIpKQorICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiTGVmdCIsICIiKSk7CisgICAg
aWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAicmlnaHRBcnJvdyIpKQor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiUmlnaHQiLCAiIikpOwor
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgInVwQXJyb3ciKSkK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIlVwIiwgIiIpKTsKKyAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJkb3duQXJyb3ciKSkK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIkRvd24iLCAiIikpOwor
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgInBhZ2VVcCIpKQor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiUHJpb3IiLCAiIikpOwor
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgInBhZ2VEb3duIikp
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJOZXh0IiwgIiIpKTsK
KyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJob21lIikpCisg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJIb21lIiwgIiIpKTsKKyAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJlbmQiKSkKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIkVuZCIsICIiKSk7CisgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAiaW5zZXJ0IikpCisgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJJbnNlcnQiLCAiIikpOworICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgImRlbGV0ZSIpKQorICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiRGVsZXRlIiwgIiIpKTsKKyAgICBp
ZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJwcmludFNjcmVlbiIpKQor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiUHJpbnQiLCAiIikpOwor
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgIm1lbnUiKSkKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIk1lbnUiLCAiIikpOworICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgIkYxIikpCisgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJGMSIsICIiKSk7CisgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAiRjIiKSkKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIkYyIiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJGMyIpKQorICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEtleUV2ZW50SW5mbygiRjMiLCAiIikpOworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKGtleVJlZiwgIkY0IikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
S2V5RXZlbnRJbmZvKCJGNCIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcoa2V5UmVmLCAiRjUiKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVu
dEluZm8oIkY1IiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhr
ZXlSZWYsICJGNiIpKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygi
RjYiLCAiIikpOworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwg
IkY3IikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJGNyIsICIi
KSk7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAiRjgiKSkK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIkY4IiwgIiIpKTsKKyAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJGOSIpKQorICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiRjkiLCAiIikpOworICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgIkYxMCIpKQorICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiRjEwIiwgIiIpKTsKKyAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJGMTEiKSkKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIkYxMSIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAiRjEyIikpCisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgS2V5RXZlbnRJbmZvKCJGMTIiLCAiIikpOworCisgICAgc2l6ZV90IGJ1ZmZlclNpemUg
PSBXS1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUoa2V5UmVmKTsKKyAgICBPd25BcnJh
eVB0cjxjaGFyPiBidWZmZXIgPSBhZG9wdEFycmF5UHRyKG5ldyBjaGFyW2J1ZmZlclNpemVdKTsK
KyAgICBXS1N0cmluZ0dldFVURjhDU3RyaW5nKGtleVJlZiwgYnVmZmVyLmdldCgpLCBidWZmZXJT
aXplKTsKKyAgICBjaGFyIGNoYXJDb2RlID0gYnVmZmVyLmdldCgpWzBdOworCisgICAgaWYgKGNo
YXJDb2RlID09ICdcbicgfHwgY2hhckNvZGUgPT0gJ1xyJykKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBLZXlFdmVudEluZm8oIlJldHVybiIsICJcciIpKTsKKyAgICBpZiAoY2hhckNvZGUg
PT0gJ1x0JykKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIlRhYiIs
ICJcdCIpKTsKKyAgICBpZiAoY2hhckNvZGUgPT0gJ1x4OCcpCisgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgS2V5RXZlbnRJbmZvKCJCYWNrU3BhY2UiLCAiXHg4IikpOworICAgIGlmIChjaGFy
Q29kZSA9PSAnICcpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJz
cGFjZSIsICIgIikpOworCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oYnVm
ZmVyLmdldCgpLCBidWZmZXIuZ2V0KCkpKTsKK30KKworRXZlbnRTZW5kZXJQcm94eTo6RXZlbnRT
ZW5kZXJQcm94eShUZXN0Q29udHJvbGxlciogdGVzdENvbnRyb2xsZXIpCisgICAgOiBtX3Rlc3RD
b250cm9sbGVyKHRlc3RDb250cm9sbGVyKQorICAgICwgbV90aW1lKDApCisgICAgLCBtX2xlZnRN
b3VzZUJ1dHRvbkRvd24oZmFsc2UpCisgICAgLCBtX2NsaWNrQ291bnQoMCkKKyAgICAsIG1fY2xp
Y2tUaW1lKDApCisgICAgLCBtX2NsaWNrQnV0dG9uKFdUUk1vdXNlQnV0dG9uTm9uZSkKKyAgICAs
IG1fbW91c2VCdXR0b24oV1RSTW91c2VCdXR0b25Ob25lKQoreworfQorCit2b2lkIEV2ZW50U2Vu
ZGVyUHJveHk6OnVwZGF0ZUNsaWNrQ291bnRGb3JCdXR0b24oaW50IGJ1dHRvbikKK3sKKyAgICBp
ZiAobV90aW1lIC0gbV9jbGlja1RpbWUgPCAxICYmIG1fcG9zaXRpb24gPT0gbV9jbGlja1Bvc2l0
aW9uICYmIGJ1dHRvbiA9PSBtX2NsaWNrQnV0dG9uKSB7CisgICAgICAgICsrbV9jbGlja0NvdW50
OworICAgICAgICBtX2NsaWNrVGltZSA9IG1fdGltZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIG1fY2xpY2tDb3VudCA9IDE7CisgICAgbV9jbGlja1RpbWUgPSBtX3RpbWU7CisgICAg
bV9jbGlja1Bvc2l0aW9uID0gbV9wb3NpdGlvbjsKKyAgICBtX2NsaWNrQnV0dG9uID0gYnV0dG9u
OworfQorCit2b2lkIEV2ZW50U2VuZGVyUHJveHk6OmRpc3BhdGNoRXZlbnQoY29uc3QgV1RSRXZl
bnQmIGV2ZW50KQoreworICAgIGlmIChldmVudC5ldmVudFR5cGUgPT0gV1RSRXZlbnRUeXBlTW91
c2VEb3duKQorICAgICAgICBkaXNwYXRjaE1vdXNlRG93bkV2ZW50KGVjb3JlX2V2YXNfZ2V0KG1f
dGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtV2luZG93KCkpLCBldmVudC5i
dXR0b24sIGV2ZW50Lm1vZGlmaWVycyk7CisgICAgZWxzZSBpZiAoZXZlbnQuZXZlbnRUeXBlID09
IFdUUkV2ZW50VHlwZU1vdXNlVXApCisgICAgICAgIGRpc3BhdGNoTW91c2VVcEV2ZW50KGVjb3Jl
X2V2YXNfZ2V0KG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtV2luZG93
KCkpLCBldmVudC5idXR0b24sIGV2ZW50Lm1vZGlmaWVycyk7CisgICAgZWxzZSBpZiAoZXZlbnQu
ZXZlbnRUeXBlID09IFdUUkV2ZW50VHlwZU1vdXNlTW92ZSkKKyAgICAgICAgZGlzcGF0Y2hNb3Vz
ZU1vdmVFdmVudChlY29yZV9ldmFzX2dldChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygp
LT5wbGF0Zm9ybVdpbmRvdygpKSwgc3RhdGljX2Nhc3Q8aW50PihtX3Bvc2l0aW9uLngpLCBzdGF0
aWNfY2FzdDxpbnQ+KG1fcG9zaXRpb24ueSkpOworICAgIGVsc2UgaWYgKGV2ZW50LmV2ZW50VHlw
ZSA9PSBXVFJFdmVudFR5cGVNb3VzZVNjcm9sbEJ5KQorICAgICAgICBkaXNwYXRjaE1vdXNlU2Ny
b2xsQnlFdmVudChlY29yZV9ldmFzX2dldChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygp
LT5wbGF0Zm9ybVdpbmRvdygpKSwgZXZlbnQuaG9yaXpvbnRhbCwgZXZlbnQudmVydGljYWwpOwor
fQorCit2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnJlcGxheVNhdmVkRXZlbnRzKCkKK3sKKyAgICB3
aGlsZSAoIW1fZXZlbnRRdWV1ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgV1RSRXZlbnQgd3RyRXZl
bnQgPSBtX2V2ZW50UXVldWUudGFrZUZpcnN0KCk7CisgICAgICAgIGlmICh3dHJFdmVudC5kZWxh
eSkKKyAgICAgICAgICAgIHVzbGVlcCh3dHJFdmVudC5kZWxheSAqIDEwMDApOworCisgICAgICAg
IGRpc3BhdGNoRXZlbnQod3RyRXZlbnQpOworICAgIH0KK30KKwordm9pZCBFdmVudFNlbmRlclBy
b3h5OjpzZW5kT3JRdWV1ZUV2ZW50KGNvbnN0IFdUUkV2ZW50JiB3dHJFdmVudCkKK3sKKyAgICBp
ZiAobV9ldmVudFF1ZXVlLmlzRW1wdHkoKSB8fCAhbV9ldmVudFF1ZXVlLmxhc3QoKS5kZWxheSkg
eworICAgICAgICBkaXNwYXRjaEV2ZW50KHd0ckV2ZW50KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIG1fZXZlbnRRdWV1ZS5hcHBlbmQod3RyRXZlbnQpOworICAgIHJlcGxheVNhdmVk
RXZlbnRzKCk7Cit9CisKK3ZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bW91c2VEb3duKHVuc2lnbmVk
IGJ1dHRvbiwgV0tFdmVudE1vZGlmaWVycyB3a01vZGlmaWVycykKK3sKKyAgICBpZiAobV9tb3Vz
ZUJ1dHRvbiA9PSBidXR0b24pCisgICAgICAgIHJldHVybjsKKworICAgIG1fbW91c2VCdXR0b24g
PSBidXR0b247CisgICAgdXBkYXRlQ2xpY2tDb3VudEZvckJ1dHRvbihidXR0b24pOworCisgICAg
c2VuZE9yUXVldWVFdmVudChXVFJFdmVudChXVFJFdmVudFR5cGVNb3VzZURvd24sIDAsIHdrTW9k
aWZpZXJzLCBldmFzTW91c2VCdXR0b24oYnV0dG9uKSkpOworfQorCit2b2lkIEV2ZW50U2VuZGVy
UHJveHk6Om1vdXNlVXAodW5zaWduZWQgYnV0dG9uLCBXS0V2ZW50TW9kaWZpZXJzIHdrTW9kaWZp
ZXJzKQoreworICAgIHNlbmRPclF1ZXVlRXZlbnQoV1RSRXZlbnQoV1RSRXZlbnRUeXBlTW91c2VV
cCwgMCwgd2tNb2RpZmllcnMsIGV2YXNNb3VzZUJ1dHRvbihidXR0b24pKSk7CisKKyAgICBpZiAo
bV9tb3VzZUJ1dHRvbiA9PSBidXR0b24pCisgICAgICAgIG1fbW91c2VCdXR0b24gPSBXVFJNb3Vz
ZUJ1dHRvbk5vbmU7CisKKyAgICBtX2NsaWNrUG9zaXRpb24gPSBtX3Bvc2l0aW9uOworICAgIG1f
Y2xpY2tUaW1lID0gZWNvcmVfdGltZV9nZXQoKTsKK30KKwordm9pZCBFdmVudFNlbmRlclByb3h5
Ojptb3VzZU1vdmVUbyhkb3VibGUgeCwgZG91YmxlIHkpCit7CisgICAgbV9wb3NpdGlvbi54ID0g
eDsKKyAgICBtX3Bvc2l0aW9uLnkgPSB5OworCisgICAgc2VuZE9yUXVldWVFdmVudChXVFJFdmVu
dChXVFJFdmVudFR5cGVNb3VzZU1vdmUsIDAsIDAsIFdUUk1vdXNlQnV0dG9uTm9uZSkpOworfQor
Cit2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlU2Nyb2xsQnkoaW50IGhvcml6b250YWwsIGlu
dCB2ZXJ0aWNhbCkKK3sKKyAgICBXVFJFdmVudCB3dHJFdmVudChXVFJFdmVudFR5cGVNb3VzZVNj
cm9sbEJ5LCAwLCAwLCBXVFJNb3VzZUJ1dHRvbk5vbmUpOworICAgIHd0ckV2ZW50Lmhvcml6b250
YWwgPSBob3Jpem9udGFsOworICAgIHd0ckV2ZW50LnZlcnRpY2FsID0gdmVydGljYWw7CisgICAg
c2VuZE9yUXVldWVFdmVudCh3dHJFdmVudCk7Cit9CisKK3ZvaWQgRXZlbnRTZW5kZXJQcm94eTo6
bGVhcEZvcndhcmQoaW50IG1pbGxpc2Vjb25kcykKK3sKKyAgICBpZiAobV9ldmVudFF1ZXVlLmlz
RW1wdHkoKSkKKyAgICAgICAgbV9ldmVudFF1ZXVlLmFwcGVuZChXVFJFdmVudChXVFJFdmVudFR5
cGVMZWFwRm9yd2FyZCwgbWlsbGlzZWNvbmRzLCAwLCBXVFJNb3VzZUJ1dHRvbk5vbmUpKTsKKwor
ICAgIG1fdGltZSArPSBtaWxsaXNlY29uZHMgLyAxMDAwLjA7Cit9CisKK3ZvaWQgRXZlbnRTZW5k
ZXJQcm94eTo6a2V5RG93bihXS1N0cmluZ1JlZiBrZXlSZWYsIFdLRXZlbnRNb2RpZmllcnMgd2tN
b2RpZmllcnMsIHVuc2lnbmVkIGxvY2F0aW9uKQoreworICAgIGNvbnN0IFJlZlB0cjxLZXlFdmVu
dEluZm8+IGtleUV2ZW50SW5mbyA9IChsb2NhdGlvbiA9PSBET01LZXlMb2NhdGlvbk51bXBhZCkg
PyBrZXlQYWROYW1lKGtleVJlZikgOiBrZXlOYW1lKGtleVJlZik7CisgICAgaWYgKCFrZXlFdmVu
dEluZm8pCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IGNoYXIqIGtleU5hbWUgPSBrZXlF
dmVudEluZm8tPmtleU5hbWUuZGF0YSgpOworICAgIGNvbnN0IGNoYXIqIGtleVN0cmluZyA9IGtl
eUV2ZW50SW5mby0+a2V5U3RyaW5nLmRhdGEoKTsKKworICAgIEV2YXMqIGV2YXMgPSBlY29yZV9l
dmFzX2dldChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVdpbmRvdygp
KTsKKyAgICBzZXRFdmFzTW9kaWZpZXJzKGV2YXMsIHdrTW9kaWZpZXJzKTsKKyAgICBldmFzX2V2
ZW50X2ZlZWRfa2V5X2Rvd24oZXZhcywga2V5TmFtZSwga2V5TmFtZSwga2V5U3RyaW5nLCAwLCAw
LCAwKTsKKyAgICBldmFzX2V2ZW50X2ZlZWRfa2V5X3VwKGV2YXMsIGtleU5hbWUsIGtleU5hbWUs
IGtleVN0cmluZywgMCwgMSwgMCk7CisgICAgc2V0RXZhc01vZGlmaWVycyhldmFzLCAwKTsKK30K
KworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCit2b2lkIEV2ZW50U2VuZGVyUHJveHk6OmFkZFRv
dWNoUG9pbnQoaW50IHgsIGludCB5KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3Zv
aWQgRXZlbnRTZW5kZXJQcm94eTo6dXBkYXRlVG91Y2hQb2ludChpbnQgaW5kZXgsIGludCB4LCBp
bnQgeSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEV2ZW50U2VuZGVyUHJv
eHk6OnNldFRvdWNoTW9kaWZpZXIoV0tFdmVudE1vZGlmaWVycyBtb2RpZmllciwgYm9vbCBlbmFi
bGUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBFdmVudFNlbmRlclByb3h5
Ojp0b3VjaFN0YXJ0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEV2ZW50
U2VuZGVyUHJveHk6OnRvdWNoTW92ZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBFdmVudFNlbmRlclByb3h5Ojp0b3VjaEVuZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKwordm9pZCBFdmVudFNlbmRlclByb3h5Ojp0b3VjaENhbmNlbCgpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBFdmVudFNlbmRlclByb3h5OjpjbGVhclRvdWNoUG9p
bnRzKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEV2ZW50U2VuZGVyUHJv
eHk6OnJlbGVhc2VUb3VjaFBvaW50KGludCBpbmRleCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIEV2ZW50U2VuZGVyUHJveHk6OmNhbmNlbFRvdWNoUG9pbnQoaW50IGluZGV4
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRXZlbnRTZW5kZXJQcm94eTo6
c2V0VG91Y2hQb2ludFJhZGl1cyhpbnQgcmFkaXVzWCwgaW50IHJhZGl1c1kpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKworI2VuZGlmCisKK30K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153445</attachid>
            <date>2012-07-20 01:19:04 -0700</date>
            <delta_ts>2012-07-20 04:31:27 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>22116</size>
            <attacher name="Kangil Han">kangil.han</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBhYmMy
MzVlLi5iOTVlNjQzIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNTcgQEAKKzIwMTItMDctMTkgIEthbmdpbCBIYW4gIDxrYW5naWwu
aGFuQHNhbXN1bmcuY29tPgorCisgICAgICAgIFtFRkxdW1dLMl1bV1RSXSBJbXBsZW1lbnQgRXZl
bnRTZW5kZXJQcm94eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9OTE3MzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGlzIGlzIGFuIGluaXRpYWwgRUZMIHBvcnQgaW1wbGVtZW50YXRpb24gb2YgRXZlbnRT
ZW5kZXJQcm94eS4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvRXZlbnRTZW5kZXJQcm94
eS5oOgorICAgICAgICAoV1RSKToKKyAgICAgICAgKEV2ZW50U2VuZGVyUHJveHkpOgorICAgICAg
ICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvRXZlbnRTZW5kaW5nQ29udHJvbGxl
ci5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1FZmwuY21ha2U6CisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6
OlRlc3RDb250cm9sbGVyOjpUZXN0Q29udHJvbGxlcik6CisgICAgICAgIChXVFI6OlRlc3RDb250
cm9sbGVyOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKToK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2VmbC9FdmVudFNlbmRlclByb3h5RWZsLmNwcDog
QWRkZWQuCisgICAgICAgIChXVFIpOgorICAgICAgICAoV1RSRXZlbnQpOgorICAgICAgICAoV1RS
OjpXVFJFdmVudDo6V1RSRXZlbnQpOgorICAgICAgICAoV1RSOjpLZXlFdmVudEluZm86OktleUV2
ZW50SW5mbyk6CisgICAgICAgIChLZXlFdmVudEluZm8pOgorICAgICAgICAoV1RSOjpldmFzTW91
c2VCdXR0b24pOgorICAgICAgICAoV1RSOjpzZXRFdmFzTW9kaWZpZXJzKToKKyAgICAgICAgKFdU
Ujo6ZGlzcGF0Y2hNb3VzZURvd25FdmVudCk6CisgICAgICAgIChXVFI6OmRpc3BhdGNoTW91c2VV
cEV2ZW50KToKKyAgICAgICAgKFdUUjo6ZGlzcGF0Y2hNb3VzZU1vdmVFdmVudCk6CisgICAgICAg
IChXVFI6OmRpc3BhdGNoTW91c2VTY3JvbGxCeUV2ZW50KToKKyAgICAgICAgKFdUUjo6a2V5UGFk
TmFtZSk6CisgICAgICAgIChXVFI6OmtleU5hbWUpOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRl
clByb3h5OjpFdmVudFNlbmRlclByb3h5KToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94
eTo6dXBkYXRlQ2xpY2tDb3VudEZvckJ1dHRvbik6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVy
UHJveHk6OmRpc3BhdGNoRXZlbnQpOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5Ojpy
ZXBsYXlTYXZlZEV2ZW50cyk6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6OnNlbmRP
clF1ZXVlRXZlbnQpOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5Ojptb3VzZURvd24p
OgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5Ojptb3VzZVVwKToKKyAgICAgICAgKFdU
Ujo6RXZlbnRTZW5kZXJQcm94eTo6bW91c2VNb3ZlVG8pOgorICAgICAgICAoV1RSOjpFdmVudFNl
bmRlclByb3h5Ojptb3VzZVNjcm9sbEJ5KToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94
eTo6bGVhcEZvcndhcmQpOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5OjprZXlEb3du
KToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6YWRkVG91Y2hQb2ludCk6CisgICAg
ICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6OnVwZGF0ZVRvdWNoUG9pbnQpOgorICAgICAgICAo
V1RSOjpFdmVudFNlbmRlclByb3h5OjpzZXRUb3VjaE1vZGlmaWVyKToKKyAgICAgICAgKFdUUjo6
RXZlbnRTZW5kZXJQcm94eTo6dG91Y2hTdGFydCk6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVy
UHJveHk6OnRvdWNoTW92ZSk6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6OnRvdWNo
RW5kKToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6dG91Y2hDYW5jZWwpOgorICAg
ICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5OjpjbGVhclRvdWNoUG9pbnRzKToKKyAgICAgICAg
KFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6cmVsZWFzZVRvdWNoUG9pbnQpOgorICAgICAgICAoV1RS
OjpFdmVudFNlbmRlclByb3h5OjpjYW5jZWxUb3VjaFBvaW50KToKKyAgICAgICAgKFdUUjo6RXZl
bnRTZW5kZXJQcm94eTo6c2V0VG91Y2hQb2ludFJhZGl1cyk6CisKIDIwMTItMDctMTggIENocmlz
dG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVsLmNvbT4KIAogICAgICAgICBbQ01h
a2VdW0VGTF0gU2hvdWxkIHRyeSB0byBmaW5kIHRoZSBzYW1lIGxpYnNvdXAgdmVyc2lvbiBwdWxs
ZWQgYnkgamhidWlsZApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9FdmVudFNl
bmRlclByb3h5LmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0V2ZW50U2VuZGVyUHJveHkuaApp
bmRleCA4MTY4NTEzLi43NmIyMmU4IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0V2ZW50U2VuZGVyUHJveHkuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0V2ZW50U2Vu
ZGVyUHJveHkuaApAQCAtMzMsNiArMzMsOCBAQAogI2VsaWYgUExBVEZPUk0oR1RLKQogI2luY2x1
ZGUgPGdkay9nZGsuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjZWxpZiBQTEFURk9STShF
RkwpCisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdUUiB7CkBA
IC00MSw2ICs0Myw4IEBAIGNsYXNzIFRlc3RDb250cm9sbGVyOwogCiAjaWYgUExBVEZPUk0oR1RL
KQogc3RydWN0IFdUUkV2ZW50UXVldWVJdGVtOworI2VsaWYgUExBVEZPUk0oRUZMKQorc3RydWN0
IFdUUkV2ZW50OwogI2VuZGlmCiAKIGNsYXNzIEV2ZW50U2VuZGVyUHJveHkgewpAQCAtNzcsNyAr
ODEsNyBAQCBwcml2YXRlOgogICAgIGRvdWJsZSBjdXJyZW50RXZlbnRUaW1lKCkgeyByZXR1cm4g
bV90aW1lOyB9CiAgICAgdm9pZCB1cGRhdGVDbGlja0NvdW50Rm9yQnV0dG9uKGludCBidXR0b24p
OwogCi0jaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykKKyNpZiBQTEFURk9STShRVCkg
fHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpCiAgICAgdm9pZCByZXBsYXlTYXZlZEV2
ZW50cygpOwogI2VuZGlmCiAKQEAgLTg5LDYgKzkzLDkgQEAgcHJpdmF0ZToKICNlbGlmIFBMQVRG
T1JNKEdUSykKICAgICB2b2lkIHNlbmRPclF1ZXVlRXZlbnQoR2RrRXZlbnQqKTsKICAgICBHZGtF
dmVudCogY3JlYXRlTW91c2VCdXR0b25FdmVudChHZGtFdmVudFR5cGUsIHVuc2lnbmVkIGJ1dHRv
biwgV0tFdmVudE1vZGlmaWVycyk7CisjZWxpZiBQTEFURk9STShFRkwpCisgICAgdm9pZCBzZW5k
T3JRdWV1ZUV2ZW50KGNvbnN0IFdUUkV2ZW50Jik7CisgICAgdm9pZCBkaXNwYXRjaEV2ZW50KGNv
bnN0IFdUUkV2ZW50Jik7CiAjZW5kaWYKIAogICAgIGRvdWJsZSBtX3RpbWU7CkBAIC0xMTIsNiAr
MTE5LDkgQEAgcHJpdmF0ZToKICAgICBRUG9pbnQgbV90b3VjaFBvaW50UmFkaXVzOwogICAgIGJv
b2wgbV90b3VjaEFjdGl2ZTsKICNlbmRpZgorI2VsaWYgUExBVEZPUk0oRUZMKQorICAgIERlcXVl
PFdUUkV2ZW50PiBtX2V2ZW50UXVldWU7CisgICAgdW5zaWduZWQgbV9tb3VzZUJ1dHRvbjsKICNl
bmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9FdmVudFNlbmRpbmdDb250cm9sbGVyLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuaAppbmRleCA4ZWEyZGIwLi5iMDQw
YTQ5IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0V2
ZW50U2VuZGluZ0NvbnRyb2xsZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuaApAQCAtMzEsNyArMzEsNyBAQAogI2lu
Y2x1ZGUgPFdlYktpdDIvV0tHZW9tZXRyeS5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CiAKLSNpZiAhUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oUVQpICYmICFQTEFURk9STShHVEsp
CisjaWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKFFUKSAmJiAhUExBVEZPUk0oR1RLKSAm
JiAhUExBVEZPUk0oRUZMKQogI2RlZmluZSBVU0VfV0VCUFJPQ0VTU19FVkVOVF9TSU1VTEFUSU9O
CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybUVm
bC5jbWFrZSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXgg
OTQyYzAwMy4uNmM5MzA5MSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0
Zm9ybUVmbC5jbWFrZQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtRWZsLmNt
YWtlCkBAIC0xOSw2ICsxOSw3IEBAIFNFVChGb3J3YXJkaW5nTmV0d29ya0hlYWRlcnNGb3JXZWJL
aXRUZXN0UnVubmVyX05BTUUgZm9yd2FyZGluZy1oZWFkZXJzU291cEZvcldlCiBMSVNUKEFQUEVO
RCBXZWJLaXRUZXN0UnVubmVyX1NPVVJDRVMKICAgICAke1dFQktJVF9URVNUUlVOTkVSX0RJUn0v
Y2Fpcm8vVGVzdEludm9jYXRpb25DYWlyby5jcHAKIAorICAgICR7V0VCS0lUX1RFU1RSVU5ORVJf
RElSfS9lZmwvRXZlbnRTZW5kZXJQcm94eUVmbC5jcHAKICAgICAke1dFQktJVF9URVNUUlVOTkVS
X0RJUn0vZWZsL1BsYXRmb3JtV2ViVmlld0VmbC5jcHAKICAgICAke1dFQktJVF9URVNUUlVOTkVS
X0RJUn0vZWZsL1Rlc3RDb250cm9sbGVyRWZsLmNwcAogICAgICR7V0VCS0lUX1RFU1RSVU5ORVJf
RElSfS9lZmwvbWFpbi5jcHAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVz
dENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5j
cHAKaW5kZXggYzQ3YzQ3NS4uMGEyY2IyYiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9UZXN0Q29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0
Q29udHJvbGxlci5jcHAKQEAgLTgxLDcgKzgxLDcgQEAgVGVzdENvbnRyb2xsZXI6OlRlc3RDb250
cm9sbGVyKGludCBhcmdjLCBjb25zdCBjaGFyKiBhcmd2W10pCiAgICAgLCBtX2RpZFByaW50V2Vi
UHJvY2Vzc0NyYXNoZWRNZXNzYWdlKGZhbHNlKQogICAgICwgbV9zaG91bGRFeGl0V2hlbldlYlBy
b2Nlc3NDcmFzaGVzKHRydWUpCiAgICAgLCBtX2JlZm9yZVVubG9hZFJldHVyblZhbHVlKHRydWUp
Ci0jaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oR1RLKQorI2lm
IFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZP
Uk0oRUZMKQogICAgICwgbV9ldmVudFNlbmRlclByb3h5KG5ldyBFdmVudFNlbmRlclByb3h5KHRo
aXMpKQogI2VuZGlmCiB7CkBAIC01OTgsNyArNTk4LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6
ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5h
bWUKIAogV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZVN5
bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFt
ZSwgV0tUeXBlUmVmIG1lc3NhZ2VCb2R5KQogewotI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZP
Uk0oUVQpIHx8IFBMQVRGT1JNKEdUSykKKyNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKFFU
KSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkKICAgICBpZiAoV0tTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkV2ZW50U2VuZGVyIikpIHsKICAgICAgICAg
QVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQo
KSk7CiAgICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0
aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKZGlmZiAtLWdpdCBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwuY3BwIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9lZmwvRXZlbnRTZW5kZXJQcm94eUVmbC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ3YTJjNQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwuY3BwCkBAIC0wLDAgKzEsNDU3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBaYW4gRG9iZXJzZWsgPHphbmRvYmVy
c2VrQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBIb2xnZXIgSGFucyBQZXRlciBG
cmV5dGhlcgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgUHJvRlVTSU9OIEVtYmVkZGVkIFN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRXZlbnRTZW5kZXJQcm94eS5oIgorCisjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVdlYlZpZXcuaCIKKyNpbmNsdWRlICJUZXN0
Q29udHJvbGxlci5oIgorCisjaW5jbHVkZSA8RWNvcmUuaD4KKyNpbmNsdWRlIDxFY29yZV9FdmFz
Lmg+CisjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25B
cnJheVB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdUUiB7CisKK2VudW0gV1RSRXZlbnRUeXBl
IHsKKyAgICBXVFJFdmVudFR5cGVOb25lID0gMCwKKyAgICBXVFJFdmVudFR5cGVNb3VzZURvd24s
CisgICAgV1RSRXZlbnRUeXBlTW91c2VVcCwKKyAgICBXVFJFdmVudFR5cGVNb3VzZU1vdmUsCisg
ICAgV1RSRXZlbnRUeXBlTW91c2VTY3JvbGxCeSwKKyAgICBXVFJFdmVudFR5cGVMZWFwRm9yd2Fy
ZAorfTsKKworZW51bSBXVFJNb3VzZUJ1dHRvbiB7CisgICAgV1RSTW91c2VCdXR0b25Ob25lID0g
LTEsCisgICAgV1RSTW91c2VCdXR0b25MZWZ0LAorICAgIFdUUk1vdXNlQnV0dG9uTWlkZGxlLAor
ICAgIFdUUk1vdXNlQnV0dG9uUmlnaHQsCisgICAgV1RSTW91c2VCdXR0b25NaWRkbGVEdXBsaWNh
dGVkLAorfTsKKworZW51bSBFdmFzTW91c2VCdXR0b24geworICAgIEV2YXNNb3VzZUJ1dHRvbk5v
bmUgPSAwLAorICAgIEV2YXNNb3VzZUJ1dHRvbkxlZnQsCisgICAgRXZhc01vdXNlQnV0dG9uTWlk
ZGxlLAorICAgIEV2YXNNb3VzZUJ1dHRvblJpZ2h0Cit9OworCisvLyBLZXkgZXZlbnQgbG9jYXRp
b24gY29kZSBkZWZpbmVkIGluIERPTSBMZXZlbCAzLgorZW51bSBLZXlMb2NhdGlvbkNvZGUgewor
ICAgIERPTUtleUxvY2F0aW9uU3RhbmRhcmQgICAgICA9IDB4MDAsCisgICAgRE9NS2V5TG9jYXRp
b25MZWZ0ICAgICAgICAgID0gMHgwMSwKKyAgICBET01LZXlMb2NhdGlvblJpZ2h0ICAgICAgICAg
PSAweDAyLAorICAgIERPTUtleUxvY2F0aW9uTnVtcGFkICAgICAgICA9IDB4MDMKK307CisKK3N0
cnVjdCBXVFJFdmVudCB7CisgICAgV1RSRXZlbnRUeXBlIGV2ZW50VHlwZTsKKyAgICB1bnNpZ25l
ZCBkZWxheTsKKyAgICBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVyczsKKyAgICBpbnQgYnV0dG9u
OworICAgIGludCBob3Jpem9udGFsOworICAgIGludCB2ZXJ0aWNhbDsKKworICAgIFdUUkV2ZW50
KCkKKyAgICAgICAgOiBldmVudFR5cGUoV1RSRXZlbnRUeXBlTm9uZSkKKyAgICAgICAgLCBkZWxh
eSgwKQorICAgICAgICAsIG1vZGlmaWVycygwKQorICAgICAgICAsIGJ1dHRvbigtMSkKKyAgICAg
ICAgLCBob3Jpem9udGFsKC0xKQorICAgICAgICAsIHZlcnRpY2FsKC0xKQorICAgIHsKKyAgICB9
CisKKyAgICBXVFJFdmVudChXVFJFdmVudFR5cGUgZXZlbnRUeXBlLCB1bnNpZ25lZCBkZWxheSwg
V0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMsIGludCBidXR0b24pCisgICAgICAgIDogZXZlbnRU
eXBlKGV2ZW50VHlwZSkKKyAgICAgICAgLCBkZWxheShkZWxheSkKKyAgICAgICAgLCBtb2RpZmll
cnMobW9kaWZpZXJzKQorICAgICAgICAsIGJ1dHRvbihidXR0b24pCisgICAgICAgICwgaG9yaXpv
bnRhbCgtMSkKKyAgICAgICAgLCB2ZXJ0aWNhbCgtMSkKKyAgICB7CisgICAgfQorfTsKKworc3Ry
dWN0IEtleUV2ZW50SW5mbyA6IHB1YmxpYyBSZWZDb3VudGVkPEtleUV2ZW50SW5mbz4geworICAg
IEtleUV2ZW50SW5mbyhjb25zdCBDU3RyaW5nJiBrZXlOYW1lLCBjb25zdCBDU3RyaW5nJiBrZXlT
dHJpbmcpCisgICAgICAgIDoga2V5TmFtZShrZXlOYW1lKQorICAgICAgICAsIGtleVN0cmluZyhr
ZXlTdHJpbmcpCisgICAgeworICAgIH0KKworICAgIGNvbnN0IENTdHJpbmcga2V5TmFtZTsKKyAg
ICBjb25zdCBDU3RyaW5nIGtleVN0cmluZzsKK307CisKK3N0YXRpYyB1bnNpZ25lZCBldmFzTW91
c2VCdXR0b24odW5zaWduZWQgYnV0dG9uKQoreworICAgIGlmIChidXR0b24gPT0gV1RSTW91c2VC
dXR0b25MZWZ0KQorICAgICAgICByZXR1cm4gRXZhc01vdXNlQnV0dG9uTGVmdDsKKyAgICBpZiAo
YnV0dG9uID09IFdUUk1vdXNlQnV0dG9uTWlkZGxlKQorICAgICAgICByZXR1cm4gRXZhc01vdXNl
QnV0dG9uTWlkZGxlOworICAgIGlmIChidXR0b24gPT0gV1RSTW91c2VCdXR0b25SaWdodCkKKyAg
ICAgICAgcmV0dXJuIEV2YXNNb3VzZUJ1dHRvblJpZ2h0OworICAgIGlmIChidXR0b24gPT0gV1RS
TW91c2VCdXR0b25NaWRkbGVEdXBsaWNhdGVkKQorICAgICAgICByZXR1cm4gRXZhc01vdXNlQnV0
dG9uTWlkZGxlOworCisgICAgcmV0dXJuIEV2YXNNb3VzZUJ1dHRvbk5vbmU7Cit9CisKK3N0YXRp
YyB2b2lkIHNldEV2YXNNb2RpZmllcnMoRXZhcyogZXZhcywgV0tFdmVudE1vZGlmaWVycyB3a01v
ZGlmaWVycykKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciogbW9kaWZpZXJOYW1lc1tdID0geyAi
U2hpZnQiLCAiQ29udHJvbCIsICJBbHQiLCAiTWV0YSIgfTsKKyAgICBmb3IgKHVuc2lnbmVkIG1v
ZGlmaWVyID0gMDsgbW9kaWZpZXIgPCAoc2l6ZW9mKG1vZGlmaWVyTmFtZXMpIC8gc2l6ZW9mKGNo
YXIqKSk7ICsrbW9kaWZpZXIpIHsKKyAgICAgICAgaWYgKHdrTW9kaWZpZXJzICYgKDEgPDwgbW9k
aWZpZXIpKQorICAgICAgICAgICAgZXZhc19rZXlfbW9kaWZpZXJfb24oZXZhcywgbW9kaWZpZXJO
YW1lc1ttb2RpZmllcl0pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBldmFzX2tleV9tb2Rp
Zmllcl9vZmYoZXZhcywgbW9kaWZpZXJOYW1lc1ttb2RpZmllcl0pOworICAgIH0KK30KKworc3Rh
dGljIHZvaWQgZGlzcGF0Y2hNb3VzZURvd25FdmVudChFdmFzKiBldmFzLCB1bnNpZ25lZCBidXR0
b24sIFdLRXZlbnRNb2RpZmllcnMgd2tNb2RpZmllcnMpCit7CisgICAgc2V0RXZhc01vZGlmaWVy
cyhldmFzLCB3a01vZGlmaWVycyk7CisgICAgZXZhc19ldmVudF9mZWVkX21vdXNlX2Rvd24oZXZh
cywgYnV0dG9uLCBFVkFTX0JVVFRPTl9OT05FLCAwLCAwKTsKKyAgICBzZXRFdmFzTW9kaWZpZXJz
KGV2YXMsIDApOworfQorCitzdGF0aWMgdm9pZCBkaXNwYXRjaE1vdXNlVXBFdmVudChFdmFzKiBl
dmFzLCB1bnNpZ25lZCBidXR0b24sIFdLRXZlbnRNb2RpZmllcnMgd2tNb2RpZmllcnMpCit7Cisg
ICAgc2V0RXZhc01vZGlmaWVycyhldmFzLCB3a01vZGlmaWVycyk7CisgICAgZXZhc19ldmVudF9m
ZWVkX21vdXNlX3VwKGV2YXMsIGJ1dHRvbiwgRVZBU19CVVRUT05fTk9ORSwgMCwgMCk7CisgICAg
c2V0RXZhc01vZGlmaWVycyhldmFzLCAwKTsKK30KKworc3RhdGljIHZvaWQgZGlzcGF0Y2hNb3Vz
ZU1vdmVFdmVudChFdmFzKiBldmFzLCBpbnQgeCwgaW50IHkpCit7CisgICAgZXZhc19ldmVudF9m
ZWVkX21vdXNlX21vdmUoZXZhcywgeCwgeSwgMCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGRpc3Bh
dGNoTW91c2VTY3JvbGxCeUV2ZW50KEV2YXMqIGV2YXMsIGludCBob3Jpem9udGFsLCBpbnQgdmVy
dGljYWwpCit7CisgICAgY29uc3QgaW50IFNDUk9MTExFRlQgPSAtMTA7CisgICAgY29uc3QgaW50
IFNDUk9MTFJJR0hUID0gMTA7CisgICAgY29uc3QgaW50IFNDUk9MTERPV04gPSAtMTA7CisgICAg
Y29uc3QgaW50IFNDUk9MTFVQID0gMTA7CisKKyAgICBpZiAoaG9yaXpvbnRhbCA+IDApCisgICAg
ICAgIGV2YXNfZXZlbnRfZmVlZF9tb3VzZV93aGVlbChldmFzLCAxLCBTQ1JPTExMRUZULCAwLCAw
KTsKKyAgICBlbHNlIGlmIChob3Jpem9udGFsIDwgMCkKKyAgICAgICAgZXZhc19ldmVudF9mZWVk
X21vdXNlX3doZWVsKGV2YXMsIDEsIFNDUk9MTFJJR0hULCAwLCAwKTsKKworICAgIGlmICh2ZXJ0
aWNhbCA+IDApCisgICAgICAgIGV2YXNfZXZlbnRfZmVlZF9tb3VzZV93aGVlbChldmFzLCAwLCBT
Q1JPTExVUCwgMCwgMCk7CisgICAgZWxzZSBpZiAodmVydGljYWwgPCAwKQorICAgICAgICBldmFz
X2V2ZW50X2ZlZWRfbW91c2Vfd2hlZWwoZXZhcywgMCwgU0NST0xMRE9XTiwgMCwgMCk7Cit9CisK
K3N0YXRpYyBjb25zdCBQYXNzUmVmUHRyPEtleUV2ZW50SW5mbz4ga2V5UGFkTmFtZShXS1N0cmlu
Z1JlZiBrZXlSZWYpCit7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5
UmVmLCAibGVmdEFycm93IikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJ
bmZvKCJLUF9MZWZ0IiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhrZXlSZWYsICJyaWdodEFycm93IikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5
RXZlbnRJbmZvKCJLUF9SaWdodCIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcoa2V5UmVmLCAidXBBcnJvdyIpKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEtleUV2ZW50SW5mbygiS1BfVXAiLCAiIikpOworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKGtleVJlZiwgImRvd25BcnJvdyIpKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEtleUV2ZW50SW5mbygiS1BfRG93biIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcoa2V5UmVmLCAicGFnZVVwIikpCisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgS2V5RXZlbnRJbmZvKCJLUF9QcmlvciIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAicGFnZURvd24iKSkKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIktQX05leHQiLCAiIikpOworICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgImhvbWUiKSkKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIktQX0hvbWUiLCAiIikpOworICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgImVuZCIpKQorICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEtleUV2ZW50SW5mbygiS1BfRW5kIiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJpbnNlcnQiKSkKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIktQX0luc2VydCIsICIiKSk7CisgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAiZGVsZXRlIikpCisgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJLUF9EZWxldGUiLCAiIikpOworCisgICAgc2l6
ZV90IGJ1ZmZlclNpemUgPSBXS1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUoa2V5UmVm
KTsKKyAgICBPd25BcnJheVB0cjxjaGFyPiBidWZmZXIgPSBhZG9wdEFycmF5UHRyKG5ldyBjaGFy
W2J1ZmZlclNpemVdKTsKKyAgICBXS1N0cmluZ0dldFVURjhDU3RyaW5nKGtleVJlZiwgYnVmZmVy
LmdldCgpLCBidWZmZXJTaXplKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5m
byhidWZmZXIuZ2V0KCksIGJ1ZmZlci5nZXQoKSkpOworfQorCitzdGF0aWMgY29uc3QgUGFzc1Jl
ZlB0cjxLZXlFdmVudEluZm8+IGtleU5hbWUoV0tTdHJpbmdSZWYga2V5UmVmKQoreworICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgImxlZnRBcnJvdyIpKQorICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiTGVmdCIsICIiKSk7CisgICAg
aWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAicmlnaHRBcnJvdyIpKQor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiUmlnaHQiLCAiIikpOwor
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgInVwQXJyb3ciKSkK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIlVwIiwgIiIpKTsKKyAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJkb3duQXJyb3ciKSkK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIkRvd24iLCAiIikpOwor
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgInBhZ2VVcCIpKQor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiUHJpb3IiLCAiIikpOwor
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgInBhZ2VEb3duIikp
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJOZXh0IiwgIiIpKTsK
KyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJob21lIikpCisg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJIb21lIiwgIiIpKTsKKyAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJlbmQiKSkKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIkVuZCIsICIiKSk7CisgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAiaW5zZXJ0IikpCisgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJJbnNlcnQiLCAiIikpOworICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgImRlbGV0ZSIpKQorICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiRGVsZXRlIiwgIiIpKTsKKyAgICBp
ZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJwcmludFNjcmVlbiIpKQor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiUHJpbnQiLCAiIikpOwor
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgIm1lbnUiKSkKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIk1lbnUiLCAiIikpOworICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgIkYxIikpCisgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJGMSIsICIiKSk7CisgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAiRjIiKSkKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIkYyIiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJGMyIpKQorICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEtleUV2ZW50SW5mbygiRjMiLCAiIikpOworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKGtleVJlZiwgIkY0IikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
S2V5RXZlbnRJbmZvKCJGNCIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcoa2V5UmVmLCAiRjUiKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVu
dEluZm8oIkY1IiwgIiIpKTsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhr
ZXlSZWYsICJGNiIpKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygi
RjYiLCAiIikpOworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwg
IkY3IikpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJGNyIsICIi
KSk7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAiRjgiKSkK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIkY4IiwgIiIpKTsKKyAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJGOSIpKQorICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiRjkiLCAiIikpOworICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleVJlZiwgIkYxMCIpKQorICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEtleUV2ZW50SW5mbygiRjEwIiwgIiIpKTsKKyAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhrZXlSZWYsICJGMTEiKSkKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIkYxMSIsICIiKSk7CisgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcoa2V5UmVmLCAiRjEyIikpCisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgS2V5RXZlbnRJbmZvKCJGMTIiLCAiIikpOworCisgICAgc2l6ZV90IGJ1ZmZlclNpemUg
PSBXS1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUoa2V5UmVmKTsKKyAgICBPd25BcnJh
eVB0cjxjaGFyPiBidWZmZXIgPSBhZG9wdEFycmF5UHRyKG5ldyBjaGFyW2J1ZmZlclNpemVdKTsK
KyAgICBXS1N0cmluZ0dldFVURjhDU3RyaW5nKGtleVJlZiwgYnVmZmVyLmdldCgpLCBidWZmZXJT
aXplKTsKKyAgICBjaGFyIGNoYXJDb2RlID0gYnVmZmVyLmdldCgpWzBdOworCisgICAgaWYgKGNo
YXJDb2RlID09ICdcbicgfHwgY2hhckNvZGUgPT0gJ1xyJykKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBLZXlFdmVudEluZm8oIlJldHVybiIsICJcciIpKTsKKyAgICBpZiAoY2hhckNvZGUg
PT0gJ1x0JykKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oIlRhYiIs
ICJcdCIpKTsKKyAgICBpZiAoY2hhckNvZGUgPT0gJ1x4OCcpCisgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgS2V5RXZlbnRJbmZvKCJCYWNrU3BhY2UiLCAiXHg4IikpOworICAgIGlmIChjaGFy
Q29kZSA9PSAnICcpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5RXZlbnRJbmZvKCJz
cGFjZSIsICIgIikpOworCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlFdmVudEluZm8oYnVm
ZmVyLmdldCgpLCBidWZmZXIuZ2V0KCkpKTsKK30KKworRXZlbnRTZW5kZXJQcm94eTo6RXZlbnRT
ZW5kZXJQcm94eShUZXN0Q29udHJvbGxlciogdGVzdENvbnRyb2xsZXIpCisgICAgOiBtX3Rlc3RD
b250cm9sbGVyKHRlc3RDb250cm9sbGVyKQorICAgICwgbV90aW1lKDApCisgICAgLCBtX2xlZnRN
b3VzZUJ1dHRvbkRvd24oZmFsc2UpCisgICAgLCBtX2NsaWNrQ291bnQoMCkKKyAgICAsIG1fY2xp
Y2tUaW1lKDApCisgICAgLCBtX2NsaWNrQnV0dG9uKFdUUk1vdXNlQnV0dG9uTm9uZSkKKyAgICAs
IG1fbW91c2VCdXR0b24oV1RSTW91c2VCdXR0b25Ob25lKQoreworfQorCit2b2lkIEV2ZW50U2Vu
ZGVyUHJveHk6OnVwZGF0ZUNsaWNrQ291bnRGb3JCdXR0b24oaW50IGJ1dHRvbikKK3sKKyAgICBp
ZiAobV90aW1lIC0gbV9jbGlja1RpbWUgPCAxICYmIG1fcG9zaXRpb24gPT0gbV9jbGlja1Bvc2l0
aW9uICYmIGJ1dHRvbiA9PSBtX2NsaWNrQnV0dG9uKSB7CisgICAgICAgICsrbV9jbGlja0NvdW50
OworICAgICAgICBtX2NsaWNrVGltZSA9IG1fdGltZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIG1fY2xpY2tDb3VudCA9IDE7CisgICAgbV9jbGlja1RpbWUgPSBtX3RpbWU7CisgICAg
bV9jbGlja1Bvc2l0aW9uID0gbV9wb3NpdGlvbjsKKyAgICBtX2NsaWNrQnV0dG9uID0gYnV0dG9u
OworfQorCit2b2lkIEV2ZW50U2VuZGVyUHJveHk6OmRpc3BhdGNoRXZlbnQoY29uc3QgV1RSRXZl
bnQmIGV2ZW50KQoreworICAgIGlmIChldmVudC5ldmVudFR5cGUgPT0gV1RSRXZlbnRUeXBlTW91
c2VEb3duKQorICAgICAgICBkaXNwYXRjaE1vdXNlRG93bkV2ZW50KGVjb3JlX2V2YXNfZ2V0KG1f
dGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtV2luZG93KCkpLCBldmVudC5i
dXR0b24sIGV2ZW50Lm1vZGlmaWVycyk7CisgICAgZWxzZSBpZiAoZXZlbnQuZXZlbnRUeXBlID09
IFdUUkV2ZW50VHlwZU1vdXNlVXApCisgICAgICAgIGRpc3BhdGNoTW91c2VVcEV2ZW50KGVjb3Jl
X2V2YXNfZ2V0KG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtV2luZG93
KCkpLCBldmVudC5idXR0b24sIGV2ZW50Lm1vZGlmaWVycyk7CisgICAgZWxzZSBpZiAoZXZlbnQu
ZXZlbnRUeXBlID09IFdUUkV2ZW50VHlwZU1vdXNlTW92ZSkKKyAgICAgICAgZGlzcGF0Y2hNb3Vz
ZU1vdmVFdmVudChlY29yZV9ldmFzX2dldChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygp
LT5wbGF0Zm9ybVdpbmRvdygpKSwgc3RhdGljX2Nhc3Q8aW50PihtX3Bvc2l0aW9uLngpLCBzdGF0
aWNfY2FzdDxpbnQ+KG1fcG9zaXRpb24ueSkpOworICAgIGVsc2UgaWYgKGV2ZW50LmV2ZW50VHlw
ZSA9PSBXVFJFdmVudFR5cGVNb3VzZVNjcm9sbEJ5KQorICAgICAgICBkaXNwYXRjaE1vdXNlU2Ny
b2xsQnlFdmVudChlY29yZV9ldmFzX2dldChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygp
LT5wbGF0Zm9ybVdpbmRvdygpKSwgZXZlbnQuaG9yaXpvbnRhbCwgZXZlbnQudmVydGljYWwpOwor
fQorCit2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnJlcGxheVNhdmVkRXZlbnRzKCkKK3sKKyAgICB3
aGlsZSAoIW1fZXZlbnRRdWV1ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgV1RSRXZlbnQgZXZlbnQg
PSBtX2V2ZW50UXVldWUudGFrZUZpcnN0KCk7CisgICAgICAgIGlmIChldmVudC5kZWxheSkKKyAg
ICAgICAgICAgIHVzbGVlcChldmVudC5kZWxheSAqIDEwMDApOworCisgICAgICAgIGRpc3BhdGNo
RXZlbnQoZXZlbnQpOworICAgIH0KK30KKwordm9pZCBFdmVudFNlbmRlclByb3h5OjpzZW5kT3JR
dWV1ZUV2ZW50KGNvbnN0IFdUUkV2ZW50JiBldmVudCkKK3sKKyAgICBpZiAobV9ldmVudFF1ZXVl
LmlzRW1wdHkoKSB8fCAhbV9ldmVudFF1ZXVlLmxhc3QoKS5kZWxheSkgeworICAgICAgICBkaXNw
YXRjaEV2ZW50KGV2ZW50KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fZXZlbnRR
dWV1ZS5hcHBlbmQoZXZlbnQpOworICAgIHJlcGxheVNhdmVkRXZlbnRzKCk7Cit9CisKK3ZvaWQg
RXZlbnRTZW5kZXJQcm94eTo6bW91c2VEb3duKHVuc2lnbmVkIGJ1dHRvbiwgV0tFdmVudE1vZGlm
aWVycyB3a01vZGlmaWVycykKK3sKKyAgICBpZiAobV9tb3VzZUJ1dHRvbiA9PSBidXR0b24pCisg
ICAgICAgIHJldHVybjsKKworICAgIG1fbW91c2VCdXR0b24gPSBidXR0b247CisgICAgdXBkYXRl
Q2xpY2tDb3VudEZvckJ1dHRvbihidXR0b24pOworCisgICAgc2VuZE9yUXVldWVFdmVudChXVFJF
dmVudChXVFJFdmVudFR5cGVNb3VzZURvd24sIDAsIHdrTW9kaWZpZXJzLCBldmFzTW91c2VCdXR0
b24oYnV0dG9uKSkpOworfQorCit2b2lkIEV2ZW50U2VuZGVyUHJveHk6Om1vdXNlVXAodW5zaWdu
ZWQgYnV0dG9uLCBXS0V2ZW50TW9kaWZpZXJzIHdrTW9kaWZpZXJzKQoreworICAgIHNlbmRPclF1
ZXVlRXZlbnQoV1RSRXZlbnQoV1RSRXZlbnRUeXBlTW91c2VVcCwgMCwgd2tNb2RpZmllcnMsIGV2
YXNNb3VzZUJ1dHRvbihidXR0b24pKSk7CisKKyAgICBpZiAobV9tb3VzZUJ1dHRvbiA9PSBidXR0
b24pCisgICAgICAgIG1fbW91c2VCdXR0b24gPSBXVFJNb3VzZUJ1dHRvbk5vbmU7CisKKyAgICBt
X2NsaWNrUG9zaXRpb24gPSBtX3Bvc2l0aW9uOworICAgIG1fY2xpY2tUaW1lID0gZWNvcmVfdGlt
ZV9nZXQoKTsKK30KKwordm9pZCBFdmVudFNlbmRlclByb3h5Ojptb3VzZU1vdmVUbyhkb3VibGUg
eCwgZG91YmxlIHkpCit7CisgICAgbV9wb3NpdGlvbi54ID0geDsKKyAgICBtX3Bvc2l0aW9uLnkg
PSB5OworCisgICAgc2VuZE9yUXVldWVFdmVudChXVFJFdmVudChXVFJFdmVudFR5cGVNb3VzZU1v
dmUsIDAsIDAsIFdUUk1vdXNlQnV0dG9uTm9uZSkpOworfQorCit2b2lkIEV2ZW50U2VuZGVyUHJv
eHk6Om1vdXNlU2Nyb2xsQnkoaW50IGhvcml6b250YWwsIGludCB2ZXJ0aWNhbCkKK3sKKyAgICBX
VFJFdmVudCBldmVudChXVFJFdmVudFR5cGVNb3VzZVNjcm9sbEJ5LCAwLCAwLCBXVFJNb3VzZUJ1
dHRvbk5vbmUpOworICAgIGV2ZW50Lmhvcml6b250YWwgPSBob3Jpem9udGFsOworICAgIGV2ZW50
LnZlcnRpY2FsID0gdmVydGljYWw7CisgICAgc2VuZE9yUXVldWVFdmVudChldmVudCk7Cit9CisK
K3ZvaWQgRXZlbnRTZW5kZXJQcm94eTo6bGVhcEZvcndhcmQoaW50IG1pbGxpc2Vjb25kcykKK3sK
KyAgICBpZiAobV9ldmVudFF1ZXVlLmlzRW1wdHkoKSkKKyAgICAgICAgbV9ldmVudFF1ZXVlLmFw
cGVuZChXVFJFdmVudChXVFJFdmVudFR5cGVMZWFwRm9yd2FyZCwgbWlsbGlzZWNvbmRzLCAwLCBX
VFJNb3VzZUJ1dHRvbk5vbmUpKTsKKworICAgIG1fdGltZSArPSBtaWxsaXNlY29uZHMgLyAxMDAw
LjA7Cit9CisKK3ZvaWQgRXZlbnRTZW5kZXJQcm94eTo6a2V5RG93bihXS1N0cmluZ1JlZiBrZXlS
ZWYsIFdLRXZlbnRNb2RpZmllcnMgd2tNb2RpZmllcnMsIHVuc2lnbmVkIGxvY2F0aW9uKQorewor
ICAgIGNvbnN0IFJlZlB0cjxLZXlFdmVudEluZm8+IGtleUV2ZW50SW5mbyA9IChsb2NhdGlvbiA9
PSBET01LZXlMb2NhdGlvbk51bXBhZCkgPyBrZXlQYWROYW1lKGtleVJlZikgOiBrZXlOYW1lKGtl
eVJlZik7CisgICAgaWYgKCFrZXlFdmVudEluZm8pCisgICAgICAgIHJldHVybjsKKworICAgIGNv
bnN0IGNoYXIqIGtleU5hbWUgPSBrZXlFdmVudEluZm8tPmtleU5hbWUuZGF0YSgpOworICAgIGNv
bnN0IGNoYXIqIGtleVN0cmluZyA9IGtleUV2ZW50SW5mby0+a2V5U3RyaW5nLmRhdGEoKTsKKwor
ICAgIEV2YXMqIGV2YXMgPSBlY29yZV9ldmFzX2dldChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2Vi
VmlldygpLT5wbGF0Zm9ybVdpbmRvdygpKTsKKyAgICBzZXRFdmFzTW9kaWZpZXJzKGV2YXMsIHdr
TW9kaWZpZXJzKTsKKyAgICBldmFzX2V2ZW50X2ZlZWRfa2V5X2Rvd24oZXZhcywga2V5TmFtZSwg
a2V5TmFtZSwga2V5U3RyaW5nLCAwLCAwLCAwKTsKKyAgICBldmFzX2V2ZW50X2ZlZWRfa2V5X3Vw
KGV2YXMsIGtleU5hbWUsIGtleU5hbWUsIGtleVN0cmluZywgMCwgMSwgMCk7CisgICAgc2V0RXZh
c01vZGlmaWVycyhldmFzLCAwKTsKK30KKworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCit2b2lk
IEV2ZW50U2VuZGVyUHJveHk6OmFkZFRvdWNoUG9pbnQoaW50IHgsIGludCB5KQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRXZlbnRTZW5kZXJQcm94eTo6dXBkYXRlVG91Y2hQ
b2ludChpbnQgaW5kZXgsIGludCB4LCBpbnQgeSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnNldFRvdWNoTW9kaWZpZXIoV0tFdmVudE1vZGlm
aWVycyBtb2RpZmllciwgYm9vbCBlbmFibGUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBFdmVudFNlbmRlclByb3h5Ojp0b3VjaFN0YXJ0KCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnRvdWNoTW92ZSgpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBFdmVudFNlbmRlclByb3h5Ojp0b3VjaEVuZCgp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBFdmVudFNlbmRlclByb3h5Ojp0
b3VjaENhbmNlbCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBFdmVudFNl
bmRlclByb3h5OjpjbGVhclRvdWNoUG9pbnRzKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnJlbGVhc2VUb3VjaFBvaW50KGludCBpbmRleCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEV2ZW50U2VuZGVyUHJveHk6OmNh
bmNlbFRvdWNoUG9pbnQoaW50IGluZGV4KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgRXZlbnRTZW5kZXJQcm94eTo6c2V0VG91Y2hQb2ludFJhZGl1cyhpbnQgcmFkaXVzWCwg
aW50IHJhZGl1c1kpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworI2VuZGlmCisKK30K
</data>

          </attachment>
      

    </bug>

</bugzilla>