<?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>141055</bug_id>
          
          <creation_ts>2015-01-29 15:12:38 -0800</creation_ts>
          <short_desc>[ES6] Array.from need to accept iterables</short_desc>
          <delta_ts>2015-04-26 12:53:48 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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="Dean Jackson">dino</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>darin</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>joepeck</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1065372</commentid>
    <comment_count>0</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2015-01-29 15:12:38 -0800</bug_when>
    <thetext>The implementation of Array.from fails when passed a Set.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087784</commentid>
    <comment_count>1</comment_count>
      <attachid>251423</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-04-23 02:41:58 -0700</bug_when>
    <thetext>Created attachment 251423
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087905</commentid>
    <comment_count>2</comment_count>
      <attachid>251423</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-04-23 11:52:51 -0700</bug_when>
    <thetext>Comment on attachment 251423
Patch

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

Cool! I have some comments, but this looks good to me!

&gt; Source/JavaScriptCore/builtins/ArrayConstructor.js:66
&gt; +        // Since for-of loop once more looks up the @@iterator property of a given iterable,
&gt; +        // it could be observable if the user defines a getter for @@iterator.
&gt; +        // To avoid this situation, we define a wrapper object that @@iterator just returns a given iterator.
&gt; +        var wrapper = {
&gt; +            [@symbolIterator]() {
&gt; +                return iterator;
&gt; +            }
&gt; +        };
&gt; +
&gt; +        for (var value of wrapper) {

Could you drop the wrapper and use the iterator instance in the loop?

    for (var value of iterator) { ... }

&gt; Source/JavaScriptCore/tests/stress/array-from-with-iterable.js:29
&gt; +    shouldBe(set.has(array[i][0]), true);

This is testing the Map case, so this line should be map.has(...)!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087907</commentid>
    <comment_count>3</comment_count>
      <attachid>251423</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-04-23 11:56:52 -0700</bug_when>
    <thetext>Comment on attachment 251423
Patch

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

Thank you for your comment!

&gt;&gt; Source/JavaScriptCore/builtins/ArrayConstructor.js:66
&gt;&gt; +        for (var value of wrapper) {
&gt; 
&gt; Could you drop the wrapper and use the iterator instance in the loop?
&gt; 
&gt;     for (var value of iterator) { ... }

We cannot do that because when executing `for (var value of iterator) { ... }`, `iterator[Symbol.itrator]()` is called (It&apos;s observable effect).
However, this behavior is not defined in the spec...
I tested it in array-from-with-iterator.js.

&gt;&gt; Source/JavaScriptCore/tests/stress/array-from-with-iterable.js:29
&gt;&gt; +    shouldBe(set.has(array[i][0]), true);
&gt; 
&gt; This is testing the Map case, so this line should be map.has(...)!

Oops! Thank you. I&apos;ll fix it soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087908</commentid>
    <comment_count>4</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-04-23 12:00:48 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 251423 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=251423&amp;action=review
&gt; 
&gt; Thank you for your comment!
&gt; 
&gt; &gt;&gt; Source/JavaScriptCore/builtins/ArrayConstructor.js:66
&gt; &gt;&gt; +        for (var value of wrapper) {
&gt; &gt; 
&gt; &gt; Could you drop the wrapper and use the iterator instance in the loop?
&gt; &gt; 
&gt; &gt;     for (var value of iterator) { ... }
&gt; 
&gt; We cannot do that because when executing `for (var value of iterator) { ...
&gt; }`, `iterator[Symbol.itrator]()` is called (It&apos;s observable effect).
&gt; However, this behavior is not defined in the spec...
&gt; I tested it in array-from-with-iterator.js.

Ahh, excellent point!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087915</commentid>
    <comment_count>5</comment_count>
      <attachid>251423</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-04-23 12:06:20 -0700</bug_when>
    <thetext>Comment on attachment 251423
Patch

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

&gt;&gt;&gt;&gt; Source/JavaScriptCore/builtins/ArrayConstructor.js:66
&gt;&gt;&gt;&gt; +        for (var value of wrapper) {
&gt;&gt;&gt; 
&gt;&gt;&gt; Could you drop the wrapper and use the iterator instance in the loop?
&gt;&gt;&gt; 
&gt;&gt;&gt;     for (var value of iterator) { ... }
&gt;&gt; 
&gt;&gt; We cannot do that because when executing `for (var value of iterator) { ... }`, `iterator[Symbol.itrator]()` is called (It&apos;s observable effect).
&gt;&gt; However, this behavior is not defined in the spec...
&gt;&gt; I tested it in array-from-with-iterator.js.
&gt; 
&gt; Ahh, excellent point!

Or is it better to write like the following? :)

while (true) {
    var next = iterator.next();
    if (!@isObject(next))
        throw @TypeError(&quot;...&quot;);

    if (next.done) {
        result.length = k;
        return result;
    }

    var nextValue = next.value;
    if (mapFn) {
        try {
            @putByValDirect(result, k, thisArg === undefined ? mapFn(value, k) : mapFn.@call(thisArg, value, k));
        } catch (error) {
            var returnMethod = iterator.return;
            if (returnMethod != null) {
                try {
                    returnMethod.@call(iterator);
                } catch (watedError) {
                }
            }
            throw error;
        }
    } else
        @putByValDirect(result, k, nextValue);
    k += 1
}

If so, I&apos;ll rewrite it with this. Maybe, builtins doesn&apos;t allow to use try-catch now, so I&apos;ll relax it when it&apos;s needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087920</commentid>
    <comment_count>6</comment_count>
      <attachid>251465</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-04-23 12:11:25 -0700</bug_when>
    <thetext>Created attachment 251465
Patch

Fixed the tests for Map</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087939</commentid>
    <comment_count>7</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-04-23 12:43:15 -0700</bug_when>
    <thetext>&gt; Or is it better to write like the following? :)
&gt; 
&gt; [...snip...]

I think what you have with the wrapper is good. It keeps the iterator implementation is in one place (C++) instead of two (C++ and JavaScript).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087942</commentid>
    <comment_count>8</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-04-23 12:45:09 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; &gt; Or is it better to write like the following? :)
&gt; &gt; 
&gt; &gt; [...snip...]
&gt; 
&gt; I think what you have with the wrapper is good. It keeps the iterator
&gt; implementation is in one place (C++) instead of two (C++ and JavaScript).

Make sense :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088810</commentid>
    <comment_count>9</comment_count>
      <attachid>251465</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-04-26 12:13:55 -0700</bug_when>
    <thetext>Comment on attachment 251465
Patch

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

&gt; Source/JavaScriptCore/builtins/ArrayConstructor.js:49
&gt; +            throw new @TypeError(&quot;Array.from requires that the @@iterator property of the first argument, when exists, be a function&quot;);

Should @@iterator be used in the text of an exception? I’m not sure that’s terminology that we can expect JavaScript programmers to understand.

&gt; Source/JavaScriptCore/builtins/ArrayConstructor.js:91
&gt; +    var len = lengthValue &gt; 0 ? (lengthValue &lt; maxSafeInteger ? lengthValue : maxSafeInteger) : 0;

We normally like to avoid abbreviations like &quot;len&quot; in WebKit code. Not sure how the JavaScriptCore folks feel about this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088813</commentid>
    <comment_count>10</comment_count>
      <attachid>251465</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-04-26 12:41:57 -0700</bug_when>
    <thetext>Comment on attachment 251465
Patch

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

Thank you for your review.

&gt;&gt; Source/JavaScriptCore/builtins/ArrayConstructor.js:49
&gt;&gt; +            throw new @TypeError(&quot;Array.from requires that the @@iterator property of the first argument, when exists, be a function&quot;);
&gt; 
&gt; Should @@iterator be used in the text of an exception? I’m not sure that’s terminology that we can expect JavaScript programmers to understand.

I&apos;ve changed it to &quot;Array.from requires that the property of the first argument, items[Symbol.iterator], when exists, be a function&quot;

&gt;&gt; Source/JavaScriptCore/builtins/ArrayConstructor.js:91
&gt;&gt; +    var len = lengthValue &gt; 0 ? (lengthValue &lt; maxSafeInteger ? lengthValue : maxSafeInteger) : 0;
&gt; 
&gt; We normally like to avoid abbreviations like &quot;len&quot; in WebKit code. Not sure how the JavaScriptCore folks feel about this.

This `len` is derived from the spec[1]. Howeevr, &quot;len&quot; seems not good.
I&apos;ll change it to arrayLikeLength.

[1]: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.from</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088815</commentid>
    <comment_count>11</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-04-26 12:53:48 -0700</bug_when>
    <thetext>Committed r183357: &lt;http://trac.webkit.org/changeset/183357&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251423</attachid>
            <date>2015-04-23 02:41:58 -0700</date>
            <delta_ts>2015-04-23 12:11:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141055-20150423184053.patch</filename>
            <type>text/plain</type>
            <size>16461</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgzMTA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
Mzk2OWM5ZTEyMmFiNDU4MjhiYjI3NTBiNTJmZjUyOTNkN2M2ZWMwLi5hOTU1OWVhNTY2MmZlN2E0
MzA2NjMxYmU5YjZiMDg2ZTcxMDZlNTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MSBAQAorMjAxNS0wNC0yMyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbRVM2XSBBcnJheS5mcm9tIG5lZWQgdG8gYWNjZXB0IGl0ZXJhYmxl
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMDU1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRVM2IHNw
ZWMgcmVxdWlyZXMgdGhhdCBBcnJheS5mcm9tIGFjY2VwdHMgaXRlcmFibGUgb2JqZWN0cy4KKyAg
ICAgICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHRoaXMgZnVuY3Rpb25hbGl0eSwgQXJyYXkuZnJv
bSBhY2NlcHRpbmcgaXRlcmFibGUgb2JqZWN0cy4KKworICAgICAgICBDdXJyZW50bHksIGBpc0Nv
bnN0cnVjdG9yYCBpcyBub3QgdXNlZC4gSW5zdGVhZCBvZiBpdCwgYHR5cGVvZiB0aGlPYmogPT09
ICJmdW5jdGlvbiJgIGlzIHVzZWQuCisgICAgICAgIEhvd2V2ZXIsIGl0IGRvZXNuJ3QgY29uZm9y
bSB0byB0aGUgc3BlYy4gV2hpbGUgYGlzQ29uc3RydWN0b3JgIHF1ZXJpZXMgdGhlIGdpdmVuIG9i
amVjdCBoYXMgYFtbQ29uc3RydWN0XV1gLAorICAgICAgICBgdHlwZW9mIHRoaXNPYmogPT09ICJm
dW5jdGlvbiJgIHF1ZXJpZXMgdGhlIGdpdmVuIG9iamVjdCBoYXMgYFtbQ2FsbF1dYC4KKyAgICAg
ICAgVGhpcyB3aWxsIGJlIGZpeGVkIGluIHRoZSBzdWJzZXF1ZW50IHBhdGNoWzFdLgorCisgICAg
ICAgIFsxXTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NDA5Mwor
CisgICAgICAgICogYnVpbHRpbnMvQXJyYXlDb25zdHJ1Y3Rvci5qczoKKyAgICAgICAgKGZyb20p
OgorICAgICAgICAqIHBhcnNlci9QYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4
ZXJUeXBlPjo6cGFyc2VJbm5lcik6CisgICAgICAgICogcnVudGltZS9Db21tb25JZGVudGlmaWVy
cy5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlND
OjpKU0dsb2JhbE9iamVjdDo6aW5pdCk6CisgICAgICAgICogdGVzdHMvc3RyZXNzL2FycmF5LWZy
b20td2l0aC1pdGVyYWJsZS5qczogQWRkZWQuCisgICAgICAgIChzaG91bGRCZSk6CisgICAgICAg
ICguc2V0IGZvcik6CisgICAgICAgICguc2V0IHZhcik6CisgICAgICAgIChhcmd1bWVudHNHZW5l
cmF0b3JzKToKKyAgICAgICAgKC5zZXQgc2hvdWxkQmUpOgorICAgICAgICAoLnNldCBuZXcpOgor
ICAgICAgICAqIHRlc3RzL3N0cmVzcy9hcnJheS1mcm9tLXdpdGgtaXRlcmF0b3IuanM6IEFkZGVk
LgorICAgICAgICAoc2hvdWxkQmUpOgorICAgICAgICAoc2hvdWxkVGhyb3cpOgorICAgICAgICAo
Y3JlYXRlSXRlcmF0b3IuaXRlcmF0b3IucmV0dXJuKToKKyAgICAgICAgKGNyZWF0ZUl0ZXJhdG9y
KToKKyAgICAgICAgKC4pOgorCiAyMDE1LTA0LTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBs
ZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgZml4IDMyLWJpdC4gRm9yZ290IHRvIG1ha2Ug
dGhpcyBzaW1wbGUgY2hhbmdlIHRvIDMyXzY0IGFzIHdlbGwuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQXJyYXlDb25zdHJ1Y3Rvci5qcyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9idWlsdGlucy9BcnJheUNvbnN0cnVjdG9yLmpzCmluZGV4IGJiZTA3OGFkNWZh
M2Y3ZTAyZTBhOGM5NzgzNjQ4MTIxMDdhYWUyNDcuLjZiZDRkODZiMTFiMGFlZmVjM2RhMzc0Mjhk
ZDdiYWZjMGFkOWRkODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlu
cy9BcnJheUNvbnN0cnVjdG9yLmpzCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlu
cy9BcnJheUNvbnN0cnVjdG9yLmpzCkBAIC0yMywxNSArMjMsMTEgQEAKICAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAgKi8KIAotZnVuY3Rpb24gZnJvbShhcnJheUxpa2UgLyosIG1hcEZuLCB0aGlzQXJnICovKSB7
CitmdW5jdGlvbiBmcm9tKGl0ZW1zIC8qLCBtYXBGbiwgdGhpc0FyZyAqLykgewogICAgICJ1c2Ug
c3RyaWN0IjsKIAotICAgIGlmIChhcnJheUxpa2UgPT0gbnVsbCkKLSAgICAgICAgdGhyb3cgbmV3
IEBUeXBlRXJyb3IoIkFycmF5LmZyb20gcmVxdWlyZXMgYW4gYXJyYXktbGlrZSBvYmplY3QgLSBu
b3QgbnVsbCBvciB1bmRlZmluZWQiKTsKLQogICAgIHZhciB0aGlzT2JqID0gdGhpczsKIAotICAg
IHZhciBpdGVtcyA9IEBPYmplY3QoYXJyYXlMaWtlKTsKICAgICB2YXIgbWFwRm4gPSBhcmd1bWVu
dHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDsKIAogICAgIHZhciB0aGlz
QXJnOwpAQCAtNDQsOCArNDAsNDUgQEAgZnVuY3Rpb24gZnJvbShhcnJheUxpa2UgLyosIG1hcEZu
LCB0aGlzQXJnICovKSB7CiAgICAgICAgICAgICB0aGlzQXJnID0gYXJndW1lbnRzWzJdOwogICAg
IH0KIAorICAgIGlmIChpdGVtcyA9PSBudWxsKQorICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJv
cigiQXJyYXkuZnJvbSByZXF1aXJlcyBhbiBhcnJheS1saWtlIG9iamVjdCAtIG5vdCBudWxsIG9y
IHVuZGVmaW5lZCIpOworCisgICAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gaXRlbXNbQHN5bWJvbEl0
ZXJhdG9yXTsKKyAgICBpZiAoaXRlcmF0b3JNZXRob2QgIT0gbnVsbCkgeworICAgICAgICBpZiAo
dHlwZW9mIGl0ZXJhdG9yTWV0aG9kICE9PSAiZnVuY3Rpb24iKQorICAgICAgICAgICAgdGhyb3cg
bmV3IEBUeXBlRXJyb3IoIkFycmF5LmZyb20gcmVxdWlyZXMgdGhhdCB0aGUgQEBpdGVyYXRvciBw
cm9wZXJ0eSBvZiB0aGUgZmlyc3QgYXJndW1lbnQsIHdoZW4gZXhpc3RzLCBiZSBhIGZ1bmN0aW9u
Iik7CisKKyAgICAgICAgLy8gVE9ETzogTmVlZCBpc0NvbnN0cnVjdG9yKHRoaXNPYmopIGluc3Rl
YWQgb2YgdHlwZW9mICJmdW5jdGlvbiIgY2hlY2suCisgICAgICAgIHZhciByZXN1bHQgPSAodHlw
ZW9mIHRoaXNPYmogPT09ICJmdW5jdGlvbiIpID8gQE9iamVjdChuZXcgdGhpc09iaigpKSA6IFtd
OworCisgICAgICAgIHZhciBrID0gMDsKKyAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JN
ZXRob2QuQGNhbGwoaXRlbXMpOworCisgICAgICAgIC8vIFNpbmNlIGZvci1vZiBsb29wIG9uY2Ug
bW9yZSBsb29rcyB1cCB0aGUgQEBpdGVyYXRvciBwcm9wZXJ0eSBvZiBhIGdpdmVuIGl0ZXJhYmxl
LAorICAgICAgICAvLyBpdCBjb3VsZCBiZSBvYnNlcnZhYmxlIGlmIHRoZSB1c2VyIGRlZmluZXMg
YSBnZXR0ZXIgZm9yIEBAaXRlcmF0b3IuCisgICAgICAgIC8vIFRvIGF2b2lkIHRoaXMgc2l0dWF0
aW9uLCB3ZSBkZWZpbmUgYSB3cmFwcGVyIG9iamVjdCB0aGF0IEBAaXRlcmF0b3IganVzdCByZXR1
cm5zIGEgZ2l2ZW4gaXRlcmF0b3IuCisgICAgICAgIHZhciB3cmFwcGVyID0geworICAgICAgICAg
ICAgW0BzeW1ib2xJdGVyYXRvcl0oKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9y
OworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIGZvciAodmFyIHZhbHVlIG9m
IHdyYXBwZXIpIHsKKyAgICAgICAgICAgIGlmIChtYXBGbikKKyAgICAgICAgICAgICAgICBAcHV0
QnlWYWxEaXJlY3QocmVzdWx0LCBrLCB0aGlzQXJnID09PSB1bmRlZmluZWQgPyBtYXBGbih2YWx1
ZSwgaykgOiBtYXBGbi5AY2FsbCh0aGlzQXJnLCB2YWx1ZSwgaykpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIEBwdXRCeVZhbERpcmVjdChyZXN1bHQsIGssIHZhbHVlKTsKKyAg
ICAgICAgICAgIGsgKz0gMTsKKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdC5sZW5ndGggPSBr
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHZhciBhcnJheUxpa2UgPSBA
T2JqZWN0KGl0ZW1zKTsKKwogICAgIHZhciBtYXhTYWZlSW50ZWdlciA9IDkwMDcxOTkyNTQ3NDA5
OTE7Ci0gICAgdmFyIG51bWJlclZhbHVlID0gQE51bWJlcihpdGVtcy5sZW5ndGgpOworICAgIHZh
ciBudW1iZXJWYWx1ZSA9IEBOdW1iZXIoYXJyYXlMaWtlLmxlbmd0aCk7CiAgICAgdmFyIGxlbmd0
aFZhbHVlOwogICAgIGlmIChudW1iZXJWYWx1ZSAhPSBudW1iZXJWYWx1ZSkgeyAgLy8gaXNOYU4o
bnVtYmVyVmFsdWUpCiAgICAgICAgIGxlbmd0aFZhbHVlID0gMDsKQEAgLTU1LDIwICs4OCwyMSBA
QCBmdW5jdGlvbiBmcm9tKGFycmF5TGlrZSAvKiwgbWFwRm4sIHRoaXNBcmcgKi8pIHsKICAgICAg
ICAgbGVuZ3RoVmFsdWUgPSAobnVtYmVyVmFsdWUgPiAwID8gMSA6IC0xKSAqIEBmbG9vcihAYWJz
KG51bWJlclZhbHVlKSk7CiAgICAgfQogICAgIC8vIG9yaWdpbmFsbHkgTWF0aC5taW4oTWF0aC5t
YXgobGVuZ3RoLCAwKSwgbWF4U2FmZUludGVnZXIpKTsKLSAgICB2YXIgaXRlbXNMZW5ndGggPSBs
ZW5ndGhWYWx1ZSA+IDAgPyAobGVuZ3RoVmFsdWUgPCBtYXhTYWZlSW50ZWdlciA/IGxlbmd0aFZh
bHVlIDogbWF4U2FmZUludGVnZXIpIDogMDsKKyAgICB2YXIgbGVuID0gbGVuZ3RoVmFsdWUgPiAw
ID8gKGxlbmd0aFZhbHVlIDwgbWF4U2FmZUludGVnZXIgPyBsZW5ndGhWYWx1ZSA6IG1heFNhZmVJ
bnRlZ2VyKSA6IDA7CiAKLSAgICB2YXIgcmVzdWx0ID0gKHR5cGVvZiB0aGlzT2JqID09PSAiZnVu
Y3Rpb24iKSA/IEBPYmplY3QobmV3IHRoaXNPYmooaXRlbXNMZW5ndGgpKSA6IG5ldyBAQXJyYXko
aXRlbXNMZW5ndGgpOworICAgIC8vIFRPRE86IE5lZWQgaXNDb25zdHJ1Y3Rvcih0aGlzT2JqKSBp
bnN0ZWFkIG9mIHR5cGVvZiAiZnVuY3Rpb24iIGNoZWNrLgorICAgIHZhciByZXN1bHQgPSAodHlw
ZW9mIHRoaXNPYmogPT09ICJmdW5jdGlvbiIpID8gQE9iamVjdChuZXcgdGhpc09iaihsZW4pKSA6
IG5ldyBAQXJyYXkobGVuKTsKIAogICAgIHZhciBrID0gMDsKLSAgICB3aGlsZSAoayA8IGl0ZW1z
TGVuZ3RoKSB7Ci0gICAgICAgIHZhciB2YWx1ZSA9IGl0ZW1zW2tdOworICAgIHdoaWxlIChrIDwg
bGVuKSB7CisgICAgICAgIHZhciB2YWx1ZSA9IGFycmF5TGlrZVtrXTsKICAgICAgICAgaWYgKG1h
cEZuKQotICAgICAgICAgICAgQHB1dEJ5VmFsRGlyZWN0KHJlc3VsdCwgaywgdHlwZW9mIHRoaXNB
cmcgPT09ICJ1bmRlZmluZWQiID8gbWFwRm4odmFsdWUsIGspIDogbWFwRm4uQGNhbGwodGhpc0Fy
ZywgdmFsdWUsIGspKTsKKyAgICAgICAgICAgIEBwdXRCeVZhbERpcmVjdChyZXN1bHQsIGssIHRo
aXNBcmcgPT09IHVuZGVmaW5lZCA/IG1hcEZuKHZhbHVlLCBrKSA6IG1hcEZuLkBjYWxsKHRoaXNB
cmcsIHZhbHVlLCBrKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIEBwdXRCeVZhbERpcmVj
dChyZXN1bHQsIGssIHZhbHVlKTsKICAgICAgICAgayArPSAxOwogICAgIH0KIAotICAgIHJlc3Vs
dC5sZW5ndGggPSBpdGVtc0xlbmd0aDsKKyAgICByZXN1bHQubGVuZ3RoID0gbGVuOwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1BhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKaW5k
ZXggMzJkMjUwY2E3Y2M1M2Y0YmVhNjFmNjFiNmRhYmZlNjRiY2JjNjg0Ni4uYzk3YzhlZWQxNTRl
M2IwNzIzOTIzMGI0MTJiMDI4NzAwMzg4YTI2YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvUGFyc2VyLmNwcApAQCAtMjg4LDE0ICsyODgsMTQgQEAKICAgICAgICAgZmVhdHVyZXMgfD0g
TW9kaWZpZWRBcmd1bWVudHNGZWF0dXJlOwogICAgIFZlY3RvcjxSZWZQdHI8U3RyaW5nSW1wbD4+
IGNsb3NlZFZhcmlhYmxlczsKICAgICBpZiAobV9wYXJzaW5nQnVpbHRpbikgewotICAgICAgICBS
RUxFQVNFX0FTU0VSVCghY2FwdHVyZWRWYXJpYWJsZXMuc2l6ZSgpKTsKICAgICAgICAgSWRlbnRp
ZmllclNldCB1c2VkVmFyaWFibGVzOwogICAgICAgICBzY29wZS0+Z2V0VXNlZFZhcmlhYmxlcyh1
c2VkVmFyaWFibGVzKTsKICAgICAgICAgZm9yIChjb25zdCBhdXRvJiB2YXJpYWJsZSA6IHVzZWRW
YXJpYWJsZXMpIHsKLSAgICAgICAgICAgIGlmIChzY29wZS0+aGFzRGVjbGFyZWRWYXJpYWJsZShJ
ZGVudGlmaWVyOjpmcm9tVWlkKG1fdm0sIHZhcmlhYmxlLmdldCgpKSkpCisgICAgICAgICAgICBJ
ZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJZGVudGlmaWVyOjpmcm9tVWlkKG1fdm0sIHZhcmlhYmxl
LmdldCgpKTsKKyAgICAgICAgICAgIGlmIChzY29wZS0+aGFzRGVjbGFyZWRWYXJpYWJsZShpZGVu
dGlmaWVyKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgaWYgKHNjb3BlLT5oYXNEZWNsYXJlZFBhcmFtZXRlcihJZGVudGlmaWVyOjpmcm9tVWlk
KG1fdm0sIHZhcmlhYmxlLmdldCgpKSkpCisgICAgICAgICAgICBpZiAoc2NvcGUtPmhhc0RlY2xh
cmVkUGFyYW1ldGVyKGlkZW50aWZpZXIpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAg
ICAgICAgICAgICBpZiAodmFyaWFibGUgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRz
LmltcGwoKSkKQEAgLTMwMyw2ICszMDMsMTkgQEAKIAogICAgICAgICAgICAgY2xvc2VkVmFyaWFi
bGVzLmFwcGVuZCh2YXJpYWJsZSk7CiAgICAgICAgIH0KKworICAgICAgICBpZiAoIWNhcHR1cmVk
VmFyaWFibGVzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBjYXB0
dXJlZFZhcmlhYmxlIDogY2FwdHVyZWRWYXJpYWJsZXMpIHsKKyAgICAgICAgICAgICAgICBJZGVu
dGlmaWVyIGlkZW50aWZpZXIgPSBJZGVudGlmaWVyOjpmcm9tVWlkKG1fdm0sIGNhcHR1cmVkVmFy
aWFibGUuZ2V0KCkpOworICAgICAgICAgICAgICAgIGlmIChzY29wZS0+aGFzRGVjbGFyZWRWYXJp
YWJsZShpZGVudGlmaWVyKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgICAgICAgICBpZiAoc2NvcGUtPmhhc0RlY2xhcmVkUGFyYW1ldGVyKGlkZW50aWZpZXIpKQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAg
ICAgZGlkRmluaXNoUGFyc2luZyhzb3VyY2VFbGVtZW50cywgY29udGV4dC52YXJEZWNsYXJhdGlv
bnMoKSwgY29udGV4dC5mdW5jRGVjbGFyYXRpb25zKCksIGZlYXR1cmVzLAogICAgICAgICBjb250
ZXh0Lm51bUNvbnN0YW50cygpLCBjYXB0dXJlZFZhcmlhYmxlcywgV1RGOjptb3ZlKGNsb3NlZFZh
cmlhYmxlcykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29t
bW9uSWRlbnRpZmllcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklk
ZW50aWZpZXJzLmgKaW5kZXggNmI1YmY1ZDYwMDUwNGUwZmZmMmZjYjZmOWVmYTg1M2FmNTU0MmUy
My4uOGNiNTgwMGE0Mzg5NzRkNmNiMmVlY2M5N2E3NDQ5Y2E5NWQ5NWRhYSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oCkBAIC0yNDUs
NiArMjQ1LDcgQEAKIAogI2RlZmluZSBKU0NfQ09NTU9OX1BSSVZBVEVfSURFTlRJRklFUlNfRUFD
SF9QUk9QRVJUWV9OQU1FKG1hY3JvKSBcCiAgICAgSlNDX0NPTU1PTl9CWVRFQ09ERV9JTlRSSU5T
SUNTX0VBQ0hfTkFNRShtYWNybykgXAorICAgIG1hY3JvKHN5bWJvbEl0ZXJhdG9yKSBcCiAgICAg
bWFjcm8oaXRlcmF0ZWRPYmplY3QpIFwKICAgICBtYWNybyhhcnJheUl0ZXJhdG9yTmV4dEluZGV4
KSBcCiAgICAgbWFjcm8oYXJyYXlJdGVyYXRpb25LaW5kKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKaW5kZXggZDkxYjYxZmZjNmM1NTQw
ZWQ1ZGE4ZTczZTVlZjYwNjU3Yjk4ZWZmZC4uOTE1YmE5MmZkZmRkZDQ0NGY2N2E5NjQyZmQ5OTYw
N2ZmZmFkMjA2NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmNwcApAQCAtNDQ0LDYgKzQ0NCw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6Omlu
aXQoVk0mIHZtKQogICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+
YXJyYXlJdGVyYXRpb25LaW5kS2V5UHJpdmF0ZU5hbWUsIGpzTnVtYmVyKEFycmF5SXRlcmF0ZUtl
eSksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKICAgICAgICAgR2xvYmFsUHJv
cGVydHlJbmZvKHZtLnByb3BlcnR5TmFtZXMtPmFycmF5SXRlcmF0aW9uS2luZFZhbHVlUHJpdmF0
ZU5hbWUsIGpzTnVtYmVyKEFycmF5SXRlcmF0ZVZhbHVlKSwgRG9udEVudW0gfCBEb250RGVsZXRl
IHwgUmVhZE9ubHkpLAogICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1l
cy0+YXJyYXlJdGVyYXRpb25LaW5kS2V5VmFsdWVQcml2YXRlTmFtZSwganNOdW1iZXIoQXJyYXlJ
dGVyYXRlS2V5VmFsdWUpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCisgICAg
ICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5zeW1ib2xJdGVyYXRvclBy
aXZhdGVOYW1lLCBTeW1ib2w6OmNyZWF0ZSh2bSwgdm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JT
eW1ib2wuaW1wbCgpKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAogICAgIH07
CiAgICAgYWRkU3RhdGljR2xvYmFscyhzdGF0aWNHbG9iYWxzLCBXVEZfQVJSQVlfTEVOR1RIKHN0
YXRpY0dsb2JhbHMpKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0cy9zdHJlc3MvYXJyYXktZnJvbS13aXRoLWl0ZXJhYmxlLmpzIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3N0cmVzcy9hcnJheS1mcm9tLXdpdGgtaXRlcmFibGUuanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZjMyNTdlM2ZhYzQyNzY4MTA1MzEzNWFiZTRkNGExNTg3Y2M2MmMwYQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvYXJyYXktZnJvbS13aXRo
LWl0ZXJhYmxlLmpzCkBAIC0wLDAgKzEsNjggQEAKK2Z1bmN0aW9uIHNob3VsZEJlKGFjdHVhbCwg
ZXhwZWN0ZWQpIHsKKyAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkKKyAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCdiYWQgdmFsdWU6ICcgKyBhY3R1YWwpOworfQorCisvLyBTZXQgaXMgaXRlcmFi
bGUuCit2YXIgc2V0ID0gbmV3IFNldChbMCwgMSwgMiwgMywgNCwgNV0pOwordmFyIGFycmF5ID0g
QXJyYXkuZnJvbShzZXQpOworCitzaG91bGRCZShhcnJheS5sZW5ndGgsIHNldC5zaXplKTsKK2Zv
ciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyArK2kpIHsKKyAgICBzaG91bGRCZShzZXQu
aGFzKGFycmF5W2ldKSwgdHJ1ZSk7Cit9CisKKy8vIE1hcCBpcyBpdGVyYWJsZS4KK3ZhciBtYXAg
PSBuZXcgTWFwKFsKKyAgICBbMCwgMF0sCisgICAgWzEsIDBdLAorICAgIFsyLCAwXSwKKyAgICBb
MywgMF0sCisgICAgWzQsIDBdLAorICAgIFs1LCAwXQorXSk7Cit2YXIgYXJyYXkgPSBBcnJheS5m
cm9tKG1hcCk7CisKK3Nob3VsZEJlKGFycmF5Lmxlbmd0aCwgbWFwLnNpemUpOworZm9yICh2YXIg
aSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7ICsraSkgeworICAgIHNob3VsZEJlKGFycmF5W2ldWzFd
LCAwKTsKKyAgICBzaG91bGRCZShzZXQuaGFzKGFycmF5W2ldWzBdKSwgdHJ1ZSk7Cit9CisKKy8v
IFN0cmluZyBpcyBpdGVyYWJsZQordmFyIHN0cmluZyA9ICJDb2NvYSBDYXBwdWNjaW5vIjsKK3Zh
ciBhcnJheSA9IEFycmF5LmZyb20oc3RyaW5nKTsKK3Nob3VsZEJlKGFycmF5Lmxlbmd0aCwgc3Ry
aW5nLmxlbmd0aCk7Citmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgKytpKSB7Cisg
ICAgc2hvdWxkQmUoYXJyYXlbaV0sIHN0cmluZ1tpXSk7Cit9CisKKy8vIEFyZ3VtZW50cyBpcyBp
dGVyYWJsZQordmFyIGFyZ3VtZW50c0dlbmVyYXRvcnMgPSBbCisgICAgZnVuY3Rpb24gKCkgewor
ICAgICAgICByZXR1cm4gYXJndW1lbnRzOworICAgIH0sCisKKyAgICBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICd1c2Ugc3RyaWN0JzsKKyAgICAgICAgcmV0dXJuIGFyZ3VtZW50czsKKyAgICB9LAor
CisgICAgZnVuY3Rpb24gKGEsIGIsIGMpIHsKKyAgICAgICAgcmV0dXJuIGFyZ3VtZW50czsKKyAg
ICB9LAorCisgICAgZnVuY3Rpb24gKGEsIGIsIGMpIHsKKyAgICAgICAgJ3VzZSBzdHJpY3QnOwor
ICAgICAgICByZXR1cm4gYXJndW1lbnRzOworICAgIH0KK107CisKK2ZvciAodmFyIGdlbiBvZiBh
cmd1bWVudHNHZW5lcmF0b3JzKSB7CisgICAgdmFyIGFyZ3MgPSBnZW4oMSwgMiwgMywgNCwgNSk7
CisgICAgdmFyIGFycmF5ID0gQXJyYXkuZnJvbShhcmdzKTsKKyAgICBzaG91bGRCZShhcnJheS5s
ZW5ndGgsIGFyZ3MubGVuZ3RoKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0
aDsgKytpKSB7CisgICAgICAgIHNob3VsZEJlKGFycmF5W2ldLCBhcmdzW2ldKTsKKyAgICB9Cit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2FycmF5LWZy
b20td2l0aC1pdGVyYXRvci5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mv
YXJyYXktZnJvbS13aXRoLWl0ZXJhdG9yLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM5NDU2YTFkYWM2ZjFlNDY1
MDM2YWUyZTMzYmUwODhhOTliNDFmYzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvdGVzdHMvc3RyZXNzL2FycmF5LWZyb20td2l0aC1pdGVyYXRvci5qcwpAQCAtMCww
ICsxLDEyOSBAQAorZnVuY3Rpb24gc2hvdWxkQmUoYWN0dWFsLCBleHBlY3RlZCkgeworICAgIGlm
IChhY3R1YWwgIT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCB2YWx1
ZTogJyArIGFjdHVhbCk7Cit9CisKK2Z1bmN0aW9uIHNob3VsZFRocm93KGZ1bmMsIG1lc3NhZ2Up
IHsKKyAgICB2YXIgZXJyb3IgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGZ1bmMoKTsKKyAg
ICB9IGNhdGNoIChlKSB7CisgICAgICAgIGVycm9yID0gZTsKKyAgICB9CisgICAgaWYgKCFlcnJv
cikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJub3QgdGhyb3duLiIpOworICAgIGlmIChTdHJp
bmcoZXJyb3IpICE9PSBtZXNzYWdlKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCBlcnJv
cjogIiArIFN0cmluZyhlcnJvcikpOworfQorCit2YXIgb3JpZ2luYWxBcnJheSA9IFswLCAxLCAy
LCAzLCA0LCA1LCA2LCA3LCA4LCA5XTsKKwordmFyIGFycmF5ID0gQXJyYXkuZnJvbShvcmlnaW5h
bEFycmF5LnZhbHVlcygpKTsKK3Nob3VsZEJlKGFycmF5Lmxlbmd0aCwgb3JpZ2luYWxBcnJheS5s
ZW5ndGgpOworZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7ICsraSkgeworICAgIHNo
b3VsZEJlKGFycmF5W2ldLCBvcmlnaW5hbEFycmF5W2ldKTsKK30KKworZnVuY3Rpb24gY3JlYXRl
SXRlcmF0b3IoY2FsbGJhY2spIHsKKyAgICB2YXIgYXJyYXkgPSBbMCwxLDIsMyw0LDVdOworICAg
IHZhciBpdGVyYXRvciA9IGFycmF5W1N5bWJvbC5pdGVyYXRvcl0oKTsKKyAgICBpdGVyYXRvci5y
ZXR1cm4gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGl0ZXJhdG9yLnJldHVybmVkID0gdHJ1ZTsK
KyAgICAgICAgaWYgKGNhbGxiYWNrKQorICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKHRoaXMp
OworICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkIH07CisgICAg
fTsKKyAgICBpdGVyYXRvci5yZXR1cm5lZCA9IGZhbHNlOworICAgIHJldHVybiBpdGVyYXRvcjsK
K30KKwordmFyIGl0ZXJhdG9yID0gY3JlYXRlSXRlcmF0b3IoKTsKK3ZhciByZXN1bHQgPSBBcnJh
eS5mcm9tKGl0ZXJhdG9yKTsKK3Nob3VsZEJlKHJlc3VsdC5sZW5ndGgsIDYpOworZm9yICh2YXIg
aSA9IDA7IGkgPCA2OyArK2kpIHsKKyAgICBzaG91bGRCZShyZXN1bHRbaV0sIGkpOworfQorc2hv
dWxkQmUoaXRlcmF0b3IucmV0dXJuZWQsIGZhbHNlKTsKKworLy8gbWFwRm4gcmFpc2VzIGFuIGVy
cm9yLgordmFyIGl0ZXJhdG9yID0gY3JlYXRlSXRlcmF0b3IoKTsKK3Nob3VsZFRocm93KGZ1bmN0
aW9uICgpIHsKKyAgICB2YXIgcmVzdWx0ID0gQXJyYXkuZnJvbShpdGVyYXRvciwgZnVuY3Rpb24g
KCkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21hcCBmdW5jJyk7CisgICAgfSk7Cit9LCAi
RXJyb3I6IG1hcCBmdW5jIik7CitzaG91bGRCZShpdGVyYXRvci5yZXR1cm5lZCwgdHJ1ZSk7CisK
Ky8vIG1hcEZuIHJhaXNlcyBhbiBlcnJvciBhbmQgaXRlcmF0b3IucmV0dXJuIGFsc28gcmFpc2Vz
IGFuIGVycm9yLgordmFyIGl0ZXJhdG9yID0gY3JlYXRlSXRlcmF0b3IoZnVuY3Rpb24gKCkgewor
ICAgIHRocm93IG5ldyBFcnJvcignaXRlcmF0b3IucmV0dXJuJyk7Cit9KTsKKworLy8gQW4gZXJy
b3IgcmFpc2VkIGluIGl0ZXJhdG9yLnJldHVybiBpcyBkaXNjYXJkZWQuCitzaG91bGRUaHJvdyhm
dW5jdGlvbiAoKSB7CisgICAgdmFyIHJlc3VsdCA9IEFycmF5LmZyb20oaXRlcmF0b3IsIGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtYXAgZnVuYycpOworICAgIH0pOwor
fSwgIkVycm9yOiBtYXAgZnVuYyIpOworc2hvdWxkQmUoaXRlcmF0b3IucmV0dXJuZWQsIHRydWUp
OworCisvLyBpdGVyYWJsZVtTeW1ib2wuaXRlcmF0b3JdIGlzIG5vdCBhIGZ1bmN0aW9uLgorc2hv
dWxkVGhyb3coZnVuY3Rpb24gKCkgeworICAgIHZhciBpdGVyYXRvciA9IFtdLnZhbHVlcygpOwor
ICAgIGl0ZXJhdG9yW1N5bWJvbC5pdGVyYXRvcl0gPSB7fTsKKyAgICBBcnJheS5mcm9tKGl0ZXJh
dG9yKTsKK30sICJUeXBlRXJyb3I6IEFycmF5LmZyb20gcmVxdWlyZXMgdGhhdCB0aGUgQEBpdGVy
YXRvciBwcm9wZXJ0eSBvZiB0aGUgZmlyc3QgYXJndW1lbnQsIHdoZW4gZXhpc3RzLCBiZSBhIGZ1
bmN0aW9uIik7CisKKy8vIGl0ZXJhYmxlW1N5bWJvbC5pdGVyYXRvcl0gcmFpc2VzIGFuIGVycm9y
Lgorc2hvdWxkVGhyb3coZnVuY3Rpb24gKCkgeworICAgIHZhciBpdGVyYWJsZSA9IFtdOworICAg
IGl0ZXJhYmxlW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRocm93
IG5ldyBFcnJvcigiaXRlcmF0b3IiKTsKKyAgICB9OworICAgIEFycmF5LmZyb20oaXRlcmFibGUp
OworfSwgIkVycm9yOiBpdGVyYXRvciIpOworCisvLyBpdGVyYWJsZVtTeW1ib2wuaXRlcmF0b3Jd
IGxvb2t1cCBpcyBvbmx5IG9uY2UuCisoZnVuY3Rpb24gKCkgeworICAgIHZhciBpdGVyYWJsZSA9
IFswLCAxLCAyLCAzLCA0LCA1XTsKKyAgICB2YXIgY291bnQgPSAwOworICAgIHZhciBpdGVyYXRv
ckNhbGxDb3VudCA9IDA7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGl0ZXJhYmxlLCBTeW1i
b2wuaXRlcmF0b3IsIHsKKyAgICAgICAgZ2V0KCkgeworICAgICAgICAgICAgKytjb3VudDsKKyAg
ICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgKytpdGVyYXRv
ckNhbGxDb3VudDsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXMoKTsKKyAgICAg
ICAgICAgIH07CisgICAgICAgIH0KKyAgICB9KTsKKyAgICB2YXIgZ2VuZXJhdGVkID0gQXJyYXku
ZnJvbShpdGVyYWJsZSk7CisgICAgc2hvdWxkQmUoZ2VuZXJhdGVkLmxlbmd0aCwgaXRlcmFibGUu
bGVuZ3RoKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZXJhYmxlLmxlbmd0aDsgKytpKSB7
CisgICAgICAgIHNob3VsZEJlKGdlbmVyYXRlZFtpXSwgaXRlcmFibGVbaV0pOworICAgIH0KKyAg
ICBzaG91bGRCZShjb3VudCwgMSk7CisgICAgc2hvdWxkQmUoaXRlcmF0b3JDYWxsQ291bnQsIDEp
OworfSgpKTsKKworLy8gVGhlIFN5bWJvbC5pdGVyYXRvciBtZXRob2Qgb2YgdGhlIGl0ZXJhdG9y
IGdlbmVyYXRlZCBieSBpdGVyYWJsZVtTeW1ib2wuaXRlcmF0b3JdIGlzIG5vdCBsb29rZWQgdXAu
CisoZnVuY3Rpb24gKCkgeworICAgIHZhciBpdGVyYWJsZSA9IFswLCAxLCAyLCAzLCA0LCA1XTsK
KyAgICB2YXIgY291bnQgPSAwOworICAgIGl0ZXJhYmxlW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgICsrY291bnQ7CisgICAgICAgIHZhciBpdGVyYXRvciA9IHRoaXMu
dmFsdWVzKCk7CisgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpdGVyYXRvciwgU3ltYm9s
Lml0ZXJhdG9yLCB7CisgICAgICAgICAgICBnZXQoKSB7CisgICAgICAgICAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCdpdGVyYXRvcltAQGl0ZXJhdG9yXSBpcyB0b3VjaGVkJyk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gaXRlcmF0b3I7CisgICAgfTsKKyAgICB2
YXIgZ2VuZXJhdGVkID0gQXJyYXkuZnJvbShpdGVyYWJsZSk7CisgICAgc2hvdWxkQmUoZ2VuZXJh
dGVkLmxlbmd0aCwgaXRlcmFibGUubGVuZ3RoKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0
ZXJhYmxlLmxlbmd0aDsgKytpKSB7CisgICAgICAgIHNob3VsZEJlKGdlbmVyYXRlZFtpXSwgaXRl
cmFibGVbaV0pOworICAgIH0KKyAgICBzaG91bGRCZShjb3VudCwgMSk7Cit9KCkpOwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4
IGQ4ODZjZTU5ZmU1ZjE2ODkwMGI5YjViYzVkMzNiZjZmYTcxMTJlOTcuLjdmNjZhZjQyMjVhOTRi
NjgzNWM4YjU5YWNkMzdjNTkyYjVlMDYzNTcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxNS0w
NC0yMyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKworICAgICAgICBb
RVM2XSBBcnJheS5mcm9tIG5lZWQgdG8gYWNjZXB0IGl0ZXJhYmxlcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMDU1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQXJyYXkuZnJvbSBub3cgYWNjZXB0cyBp
dGVyYWJsZXMuCisKKyAgICAgICAgKiBqcy9hcnJheS1mcm9tLWV4cGVjdGVkLnR4dDoKKwogMjAx
NS0wNC0yMiAgTWFyY29zIENoYXZhcnLDrWEgVGVpamVpcm8gIDxjaGF2YXJyaWExOTkxQGdtYWls
LmNvbT4KIAogICAgICAgICBbR1RLXSBHYXJkZW5pbmcgMjFzdCBBcHJpbC4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2pzL2FycmF5LWZyb20tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvanMv
YXJyYXktZnJvbS1leHBlY3RlZC50eHQKaW5kZXggMTBmZDA0MDQwMzM0M2ZmNGNmMTFhYmVjMWFi
MjU3N2FiZGI5Mzk3ZS4uOTQ0ZTU0MjFjMDI3NTg4YzI3OWQ3MzE3ZTVlZDcxYzg1MDlhNWEyNiAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvanMvYXJyYXktZnJvbS1leHBlY3RlZC50eHQKKysrIGIv
TGF5b3V0VGVzdHMvanMvYXJyYXktZnJvbS1leHBlY3RlZC50eHQKQEAgLTY2LDcgKzY2LDcgQEAg
UEFTUyBBcnJheS5mcm9tKGNyYXp5UGFudHMsIGZ1bmN0aW9uICh4KSB7IGNyYXp5UGFudHMubGVu
Z3RoID0geDsgcmV0dXJuIHg7IH0pIGkKIAogQ29uc3RydWN0aW9uIHVzaW5nIFNldCBvYmplY3QK
IC0tLS0tLS0KLUZBSUwgQXJyYXkuZnJvbShzZXQpIHNob3VsZCBiZSB6ZXJvLG9uZSx0d28uIFdh
cyAuCitQQVNTIEFycmF5LmZyb20oc2V0KSBpcyBbJ3plcm8nLCAnb25lJywgJ3R3byddCiBQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251465</attachid>
            <date>2015-04-23 12:11:25 -0700</date>
            <delta_ts>2015-04-26 12:13:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141055-20150424041020.patch</filename>
            <type>text/plain</type>
            <size>16503</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgzMTg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
NGQxNDk0ZmQ1OTJmYTE0MWUzMzA2ODA1ZTZlMmI2ODQwYzRhNDM5Li44M2EyNTVjMzIxY2QxMDZl
ZTdiMzk4ZWJkOTc1Y2Y1MDRhNWQ2MjkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MiBAQAorMjAxNS0wNC0yMyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbRVM2XSBBcnJheS5mcm9tIG5lZWQgdG8gYWNjZXB0IGl0ZXJhYmxl
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMDU1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRVM2IHNw
ZWMgcmVxdWlyZXMgdGhhdCBBcnJheS5mcm9tIGFjY2VwdHMgaXRlcmFibGUgb2JqZWN0cy4KKyAg
ICAgICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHRoaXMgZnVuY3Rpb25hbGl0eSwgQXJyYXkuZnJv
bSBhY2NlcHRpbmcgaXRlcmFibGUgb2JqZWN0cy4KKworICAgICAgICBDdXJyZW50bHksIGBpc0Nv
bnN0cnVjdG9yYCBpcyBub3QgdXNlZC4gSW5zdGVhZCBvZiBpdCwgYHR5cGVvZiB0aGlPYmogPT09
ICJmdW5jdGlvbiJgIGlzIHVzZWQuCisgICAgICAgIEhvd2V2ZXIsIGl0IGRvZXNuJ3QgY29uZm9y
bSB0byB0aGUgc3BlYy4gV2hpbGUgYGlzQ29uc3RydWN0b3JgIHF1ZXJpZXMgdGhlIGdpdmVuIG9i
amVjdCBoYXMgYFtbQ29uc3RydWN0XV1gLAorICAgICAgICBgdHlwZW9mIHRoaXNPYmogPT09ICJm
dW5jdGlvbiJgIHF1ZXJpZXMgdGhlIGdpdmVuIG9iamVjdCBoYXMgYFtbQ2FsbF1dYC4KKyAgICAg
ICAgVGhpcyB3aWxsIGJlIGZpeGVkIGluIHRoZSBzdWJzZXF1ZW50IHBhdGNoWzFdLgorCisgICAg
ICAgIFsxXTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NDA5Mwor
CisgICAgICAgICogYnVpbHRpbnMvQXJyYXlDb25zdHJ1Y3Rvci5qczoKKyAgICAgICAgKGZyb20p
OgorICAgICAgICAqIHBhcnNlci9QYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4
ZXJUeXBlPjo6cGFyc2VJbm5lcik6CisgICAgICAgICogcnVudGltZS9Db21tb25JZGVudGlmaWVy
cy5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlND
OjpKU0dsb2JhbE9iamVjdDo6aW5pdCk6CisgICAgICAgICogdGVzdHMvc3RyZXNzL2FycmF5LWZy
b20td2l0aC1pdGVyYWJsZS5qczogQWRkZWQuCisgICAgICAgIChzaG91bGRCZSk6CisgICAgICAg
ICguc2V0IGZvcik6CisgICAgICAgICguc2V0IHZhcik6CisgICAgICAgICguZ2V0IHZhcik6Cisg
ICAgICAgIChhcmd1bWVudHNHZW5lcmF0b3JzKToKKyAgICAgICAgKC5zZXQgc2hvdWxkQmUpOgor
ICAgICAgICAoLnNldCBuZXcpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9hcnJheS1mcm9tLXdp
dGgtaXRlcmF0b3IuanM6IEFkZGVkLgorICAgICAgICAoc2hvdWxkQmUpOgorICAgICAgICAoc2hv
dWxkVGhyb3cpOgorICAgICAgICAoY3JlYXRlSXRlcmF0b3IuaXRlcmF0b3IucmV0dXJuKToKKyAg
ICAgICAgKGNyZWF0ZUl0ZXJhdG9yKToKKyAgICAgICAgKC4pOgorCiAyMDE1LTA0LTIyICBGaWxp
cCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgZml4IGRl
YnVnIGJ1aWxkLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0Fy
cmF5Q29uc3RydWN0b3IuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQXJyYXlD
b25zdHJ1Y3Rvci5qcwppbmRleCBiYmUwNzhhZDVmYTNmN2UwMmUwYThjOTc4MzY0ODEyMTA3YWFl
MjQ3Li42YmQ0ZDg2YjExYjBhZWZlYzNkYTM3NDI4ZGQ3YmFmYzBhZDlkZDg0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQXJyYXlDb25zdHJ1Y3Rvci5qcworKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQXJyYXlDb25zdHJ1Y3Rvci5qcwpAQCAt
MjMsMTUgKzIzLDExIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLWZ1bmN0aW9uIGZyb20oYXJy
YXlMaWtlIC8qLCBtYXBGbiwgdGhpc0FyZyAqLykgeworZnVuY3Rpb24gZnJvbShpdGVtcyAvKiwg
bWFwRm4sIHRoaXNBcmcgKi8pIHsKICAgICAidXNlIHN0cmljdCI7CiAKLSAgICBpZiAoYXJyYXlM
aWtlID09IG51bGwpCi0gICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJBcnJheS5mcm9tIHJl
cXVpcmVzIGFuIGFycmF5LWxpa2Ugb2JqZWN0IC0gbm90IG51bGwgb3IgdW5kZWZpbmVkIik7Ci0K
ICAgICB2YXIgdGhpc09iaiA9IHRoaXM7CiAKLSAgICB2YXIgaXRlbXMgPSBAT2JqZWN0KGFycmF5
TGlrZSk7CiAgICAgdmFyIG1hcEZuID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNb
MV0gOiB1bmRlZmluZWQ7CiAKICAgICB2YXIgdGhpc0FyZzsKQEAgLTQ0LDggKzQwLDQ1IEBAIGZ1
bmN0aW9uIGZyb20oYXJyYXlMaWtlIC8qLCBtYXBGbiwgdGhpc0FyZyAqLykgewogICAgICAgICAg
ICAgdGhpc0FyZyA9IGFyZ3VtZW50c1syXTsKICAgICB9CiAKKyAgICBpZiAoaXRlbXMgPT0gbnVs
bCkKKyAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIkFycmF5LmZyb20gcmVxdWlyZXMgYW4g
YXJyYXktbGlrZSBvYmplY3QgLSBub3QgbnVsbCBvciB1bmRlZmluZWQiKTsKKworICAgIHZhciBp
dGVyYXRvck1ldGhvZCA9IGl0ZW1zW0BzeW1ib2xJdGVyYXRvcl07CisgICAgaWYgKGl0ZXJhdG9y
TWV0aG9kICE9IG51bGwpIHsKKyAgICAgICAgaWYgKHR5cGVvZiBpdGVyYXRvck1ldGhvZCAhPT0g
ImZ1bmN0aW9uIikKKyAgICAgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJBcnJheS5mcm9t
IHJlcXVpcmVzIHRoYXQgdGhlIEBAaXRlcmF0b3IgcHJvcGVydHkgb2YgdGhlIGZpcnN0IGFyZ3Vt
ZW50LCB3aGVuIGV4aXN0cywgYmUgYSBmdW5jdGlvbiIpOworCisgICAgICAgIC8vIFRPRE86IE5l
ZWQgaXNDb25zdHJ1Y3Rvcih0aGlzT2JqKSBpbnN0ZWFkIG9mIHR5cGVvZiAiZnVuY3Rpb24iIGNo
ZWNrLgorICAgICAgICB2YXIgcmVzdWx0ID0gKHR5cGVvZiB0aGlzT2JqID09PSAiZnVuY3Rpb24i
KSA/IEBPYmplY3QobmV3IHRoaXNPYmooKSkgOiBbXTsKKworICAgICAgICB2YXIgayA9IDA7Cisg
ICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yTWV0aG9kLkBjYWxsKGl0ZW1zKTsKKworICAg
ICAgICAvLyBTaW5jZSBmb3Itb2YgbG9vcCBvbmNlIG1vcmUgbG9va3MgdXAgdGhlIEBAaXRlcmF0
b3IgcHJvcGVydHkgb2YgYSBnaXZlbiBpdGVyYWJsZSwKKyAgICAgICAgLy8gaXQgY291bGQgYmUg
b2JzZXJ2YWJsZSBpZiB0aGUgdXNlciBkZWZpbmVzIGEgZ2V0dGVyIGZvciBAQGl0ZXJhdG9yLgor
ICAgICAgICAvLyBUbyBhdm9pZCB0aGlzIHNpdHVhdGlvbiwgd2UgZGVmaW5lIGEgd3JhcHBlciBv
YmplY3QgdGhhdCBAQGl0ZXJhdG9yIGp1c3QgcmV0dXJucyBhIGdpdmVuIGl0ZXJhdG9yLgorICAg
ICAgICB2YXIgd3JhcHBlciA9IHsKKyAgICAgICAgICAgIFtAc3ltYm9sSXRlcmF0b3JdKCkgewor
ICAgICAgICAgICAgICAgIHJldHVybiBpdGVyYXRvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fTsKKworICAgICAgICBmb3IgKHZhciB2YWx1ZSBvZiB3cmFwcGVyKSB7CisgICAgICAgICAgICBp
ZiAobWFwRm4pCisgICAgICAgICAgICAgICAgQHB1dEJ5VmFsRGlyZWN0KHJlc3VsdCwgaywgdGhp
c0FyZyA9PT0gdW5kZWZpbmVkID8gbWFwRm4odmFsdWUsIGspIDogbWFwRm4uQGNhbGwodGhpc0Fy
ZywgdmFsdWUsIGspKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBAcHV0QnlW
YWxEaXJlY3QocmVzdWx0LCBrLCB2YWx1ZSk7CisgICAgICAgICAgICBrICs9IDE7CisgICAgICAg
IH0KKworICAgICAgICByZXN1bHQubGVuZ3RoID0gazsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisKKyAgICB2YXIgYXJyYXlMaWtlID0gQE9iamVjdChpdGVtcyk7CisKICAgICB2YXIg
bWF4U2FmZUludGVnZXIgPSA5MDA3MTk5MjU0NzQwOTkxOwotICAgIHZhciBudW1iZXJWYWx1ZSA9
IEBOdW1iZXIoaXRlbXMubGVuZ3RoKTsKKyAgICB2YXIgbnVtYmVyVmFsdWUgPSBATnVtYmVyKGFy
cmF5TGlrZS5sZW5ndGgpOwogICAgIHZhciBsZW5ndGhWYWx1ZTsKICAgICBpZiAobnVtYmVyVmFs
dWUgIT0gbnVtYmVyVmFsdWUpIHsgIC8vIGlzTmFOKG51bWJlclZhbHVlKQogICAgICAgICBsZW5n
dGhWYWx1ZSA9IDA7CkBAIC01NSwyMCArODgsMjEgQEAgZnVuY3Rpb24gZnJvbShhcnJheUxpa2Ug
LyosIG1hcEZuLCB0aGlzQXJnICovKSB7CiAgICAgICAgIGxlbmd0aFZhbHVlID0gKG51bWJlclZh
bHVlID4gMCA/IDEgOiAtMSkgKiBAZmxvb3IoQGFicyhudW1iZXJWYWx1ZSkpOwogICAgIH0KICAg
ICAvLyBvcmlnaW5hbGx5IE1hdGgubWluKE1hdGgubWF4KGxlbmd0aCwgMCksIG1heFNhZmVJbnRl
Z2VyKSk7Ci0gICAgdmFyIGl0ZW1zTGVuZ3RoID0gbGVuZ3RoVmFsdWUgPiAwID8gKGxlbmd0aFZh
bHVlIDwgbWF4U2FmZUludGVnZXIgPyBsZW5ndGhWYWx1ZSA6IG1heFNhZmVJbnRlZ2VyKSA6IDA7
CisgICAgdmFyIGxlbiA9IGxlbmd0aFZhbHVlID4gMCA/IChsZW5ndGhWYWx1ZSA8IG1heFNhZmVJ
bnRlZ2VyID8gbGVuZ3RoVmFsdWUgOiBtYXhTYWZlSW50ZWdlcikgOiAwOwogCi0gICAgdmFyIHJl
c3VsdCA9ICh0eXBlb2YgdGhpc09iaiA9PT0gImZ1bmN0aW9uIikgPyBAT2JqZWN0KG5ldyB0aGlz
T2JqKGl0ZW1zTGVuZ3RoKSkgOiBuZXcgQEFycmF5KGl0ZW1zTGVuZ3RoKTsKKyAgICAvLyBUT0RP
OiBOZWVkIGlzQ29uc3RydWN0b3IodGhpc09iaikgaW5zdGVhZCBvZiB0eXBlb2YgImZ1bmN0aW9u
IiBjaGVjay4KKyAgICB2YXIgcmVzdWx0ID0gKHR5cGVvZiB0aGlzT2JqID09PSAiZnVuY3Rpb24i
KSA/IEBPYmplY3QobmV3IHRoaXNPYmoobGVuKSkgOiBuZXcgQEFycmF5KGxlbik7CiAKICAgICB2
YXIgayA9IDA7Ci0gICAgd2hpbGUgKGsgPCBpdGVtc0xlbmd0aCkgewotICAgICAgICB2YXIgdmFs
dWUgPSBpdGVtc1trXTsKKyAgICB3aGlsZSAoayA8IGxlbikgeworICAgICAgICB2YXIgdmFsdWUg
PSBhcnJheUxpa2Vba107CiAgICAgICAgIGlmIChtYXBGbikKLSAgICAgICAgICAgIEBwdXRCeVZh
bERpcmVjdChyZXN1bHQsIGssIHR5cGVvZiB0aGlzQXJnID09PSAidW5kZWZpbmVkIiA/IG1hcEZu
KHZhbHVlLCBrKSA6IG1hcEZuLkBjYWxsKHRoaXNBcmcsIHZhbHVlLCBrKSk7CisgICAgICAgICAg
ICBAcHV0QnlWYWxEaXJlY3QocmVzdWx0LCBrLCB0aGlzQXJnID09PSB1bmRlZmluZWQgPyBtYXBG
bih2YWx1ZSwgaykgOiBtYXBGbi5AY2FsbCh0aGlzQXJnLCB2YWx1ZSwgaykpOwogICAgICAgICBl
bHNlCiAgICAgICAgICAgICBAcHV0QnlWYWxEaXJlY3QocmVzdWx0LCBrLCB2YWx1ZSk7CiAgICAg
ICAgIGsgKz0gMTsKICAgICB9CiAKLSAgICByZXN1bHQubGVuZ3RoID0gaXRlbXNMZW5ndGg7Cisg
ICAgcmVzdWx0Lmxlbmd0aCA9IGxlbjsKICAgICByZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCmluZGV4IDMyZDI1MGNhN2NjNTNmNGJlYTYxZjYx
YjZkYWJmZTY0YmNiYzY4NDYuLmM5N2M4ZWVkMTU0ZTNiMDcyMzkyMzBiNDEyYjAyODcwMDM4OGEy
NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKQEAgLTI4OCwxNCAr
Mjg4LDE0IEBACiAgICAgICAgIGZlYXR1cmVzIHw9IE1vZGlmaWVkQXJndW1lbnRzRmVhdHVyZTsK
ICAgICBWZWN0b3I8UmVmUHRyPFN0cmluZ0ltcGw+PiBjbG9zZWRWYXJpYWJsZXM7CiAgICAgaWYg
KG1fcGFyc2luZ0J1aWx0aW4pIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWNhcHR1cmVkVmFy
aWFibGVzLnNpemUoKSk7CiAgICAgICAgIElkZW50aWZpZXJTZXQgdXNlZFZhcmlhYmxlczsKICAg
ICAgICAgc2NvcGUtPmdldFVzZWRWYXJpYWJsZXModXNlZFZhcmlhYmxlcyk7CiAgICAgICAgIGZv
ciAoY29uc3QgYXV0byYgdmFyaWFibGUgOiB1c2VkVmFyaWFibGVzKSB7Ci0gICAgICAgICAgICBp
ZiAoc2NvcGUtPmhhc0RlY2xhcmVkVmFyaWFibGUoSWRlbnRpZmllcjo6ZnJvbVVpZChtX3ZtLCB2
YXJpYWJsZS5nZXQoKSkpKQorICAgICAgICAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gSWRl
bnRpZmllcjo6ZnJvbVVpZChtX3ZtLCB2YXJpYWJsZS5nZXQoKSk7CisgICAgICAgICAgICBpZiAo
c2NvcGUtPmhhc0RlY2xhcmVkVmFyaWFibGUoaWRlbnRpZmllcikpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChzY29wZS0+aGFzRGVjbGFy
ZWRQYXJhbWV0ZXIoSWRlbnRpZmllcjo6ZnJvbVVpZChtX3ZtLCB2YXJpYWJsZS5nZXQoKSkpKQor
ICAgICAgICAgICAgaWYgKHNjb3BlLT5oYXNEZWNsYXJlZFBhcmFtZXRlcihpZGVudGlmaWVyKSkK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgaWYgKHZhcmlhYmxlID09
IG1fdm0tPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cy5pbXBsKCkpCkBAIC0zMDMsNiArMzAzLDE5
IEBACiAKICAgICAgICAgICAgIGNsb3NlZFZhcmlhYmxlcy5hcHBlbmQodmFyaWFibGUpOwogICAg
ICAgICB9CisKKyAgICAgICAgaWYgKCFjYXB0dXJlZFZhcmlhYmxlcy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgY2FwdHVyZWRWYXJpYWJsZSA6IGNhcHR1cmVkVmFy
aWFibGVzKSB7CisgICAgICAgICAgICAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gSWRlbnRp
Zmllcjo6ZnJvbVVpZChtX3ZtLCBjYXB0dXJlZFZhcmlhYmxlLmdldCgpKTsKKyAgICAgICAgICAg
ICAgICBpZiAoc2NvcGUtPmhhc0RlY2xhcmVkVmFyaWFibGUoaWRlbnRpZmllcikpCisgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgaWYgKHNjb3BlLT5oYXNE
ZWNsYXJlZFBhcmFtZXRlcihpZGVudGlmaWVyKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogICAgIGRpZEZpbmlzaFBhcnNpbmcoc291cmNl
RWxlbWVudHMsIGNvbnRleHQudmFyRGVjbGFyYXRpb25zKCksIGNvbnRleHQuZnVuY0RlY2xhcmF0
aW9ucygpLCBmZWF0dXJlcywKICAgICAgICAgY29udGV4dC5udW1Db25zdGFudHMoKSwgY2FwdHVy
ZWRWYXJpYWJsZXMsIFdURjo6bW92ZShjbG9zZWRWYXJpYWJsZXMpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oCmluZGV4IDZiNWJmNWQ2
MDA1MDRlMGZmZjJmY2I2ZjllZmE4NTNhZjU1NDJlMjMuLjhjYjU4MDBhNDM4OTc0ZDZjYjJlZWNj
OTdhNzQ0OWNhOTVkOTVkYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbW1vbklkZW50aWZpZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29tbW9uSWRlbnRpZmllcnMuaApAQCAtMjQ1LDYgKzI0NSw3IEBACiAKICNkZWZpbmUgSlND
X0NPTU1PTl9QUklWQVRFX0lERU5USUZJRVJTX0VBQ0hfUFJPUEVSVFlfTkFNRShtYWNybykgXAog
ICAgIEpTQ19DT01NT05fQllURUNPREVfSU5UUklOU0lDU19FQUNIX05BTUUobWFjcm8pIFwKKyAg
ICBtYWNybyhzeW1ib2xJdGVyYXRvcikgXAogICAgIG1hY3JvKGl0ZXJhdGVkT2JqZWN0KSBcCiAg
ICAgbWFjcm8oYXJyYXlJdGVyYXRvck5leHRJbmRleCkgXAogICAgIG1hY3JvKGFycmF5SXRlcmF0
aW9uS2luZCkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwCmluZGV4IGY1YmZmNGEzYmQ0OWFiYzMwYWZkZGU0N2RiNTY0MTc0MGJkMjc3OGEu
LmRlZmFkYmQ5NWU0ZTE0YmU1MDFlZTBiMjEwY2U4ODAyZmI5MDk0ZTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKQEAgLTQ0NCw2ICs0
NDQsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojppbml0KFZNJiB2bSkKICAgICAgICAgR2xvYmFs
UHJvcGVydHlJbmZvKHZtLnByb3BlcnR5TmFtZXMtPmFycmF5SXRlcmF0aW9uS2luZEtleVByaXZh
dGVOYW1lLCBqc051bWJlcihBcnJheUl0ZXJhdGVLZXkpLCBEb250RW51bSB8IERvbnREZWxldGUg
fCBSZWFkT25seSksCiAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVz
LT5hcnJheUl0ZXJhdGlvbktpbmRWYWx1ZVByaXZhdGVOYW1lLCBqc051bWJlcihBcnJheUl0ZXJh
dGVWYWx1ZSksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKICAgICAgICAgR2xv
YmFsUHJvcGVydHlJbmZvKHZtLnByb3BlcnR5TmFtZXMtPmFycmF5SXRlcmF0aW9uS2luZEtleVZh
bHVlUHJpdmF0ZU5hbWUsIGpzTnVtYmVyKEFycmF5SXRlcmF0ZUtleVZhbHVlKSwgRG9udEVudW0g
fCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAorICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0u
cHJvcGVydHlOYW1lcy0+c3ltYm9sSXRlcmF0b3JQcml2YXRlTmFtZSwgU3ltYm9sOjpjcmVhdGUo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9sLmltcGwoKSksIERvbnRFbnVtIHwg
RG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKICAgICB9OwogICAgIGFkZFN0YXRpY0dsb2JhbHMoc3Rh
dGljR2xvYmFscywgV1RGX0FSUkFZX0xFTkdUSChzdGF0aWNHbG9iYWxzKSk7CiAgICAgCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2FycmF5LWZyb20td2l0
aC1pdGVyYWJsZS5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvYXJyYXkt
ZnJvbS13aXRoLWl0ZXJhYmxlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY3ZTBhMjgyNGIzYjE0NTA3YTc4NGE4
YjZhOGYxZDBhNDNlYmNhM2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdHMvc3RyZXNzL2FycmF5LWZyb20td2l0aC1pdGVyYWJsZS5qcwpAQCAtMCwwICsxLDY5
IEBACitmdW5jdGlvbiBzaG91bGRCZShhY3R1YWwsIGV4cGVjdGVkKSB7CisgICAgaWYgKGFjdHVh
bCAhPT0gZXhwZWN0ZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcignYmFkIHZhbHVlOiAnICsg
YWN0dWFsKTsKK30KKworLy8gU2V0IGlzIGl0ZXJhYmxlLgordmFyIHNldCA9IG5ldyBTZXQoWzAs
IDEsIDIsIDMsIDQsIDVdKTsKK3ZhciBhcnJheSA9IEFycmF5LmZyb20oc2V0KTsKKworc2hvdWxk
QmUoYXJyYXkubGVuZ3RoLCBzZXQuc2l6ZSk7Citmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxl
bmd0aDsgKytpKSB7CisgICAgc2hvdWxkQmUoc2V0LmhhcyhhcnJheVtpXSksIHRydWUpOworfQor
CisvLyBNYXAgaXMgaXRlcmFibGUuCit2YXIgbWFwID0gbmV3IE1hcChbCisgICAgWzAsIDBdLAor
ICAgIFsxLCAwXSwKKyAgICBbMiwgMF0sCisgICAgWzMsIDBdLAorICAgIFs0LCAwXSwKKyAgICBb
NSwgMF0KK10pOwordmFyIGFycmF5ID0gQXJyYXkuZnJvbShtYXApOworCitzaG91bGRCZShhcnJh
eS5sZW5ndGgsIG1hcC5zaXplKTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyAr
K2kpIHsKKyAgICBzaG91bGRCZShhcnJheVtpXVsxXSwgMCk7CisgICAgc2hvdWxkQmUobWFwLmhh
cyhhcnJheVtpXVswXSksIHRydWUpOworICAgIHNob3VsZEJlKG1hcC5nZXQoYXJyYXlbaV1bMF0p
LCAwKTsKK30KKworLy8gU3RyaW5nIGlzIGl0ZXJhYmxlCit2YXIgc3RyaW5nID0gIkNvY29hIENh
cHB1Y2Npbm8iOwordmFyIGFycmF5ID0gQXJyYXkuZnJvbShzdHJpbmcpOworc2hvdWxkQmUoYXJy
YXkubGVuZ3RoLCBzdHJpbmcubGVuZ3RoKTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVu
Z3RoOyArK2kpIHsKKyAgICBzaG91bGRCZShhcnJheVtpXSwgc3RyaW5nW2ldKTsKK30KKworLy8g
QXJndW1lbnRzIGlzIGl0ZXJhYmxlCit2YXIgYXJndW1lbnRzR2VuZXJhdG9ycyA9IFsKKyAgICBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBhcmd1bWVudHM7CisgICAgfSwKKworICAgIGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgJ3VzZSBzdHJpY3QnOworICAgICAgICByZXR1cm4gYXJndW1l
bnRzOworICAgIH0sCisKKyAgICBmdW5jdGlvbiAoYSwgYiwgYykgeworICAgICAgICByZXR1cm4g
YXJndW1lbnRzOworICAgIH0sCisKKyAgICBmdW5jdGlvbiAoYSwgYiwgYykgeworICAgICAgICAn
dXNlIHN0cmljdCc7CisgICAgICAgIHJldHVybiBhcmd1bWVudHM7CisgICAgfQorXTsKKworZm9y
ICh2YXIgZ2VuIG9mIGFyZ3VtZW50c0dlbmVyYXRvcnMpIHsKKyAgICB2YXIgYXJncyA9IGdlbigx
LCAyLCAzLCA0LCA1KTsKKyAgICB2YXIgYXJyYXkgPSBBcnJheS5mcm9tKGFyZ3MpOworICAgIHNo
b3VsZEJlKGFycmF5Lmxlbmd0aCwgYXJncy5sZW5ndGgpOworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgYXJyYXkubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgc2hvdWxkQmUoYXJyYXlbaV0sIGFyZ3Nb
aV0pOworICAgIH0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9z
dHJlc3MvYXJyYXktZnJvbS13aXRoLWl0ZXJhdG9yLmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rlc3RzL3N0cmVzcy9hcnJheS1mcm9tLXdpdGgtaXRlcmF0b3IuanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzk0
NTZhMWRhYzZmMWU0NjUwMzZhZTJlMzNiZTA4OGE5OWI0MWZjOAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvYXJyYXktZnJvbS13aXRoLWl0ZXJh
dG9yLmpzCkBAIC0wLDAgKzEsMTI5IEBACitmdW5jdGlvbiBzaG91bGRCZShhY3R1YWwsIGV4cGVj
dGVkKSB7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAgICAgIHRocm93IG5ldyBF
cnJvcignYmFkIHZhbHVlOiAnICsgYWN0dWFsKTsKK30KKworZnVuY3Rpb24gc2hvdWxkVGhyb3co
ZnVuYywgbWVzc2FnZSkgeworICAgIHZhciBlcnJvciA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAg
ICAgZnVuYygpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgZXJyb3IgPSBlOworICAgIH0K
KyAgICBpZiAoIWVycm9yKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIm5vdCB0aHJvd24uIik7
CisgICAgaWYgKFN0cmluZyhlcnJvcikgIT09IG1lc3NhZ2UpCisgICAgICAgIHRocm93IG5ldyBF
cnJvcigiYmFkIGVycm9yOiAiICsgU3RyaW5nKGVycm9yKSk7Cit9CisKK3ZhciBvcmlnaW5hbEFy
cmF5ID0gWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDldOworCit2YXIgYXJyYXkgPSBBcnJh
eS5mcm9tKG9yaWdpbmFsQXJyYXkudmFsdWVzKCkpOworc2hvdWxkQmUoYXJyYXkubGVuZ3RoLCBv
cmlnaW5hbEFycmF5Lmxlbmd0aCk7Citmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsg
KytpKSB7CisgICAgc2hvdWxkQmUoYXJyYXlbaV0sIG9yaWdpbmFsQXJyYXlbaV0pOworfQorCitm
dW5jdGlvbiBjcmVhdGVJdGVyYXRvcihjYWxsYmFjaykgeworICAgIHZhciBhcnJheSA9IFswLDEs
MiwzLDQsNV07CisgICAgdmFyIGl0ZXJhdG9yID0gYXJyYXlbU3ltYm9sLml0ZXJhdG9yXSgpOwor
ICAgIGl0ZXJhdG9yLnJldHVybiA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaXRlcmF0b3IucmV0
dXJuZWQgPSB0cnVlOworICAgICAgICBpZiAoY2FsbGJhY2spCisgICAgICAgICAgICByZXR1cm4g
Y2FsbGJhY2sodGhpcyk7CisgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRl
ZmluZWQgfTsKKyAgICB9OworICAgIGl0ZXJhdG9yLnJldHVybmVkID0gZmFsc2U7CisgICAgcmV0
dXJuIGl0ZXJhdG9yOworfQorCit2YXIgaXRlcmF0b3IgPSBjcmVhdGVJdGVyYXRvcigpOwordmFy
IHJlc3VsdCA9IEFycmF5LmZyb20oaXRlcmF0b3IpOworc2hvdWxkQmUocmVzdWx0Lmxlbmd0aCwg
Nik7Citmb3IgKHZhciBpID0gMDsgaSA8IDY7ICsraSkgeworICAgIHNob3VsZEJlKHJlc3VsdFtp
XSwgaSk7Cit9CitzaG91bGRCZShpdGVyYXRvci5yZXR1cm5lZCwgZmFsc2UpOworCisvLyBtYXBG
biByYWlzZXMgYW4gZXJyb3IuCit2YXIgaXRlcmF0b3IgPSBjcmVhdGVJdGVyYXRvcigpOworc2hv
dWxkVGhyb3coZnVuY3Rpb24gKCkgeworICAgIHZhciByZXN1bHQgPSBBcnJheS5mcm9tKGl0ZXJh
dG9yLCBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcignbWFwIGZ1bmMnKTsK
KyAgICB9KTsKK30sICJFcnJvcjogbWFwIGZ1bmMiKTsKK3Nob3VsZEJlKGl0ZXJhdG9yLnJldHVy
bmVkLCB0cnVlKTsKKworLy8gbWFwRm4gcmFpc2VzIGFuIGVycm9yIGFuZCBpdGVyYXRvci5yZXR1
cm4gYWxzbyByYWlzZXMgYW4gZXJyb3IuCit2YXIgaXRlcmF0b3IgPSBjcmVhdGVJdGVyYXRvcihm
dW5jdGlvbiAoKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCdpdGVyYXRvci5yZXR1cm4nKTsKK30p
OworCisvLyBBbiBlcnJvciByYWlzZWQgaW4gaXRlcmF0b3IucmV0dXJuIGlzIGRpc2NhcmRlZC4K
K3Nob3VsZFRocm93KGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgcmVzdWx0ID0gQXJyYXkuZnJvbShp
dGVyYXRvciwgZnVuY3Rpb24gKCkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21hcCBmdW5j
Jyk7CisgICAgfSk7Cit9LCAiRXJyb3I6IG1hcCBmdW5jIik7CitzaG91bGRCZShpdGVyYXRvci5y
ZXR1cm5lZCwgdHJ1ZSk7CisKKy8vIGl0ZXJhYmxlW1N5bWJvbC5pdGVyYXRvcl0gaXMgbm90IGEg
ZnVuY3Rpb24uCitzaG91bGRUaHJvdyhmdW5jdGlvbiAoKSB7CisgICAgdmFyIGl0ZXJhdG9yID0g
W10udmFsdWVzKCk7CisgICAgaXRlcmF0b3JbU3ltYm9sLml0ZXJhdG9yXSA9IHt9OworICAgIEFy
cmF5LmZyb20oaXRlcmF0b3IpOworfSwgIlR5cGVFcnJvcjogQXJyYXkuZnJvbSByZXF1aXJlcyB0
aGF0IHRoZSBAQGl0ZXJhdG9yIHByb3BlcnR5IG9mIHRoZSBmaXJzdCBhcmd1bWVudCwgd2hlbiBl
eGlzdHMsIGJlIGEgZnVuY3Rpb24iKTsKKworLy8gaXRlcmFibGVbU3ltYm9sLml0ZXJhdG9yXSBy
YWlzZXMgYW4gZXJyb3IuCitzaG91bGRUaHJvdyhmdW5jdGlvbiAoKSB7CisgICAgdmFyIGl0ZXJh
YmxlID0gW107CisgICAgaXRlcmFibGVbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJpdGVyYXRvciIpOworICAgIH07CisgICAgQXJyYXku
ZnJvbShpdGVyYWJsZSk7Cit9LCAiRXJyb3I6IGl0ZXJhdG9yIik7CisKKy8vIGl0ZXJhYmxlW1N5
bWJvbC5pdGVyYXRvcl0gbG9va3VwIGlzIG9ubHkgb25jZS4KKyhmdW5jdGlvbiAoKSB7CisgICAg
dmFyIGl0ZXJhYmxlID0gWzAsIDEsIDIsIDMsIDQsIDVdOworICAgIHZhciBjb3VudCA9IDA7Cisg
ICAgdmFyIGl0ZXJhdG9yQ2FsbENvdW50ID0gMDsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHko
aXRlcmFibGUsIFN5bWJvbC5pdGVyYXRvciwgeworICAgICAgICBnZXQoKSB7CisgICAgICAgICAg
ICArK2NvdW50OworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
ICAgICArK2l0ZXJhdG9yQ2FsbENvdW50OworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZh
bHVlcygpOworICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAgIH0pOworICAgIHZhciBnZW5l
cmF0ZWQgPSBBcnJheS5mcm9tKGl0ZXJhYmxlKTsKKyAgICBzaG91bGRCZShnZW5lcmF0ZWQubGVu
Z3RoLCBpdGVyYWJsZS5sZW5ndGgpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlcmFibGUu
bGVuZ3RoOyArK2kpIHsKKyAgICAgICAgc2hvdWxkQmUoZ2VuZXJhdGVkW2ldLCBpdGVyYWJsZVtp
XSk7CisgICAgfQorICAgIHNob3VsZEJlKGNvdW50LCAxKTsKKyAgICBzaG91bGRCZShpdGVyYXRv
ckNhbGxDb3VudCwgMSk7Cit9KCkpOworCisvLyBUaGUgU3ltYm9sLml0ZXJhdG9yIG1ldGhvZCBv
ZiB0aGUgaXRlcmF0b3IgZ2VuZXJhdGVkIGJ5IGl0ZXJhYmxlW1N5bWJvbC5pdGVyYXRvcl0gaXMg
bm90IGxvb2tlZCB1cC4KKyhmdW5jdGlvbiAoKSB7CisgICAgdmFyIGl0ZXJhYmxlID0gWzAsIDEs
IDIsIDMsIDQsIDVdOworICAgIHZhciBjb3VudCA9IDA7CisgICAgaXRlcmFibGVbU3ltYm9sLml0
ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgKytjb3VudDsKKyAgICAgICAgdmFyIGl0
ZXJhdG9yID0gdGhpcy52YWx1ZXMoKTsKKyAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGl0
ZXJhdG9yLCBTeW1ib2wuaXRlcmF0b3IsIHsKKyAgICAgICAgICAgIGdldCgpIHsKKyAgICAgICAg
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2l0ZXJhdG9yW0BAaXRlcmF0b3JdIGlzIHRvdWNoZWQn
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBpdGVyYXRvcjsK
KyAgICB9OworICAgIHZhciBnZW5lcmF0ZWQgPSBBcnJheS5mcm9tKGl0ZXJhYmxlKTsKKyAgICBz
aG91bGRCZShnZW5lcmF0ZWQubGVuZ3RoLCBpdGVyYWJsZS5sZW5ndGgpOworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgaXRlcmFibGUubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgc2hvdWxkQmUoZ2Vu
ZXJhdGVkW2ldLCBpdGVyYWJsZVtpXSk7CisgICAgfQorICAgIHNob3VsZEJlKGNvdW50LCAxKTsK
K30oKSk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKaW5kZXggZTYwM2JlNTdjMmQyYTFmNmRmMzkxNWUxY2E1ZjFjYzY4M2RiMWE0OS4u
MWVjOThmMGFhZWMyNGM3N2Q5NzJhNmVmMzQxYTE4ZTU3NjI4N2RmYyAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE0IEBACisyMDE1LTA0LTIzICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29t
PgorCisgICAgICAgIFtFUzZdIEFycmF5LmZyb20gbmVlZCB0byBhY2NlcHQgaXRlcmFibGVzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDEwNTUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBcnJheS5mcm9t
IG5vdyBhY2NlcHRzIGl0ZXJhYmxlcy4KKworICAgICAgICAqIGpzL2FycmF5LWZyb20tZXhwZWN0
ZWQudHh0OgorCiAyMDE1LTA0LTIyICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgQ3JlYXRlIFJlbmRlclJ1YnlUZXh0IGZvciA8cnQ+IG9ubHkgd2hlbiB0aGUgcGFy
ZW50IHJlbmRlcmVyIGlzIGEgUmVuZGVyUnVieS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pz
L2FycmF5LWZyb20tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvanMvYXJyYXktZnJvbS1leHBl
Y3RlZC50eHQKaW5kZXggMTBmZDA0MDQwMzM0M2ZmNGNmMTFhYmVjMWFiMjU3N2FiZGI5Mzk3ZS4u
OTQ0ZTU0MjFjMDI3NTg4YzI3OWQ3MzE3ZTVlZDcxYzg1MDlhNWEyNiAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvanMvYXJyYXktZnJvbS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvanMv
YXJyYXktZnJvbS1leHBlY3RlZC50eHQKQEAgLTY2LDcgKzY2LDcgQEAgUEFTUyBBcnJheS5mcm9t
KGNyYXp5UGFudHMsIGZ1bmN0aW9uICh4KSB7IGNyYXp5UGFudHMubGVuZ3RoID0geDsgcmV0dXJu
IHg7IH0pIGkKIAogQ29uc3RydWN0aW9uIHVzaW5nIFNldCBvYmplY3QKIC0tLS0tLS0KLUZBSUwg
QXJyYXkuZnJvbShzZXQpIHNob3VsZCBiZSB6ZXJvLG9uZSx0d28uIFdhcyAuCitQQVNTIEFycmF5
LmZyb20oc2V0KSBpcyBbJ3plcm8nLCAnb25lJywgJ3R3byddCiBQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUK
</data>
<flag name="review"
          id="276252"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>