<?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>27254</bug_id>
          
          <creation_ts>2009-07-14 04:38:23 -0700</creation_ts>
          <short_desc>Geolocation PositionOptions does not use correct default values</short_desc>
          <delta_ts>2009-08-13 16:35:18 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Steve Block">steveblock</reporter>
          <assigned_to name="Steve Block">steveblock</assigned_to>
          <cc>andreip</cc>
    
    <cc>bolsinga</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>steveblock</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>131527</commentid>
    <comment_count>0</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2009-07-14 04:38:23 -0700</bug_when>
    <thetext>The default values for the members of the Geolocation PositionOptions object should be as follows, taken from http://www.w3.org/TR/geolocation-API/#position-options.
- enableHighAccuracy = false
- timeout = +Inf
- maximumAge = 0

Currently, no default values are explicitly set, so the effective defaults are false, 0 and 0 respectively.

The default values should be explicitly set, probably in WebCore/bindings/js/JSGeolocationCustom.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136277</commentid>
    <comment_count>1</comment_count>
    <who name="Greg Bolsinga">bolsinga</who>
    <bug_when>2009-07-31 15:44:45 -0700</bug_when>
    <thetext>I do not see those specific values for defaults listed, so the &quot;undefined&quot; values seem correct. I may be missing something however.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136628</commentid>
    <comment_count>2</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2009-08-03 07:32:46 -0700</bug_when>
    <thetext>&gt; I do not see those specific values for defaults listed,
It&apos;s true that the spec is worded such that the default values aren&apos;t made too explicit. Perhaps the spec should be updated to make this more clear?

Andrei, can you confirm that I&apos;ve interpreted the spec correctly?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136713</commentid>
    <comment_count>3</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2009-08-03 10:58:24 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; &gt; I do not see those specific values for defaults listed,
&gt; It&apos;s true that the spec is worded such that the default values aren&apos;t made too
&gt; explicit. Perhaps the spec should be updated to make this more clear?
&gt; 
&gt; Andrei, can you confirm that I&apos;ve interpreted the spec correctly?

You are both right:

- the spec has a bug whereby the default values are not explicitly mentioned. I will fix this asap.
- the default values should indeed be:

- enableHighAccuracy = false
- timeout = +Inf
- maximumAge = 0

So it looks like &apos;timeout&apos; defaults to 0 in WebKit, which should be fixed. I&apos;ll also have to check if WebIDL supports +Inf and what to do if it doesn&apos;t.

Andrei</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137862</commentid>
    <comment_count>4</comment_count>
      <attachid>34269</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2009-08-07 06:26:05 -0700</bug_when>
    <thetext>Created attachment 34269
Patch 1 for bug 27254</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137869</commentid>
    <comment_count>5</comment_count>
      <attachid>34269</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-08-07 07:33:06 -0700</bug_when>
    <thetext>Comment on attachment 34269
Patch 1 for bug 27254

Generally looks good!

&gt; +const long PositionOptions::infinity = -1;

static members of numeric types like this can, and should, be initialized in the class definition, rather than separately like this.

We normally try to avoid &quot;in-band signaling&quot;. That means that for timeouts we&apos;d prefer a design with a separate hasTimeout function rather than a magic value that means no timeout. Is this special value of -1 part of the DOM API or just internal to WebKit? If just internal, I suggest using the separate boolean style

&gt; +    // No value is OK.
&gt; +    if (value.isUndefinedOrNull()) {
&gt;          return 0;
&gt; +    }

Braces here are incorrect.

&gt; +    Frame* frame = toJSDOMWindow(exec-&gt;lexicalGlobalObject())-&gt;impl()-&gt;frame();
&gt; +    ASSERT(frame);

I don&apos;t particularly understand the value of the assertion here. If that frame() function is guaranteed to never return 0, I don&apos;t think the assertion adds much clarity. If it&apos;s not guaranteed to never return 0, then I think we need an actual null check. The assertion seems strangely in between.

&gt; +static bool getNonNegativeLong(ExecState* exec, const JSValue&amp; value, long* result)

We use references, not pointers, for &quot;out&quot; arguments like result.

&gt; +    if (!value.isNumber() || (value.toNumber(exec) &lt; 0)) {
&gt; +        return false;
&gt; +    }

Braces here are incorrect.

&gt; +    *result = static_cast&lt;long&gt;(value.toNumber(exec));

Seems wrong to call toNumber twice. Can that have side effects like JavaScript execution? Also, I&apos;m surprised that this is not toInt32 instead. Is this really correct for all edge cases? How is it different from toInt32? The use of &quot;long&quot; here is a little strange. We normally use &quot;int&quot; for this type of thing, and we&apos;ve discussed moving to &quot;int32_t&quot;, but &quot;long&quot; seems different from the norm for no good reason.

&gt; +    if (value.isUndefinedOrNull()) {
&gt; +        // Use default options.
&gt; +        return options;
&gt; +    }

This should be &quot;return options.release()&quot;.

But also, I think for the error case it would be OK to call PositionOptions::create() right at the return statement instead of using an already allocated options object. We could create the options object below right where we start actually making progress on getting the options. Or maybe it&apos;s OK as-is.

&gt; +        if (!enableHighAccuracyValue.isBoolean()) {
&gt;              setDOMException(exec, TYPE_MISMATCH_ERR);
&gt; -            return jsUndefined();
&gt; +            return 0;
&gt;          }

Is this really correct? This seems like abnormal behavior for a JavaScript binding. Normally you could pass a 1 to something that expects a boolean without getting a TYPE_MISMATCH_ERR and generally speaking type conversion would take place rather than strict type checking. I&apos;d be quite wary of introducing this behavior unless we&apos;re certain the specification calls for it.

&gt; +        long timeout;
&gt; +        if (getNonNegativeLong(exec, timeoutValue, &amp;timeout))

As I said above, the involvement of &quot;long&quot; here seems wrong.

&gt; -    if (m_errorCallback &amp;&amp; m_options)
&gt; +    if (m_errorCallback &amp;&amp; (m_options-&gt;timeout() != PositionOptions::infinity))

We normally wouldn&apos;t use the parentheses here. I think this would read more clearly if it was hasTimeout() rather than timeout() != infinity.

&gt;  class PositionOptions : public RefCounted&lt;PositionOptions&gt; {

This is not new to this patch, but I don&apos;t understand why position options are a reference counted, heap allocated, class. I think functions could be changed to just take a const PositionOptions&amp; and store a PositionOptions and get rid of the reference counting.

&gt; +    void setTimeout(long t) {

Brace needs to go on the next line. Function braces go on separate lines. See WebKit coding style guild. You could also use the check-webkit-style script, I guess.

&gt; +    void setMaximumAge(long a) {

Ditto.

&gt; +        * geolocation: Added.

A top level directory for these new tests seems like overkill. I suggest putting this test into fast/dom/Geolocation since the fast/dom directory already has subdirectories for various other DOM classes, such as Window, HTMLButtonElement, and many others.

review- because most of these things need to be done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138851</commentid>
    <comment_count>6</comment_count>
      <attachid>34524</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2009-08-10 16:05:13 -0700</bug_when>
    <thetext>Created attachment 34524
Patch 2 for bug 27254

(In reply to comment #5)

&gt; We normally try to avoid &quot;in-band signaling&quot;. That means that for timeouts we&apos;d
&gt; prefer a design with a separate hasTimeout function rather than a magic value
&gt; that means no timeout. Is this special value of -1 part of the DOM API or just
&gt; internal to WebKit? If just internal, I suggest using the separate boolean
&gt; style
No, the -1 was just internal to WebKit. I&apos;ve updated the patch to use hasTimeout().

&gt; Braces here are incorrect.
Fixed

&gt; I don&apos;t particularly understand the value of the assertion here. If that
&gt; frame() function is guaranteed to never return 0, I don&apos;t think the assertion
&gt; adds much clarity. If it&apos;s not guaranteed to never return 0, then I think we
&gt; need an actual null check. The assertion seems strangely in between.
Previously the code used &apos;if (frame)&apos;. I don&apos;t see a reason why frame would ever be 0, but I could be missing something. I&apos;ve removed the ASSERT.

&gt; Also, I&apos;m surprised that this is not toInt32 instead. Is this really
&gt; correct for all edge cases? How is it different from toInt32? The use of &quot;long&quot;
&gt; here is a little strange. We normally use &quot;int&quot; for this type of thing, and
&gt; we&apos;ve discussed moving to &quot;int32_t&quot;, but &quot;long&quot; seems different from the norm
&gt; for no good reason.
My mistake. The IDL definition for these parameters uses long and I didn&apos;t realize that IDL long is int32. Fixed to use int types. I&apos;ve also changed the behaviour to use toInt32 (which wraps values outside this range) and to set negative values to zero, to match that of window.setTimeout(). 
 
&gt; This should be &quot;return options.release()&quot;.
Fixed.

&gt; But also, I think for the error case it would be OK to call
&gt; PositionOptions::create() right at the return statement instead of using an
&gt; already allocated options object. We could create the options object below
&gt; right where we start actually making progress on getting the options. Or maybe
&gt; it&apos;s OK as-is.
Creating the options later, but before we need them, doesn&apos;t save us much, so I&apos;d rather leave it as it is.

&gt; Is this really correct? This seems like abnormal behavior for a JavaScript
&gt; binding. Normally you could pass a 1 to something that expects a boolean
&gt; without getting a TYPE_MISMATCH_ERR and generally speaking type conversion
&gt; would take place rather than strict type checking. I&apos;d be quite wary of
&gt; introducing this behavior unless we&apos;re certain the specification calls for it.
Updated to allow numbers or boolean.

&gt; A top level directory for these new tests seems like overkill. I suggest
&gt; putting this test into fast/dom/Geolocation since the fast/dom directory
&gt; already has subdirectories for various other DOM classes, such as Window,
&gt; HTMLButtonElement, and many others.
Fixed. Note that fast/dom/Geolocation and the JS test template will be added in Bug 27716 before this patch lands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138857</commentid>
    <comment_count>7</comment_count>
      <attachid>34524</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-08-10 16:30:21 -0700</bug_when>
    <thetext>Comment on attachment 34524
Patch 2 for bug 27254

&gt; +    JSValue enableHighAccuracyValue = object-&gt;get(exec, Identifier(exec, &quot;enableHighAccuracy&quot;));
&gt; +    if (!enableHighAccuracyValue.isUndefinedOrNull()) {
&gt; +        // We accept either a boolean or numeric value.
&gt; +        if (!enableHighAccuracyValue.isBoolean() &amp;&amp; !enableHighAccuracyValue.isNumber()) {

I think you misinterpreted my comment. Functions in JavaScript that work on numbers normally convert the passed-in item to a number and don&apos;t check specifically for an actual JavaScript number. It&apos;s true that one case that requires this is a boolean value, but another is a number object such as the one you would create with &quot;new Number(x)&quot; in JavaScript. This turns undefined into NaN, null into 0, false into 0, true into 1, and also in the general case of an object it calls the valueOf function to allow the object to return a number. That&apos;s the normal way the language works, but by going out of our way to do specific type checking we&apos;re disabling that behavior.

It&apos;s strange that here we&apos;ve decided instead to use a sort of strict type checking approach. Is this called for by the Geolocation specification? If not, I suggest we use toBoolean or toNumber or toInt32 directly without first doing a type check, except for any checks for special values like undefined or null that have special behavior. Do we need that special behavior?

I think you should include test cases that pass an actual &quot;undefined&quot; value as well as &quot;null&quot; and the too-few-arguments case for the second and third arguments, and both undefined and null for the first argument. And I think you should include test cases of all the different types for the values of the items in the options dictionary too.

I&apos;m going to say review- because I think the type checking here is still slightly surprising and probably wrong. Otherwise the patch looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138866</commentid>
    <comment_count>8</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2009-08-10 17:17:26 -0700</bug_when>
    <thetext>(In reply to comment #7)
Thanks for the comments Darin. I&apos;ll update the patch to allow the default, lenient conversion to number or boolean for all three PositionOptions properties.

How about the PositionOptions object literal itself? Currently we throw an exception if it&apos;s not null, undefined or an object. Is this OK, or should we never throw, and simply treat anything other than an object as if nothing were passed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138941</commentid>
    <comment_count>9</comment_count>
      <attachid>34551</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2009-08-11 05:34:07 -0700</bug_when>
    <thetext>Created attachment 34551
Patch 3 for bug 27254

Updated to use generic conversion to int32 and boolean for PositionOptions properties. Also uses generic conversion for PositionOptions argument itself, as per Web IDL spec.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139037</commentid>
    <comment_count>10</comment_count>
      <attachid>34551</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-08-11 10:49:31 -0700</bug_when>
    <thetext>Comment on attachment 34551
Patch 3 for bug 27254

&gt; +    // FIXME: We should check that the argument is a Function object, as
&gt; +    // the spec specifies &apos;FunctionOnly&apos;.

A good way to keep track of this would be to have test cases that are failing in the test you are adding. Also, checking this is quite simple so I&apos;m not sure why this is a FIXME and not just fixed. You can use one of these:

    value.isObject(&amp;InternalFunction::info)
    object-&gt;inherits(&amp;InternalFunction::info)

But I&apos;m not sure what FunctionOnly&apos;s precise definition is. It would be worthwhile to test with both a function defined in JavaScript and also a built-in function such as Math.abs to be sure the check was right.

&gt; +    // Argument is optional, and null is allowed.
&gt; +    if (value.isUndefinedOrNull())

The code below the comment allows three things: 1) Missing argument, 2) null, 3) undefined. The comment mentions two these and not the third, so I think it&apos;s not an ideal comment because to me it just raises the question about the third case. Your test cases covers the third, though.

&gt; +    // FIXME: We should check that the argument is a Function object, as
&gt; +    // the spec specifies &apos;FunctionOnly&apos;.

Same comment as above.

&gt; +    // Argument is optional, and null is allowed.
&gt; +    if (value.isUndefinedOrNull()) {

Same comment as above.

&gt; +    // This will always yield an object.
&gt; +    JSObject* object = value.toObject(exec);

Comment is not clear. Maybe you mean that the only cases where toObject can fail are undefined and null, and since both cases are tested above this can&apos;t fail. If so I think you need a slightly more specific comment to be clear. Still good to keep it short.

&gt; +    JSValue enableHighAccuracyValue = object-&gt;get(exec, Identifier(exec, &quot;enableHighAccuracy&quot;));

If the object has a getter, this code could raise an exception. We may need code that detects the exception and returns early to get correct behavior. For example, it might be important to return early to avoid further side effects from fetching other values that might have getters. Or it might be important to not run additional code that might overwrite the exception with a different exception. The only real way to check an edge case like this is to have tests that involve getters.

&gt; +    // If undefined, don&apos;t override default.
&gt; +    if (!enableHighAccuracyValue.isUndefined())

This uses &quot;undefined&quot; as the special value. Is that right? Is the check specifically about not having the property at all, or is it about the value &quot;undefined&quot; too? I know I&apos;ve been asking questions like this a lot, but I&apos;d really like to get these things right so we don&apos;t have to revisit the code later. The key is having enough corner test cases or having a standard way we do things everywhere so we don&apos;t do anything original when we implement a new class like this one.

&gt; -    if (exec-&gt;hadException())
&gt; -        return 0;

You&apos;ve removed these checks for exceptions, but I don&apos;t understand why. Operations like get and toInt32 can indeed raise exceptions when there are unusual objects involved. And we want predictable behavior in such cases. Maybe we can ignore the exception, but I&apos;d like to be sure we can -- test cases are a good way to prove it&apos;s OK. It may be inconvenient to make all these test cases, though. You need objects with valueOf functions that raise exceptions to test toInt32 raising an exception and getters that raise exceptions to test get raising an exception. I could even imagine having a test that detects the order the properties are gotten and processed by using valueOf and getter functions that have side effects.

&gt; +        // Wrap to int32 and force non-negative to match behavior of window.setTimeout.
&gt; +        int timeout = timeoutValue.toInt32(exec);
&gt; +        options-&gt;setTimeout(timeout &gt;= 0 ? timeout : 0);

The above is is fine. Another way to write it is:

    options-&gt;setTimeout(max(0, timeoutValue.toInt32(exec));

I like the more-terse version, but some might prefer your version. And as I said above I think it should be followed by this:

    if (exec-&gt;hadException())
        return 0;

&gt; +    static PassRefPtr&lt;PositionOptions&gt; create() { return adoptRef(new PositionOptions()); }

No need for the parentheses here after PositionOptions. I like the formatting better without it.

&gt; +    int timeout() const { return m_timeout; }

I think this should have ASSERT(hasTimeout()) in it.

&gt; +    void setTimeout(int t)

Could name this &quot;timeout&quot; instead of &quot;t&quot;. I think people have been asking for that during reviews.

&gt; +    void setMaximumAge(int a)

Could name this &quot;age&quot; instead of &quot;a&quot;.

Test looks great and covers a lot more cases now. My remaining concern is that we want our behavior to match the specification and other browsers. While I have reviewed the patch and offered my opinion on how to handle edge cases I would love that behavior to perfectly match the specification and the other browsers that have implemented this. I&apos;m not sure whether you&apos;ve used this test case with, say, Firefox, to see how their implementation matches ours.

I&apos;m going to say r=me because this is pretty good. But as you can see with my comments above there is still some room for improvement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139139</commentid>
    <comment_count>11</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2009-08-11 15:32:28 -0700</bug_when>
    <thetext>Hi Darin,

(In reply to comment #10)
&gt; (From update of attachment 34551 [details])
&gt; &gt; +    // FIXME: We should check that the argument is a Function object, as
&gt; &gt; +    // the spec specifies &apos;FunctionOnly&apos;.
&gt; 
&gt; A good way to keep track of this would be to have test cases that are failing
&gt; in the test you are adding. Also, checking this is quite simple so I&apos;m not sure
&gt; why this is a FIXME and not just fixed. You can use one of these:
&gt; 
&gt;     value.isObject(&amp;InternalFunction::info)
&gt;     object-&gt;inherits(&amp;InternalFunction::info)
&gt; 
&gt; But I&apos;m not sure what FunctionOnly&apos;s precise definition is. It would be
&gt; worthwhile to test with both a function defined in JavaScript and also a
&gt; built-in function such as Math.abs to be sure the check was right.
&gt; 

After re-reading section 4.6 of the WebIDL spec, my understanding is that, when an interface is declared with the FunctionOnly argument (like PositionCallback in this case), any Function object, be that a built-in internal function or a function defined in JS, is considered to implement the interface.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139165</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-08-11 16:47:27 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; &gt;     value.isObject(&amp;InternalFunction::info)
&gt; &gt;     object-&gt;inherits(&amp;InternalFunction::info)
&gt; 
&gt; After re-reading section 4.6 of the WebIDL spec, my understanding is that, when
&gt; an interface is declared with the FunctionOnly argument (like PositionCallback
&gt; in this case), any Function object, be that a built-in internal function or a
&gt; function defined in JS, is considered to implement the interface.

OK, then the check against InternalFunction::info should do the right thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139318</commentid>
    <comment_count>13</comment_count>
      <attachid>34661</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2009-08-12 07:19:13 -0700</bug_when>
    <thetext>Created attachment 34661
Patch 4 for bug 27254

&gt; A good way to keep track of this would be to have test cases that are failing
&gt; in the test you are adding. Also, checking this is quite simple so I&apos;m not sure
&gt; why this is a FIXME and not just fixed.
It was a FIXME because I wasn&apos;t sure of the precise definition of FunctionOnly. Based on Andrei&apos;s comment, this is fixed with value.isObject(&amp;InternalFunction::info). Added test with Math.abs.

&gt; The code below the comment allows three things: 1) Missing argument, 2) null,
&gt; 3) undefined. The comment mentions two these and not the third, so I think it&apos;s
&gt; not an ideal comment because to me it just raises the question about the third
&gt; case. Your test cases covers the third, though.
I thought that undefined is indistinguishable from a missing argument in JS? I&apos;ve updated the comment to be more explicit.

&gt; Comment is not clear. Maybe you mean that the only cases where toObject can
&gt; fail are undefined and null, and since both cases are tested above this can&apos;t
&gt; fail. If so I think you need a slightly more specific comment to be clear.
Exactly. Fixed comment.

&gt; If the object has a getter, this code could raise an exception. We may need
&gt; code that detects the exception and returns early to get correct behavior.
Fixed to return early. Added test cases.

&gt; This uses &quot;undefined&quot; as the special value. Is that right? Is the check
&gt; specifically about not having the property at all, or is it about the value
&gt; &quot;undefined&quot; too? 
A value of undefined and no value specified should behave the same.

&gt; You&apos;ve removed these checks for exceptions, but I don&apos;t understand why.
&gt; Operations like get and toInt32 can indeed raise exceptions when there are
&gt; unusual objects involved.
Fixed to return early. Added test cases. 

&gt; No need for the parentheses here after PositionOptions. I like the formatting
&gt; better without it.
Fixed.

&gt; I think this should have ASSERT(hasTimeout()) in it.
Fixed.

&gt; Could name this &quot;timeout&quot; instead of &quot;t&quot;. I think people have been asking for
&gt; that during reviews.
Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139353</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-08-12 09:22:58 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; I thought that undefined is indistinguishable from a missing argument in JS?

They are distinguishable by checking the length of the arguments array. The built-in functions in the language always treat undefined and missing arguments the same way. But DOM functions have been designed in the past to treat them differently. I personally have argued to have the DOM binding for JavaScript match JavaScript&apos;s only built-in functions in this respect, but Mozilla&apos;s JavaScript binding seems to do a lot of argument array length checking and I am not sure what WebIDL ended up saying about this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139356</commentid>
    <comment_count>15</comment_count>
      <attachid>34661</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-08-12 09:27:54 -0700</bug_when>
    <thetext>Comment on attachment 34661
Patch 4 for bug 27254

&gt; +    // The spec specifies &apos;FunctionOnly&apos; for this object.
&gt; +    if (!value.isObject(&amp;InternalFunction::info)) {
&gt; +        setDOMException(exec, TYPE_MISMATCH_ERR);
&gt;          return 0;
&gt; +    }
&gt;  
&gt; -    JSObject* object = asObject(value);
&gt; +    JSObject* object = value.getObject();

Now that you are doing an isObject check above, it&apos;s more efficient to do asObject as the original code did than to do getObject, which does a type check. I know this is not clear from the names of the functions. I suggest you change this line of code back.

&gt; +    // The spec specifies &apos;FunctionOnly&apos; for this object.
&gt; +    if (!value.isObject(&amp;InternalFunction::info)) {
&gt; +        setDOMException(exec, TYPE_MISMATCH_ERR);
&gt;          return 0;
&gt; +    }
&gt;  
&gt; -    JSValue timeoutValue = object-&gt;get(exec, Identifier(exec, &quot;timeout&quot;));
&gt; +    JSObject* object = value.getObject();

Same thing here.

&gt; +        options-&gt;setTimeout(std::max(0, timeoutValue.toInt32(exec)));

We normally prefer to do &quot;using namespace std&quot; at the start of the file rather than using &quot;std::&quot; throughout the file, even if it&apos;s only a small number of call sites.

&gt; Index: WebCore/page/Geolocation.cpp
&gt; ===================================================================
&gt; --- WebCore/page/Geolocation.cpp	(revision 47004)
&gt; +++ WebCore/page/Geolocation.cpp	(working copy)
&gt; @@ -32,6 +32,7 @@
&gt;  #include &quot;Frame.h&quot;
&gt;  #include &quot;Page.h&quot;
&gt;  #include &quot;PositionError.h&quot;
&gt; +#include &quot;PositionOptions.h&quot;

What changed to require adding this include? The old code seems to already access PositionOptions&apos;s timeout member function, so somehow it was seeing the PositionOptions class definition. Is this added include necessary?

Seems really great! r=me despite the minor nitpicks above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139418</commentid>
    <comment_count>16</comment_count>
      <attachid>34676</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2009-08-12 10:50:10 -0700</bug_when>
    <thetext>Created attachment 34676
Patch 5 for bug 27254

Thanks Darin. This final patch addresses your nits and updates the structure of the Layout tests to reflect the final decision in Bug 27716.

If the patch looks OK, please could you commit on my behalf once my patch in Bug 27716 has been committed - I don&apos;t have commit rights.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139642</commentid>
    <comment_count>17</comment_count>
      <attachid>34676</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-12 16:26:12 -0700</bug_when>
    <thetext>Comment on attachment 34676
Patch 5 for bug 27254

Rejecting patch 34676 from commit-queue.  This patch will require manual commit.

WebKitTools/Scripts/run-webkit-tests --no-launch-safari --quiet failed with exit code 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140090</commentid>
    <comment_count>18</comment_count>
      <attachid>34676</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-13 16:14:24 -0700</bug_when>
    <thetext>Comment on attachment 34676
Patch 5 for bug 27254

I&apos;m not sure why this patch was rejected.  I&apos;m missing yesterday&apos;s commit-queue log, so I can&apos;t tell you either.  Adding it back.  I suspect that this caused some test to fail (or maybe the bots were failing when the commit-queue tried to land this).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140091</commentid>
    <comment_count>19</comment_count>
      <attachid>34676</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-13 16:15:21 -0700</bug_when>
    <thetext>Comment on attachment 34676
Patch 5 for bug 27254

Rejecting patch 34676 from commit-queue.  This patch will require manual commit.

W e b K i t T o o l s / S c r i p t s / b u i l d - w e b k i t failed with exit code 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140093</commentid>
    <comment_count>20</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-13 16:19:00 -0700</bug_when>
    <thetext>build-webkit failed with your patch applied.

/Users/eseidel/Projects/WebKit2/WebCore/bindings/js/JSGeolocationCustom.cpp: In function ‘WTF::PassRefPtr&lt;WebCore::PositionCallback&gt; WebCore::createPositionCallback(JSC::ExecState*, JSC::JSValue)’:
/Users/eseidel/Projects/WebKit2/WebCore/bindings/js/JSGeolocationCustom.cpp:46: error: incomplete type ‘JSC::InternalFunction’ used in nested name specifier
/Users/eseidel/Projects/WebKit2/WebCore/bindings/js/JSGeolocationCustom.cpp: In function ‘WTF::PassRefPtr&lt;WebCore::PositionErrorCallback&gt; WebCore::createPositionErrorCallback(JSC::ExecState*, JSC::JSValue)’:
/Users/eseidel/Projects/WebKit2/WebCore/bindings/js/JSGeolocationCustom.cpp:63: error: incomplete type ‘JSC::InternalFunction’ used in nested name specifier
distcc[26395] ERROR: compile /Users/eseidel/Projects/WebKit2/WebCore/bindings/js/JSGeolocationCustom.cpp on localhost failed
** BUILD FAILED **</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140095</commentid>
    <comment_count>21</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-08-13 16:35:18 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/47252</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34269</attachid>
            <date>2009-08-07 06:26:05 -0700</date>
            <delta_ts>2009-08-10 16:05:13 -0700</delta_ts>
            <desc>Patch 1 for bug 27254</desc>
            <filename>setPositionOptionsDefaults.txt</filename>
            <type>text/plain</type>
            <size>19988</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0Njg5MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzggQEAKKzIwMDktMDgtMDcgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEJ1ZyAyNzI1NCA6IEdlb2xvY2F0aW9uIFBvc2l0aW9uT3B0aW9ucyBkb2VzIG5vdCB1c2UgY29y
cmVjdCBkZWZhdWx0IHZhbHVlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTI3MjU0CisKKyAgICAgICAgU2V0cyB0aGUgY29ycmVjdCBkZWZhdWx0IHZh
bHVlcyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlIFBvc2l0aW9uT3B0aW9ucyBvYmplY3QKKyAg
ICAgICAgcGFzc2VkIHRvIEdlb2xvY2F0aW9uIG1ldGhvZHMuIFVwZGF0ZXMgdGltZW91dCBhbmQg
bWF4aW11bUFnZSB0byB1c2UgbG9uZyB0eXBlLAorICAgICAgICBhcyBwZXIgVzNDIHNwZWMuIFNl
ZSBodHRwOi8vd3d3LnczLm9yZy9UUi9nZW9sb2NhdGlvbi1BUEkvLgorCisgICAgICAgIEFsc28g
YWRkcyBjaGVja2luZyB0byB0aHJvdyBhbiBleGNlcHRpb24gaWYgYXJndW1lbnRzIG9mIHRoZSBp
bmNvcnJlY3QgdHlwZSBhcmUKKyAgICAgICAgcGFzc2VkIHRvIEdlb2xvY2F0aW9uIG1ldGhvZHMu
IEFkZHMgYSBsYXlvdXQgdGVzdCB0byB0ZXN0IHRoaXMuIFRoaXMgdGVzdCBzaG91bGQKKyAgICAg
ICAgcGFzcyBvbiBhbGwgcGxhdGZvcm1zIHdoZXJlIEdlb2xvY2F0aW9uIGlzIGltcGxlbWVudGVk
LgorCisgICAgICAgIFRlc3Q6IGdlb2xvY2F0aW9uL2FyZ3VtZW50LXR5cGVzLmh0bWwKKworICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTR2VvbG9jYXRpb25DdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlUG9zaXRpb25DYWxsYmFjayk6IEFkZGVkLiBDcmVhdGVzIHRoZSBjYWxsYmFj
ay4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVBvc2l0aW9uRXJyb3JDYWxsYmFjayk6IEFkZGVk
LiBDcmVhdGVzIHRoZSBjYWxiYWNrLgorICAgICAgICAoV2ViQ29yZTo6Z2V0Tm9uTmVnYXRpdmVM
b25nKTogQWRkZWQuIEhlbHBlciBtZXRob2QgdXNlZCB0byBnZXQgdmFsdWUgb2YgUG9zaXRpb25P
cHRpb24gcHJvcGVydGllcy4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVBvc2l0aW9uT3B0aW9u
cyk6IEFkZGVkLiBDcmVhdGVzIHRoZSBQb3NpdGlvbk9wdGlvbnMgb2JqZWN0LCBzZXR0aW5nIGRl
ZmF1bHRzIHdoZXJlIHJlcXVpcmVkLgorICAgICAgICAoV2ViQ29yZTo6SlNHZW9sb2NhdGlvbjo6
Z2V0Q3VycmVudFBvc2l0aW9uKTogTW9kaWZpZWQuIE5vdyB1c2VzIGFib3ZlIGhlbHBlciBmdW5j
dGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpKU0dlb2xvY2F0aW9uOjp3YXRjaFBvc2l0aW9uKTog
TW9kaWZpZWQuIE5vdyB1c2VzIGFib3ZlIGhlbHBlciBmdW5jdGlvbnMuCisgICAgICAgICogcGFn
ZS9HZW9sb2NhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6R2VvTm90
aWZpZXI6Okdlb05vdGlmaWVyKTogTW9kaWZpZWQuIEFzc2VydHMgdGhhdCBQb3NpdGlvbk9wdGlv
bnMgb2JqZWN0IGlzIHByZXNlbnQuCisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6R2Vv
Tm90aWZpZXI6OnN0YXJ0VGltZXIpOiBNb2RpZmllZC4gT25seSBzdGFydHMgdGltZXIgaWYgdmFs
dWUgaXMgbm90IGluZmluaXRlLgorICAgICAgICAqIHBhZ2UvUG9zaXRpb25PcHRpb25zLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbk9wdGlvbnM6OmNyZWF0ZSk6IE1vZGlmaWVkLiBDcmVh
dGVzIG9iamVjdCB3aXRoIGRlZmF1bHQgdmFsdWVzLgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRp
b25PcHRpb25zOjp0aW1lb3V0KTogTW9kaWZpZWQuIFVzZXMgY29ycmVjdCB0eXBlLgorICAgICAg
ICAoV2ViQ29yZTo6UG9zaXRpb25PcHRpb25zOjpzZXRUaW1lb3V0KTogTW9kaWZpZWQuIFVzZXMg
Y29ycmVjdCB0eXBlLgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb25PcHRpb25zOjptYXhpbXVt
QWdlKTogTW9kaWZpZWQuIFVzZXMgY29ycmVjdCB0eXBlLgorICAgICAgICAoV2ViQ29yZTo6UG9z
aXRpb25PcHRpb25zOjpzZXRNYXhpbXVtQWdlKTogTW9kaWZpZWQuIFVzZXMgY29ycmVjdCB0eXBl
LgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb25PcHRpb25zOjpQb3NpdGlvbk9wdGlvbnMpOiBN
b2RpZmllZC4gQ3JlYXRlcyBvYmplY3Qgd2l0aCBkZWZhdWx0IHZhbHVlcy4KKwogMjAwOS0wOC0w
NyAgU2ltb24gSGF1c21hbm4gIDxzaW1vbi5oYXVzbWFubkBub2tpYS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgVG9yIEFybmUgVmVzdGLDuC4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMv
SlNHZW9sb2NhdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0dlb2xvY2F0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gNDY4OTApCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTR2VvbG9jYXRpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwx
MDkgKzM5LDE0MCBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXN0YXRpYyBQYXNzUmVmUHRyPFBvc2l0aW9uT3B0aW9ucz4gY3JlYXRlUG9zaXRpb25PcHRp
b25zKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK2NvbnN0IGxvbmcgUG9zaXRpb25P
cHRpb25zOjppbmZpbml0eSA9IC0xOworCitzdGF0aWMgUGFzc1JlZlB0cjxQb3NpdGlvbkNhbGxi
YWNrPiBjcmVhdGVQb3NpdGlvbkNhbGxiYWNrKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1
ZSkKIHsKLSAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCisgICAgSlNPYmplY3QqIG9iamVjdCA9
IHZhbHVlLmdldE9iamVjdCgpOworICAgIGlmICghb2JqZWN0KSB7CisgICAgICAgIHNldERPTUV4
Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7CiAgICAgICAgIHJldHVybiAwOworICAg
IH0KIAotICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdCh2YWx1ZSk7CisgICAgRnJhbWUq
IGZyYW1lID0gdG9KU0RPTVdpbmRvdyhleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5pbXBs
KCktPmZyYW1lKCk7CisgICAgQVNTRVJUKGZyYW1lKTsKKyAgICByZXR1cm4gSlNDdXN0b21Qb3Np
dGlvbkNhbGxiYWNrOjpjcmVhdGUob2JqZWN0LCBmcmFtZSk7Cit9CiAKLSAgICBKU1ZhbHVlIGVu
YWJsZUhpZ2hBY2N1cmFjeVZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVj
LCAiZW5hYmxlSGlnaEFjY3VyYWN5IikpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgYm9vbCBlbmFibGVIaWdoQWNjdXJhY3kgPSBlbmFibGVI
aWdoQWNjdXJhY3lWYWx1ZS50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorc3RhdGljIFBhc3NSZWZQdHI8UG9zaXRpb25FcnJvckNhbGxiYWNrPiBjcmVhdGVQ
b3NpdGlvbkVycm9yQ2FsbGJhY2soRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQorewor
ICAgIC8vIE5vIHZhbHVlIGlzIE9LLgorICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgp
KSB7CiAgICAgICAgIHJldHVybiAwOworICAgIH0KIAotICAgIEpTVmFsdWUgdGltZW91dFZhbHVl
ID0gb2JqZWN0LT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAidGltZW91dCIpKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHVuc2lnbmVk
IHRpbWVvdXQgPSB0aW1lb3V0VmFsdWUudG9VSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIEpTT2JqZWN0KiBvYmplY3QgPSB2YWx1ZS5nZXRPYmplY3QoKTsK
KyAgICBpZiAoIW9iamVjdCkgeworICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9N
SVNNQVRDSF9FUlIpOwogICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAKLSAgICBKU1ZhbHVlIG1h
eGltdW1BZ2VWYWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgIm1heGlt
dW1BZ2UiKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4g
MDsKLSAgICB1bnNpZ25lZCBtYXhpbXVtQWdlID0gbWF4aW11bUFnZVZhbHVlLnRvVUludDMyKGV4
ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIDA7Cisg
ICAgRnJhbWUqIGZyYW1lID0gdG9KU0RPTVdpbmRvdyhleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCkpLT5pbXBsKCktPmZyYW1lKCk7CisgICAgQVNTRVJUKGZyYW1lKTsKKyAgICByZXR1cm4gSlND
dXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2s6OmNyZWF0ZShvYmplY3QsIGZyYW1lKTsKK30KIAot
ICAgIHJldHVybiBQb3NpdGlvbk9wdGlvbnM6OmNyZWF0ZShlbmFibGVIaWdoQWNjdXJhY3ksIHRp
bWVvdXQsIG1heGltdW1BZ2UpOworLy8gSWYgdmFsdWUgcmVwcmVzZW50cyBhIG5vbi1uZWdhdGl2
ZSBudW1iZXIsIHRoZSB2YWx1ZSBpcyB0cnVuY2F0ZWQgdG8gYSBsb25nCisvLyBhbmQgYXNzaWdu
ZWQgdG8gcmVzdWx0LCBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZS4gT3RoZXJ3aXNlLCBy
ZXN1bHQgaXMKKy8vIG5vdCBzZXQsIGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucyBmYWxzZS4KK3N0
YXRpYyBib29sIGdldE5vbk5lZ2F0aXZlTG9uZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTVmFs
dWUmIHZhbHVlLCBsb25nKiByZXN1bHQpCit7CisgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpIHx8
ICh2YWx1ZS50b051bWJlcihleGVjKSA8IDApKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgKnJlc3VsdCA9IHN0YXRpY19jYXN0PGxvbmc+KHZhbHVlLnRvTnVtYmVyKGV4ZWMp
KTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotSlNWYWx1ZSBKU0dlb2xvY2F0aW9uOjpnZXRDdXJy
ZW50UG9zaXRpb24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGlj
IFBhc3NSZWZQdHI8UG9zaXRpb25PcHRpb25zPiBjcmVhdGVQb3NpdGlvbk9wdGlvbnMoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIC8vIEFyZ3VtZW50czogUG9zaXRpb25D
YWxsYmFjaywgKG9wdGlvbmFsKVBvc2l0aW9uRXJyb3JDYWxsYmFjaywgKG9wdGlvbmFsKVBvc2l0
aW9uT3B0aW9ucwotICAgIFJlZlB0cjxQb3NpdGlvbkNhbGxiYWNrPiBwb3NpdGlvbkNhbGxiYWNr
OwotICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhcmdzLmF0KDApLmdldE9iamVjdCgpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cisg
ICAgLy8gQ3JlYXRlIGRlZmF1bHQgb3B0aW9ucy4KKyAgICBSZWZQdHI8UG9zaXRpb25PcHRpb25z
PiBvcHRpb25zID0gUG9zaXRpb25PcHRpb25zOjpjcmVhdGUoKTsKKworICAgIGlmICh2YWx1ZS5p
c1VuZGVmaW5lZE9yTnVsbCgpKSB7CisgICAgICAgIC8vIFVzZSBkZWZhdWx0IG9wdGlvbnMuCisg
ICAgICAgIHJldHVybiBvcHRpb25zOworICAgIH0KKworICAgIEpTT2JqZWN0KiBvYmplY3QgPSB2
YWx1ZS5nZXRPYmplY3QoKTsKICAgICBpZiAoIW9iamVjdCkgewogICAgICAgICBzZXRET01FeGNl
cHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOwotICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgaWYgKEZyYW1lKiBmcmFtZSA9
IHRvSlNET01XaW5kb3coZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+aW1wbCgpLT5mcmFt
ZSgpKQotICAgICAgICBwb3NpdGlvbkNhbGxiYWNrID0gSlNDdXN0b21Qb3NpdGlvbkNhbGxiYWNr
OjpjcmVhdGUob2JqZWN0LCBmcmFtZSk7Ci0gICAgCi0gICAgUmVmUHRyPFBvc2l0aW9uRXJyb3JD
YWxsYmFjaz4gcG9zaXRpb25FcnJvckNhbGxiYWNrOwotICAgIGlmICghYXJncy5hdCgxKS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpKSB7Ci0gICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhcmdzLmF0KDEp
LmdldE9iamVjdCgpOwotICAgICAgICBpZiAoIW9iamVjdCkgeworICAgIEpTVmFsdWUgZW5hYmxl
SGlnaEFjY3VyYWN5VmFsdWUgPSBvYmplY3QtPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJl
bmFibGVIaWdoQWNjdXJhY3kiKSk7CisgICAgaWYgKCFlbmFibGVIaWdoQWNjdXJhY3lWYWx1ZS5p
c1VuZGVmaW5lZE9yTnVsbCgpKSB7CisgICAgICAgIGlmICghZW5hYmxlSGlnaEFjY3VyYWN5VmFs
dWUuaXNCb29sZWFuKCkpIHsKICAgICAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBF
X01JU01BVENIX0VSUik7Ci0gICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAg
ICAgICAgIHJldHVybiAwOwogICAgICAgICB9CisgICAgICAgIG9wdGlvbnMtPnNldEVuYWJsZUhp
Z2hBY2N1cmFjeShlbmFibGVIaWdoQWNjdXJhY3lWYWx1ZS50b0Jvb2xlYW4oZXhlYykpOworICAg
IH0KIAotICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gdG9KU0RPTVdpbmRvdyhleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCkpLT5pbXBsKCktPmZyYW1lKCkpCi0gICAgICAgICAgICBwb3NpdGlv
bkVycm9yQ2FsbGJhY2sgPSBKU0N1c3RvbVBvc2l0aW9uRXJyb3JDYWxsYmFjazo6Y3JlYXRlKG9i
amVjdCwgZnJhbWUpOworICAgIEpTVmFsdWUgdGltZW91dFZhbHVlID0gb2JqZWN0LT5nZXQoZXhl
YywgSWRlbnRpZmllcihleGVjLCAidGltZW91dCIpKTsKKyAgICBpZiAoIXRpbWVvdXRWYWx1ZS5p
c1VuZGVmaW5lZE9yTnVsbCgpKSB7CisgICAgICAgIGxvbmcgdGltZW91dDsKKyAgICAgICAgaWYg
KGdldE5vbk5lZ2F0aXZlTG9uZyhleGVjLCB0aW1lb3V0VmFsdWUsICZ0aW1lb3V0KSkKKyAgICAg
ICAgICAgIG9wdGlvbnMtPnNldFRpbWVvdXQodGltZW91dCk7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKKyAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICB9CiAgICAgfQotICAgIAotICAgIFJlZlB0cjxQb3Np
dGlvbk9wdGlvbnM+IHBvc2l0aW9uT3B0aW9uczsKLSAgICBpZiAoIWFyZ3MuYXQoMikuaXNVbmRl
ZmluZWRPck51bGwoKSkgewotICAgICAgICBwb3NpdGlvbk9wdGlvbnMgPSBjcmVhdGVQb3NpdGlv
bk9wdGlvbnMoZXhlYywgYXJncy5hdCgyKSk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKLSAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgSlNWYWx1ZSBt
YXhpbXVtQWdlVmFsdWUgPSBvYmplY3QtPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJtYXhp
bXVtQWdlIikpOworICAgIGlmICghbWF4aW11bUFnZVZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkp
IHsKKyAgICAgICAgbG9uZyBtYXhpbXVtQWdlOworICAgICAgICBpZiAoZ2V0Tm9uTmVnYXRpdmVM
b25nKGV4ZWMsIG1heGltdW1BZ2VWYWx1ZSwgJm1heGltdW1BZ2UpKQorICAgICAgICAgICAgb3B0
aW9ucy0+c2V0VGltZW91dChtYXhpbXVtQWdlKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICBzZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOworICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgIH0KICAgICB9CiAKKyAgICByZXR1cm4gb3B0aW9uczsKK30KKwor
SlNWYWx1ZSBKU0dlb2xvY2F0aW9uOjpnZXRDdXJyZW50UG9zaXRpb24oRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQoreworICAgIC8vIEFyZ3VtZW50czogUG9zaXRpb25DYWxs
YmFjaywgKG9wdGlvbmFsKVBvc2l0aW9uRXJyb3JDYWxsYmFjaywgKG9wdGlvbmFsKVBvc2l0aW9u
T3B0aW9ucworCisgICAgUmVmUHRyPFBvc2l0aW9uQ2FsbGJhY2s+IHBvc2l0aW9uQ2FsbGJhY2sg
PSBjcmVhdGVQb3NpdGlvbkNhbGxiYWNrKGV4ZWMsIGFyZ3MuYXQoMCkpOworICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgQVNT
RVJUKHBvc2l0aW9uQ2FsbGJhY2spOworCisgICAgUmVmUHRyPFBvc2l0aW9uRXJyb3JDYWxsYmFj
az4gcG9zaXRpb25FcnJvckNhbGxiYWNrID0gY3JlYXRlUG9zaXRpb25FcnJvckNhbGxiYWNrKGV4
ZWMsIGFyZ3MuYXQoMSkpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBSZWZQdHI8UG9zaXRpb25PcHRpb25zPiBwb3Np
dGlvbk9wdGlvbnMgPSBjcmVhdGVQb3NpdGlvbk9wdGlvbnMoZXhlYywgYXJncy5hdCgyKSk7Cisg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKKyAgICBBU1NFUlQocG9zaXRpb25PcHRpb25zKTsKKwogICAgIG1faW1wbC0+Z2V0Q3VycmVu
dFBvc2l0aW9uKHBvc2l0aW9uQ2FsbGJhY2sucmVsZWFzZSgpLCBwb3NpdGlvbkVycm9yQ2FsbGJh
Y2sucmVsZWFzZSgpLCBwb3NpdGlvbk9wdGlvbnMucmVsZWFzZSgpKTsKLSAgICAKICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIH0KIAogSlNWYWx1ZSBKU0dlb2xvY2F0aW9uOjp3YXRjaFBvc2l0
aW9uKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICAvLyBBcmd1
bWVudHM6IFBvc2l0aW9uQ2FsbGJhY2ssIChvcHRpb25hbClQb3NpdGlvbkVycm9yQ2FsbGJhY2ss
IChvcHRpb25hbClQb3NpdGlvbk9wdGlvbnMKLSAgICBSZWZQdHI8UG9zaXRpb25DYWxsYmFjaz4g
cG9zaXRpb25DYWxsYmFjazsKLSAgICBKU09iamVjdCogb2JqZWN0ID0gYXJncy5hdCgwKS5nZXRP
YmplY3QoKTsKKworICAgIFJlZlB0cjxQb3NpdGlvbkNhbGxiYWNrPiBwb3NpdGlvbkNhbGxiYWNr
ID0gY3JlYXRlUG9zaXRpb25DYWxsYmFjayhleGVjLCBhcmdzLmF0KDApKTsKICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIGlm
ICghb2JqZWN0KSB7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENI
X0VSUik7CisgICAgQVNTRVJUKHBvc2l0aW9uQ2FsbGJhY2spOworCisgICAgUmVmUHRyPFBvc2l0
aW9uRXJyb3JDYWxsYmFjaz4gcG9zaXRpb25FcnJvckNhbGxiYWNrID0gY3JlYXRlUG9zaXRpb25F
cnJvckNhbGxiYWNrKGV4ZWMsIGFyZ3MuYXQoMSkpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotICAgIAotICAgIGlm
IChGcmFtZSogZnJhbWUgPSB0b0pTRE9NV2luZG93KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSktPmltcGwoKS0+ZnJhbWUoKSkKLSAgICAgICAgcG9zaXRpb25DYWxsYmFjayA9IEpTQ3VzdG9t
UG9zaXRpb25DYWxsYmFjazo6Y3JlYXRlKG9iamVjdCwgZnJhbWUpOwotICAgIAotICAgIFJlZlB0
cjxQb3NpdGlvbkVycm9yQ2FsbGJhY2s+IHBvc2l0aW9uRXJyb3JDYWxsYmFjazsKLSAgICBpZiAo
IWFyZ3MuYXQoMSkuaXNVbmRlZmluZWRPck51bGwoKSkgewotICAgICAgICBKU09iamVjdCogb2Jq
ZWN0ID0gYXJncy5hdCgxKS5nZXRPYmplY3QoKTsKLSAgICAgICAgaWYgKCFvYmplY3QpIHsKLSAg
ICAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7Ci0gICAg
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgaWYgKEZyYW1lKiBmcmFtZSA9IHRvSlNET01XaW5kb3coZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpKS0+aW1wbCgpLT5mcmFtZSgpKQotICAgICAgICAgICAgcG9zaXRpb25FcnJvckNhbGxi
YWNrID0gSlNDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2s6OmNyZWF0ZShvYmplY3QsIGZyYW1l
KTsKLSAgICB9Ci0gICAgCi0gICAgUmVmUHRyPFBvc2l0aW9uT3B0aW9ucz4gcG9zaXRpb25PcHRp
b25zOwotICAgIGlmICghYXJncy5hdCgyKS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7Ci0gICAgICAg
IHBvc2l0aW9uT3B0aW9ucyA9IGNyZWF0ZVBvc2l0aW9uT3B0aW9ucyhleGVjLCBhcmdzLmF0KDIp
KTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7Ci0gICAgfQorCisgICAgUmVmUHRyPFBvc2l0aW9uT3B0aW9ucz4gcG9z
aXRpb25PcHRpb25zID0gY3JlYXRlUG9zaXRpb25PcHRpb25zKGV4ZWMsIGFyZ3MuYXQoMikpOwor
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisgICAgQVNTRVJUKHBvc2l0aW9uT3B0aW9ucyk7CiAKICAgICBpbnQgd2F0Y2hJRCA9IG1f
aW1wbC0+d2F0Y2hQb3NpdGlvbihwb3NpdGlvbkNhbGxiYWNrLnJlbGVhc2UoKSwgcG9zaXRpb25F
cnJvckNhbGxiYWNrLnJlbGVhc2UoKSwgcG9zaXRpb25PcHRpb25zLnJlbGVhc2UoKSk7CiAgICAg
cmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHdhdGNoSUQpOwpJbmRleDogV2ViQ29yZS9wYWdlL0dlb2xv
Y2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb24uY3BwCShy
ZXZpc2lvbiA0Njg5MCkKKysrIFdlYkNvcmUvcGFnZS9HZW9sb2NhdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlBh
Z2UuaCIKICNpbmNsdWRlICJQb3NpdGlvbkVycm9yLmgiCisjaW5jbHVkZSAiUG9zaXRpb25PcHRp
b25zLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDEsMTEgKzQyLDE1IEBAIEdlb2xv
Y2F0aW9uOjpHZW9Ob3RpZmllcjo6R2VvTm90aWZpZXIoUGEKICAgICAsIG1fb3B0aW9ucyhvcHRp
b25zKQogICAgICwgbV90aW1lcih0aGlzLCAmR2VvbG9jYXRpb246Okdlb05vdGlmaWVyOjp0aW1l
ckZpcmVkKQogeworICAgIEFTU0VSVChtX3N1Y2Nlc3NDYWxsYmFjayk7CisgICAgLy8gSWYgbm8g
b3B0aW9ucyB3ZXJlIHN1cHBsaWVkIGZyb20gSlMsIHdlIHNob3VsZCBoYXZlIGNyZWF0ZWQgYSBk
ZWZhdWx0IHNldAorICAgIC8vIG9mIG9wdGlvbnMgaW4gSlNHZW9sb2NhdGlvbkN1c3RvbS5jcHAu
CisgICAgQVNTRVJUKG1fb3B0aW9ucyk7CiB9CiAKIHZvaWQgR2VvbG9jYXRpb246Okdlb05vdGlm
aWVyOjpzdGFydFRpbWVyKCkKIHsKLSAgICBpZiAobV9lcnJvckNhbGxiYWNrICYmIG1fb3B0aW9u
cykKKyAgICBpZiAobV9lcnJvckNhbGxiYWNrICYmIChtX29wdGlvbnMtPnRpbWVvdXQoKSAhPSBQ
b3NpdGlvbk9wdGlvbnM6OmluZmluaXR5KSkKICAgICAgICAgbV90aW1lci5zdGFydE9uZVNob3Qo
bV9vcHRpb25zLT50aW1lb3V0KCkgLyAxMDAwLjApOwogfQogCkluZGV4OiBXZWJDb3JlL3BhZ2Uv
UG9zaXRpb25PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1Bvc2l0aW9uT3B0
aW9ucy5oCShyZXZpc2lvbiA0Njg5MCkKKysrIFdlYkNvcmUvcGFnZS9Qb3NpdGlvbk9wdGlvbnMu
aAkod29ya2luZyBjb3B5KQpAQCAtMzMsMjYgKzMzLDMzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAKIGNsYXNzIFBvc2l0aW9uT3B0aW9ucyA6IHB1YmxpYyBSZWZDb3VudGVkPFBvc2l0aW9u
T3B0aW9ucz4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBvc2l0aW9uT3B0aW9u
cz4gY3JlYXRlKGJvb2wgaGlnaEFjY3VyYWN5LCB1bnNpZ25lZCB0aW1lb3V0LCB1bnNpZ25lZCBt
YXhpbXVtQWdlKSB7IHJldHVybiBhZG9wdFJlZihuZXcgUG9zaXRpb25PcHRpb25zKGhpZ2hBY2N1
cmFjeSwgdGltZW91dCwgbWF4aW11bUFnZSkpOyB9CisgICAgc3RhdGljIGNvbnN0IGxvbmcgaW5m
aW5pdHk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UG9zaXRpb25PcHRpb25zPiBjcmVhdGUoKSB7
IHJldHVybiBhZG9wdFJlZihuZXcgUG9zaXRpb25PcHRpb25zKCkpOyB9CiAKICAgICBib29sIGVu
YWJsZUhpZ2hBY2N1cmFjeSgpIGNvbnN0IHsgcmV0dXJuIG1faGlnaEFjY3VyYWN5OyB9CiAgICAg
dm9pZCBzZXRFbmFibGVIaWdoQWNjdXJhY3koYm9vbCBlbmFibGUpIHsgbV9oaWdoQWNjdXJhY3kg
PSBlbmFibGU7IH0KLSAgICB1bnNpZ25lZCB0aW1lb3V0KCkgY29uc3QgeyByZXR1cm4gbV90aW1l
b3V0OyB9Ci0gICAgdm9pZCBzZXRUaW1lb3V0KHVuc2lnbmVkIHQpIHsgbV90aW1lb3V0ID0gdDsg
fQotICAgIHVuc2lnbmVkIG1heGltdW1BZ2UoKSBjb25zdCB7IHJldHVybiBtX21heGltdW1BZ2U7
IH0KLSAgICB2b2lkIHNldE1heGltdW1BZ2UodW5zaWduZWQgYSkgeyBtX21heGltdW1BZ2UgPSBh
OyB9CisgICAgbG9uZyB0aW1lb3V0KCkgY29uc3QgeyByZXR1cm4gbV90aW1lb3V0OyB9CisgICAg
dm9pZCBzZXRUaW1lb3V0KGxvbmcgdCkgeworICAgICAgICBBU1NFUlQodCA9PSBpbmZpbml0eSB8
fCB0ID49IDApOworICAgICAgICBtX3RpbWVvdXQgPSB0OworICAgIH0KKyAgICBsb25nIG1heGlt
dW1BZ2UoKSBjb25zdCB7IHJldHVybiBtX21heGltdW1BZ2U7IH0KKyAgICB2b2lkIHNldE1heGlt
dW1BZ2UobG9uZyBhKSB7CisgICAgICAgIEFTU0VSVChhID09IGluZmluaXR5IHx8IGEgPj0gMCk7
CisgICAgICAgIG1fbWF4aW11bUFnZSA9IGE7CisgICAgfQogICAgIAogcHJpdmF0ZToKLSAgICBQ
b3NpdGlvbk9wdGlvbnMoYm9vbCBoaWdoQWNjdXJhY3ksIHVuc2lnbmVkIHRpbWVvdXQsIHVuc2ln
bmVkIG1heGltdW1BZ2UpCi0gICAgICAgIDogbV9oaWdoQWNjdXJhY3koaGlnaEFjY3VyYWN5KQot
ICAgICAgICAsIG1fdGltZW91dCh0aW1lb3V0KQotICAgICAgICAsIG1fbWF4aW11bUFnZShtYXhp
bXVtQWdlKQorICAgIFBvc2l0aW9uT3B0aW9ucygpCisgICAgICAgIDogbV9oaWdoQWNjdXJhY3ko
ZmFsc2UpCisgICAgICAgICwgbV90aW1lb3V0KGluZmluaXR5KQorICAgICAgICAsIG1fbWF4aW11
bUFnZSgwKQogICAgIHsKICAgICB9CiAgICAgCiAgICAgYm9vbCBtX2hpZ2hBY2N1cmFjeTsKLSAg
ICB1bnNpZ25lZCBtX3RpbWVvdXQ7Ci0gICAgdW5zaWduZWQgbV9tYXhpbXVtQWdlOworICAgIGxv
bmcgbV90aW1lb3V0OworICAgIGxvbmcgbV9tYXhpbXVtQWdlOwogfTsKICAgICAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ2ODkwKQorKysgTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMDktMDgtMDcgIFN0
ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyAyNzI1NCA6IEdlb2xvY2F0aW9uIFBvc2l0
aW9uT3B0aW9ucyBkb2VzIG5vdCB1c2UgY29ycmVjdCBkZWZhdWx0IHZhbHVlcy4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3MjU0CisKKyAgICAgICAg
QWRkcyBhIGxheW91dCB0ZXN0IHRvIGNoZWNrIHRoZSBhY2NlcHRhYmxlIHR5cGVzIGZvciBhcmd1
bWVudHMgdG8gR2VvbG9jYXRpb24gbWV0aG9kcy4KKworICAgICAgICAqIGdlb2xvY2F0aW9uOiBB
ZGRlZC4KKyAgICAgICAgKiBnZW9sb2NhdGlvbi9hcmd1bWVudC10eXBlcy1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGdlb2xvY2F0aW9uL2FyZ3VtZW50LXR5cGVzLmh0bWw6IEFkZGVk
LgorCiAyMDA5LTA4LTA3ICBTaGluaWNoaXJvIEhhbWFqaSAgPGhhbWFqaUBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRlbGUgUGV0ZXJzb24uCkluZGV4OiBMYXlvdXRUZXN0
cy9nZW9sb2NhdGlvbi9hcmd1bWVudC10eXBlcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZ2VvbG9jYXRpb24vYXJndW1lbnQtdHlwZXMtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZ2VvbG9jYXRpb24vYXJndW1lbnQtdHlwZXMtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMxIEBACitUZXN0cyB0aGUgYWNjZXB0YWJs
ZSB0eXBlcyBmb3IgYXJndW1lbnRzIHRvIEdlb2xvY2F0aW9uIG1ldGhvZHMuCisKK1NVQ0NFU1Mg
OiBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKCkgOiBUaHJldyBleGNl
cHRpb24KKworU1VDQ0VTUyA6IG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRp
b24oZW1wdHlGdW5jdGlvbikgOiBEaWQgbm90IHRocm93IGV4Y2VwdGlvbgorU1VDQ0VTUyA6IG5h
dmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oNDIpIDogVGhyZXcgZXhjZXB0
aW9uCisKK1NVQ0NFU1MgOiBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9u
KGVtcHR5RnVuY3Rpb24sIG51bGwpIDogRGlkIG5vdCB0aHJvdyBleGNlcHRpb24KK1NVQ0NFU1Mg
OiBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24s
IGVtcHR5RnVuY3Rpb24pIDogRGlkIG5vdCB0aHJvdyBleGNlcHRpb24KK1NVQ0NFU1MgOiBuYXZp
Z2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIDQyKSA6
IFRocmV3IGV4Y2VwdGlvbgorCitTVUNDRVNTIDogbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1
cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCBudWxsLCBudWxsKSA6IERpZCBub3QgdGhyb3cg
ZXhjZXB0aW9uCitTVUNDRVNTIDogbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3Np
dGlvbihlbXB0eUZ1bmN0aW9uLCBudWxsLCB7fSkgOiBEaWQgbm90IHRocm93IGV4Y2VwdGlvbgor
U1VDQ0VTUyA6IG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlG
dW5jdGlvbiwgbnVsbCwgNDIpIDogVGhyZXcgZXhjZXB0aW9uCisKK1NVQ0NFU1MgOiBuYXZpZ2F0
b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIG51bGwsIHtk
dW1teVByb3BlcnR5OjQyfSkgOiBEaWQgbm90IHRocm93IGV4Y2VwdGlvbgorCitTVUNDRVNTIDog
bmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCBu
dWxsLCB7bWF4aW11bUFnZTo0Mn0pIDogRGlkIG5vdCB0aHJvdyBleGNlcHRpb24KK1NVQ0NFU1Mg
OiBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24s
IG51bGwsIHttYXhpbXVtQWdlOjQyLjF9KSA6IERpZCBub3QgdGhyb3cgZXhjZXB0aW9uCitTVUND
RVNTIDogbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0
aW9uLCBudWxsLCB7bWF4aW11bUFnZTotNDJ9KSA6IFRocmV3IGV4Y2VwdGlvbgorU1VDQ0VTUyA6
IG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwg
bnVsbCwge21heGltdW1BZ2U6dHJ1ZX0pIDogVGhyZXcgZXhjZXB0aW9uCisKK1NVQ0NFU1MgOiBu
YXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIG51
bGwsIHtlbmFibGVIaWdoQWNjdXJhY3k6dHJ1ZX0pIDogRGlkIG5vdCB0aHJvdyBleGNlcHRpb24K
K1NVQ0NFU1MgOiBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5
RnVuY3Rpb24sIG51bGwsIHtlbmFibGVIaWdoQWNjdXJhY3k6NDJ9KSA6IFRocmV3IGV4Y2VwdGlv
bgorCitTVUNDRVNTIDogbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihl
bXB0eUZ1bmN0aW9uLCBudWxsLCB7dGltZW91dDo0Mn0pIDogRGlkIG5vdCB0aHJvdyBleGNlcHRp
b24KK1NVQ0NFU1MgOiBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVt
cHR5RnVuY3Rpb24sIG51bGwsIHt0aW1lb3V0OjQyLjF9KSA6IERpZCBub3QgdGhyb3cgZXhjZXB0
aW9uCitTVUNDRVNTIDogbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihl
bXB0eUZ1bmN0aW9uLCBudWxsLCB7dGltZW91dDotNDJ9KSA6IFRocmV3IGV4Y2VwdGlvbgorU1VD
Q0VTUyA6IG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5j
dGlvbiwgbnVsbCwge3RpbWVvdXQ6dHJ1ZX0pIDogVGhyZXcgZXhjZXB0aW9uCisKK0VORCBPRiBU
RVNUCkluZGV4OiBMYXlvdXRUZXN0cy9nZW9sb2NhdGlvbi9hcmd1bWVudC10eXBlcy5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2dlb2xvY2F0aW9uL2FyZ3VtZW50LXR5cGVzLmh0bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9nZW9sb2NhdGlvbi9hcmd1bWVudC10eXBlcy5o
dG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU4IEBACis8aHRtbD4KKyAgPGhlYWQ+CisgICAg
PHNjcmlwdD4KKyAgICAgIGZ1bmN0aW9uIHRlc3QodGV4dCwgc2hvdWxkVGhyb3cpIHsKKyAgICAg
ICAgdHJ5IHsKKyAgICAgICAgICBldmFsKHRleHQpOworICAgICAgICAgIGxvZ1Jlc3VsdCghc2hv
dWxkVGhyb3csIHRleHQsICdEaWQgbm90IHRocm93IGV4Y2VwdGlvbicpOworICAgICAgICB9IGNh
dGNoKGUpIHsKKyAgICAgICAgICBsb2dSZXN1bHQoc2hvdWxkVGhyb3csIHRleHQsICdUaHJldyBl
eGNlcHRpb24nKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZnVuY3Rpb24gbG9nUmVzdWx0
KHN1Y2Nlc3MsIHRleHQsIHJlYXNvbikgeworICAgICAgICB2YXIgY29sb3IgPSBzdWNjZXNzID8g
J2dyZWVuJyA6ICdyZWQnOworICAgICAgICB2YXIgcmVzdWx0ID0gc3VjY2VzcyA/ICdTVUNDRVNT
JyA6ICdGQUlMVVJFJzsKKyAgICAgICAgbG9nKCc8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6Ym9s
ZDsgY29sb3I6JyArIGNvbG9yICsgJyI+JyArIHJlc3VsdCArICc8L3NwYW4+IDogJyArIHRleHQg
KyAnIDogJyArIHJlYXNvbik7CisgICAgICB9CisgICAgICBmdW5jdGlvbiBsb2cobWVzc2FnZSkg
eworICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9nJykuaW5uZXJIVE1MICs9IG1l
c3NhZ2UgKyAnPGJyPic7CisgICAgICB9CisgICAgICBmdW5jdGlvbiBydW5UZXN0cygpIHsKKyAg
ICAgICAgdmFyIGVtcHR5RnVuY3Rpb24gPSBmdW5jdGlvbigpIHt9OworICAgICAgICB0ZXN0KCdu
YXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKCknLCB0cnVlKTsKKyAgICAg
ICAgbG9nKCcnKTsKKyAgICAgICAgdGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJl
bnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uKScsIGZhbHNlKTsKKyAgICAgICAgdGVzdCgnbmF2aWdh
dG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbig0MiknLCB0cnVlKTsKKyAgICAgICAg
bG9nKCcnKTsKKyAgICAgICAgdGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQ
b3NpdGlvbihlbXB0eUZ1bmN0aW9uLCBudWxsKScsIGZhbHNlKTsKKyAgICAgICAgdGVzdCgnbmF2
aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCBlbXB0
eUZ1bmN0aW9uKScsIGZhbHNlKTsKKyAgICAgICAgdGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9u
LmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCA0MiknLCB0cnVlKTsKKyAgICAgICAg
bG9nKCcnKTsKKyAgICAgICAgdGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQ
b3NpdGlvbihlbXB0eUZ1bmN0aW9uLCBudWxsLCBudWxsKScsIGZhbHNlKTsKKyAgICAgICAgdGVz
dCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9u
LCBudWxsLCB7fSknLCBmYWxzZSk7CisgICAgICAgIHRlc3QoJ25hdmlnYXRvci5nZW9sb2NhdGlv
bi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgbnVsbCwgNDIpJywgdHJ1ZSk7Cisg
ICAgICAgIGxvZygnJyk7CisgICAgICAgIHRlc3QoJ25hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRD
dXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgbnVsbCwge2R1bW15UHJvcGVydHk6NDJ9KScs
IGZhbHNlKTsKKyAgICAgICAgbG9nKCcnKTsKKyAgICAgICAgdGVzdCgnbmF2aWdhdG9yLmdlb2xv
Y2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCBudWxsLCB7bWF4aW11bUFn
ZTo0Mn0pJywgZmFsc2UpOworICAgICAgICB0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0
Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIG51bGwsIHttYXhpbXVtQWdlOjQyLjF9KScs
IGZhbHNlKTsKKyAgICAgICAgdGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQ
b3NpdGlvbihlbXB0eUZ1bmN0aW9uLCBudWxsLCB7bWF4aW11bUFnZTotNDJ9KScsIHRydWUpOwor
ICAgICAgICB0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVt
cHR5RnVuY3Rpb24sIG51bGwsIHttYXhpbXVtQWdlOnRydWV9KScsIHRydWUpOworICAgICAgICBs
b2coJycpOworICAgICAgICB0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBv
c2l0aW9uKGVtcHR5RnVuY3Rpb24sIG51bGwsIHtlbmFibGVIaWdoQWNjdXJhY3k6dHJ1ZX0pJywg
ZmFsc2UpOworICAgICAgICB0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBv
c2l0aW9uKGVtcHR5RnVuY3Rpb24sIG51bGwsIHtlbmFibGVIaWdoQWNjdXJhY3k6NDJ9KScsIHRy
dWUpOworICAgICAgICBsb2coJycpOworICAgICAgICB0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRp
b24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIG51bGwsIHt0aW1lb3V0OjQyfSkn
LCBmYWxzZSk7CisgICAgICAgIHRlc3QoJ25hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50
UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgbnVsbCwge3RpbWVvdXQ6NDIuMX0pJywgZmFsc2UpOwor
ICAgICAgICB0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVt
cHR5RnVuY3Rpb24sIG51bGwsIHt0aW1lb3V0Oi00Mn0pJywgdHJ1ZSk7CisgICAgICAgIHRlc3Qo
J25hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwg
bnVsbCwge3RpbWVvdXQ6dHJ1ZX0pJywgdHJ1ZSk7CisgICAgICAgIGxvZygnJyk7CisgICAgICAg
IGxvZygnRU5EIE9GIFRFU1QnKTsKKyAgICAgIH0KKyAgICA8L3NjcmlwdD4KKyAgPC9oZWFkPgor
ICA8Ym9keSBvbmxvYWQ9InJ1blRlc3RzKCkiPgorICAgIDxwPlRlc3RzIHRoZSBhY2NlcHRhYmxl
IHR5cGVzIGZvciBhcmd1bWVudHMgdG8gR2VvbG9jYXRpb24gbWV0aG9kcy48L3A+CisgICAgPGRp
diBpZD0ibG9nIj48L2Rpdj4KKyAgPC9ib2R5PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="18435"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34524</attachid>
            <date>2009-08-10 16:05:13 -0700</date>
            <delta_ts>2009-08-11 05:34:07 -0700</delta_ts>
            <desc>Patch 2 for bug 27254</desc>
            <filename>setPositionOptionsDefaults2.txt</filename>
            <type>text/plain</type>
            <size>22405</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NzAwNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMDktMDgtMTAgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEJ1ZyAyNzI1NCA6IEdlb2xvY2F0aW9uIFBvc2l0aW9uT3B0aW9ucyBkb2VzIG5vdCB1c2UgY29y
cmVjdCBkZWZhdWx0IHZhbHVlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTI3MjU0CisKKyAgICAgICAgU2V0cyB0aGUgY29ycmVjdCBkZWZhdWx0IHZh
bHVlcyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlIFBvc2l0aW9uT3B0aW9ucyBvYmplY3QKKyAg
ICAgICAgcGFzc2VkIHRvIEdlb2xvY2F0aW9uIG1ldGhvZHMuIFNlZSBodHRwOi8vd3d3LnczLm9y
Zy9UUi9nZW9sb2NhdGlvbi1BUEkvLgorCisgICAgICAgIEFsc28gYWRkcyBjaGVja2luZyB0byB0
aHJvdyBhbiBleGNlcHRpb24gaWYgYXJndW1lbnRzIG9mIHRoZSBpbmNvcnJlY3QgdHlwZSBhcmUK
KyAgICAgICAgcGFzc2VkIHRvIEdlb2xvY2F0aW9uIG1ldGhvZHMuIEFkZHMgYSBsYXlvdXQgdGVz
dCB0byB0ZXN0IHRoaXMuIFRoaXMgdGVzdCBzaG91bGQKKyAgICAgICAgcGFzcyBvbiBhbGwgcGxh
dGZvcm1zIHdoZXJlIEdlb2xvY2F0aW9uIGlzIGltcGxlbWVudGVkLgorCisgICAgICAgIFRlc3Q6
IGZhc3QvZG9tL0dlb2xvY2F0aW9uL2FyZ3VtZW50LXR5cGVzLmh0bWwKKworICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTR2VvbG9jYXRpb25DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3Jl
YXRlUG9zaXRpb25DYWxsYmFjayk6IEFkZGVkLiBDcmVhdGVzIHRoZSBjYWxsYmFjay4KKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZVBvc2l0aW9uRXJyb3JDYWxsYmFjayk6IEFkZGVkLiBDcmVhdGVz
IHRoZSBjYWxiYWNrLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlUG9zaXRpb25PcHRpb25zKTog
QWRkZWQuIENyZWF0ZXMgdGhlIFBvc2l0aW9uT3B0aW9ucyBvYmplY3QsIHNldHRpbmcgZGVmYXVs
dHMgd2hlcmUgcmVxdWlyZWQuCisgICAgICAgIChXZWJDb3JlOjpKU0dlb2xvY2F0aW9uOjpnZXRD
dXJyZW50UG9zaXRpb24pOiBNb2RpZmllZC4gTm93IHVzZXMgYWJvdmUgaGVscGVyIGZ1bmN0aW9u
cy4KKyAgICAgICAgKFdlYkNvcmU6OkpTR2VvbG9jYXRpb246OndhdGNoUG9zaXRpb24pOiBNb2Rp
ZmllZC4gTm93IHVzZXMgYWJvdmUgaGVscGVyIGZ1bmN0aW9ucy4KKyAgICAgICAgKiBwYWdlL0dl
b2xvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpHZW9Ob3RpZmll
cjo6R2VvTm90aWZpZXIpOiBNb2RpZmllZC4gQXNzZXJ0cyB0aGF0IFBvc2l0aW9uT3B0aW9ucyBv
YmplY3QgaXMgcHJlc2VudC4KKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpHZW9Ob3Rp
Zmllcjo6c3RhcnRUaW1lcik6IE1vZGlmaWVkLiBPbmx5IHN0YXJ0cyB0aW1lciBpZiB0aW1lb3V0
IGhhcyBiZWVuIHNldC4KKyAgICAgICAgKiBwYWdlL1Bvc2l0aW9uT3B0aW9ucy5oOgorICAgICAg
ICAoV2ViQ29yZTo6UG9zaXRpb25PcHRpb25zOjpjcmVhdGUpOiBNb2RpZmllZC4gQ3JlYXRlcyBv
YmplY3Qgd2l0aCBkZWZhdWx0IHZhbHVlcy4KKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uT3B0
aW9uczo6dGltZW91dCk6IE1vZGlmaWVkLiBVc2VzIGNvcnJlY3QgdHlwZS4KKyAgICAgICAgKFdl
YkNvcmU6OlBvc2l0aW9uT3B0aW9uczo6aGFzVGltZW91dCk6IEFkZGVkLiBEZXRlcm1pbmVzIHdo
ZXRoZXIgYSB0aW1lb3V0IGhhcyBiZWVuIHNldC4KKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9u
T3B0aW9uczo6c2V0VGltZW91dCk6IE1vZGlmaWVkLiBVc2VzIGNvcnJlY3QgdHlwZS4KKyAgICAg
ICAgKFdlYkNvcmU6OlBvc2l0aW9uT3B0aW9uczo6bWF4aW11bUFnZSk6IE1vZGlmaWVkLiBVc2Vz
IGNvcnJlY3QgdHlwZS4KKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uT3B0aW9uczo6c2V0TWF4
aW11bUFnZSk6IE1vZGlmaWVkLiBVc2VzIGNvcnJlY3QgdHlwZS4KKyAgICAgICAgKFdlYkNvcmU6
OlBvc2l0aW9uT3B0aW9uczo6UG9zaXRpb25PcHRpb25zKTogTW9kaWZpZWQuIENyZWF0ZXMgb2Jq
ZWN0IHdpdGggZGVmYXVsdCB2YWx1ZXMuCisKIDIwMDktMDgtMTAgIEtlbm5ldGggUm9oZGUgQ2hy
aXN0aWFuc2VuICA8a2VubmV0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNp
bW9uIEhhdXNtYW5uLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0dlb2xvY2F0aW9uQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTR2VvbG9jYXRpb25D
dXN0b20uY3BwCShyZXZpc2lvbiA0NzAwNCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNHZW9s
b2NhdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDEwOSArMzksMTI3IEBAIHVz
aW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIFBhc3NS
ZWZQdHI8UG9zaXRpb25PcHRpb25zPiBjcmVhdGVQb3NpdGlvbk9wdGlvbnMoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIHZhbHVlKQorc3RhdGljIFBhc3NSZWZQdHI8UG9zaXRpb25DYWxsYmFjaz4g
Y3JlYXRlUG9zaXRpb25DYWxsYmFjayhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7
Ci0gICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKQorICAgIEpTT2JqZWN0KiBvYmplY3QgPSB2YWx1
ZS5nZXRPYmplY3QoKTsKKyAgICBpZiAoIW9iamVjdCkgeworICAgICAgICBzZXRET01FeGNlcHRp
b24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOwogICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAK
LSAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QodmFsdWUpOwotCi0gICAgSlNWYWx1ZSBl
bmFibGVIaWdoQWNjdXJhY3lWYWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhl
YywgImVuYWJsZUhpZ2hBY2N1cmFjeSIpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIGJvb2wgZW5hYmxlSGlnaEFjY3VyYWN5ID0gZW5hYmxl
SGlnaEFjY3VyYWN5VmFsdWUudG9Cb29sZWFuKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgRnJhbWUqIGZyYW1lID0gdG9KU0RPTVdp
bmRvdyhleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5pbXBsKCktPmZyYW1lKCk7CisgICAg
cmV0dXJuIEpTQ3VzdG9tUG9zaXRpb25DYWxsYmFjazo6Y3JlYXRlKG9iamVjdCwgZnJhbWUpOwor
fQogCi0gICAgSlNWYWx1ZSB0aW1lb3V0VmFsdWUgPSBvYmplY3QtPmdldChleGVjLCBJZGVudGlm
aWVyKGV4ZWMsICJ0aW1lb3V0IikpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgdW5zaWduZWQgdGltZW91dCA9IHRpbWVvdXRWYWx1ZS50b1VJ
bnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCitzdGF0aWMgUGFzc1Jl
ZlB0cjxQb3NpdGlvbkVycm9yQ2FsbGJhY2s+IGNyZWF0ZVBvc2l0aW9uRXJyb3JDYWxsYmFjayhF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgLy8gTm8gdmFsdWUgaXMgT0su
CisgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiAwOwog
Ci0gICAgSlNWYWx1ZSBtYXhpbXVtQWdlVmFsdWUgPSBvYmplY3QtPmdldChleGVjLCBJZGVudGlm
aWVyKGV4ZWMsICJtYXhpbXVtQWdlIikpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgdW5zaWduZWQgbWF4aW11bUFnZSA9IG1heGltdW1BZ2VW
YWx1ZS50b1VJbnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
SlNPYmplY3QqIG9iamVjdCA9IHZhbHVlLmdldE9iamVjdCgpOworICAgIGlmICghb2JqZWN0KSB7
CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7CiAgICAg
ICAgIHJldHVybiAwOworICAgIH0KIAotICAgIHJldHVybiBQb3NpdGlvbk9wdGlvbnM6OmNyZWF0
ZShlbmFibGVIaWdoQWNjdXJhY3ksIHRpbWVvdXQsIG1heGltdW1BZ2UpOworICAgIEZyYW1lKiBm
cmFtZSA9IHRvSlNET01XaW5kb3coZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+aW1wbCgp
LT5mcmFtZSgpOworICAgIHJldHVybiBKU0N1c3RvbVBvc2l0aW9uRXJyb3JDYWxsYmFjazo6Y3Jl
YXRlKG9iamVjdCwgZnJhbWUpOwogfQogCi1KU1ZhbHVlIEpTR2VvbG9jYXRpb246OmdldEN1cnJl
bnRQb3NpdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitzdGF0aWMg
UGFzc1JlZlB0cjxQb3NpdGlvbk9wdGlvbnM+IGNyZWF0ZVBvc2l0aW9uT3B0aW9ucyhFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgLy8gQXJndW1lbnRzOiBQb3NpdGlvbkNh
bGxiYWNrLCAob3B0aW9uYWwpUG9zaXRpb25FcnJvckNhbGxiYWNrLCAob3B0aW9uYWwpUG9zaXRp
b25PcHRpb25zCi0gICAgUmVmUHRyPFBvc2l0aW9uQ2FsbGJhY2s+IHBvc2l0aW9uQ2FsbGJhY2s7
Ci0gICAgSlNPYmplY3QqIG9iamVjdCA9IGFyZ3MuYXQoMCkuZ2V0T2JqZWN0KCk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAg
ICAvLyBDcmVhdGUgZGVmYXVsdCBvcHRpb25zLgorICAgIFJlZlB0cjxQb3NpdGlvbk9wdGlvbnM+
IG9wdGlvbnMgPSBQb3NpdGlvbk9wdGlvbnM6OmNyZWF0ZSgpOworCisgICAgaWYgKHZhbHVlLmlz
VW5kZWZpbmVkT3JOdWxsKCkpIHsKKyAgICAgICAgLy8gVXNlIGRlZmF1bHQgb3B0aW9ucy4KKyAg
ICAgICAgcmV0dXJuIG9wdGlvbnMucmVsZWFzZSgpOworICAgIH0KKworICAgIEpTT2JqZWN0KiBv
YmplY3QgPSB2YWx1ZS5nZXRPYmplY3QoKTsKICAgICBpZiAoIW9iamVjdCkgewogICAgICAgICBz
ZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOwotICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgaWYgKEZyYW1l
KiBmcmFtZSA9IHRvSlNET01XaW5kb3coZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+aW1w
bCgpLT5mcmFtZSgpKQotICAgICAgICBwb3NpdGlvbkNhbGxiYWNrID0gSlNDdXN0b21Qb3NpdGlv
bkNhbGxiYWNrOjpjcmVhdGUob2JqZWN0LCBmcmFtZSk7Ci0gICAgCi0gICAgUmVmUHRyPFBvc2l0
aW9uRXJyb3JDYWxsYmFjaz4gcG9zaXRpb25FcnJvckNhbGxiYWNrOwotICAgIGlmICghYXJncy5h
dCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7Ci0gICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBh
cmdzLmF0KDEpLmdldE9iamVjdCgpOwotICAgICAgICBpZiAoIW9iamVjdCkgeworICAgIEpTVmFs
dWUgZW5hYmxlSGlnaEFjY3VyYWN5VmFsdWUgPSBvYmplY3QtPmdldChleGVjLCBJZGVudGlmaWVy
KGV4ZWMsICJlbmFibGVIaWdoQWNjdXJhY3kiKSk7CisgICAgaWYgKCFlbmFibGVIaWdoQWNjdXJh
Y3lWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CisgICAgICAgIC8vIFdlIGFjY2VwdCBlaXRo
ZXIgYSBib29sZWFuIG9yIG51bWVyaWMgdmFsdWUuCisgICAgICAgIGlmICghZW5hYmxlSGlnaEFj
Y3VyYWN5VmFsdWUuaXNCb29sZWFuKCkgJiYgIWVuYWJsZUhpZ2hBY2N1cmFjeVZhbHVlLmlzTnVt
YmVyKCkpIHsKICAgICAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENI
X0VSUik7Ci0gICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIHJl
dHVybiAwOwogICAgICAgICB9CisgICAgICAgIC8vIFRoaXMgY29udmVydHMgYSBudW1lcmljIHZh
bHVlIHRvIGEgYm9vbGVhbi4KKyAgICAgICAgb3B0aW9ucy0+c2V0RW5hYmxlSGlnaEFjY3VyYWN5
KGVuYWJsZUhpZ2hBY2N1cmFjeVZhbHVlLnRvQm9vbGVhbihleGVjKSk7CisgICAgfQogCi0gICAg
ICAgIGlmIChGcmFtZSogZnJhbWUgPSB0b0pTRE9NV2luZG93KGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSktPmltcGwoKS0+ZnJhbWUoKSkKLSAgICAgICAgICAgIHBvc2l0aW9uRXJyb3JDYWxs
YmFjayA9IEpTQ3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNrOjpjcmVhdGUob2JqZWN0LCBmcmFt
ZSk7CisgICAgSlNWYWx1ZSB0aW1lb3V0VmFsdWUgPSBvYmplY3QtPmdldChleGVjLCBJZGVudGlm
aWVyKGV4ZWMsICJ0aW1lb3V0IikpOworICAgIGlmICghdGltZW91dFZhbHVlLmlzVW5kZWZpbmVk
T3JOdWxsKCkpIHsKKyAgICAgICAgaWYgKHRpbWVvdXRWYWx1ZS5pc051bWJlcigpKSB7CisgICAg
ICAgICAgICAvLyBXcmFwIHRvIGludDMyIHRvIG1hdGNoIGJlaGF2aW9yIG9mIHdpbmRvdy5zZXRU
aW1lb3V0LgorICAgICAgICAgICAgaW50IHRpbWVvdXQgPSB0aW1lb3V0VmFsdWUudG9JbnQzMihl
eGVjKTsKKyAgICAgICAgICAgIG9wdGlvbnMtPnNldFRpbWVvdXQodGltZW91dCA+PSAwID8gdGlt
ZW91dCA6IDApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2V0RE9NRXhjZXB0aW9u
KGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICB9CiAgICAgfQotICAgIAotICAgIFJlZlB0cjxQb3NpdGlvbk9wdGlvbnM+IHBvc2l0aW9uT3B0
aW9uczsKLSAgICBpZiAoIWFyZ3MuYXQoMikuaXNVbmRlZmluZWRPck51bGwoKSkgewotICAgICAg
ICBwb3NpdGlvbk9wdGlvbnMgPSBjcmVhdGVQb3NpdGlvbk9wdGlvbnMoZXhlYywgYXJncy5hdCgy
KSk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOworCisgICAgSlNWYWx1ZSBtYXhpbXVtQWdlVmFsdWUgPSBvYmplY3Qt
PmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJtYXhpbXVtQWdlIikpOworICAgIGlmICghbWF4
aW11bUFnZVZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKKyAgICAgICAgaWYgKG1heGltdW1B
Z2VWYWx1ZS5pc051bWJlcigpKSB7CisgICAgICAgICAgICAvLyBXcmFwIHRvIGludDMyIHRvIG1h
dGNoIGJlaGF2aW9yIG9mIHdpbmRvdy5zZXRUaW1lb3V0LgorICAgICAgICAgICAgaW50IG1heGlt
dW1BZ2UgPSBtYXhpbXVtQWdlVmFsdWUudG9JbnQzMihleGVjKTsKKyAgICAgICAgICAgIG9wdGlv
bnMtPnNldFRpbWVvdXQobWF4aW11bUFnZSA+PSAwID8gbWF4aW11bUFnZSA6IDApOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFU
Q0hfRVJSKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CiAgICAgfQogCisgICAg
cmV0dXJuIG9wdGlvbnMucmVsZWFzZSgpOworfQorCitKU1ZhbHVlIEpTR2VvbG9jYXRpb246Omdl
dEN1cnJlbnRQb3NpdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7
CisgICAgLy8gQXJndW1lbnRzOiBQb3NpdGlvbkNhbGxiYWNrLCAob3B0aW9uYWwpUG9zaXRpb25F
cnJvckNhbGxiYWNrLCAob3B0aW9uYWwpUG9zaXRpb25PcHRpb25zCisKKyAgICBSZWZQdHI8UG9z
aXRpb25DYWxsYmFjaz4gcG9zaXRpb25DYWxsYmFjayA9IGNyZWF0ZVBvc2l0aW9uQ2FsbGJhY2so
ZXhlYywgYXJncy5hdCgwKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBBU1NFUlQocG9zaXRpb25DYWxsYmFjayk7CisK
KyAgICBSZWZQdHI8UG9zaXRpb25FcnJvckNhbGxiYWNrPiBwb3NpdGlvbkVycm9yQ2FsbGJhY2sg
PSBjcmVhdGVQb3NpdGlvbkVycm9yQ2FsbGJhY2soZXhlYywgYXJncy5hdCgxKSk7CisgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKwor
ICAgIFJlZlB0cjxQb3NpdGlvbk9wdGlvbnM+IHBvc2l0aW9uT3B0aW9ucyA9IGNyZWF0ZVBvc2l0
aW9uT3B0aW9ucyhleGVjLCBhcmdzLmF0KDIpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIEFTU0VSVChwb3NpdGlvbk9w
dGlvbnMpOworCiAgICAgbV9pbXBsLT5nZXRDdXJyZW50UG9zaXRpb24ocG9zaXRpb25DYWxsYmFj
ay5yZWxlYXNlKCksIHBvc2l0aW9uRXJyb3JDYWxsYmFjay5yZWxlYXNlKCksIHBvc2l0aW9uT3B0
aW9ucy5yZWxlYXNlKCkpOwotICAgIAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCiBK
U1ZhbHVlIEpTR2VvbG9jYXRpb246OndhdGNoUG9zaXRpb24oRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQogewogICAgIC8vIEFyZ3VtZW50czogUG9zaXRpb25DYWxsYmFjaywg
KG9wdGlvbmFsKVBvc2l0aW9uRXJyb3JDYWxsYmFjaywgKG9wdGlvbmFsKVBvc2l0aW9uT3B0aW9u
cwotICAgIFJlZlB0cjxQb3NpdGlvbkNhbGxiYWNrPiBwb3NpdGlvbkNhbGxiYWNrOwotICAgIEpT
T2JqZWN0KiBvYmplY3QgPSBhcmdzLmF0KDApLmdldE9iamVjdCgpOworCisgICAgUmVmUHRyPFBv
c2l0aW9uQ2FsbGJhY2s+IHBvc2l0aW9uQ2FsbGJhY2sgPSBjcmVhdGVQb3NpdGlvbkNhbGxiYWNr
KGV4ZWMsIGFyZ3MuYXQoMCkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgaWYgKCFvYmplY3QpIHsKLSAgICAgICAgc2V0
RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKKyAgICBBU1NFUlQocG9zaXRp
b25DYWxsYmFjayk7CisKKyAgICBSZWZQdHI8UG9zaXRpb25FcnJvckNhbGxiYWNrPiBwb3NpdGlv
bkVycm9yQ2FsbGJhY2sgPSBjcmVhdGVQb3NpdGlvbkVycm9yQ2FsbGJhY2soZXhlYywgYXJncy5h
dCgxKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKEZyYW1lKiBmcmFtZSA9IHRvSlNET01X
aW5kb3coZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+aW1wbCgpLT5mcmFtZSgpKQotICAg
ICAgICBwb3NpdGlvbkNhbGxiYWNrID0gSlNDdXN0b21Qb3NpdGlvbkNhbGxiYWNrOjpjcmVhdGUo
b2JqZWN0LCBmcmFtZSk7Ci0gICAgCi0gICAgUmVmUHRyPFBvc2l0aW9uRXJyb3JDYWxsYmFjaz4g
cG9zaXRpb25FcnJvckNhbGxiYWNrOwotICAgIGlmICghYXJncy5hdCgxKS5pc1VuZGVmaW5lZE9y
TnVsbCgpKSB7Ci0gICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhcmdzLmF0KDEpLmdldE9iamVj
dCgpOwotICAgICAgICBpZiAoIW9iamVjdCkgewotICAgICAgICAgICAgc2V0RE9NRXhjZXB0aW9u
KGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKLSAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gdG9K
U0RPTVdpbmRvdyhleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5pbXBsKCktPmZyYW1lKCkp
Ci0gICAgICAgICAgICBwb3NpdGlvbkVycm9yQ2FsbGJhY2sgPSBKU0N1c3RvbVBvc2l0aW9uRXJy
b3JDYWxsYmFjazo6Y3JlYXRlKG9iamVjdCwgZnJhbWUpOwotICAgIH0KLSAgICAKLSAgICBSZWZQ
dHI8UG9zaXRpb25PcHRpb25zPiBwb3NpdGlvbk9wdGlvbnM7Ci0gICAgaWYgKCFhcmdzLmF0KDIp
LmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKLSAgICAgICAgcG9zaXRpb25PcHRpb25zID0gY3JlYXRl
UG9zaXRpb25PcHRpb25zKGV4ZWMsIGFyZ3MuYXQoMikpOwotICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CisK
KyAgICBSZWZQdHI8UG9zaXRpb25PcHRpb25zPiBwb3NpdGlvbk9wdGlvbnMgPSBjcmVhdGVQb3Np
dGlvbk9wdGlvbnMoZXhlYywgYXJncy5hdCgyKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBBU1NFUlQocG9zaXRpb25P
cHRpb25zKTsKIAogICAgIGludCB3YXRjaElEID0gbV9pbXBsLT53YXRjaFBvc2l0aW9uKHBvc2l0
aW9uQ2FsbGJhY2sucmVsZWFzZSgpLCBwb3NpdGlvbkVycm9yQ2FsbGJhY2sucmVsZWFzZSgpLCBw
b3NpdGlvbk9wdGlvbnMucmVsZWFzZSgpKTsKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgd2F0
Y2hJRCk7CkluZGV4OiBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGFnZS9HZW9sb2NhdGlvbi5jcHAJKHJldmlzaW9uIDQ3MDA0KQorKysgV2ViQ29y
ZS9wYWdlL0dlb2xvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAog
I2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBvc2l0aW9u
RXJyb3IuaCIKKyNpbmNsdWRlICJQb3NpdGlvbk9wdGlvbnMuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC00MSwxMSArNDIsMTUgQEAgR2VvbG9jYXRpb246Okdlb05vdGlmaWVyOjpHZW9O
b3RpZmllcihQYQogICAgICwgbV9vcHRpb25zKG9wdGlvbnMpCiAgICAgLCBtX3RpbWVyKHRoaXMs
ICZHZW9sb2NhdGlvbjo6R2VvTm90aWZpZXI6OnRpbWVyRmlyZWQpCiB7CisgICAgQVNTRVJUKG1f
c3VjY2Vzc0NhbGxiYWNrKTsKKyAgICAvLyBJZiBubyBvcHRpb25zIHdlcmUgc3VwcGxpZWQgZnJv
bSBKUywgd2Ugc2hvdWxkIGhhdmUgY3JlYXRlZCBhIGRlZmF1bHQgc2V0CisgICAgLy8gb2Ygb3B0
aW9ucyBpbiBKU0dlb2xvY2F0aW9uQ3VzdG9tLmNwcC4KKyAgICBBU1NFUlQobV9vcHRpb25zKTsK
IH0KIAogdm9pZCBHZW9sb2NhdGlvbjo6R2VvTm90aWZpZXI6OnN0YXJ0VGltZXIoKQogewotICAg
IGlmIChtX2Vycm9yQ2FsbGJhY2sgJiYgbV9vcHRpb25zKQorICAgIGlmIChtX2Vycm9yQ2FsbGJh
Y2sgJiYgbV9vcHRpb25zLT5oYXNUaW1lb3V0KCkpCiAgICAgICAgIG1fdGltZXIuc3RhcnRPbmVT
aG90KG1fb3B0aW9ucy0+dGltZW91dCgpIC8gMTAwMC4wKTsKIH0KIApJbmRleDogV2ViQ29yZS9w
YWdlL1Bvc2l0aW9uT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9Qb3NpdGlv
bk9wdGlvbnMuaAkocmV2aXNpb24gNDcwMDQpCisrKyBXZWJDb3JlL3BhZ2UvUG9zaXRpb25PcHRp
b25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDI2ICszMywzNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgCiBjbGFzcyBQb3NpdGlvbk9wdGlvbnMgOiBwdWJsaWMgUmVmQ291bnRlZDxQb3Np
dGlvbk9wdGlvbnM+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxQb3NpdGlvbk9w
dGlvbnM+IGNyZWF0ZShib29sIGhpZ2hBY2N1cmFjeSwgdW5zaWduZWQgdGltZW91dCwgdW5zaWdu
ZWQgbWF4aW11bUFnZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFBvc2l0aW9uT3B0aW9ucyhoaWdo
QWNjdXJhY3ksIHRpbWVvdXQsIG1heGltdW1BZ2UpKTsgfQorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFBvc2l0aW9uT3B0aW9ucz4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFBvc2l0aW9u
T3B0aW9ucygpKTsgfQogCiAgICAgYm9vbCBlbmFibGVIaWdoQWNjdXJhY3koKSBjb25zdCB7IHJl
dHVybiBtX2hpZ2hBY2N1cmFjeTsgfQogICAgIHZvaWQgc2V0RW5hYmxlSGlnaEFjY3VyYWN5KGJv
b2wgZW5hYmxlKSB7IG1faGlnaEFjY3VyYWN5ID0gZW5hYmxlOyB9Ci0gICAgdW5zaWduZWQgdGlt
ZW91dCgpIGNvbnN0IHsgcmV0dXJuIG1fdGltZW91dDsgfQotICAgIHZvaWQgc2V0VGltZW91dCh1
bnNpZ25lZCB0KSB7IG1fdGltZW91dCA9IHQ7IH0KLSAgICB1bnNpZ25lZCBtYXhpbXVtQWdlKCkg
Y29uc3QgeyByZXR1cm4gbV9tYXhpbXVtQWdlOyB9Ci0gICAgdm9pZCBzZXRNYXhpbXVtQWdlKHVu
c2lnbmVkIGEpIHsgbV9tYXhpbXVtQWdlID0gYTsgfQorICAgIGJvb2wgaGFzVGltZW91dCgpIHsg
cmV0dXJuIG1faGFzVGltZW91dDsgfQorICAgIGludCB0aW1lb3V0KCkgY29uc3QgeyByZXR1cm4g
bV90aW1lb3V0OyB9CisgICAgdm9pZCBzZXRUaW1lb3V0KGludCB0KQorICAgIHsKKyAgICAgICAg
QVNTRVJUKHQgPj0gMCk7CisgICAgICAgIG1faGFzVGltZW91dCA9IHRydWU7CisgICAgICAgIG1f
dGltZW91dCA9IHQ7CisgICAgfQorICAgIGludCBtYXhpbXVtQWdlKCkgY29uc3QgeyByZXR1cm4g
bV9tYXhpbXVtQWdlOyB9CisgICAgdm9pZCBzZXRNYXhpbXVtQWdlKGludCBhKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGEgPj0gMCk7CisgICAgICAgIG1fbWF4aW11bUFnZSA9IGE7CisgICAgfQog
ICAgIAogcHJpdmF0ZToKLSAgICBQb3NpdGlvbk9wdGlvbnMoYm9vbCBoaWdoQWNjdXJhY3ksIHVu
c2lnbmVkIHRpbWVvdXQsIHVuc2lnbmVkIG1heGltdW1BZ2UpCi0gICAgICAgIDogbV9oaWdoQWNj
dXJhY3koaGlnaEFjY3VyYWN5KQotICAgICAgICAsIG1fdGltZW91dCh0aW1lb3V0KQotICAgICAg
ICAsIG1fbWF4aW11bUFnZShtYXhpbXVtQWdlKQorICAgIFBvc2l0aW9uT3B0aW9ucygpCisgICAg
ICAgIDogbV9oaWdoQWNjdXJhY3koZmFsc2UpCisgICAgICAgICwgbV9oYXNUaW1lb3V0KGZhbHNl
KQorICAgICAgICAsIG1fbWF4aW11bUFnZSgwKQogICAgIHsKICAgICB9CiAgICAgCiAgICAgYm9v
bCBtX2hpZ2hBY2N1cmFjeTsKLSAgICB1bnNpZ25lZCBtX3RpbWVvdXQ7Ci0gICAgdW5zaWduZWQg
bV9tYXhpbXVtQWdlOworICAgIGJvb2wgbV9oYXNUaW1lb3V0OworICAgIGludCBtX3RpbWVvdXQ7
CisgICAgaW50IG1fbWF4aW11bUFnZTsKIH07CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCShyZXZpc2lvbiA0NzAwNCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDA5LTA4LTEwICBTdGV2ZSBCbG9jayAgPHN0
ZXZlYmxvY2tAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBCdWcgMjcyNTQgOiBHZW9sb2NhdGlvbiBQb3NpdGlvbk9wdGlvbnMgZG9l
cyBub3QgdXNlIGNvcnJlY3QgZGVmYXVsdCB2YWx1ZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzI1NAorCisgICAgICAgIEFkZHMgYSBsYXlvdXQg
dGVzdCB0byBjaGVjayB0aGUgYWNjZXB0YWJsZSB0eXBlcyBmb3IgYXJndW1lbnRzIHRvIEdlb2xv
Y2F0aW9uIG1ldGhvZHMuCisKKyAgICAgICAgKiBmYXN0L2RvbS9HZW9sb2NhdGlvbi9yZXNvdXJj
ZXMvYXJndW1lbnQtdHlwZXMuanM6IEFkZGVkLiBUZXN0cyB0aGUgdHlwZXMgb2YgdGhlIGFyZ3Vt
ZW50cyB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gR2VvbG9jYXRpb24gbWV0aG9kcy4KKyAgICAgICAg
KiBmYXN0L2RvbS9HZW9sb2NhdGlvbi9hcmd1bWVudC10eXBlcy5odG1sOiBBZGRlZC4gSFRNTCB3
cmFwcGVyIGZvciBhYm92ZSBKUyB0ZXN0LgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9mYXN0L2Rv
bS9HZW9sb2NhdGlvbi9hcmd1bWVudC10eXBlcy1leHBlY3RlZC50eHQ6IEFkZGVkLiBFeHBlY3Rl
ZCBvdXRwdXQgZm9yIGFib3ZlIHRlc3QuCisKIDIwMDktMDgtMDcgIERhcmluIEFkbGVyICA8ZGFy
aW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9hcmd1bWVudC10eXBlcy5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL2FyZ3VtZW50LXR5
cGVzLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlv
bi9hcmd1bWVudC10eXBlcy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzIEBACis8IURP
Q1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFk
PgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVz
dC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9w
PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2FyZ3Vt
ZW50LXR5cGVzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMv
anMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL3Jlc291cmNlcy9hcmd1bWVudC10eXBlcy5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9yZXNvdXJjZXMv
YXJndW1lbnQtdHlwZXMuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9H
ZW9sb2NhdGlvbi9yZXNvdXJjZXMvYXJndW1lbnQtdHlwZXMuanMJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNjAgQEAKK2Rlc2NyaXB0aW9uKCJUZXN0cyB0aGUgYWNjZXB0YWJsZSB0eXBlcyBmb3Ig
YXJndW1lbnRzIHRvIEdlb2xvY2F0aW9uIG1ldGhvZHMuIik7CisKK2Z1bmN0aW9uIHNob3VsZE5v
dFRocm93KGV4cHJlc3Npb24pCit7CisgIHRyeSB7CisgICAgZXZhbChleHByZXNzaW9uKTsKKyAg
ICB0ZXN0UGFzc2VkKGV4cHJlc3Npb24gKyAiIGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLiIpOwor
ICB9IGNhdGNoKGUpIHsKKyAgICB0ZXN0RmFpbGVkKGV4cHJlc3Npb24gKyAiIHNob3VsZCBub3Qg
dGhyb3cgZXhjZXB0aW9uLiBUaHJldyBleGNlcHRpb24gIiArIGUpOworICB9Cit9CisKK2Z1bmN0
aW9uIHRlc3QoZXhwcmVzc2lvbiwgZXhwcmVzc2lvblNob3VsZFRocm93KSB7CisgICAgaWYgKGV4
cHJlc3Npb25TaG91bGRUaHJvdykgeworICAgICAgICBzaG91bGRUaHJvdyhleHByZXNzaW9uLCAn
KGZ1bmN0aW9uKCkgeyByZXR1cm4gIkVycm9yOiBUWVBFX01JU01BVENIX0VSUjogRE9NIEV4Y2Vw
dGlvbiAxNyI7IH0pKCk7Jyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc2hvdWxkTm90VGhyb3co
ZXhwcmVzc2lvbik7CisgICAgfQorfQorCit2YXIgZW1wdHlGdW5jdGlvbiA9IGZ1bmN0aW9uKCkg
e307CisKK3Rlc3QoJ25hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oKScs
IHRydWUpOwordGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihl
bXB0eUZ1bmN0aW9uKScsIGZhbHNlKTsKK3Rlc3QoJ25hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRD
dXJyZW50UG9zaXRpb24oZmFsc2UpJywgdHJ1ZSk7Cit0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRp
b24uZ2V0Q3VycmVudFBvc2l0aW9uKDQyKScsIHRydWUpOwordGVzdCgnbmF2aWdhdG9yLmdlb2xv
Y2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbigic3RyaW5nIiknLCB0cnVlKTsKKwordGVzdCgnbmF2
aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCBudWxs
KScsIGZhbHNlKTsKK3Rlc3QoJ25hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRp
b24oZW1wdHlGdW5jdGlvbiwgZW1wdHlGdW5jdGlvbiknLCBmYWxzZSk7Cit0ZXN0KCduYXZpZ2F0
b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIHRydWUpJywg
dHJ1ZSk7Cit0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVt
cHR5RnVuY3Rpb24sIDQyKScsIHRydWUpOwordGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdl
dEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCAic3RyaW5nIiknLCB0cnVlKTsKKwordGVz
dCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9u
LCBudWxsLCBudWxsKScsIGZhbHNlKTsKK3Rlc3QoJ25hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRD
dXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgbnVsbCwge30pJywgZmFsc2UpOwordGVzdCgn
bmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCBu
dWxsLCB0cnVlKScsIHRydWUpOwordGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJl
bnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCBudWxsLCA0MiknLCB0cnVlKTsKK3Rlc3QoJ25hdmln
YXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgbnVsbCwg
InN0cmluZyIpJywgdHJ1ZSk7CisKK3Rlc3QoJ25hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJy
ZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgbnVsbCwge2R1bW15UHJvcGVydHk6NDJ9KScsIGZh
bHNlKTsKKwordGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihl
bXB0eUZ1bmN0aW9uLCBudWxsLCB7bWF4aW11bUFnZTo0Mn0pJywgZmFsc2UpOwordGVzdCgnbmF2
aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCBudWxs
LCB7bWF4aW11bUFnZTo0Mi4xfSknLCBmYWxzZSk7Cit0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRp
b24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIG51bGwsIHttYXhpbXVtQWdlOi00
Mn0pJywgZmFsc2UpOwordGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3Np
dGlvbihlbXB0eUZ1bmN0aW9uLCBudWxsLCB7bWF4aW11bUFnZTp0cnVlfSknLCB0cnVlKTsKK3Rl
c3QoJ25hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlv
biwgbnVsbCwge21heGltdW1BZ2U6InN0cmluZyJ9KScsIHRydWUpOworCit0ZXN0KCduYXZpZ2F0
b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIG51bGwsIHtl
bmFibGVIaWdoQWNjdXJhY3k6dHJ1ZX0pJywgZmFsc2UpOwordGVzdCgnbmF2aWdhdG9yLmdlb2xv
Y2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCBudWxsLCB7ZW5hYmxlSGln
aEFjY3VyYWN5OjQyfSknLCBmYWxzZSk7Cit0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0
Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIG51bGwsIHtlbmFibGVIaWdoQWNjdXJhY3k6
InN0cmluZyJ9KScsIHRydWUpOworCit0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3Vy
cmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIG51bGwsIHt0aW1lb3V0OjQyfSknLCBmYWxzZSk7
Cit0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVu
Y3Rpb24sIG51bGwsIHt0aW1lb3V0OjQyLjF9KScsIGZhbHNlKTsKK3Rlc3QoJ25hdmlnYXRvci5n
ZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgbnVsbCwge3RpbWVv
dXQ6LTQyfSknLCBmYWxzZSk7Cit0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVu
dFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIG51bGwsIHt0aW1lb3V0OnRydWV9KScsIHRydWUpOwor
dGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0
aW9uLCBudWxsLCB7dGltZW91dDoic3RyaW5nIn0pJywgdHJ1ZSk7CisKK3ZhciBzdWNjZXNzZnVs
bHlQYXJzZWQgPSB0cnVlOworCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvZmFzdC9k
b20vR2VvbG9jYXRpb24vYXJndW1lbnQtdHlwZXMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9mYXN0L2RvbS9HZW9sb2NhdGlvbi9hcmd1bWVudC10
eXBlcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9n
dGsvZmFzdC9kb20vR2VvbG9jYXRpb24vYXJndW1lbnQtdHlwZXMtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDM4IEBACitUZXN0cyB0aGUgYWNjZXB0YWJsZSB0eXBlcyBmb3Ig
YXJndW1lbnRzIHRvIEdlb2xvY2F0aW9uIG1ldGhvZHMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxs
IHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBM
RVRFIi4KKworCitQQVNTIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24o
KSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFRZUEVfTUlTTUFUQ0hfRVJSOiBET00gRXhjZXB0aW9u
IDE3LgorUEFTUyBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5
RnVuY3Rpb24pIGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBuYXZpZ2F0b3IuZ2VvbG9j
YXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGZhbHNlKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFRZ
UEVfTUlTTUFUQ0hfRVJSOiBET00gRXhjZXB0aW9uIDE3LgorUEFTUyBuYXZpZ2F0b3IuZ2VvbG9j
YXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKDQyKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFRZUEVf
TUlTTUFUQ0hfRVJSOiBET00gRXhjZXB0aW9uIDE3LgorUEFTUyBuYXZpZ2F0b3IuZ2VvbG9jYXRp
b24uZ2V0Q3VycmVudFBvc2l0aW9uKCJzdHJpbmciKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFRZ
UEVfTUlTTUFUQ0hfRVJSOiBET00gRXhjZXB0aW9uIDE3LgorUEFTUyBuYXZpZ2F0b3IuZ2VvbG9j
YXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIG51bGwpIGRpZCBub3QgdGhy
b3cgZXhjZXB0aW9uLgorUEFTUyBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0
aW9uKGVtcHR5RnVuY3Rpb24sIGVtcHR5RnVuY3Rpb24pIGRpZCBub3QgdGhyb3cgZXhjZXB0aW9u
LgorUEFTUyBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVu
Y3Rpb24sIHRydWUpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogVFlQRV9NSVNNQVRDSF9FUlI6IERP
TSBFeGNlcHRpb24gMTcuCitQQVNTIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9z
aXRpb24oZW1wdHlGdW5jdGlvbiwgNDIpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogVFlQRV9NSVNN
QVRDSF9FUlI6IERPTSBFeGNlcHRpb24gMTcuCitQQVNTIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5n
ZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgInN0cmluZyIpIHRocmV3IGV4Y2VwdGlv
biBFcnJvcjogVFlQRV9NSVNNQVRDSF9FUlI6IERPTSBFeGNlcHRpb24gMTcuCitQQVNTIG5hdmln
YXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgbnVsbCwg
bnVsbCkgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIG5hdmlnYXRvci5nZW9sb2NhdGlv
bi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgbnVsbCwge30pIGRpZCBub3QgdGhy
b3cgZXhjZXB0aW9uLgorUEFTUyBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0
aW9uKGVtcHR5RnVuY3Rpb24sIG51bGwsIHRydWUpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogVFlQ
RV9NSVNNQVRDSF9FUlI6IERPTSBFeGNlcHRpb24gMTcuCitQQVNTIG5hdmlnYXRvci5nZW9sb2Nh
dGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgbnVsbCwgNDIpIHRocmV3IGV4
Y2VwdGlvbiBFcnJvcjogVFlQRV9NSVNNQVRDSF9FUlI6IERPTSBFeGNlcHRpb24gMTcuCitQQVNT
IG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwg
bnVsbCwgInN0cmluZyIpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogVFlQRV9NSVNNQVRDSF9FUlI6
IERPTSBFeGNlcHRpb24gMTcuCitQQVNTIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50
UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgbnVsbCwge2R1bW15UHJvcGVydHk6NDJ9KSBkaWQgbm90
IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQ
b3NpdGlvbihlbXB0eUZ1bmN0aW9uLCBudWxsLCB7bWF4aW11bUFnZTo0Mn0pIGRpZCBub3QgdGhy
b3cgZXhjZXB0aW9uLgorUEFTUyBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0
aW9uKGVtcHR5RnVuY3Rpb24sIG51bGwsIHttYXhpbXVtQWdlOjQyLjF9KSBkaWQgbm90IHRocm93
IGV4Y2VwdGlvbi4KK1BBU1MgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlv
bihlbXB0eUZ1bmN0aW9uLCBudWxsLCB7bWF4aW11bUFnZTotNDJ9KSBkaWQgbm90IHRocm93IGV4
Y2VwdGlvbi4KK1BBU1MgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihl
bXB0eUZ1bmN0aW9uLCBudWxsLCB7bWF4aW11bUFnZTp0cnVlfSkgdGhyZXcgZXhjZXB0aW9uIEVy
cm9yOiBUWVBFX01JU01BVENIX0VSUjogRE9NIEV4Y2VwdGlvbiAxNy4KK1BBU1MgbmF2aWdhdG9y
Lmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCBudWxsLCB7bWF4
aW11bUFnZToic3RyaW5nIn0pIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogVFlQRV9NSVNNQVRDSF9F
UlI6IERPTSBFeGNlcHRpb24gMTcuCitQQVNTIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJy
ZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgbnVsbCwge2VuYWJsZUhpZ2hBY2N1cmFjeTp0cnVl
fSkgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5n
ZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgbnVsbCwge2VuYWJsZUhpZ2hBY2N1cmFj
eTo0Mn0pIGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBuYXZpZ2F0b3IuZ2VvbG9jYXRp
b24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIG51bGwsIHtlbmFibGVIaWdoQWNj
dXJhY3k6InN0cmluZyJ9KSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFRZUEVfTUlTTUFUQ0hfRVJS
OiBET00gRXhjZXB0aW9uIDE3LgorUEFTUyBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVu
dFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIG51bGwsIHt0aW1lb3V0OjQyfSkgZGlkIG5vdCB0aHJv
dyBleGNlcHRpb24uCitQQVNTIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRp
b24oZW1wdHlGdW5jdGlvbiwgbnVsbCwge3RpbWVvdXQ6NDIuMX0pIGRpZCBub3QgdGhyb3cgZXhj
ZXB0aW9uLgorUEFTUyBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVt
cHR5RnVuY3Rpb24sIG51bGwsIHt0aW1lb3V0Oi00Mn0pIGRpZCBub3QgdGhyb3cgZXhjZXB0aW9u
LgorUEFTUyBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVu
Y3Rpb24sIG51bGwsIHt0aW1lb3V0OnRydWV9KSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFRZUEVf
TUlTTUFUQ0hfRVJSOiBET00gRXhjZXB0aW9uIDE3LgorUEFTUyBuYXZpZ2F0b3IuZ2VvbG9jYXRp
b24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIG51bGwsIHt0aW1lb3V0OiJzdHJp
bmcifSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBUWVBFX01JU01BVENIX0VSUjogRE9NIEV4Y2Vw
dGlvbiAxNy4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVU
RQorCg==
</data>
<flag name="review"
          id="18682"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34551</attachid>
            <date>2009-08-11 05:34:07 -0700</date>
            <delta_ts>2009-08-12 07:19:13 -0700</delta_ts>
            <desc>Patch 3 for bug 27254</desc>
            <filename>setPositionOptionsDefaults3.txt</filename>
            <type>text/plain</type>
            <size>26426</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NzAwNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMDktMDgtMTAgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEJ1ZyAyNzI1NCA6IEdlb2xvY2F0aW9uIFBvc2l0aW9uT3B0aW9ucyBkb2VzIG5vdCB1c2UgY29y
cmVjdCBkZWZhdWx0IHZhbHVlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTI3MjU0CisKKyAgICAgICAgU2V0cyB0aGUgY29ycmVjdCBkZWZhdWx0IHZh
bHVlcyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlIFBvc2l0aW9uT3B0aW9ucyBvYmplY3QKKyAg
ICAgICAgcGFzc2VkIHRvIEdlb2xvY2F0aW9uIG1ldGhvZHMuIFNlZSBodHRwOi8vd3d3LnczLm9y
Zy9UUi9nZW9sb2NhdGlvbi1BUEkvLgorCisgICAgICAgIEFsc28gYWRkcyBjaGVja2luZyB0byB0
aHJvdyBhbiBleGNlcHRpb24gaWYgYXJndW1lbnRzIG9mIHRoZSBpbmNvcnJlY3QgdHlwZSBhcmUK
KyAgICAgICAgcGFzc2VkIHRvIEdlb2xvY2F0aW9uIG1ldGhvZHMuIEFkZHMgYSBsYXlvdXQgdGVz
dCB0byB0ZXN0IHRoaXMuIFRoaXMgdGVzdCBzaG91bGQKKyAgICAgICAgcGFzcyBvbiBhbGwgcGxh
dGZvcm1zIHdoZXJlIEdlb2xvY2F0aW9uIGlzIGltcGxlbWVudGVkLgorCisgICAgICAgIFRlc3Q6
IGZhc3QvZG9tL0dlb2xvY2F0aW9uL2FyZ3VtZW50LXR5cGVzLmh0bWwKKworICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTR2VvbG9jYXRpb25DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3Jl
YXRlUG9zaXRpb25DYWxsYmFjayk6IEFkZGVkLiBDcmVhdGVzIHRoZSBjYWxsYmFjay4KKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZVBvc2l0aW9uRXJyb3JDYWxsYmFjayk6IEFkZGVkLiBDcmVhdGVz
IHRoZSBjYWxiYWNrLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlUG9zaXRpb25PcHRpb25zKTog
QWRkZWQuIENyZWF0ZXMgdGhlIFBvc2l0aW9uT3B0aW9ucyBvYmplY3QsIHNldHRpbmcgZGVmYXVs
dHMgd2hlcmUgcmVxdWlyZWQuCisgICAgICAgIChXZWJDb3JlOjpKU0dlb2xvY2F0aW9uOjpnZXRD
dXJyZW50UG9zaXRpb24pOiBNb2RpZmllZC4gTm93IHVzZXMgYWJvdmUgaGVscGVyIGZ1bmN0aW9u
cy4KKyAgICAgICAgKFdlYkNvcmU6OkpTR2VvbG9jYXRpb246OndhdGNoUG9zaXRpb24pOiBNb2Rp
ZmllZC4gTm93IHVzZXMgYWJvdmUgaGVscGVyIGZ1bmN0aW9ucy4KKyAgICAgICAgKiBwYWdlL0dl
b2xvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpHZW9Ob3RpZmll
cjo6R2VvTm90aWZpZXIpOiBNb2RpZmllZC4gQXNzZXJ0cyB0aGF0IFBvc2l0aW9uT3B0aW9ucyBv
YmplY3QgaXMgcHJlc2VudC4KKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpHZW9Ob3Rp
Zmllcjo6c3RhcnRUaW1lcik6IE1vZGlmaWVkLiBPbmx5IHN0YXJ0cyB0aW1lciBpZiB0aW1lb3V0
IGhhcyBiZWVuIHNldC4KKyAgICAgICAgKiBwYWdlL1Bvc2l0aW9uT3B0aW9ucy5oOgorICAgICAg
ICAoV2ViQ29yZTo6UG9zaXRpb25PcHRpb25zOjpjcmVhdGUpOiBNb2RpZmllZC4gQ3JlYXRlcyBv
YmplY3Qgd2l0aCBkZWZhdWx0IHZhbHVlcy4KKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uT3B0
aW9uczo6dGltZW91dCk6IE1vZGlmaWVkLiBVc2VzIGNvcnJlY3QgdHlwZS4KKyAgICAgICAgKFdl
YkNvcmU6OlBvc2l0aW9uT3B0aW9uczo6aGFzVGltZW91dCk6IEFkZGVkLiBEZXRlcm1pbmVzIHdo
ZXRoZXIgYSB0aW1lb3V0IGhhcyBiZWVuIHNldC4KKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9u
T3B0aW9uczo6c2V0VGltZW91dCk6IE1vZGlmaWVkLiBVc2VzIGNvcnJlY3QgdHlwZS4KKyAgICAg
ICAgKFdlYkNvcmU6OlBvc2l0aW9uT3B0aW9uczo6bWF4aW11bUFnZSk6IE1vZGlmaWVkLiBVc2Vz
IGNvcnJlY3QgdHlwZS4KKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uT3B0aW9uczo6c2V0TWF4
aW11bUFnZSk6IE1vZGlmaWVkLiBVc2VzIGNvcnJlY3QgdHlwZS4KKyAgICAgICAgKFdlYkNvcmU6
OlBvc2l0aW9uT3B0aW9uczo6UG9zaXRpb25PcHRpb25zKTogTW9kaWZpZWQuIENyZWF0ZXMgb2Jq
ZWN0IHdpdGggZGVmYXVsdCB2YWx1ZXMuCisKIDIwMDktMDgtMTAgIEtlbm5ldGggUm9oZGUgQ2hy
aXN0aWFuc2VuICA8a2VubmV0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNp
bW9uIEhhdXNtYW5uLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0dlb2xvY2F0aW9uQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTR2VvbG9jYXRpb25D
dXN0b20uY3BwCShyZXZpc2lvbiA0NzAwNCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNHZW9s
b2NhdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDEwOSArMzksMTE1IEBAIHVz
aW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIFBhc3NS
ZWZQdHI8UG9zaXRpb25PcHRpb25zPiBjcmVhdGVQb3NpdGlvbk9wdGlvbnMoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIHZhbHVlKQorc3RhdGljIFBhc3NSZWZQdHI8UG9zaXRpb25DYWxsYmFjaz4g
Y3JlYXRlUG9zaXRpb25DYWxsYmFjayhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7
Ci0gICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKQorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgY2hl
Y2sgdGhhdCB0aGUgYXJndW1lbnQgaXMgYSBGdW5jdGlvbiBvYmplY3QsIGFzCisgICAgLy8gdGhl
IHNwZWMgc3BlY2lmaWVzICdGdW5jdGlvbk9ubHknLgorICAgIEpTT2JqZWN0KiBvYmplY3QgPSB2
YWx1ZS5nZXRPYmplY3QoKTsKKyAgICBpZiAoIW9iamVjdCkgeworICAgICAgICBzZXRET01FeGNl
cHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOwogICAgICAgICByZXR1cm4gMDsKKyAgICB9
CiAKLSAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QodmFsdWUpOworICAgIEZyYW1lKiBm
cmFtZSA9IHRvSlNET01XaW5kb3coZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+aW1wbCgp
LT5mcmFtZSgpOworICAgIHJldHVybiBKU0N1c3RvbVBvc2l0aW9uQ2FsbGJhY2s6OmNyZWF0ZShv
YmplY3QsIGZyYW1lKTsKK30KIAotICAgIEpTVmFsdWUgZW5hYmxlSGlnaEFjY3VyYWN5VmFsdWUg
PSBvYmplY3QtPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJlbmFibGVIaWdoQWNjdXJhY3ki
KSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorc3RhdGljIFBhc3NSZWZQdHI8UG9z
aXRpb25FcnJvckNhbGxiYWNrPiBjcmVhdGVQb3NpdGlvbkVycm9yQ2FsbGJhY2soRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIC8vIEFyZ3VtZW50IGlzIG9wdGlvbmFsLCBh
bmQgbnVsbCBpcyBhbGxvd2VkLgorICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQog
ICAgICAgICByZXR1cm4gMDsKLSAgICBib29sIGVuYWJsZUhpZ2hBY2N1cmFjeSA9IGVuYWJsZUhp
Z2hBY2N1cmFjeVZhbHVlLnRvQm9vbGVhbihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGNoZWNrIHRoYXQgdGhlIGFyZ3VtZW50
IGlzIGEgRnVuY3Rpb24gb2JqZWN0LCBhcworICAgIC8vIHRoZSBzcGVjIHNwZWNpZmllcyAnRnVu
Y3Rpb25Pbmx5Jy4KKyAgICBKU09iamVjdCogb2JqZWN0ID0gdmFsdWUuZ2V0T2JqZWN0KCk7Cisg
ICAgaWYgKCFvYmplY3QpIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlT
TUFUQ0hfRVJSKTsKICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgRnJhbWUqIGZyYW1l
ID0gdG9KU0RPTVdpbmRvdyhleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5pbXBsKCktPmZy
YW1lKCk7CisgICAgcmV0dXJuIEpTQ3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNrOjpjcmVhdGUo
b2JqZWN0LCBmcmFtZSk7Cit9CisKK3N0YXRpYyBQYXNzUmVmUHRyPFBvc2l0aW9uT3B0aW9ucz4g
Y3JlYXRlUG9zaXRpb25PcHRpb25zKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3sK
KyAgICAvLyBDcmVhdGUgZGVmYXVsdCBvcHRpb25zLgorICAgIFJlZlB0cjxQb3NpdGlvbk9wdGlv
bnM+IG9wdGlvbnMgPSBQb3NpdGlvbk9wdGlvbnM6OmNyZWF0ZSgpOworCisgICAgLy8gQXJndW1l
bnQgaXMgb3B0aW9uYWwsIGFuZCBudWxsIGlzIGFsbG93ZWQuCisgICAgaWYgKHZhbHVlLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpIHsKKyAgICAgICAgLy8gVXNlIGRlZmF1bHQgb3B0aW9ucy4KKyAgICAg
ICAgcmV0dXJuIG9wdGlvbnMucmVsZWFzZSgpOworICAgIH0KKworICAgIC8vIFRoaXMgd2lsbCBh
bHdheXMgeWllbGQgYW4gb2JqZWN0LgorICAgIEpTT2JqZWN0KiBvYmplY3QgPSB2YWx1ZS50b09i
amVjdChleGVjKTsKKworICAgIEpTVmFsdWUgZW5hYmxlSGlnaEFjY3VyYWN5VmFsdWUgPSBvYmpl
Y3QtPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJlbmFibGVIaWdoQWNjdXJhY3kiKSk7Cisg
ICAgLy8gSWYgdW5kZWZpbmVkLCBkb24ndCBvdmVycmlkZSBkZWZhdWx0LgorICAgIGlmICghZW5h
YmxlSGlnaEFjY3VyYWN5VmFsdWUuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgb3B0aW9ucy0+c2V0
RW5hYmxlSGlnaEFjY3VyYWN5KGVuYWJsZUhpZ2hBY2N1cmFjeVZhbHVlLnRvQm9vbGVhbihleGVj
KSk7CiAKICAgICBKU1ZhbHVlIHRpbWVvdXRWYWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMsIElkZW50
aWZpZXIoZXhlYywgInRpbWVvdXQiKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQot
ICAgICAgICByZXR1cm4gMDsKLSAgICB1bnNpZ25lZCB0aW1lb3V0ID0gdGltZW91dFZhbHVlLnRv
VUludDMyKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0
dXJuIDA7CisgICAgLy8gSWYgdW5kZWZpbmVkLCBkb24ndCBvdmVycmlkZSBkZWZhdWx0LgorICAg
IGlmICghdGltZW91dFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgLy8gV3JhcCB0byBp
bnQzMiBhbmQgZm9yY2Ugbm9uLW5lZ2F0aXZlIHRvIG1hdGNoIGJlaGF2aW9yIG9mIHdpbmRvdy5z
ZXRUaW1lb3V0LgorICAgICAgICBpbnQgdGltZW91dCA9IHRpbWVvdXRWYWx1ZS50b0ludDMyKGV4
ZWMpOworICAgICAgICBvcHRpb25zLT5zZXRUaW1lb3V0KHRpbWVvdXQgPj0gMCA/IHRpbWVvdXQg
OiAwKTsKKyAgICB9CiAKICAgICBKU1ZhbHVlIG1heGltdW1BZ2VWYWx1ZSA9IG9iamVjdC0+Z2V0
KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgIm1heGltdW1BZ2UiKSk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gMDsKLSAgICB1bnNpZ25lZCBtYXhpbXVtQWdl
ID0gbWF4aW11bUFnZVZhbHVlLnRvVUludDMyKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgLy8gSWYgdW5kZWZpbmVkLCBkb24ndCBv
dmVycmlkZSBkZWZhdWx0LgorICAgIGlmICghbWF4aW11bUFnZVZhbHVlLmlzVW5kZWZpbmVkKCkp
IHsKKyAgICAgICAgLy8gV3JhcCB0byBpbnQzMiBhbmQgZm9yY2Ugbm9uLW5lZ2F0aXZlIHRvIG1h
dGNoIGJlaGF2aW9yIG9mIHdpbmRvdy5zZXRUaW1lb3V0LgorICAgICAgICBpbnQgbWF4aW11bUFn
ZSA9IG1heGltdW1BZ2VWYWx1ZS50b0ludDMyKGV4ZWMpOworICAgICAgICBvcHRpb25zLT5zZXRU
aW1lb3V0KG1heGltdW1BZ2UgPj0gMCA/IG1heGltdW1BZ2UgOiAwKTsKKyAgICB9CiAKLSAgICBy
ZXR1cm4gUG9zaXRpb25PcHRpb25zOjpjcmVhdGUoZW5hYmxlSGlnaEFjY3VyYWN5LCB0aW1lb3V0
LCBtYXhpbXVtQWdlKTsKKyAgICByZXR1cm4gb3B0aW9ucy5yZWxlYXNlKCk7CiB9CiAKIEpTVmFs
dWUgSlNHZW9sb2NhdGlvbjo6Z2V0Q3VycmVudFBvc2l0aW9uKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgQXJnTGlzdCYgYXJncykKIHsKICAgICAvLyBBcmd1bWVudHM6IFBvc2l0aW9uQ2FsbGJhY2ss
IChvcHRpb25hbClQb3NpdGlvbkVycm9yQ2FsbGJhY2ssIChvcHRpb25hbClQb3NpdGlvbk9wdGlv
bnMKLSAgICBSZWZQdHI8UG9zaXRpb25DYWxsYmFjaz4gcG9zaXRpb25DYWxsYmFjazsKLSAgICBK
U09iamVjdCogb2JqZWN0ID0gYXJncy5hdCgwKS5nZXRPYmplY3QoKTsKKworICAgIFJlZlB0cjxQ
b3NpdGlvbkNhbGxiYWNrPiBwb3NpdGlvbkNhbGxiYWNrID0gY3JlYXRlUG9zaXRpb25DYWxsYmFj
ayhleGVjLCBhcmdzLmF0KDApKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIGlmICghb2JqZWN0KSB7Ci0gICAgICAgIHNl
dERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7Ci0gICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwotICAgIH0KKyAgICBBU1NFUlQocG9zaXRpb25DYWxsYmFjayk7CiAKLSAg
ICBpZiAoRnJhbWUqIGZyYW1lID0gdG9KU0RPTVdpbmRvdyhleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCkpLT5pbXBsKCktPmZyYW1lKCkpCi0gICAgICAgIHBvc2l0aW9uQ2FsbGJhY2sgPSBKU0N1
c3RvbVBvc2l0aW9uQ2FsbGJhY2s6OmNyZWF0ZShvYmplY3QsIGZyYW1lKTsKLSAgICAKLSAgICBS
ZWZQdHI8UG9zaXRpb25FcnJvckNhbGxiYWNrPiBwb3NpdGlvbkVycm9yQ2FsbGJhY2s7Ci0gICAg
aWYgKCFhcmdzLmF0KDEpLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKLSAgICAgICAgSlNPYmplY3Qq
IG9iamVjdCA9IGFyZ3MuYXQoMSkuZ2V0T2JqZWN0KCk7Ci0gICAgICAgIGlmICghb2JqZWN0KSB7
Ci0gICAgICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOwot
ICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIH0KKyAgICBSZWZQdHI8
UG9zaXRpb25FcnJvckNhbGxiYWNrPiBwb3NpdGlvbkVycm9yQ2FsbGJhY2sgPSBjcmVhdGVQb3Np
dGlvbkVycm9yQ2FsbGJhY2soZXhlYywgYXJncy5hdCgxKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgICAgICBpZiAo
RnJhbWUqIGZyYW1lID0gdG9KU0RPTVdpbmRvdyhleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkp
LT5pbXBsKCktPmZyYW1lKCkpCi0gICAgICAgICAgICBwb3NpdGlvbkVycm9yQ2FsbGJhY2sgPSBK
U0N1c3RvbVBvc2l0aW9uRXJyb3JDYWxsYmFjazo6Y3JlYXRlKG9iamVjdCwgZnJhbWUpOwotICAg
IH0KLSAgICAKLSAgICBSZWZQdHI8UG9zaXRpb25PcHRpb25zPiBwb3NpdGlvbk9wdGlvbnM7Ci0g
ICAgaWYgKCFhcmdzLmF0KDIpLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKLSAgICAgICAgcG9zaXRp
b25PcHRpb25zID0gY3JlYXRlUG9zaXRpb25PcHRpb25zKGV4ZWMsIGFyZ3MuYXQoMikpOwotICAg
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKLSAgICB9CisgICAgUmVmUHRyPFBvc2l0aW9uT3B0aW9ucz4gcG9zaXRpb25PcHRp
b25zID0gY3JlYXRlUG9zaXRpb25PcHRpb25zKGV4ZWMsIGFyZ3MuYXQoMikpOworICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAg
QVNTRVJUKHBvc2l0aW9uT3B0aW9ucyk7CiAKICAgICBtX2ltcGwtPmdldEN1cnJlbnRQb3NpdGlv
bihwb3NpdGlvbkNhbGxiYWNrLnJlbGVhc2UoKSwgcG9zaXRpb25FcnJvckNhbGxiYWNrLnJlbGVh
c2UoKSwgcG9zaXRpb25PcHRpb25zLnJlbGVhc2UoKSk7Ci0gICAgCiAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiB9CiAKIEpTVmFsdWUgSlNHZW9sb2NhdGlvbjo6d2F0Y2hQb3NpdGlvbihFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgLy8gQXJndW1lbnRzOiBQ
b3NpdGlvbkNhbGxiYWNrLCAob3B0aW9uYWwpUG9zaXRpb25FcnJvckNhbGxiYWNrLCAob3B0aW9u
YWwpUG9zaXRpb25PcHRpb25zCi0gICAgUmVmUHRyPFBvc2l0aW9uQ2FsbGJhY2s+IHBvc2l0aW9u
Q2FsbGJhY2s7Ci0gICAgSlNPYmplY3QqIG9iamVjdCA9IGFyZ3MuYXQoMCkuZ2V0T2JqZWN0KCk7
CisKKyAgICBSZWZQdHI8UG9zaXRpb25DYWxsYmFjaz4gcG9zaXRpb25DYWxsYmFjayA9IGNyZWF0
ZVBvc2l0aW9uQ2FsbGJhY2soZXhlYywgYXJncy5hdCgwKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBpZiAoIW9iamVj
dCkgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOwor
ICAgIEFTU0VSVChwb3NpdGlvbkNhbGxiYWNrKTsKKworICAgIFJlZlB0cjxQb3NpdGlvbkVycm9y
Q2FsbGJhY2s+IHBvc2l0aW9uRXJyb3JDYWxsYmFjayA9IGNyZWF0ZVBvc2l0aW9uRXJyb3JDYWxs
YmFjayhleGVjLCBhcmdzLmF0KDEpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KLSAgICAKLSAgICBpZiAoRnJhbWUq
IGZyYW1lID0gdG9KU0RPTVdpbmRvdyhleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5pbXBs
KCktPmZyYW1lKCkpCi0gICAgICAgIHBvc2l0aW9uQ2FsbGJhY2sgPSBKU0N1c3RvbVBvc2l0aW9u
Q2FsbGJhY2s6OmNyZWF0ZShvYmplY3QsIGZyYW1lKTsKLSAgICAKLSAgICBSZWZQdHI8UG9zaXRp
b25FcnJvckNhbGxiYWNrPiBwb3NpdGlvbkVycm9yQ2FsbGJhY2s7Ci0gICAgaWYgKCFhcmdzLmF0
KDEpLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKLSAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFy
Z3MuYXQoMSkuZ2V0T2JqZWN0KCk7Ci0gICAgICAgIGlmICghb2JqZWN0KSB7Ci0gICAgICAgICAg
ICBzZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOwotICAgICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChG
cmFtZSogZnJhbWUgPSB0b0pTRE9NV2luZG93KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSkt
PmltcGwoKS0+ZnJhbWUoKSkKLSAgICAgICAgICAgIHBvc2l0aW9uRXJyb3JDYWxsYmFjayA9IEpT
Q3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNrOjpjcmVhdGUob2JqZWN0LCBmcmFtZSk7Ci0gICAg
fQotICAgIAotICAgIFJlZlB0cjxQb3NpdGlvbk9wdGlvbnM+IHBvc2l0aW9uT3B0aW9uczsKLSAg
ICBpZiAoIWFyZ3MuYXQoMikuaXNVbmRlZmluZWRPck51bGwoKSkgewotICAgICAgICBwb3NpdGlv
bk9wdGlvbnMgPSBjcmVhdGVQb3NpdGlvbk9wdGlvbnMoZXhlYywgYXJncy5hdCgyKSk7Ci0gICAg
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwotICAgIH0KKworICAgIFJlZlB0cjxQb3NpdGlvbk9wdGlvbnM+IHBvc2l0aW9uT3B0
aW9ucyA9IGNyZWF0ZVBvc2l0aW9uT3B0aW9ucyhleGVjLCBhcmdzLmF0KDIpKTsKKyAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAg
IEFTU0VSVChwb3NpdGlvbk9wdGlvbnMpOwogCiAgICAgaW50IHdhdGNoSUQgPSBtX2ltcGwtPndh
dGNoUG9zaXRpb24ocG9zaXRpb25DYWxsYmFjay5yZWxlYXNlKCksIHBvc2l0aW9uRXJyb3JDYWxs
YmFjay5yZWxlYXNlKCksIHBvc2l0aW9uT3B0aW9ucy5yZWxlYXNlKCkpOwogICAgIHJldHVybiBq
c051bWJlcihleGVjLCB3YXRjaElEKTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9HZW9sb2NhdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uLmNwcAkocmV2aXNpb24g
NDcwMDQpCisrKyBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAj
aW5jbHVkZSAiUG9zaXRpb25FcnJvci5oIgorI2luY2x1ZGUgIlBvc2l0aW9uT3B0aW9ucy5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQxLDExICs0MiwxNSBAQCBHZW9sb2NhdGlvbjo6
R2VvTm90aWZpZXI6Okdlb05vdGlmaWVyKFBhCiAgICAgLCBtX29wdGlvbnMob3B0aW9ucykKICAg
ICAsIG1fdGltZXIodGhpcywgJkdlb2xvY2F0aW9uOjpHZW9Ob3RpZmllcjo6dGltZXJGaXJlZCkK
IHsKKyAgICBBU1NFUlQobV9zdWNjZXNzQ2FsbGJhY2spOworICAgIC8vIElmIG5vIG9wdGlvbnMg
d2VyZSBzdXBwbGllZCBmcm9tIEpTLCB3ZSBzaG91bGQgaGF2ZSBjcmVhdGVkIGEgZGVmYXVsdCBz
ZXQKKyAgICAvLyBvZiBvcHRpb25zIGluIEpTR2VvbG9jYXRpb25DdXN0b20uY3BwLgorICAgIEFT
U0VSVChtX29wdGlvbnMpOwogfQogCiB2b2lkIEdlb2xvY2F0aW9uOjpHZW9Ob3RpZmllcjo6c3Rh
cnRUaW1lcigpCiB7Ci0gICAgaWYgKG1fZXJyb3JDYWxsYmFjayAmJiBtX29wdGlvbnMpCisgICAg
aWYgKG1fZXJyb3JDYWxsYmFjayAmJiBtX29wdGlvbnMtPmhhc1RpbWVvdXQoKSkKICAgICAgICAg
bV90aW1lci5zdGFydE9uZVNob3QobV9vcHRpb25zLT50aW1lb3V0KCkgLyAxMDAwLjApOwogfQog
CkluZGV4OiBXZWJDb3JlL3BhZ2UvUG9zaXRpb25PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wYWdlL1Bvc2l0aW9uT3B0aW9ucy5oCShyZXZpc2lvbiA0NzAwNCkKKysrIFdlYkNvcmUv
cGFnZS9Qb3NpdGlvbk9wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMjYgKzMzLDM3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKIGNsYXNzIFBvc2l0aW9uT3B0aW9ucyA6IHB1Ymxp
YyBSZWZDb3VudGVkPFBvc2l0aW9uT3B0aW9ucz4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFBvc2l0aW9uT3B0aW9ucz4gY3JlYXRlKGJvb2wgaGlnaEFjY3VyYWN5LCB1bnNpZ25l
ZCB0aW1lb3V0LCB1bnNpZ25lZCBtYXhpbXVtQWdlKSB7IHJldHVybiBhZG9wdFJlZihuZXcgUG9z
aXRpb25PcHRpb25zKGhpZ2hBY2N1cmFjeSwgdGltZW91dCwgbWF4aW11bUFnZSkpOyB9CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8UG9zaXRpb25PcHRpb25zPiBjcmVhdGUoKSB7IHJldHVybiBhZG9w
dFJlZihuZXcgUG9zaXRpb25PcHRpb25zKCkpOyB9CiAKICAgICBib29sIGVuYWJsZUhpZ2hBY2N1
cmFjeSgpIGNvbnN0IHsgcmV0dXJuIG1faGlnaEFjY3VyYWN5OyB9CiAgICAgdm9pZCBzZXRFbmFi
bGVIaWdoQWNjdXJhY3koYm9vbCBlbmFibGUpIHsgbV9oaWdoQWNjdXJhY3kgPSBlbmFibGU7IH0K
LSAgICB1bnNpZ25lZCB0aW1lb3V0KCkgY29uc3QgeyByZXR1cm4gbV90aW1lb3V0OyB9Ci0gICAg
dm9pZCBzZXRUaW1lb3V0KHVuc2lnbmVkIHQpIHsgbV90aW1lb3V0ID0gdDsgfQotICAgIHVuc2ln
bmVkIG1heGltdW1BZ2UoKSBjb25zdCB7IHJldHVybiBtX21heGltdW1BZ2U7IH0KLSAgICB2b2lk
IHNldE1heGltdW1BZ2UodW5zaWduZWQgYSkgeyBtX21heGltdW1BZ2UgPSBhOyB9CisgICAgYm9v
bCBoYXNUaW1lb3V0KCkgeyByZXR1cm4gbV9oYXNUaW1lb3V0OyB9CisgICAgaW50IHRpbWVvdXQo
KSBjb25zdCB7IHJldHVybiBtX3RpbWVvdXQ7IH0KKyAgICB2b2lkIHNldFRpbWVvdXQoaW50IHQp
CisgICAgeworICAgICAgICBBU1NFUlQodCA+PSAwKTsKKyAgICAgICAgbV9oYXNUaW1lb3V0ID0g
dHJ1ZTsKKyAgICAgICAgbV90aW1lb3V0ID0gdDsKKyAgICB9CisgICAgaW50IG1heGltdW1BZ2Uo
KSBjb25zdCB7IHJldHVybiBtX21heGltdW1BZ2U7IH0KKyAgICB2b2lkIHNldE1heGltdW1BZ2Uo
aW50IGEpCisgICAgeworICAgICAgICBBU1NFUlQoYSA+PSAwKTsKKyAgICAgICAgbV9tYXhpbXVt
QWdlID0gYTsKKyAgICB9CiAgICAgCiBwcml2YXRlOgotICAgIFBvc2l0aW9uT3B0aW9ucyhib29s
IGhpZ2hBY2N1cmFjeSwgdW5zaWduZWQgdGltZW91dCwgdW5zaWduZWQgbWF4aW11bUFnZSkKLSAg
ICAgICAgOiBtX2hpZ2hBY2N1cmFjeShoaWdoQWNjdXJhY3kpCi0gICAgICAgICwgbV90aW1lb3V0
KHRpbWVvdXQpCi0gICAgICAgICwgbV9tYXhpbXVtQWdlKG1heGltdW1BZ2UpCisgICAgUG9zaXRp
b25PcHRpb25zKCkKKyAgICAgICAgOiBtX2hpZ2hBY2N1cmFjeShmYWxzZSkKKyAgICAgICAgLCBt
X2hhc1RpbWVvdXQoZmFsc2UpCisgICAgICAgICwgbV9tYXhpbXVtQWdlKDApCiAgICAgewogICAg
IH0KICAgICAKICAgICBib29sIG1faGlnaEFjY3VyYWN5OwotICAgIHVuc2lnbmVkIG1fdGltZW91
dDsKLSAgICB1bnNpZ25lZCBtX21heGltdW1BZ2U7CisgICAgYm9vbCBtX2hhc1RpbWVvdXQ7Cisg
ICAgaW50IG1fdGltZW91dDsKKyAgICBpbnQgbV9tYXhpbXVtQWdlOwogfTsKICAgICAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ3MDA0KQorKysgTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMDktMDgtMTAg
IFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyAyNzI1NCA6IEdlb2xvY2F0aW9uIFBv
c2l0aW9uT3B0aW9ucyBkb2VzIG5vdCB1c2UgY29ycmVjdCBkZWZhdWx0IHZhbHVlcy4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3MjU0CisKKyAgICAg
ICAgQWRkcyBhIGxheW91dCB0ZXN0IHRvIGNoZWNrIHRoZSBhY2NlcHRhYmxlIHR5cGVzIGZvciBh
cmd1bWVudHMgdG8gR2VvbG9jYXRpb24gbWV0aG9kcy4KKworICAgICAgICAqIGZhc3QvZG9tL0dl
b2xvY2F0aW9uL3Jlc291cmNlcy9hcmd1bWVudC10eXBlcy5qczogQWRkZWQuIFRlc3RzIHRoZSB0
eXBlcyBvZiB0aGUgYXJndW1lbnRzIHRoYXQgY2FuIGJlIHBhc3NlZCB0byBHZW9sb2NhdGlvbiBt
ZXRob2RzLgorICAgICAgICAqIGZhc3QvZG9tL0dlb2xvY2F0aW9uL2FyZ3VtZW50LXR5cGVzLmh0
bWw6IEFkZGVkLiBIVE1MIHdyYXBwZXIgZm9yIGFib3ZlIEpTIHRlc3QuCisgICAgICAgICogcGxh
dGZvcm0vZ3RrL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL2FyZ3VtZW50LXR5cGVzLWV4cGVjdGVkLnR4
dDogQWRkZWQuIEV4cGVjdGVkIG91dHB1dCBmb3IgYWJvdmUgdGVzdC4KKwogMjAwOS0wOC0wNyAg
RGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFu
IEJlcm5zdGVpbi4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL2FyZ3Vt
ZW50LXR5cGVzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9j
YXRpb24vYXJndW1lbnQtdHlwZXMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zh
c3QvZG9tL0dlb2xvY2F0aW9uL2FyZ3VtZW50LXR5cGVzLmh0bWwJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VO
Ij4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pz
L3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9
ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3Jj
PSJyZXNvdXJjZXMvYXJndW1lbnQtdHlwZXMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24vcmVzb3VyY2VzL2Fy
Z3VtZW50LXR5cGVzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xv
Y2F0aW9uL3Jlc291cmNlcy9hcmd1bWVudC10eXBlcy5qcwkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL3Jlc291cmNlcy9hcmd1bWVudC10eXBlcy5qcwko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MiBAQAorZGVzY3JpcHRpb24oIlRlc3RzIHRoZSBhY2Nl
cHRhYmxlIHR5cGVzIGZvciBhcmd1bWVudHMgdG8gR2VvbG9jYXRpb24gbWV0aG9kcy4iKTsKKwor
ZnVuY3Rpb24gc2hvdWxkTm90VGhyb3coZXhwcmVzc2lvbikKK3sKKyAgdHJ5IHsKKyAgICBldmFs
KGV4cHJlc3Npb24pOworICAgIHRlc3RQYXNzZWQoZXhwcmVzc2lvbiArICIgZGlkIG5vdCB0aHJv
dyBleGNlcHRpb24uIik7CisgIH0gY2F0Y2goZSkgeworICAgIHRlc3RGYWlsZWQoZXhwcmVzc2lv
biArICIgc2hvdWxkIG5vdCB0aHJvdyBleGNlcHRpb24uIFRocmV3IGV4Y2VwdGlvbiAiICsgZSk7
CisgIH0KK30KKworZnVuY3Rpb24gdGVzdChleHByZXNzaW9uLCBleHByZXNzaW9uU2hvdWxkVGhy
b3cpIHsKKyAgICBpZiAoZXhwcmVzc2lvblNob3VsZFRocm93KSB7CisgICAgICAgIHNob3VsZFRo
cm93KGV4cHJlc3Npb24sICcoZnVuY3Rpb24oKSB7IHJldHVybiAiRXJyb3I6IFRZUEVfTUlTTUFU
Q0hfRVJSOiBET00gRXhjZXB0aW9uIDE3IjsgfSkoKTsnKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBzaG91bGROb3RUaHJvdyhleHByZXNzaW9uKTsKKyAgICB9Cit9CisKK3ZhciBlbXB0eUZ1bmN0
aW9uID0gZnVuY3Rpb24oKSB7fTsKKwordGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1
cnJlbnRQb3NpdGlvbigpJywgdHJ1ZSk7CisKK3Rlc3QoJ25hdmlnYXRvci5nZW9sb2NhdGlvbi5n
ZXRDdXJyZW50UG9zaXRpb24odW5kZWZpbmVkKScsIHRydWUpOwordGVzdCgnbmF2aWdhdG9yLmdl
b2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihudWxsKScsIHRydWUpOwordGVzdCgnbmF2aWdh
dG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbih7fSknLCBmYWxzZSk7Cit0ZXN0KCdu
YXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24pJywg
ZmFsc2UpOwordGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbih0
cnVlKScsIHRydWUpOwordGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3Np
dGlvbig0MiknLCB0cnVlKTsKK3Rlc3QoJ25hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50
UG9zaXRpb24oInN0cmluZyIpJywgdHJ1ZSk7CisKK3Rlc3QoJ25hdmlnYXRvci5nZW9sb2NhdGlv
bi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgdW5kZWZpbmVkKScsIGZhbHNlKTsK
K3Rlc3QoJ25hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5j
dGlvbiwgbnVsbCknLCBmYWxzZSk7Cit0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3Vy
cmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIHt9KScsIGZhbHNlKTsKK3Rlc3QoJ25hdmlnYXRv
ci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgZW1wdHlGdW5j
dGlvbiknLCBmYWxzZSk7Cit0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBv
c2l0aW9uKGVtcHR5RnVuY3Rpb24sIHRydWUpJywgdHJ1ZSk7Cit0ZXN0KCduYXZpZ2F0b3IuZ2Vv
bG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIDQyKScsIHRydWUpOwor
dGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0
aW9uLCAic3RyaW5nIiknLCB0cnVlKTsKKwordGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdl
dEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCB1bmRlZmluZWQsIHVuZGVmaW5lZCknLCBm
YWxzZSk7Cit0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVt
cHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwgbnVsbCknLCBmYWxzZSk7Cit0ZXN0KCduYXZpZ2F0b3Iu
Z2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwg
e30pJywgZmFsc2UpOwordGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3Np
dGlvbihlbXB0eUZ1bmN0aW9uLCB1bmRlZmluZWQsIGVtcHR5RnVuY3Rpb24pJywgZmFsc2UpOwor
dGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0
aW9uLCB1bmRlZmluZWQsIHRydWUpJywgZmFsc2UpOwordGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0
aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCB1bmRlZmluZWQsIDQyKScsIGZh
bHNlKTsKK3Rlc3QoJ25hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1w
dHlGdW5jdGlvbiwgdW5kZWZpbmVkLCAic3RyaW5nIiknLCBmYWxzZSk7CisKK3Rlc3QoJ25hdmln
YXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgdW5kZWZp
bmVkLCB7ZHVtbXlQcm9wZXJ0eTp1bmRlZmluZWR9KScsIGZhbHNlKTsKK3Rlc3QoJ25hdmlnYXRv
ci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgdW5kZWZpbmVk
LCB7ZHVtbXlQcm9wZXJ0eTpudWxsfSknLCBmYWxzZSk7Cit0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9j
YXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwge2R1bW15
UHJvcGVydHk6e319KScsIGZhbHNlKTsKK3Rlc3QoJ25hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRD
dXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgdW5kZWZpbmVkLCB7ZHVtbXlQcm9wZXJ0eTpl
bXB0eUZ1bmN0aW9ufSknLCBmYWxzZSk7Cit0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0
Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwge2R1bW15UHJvcGVydHk6
dHJ1ZX0pJywgZmFsc2UpOwordGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQ
b3NpdGlvbihlbXB0eUZ1bmN0aW9uLCB1bmRlZmluZWQsIHtkdW1teVByb3BlcnR5OjQyfSknLCBm
YWxzZSk7Cit0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVt
cHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwge2R1bW15UHJvcGVydHk6InN0cmluZyJ9KScsIGZhbHNl
KTsKKwordGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0
eUZ1bmN0aW9uLCB1bmRlZmluZWQsIHttYXhpbXVtQWdlOnVuZGVmaW5lZH0pJywgZmFsc2UpOwor
dGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0
aW9uLCB1bmRlZmluZWQsIHttYXhpbXVtQWdlOm51bGx9KScsIGZhbHNlKTsKK3Rlc3QoJ25hdmln
YXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgdW5kZWZp
bmVkLCB7bWF4aW11bUFnZTp7fX0pJywgZmFsc2UpOwordGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0
aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCB1bmRlZmluZWQsIHttYXhpbXVt
QWdlOmVtcHR5RnVuY3Rpb259KScsIGZhbHNlKTsKK3Rlc3QoJ25hdmlnYXRvci5nZW9sb2NhdGlv
bi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgdW5kZWZpbmVkLCB7bWF4aW11bUFn
ZTp0cnVlfSknLCBmYWxzZSk7Cit0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVu
dFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwge21heGltdW1BZ2U6NDJ9KScsIGZh
bHNlKTsKK3Rlc3QoJ25hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1w
dHlGdW5jdGlvbiwgdW5kZWZpbmVkLCB7bWF4aW11bUFnZToic3RyaW5nIn0pJywgZmFsc2UpOwor
Cit0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVu
Y3Rpb24sIHVuZGVmaW5lZCwge2VuYWJsZUhpZ2hBY2N1cmFjeTp1bmRlZmluZWR9KScsIGZhbHNl
KTsKK3Rlc3QoJ25hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlG
dW5jdGlvbiwgdW5kZWZpbmVkLCB7ZW5hYmxlSGlnaEFjY3VyYWN5Om51bGx9KScsIGZhbHNlKTsK
K3Rlc3QoJ25hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5j
dGlvbiwgdW5kZWZpbmVkLCB7ZW5hYmxlSGlnaEFjY3VyYWN5Ont9fSknLCBmYWxzZSk7Cit0ZXN0
KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24s
IHVuZGVmaW5lZCwge2VuYWJsZUhpZ2hBY2N1cmFjeTplbXB0eUZ1bmN0aW9ufSknLCBmYWxzZSk7
Cit0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVu
Y3Rpb24sIHVuZGVmaW5lZCwge2VuYWJsZUhpZ2hBY2N1cmFjeTp0cnVlfSknLCBmYWxzZSk7Cit0
ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rp
b24sIHVuZGVmaW5lZCwge2VuYWJsZUhpZ2hBY2N1cmFjeTo0Mn0pJywgZmFsc2UpOwordGVzdCgn
bmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCB1
bmRlZmluZWQsIHtlbmFibGVIaWdoQWNjdXJhY3k6InN0cmluZyJ9KScsIGZhbHNlKTsKKwordGVz
dCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9u
LCB1bmRlZmluZWQsIHt0aW1lb3V0OnVuZGVmaW5lZH0pJywgZmFsc2UpOwordGVzdCgnbmF2aWdh
dG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCB1bmRlZmlu
ZWQsIHt0aW1lb3V0Om51bGx9KScsIGZhbHNlKTsKK3Rlc3QoJ25hdmlnYXRvci5nZW9sb2NhdGlv
bi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgdW5kZWZpbmVkLCB7dGltZW91dDp7
fX0pJywgZmFsc2UpOwordGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3Np
dGlvbihlbXB0eUZ1bmN0aW9uLCB1bmRlZmluZWQsIHt0aW1lb3V0OmVtcHR5RnVuY3Rpb259KScs
IGZhbHNlKTsKK3Rlc3QoJ25hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24o
ZW1wdHlGdW5jdGlvbiwgdW5kZWZpbmVkLCB7dGltZW91dDp0cnVlfSknLCBmYWxzZSk7Cit0ZXN0
KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24s
IHVuZGVmaW5lZCwge3RpbWVvdXQ6NDJ9KScsIGZhbHNlKTsKK3Rlc3QoJ25hdmlnYXRvci5nZW9s
b2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgdW5kZWZpbmVkLCB7dGlt
ZW91dDoic3RyaW5nIn0pJywgZmFsc2UpOworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1
ZTsKKwpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2Zhc3QvZG9tL0dlb2xvY2F0aW9u
L2FyZ3VtZW50LXR5cGVzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9w
bGF0Zm9ybS9ndGsvZmFzdC9kb20vR2VvbG9jYXRpb24vYXJndW1lbnQtdHlwZXMtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2Zhc3QvZG9tL0dl
b2xvY2F0aW9uL2FyZ3VtZW50LXR5cGVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw1OSBAQAorVGVzdHMgdGhlIGFjY2VwdGFibGUgdHlwZXMgZm9yIGFyZ3VtZW50cyB0byBH
ZW9sb2NhdGlvbiBtZXRob2RzLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFT
UyBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKCkgdGhyZXcgZXhjZXB0
aW9uIEVycm9yOiBUWVBFX01JU01BVENIX0VSUjogRE9NIEV4Y2VwdGlvbiAxNy4KK1BBU1MgbmF2
aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbih1bmRlZmluZWQpIHRocmV3IGV4
Y2VwdGlvbiBFcnJvcjogVFlQRV9NSVNNQVRDSF9FUlI6IERPTSBFeGNlcHRpb24gMTcuCitQQVNT
IG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24obnVsbCkgdGhyZXcgZXhj
ZXB0aW9uIEVycm9yOiBUWVBFX01JU01BVENIX0VSUjogRE9NIEV4Y2VwdGlvbiAxNy4KK1BBU1Mg
bmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbih7fSkgZGlkIG5vdCB0aHJv
dyBleGNlcHRpb24uCitQQVNTIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRp
b24oZW1wdHlGdW5jdGlvbikgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIG5hdmlnYXRv
ci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24odHJ1ZSkgdGhyZXcgZXhjZXB0aW9uIEVy
cm9yOiBUWVBFX01JU01BVENIX0VSUjogRE9NIEV4Y2VwdGlvbiAxNy4KK1BBU1MgbmF2aWdhdG9y
Lmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbig0MikgdGhyZXcgZXhjZXB0aW9uIEVycm9y
OiBUWVBFX01JU01BVENIX0VSUjogRE9NIEV4Y2VwdGlvbiAxNy4KK1BBU1MgbmF2aWdhdG9yLmdl
b2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbigic3RyaW5nIikgdGhyZXcgZXhjZXB0aW9uIEVy
cm9yOiBUWVBFX01JU01BVENIX0VSUjogRE9NIEV4Y2VwdGlvbiAxNy4KK1BBU1MgbmF2aWdhdG9y
Lmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCB1bmRlZmluZWQp
IGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0
Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIG51bGwpIGRpZCBub3QgdGhyb3cgZXhjZXB0
aW9uLgorUEFTUyBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5
RnVuY3Rpb24sIHt9KSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgbmF2aWdhdG9yLmdl
b2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCBlbXB0eUZ1bmN0aW9u
KSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdl
dEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCB0cnVlKSB0aHJldyBleGNlcHRpb24gRXJy
b3I6IFRZUEVfTUlTTUFUQ0hfRVJSOiBET00gRXhjZXB0aW9uIDE3LgorUEFTUyBuYXZpZ2F0b3Iu
Z2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIDQyKSB0aHJldyBl
eGNlcHRpb24gRXJyb3I6IFRZUEVfTUlTTUFUQ0hfRVJSOiBET00gRXhjZXB0aW9uIDE3LgorUEFT
UyBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24s
ICJzdHJpbmciKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFRZUEVfTUlTTUFUQ0hfRVJSOiBET00g
RXhjZXB0aW9uIDE3LgorUEFTUyBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0
aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwgdW5kZWZpbmVkKSBkaWQgbm90IHRocm93IGV4
Y2VwdGlvbi4KK1BBU1MgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihl
bXB0eUZ1bmN0aW9uLCB1bmRlZmluZWQsIG51bGwpIGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgor
UEFTUyBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rp
b24sIHVuZGVmaW5lZCwge30pIGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBuYXZpZ2F0
b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5l
ZCwgZW1wdHlGdW5jdGlvbikgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIG5hdmlnYXRv
ci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgdW5kZWZpbmVk
LCB0cnVlKSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgbmF2aWdhdG9yLmdlb2xvY2F0
aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCB1bmRlZmluZWQsIDQyKSBkaWQg
bm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJl
bnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCB1bmRlZmluZWQsICJzdHJpbmciKSBkaWQgbm90IHRo
cm93IGV4Y2VwdGlvbi4KK1BBU1MgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3Np
dGlvbihlbXB0eUZ1bmN0aW9uLCB1bmRlZmluZWQsIHtkdW1teVByb3BlcnR5OnVuZGVmaW5lZH0p
IGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0
Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwge2R1bW15UHJvcGVydHk6
bnVsbH0pIGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBuYXZpZ2F0b3IuZ2VvbG9jYXRp
b24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwge2R1bW15UHJv
cGVydHk6e319KSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgbmF2aWdhdG9yLmdlb2xv
Y2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCB1bmRlZmluZWQsIHtkdW1t
eVByb3BlcnR5OmVtcHR5RnVuY3Rpb259KSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1Mg
bmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCB1
bmRlZmluZWQsIHtkdW1teVByb3BlcnR5OnRydWV9KSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4K
K1BBU1MgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0
aW9uLCB1bmRlZmluZWQsIHtkdW1teVByb3BlcnR5OjQyfSkgZGlkIG5vdCB0aHJvdyBleGNlcHRp
b24uCitQQVNTIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlG
dW5jdGlvbiwgdW5kZWZpbmVkLCB7ZHVtbXlQcm9wZXJ0eToic3RyaW5nIn0pIGRpZCBub3QgdGhy
b3cgZXhjZXB0aW9uLgorUEFTUyBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0
aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwge21heGltdW1BZ2U6dW5kZWZpbmVkfSkgZGlk
IG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJy
ZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgdW5kZWZpbmVkLCB7bWF4aW11bUFnZTpudWxsfSkg
ZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRD
dXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgdW5kZWZpbmVkLCB7bWF4aW11bUFnZTp7fX0p
IGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0
Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwge21heGltdW1BZ2U6ZW1w
dHlGdW5jdGlvbn0pIGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBuYXZpZ2F0b3IuZ2Vv
bG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwge21h
eGltdW1BZ2U6dHJ1ZX0pIGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBuYXZpZ2F0b3Iu
Z2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwg
e21heGltdW1BZ2U6NDJ9KSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgbmF2aWdhdG9y
Lmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCB1bmRlZmluZWQs
IHttYXhpbXVtQWdlOiJzdHJpbmcifSkgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIG5h
dmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgdW5k
ZWZpbmVkLCB7ZW5hYmxlSGlnaEFjY3VyYWN5OnVuZGVmaW5lZH0pIGRpZCBub3QgdGhyb3cgZXhj
ZXB0aW9uLgorUEFTUyBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVt
cHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwge2VuYWJsZUhpZ2hBY2N1cmFjeTpudWxsfSkgZGlkIG5v
dCB0aHJvdyBleGNlcHRpb24uCitQQVNTIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50
UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgdW5kZWZpbmVkLCB7ZW5hYmxlSGlnaEFjY3VyYWN5Ont9
fSkgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5n
ZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgdW5kZWZpbmVkLCB7ZW5hYmxlSGlnaEFj
Y3VyYWN5OmVtcHR5RnVuY3Rpb259KSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgbmF2
aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCB1bmRl
ZmluZWQsIHtlbmFibGVIaWdoQWNjdXJhY3k6dHJ1ZX0pIGRpZCBub3QgdGhyb3cgZXhjZXB0aW9u
LgorUEFTUyBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVu
Y3Rpb24sIHVuZGVmaW5lZCwge2VuYWJsZUhpZ2hBY2N1cmFjeTo0Mn0pIGRpZCBub3QgdGhyb3cg
ZXhjZXB0aW9uLgorUEFTUyBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9u
KGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwge2VuYWJsZUhpZ2hBY2N1cmFjeToic3RyaW5nIn0p
IGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0
Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwge3RpbWVvdXQ6dW5kZWZp
bmVkfSkgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIG5hdmlnYXRvci5nZW9sb2NhdGlv
bi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgdW5kZWZpbmVkLCB7dGltZW91dDpu
dWxsfSkgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIG5hdmlnYXRvci5nZW9sb2NhdGlv
bi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgdW5kZWZpbmVkLCB7dGltZW91dDp7
fX0pIGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24u
Z2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwge3RpbWVvdXQ6ZW1w
dHlGdW5jdGlvbn0pIGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBuYXZpZ2F0b3IuZ2Vv
bG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwge3Rp
bWVvdXQ6dHJ1ZX0pIGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBuYXZpZ2F0b3IuZ2Vv
bG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwge3Rp
bWVvdXQ6NDJ9KSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgbmF2aWdhdG9yLmdlb2xv
Y2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCB1bmRlZmluZWQsIHt0aW1l
b3V0OiJzdHJpbmcifSkgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIHN1Y2Nlc3NmdWxs
eVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwo=
</data>
<flag name="review"
          id="18704"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34661</attachid>
            <date>2009-08-12 07:19:13 -0700</date>
            <delta_ts>2009-08-12 10:50:10 -0700</delta_ts>
            <desc>Patch 4 for bug 27254</desc>
            <filename>setPositionOptionsDefaults4.txt</filename>
            <type>text/plain</type>
            <size>30088</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NzAwNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMDktMDgtMTAgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEJ1ZyAyNzI1NCA6IEdlb2xvY2F0aW9uIFBvc2l0aW9uT3B0aW9ucyBkb2VzIG5vdCB1c2UgY29y
cmVjdCBkZWZhdWx0IHZhbHVlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTI3MjU0CisKKyAgICAgICAgU2V0cyB0aGUgY29ycmVjdCBkZWZhdWx0IHZh
bHVlcyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlIFBvc2l0aW9uT3B0aW9ucyBvYmplY3QKKyAg
ICAgICAgcGFzc2VkIHRvIEdlb2xvY2F0aW9uIG1ldGhvZHMuIFNlZSBodHRwOi8vd3d3LnczLm9y
Zy9UUi9nZW9sb2NhdGlvbi1BUEkvLgorCisgICAgICAgIEFsc28gYWRkcyBjaGVja2luZyB0byB0
aHJvdyBhbiBleGNlcHRpb24gaWYgYXJndW1lbnRzIG9mIHRoZSBpbmNvcnJlY3QgdHlwZSBhcmUK
KyAgICAgICAgcGFzc2VkIHRvIEdlb2xvY2F0aW9uIG1ldGhvZHMuIEFkZHMgYSBsYXlvdXQgdGVz
dCB0byB0ZXN0IHRoaXMuIFRoaXMgdGVzdCBzaG91bGQKKyAgICAgICAgcGFzcyBvbiBhbGwgcGxh
dGZvcm1zIHdoZXJlIEdlb2xvY2F0aW9uIGlzIGltcGxlbWVudGVkLgorCisgICAgICAgIFRlc3Q6
IGZhc3QvZG9tL0dlb2xvY2F0aW9uL2FyZ3VtZW50LXR5cGVzLmh0bWwKKworICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTR2VvbG9jYXRpb25DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3Jl
YXRlUG9zaXRpb25DYWxsYmFjayk6IEFkZGVkLiBDcmVhdGVzIHRoZSBjYWxsYmFjay4KKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZVBvc2l0aW9uRXJyb3JDYWxsYmFjayk6IEFkZGVkLiBDcmVhdGVz
IHRoZSBjYWxiYWNrLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlUG9zaXRpb25PcHRpb25zKTog
QWRkZWQuIENyZWF0ZXMgdGhlIFBvc2l0aW9uT3B0aW9ucyBvYmplY3QsIHNldHRpbmcgZGVmYXVs
dHMgd2hlcmUgcmVxdWlyZWQuCisgICAgICAgIChXZWJDb3JlOjpKU0dlb2xvY2F0aW9uOjpnZXRD
dXJyZW50UG9zaXRpb24pOiBNb2RpZmllZC4gTm93IHVzZXMgYWJvdmUgaGVscGVyIGZ1bmN0aW9u
cy4KKyAgICAgICAgKFdlYkNvcmU6OkpTR2VvbG9jYXRpb246OndhdGNoUG9zaXRpb24pOiBNb2Rp
ZmllZC4gTm93IHVzZXMgYWJvdmUgaGVscGVyIGZ1bmN0aW9ucy4KKyAgICAgICAgKiBwYWdlL0dl
b2xvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpHZW9Ob3RpZmll
cjo6R2VvTm90aWZpZXIpOiBNb2RpZmllZC4gQXNzZXJ0cyB0aGF0IFBvc2l0aW9uT3B0aW9ucyBv
YmplY3QgaXMgcHJlc2VudC4KKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpHZW9Ob3Rp
Zmllcjo6c3RhcnRUaW1lcik6IE1vZGlmaWVkLiBPbmx5IHN0YXJ0cyB0aW1lciBpZiB0aW1lb3V0
IGhhcyBiZWVuIHNldC4KKyAgICAgICAgKiBwYWdlL1Bvc2l0aW9uT3B0aW9ucy5oOgorICAgICAg
ICAoV2ViQ29yZTo6UG9zaXRpb25PcHRpb25zOjpjcmVhdGUpOiBNb2RpZmllZC4gQ3JlYXRlcyBv
YmplY3Qgd2l0aCBkZWZhdWx0IHZhbHVlcy4KKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uT3B0
aW9uczo6dGltZW91dCk6IE1vZGlmaWVkLiBVc2VzIGNvcnJlY3QgdHlwZS4KKyAgICAgICAgKFdl
YkNvcmU6OlBvc2l0aW9uT3B0aW9uczo6aGFzVGltZW91dCk6IEFkZGVkLiBEZXRlcm1pbmVzIHdo
ZXRoZXIgYSB0aW1lb3V0IGhhcyBiZWVuIHNldC4KKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9u
T3B0aW9uczo6c2V0VGltZW91dCk6IE1vZGlmaWVkLiBVc2VzIGNvcnJlY3QgdHlwZS4KKyAgICAg
ICAgKFdlYkNvcmU6OlBvc2l0aW9uT3B0aW9uczo6bWF4aW11bUFnZSk6IE1vZGlmaWVkLiBVc2Vz
IGNvcnJlY3QgdHlwZS4KKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uT3B0aW9uczo6c2V0TWF4
aW11bUFnZSk6IE1vZGlmaWVkLiBVc2VzIGNvcnJlY3QgdHlwZS4KKyAgICAgICAgKFdlYkNvcmU6
OlBvc2l0aW9uT3B0aW9uczo6UG9zaXRpb25PcHRpb25zKTogTW9kaWZpZWQuIENyZWF0ZXMgb2Jq
ZWN0IHdpdGggZGVmYXVsdCB2YWx1ZXMuCisKIDIwMDktMDgtMTAgIEtlbm5ldGggUm9oZGUgQ2hy
aXN0aWFuc2VuICA8a2VubmV0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNp
bW9uIEhhdXNtYW5uLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0dlb2xvY2F0aW9uQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTR2VvbG9jYXRpb25D
dXN0b20uY3BwCShyZXZpc2lvbiA0NzAwNCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNHZW9s
b2NhdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwLDcgKzIwLDcgQEAKICAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgpAQCAtMzksMTA5ICszOSwxMjUg
QEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMg
UGFzc1JlZlB0cjxQb3NpdGlvbk9wdGlvbnM+IGNyZWF0ZVBvc2l0aW9uT3B0aW9ucyhFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCitzdGF0aWMgUGFzc1JlZlB0cjxQb3NpdGlvbkNhbGxi
YWNrPiBjcmVhdGVQb3NpdGlvbkNhbGxiYWNrKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1
ZSkKIHsKLSAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCisgICAgLy8gVGhlIHNwZWMgc3BlY2lm
aWVzICdGdW5jdGlvbk9ubHknIGZvciB0aGlzIG9iamVjdC4KKyAgICBpZiAoIXZhbHVlLmlzT2Jq
ZWN0KCZJbnRlcm5hbEZ1bmN0aW9uOjppbmZvKSkgeworICAgICAgICBzZXRET01FeGNlcHRpb24o
ZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOwogICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAKLSAg
ICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QodmFsdWUpOworICAgIEpTT2JqZWN0KiBvYmpl
Y3QgPSB2YWx1ZS5nZXRPYmplY3QoKTsKKyAgICBGcmFtZSogZnJhbWUgPSB0b0pTRE9NV2luZG93
KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPmltcGwoKS0+ZnJhbWUoKTsKKyAgICByZXR1
cm4gSlNDdXN0b21Qb3NpdGlvbkNhbGxiYWNrOjpjcmVhdGUob2JqZWN0LCBmcmFtZSk7Cit9CiAK
LSAgICBKU1ZhbHVlIGVuYWJsZUhpZ2hBY2N1cmFjeVZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYywg
SWRlbnRpZmllcihleGVjLCAiZW5hYmxlSGlnaEFjY3VyYWN5IikpOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKK3N0YXRpYyBQYXNzUmVmUHRyPFBvc2l0aW9uRXJyb3JDYWxsYmFjaz4g
Y3JlYXRlUG9zaXRpb25FcnJvckNhbGxiYWNrKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1
ZSkKK3sKKyAgICAvLyBBcmd1bWVudCBpcyBvcHRpb25hbCAoaGVuY2UgdW5kZWZpbmVkIGlzIGFs
bG93ZWQpLCBhbmQgbnVsbCBpcyBhbGxvd2VkLgorICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9y
TnVsbCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBib29sIGVuYWJsZUhpZ2hBY2N1cmFjeSA9
IGVuYWJsZUhpZ2hBY2N1cmFjeVZhbHVlLnRvQm9vbGVhbihleGVjKTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisKKyAgICAvLyBUaGUgc3BlYyBzcGVjaWZpZXMgJ0Z1bmN0aW9uT25s
eScgZm9yIHRoaXMgb2JqZWN0LgorICAgIGlmICghdmFsdWUuaXNPYmplY3QoJkludGVybmFsRnVu
Y3Rpb246OmluZm8pKSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01B
VENIX0VSUik7CiAgICAgICAgIHJldHVybiAwOworICAgIH0KIAotICAgIEpTVmFsdWUgdGltZW91
dFZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAidGltZW91dCIpKTsK
KyAgICBKU09iamVjdCogb2JqZWN0ID0gdmFsdWUuZ2V0T2JqZWN0KCk7CisgICAgRnJhbWUqIGZy
YW1lID0gdG9KU0RPTVdpbmRvdyhleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5pbXBsKCkt
PmZyYW1lKCk7CisgICAgcmV0dXJuIEpTQ3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNrOjpjcmVh
dGUob2JqZWN0LCBmcmFtZSk7Cit9CisKK3N0YXRpYyBQYXNzUmVmUHRyPFBvc2l0aW9uT3B0aW9u
cz4gY3JlYXRlUG9zaXRpb25PcHRpb25zKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkK
K3sKKyAgICAvLyBDcmVhdGUgZGVmYXVsdCBvcHRpb25zLgorICAgIFJlZlB0cjxQb3NpdGlvbk9w
dGlvbnM+IG9wdGlvbnMgPSBQb3NpdGlvbk9wdGlvbnM6OmNyZWF0ZSgpOworCisgICAgLy8gQXJn
dW1lbnQgaXMgb3B0aW9uYWwgKGhlbmNlIHVuZGVmaW5lZCBpcyBhbGxvd2VkKSwgYW5kIG51bGwg
aXMgYWxsb3dlZC4KKyAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgeworICAgICAg
ICAvLyBVc2UgZGVmYXVsdCBvcHRpb25zLgorICAgICAgICByZXR1cm4gb3B0aW9ucy5yZWxlYXNl
KCk7CisgICAgfQorCisgICAgLy8gR2l2ZW4gdGhlIGFib3ZlIHRlc3QsIHRoaXMgd2lsbCBhbHdh
eXMgeWllbGQgYW4gb2JqZWN0LgorICAgIEpTT2JqZWN0KiBvYmplY3QgPSB2YWx1ZS50b09iamVj
dChleGVjKTsKKworICAgIC8vIEZvciBhbGwgdGhyZWUgcHJvcGVydGllcywgd2UgYXBwbHkgdGhl
IGZvbGxvd2luZyAuLi4KKyAgICAvLyAtIElmIHRoZSBnZXR0ZXIgb3IgdGhlIHByb3BlcnR5J3Mg
dmFsdWVPZiBtZXRob2QgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgd2UKKyAgICAvLyAgIHF1aXQgc28g
YXMgbm90IHRvIHJpc2sgb3ZlcndyaXRpbmcgdGhlIGV4Y2VwdGlvbi4KKyAgICAvLyAtIElmIHRo
ZSB2YWx1ZSBpcyBhYnNlbnQgb3IgdW5kZWZpbmVkLCB3ZSBkb24ndCBvdmVycmlkZSB0aGUgZGVm
YXVsdC4KKyAgICBKU1ZhbHVlIGVuYWJsZUhpZ2hBY2N1cmFjeVZhbHVlID0gb2JqZWN0LT5nZXQo
ZXhlYywgSWRlbnRpZmllcihleGVjLCAiZW5hYmxlSGlnaEFjY3VyYWN5IikpOwogICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgdW5zaWduZWQgdGlt
ZW91dCA9IHRpbWVvdXRWYWx1ZS50b1VJbnQzMihleGVjKTsKKyAgICBpZiAoIWVuYWJsZUhpZ2hB
Y2N1cmFjeVZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgb3B0aW9ucy0+c2V0RW5hYmxl
SGlnaEFjY3VyYWN5KGVuYWJsZUhpZ2hBY2N1cmFjeVZhbHVlLnRvQm9vbGVhbihleGVjKSk7Cisg
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKworICAgIEpTVmFsdWUgdGltZW91dFZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYywgSWRl
bnRpZmllcihleGVjLCAidGltZW91dCIpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CiAgICAgICAgIHJldHVybiAwOworICAgIGlmICghdGltZW91dFZhbHVlLmlzVW5kZWZpbmVkKCkp
IHsKKyAgICAgICAgLy8gV3JhcCB0byBpbnQzMiBhbmQgZm9yY2Ugbm9uLW5lZ2F0aXZlIHRvIG1h
dGNoIGJlaGF2aW9yIG9mIHdpbmRvdy5zZXRUaW1lb3V0LgorICAgICAgICBvcHRpb25zLT5zZXRU
aW1lb3V0KHN0ZDo6bWF4KDAsIHRpbWVvdXRWYWx1ZS50b0ludDMyKGV4ZWMpKSk7CisgICAgICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0K
IAogICAgIEpTVmFsdWUgbWF4aW11bUFnZVZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYywgSWRlbnRp
ZmllcihleGVjLCAibWF4aW11bUFnZSIpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CiAgICAgICAgIHJldHVybiAwOwotICAgIHVuc2lnbmVkIG1heGltdW1BZ2UgPSBtYXhpbXVtQWdl
VmFsdWUudG9VSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAg
ICAgICByZXR1cm4gMDsKKyAgICBpZiAoIW1heGltdW1BZ2VWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7
CisgICAgICAgIC8vIFdyYXAgdG8gaW50MzIgYW5kIGZvcmNlIG5vbi1uZWdhdGl2ZSB0byBtYXRj
aCBiZWhhdmlvciBvZiB3aW5kb3cuc2V0VGltZW91dC4KKyAgICAgICAgb3B0aW9ucy0+c2V0TWF4
aW11bUFnZShzdGQ6Om1heCgwLCBtYXhpbXVtQWdlVmFsdWUudG9JbnQzMihleGVjKSkpOworICAg
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CiAKLSAgICByZXR1cm4gUG9zaXRpb25PcHRpb25zOjpjcmVhdGUoZW5hYmxlSGlnaEFjY3Vy
YWN5LCB0aW1lb3V0LCBtYXhpbXVtQWdlKTsKKyAgICByZXR1cm4gb3B0aW9ucy5yZWxlYXNlKCk7
CiB9CiAKIEpTVmFsdWUgSlNHZW9sb2NhdGlvbjo6Z2V0Q3VycmVudFBvc2l0aW9uKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICAvLyBBcmd1bWVudHM6IFBvc2l0
aW9uQ2FsbGJhY2ssIChvcHRpb25hbClQb3NpdGlvbkVycm9yQ2FsbGJhY2ssIChvcHRpb25hbClQ
b3NpdGlvbk9wdGlvbnMKLSAgICBSZWZQdHI8UG9zaXRpb25DYWxsYmFjaz4gcG9zaXRpb25DYWxs
YmFjazsKLSAgICBKU09iamVjdCogb2JqZWN0ID0gYXJncy5hdCgwKS5nZXRPYmplY3QoKTsKKwor
ICAgIFJlZlB0cjxQb3NpdGlvbkNhbGxiYWNrPiBwb3NpdGlvbkNhbGxiYWNrID0gY3JlYXRlUG9z
aXRpb25DYWxsYmFjayhleGVjLCBhcmdzLmF0KDApKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIGlmICghb2JqZWN0KSB7
Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7CisgICAg
QVNTRVJUKHBvc2l0aW9uQ2FsbGJhY2spOworCisgICAgUmVmUHRyPFBvc2l0aW9uRXJyb3JDYWxs
YmFjaz4gcG9zaXRpb25FcnJvckNhbGxiYWNrID0gY3JlYXRlUG9zaXRpb25FcnJvckNhbGxiYWNr
KGV4ZWMsIGFyZ3MuYXQoMSkpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogCi0gICAgaWYgKEZyYW1lKiBmcmFtZSA9
IHRvSlNET01XaW5kb3coZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+aW1wbCgpLT5mcmFt
ZSgpKQotICAgICAgICBwb3NpdGlvbkNhbGxiYWNrID0gSlNDdXN0b21Qb3NpdGlvbkNhbGxiYWNr
OjpjcmVhdGUob2JqZWN0LCBmcmFtZSk7Ci0gICAgCi0gICAgUmVmUHRyPFBvc2l0aW9uRXJyb3JD
YWxsYmFjaz4gcG9zaXRpb25FcnJvckNhbGxiYWNrOwotICAgIGlmICghYXJncy5hdCgxKS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpKSB7Ci0gICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhcmdzLmF0KDEp
LmdldE9iamVjdCgpOwotICAgICAgICBpZiAoIW9iamVjdCkgewotICAgICAgICAgICAgc2V0RE9N
RXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKLSAgICAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IHRv
SlNET01XaW5kb3coZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+aW1wbCgpLT5mcmFtZSgp
KQotICAgICAgICAgICAgcG9zaXRpb25FcnJvckNhbGxiYWNrID0gSlNDdXN0b21Qb3NpdGlvbkVy
cm9yQ2FsbGJhY2s6OmNyZWF0ZShvYmplY3QsIGZyYW1lKTsKLSAgICB9Ci0gICAgCi0gICAgUmVm
UHRyPFBvc2l0aW9uT3B0aW9ucz4gcG9zaXRpb25PcHRpb25zOwotICAgIGlmICghYXJncy5hdCgy
KS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7Ci0gICAgICAgIHBvc2l0aW9uT3B0aW9ucyA9IGNyZWF0
ZVBvc2l0aW9uT3B0aW9ucyhleGVjLCBhcmdzLmF0KDIpKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQor
ICAgIFJlZlB0cjxQb3NpdGlvbk9wdGlvbnM+IHBvc2l0aW9uT3B0aW9ucyA9IGNyZWF0ZVBvc2l0
aW9uT3B0aW9ucyhleGVjLCBhcmdzLmF0KDIpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIEFTU0VSVChwb3NpdGlvbk9w
dGlvbnMpOwogCiAgICAgbV9pbXBsLT5nZXRDdXJyZW50UG9zaXRpb24ocG9zaXRpb25DYWxsYmFj
ay5yZWxlYXNlKCksIHBvc2l0aW9uRXJyb3JDYWxsYmFjay5yZWxlYXNlKCksIHBvc2l0aW9uT3B0
aW9ucy5yZWxlYXNlKCkpOwotICAgIAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCiBK
U1ZhbHVlIEpTR2VvbG9jYXRpb246OndhdGNoUG9zaXRpb24oRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQogewogICAgIC8vIEFyZ3VtZW50czogUG9zaXRpb25DYWxsYmFjaywg
KG9wdGlvbmFsKVBvc2l0aW9uRXJyb3JDYWxsYmFjaywgKG9wdGlvbmFsKVBvc2l0aW9uT3B0aW9u
cwotICAgIFJlZlB0cjxQb3NpdGlvbkNhbGxiYWNrPiBwb3NpdGlvbkNhbGxiYWNrOwotICAgIEpT
T2JqZWN0KiBvYmplY3QgPSBhcmdzLmF0KDApLmdldE9iamVjdCgpOworCisgICAgUmVmUHRyPFBv
c2l0aW9uQ2FsbGJhY2s+IHBvc2l0aW9uQ2FsbGJhY2sgPSBjcmVhdGVQb3NpdGlvbkNhbGxiYWNr
KGV4ZWMsIGFyZ3MuYXQoMCkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgaWYgKCFvYmplY3QpIHsKLSAgICAgICAgc2V0
RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKKyAgICBBU1NFUlQocG9zaXRp
b25DYWxsYmFjayk7CisKKyAgICBSZWZQdHI8UG9zaXRpb25FcnJvckNhbGxiYWNrPiBwb3NpdGlv
bkVycm9yQ2FsbGJhY2sgPSBjcmVhdGVQb3NpdGlvbkVycm9yQ2FsbGJhY2soZXhlYywgYXJncy5h
dCgxKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKEZyYW1lKiBmcmFtZSA9IHRvSlNET01X
aW5kb3coZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+aW1wbCgpLT5mcmFtZSgpKQotICAg
ICAgICBwb3NpdGlvbkNhbGxiYWNrID0gSlNDdXN0b21Qb3NpdGlvbkNhbGxiYWNrOjpjcmVhdGUo
b2JqZWN0LCBmcmFtZSk7Ci0gICAgCi0gICAgUmVmUHRyPFBvc2l0aW9uRXJyb3JDYWxsYmFjaz4g
cG9zaXRpb25FcnJvckNhbGxiYWNrOwotICAgIGlmICghYXJncy5hdCgxKS5pc1VuZGVmaW5lZE9y
TnVsbCgpKSB7Ci0gICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhcmdzLmF0KDEpLmdldE9iamVj
dCgpOwotICAgICAgICBpZiAoIW9iamVjdCkgewotICAgICAgICAgICAgc2V0RE9NRXhjZXB0aW9u
KGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKLSAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gdG9K
U0RPTVdpbmRvdyhleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5pbXBsKCktPmZyYW1lKCkp
Ci0gICAgICAgICAgICBwb3NpdGlvbkVycm9yQ2FsbGJhY2sgPSBKU0N1c3RvbVBvc2l0aW9uRXJy
b3JDYWxsYmFjazo6Y3JlYXRlKG9iamVjdCwgZnJhbWUpOwotICAgIH0KLSAgICAKLSAgICBSZWZQ
dHI8UG9zaXRpb25PcHRpb25zPiBwb3NpdGlvbk9wdGlvbnM7Ci0gICAgaWYgKCFhcmdzLmF0KDIp
LmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKLSAgICAgICAgcG9zaXRpb25PcHRpb25zID0gY3JlYXRl
UG9zaXRpb25PcHRpb25zKGV4ZWMsIGFyZ3MuYXQoMikpOwotICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CisK
KyAgICBSZWZQdHI8UG9zaXRpb25PcHRpb25zPiBwb3NpdGlvbk9wdGlvbnMgPSBjcmVhdGVQb3Np
dGlvbk9wdGlvbnMoZXhlYywgYXJncy5hdCgyKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBBU1NFUlQocG9zaXRpb25P
cHRpb25zKTsKIAogICAgIGludCB3YXRjaElEID0gbV9pbXBsLT53YXRjaFBvc2l0aW9uKHBvc2l0
aW9uQ2FsbGJhY2sucmVsZWFzZSgpLCBwb3NpdGlvbkVycm9yQ2FsbGJhY2sucmVsZWFzZSgpLCBw
b3NpdGlvbk9wdGlvbnMucmVsZWFzZSgpKTsKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgd2F0
Y2hJRCk7CkluZGV4OiBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGFnZS9HZW9sb2NhdGlvbi5jcHAJKHJldmlzaW9uIDQ3MDA0KQorKysgV2ViQ29y
ZS9wYWdlL0dlb2xvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAog
I2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBvc2l0aW9u
RXJyb3IuaCIKKyNpbmNsdWRlICJQb3NpdGlvbk9wdGlvbnMuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC00MSwxMSArNDIsMTUgQEAgR2VvbG9jYXRpb246Okdlb05vdGlmaWVyOjpHZW9O
b3RpZmllcihQYQogICAgICwgbV9vcHRpb25zKG9wdGlvbnMpCiAgICAgLCBtX3RpbWVyKHRoaXMs
ICZHZW9sb2NhdGlvbjo6R2VvTm90aWZpZXI6OnRpbWVyRmlyZWQpCiB7CisgICAgQVNTRVJUKG1f
c3VjY2Vzc0NhbGxiYWNrKTsKKyAgICAvLyBJZiBubyBvcHRpb25zIHdlcmUgc3VwcGxpZWQgZnJv
bSBKUywgd2Ugc2hvdWxkIGhhdmUgY3JlYXRlZCBhIGRlZmF1bHQgc2V0CisgICAgLy8gb2Ygb3B0
aW9ucyBpbiBKU0dlb2xvY2F0aW9uQ3VzdG9tLmNwcC4KKyAgICBBU1NFUlQobV9vcHRpb25zKTsK
IH0KIAogdm9pZCBHZW9sb2NhdGlvbjo6R2VvTm90aWZpZXI6OnN0YXJ0VGltZXIoKQogewotICAg
IGlmIChtX2Vycm9yQ2FsbGJhY2sgJiYgbV9vcHRpb25zKQorICAgIGlmIChtX2Vycm9yQ2FsbGJh
Y2sgJiYgbV9vcHRpb25zLT5oYXNUaW1lb3V0KCkpCiAgICAgICAgIG1fdGltZXIuc3RhcnRPbmVT
aG90KG1fb3B0aW9ucy0+dGltZW91dCgpIC8gMTAwMC4wKTsKIH0KIApJbmRleDogV2ViQ29yZS9w
YWdlL1Bvc2l0aW9uT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9Qb3NpdGlv
bk9wdGlvbnMuaAkocmV2aXNpb24gNDcwMDQpCisrKyBXZWJDb3JlL3BhZ2UvUG9zaXRpb25PcHRp
b25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDI2ICszMyw0MSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgCiBjbGFzcyBQb3NpdGlvbk9wdGlvbnMgOiBwdWJsaWMgUmVmQ291bnRlZDxQb3Np
dGlvbk9wdGlvbnM+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxQb3NpdGlvbk9w
dGlvbnM+IGNyZWF0ZShib29sIGhpZ2hBY2N1cmFjeSwgdW5zaWduZWQgdGltZW91dCwgdW5zaWdu
ZWQgbWF4aW11bUFnZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFBvc2l0aW9uT3B0aW9ucyhoaWdo
QWNjdXJhY3ksIHRpbWVvdXQsIG1heGltdW1BZ2UpKTsgfQorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFBvc2l0aW9uT3B0aW9ucz4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFBvc2l0aW9u
T3B0aW9ucygpKTsgfQogCiAgICAgYm9vbCBlbmFibGVIaWdoQWNjdXJhY3koKSBjb25zdCB7IHJl
dHVybiBtX2hpZ2hBY2N1cmFjeTsgfQogICAgIHZvaWQgc2V0RW5hYmxlSGlnaEFjY3VyYWN5KGJv
b2wgZW5hYmxlKSB7IG1faGlnaEFjY3VyYWN5ID0gZW5hYmxlOyB9Ci0gICAgdW5zaWduZWQgdGlt
ZW91dCgpIGNvbnN0IHsgcmV0dXJuIG1fdGltZW91dDsgfQotICAgIHZvaWQgc2V0VGltZW91dCh1
bnNpZ25lZCB0KSB7IG1fdGltZW91dCA9IHQ7IH0KLSAgICB1bnNpZ25lZCBtYXhpbXVtQWdlKCkg
Y29uc3QgeyByZXR1cm4gbV9tYXhpbXVtQWdlOyB9Ci0gICAgdm9pZCBzZXRNYXhpbXVtQWdlKHVu
c2lnbmVkIGEpIHsgbV9tYXhpbXVtQWdlID0gYTsgfQorICAgIGJvb2wgaGFzVGltZW91dCgpIHsg
cmV0dXJuIG1faGFzVGltZW91dDsgfQorICAgIGludCB0aW1lb3V0KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChoYXNUaW1lb3V0KCkpOworICAgICAgICByZXR1cm4gbV90aW1lb3V0Owor
ICAgIH0KKyAgICB2b2lkIHNldFRpbWVvdXQoaW50IHRpbWVvdXQpCisgICAgeworICAgICAgICBB
U1NFUlQodGltZW91dCA+PSAwKTsKKyAgICAgICAgbV9oYXNUaW1lb3V0ID0gdHJ1ZTsKKyAgICAg
ICAgbV90aW1lb3V0ID0gdGltZW91dDsKKyAgICB9CisgICAgaW50IG1heGltdW1BZ2UoKSBjb25z
dCB7IHJldHVybiBtX21heGltdW1BZ2U7IH0KKyAgICB2b2lkIHNldE1heGltdW1BZ2UoaW50IGFn
ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChhZ2UgPj0gMCk7CisgICAgICAgIG1fbWF4aW11bUFn
ZSA9IGFnZTsKKyAgICB9CiAgICAgCiBwcml2YXRlOgotICAgIFBvc2l0aW9uT3B0aW9ucyhib29s
IGhpZ2hBY2N1cmFjeSwgdW5zaWduZWQgdGltZW91dCwgdW5zaWduZWQgbWF4aW11bUFnZSkKLSAg
ICAgICAgOiBtX2hpZ2hBY2N1cmFjeShoaWdoQWNjdXJhY3kpCi0gICAgICAgICwgbV90aW1lb3V0
KHRpbWVvdXQpCi0gICAgICAgICwgbV9tYXhpbXVtQWdlKG1heGltdW1BZ2UpCisgICAgUG9zaXRp
b25PcHRpb25zKCkKKyAgICAgICAgOiBtX2hpZ2hBY2N1cmFjeShmYWxzZSkKKyAgICAgICAgLCBt
X2hhc1RpbWVvdXQoZmFsc2UpCisgICAgICAgICwgbV9tYXhpbXVtQWdlKDApCiAgICAgewogICAg
IH0KICAgICAKICAgICBib29sIG1faGlnaEFjY3VyYWN5OwotICAgIHVuc2lnbmVkIG1fdGltZW91
dDsKLSAgICB1bnNpZ25lZCBtX21heGltdW1BZ2U7CisgICAgYm9vbCBtX2hhc1RpbWVvdXQ7Cisg
ICAgaW50IG1fdGltZW91dDsKKyAgICBpbnQgbV9tYXhpbXVtQWdlOwogfTsKICAgICAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ3MDA0KQorKysgTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMDktMDgtMTAg
IFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyAyNzI1NCA6IEdlb2xvY2F0aW9uIFBv
c2l0aW9uT3B0aW9ucyBkb2VzIG5vdCB1c2UgY29ycmVjdCBkZWZhdWx0IHZhbHVlcy4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3MjU0CisKKyAgICAg
ICAgQWRkcyBhIGxheW91dCB0ZXN0IHRvIGNoZWNrIHRoZSBhY2NlcHRhYmxlIHR5cGVzIGZvciBh
cmd1bWVudHMgdG8gR2VvbG9jYXRpb24gbWV0aG9kcy4KKworICAgICAgICAqIGZhc3QvZG9tL0dl
b2xvY2F0aW9uL3Jlc291cmNlcy9hcmd1bWVudC10eXBlcy5qczogQWRkZWQuIFRlc3RzIHRoZSB0
eXBlcyBvZiB0aGUgYXJndW1lbnRzIHRoYXQgY2FuIGJlIHBhc3NlZCB0byBHZW9sb2NhdGlvbiBt
ZXRob2RzLgorICAgICAgICAqIGZhc3QvZG9tL0dlb2xvY2F0aW9uL2FyZ3VtZW50LXR5cGVzLmh0
bWw6IEFkZGVkLiBIVE1MIHdyYXBwZXIgZm9yIGFib3ZlIEpTIHRlc3QuCisgICAgICAgICogcGxh
dGZvcm0vZ3RrL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL2FyZ3VtZW50LXR5cGVzLWV4cGVjdGVkLnR4
dDogQWRkZWQuIEV4cGVjdGVkIG91dHB1dCBmb3IgYWJvdmUgdGVzdC4KKwogMjAwOS0wOC0wNyAg
RGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFu
IEJlcm5zdGVpbi4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL2FyZ3Vt
ZW50LXR5cGVzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9j
YXRpb24vYXJndW1lbnQtdHlwZXMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zh
c3QvZG9tL0dlb2xvY2F0aW9uL2FyZ3VtZW50LXR5cGVzLmh0bWwJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VO
Ij4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pz
L3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9
ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3Jj
PSJyZXNvdXJjZXMvYXJndW1lbnQtdHlwZXMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24vcmVzb3VyY2VzL2Fy
Z3VtZW50LXR5cGVzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xv
Y2F0aW9uL3Jlc291cmNlcy9hcmd1bWVudC10eXBlcy5qcwkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL3Jlc291cmNlcy9hcmd1bWVudC10eXBlcy5qcwko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDYgQEAKK2Rlc2NyaXB0aW9uKCJUZXN0cyB0aGUgYWNj
ZXB0YWJsZSB0eXBlcyBmb3IgYXJndW1lbnRzIHRvIEdlb2xvY2F0aW9uIG1ldGhvZHMuIik7CisK
K2Z1bmN0aW9uIHNob3VsZE5vdFRocm93KGV4cHJlc3Npb24pCit7CisgIHRyeSB7CisgICAgZXZh
bChleHByZXNzaW9uKTsKKyAgICB0ZXN0UGFzc2VkKGV4cHJlc3Npb24gKyAiIGRpZCBub3QgdGhy
b3cgZXhjZXB0aW9uLiIpOworICB9IGNhdGNoKGUpIHsKKyAgICB0ZXN0RmFpbGVkKGV4cHJlc3Np
b24gKyAiIHNob3VsZCBub3QgdGhyb3cgZXhjZXB0aW9uLiBUaHJldyBleGNlcHRpb24gIiArIGUp
OworICB9Cit9CisKK2Z1bmN0aW9uIHRlc3QoZXhwcmVzc2lvbiwgZXhwcmVzc2lvblNob3VsZFRo
cm93LCBleHBlY3RlZEV4Y2VwdGlvbikgeworICAgIGlmIChleHByZXNzaW9uU2hvdWxkVGhyb3cp
IHsKKyAgICAgICAgaWYgKGV4cGVjdGVkRXhjZXB0aW9uKQorICAgICAgICAgICAgc2hvdWxkVGhy
b3coZXhwcmVzc2lvbiwgJyhmdW5jdGlvbigpIHsgcmV0dXJuICInICsgZXhwZWN0ZWRFeGNlcHRp
b24gKyAnIjsgfSkoKTsnKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2hvdWxkVGhyb3co
ZXhwcmVzc2lvbiwgJyhmdW5jdGlvbigpIHsgcmV0dXJuICJFcnJvcjogVFlQRV9NSVNNQVRDSF9F
UlI6IERPTSBFeGNlcHRpb24gMTciOyB9KSgpOycpOworICAgIH0gZWxzZSB7CisgICAgICAgIHNo
b3VsZE5vdFRocm93KGV4cHJlc3Npb24pOworICAgIH0KK30KKwordmFyIGVtcHR5RnVuY3Rpb24g
PSBmdW5jdGlvbigpIHt9OworCitmdW5jdGlvbiBPYmplY3RUaHJvd2luZ0V4Y2VwdGlvbigpIHt9
OworT2JqZWN0VGhyb3dpbmdFeGNlcHRpb24ucHJvdG90eXBlLnZhbHVlT2YgPSBmdW5jdGlvbigp
IHsKKyAgICB0aHJvdyBuZXcgRXJyb3IoJ3ZhbHVlT2YgdGhyZXcgZXhjZXB0aW9uJyk7Cit9CitP
YmplY3RUaHJvd2luZ0V4Y2VwdGlvbi5wcm90b3R5cGUuX19kZWZpbmVHZXR0ZXJfXygiZW5hYmxl
SGlnaEFjY3VyYWN5IiwgZnVuY3Rpb24oKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCdlbmFibGVI
aWdoQWNjdXJhY3kgZ2V0dGVyIGV4Y2VwdGlvbicpOworfSk7Cit2YXIgb2JqZWN0VGhyb3dpbmdF
eGNlcHRpb24gPSBuZXcgT2JqZWN0VGhyb3dpbmdFeGNlcHRpb24oKTsKKworCit0ZXN0KCduYXZp
Z2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKCknLCB0cnVlKTsKKwordGVzdCgn
bmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbih1bmRlZmluZWQpJywgdHJ1
ZSk7Cit0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKG51bGwp
JywgdHJ1ZSk7Cit0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9u
KHt9KScsIHRydWUpOwordGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3Np
dGlvbihvYmplY3RUaHJvd2luZ0V4Y2VwdGlvbiknLCB0cnVlKTsKK3Rlc3QoJ25hdmlnYXRvci5n
ZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiknLCBmYWxzZSk7Cit0
ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKE1hdGguYWJzKScs
IGZhbHNlKTsKK3Rlc3QoJ25hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24o
dHJ1ZSknLCB0cnVlKTsKK3Rlc3QoJ25hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9z
aXRpb24oNDIpJywgdHJ1ZSk7Cit0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVu
dFBvc2l0aW9uKCJzdHJpbmciKScsIHRydWUpOworCit0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRp
b24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5lZCknLCBmYWxzZSk7
Cit0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVu
Y3Rpb24sIG51bGwpJywgZmFsc2UpOwordGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1
cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCB7fSknLCB0cnVlKTsKK3Rlc3QoJ25hdmlnYXRv
ci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgb2JqZWN0VGhy
b3dpbmdFeGNlcHRpb24pJywgdHJ1ZSk7Cit0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0
Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIGVtcHR5RnVuY3Rpb24pJywgZmFsc2UpOwor
dGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0
aW9uLCBNYXRoLmFicyknLCBmYWxzZSk7Cit0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0
Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIHRydWUpJywgdHJ1ZSk7Cit0ZXN0KCduYXZp
Z2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIDQyKScs
IHRydWUpOwordGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihl
bXB0eUZ1bmN0aW9uLCAic3RyaW5nIiknLCB0cnVlKTsKKwordGVzdCgnbmF2aWdhdG9yLmdlb2xv
Y2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCB1bmRlZmluZWQsIHVuZGVm
aW5lZCknLCBmYWxzZSk7Cit0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBv
c2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwgbnVsbCknLCBmYWxzZSk7Cit0ZXN0KCdu
YXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVu
ZGVmaW5lZCwge30pJywgZmFsc2UpOwordGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1
cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCB1bmRlZmluZWQsIG9iamVjdFRocm93aW5nRXhj
ZXB0aW9uKScsIHRydWUsICdFcnJvcjogZW5hYmxlSGlnaEFjY3VyYWN5IGdldHRlciBleGNlcHRp
b24nKTsKK3Rlc3QoJ25hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1w
dHlGdW5jdGlvbiwgdW5kZWZpbmVkLCBlbXB0eUZ1bmN0aW9uKScsIGZhbHNlKTsKK3Rlc3QoJ25h
dmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgdW5k
ZWZpbmVkLCB0cnVlKScsIGZhbHNlKTsKK3Rlc3QoJ25hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRD
dXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgdW5kZWZpbmVkLCA0MiknLCBmYWxzZSk7Cit0
ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rp
b24sIHVuZGVmaW5lZCwgInN0cmluZyIpJywgZmFsc2UpOworCit0ZXN0KCduYXZpZ2F0b3IuZ2Vv
bG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwge2R1
bW15UHJvcGVydHk6dW5kZWZpbmVkfSknLCBmYWxzZSk7Cit0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9j
YXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwge2R1bW15
UHJvcGVydHk6bnVsbH0pJywgZmFsc2UpOwordGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdl
dEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCB1bmRlZmluZWQsIHtkdW1teVByb3BlcnR5
Ont9fSknLCBmYWxzZSk7Cit0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBv
c2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwge2R1bW15UHJvcGVydHk6b2JqZWN0VGhy
b3dpbmdFeGNlcHRpb259KScsIGZhbHNlKTsKK3Rlc3QoJ25hdmlnYXRvci5nZW9sb2NhdGlvbi5n
ZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgdW5kZWZpbmVkLCB7ZHVtbXlQcm9wZXJ0
eTplbXB0eUZ1bmN0aW9ufSknLCBmYWxzZSk7Cit0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24u
Z2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwge2R1bW15UHJvcGVy
dHk6dHJ1ZX0pJywgZmFsc2UpOwordGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJl
bnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCB1bmRlZmluZWQsIHtkdW1teVByb3BlcnR5OjQyfSkn
LCBmYWxzZSk7Cit0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9u
KGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwge2R1bW15UHJvcGVydHk6InN0cmluZyJ9KScsIGZh
bHNlKTsKKwordGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihl
bXB0eUZ1bmN0aW9uLCB1bmRlZmluZWQsIHtlbmFibGVIaWdoQWNjdXJhY3k6dW5kZWZpbmVkfSkn
LCBmYWxzZSk7Cit0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9u
KGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwge2VuYWJsZUhpZ2hBY2N1cmFjeTpudWxsfSknLCBm
YWxzZSk7Cit0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVt
cHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwge2VuYWJsZUhpZ2hBY2N1cmFjeTp7fX0pJywgZmFsc2Up
OwordGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1
bmN0aW9uLCB1bmRlZmluZWQsIHtlbmFibGVIaWdoQWNjdXJhY3k6b2JqZWN0VGhyb3dpbmdFeGNl
cHRpb259KScsIGZhbHNlKTsKK3Rlc3QoJ25hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50
UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgdW5kZWZpbmVkLCB7ZW5hYmxlSGlnaEFjY3VyYWN5OmVt
cHR5RnVuY3Rpb259KScsIGZhbHNlKTsKK3Rlc3QoJ25hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRD
dXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgdW5kZWZpbmVkLCB7ZW5hYmxlSGlnaEFjY3Vy
YWN5OnRydWV9KScsIGZhbHNlKTsKK3Rlc3QoJ25hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJy
ZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgdW5kZWZpbmVkLCB7ZW5hYmxlSGlnaEFjY3VyYWN5
OjQyfSknLCBmYWxzZSk7Cit0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBv
c2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwge2VuYWJsZUhpZ2hBY2N1cmFjeToic3Ry
aW5nIn0pJywgZmFsc2UpOworCit0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVu
dFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwge21heGltdW1BZ2U6dW5kZWZpbmVk
fSknLCBmYWxzZSk7Cit0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0
aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwge21heGltdW1BZ2U6bnVsbH0pJywgZmFsc2Up
OwordGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1
bmN0aW9uLCB1bmRlZmluZWQsIHttYXhpbXVtQWdlOnt9fSknLCBmYWxzZSk7Cit0ZXN0KCduYXZp
Z2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVm
aW5lZCwge21heGltdW1BZ2U6b2JqZWN0VGhyb3dpbmdFeGNlcHRpb259KScsIHRydWUsICdFcnJv
cjogdmFsdWVPZiB0aHJldyBleGNlcHRpb24nKTsKK3Rlc3QoJ25hdmlnYXRvci5nZW9sb2NhdGlv
bi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgdW5kZWZpbmVkLCB7bWF4aW11bUFn
ZTplbXB0eUZ1bmN0aW9ufSknLCBmYWxzZSk7Cit0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24u
Z2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwge21heGltdW1BZ2U6
dHJ1ZX0pJywgZmFsc2UpOwordGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQ
b3NpdGlvbihlbXB0eUZ1bmN0aW9uLCB1bmRlZmluZWQsIHttYXhpbXVtQWdlOjQyfSknLCBmYWxz
ZSk7Cit0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5
RnVuY3Rpb24sIHVuZGVmaW5lZCwge21heGltdW1BZ2U6InN0cmluZyJ9KScsIGZhbHNlKTsKKwor
dGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0
aW9uLCB1bmRlZmluZWQsIHt0aW1lb3V0OnVuZGVmaW5lZH0pJywgZmFsc2UpOwordGVzdCgnbmF2
aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCB1bmRl
ZmluZWQsIHt0aW1lb3V0Om51bGx9KScsIGZhbHNlKTsKK3Rlc3QoJ25hdmlnYXRvci5nZW9sb2Nh
dGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgdW5kZWZpbmVkLCB7dGltZW91
dDp7fX0pJywgZmFsc2UpOwordGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQ
b3NpdGlvbihlbXB0eUZ1bmN0aW9uLCB1bmRlZmluZWQsIHt0aW1lb3V0Om9iamVjdFRocm93aW5n
RXhjZXB0aW9ufSknLCB0cnVlLCAnRXJyb3I6IHZhbHVlT2YgdGhyZXcgZXhjZXB0aW9uJyk7Cit0
ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rp
b24sIHVuZGVmaW5lZCwge3RpbWVvdXQ6ZW1wdHlGdW5jdGlvbn0pJywgZmFsc2UpOwordGVzdCgn
bmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCB1
bmRlZmluZWQsIHt0aW1lb3V0OnRydWV9KScsIGZhbHNlKTsKK3Rlc3QoJ25hdmlnYXRvci5nZW9s
b2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgdW5kZWZpbmVkLCB7dGlt
ZW91dDo0Mn0pJywgZmFsc2UpOwordGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJl
bnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCB1bmRlZmluZWQsIHt0aW1lb3V0OiJzdHJpbmcifSkn
LCBmYWxzZSk7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCkluZGV4OiBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9ndGsvZmFzdC9kb20vR2VvbG9jYXRpb24vYXJndW1lbnQtdHlwZXMt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9mYXN0
L2RvbS9HZW9sb2NhdGlvbi9hcmd1bWVudC10eXBlcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvZmFzdC9kb20vR2VvbG9jYXRpb24vYXJndW1l
bnQtdHlwZXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY4IEBACitUZXN0
cyB0aGUgYWNjZXB0YWJsZSB0eXBlcyBmb3IgYXJndW1lbnRzIHRvIEdlb2xvY2F0aW9uIG1ldGhv
ZHMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5hdmlnYXRvci5nZW9s
b2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFRZUEVf
TUlTTUFUQ0hfRVJSOiBET00gRXhjZXB0aW9uIDE3LgorUEFTUyBuYXZpZ2F0b3IuZ2VvbG9jYXRp
b24uZ2V0Q3VycmVudFBvc2l0aW9uKHVuZGVmaW5lZCkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBU
WVBFX01JU01BVENIX0VSUjogRE9NIEV4Y2VwdGlvbiAxNy4KK1BBU1MgbmF2aWdhdG9yLmdlb2xv
Y2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihudWxsKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFRZ
UEVfTUlTTUFUQ0hfRVJSOiBET00gRXhjZXB0aW9uIDE3LgorUEFTUyBuYXZpZ2F0b3IuZ2VvbG9j
YXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKHt9KSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFRZUEVf
TUlTTUFUQ0hfRVJSOiBET00gRXhjZXB0aW9uIDE3LgorUEFTUyBuYXZpZ2F0b3IuZ2VvbG9jYXRp
b24uZ2V0Q3VycmVudFBvc2l0aW9uKG9iamVjdFRocm93aW5nRXhjZXB0aW9uKSB0aHJldyBleGNl
cHRpb24gRXJyb3I6IFRZUEVfTUlTTUFUQ0hfRVJSOiBET00gRXhjZXB0aW9uIDE3LgorUEFTUyBu
YXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24pIGRp
ZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3Vy
cmVudFBvc2l0aW9uKE1hdGguYWJzKSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgbmF2
aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbih0cnVlKSB0aHJldyBleGNlcHRp
b24gRXJyb3I6IFRZUEVfTUlTTUFUQ0hfRVJSOiBET00gRXhjZXB0aW9uIDE3LgorUEFTUyBuYXZp
Z2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKDQyKSB0aHJldyBleGNlcHRpb24g
RXJyb3I6IFRZUEVfTUlTTUFUQ0hfRVJSOiBET00gRXhjZXB0aW9uIDE3LgorUEFTUyBuYXZpZ2F0
b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKCJzdHJpbmciKSB0aHJldyBleGNlcHRp
b24gRXJyb3I6IFRZUEVfTUlTTUFUQ0hfRVJSOiBET00gRXhjZXB0aW9uIDE3LgorUEFTUyBuYXZp
Z2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVm
aW5lZCkgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIG5hdmlnYXRvci5nZW9sb2NhdGlv
bi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgbnVsbCkgZGlkIG5vdCB0aHJvdyBl
eGNlcHRpb24uCitQQVNTIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24o
ZW1wdHlGdW5jdGlvbiwge30pIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogVFlQRV9NSVNNQVRDSF9F
UlI6IERPTSBFeGNlcHRpb24gMTcuCitQQVNTIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJy
ZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgb2JqZWN0VGhyb3dpbmdFeGNlcHRpb24pIHRocmV3
IGV4Y2VwdGlvbiBFcnJvcjogVFlQRV9NSVNNQVRDSF9FUlI6IERPTSBFeGNlcHRpb24gMTcuCitQ
QVNTIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlv
biwgZW1wdHlGdW5jdGlvbikgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIG5hdmlnYXRv
ci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgTWF0aC5hYnMp
IGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0
Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIHRydWUpIHRocmV3IGV4Y2VwdGlvbiBFcnJv
cjogVFlQRV9NSVNNQVRDSF9FUlI6IERPTSBFeGNlcHRpb24gMTcuCitQQVNTIG5hdmlnYXRvci5n
ZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgNDIpIHRocmV3IGV4
Y2VwdGlvbiBFcnJvcjogVFlQRV9NSVNNQVRDSF9FUlI6IERPTSBFeGNlcHRpb24gMTcuCitQQVNT
IG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwg
InN0cmluZyIpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogVFlQRV9NSVNNQVRDSF9FUlI6IERPTSBF
eGNlcHRpb24gMTcuCitQQVNTIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRp
b24oZW1wdHlGdW5jdGlvbiwgdW5kZWZpbmVkLCB1bmRlZmluZWQpIGRpZCBub3QgdGhyb3cgZXhj
ZXB0aW9uLgorUEFTUyBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVt
cHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwgbnVsbCkgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQ
QVNTIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlv
biwgdW5kZWZpbmVkLCB7fSkgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIG5hdmlnYXRv
ci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgdW5kZWZpbmVk
LCBvYmplY3RUaHJvd2luZ0V4Y2VwdGlvbikgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBlbmFibGVI
aWdoQWNjdXJhY3kgZ2V0dGVyIGV4Y2VwdGlvbi4KK1BBU1MgbmF2aWdhdG9yLmdlb2xvY2F0aW9u
LmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCB1bmRlZmluZWQsIGVtcHR5RnVuY3Rp
b24pIGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24u
Z2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwgdHJ1ZSkgZGlkIG5v
dCB0aHJvdyBleGNlcHRpb24uCitQQVNTIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50
UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgdW5kZWZpbmVkLCA0MikgZGlkIG5vdCB0aHJvdyBleGNl
cHRpb24uCitQQVNTIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1w
dHlGdW5jdGlvbiwgdW5kZWZpbmVkLCAic3RyaW5nIikgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24u
CitQQVNTIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5j
dGlvbiwgdW5kZWZpbmVkLCB7ZHVtbXlQcm9wZXJ0eTp1bmRlZmluZWR9KSBkaWQgbm90IHRocm93
IGV4Y2VwdGlvbi4KK1BBU1MgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlv
bihlbXB0eUZ1bmN0aW9uLCB1bmRlZmluZWQsIHtkdW1teVByb3BlcnR5Om51bGx9KSBkaWQgbm90
IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQ
b3NpdGlvbihlbXB0eUZ1bmN0aW9uLCB1bmRlZmluZWQsIHtkdW1teVByb3BlcnR5Ont9fSkgZGlk
IG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJy
ZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgdW5kZWZpbmVkLCB7ZHVtbXlQcm9wZXJ0eTpvYmpl
Y3RUaHJvd2luZ0V4Y2VwdGlvbn0pIGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBuYXZp
Z2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVm
aW5lZCwge2R1bW15UHJvcGVydHk6ZW1wdHlGdW5jdGlvbn0pIGRpZCBub3QgdGhyb3cgZXhjZXB0
aW9uLgorUEFTUyBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5
RnVuY3Rpb24sIHVuZGVmaW5lZCwge2R1bW15UHJvcGVydHk6dHJ1ZX0pIGRpZCBub3QgdGhyb3cg
ZXhjZXB0aW9uLgorUEFTUyBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9u
KGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwge2R1bW15UHJvcGVydHk6NDJ9KSBkaWQgbm90IHRo
cm93IGV4Y2VwdGlvbi4KK1BBU1MgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3Np
dGlvbihlbXB0eUZ1bmN0aW9uLCB1bmRlZmluZWQsIHtkdW1teVByb3BlcnR5OiJzdHJpbmcifSkg
ZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRD
dXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgdW5kZWZpbmVkLCB7ZW5hYmxlSGlnaEFjY3Vy
YWN5OnVuZGVmaW5lZH0pIGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBuYXZpZ2F0b3Iu
Z2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwg
e2VuYWJsZUhpZ2hBY2N1cmFjeTpudWxsfSkgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNT
IG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwg
dW5kZWZpbmVkLCB7ZW5hYmxlSGlnaEFjY3VyYWN5Ont9fSkgZGlkIG5vdCB0aHJvdyBleGNlcHRp
b24uCitQQVNTIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlG
dW5jdGlvbiwgdW5kZWZpbmVkLCB7ZW5hYmxlSGlnaEFjY3VyYWN5Om9iamVjdFRocm93aW5nRXhj
ZXB0aW9ufSkgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIG5hdmlnYXRvci5nZW9sb2Nh
dGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgdW5kZWZpbmVkLCB7ZW5hYmxl
SGlnaEFjY3VyYWN5OmVtcHR5RnVuY3Rpb259KSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BB
U1MgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9u
LCB1bmRlZmluZWQsIHtlbmFibGVIaWdoQWNjdXJhY3k6dHJ1ZX0pIGRpZCBub3QgdGhyb3cgZXhj
ZXB0aW9uLgorUEFTUyBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVt
cHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwge2VuYWJsZUhpZ2hBY2N1cmFjeTo0Mn0pIGRpZCBub3Qg
dGhyb3cgZXhjZXB0aW9uLgorUEFTUyBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBv
c2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwge2VuYWJsZUhpZ2hBY2N1cmFjeToic3Ry
aW5nIn0pIGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBuYXZpZ2F0b3IuZ2VvbG9jYXRp
b24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwge21heGltdW1B
Z2U6dW5kZWZpbmVkfSkgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIG5hdmlnYXRvci5n
ZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgdW5kZWZpbmVkLCB7
bWF4aW11bUFnZTpudWxsfSkgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIG5hdmlnYXRv
ci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgdW5kZWZpbmVk
LCB7bWF4aW11bUFnZTp7fX0pIGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBuYXZpZ2F0
b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5l
ZCwge21heGltdW1BZ2U6b2JqZWN0VGhyb3dpbmdFeGNlcHRpb259KSB0aHJldyBleGNlcHRpb24g
RXJyb3I6IHZhbHVlT2YgdGhyZXcgZXhjZXB0aW9uLgorUEFTUyBuYXZpZ2F0b3IuZ2VvbG9jYXRp
b24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwge21heGltdW1B
Z2U6ZW1wdHlGdW5jdGlvbn0pIGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBuYXZpZ2F0
b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5l
ZCwge21heGltdW1BZ2U6dHJ1ZX0pIGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBuYXZp
Z2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVm
aW5lZCwge21heGltdW1BZ2U6NDJ9KSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgbmF2
aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCB1bmRl
ZmluZWQsIHttYXhpbXVtQWdlOiJzdHJpbmcifSkgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQ
QVNTIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlv
biwgdW5kZWZpbmVkLCB7dGltZW91dDp1bmRlZmluZWR9KSBkaWQgbm90IHRocm93IGV4Y2VwdGlv
bi4KK1BBU1MgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1
bmN0aW9uLCB1bmRlZmluZWQsIHt0aW1lb3V0Om51bGx9KSBkaWQgbm90IHRocm93IGV4Y2VwdGlv
bi4KK1BBU1MgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1
bmN0aW9uLCB1bmRlZmluZWQsIHt0aW1lb3V0Ont9fSkgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24u
CitQQVNTIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5j
dGlvbiwgdW5kZWZpbmVkLCB7dGltZW91dDpvYmplY3RUaHJvd2luZ0V4Y2VwdGlvbn0pIHRocmV3
IGV4Y2VwdGlvbiBFcnJvcjogdmFsdWVPZiB0aHJldyBleGNlcHRpb24uCitQQVNTIG5hdmlnYXRv
ci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgdW5kZWZpbmVk
LCB7dGltZW91dDplbXB0eUZ1bmN0aW9ufSkgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNT
IG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwg
dW5kZWZpbmVkLCB7dGltZW91dDp0cnVlfSkgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNT
IG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwg
dW5kZWZpbmVkLCB7dGltZW91dDo0Mn0pIGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBu
YXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVu
ZGVmaW5lZCwge3RpbWVvdXQ6InN0cmluZyJ9KSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCg==
</data>
<flag name="review"
          id="18815"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34676</attachid>
            <date>2009-08-12 10:50:10 -0700</date>
            <delta_ts>2009-08-13 16:15:21 -0700</delta_ts>
            <desc>Patch 5 for bug 27254</desc>
            <filename>setPositionOptionsDefaults5.txt</filename>
            <type>text/plain</type>
            <size>29896</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NzAwNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMDktMDgtMTAgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEJ1ZyAyNzI1NCA6IEdlb2xvY2F0aW9uIFBvc2l0aW9uT3B0aW9ucyBkb2VzIG5vdCB1c2UgY29y
cmVjdCBkZWZhdWx0IHZhbHVlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTI3MjU0CisKKyAgICAgICAgU2V0cyB0aGUgY29ycmVjdCBkZWZhdWx0IHZh
bHVlcyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlIFBvc2l0aW9uT3B0aW9ucyBvYmplY3QKKyAg
ICAgICAgcGFzc2VkIHRvIEdlb2xvY2F0aW9uIG1ldGhvZHMuIFNlZSBodHRwOi8vd3d3LnczLm9y
Zy9UUi9nZW9sb2NhdGlvbi1BUEkvLgorCisgICAgICAgIEFsc28gYWRkcyBjaGVja2luZyB0byB0
aHJvdyBhbiBleGNlcHRpb24gaWYgYXJndW1lbnRzIG9mIHRoZSBpbmNvcnJlY3QgdHlwZSBhcmUK
KyAgICAgICAgcGFzc2VkIHRvIEdlb2xvY2F0aW9uIG1ldGhvZHMuIEFkZHMgYSBsYXlvdXQgdGVz
dCB0byB0ZXN0IHRoaXMuIFRoaXMgdGVzdCBzaG91bGQKKyAgICAgICAgcGFzcyBvbiBhbGwgcGxh
dGZvcm1zIHdoZXJlIEdlb2xvY2F0aW9uIGlzIGltcGxlbWVudGVkLgorCisgICAgICAgIFRlc3Q6
IGZhc3QvZG9tL0dlb2xvY2F0aW9uL2FyZ3VtZW50LXR5cGVzLmh0bWwKKworICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTR2VvbG9jYXRpb25DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3Jl
YXRlUG9zaXRpb25DYWxsYmFjayk6IEFkZGVkLiBDcmVhdGVzIHRoZSBjYWxsYmFjay4KKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZVBvc2l0aW9uRXJyb3JDYWxsYmFjayk6IEFkZGVkLiBDcmVhdGVz
IHRoZSBjYWxiYWNrLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlUG9zaXRpb25PcHRpb25zKTog
QWRkZWQuIENyZWF0ZXMgdGhlIFBvc2l0aW9uT3B0aW9ucyBvYmplY3QsIHNldHRpbmcgZGVmYXVs
dHMgd2hlcmUgcmVxdWlyZWQuCisgICAgICAgIChXZWJDb3JlOjpKU0dlb2xvY2F0aW9uOjpnZXRD
dXJyZW50UG9zaXRpb24pOiBNb2RpZmllZC4gTm93IHVzZXMgYWJvdmUgaGVscGVyIGZ1bmN0aW9u
cy4KKyAgICAgICAgKFdlYkNvcmU6OkpTR2VvbG9jYXRpb246OndhdGNoUG9zaXRpb24pOiBNb2Rp
ZmllZC4gTm93IHVzZXMgYWJvdmUgaGVscGVyIGZ1bmN0aW9ucy4KKyAgICAgICAgKiBwYWdlL0dl
b2xvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpHZW9Ob3RpZmll
cjo6R2VvTm90aWZpZXIpOiBNb2RpZmllZC4gQXNzZXJ0cyB0aGF0IFBvc2l0aW9uT3B0aW9ucyBv
YmplY3QgaXMgcHJlc2VudC4KKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpHZW9Ob3Rp
Zmllcjo6c3RhcnRUaW1lcik6IE1vZGlmaWVkLiBPbmx5IHN0YXJ0cyB0aW1lciBpZiB0aW1lb3V0
IGhhcyBiZWVuIHNldC4KKyAgICAgICAgKiBwYWdlL1Bvc2l0aW9uT3B0aW9ucy5oOgorICAgICAg
ICAoV2ViQ29yZTo6UG9zaXRpb25PcHRpb25zOjpjcmVhdGUpOiBNb2RpZmllZC4gQ3JlYXRlcyBv
YmplY3Qgd2l0aCBkZWZhdWx0IHZhbHVlcy4KKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uT3B0
aW9uczo6dGltZW91dCk6IE1vZGlmaWVkLiBVc2VzIGNvcnJlY3QgdHlwZS4KKyAgICAgICAgKFdl
YkNvcmU6OlBvc2l0aW9uT3B0aW9uczo6aGFzVGltZW91dCk6IEFkZGVkLiBEZXRlcm1pbmVzIHdo
ZXRoZXIgYSB0aW1lb3V0IGhhcyBiZWVuIHNldC4KKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9u
T3B0aW9uczo6c2V0VGltZW91dCk6IE1vZGlmaWVkLiBVc2VzIGNvcnJlY3QgdHlwZS4KKyAgICAg
ICAgKFdlYkNvcmU6OlBvc2l0aW9uT3B0aW9uczo6bWF4aW11bUFnZSk6IE1vZGlmaWVkLiBVc2Vz
IGNvcnJlY3QgdHlwZS4KKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uT3B0aW9uczo6c2V0TWF4
aW11bUFnZSk6IE1vZGlmaWVkLiBVc2VzIGNvcnJlY3QgdHlwZS4KKyAgICAgICAgKFdlYkNvcmU6
OlBvc2l0aW9uT3B0aW9uczo6UG9zaXRpb25PcHRpb25zKTogTW9kaWZpZWQuIENyZWF0ZXMgb2Jq
ZWN0IHdpdGggZGVmYXVsdCB2YWx1ZXMuCisKIDIwMDktMDgtMTAgIEtlbm5ldGggUm9oZGUgQ2hy
aXN0aWFuc2VuICA8a2VubmV0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNp
bW9uIEhhdXNtYW5uLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0dlb2xvY2F0aW9uQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTR2VvbG9jYXRpb25D
dXN0b20uY3BwCShyZXZpc2lvbiA0NzAwNCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNHZW9s
b2NhdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwLDcgKzIwLDcgQEAKICAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgpAQCAtMzYsMTEyICszNiwxMjkg
QEAKICNpbmNsdWRlICJQb3NpdGlvbk9wdGlvbnMuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsK
K3VzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIFBh
c3NSZWZQdHI8UG9zaXRpb25PcHRpb25zPiBjcmVhdGVQb3NpdGlvbk9wdGlvbnMoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIHZhbHVlKQorc3RhdGljIFBhc3NSZWZQdHI8UG9zaXRpb25DYWxsYmFj
az4gY3JlYXRlUG9zaXRpb25DYWxsYmFjayhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUp
CiB7Ci0gICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKQorICAgIC8vIFRoZSBzcGVjIHNwZWNpZmll
cyAnRnVuY3Rpb25Pbmx5JyBmb3IgdGhpcyBvYmplY3QuCisgICAgaWYgKCF2YWx1ZS5pc09iamVj
dCgmSW50ZXJuYWxGdW5jdGlvbjo6aW5mbykpIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKICAgICAgICAgcmV0dXJuIDA7CisgICAgfQogCiAgICAg
SlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KHZhbHVlKTsKKyAgICBGcmFtZSogZnJhbWUgPSB0
b0pTRE9NV2luZG93KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPmltcGwoKS0+ZnJhbWUo
KTsKKyAgICByZXR1cm4gSlNDdXN0b21Qb3NpdGlvbkNhbGxiYWNrOjpjcmVhdGUob2JqZWN0LCBm
cmFtZSk7Cit9CiAKLSAgICBKU1ZhbHVlIGVuYWJsZUhpZ2hBY2N1cmFjeVZhbHVlID0gb2JqZWN0
LT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAiZW5hYmxlSGlnaEFjY3VyYWN5IikpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKK3N0YXRpYyBQYXNzUmVmUHRyPFBvc2l0aW9uRXJy
b3JDYWxsYmFjaz4gY3JlYXRlUG9zaXRpb25FcnJvckNhbGxiYWNrKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICAvLyBBcmd1bWVudCBpcyBvcHRpb25hbCAoaGVuY2UgdW5k
ZWZpbmVkIGlzIGFsbG93ZWQpLCBhbmQgbnVsbCBpcyBhbGxvd2VkLgorICAgIGlmICh2YWx1ZS5p
c1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBib29sIGVuYWJsZUhp
Z2hBY2N1cmFjeSA9IGVuYWJsZUhpZ2hBY2N1cmFjeVZhbHVlLnRvQm9vbGVhbihleGVjKTsKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisKKyAgICAvLyBUaGUgc3BlYyBzcGVjaWZpZXMg
J0Z1bmN0aW9uT25seScgZm9yIHRoaXMgb2JqZWN0LgorICAgIGlmICghdmFsdWUuaXNPYmplY3Qo
JkludGVybmFsRnVuY3Rpb246OmluZm8pKSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVj
LCBUWVBFX01JU01BVENIX0VSUik7CiAgICAgICAgIHJldHVybiAwOworICAgIH0KIAotICAgIEpT
VmFsdWUgdGltZW91dFZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAi
dGltZW91dCIpKTsKKyAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QodmFsdWUpOworICAg
IEZyYW1lKiBmcmFtZSA9IHRvSlNET01XaW5kb3coZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
KS0+aW1wbCgpLT5mcmFtZSgpOworICAgIHJldHVybiBKU0N1c3RvbVBvc2l0aW9uRXJyb3JDYWxs
YmFjazo6Y3JlYXRlKG9iamVjdCwgZnJhbWUpOworfQorCitzdGF0aWMgUGFzc1JlZlB0cjxQb3Np
dGlvbk9wdGlvbnM+IGNyZWF0ZVBvc2l0aW9uT3B0aW9ucyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgdmFsdWUpCit7CisgICAgLy8gQ3JlYXRlIGRlZmF1bHQgb3B0aW9ucy4KKyAgICBSZWZQdHI8
UG9zaXRpb25PcHRpb25zPiBvcHRpb25zID0gUG9zaXRpb25PcHRpb25zOjpjcmVhdGUoKTsKKwor
ICAgIC8vIEFyZ3VtZW50IGlzIG9wdGlvbmFsIChoZW5jZSB1bmRlZmluZWQgaXMgYWxsb3dlZCks
IGFuZCBudWxsIGlzIGFsbG93ZWQuCisgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkp
IHsKKyAgICAgICAgLy8gVXNlIGRlZmF1bHQgb3B0aW9ucy4KKyAgICAgICAgcmV0dXJuIG9wdGlv
bnMucmVsZWFzZSgpOworICAgIH0KKworICAgIC8vIEdpdmVuIHRoZSBhYm92ZSB0ZXN0LCB0aGlz
IHdpbGwgYWx3YXlzIHlpZWxkIGFuIG9iamVjdC4KKyAgICBKU09iamVjdCogb2JqZWN0ID0gdmFs
dWUudG9PYmplY3QoZXhlYyk7CisKKyAgICAvLyBGb3IgYWxsIHRocmVlIHByb3BlcnRpZXMsIHdl
IGFwcGx5IHRoZSBmb2xsb3dpbmcgLi4uCisgICAgLy8gLSBJZiB0aGUgZ2V0dGVyIG9yIHRoZSBw
cm9wZXJ0eSdzIHZhbHVlT2YgbWV0aG9kIHRocm93cyBhbiBleGNlcHRpb24sIHdlCisgICAgLy8g
ICBxdWl0IHNvIGFzIG5vdCB0byByaXNrIG92ZXJ3cml0aW5nIHRoZSBleGNlcHRpb24uCisgICAg
Ly8gLSBJZiB0aGUgdmFsdWUgaXMgYWJzZW50IG9yIHVuZGVmaW5lZCwgd2UgZG9uJ3Qgb3ZlcnJp
ZGUgdGhlIGRlZmF1bHQuCisgICAgSlNWYWx1ZSBlbmFibGVIaWdoQWNjdXJhY3lWYWx1ZSA9IG9i
amVjdC0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgImVuYWJsZUhpZ2hBY2N1cmFjeSIpKTsK
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHVu
c2lnbmVkIHRpbWVvdXQgPSB0aW1lb3V0VmFsdWUudG9VSW50MzIoZXhlYyk7CisgICAgaWYgKCFl
bmFibGVIaWdoQWNjdXJhY3lWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgIG9wdGlvbnMt
PnNldEVuYWJsZUhpZ2hBY2N1cmFjeShlbmFibGVIaWdoQWNjdXJhY3lWYWx1ZS50b0Jvb2xlYW4o
ZXhlYykpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisKKyAgICBKU1ZhbHVlIHRpbWVvdXRWYWx1ZSA9IG9iamVjdC0+Z2V0
KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgInRpbWVvdXQiKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIXRpbWVvdXRWYWx1ZS5pc1Vu
ZGVmaW5lZCgpKSB7CisgICAgICAgIC8vIFdyYXAgdG8gaW50MzIgYW5kIGZvcmNlIG5vbi1uZWdh
dGl2ZSB0byBtYXRjaCBiZWhhdmlvciBvZiB3aW5kb3cuc2V0VGltZW91dC4KKyAgICAgICAgb3B0
aW9ucy0+c2V0VGltZW91dChtYXgoMCwgdGltZW91dFZhbHVlLnRvSW50MzIoZXhlYykpKTsKKyAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQogCiAgICAgSlNWYWx1ZSBtYXhpbXVtQWdlVmFsdWUgPSBvYmplY3QtPmdldChleGVjLCBJ
ZGVudGlmaWVyKGV4ZWMsICJtYXhpbXVtQWdlIikpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgdW5zaWduZWQgbWF4aW11bUFnZSA9IG1heGlt
dW1BZ2VWYWx1ZS50b1VJbnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
Ci0gICAgICAgIHJldHVybiAwOworICAgIGlmICghbWF4aW11bUFnZVZhbHVlLmlzVW5kZWZpbmVk
KCkpIHsKKyAgICAgICAgLy8gV3JhcCB0byBpbnQzMiBhbmQgZm9yY2Ugbm9uLW5lZ2F0aXZlIHRv
IG1hdGNoIGJlaGF2aW9yIG9mIHdpbmRvdy5zZXRUaW1lb3V0LgorICAgICAgICBvcHRpb25zLT5z
ZXRNYXhpbXVtQWdlKG1heCgwLCBtYXhpbXVtQWdlVmFsdWUudG9JbnQzMihleGVjKSkpOworICAg
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CiAKLSAgICByZXR1cm4gUG9zaXRpb25PcHRpb25zOjpjcmVhdGUoZW5hYmxlSGlnaEFjY3Vy
YWN5LCB0aW1lb3V0LCBtYXhpbXVtQWdlKTsKKyAgICByZXR1cm4gb3B0aW9ucy5yZWxlYXNlKCk7
CiB9CiAKIEpTVmFsdWUgSlNHZW9sb2NhdGlvbjo6Z2V0Q3VycmVudFBvc2l0aW9uKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICAvLyBBcmd1bWVudHM6IFBvc2l0
aW9uQ2FsbGJhY2ssIChvcHRpb25hbClQb3NpdGlvbkVycm9yQ2FsbGJhY2ssIChvcHRpb25hbClQ
b3NpdGlvbk9wdGlvbnMKLSAgICBSZWZQdHI8UG9zaXRpb25DYWxsYmFjaz4gcG9zaXRpb25DYWxs
YmFjazsKLSAgICBKU09iamVjdCogb2JqZWN0ID0gYXJncy5hdCgwKS5nZXRPYmplY3QoKTsKKwor
ICAgIFJlZlB0cjxQb3NpdGlvbkNhbGxiYWNrPiBwb3NpdGlvbkNhbGxiYWNrID0gY3JlYXRlUG9z
aXRpb25DYWxsYmFjayhleGVjLCBhcmdzLmF0KDApKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIGlmICghb2JqZWN0KSB7
Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7CisgICAg
QVNTRVJUKHBvc2l0aW9uQ2FsbGJhY2spOworCisgICAgUmVmUHRyPFBvc2l0aW9uRXJyb3JDYWxs
YmFjaz4gcG9zaXRpb25FcnJvckNhbGxiYWNrID0gY3JlYXRlUG9zaXRpb25FcnJvckNhbGxiYWNr
KGV4ZWMsIGFyZ3MuYXQoMSkpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogCi0gICAgaWYgKEZyYW1lKiBmcmFtZSA9
IHRvSlNET01XaW5kb3coZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+aW1wbCgpLT5mcmFt
ZSgpKQotICAgICAgICBwb3NpdGlvbkNhbGxiYWNrID0gSlNDdXN0b21Qb3NpdGlvbkNhbGxiYWNr
OjpjcmVhdGUob2JqZWN0LCBmcmFtZSk7Ci0gICAgCi0gICAgUmVmUHRyPFBvc2l0aW9uRXJyb3JD
YWxsYmFjaz4gcG9zaXRpb25FcnJvckNhbGxiYWNrOwotICAgIGlmICghYXJncy5hdCgxKS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpKSB7Ci0gICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhcmdzLmF0KDEp
LmdldE9iamVjdCgpOwotICAgICAgICBpZiAoIW9iamVjdCkgewotICAgICAgICAgICAgc2V0RE9N
RXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKLSAgICAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IHRv
SlNET01XaW5kb3coZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+aW1wbCgpLT5mcmFtZSgp
KQotICAgICAgICAgICAgcG9zaXRpb25FcnJvckNhbGxiYWNrID0gSlNDdXN0b21Qb3NpdGlvbkVy
cm9yQ2FsbGJhY2s6OmNyZWF0ZShvYmplY3QsIGZyYW1lKTsKLSAgICB9Ci0gICAgCi0gICAgUmVm
UHRyPFBvc2l0aW9uT3B0aW9ucz4gcG9zaXRpb25PcHRpb25zOwotICAgIGlmICghYXJncy5hdCgy
KS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7Ci0gICAgICAgIHBvc2l0aW9uT3B0aW9ucyA9IGNyZWF0
ZVBvc2l0aW9uT3B0aW9ucyhleGVjLCBhcmdzLmF0KDIpKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQor
ICAgIFJlZlB0cjxQb3NpdGlvbk9wdGlvbnM+IHBvc2l0aW9uT3B0aW9ucyA9IGNyZWF0ZVBvc2l0
aW9uT3B0aW9ucyhleGVjLCBhcmdzLmF0KDIpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIEFTU0VSVChwb3NpdGlvbk9w
dGlvbnMpOwogCiAgICAgbV9pbXBsLT5nZXRDdXJyZW50UG9zaXRpb24ocG9zaXRpb25DYWxsYmFj
ay5yZWxlYXNlKCksIHBvc2l0aW9uRXJyb3JDYWxsYmFjay5yZWxlYXNlKCksIHBvc2l0aW9uT3B0
aW9ucy5yZWxlYXNlKCkpOwotICAgIAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCiBK
U1ZhbHVlIEpTR2VvbG9jYXRpb246OndhdGNoUG9zaXRpb24oRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQogewogICAgIC8vIEFyZ3VtZW50czogUG9zaXRpb25DYWxsYmFjaywg
KG9wdGlvbmFsKVBvc2l0aW9uRXJyb3JDYWxsYmFjaywgKG9wdGlvbmFsKVBvc2l0aW9uT3B0aW9u
cwotICAgIFJlZlB0cjxQb3NpdGlvbkNhbGxiYWNrPiBwb3NpdGlvbkNhbGxiYWNrOwotICAgIEpT
T2JqZWN0KiBvYmplY3QgPSBhcmdzLmF0KDApLmdldE9iamVjdCgpOworCisgICAgUmVmUHRyPFBv
c2l0aW9uQ2FsbGJhY2s+IHBvc2l0aW9uQ2FsbGJhY2sgPSBjcmVhdGVQb3NpdGlvbkNhbGxiYWNr
KGV4ZWMsIGFyZ3MuYXQoMCkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgaWYgKCFvYmplY3QpIHsKLSAgICAgICAgc2V0
RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKKyAgICBBU1NFUlQocG9zaXRp
b25DYWxsYmFjayk7CisKKyAgICBSZWZQdHI8UG9zaXRpb25FcnJvckNhbGxiYWNrPiBwb3NpdGlv
bkVycm9yQ2FsbGJhY2sgPSBjcmVhdGVQb3NpdGlvbkVycm9yQ2FsbGJhY2soZXhlYywgYXJncy5h
dCgxKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKEZyYW1lKiBmcmFtZSA9IHRvSlNET01X
aW5kb3coZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+aW1wbCgpLT5mcmFtZSgpKQotICAg
ICAgICBwb3NpdGlvbkNhbGxiYWNrID0gSlNDdXN0b21Qb3NpdGlvbkNhbGxiYWNrOjpjcmVhdGUo
b2JqZWN0LCBmcmFtZSk7Ci0gICAgCi0gICAgUmVmUHRyPFBvc2l0aW9uRXJyb3JDYWxsYmFjaz4g
cG9zaXRpb25FcnJvckNhbGxiYWNrOwotICAgIGlmICghYXJncy5hdCgxKS5pc1VuZGVmaW5lZE9y
TnVsbCgpKSB7Ci0gICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhcmdzLmF0KDEpLmdldE9iamVj
dCgpOwotICAgICAgICBpZiAoIW9iamVjdCkgewotICAgICAgICAgICAgc2V0RE9NRXhjZXB0aW9u
KGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKLSAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gdG9K
U0RPTVdpbmRvdyhleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5pbXBsKCktPmZyYW1lKCkp
Ci0gICAgICAgICAgICBwb3NpdGlvbkVycm9yQ2FsbGJhY2sgPSBKU0N1c3RvbVBvc2l0aW9uRXJy
b3JDYWxsYmFjazo6Y3JlYXRlKG9iamVjdCwgZnJhbWUpOwotICAgIH0KLSAgICAKLSAgICBSZWZQ
dHI8UG9zaXRpb25PcHRpb25zPiBwb3NpdGlvbk9wdGlvbnM7Ci0gICAgaWYgKCFhcmdzLmF0KDIp
LmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKLSAgICAgICAgcG9zaXRpb25PcHRpb25zID0gY3JlYXRl
UG9zaXRpb25PcHRpb25zKGV4ZWMsIGFyZ3MuYXQoMikpOwotICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CisK
KyAgICBSZWZQdHI8UG9zaXRpb25PcHRpb25zPiBwb3NpdGlvbk9wdGlvbnMgPSBjcmVhdGVQb3Np
dGlvbk9wdGlvbnMoZXhlYywgYXJncy5hdCgyKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBBU1NFUlQocG9zaXRpb25P
cHRpb25zKTsKIAogICAgIGludCB3YXRjaElEID0gbV9pbXBsLT53YXRjaFBvc2l0aW9uKHBvc2l0
aW9uQ2FsbGJhY2sucmVsZWFzZSgpLCBwb3NpdGlvbkVycm9yQ2FsbGJhY2sucmVsZWFzZSgpLCBw
b3NpdGlvbk9wdGlvbnMucmVsZWFzZSgpKTsKICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgd2F0
Y2hJRCk7CkluZGV4OiBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGFnZS9HZW9sb2NhdGlvbi5jcHAJKHJldmlzaW9uIDQ3MDA0KQorKysgV2ViQ29y
ZS9wYWdlL0dlb2xvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTEgKzQxLDE1IEBA
IEdlb2xvY2F0aW9uOjpHZW9Ob3RpZmllcjo6R2VvTm90aWZpZXIoUGEKICAgICAsIG1fb3B0aW9u
cyhvcHRpb25zKQogICAgICwgbV90aW1lcih0aGlzLCAmR2VvbG9jYXRpb246Okdlb05vdGlmaWVy
Ojp0aW1lckZpcmVkKQogeworICAgIEFTU0VSVChtX3N1Y2Nlc3NDYWxsYmFjayk7CisgICAgLy8g
SWYgbm8gb3B0aW9ucyB3ZXJlIHN1cHBsaWVkIGZyb20gSlMsIHdlIHNob3VsZCBoYXZlIGNyZWF0
ZWQgYSBkZWZhdWx0IHNldAorICAgIC8vIG9mIG9wdGlvbnMgaW4gSlNHZW9sb2NhdGlvbkN1c3Rv
bS5jcHAuCisgICAgQVNTRVJUKG1fb3B0aW9ucyk7CiB9CiAKIHZvaWQgR2VvbG9jYXRpb246Okdl
b05vdGlmaWVyOjpzdGFydFRpbWVyKCkKIHsKLSAgICBpZiAobV9lcnJvckNhbGxiYWNrICYmIG1f
b3B0aW9ucykKKyAgICBpZiAobV9lcnJvckNhbGxiYWNrICYmIG1fb3B0aW9ucy0+aGFzVGltZW91
dCgpKQogICAgICAgICBtX3RpbWVyLnN0YXJ0T25lU2hvdChtX29wdGlvbnMtPnRpbWVvdXQoKSAv
IDEwMDAuMCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGFnZS9Qb3NpdGlvbk9wdGlvbnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvUG9zaXRpb25PcHRpb25zLmgJKHJldmlzaW9uIDQ3MDA0
KQorKysgV2ViQ29yZS9wYWdlL1Bvc2l0aW9uT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MywyNiArMzMsNDEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAogY2xhc3MgUG9zaXRpb25P
cHRpb25zIDogcHVibGljIFJlZkNvdW50ZWQ8UG9zaXRpb25PcHRpb25zPiB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8UG9zaXRpb25PcHRpb25zPiBjcmVhdGUoYm9vbCBoaWdoQWNj
dXJhY3ksIHVuc2lnbmVkIHRpbWVvdXQsIHVuc2lnbmVkIG1heGltdW1BZ2UpIHsgcmV0dXJuIGFk
b3B0UmVmKG5ldyBQb3NpdGlvbk9wdGlvbnMoaGlnaEFjY3VyYWN5LCB0aW1lb3V0LCBtYXhpbXVt
QWdlKSk7IH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxQb3NpdGlvbk9wdGlvbnM+IGNyZWF0ZSgp
IHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBQb3NpdGlvbk9wdGlvbnMoKSk7IH0KIAogICAgIGJvb2wg
ZW5hYmxlSGlnaEFjY3VyYWN5KCkgY29uc3QgeyByZXR1cm4gbV9oaWdoQWNjdXJhY3k7IH0KICAg
ICB2b2lkIHNldEVuYWJsZUhpZ2hBY2N1cmFjeShib29sIGVuYWJsZSkgeyBtX2hpZ2hBY2N1cmFj
eSA9IGVuYWJsZTsgfQotICAgIHVuc2lnbmVkIHRpbWVvdXQoKSBjb25zdCB7IHJldHVybiBtX3Rp
bWVvdXQ7IH0KLSAgICB2b2lkIHNldFRpbWVvdXQodW5zaWduZWQgdCkgeyBtX3RpbWVvdXQgPSB0
OyB9Ci0gICAgdW5zaWduZWQgbWF4aW11bUFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4aW11bUFn
ZTsgfQotICAgIHZvaWQgc2V0TWF4aW11bUFnZSh1bnNpZ25lZCBhKSB7IG1fbWF4aW11bUFnZSA9
IGE7IH0KKyAgICBib29sIGhhc1RpbWVvdXQoKSB7IHJldHVybiBtX2hhc1RpbWVvdXQ7IH0KKyAg
ICBpbnQgdGltZW91dCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaGFzVGltZW91dCgp
KTsKKyAgICAgICAgcmV0dXJuIG1fdGltZW91dDsKKyAgICB9CisgICAgdm9pZCBzZXRUaW1lb3V0
KGludCB0aW1lb3V0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHRpbWVvdXQgPj0gMCk7CisgICAg
ICAgIG1faGFzVGltZW91dCA9IHRydWU7CisgICAgICAgIG1fdGltZW91dCA9IHRpbWVvdXQ7Cisg
ICAgfQorICAgIGludCBtYXhpbXVtQWdlKCkgY29uc3QgeyByZXR1cm4gbV9tYXhpbXVtQWdlOyB9
CisgICAgdm9pZCBzZXRNYXhpbXVtQWdlKGludCBhZ2UpCisgICAgeworICAgICAgICBBU1NFUlQo
YWdlID49IDApOworICAgICAgICBtX21heGltdW1BZ2UgPSBhZ2U7CisgICAgfQogICAgIAogcHJp
dmF0ZToKLSAgICBQb3NpdGlvbk9wdGlvbnMoYm9vbCBoaWdoQWNjdXJhY3ksIHVuc2lnbmVkIHRp
bWVvdXQsIHVuc2lnbmVkIG1heGltdW1BZ2UpCi0gICAgICAgIDogbV9oaWdoQWNjdXJhY3koaGln
aEFjY3VyYWN5KQotICAgICAgICAsIG1fdGltZW91dCh0aW1lb3V0KQotICAgICAgICAsIG1fbWF4
aW11bUFnZShtYXhpbXVtQWdlKQorICAgIFBvc2l0aW9uT3B0aW9ucygpCisgICAgICAgIDogbV9o
aWdoQWNjdXJhY3koZmFsc2UpCisgICAgICAgICwgbV9oYXNUaW1lb3V0KGZhbHNlKQorICAgICAg
ICAsIG1fbWF4aW11bUFnZSgwKQogICAgIHsKICAgICB9CiAgICAgCiAgICAgYm9vbCBtX2hpZ2hB
Y2N1cmFjeTsKLSAgICB1bnNpZ25lZCBtX3RpbWVvdXQ7Ci0gICAgdW5zaWduZWQgbV9tYXhpbXVt
QWdlOworICAgIGJvb2wgbV9oYXNUaW1lb3V0OworICAgIGludCBtX3RpbWVvdXQ7CisgICAgaW50
IG1fbWF4aW11bUFnZTsKIH07CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NzAwNCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDE2IEBACisyMDA5LTA4LTEwICBTdGV2ZSBCbG9jayAgPHN0ZXZlYmxvY2tA
Z29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBCdWcgMjcyNTQgOiBHZW9sb2NhdGlvbiBQb3NpdGlvbk9wdGlvbnMgZG9lcyBub3QgdXNl
IGNvcnJlY3QgZGVmYXVsdCB2YWx1ZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yNzI1NAorCisgICAgICAgIEFkZHMgYSBsYXlvdXQgdGVzdCB0byBj
aGVjayB0aGUgYWNjZXB0YWJsZSB0eXBlcyBmb3IgYXJndW1lbnRzIHRvIEdlb2xvY2F0aW9uIG1l
dGhvZHMuCisKKyAgICAgICAgKiBmYXN0L2RvbS9HZW9sb2NhdGlvbi9yZXNvdXJjZXMvYXJndW1l
bnQtdHlwZXMuanM6IEFkZGVkLiBUZXN0cyB0aGUgdHlwZXMgb2YgdGhlIGFyZ3VtZW50cyB0aGF0
IGNhbiBiZSBwYXNzZWQgdG8gR2VvbG9jYXRpb24gbWV0aG9kcy4KKyAgICAgICAgKiBmYXN0L2Rv
bS9HZW9sb2NhdGlvbi9hcmd1bWVudC10eXBlcy5odG1sOiBBZGRlZC4gSFRNTCB3cmFwcGVyIGZv
ciBhYm92ZSBKUyB0ZXN0LgorICAgICAgICAqIGZhc3QvZG9tL0dlb2xvY2F0aW9uL2FyZ3VtZW50
LXR5cGVzLWV4cGVjdGVkLnR4dDogQWRkZWQuIEV4cGVjdGVkIG91dHB1dCBmb3IgYWJvdmUgdGVz
dC4KKwogMjAwOS0wOC0wNyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9t
L0dlb2xvY2F0aW9uL2FyZ3VtZW50LXR5cGVzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9hcmd1bWVudC10eXBlcy1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9hcmd1
bWVudC10eXBlcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjggQEAKK1Rl
c3RzIHRoZSBhY2NlcHRhYmxlIHR5cGVzIGZvciBhcmd1bWVudHMgdG8gR2VvbG9jYXRpb24gbWV0
aG9kcy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNz
YWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgbmF2aWdhdG9yLmdl
b2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbigpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogVFlQ
RV9NSVNNQVRDSF9FUlI6IERPTSBFeGNlcHRpb24gMTcuCitQQVNTIG5hdmlnYXRvci5nZW9sb2Nh
dGlvbi5nZXRDdXJyZW50UG9zaXRpb24odW5kZWZpbmVkKSB0aHJldyBleGNlcHRpb24gRXJyb3I6
IFRZUEVfTUlTTUFUQ0hfRVJSOiBET00gRXhjZXB0aW9uIDE3LgorUEFTUyBuYXZpZ2F0b3IuZ2Vv
bG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKG51bGwpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjog
VFlQRV9NSVNNQVRDSF9FUlI6IERPTSBFeGNlcHRpb24gMTcuCitQQVNTIG5hdmlnYXRvci5nZW9s
b2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oe30pIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogVFlQ
RV9NSVNNQVRDSF9FUlI6IERPTSBFeGNlcHRpb24gMTcuCitQQVNTIG5hdmlnYXRvci5nZW9sb2Nh
dGlvbi5nZXRDdXJyZW50UG9zaXRpb24ob2JqZWN0VGhyb3dpbmdFeGNlcHRpb24pIHRocmV3IGV4
Y2VwdGlvbiBFcnJvcjogVFlQRV9NSVNNQVRDSF9FUlI6IERPTSBFeGNlcHRpb24gMTcuCitQQVNT
IG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbikg
ZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRD
dXJyZW50UG9zaXRpb24oTWF0aC5hYnMpIGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBu
YXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKHRydWUpIHRocmV3IGV4Y2Vw
dGlvbiBFcnJvcjogVFlQRV9NSVNNQVRDSF9FUlI6IERPTSBFeGNlcHRpb24gMTcuCitQQVNTIG5h
dmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oNDIpIHRocmV3IGV4Y2VwdGlv
biBFcnJvcjogVFlQRV9NSVNNQVRDSF9FUlI6IERPTSBFeGNlcHRpb24gMTcuCitQQVNTIG5hdmln
YXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oInN0cmluZyIpIHRocmV3IGV4Y2Vw
dGlvbiBFcnJvcjogVFlQRV9NSVNNQVRDSF9FUlI6IERPTSBFeGNlcHRpb24gMTcuCitQQVNTIG5h
dmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgdW5k
ZWZpbmVkKSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgbmF2aWdhdG9yLmdlb2xvY2F0
aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCBudWxsKSBkaWQgbm90IHRocm93
IGV4Y2VwdGlvbi4KK1BBU1MgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlv
bihlbXB0eUZ1bmN0aW9uLCB7fSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBUWVBFX01JU01BVENI
X0VSUjogRE9NIEV4Y2VwdGlvbiAxNy4KK1BBU1MgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1
cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCBvYmplY3RUaHJvd2luZ0V4Y2VwdGlvbikgdGhy
ZXcgZXhjZXB0aW9uIEVycm9yOiBUWVBFX01JU01BVENIX0VSUjogRE9NIEV4Y2VwdGlvbiAxNy4K
K1BBU1MgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0
aW9uLCBlbXB0eUZ1bmN0aW9uKSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgbmF2aWdh
dG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCBNYXRoLmFi
cykgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5n
ZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgdHJ1ZSkgdGhyZXcgZXhjZXB0aW9uIEVy
cm9yOiBUWVBFX01JU01BVENIX0VSUjogRE9NIEV4Y2VwdGlvbiAxNy4KK1BBU1MgbmF2aWdhdG9y
Lmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCA0MikgdGhyZXcg
ZXhjZXB0aW9uIEVycm9yOiBUWVBFX01JU01BVENIX0VSUjogRE9NIEV4Y2VwdGlvbiAxNy4KK1BB
U1MgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9u
LCAic3RyaW5nIikgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBUWVBFX01JU01BVENIX0VSUjogRE9N
IEV4Y2VwdGlvbiAxNy4KK1BBU1MgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3Np
dGlvbihlbXB0eUZ1bmN0aW9uLCB1bmRlZmluZWQsIHVuZGVmaW5lZCkgZGlkIG5vdCB0aHJvdyBl
eGNlcHRpb24uCitQQVNTIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24o
ZW1wdHlGdW5jdGlvbiwgdW5kZWZpbmVkLCBudWxsKSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4K
K1BBU1MgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0
aW9uLCB1bmRlZmluZWQsIHt9KSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgbmF2aWdh
dG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCB1bmRlZmlu
ZWQsIG9iamVjdFRocm93aW5nRXhjZXB0aW9uKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IGVuYWJs
ZUhpZ2hBY2N1cmFjeSBnZXR0ZXIgZXhjZXB0aW9uLgorUEFTUyBuYXZpZ2F0b3IuZ2VvbG9jYXRp
b24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwgZW1wdHlGdW5j
dGlvbikgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIG5hdmlnYXRvci5nZW9sb2NhdGlv
bi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgdW5kZWZpbmVkLCB0cnVlKSBkaWQg
bm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJl
bnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCB1bmRlZmluZWQsIDQyKSBkaWQgbm90IHRocm93IGV4
Y2VwdGlvbi4KK1BBU1MgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihl
bXB0eUZ1bmN0aW9uLCB1bmRlZmluZWQsICJzdHJpbmciKSBkaWQgbm90IHRocm93IGV4Y2VwdGlv
bi4KK1BBU1MgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1
bmN0aW9uLCB1bmRlZmluZWQsIHtkdW1teVByb3BlcnR5OnVuZGVmaW5lZH0pIGRpZCBub3QgdGhy
b3cgZXhjZXB0aW9uLgorUEFTUyBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0
aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwge2R1bW15UHJvcGVydHk6bnVsbH0pIGRpZCBu
b3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVu
dFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwge2R1bW15UHJvcGVydHk6e319KSBk
aWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1
cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCB1bmRlZmluZWQsIHtkdW1teVByb3BlcnR5Om9i
amVjdFRocm93aW5nRXhjZXB0aW9ufSkgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIG5h
dmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgdW5k
ZWZpbmVkLCB7ZHVtbXlQcm9wZXJ0eTplbXB0eUZ1bmN0aW9ufSkgZGlkIG5vdCB0aHJvdyBleGNl
cHRpb24uCitQQVNTIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1w
dHlGdW5jdGlvbiwgdW5kZWZpbmVkLCB7ZHVtbXlQcm9wZXJ0eTp0cnVlfSkgZGlkIG5vdCB0aHJv
dyBleGNlcHRpb24uCitQQVNTIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRp
b24oZW1wdHlGdW5jdGlvbiwgdW5kZWZpbmVkLCB7ZHVtbXlQcm9wZXJ0eTo0Mn0pIGRpZCBub3Qg
dGhyb3cgZXhjZXB0aW9uLgorUEFTUyBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBv
c2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwge2R1bW15UHJvcGVydHk6InN0cmluZyJ9
KSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdl
dEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCB1bmRlZmluZWQsIHtlbmFibGVIaWdoQWNj
dXJhY3k6dW5kZWZpbmVkfSkgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIG5hdmlnYXRv
ci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgdW5kZWZpbmVk
LCB7ZW5hYmxlSGlnaEFjY3VyYWN5Om51bGx9KSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BB
U1MgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9u
LCB1bmRlZmluZWQsIHtlbmFibGVIaWdoQWNjdXJhY3k6e319KSBkaWQgbm90IHRocm93IGV4Y2Vw
dGlvbi4KK1BBU1MgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0
eUZ1bmN0aW9uLCB1bmRlZmluZWQsIHtlbmFibGVIaWdoQWNjdXJhY3k6b2JqZWN0VGhyb3dpbmdF
eGNlcHRpb259KSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgbmF2aWdhdG9yLmdlb2xv
Y2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCB1bmRlZmluZWQsIHtlbmFi
bGVIaWdoQWNjdXJhY3k6ZW1wdHlGdW5jdGlvbn0pIGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgor
UEFTUyBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rp
b24sIHVuZGVmaW5lZCwge2VuYWJsZUhpZ2hBY2N1cmFjeTp0cnVlfSkgZGlkIG5vdCB0aHJvdyBl
eGNlcHRpb24uCitQQVNTIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24o
ZW1wdHlGdW5jdGlvbiwgdW5kZWZpbmVkLCB7ZW5hYmxlSGlnaEFjY3VyYWN5OjQyfSkgZGlkIG5v
dCB0aHJvdyBleGNlcHRpb24uCitQQVNTIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50
UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgdW5kZWZpbmVkLCB7ZW5hYmxlSGlnaEFjY3VyYWN5OiJz
dHJpbmcifSkgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIG5hdmlnYXRvci5nZW9sb2Nh
dGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgdW5kZWZpbmVkLCB7bWF4aW11
bUFnZTp1bmRlZmluZWR9KSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgbmF2aWdhdG9y
Lmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCB1bmRlZmluZWQs
IHttYXhpbXVtQWdlOm51bGx9KSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgbmF2aWdh
dG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCB1bmRlZmlu
ZWQsIHttYXhpbXVtQWdlOnt9fSkgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIG5hdmln
YXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgdW5kZWZp
bmVkLCB7bWF4aW11bUFnZTpvYmplY3RUaHJvd2luZ0V4Y2VwdGlvbn0pIHRocmV3IGV4Y2VwdGlv
biBFcnJvcjogdmFsdWVPZiB0aHJldyBleGNlcHRpb24uCitQQVNTIG5hdmlnYXRvci5nZW9sb2Nh
dGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgdW5kZWZpbmVkLCB7bWF4aW11
bUFnZTplbXB0eUZ1bmN0aW9ufSkgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIG5hdmln
YXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgdW5kZWZp
bmVkLCB7bWF4aW11bUFnZTp0cnVlfSkgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIG5h
dmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgdW5k
ZWZpbmVkLCB7bWF4aW11bUFnZTo0Mn0pIGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBu
YXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVu
ZGVmaW5lZCwge21heGltdW1BZ2U6InN0cmluZyJ9KSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4K
K1BBU1MgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0
aW9uLCB1bmRlZmluZWQsIHt0aW1lb3V0OnVuZGVmaW5lZH0pIGRpZCBub3QgdGhyb3cgZXhjZXB0
aW9uLgorUEFTUyBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5
RnVuY3Rpb24sIHVuZGVmaW5lZCwge3RpbWVvdXQ6bnVsbH0pIGRpZCBub3QgdGhyb3cgZXhjZXB0
aW9uLgorUEFTUyBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5
RnVuY3Rpb24sIHVuZGVmaW5lZCwge3RpbWVvdXQ6e319KSBkaWQgbm90IHRocm93IGV4Y2VwdGlv
bi4KK1BBU1MgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1
bmN0aW9uLCB1bmRlZmluZWQsIHt0aW1lb3V0Om9iamVjdFRocm93aW5nRXhjZXB0aW9ufSkgdGhy
ZXcgZXhjZXB0aW9uIEVycm9yOiB2YWx1ZU9mIHRocmV3IGV4Y2VwdGlvbi4KK1BBU1MgbmF2aWdh
dG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCB1bmRlZmlu
ZWQsIHt0aW1lb3V0OmVtcHR5RnVuY3Rpb259KSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BB
U1MgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9u
LCB1bmRlZmluZWQsIHt0aW1lb3V0OnRydWV9KSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BB
U1MgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9u
LCB1bmRlZmluZWQsIHt0aW1lb3V0OjQyfSkgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNT
IG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwg
dW5kZWZpbmVkLCB7dGltZW91dDoic3RyaW5nIn0pIGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgor
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL2FyZ3VtZW50LXR5cGVzLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24vYXJndW1lbnQtdHlw
ZXMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9u
L2FyZ3VtZW50LXR5cGVzLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9D
VFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+
Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0
LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJl
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+
Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYXJndW1l
bnQtdHlwZXMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9q
cy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24vcmVzb3VyY2VzL2FyZ3VtZW50LXR5cGVzLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL3Jlc291cmNlcy9h
cmd1bWVudC10eXBlcy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL0dl
b2xvY2F0aW9uL3Jlc291cmNlcy9hcmd1bWVudC10eXBlcy5qcwkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxMDQgQEAKK2Rlc2NyaXB0aW9uKCJUZXN0cyB0aGUgYWNjZXB0YWJsZSB0eXBlcyBmb3Ig
YXJndW1lbnRzIHRvIEdlb2xvY2F0aW9uIG1ldGhvZHMuIik7CisKK2Z1bmN0aW9uIHNob3VsZE5v
dFRocm93KGV4cHJlc3Npb24pCit7CisgIHRyeSB7CisgICAgZXZhbChleHByZXNzaW9uKTsKKyAg
ICB0ZXN0UGFzc2VkKGV4cHJlc3Npb24gKyAiIGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLiIpOwor
ICB9IGNhdGNoKGUpIHsKKyAgICB0ZXN0RmFpbGVkKGV4cHJlc3Npb24gKyAiIHNob3VsZCBub3Qg
dGhyb3cgZXhjZXB0aW9uLiBUaHJldyBleGNlcHRpb24gIiArIGUpOworICB9Cit9CisKK2Z1bmN0
aW9uIHRlc3QoZXhwcmVzc2lvbiwgZXhwcmVzc2lvblNob3VsZFRocm93LCBleHBlY3RlZEV4Y2Vw
dGlvbikgeworICAgIGlmIChleHByZXNzaW9uU2hvdWxkVGhyb3cpIHsKKyAgICAgICAgaWYgKGV4
cGVjdGVkRXhjZXB0aW9uKQorICAgICAgICAgICAgc2hvdWxkVGhyb3coZXhwcmVzc2lvbiwgJyhm
dW5jdGlvbigpIHsgcmV0dXJuICInICsgZXhwZWN0ZWRFeGNlcHRpb24gKyAnIjsgfSkoKTsnKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2hvdWxkVGhyb3coZXhwcmVzc2lvbiwgJyhmdW5j
dGlvbigpIHsgcmV0dXJuICJFcnJvcjogVFlQRV9NSVNNQVRDSF9FUlI6IERPTSBFeGNlcHRpb24g
MTciOyB9KSgpOycpOworICAgIH0gZWxzZSB7CisgICAgICAgIHNob3VsZE5vdFRocm93KGV4cHJl
c3Npb24pOworICAgIH0KK30KKwordmFyIGVtcHR5RnVuY3Rpb24gPSBmdW5jdGlvbigpIHt9Owor
CitmdW5jdGlvbiBPYmplY3RUaHJvd2luZ0V4Y2VwdGlvbigpIHt9OworT2JqZWN0VGhyb3dpbmdF
eGNlcHRpb24ucHJvdG90eXBlLnZhbHVlT2YgPSBmdW5jdGlvbigpIHsKKyAgICB0aHJvdyBuZXcg
RXJyb3IoJ3ZhbHVlT2YgdGhyZXcgZXhjZXB0aW9uJyk7Cit9CitPYmplY3RUaHJvd2luZ0V4Y2Vw
dGlvbi5wcm90b3R5cGUuX19kZWZpbmVHZXR0ZXJfXygiZW5hYmxlSGlnaEFjY3VyYWN5IiwgZnVu
Y3Rpb24oKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCdlbmFibGVIaWdoQWNjdXJhY3kgZ2V0dGVy
IGV4Y2VwdGlvbicpOworfSk7Cit2YXIgb2JqZWN0VGhyb3dpbmdFeGNlcHRpb24gPSBuZXcgT2Jq
ZWN0VGhyb3dpbmdFeGNlcHRpb24oKTsKKworCit0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24u
Z2V0Q3VycmVudFBvc2l0aW9uKCknLCB0cnVlKTsKKwordGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0
aW9uLmdldEN1cnJlbnRQb3NpdGlvbih1bmRlZmluZWQpJywgdHJ1ZSk7Cit0ZXN0KCduYXZpZ2F0
b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKG51bGwpJywgdHJ1ZSk7Cit0ZXN0KCdu
YXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKHt9KScsIHRydWUpOwordGVz
dCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihvYmplY3RUaHJvd2lu
Z0V4Y2VwdGlvbiknLCB0cnVlKTsKK3Rlc3QoJ25hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJy
ZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiknLCBmYWxzZSk7Cit0ZXN0KCduYXZpZ2F0b3IuZ2Vv
bG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKE1hdGguYWJzKScsIGZhbHNlKTsKK3Rlc3QoJ25h
dmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24odHJ1ZSknLCB0cnVlKTsKK3Rl
c3QoJ25hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oNDIpJywgdHJ1ZSk7
Cit0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKCJzdHJpbmci
KScsIHRydWUpOworCit0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0
aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5lZCknLCBmYWxzZSk7Cit0ZXN0KCduYXZpZ2F0b3Iu
Z2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIG51bGwpJywgZmFs
c2UpOwordGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0
eUZ1bmN0aW9uLCB7fSknLCB0cnVlKTsKK3Rlc3QoJ25hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRD
dXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgb2JqZWN0VGhyb3dpbmdFeGNlcHRpb24pJywg
dHJ1ZSk7Cit0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVt
cHR5RnVuY3Rpb24sIGVtcHR5RnVuY3Rpb24pJywgZmFsc2UpOwordGVzdCgnbmF2aWdhdG9yLmdl
b2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCBNYXRoLmFicyknLCBm
YWxzZSk7Cit0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVt
cHR5RnVuY3Rpb24sIHRydWUpJywgdHJ1ZSk7Cit0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24u
Z2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIDQyKScsIHRydWUpOwordGVzdCgnbmF2
aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCAic3Ry
aW5nIiknLCB0cnVlKTsKKwordGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQ
b3NpdGlvbihlbXB0eUZ1bmN0aW9uLCB1bmRlZmluZWQsIHVuZGVmaW5lZCknLCBmYWxzZSk7Cit0
ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rp
b24sIHVuZGVmaW5lZCwgbnVsbCknLCBmYWxzZSk7Cit0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRp
b24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwge30pJywgZmFs
c2UpOwordGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0
eUZ1bmN0aW9uLCB1bmRlZmluZWQsIG9iamVjdFRocm93aW5nRXhjZXB0aW9uKScsIHRydWUsICdF
cnJvcjogZW5hYmxlSGlnaEFjY3VyYWN5IGdldHRlciBleGNlcHRpb24nKTsKK3Rlc3QoJ25hdmln
YXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgdW5kZWZp
bmVkLCBlbXB0eUZ1bmN0aW9uKScsIGZhbHNlKTsKK3Rlc3QoJ25hdmlnYXRvci5nZW9sb2NhdGlv
bi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgdW5kZWZpbmVkLCB0cnVlKScsIGZh
bHNlKTsKK3Rlc3QoJ25hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1w
dHlGdW5jdGlvbiwgdW5kZWZpbmVkLCA0MiknLCBmYWxzZSk7Cit0ZXN0KCduYXZpZ2F0b3IuZ2Vv
bG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwgInN0
cmluZyIpJywgZmFsc2UpOworCit0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVu
dFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwge2R1bW15UHJvcGVydHk6dW5kZWZp
bmVkfSknLCBmYWxzZSk7Cit0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBv
c2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwge2R1bW15UHJvcGVydHk6bnVsbH0pJywg
ZmFsc2UpOwordGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihl
bXB0eUZ1bmN0aW9uLCB1bmRlZmluZWQsIHtkdW1teVByb3BlcnR5Ont9fSknLCBmYWxzZSk7Cit0
ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rp
b24sIHVuZGVmaW5lZCwge2R1bW15UHJvcGVydHk6b2JqZWN0VGhyb3dpbmdFeGNlcHRpb259KScs
IGZhbHNlKTsKK3Rlc3QoJ25hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24o
ZW1wdHlGdW5jdGlvbiwgdW5kZWZpbmVkLCB7ZHVtbXlQcm9wZXJ0eTplbXB0eUZ1bmN0aW9ufSkn
LCBmYWxzZSk7Cit0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9u
KGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwge2R1bW15UHJvcGVydHk6dHJ1ZX0pJywgZmFsc2Up
OwordGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1
bmN0aW9uLCB1bmRlZmluZWQsIHtkdW1teVByb3BlcnR5OjQyfSknLCBmYWxzZSk7Cit0ZXN0KCdu
YXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVu
ZGVmaW5lZCwge2R1bW15UHJvcGVydHk6InN0cmluZyJ9KScsIGZhbHNlKTsKKwordGVzdCgnbmF2
aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCB1bmRl
ZmluZWQsIHtlbmFibGVIaWdoQWNjdXJhY3k6dW5kZWZpbmVkfSknLCBmYWxzZSk7Cit0ZXN0KCdu
YXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVu
ZGVmaW5lZCwge2VuYWJsZUhpZ2hBY2N1cmFjeTpudWxsfSknLCBmYWxzZSk7Cit0ZXN0KCduYXZp
Z2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVm
aW5lZCwge2VuYWJsZUhpZ2hBY2N1cmFjeTp7fX0pJywgZmFsc2UpOwordGVzdCgnbmF2aWdhdG9y
Lmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCB1bmRlZmluZWQs
IHtlbmFibGVIaWdoQWNjdXJhY3k6b2JqZWN0VGhyb3dpbmdFeGNlcHRpb259KScsIGZhbHNlKTsK
K3Rlc3QoJ25hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlGdW5j
dGlvbiwgdW5kZWZpbmVkLCB7ZW5hYmxlSGlnaEFjY3VyYWN5OmVtcHR5RnVuY3Rpb259KScsIGZh
bHNlKTsKK3Rlc3QoJ25hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1w
dHlGdW5jdGlvbiwgdW5kZWZpbmVkLCB7ZW5hYmxlSGlnaEFjY3VyYWN5OnRydWV9KScsIGZhbHNl
KTsKK3Rlc3QoJ25hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZW1wdHlG
dW5jdGlvbiwgdW5kZWZpbmVkLCB7ZW5hYmxlSGlnaEFjY3VyYWN5OjQyfSknLCBmYWxzZSk7Cit0
ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rp
b24sIHVuZGVmaW5lZCwge2VuYWJsZUhpZ2hBY2N1cmFjeToic3RyaW5nIn0pJywgZmFsc2UpOwor
Cit0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVu
Y3Rpb24sIHVuZGVmaW5lZCwge21heGltdW1BZ2U6dW5kZWZpbmVkfSknLCBmYWxzZSk7Cit0ZXN0
KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24s
IHVuZGVmaW5lZCwge21heGltdW1BZ2U6bnVsbH0pJywgZmFsc2UpOwordGVzdCgnbmF2aWdhdG9y
Lmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCB1bmRlZmluZWQs
IHttYXhpbXVtQWdlOnt9fSknLCBmYWxzZSk7Cit0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24u
Z2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwge21heGltdW1BZ2U6
b2JqZWN0VGhyb3dpbmdFeGNlcHRpb259KScsIHRydWUsICdFcnJvcjogdmFsdWVPZiB0aHJldyBl
eGNlcHRpb24nKTsKK3Rlc3QoJ25hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRp
b24oZW1wdHlGdW5jdGlvbiwgdW5kZWZpbmVkLCB7bWF4aW11bUFnZTplbXB0eUZ1bmN0aW9ufSkn
LCBmYWxzZSk7Cit0ZXN0KCduYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9u
KGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwge21heGltdW1BZ2U6dHJ1ZX0pJywgZmFsc2UpOwor
dGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0
aW9uLCB1bmRlZmluZWQsIHttYXhpbXVtQWdlOjQyfSknLCBmYWxzZSk7Cit0ZXN0KCduYXZpZ2F0
b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5l
ZCwge21heGltdW1BZ2U6InN0cmluZyJ9KScsIGZhbHNlKTsKKwordGVzdCgnbmF2aWdhdG9yLmdl
b2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCB1bmRlZmluZWQsIHt0
aW1lb3V0OnVuZGVmaW5lZH0pJywgZmFsc2UpOwordGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9u
LmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCB1bmRlZmluZWQsIHt0aW1lb3V0Om51
bGx9KScsIGZhbHNlKTsKK3Rlc3QoJ25hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9z
aXRpb24oZW1wdHlGdW5jdGlvbiwgdW5kZWZpbmVkLCB7dGltZW91dDp7fX0pJywgZmFsc2UpOwor
dGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0
aW9uLCB1bmRlZmluZWQsIHt0aW1lb3V0Om9iamVjdFRocm93aW5nRXhjZXB0aW9ufSknLCB0cnVl
LCAnRXJyb3I6IHZhbHVlT2YgdGhyZXcgZXhjZXB0aW9uJyk7Cit0ZXN0KCduYXZpZ2F0b3IuZ2Vv
bG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGVtcHR5RnVuY3Rpb24sIHVuZGVmaW5lZCwge3Rp
bWVvdXQ6ZW1wdHlGdW5jdGlvbn0pJywgZmFsc2UpOwordGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0
aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1bmN0aW9uLCB1bmRlZmluZWQsIHt0aW1lb3V0
OnRydWV9KScsIGZhbHNlKTsKK3Rlc3QoJ25hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50
UG9zaXRpb24oZW1wdHlGdW5jdGlvbiwgdW5kZWZpbmVkLCB7dGltZW91dDo0Mn0pJywgZmFsc2Up
OwordGVzdCgnbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlbXB0eUZ1
bmN0aW9uLCB1bmRlZmluZWQsIHt0aW1lb3V0OiJzdHJpbmcifSknLCBmYWxzZSk7CisKK3ZhciBz
dWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCg==
</data>
<flag name="review"
          id="18834"
          type_id="1"
          status="+"
          setter="darin"
    />
    <flag name="commit-queue"
          id="18886"
          type_id="3"
          status="-"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>