<?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>49414</bug_id>
          
          <creation_ts>2010-11-11 15:59:36 -0800</creation_ts>
          <short_desc>Implement ECMAScript I18N APIs (proposed)</short_desc>
          <delta_ts>2011-08-19 11:57:34 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://wiki.ecmascript.org/doku.php?id=strawman:i18n_api</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="Jungshik Shin">jshin</reporter>
          <assigned_to name="Nebojša Ćirić">cira</assigned_to>
          <cc>ap</cc>
    
    <cc>arv</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>jorlow</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zmo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>308238</commentid>
    <comment_count>0</comment_count>
    <who name="Jungshik Shin">jshin</who>
    <bug_when>2010-11-11 15:59:36 -0800</bug_when>
    <thetext>We proposed a set of APIs for I18N to the ECMA / TC39 (ECMAscript standard wg). The details of our proposal is at http://wiki.ecmascript.org/doku.php?id=strawman:i18n_api

Our proposal was well-received in that we got a green light to start experimental/pilot implementation. The APIs are not yet finalized and subject to changes per on-going discussion at TC39 (next meeting will be held at Apple on November 16 which will be attended by Google, Microsoft, Adobe, Mozilla and W3C I18N WG representatives). 

In the first round, we&apos;ll start to implement the APIs as a V8 extension because it&apos;s easy for us  to prototype and test. 

BTW, this started as a chromium bug (http://crbug.com/28604 ) .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308261</commentid>
    <comment_count>1</comment_count>
      <attachid>73681</attachid>
    <who name="Nebojša Ćirić">cira</who>
    <bug_when>2010-11-11 16:42:14 -0800</bug_when>
    <thetext>Created attachment 73681
First patch to implement Locale class of the JS i18n API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308263</commentid>
    <comment_count>2</comment_count>
      <attachid>73681</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-11-11 16:43:36 -0800</bug_when>
    <thetext>Comment on attachment 73681
First patch to implement Locale class of the JS i18n API

ECMAScript features should be in the JavaScript engine, not in WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308267</commentid>
    <comment_count>3</comment_count>
    <who name="Nebojša Ćirić">cira</who>
    <bug_when>2010-11-11 16:51:35 -0800</bug_when>
    <thetext>The i18n part is treated as an extension to ECMAScript, and it will have separate standard (so EcmaScript 262 stays unchanged wrt to i18n). This is a library so it makes sense to implement it as a extension not as a core part of the JS engine.

(In reply to comment #2)
&gt; (From update of attachment 73681 [details])
&gt; ECMAScript features should be in the JavaScript engine, not in WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308273</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-11-11 17:00:45 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; The i18n part is treated as an extension to ECMAScript, and it will have separate standard (so EcmaScript 262 stays unchanged wrt to i18n). This is a library so it makes sense to implement it as a extension not as a core part of the JS engine.

In that case, why isn&apos;t this implemented like all the bound APIs, with a C++ implementation and auto generated bindings based on IDL?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308275</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-11-11 17:02:43 -0800</bug_when>
    <thetext>Attachment 73681 did not build on chromium:
Build output: http://queues.webkit.org/results/5666007</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308604</commentid>
    <comment_count>6</comment_count>
    <who name="Nebojša Ćirić">cira</who>
    <bug_when>2010-11-12 09:41:25 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; The i18n part is treated as an extension to ECMAScript, and it will have separate standard (so EcmaScript 262 stays unchanged wrt to i18n). This is a library so it makes sense to implement it as a extension not as a core part of the JS engine.
&gt; 
&gt; In that case, why isn&apos;t this implemented like all the bound APIs, with a C++ implementation and auto generated bindings based on IDL?

Not all of the APIs are implemented through IDL based bindings (see WebCore/bindings/v8/DateExtension.{cpp,h} for example). Darin (fishd) thought that would be a good path for us too.

We actually started with IDL implementation, hit couple problems with it, and asked for help on webkit-dev. Jeremy Orlow (jorlow) pointed out that V8 Extensions my be better/easier way to implement the library.

I&apos;ll let them add comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308663</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-11-12 11:18:27 -0800</bug_when>
    <thetext>&gt; The i18n part is treated as an extension to ECMAScript, and it will have separate standard
&gt; (so EcmaScript 262 stays unchanged wrt to i18n). 

I don&apos;t see how this makes it appropriate to implement i18n in WebCore. Applications can link to JavaScriptCore alone, so anything that&apos;s not specific to DOM bindings should be there.

&gt; http://wiki.ecmascript.org/doku.php?id=strawman:i18n_api

Implementations of &quot;strawman proposals&quot; are generally not permitted in webkit.org trunk per &lt;http://webkit.org/projects/goals.html&gt;. This seems to be at the stage where a private branch would probably be appropriate - please correct me if I&apos;m wrong about the level of existing agreement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308667</commentid>
    <comment_count>8</comment_count>
    <who name="Nebojša Ćirić">cira</who>
    <bug_when>2010-11-12 11:29:15 -0800</bug_when>
    <thetext>&gt; &gt; http://wiki.ecmascript.org/doku.php?id=strawman:i18n_api
&gt; 
&gt; Implementations of &quot;strawman proposals&quot; are generally not permitted in webkit.org trunk per &lt;http://webkit.org/projects/goals.html&gt;. This seems to be at the stage where a private branch would probably be appropriate - please correct me if I&apos;m wrong about the level of existing agreement.

Level of agreement:

Strawman proposal was accepted, and new group was formed - we have support from ECMAScript wg. We are going to have our first meeting next week, where we are going to discuss the API among other things.

API is not agreed upon. Our goal was to have a working prototype that others could use to discuss and comment on (thus the flag and V8 only implementation).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308677</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-11-12 11:57:32 -0800</bug_when>
    <thetext>I proposed adding this as a V8 extension because:

Once standardized, this would be implemented natively by V8 and I presume JSC.  If we implement it using IDL, then it would not be available when V8/JSC are used standalone.

I think it is reasonable to implement proposed APIs behind a run-time flag, and only bring them out from behind the flag once they are stable / accepted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308680</commentid>
    <comment_count>10</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-11-12 11:58:51 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; I proposed adding this as a V8 extension because:
&gt; 
&gt; Once standardized, this would be implemented natively by V8 and I presume JSC.  If we implement it using IDL, then it would not be available when V8/JSC are used standalone.
&gt; 
&gt; I think it is reasonable to implement proposed APIs behind a run-time flag, and only bring them out from behind the flag once they are stable / accepted.

If it&apos;s being implemented in v8, then it shouldn&apos;t be in the webkit tree, if it&apos;s being implemented inside webcore (as it is currently) it should be implemented using the idl bindings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308710</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-11-12 12:34:51 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; I proposed adding this as a V8 extension because:
&gt; &gt; 
&gt; &gt; Once standardized, this would be implemented natively by V8 and I presume JSC.  If we implement it using IDL, then it would not be available when V8/JSC are used standalone.
&gt; &gt; 
&gt; &gt; I think it is reasonable to implement proposed APIs behind a run-time flag, and only bring them out from behind the flag once they are stable / accepted.
&gt; 
&gt; If it&apos;s being implemented in v8, then it shouldn&apos;t be in the webkit tree, if it&apos;s being implemented inside webcore (as it is currently) it should be implemented using the idl bindings.

Are you saying that standalone JSC would never have an implementation of these APIs?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308717</commentid>
    <comment_count>12</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-11-12 12:58:51 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; I proposed adding this as a V8 extension because:
&gt; &gt; &gt; 
&gt; &gt; &gt; Once standardized, this would be implemented natively by V8 and I presume JSC.  If we implement it using IDL, then it would not be available when V8/JSC are used standalone.
&gt; &gt; &gt; 
&gt; &gt; &gt; I think it is reasonable to implement proposed APIs behind a run-time flag, and only bring them out from behind the flag once they are stable / accepted.
&gt; &gt; 
&gt; &gt; If it&apos;s being implemented in v8, then it shouldn&apos;t be in the webkit tree, if it&apos;s being implemented inside webcore (as it is currently) it should be implemented using the idl bindings.
&gt; 
&gt; Are you saying that standalone JSC would never have an implementation of these APIs?

No I&apos;m saying if the experimental implementation isn&apos;t going to be implemented with the IDL bindings logic (so unnecessarily tying it to v8 alone) there&apos;s no reason for the experimental impl to be in the webkit tree.  The final implementations are going to be in their respective engines (assuming it gets standardised, etc, etc) which means a webcore level impl that only targets a single engine (either engine) seems to be a poor design decision.  A much better approach would be to simply implement it in the engine, then make spec changes later as needed.  This current approach has no benefit that i can see.

If this approach were made using the idl binding mechanism then two engines would be able to expose the api to users which would arguably be valuable in the short term, even though it would need to be reimplemented at the ES engine level later.

Making a single engine only implementation at the webcore level does not give you that advantage, but still carries with it the cost of needing to repeat the implementation.

I think the two approaches that make sense are:
* Implement it in WebCore using the IDL binding mechanism so that users of two different browsers can experiment with the API, and take the cost of reimplementing it in the ES engines later if so desired.
* Implement it in the engine (in this case V8) in the first place.  This loses nothing over what is currently being proposed, but means we&apos;re not littering webcore with functionality for a single engine, and not going to have to remove and reimplement it at a later date.

I also have a concern that this initial implementation could just be left in webkit as it would &quot;just work&quot; for the purpose of the browser, so not benefiting anyone simply using the ES engine alone, but also not being available to all webkit implementations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308718</commentid>
    <comment_count>13</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-11-12 12:58:59 -0800</bug_when>
    <thetext>Ughhh.  I tried to post this earlier right after Sam&apos;s comment, but apparently the internet failed and it never posted.  I still think it&apos;s 100% relevant.

(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; The i18n part is treated as an extension to ECMAScript, and it will have separate standard (so EcmaScript 262 stays unchanged wrt to i18n). This is a library so it makes sense to implement it as a extension not as a core part of the JS engine.
&gt; 
&gt; In that case, why isn&apos;t this implemented like all the bound APIs, with a C++ implementation and auto generated bindings based on IDL?

I think the 3 possible options for implementing this are:
1) in WebCore via IDL files and normal binding methods
2) in V8/JSC directly
3) in Chromium with v8 extensions

This patch seems to be v8 extensions + WebCore which probably doesn&apos;t make sense.

As for what the proper approach is, I think that Nebojša Ćirić has now been told that each one of these is definitely the way it should be done.  Does everyone on this bug agree with Sam (and thus option #1 is the correct way to do it)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308744</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-11-12 13:39:04 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; Ughhh.  I tried to post this earlier right after Sam&apos;s comment, but apparently the internet failed and it never posted.  I still think it&apos;s 100% relevant.
&gt; 
&gt; (In reply to comment #4)
&gt; &gt; (In reply to comment #3)
&gt; &gt; &gt; The i18n part is treated as an extension to ECMAScript, and it will have separate standard (so EcmaScript 262 stays unchanged wrt to i18n). This is a library so it makes sense to implement it as a extension not as a core part of the JS engine.
&gt; &gt; 
&gt; &gt; In that case, why isn&apos;t this implemented like all the bound APIs, with a C++ implementation and auto generated bindings based on IDL?
&gt; 
&gt; I think the 3 possible options for implementing this are:
&gt; 1) in WebCore via IDL files and normal binding methods
&gt; 2) in V8/JSC directly
&gt; 3) in Chromium with v8 extensions
&gt; 
&gt; This patch seems to be v8 extensions + WebCore which probably doesn&apos;t make sense.
&gt; 
&gt; As for what the proper approach is, I think that Nebojša Ćirić has now been told that each one of these is definitely the way it should be done.  Does everyone on this bug agree with Sam (and thus option #1 is the correct way to do it)?

I objected to option #3 when I saw it appear in the Chromium code review tool because that would not allow us to test the feature using layout tests.  Also, web platform features really belong in either WebCore or the ES engine.

I proposed a V8 extension because I presumed that JSC folks would want to do a native JSC implementation instead of bothering with an intermediate IDL implementation.

The reason for a V8 extension over directly modifying V8 is that the V8 team does not like to add features to the V8 engine until the specs are stable.  As such, for V8 we only have two choices: implement using a V8 extension or implement using IDL.  This means having to re-implement later once the V8 team is ready to support the APIs officially, but that is a cost we are willing to accept.

So, it seems like there are only two choices:

1) in WebCore via IDL files and normal binding methods
2) in WebCore as a V8 extension and JSC directly

I assumed that #2 would be preferred by JSC folks since it would allow the APIs to be available to users of standalone JSC and it would also avoid the need to re-implement in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309750</commentid>
    <comment_count>15</comment_count>
    <who name="Nebojša Ćirić">cira</who>
    <bug_when>2010-11-16 08:58:09 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #13)
&gt; &gt; Ughhh.  I tried to post this earlier right after Sam&apos;s comment, but apparently the internet failed and it never posted.  I still think it&apos;s 100% relevant.
&gt; &gt; 
&gt; &gt; (In reply to comment #4)
&gt; &gt; &gt; (In reply to comment #3)
&gt; &gt; &gt; &gt; The i18n part is treated as an extension to ECMAScript, and it will have separate standard (so EcmaScript 262 stays unchanged wrt to i18n). This is a library so it makes sense to implement it as a extension not as a core part of the JS engine.
&gt; &gt; &gt; 
&gt; &gt; &gt; In that case, why isn&apos;t this implemented like all the bound APIs, with a C++ implementation and auto generated bindings based on IDL?
&gt; &gt; 
&gt; &gt; I think the 3 possible options for implementing this are:
&gt; &gt; 1) in WebCore via IDL files and normal binding methods
&gt; &gt; 2) in V8/JSC directly
&gt; &gt; 3) in Chromium with v8 extensions
&gt; &gt; 
&gt; &gt; This patch seems to be v8 extensions + WebCore which probably doesn&apos;t make sense.
&gt; &gt; 
&gt; &gt; As for what the proper approach is, I think that Nebojša Ćirić has now been told that each one of these is definitely the way it should be done.  Does everyone on this bug agree with Sam (and thus option #1 is the correct way to do it)?
&gt; 
&gt; I objected to option #3 when I saw it appear in the Chromium code review tool because that would not allow us to test the feature using layout tests.  Also, web platform features really belong in either WebCore or the ES engine.
&gt; 
&gt; I proposed a V8 extension because I presumed that JSC folks would want to do a native JSC implementation instead of bothering with an intermediate IDL implementation.
&gt; 
&gt; The reason for a V8 extension over directly modifying V8 is that the V8 team does not like to add features to the V8 engine until the specs are stable.  As such, for V8 we only have two choices: implement using a V8 extension or implement using IDL.  This means having to re-implement later once the V8 team is ready to support the APIs officially, but that is a cost we are willing to accept.
&gt; 
&gt; So, it seems like there are only two choices:
&gt; 
&gt; 1) in WebCore via IDL files and normal binding methods
&gt; 2) in WebCore as a V8 extension and JSC directly
&gt; 
&gt; I assumed that #2 would be preferred by JSC folks since it would allow the APIs to be available to users of standalone JSC and it would also avoid the need to re-implement in the future.

Oliver, Darin, Sam,
 given Darin&apos;s (Fisher) and Jeremy&apos;s comments, do you still feel we should go with IDL implementation or does what we have now (V8 Extensions) makes sense for short term implementation?

Thanks for your comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309751</commentid>
    <comment_count>16</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-11-16 09:00:51 -0800</bug_when>
    <thetext>
&gt; Oliver, Darin, Sam,
&gt;  given Darin&apos;s (Fisher) and Jeremy&apos;s comments, do you still feel we should go with IDL implementation or does what we have now (V8 Extensions) makes sense for short term implementation?
&gt; 
&gt; Thanks for your comments.

If the code is in webcore it should be in idl, using the standard bindings mechanism.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330980</commentid>
    <comment_count>17</comment_count>
      <attachid>78264</attachid>
    <who name="Nebojša Ćirić">cira</who>
    <bug_when>2011-01-07 13:42:49 -0800</bug_when>
    <thetext>Created attachment 78264
New patch for i18n API.

Code for the extension is in v8 now - src/extensions/experimental/i18n-extension.{cc,h}. WebKit patch contains only plumbing for a flag to enable/disable the feature (disabled by default), tests for the Locale object and build rules.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331941</commentid>
    <comment_count>18</comment_count>
      <attachid>78450</attachid>
    <who name="Jungshik Shin">jshin</who>
    <bug_when>2011-01-10 14:22:54 -0800</bug_when>
    <thetext>Created attachment 78450
patch updated to the new source tree structure 

Uploading on behalf of cira so that all the try bots run.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331991</commentid>
    <comment_count>19</comment_count>
    <who name="Nebojša Ćirić">cira</who>
    <bug_when>2011-01-10 15:30:34 -0800</bug_when>
    <thetext>To clarify the new set of patches - Maciej, Darin Fisher and Oliver had short discussion outside of this bug thread, and I think we came up with acceptable solution (at least nobody complained when it was proposed):

1- We will contribute layout tests for the new feature in WebKit. - this patch
2- We will enable support for V8 outside of the WebKit repository. - this patch
3- We will contribute JSC support.

#2 and #3 will be optional (disabled by default) since the spec is not finalized.

Flag control and extension loading could be done in Chromium, but we feel it would be beneficial to other ports to have it in WebKit (to avoid duplicate work in the future).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332448</commentid>
    <comment_count>20</comment_count>
      <attachid>78450</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-01-11 10:52:10 -0800</bug_when>
    <thetext>Comment on attachment 78450
patch updated to the new source tree structure 

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

&gt; Source/WebCore/WebCore.gyp/WebCore.gyp:1404
&gt; +            &apos;USING_EXPERIMENTAL_I18N_API=1&apos;,

I think this needs to be a WTF_ENABLE_ style macro, controlled via features.gypi (and features_override.gypi).

&gt; Source/WebCore/WebCore.gyp/WebCore.gyp:1498
&gt; +      &apos;target_name&apos;: &apos;experimental_i18n_api&apos;,

It seems like this target should live in v8.gyp.

&gt; Source/WebCore/bindings/v8/V8DOMWindowShell.cpp:65
&gt; +#ifdef USING_EXPERIMENTAL_I18N_API

#if ENABLE(EXPERIMENTAL_I18N_API)

&gt; Source/WebCore/page/Settings.h:356
&gt; +        void setJSI18NAPIEnabled(bool flag) { m_jsI18NAPIEnabled = flag; }

I think this may be better added to WebRuntimeFeatures since that is how we
enable other, similar features at runtime.  We don&apos;t need to vary this flag
on a per-Page basis, so storing this on Settings is not necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332473</commentid>
    <comment_count>21</comment_count>
    <who name="Nebojša Ćirić">cira</who>
    <bug_when>2011-01-11 11:20:06 -0800</bug_when>
    <thetext>&gt; &gt; Source/WebCore/WebCore.gyp/WebCore.gyp:1498
&gt; &gt; +      &apos;target_name&apos;: &apos;experimental_i18n_api&apos;,
&gt; 
&gt; It seems like this target should live in v8.gyp.

V8 team let us put the experimental code in their tree (thanks for helping out with that), but they were against changing the build rules - they already refused to do so for some Harmony features, and they felt it wouldn&apos;t be fair if they made an exception in our case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339770</commentid>
    <comment_count>22</comment_count>
      <attachid>80086</attachid>
    <who name="Nebojša Ćirić">cira</who>
    <bug_when>2011-01-25 11:12:12 -0800</bug_when>
    <thetext>Created attachment 80086
Using WebRuntimeFeatures instead of WebSettings for i18n API

We are using features.gypi to define conditional ENABLE_EXPERIMENTAL_I18N_API guard, and WebRuntimeFeatures to pass the command line settings.

CL (http://codereview.chromium.org/6250025/) was landed in v8 tree and should propagate to WebKit deps before this patch gets submitted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339788</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-25 11:41:29 -0800</bug_when>
    <thetext>Attachment 80086 did not build on chromium:
Build output: http://queues.webkit.org/results/7552298</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340367</commentid>
    <comment_count>24</comment_count>
      <attachid>80086</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-01-26 11:50:19 -0800</bug_when>
    <thetext>Comment on attachment 80086
Using WebRuntimeFeatures instead of WebSettings for i18n API

oops, this is not ready to land yet.  we need to update the version of v8 used, first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341093</commentid>
    <comment_count>25</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-01-27 16:00:13 -0800</bug_when>
    <thetext>I&apos;m concerned about the absence of any prefix on these, given the early stages of the spec i&apos;m worried we may have problems with changes in the final version being incompatible with these.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341113</commentid>
    <comment_count>26</comment_count>
      <attachid>80086</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-01-27 16:20:01 -0800</bug_when>
    <thetext>Comment on attachment 80086
Using WebRuntimeFeatures instead of WebSettings for i18n API

Good point!  Cira, sorry to add another round trip, but we really should add
a vendor prefix to these methods.  I suggest using &quot;v8&quot; as the prefix since
these are part of V8 and not part of WebKit, yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341523</commentid>
    <comment_count>27</comment_count>
    <who name="Nebojša Ćirić">cira</who>
    <bug_when>2011-01-28 10:45:21 -0800</bug_when>
    <thetext>I&apos;ll add v8 prefix to Locale object (all methods and properties are under Locale global). Prefixing everything with v8 may be an overkill.
I&apos;ll ping you again once v8 change lands.

(In reply to comment #26)
&gt; (From update of attachment 80086 [details])
&gt; Good point!  Cira, sorry to add another round trip, but we really should add
&gt; a vendor prefix to these methods.  I suggest using &quot;v8&quot; as the prefix since
&gt; these are part of V8 and not part of WebKit, yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341658</commentid>
    <comment_count>28</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-01-28 12:47:25 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; I&apos;ll add v8 prefix to Locale object (all methods and properties are under Locale global). Prefixing everything with v8 may be an overkill.
&gt; I&apos;ll ping you again once v8 change lands.

Yes, you only need to prefix the top-level Locale object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345632</commentid>
    <comment_count>29</comment_count>
      <attachid>81250</attachid>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2011-02-04 11:25:54 -0800</bug_when>
    <thetext>Created attachment 81250
patch w/ layout test

On behalf of Cira.

Difference from 80086:
Locale class renamed to v8Locale.
Command line options and define guard renamed from ExperimentalI18NAPI to JavaScriptI18NAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348337</commentid>
    <comment_count>30</comment_count>
    <who name="Nebojša Ćirić">cira</who>
    <bug_when>2011-02-09 09:59:18 -0800</bug_when>
    <thetext>I made the v8 changes, they landed in WebKit tree/deps... Any other concerns?

(In reply to comment #29)
&gt; Created an attachment (id=81250) [details]
&gt; patch w/ layout test
&gt; 
&gt; On behalf of Cira.
&gt; 
&gt; Difference from 80086:
&gt; Locale class renamed to v8Locale.
&gt; Command line options and define guard renamed from ExperimentalI18NAPI to JavaScriptI18NAPI.

(In reply to comment #29)
&gt; Created an attachment (id=81250) [details]
&gt; patch w/ layout test
&gt; 
&gt; On behalf of Cira.
&gt; 
&gt; Difference from 80086:
&gt; Locale class renamed to v8Locale.
&gt; Command line options and define guard renamed from ExperimentalI18NAPI to JavaScriptI18NAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348418</commentid>
    <comment_count>31</comment_count>
      <attachid>81250</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-02-09 11:43:50 -0800</bug_when>
    <thetext>Comment on attachment 81250
patch w/ layout test

Clearing flags on attachment: 81250

Committed r78095: &lt;http://trac.webkit.org/changeset/78095&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348420</commentid>
    <comment_count>32</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-02-09 11:43:57 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348494</commentid>
    <comment_count>33</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2011-02-09 13:15:08 -0800</bug_when>
    <thetext>fast/js/i18n-bindings-locale.html is failing on all chromium canary bots.  Please have a look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348526</commentid>
    <comment_count>34</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2011-02-09 13:38:10 -0800</bug_when>
    <thetext>Just added the test to platform/chromium/test_expectations.txt.  Please remove this entry once the issue is resolved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453952</commentid>
    <comment_count>35</comment_count>
      <attachid>104536</attachid>
    <who name="Nebojša Ćirić">cira</who>
    <bug_when>2011-08-19 11:38:26 -0700</bug_when>
    <thetext>Created attachment 104536
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453965</commentid>
    <comment_count>36</comment_count>
      <attachid>104536</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-08-19 11:57:34 -0700</bug_when>
    <thetext>Comment on attachment 104536
Patch

I think you should file a new bug for this patch.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73681</attachid>
            <date>2010-11-11 16:42:14 -0800</date>
            <delta_ts>2011-01-07 13:42:49 -0800</delta_ts>
            <desc>First patch to implement Locale class of the JS i18n API</desc>
            <filename>i18nAPIPatch.txt</filename>
            <type>text/plain</type>
            <size>35370</size>
            <attacher name="Nebojša Ćirić">cira</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MTg2MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMTAtMTEtMTEgIE5lYm9qc2EgQ2lyaWMgIDxjaXJhQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworCUltcGxlbWVu
dHMgSmF2YVNjcmlwdCBpMThuIEFQSSBwcm90b3R5cGUgYXMgVjggRXh0ZW5zaW9uIChMb2NhbGUg
cGFydCBvbmx5IGZvciBub3cpLiBJdCdzIHVuZGVyIHRoZSBmbGFnLgorCWh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTQxNAorCisgICAgICAgIFRlc3Q6IGZhc3QvanMv
aTE4bi1iaW5kaW5ncy1sb2NhbGUuaHRtbAorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L0RhdGVFeHRlbnNpb24uY3BwOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L0kxOE5FeHRlbnNpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkkxOE5FeHRl
bnNpb246OkkxOE5FeHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6STE4TkV4dGVuc2lvbjo6
Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkkxOE5FeHRlbnNpb246OkdldE5hdGl2ZUZ1bmN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkkxOE5FeHRlbnNpb246OkpTTG9jYWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkkxOE5FeHRlbnNpb246OkpTQXZhaWxhYmxlTG9jYWxlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpOb3JtYWxpemVMb2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6STE4TkV4dGVuc2lv
bjo6SlNNYXhpbWl6ZWRMb2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6STE4TkV4dGVuc2lvbjo6
SlNNaW5pbWl6ZWRMb2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6R2V0RGlzcGxheUl0ZW0pOgor
ICAgICAgICAoV2ViQ29yZTo6STE4TkV4dGVuc2lvbjo6SlNEaXNwbGF5TGFuZ3VhZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6STE4TkV4dGVuc2lvbjo6SlNEaXNwbGF5U2NyaXB0KToKKyAgICAgICAg
KFdlYkNvcmU6OkkxOE5FeHRlbnNpb246OkpTRGlzcGxheVJlZ2lvbik6CisgICAgICAgIChXZWJD
b3JlOjpJMThORXh0ZW5zaW9uOjpKU0Rpc3BsYXlOYW1lKToKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9JMThORXh0ZW5zaW9uLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NV2lu
ZG93U2hlbGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6Y3JlYXRl
TmV3Q29udGV4dCk6CisgICAgICAgICogcGFnZS9TZXR0aW5ncy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTZXR0aW5nczo6U2V0dGluZ3MpOgorICAgICAgICAqIHBhZ2UvU2V0dGluZ3MuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpzZXRKU0kxOE5BUElFbmFibGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OlNldHRpbmdzOjpqc0kxOE5BUElFbmFibGVkKToKKwogMjAxMC0xMS0xMCAgWmhl
bnlhbyBNbyAgPHptb0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGgg
UnVzc2VsbC4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA3MTg2MykKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBp
CSh3b3JraW5nIGNvcHkpCkBAIC04NTYsNiArODU2LDggQEAKICAgICAgICAgICAgICdiaW5kaW5n
cy92OC9ET01EYXRhU3RvcmUuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvRE9NV3JhcHBl
cldvcmxkLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvRE9NV3JhcHBlcldvcmxkLmgn
LAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0kxOE5FeHRlbnNpb24uY3BwJywKKyAgICAgICAg
ICAgICdiaW5kaW5ncy92OC9JMThORXh0ZW5zaW9uLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdz
L3Y4L0lzb2xhdGVkV29ybGQuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9Jc29sYXRl
ZFdvcmxkLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0phdmFTY3JpcHRDYWxsRnJhbWUu
Y3BwJywKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvSTE4TkV4dGVuc2lvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9JMThORXh0ZW5zaW9uLmNwcAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvSTE4TkV4dGVuc2lvbi5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMjU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkkxOE5F
eHRlbnNpb24uaCIKKworI2luY2x1ZGUgInVuaWNvZGUvbG9jaWQuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitJMThORXh0ZW5zaW9uKiBJMThORXh0ZW5zaW9uOjpleHRlbnNpb247CisKK3N0
YXRpYyBjb25zdCBjaGFyKiBJMThORXh0ZW5zaW9uTmFtZSA9ICJ2OC9JMThORXh0ZW5zaW9uIjsK
Ky8vIFRPRE8oY2lyYSk6IE1vdmUgYWN0dWFsIGphdmFzY3JpcHQgY29kZSB0byAuanMgZmlsZSBp
biB0aGlzIGZvbGRlciBhbmQKKy8vIG1ha2UgYSBidWlsZCBydWxlIHRoYXQgd291bGQgZ2VuZXJh
dGUgcHJvcGVyIGNwcCBhbmQgaCBmaWxlcyBmcm9tIGl0Lgorc3RhdGljIGNvbnN0IGNoYXIqIEkx
OE5FeHRlbnNpb25TY3JpcHQgPQorICAgICJMb2NhbGUgPSBmdW5jdGlvbihvcHRMb2NhbGUpIHsi
CisgICAgIiAgICBuYXRpdmUgZnVuY3Rpb24gTmF0aXZlSlNMb2NhbGUoKTsiCisgICAgIiAgICB2
YXIgcHJvcGVydGllcyA9IE5hdGl2ZUpTTG9jYWxlKG9wdExvY2FsZSk7IgorICAgICIgICAgdGhp
cy5sb2NhbGUgPSBwcm9wZXJ0aWVzLmxvY2FsZTsiCisgICAgIiAgICB0aGlzLmxhbmd1YWdlID0g
cHJvcGVydGllcy5sYW5ndWFnZTsiCisgICAgIiAgICB0aGlzLnNjcmlwdCA9IHByb3BlcnRpZXMu
c2NyaXB0OyIKKyAgICAiICAgIHRoaXMucmVnaW9uID0gcHJvcGVydGllcy5yZWdpb247IgorICAg
ICJ9OyIKKyAgICAiTG9jYWxlLmF2YWlsYWJsZUxvY2FsZXMgPSBmdW5jdGlvbigpIHsiCisgICAg
IiAgICBuYXRpdmUgZnVuY3Rpb24gTmF0aXZlSlNBdmFpbGFibGVMb2NhbGVzKCk7IgorICAgICIg
ICAgcmV0dXJuIE5hdGl2ZUpTQXZhaWxhYmxlTG9jYWxlcygpOyIKKyAgICAifTsiCisgICAgIkxv
Y2FsZS5wcm90b3R5cGUubWF4aW1pemVkTG9jYWxlID0gZnVuY3Rpb24oKSB7IgorICAgICIgICAg
bmF0aXZlIGZ1bmN0aW9uIE5hdGl2ZUpTTWF4aW1pemVkTG9jYWxlKCk7IgorICAgICIgICAgcmV0
dXJuIG5ldyBMb2NhbGUoTmF0aXZlSlNNYXhpbWl6ZWRMb2NhbGUodGhpcy5sb2NhbGUpKTsiCisg
ICAgIn07IgorICAgICJMb2NhbGUucHJvdG90eXBlLm1pbmltaXplZExvY2FsZSA9IGZ1bmN0aW9u
KCkgeyIKKyAgICAiICAgIG5hdGl2ZSBmdW5jdGlvbiBOYXRpdmVKU01pbmltaXplZExvY2FsZSgp
OyIKKyAgICAiICAgIHJldHVybiBuZXcgTG9jYWxlKE5hdGl2ZUpTTWluaW1pemVkTG9jYWxlKHRo
aXMubG9jYWxlKSk7IgorICAgICJ9OyIKKyAgICAiTG9jYWxlLnByb3RvdHlwZS5kaXNwbGF5TG9j
YWxlXyA9IGZ1bmN0aW9uKGRpc3BsYXlMb2NhbGUpIHsiCisgICAgIiAgICB2YXIgcmVzdWx0ID0g
dGhpcy5sb2NhbGU7IgorICAgICIgICAgaWYgKGRpc3BsYXlMb2NhbGUgIT09IHVuZGVmaW5lZCkg
eyIKKyAgICAiICAgICAgICByZXN1bHQgPSBkaXNwbGF5TG9jYWxlLmxvY2FsZTsiCisgICAgIiAg
ICB9IgorICAgICIgICAgcmV0dXJuIHJlc3VsdDsiCisgICAgIn07IgorICAgICJMb2NhbGUucHJv
dG90eXBlLmRpc3BsYXlMYW5ndWFnZSA9IGZ1bmN0aW9uKG9wdERpc3BsYXlMb2NhbGUpIHsiCisg
ICAgIiAgICB2YXIgZGlzcGxheUxvY2FsZSA9IHRoaXMuZGlzcGxheUxvY2FsZV8ob3B0RGlzcGxh
eUxvY2FsZSk7IgorICAgICIgICAgbmF0aXZlIGZ1bmN0aW9uIE5hdGl2ZUpTRGlzcGxheUxhbmd1
YWdlKCk7IgorICAgICIgICAgcmV0dXJuIE5hdGl2ZUpTRGlzcGxheUxhbmd1YWdlKHRoaXMubG9j
YWxlLCBkaXNwbGF5TG9jYWxlKTsiCisgICAgIn07IgorICAgICJMb2NhbGUucHJvdG90eXBlLmRp
c3BsYXlTY3JpcHQgPSBmdW5jdGlvbihvcHREaXNwbGF5TG9jYWxlKSB7IgorICAgICIgICAgdmFy
IGRpc3BsYXlMb2NhbGUgPSB0aGlzLmRpc3BsYXlMb2NhbGVfKG9wdERpc3BsYXlMb2NhbGUpOyIK
KyAgICAiICAgIG5hdGl2ZSBmdW5jdGlvbiBOYXRpdmVKU0Rpc3BsYXlTY3JpcHQoKTsiCisgICAg
IiAgICByZXR1cm4gTmF0aXZlSlNEaXNwbGF5U2NyaXB0KHRoaXMubG9jYWxlLCBkaXNwbGF5TG9j
YWxlKTsiCisgICAgIn07IgorICAgICJMb2NhbGUucHJvdG90eXBlLmRpc3BsYXlSZWdpb24gPSBm
dW5jdGlvbihvcHREaXNwbGF5TG9jYWxlKSB7IgorICAgICIgICAgdmFyIGRpc3BsYXlMb2NhbGUg
PSB0aGlzLmRpc3BsYXlMb2NhbGVfKG9wdERpc3BsYXlMb2NhbGUpOyIKKyAgICAiICAgIG5hdGl2
ZSBmdW5jdGlvbiBOYXRpdmVKU0Rpc3BsYXlSZWdpb24oKTsiCisgICAgIiAgICByZXR1cm4gTmF0
aXZlSlNEaXNwbGF5UmVnaW9uKHRoaXMubG9jYWxlLCBkaXNwbGF5TG9jYWxlKTsiCisgICAgIn07
IgorICAgICJMb2NhbGUucHJvdG90eXBlLmRpc3BsYXlOYW1lID0gZnVuY3Rpb24ob3B0RGlzcGxh
eUxvY2FsZSkgeyIKKyAgICAiICAgIHZhciBkaXNwbGF5TG9jYWxlID0gdGhpcy5kaXNwbGF5TG9j
YWxlXyhvcHREaXNwbGF5TG9jYWxlKTsiCisgICAgIiAgICBuYXRpdmUgZnVuY3Rpb24gTmF0aXZl
SlNEaXNwbGF5TmFtZSgpOyIKKyAgICAiICAgIHJldHVybiBOYXRpdmVKU0Rpc3BsYXlOYW1lKHRo
aXMubG9jYWxlLCBkaXNwbGF5TG9jYWxlKTsiCisgICAgIn07IjsKKworSTE4TkV4dGVuc2lvbjo6
STE4TkV4dGVuc2lvbigpIDogdjg6OkV4dGVuc2lvbihJMThORXh0ZW5zaW9uTmFtZSwgSTE4TkV4
dGVuc2lvblNjcmlwdCkKK3sKK30KKworSTE4TkV4dGVuc2lvbiogSTE4TkV4dGVuc2lvbjo6Z2V0
KCkKK3sKKyAgICBpZiAoIWV4dGVuc2lvbikKKyAgICAgICAgZXh0ZW5zaW9uID0gbmV3IEkxOE5F
eHRlbnNpb24oKTsKKyAgICByZXR1cm4gZXh0ZW5zaW9uOworfQorCit2ODo6SGFuZGxlPHY4OjpG
dW5jdGlvblRlbXBsYXRlPiBJMThORXh0ZW5zaW9uOjpHZXROYXRpdmVGdW5jdGlvbih2ODo6SGFu
ZGxlPHY4OjpTdHJpbmc+IG5hbWUpCit7CisgICAgaWYgKG5hbWUtPkVxdWFscyh2ODo6U3RyaW5n
OjpOZXcoIk5hdGl2ZUpTTG9jYWxlIikpKQorICAgICAgICByZXR1cm4gdjg6OkZ1bmN0aW9uVGVt
cGxhdGU6Ok5ldyhKU0xvY2FsZSk7CisKKyAgICBpZiAobmFtZS0+RXF1YWxzKHY4OjpTdHJpbmc6
Ok5ldygiTmF0aXZlSlNBdmFpbGFibGVMb2NhbGVzIikpKQorICAgICAgICByZXR1cm4gdjg6OkZ1
bmN0aW9uVGVtcGxhdGU6Ok5ldyhKU0F2YWlsYWJsZUxvY2FsZXMpOworCisgICAgaWYgKG5hbWUt
PkVxdWFscyh2ODo6U3RyaW5nOjpOZXcoIk5hdGl2ZUpTTWF4aW1pemVkTG9jYWxlIikpKQorICAg
ICAgICByZXR1cm4gdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhKU01heGltaXplZExvY2FsZSk7
CisKKyAgICBpZiAobmFtZS0+RXF1YWxzKHY4OjpTdHJpbmc6Ok5ldygiTmF0aXZlSlNNaW5pbWl6
ZWRMb2NhbGUiKSkpCisgICAgICAgIHJldHVybiB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KEpT
TWluaW1pemVkTG9jYWxlKTsKKworICAgIGlmIChuYW1lLT5FcXVhbHModjg6OlN0cmluZzo6TmV3
KCJOYXRpdmVKU0Rpc3BsYXlMYW5ndWFnZSIpKSkKKyAgICAgICAgcmV0dXJuIHY4OjpGdW5jdGlv
blRlbXBsYXRlOjpOZXcoSlNEaXNwbGF5TGFuZ3VhZ2UpOworCisgICAgaWYgKG5hbWUtPkVxdWFs
cyh2ODo6U3RyaW5nOjpOZXcoIk5hdGl2ZUpTRGlzcGxheVNjcmlwdCIpKSkKKyAgICAgICAgcmV0
dXJuIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoSlNEaXNwbGF5U2NyaXB0KTsKKworICAgIGlm
IChuYW1lLT5FcXVhbHModjg6OlN0cmluZzo6TmV3KCJOYXRpdmVKU0Rpc3BsYXlSZWdpb24iKSkp
CisgICAgICAgIHJldHVybiB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KEpTRGlzcGxheVJlZ2lv
bik7CisKKyAgICBpZiAobmFtZS0+RXF1YWxzKHY4OjpTdHJpbmc6Ok5ldygiTmF0aXZlSlNEaXNw
bGF5TmFtZSIpKSkKKyAgICAgICAgcmV0dXJuIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoSlNE
aXNwbGF5TmFtZSk7CisKKyAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0
ZT4oKTsKK30KKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IEkxOE5FeHRlbnNpb246OkpTTG9jYWxl
KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgLy8gVE9ETyhjaXJhKTogRmV0Y2gg
YWN0dWFsIGJyb3dzZXIgbG9jYWxlLiBBY2NlcHQgZW4tVVMgYXMgZ29vZCBkZWZhdWx0IGZvciBu
b3cuCisgICAgc3RkOjpzdHJpbmcgbG9jYWxlTmFtZSgiZW4tVVMiKTsKKyAgICBpZiAoYXJncy5M
ZW5ndGgoKSA9PSAxICYmIGFyZ3NbMF0tPklzU3RyaW5nKCkpCisgICAgICAgIGxvY2FsZU5hbWUg
PSAqdjg6OlN0cmluZzo6VXRmOFZhbHVlKGFyZ3NbMF0tPlRvU3RyaW5nKCkpOworCisgICAgdjg6
OkxvY2FsPHY4OjpPYmplY3Q+IGxvY2FsZSA9IHY4OjpPYmplY3Q6Ok5ldygpOworICAgIGxvY2Fs
ZS0+U2V0KHY4OjpTdHJpbmc6Ok5ldygibG9jYWxlIiksIHY4OjpTdHJpbmc6Ok5ldyhsb2NhbGVO
YW1lLmNfc3RyKCkpKTsKKworICAgIGljdTo6TG9jYWxlIGljdUxvY2FsZShsb2NhbGVOYW1lLmNf
c3RyKCkpOworCisgICAgY29uc3QgY2hhciogbGFuZ3VhZ2UgPSBpY3VMb2NhbGUuZ2V0TGFuZ3Vh
Z2UoKTsKKyAgICBsb2NhbGUtPlNldCh2ODo6U3RyaW5nOjpOZXcoImxhbmd1YWdlIiksIHY4OjpT
dHJpbmc6Ok5ldyhsYW5ndWFnZSkpOworCisgICAgY29uc3QgY2hhciogc2NyaXB0ID0gaWN1TG9j
YWxlLmdldFNjcmlwdCgpOworICAgIGlmIChzdHJsZW4oc2NyaXB0KSkKKyAgICAgICAgbG9jYWxl
LT5TZXQodjg6OlN0cmluZzo6TmV3KCJzY3JpcHQiKSwgdjg6OlN0cmluZzo6TmV3KHNjcmlwdCkp
OworCisgICAgY29uc3QgY2hhciogcmVnaW9uID0gaWN1TG9jYWxlLmdldENvdW50cnkoKTsKKyAg
ICBpZiAoc3RybGVuKHJlZ2lvbikpCisgICAgICAgIGxvY2FsZS0+U2V0KHY4OjpTdHJpbmc6Ok5l
dygicmVnaW9uIiksIHY4OjpTdHJpbmc6Ok5ldyhyZWdpb24pKTsKKworICAgIHJldHVybiBsb2Nh
bGU7Cit9CisKKy8vIFRPRE8oY2lyYSk6IEZpbHRlciBvdXQgbG9jYWxlcyB0aGF0IENocm9tZSBk
b2Vzbid0IHN1cHBvcnQuCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gSTE4TkV4dGVuc2lvbjo6SlNB
dmFpbGFibGVMb2NhbGVzKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgdjg6Okxv
Y2FsPHY4OjpBcnJheT4gYWxsTG9jYWxlcyA9IHY4OjpBcnJheTo6TmV3KCk7CisKKyAgICBpbnQg
Y291bnQgPSAwOworICAgIGNvbnN0IExvY2FsZSogaWN1TG9jYWxlcyA9IGljdTo6TG9jYWxlOjpn
ZXRBdmFpbGFibGVMb2NhbGVzKGNvdW50KTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50
OyArK2kpCisgICAgICAgIGFsbExvY2FsZXMtPlNldChpLCB2ODo6U3RyaW5nOjpOZXcoaWN1TG9j
YWxlc1tpXS5nZXROYW1lKCkpKTsKKworICAgIHJldHVybiBhbGxMb2NhbGVzOworfQorCisvLyBV
c2UgLSBhcyB0YWcgc2VwYXJhdG9yLCBub3QgXyB0aGF0IElDVSB1c2VzLgorc3RhdGljIHN0ZDo6
c3RyaW5nIE5vcm1hbGl6ZUxvY2FsZShjb25zdCBzdGQ6OnN0cmluZyYgbG9jYWxlKQoreworICAg
IHN0ZDo6c3RyaW5nIHJlc3VsdChsb2NhbGUpOworICAgIHN0ZDo6cmVwbGFjZShyZXN1bHQuYmVn
aW4oKSwgcmVzdWx0LmVuZCgpLCAnXycsICctJyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
djg6OkhhbmRsZTx2ODo6VmFsdWU+IEkxOE5FeHRlbnNpb246OkpTTWF4aW1pemVkTG9jYWxlKGNv
bnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgaWYgKCFhcmdzLkxlbmd0aCgpIHx8ICFh
cmdzWzBdLT5Jc1N0cmluZygpKQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworCisg
ICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAgc3RkOjpzdHJpbmcgbG9j
YWxlTmFtZSA9ICp2ODo6U3RyaW5nOjpVdGY4VmFsdWUoYXJnc1swXS0+VG9TdHJpbmcoKSk7Cisg
ICAgY2hhciBtYXhMb2NhbGVbVUxPQ19GVUxMTkFNRV9DQVBBQ0lUWV07CisgICAgdWxvY19hZGRM
aWtlbHlTdWJ0YWdzKGxvY2FsZU5hbWUuY19zdHIoKSwgbWF4TG9jYWxlLCBzaXplb2YobWF4TG9j
YWxlKSwgJnN0YXR1cyk7CisgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKQorICAgICAgICByZXR1
cm4gdjg6OlVuZGVmaW5lZCgpOworCisgICAgcmV0dXJuIHY4OjpTdHJpbmc6Ok5ldyhOb3JtYWxp
emVMb2NhbGUobWF4TG9jYWxlKS5jX3N0cigpKTsKK30KKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+
IEkxOE5FeHRlbnNpb246OkpTTWluaW1pemVkTG9jYWxlKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFy
Z3MpCit7CisgICAgaWYgKCFhcmdzLkxlbmd0aCgpIHx8ICFhcmdzWzBdLT5Jc1N0cmluZygpKQor
ICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworCisgICAgVUVycm9yQ29kZSBzdGF0dXMg
PSBVX1pFUk9fRVJST1I7CisgICAgc3RkOjpzdHJpbmcgbG9jYWxlTmFtZSA9ICp2ODo6U3RyaW5n
OjpVdGY4VmFsdWUoYXJnc1swXS0+VG9TdHJpbmcoKSk7CisgICAgY2hhciBtaW5Mb2NhbGVbVUxP
Q19GVUxMTkFNRV9DQVBBQ0lUWV07CisgICAgdWxvY19taW5pbWl6ZVN1YnRhZ3MobG9jYWxlTmFt
ZS5jX3N0cigpLCBtaW5Mb2NhbGUsIHNpemVvZihtaW5Mb2NhbGUpLCAmc3RhdHVzKTsKKyAgICBp
ZiAoVV9GQUlMVVJFKHN0YXR1cykpCisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisK
KyAgICByZXR1cm4gdjg6OlN0cmluZzo6TmV3KE5vcm1hbGl6ZUxvY2FsZShtaW5Mb2NhbGUpLmNf
c3RyKCkpOworfQorCisvLyBDb21tb24gY29kZSBmb3IgSlNEaXNwbGF5WFhYIG1ldGhvZHMuCitz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IEdldERpc3BsYXlJdGVtKGNvbnN0IHY4OjpBcmd1
bWVudHMmIGFyZ3MsIGNvbnN0IHN0ZDo6c3RyaW5nJiBpdGVtKQoreworICAgIGlmIChhcmdzLkxl
bmd0aCgpICE9IDIgfHwgIWFyZ3NbMF0tPklzU3RyaW5nKCkgfHwgIWFyZ3NbMV0tPklzU3RyaW5n
KCkpCisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisKKyAgICBzdGQ6OnN0cmluZyBi
YXNlTG9jYWxlID0gKnY4OjpTdHJpbmc6OlV0ZjhWYWx1ZShhcmdzWzBdLT5Ub1N0cmluZygpKTsK
KyAgICBpY3U6OkxvY2FsZSBpY3VMb2NhbGUoYmFzZUxvY2FsZS5jX3N0cigpKTsKKyAgICBpY3U6
OkxvY2FsZSBkaXNwbGF5TG9jYWxlID0gaWN1OjpMb2NhbGUoKnY4OjpTdHJpbmc6OlV0ZjhWYWx1
ZShhcmdzWzFdLT5Ub1N0cmluZygpKSk7CisgICAgVW5pY29kZVN0cmluZyByZXN1bHQ7CisgICAg
aWYgKGl0ZW0gPT0gImxhbmd1YWdlIikgeworICAgICAgICBpY3VMb2NhbGUuZ2V0RGlzcGxheUxh
bmd1YWdlKGRpc3BsYXlMb2NhbGUsIHJlc3VsdCk7CisgICAgfSBlbHNlIGlmIChpdGVtID09ICJz
Y3JpcHQiKSB7CisgICAgICAgIGljdUxvY2FsZS5nZXREaXNwbGF5U2NyaXB0KGRpc3BsYXlMb2Nh
bGUsIHJlc3VsdCk7CisgICAgfSBlbHNlIGlmIChpdGVtID09ICJyZWdpb24iKSB7CisgICAgICAg
IGljdUxvY2FsZS5nZXREaXNwbGF5Q291bnRyeShkaXNwbGF5TG9jYWxlLCByZXN1bHQpOworICAg
IH0gZWxzZSBpZiAoaXRlbSA9PSAibmFtZSIpIHsKKyAgICAgICAgaWN1TG9jYWxlLmdldERpc3Bs
YXlOYW1lKGRpc3BsYXlMb2NhbGUsIHJlc3VsdCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0
dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICB9CisKKyAgICBpZiAocmVzdWx0Lmxlbmd0aCgpKQor
ICAgICAgICByZXR1cm4gdjg6OlN0cmluZzo6TmV3KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDE2X3QqPihyZXN1bHQuZ2V0QnVmZmVyKCkpLCByZXN1bHQubGVuZ3RoKCkpOworCisgICAgcmV0
dXJuIHY4OjpVbmRlZmluZWQoKTsKK30KKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IEkxOE5FeHRl
bnNpb246OkpTRGlzcGxheUxhbmd1YWdlKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7Cisg
ICAgcmV0dXJuIEdldERpc3BsYXlJdGVtKGFyZ3MsICJsYW5ndWFnZSIpOworfQorCit2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gSTE4TkV4dGVuc2lvbjo6SlNEaXNwbGF5U2NyaXB0KGNvbnN0IHY4OjpB
cmd1bWVudHMmIGFyZ3MpCit7CisgICAgcmV0dXJuIEdldERpc3BsYXlJdGVtKGFyZ3MsICJzY3Jp
cHQiKTsKK30KKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IEkxOE5FeHRlbnNpb246OkpTRGlzcGxh
eVJlZ2lvbihjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIHJldHVybiBHZXREaXNw
bGF5SXRlbShhcmdzLCAicmVnaW9uIik7Cit9CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBJMThO
RXh0ZW5zaW9uOjpKU0Rpc3BsYXlOYW1lKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7Cisg
ICAgcmV0dXJuIEdldERpc3BsYXlJdGVtKGFyZ3MsICJuYW1lIik7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvSTE4TkV4dGVuc2lvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvSTE4TkV4dGVuc2lvbi5oCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9JMThORXh0ZW5zaW9uLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEkxOE5FeHRlbnNpb25faAorI2RlZmluZSBJMThO
RXh0ZW5zaW9uX2gKKworI2luY2x1ZGUgPHY4Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAg
CitjbGFzcyBJMThORXh0ZW5zaW9uIDogcHVibGljIHY4OjpFeHRlbnNpb24geworcHVibGljOgor
ICAgIHN0YXRpYyBJMThORXh0ZW5zaW9uKiBnZXQoKTsKKyAgICAKK3ByaXZhdGU6CisgICAgSTE4
TkV4dGVuc2lvbigpOworICAgIHZpcnR1YWwgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0
ZT4gR2V0TmF0aXZlRnVuY3Rpb24odjg6OkhhbmRsZTx2ODo6U3RyaW5nPik7CisKKyAgICAvLyBJ
bXBsZW1lbnRhdGlvbnMgb2Ygd2luZG93LkxvY2FsZSBtZXRob2RzLgorICAgIHN0YXRpYyB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gSlNMb2NhbGUoY29uc3Qgdjg6OkFyZ3VtZW50cyYpOworICAgIHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gSlNBdmFpbGFibGVMb2NhbGVzKGNvbnN0IHY4OjpB
cmd1bWVudHMmKTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IEpTTWF4aW1pemVk
TG9jYWxlKGNvbnN0IHY4OjpBcmd1bWVudHMmKTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IEpTTWluaW1pemVkTG9jYWxlKGNvbnN0IHY4OjpBcmd1bWVudHMmKTsKKyAgICBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IEpTRGlzcGxheUxhbmd1YWdlKGNvbnN0IHY4OjpBcmd1
bWVudHMmKTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IEpTRGlzcGxheVNjcmlw
dChjb25zdCB2ODo6QXJndW1lbnRzJik7CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBKU0Rpc3BsYXlSZWdpb24oY29uc3Qgdjg6OkFyZ3VtZW50cyYpOworICAgIHN0YXRpYyB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gSlNEaXNwbGF5TmFtZShjb25zdCB2ODo6QXJndW1lbnRzJik7CisK
KyAgICBzdGF0aWMgSTE4TkV4dGVuc2lvbiogZXh0ZW5zaW9uOworfTsKKyAgCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBJMThORXh0ZW5zaW9uX2gKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmNwcAkocmV2aXNpb24gNzE4NjMpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Nyw2ICszNyw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFt
ZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiSTE4TkV4dGVu
c2lvbi5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKICNpbmNs
dWRlICJTY3JpcHRDb250cm9sbGVyLmgiCkBAIC0zMzEsNiArMzMyLDEwIEBAIHY4OjpQZXJzaXN0
ZW50PHY4OjpDb250ZXh0PiBWOERPTVdpbmRvd1MKICAgICBpZiAoIVY4UHJveHk6OnJlZ2lzdGVy
ZWRFeHRlbnNpb25XaXRoVjgoRGF0ZUV4dGVuc2lvbjo6Z2V0KCkpKQogICAgICAgICBWOFByb3h5
OjpyZWdpc3RlckV4dGVuc2lvbihEYXRlRXh0ZW5zaW9uOjpnZXQoKSk7CiAKKyAgICAvLyBFbmFi
bGUgSmF2YVNjcmlwdCBpbnRlcm5hdGlvbmFsaXphdGlvbiBBUEkgZXh0ZW5zaW9uLgorICAgIGlm
IChtX2ZyYW1lLT5zZXR0aW5ncygpLT5qc0kxOE5BUElFbmFibGVkKCkgJiYgIVY4UHJveHk6OnJl
Z2lzdGVyZWRFeHRlbnNpb25XaXRoVjgoSTE4TkV4dGVuc2lvbjo6Z2V0KCkpKQorICAgICAgICBW
OFByb3h5OjpyZWdpc3RlckV4dGVuc2lvbihJMThORXh0ZW5zaW9uOjpnZXQoKSk7CisKICAgICAv
LyBEeW5hbWljYWxseSB0ZWxsIHY4IGFib3V0IG91ciBleHRlbnNpb25zIG5vdy4KICAgICBjb25z
dCBWOEV4dGVuc2lvbnMmIGV4dGVuc2lvbnMgPSBWOFByb3h5OjpleHRlbnNpb25zKCk7CiAgICAg
T3duQXJyYXlQdHI8Y29uc3QgY2hhcio+IGV4dGVuc2lvbk5hbWVzKG5ldyBjb25zdCBjaGFyKltl
eHRlbnNpb25zLnNpemUoKV0pOwpJbmRleDogV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCShyZXZpc2lvbiA3MTg2MykKKysr
IFdlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NSw2ICsxNjUs
NyBAQCBTZXR0aW5nczo6U2V0dGluZ3MoUGFnZSogcGFnZSkKICAgICAsIG1fdXNlUHJlSFRNTDVQ
YXJzZXJRdWlya3MoZmFsc2UpCiAgICAgLCBtX2h5cGVybGlua0F1ZGl0aW5nRW5hYmxlZChmYWxz
ZSkKICAgICAsIG1fY3Jvc3NPcmlnaW5DaGVja0luR2V0TWF0Y2hlZENTU1J1bGVzRGlzYWJsZWQo
ZmFsc2UpCisgICAgLCBtX2pzSTE4TkFQSUVuYWJsZWQoZmFsc2UpCiB7CiAgICAgLy8gQSBGcmFt
ZSBtYXkgbm90IGhhdmUgYmVlbiBjcmVhdGVkIHlldCwgc28gd2UgaW5pdGlhbGl6ZSB0aGUgQXRv
bWljU3RyaW5nIAogICAgIC8vIGhhc2ggYmVmb3JlIHRyeWluZyB0byB1c2UgaXQuCkluZGV4OiBX
ZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvU2V0dGlu
Z3MuaAkocmV2aXNpb24gNzE4NjMpCisrKyBXZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzM4LDYgKzMzOCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
dm9pZCBzZXRDcm9zc09yaWdpbkNoZWNrSW5HZXRNYXRjaGVkQ1NTUnVsZXNEaXNhYmxlZChib29s
IGZsYWcpIHsgbV9jcm9zc09yaWdpbkNoZWNrSW5HZXRNYXRjaGVkQ1NTUnVsZXNEaXNhYmxlZCA9
IGZsYWc7IH0KICAgICAgICAgYm9vbCBjcm9zc09yaWdpbkNoZWNrSW5HZXRNYXRjaGVkQ1NTUnVs
ZXNEaXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY3Jvc3NPcmlnaW5DaGVja0luR2V0TWF0Y2hl
ZENTU1J1bGVzRGlzYWJsZWQ7IH0KIAorICAgICAgICB2b2lkIHNldEpTSTE4TkFQSUVuYWJsZWQo
Ym9vbCBmbGFnKSB7IG1fanNJMThOQVBJRW5hYmxlZCA9IGZsYWc7IH0KKyAgICAgICAgYm9vbCBq
c0kxOE5BUElFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9qc0kxOE5BUElFbmFibGVkOyB9Cisg
ICAgICAgIAogICAgIHByaXZhdGU6CiAgICAgICAgIFBhZ2UqIG1fcGFnZTsKIApAQCAtNDI3LDYg
KzQzMCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX3VzZVByZUhUTUw1
UGFyc2VyUXVpcmtzOiAxOwogICAgICAgICBib29sIG1faHlwZXJsaW5rQXVkaXRpbmdFbmFibGVk
IDogMTsKICAgICAgICAgYm9vbCBtX2Nyb3NzT3JpZ2luQ2hlY2tJbkdldE1hdGNoZWRDU1NSdWxl
c0Rpc2FibGVkIDogMTsKKyAgICAgICAgYm9vbCBtX2pzSTE4TkFQSUVuYWJsZWQ6IDE7CiAKICNp
ZiBVU0UoU0FGQVJJX1RIRU1FKQogICAgICAgICBzdGF0aWMgYm9vbCBnU2hvdWxkUGFpbnROYXRp
dmVDb250cm9sczsKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNzE4NjMpCisrKyBXZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAt
MTEtMTEgIE5lYm9qc2EgQ2lyaWMgIDxjaXJhQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnRzIEphdmFTY3JpcHQg
aTE4biBBUEkgcHJvdG90eXBlIGFzIFY4IEV4dGVuc2lvbiAoTG9jYWxlIHBhcnQgb25seSBmb3Ig
bm93KS4gSXQncyB1bmRlciB0aGUgZmxhZy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQ5NDE0CisKKyAgICAgICAgKiBwdWJsaWMvV2ViU2V0dGluZ3Mu
aDoKKyAgICAgICAgKiBzcmMvV2ViU2V0dGluZ3NJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViU2V0dGluZ3NJbXBsOjpzZXRKU0kxOE5BUElFbmFibGVkKToKKyAgICAgICAgKiBzcmMvV2Vi
U2V0dGluZ3NJbXBsLmg6CisKIDIwMTAtMTEtMTEgIEhhbnMgV2VubmJvcmcgIDxoYW5zQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBKZXJlbXkgT3Jsb3cuCkluZGV4OiBXZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYlNldHRpbmdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJTZXR0aW5ncy5oCShyZXZpc2lvbiA3MTg2MykKKysrIFdlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtOTYsNiArOTYs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldE1lbW9yeUluZm9FbmFibGVkKGJvb2wp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0SHlwZXJsaW5rQXVkaXRpbmdFbmFibGVkKGJvb2wp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q2FyZXRCcm93c2luZ0VuYWJsZWQoYm9vbCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBzZXRKU0kxOE5BUElFbmFibGVkKGJvb2wpID0gMDsKIAogcHJv
dGVjdGVkOgogICAgIH5XZWJTZXR0aW5ncygpIHsgfQpJbmRleDogV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJTZXR0aW5nc0ltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMv
V2ViU2V0dGluZ3NJbXBsLmNwcAkocmV2aXNpb24gNzE4NjMpCisrKyBXZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlNldHRpbmdzSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5OSw0ICsyOTksOSBA
QCB2b2lkIFdlYlNldHRpbmdzSW1wbDo6c2V0Q2FyZXRCcm93c2luZ0VuCiAgICAgbV9zZXR0aW5n
cy0+c2V0Q2FyZXRCcm93c2luZ0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAKK3ZvaWQgV2ViU2V0dGlu
Z3NJbXBsOjpzZXRKU0kxOE5BUElFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBtX3NldHRp
bmdzLT5zZXRKU0kxOE5BUElFbmFibGVkKGVuYWJsZWQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuaAkocmV2aXNpb24g
NzE4NjMpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5oCSh3b3JraW5n
IGNvcHkpCkBAIC05MSw2ICs5MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0TWVt
b3J5SW5mb0VuYWJsZWQoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHNldEh5cGVybGlua0F1ZGl0
aW5nRW5hYmxlZChib29sKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q2FyZXRCcm93c2luZ0VuYWJs
ZWQoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHNldEpTSTE4TkFQSUVuYWJsZWQoYm9vbCk7CiAK
IHByaXZhdGU6CiAgICAgV2ViQ29yZTo6U2V0dGluZ3MqIG1fc2V0dGluZ3M7CkluZGV4OiBXZWJL
aXRUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiA3MTg2MykKKysrIFdlYktpdFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE1IEBACisyMDEwLTExLTExICBOZWJvanNhIENpcmljICA8Y2lyYUBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
SW1wbGVtZW50cyBKYXZhU2NyaXB0IGkxOG4gQVBJIHByb3RvdHlwZSBhcyBWOCBFeHRlbnNpb24g
KExvY2FsZSBwYXJ0IG9ubHkgZm9yIG5vdykuIEl0J3MgdW5kZXIgdGhlIGZsYWcuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTQxNAorCisgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuY3BwOgorICAgICAgICAo
V2ViUHJlZmVyZW5jZXM6OnJlc2V0KToKKyAgICAgICAgKFdlYlByZWZlcmVuY2VzOjphcHBseVRv
KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5oOgor
CiAyMDEwLTExLTExICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IEFkYW0gUm9iZW4uCkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuY3BwCShyZXZpc2lvbiA3
MTg2MykKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVu
Y2VzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDYgKzEwNCw4IEBAIHZvaWQgV2ViUHJlZmVy
ZW5jZXM6OnJlc2V0KCkKICAgICBoeXBlcmxpbmtBdWRpdGluZ0VuYWJsZWQgPSBmYWxzZTsKICAg
ICBhY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCA9IGZhbHNlOwogICAgIGFjY2VsZXJhdGVk
MmRDYW52YXNFbmFibGVkID0gZmFsc2U7CisgICAgLy8gVGhpcyBmZWF0dXJlIGlzIGRpc2FibGVk
IGJ5IGRlZmF1bHQsIGJ1dCBsZXQgdGhlIHRlc3RzIHJ1bi4KKyAgICBqc0kxOE5BUElFbmFibGVk
ID0gdHJ1ZTsKIH0KIAogdm9pZCBXZWJQcmVmZXJlbmNlczo6YXBwbHlUbyhXZWJWaWV3KiB3ZWJW
aWV3KQpAQCAtMTYyLDUgKzE2NCw2IEBAIHZvaWQgV2ViUHJlZmVyZW5jZXM6OmFwcGx5VG8oV2Vi
Vmlldyogd2UKICAgICBzZXR0aW5ncy0+c2V0SW1hZ2VzRW5hYmxlZCh0cnVlKTsKICAgICBzZXR0
aW5ncy0+c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQoYWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0VuYWJsZWQpOwogICAgIHNldHRpbmdzLT5zZXRBY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxl
ZChhY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZCk7CisgICAgc2V0dGluZ3MtPnNldEpTSTE4TkFQ
SUVuYWJsZWQoanNJMThOQVBJRW5hYmxlZCk7CiB9CiAKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuaAkocmV2aXNpb24g
NzE4NjMpCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJl
bmNlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw2ICs3OSw3IEBAIHN0cnVjdCBXZWJQcmVmZXJl
bmNlcyB7CiAgICAgYm9vbCBjYXJldEJyb3dzaW5nRW5hYmxlZDsKICAgICBib29sIGFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdFbmFibGVkOwogICAgIGJvb2wgYWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJs
ZWQ7CisgICAgYm9vbCBqc0kxOE5BUElFbmFibGVkOwogCiAgICAgV2ViUHJlZmVyZW5jZXMoKSB7
IHJlc2V0KCk7IH0KICAgICB2b2lkIHJlc2V0KCk7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA3MTg2MykK
KysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2IEBA
CisyMDEwLTExLTExICBOZWJvanNhIENpcmljICA8Y2lyYUBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50cyBKYXZh
U2NyaXB0IGkxOG4gQVBJIHByb3RvdHlwZSBhcyBWOCBFeHRlbnNpb24gKExvY2FsZSBwYXJ0IG9u
bHkgZm9yIG5vdykuIEl0J3MgdW5kZXIgdGhlIGZsYWcuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTQxNAorCisgICAgICAgICogZmFzdC9qcy9pMThu
LWJpbmRpbmdzLWxvY2FsZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMv
aTE4bi1iaW5kaW5ncy1sb2NhbGUuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9zY3Jp
cHQtdGVzdHMvaTE4bi1iaW5kaW5ncy1sb2NhbGUuanM6IEFkZGVkLgorICAgICAgICAocmVwb3J0
UmVzdWx0KToKKyAgICAgICAgKGxvY2FsZVRlc3RzLnRoaXMuZGVmYXVsdExvY2FsZSk6CisgICAg
ICAgIChsb2NhbGVUZXN0cy50aGlzLmJhc2VMb2NhbGUpOgorICAgICAgICAobG9jYWxlVGVzdHMu
dGhpcy5sYW5ndWFnZVNjcmlwdExvY2FsZSk6CisgICAgICAgIChsb2NhbGVUZXN0cy50aGlzLmxh
bmd1YWdlU2NyaXB0UmVnaW9uTG9jYWxlKToKKyAgICAgICAgKGxvY2FsZVRlc3RzLnRoaXMubGFu
Z3VhZ2VTY3JpcHRSZWdpb25FeHRlbnNpb25Mb2NhbGUpOgorICAgICAgICAobG9jYWxlVGVzdHMu
dGhpcy5sYW5ndWFnZVNjcmlwdFJlZ2lvbkRhc2hVRXh0ZW5zaW9uTG9jYWxlKToKKyAgICAgICAg
KGxvY2FsZVRlc3RzLnRoaXMuYXZhaWxhYmxlTG9jYWxlcyk6CisgICAgICAgIChsb2NhbGVUZXN0
cy50aGlzLm1heGltaXplZExvY2FsZSk6CisgICAgICAgIChsb2NhbGVUZXN0cy50aGlzLm1heGlt
aXplZExvY2FsZVdpdGhFeHRlbnNpb24pOgorICAgICAgICAobG9jYWxlVGVzdHMudGhpcy5taW5p
bWl6ZWRMb2NhbGUpOgorICAgICAgICAobG9jYWxlVGVzdHMudGhpcy5taW5pbWl6ZWRMb2NhbGVX
aXRoRXh0ZW5zaW9uKToKKyAgICAgICAgKGxvY2FsZVRlc3RzLnRoaXMuZGlzcGxheUZvckJhc2VM
b2NhbGUpOgorICAgICAgICAobG9jYWxlVGVzdHMudGhpcy5kaXNwbGF5SW5TYW1lTG9jYWxlKToK
KyAgICAgICAgKGxvY2FsZVRlc3RzLnRoaXMuZGlzcGxheUluRGlmZmVyZW50TG9jYWxlKToKKyAg
ICAgICAgKGxvY2FsZVRlc3RzLnRoaXMuZGlzcGxheUluQ3lyaWxsaWNTY3JpcHQpOgorICAgICAg
ICAobG9jYWxlVGVzdHMudGhpcy5kaXNwbGF5SW5IZWJyZXdTY3JpcHQpOgorICAgICAgICAobG9j
YWxlVGVzdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9Ta2lwcGVkOgorICAgICAgICAqIHBs
YXRmb3JtL21hYy9Ta2lwcGVkOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1NraXBwZWQ6CisgICAg
ICAgICogcGxhdGZvcm0vd2luL1NraXBwZWQ6CisKIDIwMTAtMTEtMTAgIFpoZW55YW8gTW8gIDx6
bW9AZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJ1c3NlbGwuCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL2kxOG4tYmluZGluZ3MtbG9jYWxlLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL2kxOG4tYmluZGluZ3MtbG9jYWxl
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvaTE4bi1i
aW5kaW5ncy1sb2NhbGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcwIEBA
CitUaGlzIHRlc3QgY2hlY2tzIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMgb2YgTG9jYWxlIG9iamVj
dC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdl
cywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgZW4tVVMgaXMgZW4tVVMK
K1BBU1MgZW4gaXMgZW4KK1BBU1MgdW5kZWZpbmVkIGlzIHVuZGVmaW5lZAorUEFTUyBVUyBpcyBV
UworUEFTUyBzciBpcyBzcgorUEFTUyBzciBpcyBzcgorUEFTUyB1bmRlZmluZWQgaXMgdW5kZWZp
bmVkCitQQVNTIHVuZGVmaW5lZCBpcyB1bmRlZmluZWQKK1BBU1MgemgtSGFucyBpcyB6aC1IYW5z
CitQQVNTIHpoIGlzIHpoCitQQVNTIEhhbnMgaXMgSGFucworUEFTUyB1bmRlZmluZWQgaXMgdW5k
ZWZpbmVkCitQQVNTIHpoLUhhbnMtQ04gaXMgemgtSGFucy1DTgorUEFTUyB6aCBpcyB6aAorUEFT
UyBIYW5zIGlzIEhhbnMKK1BBU1MgQ04gaXMgQ04KK1BBU1MgZGUtREVAY29sbGF0aW9uPXBob25l
IGlzIGRlLURFQGNvbGxhdGlvbj1waG9uZQorUEFTUyBkZSBpcyBkZQorUEFTUyB1bmRlZmluZWQg
aXMgdW5kZWZpbmVkCitQQVNTIERFIGlzIERFCitQQVNTIGRlLURFLXUtY28tcGhvbmVib29rIGlz
IGRlLURFLXUtY28tcGhvbmVib29rCitQQVNTIGRlIGlzIGRlCitQQVNTIHVuZGVmaW5lZCBpcyB1
bmRlZmluZWQKK1BBU1MgREUgaXMgREUKK1BBU1MgdHJ1ZSBpcyB0cnVlCitQQVNTIHRydWUgaXMg
dHJ1ZQorUEFTUyBzci1DeXJsLVJTIGlzIHNyLUN5cmwtUlMKK1BBU1Mgc3IgaXMgc3IKK1BBU1Mg
Q3lybCBpcyBDeXJsCitQQVNTIFJTIGlzIFJTCitQQVNTIGRlLUxhdG4tREVAY29sbGF0aW9uPXBo
b25lIGlzIGRlLUxhdG4tREVAY29sbGF0aW9uPXBob25lCitQQVNTIGRlIGlzIGRlCitQQVNTIExh
dG4gaXMgTGF0bgorUEFTUyBERSBpcyBERQorUEFTUyBzciBpcyBzcgorUEFTUyBzciBpcyBzcgor
UEFTUyB1bmRlZmluZWQgaXMgdW5kZWZpbmVkCitQQVNTIHVuZGVmaW5lZCBpcyB1bmRlZmluZWQK
K1BBU1MgZGUtQGNvbGxhdGlvbj1waG9uZSBpcyBkZS1AY29sbGF0aW9uPXBob25lCitQQVNTIGRl
IGlzIGRlCitQQVNTIHVuZGVmaW5lZCBpcyB1bmRlZmluZWQKK1BBU1MgdW5kZWZpbmVkIGlzIHVu
ZGVmaW5lZAorUEFTUyBFbmdsaXNoIGlzIEVuZ2xpc2gKK1BBU1MgdW5kZWZpbmVkIGlzIHVuZGVm
aW5lZAorUEFTUyB1bmRlZmluZWQgaXMgdW5kZWZpbmVkCitQQVNTIEVuZ2xpc2ggaXMgRW5nbGlz
aAorUEFTUyBFbmdsaXNoIGlzIEVuZ2xpc2gKK1BBU1MgTGF0aW4gaXMgTGF0aW4KK1BBU1MgVW5p
dGVkIFN0YXRlcyBpcyBVbml0ZWQgU3RhdGVzCitQQVNTIEVuZ2xpc2ggKExhdGluLCBVbml0ZWQg
U3RhdGVzKSBpcyBFbmdsaXNoIChMYXRpbiwgVW5pdGVkIFN0YXRlcykKK1BBU1MgU2VyYmlhbiBp
cyBTZXJiaWFuCitQQVNTIEN5cmlsbGljIGlzIEN5cmlsbGljCitQQVNTIFNlcmJpYSBpcyBTZXJi
aWEKK1BBU1MgU2VyYmlhbiAoQ3lyaWxsaWMsIFNlcmJpYSkgaXMgU2VyYmlhbiAoQ3lyaWxsaWMs
IFNlcmJpYSkKK1BBU1Mg0KHRgNC/0YHQutC4IGlzINCh0YDQv9GB0LrQuAorUEFTUyDQi9C40YDQ
uNC70LjRhtCwIGlzINCL0LjRgNC40LvQuNGG0LAKK1BBU1Mg0KHRgNCx0LjRmNCwIGlzINCh0YDQ
sdC40ZjQsAorUEFTUyDQodGA0L/RgdC60LggKNCL0LjRgNC40LvQuNGG0LAsINCh0YDQsdC40ZjQ
sCkgaXMg0KHRgNC/0YHQutC4ICjQi9C40YDQuNC70LjRhtCwLCDQodGA0LHQuNGY0LApCitQQVNT
INei15HXqNeZ16ogaXMg16LXkdeo15nXqgorUEFTUyDXoteR16jXmSBpcyDXoteR16jXmQorUEFT
UyDXmdep16jXkNecIGlzINeZ16nXqNeQ15wKK1BBU1Mg16LXkdeo15nXqiAo16LXkdeo15ksINeZ
16nXqNeQ15wpIGlzINei15HXqNeZ16ogKNei15HXqNeZLCDXmdep16jXkNecKQorUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9pMThuLWJpbmRpbmdzLWxvY2Fs
ZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvaTE4bi1iaW5kaW5ncy1s
b2NhbGUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvaTE4bi1iaW5k
aW5ncy1sb2NhbGUuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNCBAQAorPCFET0NUWVBF
IEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxt
ZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0
PVVURi04IiAvPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJyZXNvdXJjZXMvanMtdGVz
dC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBp
ZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2kxOG4tYmluZGlu
Z3MtbG9jYWxlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvanMvc2NyaXB0LXRlc3RzL2kxOG4tYmluZGluZ3MtbG9jYWxlLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvanMvc2NyaXB0LXRlc3RzL2kxOG4tYmluZGluZ3MtbG9jYWxlLmpz
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9zY3JpcHQtdGVzdHMvaTE4bi1i
aW5kaW5ncy1sb2NhbGUuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUxIEBACitkZXNjcmlw
dGlvbigKKworIlRoaXMgdGVzdCBjaGVja3MgcHJvcGVydGllcyBhbmQgbWV0aG9kcyBvZiBMb2Nh
bGUgb2JqZWN0LiIKKworKTsKKworZnVuY3Rpb24gcmVwb3J0UmVzdWx0KF9hY3R1YWwsIF9leHBl
Y3RlZCkgeworICAgIGlmIChpc1Jlc3VsdENvcnJlY3QoX2FjdHVhbCwgX2V4cGVjdGVkKSkKKwkg
ICAgICB0ZXN0UGFzc2VkKF9hY3R1YWwgKyAnIGlzICcgKyBfZXhwZWN0ZWQpOworICAgIGVsc2UK
KwkgICAgICB0ZXN0RmFpbGVkKF9hY3R1YWwgKyAnIHNob3VsZCBiZSAnICsgX2V4cGVjdGVkKTsK
K30KKworbG9jYWxlVGVzdHMgPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLmRlZmF1bHRMb2NhbGUg
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGxvY2FsZSA9IG5ldyBMb2NhbGUoKTsKKyAgICAg
ICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5sb2NhbGUsICdlbi1VUycpOworICAgICAgICByZXBvcnRS
ZXN1bHQobG9jYWxlLmxhbmd1YWdlLCAnZW4nKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2Fs
ZS5zY3JpcHQsIHVuZGVmaW5lZCk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUucmVnaW9u
LCAnVVMnKTsKKyAgICB9OworCisgICAgdGhpcy5iYXNlTG9jYWxlID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHZhciBsb2NhbGUgPSBuZXcgTG9jYWxlKCdzcicpOworICAgICAgICByZXBvcnRSZXN1
bHQobG9jYWxlLmxvY2FsZSwgJ3NyJyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUubGFu
Z3VhZ2UsICdzcicpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLnNjcmlwdCwgdW5kZWZp
bmVkKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5yZWdpb24sIHVuZGVmaW5lZCk7Cisg
ICAgfTsKKworICAgIHRoaXMubGFuZ3VhZ2VTY3JpcHRMb2NhbGUgPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgdmFyIGxvY2FsZSA9IG5ldyBMb2NhbGUoJ3poLUhhbnMnKTsKKyAgICAgICAgcmVwb3J0
UmVzdWx0KGxvY2FsZS5sb2NhbGUsICd6aC1IYW5zJyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChs
b2NhbGUubGFuZ3VhZ2UsICd6aCcpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLnNjcmlw
dCwgJ0hhbnMnKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5yZWdpb24sIHVuZGVmaW5l
ZCk7CisgICAgfTsKKworICAgIHRoaXMubGFuZ3VhZ2VTY3JpcHRSZWdpb25Mb2NhbGUgPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgdmFyIGxvY2FsZSA9IG5ldyBMb2NhbGUoJ3poLUhhbnMtQ04nKTsK
KyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5sb2NhbGUsICd6aC1IYW5zLUNOJyk7CisgICAg
ICAgIHJlcG9ydFJlc3VsdChsb2NhbGUubGFuZ3VhZ2UsICd6aCcpOworICAgICAgICByZXBvcnRS
ZXN1bHQobG9jYWxlLnNjcmlwdCwgJ0hhbnMnKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2Fs
ZS5yZWdpb24sICdDTicpOworICAgIH07CisKKyAgICB0aGlzLmxhbmd1YWdlU2NyaXB0UmVnaW9u
RXh0ZW5zaW9uTG9jYWxlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBsb2NhbGUgPSBuZXcg
TG9jYWxlKCdkZS1ERUBjb2xsYXRpb249cGhvbmUnKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxv
Y2FsZS5sb2NhbGUsICdkZS1ERUBjb2xsYXRpb249cGhvbmUnKTsKKyAgICAgICAgcmVwb3J0UmVz
dWx0KGxvY2FsZS5sYW5ndWFnZSwgJ2RlJyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUu
c2NyaXB0LCB1bmRlZmluZWQpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLnJlZ2lvbiwg
J0RFJyk7CisgICAgfTsKKworICAgIHRoaXMubGFuZ3VhZ2VTY3JpcHRSZWdpb25EYXNoVUV4dGVu
c2lvbkxvY2FsZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgbG9jYWxlID0gbmV3IExvY2Fs
ZSgnZGUtREUtdS1jby1waG9uZWJvb2snKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5s
b2NhbGUsICdkZS1ERS11LWNvLXBob25lYm9vaycpOworICAgICAgICByZXBvcnRSZXN1bHQobG9j
YWxlLmxhbmd1YWdlLCAnZGUnKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5zY3JpcHQs
IHVuZGVmaW5lZCk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUucmVnaW9uLCAnREUnKTsK
KyAgICB9OworICAKKyAgICB0aGlzLmF2YWlsYWJsZUxvY2FsZXMgPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgdmFyIGxvY2FsZXMgPSBMb2NhbGUuYXZhaWxhYmxlTG9jYWxlcygpOworICAgICAgICBy
ZXBvcnRSZXN1bHQobG9jYWxlcy5sZW5ndGggPiAxMDAsIHRydWUpOworICAgICAgICByZXBvcnRS
ZXN1bHQobG9jYWxlcy5qb2luKCkuaW5kZXhPZignc3InKSA+PSAwLCB0cnVlKTsKKyAgICB9Owor
ICAKKyAgICB0aGlzLm1heGltaXplZExvY2FsZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIg
bG9jYWxlID0gbmV3IExvY2FsZSgnc3InKS5tYXhpbWl6ZWRMb2NhbGUoKTsKKyAgICAgICAgcmVw
b3J0UmVzdWx0KGxvY2FsZS5sb2NhbGUsICdzci1DeXJsLVJTJyk7CisgICAgICAgIHJlcG9ydFJl
c3VsdChsb2NhbGUubGFuZ3VhZ2UsICdzcicpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxl
LnNjcmlwdCwgJ0N5cmwnKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5yZWdpb24sICdS
UycpOworICAgIH07CisgIAorICAgIHRoaXMubWF4aW1pemVkTG9jYWxlV2l0aEV4dGVuc2lvbiA9
IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgbG9jYWxlID0gbmV3IExvY2FsZSgnZGVAY29sbGF0
aW9uPXBob25lJykubWF4aW1pemVkTG9jYWxlKCk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2Nh
bGUubG9jYWxlLCAnZGUtTGF0bi1ERUBjb2xsYXRpb249cGhvbmUnKTsKKyAgICAgICAgcmVwb3J0
UmVzdWx0KGxvY2FsZS5sYW5ndWFnZSwgJ2RlJyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2Nh
bGUuc2NyaXB0LCAnTGF0bicpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLnJlZ2lvbiwg
J0RFJyk7CisgICAgfTsKKyAgCisgICAgdGhpcy5taW5pbWl6ZWRMb2NhbGUgPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgdmFyIGxvY2FsZSA9IG5ldyBMb2NhbGUoJ3NyLUN5cmwtUlMnKS5taW5pbWl6
ZWRMb2NhbGUoKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5sb2NhbGUsICdzcicpOwor
ICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLmxhbmd1YWdlLCAnc3InKTsKKyAgICAgICAgcmVw
b3J0UmVzdWx0KGxvY2FsZS5zY3JpcHQsIHVuZGVmaW5lZCk7CisgICAgICAgIHJlcG9ydFJlc3Vs
dChsb2NhbGUucmVnaW9uLCB1bmRlZmluZWQpOworICAgIH07CisgIAorICAgIHRoaXMubWluaW1p
emVkTG9jYWxlV2l0aEV4dGVuc2lvbiA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgbG9jYWxl
ID0gbmV3IExvY2FsZSgnZGUtTGF0bi1ERUBjb2xsYXRpb249cGhvbmUnKS5taW5pbWl6ZWRMb2Nh
bGUoKTsKKyAgICAgICAgLy8gVE9ETyhjaXJhKTogRml4IElDVSB0byByZXR1cm4gZGVAY29sbGF0
aW9uPXBob25lLgorICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLmxvY2FsZSwgJ2RlLUBjb2xs
YXRpb249cGhvbmUnKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5sYW5ndWFnZSwgJ2Rl
Jyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUuc2NyaXB0LCB1bmRlZmluZWQpOworICAg
ICAgICByZXBvcnRSZXN1bHQobG9jYWxlLnJlZ2lvbiwgdW5kZWZpbmVkKTsKKyAgICB9OworICAg
IAorICAgIHRoaXMuZGlzcGxheUZvckJhc2VMb2NhbGUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
dmFyIGxvY2FsZSA9IG5ldyBMb2NhbGUoJ2VuJyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2Nh
bGUuZGlzcGxheUxhbmd1YWdlKCksICdFbmdsaXNoJyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChs
b2NhbGUuZGlzcGxheVNjcmlwdCgpLCB1bmRlZmluZWQpOworICAgICAgICByZXBvcnRSZXN1bHQo
bG9jYWxlLmRpc3BsYXlSZWdpb24oKSwgdW5kZWZpbmVkKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0
KGxvY2FsZS5kaXNwbGF5TmFtZSgpLCAnRW5nbGlzaCcpOworICAgIH07CisgIAorICAgIHRoaXMu
ZGlzcGxheUluU2FtZUxvY2FsZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgbG9jYWxlID0g
bmV3IExvY2FsZSgnZW4nKS5tYXhpbWl6ZWRMb2NhbGUoKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0
KGxvY2FsZS5kaXNwbGF5TGFuZ3VhZ2UoKSwgJ0VuZ2xpc2gnKTsKKyAgICAgICAgcmVwb3J0UmVz
dWx0KGxvY2FsZS5kaXNwbGF5U2NyaXB0KCksICdMYXRpbicpOworICAgICAgICByZXBvcnRSZXN1
bHQobG9jYWxlLmRpc3BsYXlSZWdpb24oKSwgJ1VuaXRlZCBTdGF0ZXMnKTsKKyAgICAgICAgcmVw
b3J0UmVzdWx0KGxvY2FsZS5kaXNwbGF5TmFtZSgpLCAnRW5nbGlzaCAoTGF0aW4sIFVuaXRlZCBT
dGF0ZXMpJyk7CisgICAgfTsKKyAgCisgICAgdGhpcy5kaXNwbGF5SW5EaWZmZXJlbnRMb2NhbGUg
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGxvY2FsZSA9IG5ldyBMb2NhbGUoJ3NyJykubWF4
aW1pemVkTG9jYWxlKCk7CisgICAgICAgIHZhciBkaXNwbGF5TG9jYWxlID0gbmV3IExvY2FsZSgn
ZW4nKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5kaXNwbGF5TGFuZ3VhZ2UoZGlzcGxh
eUxvY2FsZSksICdTZXJiaWFuJyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUuZGlzcGxh
eVNjcmlwdChkaXNwbGF5TG9jYWxlKSwgJ0N5cmlsbGljJyk7CisgICAgICAgIHJlcG9ydFJlc3Vs
dChsb2NhbGUuZGlzcGxheVJlZ2lvbihkaXNwbGF5TG9jYWxlKSwgJ1NlcmJpYScpOworICAgICAg
ICByZXBvcnRSZXN1bHQobG9jYWxlLmRpc3BsYXlOYW1lKGRpc3BsYXlMb2NhbGUpLCAnU2VyYmlh
biAoQ3lyaWxsaWMsIFNlcmJpYSknKTsKKyAgICB9OworICAKKyAgICB0aGlzLmRpc3BsYXlJbkN5
cmlsbGljU2NyaXB0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBsb2NhbGUgPSBuZXcgTG9j
YWxlKCdzcicpLm1heGltaXplZExvY2FsZSgpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxl
LmRpc3BsYXlMYW5ndWFnZSgpLCAn0KHRgNC/0YHQutC4Jyk7CisgICAgICAgIHJlcG9ydFJlc3Vs
dChsb2NhbGUuZGlzcGxheVNjcmlwdCgpLCAn0IvQuNGA0LjQu9C40YbQsCcpOworICAgICAgICBy
ZXBvcnRSZXN1bHQobG9jYWxlLmRpc3BsYXlSZWdpb24oKSwgJ9Ch0YDQsdC40ZjQsCcpOworICAg
ICAgICByZXBvcnRSZXN1bHQobG9jYWxlLmRpc3BsYXlOYW1lKCksICfQodGA0L/RgdC60LggKNCL
0LjRgNC40LvQuNGG0LAsINCh0YDQsdC40ZjQsCknKTsKKyAgICB9OworICAKKyAgICB0aGlzLmRp
c3BsYXlJbkhlYnJld1NjcmlwdCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgbG9jYWxlID0g
bmV3IExvY2FsZSgnaGUnKS5tYXhpbWl6ZWRMb2NhbGUoKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0
KGxvY2FsZS5kaXNwbGF5TGFuZ3VhZ2UoKSwgJ9ei15HXqNeZ16onKTsKKyAgICAgICAgcmVwb3J0
UmVzdWx0KGxvY2FsZS5kaXNwbGF5U2NyaXB0KCksICfXoteR16jXmScpOworICAgICAgICByZXBv
cnRSZXN1bHQobG9jYWxlLmRpc3BsYXlSZWdpb24oKSwgJ9eZ16nXqNeQ15wnKTsKKyAgICAgICAg
cmVwb3J0UmVzdWx0KGxvY2FsZS5kaXNwbGF5TmFtZSgpLCAn16LXkdeo15nXqiAo16LXkdeo15ks
INeZ16nXqNeQ15wpJyk7CisgICAgfTsKK307CisKKyhmdW5jdGlvbigpIHsKKyAgICB2YXIgYWxs
VGVzdHMgPSBuZXcgbG9jYWxlVGVzdHMoKTsKKyAgICBmb3IgKHZhciB0ZXN0IGluIGFsbFRlc3Rz
KSB7CisgICAgICAgIGFsbFRlc3RzW3Rlc3RdKCk7CisgICAgfQorfSkoKTsKKwordmFyIHN1Y2Nl
c3NmdWxseVBhcnNlZCA9IHRydWU7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDog
TGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQJKHJldmlzaW9uIDcxODYzKQorKysgTGF5b3V0VGVzdHMv
cGxhdGZvcm0vZ3RrL1NraXBwZWQJKHdvcmtpbmcgY29weSkKQEAgLTI3MzcsNiArMjczNyw5IEBA
IGZhc3QveHNsL3hzbHQtbWlzc2luZy1uYW1lc3BhY2UtaW4teHNsdC4KIGZhc3QveHNsL3hzbHQt
cmVsYXRpdmUtcGF0aC54bWwKIGZhc3QveHNsL3hzbHRfdW5pY29kZS54bWwKIAorIyBUaGlzIHBv
cnQgZG9lc24ndCBzdXBwb3J0IGkxOG4gYmluZGluZ3MgZXh0ZW5zaW9uLgorZmFzdC9qcy9pMThu
LWJpbmRpbmdzLWxvY2FsZS5odG1sCisKICMgVGVzdHMgaW4gaHR0cC8gZGlyZWN0b3J5CiAjICAg
VGVzdHMgZmFpbGluZwogaHR0cC90ZXN0cy9hcHBjYWNoZS9jcmFzaC13aGVuLW5hdmlnYXRpbmct
YXdheS10aGVuLWJhY2suaHRtbApJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBw
ZWQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQJKHJldmlz
aW9uIDcxODYzKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQJKHdvcmtpbmcg
Y29weSkKQEAgLTI3NiwzICsyNzYsNiBAQCBmYXN0L2NhbnZhcy9jYW52YXMtZ2V0SW1hZ2VEYXRh
LW5lZ2F0aXZlCiAKICMgVGltZXMgb3V0IGJlY2F1c2UgcGx1Z2lucyBhcmVuJ3QgYWxsb3dlZCB0
byBleGVjdXRlIEpTIGFmdGVyIE5QUF9EZXN0cm95IGhhcyBiZWVuIGNhbGxlZCBpbiBXZWJLaXQx
J3MgT09QIHBsdWdpbnMgaW1wbGVtZW50YXRpb24gaHR0cDovL3dlYmtpdC5vcmcvYi80ODkyOQog
cGx1Z2lucy9ldmFsdWF0ZS1qcy1hZnRlci1yZW1vdmluZy1wbHVnaW4tZWxlbWVudC5odG1sCisK
KyMgVGhpcyBwb3J0IGRvZXNuJ3Qgc3VwcG9ydCBpMThuIGJpbmRpbmdzIGV4dGVuc2lvbi4KK2Zh
c3QvanMvaTE4bi1iaW5kaW5ncy1sb2NhbGUuaHRtbApJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZv
cm0vcXQvU2tpcHBlZAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lw
cGVkCShyZXZpc2lvbiA3MTg2MykKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQJ
KHdvcmtpbmcgY29weSkKQEAgLTExMCw2ICsxMTAsOSBAQCBmYXN0L3RleHQvaHlwaGVucy5odG1s
CiBpbnNwZWN0b3IvZG9tLWJyZWFrcG9pbnRzLmh0bWwKIGluc3BlY3Rvci9hdWRpdHMtcGFuZWwt
ZnVuY3Rpb25hbC5odG1sCiAKKyMgVGhpcyBwb3J0IGRvZXNuJ3Qgc3VwcG9ydCBpMThuIGJpbmRp
bmdzIGV4dGVuc2lvbi4KK2Zhc3QvanMvaTE4bi1iaW5kaW5ncy1sb2NhbGUuaHRtbAorCiAjID09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PSAjCiAjICAgICAgIFBhc3NpbmcgSFRUUCB0ZXN0cyAtIHJlcXVpcmUg
Y29uZmlybWF0aW9uIG9uIGJvdC4gICAgICAgICAgICAgICAgICAgICAjCiAjID09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PSAjCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAkocmV2aXNpb24gNzE4NjMp
CisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAkod29ya2luZyBjb3B5KQpAQCAt
MTA3NSwzICsxMDc1LDYgQEAgcGx1Z2lucy9pZnJhbWUtc2hpbXMuaHRtbAogCiAjIFJlcXVpcmVz
IFdlYlAgc3VwcG9ydC4KIGZhc3QvaW1hZ2VzL3dlYnAtaW1hZ2UtZGVjb2RpbmcuaHRtbAorCisj
IFRoaXMgcG9ydCBkb2Vzbid0IHN1cHBvcnQgaTE4biBiaW5kaW5ncyBleHRlbnNpb24uCitmYXN0
L2pzL2kxOG4tYmluZGluZ3MtbG9jYWxlLmh0bWwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78264</attachid>
            <date>2011-01-07 13:42:49 -0800</date>
            <delta_ts>2011-01-10 14:22:54 -0800</delta_ts>
            <desc>New patch for i18n API.</desc>
            <filename>i18n-locale.txt</filename>
            <type>text/plain</type>
            <size>22955</size>
            <attacher name="Nebojša Ćirić">cira</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDc1MjYxKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTcgQEAKKzIwMTEtMDEtMDcgIE5lYm9qc2EgQ2lyaWMgIDxjaXJhQGNocm9taXVtLm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1l
bnRzIExvY2FsZSBvYmplY3Qgb2YgSmF2YVNjcmlwdCBpbnRlcm5hdGlvbmFsaXphdGlvbiBBUEkg
cHJvcG9zYWwsIGFzIGFuCisgICAgICAgIHY4IGV4dGVuc2lvbi4gRXh0ZW5zaW9uIGNvZGUgaXMg
aG9zdGVkIGluIHY4IHByb2plY3QgKHNyYy9leHRlbnNpb25zL2V4cGVyaW1lbnRhbC9pMThuLWV4
dGVuc2lvbi57Y2MsaH0pCisgICAgICAgIGFuZCBpbiB0aGlzIHBhdGNoIHdlIGp1c3QgcHJvdmlk
ZSBmbGFncywgdGVzdHMgYW5kIGJ1aWxkIHJ1bGVzIGZvciBjaHJvbWl1bSBwb3J0LgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDk0MTQKKworICAgICAg
ICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmNwcDoKKyAgICAgICAg
KFdlYlByZWZlcmVuY2VzOjpyZXNldCk6CisgICAgICAgIChXZWJQcmVmZXJlbmNlczo6YXBwbHlU
byk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuaDoK
KwogMjAxMS0wMS0wNyAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+CiAKICAgICAgICAg
QnVpbGQgbWFzdGVyIGZpeApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2Vi
UHJlZmVyZW5jZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1dlYlByZWZlcmVuY2VzLmNwcAkocmV2aXNpb24gNzUyNDMpCisrKyBUb29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
NCw2ICsxMDQsOCBAQCB2b2lkIFdlYlByZWZlcmVuY2VzOjpyZXNldCgpCiAgICAgaHlwZXJsaW5r
QXVkaXRpbmdFbmFibGVkID0gZmFsc2U7CiAgICAgYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJs
ZWQgPSBmYWxzZTsKICAgICBhY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZCA9IGZhbHNlOworICAg
IC8vIFRoaXMgZmVhdHVyZSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LCBidXQgbGV0IHRoZSB0ZXN0
cyBydW4uCisgICAganNJMThOQVBJRW5hYmxlZCA9IHRydWU7CiB9CiAKIHZvaWQgV2ViUHJlZmVy
ZW5jZXM6OmFwcGx5VG8oV2ViVmlldyogd2ViVmlldykKQEAgLTE2Miw1ICsxNjQsNiBAQCB2b2lk
IFdlYlByZWZlcmVuY2VzOjphcHBseVRvKFdlYlZpZXcqIHdlCiAgICAgc2V0dGluZ3MtPnNldElt
YWdlc0VuYWJsZWQodHJ1ZSk7CiAgICAgc2V0dGluZ3MtPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdFbmFibGVkKGFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKTsKICAgICBzZXR0aW5ncy0+
c2V0QWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJsZWQoYWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJsZWQp
OworICAgIHNldHRpbmdzLT5zZXRKU0kxOE5BUElFbmFibGVkKGpzSTE4TkFQSUVuYWJsZWQpOwog
fQogCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVu
Y2VzLmgJKHJldmlzaW9uIDc1MjQzKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
V2ViUHJlZmVyZW5jZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNzksNiArNzksNyBAQCBzdHJ1Y3Qg
V2ViUHJlZmVyZW5jZXMgewogICAgIGJvb2wgY2FyZXRCcm93c2luZ0VuYWJsZWQ7CiAgICAgYm9v
bCBhY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZDsKICAgICBib29sIGFjY2VsZXJhdGVkMmRD
YW52YXNFbmFibGVkOworICAgIGJvb2wganNJMThOQVBJRW5hYmxlZDsKIAogICAgIFdlYlByZWZl
cmVuY2VzKCkgeyByZXNldCgpOyB9CiAgICAgdm9pZCByZXNldCgpOwpJbmRleDogV2ViQ29yZS9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1MjYx
KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMyBAQAor
MjAxMS0wMS0wNyAgTmVib2pzYSBDaXJpYyAgPGNpcmFAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudHMgTG9jYWxl
IG9iamVjdCBvZiBKYXZhU2NyaXB0IGludGVybmF0aW9uYWxpemF0aW9uIEFQSSBwcm9wb3NhbCwg
YXMgYW4KKyAgICAgICAgdjggZXh0ZW5zaW9uLiBFeHRlbnNpb24gY29kZSBpcyBob3N0ZWQgaW4g
djggcHJvamVjdCAoc3JjL2V4dGVuc2lvbnMvZXhwZXJpbWVudGFsL2kxOG4tZXh0ZW5zaW9uLntj
YyxofSkKKyAgICAgICAgYW5kIGluIHRoaXMgcGF0Y2ggd2UganVzdCBwcm92aWRlIGZsYWdzLCB0
ZXN0cyBhbmQgYnVpbGQgcnVsZXMgZm9yIGNocm9taXVtIHBvcnQuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTQxNAorCisgICAgICAgIFRlc3Q6IGZh
c3QvanMvaTE4bi1iaW5kaW5ncy1sb2NhbGUuaHRtbAorCisgICAgICAgICogV2ViQ29yZS5neXAv
V2ViQ29yZS5neXA6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxsOjpjcmVhdGVOZXdDb250ZXh0KToK
KyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdz
OjpTZXR0aW5ncyk6CisgICAgICAgICogcGFnZS9TZXR0aW5ncy5oOgorICAgICAgICAoV2ViQ29y
ZTo6U2V0dGluZ3M6OnNldEpTSTE4TkFQSUVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2V0
dGluZ3M6OmdldEpTSTE4TkFQSUVuYWJsZWQpOgorCiAyMDExLTAxLTA3ICBOYXRlIENoYXBpbiAg
PGphcGhldEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVy
LgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCShyZXZpc2lvbiA3NTI1MCkKKysrIFdlYkNv
cmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAJKHdvcmtpbmcgY29weSkKQEAgLTEzOTcsNiArMTM5
NywxNCBAQAogICAgICAgICAgICAgWydleGNsdWRlJywgJy8oV2luZG93c3xVbmlzY3JpYmUpW14v
XSpcXC5jcHAkJ10KICAgICAgICAgICBdLAogICAgICAgICB9XSwKKyAgICAgICAgWydqYXZhc2Ny
aXB0X2VuZ2luZT09InY4IicsIHsKKyAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWworICAgICAg
ICAgICAgJ2V4cGVyaW1lbnRhbF9pMThuX2FwaScsCisgICAgICAgICAgXSwKKyAgICAgICAgICAn
ZGVmaW5lcyc6IFsKKyAgICAgICAgICAgICdVU0lOR19FWFBFUklNRU5UQUxfSTE4Tl9BUEk9MScs
CisgICAgICAgICAgXSwKKyAgICAgICAgfV0sCiAgICAgICBdLAogICAgIH0sCiAgICAgewpAQCAt
MTQ4Nyw1ICsxNDk1LDIxIEBACiAgICAgICAgIH1dLAogICAgICAgXSwKICAgICB9LAorICAgIHsK
KyAgICAgICd0YXJnZXRfbmFtZSc6ICdleHBlcmltZW50YWxfaTE4bl9hcGknLAorICAgICAgJ3R5
cGUnOiAnPChsaWJyYXJ5KScsCisgICAgICAnc291cmNlcyc6IFsKKyAgICAgICAgJzwoY2hyb21p
dW1fc3JjX2Rpcikvdjgvc3JjL2V4dGVuc2lvbnMvZXhwZXJpbWVudGFsL2kxOG4tZXh0ZW5zaW9u
LmNjJywKKyAgICAgICAgJzwoY2hyb21pdW1fc3JjX2Rpcikvdjgvc3JjL2V4dGVuc2lvbnMvZXhw
ZXJpbWVudGFsL2kxOG4tZXh0ZW5zaW9uLmgnLAorICAgICAgXSwKKyAgICAgICdpbmNsdWRlX2Rp
cnMnOiBbCisgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3RoaXJkX3BhcnR5L2ljdS9wdWJs
aWMvY29tbW9uJywKKyAgICAgICAgJzwoY2hyb21pdW1fc3JjX2Rpcikvdjgvc3JjJywKKyAgICAg
IF0sCisgICAgICAnZGVwZW5kZW5jaWVzJzogWworICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGly
KS90aGlyZF9wYXJ0eS9pY3UvaWN1Lmd5cDoqJywKKyAgICAgICAgJzwoY2hyb21pdW1fc3JjX2Rp
cikvdjgvdG9vbHMvZ3lwL3Y4Lmd5cDp2OCcsCisgICAgICBdLAorICAgIH0sCiAgIF0sICAjIHRh
cmdldHMKIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmNwcAko
cmV2aXNpb24gNzUyNTApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSwxMSBAQAogI2luY2x1ZGUgPHV0aWxpdHk+
CiAjaW5jbHVkZSA8djgtZGVidWcuaD4KICNpbmNsdWRlIDx2OC5oPgorCisjaWZkZWYgVVNJTkdf
RVhQRVJJTUVOVEFMX0kxOE5fQVBJCisjaW5jbHVkZSA8djgvc3JjL2V4dGVuc2lvbnMvZXhwZXJp
bWVudGFsL2kxOG4tZXh0ZW5zaW9uLmg+CisjZW5kaWYKKwogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+CiAjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExp
YkV4dHJhcy5oPgpAQCAtMzMxLDYgKzMzNiwxMiBAQCB2ODo6UGVyc2lzdGVudDx2ODo6Q29udGV4
dD4gVjhET01XaW5kb3dTCiAgICAgaWYgKCFWOFByb3h5OjpyZWdpc3RlcmVkRXh0ZW5zaW9uV2l0
aFY4KERhdGVFeHRlbnNpb246OmdldCgpKSkKICAgICAgICAgVjhQcm94eTo6cmVnaXN0ZXJFeHRl
bnNpb24oRGF0ZUV4dGVuc2lvbjo6Z2V0KCkpOwogCisjaWZkZWYgVVNJTkdfRVhQRVJJTUVOVEFM
X0kxOE5fQVBJCisgICAgLy8gRW5hYmxlcyBleHBlcmltZW50YWwgaTE4biBBUEkgaW4gVjguCisg
ICAgaWYgKG1fZnJhbWUtPnNldHRpbmdzKCktPmdldEpTSTE4TkFQSUVuYWJsZWQoKSAmJiAhVjhQ
cm94eTo6cmVnaXN0ZXJlZEV4dGVuc2lvbldpdGhWOCh2ODo6aW50ZXJuYWw6OkkxOE5FeHRlbnNp
b246OmdldCgpKSkKKyAgICAgICAgVjhQcm94eTo6cmVnaXN0ZXJFeHRlbnNpb24odjg6OmludGVy
bmFsOjpJMThORXh0ZW5zaW9uOjpnZXQoKSk7CisjZW5kaWYKKwogICAgIC8vIER5bmFtaWNhbGx5
IHRlbGwgdjggYWJvdXQgb3VyIGV4dGVuc2lvbnMgbm93LgogICAgIGNvbnN0IFY4RXh0ZW5zaW9u
cyYgZXh0ZW5zaW9ucyA9IFY4UHJveHk6OmV4dGVuc2lvbnMoKTsKICAgICBPd25BcnJheVB0cjxj
b25zdCBjaGFyKj4gZXh0ZW5zaW9uTmFtZXMobmV3IGNvbnN0IGNoYXIqW2V4dGVuc2lvbnMuc2l6
ZSgpXSk7CkluZGV4OiBXZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAJKHJldmlzaW9uIDc1MjUwKQorKysgV2ViQ29yZS9wYWdl
L1NldHRpbmdzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDYgKzE3MCw3IEBAIFNldHRpbmdz
OjpTZXR0aW5ncyhQYWdlKiBwYWdlKQogICAgICwgbV91c2VQcmVIVE1MNVBhcnNlclF1aXJrcyhm
YWxzZSkKICAgICAsIG1faHlwZXJsaW5rQXVkaXRpbmdFbmFibGVkKGZhbHNlKQogICAgICwgbV9j
cm9zc09yaWdpbkNoZWNrSW5HZXRNYXRjaGVkQ1NTUnVsZXNEaXNhYmxlZChmYWxzZSkKKyAgICAs
IG1fanNJMThOQVBJRW5hYmxlZChmYWxzZSkKIHsKICAgICAvLyBBIEZyYW1lIG1heSBub3QgaGF2
ZSBiZWVuIGNyZWF0ZWQgeWV0LCBzbyB3ZSBpbml0aWFsaXplIHRoZSBBdG9taWNTdHJpbmcgCiAg
ICAgLy8gaGFzaCBiZWZvcmUgdHJ5aW5nIHRvIHVzZSBpdC4KSW5kZXg6IFdlYkNvcmUvcGFnZS9T
ZXR0aW5ncy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9TZXR0aW5ncy5oCShyZXZpc2lv
biA3NTI1MCkKKysrIFdlYkNvcmUvcGFnZS9TZXR0aW5ncy5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NTMsNiArMzUzLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHNldENyb3Nz
T3JpZ2luQ2hlY2tJbkdldE1hdGNoZWRDU1NSdWxlc0Rpc2FibGVkKGJvb2wgZmxhZykgeyBtX2Ny
b3NzT3JpZ2luQ2hlY2tJbkdldE1hdGNoZWRDU1NSdWxlc0Rpc2FibGVkID0gZmxhZzsgfQogICAg
ICAgICBib29sIGNyb3NzT3JpZ2luQ2hlY2tJbkdldE1hdGNoZWRDU1NSdWxlc0Rpc2FibGVkKCkg
Y29uc3QgeyByZXR1cm4gbV9jcm9zc09yaWdpbkNoZWNrSW5HZXRNYXRjaGVkQ1NTUnVsZXNEaXNh
YmxlZDsgfQogCisgICAgICAgIHZvaWQgc2V0SlNJMThOQVBJRW5hYmxlZChib29sIGZsYWcpIHsg
bV9qc0kxOE5BUElFbmFibGVkID0gZmxhZzsgfQorICAgICAgICBib29sIGdldEpTSTE4TkFQSUVu
YWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2pzSTE4TkFQSUVuYWJsZWQ7IH0KKwogICAgIHByaXZh
dGU6CiAgICAgICAgIFBhZ2UqIG1fcGFnZTsKIApAQCAtNDQ3LDYgKzQ1MCw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX3VzZVByZUhUTUw1UGFyc2VyUXVpcmtzOiAxOwog
ICAgICAgICBib29sIG1faHlwZXJsaW5rQXVkaXRpbmdFbmFibGVkIDogMTsKICAgICAgICAgYm9v
bCBtX2Nyb3NzT3JpZ2luQ2hlY2tJbkdldE1hdGNoZWRDU1NSdWxlc0Rpc2FibGVkIDogMTsKKyAg
ICAgICAgYm9vbCBtX2pzSTE4TkFQSUVuYWJsZWQgOiAxOwogCiAjaWYgVVNFKFNBRkFSSV9USEVN
RSkKICAgICAgICAgc3RhdGljIGJvb2wgZ1Nob3VsZFBhaW50TmF0aXZlQ29udHJvbHM7CkluZGV4
OiBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1MjYxKQorKysgV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDExLTAxLTA3ICBOZWJvanNhIENp
cmljICA8Y2lyYUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50cyBMb2NhbGUgb2JqZWN0IG9mIEphdmFTY3JpcHQg
aW50ZXJuYXRpb25hbGl6YXRpb24gQVBJIHByb3Bvc2FsLCBhcyBhbgorICAgICAgICB2OCBleHRl
bnNpb24uIEV4dGVuc2lvbiBjb2RlIGlzIGhvc3RlZCBpbiB2OCBwcm9qZWN0IChzcmMvZXh0ZW5z
aW9ucy9leHBlcmltZW50YWwvaTE4bi1leHRlbnNpb24ue2NjLGh9KQorICAgICAgICBhbmQgaW4g
dGhpcyBwYXRjaCB3ZSBqdXN0IHByb3ZpZGUgZmxhZ3MsIHRlc3RzIGFuZCBidWlsZCBydWxlcyBm
b3IgY2hyb21pdW0gcG9ydC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQ5NDE0CisKKyAgICAgICAgKiBwdWJsaWMvV2ViU2V0dGluZ3MuaDoKKyAgICAg
ICAgKiBzcmMvV2ViU2V0dGluZ3NJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViU2V0dGlu
Z3NJbXBsOjpzZXRKU0kxOE5BUElFbmFibGVkKToKKyAgICAgICAgKiBzcmMvV2ViU2V0dGluZ3NJ
bXBsLmg6CisKIDIwMTEtMDEtMDUgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJ1c3NlbGwuCkluZGV4OiBXZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYlNldHRpbmdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJTZXR0aW5ncy5oCShyZXZpc2lvbiA3NTI1MCkKKysrIFdlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViU2V0dGluZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDYgKzEwMiw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0TWVtb3J5SW5mb0VuYWJsZWQoYm9vbCkgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBzZXRIeXBlcmxpbmtBdWRpdGluZ0VuYWJsZWQoYm9vbCkgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBzZXRDYXJldEJyb3dzaW5nRW5hYmxlZChib29sKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHNldEpTSTE4TkFQSUVuYWJsZWQoYm9vbCkgPSAwOwogCiBwcm90ZWN0ZWQ6CiAg
ICAgfldlYlNldHRpbmdzKCkgeyB9CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRp
bmdzSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5n
c0ltcGwuY3BwCShyZXZpc2lvbiA3NTI1MCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0
dGluZ3NJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI5LDQgKzMyOSw5IEBAIHZvaWQgV2Vi
U2V0dGluZ3NJbXBsOjpzZXRDYXJldEJyb3dzaW5nRW4KICAgICBtX3NldHRpbmdzLT5zZXRDYXJl
dEJyb3dzaW5nRW5hYmxlZChlbmFibGVkKTsKIH0KIAordm9pZCBXZWJTZXR0aW5nc0ltcGw6OnNl
dEpTSTE4TkFQSUVuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIG1fc2V0dGluZ3MtPnNldEpT
STE4TkFQSUVuYWJsZWQoZW5hYmxlZCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRl
eDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5oCShyZXZpc2lvbiA3NTI1MCkKKysr
IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAg
LTk3LDYgKzk3LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRNZW1vcnlJbmZvRW5h
YmxlZChib29sKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0SHlwZXJsaW5rQXVkaXRpbmdFbmFibGVk
KGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRDYXJldEJyb3dzaW5nRW5hYmxlZChib29sKTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0SlNJMThOQVBJRW5hYmxlZChib29sKTsKIAogcHJpdmF0ZToK
ICAgICBXZWJDb3JlOjpTZXR0aW5ncyogbV9zZXR0aW5nczsKSW5kZXg6IExheW91dFRlc3RzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1
MjYxKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MzggQEAKKzIwMTEtMDEtMDcgIE5lYm9qc2EgQ2lyaWMgIDxjaXJhQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnRz
IExvY2FsZSBvYmplY3Qgb2YgSmF2YVNjcmlwdCBpbnRlcm5hdGlvbmFsaXphdGlvbiBBUEkgcHJv
cG9zYWwsIGFzIGFuCisgICAgICAgIHY4IGV4dGVuc2lvbi4gRXh0ZW5zaW9uIGNvZGUgaXMgaG9z
dGVkIGluIHY4IHByb2plY3QgKHNyYy9leHRlbnNpb25zL2V4cGVyaW1lbnRhbC9pMThuLWV4dGVu
c2lvbi57Y2MsaH0pCisgICAgICAgIGFuZCBpbiB0aGlzIHBhdGNoIHdlIGp1c3QgcHJvdmlkZSBm
bGFncywgdGVzdHMgYW5kIGJ1aWxkIHJ1bGVzIGZvciBjaHJvbWl1bSBwb3J0LgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDk0MTQKKworICAgICAgICAq
IGZhc3QvanMvaTE4bi1iaW5kaW5ncy1sb2NhbGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L2pzL2kxOG4tYmluZGluZ3MtbG9jYWxlLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGZhc3QvanMvc2NyaXB0LXRlc3RzL2kxOG4tYmluZGluZ3MtbG9jYWxlLmpzOiBBZGRlZC4KKyAg
ICAgICAgKHJlcG9ydFJlc3VsdCk6CisgICAgICAgIChsb2NhbGVUZXN0cy50aGlzLmRlZmF1bHRM
b2NhbGUpOgorICAgICAgICAobG9jYWxlVGVzdHMudGhpcy5iYXNlTG9jYWxlKToKKyAgICAgICAg
KGxvY2FsZVRlc3RzLnRoaXMubGFuZ3VhZ2VTY3JpcHRMb2NhbGUpOgorICAgICAgICAobG9jYWxl
VGVzdHMudGhpcy5sYW5ndWFnZVNjcmlwdFJlZ2lvbkxvY2FsZSk6CisgICAgICAgIChsb2NhbGVU
ZXN0cy50aGlzLmxhbmd1YWdlU2NyaXB0UmVnaW9uRXh0ZW5zaW9uTG9jYWxlKToKKyAgICAgICAg
KGxvY2FsZVRlc3RzLnRoaXMubGFuZ3VhZ2VTY3JpcHRSZWdpb25EYXNoVUV4dGVuc2lvbkxvY2Fs
ZSk6CisgICAgICAgIChsb2NhbGVUZXN0cy50aGlzLmF2YWlsYWJsZUxvY2FsZXMpOgorICAgICAg
ICAobG9jYWxlVGVzdHMudGhpcy5tYXhpbWl6ZWRMb2NhbGUpOgorICAgICAgICAobG9jYWxlVGVz
dHMudGhpcy5tYXhpbWl6ZWRMb2NhbGVXaXRoRXh0ZW5zaW9uKToKKyAgICAgICAgKGxvY2FsZVRl
c3RzLnRoaXMubWluaW1pemVkTG9jYWxlKToKKyAgICAgICAgKGxvY2FsZVRlc3RzLnRoaXMubWlu
aW1pemVkTG9jYWxlV2l0aEV4dGVuc2lvbik6CisgICAgICAgIChsb2NhbGVUZXN0cy50aGlzLmRp
c3BsYXlGb3JCYXNlTG9jYWxlKToKKyAgICAgICAgKGxvY2FsZVRlc3RzLnRoaXMuZGlzcGxheUlu
U2FtZUxvY2FsZSk6CisgICAgICAgIChsb2NhbGVUZXN0cy50aGlzLmRpc3BsYXlJbkRpZmZlcmVu
dExvY2FsZSk6CisgICAgICAgIChsb2NhbGVUZXN0cy50aGlzLmRpc3BsYXlJbkN5cmlsbGljU2Ny
aXB0KToKKyAgICAgICAgKGxvY2FsZVRlc3RzLnRoaXMuZGlzcGxheUluSGVicmV3U2NyaXB0KToK
KyAgICAgICAgKGxvY2FsZVRlc3RzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2tpcHBlZDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9T
a2lwcGVkOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9Ta2lwcGVkOgorCiAyMDExLTAxLTA3ICBO
YXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RGFyaW4gRmlzaGVyLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9pMThuLWJpbmRpbmdzLWxv
Y2FsZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9pMThu
LWJpbmRpbmdzLWxvY2FsZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9mYXN0L2pzL2kxOG4tYmluZGluZ3MtbG9jYWxlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw3MSBAQAorVGhpcyB0ZXN0IGNoZWNrcyBwcm9wZXJ0aWVzIGFuZCBtZXRob2Rz
IG9mIExvY2FsZSBvYmplY3QuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBv
ZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNT
IGVuLVVTIGlzIGVuLVVTCitQQVNTIGVuIGlzIGVuCitQQVNTIHVuZGVmaW5lZCBpcyB1bmRlZmlu
ZWQKK1BBU1MgVVMgaXMgVVMKK1BBU1Mgc3IgaXMgc3IKK1BBU1Mgc3IgaXMgc3IKK1BBU1MgdW5k
ZWZpbmVkIGlzIHVuZGVmaW5lZAorUEFTUyB1bmRlZmluZWQgaXMgdW5kZWZpbmVkCitQQVNTIHpo
LUhhbnMgaXMgemgtSGFucworUEFTUyB6aCBpcyB6aAorUEFTUyBIYW5zIGlzIEhhbnMKK1BBU1Mg
dW5kZWZpbmVkIGlzIHVuZGVmaW5lZAorUEFTUyB6aC1IYW5zLUNOIGlzIHpoLUhhbnMtQ04KK1BB
U1MgemggaXMgemgKK1BBU1MgSGFucyBpcyBIYW5zCitQQVNTIENOIGlzIENOCitQQVNTIGRlLURF
QGNvbGxhdGlvbj1waG9uZSBpcyBkZS1ERUBjb2xsYXRpb249cGhvbmUKK1BBU1MgZGUgaXMgZGUK
K1BBU1MgdW5kZWZpbmVkIGlzIHVuZGVmaW5lZAorUEFTUyBERSBpcyBERQorUEFTUyBkZS1ERS11
LWNvLXBob25lYm9vayBpcyBkZS1ERS11LWNvLXBob25lYm9vaworUEFTUyBkZSBpcyBkZQorUEFT
UyB1bmRlZmluZWQgaXMgdW5kZWZpbmVkCitQQVNTIERFIGlzIERFCitQQVNTIHRydWUgaXMgdHJ1
ZQorUEFTUyB0cnVlIGlzIHRydWUKK1BBU1Mgc3ItQ3lybC1SUyBpcyBzci1DeXJsLVJTCitQQVNT
IHNyIGlzIHNyCitQQVNTIEN5cmwgaXMgQ3lybAorUEFTUyBSUyBpcyBSUworUEFTUyBkZS1MYXRu
LURFQGNvbGxhdGlvbj1waG9uZSBpcyBkZS1MYXRuLURFQGNvbGxhdGlvbj1waG9uZQorUEFTUyBk
ZSBpcyBkZQorUEFTUyBMYXRuIGlzIExhdG4KK1BBU1MgREUgaXMgREUKK1BBU1Mgc3IgaXMgc3IK
K1BBU1Mgc3IgaXMgc3IKK1BBU1MgdW5kZWZpbmVkIGlzIHVuZGVmaW5lZAorUEFTUyB1bmRlZmlu
ZWQgaXMgdW5kZWZpbmVkCitQQVNTIGRlLUBjb2xsYXRpb249cGhvbmUgaXMgZGUtQGNvbGxhdGlv
bj1waG9uZQorUEFTUyBkZSBpcyBkZQorUEFTUyB1bmRlZmluZWQgaXMgdW5kZWZpbmVkCitQQVNT
IHVuZGVmaW5lZCBpcyB1bmRlZmluZWQKK1BBU1MgRW5nbGlzaCBpcyBFbmdsaXNoCitQQVNTIHVu
ZGVmaW5lZCBpcyB1bmRlZmluZWQKK1BBU1MgdW5kZWZpbmVkIGlzIHVuZGVmaW5lZAorUEFTUyBF
bmdsaXNoIGlzIEVuZ2xpc2gKK1BBU1MgRW5nbGlzaCBpcyBFbmdsaXNoCitQQVNTIExhdGluIGlz
IExhdGluCitQQVNTIFVuaXRlZCBTdGF0ZXMgaXMgVW5pdGVkIFN0YXRlcworUEFTUyBFbmdsaXNo
IChMYXRpbiwgVW5pdGVkIFN0YXRlcykgaXMgRW5nbGlzaCAoTGF0aW4sIFVuaXRlZCBTdGF0ZXMp
CitQQVNTIFNlcmJpYW4gaXMgU2VyYmlhbgorUEFTUyBDeXJpbGxpYyBpcyBDeXJpbGxpYworUEFT
UyBTZXJiaWEgaXMgU2VyYmlhCitQQVNTIFNlcmJpYW4gKEN5cmlsbGljLCBTZXJiaWEpIGlzIFNl
cmJpYW4gKEN5cmlsbGljLCBTZXJiaWEpCitQQVNTINCh0YDQv9GB0LrQuCBpcyDQodGA0L/RgdC6
0LgKK1BBU1Mg0IvQuNGA0LjQu9C40YbQsCBpcyDQi9C40YDQuNC70LjRhtCwCitQQVNTINCh0YDQ
sdC40ZjQsCBpcyDQodGA0LHQuNGY0LAKK1BBU1Mg0KHRgNC/0YHQutC4ICjQi9C40YDQuNC70LjR
htCwLCDQodGA0LHQuNGY0LApIGlzINCh0YDQv9GB0LrQuCAo0IvQuNGA0LjQu9C40YbQsCwg0KHR
gNCx0LjRmNCwKQorUEFTUyDXoteR16jXmdeqIGlzINei15HXqNeZ16oKK1BBU1Mg16LXkdeo15kg
aXMg16LXkdeo15kKK1BBU1Mg15nXqdeo15DXnCBpcyDXmdep16jXkNecCitQQVNTINei15HXqNeZ
16ogKNei15HXqNeZLCDXmdep16jXkNecKSBpcyDXoteR16jXmdeqICjXoteR16jXmSwg15nXqdeo
15DXnCkKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQor
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL2kxOG4tYmluZGluZ3MtbG9jYWxlLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9pMThuLWJpbmRpbmdzLWxvY2FsZS5odG1s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9pMThuLWJpbmRpbmdzLWxvY2Fs
ZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0IEBACis8IURPQ1RZUEUgSFRNTCBQVUJM
SUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1l
cXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIC8+
Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InJlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNz
cyI+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xl
Ij48L2Rpdj4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvaTE4bi1iaW5kaW5ncy1sb2NhbGUu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwv
c2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9zY3Jp
cHQtdGVzdHMvaTE4bi1iaW5kaW5ncy1sb2NhbGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9qcy9zY3JpcHQtdGVzdHMvaTE4bi1iaW5kaW5ncy1sb2NhbGUuanMJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3NjcmlwdC10ZXN0cy9pMThuLWJpbmRpbmdzLWxv
Y2FsZS5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTEgQEAKK2Rlc2NyaXB0aW9uKAorCisi
VGhpcyB0ZXN0IGNoZWNrcyBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzIG9mIExvY2FsZSBvYmplY3Qu
IgorCispOworCitmdW5jdGlvbiByZXBvcnRSZXN1bHQoX2FjdHVhbCwgX2V4cGVjdGVkKSB7Cisg
ICAgaWYgKGlzUmVzdWx0Q29ycmVjdChfYWN0dWFsLCBfZXhwZWN0ZWQpKQorICAgICAgICB0ZXN0
UGFzc2VkKF9hY3R1YWwgKyAnIGlzICcgKyBfZXhwZWN0ZWQpOworICAgIGVsc2UKKyAgICAgICAg
dGVzdEZhaWxlZChfYWN0dWFsICsgJyBzaG91bGQgYmUgJyArIF9leHBlY3RlZCk7Cit9CisKK2xv
Y2FsZVRlc3RzID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5kZWZhdWx0TG9jYWxlID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIHZhciBsb2NhbGUgPSBuZXcgTG9jYWxlKCk7CisgICAgICAgIHJlcG9y
dFJlc3VsdChsb2NhbGUubG9jYWxlLCAnZW4tVVMnKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxv
Y2FsZS5sYW5ndWFnZSwgJ2VuJyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUuc2NyaXB0
LCB1bmRlZmluZWQpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLnJlZ2lvbiwgJ1VTJyk7
CisgICAgfTsKKworICAgIHRoaXMuYmFzZUxvY2FsZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2
YXIgbG9jYWxlID0gbmV3IExvY2FsZSgnc3InKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2Fs
ZS5sb2NhbGUsICdzcicpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLmxhbmd1YWdlLCAn
c3InKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5zY3JpcHQsIHVuZGVmaW5lZCk7Cisg
ICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUucmVnaW9uLCB1bmRlZmluZWQpOworICAgIH07CisK
KyAgICB0aGlzLmxhbmd1YWdlU2NyaXB0TG9jYWxlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZh
ciBsb2NhbGUgPSBuZXcgTG9jYWxlKCd6aC1IYW5zJyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChs
b2NhbGUubG9jYWxlLCAnemgtSGFucycpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLmxh
bmd1YWdlLCAnemgnKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5zY3JpcHQsICdIYW5z
Jyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUucmVnaW9uLCB1bmRlZmluZWQpOworICAg
IH07CisKKyAgICB0aGlzLmxhbmd1YWdlU2NyaXB0UmVnaW9uTG9jYWxlID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHZhciBsb2NhbGUgPSBuZXcgTG9jYWxlKCd6aC1IYW5zLUNOJyk7CisgICAgICAg
IHJlcG9ydFJlc3VsdChsb2NhbGUubG9jYWxlLCAnemgtSGFucy1DTicpOworICAgICAgICByZXBv
cnRSZXN1bHQobG9jYWxlLmxhbmd1YWdlLCAnemgnKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxv
Y2FsZS5zY3JpcHQsICdIYW5zJyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUucmVnaW9u
LCAnQ04nKTsKKyAgICB9OworCisgICAgdGhpcy5sYW5ndWFnZVNjcmlwdFJlZ2lvbkV4dGVuc2lv
bkxvY2FsZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgbG9jYWxlID0gbmV3IExvY2FsZSgn
ZGUtREVAY29sbGF0aW9uPXBob25lJyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUubG9j
YWxlLCAnZGUtREVAY29sbGF0aW9uPXBob25lJyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2Nh
bGUubGFuZ3VhZ2UsICdkZScpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLnNjcmlwdCwg
dW5kZWZpbmVkKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5yZWdpb24sICdERScpOwor
ICAgIH07CisKKyAgICB0aGlzLmxhbmd1YWdlU2NyaXB0UmVnaW9uRGFzaFVFeHRlbnNpb25Mb2Nh
bGUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGxvY2FsZSA9IG5ldyBMb2NhbGUoJ2RlLURF
LXUtY28tcGhvbmVib29rJyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUubG9jYWxlLCAn
ZGUtREUtdS1jby1waG9uZWJvb2snKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5sYW5n
dWFnZSwgJ2RlJyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUuc2NyaXB0LCB1bmRlZmlu
ZWQpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLnJlZ2lvbiwgJ0RFJyk7CisgICAgfTsK
KyAgCisgICAgdGhpcy5hdmFpbGFibGVMb2NhbGVzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZh
ciBsb2NhbGVzID0gTG9jYWxlLmF2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICAgICAgcmVwb3J0UmVz
dWx0KGxvY2FsZXMubGVuZ3RoID4gMTAwLCB0cnVlKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxv
Y2FsZXMuam9pbigpLmluZGV4T2YoJ3NyJykgPj0gMCwgdHJ1ZSk7CisgICAgfTsKKyAgCisgICAg
dGhpcy5tYXhpbWl6ZWRMb2NhbGUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGxvY2FsZSA9
IG5ldyBMb2NhbGUoJ3NyJykubWF4aW1pemVkTG9jYWxlKCk7CisgICAgICAgIHJlcG9ydFJlc3Vs
dChsb2NhbGUubG9jYWxlLCAnc3ItQ3lybC1SUycpOworICAgICAgICByZXBvcnRSZXN1bHQobG9j
YWxlLmxhbmd1YWdlLCAnc3InKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5zY3JpcHQs
ICdDeXJsJyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUucmVnaW9uLCAnUlMnKTsKKyAg
ICB9OworICAKKyAgICB0aGlzLm1heGltaXplZExvY2FsZVdpdGhFeHRlbnNpb24gPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgdmFyIGxvY2FsZSA9IG5ldyBMb2NhbGUoJ2RlQGNvbGxhdGlvbj1waG9u
ZScpLm1heGltaXplZExvY2FsZSgpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLmxvY2Fs
ZSwgJ2RlLUxhdG4tREVAY29sbGF0aW9uPXBob25lJyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChs
b2NhbGUubGFuZ3VhZ2UsICdkZScpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLnNjcmlw
dCwgJ0xhdG4nKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5yZWdpb24sICdERScpOwor
ICAgIH07CisgIAorICAgIHRoaXMubWluaW1pemVkTG9jYWxlID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIHZhciBsb2NhbGUgPSBuZXcgTG9jYWxlKCdzci1DeXJsLVJTJykubWluaW1pemVkTG9jYWxl
KCk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUubG9jYWxlLCAnc3InKTsKKyAgICAgICAg
cmVwb3J0UmVzdWx0KGxvY2FsZS5sYW5ndWFnZSwgJ3NyJyk7CisgICAgICAgIHJlcG9ydFJlc3Vs
dChsb2NhbGUuc2NyaXB0LCB1bmRlZmluZWQpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxl
LnJlZ2lvbiwgdW5kZWZpbmVkKTsKKyAgICB9OworICAKKyAgICB0aGlzLm1pbmltaXplZExvY2Fs
ZVdpdGhFeHRlbnNpb24gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGxvY2FsZSA9IG5ldyBM
b2NhbGUoJ2RlLUxhdG4tREVAY29sbGF0aW9uPXBob25lJykubWluaW1pemVkTG9jYWxlKCk7Cisg
ICAgICAgIC8vIEZJWE1FOiBGaXggSUNVIHRvIHJldHVybiBkZUBjb2xsYXRpb249cGhvbmUuCisg
ICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUubG9jYWxlLCAnZGUtQGNvbGxhdGlvbj1waG9uZScp
OworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLmxhbmd1YWdlLCAnZGUnKTsKKyAgICAgICAg
cmVwb3J0UmVzdWx0KGxvY2FsZS5zY3JpcHQsIHVuZGVmaW5lZCk7CisgICAgICAgIHJlcG9ydFJl
c3VsdChsb2NhbGUucmVnaW9uLCB1bmRlZmluZWQpOworICAgIH07CisgICAgCisgICAgdGhpcy5k
aXNwbGF5Rm9yQmFzZUxvY2FsZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgbG9jYWxlID0g
bmV3IExvY2FsZSgnZW4nKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5kaXNwbGF5TGFu
Z3VhZ2UoKSwgJ0VuZ2xpc2gnKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5kaXNwbGF5
U2NyaXB0KCksIHVuZGVmaW5lZCk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUuZGlzcGxh
eVJlZ2lvbigpLCB1bmRlZmluZWQpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLmRpc3Bs
YXlOYW1lKCksICdFbmdsaXNoJyk7CisgICAgfTsKKyAgCisgICAgdGhpcy5kaXNwbGF5SW5TYW1l
TG9jYWxlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBsb2NhbGUgPSBuZXcgTG9jYWxlKCdl
bicpLm1heGltaXplZExvY2FsZSgpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLmRpc3Bs
YXlMYW5ndWFnZSgpLCAnRW5nbGlzaCcpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLmRp
c3BsYXlTY3JpcHQoKSwgJ0xhdGluJyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUuZGlz
cGxheVJlZ2lvbigpLCAnVW5pdGVkIFN0YXRlcycpOworICAgICAgICByZXBvcnRSZXN1bHQobG9j
YWxlLmRpc3BsYXlOYW1lKCksICdFbmdsaXNoIChMYXRpbiwgVW5pdGVkIFN0YXRlcyknKTsKKyAg
ICB9OworICAKKyAgICB0aGlzLmRpc3BsYXlJbkRpZmZlcmVudExvY2FsZSA9IGZ1bmN0aW9uKCkg
eworICAgICAgICB2YXIgbG9jYWxlID0gbmV3IExvY2FsZSgnc3InKS5tYXhpbWl6ZWRMb2NhbGUo
KTsKKyAgICAgICAgdmFyIGRpc3BsYXlMb2NhbGUgPSBuZXcgTG9jYWxlKCdlbicpOworICAgICAg
ICByZXBvcnRSZXN1bHQobG9jYWxlLmRpc3BsYXlMYW5ndWFnZShkaXNwbGF5TG9jYWxlKSwgJ1Nl
cmJpYW4nKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5kaXNwbGF5U2NyaXB0KGRpc3Bs
YXlMb2NhbGUpLCAnQ3lyaWxsaWMnKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5kaXNw
bGF5UmVnaW9uKGRpc3BsYXlMb2NhbGUpLCAnU2VyYmlhJyk7CisgICAgICAgIHJlcG9ydFJlc3Vs
dChsb2NhbGUuZGlzcGxheU5hbWUoZGlzcGxheUxvY2FsZSksICdTZXJiaWFuIChDeXJpbGxpYywg
U2VyYmlhKScpOworICAgIH07CisgIAorICAgIHRoaXMuZGlzcGxheUluQ3lyaWxsaWNTY3JpcHQg
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGxvY2FsZSA9IG5ldyBMb2NhbGUoJ3NyJykubWF4
aW1pemVkTG9jYWxlKCk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUuZGlzcGxheUxhbmd1
YWdlKCksICfQodGA0L/RgdC60LgnKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5kaXNw
bGF5U2NyaXB0KCksICfQi9C40YDQuNC70LjRhtCwJyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChs
b2NhbGUuZGlzcGxheVJlZ2lvbigpLCAn0KHRgNCx0LjRmNCwJyk7CisgICAgICAgIHJlcG9ydFJl
c3VsdChsb2NhbGUuZGlzcGxheU5hbWUoKSwgJ9Ch0YDQv9GB0LrQuCAo0IvQuNGA0LjQu9C40YbQ
sCwg0KHRgNCx0LjRmNCwKScpOworICAgIH07CisgIAorICAgIHRoaXMuZGlzcGxheUluSGVicmV3
U2NyaXB0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBsb2NhbGUgPSBuZXcgTG9jYWxlKCdo
ZScpLm1heGltaXplZExvY2FsZSgpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLmRpc3Bs
YXlMYW5ndWFnZSgpLCAn16LXkdeo15nXqicpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxl
LmRpc3BsYXlTY3JpcHQoKSwgJ9ei15HXqNeZJyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2Nh
bGUuZGlzcGxheVJlZ2lvbigpLCAn15nXqdeo15DXnCcpOworICAgICAgICByZXBvcnRSZXN1bHQo
bG9jYWxlLmRpc3BsYXlOYW1lKCksICfXoteR16jXmdeqICjXoteR16jXmSwg15nXqdeo15DXnCkn
KTsKKyAgICB9OworfTsKKworKGZ1bmN0aW9uKCkgeworICAgIHZhciBhbGxUZXN0cyA9IG5ldyBs
b2NhbGVUZXN0cygpOworICAgIGZvciAodmFyIHRlc3QgaW4gYWxsVGVzdHMpIHsKKyAgICAgICAg
YWxsVGVzdHNbdGVzdF0oKTsKKyAgICB9Cit9KSgpOworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2Vk
ID0gdHJ1ZTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9w
bGF0Zm9ybS9ndGsvU2tpcHBlZAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9n
dGsvU2tpcHBlZAkocmV2aXNpb24gNzUyNTApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsv
U2tpcHBlZAkod29ya2luZyBjb3B5KQpAQCAtMjcwMCw2ICsyNzAwLDkgQEAgZmFzdC94c2wveHNs
dC1taXNzaW5nLW5hbWVzcGFjZS1pbi14c2x0LgogZmFzdC94c2wveHNsdC1yZWxhdGl2ZS1wYXRo
LnhtbAogZmFzdC94c2wveHNsdF91bmljb2RlLnhtbAogCisjIFRoaXMgcG9ydCBkb2Vzbid0IHN1
cHBvcnQgdjggaTE4biBleHRlbnNpb24uCitmYXN0L2pzL2kxOG4tYmluZGluZ3MtbG9jYWxlLmh0
bWwKKwogIyBUZXN0cyBpbiBodHRwLyBkaXJlY3RvcnkKICMgICBUZXN0cyBmYWlsaW5nCiBodHRw
L3Rlc3RzL2FwcGNhY2hlL2NyYXNoLXdoZW4tbmF2aWdhdGluZy1hd2F5LXRoZW4tYmFjay5odG1s
CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZAkocmV2aXNpb24gNzUyNTApCisrKyBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZAkod29ya2luZyBjb3B5KQpAQCAtMjg0LDMgKzI4
NCw2IEBAIGVkaXRpbmcvc2VsZWN0aW9uL2NhcmV0LW1vZGUtcGFyYWdyYXBoLWsKICMgVGhpcyB0
ZXN0IGlzIGZhaWxpbmcgb24gdGhlIExlb3BhcmQgSW50ZWwgRGVidWcgYnVpbGRib3QKICMgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUxODA3CiBmYXN0L2Jsb2NrZmxv
dy9icm9rZW4taWRlb2dyYXBoLXNtYWxsLWNhcHMuaHRtbAorCisjIFRoaXMgcG9ydCBkb2Vzbid0
IHN1cHBvcnQgdjggaTE4biBleHRlbnNpb24uCitmYXN0L2pzL2kxOG4tYmluZGluZ3MtbG9jYWxl
Lmh0bWwKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9xdC9Ta2lwcGVkCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3F0L1Nr
aXBwZWQJKHJldmlzaW9uIDc1MjUwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBl
ZAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDYgKzEwMSw5IEBAIGZhc3QvdGV4dC9oeXBoZW5zLmh0
bWwKICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzMzMyCiBpbnNw
ZWN0b3IvZG9tLWJyZWFrcG9pbnRzLmh0bWwKIAorIyBUaGlzIHBvcnQgZG9lc24ndCBzdXBwb3J0
IHY4IGkxOG4gZXh0ZW5zaW9uLgorZmFzdC9qcy9pMThuLWJpbmRpbmdzLWxvY2FsZS5odG1sCisK
ICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ICMKICMgICAgICAgRmFpbGluZyBIVFRQIHRlc3RzLiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKICMgPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ICMKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCShyZXZpc2lvbiA3
NTI1MCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTEyLDMgKzExMTIsNiBAQCBmYXN0L2xvYWRlci91c2VyLXN0eWxlc2hlZXQtZmFzdC1w
YXRoLmh0CiAKICMgRFJUIGRvZXMgbm90IHN1cHBvcnQgdG9nZ2xpbmcgY2FyZXQgYnJvd3Npbmcg
b24gLyBvZmYKIGVkaXRpbmcvc2VsZWN0aW9uL2NhcmV0LW1vZGUtcGFyYWdyYXBoLWtleXMtbmF2
aWdhdGlvbi5odG1sCisKKyMgVGhpcyBwb3J0IGRvZXNuJ3Qgc3VwcG9ydCB2OCBpMThuIGV4dGVu
c2lvbi4KK2Zhc3QvanMvaTE4bi1iaW5kaW5ncy1sb2NhbGUuaHRtbAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78450</attachid>
            <date>2011-01-10 14:22:54 -0800</date>
            <delta_ts>2011-02-04 11:25:54 -0800</delta_ts>
            <desc>patch updated to the new source tree structure </desc>
            <filename>wk.jsi18n.patch</filename>
            <type>text/plain</type>
            <size>23450</size>
            <attacher name="Jungshik Shin">jshin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1NDI3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTEtMDEtMTAgIE5lYm9qc2Eg
Q2lyaWMgIDxjaXJhQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnRzIExvY2FsZSBvYmplY3Qgb2YgSmF2YVNjcmlw
dCBpbnRlcm5hdGlvbmFsaXphdGlvbiBBUEkgcHJvcG9zYWwsIGFzIGFuCisgICAgICAgIHY4IGV4
dGVuc2lvbi4gRXh0ZW5zaW9uIGNvZGUgaXMgaG9zdGVkIGluIHY4IHByb2plY3QgKHNyYy9leHRl
bnNpb25zL2V4cGVyaW1lbnRhbC9pMThuLWV4dGVuc2lvbi57Y2MsaH0pCisgICAgICAgIGFuZCBp
biB0aGlzIHBhdGNoIHdlIGp1c3QgcHJvdmlkZSBmbGFncywgdGVzdHMgYW5kIGJ1aWxkIHJ1bGVz
IGZvciBjaHJvbWl1bSBwb3J0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDk0MTQKKworICAgICAgICBUZXN0OiBmYXN0L2pzL2kxOG4tYmluZGluZ3Mt
bG9jYWxlLmh0bWwKKworICAgICAgICAqIFdlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwOgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VjhET01XaW5kb3dTaGVsbDo6Y3JlYXRlTmV3Q29udGV4dCk6CisgICAgICAgICogcGFnZS9TZXR0
aW5ncy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6U2V0dGluZ3MpOgorICAgICAg
ICAqIHBhZ2UvU2V0dGluZ3MuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpzZXRKU0kx
OE5BUElFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpnZXRKU0kxOE5BUElF
bmFibGVkKToKKwogMjAxMS0wMS0xMCAgQmVuamFtaW4gUG91bGFpbiAgPGJlbmphbWluLnBvdWxh
aW5Abm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0
aWFuc2VuLgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAJKHJldmlz
aW9uIDc1NDI3KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAJKHdv
cmtpbmcgY29weSkKQEAgLTExNSw2ICsxMTUsMTAgQEAKICAgICAjIGJpbmFyeSBhbmQgaW5jcmVh
c2luZyB0aGUgc3BlZWQgb2YgZ2RiLgogICAgICdlbmFibGVfc3ZnJSc6IDEsCiAKKyAgICAjIFVz
ZSB2OCBhcyBkZWZhdWx0IEphdmFTY3JpcHQgZW5naW5lLiBUaGlzIG1ha2VzIHN1cmUgdGhhdCBq
YXZhc2NyaXB0X2VuZ2luZSB2YXJpYWJsZQorICAgICMgaXMgc2V0IGZvciBib3RoIGluc2lkZV9j
aHJvbWl1bV9idWlsZCAwIGFuZCAxIGNhc2VzLgorICAgICdqYXZhc2NyaXB0X2VuZ2luZSUnOiAn
djgnLAorCiAgICAgJ3dlYmNvcmVfaW5jbHVkZV9kaXJzJzogWwogICAgICAgJy4uLycsCiAgICAg
ICAnLi4vYWNjZXNzaWJpbGl0eScsCkBAIC0xMzkyLDYgKzEzOTYsMTQgQEAKICAgICAgICAgICAg
IFsnZXhjbHVkZScsICcvKFdpbmRvd3N8VW5pc2NyaWJlKVteL10qXFwuY3BwJCddCiAgICAgICAg
ICAgXSwKICAgICAgICAgfV0sCisgICAgICAgIFsnamF2YXNjcmlwdF9lbmdpbmU9PSJ2OCInLCB7
CisgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKKyAgICAgICAgICAgICdleHBlcmltZW50YWxf
aTE4bl9hcGknLAorICAgICAgICAgIF0sCisgICAgICAgICAgJ2RlZmluZXMnOiBbCisgICAgICAg
ICAgICAnVVNJTkdfRVhQRVJJTUVOVEFMX0kxOE5fQVBJPTEnLAorICAgICAgICAgIF0sCisgICAg
ICAgIH1dLAogICAgICAgXSwKICAgICB9LAogICAgIHsKQEAgLTE0ODIsNSArMTQ5NCwyMSBAQAog
ICAgICAgICB9XSwKICAgICAgIF0sCiAgICAgfSwKKyAgICB7CisgICAgICAndGFyZ2V0X25hbWUn
OiAnZXhwZXJpbWVudGFsX2kxOG5fYXBpJywKKyAgICAgICd0eXBlJzogJzwobGlicmFyeSknLAor
ICAgICAgJ3NvdXJjZXMnOiBbCisgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3Y4L3NyYy9l
eHRlbnNpb25zL2V4cGVyaW1lbnRhbC9pMThuLWV4dGVuc2lvbi5jYycsCisgICAgICAgICc8KGNo
cm9taXVtX3NyY19kaXIpL3Y4L3NyYy9leHRlbnNpb25zL2V4cGVyaW1lbnRhbC9pMThuLWV4dGVu
c2lvbi5oJywKKyAgICAgIF0sCisgICAgICAnaW5jbHVkZV9kaXJzJzogWworICAgICAgICAnPChj
aHJvbWl1bV9zcmNfZGlyKS90aGlyZF9wYXJ0eS9pY3UvcHVibGljL2NvbW1vbicsCisgICAgICAg
ICc8KGNocm9taXVtX3NyY19kaXIpL3Y4L3NyYycsCisgICAgICBdLAorICAgICAgJ2RlcGVuZGVu
Y2llcyc6IFsKKyAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvdGhpcmRfcGFydHkvaWN1L2lj
dS5neXA6KicsCisgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3Y4L3Rvb2xzL2d5cC92OC5n
eXA6djgnLAorICAgICAgXSwKKyAgICB9LAogICBdLCAgIyB0YXJnZXRzCiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmNwcAkocmV2aXNp
b24gNzU0MjcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEsMTEgQEAKICNpbmNsdWRlIDx1dGlsaXR5
PgogI2luY2x1ZGUgPHY4LWRlYnVnLmg+CiAjaW5jbHVkZSA8djguaD4KKworI2lmZGVmIFVTSU5H
X0VYUEVSSU1FTlRBTF9JMThOX0FQSQorI2luY2x1ZGUgPHY4L3NyYy9leHRlbnNpb25zL2V4cGVy
aW1lbnRhbC9pMThuLWV4dGVuc2lvbi5oPgorI2VuZGlmCisKICNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgogI2luY2x1ZGUgPHd0Zi9TdGRM
aWJFeHRyYXMuaD4KQEAgLTMzMSw2ICszMzYsMTIgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRl
eHQ+IFY4RE9NV2luZG93UwogICAgIGlmICghVjhQcm94eTo6cmVnaXN0ZXJlZEV4dGVuc2lvbldp
dGhWOChEYXRlRXh0ZW5zaW9uOjpnZXQoKSkpCiAgICAgICAgIFY4UHJveHk6OnJlZ2lzdGVyRXh0
ZW5zaW9uKERhdGVFeHRlbnNpb246OmdldCgpKTsKIAorI2lmZGVmIFVTSU5HX0VYUEVSSU1FTlRB
TF9JMThOX0FQSQorICAgIC8vIEVuYWJsZXMgZXhwZXJpbWVudGFsIGkxOG4gQVBJIGluIFY4Lgor
ICAgIGlmIChtX2ZyYW1lLT5zZXR0aW5ncygpLT5nZXRKU0kxOE5BUElFbmFibGVkKCkgJiYgIVY4
UHJveHk6OnJlZ2lzdGVyZWRFeHRlbnNpb25XaXRoVjgodjg6OmludGVybmFsOjpJMThORXh0ZW5z
aW9uOjpnZXQoKSkpCisgICAgICAgIFY4UHJveHk6OnJlZ2lzdGVyRXh0ZW5zaW9uKHY4OjppbnRl
cm5hbDo6STE4TkV4dGVuc2lvbjo6Z2V0KCkpOworI2VuZGlmCisKICAgICAvLyBEeW5hbWljYWxs
eSB0ZWxsIHY4IGFib3V0IG91ciBleHRlbnNpb25zIG5vdy4KICAgICBjb25zdCBWOEV4dGVuc2lv
bnMmIGV4dGVuc2lvbnMgPSBWOFByb3h5OjpleHRlbnNpb25zKCk7CiAgICAgT3duQXJyYXlQdHI8
Y29uc3QgY2hhcio+IGV4dGVuc2lvbk5hbWVzKG5ldyBjb25zdCBjaGFyKltleHRlbnNpb25zLnNp
emUoKV0pOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAJKHJldmlzaW9uIDc1NDI3KQor
KysgU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3
MCw2ICsxNzAsNyBAQCBTZXR0aW5nczo6U2V0dGluZ3MoUGFnZSogcGFnZSkKICAgICAsIG1fdXNl
UHJlSFRNTDVQYXJzZXJRdWlya3MoZmFsc2UpCiAgICAgLCBtX2h5cGVybGlua0F1ZGl0aW5nRW5h
YmxlZChmYWxzZSkKICAgICAsIG1fY3Jvc3NPcmlnaW5DaGVja0luR2V0TWF0Y2hlZENTU1J1bGVz
RGlzYWJsZWQoZmFsc2UpCisgICAgLCBtX2pzSTE4TkFQSUVuYWJsZWQoZmFsc2UpCiB7CiAgICAg
Ly8gQSBGcmFtZSBtYXkgbm90IGhhdmUgYmVlbiBjcmVhdGVkIHlldCwgc28gd2UgaW5pdGlhbGl6
ZSB0aGUgQXRvbWljU3RyaW5nIAogICAgIC8vIGhhc2ggYmVmb3JlIHRyeWluZyB0byB1c2UgaXQu
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oCShyZXZpc2lvbiA3NTQyNykKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMzUzLDYgKzM1Myw5IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRDcm9zc09yaWdpbkNoZWNrSW5H
ZXRNYXRjaGVkQ1NTUnVsZXNEaXNhYmxlZChib29sIGZsYWcpIHsgbV9jcm9zc09yaWdpbkNoZWNr
SW5HZXRNYXRjaGVkQ1NTUnVsZXNEaXNhYmxlZCA9IGZsYWc7IH0KICAgICAgICAgYm9vbCBjcm9z
c09yaWdpbkNoZWNrSW5HZXRNYXRjaGVkQ1NTUnVsZXNEaXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJu
IG1fY3Jvc3NPcmlnaW5DaGVja0luR2V0TWF0Y2hlZENTU1J1bGVzRGlzYWJsZWQ7IH0KIAorICAg
ICAgICB2b2lkIHNldEpTSTE4TkFQSUVuYWJsZWQoYm9vbCBmbGFnKSB7IG1fanNJMThOQVBJRW5h
YmxlZCA9IGZsYWc7IH0KKyAgICAgICAgYm9vbCBnZXRKU0kxOE5BUElFbmFibGVkKCkgY29uc3Qg
eyByZXR1cm4gbV9qc0kxOE5BUElFbmFibGVkOyB9CisKICAgICBwcml2YXRlOgogICAgICAgICBQ
YWdlKiBtX3BhZ2U7CiAKQEAgLTQ0Nyw2ICs0NTAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIGJvb2wgbV91c2VQcmVIVE1MNVBhcnNlclF1aXJrczogMTsKICAgICAgICAgYm9vbCBt
X2h5cGVybGlua0F1ZGl0aW5nRW5hYmxlZCA6IDE7CiAgICAgICAgIGJvb2wgbV9jcm9zc09yaWdp
bkNoZWNrSW5HZXRNYXRjaGVkQ1NTUnVsZXNEaXNhYmxlZCA6IDE7CisgICAgICAgIGJvb2wgbV9q
c0kxOE5BUElFbmFibGVkIDogMTsKIAogI2lmIFVTRShTQUZBUklfVEhFTUUpCiAgICAgICAgIHN0
YXRpYyBib29sIGdTaG91bGRQYWludE5hdGl2ZUNvbnRyb2xzOwpJbmRleDogVG9vbHMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gNzU0MjcpCisrKyBU
b29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxMS0wMS0x
MCAgTmVib2pzYSBDaXJpYyAgPGNpcmFAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudHMgTG9jYWxlIG9iamVjdCBv
ZiBKYXZhU2NyaXB0IGludGVybmF0aW9uYWxpemF0aW9uIEFQSSBwcm9wb3NhbCwgYXMgYW4KKyAg
ICAgICAgdjggZXh0ZW5zaW9uLiBFeHRlbnNpb24gY29kZSBpcyBob3N0ZWQgaW4gdjggcHJvamVj
dCAoc3JjL2V4dGVuc2lvbnMvZXhwZXJpbWVudGFsL2kxOG4tZXh0ZW5zaW9uLntjYyxofSkKKyAg
ICAgICAgYW5kIGluIHRoaXMgcGF0Y2ggd2UganVzdCBwcm92aWRlIGZsYWdzLCB0ZXN0cyBhbmQg
YnVpbGQgcnVsZXMgZm9yIGNocm9taXVtIHBvcnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTQxNAorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuY3BwOgorICAgICAgICAoV2ViUHJlZmVyZW5jZXM6OnJl
c2V0KToKKyAgICAgICAgKFdlYlByZWZlcmVuY2VzOjphcHBseVRvKToKKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5oOgorCiAyMDExLTAxLTEwICBBZGFt
IFJvYmVuICA8YXJvYmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBSb2xsIG91dCByNzUzOTIKSW5k
ZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5j
cHAJKHJldmlzaW9uIDc1NDI3KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2Vi
UHJlZmVyZW5jZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNiArMTA0LDggQEAgdm9pZCBX
ZWJQcmVmZXJlbmNlczo6cmVzZXQoKQogICAgIGh5cGVybGlua0F1ZGl0aW5nRW5hYmxlZCA9IGZh
bHNlOwogICAgIGFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkID0gZmFsc2U7CiAgICAgYWNj
ZWxlcmF0ZWQyZENhbnZhc0VuYWJsZWQgPSBmYWxzZTsKKyAgICAvLyBUaGlzIGZlYXR1cmUgaXMg
ZGlzYWJsZWQgYnkgZGVmYXVsdCwgYnV0IGxldCB0aGUgdGVzdHMgcnVuLgorICAgIGpzSTE4TkFQ
SUVuYWJsZWQgPSB0cnVlOwogfQogCiB2b2lkIFdlYlByZWZlcmVuY2VzOjphcHBseVRvKFdlYlZp
ZXcqIHdlYlZpZXcpCkBAIC0xNjIsNSArMTY0LDYgQEAgdm9pZCBXZWJQcmVmZXJlbmNlczo6YXBw
bHlUbyhXZWJWaWV3KiB3ZQogICAgIHNldHRpbmdzLT5zZXRJbWFnZXNFbmFibGVkKHRydWUpOwog
ICAgIHNldHRpbmdzLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZChhY2NlbGVyYXRl
ZENvbXBvc2l0aW5nRW5hYmxlZCk7CiAgICAgc2V0dGluZ3MtPnNldEFjY2VsZXJhdGVkMmRDYW52
YXNFbmFibGVkKGFjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkKTsKKyAgICBzZXR0aW5ncy0+c2V0
SlNJMThOQVBJRW5hYmxlZChqc0kxOE5BUElFbmFibGVkKTsKIH0KIApJbmRleDogVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vV2ViUHJlZmVyZW5jZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5oCShyZXZpc2lvbiA3NTQy
NykKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTc5LDYgKzc5LDcgQEAgc3RydWN0IFdlYlByZWZlcmVuY2VzIHsKICAg
ICBib29sIGNhcmV0QnJvd3NpbmdFbmFibGVkOwogICAgIGJvb2wgYWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0VuYWJsZWQ7CiAgICAgYm9vbCBhY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZDsKKyAgICBi
b29sIGpzSTE4TkFQSUVuYWJsZWQ7CiAKICAgICBXZWJQcmVmZXJlbmNlcygpIHsgcmVzZXQoKTsg
fQogICAgIHZvaWQgcmVzZXQoKTsKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNzU0MjcpCisr
KyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcg
QEAKKzIwMTEtMDEtMTAgIE5lYm9qc2EgQ2lyaWMgIDxjaXJhQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnRzIExv
Y2FsZSBvYmplY3Qgb2YgSmF2YVNjcmlwdCBpbnRlcm5hdGlvbmFsaXphdGlvbiBBUEkgcHJvcG9z
YWwsIGFzIGFuCisgICAgICAgIHY4IGV4dGVuc2lvbi4gRXh0ZW5zaW9uIGNvZGUgaXMgaG9zdGVk
IGluIHY4IHByb2plY3QgKHNyYy9leHRlbnNpb25zL2V4cGVyaW1lbnRhbC9pMThuLWV4dGVuc2lv
bi57Y2MsaH0pCisgICAgICAgIGFuZCBpbiB0aGlzIHBhdGNoIHdlIGp1c3QgcHJvdmlkZSBmbGFn
cywgdGVzdHMgYW5kIGJ1aWxkIHJ1bGVzIGZvciBjaHJvbWl1bSBwb3J0LgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDk0MTQKKworICAgICAgICAqIHB1
YmxpYy9XZWJTZXR0aW5ncy5oOgorICAgICAgICAqIHNyYy9XZWJTZXR0aW5nc0ltcGwuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJTZXR0aW5nc0ltcGw6OnNldEpTSTE4TkFQSUVuYWJsZWQpOgor
ICAgICAgICAqIHNyYy9XZWJTZXR0aW5nc0ltcGwuaDoKKwogMjAxMS0wMS0xMCAgSm9obiBLbm90
dGVuYmVsdCAgPGprbm90dGVuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBK
ZXJlbXkgT3Jsb3cuCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNldHRpbmdzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZXR0aW5ncy5oCShyZXZp
c2lvbiA3NTQyNykKKysrIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaAkod29y
a2luZyBjb3B5KQpAQCAtMTAyLDYgKzEwMiw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
c2V0TWVtb3J5SW5mb0VuYWJsZWQoYm9vbCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRIeXBl
cmxpbmtBdWRpdGluZ0VuYWJsZWQoYm9vbCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRDYXJl
dEJyb3dzaW5nRW5hYmxlZChib29sKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldEpTSTE4TkFQ
SUVuYWJsZWQoYm9vbCkgPSAwOwogCiBwcm90ZWN0ZWQ6CiAgICAgfldlYlNldHRpbmdzKCkgeyB9
CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwCShyZXZpc2lvbiA3
NTQyNykKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzI5LDQgKzMyOSw5IEBAIHZvaWQgV2ViU2V0dGluZ3NJbXBsOjpzZXRDYXJl
dEJyb3dzaW5nRW4KICAgICBtX3NldHRpbmdzLT5zZXRDYXJldEJyb3dzaW5nRW5hYmxlZChlbmFi
bGVkKTsKIH0KIAordm9pZCBXZWJTZXR0aW5nc0ltcGw6OnNldEpTSTE4TkFQSUVuYWJsZWQoYm9v
bCBlbmFibGVkKQoreworICAgIG1fc2V0dGluZ3MtPnNldEpTSTE4TkFQSUVuYWJsZWQoZW5hYmxl
ZCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJTZXR0aW5nc0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlNldHRpbmdzSW1wbC5oCShyZXZpc2lvbiA3NTQyNykKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMv
V2ViU2V0dGluZ3NJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTk3LDYgKzk3LDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCBzZXRNZW1vcnlJbmZvRW5hYmxlZChib29sKTsKICAgICB2aXJ0
dWFsIHZvaWQgc2V0SHlwZXJsaW5rQXVkaXRpbmdFbmFibGVkKGJvb2wpOwogICAgIHZpcnR1YWwg
dm9pZCBzZXRDYXJldEJyb3dzaW5nRW5hYmxlZChib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
SlNJMThOQVBJRW5hYmxlZChib29sKTsKIAogcHJpdmF0ZToKICAgICBXZWJDb3JlOjpTZXR0aW5n
cyogbV9zZXR0aW5nczsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1NDI3KQorKysgTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzggQEAKKzIwMTEtMDEtMTAgIE5l
Ym9qc2EgQ2lyaWMgIDxjaXJhQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnRzIExvY2FsZSBvYmplY3Qgb2YgSmF2
YVNjcmlwdCBpbnRlcm5hdGlvbmFsaXphdGlvbiBBUEkgcHJvcG9zYWwsIGFzIGFuCisgICAgICAg
IHY4IGV4dGVuc2lvbi4gRXh0ZW5zaW9uIGNvZGUgaXMgaG9zdGVkIGluIHY4IHByb2plY3QgKHNy
Yy9leHRlbnNpb25zL2V4cGVyaW1lbnRhbC9pMThuLWV4dGVuc2lvbi57Y2MsaH0pCisgICAgICAg
IGFuZCBpbiB0aGlzIHBhdGNoIHdlIGp1c3QgcHJvdmlkZSBmbGFncywgdGVzdHMgYW5kIGJ1aWxk
IHJ1bGVzIGZvciBjaHJvbWl1bSBwb3J0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDk0MTQKKworICAgICAgICAqIGZhc3QvanMvaTE4bi1iaW5kaW5n
cy1sb2NhbGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL2kxOG4tYmlu
ZGluZ3MtbG9jYWxlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvc2NyaXB0LXRlc3Rz
L2kxOG4tYmluZGluZ3MtbG9jYWxlLmpzOiBBZGRlZC4KKyAgICAgICAgKHJlcG9ydFJlc3VsdCk6
CisgICAgICAgIChsb2NhbGVUZXN0cy50aGlzLmRlZmF1bHRMb2NhbGUpOgorICAgICAgICAobG9j
YWxlVGVzdHMudGhpcy5iYXNlTG9jYWxlKToKKyAgICAgICAgKGxvY2FsZVRlc3RzLnRoaXMubGFu
Z3VhZ2VTY3JpcHRMb2NhbGUpOgorICAgICAgICAobG9jYWxlVGVzdHMudGhpcy5sYW5ndWFnZVNj
cmlwdFJlZ2lvbkxvY2FsZSk6CisgICAgICAgIChsb2NhbGVUZXN0cy50aGlzLmxhbmd1YWdlU2Ny
aXB0UmVnaW9uRXh0ZW5zaW9uTG9jYWxlKToKKyAgICAgICAgKGxvY2FsZVRlc3RzLnRoaXMubGFu
Z3VhZ2VTY3JpcHRSZWdpb25EYXNoVUV4dGVuc2lvbkxvY2FsZSk6CisgICAgICAgIChsb2NhbGVU
ZXN0cy50aGlzLmF2YWlsYWJsZUxvY2FsZXMpOgorICAgICAgICAobG9jYWxlVGVzdHMudGhpcy5t
YXhpbWl6ZWRMb2NhbGUpOgorICAgICAgICAobG9jYWxlVGVzdHMudGhpcy5tYXhpbWl6ZWRMb2Nh
bGVXaXRoRXh0ZW5zaW9uKToKKyAgICAgICAgKGxvY2FsZVRlc3RzLnRoaXMubWluaW1pemVkTG9j
YWxlKToKKyAgICAgICAgKGxvY2FsZVRlc3RzLnRoaXMubWluaW1pemVkTG9jYWxlV2l0aEV4dGVu
c2lvbik6CisgICAgICAgIChsb2NhbGVUZXN0cy50aGlzLmRpc3BsYXlGb3JCYXNlTG9jYWxlKToK
KyAgICAgICAgKGxvY2FsZVRlc3RzLnRoaXMuZGlzcGxheUluU2FtZUxvY2FsZSk6CisgICAgICAg
IChsb2NhbGVUZXN0cy50aGlzLmRpc3BsYXlJbkRpZmZlcmVudExvY2FsZSk6CisgICAgICAgIChs
b2NhbGVUZXN0cy50aGlzLmRpc3BsYXlJbkN5cmlsbGljU2NyaXB0KToKKyAgICAgICAgKGxvY2Fs
ZVRlc3RzLnRoaXMuZGlzcGxheUluSGVicmV3U2NyaXB0KToKKyAgICAgICAgKGxvY2FsZVRlc3Rz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS9t
YWMvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9Ta2lwcGVkOgorICAgICAgICAqIHBs
YXRmb3JtL3dpbi9Ta2lwcGVkOgorCiAyMDExLTAxLTEwICBNYWNpZWogU3RhY2hvd2lhayAgPG1q
c0BhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9qcy9pMThuLWJpbmRpbmdzLWxvY2FsZS1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9pMThuLWJpbmRpbmdzLWxvY2FsZS1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL2kxOG4tYmlu
ZGluZ3MtbG9jYWxlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MSBAQAor
VGhpcyB0ZXN0IGNoZWNrcyBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzIG9mIExvY2FsZSBvYmplY3Qu
CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMs
IGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGVuLVVTIGlzIGVuLVVTCitQ
QVNTIGVuIGlzIGVuCitQQVNTIHVuZGVmaW5lZCBpcyB1bmRlZmluZWQKK1BBU1MgVVMgaXMgVVMK
K1BBU1Mgc3IgaXMgc3IKK1BBU1Mgc3IgaXMgc3IKK1BBU1MgdW5kZWZpbmVkIGlzIHVuZGVmaW5l
ZAorUEFTUyB1bmRlZmluZWQgaXMgdW5kZWZpbmVkCitQQVNTIHpoLUhhbnMgaXMgemgtSGFucwor
UEFTUyB6aCBpcyB6aAorUEFTUyBIYW5zIGlzIEhhbnMKK1BBU1MgdW5kZWZpbmVkIGlzIHVuZGVm
aW5lZAorUEFTUyB6aC1IYW5zLUNOIGlzIHpoLUhhbnMtQ04KK1BBU1MgemggaXMgemgKK1BBU1Mg
SGFucyBpcyBIYW5zCitQQVNTIENOIGlzIENOCitQQVNTIGRlLURFQGNvbGxhdGlvbj1waG9uZSBp
cyBkZS1ERUBjb2xsYXRpb249cGhvbmUKK1BBU1MgZGUgaXMgZGUKK1BBU1MgdW5kZWZpbmVkIGlz
IHVuZGVmaW5lZAorUEFTUyBERSBpcyBERQorUEFTUyBkZS1ERS11LWNvLXBob25lYm9vayBpcyBk
ZS1ERS11LWNvLXBob25lYm9vaworUEFTUyBkZSBpcyBkZQorUEFTUyB1bmRlZmluZWQgaXMgdW5k
ZWZpbmVkCitQQVNTIERFIGlzIERFCitQQVNTIHRydWUgaXMgdHJ1ZQorUEFTUyB0cnVlIGlzIHRy
dWUKK1BBU1Mgc3ItQ3lybC1SUyBpcyBzci1DeXJsLVJTCitQQVNTIHNyIGlzIHNyCitQQVNTIEN5
cmwgaXMgQ3lybAorUEFTUyBSUyBpcyBSUworUEFTUyBkZS1MYXRuLURFQGNvbGxhdGlvbj1waG9u
ZSBpcyBkZS1MYXRuLURFQGNvbGxhdGlvbj1waG9uZQorUEFTUyBkZSBpcyBkZQorUEFTUyBMYXRu
IGlzIExhdG4KK1BBU1MgREUgaXMgREUKK1BBU1Mgc3IgaXMgc3IKK1BBU1Mgc3IgaXMgc3IKK1BB
U1MgdW5kZWZpbmVkIGlzIHVuZGVmaW5lZAorUEFTUyB1bmRlZmluZWQgaXMgdW5kZWZpbmVkCitQ
QVNTIGRlLUBjb2xsYXRpb249cGhvbmUgaXMgZGUtQGNvbGxhdGlvbj1waG9uZQorUEFTUyBkZSBp
cyBkZQorUEFTUyB1bmRlZmluZWQgaXMgdW5kZWZpbmVkCitQQVNTIHVuZGVmaW5lZCBpcyB1bmRl
ZmluZWQKK1BBU1MgRW5nbGlzaCBpcyBFbmdsaXNoCitQQVNTIHVuZGVmaW5lZCBpcyB1bmRlZmlu
ZWQKK1BBU1MgdW5kZWZpbmVkIGlzIHVuZGVmaW5lZAorUEFTUyBFbmdsaXNoIGlzIEVuZ2xpc2gK
K1BBU1MgRW5nbGlzaCBpcyBFbmdsaXNoCitQQVNTIExhdGluIGlzIExhdGluCitQQVNTIFVuaXRl
ZCBTdGF0ZXMgaXMgVW5pdGVkIFN0YXRlcworUEFTUyBFbmdsaXNoIChMYXRpbiwgVW5pdGVkIFN0
YXRlcykgaXMgRW5nbGlzaCAoTGF0aW4sIFVuaXRlZCBTdGF0ZXMpCitQQVNTIFNlcmJpYW4gaXMg
U2VyYmlhbgorUEFTUyBDeXJpbGxpYyBpcyBDeXJpbGxpYworUEFTUyBTZXJiaWEgaXMgU2VyYmlh
CitQQVNTIFNlcmJpYW4gKEN5cmlsbGljLCBTZXJiaWEpIGlzIFNlcmJpYW4gKEN5cmlsbGljLCBT
ZXJiaWEpCitQQVNTINCh0YDQv9GB0LrQuCBpcyDQodGA0L/RgdC60LgKK1BBU1Mg0IvQuNGA0LjQ
u9C40YbQsCBpcyDQi9C40YDQuNC70LjRhtCwCitQQVNTINCh0YDQsdC40ZjQsCBpcyDQodGA0LHQ
uNGY0LAKK1BBU1Mg0KHRgNC/0YHQutC4ICjQi9C40YDQuNC70LjRhtCwLCDQodGA0LHQuNGY0LAp
IGlzINCh0YDQv9GB0LrQuCAo0IvQuNGA0LjQu9C40YbQsCwg0KHRgNCx0LjRmNCwKQorUEFTUyDX
oteR16jXmdeqIGlzINei15HXqNeZ16oKK1BBU1Mg16LXkdeo15kgaXMg16LXkdeo15kKK1BBU1Mg
15nXqdeo15DXnCBpcyDXmdep16jXkNecCitQQVNTINei15HXqNeZ16ogKNei15HXqNeZLCDXmdep
16jXkNecKSBpcyDXoteR16jXmdeqICjXoteR16jXmSwg15nXqdeo15DXnCkKK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2pzL2kxOG4tYmluZGluZ3MtbG9jYWxlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9qcy9pMThuLWJpbmRpbmdzLWxvY2FsZS5odG1sCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvZmFzdC9qcy9pMThuLWJpbmRpbmdzLWxvY2FsZS5odG1sCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDE0IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBI
VE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBl
IiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIC8+Cis8bGluayByZWw9InN0eWxl
c2hlZXQiIGhyZWY9InJlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0i
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAg
aWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQg
c3JjPSJzY3JpcHQtdGVzdHMvaTE4bi1iaW5kaW5ncy1sb2NhbGUuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9InJlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9zY3JpcHQtdGVzdHMvaTE4bi1iaW5k
aW5ncy1sb2NhbGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9zY3JpcHQt
dGVzdHMvaTE4bi1iaW5kaW5ncy1sb2NhbGUuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9mYXN0L2pzL3NjcmlwdC10ZXN0cy9pMThuLWJpbmRpbmdzLWxvY2FsZS5qcwkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxNTEgQEAKK2Rlc2NyaXB0aW9uKAorCisiVGhpcyB0ZXN0IGNoZWNrcyBw
cm9wZXJ0aWVzIGFuZCBtZXRob2RzIG9mIExvY2FsZSBvYmplY3QuIgorCispOworCitmdW5jdGlv
biByZXBvcnRSZXN1bHQoX2FjdHVhbCwgX2V4cGVjdGVkKSB7CisgICAgaWYgKGlzUmVzdWx0Q29y
cmVjdChfYWN0dWFsLCBfZXhwZWN0ZWQpKQorICAgICAgICB0ZXN0UGFzc2VkKF9hY3R1YWwgKyAn
IGlzICcgKyBfZXhwZWN0ZWQpOworICAgIGVsc2UKKyAgICAgICAgdGVzdEZhaWxlZChfYWN0dWFs
ICsgJyBzaG91bGQgYmUgJyArIF9leHBlY3RlZCk7Cit9CisKK2xvY2FsZVRlc3RzID0gZnVuY3Rp
b24oKSB7CisgICAgdGhpcy5kZWZhdWx0TG9jYWxlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZh
ciBsb2NhbGUgPSBuZXcgTG9jYWxlKCk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUubG9j
YWxlLCAnZW4tVVMnKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5sYW5ndWFnZSwgJ2Vu
Jyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUuc2NyaXB0LCB1bmRlZmluZWQpOworICAg
ICAgICByZXBvcnRSZXN1bHQobG9jYWxlLnJlZ2lvbiwgJ1VTJyk7CisgICAgfTsKKworICAgIHRo
aXMuYmFzZUxvY2FsZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgbG9jYWxlID0gbmV3IExv
Y2FsZSgnc3InKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5sb2NhbGUsICdzcicpOwor
ICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLmxhbmd1YWdlLCAnc3InKTsKKyAgICAgICAgcmVw
b3J0UmVzdWx0KGxvY2FsZS5zY3JpcHQsIHVuZGVmaW5lZCk7CisgICAgICAgIHJlcG9ydFJlc3Vs
dChsb2NhbGUucmVnaW9uLCB1bmRlZmluZWQpOworICAgIH07CisKKyAgICB0aGlzLmxhbmd1YWdl
U2NyaXB0TG9jYWxlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBsb2NhbGUgPSBuZXcgTG9j
YWxlKCd6aC1IYW5zJyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUubG9jYWxlLCAnemgt
SGFucycpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLmxhbmd1YWdlLCAnemgnKTsKKyAg
ICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5zY3JpcHQsICdIYW5zJyk7CisgICAgICAgIHJlcG9y
dFJlc3VsdChsb2NhbGUucmVnaW9uLCB1bmRlZmluZWQpOworICAgIH07CisKKyAgICB0aGlzLmxh
bmd1YWdlU2NyaXB0UmVnaW9uTG9jYWxlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBsb2Nh
bGUgPSBuZXcgTG9jYWxlKCd6aC1IYW5zLUNOJyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2Nh
bGUubG9jYWxlLCAnemgtSGFucy1DTicpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLmxh
bmd1YWdlLCAnemgnKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5zY3JpcHQsICdIYW5z
Jyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUucmVnaW9uLCAnQ04nKTsKKyAgICB9Owor
CisgICAgdGhpcy5sYW5ndWFnZVNjcmlwdFJlZ2lvbkV4dGVuc2lvbkxvY2FsZSA9IGZ1bmN0aW9u
KCkgeworICAgICAgICB2YXIgbG9jYWxlID0gbmV3IExvY2FsZSgnZGUtREVAY29sbGF0aW9uPXBo
b25lJyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUubG9jYWxlLCAnZGUtREVAY29sbGF0
aW9uPXBob25lJyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUubGFuZ3VhZ2UsICdkZScp
OworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLnNjcmlwdCwgdW5kZWZpbmVkKTsKKyAgICAg
ICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5yZWdpb24sICdERScpOworICAgIH07CisKKyAgICB0aGlz
Lmxhbmd1YWdlU2NyaXB0UmVnaW9uRGFzaFVFeHRlbnNpb25Mb2NhbGUgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgdmFyIGxvY2FsZSA9IG5ldyBMb2NhbGUoJ2RlLURFLXUtY28tcGhvbmVib29rJyk7
CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUubG9jYWxlLCAnZGUtREUtdS1jby1waG9uZWJv
b2snKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5sYW5ndWFnZSwgJ2RlJyk7CisgICAg
ICAgIHJlcG9ydFJlc3VsdChsb2NhbGUuc2NyaXB0LCB1bmRlZmluZWQpOworICAgICAgICByZXBv
cnRSZXN1bHQobG9jYWxlLnJlZ2lvbiwgJ0RFJyk7CisgICAgfTsKKyAgCisgICAgdGhpcy5hdmFp
bGFibGVMb2NhbGVzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBsb2NhbGVzID0gTG9jYWxl
LmF2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZXMubGVuZ3Ro
ID4gMTAwLCB0cnVlKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZXMuam9pbigpLmluZGV4
T2YoJ3NyJykgPj0gMCwgdHJ1ZSk7CisgICAgfTsKKyAgCisgICAgdGhpcy5tYXhpbWl6ZWRMb2Nh
bGUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGxvY2FsZSA9IG5ldyBMb2NhbGUoJ3NyJyku
bWF4aW1pemVkTG9jYWxlKCk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUubG9jYWxlLCAn
c3ItQ3lybC1SUycpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLmxhbmd1YWdlLCAnc3In
KTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5zY3JpcHQsICdDeXJsJyk7CisgICAgICAg
IHJlcG9ydFJlc3VsdChsb2NhbGUucmVnaW9uLCAnUlMnKTsKKyAgICB9OworICAKKyAgICB0aGlz
Lm1heGltaXplZExvY2FsZVdpdGhFeHRlbnNpb24gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFy
IGxvY2FsZSA9IG5ldyBMb2NhbGUoJ2RlQGNvbGxhdGlvbj1waG9uZScpLm1heGltaXplZExvY2Fs
ZSgpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLmxvY2FsZSwgJ2RlLUxhdG4tREVAY29s
bGF0aW9uPXBob25lJyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUubGFuZ3VhZ2UsICdk
ZScpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLnNjcmlwdCwgJ0xhdG4nKTsKKyAgICAg
ICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5yZWdpb24sICdERScpOworICAgIH07CisgIAorICAgIHRo
aXMubWluaW1pemVkTG9jYWxlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBsb2NhbGUgPSBu
ZXcgTG9jYWxlKCdzci1DeXJsLVJTJykubWluaW1pemVkTG9jYWxlKCk7CisgICAgICAgIHJlcG9y
dFJlc3VsdChsb2NhbGUubG9jYWxlLCAnc3InKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2Fs
ZS5sYW5ndWFnZSwgJ3NyJyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUuc2NyaXB0LCB1
bmRlZmluZWQpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLnJlZ2lvbiwgdW5kZWZpbmVk
KTsKKyAgICB9OworICAKKyAgICB0aGlzLm1pbmltaXplZExvY2FsZVdpdGhFeHRlbnNpb24gPSBm
dW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGxvY2FsZSA9IG5ldyBMb2NhbGUoJ2RlLUxhdG4tREVA
Y29sbGF0aW9uPXBob25lJykubWluaW1pemVkTG9jYWxlKCk7CisgICAgICAgIC8vIEZJWE1FOiBG
aXggSUNVIHRvIHJldHVybiBkZUBjb2xsYXRpb249cGhvbmUuCisgICAgICAgIHJlcG9ydFJlc3Vs
dChsb2NhbGUubG9jYWxlLCAnZGUtQGNvbGxhdGlvbj1waG9uZScpOworICAgICAgICByZXBvcnRS
ZXN1bHQobG9jYWxlLmxhbmd1YWdlLCAnZGUnKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2Fs
ZS5zY3JpcHQsIHVuZGVmaW5lZCk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUucmVnaW9u
LCB1bmRlZmluZWQpOworICAgIH07CisgICAgCisgICAgdGhpcy5kaXNwbGF5Rm9yQmFzZUxvY2Fs
ZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgbG9jYWxlID0gbmV3IExvY2FsZSgnZW4nKTsK
KyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5kaXNwbGF5TGFuZ3VhZ2UoKSwgJ0VuZ2xpc2gn
KTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5kaXNwbGF5U2NyaXB0KCksIHVuZGVmaW5l
ZCk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUuZGlzcGxheVJlZ2lvbigpLCB1bmRlZmlu
ZWQpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLmRpc3BsYXlOYW1lKCksICdFbmdsaXNo
Jyk7CisgICAgfTsKKyAgCisgICAgdGhpcy5kaXNwbGF5SW5TYW1lTG9jYWxlID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHZhciBsb2NhbGUgPSBuZXcgTG9jYWxlKCdlbicpLm1heGltaXplZExvY2Fs
ZSgpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLmRpc3BsYXlMYW5ndWFnZSgpLCAnRW5n
bGlzaCcpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLmRpc3BsYXlTY3JpcHQoKSwgJ0xh
dGluJyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUuZGlzcGxheVJlZ2lvbigpLCAnVW5p
dGVkIFN0YXRlcycpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLmRpc3BsYXlOYW1lKCks
ICdFbmdsaXNoIChMYXRpbiwgVW5pdGVkIFN0YXRlcyknKTsKKyAgICB9OworICAKKyAgICB0aGlz
LmRpc3BsYXlJbkRpZmZlcmVudExvY2FsZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgbG9j
YWxlID0gbmV3IExvY2FsZSgnc3InKS5tYXhpbWl6ZWRMb2NhbGUoKTsKKyAgICAgICAgdmFyIGRp
c3BsYXlMb2NhbGUgPSBuZXcgTG9jYWxlKCdlbicpOworICAgICAgICByZXBvcnRSZXN1bHQobG9j
YWxlLmRpc3BsYXlMYW5ndWFnZShkaXNwbGF5TG9jYWxlKSwgJ1NlcmJpYW4nKTsKKyAgICAgICAg
cmVwb3J0UmVzdWx0KGxvY2FsZS5kaXNwbGF5U2NyaXB0KGRpc3BsYXlMb2NhbGUpLCAnQ3lyaWxs
aWMnKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5kaXNwbGF5UmVnaW9uKGRpc3BsYXlM
b2NhbGUpLCAnU2VyYmlhJyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUuZGlzcGxheU5h
bWUoZGlzcGxheUxvY2FsZSksICdTZXJiaWFuIChDeXJpbGxpYywgU2VyYmlhKScpOworICAgIH07
CisgIAorICAgIHRoaXMuZGlzcGxheUluQ3lyaWxsaWNTY3JpcHQgPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgdmFyIGxvY2FsZSA9IG5ldyBMb2NhbGUoJ3NyJykubWF4aW1pemVkTG9jYWxlKCk7Cisg
ICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUuZGlzcGxheUxhbmd1YWdlKCksICfQodGA0L/RgdC6
0LgnKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5kaXNwbGF5U2NyaXB0KCksICfQi9C4
0YDQuNC70LjRhtCwJyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUuZGlzcGxheVJlZ2lv
bigpLCAn0KHRgNCx0LjRmNCwJyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUuZGlzcGxh
eU5hbWUoKSwgJ9Ch0YDQv9GB0LrQuCAo0IvQuNGA0LjQu9C40YbQsCwg0KHRgNCx0LjRmNCwKScp
OworICAgIH07CisgIAorICAgIHRoaXMuZGlzcGxheUluSGVicmV3U2NyaXB0ID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHZhciBsb2NhbGUgPSBuZXcgTG9jYWxlKCdoZScpLm1heGltaXplZExvY2Fs
ZSgpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLmRpc3BsYXlMYW5ndWFnZSgpLCAn16LX
kdeo15nXqicpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLmRpc3BsYXlTY3JpcHQoKSwg
J9ei15HXqNeZJyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUuZGlzcGxheVJlZ2lvbigp
LCAn15nXqdeo15DXnCcpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLmRpc3BsYXlOYW1l
KCksICfXoteR16jXmdeqICjXoteR16jXmSwg15nXqdeo15DXnCknKTsKKyAgICB9OworfTsKKwor
KGZ1bmN0aW9uKCkgeworICAgIHZhciBhbGxUZXN0cyA9IG5ldyBsb2NhbGVUZXN0cygpOworICAg
IGZvciAodmFyIHRlc3QgaW4gYWxsVGVzdHMpIHsKKyAgICAgICAgYWxsVGVzdHNbdGVzdF0oKTsK
KyAgICB9Cit9KSgpOworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBl
ZAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAkocmV2aXNp
b24gNzU0MjcpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAkod29ya2luZyBj
b3B5KQpAQCAtMjcwMCw2ICsyNzAwLDkgQEAgZmFzdC94c2wveHNsdC1taXNzaW5nLW5hbWVzcGFj
ZS1pbi14c2x0LgogZmFzdC94c2wveHNsdC1yZWxhdGl2ZS1wYXRoLnhtbAogZmFzdC94c2wveHNs
dF91bmljb2RlLnhtbAogCisjIFRoaXMgcG9ydCBkb2Vzbid0IHN1cHBvcnQgdjggaTE4biBleHRl
bnNpb24uCitmYXN0L2pzL2kxOG4tYmluZGluZ3MtbG9jYWxlLmh0bWwKKwogIyBUZXN0cyBpbiBo
dHRwLyBkaXJlY3RvcnkKICMgICBUZXN0cyBmYWlsaW5nCiBodHRwL3Rlc3RzL2FwcGNhY2hlL2Ny
YXNoLXdoZW4tbmF2aWdhdGluZy1hd2F5LXRoZW4tYmFjay5odG1sCkluZGV4OiBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9tYWMvU2tpcHBlZAkocmV2aXNpb24gNzU0MjcpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9t
YWMvU2tpcHBlZAkod29ya2luZyBjb3B5KQpAQCAtMjg0LDMgKzI4NCw2IEBAIGVkaXRpbmcvc2Vs
ZWN0aW9uL2NhcmV0LW1vZGUtcGFyYWdyYXBoLWsKICMgVGhpcyB0ZXN0IGlzIGZhaWxpbmcgb24g
dGhlIExlb3BhcmQgSW50ZWwgRGVidWcgYnVpbGRib3QKICMgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTUxODA3CiBmYXN0L2Jsb2NrZmxvdy9icm9rZW4taWRlb2dyYXBo
LXNtYWxsLWNhcHMuaHRtbAorCisjIFRoaXMgcG9ydCBkb2Vzbid0IHN1cHBvcnQgdjggaTE4biBl
eHRlbnNpb24uCitmYXN0L2pzL2kxOG4tYmluZGluZ3MtbG9jYWxlLmh0bWwKXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQJKHJldmlzaW9uIDc1
NDI3KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZAkod29ya2luZyBjb3B5KQpA
QCAtMTAxLDYgKzEwMSw5IEBAIGZhc3QvdGV4dC9oeXBoZW5zLmh0bWwKICMgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzMzMyCiBpbnNwZWN0b3IvZG9tLWJyZWFrcG9p
bnRzLmh0bWwKIAorIyBUaGlzIHBvcnQgZG9lc24ndCBzdXBwb3J0IHY4IGkxOG4gZXh0ZW5zaW9u
LgorZmFzdC9qcy9pMThuLWJpbmRpbmdzLWxvY2FsZS5odG1sCisKICMgPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ICMKICMgICAgICAgRmFpbGluZyBIVFRQIHRlc3RzLiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKICMgPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICMKSW5k
ZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCShyZXZpc2lvbiA3NTQyNykKKysrIExheW91dFRl
c3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCSh3b3JraW5nIGNvcHkpCkBAIC0xMTE0LDMgKzExMTQs
NiBAQCBmYXN0L2xvYWRlci91c2VyLXN0eWxlc2hlZXQtZmFzdC1wYXRoLmh0CiAKICMgRFJUIGRv
ZXMgbm90IHN1cHBvcnQgdG9nZ2xpbmcgY2FyZXQgYnJvd3Npbmcgb24gLyBvZmYKIGVkaXRpbmcv
c2VsZWN0aW9uL2NhcmV0LW1vZGUtcGFyYWdyYXBoLWtleXMtbmF2aWdhdGlvbi5odG1sCisKKyMg
VGhpcyBwb3J0IGRvZXNuJ3Qgc3VwcG9ydCB2OCBpMThuIGV4dGVuc2lvbi4KK2Zhc3QvanMvaTE4
bi1iaW5kaW5ncy1sb2NhbGUuaHRtbAo=
</data>
<flag name="review"
          id="69766"
          type_id="1"
          status="-"
          setter="fishd"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80086</attachid>
            <date>2011-01-25 11:12:12 -0800</date>
            <delta_ts>2011-02-04 11:25:54 -0800</delta_ts>
            <desc>Using WebRuntimeFeatures instead of WebSettings for i18n API</desc>
            <filename>i18n-locale.txt</filename>
            <type>text/plain</type>
            <size>23118</size>
            <attacher name="Nebojša Ćirić">cira</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc2NTc4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMDEtMjUgIE5lYm9qc2Eg
Q2lyaWMgIDxjaXJhQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnRzIExvY2FsZSBvYmplY3Qgb2YgSmF2YVNjcmlw
dCBpbnRlcm5hdGlvbmFsaXphdGlvbiBBUEkgcHJvcG9zYWwsIGFzIGFuCisgICAgICAgIHY4IGV4
dGVuc2lvbi4gRXh0ZW5zaW9uIGNvZGUgaXMgaG9zdGVkIGluIHY4IHByb2plY3QgKHNyYy9leHRl
bnNpb25zL2V4cGVyaW1lbnRhbC9pMThuLWV4dGVuc2lvbi57Y2MsaH0pCisgICAgICAgIGFuZCBp
biB0aGlzIHBhdGNoIHdlIGp1c3QgcHJvdmlkZSBmbGFncywgdGVzdHMgYW5kIGJ1aWxkIHJ1bGVz
IGZvciBjaHJvbWl1bSBwb3J0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDk0MTQKKworICAgICAgICBUZXN0OiBmYXN0L2pzL2kxOG4tYmluZGluZ3Mt
bG9jYWxlLmh0bWwKKworICAgICAgICAqIFdlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwOgorICAgICAg
ICAqIGJpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpleHBlcmltZW50YWxJMThOQVBJRW5h
YmxlZCk6CisgICAgICAgICogYmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVz
Lmg6CisgICAgICAgIChXZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzZXRFeHBlcmlt
ZW50YWxJMThOQVBJRW5hYmxlZCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01XaW5kb3dT
aGVsbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxsOjpjcmVhdGVOZXdD
b250ZXh0KToKKwogMjAxMS0wMS0yNSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFydGluIFJvYmluc29uLgpJbmRleDog
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAJKHJldmlzaW9uIDc2NTc4KQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAJKHdvcmtpbmcgY29weSkKQEAg
LTQ1LDcgKzQ1LDkgQEAKICAgICAgIH0sCiAgICAgfSx7CiAgICAgICAjIFdlYktpdCBpcyBjaGVj
a2VkIG91dCBpbiBzcmMvY2hyb21pdW0vdGhpcmRfcGFydHkvV2ViS2l0Ci0gICAgICAndmFyaWFi
bGVzJzogeydjaHJvbWl1bV9zcmNfZGlyJzogJy4uLy4uLy4uLy4uLy4uJ30sCisgICAgICAndmFy
aWFibGVzJzogeworICAgICAgICAnY2hyb21pdW1fc3JjX2Rpcic6ICcuLi8uLi8uLi8uLi8uLics
CisgICAgICB9LAogICAgIH1dLAogICAgIFsnT1MgPT0gIm1hYyInLCB7CiAgICAgICAndGFyZ2V0
cyc6IFsKQEAgLTExNSw2ICsxMTcsMTAgQEAKICAgICAjIGJpbmFyeSBhbmQgaW5jcmVhc2luZyB0
aGUgc3BlZWQgb2YgZ2RiLgogICAgICdlbmFibGVfc3ZnJSc6IDEsCiAKKyAgICAjIFVzZSB2OCBh
cyBkZWZhdWx0IEphdmFTY3JpcHQgZW5naW5lLiBUaGlzIG1ha2VzIHN1cmUgdGhhdCBqYXZhc2Ny
aXB0X2VuZ2luZSB2YXJpYWJsZQorICAgICMgaXMgc2V0IGZvciBib3RoIGluc2lkZV9jaHJvbWl1
bV9idWlsZCAwIGFuZCAxIGNhc2VzLgorICAgICdqYXZhc2NyaXB0X2VuZ2luZSUnOiAndjgnLAor
CiAgICAgJ3dlYmNvcmVfaW5jbHVkZV9kaXJzJzogWwogICAgICAgJy4uLycsCiAgICAgICAnLi4v
YWNjZXNzaWJpbGl0eScsCkBAIC0xNDM2LDYgKzE0NDIsMTEgQEAKICAgICAgICAgICAgIFsnZXhj
bHVkZScsICcvKFdpbmRvd3N8VW5pc2NyaWJlKVteL10qXFwuY3BwJCddCiAgICAgICAgICAgXSwK
ICAgICAgICAgfV0sCisgICAgICAgIFsnamF2YXNjcmlwdF9lbmdpbmU9PSJ2OCInLCB7CisgICAg
ICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKKyAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIp
L3Y4L3NyYy9leHRlbnNpb25zL2V4cGVyaW1lbnRhbC9leHBlcmltZW50YWwuZ3lwOmkxOG5fYXBp
JywKKyAgICAgICAgICBdLAorICAgICAgICB9XSwKICAgICAgIF0sCiAgICAgfSwKICAgICB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVy
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVu
dGltZUVuYWJsZWRGZWF0dXJlcy5jcHAJKHJldmlzaW9uIDc2NTc4KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjksNiArNjksMTUgQEAgYm9vbCBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpmaWxl
U3lzdGVtRQogfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoRVhQRVJJTUVOVEFMX0kxOE5fQVBJKQor
Ym9vbCBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjppc0V4cGVyaW1lbnRhbEkxOE5BUElFbmFibGVk
ID0gZmFsc2U7CisKK2Jvb2wgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6ZXhwZXJpbWVudGFsSTE4
TkFQSUVuYWJsZWQoKQoreworICAgIHJldHVybiBpc0V4cGVyaW1lbnRhbEkxOE5BUElFbmFibGVk
OworfQorI2VuZGlmCisKICNpZiBFTkFCTEUoVklERU8pCiAKIGJvb2wgUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6YXVkaW9FbmFibGVkKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dl
bmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oCShyZXZpc2lvbiA3
NjU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRG
ZWF0dXJlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjksNiArMTY5LDExIEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgdm9pZCBzZXRGaWxlU3lzdGVtRW5hYmxlZChib29sIGlzRW5hYmxlZCkgeyBpc0Zp
bGVTeXN0ZW1FbmFibGVkID0gaXNFbmFibGVkOyB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShFWFBF
UklNRU5UQUxfSTE4Tl9BUEkpCisgICAgc3RhdGljIGJvb2wgZXhwZXJpbWVudGFsSTE4TkFQSUVu
YWJsZWQoKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRFeHBlcmltZW50YWxJMThOQVBJRW5hYmxlZChi
b29sIGlzRW5hYmxlZCkgeyBpc0V4cGVyaW1lbnRhbEkxOE5BUElFbmFibGVkID0gaXNFbmFibGVk
OyB9CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICAvLyBOZXZlciBpbnN0YW50aWF0ZS4KICAgICBS
dW50aW1lRW5hYmxlZEZlYXR1cmVzKCkgeyB9CkBAIC0xOTMsNiArMTk4LDEwIEBAIHByaXZhdGU6
CiAjaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQogICAgIHN0YXRpYyBib29sIGlzRmlsZVN5c3RlbUVu
YWJsZWQ7CiAjZW5kaWYKKworI2lmIEVOQUJMRShFWFBFUklNRU5UQUxfSTE4Tl9BUEkpCisgICAg
c3RhdGljIGJvb2wgaXNFeHBlcmltZW50YWxJMThOQVBJRW5hYmxlZDsKKyNlbmRpZgogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhET01XaW5kb3dTaGVsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHAJKHJldmlzaW9uIDc2NTc4KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUg
IlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNrLmgiCiAjaW5jbHVkZSAiU2Ny
aXB0Q2FsbFN0YWNrRmFjdG9yeS5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKQEAg
LTYyLDYgKzYzLDExIEBACiAjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx2OC1kZWJ1Zy5o
PgogI2luY2x1ZGUgPHY4Lmg+CisKKyNpZiBFTkFCTEUoRVhQRVJJTUVOVEFMX0kxOE5fQVBJKQor
I2luY2x1ZGUgPHY4L3NyYy9leHRlbnNpb25zL2V4cGVyaW1lbnRhbC9pMThuLWV4dGVuc2lvbi5o
PgorI2VuZGlmCisKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9P
d25BcnJheVB0ci5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KQEAgLTM1Niw2ICsz
NjIsMTIgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IFY4RE9NV2luZG93UwogICAgIGlm
ICghVjhQcm94eTo6cmVnaXN0ZXJlZEV4dGVuc2lvbldpdGhWOChEYXRlRXh0ZW5zaW9uOjpnZXQo
KSkpCiAgICAgICAgIFY4UHJveHk6OnJlZ2lzdGVyRXh0ZW5zaW9uKERhdGVFeHRlbnNpb246Omdl
dCgpKTsKIAorI2lmIEVOQUJMRShFWFBFUklNRU5UQUxfSTE4Tl9BUEkpCisgICAgLy8gRW5hYmxl
cyBleHBlcmltZW50YWwgaTE4biBBUEkgaW4gVjguCisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OmV4cGVyaW1lbnRhbEkxOE5BUElFbmFibGVkKCkgJiYgIVY4UHJveHk6OnJlZ2lzdGVy
ZWRFeHRlbnNpb25XaXRoVjgodjg6OmludGVybmFsOjpJMThORXh0ZW5zaW9uOjpnZXQoKSkpCisg
ICAgICAgIFY4UHJveHk6OnJlZ2lzdGVyRXh0ZW5zaW9uKHY4OjppbnRlcm5hbDo6STE4TkV4dGVu
c2lvbjo6Z2V0KCkpOworI2VuZGlmCisKICAgICAvLyBEeW5hbWljYWxseSB0ZWxsIHY4IGFib3V0
IG91ciBleHRlbnNpb25zIG5vdy4KICAgICBjb25zdCBWOEV4dGVuc2lvbnMmIGV4dGVuc2lvbnMg
PSBWOFByb3h5OjpleHRlbnNpb25zKCk7CiAgICAgT3duQXJyYXlQdHI8Y29uc3QgY2hhcio+IGV4
dGVuc2lvbk5hbWVzKG5ldyBjb25zdCBjaGFyKltleHRlbnNpb25zLnNpemUoKV0pOwpJbmRleDog
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc2NTc4KQorKysgU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAx
MS0wMS0yNSAgTmVib2pzYSBDaXJpYyAgPGNpcmFAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudHMgTG9jYWxlIG9i
amVjdCBvZiBKYXZhU2NyaXB0IGludGVybmF0aW9uYWxpemF0aW9uIEFQSSBwcm9wb3NhbCwgYXMg
YW4KKyAgICAgICAgdjggZXh0ZW5zaW9uLiBFeHRlbnNpb24gY29kZSBpcyBob3N0ZWQgaW4gdjgg
cHJvamVjdCAoc3JjL2V4dGVuc2lvbnMvZXhwZXJpbWVudGFsL2kxOG4tZXh0ZW5zaW9uLntjYyxo
fSkKKyAgICAgICAgYW5kIGluIHRoaXMgcGF0Y2ggd2UganVzdCBwcm92aWRlIGZsYWdzLCB0ZXN0
cyBhbmQgYnVpbGQgcnVsZXMgZm9yIGNocm9taXVtIHBvcnQuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTQxNAorCisgICAgICAgICogZmVhdHVyZXMu
Z3lwaToKKyAgICAgICAgKiBwdWJsaWMvV2ViUnVudGltZUZlYXR1cmVzLmg6CisgICAgICAgICog
c3JjL1dlYlJ1bnRpbWVGZWF0dXJlcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlJ1bnRpbWVG
ZWF0dXJlczo6ZW5hYmxlRXhwZXJpbWVudGFsSTE4TkFQSSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlJ1bnRpbWVGZWF0dXJlczo6aXNFeHBlcmltZW50YWxJMThOQVBJRW5hYmxlZCk6CisKIDIwMTEt
MDEtMjQgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBEYXJpbiBBZGxlci4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lw
aQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkJKHJl
dmlzaW9uIDc2NTc4KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCSh3
b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw3IEBACiAgICAgICAgICdFTkFCTEVfRElSRUNUT1JZ
X1VQTE9BRD0xJywKICAgICAgICAgJ0VOQUJMRV9ET01fU1RPUkFHRT0xJywKICAgICAgICAgJ0VO
QUJMRV9FVkVOVFNPVVJDRT0xJywKKyAgICAgICAgJ0VOQUJMRV9FWFBFUklNRU5UQUxfSTE4Tl9B
UEk9MScsCiAgICAgICAgICdFTkFCTEVfRklMRV9TWVNURU09MScsCiAgICAgICAgICdFTkFCTEVf
RklMVEVSUz0xJywKICAgICAgICAgJ0VOQUJMRV9HRU9MT0NBVElPTj0xJywKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlJ1bnRpbWVGZWF0dXJlcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlJ1bnRpbWVGZWF0dXJlcy5oCShy
ZXZpc2lvbiA3NjU3OCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlJ1bnRp
bWVGZWF0dXJlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC05Niw2ICs5Niw5IEBAIHB1YmxpYzoKIAog
ICAgIFdFQktJVF9BUEkgc3RhdGljIHZvaWQgZW5hYmxlRmlsZVN5c3RlbShib29sKTsKICAgICBX
RUJLSVRfQVBJIHN0YXRpYyBib29sIGlzRmlsZVN5c3RlbUVuYWJsZWQoKTsKKyAgICAKKyAgICBX
RUJLSVRfQVBJIHN0YXRpYyB2b2lkIGVuYWJsZUV4cGVyaW1lbnRhbEkxOE5BUEkoYm9vbCk7Cisg
ICAgV0VCS0lUX0FQSSBzdGF0aWMgYm9vbCBpc0V4cGVyaW1lbnRhbEkxOE5BUElFbmFibGVkKCk7
CiAKIHByaXZhdGU6CiAgICAgV2ViUnVudGltZUZlYXR1cmVzKCk7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJSdW50aW1lRmVhdHVyZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlJ1bnRpbWVGZWF0dXJlcy5jcHAJKHJldmlzaW9u
IDc2NTc4KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUnVudGltZUZlYXR1cmVz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA0LDQgKzMwNCwyMCBAQCBib29sIFdlYlJ1bnRpbWVG
ZWF0dXJlczo6aXNGaWxlU3lzdGVtRW5hCiAjZW5kaWYKIH0KIAordm9pZCBXZWJSdW50aW1lRmVh
dHVyZXM6OmVuYWJsZUV4cGVyaW1lbnRhbEkxOE5BUEkoYm9vbCBlbmFibGUpCit7CisjaWYgRU5B
QkxFKEVYUEVSSU1FTlRBTF9JMThOX0FQSSkKKyAgICBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
ZXRFeHBlcmltZW50YWxJMThOQVBJRW5hYmxlZChlbmFibGUpOworI2VuZGlmCit9CisKK2Jvb2wg
V2ViUnVudGltZUZlYXR1cmVzOjppc0V4cGVyaW1lbnRhbEkxOE5BUElFbmFibGVkKCkKK3sKKyNp
ZiBFTkFCTEUoRVhQRVJJTUVOVEFMX0kxOE5fQVBJKQorICAgIHJldHVybiBSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpleHBlcmltZW50YWxJMThOQVBJRW5hYmxlZCgpOworI2Vsc2UKKyAgICByZXR1
cm4gZmFsc2U7CisjZW5kaWYKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBUb29s
cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA3NjYw
OSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisy
MDExLTAxLTI1ICBOZWJvanNhIENpcmljICA8Y2lyYUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50cyBMb2NhbGUg
b2JqZWN0IG9mIEphdmFTY3JpcHQgaW50ZXJuYXRpb25hbGl6YXRpb24gQVBJIHByb3Bvc2FsLCBh
cyBhbgorICAgICAgICB2OCBleHRlbnNpb24uIEV4dGVuc2lvbiBjb2RlIGlzIGhvc3RlZCBpbiB2
OCBwcm9qZWN0IChzcmMvZXh0ZW5zaW9ucy9leHBlcmltZW50YWwvaTE4bi1leHRlbnNpb24ue2Nj
LGh9KQorICAgICAgICBhbmQgaW4gdGhpcyBwYXRjaCB3ZSBqdXN0IHByb3ZpZGUgZmxhZ3MsIHRl
c3RzIGFuZCBidWlsZCBydWxlcyBmb3IgY2hyb21pdW0gcG9ydC4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5NDE0CisKKyAgICAgICAgKiBEdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwOgorICAgICAgICAoVGVzdFNoZWxsOjpUZXN0
U2hlbGwpOgorCiAyMDExLTAxLTI1ICBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgIDxndXN0YXZvLm5v
cm9uaGFAY29sbGFib3JhLmNvLnVrPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFuZHJlYXMgS2xp
bmcuCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAJ
KHJldmlzaW9uIDc2NTc4KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNo
ZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMsNiArOTMsNyBAQCBUZXN0U2hlbGw6OlRlc3RT
aGVsbChib29sIHRlc3RTaGVsbE1vZGUpCiAgICAgV2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVH
ZW9sb2NhdGlvbih0cnVlKTsKICAgICBXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZUluZGV4ZWRE
YXRhYmFzZSh0cnVlKTsKICAgICBXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZUZpbGVTeXN0ZW0o
dHJ1ZSk7CisgICAgV2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVFeHBlcmltZW50YWxJMThOQVBJ
KHRydWUpOwogICAgIG1fYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuc2V0KG5ldyBBY2Nlc3NpYmls
aXR5Q29udHJvbGxlcih0aGlzKSk7CiAgICAgbV9sYXlvdXRUZXN0Q29udHJvbGxlci5zZXQobmV3
IExheW91dFRlc3RDb250cm9sbGVyKHRoaXMpKTsKICAgICBtX2V2ZW50U2VuZGVyLnNldChuZXcg
RXZlbnRTZW5kZXIodGhpcykpOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNzY2MDkpCisrKyBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzOCBAQAorMjAxMS0wMS0y
NSAgTmVib2pzYSBDaXJpYyAgPGNpcmFAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudHMgTG9jYWxlIG9iamVjdCBv
ZiBKYXZhU2NyaXB0IGludGVybmF0aW9uYWxpemF0aW9uIEFQSSBwcm9wb3NhbCwgYXMgYW4KKyAg
ICAgICAgdjggZXh0ZW5zaW9uLiBFeHRlbnNpb24gY29kZSBpcyBob3N0ZWQgaW4gdjggcHJvamVj
dCAoc3JjL2V4dGVuc2lvbnMvZXhwZXJpbWVudGFsL2kxOG4tZXh0ZW5zaW9uLntjYyxofSkKKyAg
ICAgICAgYW5kIGluIHRoaXMgcGF0Y2ggd2UganVzdCBwcm92aWRlIGZsYWdzLCB0ZXN0cyBhbmQg
YnVpbGQgcnVsZXMgZm9yIGNocm9taXVtIHBvcnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTQxNAorCisgICAgICAgICogZmFzdC9qcy9pMThuLWJp
bmRpbmdzLWxvY2FsZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvaTE4
bi1iaW5kaW5ncy1sb2NhbGUuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9zY3JpcHQt
dGVzdHMvaTE4bi1iaW5kaW5ncy1sb2NhbGUuanM6IEFkZGVkLgorICAgICAgICAocmVwb3J0UmVz
dWx0KToKKyAgICAgICAgKGxvY2FsZVRlc3RzLnRoaXMuZGVmYXVsdExvY2FsZSk6CisgICAgICAg
IChsb2NhbGVUZXN0cy50aGlzLmJhc2VMb2NhbGUpOgorICAgICAgICAobG9jYWxlVGVzdHMudGhp
cy5sYW5ndWFnZVNjcmlwdExvY2FsZSk6CisgICAgICAgIChsb2NhbGVUZXN0cy50aGlzLmxhbmd1
YWdlU2NyaXB0UmVnaW9uTG9jYWxlKToKKyAgICAgICAgKGxvY2FsZVRlc3RzLnRoaXMubGFuZ3Vh
Z2VTY3JpcHRSZWdpb25FeHRlbnNpb25Mb2NhbGUpOgorICAgICAgICAobG9jYWxlVGVzdHMudGhp
cy5sYW5ndWFnZVNjcmlwdFJlZ2lvbkRhc2hVRXh0ZW5zaW9uTG9jYWxlKToKKyAgICAgICAgKGxv
Y2FsZVRlc3RzLnRoaXMuYXZhaWxhYmxlTG9jYWxlcyk6CisgICAgICAgIChsb2NhbGVUZXN0cy50
aGlzLm1heGltaXplZExvY2FsZSk6CisgICAgICAgIChsb2NhbGVUZXN0cy50aGlzLm1heGltaXpl
ZExvY2FsZVdpdGhFeHRlbnNpb24pOgorICAgICAgICAobG9jYWxlVGVzdHMudGhpcy5taW5pbWl6
ZWRMb2NhbGUpOgorICAgICAgICAobG9jYWxlVGVzdHMudGhpcy5taW5pbWl6ZWRMb2NhbGVXaXRo
RXh0ZW5zaW9uKToKKyAgICAgICAgKGxvY2FsZVRlc3RzLnRoaXMuZGlzcGxheUZvckJhc2VMb2Nh
bGUpOgorICAgICAgICAobG9jYWxlVGVzdHMudGhpcy5kaXNwbGF5SW5TYW1lTG9jYWxlKToKKyAg
ICAgICAgKGxvY2FsZVRlc3RzLnRoaXMuZGlzcGxheUluRGlmZmVyZW50TG9jYWxlKToKKyAgICAg
ICAgKGxvY2FsZVRlc3RzLnRoaXMuZGlzcGxheUluQ3lyaWxsaWNTY3JpcHQpOgorICAgICAgICAo
bG9jYWxlVGVzdHMudGhpcy5kaXNwbGF5SW5IZWJyZXdTY3JpcHQpOgorICAgICAgICAobG9jYWxl
VGVzdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9Ta2lwcGVkOgorICAgICAgICAqIHBsYXRm
b3JtL21hYy9Ta2lwcGVkOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1NraXBwZWQ6CisgICAgICAg
ICogcGxhdGZvcm0vd2luL1NraXBwZWQ6CisKIDIwMTEtMDEtMjUgIFJ5b3N1a2UgTml3YSAgPHJu
aXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCBTVkcgcmViYXNlbGluZXMgZm9y
IENocm9taXVtLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9pMThuLWJpbmRpbmdzLWxvY2Fs
ZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9pMThuLWJp
bmRpbmdzLWxvY2FsZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9m
YXN0L2pzL2kxOG4tYmluZGluZ3MtbG9jYWxlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw3MSBAQAorVGhpcyB0ZXN0IGNoZWNrcyBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzIG9m
IExvY2FsZSBvYmplY3QuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGVu
LVVTIGlzIGVuLVVTCitQQVNTIGVuIGlzIGVuCitQQVNTIHVuZGVmaW5lZCBpcyB1bmRlZmluZWQK
K1BBU1MgVVMgaXMgVVMKK1BBU1Mgc3IgaXMgc3IKK1BBU1Mgc3IgaXMgc3IKK1BBU1MgdW5kZWZp
bmVkIGlzIHVuZGVmaW5lZAorUEFTUyB1bmRlZmluZWQgaXMgdW5kZWZpbmVkCitQQVNTIHpoLUhh
bnMgaXMgemgtSGFucworUEFTUyB6aCBpcyB6aAorUEFTUyBIYW5zIGlzIEhhbnMKK1BBU1MgdW5k
ZWZpbmVkIGlzIHVuZGVmaW5lZAorUEFTUyB6aC1IYW5zLUNOIGlzIHpoLUhhbnMtQ04KK1BBU1Mg
emggaXMgemgKK1BBU1MgSGFucyBpcyBIYW5zCitQQVNTIENOIGlzIENOCitQQVNTIGRlLURFQGNv
bGxhdGlvbj1waG9uZSBpcyBkZS1ERUBjb2xsYXRpb249cGhvbmUKK1BBU1MgZGUgaXMgZGUKK1BB
U1MgdW5kZWZpbmVkIGlzIHVuZGVmaW5lZAorUEFTUyBERSBpcyBERQorUEFTUyBkZS1ERS11LWNv
LXBob25lYm9vayBpcyBkZS1ERS11LWNvLXBob25lYm9vaworUEFTUyBkZSBpcyBkZQorUEFTUyB1
bmRlZmluZWQgaXMgdW5kZWZpbmVkCitQQVNTIERFIGlzIERFCitQQVNTIHRydWUgaXMgdHJ1ZQor
UEFTUyB0cnVlIGlzIHRydWUKK1BBU1Mgc3ItQ3lybC1SUyBpcyBzci1DeXJsLVJTCitQQVNTIHNy
IGlzIHNyCitQQVNTIEN5cmwgaXMgQ3lybAorUEFTUyBSUyBpcyBSUworUEFTUyBkZS1MYXRuLURF
QGNvbGxhdGlvbj1waG9uZSBpcyBkZS1MYXRuLURFQGNvbGxhdGlvbj1waG9uZQorUEFTUyBkZSBp
cyBkZQorUEFTUyBMYXRuIGlzIExhdG4KK1BBU1MgREUgaXMgREUKK1BBU1Mgc3IgaXMgc3IKK1BB
U1Mgc3IgaXMgc3IKK1BBU1MgdW5kZWZpbmVkIGlzIHVuZGVmaW5lZAorUEFTUyB1bmRlZmluZWQg
aXMgdW5kZWZpbmVkCitQQVNTIGRlLUBjb2xsYXRpb249cGhvbmUgaXMgZGUtQGNvbGxhdGlvbj1w
aG9uZQorUEFTUyBkZSBpcyBkZQorUEFTUyB1bmRlZmluZWQgaXMgdW5kZWZpbmVkCitQQVNTIHVu
ZGVmaW5lZCBpcyB1bmRlZmluZWQKK1BBU1MgRW5nbGlzaCBpcyBFbmdsaXNoCitQQVNTIHVuZGVm
aW5lZCBpcyB1bmRlZmluZWQKK1BBU1MgdW5kZWZpbmVkIGlzIHVuZGVmaW5lZAorUEFTUyBFbmds
aXNoIGlzIEVuZ2xpc2gKK1BBU1MgRW5nbGlzaCBpcyBFbmdsaXNoCitQQVNTIExhdGluIGlzIExh
dGluCitQQVNTIFVuaXRlZCBTdGF0ZXMgaXMgVW5pdGVkIFN0YXRlcworUEFTUyBFbmdsaXNoIChM
YXRpbiwgVW5pdGVkIFN0YXRlcykgaXMgRW5nbGlzaCAoTGF0aW4sIFVuaXRlZCBTdGF0ZXMpCitQ
QVNTIFNlcmJpYW4gaXMgU2VyYmlhbgorUEFTUyBDeXJpbGxpYyBpcyBDeXJpbGxpYworUEFTUyBT
ZXJiaWEgaXMgU2VyYmlhCitQQVNTIFNlcmJpYW4gKEN5cmlsbGljLCBTZXJiaWEpIGlzIFNlcmJp
YW4gKEN5cmlsbGljLCBTZXJiaWEpCitQQVNTINCh0YDQv9GB0LrQuCBpcyDQodGA0L/RgdC60LgK
K1BBU1Mg0IvQuNGA0LjQu9C40YbQsCBpcyDQi9C40YDQuNC70LjRhtCwCitQQVNTINCh0YDQsdC4
0ZjQsCBpcyDQodGA0LHQuNGY0LAKK1BBU1Mg0KHRgNC/0YHQutC4ICjQi9C40YDQuNC70LjRhtCw
LCDQodGA0LHQuNGY0LApIGlzINCh0YDQv9GB0LrQuCAo0IvQuNGA0LjQu9C40YbQsCwg0KHRgNCx
0LjRmNCwKQorUEFTUyDXoteR16jXmdeqIGlzINei15HXqNeZ16oKK1BBU1Mg16LXkdeo15kgaXMg
16LXkdeo15kKK1BBU1Mg15nXqdeo15DXnCBpcyDXmdep16jXkNecCitQQVNTINei15HXqNeZ16og
KNei15HXqNeZLCDXmdep16jXkNecKSBpcyDXoteR16jXmdeqICjXoteR16jXmSwg15nXqdeo15DX
nCkKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL2kxOG4tYmluZGluZ3MtbG9jYWxlLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9pMThuLWJpbmRpbmdzLWxvY2FsZS5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9pMThuLWJpbmRpbmdzLWxvY2FsZS5o
dG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMg
Ii0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVp
dj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIC8+Cis8
bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InJlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+
Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48
L2Rpdj4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvaTE4bi1iaW5kaW5ncy1sb2NhbGUuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9zY3JpcHQt
dGVzdHMvaTE4bi1iaW5kaW5ncy1sb2NhbGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC9qcy9zY3JpcHQtdGVzdHMvaTE4bi1iaW5kaW5ncy1sb2NhbGUuanMJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3NjcmlwdC10ZXN0cy9pMThuLWJpbmRpbmdzLWxvY2Fs
ZS5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTEgQEAKK2Rlc2NyaXB0aW9uKAorCisiVGhp
cyB0ZXN0IGNoZWNrcyBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzIG9mIExvY2FsZSBvYmplY3QuIgor
CispOworCitmdW5jdGlvbiByZXBvcnRSZXN1bHQoX2FjdHVhbCwgX2V4cGVjdGVkKSB7CisgICAg
aWYgKGlzUmVzdWx0Q29ycmVjdChfYWN0dWFsLCBfZXhwZWN0ZWQpKQorICAgICAgICB0ZXN0UGFz
c2VkKF9hY3R1YWwgKyAnIGlzICcgKyBfZXhwZWN0ZWQpOworICAgIGVsc2UKKyAgICAgICAgdGVz
dEZhaWxlZChfYWN0dWFsICsgJyBzaG91bGQgYmUgJyArIF9leHBlY3RlZCk7Cit9CisKK2xvY2Fs
ZVRlc3RzID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5kZWZhdWx0TG9jYWxlID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHZhciBsb2NhbGUgPSBuZXcgTG9jYWxlKCk7CisgICAgICAgIHJlcG9ydFJl
c3VsdChsb2NhbGUubG9jYWxlLCAnZW4tVVMnKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2Fs
ZS5sYW5ndWFnZSwgJ2VuJyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUuc2NyaXB0LCB1
bmRlZmluZWQpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLnJlZ2lvbiwgJ1VTJyk7Cisg
ICAgfTsKKworICAgIHRoaXMuYmFzZUxvY2FsZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIg
bG9jYWxlID0gbmV3IExvY2FsZSgnc3InKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5s
b2NhbGUsICdzcicpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLmxhbmd1YWdlLCAnc3In
KTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5zY3JpcHQsIHVuZGVmaW5lZCk7CisgICAg
ICAgIHJlcG9ydFJlc3VsdChsb2NhbGUucmVnaW9uLCB1bmRlZmluZWQpOworICAgIH07CisKKyAg
ICB0aGlzLmxhbmd1YWdlU2NyaXB0TG9jYWxlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBs
b2NhbGUgPSBuZXcgTG9jYWxlKCd6aC1IYW5zJyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2Nh
bGUubG9jYWxlLCAnemgtSGFucycpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLmxhbmd1
YWdlLCAnemgnKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5zY3JpcHQsICdIYW5zJyk7
CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUucmVnaW9uLCB1bmRlZmluZWQpOworICAgIH07
CisKKyAgICB0aGlzLmxhbmd1YWdlU2NyaXB0UmVnaW9uTG9jYWxlID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHZhciBsb2NhbGUgPSBuZXcgTG9jYWxlKCd6aC1IYW5zLUNOJyk7CisgICAgICAgIHJl
cG9ydFJlc3VsdChsb2NhbGUubG9jYWxlLCAnemgtSGFucy1DTicpOworICAgICAgICByZXBvcnRS
ZXN1bHQobG9jYWxlLmxhbmd1YWdlLCAnemgnKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2Fs
ZS5zY3JpcHQsICdIYW5zJyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUucmVnaW9uLCAn
Q04nKTsKKyAgICB9OworCisgICAgdGhpcy5sYW5ndWFnZVNjcmlwdFJlZ2lvbkV4dGVuc2lvbkxv
Y2FsZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgbG9jYWxlID0gbmV3IExvY2FsZSgnZGUt
REVAY29sbGF0aW9uPXBob25lJyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUubG9jYWxl
LCAnZGUtREVAY29sbGF0aW9uPXBob25lJyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUu
bGFuZ3VhZ2UsICdkZScpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLnNjcmlwdCwgdW5k
ZWZpbmVkKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5yZWdpb24sICdERScpOworICAg
IH07CisKKyAgICB0aGlzLmxhbmd1YWdlU2NyaXB0UmVnaW9uRGFzaFVFeHRlbnNpb25Mb2NhbGUg
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGxvY2FsZSA9IG5ldyBMb2NhbGUoJ2RlLURFLXUt
Y28tcGhvbmVib29rJyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUubG9jYWxlLCAnZGUt
REUtdS1jby1waG9uZWJvb2snKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5sYW5ndWFn
ZSwgJ2RlJyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUuc2NyaXB0LCB1bmRlZmluZWQp
OworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLnJlZ2lvbiwgJ0RFJyk7CisgICAgfTsKKyAg
CisgICAgdGhpcy5hdmFpbGFibGVMb2NhbGVzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBs
b2NhbGVzID0gTG9jYWxlLmF2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0
KGxvY2FsZXMubGVuZ3RoID4gMTAwLCB0cnVlKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2Fs
ZXMuam9pbigpLmluZGV4T2YoJ3NyJykgPj0gMCwgdHJ1ZSk7CisgICAgfTsKKyAgCisgICAgdGhp
cy5tYXhpbWl6ZWRMb2NhbGUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGxvY2FsZSA9IG5l
dyBMb2NhbGUoJ3NyJykubWF4aW1pemVkTG9jYWxlKCk7CisgICAgICAgIHJlcG9ydFJlc3VsdChs
b2NhbGUubG9jYWxlLCAnc3ItQ3lybC1SUycpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxl
Lmxhbmd1YWdlLCAnc3InKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5zY3JpcHQsICdD
eXJsJyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUucmVnaW9uLCAnUlMnKTsKKyAgICB9
OworICAKKyAgICB0aGlzLm1heGltaXplZExvY2FsZVdpdGhFeHRlbnNpb24gPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgdmFyIGxvY2FsZSA9IG5ldyBMb2NhbGUoJ2RlQGNvbGxhdGlvbj1waG9uZScp
Lm1heGltaXplZExvY2FsZSgpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLmxvY2FsZSwg
J2RlLUxhdG4tREVAY29sbGF0aW9uPXBob25lJyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2Nh
bGUubGFuZ3VhZ2UsICdkZScpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLnNjcmlwdCwg
J0xhdG4nKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5yZWdpb24sICdERScpOworICAg
IH07CisgIAorICAgIHRoaXMubWluaW1pemVkTG9jYWxlID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IHZhciBsb2NhbGUgPSBuZXcgTG9jYWxlKCdzci1DeXJsLVJTJykubWluaW1pemVkTG9jYWxlKCk7
CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUubG9jYWxlLCAnc3InKTsKKyAgICAgICAgcmVw
b3J0UmVzdWx0KGxvY2FsZS5sYW5ndWFnZSwgJ3NyJyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChs
b2NhbGUuc2NyaXB0LCB1bmRlZmluZWQpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLnJl
Z2lvbiwgdW5kZWZpbmVkKTsKKyAgICB9OworICAKKyAgICB0aGlzLm1pbmltaXplZExvY2FsZVdp
dGhFeHRlbnNpb24gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGxvY2FsZSA9IG5ldyBMb2Nh
bGUoJ2RlLUxhdG4tREVAY29sbGF0aW9uPXBob25lJykubWluaW1pemVkTG9jYWxlKCk7CisgICAg
ICAgIC8vIEZJWE1FOiBGaXggSUNVIHRvIHJldHVybiBkZUBjb2xsYXRpb249cGhvbmUuCisgICAg
ICAgIHJlcG9ydFJlc3VsdChsb2NhbGUubG9jYWxlLCAnZGUtQGNvbGxhdGlvbj1waG9uZScpOwor
ICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLmxhbmd1YWdlLCAnZGUnKTsKKyAgICAgICAgcmVw
b3J0UmVzdWx0KGxvY2FsZS5zY3JpcHQsIHVuZGVmaW5lZCk7CisgICAgICAgIHJlcG9ydFJlc3Vs
dChsb2NhbGUucmVnaW9uLCB1bmRlZmluZWQpOworICAgIH07CisgICAgCisgICAgdGhpcy5kaXNw
bGF5Rm9yQmFzZUxvY2FsZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgbG9jYWxlID0gbmV3
IExvY2FsZSgnZW4nKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5kaXNwbGF5TGFuZ3Vh
Z2UoKSwgJ0VuZ2xpc2gnKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5kaXNwbGF5U2Ny
aXB0KCksIHVuZGVmaW5lZCk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUuZGlzcGxheVJl
Z2lvbigpLCB1bmRlZmluZWQpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLmRpc3BsYXlO
YW1lKCksICdFbmdsaXNoJyk7CisgICAgfTsKKyAgCisgICAgdGhpcy5kaXNwbGF5SW5TYW1lTG9j
YWxlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBsb2NhbGUgPSBuZXcgTG9jYWxlKCdlbicp
Lm1heGltaXplZExvY2FsZSgpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLmRpc3BsYXlM
YW5ndWFnZSgpLCAnRW5nbGlzaCcpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLmRpc3Bs
YXlTY3JpcHQoKSwgJ0xhdGluJyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUuZGlzcGxh
eVJlZ2lvbigpLCAnVW5pdGVkIFN0YXRlcycpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxl
LmRpc3BsYXlOYW1lKCksICdFbmdsaXNoIChMYXRpbiwgVW5pdGVkIFN0YXRlcyknKTsKKyAgICB9
OworICAKKyAgICB0aGlzLmRpc3BsYXlJbkRpZmZlcmVudExvY2FsZSA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICB2YXIgbG9jYWxlID0gbmV3IExvY2FsZSgnc3InKS5tYXhpbWl6ZWRMb2NhbGUoKTsK
KyAgICAgICAgdmFyIGRpc3BsYXlMb2NhbGUgPSBuZXcgTG9jYWxlKCdlbicpOworICAgICAgICBy
ZXBvcnRSZXN1bHQobG9jYWxlLmRpc3BsYXlMYW5ndWFnZShkaXNwbGF5TG9jYWxlKSwgJ1NlcmJp
YW4nKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5kaXNwbGF5U2NyaXB0KGRpc3BsYXlM
b2NhbGUpLCAnQ3lyaWxsaWMnKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5kaXNwbGF5
UmVnaW9uKGRpc3BsYXlMb2NhbGUpLCAnU2VyYmlhJyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChs
b2NhbGUuZGlzcGxheU5hbWUoZGlzcGxheUxvY2FsZSksICdTZXJiaWFuIChDeXJpbGxpYywgU2Vy
YmlhKScpOworICAgIH07CisgIAorICAgIHRoaXMuZGlzcGxheUluQ3lyaWxsaWNTY3JpcHQgPSBm
dW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGxvY2FsZSA9IG5ldyBMb2NhbGUoJ3NyJykubWF4aW1p
emVkTG9jYWxlKCk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUuZGlzcGxheUxhbmd1YWdl
KCksICfQodGA0L/RgdC60LgnKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5kaXNwbGF5
U2NyaXB0KCksICfQi9C40YDQuNC70LjRhtCwJyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2Nh
bGUuZGlzcGxheVJlZ2lvbigpLCAn0KHRgNCx0LjRmNCwJyk7CisgICAgICAgIHJlcG9ydFJlc3Vs
dChsb2NhbGUuZGlzcGxheU5hbWUoKSwgJ9Ch0YDQv9GB0LrQuCAo0IvQuNGA0LjQu9C40YbQsCwg
0KHRgNCx0LjRmNCwKScpOworICAgIH07CisgIAorICAgIHRoaXMuZGlzcGxheUluSGVicmV3U2Ny
aXB0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBsb2NhbGUgPSBuZXcgTG9jYWxlKCdoZScp
Lm1heGltaXplZExvY2FsZSgpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLmRpc3BsYXlM
YW5ndWFnZSgpLCAn16LXkdeo15nXqicpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLmRp
c3BsYXlTY3JpcHQoKSwgJ9ei15HXqNeZJyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUu
ZGlzcGxheVJlZ2lvbigpLCAn15nXqdeo15DXnCcpOworICAgICAgICByZXBvcnRSZXN1bHQobG9j
YWxlLmRpc3BsYXlOYW1lKCksICfXoteR16jXmdeqICjXoteR16jXmSwg15nXqdeo15DXnCknKTsK
KyAgICB9OworfTsKKworKGZ1bmN0aW9uKCkgeworICAgIHZhciBhbGxUZXN0cyA9IG5ldyBsb2Nh
bGVUZXN0cygpOworICAgIGZvciAodmFyIHRlc3QgaW4gYWxsVGVzdHMpIHsKKyAgICAgICAgYWxs
VGVzdHNbdGVzdF0oKTsKKyAgICB9Cit9KSgpOworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0g
dHJ1ZTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9ndGsvU2tpcHBlZAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsv
U2tpcHBlZAkocmV2aXNpb24gNzY2MDkpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tp
cHBlZAkod29ya2luZyBjb3B5KQpAQCAtMjY4Nyw2ICsyNjg3LDkgQEAgZmFzdC94c2wveHNsdC1t
aXNzaW5nLW5hbWVzcGFjZS1pbi14c2x0LgogZmFzdC94c2wveHNsdC1yZWxhdGl2ZS1wYXRoLnht
bAogZmFzdC94c2wveHNsdF91bmljb2RlLnhtbAogCisjIFRoaXMgcG9ydCBkb2Vzbid0IHN1cHBv
cnQgdjggaTE4biBleHRlbnNpb24uCitmYXN0L2pzL2kxOG4tYmluZGluZ3MtbG9jYWxlLmh0bWwK
KwogIyBUZXN0cyBpbiBodHRwLyBkaXJlY3RvcnkKICMgICBUZXN0cyBmYWlsaW5nCiBodHRwL3Rl
c3RzL2FwcGNhY2hlL2NyYXNoLXdoZW4tbmF2aWdhdGluZy1hd2F5LXRoZW4tYmFjay5odG1sCklu
ZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZAkocmV2aXNpb24gNzY2MDkpCisrKyBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZAkod29ya2luZyBjb3B5KQpAQCAtMjgxLDYgKzI4MSwx
MiBAQCBhbmltYXRpb25zL3N0b3AtYW5pbWF0aW9uLW9uLXN1c3BlbmQuaHRtCiAjIERSVCBkb2Vz
IG5vdCBzdXBwb3J0IHRvZ2dsaW5nIGNhcmV0IGJyb3dzaW5nIG9uIC8gb2ZmCiBlZGl0aW5nL3Nl
bGVjdGlvbi9jYXJldC1tb2RlLXBhcmFncmFwaC1rZXlzLW5hdmlnYXRpb24uaHRtbAogCisjIFRo
aXMgdGVzdCBpcyBmYWlsaW5nIG9uIHRoZSBMZW9wYXJkIEludGVsIERlYnVnIGJ1aWxkYm90Cisj
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTgwNworZmFzdC9ibG9j
a2Zsb3cvYnJva2VuLWlkZW9ncmFwaC1zbWFsbC1jYXBzLmh0bWwKKwogIyBSZXF1ZXN0IEVOQUJM
RShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkgc3VwcG9ydAogZmFzdC9hbmltYXRpb24KIAorIyBU
aGlzIHBvcnQgZG9lc24ndCBzdXBwb3J0IHY4IGkxOG4gZXh0ZW5zaW9uLgorZmFzdC9qcy9pMThu
LWJpbmRpbmdzLWxvY2FsZS5odG1sCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lw
cGVkCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQJKHJldmlz
aW9uIDc2NjA5KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZAkod29ya2luZyBj
b3B5KQpAQCAtMTAyLDYgKzEwMiw5IEBAIGZhc3QvdGV4dC9oeXBoZW5zLmh0bWwKICMgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzMzMyCiBpbnNwZWN0b3IvZG9tLWJy
ZWFrcG9pbnRzLmh0bWwKIAorIyBUaGlzIHBvcnQgZG9lc24ndCBzdXBwb3J0IHY4IGkxOG4gZXh0
ZW5zaW9uLgorZmFzdC9qcy9pMThuLWJpbmRpbmdzLWxvY2FsZS5odG1sCisKICMgPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ICMKICMgICAgICAgRHJhZyBhbmQgRHJvcCBTdXBwb3J0IGluIERSVC4gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKICMgPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ICMKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCShyZXZpc2lvbiA3NjYwOSkKKysrIExh
eW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIyLDMg
KzExMjIsNSBAQCBodHRwL3Rlc3RzL2xvYWRpbmcvY3Jvc3Mtb3JpZ2luLVhIUi13aWxsCiAjIFJl
cXVlc3QgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKSBzdXBwb3J0CiBmYXN0L2FuaW1h
dGlvbgogCisjIFRoaXMgcG9ydCBkb2Vzbid0IHN1cHBvcnQgdjggaTE4biBleHRlbnNpb24uCitm
YXN0L2pzL2kxOG4tYmluZGluZ3MtbG9jYWxlLmh0bWwK
</data>
<flag name="review"
          id="71554"
          type_id="1"
          status="+"
          setter="fishd"
    />
    <flag name="commit-queue"
          id="71676"
          type_id="3"
          status="-"
          setter="fishd"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81250</attachid>
            <date>2011-02-04 11:25:54 -0800</date>
            <delta_ts>2011-02-09 11:43:50 -0800</delta_ts>
            <desc>patch w/ layout test</desc>
            <filename>i18n-locale.txt</filename>
            <type>text/plain</type>
            <size>23124</size>
            <attacher name="Xiaomei Ji">xji</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc3NjMxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMDEtMjggIE5lYm9qc2Eg
Q2lyaWMgIDxjaXJhQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnRzIExvY2FsZSBvYmplY3Qgb2YgSmF2YVNjcmlw
dCBpbnRlcm5hdGlvbmFsaXphdGlvbiBBUEkgcHJvcG9zYWwsIGFzIGFuCisgICAgICAgIHY4IGV4
dGVuc2lvbi4gRXh0ZW5zaW9uIGNvZGUgaXMgaG9zdGVkIGluIHY4IHByb2plY3QgKHNyYy9leHRl
bnNpb25zL2V4cGVyaW1lbnRhbC9pMThuLWV4dGVuc2lvbi57Y2MsaH0pCisgICAgICAgIGFuZCBp
biB0aGlzIHBhdGNoIHdlIGp1c3QgcHJvdmlkZSBmbGFncywgdGVzdHMgYW5kIGJ1aWxkIHJ1bGVz
IGZvciBjaHJvbWl1bSBwb3J0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDk0MTQKKworICAgICAgICBUZXN0OiBmYXN0L2pzL2kxOG4tYmluZGluZ3Mt
bG9jYWxlLmh0bWwKKworICAgICAgICAqIFdlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwOgorICAgICAg
ICAqIGJpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpleHBlcmltZW50YWxJMThOQVBJRW5h
YmxlZCk6CisgICAgICAgICogYmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVz
Lmg6CisgICAgICAgIChXZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzZXRFeHBlcmlt
ZW50YWxJMThOQVBJRW5hYmxlZCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01XaW5kb3dT
aGVsbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxsOjpjcmVhdGVOZXdD
b250ZXh0KToKKwogMjAxMS0wMi0wNCAgUGF2ZWwgUG9kaXZpbG92ICA8cG9kaXZpbG92QGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFuLgpJbmRleDogU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAJKHJldmlzaW9uIDc3NjMxKQorKysgU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAJKHdvcmtpbmcgY29weSkKQEAgLTQ1
LDcgKzQ1LDkgQEAKICAgICAgIH0sCiAgICAgfSx7CiAgICAgICAjIFdlYktpdCBpcyBjaGVja2Vk
IG91dCBpbiBzcmMvY2hyb21pdW0vdGhpcmRfcGFydHkvV2ViS2l0Ci0gICAgICAndmFyaWFibGVz
JzogeydjaHJvbWl1bV9zcmNfZGlyJzogJy4uLy4uLy4uLy4uLy4uJ30sCisgICAgICAndmFyaWFi
bGVzJzogeworICAgICAgICAnY2hyb21pdW1fc3JjX2Rpcic6ICcuLi8uLi8uLi8uLi8uLicsCisg
ICAgICB9LAogICAgIH1dLAogICAgIFsnT1MgPT0gIm1hYyInLCB7CiAgICAgICAndGFyZ2V0cyc6
IFsKQEAgLTEyMiw2ICsxMjQsMTAgQEAKICAgICAjIGJpbmFyeSBhbmQgaW5jcmVhc2luZyB0aGUg
c3BlZWQgb2YgZ2RiLgogICAgICdlbmFibGVfc3ZnJSc6IDEsCiAKKyAgICAjIFVzZSB2OCBhcyBk
ZWZhdWx0IEphdmFTY3JpcHQgZW5naW5lLiBUaGlzIG1ha2VzIHN1cmUgdGhhdCBqYXZhc2NyaXB0
X2VuZ2luZSB2YXJpYWJsZQorICAgICMgaXMgc2V0IGZvciBib3RoIGluc2lkZV9jaHJvbWl1bV9i
dWlsZCAwIGFuZCAxIGNhc2VzLgorICAgICdqYXZhc2NyaXB0X2VuZ2luZSUnOiAndjgnLAorCiAg
ICAgJ3dlYmNvcmVfaW5jbHVkZV9kaXJzJzogWwogICAgICAgJy4uLycsCiAgICAgICAnLi4vYWNj
ZXNzaWJpbGl0eScsCkBAIC0xNDM5LDYgKzE0NDUsMTEgQEAKICAgICAgICAgICAgIFsnZXhjbHVk
ZScsICcvKFdpbmRvd3N8VW5pc2NyaWJlKVteL10qXFwuY3BwJCddCiAgICAgICAgICAgXSwKICAg
ICAgICAgfV0sCisgICAgICAgIFsnamF2YXNjcmlwdF9lbmdpbmU9PSJ2OCInLCB7CisgICAgICAg
ICAgJ2RlcGVuZGVuY2llcyc6IFsKKyAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3Y4
L3NyYy9leHRlbnNpb25zL2V4cGVyaW1lbnRhbC9leHBlcmltZW50YWwuZ3lwOmkxOG5fYXBpJywK
KyAgICAgICAgICBdLAorICAgICAgICB9XSwKICAgICAgIF0sCiAgICAgfSwKICAgICB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGlt
ZUVuYWJsZWRGZWF0dXJlcy5jcHAJKHJldmlzaW9uIDc3NjMxKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjksNiArNjksMTUgQEAgYm9vbCBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpmaWxlU3lz
dGVtRQogfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoSkFWQVNDUklQVF9JMThOX0FQSSkKK2Jvb2wg
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6aXNKYXZhU2NyaXB0STE4TkFQSUVuYWJsZWQgPSBmYWxz
ZTsKKworYm9vbCBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpqYXZhU2NyaXB0STE4TkFQSUVuYWJs
ZWQoKQoreworICAgIHJldHVybiBpc0phdmFTY3JpcHRJMThOQVBJRW5hYmxlZDsKK30KKyNlbmRp
ZgorCiAjaWYgRU5BQkxFKFZJREVPKQogCiBib29sIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OmF1
ZGlvRW5hYmxlZCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL1J1bnRp
bWVFbmFibGVkRmVhdHVyZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaAkocmV2aXNpb24gNzc2MzEpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMTY5LDYgKzE2OSwxMSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZv
aWQgc2V0RmlsZVN5c3RlbUVuYWJsZWQoYm9vbCBpc0VuYWJsZWQpIHsgaXNGaWxlU3lzdGVtRW5h
YmxlZCA9IGlzRW5hYmxlZDsgfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoSkFWQVNDUklQVF9JMThO
X0FQSSkKKyAgICBzdGF0aWMgYm9vbCBqYXZhU2NyaXB0STE4TkFQSUVuYWJsZWQoKTsKKyAgICBz
dGF0aWMgdm9pZCBzZXRKYXZhU2NyaXB0STE4TkFQSUVuYWJsZWQoYm9vbCBpc0VuYWJsZWQpIHsg
aXNKYXZhU2NyaXB0STE4TkFQSUVuYWJsZWQgPSBpc0VuYWJsZWQ7IH0KKyNlbmRpZgorCiBwcml2
YXRlOgogICAgIC8vIE5ldmVyIGluc3RhbnRpYXRlLgogICAgIFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXMoKSB7IH0KQEAgLTE5Myw2ICsxOTgsMTAgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoRklMRV9T
WVNURU0pCiAgICAgc3RhdGljIGJvb2wgaXNGaWxlU3lzdGVtRW5hYmxlZDsKICNlbmRpZgorCisj
aWYgRU5BQkxFKEpBVkFTQ1JJUFRfSTE4Tl9BUEkpCisgICAgc3RhdGljIGJvb2wgaXNKYXZhU2Ny
aXB0STE4TkFQSUVuYWJsZWQ7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwu
Y3BwCShyZXZpc2lvbiA3NzYzMSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9N
V2luZG93U2hlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVk
ZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFn
ZUdyb3VwLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUg
IlNjcmlwdENhbGxTdGFjay5oIgogI2luY2x1ZGUgIlNjcmlwdENhbGxTdGFja0ZhY3RvcnkuaCIK
ICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCkBAIC02Miw2ICs2MywxMSBAQAogI2luY2x1
ZGUgPHV0aWxpdHk+CiAjaW5jbHVkZSA8djgtZGVidWcuaD4KICNpbmNsdWRlIDx2OC5oPgorCisj
aWYgRU5BQkxFKEpBVkFTQ1JJUFRfSTE4Tl9BUEkpCisjaW5jbHVkZSA8djgvc3JjL2V4dGVuc2lv
bnMvZXhwZXJpbWVudGFsL2kxOG4tZXh0ZW5zaW9uLmg+CisjZW5kaWYKKwogI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CiAjaW5jbHVkZSA8
d3RmL1N0ZExpYkV4dHJhcy5oPgpAQCAtMzU2LDYgKzM2MiwxMiBAQCB2ODo6UGVyc2lzdGVudDx2
ODo6Q29udGV4dD4gVjhET01XaW5kb3dTCiAgICAgaWYgKCFWOFByb3h5OjpyZWdpc3RlcmVkRXh0
ZW5zaW9uV2l0aFY4KERhdGVFeHRlbnNpb246OmdldCgpKSkKICAgICAgICAgVjhQcm94eTo6cmVn
aXN0ZXJFeHRlbnNpb24oRGF0ZUV4dGVuc2lvbjo6Z2V0KCkpOwogCisjaWYgRU5BQkxFKEpBVkFT
Q1JJUFRfSTE4Tl9BUEkpCisgICAgLy8gRW5hYmxlcyBleHBlcmltZW50YWwgaTE4biBBUEkgaW4g
VjguCisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OmphdmFTY3JpcHRJMThOQVBJRW5h
YmxlZCgpICYmICFWOFByb3h5OjpyZWdpc3RlcmVkRXh0ZW5zaW9uV2l0aFY4KHY4OjppbnRlcm5h
bDo6STE4TkV4dGVuc2lvbjo6Z2V0KCkpKQorICAgICAgICBWOFByb3h5OjpyZWdpc3RlckV4dGVu
c2lvbih2ODo6aW50ZXJuYWw6OkkxOE5FeHRlbnNpb246OmdldCgpKTsKKyNlbmRpZgorCiAgICAg
Ly8gRHluYW1pY2FsbHkgdGVsbCB2OCBhYm91dCBvdXIgZXh0ZW5zaW9ucyBub3cuCiAgICAgY29u
c3QgVjhFeHRlbnNpb25zJiBleHRlbnNpb25zID0gVjhQcm94eTo6ZXh0ZW5zaW9ucygpOwogICAg
IE93bkFycmF5UHRyPGNvbnN0IGNoYXIqPiBleHRlbnNpb25OYW1lcyhuZXcgY29uc3QgY2hhcipb
ZXh0ZW5zaW9ucy5zaXplKCldKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZp
c2lvbiA3NzYzMSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMDEtMjggIE5lYm9qc2EgQ2lyaWMgIDxjaXJh
QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBJbXBsZW1lbnRzIExvY2FsZSBvYmplY3Qgb2YgSmF2YVNjcmlwdCBpbnRlcm5hdGlv
bmFsaXphdGlvbiBBUEkgcHJvcG9zYWwsIGFzIGFuCisgICAgICAgIHY4IGV4dGVuc2lvbi4gRXh0
ZW5zaW9uIGNvZGUgaXMgaG9zdGVkIGluIHY4IHByb2plY3QgKHNyYy9leHRlbnNpb25zL2V4cGVy
aW1lbnRhbC9pMThuLWV4dGVuc2lvbi57Y2MsaH0pCisgICAgICAgIGFuZCBpbiB0aGlzIHBhdGNo
IHdlIGp1c3QgcHJvdmlkZSBmbGFncywgdGVzdHMgYW5kIGJ1aWxkIHJ1bGVzIGZvciBjaHJvbWl1
bSBwb3J0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDk0MTQKKworICAgICAgICAqIGZlYXR1cmVzLmd5cGk6CisgICAgICAgICogcHVibGljL1dlYlJ1
bnRpbWVGZWF0dXJlcy5oOgorICAgICAgICAqIHNyYy9XZWJSdW50aW1lRmVhdHVyZXMuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZUV4cGVyaW1lbnRhbEkx
OE5BUEkpOgorICAgICAgICAoV2ViS2l0OjpXZWJSdW50aW1lRmVhdHVyZXM6OmlzRXhwZXJpbWVu
dGFsSTE4TkFQSUVuYWJsZWQpOgorCiAyMDExLTAyLTA0ICBJbHlhIFRpa2hvbm92c2t5ICA8bG9p
c2xvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLgpJbmRleDogU291cmNlL1dl
YktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vZmVhdHVyZXMuZ3lwaQkocmV2aXNpb24gNzc2MzEpCisrKyBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDcgQEAK
ICAgICAgICAgJ0VOQUJMRV9ESVJFQ1RPUllfVVBMT0FEPTEnLAogICAgICAgICAnRU5BQkxFX0RP
TV9TVE9SQUdFPTEnLAogICAgICAgICAnRU5BQkxFX0VWRU5UU09VUkNFPTEnLAorICAgICAgICAn
RU5BQkxFX0pBVkFTQ1JJUFRfSTE4Tl9BUEk9MScsCiAgICAgICAgICdFTkFCTEVfRklMRV9TWVNU
RU09MScsCiAgICAgICAgICdFTkFCTEVfRklMVEVSUz0xJywKICAgICAgICAgJ0VOQUJMRV9HRU9M
T0NBVElPTj0xJywKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlJ1bnRp
bWVGZWF0dXJlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYlJ1bnRpbWVGZWF0dXJlcy5oCShyZXZpc2lvbiA3NzYzMSkKKysrIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYlJ1bnRpbWVGZWF0dXJlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC05
Niw2ICs5Niw5IEBAIHB1YmxpYzoKIAogICAgIFdFQktJVF9BUEkgc3RhdGljIHZvaWQgZW5hYmxl
RmlsZVN5c3RlbShib29sKTsKICAgICBXRUJLSVRfQVBJIHN0YXRpYyBib29sIGlzRmlsZVN5c3Rl
bUVuYWJsZWQoKTsKKyAgICAKKyAgICBXRUJLSVRfQVBJIHN0YXRpYyB2b2lkIGVuYWJsZUphdmFT
Y3JpcHRJMThOQVBJKGJvb2wpOworICAgIFdFQktJVF9BUEkgc3RhdGljIGJvb2wgaXNKYXZhU2Ny
aXB0STE4TkFQSUVuYWJsZWQoKTsKIAogcHJpdmF0ZToKICAgICBXZWJSdW50aW1lRmVhdHVyZXMo
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlJ1bnRpbWVGZWF0dXJlcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUnVudGltZUZl
YXR1cmVzLmNwcAkocmV2aXNpb24gNzc2MzEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJSdW50aW1lRmVhdHVyZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDQsNCArMzA0LDIw
IEBAIGJvb2wgV2ViUnVudGltZUZlYXR1cmVzOjppc0ZpbGVTeXN0ZW1FbmEKICNlbmRpZgogfQog
Cit2b2lkIFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxlSmF2YVNjcmlwdEkxOE5BUEkoYm9vbCBl
bmFibGUpCit7CisjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfSTE4Tl9BUEkpCisgICAgUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2V0SmF2YVNjcmlwdEkxOE5BUElFbmFibGVkKGVuYWJsZSk7CisjZW5k
aWYKK30KKworYm9vbCBXZWJSdW50aW1lRmVhdHVyZXM6OmlzSmF2YVNjcmlwdEkxOE5BUElFbmFi
bGVkKCkKK3sKKyNpZiBFTkFCTEUoSkFWQVNDUklQVF9JMThOX0FQSSkKKyAgICByZXR1cm4gUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6amF2YVNjcmlwdEkxOE5BUElFbmFibGVkKCk7CisjZWxzZQor
ICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5k
ZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDc3NjMxKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTUgQEAKKzIwMTEtMDEtMjggIE5lYm9qc2EgQ2lyaWMgIDxjaXJhQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnRz
IExvY2FsZSBvYmplY3Qgb2YgSmF2YVNjcmlwdCBpbnRlcm5hdGlvbmFsaXphdGlvbiBBUEkgcHJv
cG9zYWwsIGFzIGFuCisgICAgICAgIHY4IGV4dGVuc2lvbi4gRXh0ZW5zaW9uIGNvZGUgaXMgaG9z
dGVkIGluIHY4IHByb2plY3QgKHNyYy9leHRlbnNpb25zL2V4cGVyaW1lbnRhbC9pMThuLWV4dGVu
c2lvbi57Y2MsaH0pCisgICAgICAgIGFuZCBpbiB0aGlzIHBhdGNoIHdlIGp1c3QgcHJvdmlkZSBm
bGFncywgdGVzdHMgYW5kIGJ1aWxkIHJ1bGVzIGZvciBjaHJvbWl1bSBwb3J0LgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDk0MTQKKworICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHA6CisgICAgICAgIChUZXN0U2hl
bGw6OlRlc3RTaGVsbCk6CisKIDIwMTEtMDItMDMgIE1hY2llaiBTdGFjaG93aWFrICA8bWpzQGFw
cGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgpJbmRleDogVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwCShyZXZpc2lvbiA3NzYz
MSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTkzLDYgKzkzLDcgQEAgVGVzdFNoZWxsOjpUZXN0U2hlbGwoYm9vbCB0ZXN0
U2hlbGxNb2RlKQogICAgIFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxlR2VvbG9jYXRpb24odHJ1
ZSk7CiAgICAgV2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVJbmRleGVkRGF0YWJhc2UodHJ1ZSk7
CiAgICAgV2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVGaWxlU3lzdGVtKHRydWUpOworICAgIFdl
YlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxlSmF2YVNjcmlwdEkxOE5BUEkodHJ1ZSk7CiAgICAgbV9h
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlci5zZXQobmV3IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyKHRo
aXMpKTsKICAgICBtX2xheW91dFRlc3RDb250cm9sbGVyLnNldChuZXcgTGF5b3V0VGVzdENvbnRy
b2xsZXIodGhpcykpOwogICAgIG1fZXZlbnRTZW5kZXIuc2V0KG5ldyBFdmVudFNlbmRlcih0aGlz
KSk7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA3NzYzMSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDExLTAxLTI4ICBOZWJvanNhIENpcmlj
ICA8Y2lyYUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgSW1wbGVtZW50cyBMb2NhbGUgb2JqZWN0IG9mIEphdmFTY3JpcHQgaW50
ZXJuYXRpb25hbGl6YXRpb24gQVBJIHByb3Bvc2FsLCBhcyBhbgorICAgICAgICB2OCBleHRlbnNp
b24uIEV4dGVuc2lvbiBjb2RlIGlzIGhvc3RlZCBpbiB2OCBwcm9qZWN0IChzcmMvZXh0ZW5zaW9u
cy9leHBlcmltZW50YWwvaTE4bi1leHRlbnNpb24ue2NjLGh9KQorICAgICAgICBhbmQgaW4gdGhp
cyBwYXRjaCB3ZSBqdXN0IHByb3ZpZGUgZmxhZ3MsIHRlc3RzIGFuZCBidWlsZCBydWxlcyBmb3Ig
Y2hyb21pdW0gcG9ydC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQ5NDE0CisKKyAgICAgICAgKiBmYXN0L2pzL2kxOG4tYmluZGluZ3MtbG9jYWxlLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9pMThuLWJpbmRpbmdzLWxvY2Fs
ZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3NjcmlwdC10ZXN0cy9pMThuLWJpbmRp
bmdzLWxvY2FsZS5qczogQWRkZWQuCisgICAgICAgIChyZXBvcnRSZXN1bHQpOgorICAgICAgICAo
bG9jYWxlVGVzdHMudGhpcy5kZWZhdWx0TG9jYWxlKToKKyAgICAgICAgKGxvY2FsZVRlc3RzLnRo
aXMuYmFzZUxvY2FsZSk6CisgICAgICAgIChsb2NhbGVUZXN0cy50aGlzLmxhbmd1YWdlU2NyaXB0
TG9jYWxlKToKKyAgICAgICAgKGxvY2FsZVRlc3RzLnRoaXMubGFuZ3VhZ2VTY3JpcHRSZWdpb25M
b2NhbGUpOgorICAgICAgICAobG9jYWxlVGVzdHMudGhpcy5sYW5ndWFnZVNjcmlwdFJlZ2lvbkV4
dGVuc2lvbkxvY2FsZSk6CisgICAgICAgIChsb2NhbGVUZXN0cy50aGlzLmxhbmd1YWdlU2NyaXB0
UmVnaW9uRGFzaFVFeHRlbnNpb25Mb2NhbGUpOgorICAgICAgICAobG9jYWxlVGVzdHMudGhpcy5h
dmFpbGFibGVMb2NhbGVzKToKKyAgICAgICAgKGxvY2FsZVRlc3RzLnRoaXMubWF4aW1pemVkTG9j
YWxlKToKKyAgICAgICAgKGxvY2FsZVRlc3RzLnRoaXMubWF4aW1pemVkTG9jYWxlV2l0aEV4dGVu
c2lvbik6CisgICAgICAgIChsb2NhbGVUZXN0cy50aGlzLm1pbmltaXplZExvY2FsZSk6CisgICAg
ICAgIChsb2NhbGVUZXN0cy50aGlzLm1pbmltaXplZExvY2FsZVdpdGhFeHRlbnNpb24pOgorICAg
ICAgICAobG9jYWxlVGVzdHMudGhpcy5kaXNwbGF5Rm9yQmFzZUxvY2FsZSk6CisgICAgICAgIChs
b2NhbGVUZXN0cy50aGlzLmRpc3BsYXlJblNhbWVMb2NhbGUpOgorICAgICAgICAobG9jYWxlVGVz
dHMudGhpcy5kaXNwbGF5SW5EaWZmZXJlbnRMb2NhbGUpOgorICAgICAgICAobG9jYWxlVGVzdHMu
dGhpcy5kaXNwbGF5SW5DeXJpbGxpY1NjcmlwdCk6CisgICAgICAgIChsb2NhbGVUZXN0cy50aGlz
LmRpc3BsYXlJbkhlYnJld1NjcmlwdCk6CisgICAgICAgIChsb2NhbGVUZXN0cyk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3RrL1NraXBwZWQ6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1NraXBwZWQ6
CisgICAgICAgICogcGxhdGZvcm0vcXQvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4v
U2tpcHBlZDoKKwogMjAxMS0wMi0wNCAgSmVzc2llIEJlcmxpbiAgPGpiZXJsaW5AYXBwbGUuY29t
PgogCiAgICAgICAgIFtXaW5kb3dzIDcgUmVsZWFzZSBUZXN0c10gdHJhbnNpdGlvbnMvdHJhbnNp
dGlvbi1lbmQtZXZlbnQtbXVsdGlwbGUtMDQuaHRtbCBmbGFrZXkgCkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2pzL2kxOG4tYmluZGluZ3MtbG9jYWxlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2pzL2kxOG4tYmluZGluZ3MtbG9jYWxlLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvaTE4bi1iaW5kaW5ncy1sb2NhbGUt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcxIEBACitUaGlzIHRlc3QgY2hl
Y2tzIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMgb2YgTG9jYWxlIG9iamVjdC4KKworT24gc3VjY2Vz
cywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkg
IlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgZW4tVVMgaXMgZW4tVVMKK1BBU1MgZW4gaXMgZW4K
K1BBU1MgdW5kZWZpbmVkIGlzIHVuZGVmaW5lZAorUEFTUyBVUyBpcyBVUworUEFTUyBzciBpcyBz
cgorUEFTUyBzciBpcyBzcgorUEFTUyB1bmRlZmluZWQgaXMgdW5kZWZpbmVkCitQQVNTIHVuZGVm
aW5lZCBpcyB1bmRlZmluZWQKK1BBU1MgemgtSGFucyBpcyB6aC1IYW5zCitQQVNTIHpoIGlzIHpo
CitQQVNTIEhhbnMgaXMgSGFucworUEFTUyB1bmRlZmluZWQgaXMgdW5kZWZpbmVkCitQQVNTIHpo
LUhhbnMtQ04gaXMgemgtSGFucy1DTgorUEFTUyB6aCBpcyB6aAorUEFTUyBIYW5zIGlzIEhhbnMK
K1BBU1MgQ04gaXMgQ04KK1BBU1MgZGUtREVAY29sbGF0aW9uPXBob25lIGlzIGRlLURFQGNvbGxh
dGlvbj1waG9uZQorUEFTUyBkZSBpcyBkZQorUEFTUyB1bmRlZmluZWQgaXMgdW5kZWZpbmVkCitQ
QVNTIERFIGlzIERFCitQQVNTIGRlLURFLXUtY28tcGhvbmVib29rIGlzIGRlLURFLXUtY28tcGhv
bmVib29rCitQQVNTIGRlIGlzIGRlCitQQVNTIHVuZGVmaW5lZCBpcyB1bmRlZmluZWQKK1BBU1Mg
REUgaXMgREUKK1BBU1MgdHJ1ZSBpcyB0cnVlCitQQVNTIHRydWUgaXMgdHJ1ZQorUEFTUyBzci1D
eXJsLVJTIGlzIHNyLUN5cmwtUlMKK1BBU1Mgc3IgaXMgc3IKK1BBU1MgQ3lybCBpcyBDeXJsCitQ
QVNTIFJTIGlzIFJTCitQQVNTIGRlLUxhdG4tREVAY29sbGF0aW9uPXBob25lIGlzIGRlLUxhdG4t
REVAY29sbGF0aW9uPXBob25lCitQQVNTIGRlIGlzIGRlCitQQVNTIExhdG4gaXMgTGF0bgorUEFT
UyBERSBpcyBERQorUEFTUyBzciBpcyBzcgorUEFTUyBzciBpcyBzcgorUEFTUyB1bmRlZmluZWQg
aXMgdW5kZWZpbmVkCitQQVNTIHVuZGVmaW5lZCBpcyB1bmRlZmluZWQKK1BBU1MgZGUtQGNvbGxh
dGlvbj1waG9uZSBpcyBkZS1AY29sbGF0aW9uPXBob25lCitQQVNTIGRlIGlzIGRlCitQQVNTIHVu
ZGVmaW5lZCBpcyB1bmRlZmluZWQKK1BBU1MgdW5kZWZpbmVkIGlzIHVuZGVmaW5lZAorUEFTUyBF
bmdsaXNoIGlzIEVuZ2xpc2gKK1BBU1MgdW5kZWZpbmVkIGlzIHVuZGVmaW5lZAorUEFTUyB1bmRl
ZmluZWQgaXMgdW5kZWZpbmVkCitQQVNTIEVuZ2xpc2ggaXMgRW5nbGlzaAorUEFTUyBFbmdsaXNo
IGlzIEVuZ2xpc2gKK1BBU1MgTGF0aW4gaXMgTGF0aW4KK1BBU1MgVW5pdGVkIFN0YXRlcyBpcyBV
bml0ZWQgU3RhdGVzCitQQVNTIEVuZ2xpc2ggKExhdGluLCBVbml0ZWQgU3RhdGVzKSBpcyBFbmds
aXNoIChMYXRpbiwgVW5pdGVkIFN0YXRlcykKK1BBU1MgU2VyYmlhbiBpcyBTZXJiaWFuCitQQVNT
IEN5cmlsbGljIGlzIEN5cmlsbGljCitQQVNTIFNlcmJpYSBpcyBTZXJiaWEKK1BBU1MgU2VyYmlh
biAoQ3lyaWxsaWMsIFNlcmJpYSkgaXMgU2VyYmlhbiAoQ3lyaWxsaWMsIFNlcmJpYSkKK1BBU1Mg
0KHRgNC/0YHQutC4IGlzINCh0YDQv9GB0LrQuAorUEFTUyDQi9C40YDQuNC70LjRhtCwIGlzINCL
0LjRgNC40LvQuNGG0LAKK1BBU1Mg0KHRgNCx0LjRmNCwIGlzINCh0YDQsdC40ZjQsAorUEFTUyDQ
odGA0L/RgdC60LggKNCL0LjRgNC40LvQuNGG0LAsINCh0YDQsdC40ZjQsCkgaXMg0KHRgNC/0YHQ
utC4ICjQi9C40YDQuNC70LjRhtCwLCDQodGA0LHQuNGY0LApCitQQVNTINei15HXqNeZ16ogaXMg
16LXkdeo15nXqgorUEFTUyDXoteR16jXmSBpcyDXoteR16jXmQorUEFTUyDXmdep16jXkNecIGlz
INeZ16nXqNeQ15wKK1BBU1Mg16LXkdeo15nXqiAo16LXkdeo15ksINeZ16nXqNeQ15wpIGlzINei
15HXqNeZ16ogKNei15HXqNeZLCDXmdep16jXkNecKQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvaTE4
bi1iaW5kaW5ncy1sb2NhbGUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pz
L2kxOG4tYmluZGluZ3MtbG9jYWxlLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9m
YXN0L2pzL2kxOG4tYmluZGluZ3MtbG9jYWxlLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTQgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxo
dG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRl
eHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgLz4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0i
cmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvanMt
dGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRp
b24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InNjcmlwdC10
ZXN0cy9pMThuLWJpbmRpbmdzLWxvY2FsZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVz
b3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3NjcmlwdC10ZXN0cy9pMThuLWJpbmRpbmdzLWxvY2FsZS5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3NjcmlwdC10ZXN0cy9pMThuLWJp
bmRpbmdzLWxvY2FsZS5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvc2Ny
aXB0LXRlc3RzL2kxOG4tYmluZGluZ3MtbG9jYWxlLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDE1MSBAQAorZGVzY3JpcHRpb24oCisKKyJUaGlzIHRlc3QgY2hlY2tzIHByb3BlcnRpZXMgYW5k
IG1ldGhvZHMgb2YgTG9jYWxlIG9iamVjdC4iCisKKyk7CisKK2Z1bmN0aW9uIHJlcG9ydFJlc3Vs
dChfYWN0dWFsLCBfZXhwZWN0ZWQpIHsKKyAgICBpZiAoaXNSZXN1bHRDb3JyZWN0KF9hY3R1YWws
IF9leHBlY3RlZCkpCisgICAgICAgIHRlc3RQYXNzZWQoX2FjdHVhbCArICcgaXMgJyArIF9leHBl
Y3RlZCk7CisgICAgZWxzZQorICAgICAgICB0ZXN0RmFpbGVkKF9hY3R1YWwgKyAnIHNob3VsZCBi
ZSAnICsgX2V4cGVjdGVkKTsKK30KKworbG9jYWxlVGVzdHMgPSBmdW5jdGlvbigpIHsKKyAgICB0
aGlzLmRlZmF1bHRMb2NhbGUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGxvY2FsZSA9IG5l
dyB2OExvY2FsZSgpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLmxvY2FsZSwgJ2VuLVVT
Jyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUubGFuZ3VhZ2UsICdlbicpOworICAgICAg
ICByZXBvcnRSZXN1bHQobG9jYWxlLnNjcmlwdCwgdW5kZWZpbmVkKTsKKyAgICAgICAgcmVwb3J0
UmVzdWx0KGxvY2FsZS5yZWdpb24sICdVUycpOworICAgIH07CisKKyAgICB0aGlzLmJhc2VMb2Nh
bGUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGxvY2FsZSA9IG5ldyB2OExvY2FsZSgnc3In
KTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5sb2NhbGUsICdzcicpOworICAgICAgICBy
ZXBvcnRSZXN1bHQobG9jYWxlLmxhbmd1YWdlLCAnc3InKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0
KGxvY2FsZS5zY3JpcHQsIHVuZGVmaW5lZCk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUu
cmVnaW9uLCB1bmRlZmluZWQpOworICAgIH07CisKKyAgICB0aGlzLmxhbmd1YWdlU2NyaXB0TG9j
YWxlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBsb2NhbGUgPSBuZXcgdjhMb2NhbGUoJ3po
LUhhbnMnKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5sb2NhbGUsICd6aC1IYW5zJyk7
CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUubGFuZ3VhZ2UsICd6aCcpOworICAgICAgICBy
ZXBvcnRSZXN1bHQobG9jYWxlLnNjcmlwdCwgJ0hhbnMnKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0
KGxvY2FsZS5yZWdpb24sIHVuZGVmaW5lZCk7CisgICAgfTsKKworICAgIHRoaXMubGFuZ3VhZ2VT
Y3JpcHRSZWdpb25Mb2NhbGUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGxvY2FsZSA9IG5l
dyB2OExvY2FsZSgnemgtSGFucy1DTicpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLmxv
Y2FsZSwgJ3poLUhhbnMtQ04nKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5sYW5ndWFn
ZSwgJ3poJyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUuc2NyaXB0LCAnSGFucycpOwor
ICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLnJlZ2lvbiwgJ0NOJyk7CisgICAgfTsKKworICAg
IHRoaXMubGFuZ3VhZ2VTY3JpcHRSZWdpb25FeHRlbnNpb25Mb2NhbGUgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgdmFyIGxvY2FsZSA9IG5ldyB2OExvY2FsZSgnZGUtREVAY29sbGF0aW9uPXBob25l
Jyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUubG9jYWxlLCAnZGUtREVAY29sbGF0aW9u
PXBob25lJyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUubGFuZ3VhZ2UsICdkZScpOwor
ICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLnNjcmlwdCwgdW5kZWZpbmVkKTsKKyAgICAgICAg
cmVwb3J0UmVzdWx0KGxvY2FsZS5yZWdpb24sICdERScpOworICAgIH07CisKKyAgICB0aGlzLmxh
bmd1YWdlU2NyaXB0UmVnaW9uRGFzaFVFeHRlbnNpb25Mb2NhbGUgPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgdmFyIGxvY2FsZSA9IG5ldyB2OExvY2FsZSgnZGUtREUtdS1jby1waG9uZWJvb2snKTsK
KyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5sb2NhbGUsICdkZS1ERS11LWNvLXBob25lYm9v
aycpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLmxhbmd1YWdlLCAnZGUnKTsKKyAgICAg
ICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5zY3JpcHQsIHVuZGVmaW5lZCk7CisgICAgICAgIHJlcG9y
dFJlc3VsdChsb2NhbGUucmVnaW9uLCAnREUnKTsKKyAgICB9OworICAKKyAgICB0aGlzLmF2YWls
YWJsZUxvY2FsZXMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGxvY2FsZXMgPSB2OExvY2Fs
ZS5hdmFpbGFibGVMb2NhbGVzKCk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGVzLmxlbmd0
aCA+IDEwMCwgdHJ1ZSk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGVzLmpvaW4oKS5pbmRl
eE9mKCdzcicpID49IDAsIHRydWUpOworICAgIH07CisgIAorICAgIHRoaXMubWF4aW1pemVkTG9j
YWxlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBsb2NhbGUgPSBuZXcgdjhMb2NhbGUoJ3Ny
JykubWF4aW1pemVkTG9jYWxlKCk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUubG9jYWxl
LCAnc3ItQ3lybC1SUycpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLmxhbmd1YWdlLCAn
c3InKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5zY3JpcHQsICdDeXJsJyk7CisgICAg
ICAgIHJlcG9ydFJlc3VsdChsb2NhbGUucmVnaW9uLCAnUlMnKTsKKyAgICB9OworICAKKyAgICB0
aGlzLm1heGltaXplZExvY2FsZVdpdGhFeHRlbnNpb24gPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
dmFyIGxvY2FsZSA9IG5ldyB2OExvY2FsZSgnZGVAY29sbGF0aW9uPXBob25lJykubWF4aW1pemVk
TG9jYWxlKCk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUubG9jYWxlLCAnZGUtTGF0bi1E
RUBjb2xsYXRpb249cGhvbmUnKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5sYW5ndWFn
ZSwgJ2RlJyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUuc2NyaXB0LCAnTGF0bicpOwor
ICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLnJlZ2lvbiwgJ0RFJyk7CisgICAgfTsKKyAgCisg
ICAgdGhpcy5taW5pbWl6ZWRMb2NhbGUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGxvY2Fs
ZSA9IG5ldyB2OExvY2FsZSgnc3ItQ3lybC1SUycpLm1pbmltaXplZExvY2FsZSgpOworICAgICAg
ICByZXBvcnRSZXN1bHQobG9jYWxlLmxvY2FsZSwgJ3NyJyk7CisgICAgICAgIHJlcG9ydFJlc3Vs
dChsb2NhbGUubGFuZ3VhZ2UsICdzcicpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLnNj
cmlwdCwgdW5kZWZpbmVkKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5yZWdpb24sIHVu
ZGVmaW5lZCk7CisgICAgfTsKKyAgCisgICAgdGhpcy5taW5pbWl6ZWRMb2NhbGVXaXRoRXh0ZW5z
aW9uID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBsb2NhbGUgPSBuZXcgdjhMb2NhbGUoJ2Rl
LUxhdG4tREVAY29sbGF0aW9uPXBob25lJykubWluaW1pemVkTG9jYWxlKCk7CisgICAgICAgIC8v
IEZJWE1FOiBGaXggSUNVIHRvIHJldHVybiBkZUBjb2xsYXRpb249cGhvbmUuCisgICAgICAgIHJl
cG9ydFJlc3VsdChsb2NhbGUubG9jYWxlLCAnZGUtQGNvbGxhdGlvbj1waG9uZScpOworICAgICAg
ICByZXBvcnRSZXN1bHQobG9jYWxlLmxhbmd1YWdlLCAnZGUnKTsKKyAgICAgICAgcmVwb3J0UmVz
dWx0KGxvY2FsZS5zY3JpcHQsIHVuZGVmaW5lZCk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2Nh
bGUucmVnaW9uLCB1bmRlZmluZWQpOworICAgIH07CisgICAgCisgICAgdGhpcy5kaXNwbGF5Rm9y
QmFzZUxvY2FsZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgbG9jYWxlID0gbmV3IHY4TG9j
YWxlKCdlbicpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLmRpc3BsYXlMYW5ndWFnZSgp
LCAnRW5nbGlzaCcpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLmRpc3BsYXlTY3JpcHQo
KSwgdW5kZWZpbmVkKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5kaXNwbGF5UmVnaW9u
KCksIHVuZGVmaW5lZCk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUuZGlzcGxheU5hbWUo
KSwgJ0VuZ2xpc2gnKTsKKyAgICB9OworICAKKyAgICB0aGlzLmRpc3BsYXlJblNhbWVMb2NhbGUg
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGxvY2FsZSA9IG5ldyB2OExvY2FsZSgnZW4nKS5t
YXhpbWl6ZWRMb2NhbGUoKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5kaXNwbGF5TGFu
Z3VhZ2UoKSwgJ0VuZ2xpc2gnKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5kaXNwbGF5
U2NyaXB0KCksICdMYXRpbicpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLmRpc3BsYXlS
ZWdpb24oKSwgJ1VuaXRlZCBTdGF0ZXMnKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0KGxvY2FsZS5k
aXNwbGF5TmFtZSgpLCAnRW5nbGlzaCAoTGF0aW4sIFVuaXRlZCBTdGF0ZXMpJyk7CisgICAgfTsK
KyAgCisgICAgdGhpcy5kaXNwbGF5SW5EaWZmZXJlbnRMb2NhbGUgPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgdmFyIGxvY2FsZSA9IG5ldyB2OExvY2FsZSgnc3InKS5tYXhpbWl6ZWRMb2NhbGUoKTsK
KyAgICAgICAgdmFyIGRpc3BsYXlMb2NhbGUgPSBuZXcgdjhMb2NhbGUoJ2VuJyk7CisgICAgICAg
IHJlcG9ydFJlc3VsdChsb2NhbGUuZGlzcGxheUxhbmd1YWdlKGRpc3BsYXlMb2NhbGUpLCAnU2Vy
YmlhbicpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLmRpc3BsYXlTY3JpcHQoZGlzcGxh
eUxvY2FsZSksICdDeXJpbGxpYycpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLmRpc3Bs
YXlSZWdpb24oZGlzcGxheUxvY2FsZSksICdTZXJiaWEnKTsKKyAgICAgICAgcmVwb3J0UmVzdWx0
KGxvY2FsZS5kaXNwbGF5TmFtZShkaXNwbGF5TG9jYWxlKSwgJ1NlcmJpYW4gKEN5cmlsbGljLCBT
ZXJiaWEpJyk7CisgICAgfTsKKyAgCisgICAgdGhpcy5kaXNwbGF5SW5DeXJpbGxpY1NjcmlwdCA9
IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgbG9jYWxlID0gbmV3IHY4TG9jYWxlKCdzcicpLm1h
eGltaXplZExvY2FsZSgpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLmRpc3BsYXlMYW5n
dWFnZSgpLCAn0KHRgNC/0YHQutC4Jyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChsb2NhbGUuZGlz
cGxheVNjcmlwdCgpLCAn0IvQuNGA0LjQu9C40YbQsCcpOworICAgICAgICByZXBvcnRSZXN1bHQo
bG9jYWxlLmRpc3BsYXlSZWdpb24oKSwgJ9Ch0YDQsdC40ZjQsCcpOworICAgICAgICByZXBvcnRS
ZXN1bHQobG9jYWxlLmRpc3BsYXlOYW1lKCksICfQodGA0L/RgdC60LggKNCL0LjRgNC40LvQuNGG
0LAsINCh0YDQsdC40ZjQsCknKTsKKyAgICB9OworICAKKyAgICB0aGlzLmRpc3BsYXlJbkhlYnJl
d1NjcmlwdCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgbG9jYWxlID0gbmV3IHY4TG9jYWxl
KCdoZScpLm1heGltaXplZExvY2FsZSgpOworICAgICAgICByZXBvcnRSZXN1bHQobG9jYWxlLmRp
c3BsYXlMYW5ndWFnZSgpLCAn16LXkdeo15nXqicpOworICAgICAgICByZXBvcnRSZXN1bHQobG9j
YWxlLmRpc3BsYXlTY3JpcHQoKSwgJ9ei15HXqNeZJyk7CisgICAgICAgIHJlcG9ydFJlc3VsdChs
b2NhbGUuZGlzcGxheVJlZ2lvbigpLCAn15nXqdeo15DXnCcpOworICAgICAgICByZXBvcnRSZXN1
bHQobG9jYWxlLmRpc3BsYXlOYW1lKCksICfXoteR16jXmdeqICjXoteR16jXmSwg15nXqdeo15DX
nCknKTsKKyAgICB9OworfTsKKworKGZ1bmN0aW9uKCkgeworICAgIHZhciBhbGxUZXN0cyA9IG5l
dyBsb2NhbGVUZXN0cygpOworICAgIGZvciAodmFyIHRlc3QgaW4gYWxsVGVzdHMpIHsKKyAgICAg
ICAgYWxsVGVzdHNbdGVzdF0oKTsKKyAgICB9Cit9KSgpOworCit2YXIgc3VjY2Vzc2Z1bGx5UGFy
c2VkID0gdHJ1ZTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9ndGsvU2tpcHBlZAkocmV2aXNpb24gNzc2MzEpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9n
dGsvU2tpcHBlZAkod29ya2luZyBjb3B5KQpAQCAtMTc3OSw2ICsxNzc5LDkgQEAgZmFzdC94c2wv
eHNsdC1taXNzaW5nLW5hbWVzcGFjZS1pbi14c2x0LgogZmFzdC94c2wveHNsdC1yZWxhdGl2ZS1w
YXRoLnhtbAogZmFzdC94c2wveHNsdF91bmljb2RlLnhtbAogCisjIFRoaXMgcG9ydCBkb2Vzbid0
IHN1cHBvcnQgdjggaTE4biBleHRlbnNpb24uCitmYXN0L2pzL2kxOG4tYmluZGluZ3MtbG9jYWxl
Lmh0bWwKKwogIyBUZXN0cyBpbiBodHRwLyBkaXJlY3RvcnkKICMgICBUZXN0cyBmYWlsaW5nCiBo
dHRwL3Rlc3RzL2FwcGNhY2hlL2NyYXNoLXdoZW4tbmF2aWdhdGluZy1hd2F5LXRoZW4tYmFjay5o
dG1sCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZAkocmV2aXNpb24gNzc2MzEpCisrKyBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZAkod29ya2luZyBjb3B5KQpAQCAtMjgxLDYg
KzI4MSwxMiBAQCBhbmltYXRpb25zL3N0b3AtYW5pbWF0aW9uLW9uLXN1c3BlbmQuaHRtCiAjIERS
VCBkb2VzIG5vdCBzdXBwb3J0IHRvZ2dsaW5nIGNhcmV0IGJyb3dzaW5nIG9uIC8gb2ZmCiBlZGl0
aW5nL3NlbGVjdGlvbi9jYXJldC1tb2RlLXBhcmFncmFwaC1rZXlzLW5hdmlnYXRpb24uaHRtbAog
CisjIFRoaXMgdGVzdCBpcyBmYWlsaW5nIG9uIHRoZSBMZW9wYXJkIEludGVsIERlYnVnIGJ1aWxk
Ym90CisjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTgwNworZmFz
dC9ibG9ja2Zsb3cvYnJva2VuLWlkZW9ncmFwaC1zbWFsbC1jYXBzLmh0bWwKKwogIyBSZXF1ZXN0
IEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkgc3VwcG9ydAogZmFzdC9hbmltYXRpb24K
IAorIyBUaGlzIHBvcnQgZG9lc24ndCBzdXBwb3J0IHY4IGkxOG4gZXh0ZW5zaW9uLgorZmFzdC9q
cy9pMThuLWJpbmRpbmdzLWxvY2FsZS5odG1sCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9x
dC9Ta2lwcGVkCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQJ
KHJldmlzaW9uIDc3NjMxKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZAkod29y
a2luZyBjb3B5KQpAQCAtMTAyLDYgKzEwMiw5IEBAIGZhc3QvdGV4dC9oeXBoZW5zLmh0bWwKICMg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzMzMyCiBpbnNwZWN0b3Iv
ZG9tLWJyZWFrcG9pbnRzLmh0bWwKIAorIyBUaGlzIHBvcnQgZG9lc24ndCBzdXBwb3J0IHY4IGkx
OG4gZXh0ZW5zaW9uLgorZmFzdC9qcy9pMThuLWJpbmRpbmdzLWxvY2FsZS5odG1sCisKICMgPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ICMKICMgICAgICAgRHJhZyBhbmQgRHJvcCBTdXBwb3J0IGluIERSVC4g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKICMgPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ICMKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCShyZXZpc2lvbiA3NzYzMSkK
KysrIExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTM1LDMgKzExMzUsNSBAQCBodHRwL3Rlc3RzL2xvYWRpbmcvY3Jvc3Mtb3JpZ2luLVhIUi13aWxs
CiAjIFJlcXVlc3QgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKSBzdXBwb3J0CiBmYXN0
L2FuaW1hdGlvbgogCisjIFRoaXMgcG9ydCBkb2Vzbid0IHN1cHBvcnQgdjggaTE4biBleHRlbnNp
b24uCitmYXN0L2pzL2kxOG4tYmluZGluZ3MtbG9jYWxlLmh0bWwK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104536</attachid>
            <date>2011-08-19 11:38:26 -0700</date>
            <delta_ts>2011-08-19 11:57:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-49414-20110819113825.patch</filename>
            <type>text/plain</type>
            <size>3724</size>
            <attacher name="Nebojša Ćirić">cira</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzNDI0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMDgtMTggIE5lYm9qc2Eg
Q2lyaWMgIDxjaXJhQGNocm9taXVtLm9yZz4KKworICAgICAgICBQb2ludCBidWlsZCBzeXN0ZW0g
YW5kICNpbmNsdWRlIGhlYWRlcnMgdG8gdjgtaTE4biBsaWJyYXJ5IGluc3RlYWQgb2YgdjggbGli
cmFyeS4KKyAgICAgICAgV2UgZm9ya2VkIGEgbmV3IGNvZGUuZ29vZ2xlLmNvbS9wL3Y4LWkxOG4g
cHJvamVjdCBmcm9tIHY4L2V4dGVuc2lvbnMvZXhwZXJpbWVudGFsLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDk0MTQKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3Rz
LCBhbmQgbm8gY29kZSB3YXMgY2hhbmdlZC4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwL1dlYkNv
cmUuZ3lwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6Y3JlYXRlTmV3Q29udGV4dCk6CisKIDIw
MTEtMDgtMTcgIEFkcmllbm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KIAogICAgICAgICBb
Y2hyb21pdW1dIFNwbGl0IHRpbGVyIGludG8gbWFpbiB0aHJlYWQgLyBjb21wb3NpdG9yIHRocmVh
ZCB2ZXJzaW9ucwpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAJKHJl
dmlzaW9uIDkzNDI0KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAJ
KHdvcmtpbmcgY29weSkKQEAgLTE3NjIsNyArMTc2Miw3IEBACiAgICAgICAgIH1dLAogICAgICAg
ICBbJ2phdmFzY3JpcHRfZW5naW5lPT0idjgiJywgewogICAgICAgICAgICdkZXBlbmRlbmNpZXMn
OiBbCi0gICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS92OC9zcmMvZXh0ZW5zaW9ucy9l
eHBlcmltZW50YWwvZXhwZXJpbWVudGFsLmd5cDppMThuX2FwaScsCisgICAgICAgICAgICAnPChj
aHJvbWl1bV9zcmNfZGlyKS90aGlyZF9wYXJ0eS92OC1pMThuL2J1aWxkL2FsbC5neXA6djgtaTE4
bicsCiAgICAgICAgICAgXSwKICAgICAgICAgfV0sCiAgICAgICBdLApJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHAJKHJldmlzaW9uIDkz
NDI0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAKICNpbmNsdWRlIDx2OC5oPgogCiAjaWYg
RU5BQkxFKEpBVkFTQ1JJUFRfSTE4Tl9BUEkpCi0jaW5jbHVkZSA8djgvc3JjL2V4dGVuc2lvbnMv
ZXhwZXJpbWVudGFsL2kxOG4tZXh0ZW5zaW9uLmg+CisjaW5jbHVkZSA8djgtaTE4bi9pbmNsdWRl
L2V4dGVuc2lvbi5oPgogI2VuZGlmCiAKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgpAQCAt
MzY4LDggKzM2OCw4IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiBWOERPTVdpbmRvd1MK
IAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0kxOE5fQVBJKQogICAgIC8vIEVuYWJsZXMgZXhwZXJp
bWVudGFsIGkxOG4gQVBJIGluIFY4LgotICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpq
YXZhU2NyaXB0STE4TkFQSUVuYWJsZWQoKSAmJiAhVjhQcm94eTo6cmVnaXN0ZXJlZEV4dGVuc2lv
bldpdGhWOCh2ODo6aW50ZXJuYWw6OkkxOE5FeHRlbnNpb246OmdldCgpKSkKLSAgICAgICAgVjhQ
cm94eTo6cmVnaXN0ZXJFeHRlbnNpb24odjg6OmludGVybmFsOjpJMThORXh0ZW5zaW9uOjpnZXQo
KSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OmphdmFTY3JpcHRJMThOQVBJRW5h
YmxlZCgpICYmICFWOFByb3h5OjpyZWdpc3RlcmVkRXh0ZW5zaW9uV2l0aFY4KHY4X2kxOG46OkV4
dGVuc2lvbjo6Z2V0KCkpKQorICAgICAgICBWOFByb3h5OjpyZWdpc3RlckV4dGVuc2lvbih2OF9p
MThuOjpFeHRlbnNpb246OmdldCgpKTsKICNlbmRpZgogCiAgICAgLy8gRHluYW1pY2FsbHkgdGVs
bCB2OCBhYm91dCBvdXIgZXh0ZW5zaW9ucyBub3cuCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwkocmV2aXNpb24gOTM0MjQpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDExLTA4LTE4ICBOZWJvanNhIENp
cmljICA8Y2lyYUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQWRkIGRlcGVuZGVuY3kgb24gdjgt
aTE4biBsaWJyYXJ5LiBXZSB1c2VkIHY4IHJlcG9zaXRvcnkgYmVmb3JlLgorICAgICAgICBDaHJv
bWl1bSBERVBTIGNoYW5nZSB3YXMgYWxyZWFkeSBzdWJtaXRlZCAoaHR0cDovL2NvZGVyZXZpZXcu
Y2hyb21pdW0ub3JnLzc1ODMwNTApLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDk0MTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIERFUFM6CisKIDIwMTEtMDgtMTcgIEFkcmllbm5lIFdhbGtlciAgPGVu
bmVAZ29vZ2xlLmNvbT4KIAogICAgICAgICBbY2hyb21pdW1dIFNwbGl0IHRpbGVyIGludG8gbWFp
biB0aHJlYWQgLyBjb21wb3NpdG9yIHRocmVhZCB2ZXJzaW9ucwpJbmRleDogU291cmNlL1dlYktp
dC9jaHJvbWl1bS9ERVBTCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vREVQ
UwkocmV2aXNpb24gOTM0MjQpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0RFUFMJKHdvcmtp
bmcgY29weSkKQEAgLTEzNiw2ICsxMzYsOCBAQCBkZXBzID0gewogICAgIEZyb20oJ2Nocm9taXVt
X2RlcHMnLCAnc3JjL3RoaXJkX3BhcnR5L3NuYXBweS9zcmMnKSwKICAgJ3RoaXJkX3BhcnR5L3Nm
bnRseS9zcmMvc2ZudGx5JzoKICAgICBGcm9tKCdjaHJvbWl1bV9kZXBzJywgJ3NyYy90aGlyZF9w
YXJ0eS9zZm50bHkvc3JjL3NmbnRseScpLAorICAndGhpcmRfcGFydHkvdjgtaTE4bic6CisgICAg
RnJvbSgnY2hyb21pdW1fZGVwcycsICdzcmMvdGhpcmRfcGFydHkvdjgtaTE4bicpLAogICAndGhp
cmRfcGFydHknOgogICAgIFZhcignY2hyb21pdW1fc3ZuJykrJy90aGlyZF9wYXJ0eUAnK1Zhcign
Y2hyb21pdW1fcmV2JyksCiB9Cg==
</data>
<flag name="review"
          id="100408"
          type_id="1"
          status="-"
          setter="fishd"
    />
    <flag name="commit-queue"
          id="100409"
          type_id="3"
          status="-"
          setter="fishd"
    />
          </attachment>
      

    </bug>

</bugzilla>