<?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>32169</bug_id>
          
          <creation_ts>2009-12-04 13:07:54 -0800</creation_ts>
          <short_desc>Implement TextCodec for WINCE port</short_desc>
          <delta_ts>2010-06-25 01:30:24 -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>Text</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>Other</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="Yong Li">yong.li.webkit</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>joybro201</cc>
    
    <cc>paroga</cc>
    
    <cc>skyul</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>168898</commentid>
    <comment_count>0</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-12-04 13:07:54 -0800</bug_when>
    <thetext>Patch will be post soon</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169308</commentid>
    <comment_count>1</comment_count>
      <attachid>44414</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-12-07 06:55:46 -0800</bug_when>
    <thetext>Created attachment 44414
The patch (style issues fixed)

fixed style issues: 1) header file order, 2) new namespace indentation style

See bug 27371</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169310</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-07 06:58:11 -0800</bug_when>
    <thetext>Attachment 44414 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/text/wince/TextCodecWince.cpp:28:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/platform/text/wince/TextCodecWince.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/platform/text/wince/TextCodecWince.cpp:125:  S_OK is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169336</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-12-07 09:15:02 -0800</bug_when>
    <thetext>&gt; WebCore/platform/text/wince/TextCodecWince.cpp:125:  S_OK is incorrectly named.
&gt; Don&apos;t use underscores in your identifier names.  [readability/naming] [4]

False positive filed: https://bugs.webkit.org/show_bug.cgi?id=32225</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174991</commentid>
    <comment_count>4</comment_count>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2009-12-26 23:33:27 -0800</bug_when>
    <thetext>attachment 44414:
Two headers are missing in TextCodecWince.cpp:
#include &lt;wtf/HashMap.h&gt;
#include &lt;wtf/HashSet.h&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177589</commentid>
    <comment_count>5</comment_count>
      <attachid>44414</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2010-01-06 08:23:42 -0800</bug_when>
    <thetext>Comment on attachment 44414
The patch (style issues fixed)

I think Alexey should also have a look at this, but I&apos;ll review the first pass.

&gt; diff --git a/WebCore/platform/text/wince/TextCodecWince.cpp b/WebCore/platform/text/wince/TextCodecWince.cpp
&gt; [...]
&gt; +#include &quot;ce_textcodecs.h&quot;
&gt; +#include &quot;CString.h&quot;
&gt; +#include &lt;mlang.h&gt;
&gt; +#include &quot;PlatformString.h&quot;
&gt; +#include &quot;StringHash.h&quot;
&gt; +#include &lt;winbase.h&gt;
&gt; +#include &lt;winnls.h&gt;
&gt; +#include &lt;wtf/unicode/UTF8.h&gt;

The &lt;mlang.h&gt; header should go between &quot;StringHash.h&quot; and &lt;winbse.h&gt;.

Apparently some #include statements are missing here per Comment #4:

#include &lt;wtf/HashMap.h&gt;
#include &lt;wtf/HashSet.h&gt;

&gt; +namespace WebCore {
&gt; +
&gt; +extern IMultiLanguage* getMultiLanguageInterface();

Why isn&apos;t this method declared in a header?  Is it defined in WebCore/platform/graphics/wince/FontCacheWince.cpp.  If it&apos;s a utility method, I think it should be moved to its own header and source file.

&gt; +// Usage: a lookup table used to get CharsetInfo with code page ID)
&gt; +// Key: code page ID. Value: charset information

There should be a period at the end of the sentences in the comments.

&gt; +// Usage: a map that stores charsets that are supported by system. Sorted by name.
&gt; +// Key: charset. Value: code page ID

Missing a period on the last comment.

&gt; +LanguageManager&amp; languageManager()
&gt; +{
&gt; +    static LanguageManager lm;
&gt; +    return lm;
&gt; +}

This method should be static, too, since it isn&apos;t used outside this source file.  (Or won&apos;t that work with the friend declaration in LanguageManager?)

&gt; +    // MS says the flag must be 0 for the following code pages

Period at the end of the comment.  Would be nice to spell out &quot;MS&quot; as &quot;Microsoft&quot;.


&gt; +    if (codePage == CP_UTF8) {
&gt; +        if (canBeFirstTime) {
&gt; +            // Handle BOM

Need a period at the end of the comment.

&gt; +        // process ascii characters at beginning

Please capitalize &quot;Process&quot; and add a period to the comment.

&gt; +    // FIXME: we need to implement UnencodableHandling: QuestionMarksForUnencodables, EntitiesForUnencodables
&gt; +    // , and URLEncodedEntitiesForUnencodables

Please put this comment on one line and add a period at the end.

&gt; diff --git a/WebCore/platform/text/wince/TextCodecWince.h b/WebCore/platform/text/wince/TextCodecWince.h
&gt; +    virtual String decode(const char*, size_t length, bool flush, bool stopOnError, bool&amp; sawError);
&gt; +    virtual CString encode(const UChar*, size_t length, UnencodableHandling);
&gt; +
&gt; +

Extra blank line here is not needed.

&gt; +    struct EncodingInfo {
&gt; +        String m_encoding;
&gt; +        String m_friendlyName;
&gt; +    };
&gt; +
&gt; +    struct EncodingReceiver {
&gt; +        // Return false to stop enumerating
&gt; +        virtual bool receive(const char* encoding, const wchar_t* friendlyName, unsigned int codePage) = 0;
&gt; +    };

Why is receive() a pure virtual function?  It&apos;s implementation doesn&apos;t seem optional in enumerateSupportedEncodings().

The &quot;Return false...&quot; comment is a sentence and should end with a period.

r- to address getMultiLanguageInterface() declaration and EncodingReceiver::receive() being pure virtual.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177590</commentid>
    <comment_count>6</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2010-01-06 08:25:53 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 44414 [details])
&gt; &gt; +        // process ascii characters at beginning
&gt; 
&gt; Please capitalize &quot;Process&quot; and add a period to the comment.

&quot;ASCII&quot; should be all-caps as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182307</commentid>
    <comment_count>7</comment_count>
      <attachid>46925</attachid>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2010-01-19 10:38:20 -0800</bug_when>
    <thetext>Created attachment 46925
The patch (additonal style issues fixed)

(In reply to comment #5)
&gt; Why isn&apos;t this method declared in a header?  Is it defined in
&gt; WebCore/platform/graphics/wince/FontCacheWince.cpp.  If it&apos;s a utility method,
&gt; I think it should be moved to its own header and source file.
Where is the best place for this method? Isn&apos;t it better to add it as static function in TextCodec or FontCache?

&gt; Why is receive() a pure virtual function?  It&apos;s implementation doesn&apos;t seem
&gt; optional in enumerateSupportedEncodings().
What is wrong with an abstract class at this place?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182308</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-19 10:40:49 -0800</bug_when>
    <thetext>Attachment 46925 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/text/wince/TextCodecWince.cpp:28:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182359</commentid>
    <comment_count>9</comment_count>
      <attachid>46925</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-01-19 11:56:53 -0800</bug_when>
    <thetext>Comment on attachment 46925
The patch (additonal style issues fixed)

WinCE should be capitalized as WinCE, not Wince, in file names and class names.

The function from FontCacheWinCE.cpp should be declared in FontCacheWinCE.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184639</commentid>
    <comment_count>10</comment_count>
      <attachid>47422</attachid>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2010-01-26 11:12:55 -0800</bug_when>
    <thetext>Created attachment 47422
The patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184641</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-26 11:19:37 -0800</bug_when>
    <thetext>Attachment 47422 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/text/wince/TextCodecWince.cpp:28:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184743</commentid>
    <comment_count>12</comment_count>
      <attachid>47422</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-01-26 14:34:15 -0800</bug_when>
    <thetext>Comment on attachment 47422
The patch

This looks non-harmful.  I can&apos;t be sure it&apos;s error-free, but that&apos;s what testing is for.  We have various TextCodec tests already.

When is WINCE going to have a working DumpRenderTree? And a buildbot?  These tools are needed before we can land many more WINCE patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184744</commentid>
    <comment_count>13</comment_count>
      <attachid>47422</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-01-26 14:34:51 -0800</bug_when>
    <thetext>Comment on attachment 47422
The patch

Nevermind.  You never fixed Darin&apos;s requested rename.  r-</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184986</commentid>
    <comment_count>14</comment_count>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2010-01-27 00:42:36 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; When is WINCE going to have a working DumpRenderTree? And a buildbot?  These
&gt; tools are needed before we can land many more WINCE patches.
The main problem is the missing build system: https://lists.webkit.org/pipermail/webkit-dev/2010-January/011160.html. Maybe you can get an answer...

(In reply to comment #13)
&gt; Nevermind.  You never fixed Darin&apos;s requested rename.  r-
If we rename this file we have to rename all files which are alredy in the tree. Why nobody complained at the other files?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210253</commentid>
    <comment_count>15</comment_count>
      <attachid>47422</attachid>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2010-04-08 10:12:59 -0700</bug_when>
    <thetext>Comment on attachment 47422
The patch

Setting back to r? since I didn&apos;t get a response for months. :-/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210257</commentid>
    <comment_count>16</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2010-04-08 10:28:08 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 47422 [details])
&gt; Setting back to r? since I didn&apos;t get a response for months. :-/

Could you mention me in the Change Log? Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210269</commentid>
    <comment_count>17</comment_count>
      <attachid>52880</attachid>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2010-04-08 10:57:43 -0700</bug_when>
    <thetext>Created attachment 52880
The patch

(In reply to comment #16)
&gt; Could you mention me in the Change Log? Thanks.
Done!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210270</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-08 10:58:19 -0700</bug_when>
    <thetext>Attachment 52880 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/text/wince/TextCodecWince.cpp:28:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 5 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>210273</commentid>
    <comment_count>19</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2010-04-08 11:01:48 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; Created an attachment (id=52880) [details]
&gt; The patch
&gt; (In reply to comment #16)
&gt; &gt; Could you mention me in the Change Log? Thanks.
&gt; Done!

thanks a lot</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210285</commentid>
    <comment_count>20</comment_count>
      <attachid>52880</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-04-08 11:24:22 -0700</bug_when>
    <thetext>Comment on attachment 52880
The patch

I think the question you mentioned is this:

&gt; If we rename this file we have to rename all files which are alredy in the
&gt; tree. 

That seems like a good thing to do, yes. It doesn&apos;t have to be done at once. Definitely not in this patch.

&gt; Why nobody complained at the other files?

We should do better this time, now that someone noticed the problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210289</commentid>
    <comment_count>21</comment_count>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2010-04-08 11:28:55 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (From update of attachment 52880 [details])
&gt; I think the question you mentioned is this:
&gt; 
&gt; &gt; If we rename this file we have to rename all files which are alredy in the
&gt; &gt; tree. 
&gt; 
&gt; That seems like a good thing to do, yes. It doesn&apos;t have to be done at once.
&gt; Definitely not in this patch.
&gt; 
&gt; &gt; Why nobody complained at the other files?
&gt; 
&gt; We should do better this time, now that someone noticed the problem.
Should I create a patch for renaming all WinCE files?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210301</commentid>
    <comment_count>22</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-04-08 11:55:06 -0700</bug_when>
    <thetext>You should feel free to make a patch if you want to, yes. There are some caveats with changing file name case in subversion, but if I remember correctly, the problems only occur when landing from a case insensitive file system.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210303</commentid>
    <comment_count>23</comment_count>
      <attachid>52884</attachid>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2010-04-08 11:58:20 -0700</bug_when>
    <thetext>Created attachment 52884
The patch (changed Wince to WinCE)

I now changed the name to WinCE and also changed &quot;CString.h&quot; to &lt;wtf/text/CString.h&gt; (http://trac.webkit.org/changeset/56825)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210304</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-08 12:01:50 -0700</bug_when>
    <thetext>Attachment 52884 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/text/wince/TextCodecWinCE.cpp:28:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 5 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>210313</commentid>
    <comment_count>25</comment_count>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2010-04-08 12:19:22 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; You should feel free to make a patch if you want to, yes. There are some
&gt; caveats with changing file name case in subversion, but if I remember
&gt; correctly, the problems only occur when landing from a case insensitive file
&gt; system.
This problem occurs only on windows because of the data in the &quot;.svn&quot; folder.
One question before I start: Are two big patches (WTF/JSC + WebCore) changing all WinCE filenames and classnames ok?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210553</commentid>
    <comment_count>26</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2010-04-08 21:05:05 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; This problem occurs only on windows because of the data in the &quot;.svn&quot; folder.
&gt; One question before I start: Are two big patches (WTF/JSC + WebCore) changing
&gt; all WinCE filenames and classnames ok?

It depends on how big each patch is.  Smaller patches are easier to review.  There should be a balance between one patch per file rename, and one patch per JavaScriptCore or WebCore directory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210620</commentid>
    <comment_count>27</comment_count>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2010-04-09 01:04:46 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; It depends on how big each patch is.  Smaller patches are easier to review. 
&gt; There should be a balance between one patch per file rename, and one patch per
&gt; JavaScriptCore or WebCore directory.
See bug 37287.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211561</commentid>
    <comment_count>28</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2010-04-11 23:53:12 -0700</bug_when>
    <thetext>The patch includes native support for EUC-JP and Thai codecs (CP874, TIS620 and MACTHAI). I remember these codecs are moved to libce, but I can&apos;t find the repository of libce. Patrick, do you know where libce is hosted?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211578</commentid>
    <comment_count>29</comment_count>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2010-04-12 01:42:24 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; The patch includes native support for EUC-JP and Thai codecs (CP874, TIS620 and
&gt; MACTHAI). I remember these codecs are moved to libce, but I can&apos;t find the
&gt; repository of libce. Patrick, do you know where libce is hosted?
No, I don&apos;t know. I use the stuff from the old Torch Mobile at http://code.staikos.net/ (offline in the meantime).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211581</commentid>
    <comment_count>30</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2010-04-12 02:52:11 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; (In reply to comment #28)
&gt; &gt; The patch includes native support for EUC-JP and Thai codecs (CP874, TIS620 and
&gt; &gt; MACTHAI). I remember these codecs are moved to libce, but I can&apos;t find the
&gt; &gt; repository of libce. Patrick, do you know where libce is hosted?
&gt; No, I don&apos;t know. I use the stuff from the old Torch Mobile at
&gt; http://code.staikos.net/ (offline in the meantime).

You can see the reason why EUC_JP.cpp and Thai.cpp are moved out from bug 27371. To make it build, we need libce which has these two files. Unfortunately, it seems libce is no longer hosted by Torch Mobile.

We have two options here:

1) Remove native supports of EUC_JP and Thai from the patch. This makes sense because these codecs are seldom used.

2) Find libce which include these codecs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212323</commentid>
    <comment_count>31</comment_count>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2010-04-14 04:48:26 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; You can see the reason why EUC_JP.cpp and Thai.cpp are moved out from bug
&gt; 27371. To make it build, we need libce which has these two files.
&gt; Unfortunately, it seems libce is no longer hosted by Torch Mobile.
&gt; 
&gt; We have two options here:
&gt; 
&gt; 1) Remove native supports of EUC_JP and Thai from the patch. This makes sense
&gt; because these codecs are seldom used.
&gt; 
&gt; 2) Find libce which include these codecs.
I don&apos;t like these non-native codecs too. I&apos;ll remove them and post a new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240461</commentid>
    <comment_count>32</comment_count>
      <attachid>52884</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-20 10:23:51 -0700</bug_when>
    <thetext>Comment on attachment 52884
The patch (changed Wince to WinCE)

Based on the discussion above, this patch appears to have been r+ed by Eric Seidel provisional on adopting Darin&apos;s renaming comment, which it appears you have done.  Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242887</commentid>
    <comment_count>33</comment_count>
      <attachid>52884</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-06-25 01:30:17 -0700</bug_when>
    <thetext>Comment on attachment 52884
The patch (changed Wince to WinCE)

Clearing flags on attachment: 52884

Committed r61839: &lt;http://trac.webkit.org/changeset/61839&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242888</commentid>
    <comment_count>34</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-06-25 01:30:24 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44414</attachid>
            <date>2009-12-07 06:55:46 -0800</date>
            <delta_ts>2010-01-06 08:23:41 -0800</delta_ts>
            <desc>The patch (style issues fixed)</desc>
            <filename>32169.patch</filename>
            <type>text/plain</type>
            <size>21259</size>
            <attacher name="Yong Li">yong.li.webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NTk3Nzg4MS4uOTQyZmYxOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAwOS0xMC0xNiAgWW9uZyBMaSAgPHlv
bmcubGkud2Via2l0QGdtYWlsLmNvbT4KKworICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IFRleHRDb2RlY3MgZm9yIFdJTkNFIHBvcnQuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjE2OQorCisg
ICAgICAgICogcGxhdGZvcm0vdGV4dC93aW5jZS9UZXh0Q29kZWNXaW5jZS5jcHA6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL3RleHQvd2luY2UvVGV4dENvZGVjV2luY2UuaDogQWRkZWQuCisK
IDIwMDktMTItMDcgIEd1c3Rhdm8gTm9yb25oYSBTaWx2YSAgPGduc0Bnbm9tZS5vcmc+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgWGFuIExvcGV6LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L3dpbmNlL1RleHRDb2RlY1dpbmNlLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC93
aW5jZS9UZXh0Q29kZWNXaW5jZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uZWYzODYxYQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC93aW5j
ZS9UZXh0Q29kZWNXaW5jZS5jcHAKQEAgLTAsMCArMSw0ODMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDctMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaSB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlRleHRDb2RlY1dpbmNlLmgiCisKKyNpbmNsdWRlICJjZV90ZXh0Y29kZWNzLmgiCisjaW5j
bHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgPG1sYW5nLmg+CisjaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSA8d2luYmFzZS5oPgor
I2luY2x1ZGUgPHdpbm5scy5oPgorI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VURjguaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitleHRlcm4gSU11bHRpTGFuZ3VhZ2UqIGdldE11bHRpTGFuZ3Vh
Z2VJbnRlcmZhY2UoKTsKKworc3RydWN0IENoYXJzZXRJbmZvIHsKKyAgICBDU3RyaW5nIG1fbmFt
ZTsKKyAgICBTdHJpbmcgbV9mcmllbmRseU5hbWU7CisgICAgVUlOVCBtX2NvZGVQYWdlOworICAg
IFZlY3RvcjxDU3RyaW5nPiBtX2FsaWFzZXM7CisgICAgYm9vbCBtX3VzZXNOYXRpdmVDb2RlYzsK
K307CisKK2NsYXNzIExhbmd1YWdlTWFuYWdlciB7Citwcml2YXRlOgorICAgIExhbmd1YWdlTWFu
YWdlcigpOworCisgICAgZnJpZW5kIExhbmd1YWdlTWFuYWdlciYgbGFuZ3VhZ2VNYW5hZ2VyKCk7
Cit9OworCisvLyBVc2FnZTogYSBsb29rdXAgdGFibGUgdXNlZCB0byBnZXQgQ2hhcnNldEluZm8g
d2l0aCBjb2RlIHBhZ2UgSUQpCisvLyBLZXk6IGNvZGUgcGFnZSBJRC4gVmFsdWU6IGNoYXJzZXQg
aW5mb3JtYXRpb24KK3N0YXRpYyBIYXNoTWFwPFVJTlQsIENTdHJpbmc+JiBjb2RlUGFnZUNoYXJz
ZXRzKCkKK3sKKyAgICBzdGF0aWMgSGFzaE1hcDxVSU5ULCBDU3RyaW5nPiBjYzsKKyAgICByZXR1
cm4gY2M7Cit9CisKK3N0YXRpYyBIYXNoTWFwPFN0cmluZywgQ2hhcnNldEluZm8+JiBrbm93bkNo
YXJzZXRzKCkKK3sKKyAgICBzdGF0aWMgSGFzaE1hcDxTdHJpbmcsIENoYXJzZXRJbmZvPiBrYzsK
KyAgICByZXR1cm4ga2M7Cit9CisKKy8vIFVzYWdlOiBhIG1hcCB0aGF0IHN0b3JlcyBjaGFyc2V0
cyB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgc3lzdGVtLiBTb3J0ZWQgYnkgbmFtZS4KKy8vIEtleTog
Y2hhcnNldC4gVmFsdWU6IGNvZGUgcGFnZSBJRAordHlwZWRlZiBIYXNoU2V0PFN0cmluZz4gQ2hh
cnNldFNldDsKK3N0YXRpYyBDaGFyc2V0U2V0JiBzdXBwb3J0ZWRDaGFyc2V0cygpCit7CisgICAg
c3RhdGljIENoYXJzZXRTZXQgc2w7CisgICAgcmV0dXJuIHNsOworfQorCitMYW5ndWFnZU1hbmFn
ZXImIGxhbmd1YWdlTWFuYWdlcigpCit7CisgICAgc3RhdGljIExhbmd1YWdlTWFuYWdlciBsbTsK
KyAgICByZXR1cm4gbG07Cit9CisKK3N0YXRpYyB2b2lkIGFkZENoYXJzZXQoVUlOVCBjb2RlUGFn
ZSwgY29uc3QgY2hhciogY2hhcnNldE5hbWUsIGNvbnN0IHdjaGFyX3QqIGZyaWVuZGx5TmFtZSwg
Y29uc3QgY2hhciogY2hhcnNldEFsaWFzZXMsIGJvb2wgbmF0aXZlU3VwcG9ydCA9IGZhbHNlKQor
eworICAgIENoYXJzZXRJbmZvIGluZm87CisgICAgaW5mby5tX2NvZGVQYWdlID0gY29kZVBhZ2U7
CisgICAgaW5mby5tX25hbWUgPSBjaGFyc2V0TmFtZTsKKyAgICBpbmZvLm1fZnJpZW5kbHlOYW1l
ID0gZnJpZW5kbHlOYW1lOworICAgIGluZm8ubV91c2VzTmF0aXZlQ29kZWMgPSBuYXRpdmVTdXBw
b3J0OworICAgIGNvbnN0IGNoYXIqIGJlZ2luID0gY2hhcnNldEFsaWFzZXM7CisgICAgZm9yICg7
OykgeworICAgICAgICBjb25zdCBjaGFyKiBlbmQgPSBzdHJjaHIoYmVnaW4sICd8Jyk7CisgICAg
ICAgIENTdHJpbmcgYWxpYXMgPSBlbmQgPyBDU3RyaW5nKGJlZ2luLCBlbmQgLSBiZWdpbikgOiBi
ZWdpbjsKKyAgICAgICAgaWYgKGFsaWFzLmxlbmd0aCgpKQorICAgICAgICAgICAgaW5mby5tX2Fs
aWFzZXMuYXBwZW5kKGFsaWFzKTsKKyAgICAgICAgaWYgKCFlbmQpCisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgYmVnaW4gPSBlbmQgKyAxOworICAgIH0KKyAgICBrbm93bkNoYXJzZXRzKCku
c2V0KGluZm8ubV9uYW1lLmRhdGEoKSwgaW5mbyk7CisgICAgaWYgKGNvZGVQYWdlICE9IENQX0FD
UCkKKyAgICAgICAgY29kZVBhZ2VDaGFyc2V0cygpLnNldChjb2RlUGFnZSwgaW5mby5tX25hbWUp
OworfQorCitMYW5ndWFnZU1hbmFnZXI6Okxhbmd1YWdlTWFuYWdlcigpCit7CisgICAgLy8gNDM3
LCA3MDgsIDcwOSwgNzEwLCA3MjAsIDczNywgNzc1LCA4NTAsIDg1MgorICAgIGFkZENoYXJzZXQo
OTMyLCAgICAgIlNISUZUX0pJUyIsIEwiSmFwYW5lc2UgKFNISUZUX0pJUykiLCAgICAgICAgInNo
aWZ0X2ppcyIpOworICAgIGFkZENoYXJzZXQoOTM2LCAgICAgIkdCSyIsICAgICAgIEwiQ2hpbmVz
ZSBTaW1wbGlmaWVkIChHQkspIiwgICAgImdia3xnYjIzMTIiKTsKKyAgICBhZGRDaGFyc2V0KDk0
OSwgICAgICJLU0M1NjAxIiwgICBMIktvcmVhbiAoS1NDNTYwMSkiLCAgICAgICAgICAgICJrc19j
XzU2MDEtMTk4N3xrc2M1NjAxfGV1Yy1rcnxldWNrcnx4LWV1Yy1rciIpOworICAgIGFkZENoYXJz
ZXQoOTUwLCAgICAgIkJJRzUiLCAgICAgIEwiQ2hpbmVzZSBUcmFkaXRpb25hbCAoQklHNSkiLCAg
ImJpZzUiKTsKKyAgICBhZGRDaGFyc2V0KDEzNjEsICAgICJKT0hBQiIsICAgICBMIktvcmVhbiAo
Sm9oYWIpIiwgICAgICAgICAgICAgICJqb2hhYnxrb3JlYW4uam9oYWIiKTsKKyAgICBhZGRDaGFy
c2V0KDUxOTMyLCAgICJFVUMtSlAiLCAgICBMIkphcGFuZXNlIChFVUMpIiwgICAgICAgICAgICAg
ICJldWMtanB8ZXVjanB8eC1ldWMtanAiLCB0cnVlKTsKKyAgICBhZGRDaGFyc2V0KDg3NCwgICAg
ICJDUDg3NCIsICAgICBMIlRoYWkgKFdpbmRvd3MpIiwgICAgICAgICAgICAgICJjcDg3NHx3aW5k
b3dzLTg3NCIsIHRydWUpOworICAgIGFkZENoYXJzZXQoQ1BfQUNQLCAgIlRJUzYyMCIsICAgIEwi
VGhhaSAoVElTIDYyMCkiLCAgICAgICAgICAgICAgInRpczYyMHxJU08tODg1OS0xMXxJU08tSVIt
MTY2fFRJUy02MjB8VElTNjIwLTBUSVM2MjAuMjUyOS0xfFRJUzYyMC4yNTMzLTB8VElTNjIwLjI1
MzMtMXx0aGFpOCIsIHRydWUpOworICAgIGFkZENoYXJzZXQoQ1BfQUNQLCAgIk1BQ1RIQUkiLCAg
IEwiVGhhaSAoTWFjIE9TKSIsICAgICAgICAgICAgICAgIm1hY3RoYWl8eC1tYWMtdGhhaXxtYWMt
dGhhaSIsIHRydWUpOworICAgIHN1cHBvcnRlZENoYXJzZXRzKCkuYWRkKCJFVUMtSlAiKTsKKyAg
ICBzdXBwb3J0ZWRDaGFyc2V0cygpLmFkZCgiQ1A4NzQiKTsKKyAgICBzdXBwb3J0ZWRDaGFyc2V0
cygpLmFkZCgiVElTNjIwIik7CisgICAgc3VwcG9ydGVkQ2hhcnNldHMoKS5hZGQoIk1BQ1RIQUki
KTsKKworICAgIElFbnVtQ29kZVBhZ2UqIGVudW1JbnRlcmZhY2U7CisgICAgSU11bHRpTGFuZ3Vh
Z2UqIG1saSA9IGdldE11bHRpTGFuZ3VhZ2VJbnRlcmZhY2UoKTsKKyAgICBpZiAobWxpICYmIFNf
T0sgPT0gbWxpLT5FbnVtQ29kZVBhZ2VzKE1JTUVDT05URl9CUk9XU0VSLCAmZW51bUludGVyZmFj
ZSkpIHsKKyAgICAgICAgTUlNRUNQSU5GTyBjcEluZm87CisgICAgICAgIFVMT05HIGNjcEluZm87
CisgICAgICAgIHdoaWxlIChTX09LID09IGVudW1JbnRlcmZhY2UtPk5leHQoMSwgJmNwSW5mbywg
JmNjcEluZm8pICYmIGNjcEluZm8pIHsKKyAgICAgICAgICAgIGlmICghSXNWYWxpZENvZGVQYWdl
KGNwSW5mby51aUNvZGVQYWdlKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAgICAgSGFzaE1hcDxVSU5ULCBDU3RyaW5nPjo6aXRlcmF0b3IgaSA9IGNvZGVQYWdlQ2hhcnNl
dHMoKS5maW5kKGNwSW5mby51aUNvZGVQYWdlKTsKKworICAgICAgICAgICAgQ1N0cmluZyBuYW1l
KFN0cmluZyhjcEluZm8ud3N6V2ViQ2hhcnNldCkubGF0aW4xKCkpOworICAgICAgICAgICAgaWYg
KGkgPT0gY29kZVBhZ2VDaGFyc2V0cygpLmVuZCgpKSB7CisgICAgICAgICAgICAgICAgQ2hhcnNl
dEluZm8gaW5mbzsKKyAgICAgICAgICAgICAgICBpbmZvLm1fY29kZVBhZ2UgPSBjcEluZm8udWlD
b2RlUGFnZTsKKyAgICAgICAgICAgICAgICBrbm93bkNoYXJzZXRzKCkuc2V0KG5hbWUuZGF0YSgp
LCBpbmZvKTsKKyAgICAgICAgICAgICAgICBpID0gY29kZVBhZ2VDaGFyc2V0cygpLnNldChjcElu
Zm8udWlDb2RlUGFnZSwgbmFtZSkuZmlyc3Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoaSAhPSBjb2RlUGFnZUNoYXJzZXRzKCkuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICBIYXNo
TWFwPFN0cmluZywgQ2hhcnNldEluZm8+OjppdGVyYXRvciBqID0ga25vd25DaGFyc2V0cygpLmZp
bmQoU3RyaW5nKGktPnNlY29uZC5kYXRhKCksIGktPnNlY29uZC5sZW5ndGgoKSkpOworICAgICAg
ICAgICAgICAgIEFTU0VSVChqICE9IGtub3duQ2hhcnNldHMoKS5lbmQoKSk7CisgICAgICAgICAg
ICAgICAgQ2hhcnNldEluZm8mIGluZm8gPSBqLT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgaW5m
by5tX25hbWUgPSBpLT5zZWNvbmQuZGF0YSgpOworICAgICAgICAgICAgICAgIGluZm8ubV9mcmll
bmRseU5hbWUgPSBjcEluZm8ud3N6RGVzY3JpcHRpb247CisgICAgICAgICAgICAgICAgaW5mby5t
X2FsaWFzZXMuYXBwZW5kKG5hbWUpOworICAgICAgICAgICAgICAgIGluZm8ubV9hbGlhc2VzLmFw
cGVuZChTdHJpbmcoY3BJbmZvLndzekhlYWRlckNoYXJzZXQpLmxhdGluMSgpKTsKKyAgICAgICAg
ICAgICAgICBpbmZvLm1fYWxpYXNlcy5hcHBlbmQoU3RyaW5nKGNwSW5mby53c3pCb2R5Q2hhcnNl
dCkubGF0aW4xKCkpOworICAgICAgICAgICAgICAgIGluZm8ubV91c2VzTmF0aXZlQ29kZWMgPSBm
YWxzZTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgY3BOYW1lID0gU3RyaW5nOjpmb3JtYXQoImNw
JWQiLCBjcEluZm8udWlDb2RlUGFnZSk7CisgICAgICAgICAgICAgICAgaW5mby5tX2FsaWFzZXMu
YXBwZW5kKGNwTmFtZS5sYXRpbjEoKSk7CisgICAgICAgICAgICAgICAgc3VwcG9ydGVkQ2hhcnNl
dHMoKS5hZGQoaS0+c2Vjb25kLmRhdGEoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgZW51bUludGVyZmFjZS0+UmVsZWFzZSgpOworICAgIH0KK30KKworc3RhdGljIFVJTlQg
Z2V0Q29kZVBhZ2UoY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICBpZiAoIXN0cmNtcChuYW1lLCAi
VVRGLTgiKSkKKyAgICAgICAgcmV0dXJuIENQX1VURjg7CisKKyAgICAvLyBFeHBsaWNpdGx5IHVz
ZSBhICJjb25zdCIgcmVmZXJlbmNlIHRvIGZpeCB0aGUgc2lsbHkgVlMgYnVpbGQgZXJyb3IKKyAg
ICAvLyBzYXlpbmcgIj09IiBpcyBub3QgZm91bmQgZm9yIGNvbnN0X2l0ZXJhdG9yIGFuZCBpdGVy
YXRvcgorICAgIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5mbz4mIGNoYXJzZXRzID0g
a25vd25DaGFyc2V0cygpOworICAgIEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5mbz46OmNvbnN0
X2l0ZXJhdG9yIGkgPSBjaGFyc2V0cy5maW5kKG5hbWUpOworICAgIHJldHVybiBpID09IGNoYXJz
ZXRzLmVuZCgpID8gQ1BfQUNQIDogaS0+c2Vjb25kLm1fY29kZVBhZ2U7Cit9CisKK3N0YXRpYyBQ
YXNzT3duUHRyPFRleHRDb2RlYz4gbmV3VGV4dENvZGVjV2luY2UoY29uc3QgVGV4dEVuY29kaW5n
JiBlbmNvZGluZywgY29uc3Qgdm9pZCopCit7CisgICAgcmV0dXJuIG5ldyBUZXh0Q29kZWNXaW5j
ZShlbmNvZGluZyk7Cit9CisKK1RleHRDb2RlY1dpbmNlOjpUZXh0Q29kZWNXaW5jZShjb25zdCBU
ZXh0RW5jb2RpbmcmIGVuY29kaW5nKQorICAgIDogbV9lbmNvZGluZyhlbmNvZGluZykKK3sKK30K
KworVGV4dENvZGVjV2luY2U6On5UZXh0Q29kZWNXaW5jZSgpCit7Cit9CisKK3ZvaWQgVGV4dENv
ZGVjV2luY2U6OnJlZ2lzdGVyQmFzZUVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFy
IHJlZ2lzdHJhcikKK3sKKyAgICByZWdpc3RyYXIoIlVURi04IiwgIlVURi04Iik7Cit9CisKK3Zv
aWQgVGV4dENvZGVjV2luY2U6OnJlZ2lzdGVyQmFzZUNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIg
cmVnaXN0cmFyKQoreworICAgIHJlZ2lzdHJhcigiVVRGLTgiLCBuZXdUZXh0Q29kZWNXaW5jZSwg
MCk7Cit9CisKK3ZvaWQgVGV4dENvZGVjV2luY2U6OnJlZ2lzdGVyRXh0ZW5kZWRFbmNvZGluZ05h
bWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhciByZWdpc3RyYXIpCit7CisgICAgbGFuZ3VhZ2VNYW5h
Z2VyKCk7CisgICAgZm9yIChDaGFyc2V0U2V0OjppdGVyYXRvciBpID0gc3VwcG9ydGVkQ2hhcnNl
dHMoKS5iZWdpbigpOyBpICE9IHN1cHBvcnRlZENoYXJzZXRzKCkuZW5kKCk7ICsraSkgeworICAg
ICAgICBIYXNoTWFwPFN0cmluZywgQ2hhcnNldEluZm8+OjppdGVyYXRvciBqID0ga25vd25DaGFy
c2V0cygpLmZpbmQoKmkpOworICAgICAgICBpZiAoaiAhPSBrbm93bkNoYXJzZXRzKCkuZW5kKCkp
IHsKKyAgICAgICAgICAgIHJlZ2lzdHJhcihqLT5zZWNvbmQubV9uYW1lLmRhdGEoKSwgai0+c2Vj
b25kLm1fbmFtZS5kYXRhKCkpOworICAgICAgICAgICAgZm9yIChWZWN0b3I8Q1N0cmluZz46OmNv
bnN0X2l0ZXJhdG9yIGFsaWFzID0gai0+c2Vjb25kLm1fYWxpYXNlcy5iZWdpbigpOyBhbGlhcyAh
PSBqLT5zZWNvbmQubV9hbGlhc2VzLmVuZCgpOyArK2FsaWFzKQorICAgICAgICAgICAgICAgIHJl
Z2lzdHJhcihhbGlhcy0+ZGF0YSgpLCBqLT5zZWNvbmQubV9uYW1lLmRhdGEoKSk7CisgICAgICAg
IH0KKyAgICB9Cit9CisKK3ZvaWQgVGV4dENvZGVjV2luY2U6OnJlZ2lzdGVyRXh0ZW5kZWRDb2Rl
Y3MoVGV4dENvZGVjUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3sKKyAgICBsYW5ndWFnZU1hbmFnZXIo
KTsKKyAgICBmb3IgKENoYXJzZXRTZXQ6Oml0ZXJhdG9yIGkgPSBzdXBwb3J0ZWRDaGFyc2V0cygp
LmJlZ2luKCk7IGkgIT0gc3VwcG9ydGVkQ2hhcnNldHMoKS5lbmQoKTsgKytpKSB7CisgICAgICAg
IEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5mbz46Oml0ZXJhdG9yIGogPSBrbm93bkNoYXJzZXRz
KCkuZmluZCgqaSk7CisgICAgICAgIGlmIChqICE9IGtub3duQ2hhcnNldHMoKS5lbmQoKSkKKyAg
ICAgICAgICAgIHJlZ2lzdHJhcihqLT5zZWNvbmQubV9uYW1lLmRhdGEoKSwgbmV3VGV4dENvZGVj
V2luY2UsIDApOworICAgIH0KK30KKworc3RhdGljIERXT1JEIGdldENvZGVQYWdlRmxhZ3MoVUlO
VCBjb2RlUGFnZSkKK3sKKyAgICBpZiAoY29kZVBhZ2UgPT0gQ1BfVVRGOCkKKyAgICAgICAgcmV0
dXJuIE1CX0VSUl9JTlZBTElEX0NIQVJTOworCisgICAgaWYgKGNvZGVQYWdlID09IDQyKSAvLyBT
eW1ib2wKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBNUyBzYXlzIHRoZSBmbGFnIG11c3Qg
YmUgMCBmb3IgdGhlIGZvbGxvd2luZyBjb2RlIHBhZ2VzCisgICAgaWYgKGNvZGVQYWdlID4gNTAw
MDApIHsKKyAgICAgICAgaWYgKChjb2RlUGFnZSA+PSA1MDIyMCAmJiBjb2RlUGFnZSA8PSA1MDIy
MikKKyAgICAgICAgICAgIHx8IGNvZGVQYWdlID09IDUwMjI1CisgICAgICAgICAgICB8fCBjb2Rl
UGFnZSA9PSA1MDIyNworICAgICAgICAgICAgfHwgY29kZVBhZ2UgPT0gNTAyMjkKKyAgICAgICAg
ICAgIHx8IGNvZGVQYWdlID09IDUyOTM2CisgICAgICAgICAgICB8fCBjb2RlUGFnZSA9PSA1NDkz
NgorICAgICAgICAgICAgfHwgKGNvZGVQYWdlID49IDU3MDAyICYmIGNvZGVQYWdlIDw9IDU3MDAx
KQorICAgICAgICAgICAgfHwgY29kZVBhZ2UgPT0gNjUwMDAgLy8gVVRGLTcKKyAgICAgICAgICAg
ICkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiBNQl9QUkVDT01Q
T1NFRCB8IE1CX0VSUl9JTlZBTElEX0NIQVJTOworfQorCitzdGF0aWMgaW5saW5lIGNvbnN0IGNo
YXIqIGZpbmRGaXJzdE5vbkFzY2lpQ2hhcmFjdGVyKGNvbnN0IGNoYXIqIGJ5dGVzLCBzaXplX3Qg
bGVuZ3RoKQoreworICAgIGZvciAoY29uc3QgY2hhciogYnl0ZXNFbmQgPSBieXRlcyArIGxlbmd0
aDsgYnl0ZXMgPCBieXRlc0VuZDsgKytieXRlcykgeworICAgICAgICBpZiAoKmJ5dGVzICYgMHg4
MCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gYnl0ZXM7Cit9CisKK3N0
YXRpYyB2b2lkIGRlY29kZShWZWN0b3I8VUNoYXIsIDgxOTI+JiByZXN1bHQsIGNvbnN0IGNoYXIq
IGVuY29kaW5nTmFtZSwgY29uc3QgY2hhciogYnl0ZXMsIHNpemVfdCBsZW5ndGgsIHNpemVfdCog
bGVmdCwgYm9vbCBjYW5CZUZpcnN0VGltZSwgYm9vbCYgc2F3SW52YWxpZENoYXIpCit7CisgICAg
KmxlZnQgPSBsZW5ndGg7CisgICAgaWYgKCFieXRlcyB8fCAhbGVuZ3RoKQorICAgICAgICByZXR1
cm47CisKKyAgICBVSU5UIGNvZGVQYWdlOworCisgICAgSGFzaE1hcDxTdHJpbmcsIENoYXJzZXRJ
bmZvPjo6aXRlcmF0b3IgaSA9IGtub3duQ2hhcnNldHMoKS5maW5kKGVuY29kaW5nTmFtZSk7Cisg
ICAgaWYgKGkgPT0ga25vd25DaGFyc2V0cygpLmVuZCgpKSB7CisgICAgICAgIGlmICghc3RyY21w
KGVuY29kaW5nTmFtZSwgIlVURi04IikpCisgICAgICAgICAgICBjb2RlUGFnZSA9IENQX1VURjg7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvZGVQYWdlID0gQ1BfQUNQOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGNvZGVQYWdlID0gaS0+c2Vjb25kLm1fY29kZVBhZ2U7CisgICAgICAgIGlm
IChpLT5zZWNvbmQubV91c2VzTmF0aXZlQ29kZWMpIHsKKyAgICAgICAgICAgIHR5cGVkZWYgaW50
ICgqRnVuY0V1Y01iVG9XYykod2NoYXJfdCAqcHdjLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzLCBp
bnQgbik7CisgICAgICAgICAgICBGdW5jRXVjTWJUb1djIGVuY01iVG9XYyA9IDA7CisgICAgICAg
ICAgICBpZiAoIXN0cmNtcChlbmNvZGluZ05hbWUsICJFVUMtSlAiKSkKKyAgICAgICAgICAgICAg
ICBlbmNNYlRvV2MgPSBUZXh0Q29kZWNzQ0U6OmV1Y19qcF9tYnRvd2M7CisgICAgICAgICAgICBl
bHNlIGlmICghc3RyY21wKGVuY29kaW5nTmFtZSwgIkNQODc0IikpCisgICAgICAgICAgICAgICAg
ZW5jTWJUb1djID0gVGV4dENvZGVjc0NFOjpjcDg3NF9tYnRvd2M7CisgICAgICAgICAgICBlbHNl
IGlmICghc3RyY21wKGVuY29kaW5nTmFtZSwgIlRJUzYyMCIpKQorICAgICAgICAgICAgICAgIGVu
Y01iVG9XYyA9IFRleHRDb2RlY3NDRTo6dGlzNjIwX21idG93YzsKKyAgICAgICAgICAgIGVsc2Ug
aWYgKCFzdHJjbXAoZW5jb2RpbmdOYW1lLCAiTUFDVEhBSSIpKQorICAgICAgICAgICAgICAgIGVu
Y01iVG9XYyA9IFRleHRDb2RlY3NDRTo6bWFjX3RoYWlfbWJ0b3djOworCisgICAgICAgICAgICBp
ZiAoZW5jTWJUb1djKSB7CisgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29uc3Qgc3JjU3Rh
cnQgPSBieXRlczsKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBzcmNFbmQgPSBi
eXRlcyArIGxlbmd0aDsKKyAgICAgICAgICAgICAgICBpbnQgbGFzdFNpemUgPSByZXN1bHQuc2l6
ZSgpOworICAgICAgICAgICAgICAgIHJlc3VsdC5yZXNpemUobGFzdFNpemUgKyBsZW5ndGgpOwor
ICAgICAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAgICAgICAgVUNoYXIqIGRz
dCA9IHJlc3VsdC5kYXRhKCkgKyBsYXN0U2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VUNoYXIqIGNvbnN0IGRzdEVuZCA9IHJlc3VsdC5kYXRhKCkgKyByZXN1bHQuc2l6ZSgpOworICAg
ICAgICAgICAgICAgICAgICBmb3IgKDsgZHN0IDwgZHN0RW5kICYmIGJ5dGVzIDwgc3JjRW5kOyAr
K2RzdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bWJlckVuY29kZWQgPSBlbmNN
YlRvV2MoZHN0LCAoY29uc3QgdW5zaWduZWQgY2hhciopYnl0ZXMsIHNyY0VuZCAtIGJ5dGVzKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudW1iZXJFbmNvZGVkID49IDApCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnl0ZXMgKz0gbnVtYmVyRW5jb2RlZDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudW1i
ZXJFbmNvZGVkID09IFJFVF9JTFNFUSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2F3SW52YWxpZENoYXIgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIGlmIChieXRlcyA9PSBzcmNFbmQgfHwgZHN0ICE9IGRzdEVuZCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgKmxlZnQgPSBzcmNFbmQgLSBieXRlczsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC5yZXNpemUoZHN0IC0gcmVzdWx0LmRhdGEoKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgbGFzdFNpemUgPSByZXN1bHQuc2l6ZSgpOworICAgICAgICAgICAgICAg
ICAgICByZXN1bHQucmVzaXplKHJlc3VsdC5zaXplKCkgKyAyNTYpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgKmxlZnQgPSAwOworICAg
ICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoYnl0ZXMsIGxlbmd0aCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgRFdPUkQg
ZmxhZ3MgPSBnZXRDb2RlUGFnZUZsYWdzKGNvZGVQYWdlKTsKKworICAgIGlmIChjb2RlUGFnZSA9
PSBDUF9VVEY4KSB7CisgICAgICAgIGlmIChjYW5CZUZpcnN0VGltZSkgeworICAgICAgICAgICAg
Ly8gSGFuZGxlIEJPTQorICAgICAgICAgICAgaWYgKGxlbmd0aCA+IDMpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoYnl0ZXNbMF0gPT0gKGNoYXIpMHhFRiAmJiBieXRlc1sxXSA9PSAoY2hhcikweEJC
ICYmIGJ5dGVzWzJdID09IChjaGFyKTB4QkYpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQk9N
IGZvdW5kIQorICAgICAgICAgICAgICAgICAgICBsZW5ndGggLT0gMzsKKyAgICAgICAgICAgICAg
ICAgICAgYnl0ZXMgKz0gMzsKKyAgICAgICAgICAgICAgICAgICAgKmxlZnQgPSBsZW5ndGg7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChieXRlc1swXSA9PSAweEVG
ICYmIChsZW5ndGggPCAyIHx8IGJ5dGVzWzFdID09IChjaGFyKTB4QkIpICYmIChsZW5ndGggPCAz
IHx8IGJ5dGVzWzJdID09IChjaGFyKTB4QkYpKSB7CisgICAgICAgICAgICAgICAgaWYgKGxlbmd0
aCA9PSAzKQorICAgICAgICAgICAgICAgICAgICAqbGVmdCA9IDA7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gcHJvY2VzcyBh
c2NpaSBjaGFyYWN0ZXJzIGF0IGJlZ2lubmluZworICAgICAgICBjb25zdCBjaGFyKiBmaXJzdE5v
bkFzY2lpQ2hhciA9IGZpbmRGaXJzdE5vbkFzY2lpQ2hhcmFjdGVyKGJ5dGVzLCBsZW5ndGgpOwor
ICAgICAgICBpbnQgbnVtQXNjaWlDaGFyYWN0ZXJzID0gZmlyc3ROb25Bc2NpaUNoYXIgLSBieXRl
czsKKyAgICAgICAgaWYgKG51bUFzY2lpQ2hhcmFjdGVycykgeworICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZChieXRlcywgbnVtQXNjaWlDaGFyYWN0ZXJzKTsKKyAgICAgICAgICAgIGxlbmd0aCAt
PSBudW1Bc2NpaUNoYXJhY3RlcnM7CisgICAgICAgICAgICBpZiAoIWxlbmd0aCkgeworICAgICAg
ICAgICAgICAgICpsZWZ0ID0gMDsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBieXRlcyA9IGZpcnN0Tm9uQXNjaWlDaGFyOworICAgICAgICB9CisK
KyAgICAgICAgaW50IG9sZFNpemUgPSByZXN1bHQuc2l6ZSgpOworICAgICAgICByZXN1bHQucmVz
aXplKG9sZFNpemUgKyBsZW5ndGgpOworICAgICAgICBVQ2hhciogcmVzdWx0U3RhcnQgPSByZXN1
bHQuZGF0YSgpICsgb2xkU2l6ZTsKKyAgICAgICAgY29uc3QgY2hhciogc291cmNlU3RhcnQgPSBi
eXRlczsKKyAgICAgICAgY29uc3QgY2hhciogY29uc3Qgc291cmNlRW5kID0gYnl0ZXMgKyBsZW5n
dGg7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIHVzaW5nIG5hbWVzcGFjZSBXVEY6
OlVuaWNvZGU7CisgICAgICAgICAgICBDb252ZXJzaW9uUmVzdWx0IGNvbnZSZXMgPSBjb252ZXJ0
VVRGOFRvVVRGMTYoJnNvdXJjZVN0YXJ0CisgICAgICAgICAgICAgICAgLCBzb3VyY2VFbmQKKyAg
ICAgICAgICAgICAgICAsICZyZXN1bHRTdGFydAorICAgICAgICAgICAgICAgICwgcmVzdWx0LmRh
dGEoKSArIHJlc3VsdC5zaXplKCkKKyAgICAgICAgICAgICAgICAsIHRydWUpOworCisgICAgICAg
ICAgICAvLyBGSVhNRTogaXMgaXQgcG9zc2libGU/CisgICAgICAgICAgICBpZiAoY29udlJlcyA9
PSB0YXJnZXRFeGhhdXN0ZWQgJiYgc291cmNlU3RhcnQgPCBzb3VyY2VFbmQpIHsKKyAgICAgICAg
ICAgICAgICBvbGRTaXplID0gcmVzdWx0LnNpemUoKTsKKyAgICAgICAgICAgICAgICByZXN1bHQu
cmVzaXplKG9sZFNpemUgKyAyNTYpOworICAgICAgICAgICAgICAgIHJlc3VsdFN0YXJ0ID0gcmVz
dWx0LmRhdGEoKSArIG9sZFNpemU7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmIChjb252UmVzICE9IGNvbnZlcnNpb25PSykKKyAgICAg
ICAgICAgICAgICBzYXdJbnZhbGlkQ2hhciA9IHRydWU7CisKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgKmxlZnQgPSBzb3VyY2VFbmQgLSBzb3VyY2VTdGFydDsKKyAg
ICAgICAgcmVzdWx0LnJlc2l6ZShyZXN1bHRTdGFydCAtIHJlc3VsdC5kYXRhKCkpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGludCB0ZXN0TGVuZ3RoID0gbGVuZ3RoOworICAgICAgICBpbnQgdW50
ZXN0ZWRMZW5ndGggPSBsZW5ndGg7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIGlu
dCByZXN1bHRMZW5ndGggPSBNdWx0aUJ5dGVUb1dpZGVDaGFyKGNvZGVQYWdlLCBmbGFncywgYnl0
ZXMsIHRlc3RMZW5ndGgsIDAsIDApOworCisgICAgICAgICAgICBpZiAocmVzdWx0TGVuZ3RoID4g
MCkgeworICAgICAgICAgICAgICAgIGludCBvbGRTaXplID0gcmVzdWx0LnNpemUoKTsKKyAgICAg
ICAgICAgICAgICByZXN1bHQucmVzaXplKG9sZFNpemUgKyByZXN1bHRMZW5ndGgpOworCisgICAg
ICAgICAgICAgICAgTXVsdGlCeXRlVG9XaWRlQ2hhcihjb2RlUGFnZSwgZmxhZ3MsIGJ5dGVzLCB0
ZXN0TGVuZ3RoLCByZXN1bHQuZGF0YSgpICsgb2xkU2l6ZSwgcmVzdWx0TGVuZ3RoKTsKKworICAg
ICAgICAgICAgICAgIGlmICh0ZXN0TGVuZ3RoID09IHVudGVzdGVkTGVuZ3RoKSB7CisgICAgICAg
ICAgICAgICAgICAgICpsZWZ0ID0gbGVuZ3RoIC0gdGVzdExlbmd0aDsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHVudGVzdGVk
TGVuZ3RoIC09IHRlc3RMZW5ndGg7CisgICAgICAgICAgICAgICAgbGVuZ3RoIC09IHRlc3RMZW5n
dGg7CisgICAgICAgICAgICAgICAgYnl0ZXMgKz0gdGVzdExlbmd0aDsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgdW50ZXN0ZWRMZW5ndGggPSB0ZXN0TGVuZ3RoIC0gMTsK
KyAgICAgICAgICAgICAgICBpZiAoIXVudGVzdGVkTGVuZ3RoKSB7CisgICAgICAgICAgICAgICAg
ICAgICpsZWZ0ID0gbGVuZ3RoOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0ZXN0TGVuZ3RoID0gKHVudGVz
dGVkTGVuZ3RoICsgMSkgLyAyOworICAgICAgICB9CisgICAgfQorfQorCitTdHJpbmcgVGV4dENv
ZGVjV2luY2U6OmRlY29kZShjb25zdCBjaGFyKiBieXRlcywgc2l6ZV90IGxlbmd0aCwgYm9vbCBm
bHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3IpCit7CisgICAgaWYgKCFtX2Rl
Y29kZUJ1ZmZlci5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9kZWNvZGVCdWZmZXIuYXBwZW5kKGJ5
dGVzLCBsZW5ndGgpOworICAgICAgICBieXRlcyA9IG1fZGVjb2RlQnVmZmVyLmRhdGEoKTsKKyAg
ICAgICAgbGVuZ3RoID0gbV9kZWNvZGVCdWZmZXIuc2l6ZSgpOworICAgIH0KKworICAgIHNpemVf
dCBsZWZ0OworICAgIFZlY3RvcjxVQ2hhciwgODE5Mj4gcmVzdWx0OworICAgIGZvciAoOzspIHsK
KyAgICAgICAgYm9vbCBzYXdJbnZhbGlkQ2hhciA9IGZhbHNlOworICAgICAgICBXZWJDb3JlOjpk
ZWNvZGUocmVzdWx0LCBtX2VuY29kaW5nLm5hbWUoKSwgYnl0ZXMsIGxlbmd0aCwgJmxlZnQsIG1f
ZGVjb2RlQnVmZmVyLmlzRW1wdHkoKSwgc2F3SW52YWxpZENoYXIpOworICAgICAgICBpZiAoIWxl
ZnQpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoIXNhd0ludmFsaWRDaGFyICYm
ICFmbHVzaCAmJiBsZWZ0IDwgMTYpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICByZXN1
bHQuYXBwZW5kKEwnPycpOworICAgICAgICBzYXdFcnJvciA9IHRydWU7CisgICAgICAgIGlmIChz
dG9wT25FcnJvcikKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcocmVzdWx0LmRhdGEoKSwgcmVz
dWx0LnNpemUoKSk7CisKKworICAgICAgICBpZiAobGVmdCA9PSAxKQorICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgYnl0ZXMgKz0gbGVuZ3RoIC0gbGVmdCArIDE7CisgICAgICAgIGxlbmd0
aCA9IGxlZnQgLSAxOworICAgIH0KKyAgICBpZiAobGVmdCAmJiAhZmx1c2gpIHsKKyAgICAgICAg
aWYgKG1fZGVjb2RlQnVmZmVyLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1fZGVjb2RlQnVmZmVy
LmFwcGVuZChieXRlcyArIGxlbmd0aCAtIGxlZnQsIGxlZnQpOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIG1lbW1vdmUobV9kZWNvZGVCdWZmZXIuZGF0YSgpLCBieXRlcyArIGxlbmd0aCAt
IGxlZnQsIGxlZnQpOworICAgICAgICAgICAgbV9kZWNvZGVCdWZmZXIucmVzaXplKGxlZnQpOwor
ICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIG1fZGVjb2RlQnVmZmVyLmNsZWFyKCk7Cisg
ICAgcmV0dXJuIFN0cmluZyhyZXN1bHQuZGF0YSgpLCByZXN1bHQuc2l6ZSgpKTsKK30KKworQ1N0
cmluZyBUZXh0Q29kZWNXaW5jZTo6ZW5jb2RlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXpl
X3QgbGVuZ3RoLCBVbmVuY29kYWJsZUhhbmRsaW5nKQoreworICAgIGlmICghY2hhcmFjdGVycyB8
fCAhbGVuZ3RoKQorICAgICAgICByZXR1cm4gQ1N0cmluZygpOworCisgICAgVUlOVCBjb2RlUGFn
ZSA9IGdldENvZGVQYWdlKG1fZW5jb2RpbmcubmFtZSgpKTsKKyAgICBEV09SRCBmbGFncyA9IGNv
ZGVQYWdlID09IENQX1VURjggPyAwIDogV0NfQ09NUE9TSVRFQ0hFQ0s7CisKKyAgICBpbnQgcmVz
dWx0TGVuZ3RoID0gV2lkZUNoYXJUb011bHRpQnl0ZShjb2RlUGFnZSwgZmxhZ3MsIGNoYXJhY3Rl
cnMsIGxlbmd0aCwgMCwgMCwgMCwgMCk7CisKKyAgICAvLyBGSVhNRTogd2UgbmVlZCB0byBpbXBs
ZW1lbnQgVW5lbmNvZGFibGVIYW5kbGluZzogUXVlc3Rpb25NYXJrc0ZvclVuZW5jb2RhYmxlcywg
RW50aXRpZXNGb3JVbmVuY29kYWJsZXMKKyAgICAvLyAsIGFuZCBVUkxFbmNvZGVkRW50aXRpZXNG
b3JVbmVuY29kYWJsZXMKKworICAgIGlmIChyZXN1bHRMZW5ndGggPD0gMCkKKyAgICAgICAgcmV0
dXJuICI/IjsKKworICAgIFZlY3RvcjxjaGFyPiByZXN1bHQocmVzdWx0TGVuZ3RoKTsKKworICAg
IFdpZGVDaGFyVG9NdWx0aUJ5dGUoY29kZVBhZ2UsIGZsYWdzLCBjaGFyYWN0ZXJzLCBsZW5ndGgs
IHJlc3VsdC5kYXRhKCksIHJlc3VsdExlbmd0aCwgMCwgMCk7CisKKyAgICByZXR1cm4gQ1N0cmlu
ZyhyZXN1bHQuZGF0YSgpLCByZXN1bHQuc2l6ZSgpKTsKK30KKwordm9pZCBUZXh0Q29kZWNXaW5j
ZTo6ZW51bWVyYXRlU3VwcG9ydGVkRW5jb2RpbmdzKEVuY29kaW5nUmVjZWl2ZXImIHJlY2VpdmVy
KQoreworICAgIGxhbmd1YWdlTWFuYWdlcigpOworICAgIGZvciAoQ2hhcnNldFNldDo6aXRlcmF0
b3IgaSA9IHN1cHBvcnRlZENoYXJzZXRzKCkuYmVnaW4oKTsgaSAhPSBzdXBwb3J0ZWRDaGFyc2V0
cygpLmVuZCgpOyArK2kpIHsKKyAgICAgICAgSGFzaE1hcDxTdHJpbmcsIENoYXJzZXRJbmZvPjo6
aXRlcmF0b3IgaiA9IGtub3duQ2hhcnNldHMoKS5maW5kKCppKTsKKyAgICAgICAgaWYgKGogIT0g
a25vd25DaGFyc2V0cygpLmVuZCgpICYmICFyZWNlaXZlci5yZWNlaXZlKGotPnNlY29uZC5tX25h
bWUuZGF0YSgpLCBqLT5zZWNvbmQubV9mcmllbmRseU5hbWUuY2hhcmFjdGVyc1dpdGhOdWxsVGVy
bWluYXRpb24oKSwgai0+c2Vjb25kLm1fY29kZVBhZ2UpKQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvd2luY2UvVGV4dENvZGVjV2luY2UuaCBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC93aW5jZS9UZXh0Q29kZWNXaW5jZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjJiMDdhNjkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvd2lu
Y2UvVGV4dENvZGVjV2luY2UuaApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEBueXBvcC5jb20+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBUZXh0Q29kZWNXaW5jZV9oCisjZGVmaW5lIFRleHRDb2RlY1dpbmNlX2gKKworI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiVGV4dENvZGVjLmgiCisjaW5jbHVkZSAiVGV4
dEVuY29kaW5nLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIFRleHRDb2RlY1dpbmNlIDogcHVibGljIFRleHRDb2RlYyB7CitwdWJsaWM6
CisgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJCYXNlRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVS
ZWdpc3RyYXIpOworICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQmFzZUNvZGVjcyhUZXh0Q29kZWNS
ZWdpc3RyYXIpOworCisgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJFeHRlbmRlZEVuY29kaW5nTmFt
ZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyKTsKKyAgICBzdGF0aWMgdm9pZCByZWdpc3RlckV4dGVu
ZGVkQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhcik7CisKKyAgICBUZXh0Q29kZWNXaW5jZShjb25z
dCBUZXh0RW5jb2RpbmcmKTsKKyAgICB2aXJ0dWFsIH5UZXh0Q29kZWNXaW5jZSgpOworCisgICAg
dmlydHVhbCBTdHJpbmcgZGVjb2RlKGNvbnN0IGNoYXIqLCBzaXplX3QgbGVuZ3RoLCBib29sIGZs
dXNoLCBib29sIHN0b3BPbkVycm9yLCBib29sJiBzYXdFcnJvcik7CisgICAgdmlydHVhbCBDU3Ry
aW5nIGVuY29kZShjb25zdCBVQ2hhciosIHNpemVfdCBsZW5ndGgsIFVuZW5jb2RhYmxlSGFuZGxp
bmcpOworCisKKyAgICBzdHJ1Y3QgRW5jb2RpbmdJbmZvIHsKKyAgICAgICAgU3RyaW5nIG1fZW5j
b2Rpbmc7CisgICAgICAgIFN0cmluZyBtX2ZyaWVuZGx5TmFtZTsKKyAgICB9OworCisgICAgc3Ry
dWN0IEVuY29kaW5nUmVjZWl2ZXIgeworICAgICAgICAvLyBSZXR1cm4gZmFsc2UgdG8gc3RvcCBl
bnVtZXJhdGluZworICAgICAgICB2aXJ0dWFsIGJvb2wgcmVjZWl2ZShjb25zdCBjaGFyKiBlbmNv
ZGluZywgY29uc3Qgd2NoYXJfdCogZnJpZW5kbHlOYW1lLCB1bnNpZ25lZCBpbnQgY29kZVBhZ2Up
ID0gMDsKKyAgICB9OworCisgICAgc3RhdGljIHZvaWQgZW51bWVyYXRlU3VwcG9ydGVkRW5jb2Rp
bmdzKEVuY29kaW5nUmVjZWl2ZXImIHJlY2VpdmVyKTsKKworcHJpdmF0ZToKKyAgICBUZXh0RW5j
b2RpbmcgbV9lbmNvZGluZzsKKyAgICBWZWN0b3I8Y2hhcj4gbV9kZWNvZGVCdWZmZXI7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBUZXh0Q29kZWNXaW5jZV9oCg==
</data>
<flag name="review"
          id="26261"
          type_id="1"
          status="-"
          setter="ddkilzer"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46925</attachid>
            <date>2010-01-19 10:38:20 -0800</date>
            <delta_ts>2010-01-26 11:12:55 -0800</delta_ts>
            <desc>The patch (additonal style issues fixed)</desc>
            <filename>32169.patch</filename>
            <type>text/plain</type>
            <size>21477</size>
            <attacher name="Patrick R. Gansterer">paroga</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MzAzOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTMgQEAKKzIwMDktMTAtMTYgWW9uZyBMaSA8eW9uZy5saS53ZWJraXRAZ21haWwu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElt
cGxlbWVudCBUZXh0Q29kZWNzIGZvciBXaW5DRSBwb3J0LgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzIxNjkKKworICAgICAgICAqIHBsYXRmb3JtL3Rl
eHQvd2luY2UvVGV4dENvZGVjV2luY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS90
ZXh0L3dpbmNlL1RleHRDb2RlY1dpbmNlLmg6IEFkZGVkLgorCiAyMDEwLTAxLTA5ICBEYW4gQmVy
bnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTmlrb2xhcyBa
aW1tZXJtYW5uLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3dpbmNlL1RleHRDb2RlY1dp
bmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvd2luY2UvVGV4dENv
ZGVjV2luY2UuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3dpbmNl
L1RleHRDb2RlY1dpbmNlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0ODUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaSB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlRleHRDb2RlY1dpbmNlLmgiCisKKyNpbmNsdWRlICJjZV90ZXh0Y29k
ZWNzLmgiCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
CisjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgorI2luY2x1ZGUgPG1sYW5nLmg+CisjaW5jbHVkZSA8
d2luYmFzZS5oPgorI2luY2x1ZGUgPHdpbm5scy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9VVEY4Lmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gRGVmaW5lZCBpbiBwbGF0Zm9ybS9ncmFwaGlj
cy93aW5jZS9Gb250Q2FjaGVXaW5jZS5jcHAKK2V4dGVybiBJTXVsdGlMYW5ndWFnZSogZ2V0TXVs
dGlMYW5ndWFnZUludGVyZmFjZSgpOworCitzdHJ1Y3QgQ2hhcnNldEluZm8geworICAgIENTdHJp
bmcgbV9uYW1lOworICAgIFN0cmluZyBtX2ZyaWVuZGx5TmFtZTsKKyAgICBVSU5UIG1fY29kZVBh
Z2U7CisgICAgVmVjdG9yPENTdHJpbmc+IG1fYWxpYXNlczsKKyAgICBib29sIG1fdXNlc05hdGl2
ZUNvZGVjOworfTsKKworY2xhc3MgTGFuZ3VhZ2VNYW5hZ2VyIHsKK3ByaXZhdGU6CisgICAgTGFu
Z3VhZ2VNYW5hZ2VyKCk7CisKKyAgICBmcmllbmQgTGFuZ3VhZ2VNYW5hZ2VyJiBsYW5ndWFnZU1h
bmFnZXIoKTsKK307CisKKy8vIFVzYWdlOiBhIGxvb2t1cCB0YWJsZSB1c2VkIHRvIGdldCBDaGFy
c2V0SW5mbyB3aXRoIGNvZGUgcGFnZSBJRC4KKy8vIEtleTogY29kZSBwYWdlIElELiBWYWx1ZTog
Y2hhcnNldCBpbmZvcm1hdGlvbi4KK3N0YXRpYyBIYXNoTWFwPFVJTlQsIENTdHJpbmc+JiBjb2Rl
UGFnZUNoYXJzZXRzKCkKK3sKKyAgICBzdGF0aWMgSGFzaE1hcDxVSU5ULCBDU3RyaW5nPiBjYzsK
KyAgICByZXR1cm4gY2M7Cit9CisKK3N0YXRpYyBIYXNoTWFwPFN0cmluZywgQ2hhcnNldEluZm8+
JiBrbm93bkNoYXJzZXRzKCkKK3sKKyAgICBzdGF0aWMgSGFzaE1hcDxTdHJpbmcsIENoYXJzZXRJ
bmZvPiBrYzsKKyAgICByZXR1cm4ga2M7Cit9CisKKy8vIFVzYWdlOiBhIG1hcCB0aGF0IHN0b3Jl
cyBjaGFyc2V0cyB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgc3lzdGVtLiBTb3J0ZWQgYnkgbmFtZS4K
Ky8vIEtleTogY2hhcnNldC4gVmFsdWU6IGNvZGUgcGFnZSBJRC4KK3R5cGVkZWYgSGFzaFNldDxT
dHJpbmc+IENoYXJzZXRTZXQ7CitzdGF0aWMgQ2hhcnNldFNldCYgc3VwcG9ydGVkQ2hhcnNldHMo
KQoreworICAgIHN0YXRpYyBDaGFyc2V0U2V0IHNsOworICAgIHJldHVybiBzbDsKK30KKworc3Rh
dGljIExhbmd1YWdlTWFuYWdlciYgbGFuZ3VhZ2VNYW5hZ2VyKCkKK3sKKyAgICBzdGF0aWMgTGFu
Z3VhZ2VNYW5hZ2VyIGxtOworICAgIHJldHVybiBsbTsKK30KKworc3RhdGljIHZvaWQgYWRkQ2hh
cnNldChVSU5UIGNvZGVQYWdlLCBjb25zdCBjaGFyKiBjaGFyc2V0TmFtZSwgY29uc3Qgd2NoYXJf
dCogZnJpZW5kbHlOYW1lLCBjb25zdCBjaGFyKiBjaGFyc2V0QWxpYXNlcywgYm9vbCBuYXRpdmVT
dXBwb3J0ID0gZmFsc2UpCit7CisgICAgQ2hhcnNldEluZm8gaW5mbzsKKyAgICBpbmZvLm1fY29k
ZVBhZ2UgPSBjb2RlUGFnZTsKKyAgICBpbmZvLm1fbmFtZSA9IGNoYXJzZXROYW1lOworICAgIGlu
Zm8ubV9mcmllbmRseU5hbWUgPSBmcmllbmRseU5hbWU7CisgICAgaW5mby5tX3VzZXNOYXRpdmVD
b2RlYyA9IG5hdGl2ZVN1cHBvcnQ7CisgICAgY29uc3QgY2hhciogYmVnaW4gPSBjaGFyc2V0QWxp
YXNlczsKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGNvbnN0IGNoYXIqIGVuZCA9IHN0cmNocihi
ZWdpbiwgJ3wnKTsKKyAgICAgICAgQ1N0cmluZyBhbGlhcyA9IGVuZCA/IENTdHJpbmcoYmVnaW4s
IGVuZCAtIGJlZ2luKSA6IGJlZ2luOworICAgICAgICBpZiAoYWxpYXMubGVuZ3RoKCkpCisgICAg
ICAgICAgICBpbmZvLm1fYWxpYXNlcy5hcHBlbmQoYWxpYXMpOworICAgICAgICBpZiAoIWVuZCkK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBiZWdpbiA9IGVuZCArIDE7CisgICAgfQorICAg
IGtub3duQ2hhcnNldHMoKS5zZXQoaW5mby5tX25hbWUuZGF0YSgpLCBpbmZvKTsKKyAgICBpZiAo
Y29kZVBhZ2UgIT0gQ1BfQUNQKQorICAgICAgICBjb2RlUGFnZUNoYXJzZXRzKCkuc2V0KGNvZGVQ
YWdlLCBpbmZvLm1fbmFtZSk7Cit9CisKK0xhbmd1YWdlTWFuYWdlcjo6TGFuZ3VhZ2VNYW5hZ2Vy
KCkKK3sKKyAgICAvLyA0MzcsIDcwOCwgNzA5LCA3MTAsIDcyMCwgNzM3LCA3NzUsIDg1MCwgODUy
CisgICAgYWRkQ2hhcnNldCg5MzIsICAgICAiU0hJRlRfSklTIiwgTCJKYXBhbmVzZSAoU0hJRlRf
SklTKSIsICAgICAgICAic2hpZnRfamlzIik7CisgICAgYWRkQ2hhcnNldCg5MzYsICAgICAiR0JL
IiwgICAgICAgTCJDaGluZXNlIFNpbXBsaWZpZWQgKEdCSykiLCAgICAiZ2JrfGdiMjMxMiIpOwor
ICAgIGFkZENoYXJzZXQoOTQ5LCAgICAgIktTQzU2MDEiLCAgIEwiS29yZWFuIChLU0M1NjAxKSIs
ICAgICAgICAgICAgImtzX2NfNTYwMS0xOTg3fGtzYzU2MDF8ZXVjLWtyfGV1Y2tyfHgtZXVjLWty
Iik7CisgICAgYWRkQ2hhcnNldCg5NTAsICAgICAiQklHNSIsICAgICAgTCJDaGluZXNlIFRyYWRp
dGlvbmFsIChCSUc1KSIsICAiYmlnNSIpOworICAgIGFkZENoYXJzZXQoMTM2MSwgICAgIkpPSEFC
IiwgICAgIEwiS29yZWFuIChKb2hhYikiLCAgICAgICAgICAgICAgImpvaGFifGtvcmVhbi5qb2hh
YiIpOworICAgIGFkZENoYXJzZXQoNTE5MzIsICAgIkVVQy1KUCIsICAgIEwiSmFwYW5lc2UgKEVV
QykiLCAgICAgICAgICAgICAgImV1Yy1qcHxldWNqcHx4LWV1Yy1qcCIsIHRydWUpOworICAgIGFk
ZENoYXJzZXQoODc0LCAgICAgIkNQODc0IiwgICAgIEwiVGhhaSAoV2luZG93cykiLCAgICAgICAg
ICAgICAgImNwODc0fHdpbmRvd3MtODc0IiwgdHJ1ZSk7CisgICAgYWRkQ2hhcnNldChDUF9BQ1As
ICAiVElTNjIwIiwgICAgTCJUaGFpIChUSVMgNjIwKSIsICAgICAgICAgICAgICAidGlzNjIwfElT
Ty04ODU5LTExfElTTy1JUi0xNjZ8VElTLTYyMHxUSVM2MjAtMFRJUzYyMC4yNTI5LTF8VElTNjIw
LjI1MzMtMHxUSVM2MjAuMjUzMy0xfHRoYWk4IiwgdHJ1ZSk7CisgICAgYWRkQ2hhcnNldChDUF9B
Q1AsICAiTUFDVEhBSSIsICAgTCJUaGFpIChNYWMgT1MpIiwgICAgICAgICAgICAgICAibWFjdGhh
aXx4LW1hYy10aGFpfG1hYy10aGFpIiwgdHJ1ZSk7CisgICAgc3VwcG9ydGVkQ2hhcnNldHMoKS5h
ZGQoIkVVQy1KUCIpOworICAgIHN1cHBvcnRlZENoYXJzZXRzKCkuYWRkKCJDUDg3NCIpOworICAg
IHN1cHBvcnRlZENoYXJzZXRzKCkuYWRkKCJUSVM2MjAiKTsKKyAgICBzdXBwb3J0ZWRDaGFyc2V0
cygpLmFkZCgiTUFDVEhBSSIpOworCisgICAgSUVudW1Db2RlUGFnZSogZW51bUludGVyZmFjZTsK
KyAgICBJTXVsdGlMYW5ndWFnZSogbWxpID0gZ2V0TXVsdGlMYW5ndWFnZUludGVyZmFjZSgpOwor
ICAgIGlmIChtbGkgJiYgU19PSyA9PSBtbGktPkVudW1Db2RlUGFnZXMoTUlNRUNPTlRGX0JST1dT
RVIsICZlbnVtSW50ZXJmYWNlKSkgeworICAgICAgICBNSU1FQ1BJTkZPIGNwSW5mbzsKKyAgICAg
ICAgVUxPTkcgY2NwSW5mbzsKKyAgICAgICAgd2hpbGUgKFNfT0sgPT0gZW51bUludGVyZmFjZS0+
TmV4dCgxLCAmY3BJbmZvLCAmY2NwSW5mbykgJiYgY2NwSW5mbykgeworICAgICAgICAgICAgaWYg
KCFJc1ZhbGlkQ29kZVBhZ2UoY3BJbmZvLnVpQ29kZVBhZ2UpKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgICAgICBIYXNoTWFwPFVJTlQsIENTdHJpbmc+OjppdGVyYXRvciBp
ID0gY29kZVBhZ2VDaGFyc2V0cygpLmZpbmQoY3BJbmZvLnVpQ29kZVBhZ2UpOworCisgICAgICAg
ICAgICBDU3RyaW5nIG5hbWUoU3RyaW5nKGNwSW5mby53c3pXZWJDaGFyc2V0KS5sYXRpbjEoKSk7
CisgICAgICAgICAgICBpZiAoaSA9PSBjb2RlUGFnZUNoYXJzZXRzKCkuZW5kKCkpIHsKKyAgICAg
ICAgICAgICAgICBDaGFyc2V0SW5mbyBpbmZvOworICAgICAgICAgICAgICAgIGluZm8ubV9jb2Rl
UGFnZSA9IGNwSW5mby51aUNvZGVQYWdlOworICAgICAgICAgICAgICAgIGtub3duQ2hhcnNldHMo
KS5zZXQobmFtZS5kYXRhKCksIGluZm8pOworICAgICAgICAgICAgICAgIGkgPSBjb2RlUGFnZUNo
YXJzZXRzKCkuc2V0KGNwSW5mby51aUNvZGVQYWdlLCBuYW1lKS5maXJzdDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChpICE9IGNvZGVQYWdlQ2hhcnNldHMoKS5lbmQoKSkgeworICAg
ICAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5mbz46Oml0ZXJhdG9yIGogPSBr
bm93bkNoYXJzZXRzKCkuZmluZChTdHJpbmcoaS0+c2Vjb25kLmRhdGEoKSwgaS0+c2Vjb25kLmxl
bmd0aCgpKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGogIT0ga25vd25DaGFyc2V0cygpLmVu
ZCgpKTsKKyAgICAgICAgICAgICAgICBDaGFyc2V0SW5mbyYgaW5mbyA9IGotPnNlY29uZDsKKyAg
ICAgICAgICAgICAgICBpbmZvLm1fbmFtZSA9IGktPnNlY29uZC5kYXRhKCk7CisgICAgICAgICAg
ICAgICAgaW5mby5tX2ZyaWVuZGx5TmFtZSA9IGNwSW5mby53c3pEZXNjcmlwdGlvbjsKKyAgICAg
ICAgICAgICAgICBpbmZvLm1fYWxpYXNlcy5hcHBlbmQobmFtZSk7CisgICAgICAgICAgICAgICAg
aW5mby5tX2FsaWFzZXMuYXBwZW5kKFN0cmluZyhjcEluZm8ud3N6SGVhZGVyQ2hhcnNldCkubGF0
aW4xKCkpOworICAgICAgICAgICAgICAgIGluZm8ubV9hbGlhc2VzLmFwcGVuZChTdHJpbmcoY3BJ
bmZvLndzekJvZHlDaGFyc2V0KS5sYXRpbjEoKSk7CisgICAgICAgICAgICAgICAgaW5mby5tX3Vz
ZXNOYXRpdmVDb2RlYyA9IGZhbHNlOworICAgICAgICAgICAgICAgIFN0cmluZyBjcE5hbWUgPSBT
dHJpbmc6OmZvcm1hdCgiY3AlZCIsIGNwSW5mby51aUNvZGVQYWdlKTsKKyAgICAgICAgICAgICAg
ICBpbmZvLm1fYWxpYXNlcy5hcHBlbmQoY3BOYW1lLmxhdGluMSgpKTsKKyAgICAgICAgICAgICAg
ICBzdXBwb3J0ZWRDaGFyc2V0cygpLmFkZChpLT5zZWNvbmQuZGF0YSgpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBlbnVtSW50ZXJmYWNlLT5SZWxlYXNlKCk7CisgICAgfQor
fQorCitzdGF0aWMgVUlOVCBnZXRDb2RlUGFnZShjb25zdCBjaGFyKiBuYW1lKQoreworICAgIGlm
ICghc3RyY21wKG5hbWUsICJVVEYtOCIpKQorICAgICAgICByZXR1cm4gQ1BfVVRGODsKKworICAg
IC8vIEV4cGxpY2l0bHkgdXNlIGEgImNvbnN0IiByZWZlcmVuY2UgdG8gZml4IHRoZSBzaWxseSBW
UyBidWlsZCBlcnJvcgorICAgIC8vIHNheWluZyAiPT0iIGlzIG5vdCBmb3VuZCBmb3IgY29uc3Rf
aXRlcmF0b3IgYW5kIGl0ZXJhdG9yCisgICAgY29uc3QgSGFzaE1hcDxTdHJpbmcsIENoYXJzZXRJ
bmZvPiYgY2hhcnNldHMgPSBrbm93bkNoYXJzZXRzKCk7CisgICAgSGFzaE1hcDxTdHJpbmcsIENo
YXJzZXRJbmZvPjo6Y29uc3RfaXRlcmF0b3IgaSA9IGNoYXJzZXRzLmZpbmQobmFtZSk7CisgICAg
cmV0dXJuIGkgPT0gY2hhcnNldHMuZW5kKCkgPyBDUF9BQ1AgOiBpLT5zZWNvbmQubV9jb2RlUGFn
ZTsKK30KKworc3RhdGljIFBhc3NPd25QdHI8VGV4dENvZGVjPiBuZXdUZXh0Q29kZWNXaW5jZShj
b25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nLCBjb25zdCB2b2lkKikKK3sKKyAgICByZXR1cm4g
bmV3IFRleHRDb2RlY1dpbmNlKGVuY29kaW5nKTsKK30KKworVGV4dENvZGVjV2luY2U6OlRleHRD
b2RlY1dpbmNlKGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcpCisgICAgOiBtX2VuY29kaW5n
KGVuY29kaW5nKQoreworfQorCitUZXh0Q29kZWNXaW5jZTo6flRleHRDb2RlY1dpbmNlKCkKK3sK
K30KKwordm9pZCBUZXh0Q29kZWNXaW5jZTo6cmVnaXN0ZXJCYXNlRW5jb2RpbmdOYW1lcyhFbmNv
ZGluZ05hbWVSZWdpc3RyYXIgcmVnaXN0cmFyKQoreworICAgIHJlZ2lzdHJhcigiVVRGLTgiLCAi
VVRGLTgiKTsKK30KKwordm9pZCBUZXh0Q29kZWNXaW5jZTo6cmVnaXN0ZXJCYXNlQ29kZWNzKFRl
eHRDb2RlY1JlZ2lzdHJhciByZWdpc3RyYXIpCit7CisgICAgcmVnaXN0cmFyKCJVVEYtOCIsIG5l
d1RleHRDb2RlY1dpbmNlLCAwKTsKK30KKwordm9pZCBUZXh0Q29kZWNXaW5jZTo6cmVnaXN0ZXJF
eHRlbmRlZEVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3sK
KyAgICBsYW5ndWFnZU1hbmFnZXIoKTsKKyAgICBmb3IgKENoYXJzZXRTZXQ6Oml0ZXJhdG9yIGkg
PSBzdXBwb3J0ZWRDaGFyc2V0cygpLmJlZ2luKCk7IGkgIT0gc3VwcG9ydGVkQ2hhcnNldHMoKS5l
bmQoKTsgKytpKSB7CisgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5mbz46Oml0ZXJh
dG9yIGogPSBrbm93bkNoYXJzZXRzKCkuZmluZCgqaSk7CisgICAgICAgIGlmIChqICE9IGtub3du
Q2hhcnNldHMoKS5lbmQoKSkgeworICAgICAgICAgICAgcmVnaXN0cmFyKGotPnNlY29uZC5tX25h
bWUuZGF0YSgpLCBqLT5zZWNvbmQubV9uYW1lLmRhdGEoKSk7CisgICAgICAgICAgICBmb3IgKFZl
Y3RvcjxDU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgYWxpYXMgPSBqLT5zZWNvbmQubV9hbGlhc2Vz
LmJlZ2luKCk7IGFsaWFzICE9IGotPnNlY29uZC5tX2FsaWFzZXMuZW5kKCk7ICsrYWxpYXMpCisg
ICAgICAgICAgICAgICAgcmVnaXN0cmFyKGFsaWFzLT5kYXRhKCksIGotPnNlY29uZC5tX25hbWUu
ZGF0YSgpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBUZXh0Q29kZWNXaW5jZTo6cmVn
aXN0ZXJFeHRlbmRlZENvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIgcmVnaXN0cmFyKQoreworICAg
IGxhbmd1YWdlTWFuYWdlcigpOworICAgIGZvciAoQ2hhcnNldFNldDo6aXRlcmF0b3IgaSA9IHN1
cHBvcnRlZENoYXJzZXRzKCkuYmVnaW4oKTsgaSAhPSBzdXBwb3J0ZWRDaGFyc2V0cygpLmVuZCgp
OyArK2kpIHsKKyAgICAgICAgSGFzaE1hcDxTdHJpbmcsIENoYXJzZXRJbmZvPjo6aXRlcmF0b3Ig
aiA9IGtub3duQ2hhcnNldHMoKS5maW5kKCppKTsKKyAgICAgICAgaWYgKGogIT0ga25vd25DaGFy
c2V0cygpLmVuZCgpKQorICAgICAgICAgICAgcmVnaXN0cmFyKGotPnNlY29uZC5tX25hbWUuZGF0
YSgpLCBuZXdUZXh0Q29kZWNXaW5jZSwgMCk7CisgICAgfQorfQorCitzdGF0aWMgRFdPUkQgZ2V0
Q29kZVBhZ2VGbGFncyhVSU5UIGNvZGVQYWdlKQoreworICAgIGlmIChjb2RlUGFnZSA9PSBDUF9V
VEY4KQorICAgICAgICByZXR1cm4gTUJfRVJSX0lOVkFMSURfQ0hBUlM7CisKKyAgICBpZiAoY29k
ZVBhZ2UgPT0gNDIpIC8vIFN5bWJvbAorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIE1pY3Jv
c29mdCBzYXlzIHRoZSBmbGFnIG11c3QgYmUgMCBmb3IgdGhlIGZvbGxvd2luZyBjb2RlIHBhZ2Vz
CisgICAgaWYgKGNvZGVQYWdlID4gNTAwMDApIHsKKyAgICAgICAgaWYgKChjb2RlUGFnZSA+PSA1
MDIyMCAmJiBjb2RlUGFnZSA8PSA1MDIyMikKKyAgICAgICAgICAgIHx8IGNvZGVQYWdlID09IDUw
MjI1CisgICAgICAgICAgICB8fCBjb2RlUGFnZSA9PSA1MDIyNworICAgICAgICAgICAgfHwgY29k
ZVBhZ2UgPT0gNTAyMjkKKyAgICAgICAgICAgIHx8IGNvZGVQYWdlID09IDUyOTM2CisgICAgICAg
ICAgICB8fCBjb2RlUGFnZSA9PSA1NDkzNgorICAgICAgICAgICAgfHwgKGNvZGVQYWdlID49IDU3
MDAyICYmIGNvZGVQYWdlIDw9IDU3MDAxKQorICAgICAgICAgICAgfHwgY29kZVBhZ2UgPT0gNjUw
MDAgLy8gVVRGLTcKKyAgICAgICAgICAgICkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0K
KworICAgIHJldHVybiBNQl9QUkVDT01QT1NFRCB8IE1CX0VSUl9JTlZBTElEX0NIQVJTOworfQor
CitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIGZpbmRGaXJzdE5vbkFzY2lpQ2hhcmFjdGVyKGNv
bnN0IGNoYXIqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoKQoreworICAgIGZvciAoY29uc3QgY2hhciog
Ynl0ZXNFbmQgPSBieXRlcyArIGxlbmd0aDsgYnl0ZXMgPCBieXRlc0VuZDsgKytieXRlcykgewor
ICAgICAgICBpZiAoKmJ5dGVzICYgMHg4MCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICByZXR1cm4gYnl0ZXM7Cit9CisKK3N0YXRpYyB2b2lkIGRlY29kZShWZWN0b3I8VUNoYXIsIDgx
OTI+JiByZXN1bHQsIGNvbnN0IGNoYXIqIGVuY29kaW5nTmFtZSwgY29uc3QgY2hhciogYnl0ZXMs
IHNpemVfdCBsZW5ndGgsIHNpemVfdCogbGVmdCwgYm9vbCBjYW5CZUZpcnN0VGltZSwgYm9vbCYg
c2F3SW52YWxpZENoYXIpCit7CisgICAgKmxlZnQgPSBsZW5ndGg7CisgICAgaWYgKCFieXRlcyB8
fCAhbGVuZ3RoKQorICAgICAgICByZXR1cm47CisKKyAgICBVSU5UIGNvZGVQYWdlOworCisgICAg
SGFzaE1hcDxTdHJpbmcsIENoYXJzZXRJbmZvPjo6aXRlcmF0b3IgaSA9IGtub3duQ2hhcnNldHMo
KS5maW5kKGVuY29kaW5nTmFtZSk7CisgICAgaWYgKGkgPT0ga25vd25DaGFyc2V0cygpLmVuZCgp
KSB7CisgICAgICAgIGlmICghc3RyY21wKGVuY29kaW5nTmFtZSwgIlVURi04IikpCisgICAgICAg
ICAgICBjb2RlUGFnZSA9IENQX1VURjg7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvZGVQ
YWdlID0gQ1BfQUNQOworICAgIH0gZWxzZSB7CisgICAgICAgIGNvZGVQYWdlID0gaS0+c2Vjb25k
Lm1fY29kZVBhZ2U7CisgICAgICAgIGlmIChpLT5zZWNvbmQubV91c2VzTmF0aXZlQ29kZWMpIHsK
KyAgICAgICAgICAgIHR5cGVkZWYgaW50ICgqRnVuY0V1Y01iVG9XYykod2NoYXJfdCAqcHdjLCBj
b25zdCB1bnNpZ25lZCBjaGFyICpzLCBpbnQgbik7CisgICAgICAgICAgICBGdW5jRXVjTWJUb1dj
IGVuY01iVG9XYyA9IDA7CisgICAgICAgICAgICBpZiAoIXN0cmNtcChlbmNvZGluZ05hbWUsICJF
VUMtSlAiKSkKKyAgICAgICAgICAgICAgICBlbmNNYlRvV2MgPSBUZXh0Q29kZWNzQ0U6OmV1Y19q
cF9tYnRvd2M7CisgICAgICAgICAgICBlbHNlIGlmICghc3RyY21wKGVuY29kaW5nTmFtZSwgIkNQ
ODc0IikpCisgICAgICAgICAgICAgICAgZW5jTWJUb1djID0gVGV4dENvZGVjc0NFOjpjcDg3NF9t
YnRvd2M7CisgICAgICAgICAgICBlbHNlIGlmICghc3RyY21wKGVuY29kaW5nTmFtZSwgIlRJUzYy
MCIpKQorICAgICAgICAgICAgICAgIGVuY01iVG9XYyA9IFRleHRDb2RlY3NDRTo6dGlzNjIwX21i
dG93YzsKKyAgICAgICAgICAgIGVsc2UgaWYgKCFzdHJjbXAoZW5jb2RpbmdOYW1lLCAiTUFDVEhB
SSIpKQorICAgICAgICAgICAgICAgIGVuY01iVG9XYyA9IFRleHRDb2RlY3NDRTo6bWFjX3RoYWlf
bWJ0b3djOworCisgICAgICAgICAgICBpZiAoZW5jTWJUb1djKSB7CisgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciogY29uc3Qgc3JjU3RhcnQgPSBieXRlczsKKyAgICAgICAgICAgICAgICBjb25z
dCBjaGFyKiBjb25zdCBzcmNFbmQgPSBieXRlcyArIGxlbmd0aDsKKyAgICAgICAgICAgICAgICBp
bnQgbGFzdFNpemUgPSByZXN1bHQuc2l6ZSgpOworICAgICAgICAgICAgICAgIHJlc3VsdC5yZXNp
emUobGFzdFNpemUgKyBsZW5ndGgpOworICAgICAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAg
ICAgICAgICAgICAgICAgVUNoYXIqIGRzdCA9IHJlc3VsdC5kYXRhKCkgKyBsYXN0U2l6ZTsKKyAg
ICAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIqIGNvbnN0IGRzdEVuZCA9IHJlc3VsdC5kYXRh
KCkgKyByZXN1bHQuc2l6ZSgpOworICAgICAgICAgICAgICAgICAgICBmb3IgKDsgZHN0IDwgZHN0
RW5kICYmIGJ5dGVzIDwgc3JjRW5kOyArK2RzdCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
aW50IG51bWJlckVuY29kZWQgPSBlbmNNYlRvV2MoZHN0LCAoY29uc3QgdW5zaWduZWQgY2hhciop
Ynl0ZXMsIHNyY0VuZCAtIGJ5dGVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudW1i
ZXJFbmNvZGVkID49IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXMgKz0gbnVt
YmVyRW5jb2RlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChudW1iZXJFbmNvZGVkID09IFJFVF9JTFNFUSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2F3SW52YWxpZENoYXIgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChieXRlcyA9PSBzcmNF
bmQgfHwgZHN0ICE9IGRzdEVuZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgKmxlZnQgPSBz
cmNFbmQgLSBieXRlczsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5yZXNpemUoZHN0
IC0gcmVzdWx0LmRhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbGFzdFNpemUgPSByZXN1bHQu
c2l6ZSgpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQucmVzaXplKHJlc3VsdC5zaXplKCkg
KyAyNTYpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgKmxlZnQgPSAwOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoYnl0ZXMs
IGxlbmd0aCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgRFdPUkQgZmxhZ3MgPSBnZXRDb2RlUGFnZUZsYWdzKGNvZGVQYWdl
KTsKKworICAgIGlmIChjb2RlUGFnZSA9PSBDUF9VVEY4KSB7CisgICAgICAgIGlmIChjYW5CZUZp
cnN0VGltZSkgeworICAgICAgICAgICAgLy8gSGFuZGxlIEJPTS4KKyAgICAgICAgICAgIGlmIChs
ZW5ndGggPiAzKSB7CisgICAgICAgICAgICAgICAgaWYgKGJ5dGVzWzBdID09IChjaGFyKTB4RUYg
JiYgYnl0ZXNbMV0gPT0gKGNoYXIpMHhCQiAmJiBieXRlc1syXSA9PSAoY2hhcikweEJGKSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIEJPTSBmb3VuZCEKKyAgICAgICAgICAgICAgICAgICAgbGVu
Z3RoIC09IDM7CisgICAgICAgICAgICAgICAgICAgIGJ5dGVzICs9IDM7CisgICAgICAgICAgICAg
ICAgICAgICpsZWZ0ID0gbGVuZ3RoOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAoYnl0ZXNbMF0gPT0gMHhFRiAmJiAobGVuZ3RoIDwgMiB8fCBieXRlc1sxXSA9PSAo
Y2hhcikweEJCKSAmJiAobGVuZ3RoIDwgMyB8fCBieXRlc1syXSA9PSAoY2hhcikweEJGKSkgewor
ICAgICAgICAgICAgICAgIGlmIChsZW5ndGggPT0gMykKKyAgICAgICAgICAgICAgICAgICAgKmxl
ZnQgPSAwOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIC8vIFByb2Nlc3MgQVNDSUkgY2hhcmFjdGVycyBhdCBiZWdpbm5pbmcuCisg
ICAgICAgIGNvbnN0IGNoYXIqIGZpcnN0Tm9uQXNjaWlDaGFyID0gZmluZEZpcnN0Tm9uQXNjaWlD
aGFyYWN0ZXIoYnl0ZXMsIGxlbmd0aCk7CisgICAgICAgIGludCBudW1Bc2NpaUNoYXJhY3RlcnMg
PSBmaXJzdE5vbkFzY2lpQ2hhciAtIGJ5dGVzOworICAgICAgICBpZiAobnVtQXNjaWlDaGFyYWN0
ZXJzKSB7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGJ5dGVzLCBudW1Bc2NpaUNoYXJhY3Rl
cnMpOworICAgICAgICAgICAgbGVuZ3RoIC09IG51bUFzY2lpQ2hhcmFjdGVyczsKKyAgICAgICAg
ICAgIGlmICghbGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgKmxlZnQgPSAwOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJ5dGVzID0gZmlyc3RO
b25Bc2NpaUNoYXI7CisgICAgICAgIH0KKworICAgICAgICBpbnQgb2xkU2l6ZSA9IHJlc3VsdC5z
aXplKCk7CisgICAgICAgIHJlc3VsdC5yZXNpemUob2xkU2l6ZSArIGxlbmd0aCk7CisgICAgICAg
IFVDaGFyKiByZXN1bHRTdGFydCA9IHJlc3VsdC5kYXRhKCkgKyBvbGRTaXplOworICAgICAgICBj
b25zdCBjaGFyKiBzb3VyY2VTdGFydCA9IGJ5dGVzOworICAgICAgICBjb25zdCBjaGFyKiBjb25z
dCBzb3VyY2VFbmQgPSBieXRlcyArIGxlbmd0aDsKKyAgICAgICAgZm9yICg7OykgeworICAgICAg
ICAgICAgdXNpbmcgbmFtZXNwYWNlIFdURjo6VW5pY29kZTsKKyAgICAgICAgICAgIENvbnZlcnNp
b25SZXN1bHQgY29udlJlcyA9IGNvbnZlcnRVVEY4VG9VVEYxNigmc291cmNlU3RhcnQKKyAgICAg
ICAgICAgICAgICAsIHNvdXJjZUVuZAorICAgICAgICAgICAgICAgICwgJnJlc3VsdFN0YXJ0Cisg
ICAgICAgICAgICAgICAgLCByZXN1bHQuZGF0YSgpICsgcmVzdWx0LnNpemUoKQorICAgICAgICAg
ICAgICAgICwgdHJ1ZSk7CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBpcyBpdCBwb3NzaWJsZT8K
KyAgICAgICAgICAgIGlmIChjb252UmVzID09IHRhcmdldEV4aGF1c3RlZCAmJiBzb3VyY2VTdGFy
dCA8IHNvdXJjZUVuZCkgeworICAgICAgICAgICAgICAgIG9sZFNpemUgPSByZXN1bHQuc2l6ZSgp
OworICAgICAgICAgICAgICAgIHJlc3VsdC5yZXNpemUob2xkU2l6ZSArIDI1Nik7CisgICAgICAg
ICAgICAgICAgcmVzdWx0U3RhcnQgPSByZXN1bHQuZGF0YSgpICsgb2xkU2l6ZTsKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNvbnZS
ZXMgIT0gY29udmVyc2lvbk9LKQorICAgICAgICAgICAgICAgIHNhd0ludmFsaWRDaGFyID0gdHJ1
ZTsKKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAqbGVmdCA9IHNv
dXJjZUVuZCAtIHNvdXJjZVN0YXJ0OworICAgICAgICByZXN1bHQucmVzaXplKHJlc3VsdFN0YXJ0
IC0gcmVzdWx0LmRhdGEoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50IHRlc3RMZW5ndGgg
PSBsZW5ndGg7CisgICAgICAgIGludCB1bnRlc3RlZExlbmd0aCA9IGxlbmd0aDsKKyAgICAgICAg
Zm9yICg7OykgeworICAgICAgICAgICAgaW50IHJlc3VsdExlbmd0aCA9IE11bHRpQnl0ZVRvV2lk
ZUNoYXIoY29kZVBhZ2UsIGZsYWdzLCBieXRlcywgdGVzdExlbmd0aCwgMCwgMCk7CisKKyAgICAg
ICAgICAgIGlmIChyZXN1bHRMZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgICAgaW50IG9sZFNp
emUgPSByZXN1bHQuc2l6ZSgpOworICAgICAgICAgICAgICAgIHJlc3VsdC5yZXNpemUob2xkU2l6
ZSArIHJlc3VsdExlbmd0aCk7CisKKyAgICAgICAgICAgICAgICBNdWx0aUJ5dGVUb1dpZGVDaGFy
KGNvZGVQYWdlLCBmbGFncywgYnl0ZXMsIHRlc3RMZW5ndGgsIHJlc3VsdC5kYXRhKCkgKyBvbGRT
aXplLCByZXN1bHRMZW5ndGgpOworCisgICAgICAgICAgICAgICAgaWYgKHRlc3RMZW5ndGggPT0g
dW50ZXN0ZWRMZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgKmxlZnQgPSBsZW5ndGggLSB0
ZXN0TGVuZ3RoOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgdW50ZXN0ZWRMZW5ndGggLT0gdGVzdExlbmd0aDsKKyAgICAgICAg
ICAgICAgICBsZW5ndGggLT0gdGVzdExlbmd0aDsKKyAgICAgICAgICAgICAgICBieXRlcyArPSB0
ZXN0TGVuZ3RoOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB1bnRlc3Rl
ZExlbmd0aCA9IHRlc3RMZW5ndGggLSAxOworICAgICAgICAgICAgICAgIGlmICghdW50ZXN0ZWRM
ZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgKmxlZnQgPSBsZW5ndGg7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHRlc3RMZW5ndGggPSAodW50ZXN0ZWRMZW5ndGggKyAxKSAvIDI7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK1N0cmluZyBUZXh0Q29kZWNXaW5jZTo6ZGVjb2RlKGNvbnN0IGNoYXIqIGJ5
dGVzLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoLCBib29sIHN0b3BPbkVycm9yLCBib29sJiBz
YXdFcnJvcikKK3sKKyAgICBpZiAoIW1fZGVjb2RlQnVmZmVyLmlzRW1wdHkoKSkgeworICAgICAg
ICBtX2RlY29kZUJ1ZmZlci5hcHBlbmQoYnl0ZXMsIGxlbmd0aCk7CisgICAgICAgIGJ5dGVzID0g
bV9kZWNvZGVCdWZmZXIuZGF0YSgpOworICAgICAgICBsZW5ndGggPSBtX2RlY29kZUJ1ZmZlci5z
aXplKCk7CisgICAgfQorCisgICAgc2l6ZV90IGxlZnQ7CisgICAgVmVjdG9yPFVDaGFyLCA4MTky
PiByZXN1bHQ7CisgICAgZm9yICg7OykgeworICAgICAgICBib29sIHNhd0ludmFsaWRDaGFyID0g
ZmFsc2U7CisgICAgICAgIFdlYkNvcmU6OmRlY29kZShyZXN1bHQsIG1fZW5jb2RpbmcubmFtZSgp
LCBieXRlcywgbGVuZ3RoLCAmbGVmdCwgbV9kZWNvZGVCdWZmZXIuaXNFbXB0eSgpLCBzYXdJbnZh
bGlkQ2hhcik7CisgICAgICAgIGlmICghbGVmdCkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIGlmICghc2F3SW52YWxpZENoYXIgJiYgIWZsdXNoICYmIGxlZnQgPCAxNikKKyAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgIHJlc3VsdC5hcHBlbmQoTCc/Jyk7CisgICAgICAgIHNhd0Vy
cm9yID0gdHJ1ZTsKKyAgICAgICAgaWYgKHN0b3BPbkVycm9yKQorICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhyZXN1bHQuZGF0YSgpLCByZXN1bHQuc2l6ZSgpKTsKKworCisgICAgICAgIGlmIChs
ZWZ0ID09IDEpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBieXRlcyArPSBsZW5ndGgg
LSBsZWZ0ICsgMTsKKyAgICAgICAgbGVuZ3RoID0gbGVmdCAtIDE7CisgICAgfQorICAgIGlmIChs
ZWZ0ICYmICFmbHVzaCkgeworICAgICAgICBpZiAobV9kZWNvZGVCdWZmZXIuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgbV9kZWNvZGVCdWZmZXIuYXBwZW5kKGJ5dGVzICsgbGVuZ3RoIC0gbGVmdCwg
bGVmdCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbWVtbW92ZShtX2RlY29kZUJ1ZmZl
ci5kYXRhKCksIGJ5dGVzICsgbGVuZ3RoIC0gbGVmdCwgbGVmdCk7CisgICAgICAgICAgICBtX2Rl
Y29kZUJ1ZmZlci5yZXNpemUobGVmdCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAg
bV9kZWNvZGVCdWZmZXIuY2xlYXIoKTsKKyAgICByZXR1cm4gU3RyaW5nKHJlc3VsdC5kYXRhKCks
IHJlc3VsdC5zaXplKCkpOworfQorCitDU3RyaW5nIFRleHRDb2RlY1dpbmNlOjplbmNvZGUoY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIFVuZW5jb2RhYmxlSGFuZGxpbmcp
Cit7CisgICAgaWYgKCFjaGFyYWN0ZXJzIHx8ICFsZW5ndGgpCisgICAgICAgIHJldHVybiBDU3Ry
aW5nKCk7CisKKyAgICBVSU5UIGNvZGVQYWdlID0gZ2V0Q29kZVBhZ2UobV9lbmNvZGluZy5uYW1l
KCkpOworICAgIERXT1JEIGZsYWdzID0gY29kZVBhZ2UgPT0gQ1BfVVRGOCA/IDAgOiBXQ19DT01Q
T1NJVEVDSEVDSzsKKworICAgIGludCByZXN1bHRMZW5ndGggPSBXaWRlQ2hhclRvTXVsdGlCeXRl
KGNvZGVQYWdlLCBmbGFncywgY2hhcmFjdGVycywgbGVuZ3RoLCAwLCAwLCAwLCAwKTsKKworICAg
IC8vIEZJWE1FOiBXZSBuZWVkIHRvIGltcGxlbWVudCBVbmVuY29kYWJsZUhhbmRsaW5nOiBRdWVz
dGlvbk1hcmtzRm9yVW5lbmNvZGFibGVzLCBFbnRpdGllc0ZvclVuZW5jb2RhYmxlcywgYW5kIFVS
TEVuY29kZWRFbnRpdGllc0ZvclVuZW5jb2RhYmxlcy4KKworICAgIGlmIChyZXN1bHRMZW5ndGgg
PD0gMCkKKyAgICAgICAgcmV0dXJuICI/IjsKKworICAgIFZlY3RvcjxjaGFyPiByZXN1bHQocmVz
dWx0TGVuZ3RoKTsKKworICAgIFdpZGVDaGFyVG9NdWx0aUJ5dGUoY29kZVBhZ2UsIGZsYWdzLCBj
aGFyYWN0ZXJzLCBsZW5ndGgsIHJlc3VsdC5kYXRhKCksIHJlc3VsdExlbmd0aCwgMCwgMCk7CisK
KyAgICByZXR1cm4gQ1N0cmluZyhyZXN1bHQuZGF0YSgpLCByZXN1bHQuc2l6ZSgpKTsKK30KKwor
dm9pZCBUZXh0Q29kZWNXaW5jZTo6ZW51bWVyYXRlU3VwcG9ydGVkRW5jb2RpbmdzKEVuY29kaW5n
UmVjZWl2ZXImIHJlY2VpdmVyKQoreworICAgIGxhbmd1YWdlTWFuYWdlcigpOworICAgIGZvciAo
Q2hhcnNldFNldDo6aXRlcmF0b3IgaSA9IHN1cHBvcnRlZENoYXJzZXRzKCkuYmVnaW4oKTsgaSAh
PSBzdXBwb3J0ZWRDaGFyc2V0cygpLmVuZCgpOyArK2kpIHsKKyAgICAgICAgSGFzaE1hcDxTdHJp
bmcsIENoYXJzZXRJbmZvPjo6aXRlcmF0b3IgaiA9IGtub3duQ2hhcnNldHMoKS5maW5kKCppKTsK
KyAgICAgICAgaWYgKGogIT0ga25vd25DaGFyc2V0cygpLmVuZCgpICYmICFyZWNlaXZlci5yZWNl
aXZlKGotPnNlY29uZC5tX25hbWUuZGF0YSgpLCBqLT5zZWNvbmQubV9mcmllbmRseU5hbWUuY2hh
cmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgai0+c2Vjb25kLm1fY29kZVBhZ2UpKQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvd2luY2UvVGV4dENvZGVjV2luY2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvd2luY2UvVGV4dENvZGVjV2luY2UuaAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC93aW5jZS9UZXh0Q29kZWNXaW5jZS5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEBueXBvcC5jb20+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDctMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBUZXh0Q29k
ZWNXaW5jZV9oCisjZGVmaW5lIFRleHRDb2RlY1dpbmNlX2gKKworI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyaW5nLmgiCisjaW5jbHVkZSAiVGV4dENvZGVjLmgiCisjaW5jbHVkZSAiVGV4dEVuY29kaW5n
LmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIFRleHRDb2RlY1dpbmNlIDogcHVibGljIFRleHRDb2RlYyB7CitwdWJsaWM6CisgICAgc3Rh
dGljIHZvaWQgcmVnaXN0ZXJCYXNlRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIp
OworICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQmFzZUNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIp
OworCisgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJFeHRlbmRlZEVuY29kaW5nTmFtZXMoRW5jb2Rp
bmdOYW1lUmVnaXN0cmFyKTsKKyAgICBzdGF0aWMgdm9pZCByZWdpc3RlckV4dGVuZGVkQ29kZWNz
KFRleHRDb2RlY1JlZ2lzdHJhcik7CisKKyAgICBUZXh0Q29kZWNXaW5jZShjb25zdCBUZXh0RW5j
b2RpbmcmKTsKKyAgICB2aXJ0dWFsIH5UZXh0Q29kZWNXaW5jZSgpOworCisgICAgdmlydHVhbCBT
dHJpbmcgZGVjb2RlKGNvbnN0IGNoYXIqLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoLCBib29s
IHN0b3BPbkVycm9yLCBib29sJiBzYXdFcnJvcik7CisgICAgdmlydHVhbCBDU3RyaW5nIGVuY29k
ZShjb25zdCBVQ2hhciosIHNpemVfdCBsZW5ndGgsIFVuZW5jb2RhYmxlSGFuZGxpbmcpOworCisg
ICAgc3RydWN0IEVuY29kaW5nSW5mbyB7CisgICAgICAgIFN0cmluZyBtX2VuY29kaW5nOworICAg
ICAgICBTdHJpbmcgbV9mcmllbmRseU5hbWU7CisgICAgfTsKKworICAgIHN0cnVjdCBFbmNvZGlu
Z1JlY2VpdmVyIHsKKyAgICAgICAgLy8gUmV0dXJuIGZhbHNlIHRvIHN0b3AgZW51bWVyYXRpbmcu
CisgICAgICAgIHZpcnR1YWwgYm9vbCByZWNlaXZlKGNvbnN0IGNoYXIqIGVuY29kaW5nLCBjb25z
dCB3Y2hhcl90KiBmcmllbmRseU5hbWUsIHVuc2lnbmVkIGludCBjb2RlUGFnZSkgPSAwOworICAg
IH07CisKKyAgICBzdGF0aWMgdm9pZCBlbnVtZXJhdGVTdXBwb3J0ZWRFbmNvZGluZ3MoRW5jb2Rp
bmdSZWNlaXZlciYgcmVjZWl2ZXIpOworCitwcml2YXRlOgorICAgIFRleHRFbmNvZGluZyBtX2Vu
Y29kaW5nOworICAgIFZlY3RvcjxjaGFyPiBtX2RlY29kZUJ1ZmZlcjsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFRleHRDb2RlY1dpbmNlX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47422</attachid>
            <date>2010-01-26 11:12:55 -0800</date>
            <delta_ts>2010-04-08 10:57:43 -0700</delta_ts>
            <desc>The patch</desc>
            <filename>TextCodecWince.patch</filename>
            <type>text/plain</type>
            <size>23575</size>
            <attacher name="Patrick R. Gansterer">paroga</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1Mzg1OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzYgQEAKKzIwMTAtMDEtMjYgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHBh
cm9nYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgSW1wbGVtZW50IFRleHRDb2RlY3MgZm9yIFdpbkNFIHBvcnQuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjE2OSAKKworICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bmNlL0ZvbnRDYWNoZVdpbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0
TXVsdGlMYW5ndWFnZUludGVyZmFjZSk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC93aW5jZS9U
ZXh0Q29kZWNXaW5jZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29kZVBhZ2VDaGFy
c2V0cyk6CisgICAgICAgIChXZWJDb3JlOjprbm93bkNoYXJzZXRzKToKKyAgICAgICAgKFdlYkNv
cmU6OnN1cHBvcnRlZENoYXJzZXRzKToKKyAgICAgICAgKFdlYkNvcmU6Omxhbmd1YWdlTWFuYWdl
cik6CisgICAgICAgIChXZWJDb3JlOjphZGRDaGFyc2V0KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
bmd1YWdlTWFuYWdlcjo6TGFuZ3VhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OmdldENv
ZGVQYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Om5ld1RleHRDb2RlY1dpbmNlKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRDb2RlY1dpbmNlOjpUZXh0Q29kZWNXaW5jZSk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0Q29kZWNXaW5jZTo6flRleHRDb2RlY1dpbmNlKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHRDb2RlY1dpbmNlOjpyZWdpc3RlckJhc2VFbmNvZGluZ05hbWVzKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHRDb2RlY1dpbmNlOjpyZWdpc3RlckJhc2VDb2RlY3MpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dENvZGVjV2luY2U6OnJlZ2lzdGVyRXh0ZW5kZWRFbmNvZGluZ05hbWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY1dpbmNlOjpyZWdpc3RlckV4dGVuZGVkQ29kZWNzKToK
KyAgICAgICAgKFdlYkNvcmU6OmdldENvZGVQYWdlRmxhZ3MpOgorICAgICAgICAoV2ViQ29yZTo6
ZmluZEZpcnN0Tm9uQXNjaWlDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6ZGVjb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY1dpbmNlOjpkZWNvZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dENvZGVjV2luY2U6OmVuY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29k
ZWNXaW5jZTo6ZW51bWVyYXRlU3VwcG9ydGVkRW5jb2RpbmdzKToKKyAgICAgICAgKiBwbGF0Zm9y
bS90ZXh0L3dpbmNlL1RleHRDb2RlY1dpbmNlLmg6IEFkZGVkLgorCiAyMDEwLTAxLTI2ICBDaHJp
cyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RGFyaW4gQWRsZXIuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgJKHJl
dmlzaW9uIDUzODU4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNzIsNiArNzIsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICBzdGF0
aWMgdm9pZCBjb21Jbml0aWFsaXplKCk7CiAgICAgc3RhdGljIHZvaWQgY29tVW5pbml0aWFsaXpl
KCk7CisgICAgc3RhdGljIElNdWx0aUxhbmd1YWdlKiBnZXRNdWx0aUxhbmd1YWdlSW50ZXJmYWNl
KCk7CiAjZWxpZiBQTEFURk9STShXSU4pCiAgICAgSU1MYW5nRm9udExpbmsyKiBnZXRGb250TGlu
a0ludGVyZmFjZSgpOwogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bmNlL0ZvbnRDYWNoZVdpbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbmNlL0ZvbnRDYWNoZVdpbmNlLmNwcAkocmV2aXNpb24gNTM4NTgpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRDYWNoZVdpbmNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTEsNyArNTEsNyBAQCBzdGF0aWMgSU1MYW5nRm9udExpbmsyKiBsYW5nRm9udExp
bmsgPSAwCiBzdGF0aWMgSU1MYW5nRm9udExpbmsqIGxhbmdGb250TGluayA9IDA7CiAjZW5kaWYK
IAotSU11bHRpTGFuZ3VhZ2UqIGdldE11bHRpTGFuZ3VhZ2VJbnRlcmZhY2UoKQorSU11bHRpTGFu
Z3VhZ2UqIEZvbnRDYWNoZTo6Z2V0TXVsdGlMYW5ndWFnZUludGVyZmFjZSgpCiB7CiAgICAgaWYg
KCFtdWx0aUxhbmd1YWdlKQogICAgICAgICBDb0NyZWF0ZUluc3RhbmNlKENMU0lEX0NNdWx0aUxh
bmd1YWdlLCAwLCBDTFNDVFhfSU5QUk9DX1NFUlZFUiwgSUlEX0lNdWx0aUxhbmd1YWdlLCAodm9p
ZCoqKSZtdWx0aUxhbmd1YWdlKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC93aW5jZS9U
ZXh0Q29kZWNXaW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3dp
bmNlL1RleHRDb2RlY1dpbmNlLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
dGV4dC93aW5jZS9UZXh0Q29kZWNXaW5jZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDgz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGkgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXh0Q29kZWNXaW5jZS5oIgorCisjaW5jbHVkZSAi
Y2VfdGV4dGNvZGVjcy5oIgorI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJGb250Q2Fj
aGUuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2gu
aCIKKyNpbmNsdWRlIDxtbGFuZy5oPgorI2luY2x1ZGUgPHdpbmJhc2UuaD4KKyNpbmNsdWRlIDx3
aW5ubHMuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CisjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVVRGOC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3N0cnVjdCBDaGFyc2V0SW5mbyB7CisgICAgQ1N0cmluZyBtX25hbWU7CisgICAgU3RyaW5n
IG1fZnJpZW5kbHlOYW1lOworICAgIFVJTlQgbV9jb2RlUGFnZTsKKyAgICBWZWN0b3I8Q1N0cmlu
Zz4gbV9hbGlhc2VzOworICAgIGJvb2wgbV91c2VzTmF0aXZlQ29kZWM7Cit9OworCitjbGFzcyBM
YW5ndWFnZU1hbmFnZXIgeworcHJpdmF0ZToKKyAgICBMYW5ndWFnZU1hbmFnZXIoKTsKKworICAg
IGZyaWVuZCBMYW5ndWFnZU1hbmFnZXImIGxhbmd1YWdlTWFuYWdlcigpOworfTsKKworLy8gVXNh
Z2U6IGEgbG9va3VwIHRhYmxlIHVzZWQgdG8gZ2V0IENoYXJzZXRJbmZvIHdpdGggY29kZSBwYWdl
IElELgorLy8gS2V5OiBjb2RlIHBhZ2UgSUQuIFZhbHVlOiBjaGFyc2V0IGluZm9ybWF0aW9uLgor
c3RhdGljIEhhc2hNYXA8VUlOVCwgQ1N0cmluZz4mIGNvZGVQYWdlQ2hhcnNldHMoKQoreworICAg
IHN0YXRpYyBIYXNoTWFwPFVJTlQsIENTdHJpbmc+IGNjOworICAgIHJldHVybiBjYzsKK30KKwor
c3RhdGljIEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5mbz4mIGtub3duQ2hhcnNldHMoKQorewor
ICAgIHN0YXRpYyBIYXNoTWFwPFN0cmluZywgQ2hhcnNldEluZm8+IGtjOworICAgIHJldHVybiBr
YzsKK30KKworLy8gVXNhZ2U6IGEgbWFwIHRoYXQgc3RvcmVzIGNoYXJzZXRzIHRoYXQgYXJlIHN1
cHBvcnRlZCBieSBzeXN0ZW0uIFNvcnRlZCBieSBuYW1lLgorLy8gS2V5OiBjaGFyc2V0LiBWYWx1
ZTogY29kZSBwYWdlIElELgordHlwZWRlZiBIYXNoU2V0PFN0cmluZz4gQ2hhcnNldFNldDsKK3N0
YXRpYyBDaGFyc2V0U2V0JiBzdXBwb3J0ZWRDaGFyc2V0cygpCit7CisgICAgc3RhdGljIENoYXJz
ZXRTZXQgc2w7CisgICAgcmV0dXJuIHNsOworfQorCitzdGF0aWMgTGFuZ3VhZ2VNYW5hZ2VyJiBs
YW5ndWFnZU1hbmFnZXIoKQoreworICAgIHN0YXRpYyBMYW5ndWFnZU1hbmFnZXIgbG07CisgICAg
cmV0dXJuIGxtOworfQorCitzdGF0aWMgdm9pZCBhZGRDaGFyc2V0KFVJTlQgY29kZVBhZ2UsIGNv
bnN0IGNoYXIqIGNoYXJzZXROYW1lLCBjb25zdCB3Y2hhcl90KiBmcmllbmRseU5hbWUsIGNvbnN0
IGNoYXIqIGNoYXJzZXRBbGlhc2VzLCBib29sIG5hdGl2ZVN1cHBvcnQgPSBmYWxzZSkKK3sKKyAg
ICBDaGFyc2V0SW5mbyBpbmZvOworICAgIGluZm8ubV9jb2RlUGFnZSA9IGNvZGVQYWdlOworICAg
IGluZm8ubV9uYW1lID0gY2hhcnNldE5hbWU7CisgICAgaW5mby5tX2ZyaWVuZGx5TmFtZSA9IGZy
aWVuZGx5TmFtZTsKKyAgICBpbmZvLm1fdXNlc05hdGl2ZUNvZGVjID0gbmF0aXZlU3VwcG9ydDsK
KyAgICBjb25zdCBjaGFyKiBiZWdpbiA9IGNoYXJzZXRBbGlhc2VzOworICAgIGZvciAoOzspIHsK
KyAgICAgICAgY29uc3QgY2hhciogZW5kID0gc3RyY2hyKGJlZ2luLCAnfCcpOworICAgICAgICBD
U3RyaW5nIGFsaWFzID0gZW5kID8gQ1N0cmluZyhiZWdpbiwgZW5kIC0gYmVnaW4pIDogYmVnaW47
CisgICAgICAgIGlmIChhbGlhcy5sZW5ndGgoKSkKKyAgICAgICAgICAgIGluZm8ubV9hbGlhc2Vz
LmFwcGVuZChhbGlhcyk7CisgICAgICAgIGlmICghZW5kKQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGJlZ2luID0gZW5kICsgMTsKKyAgICB9CisgICAga25vd25DaGFyc2V0cygpLnNldChp
bmZvLm1fbmFtZS5kYXRhKCksIGluZm8pOworICAgIGlmIChjb2RlUGFnZSAhPSBDUF9BQ1ApCisg
ICAgICAgIGNvZGVQYWdlQ2hhcnNldHMoKS5zZXQoY29kZVBhZ2UsIGluZm8ubV9uYW1lKTsKK30K
KworTGFuZ3VhZ2VNYW5hZ2VyOjpMYW5ndWFnZU1hbmFnZXIoKQoreworICAgIC8vIDQzNywgNzA4
LCA3MDksIDcxMCwgNzIwLCA3MzcsIDc3NSwgODUwLCA4NTIKKyAgICBhZGRDaGFyc2V0KDkzMiwg
ICAgICJTSElGVF9KSVMiLCBMIkphcGFuZXNlIChTSElGVF9KSVMpIiwgICAgICAgICJzaGlmdF9q
aXMiKTsKKyAgICBhZGRDaGFyc2V0KDkzNiwgICAgICJHQksiLCAgICAgICBMIkNoaW5lc2UgU2lt
cGxpZmllZCAoR0JLKSIsICAgICJnYmt8Z2IyMzEyIik7CisgICAgYWRkQ2hhcnNldCg5NDksICAg
ICAiS1NDNTYwMSIsICAgTCJLb3JlYW4gKEtTQzU2MDEpIiwgICAgICAgICAgICAia3NfY181NjAx
LTE5ODd8a3NjNTYwMXxldWMta3J8ZXVja3J8eC1ldWMta3IiKTsKKyAgICBhZGRDaGFyc2V0KDk1
MCwgICAgICJCSUc1IiwgICAgICBMIkNoaW5lc2UgVHJhZGl0aW9uYWwgKEJJRzUpIiwgICJiaWc1
Iik7CisgICAgYWRkQ2hhcnNldCgxMzYxLCAgICAiSk9IQUIiLCAgICAgTCJLb3JlYW4gKEpvaGFi
KSIsICAgICAgICAgICAgICAiam9oYWJ8a29yZWFuLmpvaGFiIik7CisgICAgYWRkQ2hhcnNldCg1
MTkzMiwgICAiRVVDLUpQIiwgICAgTCJKYXBhbmVzZSAoRVVDKSIsICAgICAgICAgICAgICAiZXVj
LWpwfGV1Y2pwfHgtZXVjLWpwIiwgdHJ1ZSk7CisgICAgYWRkQ2hhcnNldCg4NzQsICAgICAiQ1A4
NzQiLCAgICAgTCJUaGFpIChXaW5kb3dzKSIsICAgICAgICAgICAgICAiY3A4NzR8d2luZG93cy04
NzQiLCB0cnVlKTsKKyAgICBhZGRDaGFyc2V0KENQX0FDUCwgICJUSVM2MjAiLCAgICBMIlRoYWkg
KFRJUyA2MjApIiwgICAgICAgICAgICAgICJ0aXM2MjB8SVNPLTg4NTktMTF8SVNPLUlSLTE2NnxU
SVMtNjIwfFRJUzYyMC0wVElTNjIwLjI1MjktMXxUSVM2MjAuMjUzMy0wfFRJUzYyMC4yNTMzLTF8
dGhhaTgiLCB0cnVlKTsKKyAgICBhZGRDaGFyc2V0KENQX0FDUCwgICJNQUNUSEFJIiwgICBMIlRo
YWkgKE1hYyBPUykiLCAgICAgICAgICAgICAgICJtYWN0aGFpfHgtbWFjLXRoYWl8bWFjLXRoYWki
LCB0cnVlKTsKKyAgICBzdXBwb3J0ZWRDaGFyc2V0cygpLmFkZCgiRVVDLUpQIik7CisgICAgc3Vw
cG9ydGVkQ2hhcnNldHMoKS5hZGQoIkNQODc0Iik7CisgICAgc3VwcG9ydGVkQ2hhcnNldHMoKS5h
ZGQoIlRJUzYyMCIpOworICAgIHN1cHBvcnRlZENoYXJzZXRzKCkuYWRkKCJNQUNUSEFJIik7CisK
KyAgICBJRW51bUNvZGVQYWdlKiBlbnVtSW50ZXJmYWNlOworICAgIElNdWx0aUxhbmd1YWdlKiBt
bGkgPSBGb250Q2FjaGU6OmdldE11bHRpTGFuZ3VhZ2VJbnRlcmZhY2UoKTsKKyAgICBpZiAobWxp
ICYmIFNfT0sgPT0gbWxpLT5FbnVtQ29kZVBhZ2VzKE1JTUVDT05URl9CUk9XU0VSLCAmZW51bUlu
dGVyZmFjZSkpIHsKKyAgICAgICAgTUlNRUNQSU5GTyBjcEluZm87CisgICAgICAgIFVMT05HIGNj
cEluZm87CisgICAgICAgIHdoaWxlIChTX09LID09IGVudW1JbnRlcmZhY2UtPk5leHQoMSwgJmNw
SW5mbywgJmNjcEluZm8pICYmIGNjcEluZm8pIHsKKyAgICAgICAgICAgIGlmICghSXNWYWxpZENv
ZGVQYWdlKGNwSW5mby51aUNvZGVQYWdlKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICAgICAgSGFzaE1hcDxVSU5ULCBDU3RyaW5nPjo6aXRlcmF0b3IgaSA9IGNvZGVQYWdl
Q2hhcnNldHMoKS5maW5kKGNwSW5mby51aUNvZGVQYWdlKTsKKworICAgICAgICAgICAgQ1N0cmlu
ZyBuYW1lKFN0cmluZyhjcEluZm8ud3N6V2ViQ2hhcnNldCkubGF0aW4xKCkpOworICAgICAgICAg
ICAgaWYgKGkgPT0gY29kZVBhZ2VDaGFyc2V0cygpLmVuZCgpKSB7CisgICAgICAgICAgICAgICAg
Q2hhcnNldEluZm8gaW5mbzsKKyAgICAgICAgICAgICAgICBpbmZvLm1fY29kZVBhZ2UgPSBjcElu
Zm8udWlDb2RlUGFnZTsKKyAgICAgICAgICAgICAgICBrbm93bkNoYXJzZXRzKCkuc2V0KG5hbWUu
ZGF0YSgpLCBpbmZvKTsKKyAgICAgICAgICAgICAgICBpID0gY29kZVBhZ2VDaGFyc2V0cygpLnNl
dChjcEluZm8udWlDb2RlUGFnZSwgbmFtZSkuZmlyc3Q7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoaSAhPSBjb2RlUGFnZUNoYXJzZXRzKCkuZW5kKCkpIHsKKyAgICAgICAgICAgICAg
ICBIYXNoTWFwPFN0cmluZywgQ2hhcnNldEluZm8+OjppdGVyYXRvciBqID0ga25vd25DaGFyc2V0
cygpLmZpbmQoU3RyaW5nKGktPnNlY29uZC5kYXRhKCksIGktPnNlY29uZC5sZW5ndGgoKSkpOwor
ICAgICAgICAgICAgICAgIEFTU0VSVChqICE9IGtub3duQ2hhcnNldHMoKS5lbmQoKSk7CisgICAg
ICAgICAgICAgICAgQ2hhcnNldEluZm8mIGluZm8gPSBqLT5zZWNvbmQ7CisgICAgICAgICAgICAg
ICAgaW5mby5tX25hbWUgPSBpLT5zZWNvbmQuZGF0YSgpOworICAgICAgICAgICAgICAgIGluZm8u
bV9mcmllbmRseU5hbWUgPSBjcEluZm8ud3N6RGVzY3JpcHRpb247CisgICAgICAgICAgICAgICAg
aW5mby5tX2FsaWFzZXMuYXBwZW5kKG5hbWUpOworICAgICAgICAgICAgICAgIGluZm8ubV9hbGlh
c2VzLmFwcGVuZChTdHJpbmcoY3BJbmZvLndzekhlYWRlckNoYXJzZXQpLmxhdGluMSgpKTsKKyAg
ICAgICAgICAgICAgICBpbmZvLm1fYWxpYXNlcy5hcHBlbmQoU3RyaW5nKGNwSW5mby53c3pCb2R5
Q2hhcnNldCkubGF0aW4xKCkpOworICAgICAgICAgICAgICAgIGluZm8ubV91c2VzTmF0aXZlQ29k
ZWMgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgY3BOYW1lID0gU3RyaW5nOjpmb3Jt
YXQoImNwJWQiLCBjcEluZm8udWlDb2RlUGFnZSk7CisgICAgICAgICAgICAgICAgaW5mby5tX2Fs
aWFzZXMuYXBwZW5kKGNwTmFtZS5sYXRpbjEoKSk7CisgICAgICAgICAgICAgICAgc3VwcG9ydGVk
Q2hhcnNldHMoKS5hZGQoaS0+c2Vjb25kLmRhdGEoKSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgZW51bUludGVyZmFjZS0+UmVsZWFzZSgpOworICAgIH0KK30KKworc3RhdGlj
IFVJTlQgZ2V0Q29kZVBhZ2UoY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICBpZiAoIXN0cmNtcChu
YW1lLCAiVVRGLTgiKSkKKyAgICAgICAgcmV0dXJuIENQX1VURjg7CisKKyAgICAvLyBFeHBsaWNp
dGx5IHVzZSBhICJjb25zdCIgcmVmZXJlbmNlIHRvIGZpeCB0aGUgc2lsbHkgVlMgYnVpbGQgZXJy
b3IKKyAgICAvLyBzYXlpbmcgIj09IiBpcyBub3QgZm91bmQgZm9yIGNvbnN0X2l0ZXJhdG9yIGFu
ZCBpdGVyYXRvcgorICAgIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5mbz4mIGNoYXJz
ZXRzID0ga25vd25DaGFyc2V0cygpOworICAgIEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5mbz46
OmNvbnN0X2l0ZXJhdG9yIGkgPSBjaGFyc2V0cy5maW5kKG5hbWUpOworICAgIHJldHVybiBpID09
IGNoYXJzZXRzLmVuZCgpID8gQ1BfQUNQIDogaS0+c2Vjb25kLm1fY29kZVBhZ2U7Cit9CisKK3N0
YXRpYyBQYXNzT3duUHRyPFRleHRDb2RlYz4gbmV3VGV4dENvZGVjV2luY2UoY29uc3QgVGV4dEVu
Y29kaW5nJiBlbmNvZGluZywgY29uc3Qgdm9pZCopCit7CisgICAgcmV0dXJuIG5ldyBUZXh0Q29k
ZWNXaW5jZShlbmNvZGluZyk7Cit9CisKK1RleHRDb2RlY1dpbmNlOjpUZXh0Q29kZWNXaW5jZShj
b25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQorICAgIDogbV9lbmNvZGluZyhlbmNvZGluZykK
K3sKK30KKworVGV4dENvZGVjV2luY2U6On5UZXh0Q29kZWNXaW5jZSgpCit7Cit9CisKK3ZvaWQg
VGV4dENvZGVjV2luY2U6OnJlZ2lzdGVyQmFzZUVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVn
aXN0cmFyIHJlZ2lzdHJhcikKK3sKKyAgICByZWdpc3RyYXIoIlVURi04IiwgIlVURi04Iik7Cit9
CisKK3ZvaWQgVGV4dENvZGVjV2luY2U6OnJlZ2lzdGVyQmFzZUNvZGVjcyhUZXh0Q29kZWNSZWdp
c3RyYXIgcmVnaXN0cmFyKQoreworICAgIHJlZ2lzdHJhcigiVVRGLTgiLCBuZXdUZXh0Q29kZWNX
aW5jZSwgMCk7Cit9CisKK3ZvaWQgVGV4dENvZGVjV2luY2U6OnJlZ2lzdGVyRXh0ZW5kZWRFbmNv
ZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhciByZWdpc3RyYXIpCit7CisgICAgbGFuZ3Vh
Z2VNYW5hZ2VyKCk7CisgICAgZm9yIChDaGFyc2V0U2V0OjppdGVyYXRvciBpID0gc3VwcG9ydGVk
Q2hhcnNldHMoKS5iZWdpbigpOyBpICE9IHN1cHBvcnRlZENoYXJzZXRzKCkuZW5kKCk7ICsraSkg
eworICAgICAgICBIYXNoTWFwPFN0cmluZywgQ2hhcnNldEluZm8+OjppdGVyYXRvciBqID0ga25v
d25DaGFyc2V0cygpLmZpbmQoKmkpOworICAgICAgICBpZiAoaiAhPSBrbm93bkNoYXJzZXRzKCku
ZW5kKCkpIHsKKyAgICAgICAgICAgIHJlZ2lzdHJhcihqLT5zZWNvbmQubV9uYW1lLmRhdGEoKSwg
ai0+c2Vjb25kLm1fbmFtZS5kYXRhKCkpOworICAgICAgICAgICAgZm9yIChWZWN0b3I8Q1N0cmlu
Zz46OmNvbnN0X2l0ZXJhdG9yIGFsaWFzID0gai0+c2Vjb25kLm1fYWxpYXNlcy5iZWdpbigpOyBh
bGlhcyAhPSBqLT5zZWNvbmQubV9hbGlhc2VzLmVuZCgpOyArK2FsaWFzKQorICAgICAgICAgICAg
ICAgIHJlZ2lzdHJhcihhbGlhcy0+ZGF0YSgpLCBqLT5zZWNvbmQubV9uYW1lLmRhdGEoKSk7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgVGV4dENvZGVjV2luY2U6OnJlZ2lzdGVyRXh0ZW5k
ZWRDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3sKKyAgICBsYW5ndWFnZU1h
bmFnZXIoKTsKKyAgICBmb3IgKENoYXJzZXRTZXQ6Oml0ZXJhdG9yIGkgPSBzdXBwb3J0ZWRDaGFy
c2V0cygpLmJlZ2luKCk7IGkgIT0gc3VwcG9ydGVkQ2hhcnNldHMoKS5lbmQoKTsgKytpKSB7Cisg
ICAgICAgIEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5mbz46Oml0ZXJhdG9yIGogPSBrbm93bkNo
YXJzZXRzKCkuZmluZCgqaSk7CisgICAgICAgIGlmIChqICE9IGtub3duQ2hhcnNldHMoKS5lbmQo
KSkKKyAgICAgICAgICAgIHJlZ2lzdHJhcihqLT5zZWNvbmQubV9uYW1lLmRhdGEoKSwgbmV3VGV4
dENvZGVjV2luY2UsIDApOworICAgIH0KK30KKworc3RhdGljIERXT1JEIGdldENvZGVQYWdlRmxh
Z3MoVUlOVCBjb2RlUGFnZSkKK3sKKyAgICBpZiAoY29kZVBhZ2UgPT0gQ1BfVVRGOCkKKyAgICAg
ICAgcmV0dXJuIE1CX0VSUl9JTlZBTElEX0NIQVJTOworCisgICAgaWYgKGNvZGVQYWdlID09IDQy
KSAvLyBTeW1ib2wKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBNaWNyb3NvZnQgc2F5cyB0
aGUgZmxhZyBtdXN0IGJlIDAgZm9yIHRoZSBmb2xsb3dpbmcgY29kZSBwYWdlcworICAgIGlmIChj
b2RlUGFnZSA+IDUwMDAwKSB7CisgICAgICAgIGlmICgoY29kZVBhZ2UgPj0gNTAyMjAgJiYgY29k
ZVBhZ2UgPD0gNTAyMjIpCisgICAgICAgICAgICB8fCBjb2RlUGFnZSA9PSA1MDIyNQorICAgICAg
ICAgICAgfHwgY29kZVBhZ2UgPT0gNTAyMjcKKyAgICAgICAgICAgIHx8IGNvZGVQYWdlID09IDUw
MjI5CisgICAgICAgICAgICB8fCBjb2RlUGFnZSA9PSA1MjkzNgorICAgICAgICAgICAgfHwgY29k
ZVBhZ2UgPT0gNTQ5MzYKKyAgICAgICAgICAgIHx8IChjb2RlUGFnZSA+PSA1NzAwMiAmJiBjb2Rl
UGFnZSA8PSA1NzAwMSkKKyAgICAgICAgICAgIHx8IGNvZGVQYWdlID09IDY1MDAwIC8vIFVURi03
CisgICAgICAgICAgICApCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1
cm4gTUJfUFJFQ09NUE9TRUQgfCBNQl9FUlJfSU5WQUxJRF9DSEFSUzsKK30KKworc3RhdGljIGlu
bGluZSBjb25zdCBjaGFyKiBmaW5kRmlyc3ROb25Bc2NpaUNoYXJhY3Rlcihjb25zdCBjaGFyKiBi
eXRlcywgc2l6ZV90IGxlbmd0aCkKK3sKKyAgICBmb3IgKGNvbnN0IGNoYXIqIGJ5dGVzRW5kID0g
Ynl0ZXMgKyBsZW5ndGg7IGJ5dGVzIDwgYnl0ZXNFbmQ7ICsrYnl0ZXMpIHsKKyAgICAgICAgaWYg
KCpieXRlcyAmIDB4ODApCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIGJ5
dGVzOworfQorCitzdGF0aWMgdm9pZCBkZWNvZGUoVmVjdG9yPFVDaGFyLCA4MTkyPiYgcmVzdWx0
LCBjb25zdCBjaGFyKiBlbmNvZGluZ05hbWUsIGNvbnN0IGNoYXIqIGJ5dGVzLCBzaXplX3QgbGVu
Z3RoLCBzaXplX3QqIGxlZnQsIGJvb2wgY2FuQmVGaXJzdFRpbWUsIGJvb2wmIHNhd0ludmFsaWRD
aGFyKQoreworICAgICpsZWZ0ID0gbGVuZ3RoOworICAgIGlmICghYnl0ZXMgfHwgIWxlbmd0aCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgVUlOVCBjb2RlUGFnZTsKKworICAgIEhhc2hNYXA8U3Ry
aW5nLCBDaGFyc2V0SW5mbz46Oml0ZXJhdG9yIGkgPSBrbm93bkNoYXJzZXRzKCkuZmluZChlbmNv
ZGluZ05hbWUpOworICAgIGlmIChpID09IGtub3duQ2hhcnNldHMoKS5lbmQoKSkgeworICAgICAg
ICBpZiAoIXN0cmNtcChlbmNvZGluZ05hbWUsICJVVEYtOCIpKQorICAgICAgICAgICAgY29kZVBh
Z2UgPSBDUF9VVEY4OworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb2RlUGFnZSA9IENQX0FD
UDsKKyAgICB9IGVsc2UgeworICAgICAgICBjb2RlUGFnZSA9IGktPnNlY29uZC5tX2NvZGVQYWdl
OworICAgICAgICBpZiAoaS0+c2Vjb25kLm1fdXNlc05hdGl2ZUNvZGVjKSB7CisgICAgICAgICAg
ICB0eXBlZGVmIGludCAoKkZ1bmNFdWNNYlRvV2MpKHdjaGFyX3QgKnB3YywgY29uc3QgdW5zaWdu
ZWQgY2hhciAqcywgaW50IG4pOworICAgICAgICAgICAgRnVuY0V1Y01iVG9XYyBlbmNNYlRvV2Mg
PSAwOworICAgICAgICAgICAgaWYgKCFzdHJjbXAoZW5jb2RpbmdOYW1lLCAiRVVDLUpQIikpCisg
ICAgICAgICAgICAgICAgZW5jTWJUb1djID0gVGV4dENvZGVjc0NFOjpldWNfanBfbWJ0b3djOwor
ICAgICAgICAgICAgZWxzZSBpZiAoIXN0cmNtcChlbmNvZGluZ05hbWUsICJDUDg3NCIpKQorICAg
ICAgICAgICAgICAgIGVuY01iVG9XYyA9IFRleHRDb2RlY3NDRTo6Y3A4NzRfbWJ0b3djOworICAg
ICAgICAgICAgZWxzZSBpZiAoIXN0cmNtcChlbmNvZGluZ05hbWUsICJUSVM2MjAiKSkKKyAgICAg
ICAgICAgICAgICBlbmNNYlRvV2MgPSBUZXh0Q29kZWNzQ0U6OnRpczYyMF9tYnRvd2M7CisgICAg
ICAgICAgICBlbHNlIGlmICghc3RyY21wKGVuY29kaW5nTmFtZSwgIk1BQ1RIQUkiKSkKKyAgICAg
ICAgICAgICAgICBlbmNNYlRvV2MgPSBUZXh0Q29kZWNzQ0U6Om1hY190aGFpX21idG93YzsKKwor
ICAgICAgICAgICAgaWYgKGVuY01iVG9XYykgeworICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIq
IGNvbnN0IHNyY1N0YXJ0ID0gYnl0ZXM7CisgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29u
c3Qgc3JjRW5kID0gYnl0ZXMgKyBsZW5ndGg7CisgICAgICAgICAgICAgICAgaW50IGxhc3RTaXpl
ID0gcmVzdWx0LnNpemUoKTsKKyAgICAgICAgICAgICAgICByZXN1bHQucmVzaXplKGxhc3RTaXpl
ICsgbGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAg
ICAgIFVDaGFyKiBkc3QgPSByZXN1bHQuZGF0YSgpICsgbGFzdFNpemU7CisgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFVDaGFyKiBjb25zdCBkc3RFbmQgPSByZXN1bHQuZGF0YSgpICsgcmVzdWx0
LnNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICg7IGRzdCA8IGRzdEVuZCAmJiBieXRl
cyA8IHNyY0VuZDsgKytkc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1iZXJF
bmNvZGVkID0gZW5jTWJUb1djKGRzdCwgKGNvbnN0IHVuc2lnbmVkIGNoYXIqKWJ5dGVzLCBzcmNF
bmQgLSBieXRlcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtYmVyRW5jb2RlZCA+
PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzICs9IG51bWJlckVuY29kZWQ7
CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAobnVtYmVyRW5jb2RlZCA9PSBSRVRfSUxTRVEpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNhd0ludmFsaWRDaGFyID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoYnl0ZXMgPT0gc3JjRW5kIHx8IGRzdCAh
PSBkc3RFbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpsZWZ0ID0gc3JjRW5kIC0gYnl0
ZXM7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucmVzaXplKGRzdCAtIHJlc3VsdC5k
YXRhKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGxhc3RTaXplID0gcmVzdWx0LnNpemUoKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0LnJlc2l6ZShyZXN1bHQuc2l6ZSgpICsgMjU2KTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICps
ZWZ0ID0gMDsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGJ5dGVzLCBsZW5ndGgpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIERXT1JEIGZsYWdzID0gZ2V0Q29kZVBhZ2VGbGFncyhjb2RlUGFnZSk7CisKKyAgICBp
ZiAoY29kZVBhZ2UgPT0gQ1BfVVRGOCkgeworICAgICAgICBpZiAoY2FuQmVGaXJzdFRpbWUpIHsK
KyAgICAgICAgICAgIC8vIEhhbmRsZSBCT00uCisgICAgICAgICAgICBpZiAobGVuZ3RoID4gMykg
eworICAgICAgICAgICAgICAgIGlmIChieXRlc1swXSA9PSAoY2hhcikweEVGICYmIGJ5dGVzWzFd
ID09IChjaGFyKTB4QkIgJiYgYnl0ZXNbMl0gPT0gKGNoYXIpMHhCRikgeworICAgICAgICAgICAg
ICAgICAgICAvLyBCT00gZm91bmQhCisgICAgICAgICAgICAgICAgICAgIGxlbmd0aCAtPSAzOwor
ICAgICAgICAgICAgICAgICAgICBieXRlcyArPSAzOworICAgICAgICAgICAgICAgICAgICAqbGVm
dCA9IGxlbmd0aDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKGJ5
dGVzWzBdID09IDB4RUYgJiYgKGxlbmd0aCA8IDIgfHwgYnl0ZXNbMV0gPT0gKGNoYXIpMHhCQikg
JiYgKGxlbmd0aCA8IDMgfHwgYnl0ZXNbMl0gPT0gKGNoYXIpMHhCRikpIHsKKyAgICAgICAgICAg
ICAgICBpZiAobGVuZ3RoID09IDMpCisgICAgICAgICAgICAgICAgICAgICpsZWZ0ID0gMDsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICAvLyBQcm9jZXNzIEFTQ0lJIGNoYXJhY3RlcnMgYXQgYmVnaW5uaW5nLgorICAgICAgICBjb25z
dCBjaGFyKiBmaXJzdE5vbkFzY2lpQ2hhciA9IGZpbmRGaXJzdE5vbkFzY2lpQ2hhcmFjdGVyKGJ5
dGVzLCBsZW5ndGgpOworICAgICAgICBpbnQgbnVtQXNjaWlDaGFyYWN0ZXJzID0gZmlyc3ROb25B
c2NpaUNoYXIgLSBieXRlczsKKyAgICAgICAgaWYgKG51bUFzY2lpQ2hhcmFjdGVycykgeworICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZChieXRlcywgbnVtQXNjaWlDaGFyYWN0ZXJzKTsKKyAgICAg
ICAgICAgIGxlbmd0aCAtPSBudW1Bc2NpaUNoYXJhY3RlcnM7CisgICAgICAgICAgICBpZiAoIWxl
bmd0aCkgeworICAgICAgICAgICAgICAgICpsZWZ0ID0gMDsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBieXRlcyA9IGZpcnN0Tm9uQXNjaWlDaGFy
OworICAgICAgICB9CisKKyAgICAgICAgaW50IG9sZFNpemUgPSByZXN1bHQuc2l6ZSgpOworICAg
ICAgICByZXN1bHQucmVzaXplKG9sZFNpemUgKyBsZW5ndGgpOworICAgICAgICBVQ2hhciogcmVz
dWx0U3RhcnQgPSByZXN1bHQuZGF0YSgpICsgb2xkU2l6ZTsKKyAgICAgICAgY29uc3QgY2hhciog
c291cmNlU3RhcnQgPSBieXRlczsKKyAgICAgICAgY29uc3QgY2hhciogY29uc3Qgc291cmNlRW5k
ID0gYnl0ZXMgKyBsZW5ndGg7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIHVzaW5n
IG5hbWVzcGFjZSBXVEY6OlVuaWNvZGU7CisgICAgICAgICAgICBDb252ZXJzaW9uUmVzdWx0IGNv
bnZSZXMgPSBjb252ZXJ0VVRGOFRvVVRGMTYoJnNvdXJjZVN0YXJ0CisgICAgICAgICAgICAgICAg
LCBzb3VyY2VFbmQKKyAgICAgICAgICAgICAgICAsICZyZXN1bHRTdGFydAorICAgICAgICAgICAg
ICAgICwgcmVzdWx0LmRhdGEoKSArIHJlc3VsdC5zaXplKCkKKyAgICAgICAgICAgICAgICAsIHRy
dWUpOworCisgICAgICAgICAgICAvLyBGSVhNRTogaXMgaXQgcG9zc2libGU/CisgICAgICAgICAg
ICBpZiAoY29udlJlcyA9PSB0YXJnZXRFeGhhdXN0ZWQgJiYgc291cmNlU3RhcnQgPCBzb3VyY2VF
bmQpIHsKKyAgICAgICAgICAgICAgICBvbGRTaXplID0gcmVzdWx0LnNpemUoKTsKKyAgICAgICAg
ICAgICAgICByZXN1bHQucmVzaXplKG9sZFNpemUgKyAyNTYpOworICAgICAgICAgICAgICAgIHJl
c3VsdFN0YXJ0ID0gcmVzdWx0LmRhdGEoKSArIG9sZFNpemU7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjb252UmVzICE9IGNvbnZl
cnNpb25PSykKKyAgICAgICAgICAgICAgICBzYXdJbnZhbGlkQ2hhciA9IHRydWU7CisKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgKmxlZnQgPSBzb3VyY2VFbmQgLSBz
b3VyY2VTdGFydDsKKyAgICAgICAgcmVzdWx0LnJlc2l6ZShyZXN1bHRTdGFydCAtIHJlc3VsdC5k
YXRhKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIGludCB0ZXN0TGVuZ3RoID0gbGVuZ3RoOwor
ICAgICAgICBpbnQgdW50ZXN0ZWRMZW5ndGggPSBsZW5ndGg7CisgICAgICAgIGZvciAoOzspIHsK
KyAgICAgICAgICAgIGludCByZXN1bHRMZW5ndGggPSBNdWx0aUJ5dGVUb1dpZGVDaGFyKGNvZGVQ
YWdlLCBmbGFncywgYnl0ZXMsIHRlc3RMZW5ndGgsIDAsIDApOworCisgICAgICAgICAgICBpZiAo
cmVzdWx0TGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAgIGludCBvbGRTaXplID0gcmVzdWx0
LnNpemUoKTsKKyAgICAgICAgICAgICAgICByZXN1bHQucmVzaXplKG9sZFNpemUgKyByZXN1bHRM
ZW5ndGgpOworCisgICAgICAgICAgICAgICAgTXVsdGlCeXRlVG9XaWRlQ2hhcihjb2RlUGFnZSwg
ZmxhZ3MsIGJ5dGVzLCB0ZXN0TGVuZ3RoLCByZXN1bHQuZGF0YSgpICsgb2xkU2l6ZSwgcmVzdWx0
TGVuZ3RoKTsKKworICAgICAgICAgICAgICAgIGlmICh0ZXN0TGVuZ3RoID09IHVudGVzdGVkTGVu
Z3RoKSB7CisgICAgICAgICAgICAgICAgICAgICpsZWZ0ID0gbGVuZ3RoIC0gdGVzdExlbmd0aDsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIHVudGVzdGVkTGVuZ3RoIC09IHRlc3RMZW5ndGg7CisgICAgICAgICAgICAgICAgbGVu
Z3RoIC09IHRlc3RMZW5ndGg7CisgICAgICAgICAgICAgICAgYnl0ZXMgKz0gdGVzdExlbmd0aDsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdW50ZXN0ZWRMZW5ndGggPSB0
ZXN0TGVuZ3RoIC0gMTsKKyAgICAgICAgICAgICAgICBpZiAoIXVudGVzdGVkTGVuZ3RoKSB7Cisg
ICAgICAgICAgICAgICAgICAgICpsZWZ0ID0gbGVuZ3RoOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0ZXN0
TGVuZ3RoID0gKHVudGVzdGVkTGVuZ3RoICsgMSkgLyAyOworICAgICAgICB9CisgICAgfQorfQor
CitTdHJpbmcgVGV4dENvZGVjV2luY2U6OmRlY29kZShjb25zdCBjaGFyKiBieXRlcywgc2l6ZV90
IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3IpCit7
CisgICAgaWYgKCFtX2RlY29kZUJ1ZmZlci5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9kZWNvZGVC
dWZmZXIuYXBwZW5kKGJ5dGVzLCBsZW5ndGgpOworICAgICAgICBieXRlcyA9IG1fZGVjb2RlQnVm
ZmVyLmRhdGEoKTsKKyAgICAgICAgbGVuZ3RoID0gbV9kZWNvZGVCdWZmZXIuc2l6ZSgpOworICAg
IH0KKworICAgIHNpemVfdCBsZWZ0OworICAgIFZlY3RvcjxVQ2hhciwgODE5Mj4gcmVzdWx0Owor
ICAgIGZvciAoOzspIHsKKyAgICAgICAgYm9vbCBzYXdJbnZhbGlkQ2hhciA9IGZhbHNlOworICAg
ICAgICBXZWJDb3JlOjpkZWNvZGUocmVzdWx0LCBtX2VuY29kaW5nLm5hbWUoKSwgYnl0ZXMsIGxl
bmd0aCwgJmxlZnQsIG1fZGVjb2RlQnVmZmVyLmlzRW1wdHkoKSwgc2F3SW52YWxpZENoYXIpOwor
ICAgICAgICBpZiAoIWxlZnQpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoIXNh
d0ludmFsaWRDaGFyICYmICFmbHVzaCAmJiBsZWZ0IDwgMTYpCisgICAgICAgICAgICBicmVhazsK
KworICAgICAgICByZXN1bHQuYXBwZW5kKEwnPycpOworICAgICAgICBzYXdFcnJvciA9IHRydWU7
CisgICAgICAgIGlmIChzdG9wT25FcnJvcikKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcocmVz
dWx0LmRhdGEoKSwgcmVzdWx0LnNpemUoKSk7CisKKworICAgICAgICBpZiAobGVmdCA9PSAxKQor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgYnl0ZXMgKz0gbGVuZ3RoIC0gbGVmdCArIDE7
CisgICAgICAgIGxlbmd0aCA9IGxlZnQgLSAxOworICAgIH0KKyAgICBpZiAobGVmdCAmJiAhZmx1
c2gpIHsKKyAgICAgICAgaWYgKG1fZGVjb2RlQnVmZmVyLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
IG1fZGVjb2RlQnVmZmVyLmFwcGVuZChieXRlcyArIGxlbmd0aCAtIGxlZnQsIGxlZnQpOworICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1lbW1vdmUobV9kZWNvZGVCdWZmZXIuZGF0YSgpLCBi
eXRlcyArIGxlbmd0aCAtIGxlZnQsIGxlZnQpOworICAgICAgICAgICAgbV9kZWNvZGVCdWZmZXIu
cmVzaXplKGxlZnQpOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIG1fZGVjb2RlQnVm
ZmVyLmNsZWFyKCk7CisgICAgcmV0dXJuIFN0cmluZyhyZXN1bHQuZGF0YSgpLCByZXN1bHQuc2l6
ZSgpKTsKK30KKworQ1N0cmluZyBUZXh0Q29kZWNXaW5jZTo6ZW5jb2RlKGNvbnN0IFVDaGFyKiBj
aGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBVbmVuY29kYWJsZUhhbmRsaW5nKQoreworICAgIGlm
ICghY2hhcmFjdGVycyB8fCAhbGVuZ3RoKQorICAgICAgICByZXR1cm4gQ1N0cmluZygpOworCisg
ICAgVUlOVCBjb2RlUGFnZSA9IGdldENvZGVQYWdlKG1fZW5jb2RpbmcubmFtZSgpKTsKKyAgICBE
V09SRCBmbGFncyA9IGNvZGVQYWdlID09IENQX1VURjggPyAwIDogV0NfQ09NUE9TSVRFQ0hFQ0s7
CisKKyAgICBpbnQgcmVzdWx0TGVuZ3RoID0gV2lkZUNoYXJUb011bHRpQnl0ZShjb2RlUGFnZSwg
ZmxhZ3MsIGNoYXJhY3RlcnMsIGxlbmd0aCwgMCwgMCwgMCwgMCk7CisKKyAgICAvLyBGSVhNRTog
V2UgbmVlZCB0byBpbXBsZW1lbnQgVW5lbmNvZGFibGVIYW5kbGluZzogUXVlc3Rpb25NYXJrc0Zv
clVuZW5jb2RhYmxlcywgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMsIGFuZCBVUkxFbmNvZGVkRW50
aXRpZXNGb3JVbmVuY29kYWJsZXMuCisKKyAgICBpZiAocmVzdWx0TGVuZ3RoIDw9IDApCisgICAg
ICAgIHJldHVybiAiPyI7CisKKyAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0KHJlc3VsdExlbmd0aCk7
CisKKyAgICBXaWRlQ2hhclRvTXVsdGlCeXRlKGNvZGVQYWdlLCBmbGFncywgY2hhcmFjdGVycywg
bGVuZ3RoLCByZXN1bHQuZGF0YSgpLCByZXN1bHRMZW5ndGgsIDAsIDApOworCisgICAgcmV0dXJu
IENTdHJpbmcocmVzdWx0LmRhdGEoKSwgcmVzdWx0LnNpemUoKSk7Cit9CisKK3ZvaWQgVGV4dENv
ZGVjV2luY2U6OmVudW1lcmF0ZVN1cHBvcnRlZEVuY29kaW5ncyhFbmNvZGluZ1JlY2VpdmVyJiBy
ZWNlaXZlcikKK3sKKyAgICBsYW5ndWFnZU1hbmFnZXIoKTsKKyAgICBmb3IgKENoYXJzZXRTZXQ6
Oml0ZXJhdG9yIGkgPSBzdXBwb3J0ZWRDaGFyc2V0cygpLmJlZ2luKCk7IGkgIT0gc3VwcG9ydGVk
Q2hhcnNldHMoKS5lbmQoKTsgKytpKSB7CisgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0
SW5mbz46Oml0ZXJhdG9yIGogPSBrbm93bkNoYXJzZXRzKCkuZmluZCgqaSk7CisgICAgICAgIGlm
IChqICE9IGtub3duQ2hhcnNldHMoKS5lbmQoKSAmJiAhcmVjZWl2ZXIucmVjZWl2ZShqLT5zZWNv
bmQubV9uYW1lLmRhdGEoKSwgai0+c2Vjb25kLm1fZnJpZW5kbHlOYW1lLmNoYXJhY3RlcnNXaXRo
TnVsbFRlcm1pbmF0aW9uKCksIGotPnNlY29uZC5tX2NvZGVQYWdlKSkKKyAgICAgICAgICAgIGJy
ZWFrOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L3dpbmNlL1RleHRDb2RlY1dpbmNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L3dpbmNlL1RleHRDb2RlY1dpbmNlLmgJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL3RleHQvd2luY2UvVGV4dENvZGVjV2luY2UuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxl
eGV5IFByb3NrdXJ5YWtvdiA8YXBAbnlwb3AuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIw
MDkgVG9yY2ggTW9iaWxlLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVGV4dENvZGVjV2luY2VfaAor
I2RlZmluZSBUZXh0Q29kZWNXaW5jZV9oCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgor
I2luY2x1ZGUgIlRleHRDb2RlYy5oIgorI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUZXh0Q29k
ZWNXaW5jZSA6IHB1YmxpYyBUZXh0Q29kZWMgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIHJl
Z2lzdGVyQmFzZUVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyKTsKKyAgICBzdGF0
aWMgdm9pZCByZWdpc3RlckJhc2VDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyKTsKKworICAgIHN0
YXRpYyB2b2lkIHJlZ2lzdGVyRXh0ZW5kZWRFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lz
dHJhcik7CisgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJFeHRlbmRlZENvZGVjcyhUZXh0Q29kZWNS
ZWdpc3RyYXIpOworCisgICAgVGV4dENvZGVjV2luY2UoY29uc3QgVGV4dEVuY29kaW5nJik7Cisg
ICAgdmlydHVhbCB+VGV4dENvZGVjV2luY2UoKTsKKworICAgIHZpcnR1YWwgU3RyaW5nIGRlY29k
ZShjb25zdCBjaGFyKiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJv
ciwgYm9vbCYgc2F3RXJyb3IpOworICAgIHZpcnR1YWwgQ1N0cmluZyBlbmNvZGUoY29uc3QgVUNo
YXIqLCBzaXplX3QgbGVuZ3RoLCBVbmVuY29kYWJsZUhhbmRsaW5nKTsKKworICAgIHN0cnVjdCBF
bmNvZGluZ0luZm8geworICAgICAgICBTdHJpbmcgbV9lbmNvZGluZzsKKyAgICAgICAgU3RyaW5n
IG1fZnJpZW5kbHlOYW1lOworICAgIH07CisKKyAgICBzdHJ1Y3QgRW5jb2RpbmdSZWNlaXZlciB7
CisgICAgICAgIC8vIFJldHVybiBmYWxzZSB0byBzdG9wIGVudW1lcmF0aW5nLgorICAgICAgICB2
aXJ0dWFsIGJvb2wgcmVjZWl2ZShjb25zdCBjaGFyKiBlbmNvZGluZywgY29uc3Qgd2NoYXJfdCog
ZnJpZW5kbHlOYW1lLCB1bnNpZ25lZCBpbnQgY29kZVBhZ2UpID0gMDsKKyAgICB9OworCisgICAg
c3RhdGljIHZvaWQgZW51bWVyYXRlU3VwcG9ydGVkRW5jb2RpbmdzKEVuY29kaW5nUmVjZWl2ZXIm
IHJlY2VpdmVyKTsKKworcHJpdmF0ZToKKyAgICBUZXh0RW5jb2RpbmcgbV9lbmNvZGluZzsKKyAg
ICBWZWN0b3I8Y2hhcj4gbV9kZWNvZGVCdWZmZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBUZXh0Q29kZWNXaW5jZV9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52880</attachid>
            <date>2010-04-08 10:57:43 -0700</date>
            <delta_ts>2010-04-08 11:58:20 -0700</delta_ts>
            <desc>The patch</desc>
            <filename>TextCodecWince.patch</filename>
            <type>text/plain</type>
            <size>24270</size>
            <attacher name="Patrick R. Gansterer">paroga</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDUzODU4KQ0KKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
DQpAQCAtMSwzICsxLDM3IEBADQorMjAxMC0wMS0yNiAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJv
Z2FAcGFyb2dhLmNvbT4NCisNCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLg0K
Kw0KKyAgICAgICAgSW1wbGVtZW50IFRleHRDb2RlY3MgZm9yIFdpbkNFIHBvcnQuDQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzIxNjkNCisgICAgICAg
IE9yaWdpbmFsbHkgd3JpdHRlbiBieSBZb25nIExpIDx5b25nLmxpQHRvcmNobW9iaWxlLmNvbT4N
CisNCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmg6DQorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRDYWNoZVdpbmNlLmNwcDoNCisgICAgICAgIChX
ZWJDb3JlOjpGb250Q2FjaGU6OmdldE11bHRpTGFuZ3VhZ2VJbnRlcmZhY2UpOg0KKyAgICAgICAg
KiBwbGF0Zm9ybS90ZXh0L3dpbmNlL1RleHRDb2RlY1dpbmNlLmNwcDogQWRkZWQuDQorICAgICAg
ICAoV2ViQ29yZTo6Y29kZVBhZ2VDaGFyc2V0cyk6DQorICAgICAgICAoV2ViQ29yZTo6a25vd25D
aGFyc2V0cyk6DQorICAgICAgICAoV2ViQ29yZTo6c3VwcG9ydGVkQ2hhcnNldHMpOg0KKyAgICAg
ICAgKFdlYkNvcmU6Omxhbmd1YWdlTWFuYWdlcik6DQorICAgICAgICAoV2ViQ29yZTo6YWRkQ2hh
cnNldCk6DQorICAgICAgICAoV2ViQ29yZTo6TGFuZ3VhZ2VNYW5hZ2VyOjpMYW5ndWFnZU1hbmFn
ZXIpOg0KKyAgICAgICAgKFdlYkNvcmU6OmdldENvZGVQYWdlKToNCisgICAgICAgIChXZWJDb3Jl
OjpuZXdUZXh0Q29kZWNXaW5jZSk6DQorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjV2luY2U6
OlRleHRDb2RlY1dpbmNlKToNCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNXaW5jZTo6flRl
eHRDb2RlY1dpbmNlKToNCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNXaW5jZTo6cmVnaXN0
ZXJCYXNlRW5jb2RpbmdOYW1lcyk6DQorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjV2luY2U6
OnJlZ2lzdGVyQmFzZUNvZGVjcyk6DQorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjV2luY2U6
OnJlZ2lzdGVyRXh0ZW5kZWRFbmNvZGluZ05hbWVzKToNCisgICAgICAgIChXZWJDb3JlOjpUZXh0
Q29kZWNXaW5jZTo6cmVnaXN0ZXJFeHRlbmRlZENvZGVjcyk6DQorICAgICAgICAoV2ViQ29yZTo6
Z2V0Q29kZVBhZ2VGbGFncyk6DQorICAgICAgICAoV2ViQ29yZTo6ZmluZEZpcnN0Tm9uQXNjaWlD
aGFyYWN0ZXIpOg0KKyAgICAgICAgKFdlYkNvcmU6OmRlY29kZSk6DQorICAgICAgICAoV2ViQ29y
ZTo6VGV4dENvZGVjV2luY2U6OmRlY29kZSk6DQorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVj
V2luY2U6OmVuY29kZSk6DQorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjV2luY2U6OmVudW1l
cmF0ZVN1cHBvcnRlZEVuY29kaW5ncyk6DQorICAgICAgICAqIHBsYXRmb3JtL3RleHQvd2luY2Uv
VGV4dENvZGVjV2luY2UuaDogQWRkZWQuDQorDQogMjAxMC0wMS0yNiAgQ2hyaXMgRmxlaXphY2gg
IDxjZmxlaXphY2hAYXBwbGUuY29tPg0KIA0KICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRs
ZXIuDQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaA0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQ0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgJKHJldmlzaW9u
IDUzODU4KQ0KKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgJKHdvcmtp
bmcgY29weSkNCkBAIC03Miw2ICs3Miw3IEBAIHB1YmxpYzoNCiAjZW5kaWYNCiAgICAgc3RhdGlj
IHZvaWQgY29tSW5pdGlhbGl6ZSgpOw0KICAgICBzdGF0aWMgdm9pZCBjb21VbmluaXRpYWxpemUo
KTsNCisgICAgc3RhdGljIElNdWx0aUxhbmd1YWdlKiBnZXRNdWx0aUxhbmd1YWdlSW50ZXJmYWNl
KCk7DQogI2VsaWYgUExBVEZPUk0oV0lOKQ0KICAgICBJTUxhbmdGb250TGluazIqIGdldEZvbnRM
aW5rSW50ZXJmYWNlKCk7DQogI2VuZGlmDQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW5jZS9Gb250Q2FjaGVXaW5jZS5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRDYWNoZVdpbmNlLmNwcAkocmV2aXNpb24gNTM4NTgpDQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250Q2FjaGVXaW5jZS5jcHAJKHdv
cmtpbmcgY29weSkNCkBAIC01MSw3ICs1MSw3IEBAIHN0YXRpYyBJTUxhbmdGb250TGluazIqIGxh
bmdGb250TGluayA9IDANCiBzdGF0aWMgSU1MYW5nRm9udExpbmsqIGxhbmdGb250TGluayA9IDA7
DQogI2VuZGlmDQogDQotSU11bHRpTGFuZ3VhZ2UqIGdldE11bHRpTGFuZ3VhZ2VJbnRlcmZhY2Uo
KQ0KK0lNdWx0aUxhbmd1YWdlKiBGb250Q2FjaGU6OmdldE11bHRpTGFuZ3VhZ2VJbnRlcmZhY2Uo
KQ0KIHsNCiAgICAgaWYgKCFtdWx0aUxhbmd1YWdlKQ0KICAgICAgICAgQ29DcmVhdGVJbnN0YW5j
ZShDTFNJRF9DTXVsdGlMYW5ndWFnZSwgMCwgQ0xTQ1RYX0lOUFJPQ19TRVJWRVIsIElJRF9JTXVs
dGlMYW5ndWFnZSwgKHZvaWQqKikmbXVsdGlMYW5ndWFnZSk7DQpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L3dpbmNlL1RleHRDb2RlY1dpbmNlLmNwcA0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vdGV4dC93aW5jZS9UZXh0Q29kZWNXaW5jZS5jcHAJKHJldmlzaW9uIDApDQor
KysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3dpbmNlL1RleHRDb2RlY1dpbmNlLmNwcAkocmV2aXNp
b24gMCkNCkBAIC0wLDAgKzEsNDgzIEBADQorLyoNCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAw
OSBUb3JjaCBNb2JpbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKg0KKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dA0KKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucw0KKyAqIGFyZSBtZXQ6DQorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQNCisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuDQorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQNCisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlDQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4NCisgKg0KKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpIHdpbGwgYmUgdXNlZnVsLA0KKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQ0KKyAqICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCisgKg0KKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlDQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvDQorICogIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsDQorICog
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLg0KKyAqLw0KKw0KKyNpbmNsdWRlICJjb25maWcu
aCINCisjaW5jbHVkZSAiVGV4dENvZGVjV2luY2UuaCINCisNCisjaW5jbHVkZSAiY2VfdGV4dGNv
ZGVjcy5oIg0KKyNpbmNsdWRlICJDU3RyaW5nLmgiDQorI2luY2x1ZGUgIkZvbnRDYWNoZS5oIg0K
KyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIg0KKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiDQor
I2luY2x1ZGUgPG1sYW5nLmg+DQorI2luY2x1ZGUgPHdpbmJhc2UuaD4NCisjaW5jbHVkZSA8d2lu
bmxzLmg+DQorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+DQorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+DQorI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VURjguaD4NCisNCituYW1lc3BhY2UgV2ViQ29y
ZSB7DQorDQorc3RydWN0IENoYXJzZXRJbmZvIHsNCisgICAgQ1N0cmluZyBtX25hbWU7DQorICAg
IFN0cmluZyBtX2ZyaWVuZGx5TmFtZTsNCisgICAgVUlOVCBtX2NvZGVQYWdlOw0KKyAgICBWZWN0
b3I8Q1N0cmluZz4gbV9hbGlhc2VzOw0KKyAgICBib29sIG1fdXNlc05hdGl2ZUNvZGVjOw0KK307
DQorDQorY2xhc3MgTGFuZ3VhZ2VNYW5hZ2VyIHsNCitwcml2YXRlOg0KKyAgICBMYW5ndWFnZU1h
bmFnZXIoKTsNCisNCisgICAgZnJpZW5kIExhbmd1YWdlTWFuYWdlciYgbGFuZ3VhZ2VNYW5hZ2Vy
KCk7DQorfTsNCisNCisvLyBVc2FnZTogYSBsb29rdXAgdGFibGUgdXNlZCB0byBnZXQgQ2hhcnNl
dEluZm8gd2l0aCBjb2RlIHBhZ2UgSUQuDQorLy8gS2V5OiBjb2RlIHBhZ2UgSUQuIFZhbHVlOiBj
aGFyc2V0IGluZm9ybWF0aW9uLg0KK3N0YXRpYyBIYXNoTWFwPFVJTlQsIENTdHJpbmc+JiBjb2Rl
UGFnZUNoYXJzZXRzKCkNCit7DQorICAgIHN0YXRpYyBIYXNoTWFwPFVJTlQsIENTdHJpbmc+IGNj
Ow0KKyAgICByZXR1cm4gY2M7DQorfQ0KKw0KK3N0YXRpYyBIYXNoTWFwPFN0cmluZywgQ2hhcnNl
dEluZm8+JiBrbm93bkNoYXJzZXRzKCkNCit7DQorICAgIHN0YXRpYyBIYXNoTWFwPFN0cmluZywg
Q2hhcnNldEluZm8+IGtjOw0KKyAgICByZXR1cm4ga2M7DQorfQ0KKw0KKy8vIFVzYWdlOiBhIG1h
cCB0aGF0IHN0b3JlcyBjaGFyc2V0cyB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgc3lzdGVtLiBTb3J0
ZWQgYnkgbmFtZS4NCisvLyBLZXk6IGNoYXJzZXQuIFZhbHVlOiBjb2RlIHBhZ2UgSUQuDQordHlw
ZWRlZiBIYXNoU2V0PFN0cmluZz4gQ2hhcnNldFNldDsNCitzdGF0aWMgQ2hhcnNldFNldCYgc3Vw
cG9ydGVkQ2hhcnNldHMoKQ0KK3sNCisgICAgc3RhdGljIENoYXJzZXRTZXQgc2w7DQorICAgIHJl
dHVybiBzbDsNCit9DQorDQorc3RhdGljIExhbmd1YWdlTWFuYWdlciYgbGFuZ3VhZ2VNYW5hZ2Vy
KCkNCit7DQorICAgIHN0YXRpYyBMYW5ndWFnZU1hbmFnZXIgbG07DQorICAgIHJldHVybiBsbTsN
Cit9DQorDQorc3RhdGljIHZvaWQgYWRkQ2hhcnNldChVSU5UIGNvZGVQYWdlLCBjb25zdCBjaGFy
KiBjaGFyc2V0TmFtZSwgY29uc3Qgd2NoYXJfdCogZnJpZW5kbHlOYW1lLCBjb25zdCBjaGFyKiBj
aGFyc2V0QWxpYXNlcywgYm9vbCBuYXRpdmVTdXBwb3J0ID0gZmFsc2UpDQorew0KKyAgICBDaGFy
c2V0SW5mbyBpbmZvOw0KKyAgICBpbmZvLm1fY29kZVBhZ2UgPSBjb2RlUGFnZTsNCisgICAgaW5m
by5tX25hbWUgPSBjaGFyc2V0TmFtZTsNCisgICAgaW5mby5tX2ZyaWVuZGx5TmFtZSA9IGZyaWVu
ZGx5TmFtZTsNCisgICAgaW5mby5tX3VzZXNOYXRpdmVDb2RlYyA9IG5hdGl2ZVN1cHBvcnQ7DQor
ICAgIGNvbnN0IGNoYXIqIGJlZ2luID0gY2hhcnNldEFsaWFzZXM7DQorICAgIGZvciAoOzspIHsN
CisgICAgICAgIGNvbnN0IGNoYXIqIGVuZCA9IHN0cmNocihiZWdpbiwgJ3wnKTsNCisgICAgICAg
IENTdHJpbmcgYWxpYXMgPSBlbmQgPyBDU3RyaW5nKGJlZ2luLCBlbmQgLSBiZWdpbikgOiBiZWdp
bjsNCisgICAgICAgIGlmIChhbGlhcy5sZW5ndGgoKSkNCisgICAgICAgICAgICBpbmZvLm1fYWxp
YXNlcy5hcHBlbmQoYWxpYXMpOw0KKyAgICAgICAgaWYgKCFlbmQpDQorICAgICAgICAgICAgYnJl
YWs7DQorICAgICAgICBiZWdpbiA9IGVuZCArIDE7DQorICAgIH0NCisgICAga25vd25DaGFyc2V0
cygpLnNldChpbmZvLm1fbmFtZS5kYXRhKCksIGluZm8pOw0KKyAgICBpZiAoY29kZVBhZ2UgIT0g
Q1BfQUNQKQ0KKyAgICAgICAgY29kZVBhZ2VDaGFyc2V0cygpLnNldChjb2RlUGFnZSwgaW5mby5t
X25hbWUpOw0KK30NCisNCitMYW5ndWFnZU1hbmFnZXI6Okxhbmd1YWdlTWFuYWdlcigpDQorew0K
KyAgICAvLyA0MzcsIDcwOCwgNzA5LCA3MTAsIDcyMCwgNzM3LCA3NzUsIDg1MCwgODUyDQorICAg
IGFkZENoYXJzZXQoOTMyLCAgICAgIlNISUZUX0pJUyIsIEwiSmFwYW5lc2UgKFNISUZUX0pJUyki
LCAgICAgICAgInNoaWZ0X2ppcyIpOw0KKyAgICBhZGRDaGFyc2V0KDkzNiwgICAgICJHQksiLCAg
ICAgICBMIkNoaW5lc2UgU2ltcGxpZmllZCAoR0JLKSIsICAgICJnYmt8Z2IyMzEyIik7DQorICAg
IGFkZENoYXJzZXQoOTQ5LCAgICAgIktTQzU2MDEiLCAgIEwiS29yZWFuIChLU0M1NjAxKSIsICAg
ICAgICAgICAgImtzX2NfNTYwMS0xOTg3fGtzYzU2MDF8ZXVjLWtyfGV1Y2tyfHgtZXVjLWtyIik7
DQorICAgIGFkZENoYXJzZXQoOTUwLCAgICAgIkJJRzUiLCAgICAgIEwiQ2hpbmVzZSBUcmFkaXRp
b25hbCAoQklHNSkiLCAgImJpZzUiKTsNCisgICAgYWRkQ2hhcnNldCgxMzYxLCAgICAiSk9IQUIi
LCAgICAgTCJLb3JlYW4gKEpvaGFiKSIsICAgICAgICAgICAgICAiam9oYWJ8a29yZWFuLmpvaGFi
Iik7DQorICAgIGFkZENoYXJzZXQoNTE5MzIsICAgIkVVQy1KUCIsICAgIEwiSmFwYW5lc2UgKEVV
QykiLCAgICAgICAgICAgICAgImV1Yy1qcHxldWNqcHx4LWV1Yy1qcCIsIHRydWUpOw0KKyAgICBh
ZGRDaGFyc2V0KDg3NCwgICAgICJDUDg3NCIsICAgICBMIlRoYWkgKFdpbmRvd3MpIiwgICAgICAg
ICAgICAgICJjcDg3NHx3aW5kb3dzLTg3NCIsIHRydWUpOw0KKyAgICBhZGRDaGFyc2V0KENQX0FD
UCwgICJUSVM2MjAiLCAgICBMIlRoYWkgKFRJUyA2MjApIiwgICAgICAgICAgICAgICJ0aXM2MjB8
SVNPLTg4NTktMTF8SVNPLUlSLTE2NnxUSVMtNjIwfFRJUzYyMC0wVElTNjIwLjI1MjktMXxUSVM2
MjAuMjUzMy0wfFRJUzYyMC4yNTMzLTF8dGhhaTgiLCB0cnVlKTsNCisgICAgYWRkQ2hhcnNldChD
UF9BQ1AsICAiTUFDVEhBSSIsICAgTCJUaGFpIChNYWMgT1MpIiwgICAgICAgICAgICAgICAibWFj
dGhhaXx4LW1hYy10aGFpfG1hYy10aGFpIiwgdHJ1ZSk7DQorICAgIHN1cHBvcnRlZENoYXJzZXRz
KCkuYWRkKCJFVUMtSlAiKTsNCisgICAgc3VwcG9ydGVkQ2hhcnNldHMoKS5hZGQoIkNQODc0Iik7
DQorICAgIHN1cHBvcnRlZENoYXJzZXRzKCkuYWRkKCJUSVM2MjAiKTsNCisgICAgc3VwcG9ydGVk
Q2hhcnNldHMoKS5hZGQoIk1BQ1RIQUkiKTsNCisNCisgICAgSUVudW1Db2RlUGFnZSogZW51bUlu
dGVyZmFjZTsNCisgICAgSU11bHRpTGFuZ3VhZ2UqIG1saSA9IEZvbnRDYWNoZTo6Z2V0TXVsdGlM
YW5ndWFnZUludGVyZmFjZSgpOw0KKyAgICBpZiAobWxpICYmIFNfT0sgPT0gbWxpLT5FbnVtQ29k
ZVBhZ2VzKE1JTUVDT05URl9CUk9XU0VSLCAmZW51bUludGVyZmFjZSkpIHsNCisgICAgICAgIE1J
TUVDUElORk8gY3BJbmZvOw0KKyAgICAgICAgVUxPTkcgY2NwSW5mbzsNCisgICAgICAgIHdoaWxl
IChTX09LID09IGVudW1JbnRlcmZhY2UtPk5leHQoMSwgJmNwSW5mbywgJmNjcEluZm8pICYmIGNj
cEluZm8pIHsNCisgICAgICAgICAgICBpZiAoIUlzVmFsaWRDb2RlUGFnZShjcEluZm8udWlDb2Rl
UGFnZSkpDQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KKw0KKyAgICAgICAgICAgIEhhc2hN
YXA8VUlOVCwgQ1N0cmluZz46Oml0ZXJhdG9yIGkgPSBjb2RlUGFnZUNoYXJzZXRzKCkuZmluZChj
cEluZm8udWlDb2RlUGFnZSk7DQorDQorICAgICAgICAgICAgQ1N0cmluZyBuYW1lKFN0cmluZyhj
cEluZm8ud3N6V2ViQ2hhcnNldCkubGF0aW4xKCkpOw0KKyAgICAgICAgICAgIGlmIChpID09IGNv
ZGVQYWdlQ2hhcnNldHMoKS5lbmQoKSkgew0KKyAgICAgICAgICAgICAgICBDaGFyc2V0SW5mbyBp
bmZvOw0KKyAgICAgICAgICAgICAgICBpbmZvLm1fY29kZVBhZ2UgPSBjcEluZm8udWlDb2RlUGFn
ZTsNCisgICAgICAgICAgICAgICAga25vd25DaGFyc2V0cygpLnNldChuYW1lLmRhdGEoKSwgaW5m
byk7DQorICAgICAgICAgICAgICAgIGkgPSBjb2RlUGFnZUNoYXJzZXRzKCkuc2V0KGNwSW5mby51
aUNvZGVQYWdlLCBuYW1lKS5maXJzdDsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgaWYg
KGkgIT0gY29kZVBhZ2VDaGFyc2V0cygpLmVuZCgpKSB7DQorICAgICAgICAgICAgICAgIEhhc2hN
YXA8U3RyaW5nLCBDaGFyc2V0SW5mbz46Oml0ZXJhdG9yIGogPSBrbm93bkNoYXJzZXRzKCkuZmlu
ZChTdHJpbmcoaS0+c2Vjb25kLmRhdGEoKSwgaS0+c2Vjb25kLmxlbmd0aCgpKSk7DQorICAgICAg
ICAgICAgICAgIEFTU0VSVChqICE9IGtub3duQ2hhcnNldHMoKS5lbmQoKSk7DQorICAgICAgICAg
ICAgICAgIENoYXJzZXRJbmZvJiBpbmZvID0gai0+c2Vjb25kOw0KKyAgICAgICAgICAgICAgICBp
bmZvLm1fbmFtZSA9IGktPnNlY29uZC5kYXRhKCk7DQorICAgICAgICAgICAgICAgIGluZm8ubV9m
cmllbmRseU5hbWUgPSBjcEluZm8ud3N6RGVzY3JpcHRpb247DQorICAgICAgICAgICAgICAgIGlu
Zm8ubV9hbGlhc2VzLmFwcGVuZChuYW1lKTsNCisgICAgICAgICAgICAgICAgaW5mby5tX2FsaWFz
ZXMuYXBwZW5kKFN0cmluZyhjcEluZm8ud3N6SGVhZGVyQ2hhcnNldCkubGF0aW4xKCkpOw0KKyAg
ICAgICAgICAgICAgICBpbmZvLm1fYWxpYXNlcy5hcHBlbmQoU3RyaW5nKGNwSW5mby53c3pCb2R5
Q2hhcnNldCkubGF0aW4xKCkpOw0KKyAgICAgICAgICAgICAgICBpbmZvLm1fdXNlc05hdGl2ZUNv
ZGVjID0gZmFsc2U7DQorICAgICAgICAgICAgICAgIFN0cmluZyBjcE5hbWUgPSBTdHJpbmc6OmZv
cm1hdCgiY3AlZCIsIGNwSW5mby51aUNvZGVQYWdlKTsNCisgICAgICAgICAgICAgICAgaW5mby5t
X2FsaWFzZXMuYXBwZW5kKGNwTmFtZS5sYXRpbjEoKSk7DQorICAgICAgICAgICAgICAgIHN1cHBv
cnRlZENoYXJzZXRzKCkuYWRkKGktPnNlY29uZC5kYXRhKCkpOw0KKyAgICAgICAgICAgIH0NCisg
ICAgICAgIH0NCisgICAgICAgIGVudW1JbnRlcmZhY2UtPlJlbGVhc2UoKTsNCisgICAgfQ0KK30N
CisNCitzdGF0aWMgVUlOVCBnZXRDb2RlUGFnZShjb25zdCBjaGFyKiBuYW1lKQ0KK3sNCisgICAg
aWYgKCFzdHJjbXAobmFtZSwgIlVURi04IikpDQorICAgICAgICByZXR1cm4gQ1BfVVRGODsNCisN
CisgICAgLy8gRXhwbGljaXRseSB1c2UgYSAiY29uc3QiIHJlZmVyZW5jZSB0byBmaXggdGhlIHNp
bGx5IFZTIGJ1aWxkIGVycm9yDQorICAgIC8vIHNheWluZyAiPT0iIGlzIG5vdCBmb3VuZCBmb3Ig
Y29uc3RfaXRlcmF0b3IgYW5kIGl0ZXJhdG9yDQorICAgIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBD
aGFyc2V0SW5mbz4mIGNoYXJzZXRzID0ga25vd25DaGFyc2V0cygpOw0KKyAgICBIYXNoTWFwPFN0
cmluZywgQ2hhcnNldEluZm8+Ojpjb25zdF9pdGVyYXRvciBpID0gY2hhcnNldHMuZmluZChuYW1l
KTsNCisgICAgcmV0dXJuIGkgPT0gY2hhcnNldHMuZW5kKCkgPyBDUF9BQ1AgOiBpLT5zZWNvbmQu
bV9jb2RlUGFnZTsNCit9DQorDQorc3RhdGljIFBhc3NPd25QdHI8VGV4dENvZGVjPiBuZXdUZXh0
Q29kZWNXaW5jZShjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nLCBjb25zdCB2b2lkKikNCit7
DQorICAgIHJldHVybiBuZXcgVGV4dENvZGVjV2luY2UoZW5jb2RpbmcpOw0KK30NCisNCitUZXh0
Q29kZWNXaW5jZTo6VGV4dENvZGVjV2luY2UoY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykN
CisgICAgOiBtX2VuY29kaW5nKGVuY29kaW5nKQ0KK3sNCit9DQorDQorVGV4dENvZGVjV2luY2U6
On5UZXh0Q29kZWNXaW5jZSgpDQorew0KK30NCisNCit2b2lkIFRleHRDb2RlY1dpbmNlOjpyZWdp
c3RlckJhc2VFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhciByZWdpc3RyYXIpDQor
ew0KKyAgICByZWdpc3RyYXIoIlVURi04IiwgIlVURi04Iik7DQorfQ0KKw0KK3ZvaWQgVGV4dENv
ZGVjV2luY2U6OnJlZ2lzdGVyQmFzZUNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIgcmVnaXN0cmFy
KQ0KK3sNCisgICAgcmVnaXN0cmFyKCJVVEYtOCIsIG5ld1RleHRDb2RlY1dpbmNlLCAwKTsNCit9
DQorDQordm9pZCBUZXh0Q29kZWNXaW5jZTo6cmVnaXN0ZXJFeHRlbmRlZEVuY29kaW5nTmFtZXMo
RW5jb2RpbmdOYW1lUmVnaXN0cmFyIHJlZ2lzdHJhcikNCit7DQorICAgIGxhbmd1YWdlTWFuYWdl
cigpOw0KKyAgICBmb3IgKENoYXJzZXRTZXQ6Oml0ZXJhdG9yIGkgPSBzdXBwb3J0ZWRDaGFyc2V0
cygpLmJlZ2luKCk7IGkgIT0gc3VwcG9ydGVkQ2hhcnNldHMoKS5lbmQoKTsgKytpKSB7DQorICAg
ICAgICBIYXNoTWFwPFN0cmluZywgQ2hhcnNldEluZm8+OjppdGVyYXRvciBqID0ga25vd25DaGFy
c2V0cygpLmZpbmQoKmkpOw0KKyAgICAgICAgaWYgKGogIT0ga25vd25DaGFyc2V0cygpLmVuZCgp
KSB7DQorICAgICAgICAgICAgcmVnaXN0cmFyKGotPnNlY29uZC5tX25hbWUuZGF0YSgpLCBqLT5z
ZWNvbmQubV9uYW1lLmRhdGEoKSk7DQorICAgICAgICAgICAgZm9yIChWZWN0b3I8Q1N0cmluZz46
OmNvbnN0X2l0ZXJhdG9yIGFsaWFzID0gai0+c2Vjb25kLm1fYWxpYXNlcy5iZWdpbigpOyBhbGlh
cyAhPSBqLT5zZWNvbmQubV9hbGlhc2VzLmVuZCgpOyArK2FsaWFzKQ0KKyAgICAgICAgICAgICAg
ICByZWdpc3RyYXIoYWxpYXMtPmRhdGEoKSwgai0+c2Vjb25kLm1fbmFtZS5kYXRhKCkpOw0KKyAg
ICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgVGV4dENvZGVjV2luY2U6OnJlZ2lzdGVyRXh0
ZW5kZWRDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyIHJlZ2lzdHJhcikNCit7DQorICAgIGxhbmd1
YWdlTWFuYWdlcigpOw0KKyAgICBmb3IgKENoYXJzZXRTZXQ6Oml0ZXJhdG9yIGkgPSBzdXBwb3J0
ZWRDaGFyc2V0cygpLmJlZ2luKCk7IGkgIT0gc3VwcG9ydGVkQ2hhcnNldHMoKS5lbmQoKTsgKytp
KSB7DQorICAgICAgICBIYXNoTWFwPFN0cmluZywgQ2hhcnNldEluZm8+OjppdGVyYXRvciBqID0g
a25vd25DaGFyc2V0cygpLmZpbmQoKmkpOw0KKyAgICAgICAgaWYgKGogIT0ga25vd25DaGFyc2V0
cygpLmVuZCgpKQ0KKyAgICAgICAgICAgIHJlZ2lzdHJhcihqLT5zZWNvbmQubV9uYW1lLmRhdGEo
KSwgbmV3VGV4dENvZGVjV2luY2UsIDApOw0KKyAgICB9DQorfQ0KKw0KK3N0YXRpYyBEV09SRCBn
ZXRDb2RlUGFnZUZsYWdzKFVJTlQgY29kZVBhZ2UpDQorew0KKyAgICBpZiAoY29kZVBhZ2UgPT0g
Q1BfVVRGOCkNCisgICAgICAgIHJldHVybiBNQl9FUlJfSU5WQUxJRF9DSEFSUzsNCisNCisgICAg
aWYgKGNvZGVQYWdlID09IDQyKSAvLyBTeW1ib2wNCisgICAgICAgIHJldHVybiAwOw0KKw0KKyAg
ICAvLyBNaWNyb3NvZnQgc2F5cyB0aGUgZmxhZyBtdXN0IGJlIDAgZm9yIHRoZSBmb2xsb3dpbmcg
Y29kZSBwYWdlcw0KKyAgICBpZiAoY29kZVBhZ2UgPiA1MDAwMCkgew0KKyAgICAgICAgaWYgKChj
b2RlUGFnZSA+PSA1MDIyMCAmJiBjb2RlUGFnZSA8PSA1MDIyMikNCisgICAgICAgICAgICB8fCBj
b2RlUGFnZSA9PSA1MDIyNQ0KKyAgICAgICAgICAgIHx8IGNvZGVQYWdlID09IDUwMjI3DQorICAg
ICAgICAgICAgfHwgY29kZVBhZ2UgPT0gNTAyMjkNCisgICAgICAgICAgICB8fCBjb2RlUGFnZSA9
PSA1MjkzNg0KKyAgICAgICAgICAgIHx8IGNvZGVQYWdlID09IDU0OTM2DQorICAgICAgICAgICAg
fHwgKGNvZGVQYWdlID49IDU3MDAyICYmIGNvZGVQYWdlIDw9IDU3MDAxKQ0KKyAgICAgICAgICAg
IHx8IGNvZGVQYWdlID09IDY1MDAwIC8vIFVURi03DQorICAgICAgICAgICAgKQ0KKyAgICAgICAg
ICAgIHJldHVybiAwOw0KKyAgICB9DQorDQorICAgIHJldHVybiBNQl9QUkVDT01QT1NFRCB8IE1C
X0VSUl9JTlZBTElEX0NIQVJTOw0KK30NCisNCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIGZp
bmRGaXJzdE5vbkFzY2lpQ2hhcmFjdGVyKGNvbnN0IGNoYXIqIGJ5dGVzLCBzaXplX3QgbGVuZ3Ro
KQ0KK3sNCisgICAgZm9yIChjb25zdCBjaGFyKiBieXRlc0VuZCA9IGJ5dGVzICsgbGVuZ3RoOyBi
eXRlcyA8IGJ5dGVzRW5kOyArK2J5dGVzKSB7DQorICAgICAgICBpZiAoKmJ5dGVzICYgMHg4MCkN
CisgICAgICAgICAgICBicmVhazsNCisgICAgfQ0KKyAgICByZXR1cm4gYnl0ZXM7DQorfQ0KKw0K
K3N0YXRpYyB2b2lkIGRlY29kZShWZWN0b3I8VUNoYXIsIDgxOTI+JiByZXN1bHQsIGNvbnN0IGNo
YXIqIGVuY29kaW5nTmFtZSwgY29uc3QgY2hhciogYnl0ZXMsIHNpemVfdCBsZW5ndGgsIHNpemVf
dCogbGVmdCwgYm9vbCBjYW5CZUZpcnN0VGltZSwgYm9vbCYgc2F3SW52YWxpZENoYXIpDQorew0K
KyAgICAqbGVmdCA9IGxlbmd0aDsNCisgICAgaWYgKCFieXRlcyB8fCAhbGVuZ3RoKQ0KKyAgICAg
ICAgcmV0dXJuOw0KKw0KKyAgICBVSU5UIGNvZGVQYWdlOw0KKw0KKyAgICBIYXNoTWFwPFN0cmlu
ZywgQ2hhcnNldEluZm8+OjppdGVyYXRvciBpID0ga25vd25DaGFyc2V0cygpLmZpbmQoZW5jb2Rp
bmdOYW1lKTsNCisgICAgaWYgKGkgPT0ga25vd25DaGFyc2V0cygpLmVuZCgpKSB7DQorICAgICAg
ICBpZiAoIXN0cmNtcChlbmNvZGluZ05hbWUsICJVVEYtOCIpKQ0KKyAgICAgICAgICAgIGNvZGVQ
YWdlID0gQ1BfVVRGODsNCisgICAgICAgIGVsc2UNCisgICAgICAgICAgICBjb2RlUGFnZSA9IENQ
X0FDUDsNCisgICAgfSBlbHNlIHsNCisgICAgICAgIGNvZGVQYWdlID0gaS0+c2Vjb25kLm1fY29k
ZVBhZ2U7DQorICAgICAgICBpZiAoaS0+c2Vjb25kLm1fdXNlc05hdGl2ZUNvZGVjKSB7DQorICAg
ICAgICAgICAgdHlwZWRlZiBpbnQgKCpGdW5jRXVjTWJUb1djKSh3Y2hhcl90ICpwd2MsIGNvbnN0
IHVuc2lnbmVkIGNoYXIgKnMsIGludCBuKTsNCisgICAgICAgICAgICBGdW5jRXVjTWJUb1djIGVu
Y01iVG9XYyA9IDA7DQorICAgICAgICAgICAgaWYgKCFzdHJjbXAoZW5jb2RpbmdOYW1lLCAiRVVD
LUpQIikpDQorICAgICAgICAgICAgICAgIGVuY01iVG9XYyA9IFRleHRDb2RlY3NDRTo6ZXVjX2pw
X21idG93YzsNCisgICAgICAgICAgICBlbHNlIGlmICghc3RyY21wKGVuY29kaW5nTmFtZSwgIkNQ
ODc0IikpDQorICAgICAgICAgICAgICAgIGVuY01iVG9XYyA9IFRleHRDb2RlY3NDRTo6Y3A4NzRf
bWJ0b3djOw0KKyAgICAgICAgICAgIGVsc2UgaWYgKCFzdHJjbXAoZW5jb2RpbmdOYW1lLCAiVElT
NjIwIikpDQorICAgICAgICAgICAgICAgIGVuY01iVG9XYyA9IFRleHRDb2RlY3NDRTo6dGlzNjIw
X21idG93YzsNCisgICAgICAgICAgICBlbHNlIGlmICghc3RyY21wKGVuY29kaW5nTmFtZSwgIk1B
Q1RIQUkiKSkNCisgICAgICAgICAgICAgICAgZW5jTWJUb1djID0gVGV4dENvZGVjc0NFOjptYWNf
dGhhaV9tYnRvd2M7DQorDQorICAgICAgICAgICAgaWYgKGVuY01iVG9XYykgew0KKyAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBzcmNTdGFydCA9IGJ5dGVzOw0KKyAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyKiBjb25zdCBzcmNFbmQgPSBieXRlcyArIGxlbmd0aDsNCisgICAgICAg
ICAgICAgICAgaW50IGxhc3RTaXplID0gcmVzdWx0LnNpemUoKTsNCisgICAgICAgICAgICAgICAg
cmVzdWx0LnJlc2l6ZShsYXN0U2l6ZSArIGxlbmd0aCk7DQorICAgICAgICAgICAgICAgIGZvciAo
OzspIHsNCisgICAgICAgICAgICAgICAgICAgIFVDaGFyKiBkc3QgPSByZXN1bHQuZGF0YSgpICsg
bGFzdFNpemU7DQorICAgICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciogY29uc3QgZHN0RW5k
ID0gcmVzdWx0LmRhdGEoKSArIHJlc3VsdC5zaXplKCk7DQorICAgICAgICAgICAgICAgICAgICBm
b3IgKDsgZHN0IDwgZHN0RW5kICYmIGJ5dGVzIDwgc3JjRW5kOyArK2RzdCkgew0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBudW1iZXJFbmNvZGVkID0gZW5jTWJUb1djKGRzdCwgKGNvbnN0
IHVuc2lnbmVkIGNoYXIqKWJ5dGVzLCBzcmNFbmQgLSBieXRlcyk7DQorICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKG51bWJlckVuY29kZWQgPj0gMCkNCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnl0ZXMgKz0gbnVtYmVyRW5jb2RlZDsNCisgICAgICAgICAgICAgICAgICAgICAgICBl
bHNlIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJlckVuY29kZWQgPT0g
UkVUX0lMU0VRKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F3SW52YWxpZENo
YXIgPSB0cnVlOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAg
ICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAg
ICAgICAgICBpZiAoYnl0ZXMgPT0gc3JjRW5kIHx8IGRzdCAhPSBkc3RFbmQpIHsNCisgICAgICAg
ICAgICAgICAgICAgICAgICAqbGVmdCA9IHNyY0VuZCAtIGJ5dGVzOw0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdC5yZXNpemUoZHN0IC0gcmVzdWx0LmRhdGEoKSk7DQorICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAg
ICAgICAgICAgICAgbGFzdFNpemUgPSByZXN1bHQuc2l6ZSgpOw0KKyAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0LnJlc2l6ZShyZXN1bHQuc2l6ZSgpICsgMjU2KTsNCisgICAgICAgICAgICAgICAg
fQ0KKyAgICAgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgICAgICpsZWZ0ID0gMDsNCisg
ICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChieXRlcywgbGVuZ3RoKTsNCisgICAgICAgICAg
ICAgICAgcmV0dXJuOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAg
ICBEV09SRCBmbGFncyA9IGdldENvZGVQYWdlRmxhZ3MoY29kZVBhZ2UpOw0KKw0KKyAgICBpZiAo
Y29kZVBhZ2UgPT0gQ1BfVVRGOCkgew0KKyAgICAgICAgaWYgKGNhbkJlRmlyc3RUaW1lKSB7DQor
ICAgICAgICAgICAgLy8gSGFuZGxlIEJPTS4NCisgICAgICAgICAgICBpZiAobGVuZ3RoID4gMykg
ew0KKyAgICAgICAgICAgICAgICBpZiAoYnl0ZXNbMF0gPT0gKGNoYXIpMHhFRiAmJiBieXRlc1sx
XSA9PSAoY2hhcikweEJCICYmIGJ5dGVzWzJdID09IChjaGFyKTB4QkYpIHsNCisgICAgICAgICAg
ICAgICAgICAgIC8vIEJPTSBmb3VuZCENCisgICAgICAgICAgICAgICAgICAgIGxlbmd0aCAtPSAz
Ow0KKyAgICAgICAgICAgICAgICAgICAgYnl0ZXMgKz0gMzsNCisgICAgICAgICAgICAgICAgICAg
ICpsZWZ0ID0gbGVuZ3RoOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfSBlbHNl
IGlmIChieXRlc1swXSA9PSAweEVGICYmIChsZW5ndGggPCAyIHx8IGJ5dGVzWzFdID09IChjaGFy
KTB4QkIpICYmIChsZW5ndGggPCAzIHx8IGJ5dGVzWzJdID09IChjaGFyKTB4QkYpKSB7DQorICAg
ICAgICAgICAgICAgIGlmIChsZW5ndGggPT0gMykNCisgICAgICAgICAgICAgICAgICAgICpsZWZ0
ID0gMDsNCisgICAgICAgICAgICAgICAgcmV0dXJuOw0KKyAgICAgICAgICAgIH0NCisgICAgICAg
IH0NCisNCisgICAgICAgIC8vIFByb2Nlc3MgQVNDSUkgY2hhcmFjdGVycyBhdCBiZWdpbm5pbmcu
DQorICAgICAgICBjb25zdCBjaGFyKiBmaXJzdE5vbkFzY2lpQ2hhciA9IGZpbmRGaXJzdE5vbkFz
Y2lpQ2hhcmFjdGVyKGJ5dGVzLCBsZW5ndGgpOw0KKyAgICAgICAgaW50IG51bUFzY2lpQ2hhcmFj
dGVycyA9IGZpcnN0Tm9uQXNjaWlDaGFyIC0gYnl0ZXM7DQorICAgICAgICBpZiAobnVtQXNjaWlD
aGFyYWN0ZXJzKSB7DQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChieXRlcywgbnVtQXNjaWlD
aGFyYWN0ZXJzKTsNCisgICAgICAgICAgICBsZW5ndGggLT0gbnVtQXNjaWlDaGFyYWN0ZXJzOw0K
KyAgICAgICAgICAgIGlmICghbGVuZ3RoKSB7DQorICAgICAgICAgICAgICAgICpsZWZ0ID0gMDsN
CisgICAgICAgICAgICAgICAgcmV0dXJuOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBi
eXRlcyA9IGZpcnN0Tm9uQXNjaWlDaGFyOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaW50IG9s
ZFNpemUgPSByZXN1bHQuc2l6ZSgpOw0KKyAgICAgICAgcmVzdWx0LnJlc2l6ZShvbGRTaXplICsg
bGVuZ3RoKTsNCisgICAgICAgIFVDaGFyKiByZXN1bHRTdGFydCA9IHJlc3VsdC5kYXRhKCkgKyBv
bGRTaXplOw0KKyAgICAgICAgY29uc3QgY2hhciogc291cmNlU3RhcnQgPSBieXRlczsNCisgICAg
ICAgIGNvbnN0IGNoYXIqIGNvbnN0IHNvdXJjZUVuZCA9IGJ5dGVzICsgbGVuZ3RoOw0KKyAgICAg
ICAgZm9yICg7Oykgew0KKyAgICAgICAgICAgIHVzaW5nIG5hbWVzcGFjZSBXVEY6OlVuaWNvZGU7
DQorICAgICAgICAgICAgQ29udmVyc2lvblJlc3VsdCBjb252UmVzID0gY29udmVydFVURjhUb1VU
RjE2KCZzb3VyY2VTdGFydA0KKyAgICAgICAgICAgICAgICAsIHNvdXJjZUVuZA0KKyAgICAgICAg
ICAgICAgICAsICZyZXN1bHRTdGFydA0KKyAgICAgICAgICAgICAgICAsIHJlc3VsdC5kYXRhKCkg
KyByZXN1bHQuc2l6ZSgpDQorICAgICAgICAgICAgICAgICwgdHJ1ZSk7DQorDQorICAgICAgICAg
ICAgLy8gRklYTUU6IGlzIGl0IHBvc3NpYmxlPw0KKyAgICAgICAgICAgIGlmIChjb252UmVzID09
IHRhcmdldEV4aGF1c3RlZCAmJiBzb3VyY2VTdGFydCA8IHNvdXJjZUVuZCkgew0KKyAgICAgICAg
ICAgICAgICBvbGRTaXplID0gcmVzdWx0LnNpemUoKTsNCisgICAgICAgICAgICAgICAgcmVzdWx0
LnJlc2l6ZShvbGRTaXplICsgMjU2KTsNCisgICAgICAgICAgICAgICAgcmVzdWx0U3RhcnQgPSBy
ZXN1bHQuZGF0YSgpICsgb2xkU2l6ZTsNCisgICAgICAgICAgICAgICAgY29udGludWU7DQorICAg
ICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIGlmIChjb252UmVzICE9IGNvbnZlcnNpb25PSykN
CisgICAgICAgICAgICAgICAgc2F3SW52YWxpZENoYXIgPSB0cnVlOw0KKw0KKyAgICAgICAgICAg
IGJyZWFrOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgKmxlZnQgPSBzb3VyY2VFbmQgLSBzb3Vy
Y2VTdGFydDsNCisgICAgICAgIHJlc3VsdC5yZXNpemUocmVzdWx0U3RhcnQgLSByZXN1bHQuZGF0
YSgpKTsNCisgICAgfSBlbHNlIHsNCisgICAgICAgIGludCB0ZXN0TGVuZ3RoID0gbGVuZ3RoOw0K
KyAgICAgICAgaW50IHVudGVzdGVkTGVuZ3RoID0gbGVuZ3RoOw0KKyAgICAgICAgZm9yICg7Oykg
ew0KKyAgICAgICAgICAgIGludCByZXN1bHRMZW5ndGggPSBNdWx0aUJ5dGVUb1dpZGVDaGFyKGNv
ZGVQYWdlLCBmbGFncywgYnl0ZXMsIHRlc3RMZW5ndGgsIDAsIDApOw0KKw0KKyAgICAgICAgICAg
IGlmIChyZXN1bHRMZW5ndGggPiAwKSB7DQorICAgICAgICAgICAgICAgIGludCBvbGRTaXplID0g
cmVzdWx0LnNpemUoKTsNCisgICAgICAgICAgICAgICAgcmVzdWx0LnJlc2l6ZShvbGRTaXplICsg
cmVzdWx0TGVuZ3RoKTsNCisNCisgICAgICAgICAgICAgICAgTXVsdGlCeXRlVG9XaWRlQ2hhcihj
b2RlUGFnZSwgZmxhZ3MsIGJ5dGVzLCB0ZXN0TGVuZ3RoLCByZXN1bHQuZGF0YSgpICsgb2xkU2l6
ZSwgcmVzdWx0TGVuZ3RoKTsNCisNCisgICAgICAgICAgICAgICAgaWYgKHRlc3RMZW5ndGggPT0g
dW50ZXN0ZWRMZW5ndGgpIHsNCisgICAgICAgICAgICAgICAgICAgICpsZWZ0ID0gbGVuZ3RoIC0g
dGVzdExlbmd0aDsNCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAg
ICB9DQorICAgICAgICAgICAgICAgIHVudGVzdGVkTGVuZ3RoIC09IHRlc3RMZW5ndGg7DQorICAg
ICAgICAgICAgICAgIGxlbmd0aCAtPSB0ZXN0TGVuZ3RoOw0KKyAgICAgICAgICAgICAgICBieXRl
cyArPSB0ZXN0TGVuZ3RoOw0KKyAgICAgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgICAg
IHVudGVzdGVkTGVuZ3RoID0gdGVzdExlbmd0aCAtIDE7DQorICAgICAgICAgICAgICAgIGlmICgh
dW50ZXN0ZWRMZW5ndGgpIHsNCisgICAgICAgICAgICAgICAgICAgICpsZWZ0ID0gbGVuZ3RoOw0K
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAg
ICAgICB9DQorICAgICAgICAgICAgdGVzdExlbmd0aCA9ICh1bnRlc3RlZExlbmd0aCArIDEpIC8g
MjsNCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCitTdHJpbmcgVGV4dENvZGVjV2luY2U6OmRl
Y29kZShjb25zdCBjaGFyKiBieXRlcywgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBz
dG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3IpDQorew0KKyAgICBpZiAoIW1fZGVjb2RlQnVmZmVy
LmlzRW1wdHkoKSkgew0KKyAgICAgICAgbV9kZWNvZGVCdWZmZXIuYXBwZW5kKGJ5dGVzLCBsZW5n
dGgpOw0KKyAgICAgICAgYnl0ZXMgPSBtX2RlY29kZUJ1ZmZlci5kYXRhKCk7DQorICAgICAgICBs
ZW5ndGggPSBtX2RlY29kZUJ1ZmZlci5zaXplKCk7DQorICAgIH0NCisNCisgICAgc2l6ZV90IGxl
ZnQ7DQorICAgIFZlY3RvcjxVQ2hhciwgODE5Mj4gcmVzdWx0Ow0KKyAgICBmb3IgKDs7KSB7DQor
ICAgICAgICBib29sIHNhd0ludmFsaWRDaGFyID0gZmFsc2U7DQorICAgICAgICBXZWJDb3JlOjpk
ZWNvZGUocmVzdWx0LCBtX2VuY29kaW5nLm5hbWUoKSwgYnl0ZXMsIGxlbmd0aCwgJmxlZnQsIG1f
ZGVjb2RlQnVmZmVyLmlzRW1wdHkoKSwgc2F3SW52YWxpZENoYXIpOw0KKyAgICAgICAgaWYgKCFs
ZWZ0KQ0KKyAgICAgICAgICAgIGJyZWFrOw0KKw0KKyAgICAgICAgaWYgKCFzYXdJbnZhbGlkQ2hh
ciAmJiAhZmx1c2ggJiYgbGVmdCA8IDE2KQ0KKyAgICAgICAgICAgIGJyZWFrOw0KKw0KKyAgICAg
ICAgcmVzdWx0LmFwcGVuZChMJz8nKTsNCisgICAgICAgIHNhd0Vycm9yID0gdHJ1ZTsNCisgICAg
ICAgIGlmIChzdG9wT25FcnJvcikNCisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHJlc3VsdC5k
YXRhKCksIHJlc3VsdC5zaXplKCkpOw0KKw0KKw0KKyAgICAgICAgaWYgKGxlZnQgPT0gMSkNCisg
ICAgICAgICAgICBicmVhazsNCisNCisgICAgICAgIGJ5dGVzICs9IGxlbmd0aCAtIGxlZnQgKyAx
Ow0KKyAgICAgICAgbGVuZ3RoID0gbGVmdCAtIDE7DQorICAgIH0NCisgICAgaWYgKGxlZnQgJiYg
IWZsdXNoKSB7DQorICAgICAgICBpZiAobV9kZWNvZGVCdWZmZXIuaXNFbXB0eSgpKQ0KKyAgICAg
ICAgICAgIG1fZGVjb2RlQnVmZmVyLmFwcGVuZChieXRlcyArIGxlbmd0aCAtIGxlZnQsIGxlZnQp
Ow0KKyAgICAgICAgZWxzZSB7DQorICAgICAgICAgICAgbWVtbW92ZShtX2RlY29kZUJ1ZmZlci5k
YXRhKCksIGJ5dGVzICsgbGVuZ3RoIC0gbGVmdCwgbGVmdCk7DQorICAgICAgICAgICAgbV9kZWNv
ZGVCdWZmZXIucmVzaXplKGxlZnQpOw0KKyAgICAgICAgfQ0KKyAgICB9IGVsc2UNCisgICAgICAg
IG1fZGVjb2RlQnVmZmVyLmNsZWFyKCk7DQorICAgIHJldHVybiBTdHJpbmcocmVzdWx0LmRhdGEo
KSwgcmVzdWx0LnNpemUoKSk7DQorfQ0KKw0KK0NTdHJpbmcgVGV4dENvZGVjV2luY2U6OmVuY29k
ZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVW5lbmNvZGFibGVIYW5k
bGluZykNCit7DQorICAgIGlmICghY2hhcmFjdGVycyB8fCAhbGVuZ3RoKQ0KKyAgICAgICAgcmV0
dXJuIENTdHJpbmcoKTsNCisNCisgICAgVUlOVCBjb2RlUGFnZSA9IGdldENvZGVQYWdlKG1fZW5j
b2RpbmcubmFtZSgpKTsNCisgICAgRFdPUkQgZmxhZ3MgPSBjb2RlUGFnZSA9PSBDUF9VVEY4ID8g
MCA6IFdDX0NPTVBPU0lURUNIRUNLOw0KKw0KKyAgICBpbnQgcmVzdWx0TGVuZ3RoID0gV2lkZUNo
YXJUb011bHRpQnl0ZShjb2RlUGFnZSwgZmxhZ3MsIGNoYXJhY3RlcnMsIGxlbmd0aCwgMCwgMCwg
MCwgMCk7DQorDQorICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGltcGxlbWVudCBVbmVuY29kYWJs
ZUhhbmRsaW5nOiBRdWVzdGlvbk1hcmtzRm9yVW5lbmNvZGFibGVzLCBFbnRpdGllc0ZvclVuZW5j
b2RhYmxlcywgYW5kIFVSTEVuY29kZWRFbnRpdGllc0ZvclVuZW5jb2RhYmxlcy4NCisNCisgICAg
aWYgKHJlc3VsdExlbmd0aCA8PSAwKQ0KKyAgICAgICAgcmV0dXJuICI/IjsNCisNCisgICAgVmVj
dG9yPGNoYXI+IHJlc3VsdChyZXN1bHRMZW5ndGgpOw0KKw0KKyAgICBXaWRlQ2hhclRvTXVsdGlC
eXRlKGNvZGVQYWdlLCBmbGFncywgY2hhcmFjdGVycywgbGVuZ3RoLCByZXN1bHQuZGF0YSgpLCBy
ZXN1bHRMZW5ndGgsIDAsIDApOw0KKw0KKyAgICByZXR1cm4gQ1N0cmluZyhyZXN1bHQuZGF0YSgp
LCByZXN1bHQuc2l6ZSgpKTsNCit9DQorDQordm9pZCBUZXh0Q29kZWNXaW5jZTo6ZW51bWVyYXRl
U3VwcG9ydGVkRW5jb2RpbmdzKEVuY29kaW5nUmVjZWl2ZXImIHJlY2VpdmVyKQ0KK3sNCisgICAg
bGFuZ3VhZ2VNYW5hZ2VyKCk7DQorICAgIGZvciAoQ2hhcnNldFNldDo6aXRlcmF0b3IgaSA9IHN1
cHBvcnRlZENoYXJzZXRzKCkuYmVnaW4oKTsgaSAhPSBzdXBwb3J0ZWRDaGFyc2V0cygpLmVuZCgp
OyArK2kpIHsNCisgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5mbz46Oml0ZXJhdG9y
IGogPSBrbm93bkNoYXJzZXRzKCkuZmluZCgqaSk7DQorICAgICAgICBpZiAoaiAhPSBrbm93bkNo
YXJzZXRzKCkuZW5kKCkgJiYgIXJlY2VpdmVyLnJlY2VpdmUoai0+c2Vjb25kLm1fbmFtZS5kYXRh
KCksIGotPnNlY29uZC5tX2ZyaWVuZGx5TmFtZS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlv
bigpLCBqLT5zZWNvbmQubV9jb2RlUGFnZSkpDQorICAgICAgICAgICAgYnJlYWs7DQorICAgIH0N
Cit9DQorDQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQ0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
dGV4dC93aW5jZS9UZXh0Q29kZWNXaW5jZS5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L3dpbmNlL1RleHRDb2RlY1dpbmNlLmgJKHJldmlzaW9uIDApDQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L3dpbmNlL1RleHRDb2RlY1dpbmNlLmgJKHJldmlzaW9uIDApDQpAQCAt
MCwwICsxLDcxIEBADQorLyoNCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBbGV4
ZXkgUHJvc2t1cnlha292IDxhcEBueXBvcC5jb20+DQorICogQ29weXJpZ2h0IChDKSAyMDA3LTIw
MDkgVG9yY2ggTW9iaWxlLCBJbmMuDQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMN
CisgKiBhcmUgbWV0Og0KKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
DQorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQ0KKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorICoNCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZDQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUNCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVINCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1INCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwNCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sDQorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SDQorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQ0K
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQ0KKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIA0KKyAqLw0KKw0KKyNp
Zm5kZWYgVGV4dENvZGVjV2luY2VfaA0KKyNkZWZpbmUgVGV4dENvZGVjV2luY2VfaA0KKw0KKyNp
bmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIg0KKyNpbmNsdWRlICJUZXh0Q29kZWMuaCINCisjaW5j
bHVkZSAiVGV4dEVuY29kaW5nLmgiDQorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4NCisNCituYW1l
c3BhY2UgV2ViQ29yZSB7DQorDQorY2xhc3MgVGV4dENvZGVjV2luY2UgOiBwdWJsaWMgVGV4dENv
ZGVjIHsNCitwdWJsaWM6DQorICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQmFzZUVuY29kaW5nTmFt
ZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyKTsNCisgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJCYXNl
Q29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhcik7DQorDQorICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVy
RXh0ZW5kZWRFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhcik7DQorICAgIHN0YXRp
YyB2b2lkIHJlZ2lzdGVyRXh0ZW5kZWRDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyKTsNCisNCisg
ICAgVGV4dENvZGVjV2luY2UoY29uc3QgVGV4dEVuY29kaW5nJik7DQorICAgIHZpcnR1YWwgflRl
eHRDb2RlY1dpbmNlKCk7DQorDQorICAgIHZpcnR1YWwgU3RyaW5nIGRlY29kZShjb25zdCBjaGFy
Kiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3
RXJyb3IpOw0KKyAgICB2aXJ0dWFsIENTdHJpbmcgZW5jb2RlKGNvbnN0IFVDaGFyKiwgc2l6ZV90
IGxlbmd0aCwgVW5lbmNvZGFibGVIYW5kbGluZyk7DQorDQorICAgIHN0cnVjdCBFbmNvZGluZ0lu
Zm8gew0KKyAgICAgICAgU3RyaW5nIG1fZW5jb2Rpbmc7DQorICAgICAgICBTdHJpbmcgbV9mcmll
bmRseU5hbWU7DQorICAgIH07DQorDQorICAgIHN0cnVjdCBFbmNvZGluZ1JlY2VpdmVyIHsNCisg
ICAgICAgIC8vIFJldHVybiBmYWxzZSB0byBzdG9wIGVudW1lcmF0aW5nLg0KKyAgICAgICAgdmly
dHVhbCBib29sIHJlY2VpdmUoY29uc3QgY2hhciogZW5jb2RpbmcsIGNvbnN0IHdjaGFyX3QqIGZy
aWVuZGx5TmFtZSwgdW5zaWduZWQgaW50IGNvZGVQYWdlKSA9IDA7DQorICAgIH07DQorDQorICAg
IHN0YXRpYyB2b2lkIGVudW1lcmF0ZVN1cHBvcnRlZEVuY29kaW5ncyhFbmNvZGluZ1JlY2VpdmVy
JiByZWNlaXZlcik7DQorDQorcHJpdmF0ZToNCisgICAgVGV4dEVuY29kaW5nIG1fZW5jb2Rpbmc7
DQorICAgIFZlY3RvcjxjaGFyPiBtX2RlY29kZUJ1ZmZlcjsNCit9Ow0KKw0KK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUNCisNCisjZW5kaWYgLy8gVGV4dENvZGVjV2luY2VfaA0K
</data>
<flag name="review"
          id="36478"
          type_id="1"
          status="-"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52884</attachid>
            <date>2010-04-08 11:58:20 -0700</date>
            <delta_ts>2010-06-25 01:30:17 -0700</delta_ts>
            <desc>The patch (changed Wince to WinCE)</desc>
            <filename>TextCodecWince.patch</filename>
            <type>text/plain</type>
            <size>24279</size>
            <attacher name="Patrick R. Gansterer">paroga</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDUzODU4KQ0KKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
DQpAQCAtMSwzICsxLDM3IEBADQorMjAxMC0wMS0yNiAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJv
Z2FAcGFyb2dhLmNvbT4NCisNCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLg0K
Kw0KKyAgICAgICAgSW1wbGVtZW50IFRleHRDb2RlY3MgZm9yIFdpbkNFIHBvcnQuDQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzIxNjkNCisgICAgICAg
IE9yaWdpbmFsbHkgd3JpdHRlbiBieSBZb25nIExpIDx5b25nLmxpQHRvcmNobW9iaWxlLmNvbT4N
CisNCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmg6DQorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRDYWNoZVdpbmNlLmNwcDoNCisgICAgICAgIChX
ZWJDb3JlOjpGb250Q2FjaGU6OmdldE11bHRpTGFuZ3VhZ2VJbnRlcmZhY2UpOg0KKyAgICAgICAg
KiBwbGF0Zm9ybS90ZXh0L3dpbmNlL1RleHRDb2RlY1dpbkNFLmNwcDogQWRkZWQuDQorICAgICAg
ICAoV2ViQ29yZTo6Y29kZVBhZ2VDaGFyc2V0cyk6DQorICAgICAgICAoV2ViQ29yZTo6a25vd25D
aGFyc2V0cyk6DQorICAgICAgICAoV2ViQ29yZTo6c3VwcG9ydGVkQ2hhcnNldHMpOg0KKyAgICAg
ICAgKFdlYkNvcmU6Omxhbmd1YWdlTWFuYWdlcik6DQorICAgICAgICAoV2ViQ29yZTo6YWRkQ2hh
cnNldCk6DQorICAgICAgICAoV2ViQ29yZTo6TGFuZ3VhZ2VNYW5hZ2VyOjpMYW5ndWFnZU1hbmFn
ZXIpOg0KKyAgICAgICAgKFdlYkNvcmU6OmdldENvZGVQYWdlKToNCisgICAgICAgIChXZWJDb3Jl
OjpuZXdUZXh0Q29kZWNXaW5DRSk6DQorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjV2luQ0U6
OlRleHRDb2RlY1dpbkNFKToNCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNXaW5DRTo6flRl
eHRDb2RlY1dpbkNFKToNCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNXaW5DRTo6cmVnaXN0
ZXJCYXNlRW5jb2RpbmdOYW1lcyk6DQorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjV2luQ0U6
OnJlZ2lzdGVyQmFzZUNvZGVjcyk6DQorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjV2luQ0U6
OnJlZ2lzdGVyRXh0ZW5kZWRFbmNvZGluZ05hbWVzKToNCisgICAgICAgIChXZWJDb3JlOjpUZXh0
Q29kZWNXaW5DRTo6cmVnaXN0ZXJFeHRlbmRlZENvZGVjcyk6DQorICAgICAgICAoV2ViQ29yZTo6
Z2V0Q29kZVBhZ2VGbGFncyk6DQorICAgICAgICAoV2ViQ29yZTo6ZmluZEZpcnN0Tm9uQXNjaWlD
aGFyYWN0ZXIpOg0KKyAgICAgICAgKFdlYkNvcmU6OmRlY29kZSk6DQorICAgICAgICAoV2ViQ29y
ZTo6VGV4dENvZGVjV2luQ0U6OmRlY29kZSk6DQorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVj
V2luQ0U6OmVuY29kZSk6DQorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjV2luQ0U6OmVudW1l
cmF0ZVN1cHBvcnRlZEVuY29kaW5ncyk6DQorICAgICAgICAqIHBsYXRmb3JtL3RleHQvd2luY2Uv
VGV4dENvZGVjV2luQ0UuaDogQWRkZWQuDQorDQogMjAxMC0wMS0yNiAgQ2hyaXMgRmxlaXphY2gg
IDxjZmxlaXphY2hAYXBwbGUuY29tPg0KIA0KICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRs
ZXIuDQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaA0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQ0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgJKHJldmlzaW9u
IDUzODU4KQ0KKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgJKHdvcmtp
bmcgY29weSkNCkBAIC03Miw2ICs3Miw3IEBAIHB1YmxpYzoNCiAjZW5kaWYNCiAgICAgc3RhdGlj
IHZvaWQgY29tSW5pdGlhbGl6ZSgpOw0KICAgICBzdGF0aWMgdm9pZCBjb21VbmluaXRpYWxpemUo
KTsNCisgICAgc3RhdGljIElNdWx0aUxhbmd1YWdlKiBnZXRNdWx0aUxhbmd1YWdlSW50ZXJmYWNl
KCk7DQogI2VsaWYgUExBVEZPUk0oV0lOKQ0KICAgICBJTUxhbmdGb250TGluazIqIGdldEZvbnRM
aW5rSW50ZXJmYWNlKCk7DQogI2VuZGlmDQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW5jZS9Gb250Q2FjaGVXaW5jZS5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRDYWNoZVdpbmNlLmNwcAkocmV2aXNpb24gNTM4NTgpDQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250Q2FjaGVXaW5jZS5jcHAJKHdv
cmtpbmcgY29weSkNCkBAIC01MSw3ICs1MSw3IEBAIHN0YXRpYyBJTUxhbmdGb250TGluazIqIGxh
bmdGb250TGluayA9IDANCiBzdGF0aWMgSU1MYW5nRm9udExpbmsqIGxhbmdGb250TGluayA9IDA7
DQogI2VuZGlmDQogDQotSU11bHRpTGFuZ3VhZ2UqIGdldE11bHRpTGFuZ3VhZ2VJbnRlcmZhY2Uo
KQ0KK0lNdWx0aUxhbmd1YWdlKiBGb250Q2FjaGU6OmdldE11bHRpTGFuZ3VhZ2VJbnRlcmZhY2Uo
KQ0KIHsNCiAgICAgaWYgKCFtdWx0aUxhbmd1YWdlKQ0KICAgICAgICAgQ29DcmVhdGVJbnN0YW5j
ZShDTFNJRF9DTXVsdGlMYW5ndWFnZSwgMCwgQ0xTQ1RYX0lOUFJPQ19TRVJWRVIsIElJRF9JTXVs
dGlMYW5ndWFnZSwgKHZvaWQqKikmbXVsdGlMYW5ndWFnZSk7DQpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L3dpbmNlL1RleHRDb2RlY1dpbkNFLmNwcA0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vdGV4dC93aW5jZS9UZXh0Q29kZWNXaW5DRS5jcHAJKHJldmlzaW9uIDApDQor
KysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3dpbmNlL1RleHRDb2RlY1dpbkNFLmNwcAkocmV2aXNp
b24gMCkNCkBAIC0wLDAgKzEsNDgzIEBADQorLyoNCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAw
OSBUb3JjaCBNb2JpbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKg0KKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dA0KKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucw0KKyAqIGFyZSBtZXQ6DQorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQNCisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuDQorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQNCisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlDQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4NCisgKg0KKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpIHdpbGwgYmUgdXNlZnVsLA0KKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQ0KKyAqICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCisgKg0KKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlDQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvDQorICogIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsDQorICog
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLg0KKyAqLw0KKw0KKyNpbmNsdWRlICJjb25maWcu
aCINCisjaW5jbHVkZSAiVGV4dENvZGVjV2luQ0UuaCINCisNCisjaW5jbHVkZSAiY2VfdGV4dGNv
ZGVjcy5oIg0KKyNpbmNsdWRlICJGb250Q2FjaGUuaCINCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCINCisjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIg0KKyNpbmNsdWRlIDxtbGFuZy5oPg0KKyNp
bmNsdWRlIDx3aW5iYXNlLmg+DQorI2luY2x1ZGUgPHdpbm5scy5oPg0KKyNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPg0KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPg0KKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+DQorI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VURjguaD4NCisNCituYW1lc3Bh
Y2UgV2ViQ29yZSB7DQorDQorc3RydWN0IENoYXJzZXRJbmZvIHsNCisgICAgQ1N0cmluZyBtX25h
bWU7DQorICAgIFN0cmluZyBtX2ZyaWVuZGx5TmFtZTsNCisgICAgVUlOVCBtX2NvZGVQYWdlOw0K
KyAgICBWZWN0b3I8Q1N0cmluZz4gbV9hbGlhc2VzOw0KKyAgICBib29sIG1fdXNlc05hdGl2ZUNv
ZGVjOw0KK307DQorDQorY2xhc3MgTGFuZ3VhZ2VNYW5hZ2VyIHsNCitwcml2YXRlOg0KKyAgICBM
YW5ndWFnZU1hbmFnZXIoKTsNCisNCisgICAgZnJpZW5kIExhbmd1YWdlTWFuYWdlciYgbGFuZ3Vh
Z2VNYW5hZ2VyKCk7DQorfTsNCisNCisvLyBVc2FnZTogYSBsb29rdXAgdGFibGUgdXNlZCB0byBn
ZXQgQ2hhcnNldEluZm8gd2l0aCBjb2RlIHBhZ2UgSUQuDQorLy8gS2V5OiBjb2RlIHBhZ2UgSUQu
IFZhbHVlOiBjaGFyc2V0IGluZm9ybWF0aW9uLg0KK3N0YXRpYyBIYXNoTWFwPFVJTlQsIENTdHJp
bmc+JiBjb2RlUGFnZUNoYXJzZXRzKCkNCit7DQorICAgIHN0YXRpYyBIYXNoTWFwPFVJTlQsIENT
dHJpbmc+IGNjOw0KKyAgICByZXR1cm4gY2M7DQorfQ0KKw0KK3N0YXRpYyBIYXNoTWFwPFN0cmlu
ZywgQ2hhcnNldEluZm8+JiBrbm93bkNoYXJzZXRzKCkNCit7DQorICAgIHN0YXRpYyBIYXNoTWFw
PFN0cmluZywgQ2hhcnNldEluZm8+IGtjOw0KKyAgICByZXR1cm4ga2M7DQorfQ0KKw0KKy8vIFVz
YWdlOiBhIG1hcCB0aGF0IHN0b3JlcyBjaGFyc2V0cyB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgc3lz
dGVtLiBTb3J0ZWQgYnkgbmFtZS4NCisvLyBLZXk6IGNoYXJzZXQuIFZhbHVlOiBjb2RlIHBhZ2Ug
SUQuDQordHlwZWRlZiBIYXNoU2V0PFN0cmluZz4gQ2hhcnNldFNldDsNCitzdGF0aWMgQ2hhcnNl
dFNldCYgc3VwcG9ydGVkQ2hhcnNldHMoKQ0KK3sNCisgICAgc3RhdGljIENoYXJzZXRTZXQgc2w7
DQorICAgIHJldHVybiBzbDsNCit9DQorDQorc3RhdGljIExhbmd1YWdlTWFuYWdlciYgbGFuZ3Vh
Z2VNYW5hZ2VyKCkNCit7DQorICAgIHN0YXRpYyBMYW5ndWFnZU1hbmFnZXIgbG07DQorICAgIHJl
dHVybiBsbTsNCit9DQorDQorc3RhdGljIHZvaWQgYWRkQ2hhcnNldChVSU5UIGNvZGVQYWdlLCBj
b25zdCBjaGFyKiBjaGFyc2V0TmFtZSwgY29uc3Qgd2NoYXJfdCogZnJpZW5kbHlOYW1lLCBjb25z
dCBjaGFyKiBjaGFyc2V0QWxpYXNlcywgYm9vbCBuYXRpdmVTdXBwb3J0ID0gZmFsc2UpDQorew0K
KyAgICBDaGFyc2V0SW5mbyBpbmZvOw0KKyAgICBpbmZvLm1fY29kZVBhZ2UgPSBjb2RlUGFnZTsN
CisgICAgaW5mby5tX25hbWUgPSBjaGFyc2V0TmFtZTsNCisgICAgaW5mby5tX2ZyaWVuZGx5TmFt
ZSA9IGZyaWVuZGx5TmFtZTsNCisgICAgaW5mby5tX3VzZXNOYXRpdmVDb2RlYyA9IG5hdGl2ZVN1
cHBvcnQ7DQorICAgIGNvbnN0IGNoYXIqIGJlZ2luID0gY2hhcnNldEFsaWFzZXM7DQorICAgIGZv
ciAoOzspIHsNCisgICAgICAgIGNvbnN0IGNoYXIqIGVuZCA9IHN0cmNocihiZWdpbiwgJ3wnKTsN
CisgICAgICAgIENTdHJpbmcgYWxpYXMgPSBlbmQgPyBDU3RyaW5nKGJlZ2luLCBlbmQgLSBiZWdp
bikgOiBiZWdpbjsNCisgICAgICAgIGlmIChhbGlhcy5sZW5ndGgoKSkNCisgICAgICAgICAgICBp
bmZvLm1fYWxpYXNlcy5hcHBlbmQoYWxpYXMpOw0KKyAgICAgICAgaWYgKCFlbmQpDQorICAgICAg
ICAgICAgYnJlYWs7DQorICAgICAgICBiZWdpbiA9IGVuZCArIDE7DQorICAgIH0NCisgICAga25v
d25DaGFyc2V0cygpLnNldChpbmZvLm1fbmFtZS5kYXRhKCksIGluZm8pOw0KKyAgICBpZiAoY29k
ZVBhZ2UgIT0gQ1BfQUNQKQ0KKyAgICAgICAgY29kZVBhZ2VDaGFyc2V0cygpLnNldChjb2RlUGFn
ZSwgaW5mby5tX25hbWUpOw0KK30NCisNCitMYW5ndWFnZU1hbmFnZXI6Okxhbmd1YWdlTWFuYWdl
cigpDQorew0KKyAgICAvLyA0MzcsIDcwOCwgNzA5LCA3MTAsIDcyMCwgNzM3LCA3NzUsIDg1MCwg
ODUyDQorICAgIGFkZENoYXJzZXQoOTMyLCAgICAgIlNISUZUX0pJUyIsIEwiSmFwYW5lc2UgKFNI
SUZUX0pJUykiLCAgICAgICAgInNoaWZ0X2ppcyIpOw0KKyAgICBhZGRDaGFyc2V0KDkzNiwgICAg
ICJHQksiLCAgICAgICBMIkNoaW5lc2UgU2ltcGxpZmllZCAoR0JLKSIsICAgICJnYmt8Z2IyMzEy
Iik7DQorICAgIGFkZENoYXJzZXQoOTQ5LCAgICAgIktTQzU2MDEiLCAgIEwiS29yZWFuIChLU0M1
NjAxKSIsICAgICAgICAgICAgImtzX2NfNTYwMS0xOTg3fGtzYzU2MDF8ZXVjLWtyfGV1Y2tyfHgt
ZXVjLWtyIik7DQorICAgIGFkZENoYXJzZXQoOTUwLCAgICAgIkJJRzUiLCAgICAgIEwiQ2hpbmVz
ZSBUcmFkaXRpb25hbCAoQklHNSkiLCAgImJpZzUiKTsNCisgICAgYWRkQ2hhcnNldCgxMzYxLCAg
ICAiSk9IQUIiLCAgICAgTCJLb3JlYW4gKEpvaGFiKSIsICAgICAgICAgICAgICAiam9oYWJ8a29y
ZWFuLmpvaGFiIik7DQorICAgIGFkZENoYXJzZXQoNTE5MzIsICAgIkVVQy1KUCIsICAgIEwiSmFw
YW5lc2UgKEVVQykiLCAgICAgICAgICAgICAgImV1Yy1qcHxldWNqcHx4LWV1Yy1qcCIsIHRydWUp
Ow0KKyAgICBhZGRDaGFyc2V0KDg3NCwgICAgICJDUDg3NCIsICAgICBMIlRoYWkgKFdpbmRvd3Mp
IiwgICAgICAgICAgICAgICJjcDg3NHx3aW5kb3dzLTg3NCIsIHRydWUpOw0KKyAgICBhZGRDaGFy
c2V0KENQX0FDUCwgICJUSVM2MjAiLCAgICBMIlRoYWkgKFRJUyA2MjApIiwgICAgICAgICAgICAg
ICJ0aXM2MjB8SVNPLTg4NTktMTF8SVNPLUlSLTE2NnxUSVMtNjIwfFRJUzYyMC0wVElTNjIwLjI1
MjktMXxUSVM2MjAuMjUzMy0wfFRJUzYyMC4yNTMzLTF8dGhhaTgiLCB0cnVlKTsNCisgICAgYWRk
Q2hhcnNldChDUF9BQ1AsICAiTUFDVEhBSSIsICAgTCJUaGFpIChNYWMgT1MpIiwgICAgICAgICAg
ICAgICAibWFjdGhhaXx4LW1hYy10aGFpfG1hYy10aGFpIiwgdHJ1ZSk7DQorICAgIHN1cHBvcnRl
ZENoYXJzZXRzKCkuYWRkKCJFVUMtSlAiKTsNCisgICAgc3VwcG9ydGVkQ2hhcnNldHMoKS5hZGQo
IkNQODc0Iik7DQorICAgIHN1cHBvcnRlZENoYXJzZXRzKCkuYWRkKCJUSVM2MjAiKTsNCisgICAg
c3VwcG9ydGVkQ2hhcnNldHMoKS5hZGQoIk1BQ1RIQUkiKTsNCisNCisgICAgSUVudW1Db2RlUGFn
ZSogZW51bUludGVyZmFjZTsNCisgICAgSU11bHRpTGFuZ3VhZ2UqIG1saSA9IEZvbnRDYWNoZTo6
Z2V0TXVsdGlMYW5ndWFnZUludGVyZmFjZSgpOw0KKyAgICBpZiAobWxpICYmIFNfT0sgPT0gbWxp
LT5FbnVtQ29kZVBhZ2VzKE1JTUVDT05URl9CUk9XU0VSLCAmZW51bUludGVyZmFjZSkpIHsNCisg
ICAgICAgIE1JTUVDUElORk8gY3BJbmZvOw0KKyAgICAgICAgVUxPTkcgY2NwSW5mbzsNCisgICAg
ICAgIHdoaWxlIChTX09LID09IGVudW1JbnRlcmZhY2UtPk5leHQoMSwgJmNwSW5mbywgJmNjcElu
Zm8pICYmIGNjcEluZm8pIHsNCisgICAgICAgICAgICBpZiAoIUlzVmFsaWRDb2RlUGFnZShjcElu
Zm8udWlDb2RlUGFnZSkpDQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KKw0KKyAgICAgICAg
ICAgIEhhc2hNYXA8VUlOVCwgQ1N0cmluZz46Oml0ZXJhdG9yIGkgPSBjb2RlUGFnZUNoYXJzZXRz
KCkuZmluZChjcEluZm8udWlDb2RlUGFnZSk7DQorDQorICAgICAgICAgICAgQ1N0cmluZyBuYW1l
KFN0cmluZyhjcEluZm8ud3N6V2ViQ2hhcnNldCkubGF0aW4xKCkpOw0KKyAgICAgICAgICAgIGlm
IChpID09IGNvZGVQYWdlQ2hhcnNldHMoKS5lbmQoKSkgew0KKyAgICAgICAgICAgICAgICBDaGFy
c2V0SW5mbyBpbmZvOw0KKyAgICAgICAgICAgICAgICBpbmZvLm1fY29kZVBhZ2UgPSBjcEluZm8u
dWlDb2RlUGFnZTsNCisgICAgICAgICAgICAgICAga25vd25DaGFyc2V0cygpLnNldChuYW1lLmRh
dGEoKSwgaW5mbyk7DQorICAgICAgICAgICAgICAgIGkgPSBjb2RlUGFnZUNoYXJzZXRzKCkuc2V0
KGNwSW5mby51aUNvZGVQYWdlLCBuYW1lKS5maXJzdDsNCisgICAgICAgICAgICB9DQorICAgICAg
ICAgICAgaWYgKGkgIT0gY29kZVBhZ2VDaGFyc2V0cygpLmVuZCgpKSB7DQorICAgICAgICAgICAg
ICAgIEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5mbz46Oml0ZXJhdG9yIGogPSBrbm93bkNoYXJz
ZXRzKCkuZmluZChTdHJpbmcoaS0+c2Vjb25kLmRhdGEoKSwgaS0+c2Vjb25kLmxlbmd0aCgpKSk7
DQorICAgICAgICAgICAgICAgIEFTU0VSVChqICE9IGtub3duQ2hhcnNldHMoKS5lbmQoKSk7DQor
ICAgICAgICAgICAgICAgIENoYXJzZXRJbmZvJiBpbmZvID0gai0+c2Vjb25kOw0KKyAgICAgICAg
ICAgICAgICBpbmZvLm1fbmFtZSA9IGktPnNlY29uZC5kYXRhKCk7DQorICAgICAgICAgICAgICAg
IGluZm8ubV9mcmllbmRseU5hbWUgPSBjcEluZm8ud3N6RGVzY3JpcHRpb247DQorICAgICAgICAg
ICAgICAgIGluZm8ubV9hbGlhc2VzLmFwcGVuZChuYW1lKTsNCisgICAgICAgICAgICAgICAgaW5m
by5tX2FsaWFzZXMuYXBwZW5kKFN0cmluZyhjcEluZm8ud3N6SGVhZGVyQ2hhcnNldCkubGF0aW4x
KCkpOw0KKyAgICAgICAgICAgICAgICBpbmZvLm1fYWxpYXNlcy5hcHBlbmQoU3RyaW5nKGNwSW5m
by53c3pCb2R5Q2hhcnNldCkubGF0aW4xKCkpOw0KKyAgICAgICAgICAgICAgICBpbmZvLm1fdXNl
c05hdGl2ZUNvZGVjID0gZmFsc2U7DQorICAgICAgICAgICAgICAgIFN0cmluZyBjcE5hbWUgPSBT
dHJpbmc6OmZvcm1hdCgiY3AlZCIsIGNwSW5mby51aUNvZGVQYWdlKTsNCisgICAgICAgICAgICAg
ICAgaW5mby5tX2FsaWFzZXMuYXBwZW5kKGNwTmFtZS5sYXRpbjEoKSk7DQorICAgICAgICAgICAg
ICAgIHN1cHBvcnRlZENoYXJzZXRzKCkuYWRkKGktPnNlY29uZC5kYXRhKCkpOw0KKyAgICAgICAg
ICAgIH0NCisgICAgICAgIH0NCisgICAgICAgIGVudW1JbnRlcmZhY2UtPlJlbGVhc2UoKTsNCisg
ICAgfQ0KK30NCisNCitzdGF0aWMgVUlOVCBnZXRDb2RlUGFnZShjb25zdCBjaGFyKiBuYW1lKQ0K
K3sNCisgICAgaWYgKCFzdHJjbXAobmFtZSwgIlVURi04IikpDQorICAgICAgICByZXR1cm4gQ1Bf
VVRGODsNCisNCisgICAgLy8gRXhwbGljaXRseSB1c2UgYSAiY29uc3QiIHJlZmVyZW5jZSB0byBm
aXggdGhlIHNpbGx5IFZTIGJ1aWxkIGVycm9yDQorICAgIC8vIHNheWluZyAiPT0iIGlzIG5vdCBm
b3VuZCBmb3IgY29uc3RfaXRlcmF0b3IgYW5kIGl0ZXJhdG9yDQorICAgIGNvbnN0IEhhc2hNYXA8
U3RyaW5nLCBDaGFyc2V0SW5mbz4mIGNoYXJzZXRzID0ga25vd25DaGFyc2V0cygpOw0KKyAgICBI
YXNoTWFwPFN0cmluZywgQ2hhcnNldEluZm8+Ojpjb25zdF9pdGVyYXRvciBpID0gY2hhcnNldHMu
ZmluZChuYW1lKTsNCisgICAgcmV0dXJuIGkgPT0gY2hhcnNldHMuZW5kKCkgPyBDUF9BQ1AgOiBp
LT5zZWNvbmQubV9jb2RlUGFnZTsNCit9DQorDQorc3RhdGljIFBhc3NPd25QdHI8VGV4dENvZGVj
PiBuZXdUZXh0Q29kZWNXaW5DRShjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nLCBjb25zdCB2
b2lkKikNCit7DQorICAgIHJldHVybiBuZXcgVGV4dENvZGVjV2luQ0UoZW5jb2RpbmcpOw0KK30N
CisNCitUZXh0Q29kZWNXaW5DRTo6VGV4dENvZGVjV2luQ0UoY29uc3QgVGV4dEVuY29kaW5nJiBl
bmNvZGluZykNCisgICAgOiBtX2VuY29kaW5nKGVuY29kaW5nKQ0KK3sNCit9DQorDQorVGV4dENv
ZGVjV2luQ0U6On5UZXh0Q29kZWNXaW5DRSgpDQorew0KK30NCisNCit2b2lkIFRleHRDb2RlY1dp
bkNFOjpyZWdpc3RlckJhc2VFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhciByZWdp
c3RyYXIpDQorew0KKyAgICByZWdpc3RyYXIoIlVURi04IiwgIlVURi04Iik7DQorfQ0KKw0KK3Zv
aWQgVGV4dENvZGVjV2luQ0U6OnJlZ2lzdGVyQmFzZUNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIg
cmVnaXN0cmFyKQ0KK3sNCisgICAgcmVnaXN0cmFyKCJVVEYtOCIsIG5ld1RleHRDb2RlY1dpbkNF
LCAwKTsNCit9DQorDQordm9pZCBUZXh0Q29kZWNXaW5DRTo6cmVnaXN0ZXJFeHRlbmRlZEVuY29k
aW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyIHJlZ2lzdHJhcikNCit7DQorICAgIGxhbmd1
YWdlTWFuYWdlcigpOw0KKyAgICBmb3IgKENoYXJzZXRTZXQ6Oml0ZXJhdG9yIGkgPSBzdXBwb3J0
ZWRDaGFyc2V0cygpLmJlZ2luKCk7IGkgIT0gc3VwcG9ydGVkQ2hhcnNldHMoKS5lbmQoKTsgKytp
KSB7DQorICAgICAgICBIYXNoTWFwPFN0cmluZywgQ2hhcnNldEluZm8+OjppdGVyYXRvciBqID0g
a25vd25DaGFyc2V0cygpLmZpbmQoKmkpOw0KKyAgICAgICAgaWYgKGogIT0ga25vd25DaGFyc2V0
cygpLmVuZCgpKSB7DQorICAgICAgICAgICAgcmVnaXN0cmFyKGotPnNlY29uZC5tX25hbWUuZGF0
YSgpLCBqLT5zZWNvbmQubV9uYW1lLmRhdGEoKSk7DQorICAgICAgICAgICAgZm9yIChWZWN0b3I8
Q1N0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGFsaWFzID0gai0+c2Vjb25kLm1fYWxpYXNlcy5iZWdp
bigpOyBhbGlhcyAhPSBqLT5zZWNvbmQubV9hbGlhc2VzLmVuZCgpOyArK2FsaWFzKQ0KKyAgICAg
ICAgICAgICAgICByZWdpc3RyYXIoYWxpYXMtPmRhdGEoKSwgai0+c2Vjb25kLm1fbmFtZS5kYXRh
KCkpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgVGV4dENvZGVjV2luQ0U6OnJl
Z2lzdGVyRXh0ZW5kZWRDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyIHJlZ2lzdHJhcikNCit7DQor
ICAgIGxhbmd1YWdlTWFuYWdlcigpOw0KKyAgICBmb3IgKENoYXJzZXRTZXQ6Oml0ZXJhdG9yIGkg
PSBzdXBwb3J0ZWRDaGFyc2V0cygpLmJlZ2luKCk7IGkgIT0gc3VwcG9ydGVkQ2hhcnNldHMoKS5l
bmQoKTsgKytpKSB7DQorICAgICAgICBIYXNoTWFwPFN0cmluZywgQ2hhcnNldEluZm8+OjppdGVy
YXRvciBqID0ga25vd25DaGFyc2V0cygpLmZpbmQoKmkpOw0KKyAgICAgICAgaWYgKGogIT0ga25v
d25DaGFyc2V0cygpLmVuZCgpKQ0KKyAgICAgICAgICAgIHJlZ2lzdHJhcihqLT5zZWNvbmQubV9u
YW1lLmRhdGEoKSwgbmV3VGV4dENvZGVjV2luQ0UsIDApOw0KKyAgICB9DQorfQ0KKw0KK3N0YXRp
YyBEV09SRCBnZXRDb2RlUGFnZUZsYWdzKFVJTlQgY29kZVBhZ2UpDQorew0KKyAgICBpZiAoY29k
ZVBhZ2UgPT0gQ1BfVVRGOCkNCisgICAgICAgIHJldHVybiBNQl9FUlJfSU5WQUxJRF9DSEFSUzsN
CisNCisgICAgaWYgKGNvZGVQYWdlID09IDQyKSAvLyBTeW1ib2wNCisgICAgICAgIHJldHVybiAw
Ow0KKw0KKyAgICAvLyBNaWNyb3NvZnQgc2F5cyB0aGUgZmxhZyBtdXN0IGJlIDAgZm9yIHRoZSBm
b2xsb3dpbmcgY29kZSBwYWdlcw0KKyAgICBpZiAoY29kZVBhZ2UgPiA1MDAwMCkgew0KKyAgICAg
ICAgaWYgKChjb2RlUGFnZSA+PSA1MDIyMCAmJiBjb2RlUGFnZSA8PSA1MDIyMikNCisgICAgICAg
ICAgICB8fCBjb2RlUGFnZSA9PSA1MDIyNQ0KKyAgICAgICAgICAgIHx8IGNvZGVQYWdlID09IDUw
MjI3DQorICAgICAgICAgICAgfHwgY29kZVBhZ2UgPT0gNTAyMjkNCisgICAgICAgICAgICB8fCBj
b2RlUGFnZSA9PSA1MjkzNg0KKyAgICAgICAgICAgIHx8IGNvZGVQYWdlID09IDU0OTM2DQorICAg
ICAgICAgICAgfHwgKGNvZGVQYWdlID49IDU3MDAyICYmIGNvZGVQYWdlIDw9IDU3MDAxKQ0KKyAg
ICAgICAgICAgIHx8IGNvZGVQYWdlID09IDY1MDAwIC8vIFVURi03DQorICAgICAgICAgICAgKQ0K
KyAgICAgICAgICAgIHJldHVybiAwOw0KKyAgICB9DQorDQorICAgIHJldHVybiBNQl9QUkVDT01Q
T1NFRCB8IE1CX0VSUl9JTlZBTElEX0NIQVJTOw0KK30NCisNCitzdGF0aWMgaW5saW5lIGNvbnN0
IGNoYXIqIGZpbmRGaXJzdE5vbkFzY2lpQ2hhcmFjdGVyKGNvbnN0IGNoYXIqIGJ5dGVzLCBzaXpl
X3QgbGVuZ3RoKQ0KK3sNCisgICAgZm9yIChjb25zdCBjaGFyKiBieXRlc0VuZCA9IGJ5dGVzICsg
bGVuZ3RoOyBieXRlcyA8IGJ5dGVzRW5kOyArK2J5dGVzKSB7DQorICAgICAgICBpZiAoKmJ5dGVz
ICYgMHg4MCkNCisgICAgICAgICAgICBicmVhazsNCisgICAgfQ0KKyAgICByZXR1cm4gYnl0ZXM7
DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGRlY29kZShWZWN0b3I8VUNoYXIsIDgxOTI+JiByZXN1bHQs
IGNvbnN0IGNoYXIqIGVuY29kaW5nTmFtZSwgY29uc3QgY2hhciogYnl0ZXMsIHNpemVfdCBsZW5n
dGgsIHNpemVfdCogbGVmdCwgYm9vbCBjYW5CZUZpcnN0VGltZSwgYm9vbCYgc2F3SW52YWxpZENo
YXIpDQorew0KKyAgICAqbGVmdCA9IGxlbmd0aDsNCisgICAgaWYgKCFieXRlcyB8fCAhbGVuZ3Ro
KQ0KKyAgICAgICAgcmV0dXJuOw0KKw0KKyAgICBVSU5UIGNvZGVQYWdlOw0KKw0KKyAgICBIYXNo
TWFwPFN0cmluZywgQ2hhcnNldEluZm8+OjppdGVyYXRvciBpID0ga25vd25DaGFyc2V0cygpLmZp
bmQoZW5jb2RpbmdOYW1lKTsNCisgICAgaWYgKGkgPT0ga25vd25DaGFyc2V0cygpLmVuZCgpKSB7
DQorICAgICAgICBpZiAoIXN0cmNtcChlbmNvZGluZ05hbWUsICJVVEYtOCIpKQ0KKyAgICAgICAg
ICAgIGNvZGVQYWdlID0gQ1BfVVRGODsNCisgICAgICAgIGVsc2UNCisgICAgICAgICAgICBjb2Rl
UGFnZSA9IENQX0FDUDsNCisgICAgfSBlbHNlIHsNCisgICAgICAgIGNvZGVQYWdlID0gaS0+c2Vj
b25kLm1fY29kZVBhZ2U7DQorICAgICAgICBpZiAoaS0+c2Vjb25kLm1fdXNlc05hdGl2ZUNvZGVj
KSB7DQorICAgICAgICAgICAgdHlwZWRlZiBpbnQgKCpGdW5jRXVjTWJUb1djKSh3Y2hhcl90ICpw
d2MsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnMsIGludCBuKTsNCisgICAgICAgICAgICBGdW5jRXVj
TWJUb1djIGVuY01iVG9XYyA9IDA7DQorICAgICAgICAgICAgaWYgKCFzdHJjbXAoZW5jb2RpbmdO
YW1lLCAiRVVDLUpQIikpDQorICAgICAgICAgICAgICAgIGVuY01iVG9XYyA9IFRleHRDb2RlY3ND
RTo6ZXVjX2pwX21idG93YzsNCisgICAgICAgICAgICBlbHNlIGlmICghc3RyY21wKGVuY29kaW5n
TmFtZSwgIkNQODc0IikpDQorICAgICAgICAgICAgICAgIGVuY01iVG9XYyA9IFRleHRDb2RlY3ND
RTo6Y3A4NzRfbWJ0b3djOw0KKyAgICAgICAgICAgIGVsc2UgaWYgKCFzdHJjbXAoZW5jb2RpbmdO
YW1lLCAiVElTNjIwIikpDQorICAgICAgICAgICAgICAgIGVuY01iVG9XYyA9IFRleHRDb2RlY3ND
RTo6dGlzNjIwX21idG93YzsNCisgICAgICAgICAgICBlbHNlIGlmICghc3RyY21wKGVuY29kaW5n
TmFtZSwgIk1BQ1RIQUkiKSkNCisgICAgICAgICAgICAgICAgZW5jTWJUb1djID0gVGV4dENvZGVj
c0NFOjptYWNfdGhhaV9tYnRvd2M7DQorDQorICAgICAgICAgICAgaWYgKGVuY01iVG9XYykgew0K
KyAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBzcmNTdGFydCA9IGJ5dGVzOw0KKyAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBzcmNFbmQgPSBieXRlcyArIGxlbmd0aDsN
CisgICAgICAgICAgICAgICAgaW50IGxhc3RTaXplID0gcmVzdWx0LnNpemUoKTsNCisgICAgICAg
ICAgICAgICAgcmVzdWx0LnJlc2l6ZShsYXN0U2l6ZSArIGxlbmd0aCk7DQorICAgICAgICAgICAg
ICAgIGZvciAoOzspIHsNCisgICAgICAgICAgICAgICAgICAgIFVDaGFyKiBkc3QgPSByZXN1bHQu
ZGF0YSgpICsgbGFzdFNpemU7DQorICAgICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciogY29u
c3QgZHN0RW5kID0gcmVzdWx0LmRhdGEoKSArIHJlc3VsdC5zaXplKCk7DQorICAgICAgICAgICAg
ICAgICAgICBmb3IgKDsgZHN0IDwgZHN0RW5kICYmIGJ5dGVzIDwgc3JjRW5kOyArK2RzdCkgew0K
KyAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1iZXJFbmNvZGVkID0gZW5jTWJUb1djKGRz
dCwgKGNvbnN0IHVuc2lnbmVkIGNoYXIqKWJ5dGVzLCBzcmNFbmQgLSBieXRlcyk7DQorICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKG51bWJlckVuY29kZWQgPj0gMCkNCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnl0ZXMgKz0gbnVtYmVyRW5jb2RlZDsNCisgICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJlckVu
Y29kZWQgPT0gUkVUX0lMU0VRKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F3
SW52YWxpZENoYXIgPSB0cnVlOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsN
CisgICAgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICB9DQorICAg
ICAgICAgICAgICAgICAgICBpZiAoYnl0ZXMgPT0gc3JjRW5kIHx8IGRzdCAhPSBkc3RFbmQpIHsN
CisgICAgICAgICAgICAgICAgICAgICAgICAqbGVmdCA9IHNyY0VuZCAtIGJ5dGVzOw0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdC5yZXNpemUoZHN0IC0gcmVzdWx0LmRhdGEoKSk7DQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0K
KyAgICAgICAgICAgICAgICAgICAgbGFzdFNpemUgPSByZXN1bHQuc2l6ZSgpOw0KKyAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0LnJlc2l6ZShyZXN1bHQuc2l6ZSgpICsgMjU2KTsNCisgICAgICAg
ICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgICAgICpsZWZ0
ID0gMDsNCisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChieXRlcywgbGVuZ3RoKTsNCisg
ICAgICAgICAgICAgICAgcmV0dXJuOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAg
fQ0KKw0KKyAgICBEV09SRCBmbGFncyA9IGdldENvZGVQYWdlRmxhZ3MoY29kZVBhZ2UpOw0KKw0K
KyAgICBpZiAoY29kZVBhZ2UgPT0gQ1BfVVRGOCkgew0KKyAgICAgICAgaWYgKGNhbkJlRmlyc3RU
aW1lKSB7DQorICAgICAgICAgICAgLy8gSGFuZGxlIEJPTS4NCisgICAgICAgICAgICBpZiAobGVu
Z3RoID4gMykgew0KKyAgICAgICAgICAgICAgICBpZiAoYnl0ZXNbMF0gPT0gKGNoYXIpMHhFRiAm
JiBieXRlc1sxXSA9PSAoY2hhcikweEJCICYmIGJ5dGVzWzJdID09IChjaGFyKTB4QkYpIHsNCisg
ICAgICAgICAgICAgICAgICAgIC8vIEJPTSBmb3VuZCENCisgICAgICAgICAgICAgICAgICAgIGxl
bmd0aCAtPSAzOw0KKyAgICAgICAgICAgICAgICAgICAgYnl0ZXMgKz0gMzsNCisgICAgICAgICAg
ICAgICAgICAgICpsZWZ0ID0gbGVuZ3RoOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAg
ICAgfSBlbHNlIGlmIChieXRlc1swXSA9PSAweEVGICYmIChsZW5ndGggPCAyIHx8IGJ5dGVzWzFd
ID09IChjaGFyKTB4QkIpICYmIChsZW5ndGggPCAzIHx8IGJ5dGVzWzJdID09IChjaGFyKTB4QkYp
KSB7DQorICAgICAgICAgICAgICAgIGlmIChsZW5ndGggPT0gMykNCisgICAgICAgICAgICAgICAg
ICAgICpsZWZ0ID0gMDsNCisgICAgICAgICAgICAgICAgcmV0dXJuOw0KKyAgICAgICAgICAgIH0N
CisgICAgICAgIH0NCisNCisgICAgICAgIC8vIFByb2Nlc3MgQVNDSUkgY2hhcmFjdGVycyBhdCBi
ZWdpbm5pbmcuDQorICAgICAgICBjb25zdCBjaGFyKiBmaXJzdE5vbkFzY2lpQ2hhciA9IGZpbmRG
aXJzdE5vbkFzY2lpQ2hhcmFjdGVyKGJ5dGVzLCBsZW5ndGgpOw0KKyAgICAgICAgaW50IG51bUFz
Y2lpQ2hhcmFjdGVycyA9IGZpcnN0Tm9uQXNjaWlDaGFyIC0gYnl0ZXM7DQorICAgICAgICBpZiAo
bnVtQXNjaWlDaGFyYWN0ZXJzKSB7DQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChieXRlcywg
bnVtQXNjaWlDaGFyYWN0ZXJzKTsNCisgICAgICAgICAgICBsZW5ndGggLT0gbnVtQXNjaWlDaGFy
YWN0ZXJzOw0KKyAgICAgICAgICAgIGlmICghbGVuZ3RoKSB7DQorICAgICAgICAgICAgICAgICps
ZWZ0ID0gMDsNCisgICAgICAgICAgICAgICAgcmV0dXJuOw0KKyAgICAgICAgICAgIH0NCisgICAg
ICAgICAgICBieXRlcyA9IGZpcnN0Tm9uQXNjaWlDaGFyOw0KKyAgICAgICAgfQ0KKw0KKyAgICAg
ICAgaW50IG9sZFNpemUgPSByZXN1bHQuc2l6ZSgpOw0KKyAgICAgICAgcmVzdWx0LnJlc2l6ZShv
bGRTaXplICsgbGVuZ3RoKTsNCisgICAgICAgIFVDaGFyKiByZXN1bHRTdGFydCA9IHJlc3VsdC5k
YXRhKCkgKyBvbGRTaXplOw0KKyAgICAgICAgY29uc3QgY2hhciogc291cmNlU3RhcnQgPSBieXRl
czsNCisgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IHNvdXJjZUVuZCA9IGJ5dGVzICsgbGVuZ3Ro
Ow0KKyAgICAgICAgZm9yICg7Oykgew0KKyAgICAgICAgICAgIHVzaW5nIG5hbWVzcGFjZSBXVEY6
OlVuaWNvZGU7DQorICAgICAgICAgICAgQ29udmVyc2lvblJlc3VsdCBjb252UmVzID0gY29udmVy
dFVURjhUb1VURjE2KCZzb3VyY2VTdGFydA0KKyAgICAgICAgICAgICAgICAsIHNvdXJjZUVuZA0K
KyAgICAgICAgICAgICAgICAsICZyZXN1bHRTdGFydA0KKyAgICAgICAgICAgICAgICAsIHJlc3Vs
dC5kYXRhKCkgKyByZXN1bHQuc2l6ZSgpDQorICAgICAgICAgICAgICAgICwgdHJ1ZSk7DQorDQor
ICAgICAgICAgICAgLy8gRklYTUU6IGlzIGl0IHBvc3NpYmxlPw0KKyAgICAgICAgICAgIGlmIChj
b252UmVzID09IHRhcmdldEV4aGF1c3RlZCAmJiBzb3VyY2VTdGFydCA8IHNvdXJjZUVuZCkgew0K
KyAgICAgICAgICAgICAgICBvbGRTaXplID0gcmVzdWx0LnNpemUoKTsNCisgICAgICAgICAgICAg
ICAgcmVzdWx0LnJlc2l6ZShvbGRTaXplICsgMjU2KTsNCisgICAgICAgICAgICAgICAgcmVzdWx0
U3RhcnQgPSByZXN1bHQuZGF0YSgpICsgb2xkU2l6ZTsNCisgICAgICAgICAgICAgICAgY29udGlu
dWU7DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIGlmIChjb252UmVzICE9IGNvbnZl
cnNpb25PSykNCisgICAgICAgICAgICAgICAgc2F3SW52YWxpZENoYXIgPSB0cnVlOw0KKw0KKyAg
ICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgKmxlZnQgPSBzb3VyY2VF
bmQgLSBzb3VyY2VTdGFydDsNCisgICAgICAgIHJlc3VsdC5yZXNpemUocmVzdWx0U3RhcnQgLSBy
ZXN1bHQuZGF0YSgpKTsNCisgICAgfSBlbHNlIHsNCisgICAgICAgIGludCB0ZXN0TGVuZ3RoID0g
bGVuZ3RoOw0KKyAgICAgICAgaW50IHVudGVzdGVkTGVuZ3RoID0gbGVuZ3RoOw0KKyAgICAgICAg
Zm9yICg7Oykgew0KKyAgICAgICAgICAgIGludCByZXN1bHRMZW5ndGggPSBNdWx0aUJ5dGVUb1dp
ZGVDaGFyKGNvZGVQYWdlLCBmbGFncywgYnl0ZXMsIHRlc3RMZW5ndGgsIDAsIDApOw0KKw0KKyAg
ICAgICAgICAgIGlmIChyZXN1bHRMZW5ndGggPiAwKSB7DQorICAgICAgICAgICAgICAgIGludCBv
bGRTaXplID0gcmVzdWx0LnNpemUoKTsNCisgICAgICAgICAgICAgICAgcmVzdWx0LnJlc2l6ZShv
bGRTaXplICsgcmVzdWx0TGVuZ3RoKTsNCisNCisgICAgICAgICAgICAgICAgTXVsdGlCeXRlVG9X
aWRlQ2hhcihjb2RlUGFnZSwgZmxhZ3MsIGJ5dGVzLCB0ZXN0TGVuZ3RoLCByZXN1bHQuZGF0YSgp
ICsgb2xkU2l6ZSwgcmVzdWx0TGVuZ3RoKTsNCisNCisgICAgICAgICAgICAgICAgaWYgKHRlc3RM
ZW5ndGggPT0gdW50ZXN0ZWRMZW5ndGgpIHsNCisgICAgICAgICAgICAgICAgICAgICpsZWZ0ID0g
bGVuZ3RoIC0gdGVzdExlbmd0aDsNCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAg
ICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIHVudGVzdGVkTGVuZ3RoIC09IHRlc3RMZW5n
dGg7DQorICAgICAgICAgICAgICAgIGxlbmd0aCAtPSB0ZXN0TGVuZ3RoOw0KKyAgICAgICAgICAg
ICAgICBieXRlcyArPSB0ZXN0TGVuZ3RoOw0KKyAgICAgICAgICAgIH0gZWxzZSB7DQorICAgICAg
ICAgICAgICAgIHVudGVzdGVkTGVuZ3RoID0gdGVzdExlbmd0aCAtIDE7DQorICAgICAgICAgICAg
ICAgIGlmICghdW50ZXN0ZWRMZW5ndGgpIHsNCisgICAgICAgICAgICAgICAgICAgICpsZWZ0ID0g
bGVuZ3RoOw0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICAgIH0N
CisgICAgICAgICAgICB9DQorICAgICAgICAgICAgdGVzdExlbmd0aCA9ICh1bnRlc3RlZExlbmd0
aCArIDEpIC8gMjsNCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCitTdHJpbmcgVGV4dENvZGVj
V2luQ0U6OmRlY29kZShjb25zdCBjaGFyKiBieXRlcywgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVz
aCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3IpDQorew0KKyAgICBpZiAoIW1fZGVj
b2RlQnVmZmVyLmlzRW1wdHkoKSkgew0KKyAgICAgICAgbV9kZWNvZGVCdWZmZXIuYXBwZW5kKGJ5
dGVzLCBsZW5ndGgpOw0KKyAgICAgICAgYnl0ZXMgPSBtX2RlY29kZUJ1ZmZlci5kYXRhKCk7DQor
ICAgICAgICBsZW5ndGggPSBtX2RlY29kZUJ1ZmZlci5zaXplKCk7DQorICAgIH0NCisNCisgICAg
c2l6ZV90IGxlZnQ7DQorICAgIFZlY3RvcjxVQ2hhciwgODE5Mj4gcmVzdWx0Ow0KKyAgICBmb3Ig
KDs7KSB7DQorICAgICAgICBib29sIHNhd0ludmFsaWRDaGFyID0gZmFsc2U7DQorICAgICAgICBX
ZWJDb3JlOjpkZWNvZGUocmVzdWx0LCBtX2VuY29kaW5nLm5hbWUoKSwgYnl0ZXMsIGxlbmd0aCwg
JmxlZnQsIG1fZGVjb2RlQnVmZmVyLmlzRW1wdHkoKSwgc2F3SW52YWxpZENoYXIpOw0KKyAgICAg
ICAgaWYgKCFsZWZ0KQ0KKyAgICAgICAgICAgIGJyZWFrOw0KKw0KKyAgICAgICAgaWYgKCFzYXdJ
bnZhbGlkQ2hhciAmJiAhZmx1c2ggJiYgbGVmdCA8IDE2KQ0KKyAgICAgICAgICAgIGJyZWFrOw0K
Kw0KKyAgICAgICAgcmVzdWx0LmFwcGVuZChMJz8nKTsNCisgICAgICAgIHNhd0Vycm9yID0gdHJ1
ZTsNCisgICAgICAgIGlmIChzdG9wT25FcnJvcikNCisgICAgICAgICAgICByZXR1cm4gU3RyaW5n
KHJlc3VsdC5kYXRhKCksIHJlc3VsdC5zaXplKCkpOw0KKw0KKw0KKyAgICAgICAgaWYgKGxlZnQg
PT0gMSkNCisgICAgICAgICAgICBicmVhazsNCisNCisgICAgICAgIGJ5dGVzICs9IGxlbmd0aCAt
IGxlZnQgKyAxOw0KKyAgICAgICAgbGVuZ3RoID0gbGVmdCAtIDE7DQorICAgIH0NCisgICAgaWYg
KGxlZnQgJiYgIWZsdXNoKSB7DQorICAgICAgICBpZiAobV9kZWNvZGVCdWZmZXIuaXNFbXB0eSgp
KQ0KKyAgICAgICAgICAgIG1fZGVjb2RlQnVmZmVyLmFwcGVuZChieXRlcyArIGxlbmd0aCAtIGxl
ZnQsIGxlZnQpOw0KKyAgICAgICAgZWxzZSB7DQorICAgICAgICAgICAgbWVtbW92ZShtX2RlY29k
ZUJ1ZmZlci5kYXRhKCksIGJ5dGVzICsgbGVuZ3RoIC0gbGVmdCwgbGVmdCk7DQorICAgICAgICAg
ICAgbV9kZWNvZGVCdWZmZXIucmVzaXplKGxlZnQpOw0KKyAgICAgICAgfQ0KKyAgICB9IGVsc2UN
CisgICAgICAgIG1fZGVjb2RlQnVmZmVyLmNsZWFyKCk7DQorICAgIHJldHVybiBTdHJpbmcocmVz
dWx0LmRhdGEoKSwgcmVzdWx0LnNpemUoKSk7DQorfQ0KKw0KK0NTdHJpbmcgVGV4dENvZGVjV2lu
Q0U6OmVuY29kZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVW5lbmNv
ZGFibGVIYW5kbGluZykNCit7DQorICAgIGlmICghY2hhcmFjdGVycyB8fCAhbGVuZ3RoKQ0KKyAg
ICAgICAgcmV0dXJuIENTdHJpbmcoKTsNCisNCisgICAgVUlOVCBjb2RlUGFnZSA9IGdldENvZGVQ
YWdlKG1fZW5jb2RpbmcubmFtZSgpKTsNCisgICAgRFdPUkQgZmxhZ3MgPSBjb2RlUGFnZSA9PSBD
UF9VVEY4ID8gMCA6IFdDX0NPTVBPU0lURUNIRUNLOw0KKw0KKyAgICBpbnQgcmVzdWx0TGVuZ3Ro
ID0gV2lkZUNoYXJUb011bHRpQnl0ZShjb2RlUGFnZSwgZmxhZ3MsIGNoYXJhY3RlcnMsIGxlbmd0
aCwgMCwgMCwgMCwgMCk7DQorDQorICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGltcGxlbWVudCBV
bmVuY29kYWJsZUhhbmRsaW5nOiBRdWVzdGlvbk1hcmtzRm9yVW5lbmNvZGFibGVzLCBFbnRpdGll
c0ZvclVuZW5jb2RhYmxlcywgYW5kIFVSTEVuY29kZWRFbnRpdGllc0ZvclVuZW5jb2RhYmxlcy4N
CisNCisgICAgaWYgKHJlc3VsdExlbmd0aCA8PSAwKQ0KKyAgICAgICAgcmV0dXJuICI/IjsNCisN
CisgICAgVmVjdG9yPGNoYXI+IHJlc3VsdChyZXN1bHRMZW5ndGgpOw0KKw0KKyAgICBXaWRlQ2hh
clRvTXVsdGlCeXRlKGNvZGVQYWdlLCBmbGFncywgY2hhcmFjdGVycywgbGVuZ3RoLCByZXN1bHQu
ZGF0YSgpLCByZXN1bHRMZW5ndGgsIDAsIDApOw0KKw0KKyAgICByZXR1cm4gQ1N0cmluZyhyZXN1
bHQuZGF0YSgpLCByZXN1bHQuc2l6ZSgpKTsNCit9DQorDQordm9pZCBUZXh0Q29kZWNXaW5DRTo6
ZW51bWVyYXRlU3VwcG9ydGVkRW5jb2RpbmdzKEVuY29kaW5nUmVjZWl2ZXImIHJlY2VpdmVyKQ0K
K3sNCisgICAgbGFuZ3VhZ2VNYW5hZ2VyKCk7DQorICAgIGZvciAoQ2hhcnNldFNldDo6aXRlcmF0
b3IgaSA9IHN1cHBvcnRlZENoYXJzZXRzKCkuYmVnaW4oKTsgaSAhPSBzdXBwb3J0ZWRDaGFyc2V0
cygpLmVuZCgpOyArK2kpIHsNCisgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5mbz46
Oml0ZXJhdG9yIGogPSBrbm93bkNoYXJzZXRzKCkuZmluZCgqaSk7DQorICAgICAgICBpZiAoaiAh
PSBrbm93bkNoYXJzZXRzKCkuZW5kKCkgJiYgIXJlY2VpdmVyLnJlY2VpdmUoai0+c2Vjb25kLm1f
bmFtZS5kYXRhKCksIGotPnNlY29uZC5tX2ZyaWVuZGx5TmFtZS5jaGFyYWN0ZXJzV2l0aE51bGxU
ZXJtaW5hdGlvbigpLCBqLT5zZWNvbmQubV9jb2RlUGFnZSkpDQorICAgICAgICAgICAgYnJlYWs7
DQorICAgIH0NCit9DQorDQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQ0KSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vdGV4dC93aW5jZS9UZXh0Q29kZWNXaW5DRS5oDQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L3dpbmNlL1RleHRDb2RlY1dpbkNFLmgJKHJldmlzaW9uIDApDQor
KysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3dpbmNlL1RleHRDb2RlY1dpbkNFLmgJKHJldmlzaW9u
IDApDQpAQCAtMCwwICsxLDcxIEBADQorLyoNCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYs
IDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqIENvcHlyaWdodCAoQykg
MjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEBueXBvcC5jb20+DQorICogQ29weXJpZ2h0IChD
KSAyMDA3LTIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuDQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMNCisgKiBhcmUgbWV0Og0KKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0DQorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQ0KKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorICoNCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZDQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUNCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVINCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IN
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwNCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sDQorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SDQorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQ0KKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQ0KKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIA0KKyAq
Lw0KKw0KKyNpZm5kZWYgVGV4dENvZGVjV2luQ0VfaA0KKyNkZWZpbmUgVGV4dENvZGVjV2luQ0Vf
aA0KKw0KKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIg0KKyNpbmNsdWRlICJUZXh0Q29kZWMu
aCINCisjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiDQorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4N
CisNCituYW1lc3BhY2UgV2ViQ29yZSB7DQorDQorY2xhc3MgVGV4dENvZGVjV2luQ0UgOiBwdWJs
aWMgVGV4dENvZGVjIHsNCitwdWJsaWM6DQorICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQmFzZUVu
Y29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyKTsNCisgICAgc3RhdGljIHZvaWQgcmVn
aXN0ZXJCYXNlQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhcik7DQorDQorICAgIHN0YXRpYyB2b2lk
IHJlZ2lzdGVyRXh0ZW5kZWRFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhcik7DQor
ICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyRXh0ZW5kZWRDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFy
KTsNCisNCisgICAgVGV4dENvZGVjV2luQ0UoY29uc3QgVGV4dEVuY29kaW5nJik7DQorICAgIHZp
cnR1YWwgflRleHRDb2RlY1dpbkNFKCk7DQorDQorICAgIHZpcnR1YWwgU3RyaW5nIGRlY29kZShj
b25zdCBjaGFyKiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvciwg
Ym9vbCYgc2F3RXJyb3IpOw0KKyAgICB2aXJ0dWFsIENTdHJpbmcgZW5jb2RlKGNvbnN0IFVDaGFy
Kiwgc2l6ZV90IGxlbmd0aCwgVW5lbmNvZGFibGVIYW5kbGluZyk7DQorDQorICAgIHN0cnVjdCBF
bmNvZGluZ0luZm8gew0KKyAgICAgICAgU3RyaW5nIG1fZW5jb2Rpbmc7DQorICAgICAgICBTdHJp
bmcgbV9mcmllbmRseU5hbWU7DQorICAgIH07DQorDQorICAgIHN0cnVjdCBFbmNvZGluZ1JlY2Vp
dmVyIHsNCisgICAgICAgIC8vIFJldHVybiBmYWxzZSB0byBzdG9wIGVudW1lcmF0aW5nLg0KKyAg
ICAgICAgdmlydHVhbCBib29sIHJlY2VpdmUoY29uc3QgY2hhciogZW5jb2RpbmcsIGNvbnN0IHdj
aGFyX3QqIGZyaWVuZGx5TmFtZSwgdW5zaWduZWQgaW50IGNvZGVQYWdlKSA9IDA7DQorICAgIH07
DQorDQorICAgIHN0YXRpYyB2b2lkIGVudW1lcmF0ZVN1cHBvcnRlZEVuY29kaW5ncyhFbmNvZGlu
Z1JlY2VpdmVyJiByZWNlaXZlcik7DQorDQorcHJpdmF0ZToNCisgICAgVGV4dEVuY29kaW5nIG1f
ZW5jb2Rpbmc7DQorICAgIFZlY3RvcjxjaGFyPiBtX2RlY29kZUJ1ZmZlcjsNCit9Ow0KKw0KK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUNCisNCisjZW5kaWYgLy8gVGV4dENvZGVjV2luQ0VfaA0K
</data>

          </attachment>
      

    </bug>

</bugzilla>