<?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>136161</bug_id>
          
          <creation_ts>2014-08-22 10:47:14 -0700</creation_ts>
          <short_desc>Create tests for type profiling</short_desc>
          <delta_ts>2014-09-03 14:02:42 -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="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1030755</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-08-22 10:47:14 -0700</bug_when>
    <thetext>Right now, there is no test coverage for type profiling. Fix this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031177</commentid>
    <comment_count>1</comment_count>
      <attachid>237095</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-08-25 11:08:58 -0700</bug_when>
    <thetext>Created attachment 237095
work in progress

What do you guys think of the API for handling testing types?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031178</commentid>
    <comment_count>2</comment_count>
      <attachid>237096</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-08-25 11:10:51 -0700</bug_when>
    <thetext>Created attachment 237096
work in progress

(Forgot actual test js files).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031183</commentid>
    <comment_count>3</comment_count>
      <attachid>237096</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-08-25 11:30:47 -0700</bug_when>
    <thetext>Comment on attachment 237096
work in progress

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

General approach looks good. I have some comments on the specifics.

&gt; Source/JavaScriptCore/jsc.cpp:633
&gt; +        addFunction(vm, &quot;typeJSONStringForExpressionAtOffset&quot;, functionTypeJSONStringForExpressionAtOffset, 3);

Based on this name, I expected that the caller would need to pass in an offset, which is not true.

I think a better name would be &quot;typeForExpression&quot; or &quot;findTypeForExpression&quot; (connoting text search). Another option would be one function named &quot;offsetOfExpression&quot;, which took a function and an expression and returned the text offset of the expression in the function, and another function named &quot;typeAtOffset&quot;, which took a text offset and returned a type descriptor.

Putting the return type in the function name makes it a bit wordy. It&apos;s hard to get all types into a name, so I usually leave them out. For a broader exploration of how putting types in names can make life unhappy, you can read about so-called Hungarian Notation at Microsoft -- or you can read the example code @ &lt;http://msdn.microsoft.com/en-us/library/aa260976(v=vs.60).aspx&gt;, and then gouge your eyes out.

&gt; Source/JavaScriptCore/jsc.cpp:1089
&gt; +    JSValue descriptorValue = exec-&gt;argument(2); 
&gt; +    ASSERT(descriptorValue.isMachineInt());
&gt; +    TypeProfilerSearchDescriptor descriptor = static_cast&lt;TypeProfilerSearchDescriptor&gt;(descriptorValue.toUInt32(exec));
&gt; +    ASSERT(descriptor == TypeProfilerSearchDescriptorNormal || descriptor == TypeProfilerSearchDescriptorFunctionReturn);

Can we make this descriptor a string or a global constant? A secret number is a difficult API to understand when reading these tests, or writing new tests.

It helps that you wrote out these constants in all of your tests, but I think it would be even better to make that step unnecessary.

&gt; Source/JavaScriptCore/tests/profiler/type-profiler-basic.js:38
&gt; +// Types matching those in runtime/TypeSet
&gt; +var T = {
&gt; +    Boolean:&quot;Boolean&quot;,
&gt; +    Integer: &quot;Integer&quot;,
&gt; +    Null: &quot;Null&quot;,
&gt; +    Number: &quot;Number&quot;,
&gt; +    Many: &quot;(many)&quot;,
&gt; +    String: &quot;String&quot;,
&gt; +    Undefined: &quot;Undefined&quot;,
&gt; +    UndefinedOrNull: &quot;(?)&quot;
&gt; +};
&gt; +
&gt; +// Optional types matching those in runtime/TypeSet
&gt; +var TOptional = {
&gt; +    Boolean:&quot;Boolean?&quot;,
&gt; +    Integer: &quot;Integer?&quot;,
&gt; +    Number: &quot;Number?&quot;,
&gt; +    String: &quot;String?&quot;
&gt; +};

Similar comment about these: It would be nice if they were exported by the engine into the testing environment, instead of being copied into each test. If you ever change these strings inside the engine, it will be a pain to change all the tests.

You can either export these as constants, or you can export a function like &quot;displayTypeNameFor()&quot;, which takes a list of JSValues, and returns the display type they would produce.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031202</commentid>
    <comment_count>4</comment_count>
      <attachid>237096</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-08-25 12:25:21 -0700</bug_when>
    <thetext>Comment on attachment 237096
work in progress

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

&gt;&gt; Source/JavaScriptCore/jsc.cpp:633
&gt;&gt; +        addFunction(vm, &quot;typeJSONStringForExpressionAtOffset&quot;, functionTypeJSONStringForExpressionAtOffset, 3);
&gt; 
&gt; Based on this name, I expected that the caller would need to pass in an offset, which is not true.
&gt; 
&gt; I think a better name would be &quot;typeForExpression&quot; or &quot;findTypeForExpression&quot; (connoting text search). Another option would be one function named &quot;offsetOfExpression&quot;, which took a function and an expression and returned the text offset of the expression in the function, and another function named &quot;typeAtOffset&quot;, which took a text offset and returned a type descriptor.
&gt; 
&gt; Putting the return type in the function name makes it a bit wordy. It&apos;s hard to get all types into a name, so I usually leave them out. For a broader exploration of how putting types in names can make life unhappy, you can read about so-called Hungarian Notation at Microsoft -- or you can read the example code @ &lt;http://msdn.microsoft.com/en-us/library/aa260976(v=vs.60).aspx&gt;, and then gouge your eyes out.

It is wordy indeed. I forgot to change this function&apos;s name after I removed text offsets from the API.
I like the name &quot;findTypeForExpression&quot;

&gt;&gt; Source/JavaScriptCore/jsc.cpp:1089
&gt;&gt; +    ASSERT(descriptor == TypeProfilerSearchDescriptorNormal || descriptor == TypeProfilerSearchDescriptorFunctionReturn);
&gt; 
&gt; Can we make this descriptor a string or a global constant? A secret number is a difficult API to understand when reading these tests, or writing new tests.
&gt; 
&gt; It helps that you wrote out these constants in all of your tests, but I think it would be even better to make that step unnecessary.

I agree, this is the crappiest part about this API and the API from the WebInspector.

I think the solution for these tests is to expose two APIs: 

findTypeForExpression( &lt;function&gt;, &lt;string&gt;)
and
returnTypeForFunction(&lt;function&gt;) or returnTypeFor(&lt;function&gt;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031271</commentid>
    <comment_count>5</comment_count>
      <attachid>237121</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-08-25 17:34:51 -0700</bug_when>
    <thetext>Created attachment 237121
work in progress

What do you guys think about this patch?

Also, do you think the inline JSON building should be changed? Or maybe abstracted into some kind of JSON builder class?

What do you guys think about how I edited run-javascriptcore-tests and run-jsc-stress-tests to include the profiler tests?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032808</commentid>
    <comment_count>6</comment_count>
      <attachid>237537</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-09-02 18:18:21 -0700</bug_when>
    <thetext>Created attachment 237537
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032835</commentid>
    <comment_count>7</comment_count>
      <attachid>237537</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-02 21:00:52 -0700</bug_when>
    <thetext>Comment on attachment 237537
patch

Any reason why the new functions return a string that needs to be JSON parsed instead of just returning the object (that would come out of JSON parsing)?  I sort of understand having the internal APIs work with strings but it seems that the glue in JSC.cpp could just do the parsing for you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032843</commentid>
    <comment_count>8</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-09-02 22:20:59 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 237537 [details])
&gt; Any reason why the new functions return a string that needs to be JSON parsed instead of just returning the object (that would come out of JSON parsing)?  I sort of understand having the internal APIs work with strings but it seems that the glue in JSC.cpp could just do the parsing for you.

There isn&apos;t a good reason, it&apos;s just the way I started out. 
I should make JSC.cpp in charge of doing the parsing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032973</commentid>
    <comment_count>9</comment_count>
      <attachid>237569</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-09-03 12:27:43 -0700</bug_when>
    <thetext>Created attachment 237569
patch

Now doing JSON parsing inside jsc.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032999</commentid>
    <comment_count>10</comment_count>
      <attachid>237569</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-09-03 13:40:27 -0700</bug_when>
    <thetext>Comment on attachment 237569
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033008</commentid>
    <comment_count>11</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-09-03 14:02:42 -0700</bug_when>
    <thetext>landed in: http://trac.webkit.org/changeset/173225</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237095</attachid>
            <date>2014-08-25 11:08:58 -0700</date>
            <delta_ts>2014-08-25 11:10:51 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>136161-patch.diff</filename>
            <type>text/plain</type>
            <size>11387</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAxNzI5MjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQAogI2lu
Y2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVSYXJlRGF0YUlu
bGluZXMuaCIKICNpbmNsdWRlICJUZXN0UnVubmVyVXRpbHMuaCIKKyNpbmNsdWRlICJUeXBlUHJv
ZmlsZXJMb2cuaCIKICNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNs
dWRlIDxzdGRsaWIuaD4KQEAgLTQ3Niw3ICs0NzcsOCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvbklkZW50aXR5KEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25NYWtlTWFzcXVlcmFkZXIoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkhhc0N1c3RvbVByb3BlcnRpZXMoRXhl
Y1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkR1
bXBUeXBlc0ZvckFsbFZhcmlhYmxlcyAoRXhlY1N0YXRlKik7CitzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkR1bXBUeXBlc0ZvckFsbFZhcmlhYmxlcyhFeGVjU3Rh
dGUqKTsKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uVHlwZUpT
T05TdHJpbmdGb3JFeHByZXNzaW9uQXRPZmZzZXQoRXhlY1N0YXRlKik7CiAKICNpZiBFTkFCTEUo
U0FNUExJTkdfRkxBR1MpCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvblNldFNhbXBsaW5nRmxhZ3MoRXhlY1N0YXRlKik7CkBAIC02MjgsNiArNjMwLDcgQEAgcHJv
dGVjdGVkOgogICAgICAgICBhZGRGdW5jdGlvbih2bSwgImNyZWF0ZUltcHVyZUdldHRlciIsIGZ1
bmN0aW9uQ3JlYXRlSW1wdXJlR2V0dGVyLCAxKTsKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJz
ZXRJbXB1cmVHZXR0ZXJEZWxlZ2F0ZSIsIGZ1bmN0aW9uU2V0SW1wdXJlR2V0dGVyRGVsZWdhdGUs
IDIpOwogICAgICAgICBhZGRGdW5jdGlvbih2bSwgImR1bXBUeXBlc0ZvckFsbFZhcmlhYmxlcyIs
IGZ1bmN0aW9uRHVtcFR5cGVzRm9yQWxsVmFyaWFibGVzICwgNCk7CisgICAgICAgIGFkZEZ1bmN0
aW9uKHZtLCAidHlwZUpTT05TdHJpbmdGb3JFeHByZXNzaW9uQXRPZmZzZXQiLCBmdW5jdGlvblR5
cGVKU09OU3RyaW5nRm9yRXhwcmVzc2lvbkF0T2Zmc2V0LCAzKTsKICAgICAgICAgCiAgICAgICAg
IEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShnbG9iYWxFeGVjKCksIDApOwog
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3VtZW50cy5zaXplKCk7ICsraSkKQEAg
LTEwNjUsNiArMTA2OCwzMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
RHVtCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAorRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblR5cGVKU09OU3RyaW5nRm9yRXhwcmVz
c2lvbkF0T2Zmc2V0KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICAvLyBBUEkgdG8gdGhpcyBmdW5j
dGlvbjogdHlwZUpTT05TdHJpbmdGb3JFeHByZXNzaW9uQXRPZmZzZXQoZnVuYywgc3Vic3RyaW5n
IGNvbnRhaW5lZCBpbiBmdW5jdGlvbiwgc2VhcmNoRGVzY3JpcHRvcik7CisgICAgQVNTRVJUKGV4
ZWMtPnZtKCkudHlwZVByb2ZpbGVyKCkpOworICAgIGV4ZWMtPnZtKCkudHlwZVByb2ZpbGVyTG9n
KCktPnByb2Nlc3NMb2dFbnRyaWVzKEFTQ0lJTGl0ZXJhbCgianNjIFRlc3RpbmcgQVBJOiBmdW5j
dGlvblR5cGVKU09OU3RyaW5nRm9yRXhwcmVzc2lvbkF0T2Zmc2V0IikpOworCisgICAgSlNWYWx1
ZSBmdW5jdGlvblZhbHVlID0gZXhlYy0+YXJndW1lbnQoMCk7CisgICAgQVNTRVJUKGZ1bmN0aW9u
VmFsdWUuaXNGdW5jdGlvbigpKTsKKyAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUg
PSAoanNEeW5hbWljQ2FzdDxKU0Z1bmN0aW9uKj4oZnVuY3Rpb25WYWx1ZS5hc0NlbGwoKS0+Z2V0
T2JqZWN0KCkpKS0+anNFeGVjdXRhYmxlKCk7CisKKyAgICBBU1NFUlQoZXhlYy0+YXJndW1lbnQo
MSkuaXNTdHJpbmcoKSk7CisgICAgU3RyaW5nIHN1YnN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50KDEp
LmdldFN0cmluZyhleGVjKTsKKyAgICBTdHJpbmcgc291cmNlQ29kZVRleHQgPSBleGVjdXRhYmxl
LT5zb3VyY2UoKS50b1N0cmluZygpOworICAgIHVuc2lnbmVkIG9mZnNldCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihzb3VyY2VDb2RlVGV4dC5maW5kKHN1YnN0cmluZykgKyBleGVjdXRhYmxlLT5z
b3VyY2UoKS5zdGFydE9mZnNldCgpKTsKKworICAgIEpTVmFsdWUgZGVzY3JpcHRvclZhbHVlID0g
ZXhlYy0+YXJndW1lbnQoMik7IAorICAgIEFTU0VSVChkZXNjcmlwdG9yVmFsdWUuaXNNYWNoaW5l
SW50KCkpOworICAgIFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3IgZGVzY3JpcHRvciA9IHN0
YXRpY19jYXN0PFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3I+KGRlc2NyaXB0b3JWYWx1ZS50
b1VJbnQzMihleGVjKSk7CisgICAgQVNTRVJUKGRlc2NyaXB0b3IgPT0gVHlwZVByb2ZpbGVyU2Vh
cmNoRGVzY3JpcHRvck5vcm1hbCB8fCBkZXNjcmlwdG9yID09IFR5cGVQcm9maWxlclNlYXJjaERl
c2NyaXB0b3JGdW5jdGlvblJldHVybik7CisgICAgCisgICAgU3RyaW5nIGpzb25TdHJpbmcgPSBl
eGVjLT52bSgpLnR5cGVQcm9maWxlcigpLT5qc29uU3RyaW5nRm9yVHlwZXNGb3JFeHByZXNzaW9u
QXRPZmZzZXQoZGVzY3JpcHRvciwgb2Zmc2V0LCBleGVjdXRhYmxlLT5zb3VyY2VJRCgpKTsKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIGpzb25TdHJpbmcpKTsKK30K
KwogLy8gVXNlIFNFSCBmb3IgUmVsZWFzZSBidWlsZHMgb25seSB0byBnZXQgcmlkIG9mIHRoZSBj
cmFzaCByZXBvcnQgZGlhbG9nCiAvLyAobHVja2lseSB0aGUgc2FtZSB0ZXN0cyBmYWlsIGluIFJl
bGVhc2UgYW5kIERlYnVnIGJ1aWxkcyBzbyBmYXIpLiBOZWVkIHRvCiAvLyBiZSBpbiBhIHNlcGFy
YXRlIG1haW4gZnVuY3Rpb24gYmVjYXVzZSB0aGUganNjbWFpbiBmdW5jdGlvbiByZXF1aXJlcyBv
YmplY3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2Zp
bGVyLmNwcAkocmV2aXNpb24gMTcyOTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVHlwZVByb2ZpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsMTUgKzgyLDI3IEBAIHZv
aWQgVHlwZVByb2ZpbGVyOjpnZXRUeXBlc0ZvclZhcmlhYmxlQXQKICAgICBkZXNjcmlwdGlvbi0+
c2V0TG9jYWxTdHJ1Y3R1cmVzKGxvY2F0aW9uLT5tX2luc3RydWN0aW9uVHlwZVNldC0+YWxsU3Ry
dWN0dXJlUmVwcmVzZW50YXRpb25zKCkpOwogfQogCi1zdGF0aWMgYm9vbCBkZXNjcmlwdG9yTWF0
Y2hlc1R5cGVMb2NhdGlvbihUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yIGRlc2NyaXB0b3Is
IFR5cGVMb2NhdGlvbiogbG9jYXRpb24pCitTdHJpbmcgVHlwZVByb2ZpbGVyOjpqc29uU3RyaW5n
Rm9yVHlwZXNGb3JFeHByZXNzaW9uQXRPZmZzZXQoVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRv
ciBkZXNjcmlwdG9yLCB1bnNpZ25lZCBvZmZzZXQsIGludHB0cl90IHNvdXJjZUlEKQogewotICAg
IGlmIChkZXNjcmlwdG9yID09IFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JGdW5jdGlvblJl
dHVybiAmJiBsb2NhdGlvbi0+bV9nbG9iYWxWYXJpYWJsZUlEID09IFR5cGVQcm9maWxlclJldHVy
blN0YXRlbWVudCkgIAotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBUeXBlTG9jYXRpb24qIGxv
Y2F0aW9uID0gZmluZExvY2F0aW9uKG9mZnNldCwgc291cmNlSUQsIGRlc2NyaXB0b3IpOworICAg
IEFTU0VSVChsb2NhdGlvbik7CiAKLSAgICBpZiAoZGVzY3JpcHRvciA9PSBUeXBlUHJvZmlsZXJT
ZWFyY2hEZXNjcmlwdG9yTm9ybWFsICYmIGxvY2F0aW9uLT5tX2dsb2JhbFZhcmlhYmxlSUQgIT0g
VHlwZVByb2ZpbGVyUmV0dXJuU3RhdGVtZW50KSAgCi0gICAgICAgIHJldHVybiB0cnVlOworICAg
IFN0cmluZ0J1aWxkZXIganNvbjsgIAogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIGpzb24uYXBw
ZW5kKCJ7Iik7CisKKyAgICBpZiAobG9jYXRpb24tPm1fZ2xvYmFsVHlwZVNldCAmJiBsb2NhdGlv
bi0+bV9nbG9iYWxWYXJpYWJsZUlEICE9IFR5cGVQcm9maWxlck5vR2xvYmFsSURFeGlzdHMpIHsK
KyAgICAgICAganNvbi5hcHBlbmQoIlwiZ2xvYmFsVHlwZVNldFwiOiIpOworICAgICAgICBqc29u
LmFwcGVuZChsb2NhdGlvbi0+bV9nbG9iYWxUeXBlU2V0LT50b0pTT05TdHJpbmcoKSk7CisgICAg
ICAgIGpzb24uYXBwZW5kKCIsIik7CisgICAgfQorCisgICAganNvbi5hcHBlbmQoIlwiaW5zdHJ1
Y3Rpb25UeXBlU2V0XCI6Iik7CisgICAganNvbi5hcHBlbmQobG9jYXRpb24tPm1faW5zdHJ1Y3Rp
b25UeXBlU2V0LT50b0pTT05TdHJpbmcoKSk7CisKKyAgICBqc29uLmFwcGVuZCgifSIpOworICAg
IAorICAgIHJldHVybiBqc29uLnRvU3RyaW5nKCk7CiB9CiAKIFR5cGVMb2NhdGlvbiogVHlwZVBy
b2ZpbGVyOjpmaW5kTG9jYXRpb24odW5zaWduZWQgZGl2b3QsIGludHB0cl90IHNvdXJjZUlELCBU
eXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yIGRlc2NyaXB0b3IpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXIuaAkocmV2aXNpb24gMTcyOTI2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTk2LDYgKzk2LDcgQEAgY2xhc3MgVHlwZVByb2ZpbGVyIHsKIHB1YmxpYzoKICAg
ICB2b2lkIGxvZ1R5cGVzRm9yVHlwZUxvY2F0aW9uKFR5cGVMb2NhdGlvbiopOwogICAgIHZvaWQg
Z2V0VHlwZXNGb3JWYXJpYWJsZUF0T2Zmc2V0Rm9ySW5zcGVjdG9yKFR5cGVQcm9maWxlclNlYXJj
aERlc2NyaXB0b3IsIHVuc2lnbmVkIGRpdm90LCBpbnRwdHJfdCBzb3VyY2VJRCwgUmVmUHRyPElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlR5cGVEZXNjcmlwdGlvbj4mKTsKKyAgICBK
U19FWFBPUlRfUFJJVkFURSBTdHJpbmcganNvblN0cmluZ0ZvclR5cGVzRm9yRXhwcmVzc2lvbkF0
T2Zmc2V0KFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3IsIHVuc2lnbmVkIG9mZnNldCwgaW50
cHRyX3Qgc291cmNlSUQpOwogICAgIHZvaWQgaW5zZXJ0TmV3TG9jYXRpb24oVHlwZUxvY2F0aW9u
Kik7CiAgICAgRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlKiBmdW5jdGlvbkhhc0V4ZWN1dGVkQ2Fj
aGUoKSB7IHJldHVybiAmbV9mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGU7IH0KICAgICBUeXBlTG9j
YXRpb25DYWNoZSogdHlwZUxvY2F0aW9uQ2FjaGUoKSB7IHJldHVybiAmbV90eXBlTG9jYXRpb25D
YWNoZTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVy
TG9nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVBy
b2ZpbGVyTG9nLmgJKHJldmlzaW9uIDE3MjkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1R5cGVQcm9maWxlckxvZy5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw3IEBA
IHB1YmxpYzoKICAgICAgICAgICAgIHByb2Nlc3NMb2dFbnRyaWVzKEFTQ0lJTGl0ZXJhbCgiTG9n
IEZ1bGwiKSk7CiAgICAgfQogCi0gICAgdm9pZCBwcm9jZXNzTG9nRW50cmllcyhTdHJpbmcpOwor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJvY2Vzc0xvZ0VudHJpZXMoU3RyaW5nKTsKICAg
ICBMb2dFbnRyeSogbG9nRW5kUHRyKCkgY29uc3QgeyByZXR1cm4gbV9sb2dFbmRQdHI7IH0KIAog
ICAgIHN0YXRpYyBwdHJkaWZmX3QgbG9nU3RhcnRPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoVHlwZVByb2ZpbGVyTG9nLCBtX2xvZ1N0YXJ0UHRyKTsgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5jcHAJKHJldmlzaW9uIDE3MjkyNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNDcsNiArMjQ3LDc4IEBAIFN0cmluZyBUeXBlU2V0OjpsZWFzdENvbW1vbkFuY2VzdG9yKCkg
Y28KICAgICByZXR1cm4gU3RydWN0dXJlU2hhcGU6OmxlYXN0Q29tbW9uQW5jZXN0b3IobV9zdHJ1
Y3R1cmVIaXN0b3J5KTsKIH0KIAorU3RyaW5nIFR5cGVTZXQ6OnRvSlNPTlN0cmluZygpIGNvbnN0
Cit7CisgICAgLy8gVGhpcyByZXR1cm5zIGEgSlNPTiBzdHJpbmcgcmVwcmVzZW50aW5nIGFuIE9i
amVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczoKKyAgICAvLyAgICAgZGlzcGxheVR5
cGVOYW1lOiBgU3RyaW5nYAorICAgIC8vICAgICBwcmltaXRpdmVUeXBlTmFtZXM6IGBBcnJheTxT
dHJpbmc+YAorICAgIC8vICAgICBzdHJ1Y3R1cmVzOiBgQXJyYXk8SlNPTjxTdHJ1Y3R1cmVTaGFw
ZT4+YAorCisgICAgU3RyaW5nQnVpbGRlciBqc29uOworICAgIGpzb24uYXBwZW5kKCJ7Iik7CisK
KyAgICBqc29uLmFwcGVuZCgiXCJkaXNwbGF5VHlwZU5hbWVcIjoiKTsKKyAgICBqc29uLmFwcGVu
ZCgiXCIiKTsKKyAgICBqc29uLmFwcGVuZChkaXNwbGF5TmFtZSgpKTsKKyAgICBqc29uLmFwcGVu
ZCgiXCIiKTsKKyAgICBqc29uLmFwcGVuZCgiLCIpOworCisgICAganNvbi5hcHBlbmQoIlwicHJp
bWl0aXZlVHlwZU5hbWVzXCI6Iik7CisgICAganNvbi5hcHBlbmQoIlsiKTsKKyAgICBib29sIGhh
c0FuSXRlbSA9IGZhbHNlOworICAgIGlmIChtX3NlZW5UeXBlcyAmIFR5cGVVbmRlZmluZWQpIHsK
KyAgICAgICAgaGFzQW5JdGVtID0gdHJ1ZTsKKyAgICAgICAganNvbi5hcHBlbmQoIlwiVW5kZWZp
bmVkXCIiKTsKKyAgICB9CisgICAgaWYgKG1fc2VlblR5cGVzICYgVHlwZU51bGwpIHsKKyAgICAg
ICAgaWYgKGhhc0FuSXRlbSkKKyAgICAgICAgICAgIGpzb24uYXBwZW5kKCIsIik7CisgICAgICAg
IGhhc0FuSXRlbSA9IHRydWU7CisgICAgICAgIGpzb24uYXBwZW5kKCJcIk51bGxcIiIpOworICAg
IH0KKyAgICBpZiAobV9zZWVuVHlwZXMgJiBUeXBlQm9vbGVhbikgeworICAgICAgICBpZiAoaGFz
QW5JdGVtKQorICAgICAgICAgICAganNvbi5hcHBlbmQoIiwiKTsKKyAgICAgICAgaGFzQW5JdGVt
ID0gdHJ1ZTsKKyAgICAgICAganNvbi5hcHBlbmQoIlwiQm9vbGVhblwiIik7CisgICAgfQorICAg
IGlmIChtX3NlZW5UeXBlcyAmIFR5cGVNYWNoaW5lSW50KSB7CisgICAgICAgIGlmIChoYXNBbkl0
ZW0pCisgICAgICAgICAgICBqc29uLmFwcGVuZCgiLCIpOworICAgICAgICBoYXNBbkl0ZW0gPSB0
cnVlOworICAgICAgICBqc29uLmFwcGVuZCgiXCJJbnRlZ2VyXCIiKTsKKyAgICB9CisgICAgaWYg
KG1fc2VlblR5cGVzICYgVHlwZU51bWJlcikgeworICAgICAgICBpZiAoaGFzQW5JdGVtKQorICAg
ICAgICAgICAganNvbi5hcHBlbmQoIiwiKTsKKyAgICAgICAgaGFzQW5JdGVtID0gdHJ1ZTsKKyAg
ICAgICAganNvbi5hcHBlbmQoIlwiTnVtYmVyXCIiKTsKKyAgICB9CisgICAgaWYgKG1fc2VlblR5
cGVzICYgVHlwZVN0cmluZykgeworICAgICAgICBpZiAoaGFzQW5JdGVtKQorICAgICAgICAgICAg
anNvbi5hcHBlbmQoIiwiKTsKKyAgICAgICAgaGFzQW5JdGVtID0gdHJ1ZTsKKyAgICAgICAganNv
bi5hcHBlbmQoIlwiU3RyaW5nXCIiKTsKKyAgICB9CisgICAganNvbi5hcHBlbmQoIl0iKTsKKwor
ICAgIGpzb24uYXBwZW5kKCIsIik7CisKKyAgICBqc29uLmFwcGVuZCgiXCJzdHJ1Y3R1cmVzXCI6
Iik7CisgICAganNvbi5hcHBlbmQoIlsiKTsKKyAgICBoYXNBbkl0ZW0gPSBmYWxzZTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc3RydWN0dXJlSGlzdG9yeS5zaXplKCk7IGkrKykgewor
ICAgICAgICBpZiAoaGFzQW5JdGVtKQorICAgICAgICAgICAganNvbi5hcHBlbmQoIiwiKTsKKyAg
ICAgICAgaGFzQW5JdGVtID0gdHJ1ZTsKKyAgICAgICAganNvbi5hcHBlbmQobV9zdHJ1Y3R1cmVI
aXN0b3J5W2ldLT50b0pTT05TdHJpbmcoKSk7CisgICAgfQorICAgIGpzb24uYXBwZW5kKCJdIik7
CisKKyAgICBqc29uLmFwcGVuZCgifSIpOworICAgIHJldHVybiBqc29uLnRvU3RyaW5nKCk7Cit9
CisKIHZvaWQgVHlwZVNldDo6ZHVtcFNlZW5UeXBlcygpCiB7CiAgICAgZGF0YUxvZyhzZWVuVHlw
ZXMoKSwgIlxuIik7CkBAIC0zNjAsNiArNDMyLDQ5IEBAIFN0cmluZyBTdHJ1Y3R1cmVTaGFwZTo6
c3RyaW5nUmVwcmVzZW50YXQKICAgICByZXR1cm4gcmVwcmVzZW50YXRpb24udG9TdHJpbmcoKTsK
IH0KIAorU3RyaW5nIFN0cnVjdHVyZVNoYXBlOjp0b0pTT05TdHJpbmcoKSBjb25zdAoreworICAg
IC8vIFRoaXMgcmV0dXJucyBhIEpTT04gc3RyaW5nIHJlcHJlc2VudGluZyBhbiBPYmplY3Qgd2l0
aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6CisgICAgLy8gICAgIGNvbnN0cnVjdG9yTmFtZTog
YFN0cmluZ2AKKyAgICAvLyAgICAgZmllbGRzOiBgQXJyYXk8U3RyaW5nPmAKKyAgICAvLyAgICAg
cHJvdG86IGBKU09OPFN0cnVjdHVyZVNoYXBlPiB8IG51bGxgCisKKyAgICBTdHJpbmdCdWlsZGVy
IGpzb247CisgICAganNvbi5hcHBlbmQoInsiKTsKKworICAgIGpzb24uYXBwZW5kKCJcImNvbnN0
cnVjdG9yTmFtZVwiOiIpOworICAgIGpzb24uYXBwZW5kKCJcIiIpOworICAgIGpzb24uYXBwZW5k
KG1fY29uc3RydWN0b3JOYW1lKTsKKyAgICBqc29uLmFwcGVuZCgiXCIiKTsKKyAgICBqc29uLmFw
cGVuZCgiLCIpOworCisgICAganNvbi5hcHBlbmQoIlwiZmllbGRzXCI6Iik7CisgICAganNvbi5h
cHBlbmQoIlsiKTsKKyAgICBib29sIGhhc0FuSXRlbSA9IGZhbHNlOworICAgIGZvciAoYXV0byBp
dCA9IG1fZmllbGRzLmJlZ2luKCksIGVuZCA9IG1fZmllbGRzLmVuZCgpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKKyAgICAgICAgaWYgKGhhc0FuSXRlbSkKKyAgICAgICAgICAgIGpzb24uYXBwZW5kKCIs
Iik7CisgICAgICAgIGhhc0FuSXRlbSA9IHRydWU7CisKKyAgICAgICAgU3RyaW5nIGZpZWxkTmFt
ZSgoKml0KS5nZXQoKSk7CisgICAgICAgIGpzb24uYXBwZW5kKCJcIiIpOworICAgICAgICBqc29u
LmFwcGVuZChmaWVsZE5hbWUpOworICAgICAgICBqc29uLmFwcGVuZCgiXCIiKTsKKyAgICB9Cisg
ICAganNvbi5hcHBlbmQoIl0iKTsKKyAgICBqc29uLmFwcGVuZCgiLCIpOworCisgICAganNvbi5h
cHBlbmQoIlwicHJvdG9cIjoiKTsKKyAgICBpZiAobV9wcm90bykKKyAgICAgICAganNvbi5hcHBl
bmQobV9wcm90by0+dG9KU09OU3RyaW5nKCkpOworICAgIGVsc2UKKyAgICAgICAganNvbi5hcHBl
bmQoIm51bGwiKTsKKworICAgIGpzb24uYXBwZW5kKCJ9Iik7CisKKyAgICByZXR1cm4ganNvbi50
b1N0cmluZygpOworfQorCiBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRp
bWU6OlN0cnVjdHVyZURlc2NyaXB0aW9uPiBTdHJ1Y3R1cmVTaGFwZTo6aW5zcGVjdG9yUmVwcmVz
ZW50YXRpb24oKQogewogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1l
OjpTdHJ1Y3R1cmVEZXNjcmlwdGlvbj4gYmFzZSA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1
bnRpbWU6OlN0cnVjdHVyZURlc2NyaXB0aW9uOjpjcmVhdGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmgJKHJldmlzaW9uIDE3MjkyNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNiAr
NzAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBtYXJrQXNGaW5hbCgpOwogICAgIHZvaWQgYWRkUHJv
cGVydHkoUmVmUHRyPFN0cmluZ0ltcGw+KTsKICAgICBTdHJpbmcgc3RyaW5nUmVwcmVzZW50YXRp
b24oKTsKKyAgICBTdHJpbmcgdG9KU09OU3RyaW5nKCkgY29uc3Q7CiAgICAgUGFzc1JlZlB0cjxJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpTdHJ1Y3R1cmVEZXNjcmlwdGlvbj4gaW5z
cGVjdG9yUmVwcmVzZW50YXRpb24oKTsKICAgICB2b2lkIHNldENvbnN0cnVjdG9yTmFtZShTdHJp
bmcgbmFtZSkgeyBtX2NvbnN0cnVjdG9yTmFtZSA9IChuYW1lLmlzRW1wdHkoKSA/ICJPYmplY3Qi
IDogbmFtZSk7IH0KICAgICBTdHJpbmcgY29uc3RydWN0b3JOYW1lKCkgeyByZXR1cm4gbV9jb25z
dHJ1Y3Rvck5hbWU7IH0KQEAgLTk2LDYgKzk3LDcgQEAgcHVibGljOgogICAgIFN0cmluZyBkaXNw
bGF5TmFtZSgpIGNvbnN0OwogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
QXJyYXk8U3RyaW5nPj4gYWxsUHJpbWl0aXZlVHlwZU5hbWVzKCkgY29uc3Q7CiAgICAgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpSdW50aW1lOjpTdHJ1Y3R1cmVEZXNjcmlwdGlvbj4+IGFsbFN0cnVjdHVyZVJlcHJlc2VudGF0
aW9ucygpIGNvbnN0OworICAgIFN0cmluZyB0b0pTT05TdHJpbmcoKSBjb25zdDsKIAogcHJpdmF0
ZToKICAgICBTdHJpbmcgbGVhc3RDb21tb25BbmNlc3RvcigpIGNvbnN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237096</attachid>
            <date>2014-08-25 11:10:51 -0700</date>
            <delta_ts>2014-08-25 17:34:51 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>136161-patch.diff</filename>
            <type>text/plain</type>
            <size>22989</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAxNzI5MjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQAogI2lu
Y2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVSYXJlRGF0YUlu
bGluZXMuaCIKICNpbmNsdWRlICJUZXN0UnVubmVyVXRpbHMuaCIKKyNpbmNsdWRlICJUeXBlUHJv
ZmlsZXJMb2cuaCIKICNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNs
dWRlIDxzdGRsaWIuaD4KQEAgLTQ3Niw3ICs0NzcsOCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvbklkZW50aXR5KEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25NYWtlTWFzcXVlcmFkZXIoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkhhc0N1c3RvbVByb3BlcnRpZXMoRXhl
Y1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkR1
bXBUeXBlc0ZvckFsbFZhcmlhYmxlcyAoRXhlY1N0YXRlKik7CitzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkR1bXBUeXBlc0ZvckFsbFZhcmlhYmxlcyhFeGVjU3Rh
dGUqKTsKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uVHlwZUpT
T05TdHJpbmdGb3JFeHByZXNzaW9uQXRPZmZzZXQoRXhlY1N0YXRlKik7CiAKICNpZiBFTkFCTEUo
U0FNUExJTkdfRkxBR1MpCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvblNldFNhbXBsaW5nRmxhZ3MoRXhlY1N0YXRlKik7CkBAIC02MjgsNiArNjMwLDcgQEAgcHJv
dGVjdGVkOgogICAgICAgICBhZGRGdW5jdGlvbih2bSwgImNyZWF0ZUltcHVyZUdldHRlciIsIGZ1
bmN0aW9uQ3JlYXRlSW1wdXJlR2V0dGVyLCAxKTsKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJz
ZXRJbXB1cmVHZXR0ZXJEZWxlZ2F0ZSIsIGZ1bmN0aW9uU2V0SW1wdXJlR2V0dGVyRGVsZWdhdGUs
IDIpOwogICAgICAgICBhZGRGdW5jdGlvbih2bSwgImR1bXBUeXBlc0ZvckFsbFZhcmlhYmxlcyIs
IGZ1bmN0aW9uRHVtcFR5cGVzRm9yQWxsVmFyaWFibGVzICwgNCk7CisgICAgICAgIGFkZEZ1bmN0
aW9uKHZtLCAidHlwZUpTT05TdHJpbmdGb3JFeHByZXNzaW9uQXRPZmZzZXQiLCBmdW5jdGlvblR5
cGVKU09OU3RyaW5nRm9yRXhwcmVzc2lvbkF0T2Zmc2V0LCAzKTsKICAgICAgICAgCiAgICAgICAg
IEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShnbG9iYWxFeGVjKCksIDApOwog
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3VtZW50cy5zaXplKCk7ICsraSkKQEAg
LTEwNjUsNiArMTA2OCwzMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
RHVtCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAorRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblR5cGVKU09OU3RyaW5nRm9yRXhwcmVz
c2lvbkF0T2Zmc2V0KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICAvLyBBUEkgdG8gdGhpcyBmdW5j
dGlvbjogdHlwZUpTT05TdHJpbmdGb3JFeHByZXNzaW9uQXRPZmZzZXQoZnVuYywgc3Vic3RyaW5n
IGNvbnRhaW5lZCBpbiBmdW5jdGlvbiwgc2VhcmNoRGVzY3JpcHRvcik7CisgICAgQVNTRVJUKGV4
ZWMtPnZtKCkudHlwZVByb2ZpbGVyKCkpOworICAgIGV4ZWMtPnZtKCkudHlwZVByb2ZpbGVyTG9n
KCktPnByb2Nlc3NMb2dFbnRyaWVzKEFTQ0lJTGl0ZXJhbCgianNjIFRlc3RpbmcgQVBJOiBmdW5j
dGlvblR5cGVKU09OU3RyaW5nRm9yRXhwcmVzc2lvbkF0T2Zmc2V0IikpOworCisgICAgSlNWYWx1
ZSBmdW5jdGlvblZhbHVlID0gZXhlYy0+YXJndW1lbnQoMCk7CisgICAgQVNTRVJUKGZ1bmN0aW9u
VmFsdWUuaXNGdW5jdGlvbigpKTsKKyAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUg
PSAoanNEeW5hbWljQ2FzdDxKU0Z1bmN0aW9uKj4oZnVuY3Rpb25WYWx1ZS5hc0NlbGwoKS0+Z2V0
T2JqZWN0KCkpKS0+anNFeGVjdXRhYmxlKCk7CisKKyAgICBBU1NFUlQoZXhlYy0+YXJndW1lbnQo
MSkuaXNTdHJpbmcoKSk7CisgICAgU3RyaW5nIHN1YnN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50KDEp
LmdldFN0cmluZyhleGVjKTsKKyAgICBTdHJpbmcgc291cmNlQ29kZVRleHQgPSBleGVjdXRhYmxl
LT5zb3VyY2UoKS50b1N0cmluZygpOworICAgIHVuc2lnbmVkIG9mZnNldCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihzb3VyY2VDb2RlVGV4dC5maW5kKHN1YnN0cmluZykgKyBleGVjdXRhYmxlLT5z
b3VyY2UoKS5zdGFydE9mZnNldCgpKTsKKworICAgIEpTVmFsdWUgZGVzY3JpcHRvclZhbHVlID0g
ZXhlYy0+YXJndW1lbnQoMik7IAorICAgIEFTU0VSVChkZXNjcmlwdG9yVmFsdWUuaXNNYWNoaW5l
SW50KCkpOworICAgIFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3IgZGVzY3JpcHRvciA9IHN0
YXRpY19jYXN0PFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3I+KGRlc2NyaXB0b3JWYWx1ZS50
b1VJbnQzMihleGVjKSk7CisgICAgQVNTRVJUKGRlc2NyaXB0b3IgPT0gVHlwZVByb2ZpbGVyU2Vh
cmNoRGVzY3JpcHRvck5vcm1hbCB8fCBkZXNjcmlwdG9yID09IFR5cGVQcm9maWxlclNlYXJjaERl
c2NyaXB0b3JGdW5jdGlvblJldHVybik7CisgICAgCisgICAgU3RyaW5nIGpzb25TdHJpbmcgPSBl
eGVjLT52bSgpLnR5cGVQcm9maWxlcigpLT5qc29uU3RyaW5nRm9yVHlwZXNGb3JFeHByZXNzaW9u
QXRPZmZzZXQoZGVzY3JpcHRvciwgb2Zmc2V0LCBleGVjdXRhYmxlLT5zb3VyY2VJRCgpKTsKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIGpzb25TdHJpbmcpKTsKK30K
KwogLy8gVXNlIFNFSCBmb3IgUmVsZWFzZSBidWlsZHMgb25seSB0byBnZXQgcmlkIG9mIHRoZSBj
cmFzaCByZXBvcnQgZGlhbG9nCiAvLyAobHVja2lseSB0aGUgc2FtZSB0ZXN0cyBmYWlsIGluIFJl
bGVhc2UgYW5kIERlYnVnIGJ1aWxkcyBzbyBmYXIpLiBOZWVkIHRvCiAvLyBiZSBpbiBhIHNlcGFy
YXRlIG1haW4gZnVuY3Rpb24gYmVjYXVzZSB0aGUganNjbWFpbiBmdW5jdGlvbiByZXF1aXJlcyBv
YmplY3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2Zp
bGVyLmNwcAkocmV2aXNpb24gMTcyOTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVHlwZVByb2ZpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsMTUgKzgyLDI3IEBAIHZv
aWQgVHlwZVByb2ZpbGVyOjpnZXRUeXBlc0ZvclZhcmlhYmxlQXQKICAgICBkZXNjcmlwdGlvbi0+
c2V0TG9jYWxTdHJ1Y3R1cmVzKGxvY2F0aW9uLT5tX2luc3RydWN0aW9uVHlwZVNldC0+YWxsU3Ry
dWN0dXJlUmVwcmVzZW50YXRpb25zKCkpOwogfQogCi1zdGF0aWMgYm9vbCBkZXNjcmlwdG9yTWF0
Y2hlc1R5cGVMb2NhdGlvbihUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yIGRlc2NyaXB0b3Is
IFR5cGVMb2NhdGlvbiogbG9jYXRpb24pCitTdHJpbmcgVHlwZVByb2ZpbGVyOjpqc29uU3RyaW5n
Rm9yVHlwZXNGb3JFeHByZXNzaW9uQXRPZmZzZXQoVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRv
ciBkZXNjcmlwdG9yLCB1bnNpZ25lZCBvZmZzZXQsIGludHB0cl90IHNvdXJjZUlEKQogewotICAg
IGlmIChkZXNjcmlwdG9yID09IFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JGdW5jdGlvblJl
dHVybiAmJiBsb2NhdGlvbi0+bV9nbG9iYWxWYXJpYWJsZUlEID09IFR5cGVQcm9maWxlclJldHVy
blN0YXRlbWVudCkgIAotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBUeXBlTG9jYXRpb24qIGxv
Y2F0aW9uID0gZmluZExvY2F0aW9uKG9mZnNldCwgc291cmNlSUQsIGRlc2NyaXB0b3IpOworICAg
IEFTU0VSVChsb2NhdGlvbik7CiAKLSAgICBpZiAoZGVzY3JpcHRvciA9PSBUeXBlUHJvZmlsZXJT
ZWFyY2hEZXNjcmlwdG9yTm9ybWFsICYmIGxvY2F0aW9uLT5tX2dsb2JhbFZhcmlhYmxlSUQgIT0g
VHlwZVByb2ZpbGVyUmV0dXJuU3RhdGVtZW50KSAgCi0gICAgICAgIHJldHVybiB0cnVlOworICAg
IFN0cmluZ0J1aWxkZXIganNvbjsgIAogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIGpzb24uYXBw
ZW5kKCJ7Iik7CisKKyAgICBpZiAobG9jYXRpb24tPm1fZ2xvYmFsVHlwZVNldCAmJiBsb2NhdGlv
bi0+bV9nbG9iYWxWYXJpYWJsZUlEICE9IFR5cGVQcm9maWxlck5vR2xvYmFsSURFeGlzdHMpIHsK
KyAgICAgICAganNvbi5hcHBlbmQoIlwiZ2xvYmFsVHlwZVNldFwiOiIpOworICAgICAgICBqc29u
LmFwcGVuZChsb2NhdGlvbi0+bV9nbG9iYWxUeXBlU2V0LT50b0pTT05TdHJpbmcoKSk7CisgICAg
ICAgIGpzb24uYXBwZW5kKCIsIik7CisgICAgfQorCisgICAganNvbi5hcHBlbmQoIlwiaW5zdHJ1
Y3Rpb25UeXBlU2V0XCI6Iik7CisgICAganNvbi5hcHBlbmQobG9jYXRpb24tPm1faW5zdHJ1Y3Rp
b25UeXBlU2V0LT50b0pTT05TdHJpbmcoKSk7CisKKyAgICBqc29uLmFwcGVuZCgifSIpOworICAg
IAorICAgIHJldHVybiBqc29uLnRvU3RyaW5nKCk7CiB9CiAKIFR5cGVMb2NhdGlvbiogVHlwZVBy
b2ZpbGVyOjpmaW5kTG9jYXRpb24odW5zaWduZWQgZGl2b3QsIGludHB0cl90IHNvdXJjZUlELCBU
eXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yIGRlc2NyaXB0b3IpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXIuaAkocmV2aXNpb24gMTcyOTI2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTk2LDYgKzk2LDcgQEAgY2xhc3MgVHlwZVByb2ZpbGVyIHsKIHB1YmxpYzoKICAg
ICB2b2lkIGxvZ1R5cGVzRm9yVHlwZUxvY2F0aW9uKFR5cGVMb2NhdGlvbiopOwogICAgIHZvaWQg
Z2V0VHlwZXNGb3JWYXJpYWJsZUF0T2Zmc2V0Rm9ySW5zcGVjdG9yKFR5cGVQcm9maWxlclNlYXJj
aERlc2NyaXB0b3IsIHVuc2lnbmVkIGRpdm90LCBpbnRwdHJfdCBzb3VyY2VJRCwgUmVmUHRyPElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlR5cGVEZXNjcmlwdGlvbj4mKTsKKyAgICBK
U19FWFBPUlRfUFJJVkFURSBTdHJpbmcganNvblN0cmluZ0ZvclR5cGVzRm9yRXhwcmVzc2lvbkF0
T2Zmc2V0KFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3IsIHVuc2lnbmVkIG9mZnNldCwgaW50
cHRyX3Qgc291cmNlSUQpOwogICAgIHZvaWQgaW5zZXJ0TmV3TG9jYXRpb24oVHlwZUxvY2F0aW9u
Kik7CiAgICAgRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlKiBmdW5jdGlvbkhhc0V4ZWN1dGVkQ2Fj
aGUoKSB7IHJldHVybiAmbV9mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGU7IH0KICAgICBUeXBlTG9j
YXRpb25DYWNoZSogdHlwZUxvY2F0aW9uQ2FjaGUoKSB7IHJldHVybiAmbV90eXBlTG9jYXRpb25D
YWNoZTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVy
TG9nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVBy
b2ZpbGVyTG9nLmgJKHJldmlzaW9uIDE3MjkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1R5cGVQcm9maWxlckxvZy5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw3IEBA
IHB1YmxpYzoKICAgICAgICAgICAgIHByb2Nlc3NMb2dFbnRyaWVzKEFTQ0lJTGl0ZXJhbCgiTG9n
IEZ1bGwiKSk7CiAgICAgfQogCi0gICAgdm9pZCBwcm9jZXNzTG9nRW50cmllcyhTdHJpbmcpOwor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJvY2Vzc0xvZ0VudHJpZXMoU3RyaW5nKTsKICAg
ICBMb2dFbnRyeSogbG9nRW5kUHRyKCkgY29uc3QgeyByZXR1cm4gbV9sb2dFbmRQdHI7IH0KIAog
ICAgIHN0YXRpYyBwdHJkaWZmX3QgbG9nU3RhcnRPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoVHlwZVByb2ZpbGVyTG9nLCBtX2xvZ1N0YXJ0UHRyKTsgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5jcHAJKHJldmlzaW9uIDE3MjkyNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNDcsNiArMjQ3LDc4IEBAIFN0cmluZyBUeXBlU2V0OjpsZWFzdENvbW1vbkFuY2VzdG9yKCkg
Y28KICAgICByZXR1cm4gU3RydWN0dXJlU2hhcGU6OmxlYXN0Q29tbW9uQW5jZXN0b3IobV9zdHJ1
Y3R1cmVIaXN0b3J5KTsKIH0KIAorU3RyaW5nIFR5cGVTZXQ6OnRvSlNPTlN0cmluZygpIGNvbnN0
Cit7CisgICAgLy8gVGhpcyByZXR1cm5zIGEgSlNPTiBzdHJpbmcgcmVwcmVzZW50aW5nIGFuIE9i
amVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczoKKyAgICAvLyAgICAgZGlzcGxheVR5
cGVOYW1lOiBgU3RyaW5nYAorICAgIC8vICAgICBwcmltaXRpdmVUeXBlTmFtZXM6IGBBcnJheTxT
dHJpbmc+YAorICAgIC8vICAgICBzdHJ1Y3R1cmVzOiBgQXJyYXk8SlNPTjxTdHJ1Y3R1cmVTaGFw
ZT4+YAorCisgICAgU3RyaW5nQnVpbGRlciBqc29uOworICAgIGpzb24uYXBwZW5kKCJ7Iik7CisK
KyAgICBqc29uLmFwcGVuZCgiXCJkaXNwbGF5VHlwZU5hbWVcIjoiKTsKKyAgICBqc29uLmFwcGVu
ZCgiXCIiKTsKKyAgICBqc29uLmFwcGVuZChkaXNwbGF5TmFtZSgpKTsKKyAgICBqc29uLmFwcGVu
ZCgiXCIiKTsKKyAgICBqc29uLmFwcGVuZCgiLCIpOworCisgICAganNvbi5hcHBlbmQoIlwicHJp
bWl0aXZlVHlwZU5hbWVzXCI6Iik7CisgICAganNvbi5hcHBlbmQoIlsiKTsKKyAgICBib29sIGhh
c0FuSXRlbSA9IGZhbHNlOworICAgIGlmIChtX3NlZW5UeXBlcyAmIFR5cGVVbmRlZmluZWQpIHsK
KyAgICAgICAgaGFzQW5JdGVtID0gdHJ1ZTsKKyAgICAgICAganNvbi5hcHBlbmQoIlwiVW5kZWZp
bmVkXCIiKTsKKyAgICB9CisgICAgaWYgKG1fc2VlblR5cGVzICYgVHlwZU51bGwpIHsKKyAgICAg
ICAgaWYgKGhhc0FuSXRlbSkKKyAgICAgICAgICAgIGpzb24uYXBwZW5kKCIsIik7CisgICAgICAg
IGhhc0FuSXRlbSA9IHRydWU7CisgICAgICAgIGpzb24uYXBwZW5kKCJcIk51bGxcIiIpOworICAg
IH0KKyAgICBpZiAobV9zZWVuVHlwZXMgJiBUeXBlQm9vbGVhbikgeworICAgICAgICBpZiAoaGFz
QW5JdGVtKQorICAgICAgICAgICAganNvbi5hcHBlbmQoIiwiKTsKKyAgICAgICAgaGFzQW5JdGVt
ID0gdHJ1ZTsKKyAgICAgICAganNvbi5hcHBlbmQoIlwiQm9vbGVhblwiIik7CisgICAgfQorICAg
IGlmIChtX3NlZW5UeXBlcyAmIFR5cGVNYWNoaW5lSW50KSB7CisgICAgICAgIGlmIChoYXNBbkl0
ZW0pCisgICAgICAgICAgICBqc29uLmFwcGVuZCgiLCIpOworICAgICAgICBoYXNBbkl0ZW0gPSB0
cnVlOworICAgICAgICBqc29uLmFwcGVuZCgiXCJJbnRlZ2VyXCIiKTsKKyAgICB9CisgICAgaWYg
KG1fc2VlblR5cGVzICYgVHlwZU51bWJlcikgeworICAgICAgICBpZiAoaGFzQW5JdGVtKQorICAg
ICAgICAgICAganNvbi5hcHBlbmQoIiwiKTsKKyAgICAgICAgaGFzQW5JdGVtID0gdHJ1ZTsKKyAg
ICAgICAganNvbi5hcHBlbmQoIlwiTnVtYmVyXCIiKTsKKyAgICB9CisgICAgaWYgKG1fc2VlblR5
cGVzICYgVHlwZVN0cmluZykgeworICAgICAgICBpZiAoaGFzQW5JdGVtKQorICAgICAgICAgICAg
anNvbi5hcHBlbmQoIiwiKTsKKyAgICAgICAgaGFzQW5JdGVtID0gdHJ1ZTsKKyAgICAgICAganNv
bi5hcHBlbmQoIlwiU3RyaW5nXCIiKTsKKyAgICB9CisgICAganNvbi5hcHBlbmQoIl0iKTsKKwor
ICAgIGpzb24uYXBwZW5kKCIsIik7CisKKyAgICBqc29uLmFwcGVuZCgiXCJzdHJ1Y3R1cmVzXCI6
Iik7CisgICAganNvbi5hcHBlbmQoIlsiKTsKKyAgICBoYXNBbkl0ZW0gPSBmYWxzZTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc3RydWN0dXJlSGlzdG9yeS5zaXplKCk7IGkrKykgewor
ICAgICAgICBpZiAoaGFzQW5JdGVtKQorICAgICAgICAgICAganNvbi5hcHBlbmQoIiwiKTsKKyAg
ICAgICAgaGFzQW5JdGVtID0gdHJ1ZTsKKyAgICAgICAganNvbi5hcHBlbmQobV9zdHJ1Y3R1cmVI
aXN0b3J5W2ldLT50b0pTT05TdHJpbmcoKSk7CisgICAgfQorICAgIGpzb24uYXBwZW5kKCJdIik7
CisKKyAgICBqc29uLmFwcGVuZCgifSIpOworICAgIHJldHVybiBqc29uLnRvU3RyaW5nKCk7Cit9
CisKIHZvaWQgVHlwZVNldDo6ZHVtcFNlZW5UeXBlcygpCiB7CiAgICAgZGF0YUxvZyhzZWVuVHlw
ZXMoKSwgIlxuIik7CkBAIC0zNjAsNiArNDMyLDQ5IEBAIFN0cmluZyBTdHJ1Y3R1cmVTaGFwZTo6
c3RyaW5nUmVwcmVzZW50YXQKICAgICByZXR1cm4gcmVwcmVzZW50YXRpb24udG9TdHJpbmcoKTsK
IH0KIAorU3RyaW5nIFN0cnVjdHVyZVNoYXBlOjp0b0pTT05TdHJpbmcoKSBjb25zdAoreworICAg
IC8vIFRoaXMgcmV0dXJucyBhIEpTT04gc3RyaW5nIHJlcHJlc2VudGluZyBhbiBPYmplY3Qgd2l0
aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6CisgICAgLy8gICAgIGNvbnN0cnVjdG9yTmFtZTog
YFN0cmluZ2AKKyAgICAvLyAgICAgZmllbGRzOiBgQXJyYXk8U3RyaW5nPmAKKyAgICAvLyAgICAg
cHJvdG86IGBKU09OPFN0cnVjdHVyZVNoYXBlPiB8IG51bGxgCisKKyAgICBTdHJpbmdCdWlsZGVy
IGpzb247CisgICAganNvbi5hcHBlbmQoInsiKTsKKworICAgIGpzb24uYXBwZW5kKCJcImNvbnN0
cnVjdG9yTmFtZVwiOiIpOworICAgIGpzb24uYXBwZW5kKCJcIiIpOworICAgIGpzb24uYXBwZW5k
KG1fY29uc3RydWN0b3JOYW1lKTsKKyAgICBqc29uLmFwcGVuZCgiXCIiKTsKKyAgICBqc29uLmFw
cGVuZCgiLCIpOworCisgICAganNvbi5hcHBlbmQoIlwiZmllbGRzXCI6Iik7CisgICAganNvbi5h
cHBlbmQoIlsiKTsKKyAgICBib29sIGhhc0FuSXRlbSA9IGZhbHNlOworICAgIGZvciAoYXV0byBp
dCA9IG1fZmllbGRzLmJlZ2luKCksIGVuZCA9IG1fZmllbGRzLmVuZCgpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKKyAgICAgICAgaWYgKGhhc0FuSXRlbSkKKyAgICAgICAgICAgIGpzb24uYXBwZW5kKCIs
Iik7CisgICAgICAgIGhhc0FuSXRlbSA9IHRydWU7CisKKyAgICAgICAgU3RyaW5nIGZpZWxkTmFt
ZSgoKml0KS5nZXQoKSk7CisgICAgICAgIGpzb24uYXBwZW5kKCJcIiIpOworICAgICAgICBqc29u
LmFwcGVuZChmaWVsZE5hbWUpOworICAgICAgICBqc29uLmFwcGVuZCgiXCIiKTsKKyAgICB9Cisg
ICAganNvbi5hcHBlbmQoIl0iKTsKKyAgICBqc29uLmFwcGVuZCgiLCIpOworCisgICAganNvbi5h
cHBlbmQoIlwicHJvdG9cIjoiKTsKKyAgICBpZiAobV9wcm90bykKKyAgICAgICAganNvbi5hcHBl
bmQobV9wcm90by0+dG9KU09OU3RyaW5nKCkpOworICAgIGVsc2UKKyAgICAgICAganNvbi5hcHBl
bmQoIm51bGwiKTsKKworICAgIGpzb24uYXBwZW5kKCJ9Iik7CisKKyAgICByZXR1cm4ganNvbi50
b1N0cmluZygpOworfQorCiBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRp
bWU6OlN0cnVjdHVyZURlc2NyaXB0aW9uPiBTdHJ1Y3R1cmVTaGFwZTo6aW5zcGVjdG9yUmVwcmVz
ZW50YXRpb24oKQogewogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1l
OjpTdHJ1Y3R1cmVEZXNjcmlwdGlvbj4gYmFzZSA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1
bnRpbWU6OlN0cnVjdHVyZURlc2NyaXB0aW9uOjpjcmVhdGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmgJKHJldmlzaW9uIDE3MjkyNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNiAr
NzAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBtYXJrQXNGaW5hbCgpOwogICAgIHZvaWQgYWRkUHJv
cGVydHkoUmVmUHRyPFN0cmluZ0ltcGw+KTsKICAgICBTdHJpbmcgc3RyaW5nUmVwcmVzZW50YXRp
b24oKTsKKyAgICBTdHJpbmcgdG9KU09OU3RyaW5nKCkgY29uc3Q7CiAgICAgUGFzc1JlZlB0cjxJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpTdHJ1Y3R1cmVEZXNjcmlwdGlvbj4gaW5z
cGVjdG9yUmVwcmVzZW50YXRpb24oKTsKICAgICB2b2lkIHNldENvbnN0cnVjdG9yTmFtZShTdHJp
bmcgbmFtZSkgeyBtX2NvbnN0cnVjdG9yTmFtZSA9IChuYW1lLmlzRW1wdHkoKSA/ICJPYmplY3Qi
IDogbmFtZSk7IH0KICAgICBTdHJpbmcgY29uc3RydWN0b3JOYW1lKCkgeyByZXR1cm4gbV9jb25z
dHJ1Y3Rvck5hbWU7IH0KQEAgLTk2LDYgKzk3LDcgQEAgcHVibGljOgogICAgIFN0cmluZyBkaXNw
bGF5TmFtZSgpIGNvbnN0OwogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
QXJyYXk8U3RyaW5nPj4gYWxsUHJpbWl0aXZlVHlwZU5hbWVzKCkgY29uc3Q7CiAgICAgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpSdW50aW1lOjpTdHJ1Y3R1cmVEZXNjcmlwdGlvbj4+IGFsbFN0cnVjdHVyZVJlcHJlc2VudGF0
aW9ucygpIGNvbnN0OworICAgIFN0cmluZyB0b0pTT05TdHJpbmcoKSBjb25zdDsKIAogcHJpdmF0
ZToKICAgICBTdHJpbmcgbGVhc3RDb21tb25BbmNlc3RvcigpIGNvbnN0OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3Byb2ZpbGVyL3R5cGUtcHJvZmlsZXItYmFzaWMuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3Byb2ZpbGVyL3R5cGUtcHJv
ZmlsZXItYmFzaWMuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvcHJvZmlsZXIvdHlwZS1wcm9maWxlci1iYXNpYy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDc0IEBACitmdW5jdGlvbiBvdXRlcigpIHsKKworZnVuY3Rpb24gZm9vKGJhcil7fQorZm9v
KDIwKTsKK2ZvbygyMC41KTsKKwordmFyIHRlc3QgPSB7eDoyMCwgeTo1MH07Cit0ZXN0ID0gImhl
bGxvIjsKKworfQorb3V0ZXIoKTsKKworLy8gPT09PT09IEVuZCB0ZXN0IGNhc2VzID09PT09PQor
CisvLyBhcmdzIGZvciB0eXBlSlNPTlN0cmluZ0ZvckV4cHJlc3Npb25BdE9mZnNldCA9PiBmdW5j
dGlvbiwgc3Vic3RyaW5nLCBzZWFyY2ggZGVzY3JpcHRvcgorLy8gc3Vic3RyaW5ncyBtdXN0IGJl
IHVuaXF1ZSB3aXRoaW4gdGhlIGdpdmVuIGZ1bmN0aW9uIGFyZ3VtZW50LgordmFyIERFU0NSSVBU
T1JfTk9STUFMID0gMTsKK3ZhciBERVNDUklQVE9SX1JFVFVSTiA9IDI7CisKKy8vIFR5cGVzIG1h
dGNoaW5nIHRob3NlIGluIHJ1bnRpbWUvVHlwZVNldAordmFyIFQgPSB7CisgICAgQm9vbGVhbjoi
Qm9vbGVhbiIsCisgICAgSW50ZWdlcjogIkludGVnZXIiLAorICAgIE51bGw6ICJOdWxsIiwKKyAg
ICBOdW1iZXI6ICJOdW1iZXIiLAorICAgIE1hbnk6ICIobWFueSkiLAorICAgIFN0cmluZzogIlN0
cmluZyIsCisgICAgVW5kZWZpbmVkOiAiVW5kZWZpbmVkIiwKKyAgICBVbmRlZmluZWRPck51bGw6
ICIoPykiCit9OworCisvLyBPcHRpb25hbCB0eXBlcyBtYXRjaGluZyB0aG9zZSBpbiBydW50aW1l
L1R5cGVTZXQKK3ZhciBUT3B0aW9uYWwgPSB7CisgICAgQm9vbGVhbjoiQm9vbGVhbj8iLAorICAg
IEludGVnZXI6ICJJbnRlZ2VyPyIsCisgICAgTnVtYmVyOiAiTnVtYmVyPyIsCisgICAgU3RyaW5n
OiAiU3RyaW5nPyIKK307CisKK2Z1bmN0aW9uIGFzc2VydChjb25kaXRpb24sIHJlYXNvbikgewor
ICAgIGlmICghY29uZGl0aW9uKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IocmVhc29uKTsKK30K
KworLy8gdHlwZXMgZm9yIGFyZ3VtZW50ICdiYXInIGluIGZ1bmN0aW9uICdmb28nCit2YXIgdHlw
ZXMgPSBKU09OLnBhcnNlKHR5cGVKU09OU3RyaW5nRm9yRXhwcmVzc2lvbkF0T2Zmc2V0KG91dGVy
LCAiYmFyKSIsIERFU0NSSVBUT1JfTk9STUFMKSk7IAorYXNzZXJ0KHR5cGVzLmluc3RydWN0aW9u
VHlwZVNldC5wcmltaXRpdmVUeXBlTmFtZXMuaW5kZXhPZihULkludGVnZXIpICE9PSAtMSwgIlBy
aW1pdGl2ZSB0eXBlIG5hbWVzIHNob3VsZCBjb250YWluICdJbnRlZ2VyJyIpOworYXNzZXJ0KHR5
cGVzLmluc3RydWN0aW9uVHlwZVNldC5wcmltaXRpdmVUeXBlTmFtZXMuaW5kZXhPZihULk51bWJl
cikgIT09IC0xLCAiUHJpbWl0aXZlIHR5cGUgbmFtZXMgc2hvdWxkIGNvbnRhaW4gJ051bWJlcici
KTsKK2Fzc2VydCh0eXBlcy5pbnN0cnVjdGlvblR5cGVTZXQuZGlzcGxheVR5cGVOYW1lID09PSBU
Lk51bWJlciAsICJQcmltaXRpdmUgdHlwZSBuYW1lcyBkaXNwbGF5IG5hbWUgc2hvdWxkIGJlICdO
dW1iZXInIik7CisKKy8vIHR5cGVzIGZvciB2YXJpYWJsZSAndGVzdCcgYXQgaW5zdHJ1Y3Rpb246
ICd0ZXN0ID0ge3g6MjAsIHk6NTB9JwordHlwZXMgPSBKU09OLnBhcnNlKHR5cGVKU09OU3RyaW5n
Rm9yRXhwcmVzc2lvbkF0T2Zmc2V0KG91dGVyLCAidGVzdCA9IHsiLCBERVNDUklQVE9SX05PUk1B
TCkpOyAKK2Fzc2VydCh0eXBlcy5nbG9iYWxUeXBlU2V0LnByaW1pdGl2ZVR5cGVOYW1lcy5pbmRl
eE9mKFQuU3RyaW5nKSAhPT0gLTEsICJWYXJpYWJsZSAndGVzdCcgc2hvdWxkIGhhdmUgYmVlbiB0
eXBlICdTdHJpbmcnIGdsb2JhbGx5Iik7Cithc3NlcnQodHlwZXMuaW5zdHJ1Y3Rpb25UeXBlU2V0
LnN0cnVjdHVyZXMubGVuZ3RoID09PSAxLCAiVmFyaWFibGUgJ3Rlc3QnIHNob3VsZCBoYXZlIG9u
ZSBzdHJ1Y3R1cmUiKTsKK2Fzc2VydCh0eXBlcy5pbnN0cnVjdGlvblR5cGVTZXQuc3RydWN0dXJl
c1swXS5jb25zdHJ1Y3Rvck5hbWUgPT09ICJPYmplY3QiLCAidmFyaWFibGUgJ3Rlc3QnIikKK2Fz
c2VydCh0eXBlcy5pbnN0cnVjdGlvblR5cGVTZXQuc3RydWN0dXJlc1swXS5wcm90by5jb25zdHJ1
Y3Rvck5hbWUgPT09ICJPYmplY3QiLCAiVmFyaWFibGUgJ3Rlc3QnIHNob3VsZG4ndCBoYXZlIGEg
cHJvdG90eXBlIik7Cithc3NlcnQodHlwZXMuaW5zdHJ1Y3Rpb25UeXBlU2V0LnN0cnVjdHVyZXNb
MF0ucHJvdG8ucHJvdG8gPT09IG51bGwsICJWYXJpYWJsZSAndGVzdCcgc2hvdWxkbid0IGhhdmUg
YSBwcm90b3R5cGUiKTsKK2Fzc2VydCh0eXBlcy5pbnN0cnVjdGlvblR5cGVTZXQuc3RydWN0dXJl
c1swXS5jb25zdHJ1Y3Rvck5hbWUgPT09ICJPYmplY3QiLCAidmFyaWFibGUgJ3Rlc3QnIHNob3Vs
ZCBoYXZlIGNvbnN0cnVjdG9yIG5hbWUgJ09iamVjdCciKQorYXNzZXJ0KHR5cGVzLmdsb2JhbFR5
cGVTZXQuZGlzcGxheVR5cGVOYW1lID09PSAiT2JqZWN0IiwgIlZhcmlhYmxlICd0ZXN0JyBnbG9i
YWwgdHlwZSBuYW1lIHNob3VsZCBkaXNwbGF5IGFzICdPYmplY3QnIik7Cithc3NlcnQodHlwZXMu
aW5zdHJ1Y3Rpb25UeXBlU2V0LnN0cnVjdHVyZXNbMF0uZmllbGRzLmxlbmd0aCA9PT0gMiwgInZh
cmlhYmxlICd0ZXN0JyBzaG91bGQgaGF2ZSB0d28gZmllbGRzOiB4LHkiKTsKK2Fzc2VydCh0eXBl
cy5pbnN0cnVjdGlvblR5cGVTZXQuc3RydWN0dXJlc1swXS5maWVsZHMuaW5kZXhPZigieCIpICE9
PSAtMSwgInZhcmlhYmxlICd0ZXN0JyBzaG91bGQgaGF2ZSBmaWVsZCAneCciKTsKK2Fzc2VydCh0
eXBlcy5pbnN0cnVjdGlvblR5cGVTZXQuc3RydWN0dXJlc1swXS5maWVsZHMuaW5kZXhPZigieSIp
ICE9PSAtMSwgInZhcmlhYmxlICd0ZXN0JyBzaG91bGQgaGF2ZSBmaWVsZCAneSciKTsKKworLy8g
dHlwZXMgZm9yIHZhcmlhYmxlICd0ZXN0JyBhdCBpbnN0cnVjdGlvbjogJ3Rlc3QgPSAiaGVsbG8i
JwordHlwZXMgPSBKU09OLnBhcnNlKHR5cGVKU09OU3RyaW5nRm9yRXhwcmVzc2lvbkF0T2Zmc2V0
KG91dGVyLCAidGVzdCA9IFwiaCIsIERFU0NSSVBUT1JfTk9STUFMKSk7Cithc3NlcnQodHlwZXMu
Z2xvYmFsVHlwZVNldC5wcmltaXRpdmVUeXBlTmFtZXMuaW5kZXhPZihULlN0cmluZykgIT09IC0x
LCAiVmFyaWFibGUgJ3Rlc3QnIHNob3VsZCBoYXZlIGJlZW4gdHlwZSAnU3RyaW5nJyBnbG9iYWxs
eSIpOworYXNzZXJ0KHR5cGVzLmluc3RydWN0aW9uVHlwZVNldC5kaXNwbGF5VHlwZU5hbWUgPT09
IFQuU3RyaW5nLCAiVmFyaWFibGUgJ3Rlc3QnIHNob3VsZCBoYXZlIGJlZW4gZGlzcGxheSB0eXBl
ICdTdHJpbmcnIGF0IHRoaXMgaW5zdHJ1Y3Rpb24iKTsKK2Fzc2VydCh0eXBlcy5pbnN0cnVjdGlv
blR5cGVTZXQucHJpbWl0aXZlVHlwZU5hbWVzLmluZGV4T2YoVC5TdHJpbmcpICE9PSAtMSwgIlZh
cmlhYmxlICd0ZXN0JyBzaG91bGQgaGF2ZSBiZWVuIHR5cGUgJ1N0cmluZycgZ2xvYmFsbHkiKTsK
K2Fzc2VydCh0eXBlcy5pbnN0cnVjdGlvblR5cGVTZXQuc3RydWN0dXJlcy5sZW5ndGggPT09IDAs
ICJWYXJpYWJsZSAndGVzdCcgYXQgdGhpcyBpbnN0cnVjdGlvbiBzaG91bGRuJ3QgaGF2ZSBhIHN0
cnVjdHVyZS4iKTsKK2Fzc2VydCh0eXBlcy5nbG9iYWxUeXBlU2V0LnN0cnVjdHVyZXMubGVuZ3Ro
ID09PSAxLCAiVmFyaWFibGUgJ3Rlc3QnIHNob3VsZCBzdGlsbCBoYXZlIG9uZSBzdHJ1Y3R1cmUi
KTsKK2Fzc2VydCh0eXBlcy5nbG9iYWxUeXBlU2V0LnN0cnVjdHVyZXNbMF0uZmllbGRzLmluZGV4
T2YoIngiKSAhPT0gLTEsICJ2YXJpYWJsZSAndGVzdCcgc2hvdWxkIGhhdmUgZmllbGQgJ3gnIGds
b2JhbGx5Iik7Cithc3NlcnQodHlwZXMuZ2xvYmFsVHlwZVNldC5zdHJ1Y3R1cmVzWzBdLmZpZWxk
cy5pbmRleE9mKCJ5IikgIT09IC0xLCAidmFyaWFibGUgJ3Rlc3QnIHNob3VsZCBoYXZlIGZpZWxk
ICd5JyBnbG9iYWxseSIpOworCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9w
cm9maWxlci90eXBlLXByb2ZpbGVyLWluaGVyaXRhbmNlLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9wcm9maWxlci90eXBlLXByb2ZpbGVyLWluaGVyaXRhbmNl
LmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3Byb2ZpbGVy
L3R5cGUtcHJvZmlsZXItaW5oZXJpdGFuY2UuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5
MSBAQAorZnVuY3Rpb24gb3V0ZXIoKQoreworCit2YXIgdGhlQSA9IG5ldyBBOwordmFyIHRoZUIg
PSBuZXcgQjsKK3ZhciB0aGVDID0gbmV3IEM7Cit2YXIgaGllcmFyY2h5VGVzdCA9IG5ldyBCOwor
aGllcmFyY2h5VGVzdCA9IG5ldyBDOworCit2YXIgc2Vjb25kSGllcmFyY2h5VGVzdCA9IE9iamVj
dC5jcmVhdGUodGhlQik7CitzZWNvbmRIaWVyYXJjaHlUZXN0ID0gT2JqZWN0LmNyZWF0ZSh0aGVD
KTsKKwordmFyIHNlY29uZEIgPSBPYmplY3QuY3JlYXRlKHRoZUIpOworCitmdW5jdGlvbiBBKCkg
eyB9OworZnVuY3Rpb24gQigpIHsgfTsgQi5wcm90b3R5cGUuX19wcm90b19fID0gQS5wcm90b3R5
cGU7CitmdW5jdGlvbiBDKCkgeyB9OyBDLnByb3RvdHlwZS5fX3Byb3RvX18gPSBBLnByb3RvdHlw
ZTsKKworfQorb3V0ZXIoKTsKKworLy8gPT09PT09IEVuZCB0ZXN0IGNhc2VzID09PT09PQorCisv
LyBhcmdzIGZvciB0eXBlSlNPTlN0cmluZ0ZvckV4cHJlc3Npb25BdE9mZnNldCA9PiBmdW5jdGlv
biwgc3Vic3RyaW5nLCBzZWFyY2ggZGVzY3JpcHRvcgorLy8gc3Vic3RyaW5ncyBtdXN0IGJlIHVu
aXF1ZSB3aXRoaW4gdGhlIGdpdmVuIGZ1bmN0aW9uIGFyZ3VtZW50LgorCit2YXIgREVTQ1JJUFRP
Ul9OT1JNQUwgPSAxOwordmFyIERFU0NSSVBUT1JfUkVUVVJOID0gMjsKKworLy8gVHlwZXMgbWF0
Y2hpbmcgdGhvc2UgaW4gcnVudGltZS9UeXBlU2V0Cit2YXIgVCA9IHsKKyAgICBCb29sZWFuOiJC
b29sZWFuIiwKKyAgICBJbnRlZ2VyOiAiSW50ZWdlciIsCisgICAgTnVsbDogIk51bGwiLAorICAg
IE51bWJlcjogIk51bWJlciIsCisgICAgTWFueTogIihtYW55KSIsCisgICAgU3RyaW5nOiAiU3Ry
aW5nIiwKKyAgICBVbmRlZmluZWQ6ICJVbmRlZmluZWQiLAorICAgIFVuZGVmaW5lZE9yTnVsbDog
Iig/KSIKK307CisKKy8vIE9wdGlvbmFsIHR5cGVzIG1hdGNoaW5nIHRob3NlIGluIHJ1bnRpbWUv
VHlwZVNldAordmFyIFRPcHRpb25hbCA9IHsKKyAgICBCb29sZWFuOiJCb29sZWFuPyIsCisgICAg
SW50ZWdlcjogIkludGVnZXI/IiwKKyAgICBOdW1iZXI6ICJOdW1iZXI/IiwKKyAgICBTdHJpbmc6
ICJTdHJpbmc/IgorfTsKKworZnVuY3Rpb24gYXNzZXJ0KGNvbmRpdGlvbiwgcmVhc29uKSB7Cisg
ICAgaWYgKCFjb25kaXRpb24pCisgICAgICAgIHRocm93IG5ldyBFcnJvcihyZWFzb24pOworfQor
CisvLyB0eXBlcyBmb3IgdmFyaWFibGUgJ3RoZUEnCit0eXBlcyA9IEpTT04ucGFyc2UodHlwZUpT
T05TdHJpbmdGb3JFeHByZXNzaW9uQXRPZmZzZXQob3V0ZXIsICJ0aGVBID0gbiIsIERFU0NSSVBU
T1JfTk9STUFMKSk7Cithc3NlcnQodHlwZXMuZ2xvYmFsVHlwZVNldC5kaXNwbGF5VHlwZU5hbWUg
PT09ICJBIiwgInZhcmlhYmxlICd0aGVBJyBzaG91bGQgaGF2ZSBkaXNwbGF5VHlwZU5hbWUgJ0En
Iik7Cithc3NlcnQodHlwZXMuaW5zdHJ1Y3Rpb25UeXBlU2V0LmRpc3BsYXlUeXBlTmFtZSA9PT0g
IkEiLCAidmFyaWFibGUgJ3RoZUEnIHNob3VsZCBoYXZlIGRpc3BsYXlUeXBlTmFtZSAnQSciKTsK
KworLy8gdHlwZXMgZm9yIHZhcmlhYmxlICd0aGVCJwordHlwZXMgPSBKU09OLnBhcnNlKHR5cGVK
U09OU3RyaW5nRm9yRXhwcmVzc2lvbkF0T2Zmc2V0KG91dGVyLCAidGhlQiA9IG4iLCBERVNDUklQ
VE9SX05PUk1BTCkpOworYXNzZXJ0KHR5cGVzLmdsb2JhbFR5cGVTZXQuZGlzcGxheVR5cGVOYW1l
ID09PSAiQiIsICJ2YXJpYWJsZSAndGhlQicgc2hvdWxkIGhhdmUgZGlzcGxheVR5cGVOYW1lICdC
JyIpOworYXNzZXJ0KHR5cGVzLmluc3RydWN0aW9uVHlwZVNldC5kaXNwbGF5VHlwZU5hbWUgPT09
ICJCIiwgInZhcmlhYmxlICd0aGVCJyBzaG91bGQgaGF2ZSBkaXNwbGF5VHlwZU5hbWUgJ0InIik7
CisKKy8vIHR5cGVzIGZvciB2YXJpYWJsZSAndGhlQycKK3R5cGVzID0gSlNPTi5wYXJzZSh0eXBl
SlNPTlN0cmluZ0ZvckV4cHJlc3Npb25BdE9mZnNldChvdXRlciwgInRoZUMgPSBuIiwgREVTQ1JJ
UFRPUl9OT1JNQUwpKTsKK2Fzc2VydCh0eXBlcy5nbG9iYWxUeXBlU2V0LmRpc3BsYXlUeXBlTmFt
ZSA9PT0gIkMiLCAidmFyaWFibGUgJ3RoZUMnIHNob3VsZCBoYXZlIGRpc3BsYXlUeXBlTmFtZSAn
QyciKTsKK2Fzc2VydCh0eXBlcy5pbnN0cnVjdGlvblR5cGVTZXQuZGlzcGxheVR5cGVOYW1lID09
PSAiQyIsICJ2YXJpYWJsZSAndGhlQycgc2hvdWxkIGhhdmUgZGlzcGxheVR5cGVOYW1lICdDJyIp
OworCisKKy8vIHR5cGVzIGZvciB2YXJpYWJsZSAnaGllcmFyY2h5VGVzdCcgYXQgaW5zdHJ1Y3Rp
b24gJ2hpZXJhcmNoeVRlc3QgPSBuZXcgQjsnCit0eXBlcyA9IEpTT04ucGFyc2UodHlwZUpTT05T
dHJpbmdGb3JFeHByZXNzaW9uQXRPZmZzZXQob3V0ZXIsICJoaWVyYXJjaHlUZXN0ID0gbmV3IEI7
IiwgREVTQ1JJUFRPUl9OT1JNQUwpKTsKK2Fzc2VydCh0eXBlcy5nbG9iYWxUeXBlU2V0LmRpc3Bs
YXlUeXBlTmFtZSA9PT0gIkEiLCAidmFyaWFibGUgJ2hpZXJhcmNoeVRlc3QnIHNob3VsZCBoYXZl
IGRpc3BsYXlUeXBlTmFtZSAnQSciKTsKKworLy8gdHlwZXMgZm9yIHZhcmlhYmxlICdoaWVyYXJj
aHlUZXN0JyBhdCBpbnN0cnVjdGlvbiAnaGllcmFyY2h5VGVzdCA9IG5ldyBDOycKK3R5cGVzID0g
SlNPTi5wYXJzZSh0eXBlSlNPTlN0cmluZ0ZvckV4cHJlc3Npb25BdE9mZnNldChvdXRlciwgImhp
ZXJhcmNoeVRlc3QgPSBuZXcgQzsiLCBERVNDUklQVE9SX05PUk1BTCkpOworYXNzZXJ0KHR5cGVz
Lmdsb2JhbFR5cGVTZXQuZGlzcGxheVR5cGVOYW1lID09PSAiQSIsICJ2YXJpYWJsZSAnaGllcmFy
Y2h5VGVzdCcgc2hvdWxkIGhhdmUgZGlzcGxheVR5cGVOYW1lICdBJyIpOworCisvLyB0eXBlcyBm
b3IgdmFyaWFibGUgJ3NlY29uZEhpZXJhcmNoeVRlc3QnIGF0IGluc3RydWN0aW9uICdzZWNvbmRI
aWVyYXJjaHlUZXN0ID0gT2JqZWN0LmNyZWF0ZSh0aGVCKScKK3R5cGVzID0gSlNPTi5wYXJzZSh0
eXBlSlNPTlN0cmluZ0ZvckV4cHJlc3Npb25BdE9mZnNldChvdXRlciwgInNlY29uZEhpZXJhcmNo
eVRlc3QgPSBPYmplY3QuY3JlYXRlKHRoZUIpOyIsIERFU0NSSVBUT1JfTk9STUFMKSk7Cithc3Nl
cnQodHlwZXMuZ2xvYmFsVHlwZVNldC5kaXNwbGF5VHlwZU5hbWUgPT09ICJBIiwgInZhcmlhYmxl
ICdzZWNvbmRIaWVyYXJjaHlUZXN0JyBzaG91bGQgaGF2ZSBkaXNwbGF5VHlwZU5hbWUgJ0EnIik7
CisKKy8vIHR5cGVzIGZvciB2YXJpYWJsZSAnc2Vjb25kSGllcmFyY2h5VGVzdCcgYXQgaW5zdHJ1
Y3Rpb24gJ3NlY29uZEhpZXJhcmNoeVRlc3QgPSBPYmplY3QuY3JlYXRlKHRoZUMpJwordHlwZXMg
PSBKU09OLnBhcnNlKHR5cGVKU09OU3RyaW5nRm9yRXhwcmVzc2lvbkF0T2Zmc2V0KG91dGVyLCAi
c2Vjb25kSGllcmFyY2h5VGVzdCA9IE9iamVjdC5jcmVhdGUodGhlQyk7IiwgREVTQ1JJUFRPUl9O
T1JNQUwpKTsKK2Fzc2VydCh0eXBlcy5nbG9iYWxUeXBlU2V0LmRpc3BsYXlUeXBlTmFtZSA9PT0g
IkEiLCAidmFyaWFibGUgJ3NlY29uZEhpZXJhcmNoeVRlc3QnIHNob3VsZCBoYXZlIGRpc3BsYXlU
eXBlTmFtZSAnQSciKTsKKworCisvLyB0eXBlcyBmb3IgdmFyaWFibGUgJ3NlY29uZEInIGF0IGlu
c3RydWN0aW9uICd2YXIgc2Vjb25kQiA9IE9iamVjdC5jcmVhdGUodGhlQiknCit0eXBlcyA9IEpT
T04ucGFyc2UodHlwZUpTT05TdHJpbmdGb3JFeHByZXNzaW9uQXRPZmZzZXQob3V0ZXIsICJzZWNv
bmRCIiwgREVTQ1JJUFRPUl9OT1JNQUwpKTsKK2Fzc2VydCh0eXBlcy5nbG9iYWxUeXBlU2V0LmRp
c3BsYXlUeXBlTmFtZSA9PT0gIkIiLCAidmFyaWFibGUgJ3NlY29uZEInIHNob3VsZCBoYXZlIGRp
c3BsYXlUeXBlTmFtZSAnQiciKTsKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3Rz
L3Byb2ZpbGVyL3R5cGUtcHJvZmlsZXItcmV0dXJuLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90ZXN0cy9wcm9maWxlci90eXBlLXByb2ZpbGVyLXJldHVybi5qcwkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9wcm9maWxlci90eXBlLXBy
b2ZpbGVyLXJldHVybi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY4IEBACitmdW5jdGlv
biBmb28oeCkgeyByZXR1cm4geDsgfQorZnVuY3Rpb24gQ3RvcigpIHsgCisgICAgaWYgKCEodGhp
cyBpbnN0YW5jZW9mIEN0b3IpKQorICAgICAgICByZXR1cm4gIk5vdCBjYWxsZWQgd2l0aCBgbmV3
YCI7IAorfQorCisvLyA9PT09PT0gRW5kIHRlc3QgY2FzZXMgPT09PT09CisKKy8vIGFyZ3MgZm9y
IHR5cGVKU09OU3RyaW5nRm9yRXhwcmVzc2lvbkF0T2Zmc2V0ID0+IGZ1bmN0aW9uLCBzdWJzdHJp
bmcsIHNlYXJjaCBkZXNjcmlwdG9yCisvLyBzdWJzdHJpbmdzIG11c3QgYmUgdW5pcXVlIHdpdGhp
biB0aGUgZ2l2ZW4gZnVuY3Rpb24gYXJndW1lbnQuCisKK3ZhciBERVNDUklQVE9SX05PUk1BTCA9
IDE7Cit2YXIgREVTQ1JJUFRPUl9SRVRVUk4gPSAyOworCisvLyBUeXBlcyBtYXRjaGluZyB0aG9z
ZSBpbiBydW50aW1lL1R5cGVTZXQKK3ZhciBUID0geworICAgIEJvb2xlYW46IkJvb2xlYW4iLAor
ICAgIEludGVnZXI6ICJJbnRlZ2VyIiwKKyAgICBOdWxsOiAiTnVsbCIsCisgICAgTnVtYmVyOiAi
TnVtYmVyIiwKKyAgICBNYW55OiAiKG1hbnkpIiwKKyAgICBTdHJpbmc6ICJTdHJpbmciLAorICAg
IFVuZGVmaW5lZDogIlVuZGVmaW5lZCIsCisgICAgVW5kZWZpbmVkT3JOdWxsOiAiKD8pIgorfTsK
KworLy8gT3B0aW9uYWwgdHlwZXMgbWF0Y2hpbmcgdGhvc2UgaW4gcnVudGltZS9UeXBlU2V0Cit2
YXIgVE9wdGlvbmFsID0geworICAgIEJvb2xlYW46IkJvb2xlYW4/IiwKKyAgICBJbnRlZ2VyOiAi
SW50ZWdlcj8iLAorICAgIE51bWJlcjogIk51bWJlcj8iLAorICAgIFN0cmluZzogIlN0cmluZz8i
Cit9OworCitmdW5jdGlvbiBhc3NlcnQoY29uZGl0aW9uLCByZWFzb24pIHsKKyAgICBpZiAoIWNv
bmRpdGlvbikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKHJlYXNvbik7Cit9CisKKworZm9vKDIw
KTsKKy8vIFJldHVybiB0eXBlIGZvciBmdW5jdGlvbiBmb28KK3ZhciB0eXBlcyA9IEpTT04ucGFy
c2UodHlwZUpTT05TdHJpbmdGb3JFeHByZXNzaW9uQXRPZmZzZXQoZm9vLCAieyIsIERFU0NSSVBU
T1JfUkVUVVJOKSk7ICAvLyBOb3RlIHRoYXQgcmV0dXJuIHN0YXRlbWVudHMgbXVzdCBiZSBvbiBv
cGVuaW5nIGJyYWNlLgorYXNzZXJ0KHR5cGVzLmdsb2JhbFR5cGVTZXQuZGlzcGxheVR5cGVOYW1l
ID09PSBULkludGVnZXIsICJGdW5jdGlvbiAnZm9vJyBzaG91bGQgcmV0dXJuICdJbnRlZ2VyJyIp
OworCitmb28oMjAuNSk7CisvLyBSZXR1cm4gdHlwZSBmb3IgZnVuY3Rpb24gZm9vCit0eXBlcyA9
IEpTT04ucGFyc2UodHlwZUpTT05TdHJpbmdGb3JFeHByZXNzaW9uQXRPZmZzZXQoZm9vLCAieyIs
IERFU0NSSVBUT1JfUkVUVVJOKSk7ICAvLyBOb3RlIHRoYXQgcmV0dXJuIHN0YXRlbWVudHMgbXVz
dCBiZSBvbiBvcGVuaW5nIGJyYWNlLgorYXNzZXJ0KHR5cGVzLmdsb2JhbFR5cGVTZXQuZGlzcGxh
eVR5cGVOYW1lID09PSBULk51bWJlciwgIkZ1bmN0aW9uICdmb28nIHNob3VsZCByZXR1cm4gJ051
bWJlcicgYWZ0ZXIgYmVpbmcgY2FsbGVkIHR3aWNlIik7CisKK2ZvbygiaGVsbG8iKTsKKy8vIFJl
dHVybiB0eXBlIGZvciBmdW5jdGlvbiBmb28KK3R5cGVzID0gSlNPTi5wYXJzZSh0eXBlSlNPTlN0
cmluZ0ZvckV4cHJlc3Npb25BdE9mZnNldChmb28sICJ7IiwgREVTQ1JJUFRPUl9SRVRVUk4pKTsg
IC8vIE5vdGUgdGhhdCByZXR1cm4gc3RhdGVtZW50cyBtdXN0IGJlIG9uIG9wZW5pbmcgYnJhY2Uu
Cithc3NlcnQodHlwZXMuZ2xvYmFsVHlwZVNldC5kaXNwbGF5VHlwZU5hbWUgPT09IFQuTWFueSwg
IkZ1bmN0aW9uICdmb28nIHNob3VsZCByZXR1cm4gJyhtYW55KScgYWZ0ZXIgYmVpbmcgY2FsbGVk
IHRocmVlIHRpbWVzIik7Cithc3NlcnQodHlwZXMuZ2xvYmFsVHlwZVNldC5wcmltaXRpdmVUeXBl
TmFtZXMuaW5kZXhPZihULlN0cmluZykgIT09IC0xLCAiRnVuY3Rpb24gJ2Zvbycgc2hvdWxkIGhh
dmUgcmV0dXJuZWQgJ1N0cmluZycgYXQgc29tZSBwb2ludCIpOworYXNzZXJ0KHR5cGVzLmdsb2Jh
bFR5cGVTZXQucHJpbWl0aXZlVHlwZU5hbWVzLmluZGV4T2YoVC5JbnRlZ2VyKSAhPT0gLTEsICJG
dW5jdGlvbiAnZm9vJyBzaG91bGQgaGF2ZSByZXR1cm5lZCAnSW50ZWdlcicgYXQgc29tZSBwb2lu
dCIpOworYXNzZXJ0KHR5cGVzLmdsb2JhbFR5cGVTZXQucHJpbWl0aXZlVHlwZU5hbWVzLmluZGV4
T2YoVC5OdW1iZXIpICE9PSAtMSwgIkZ1bmN0aW9uICdmb28nIHNob3VsZCBoYXZlIHJldHVybmVk
ICdOdW1iZXInIGF0IHNvbWUgcG9pbnQiKTsKKworbmV3IEN0b3I7Cit0eXBlcyA9IEpTT04ucGFy
c2UodHlwZUpTT05TdHJpbmdGb3JFeHByZXNzaW9uQXRPZmZzZXQoQ3RvciwgInsiLCBERVNDUklQ
VE9SX1JFVFVSTikpOyAgLy8gTm90ZSB0aGF0IHJldHVybiBzdGF0ZW1lbnRzIG11c3QgYmUgb24g
b3BlbmluZyBicmFjZS4KK2Fzc2VydCh0eXBlcy5nbG9iYWxUeXBlU2V0LmRpc3BsYXlUeXBlTmFt
ZSA9PT0gIkN0b3IiLCAiRnVuY3Rpb24gJ0N0b3InIHNob3VsZCByZXR1cm4gJ0N0b3InIik7Cith
c3NlcnQodHlwZXMuZ2xvYmFsVHlwZVNldC5zdHJ1Y3R1cmVzLmxlbmd0aCA9PT0gMSwgIkZ1bmN0
aW9uICdDdG9yJyBzaG91bGQgaGF2ZSBzZWVuIG9uZSBzdHJ1Y3R1cmUiKTsKKworQ3RvcigpOwor
dHlwZXMgPSBKU09OLnBhcnNlKHR5cGVKU09OU3RyaW5nRm9yRXhwcmVzc2lvbkF0T2Zmc2V0KEN0
b3IsICJ7IiwgREVTQ1JJUFRPUl9SRVRVUk4pKTsgIC8vIE5vdGUgdGhhdCByZXR1cm4gc3RhdGVt
ZW50cyBtdXN0IGJlIG9uIG9wZW5pbmcgYnJhY2UuCithc3NlcnQodHlwZXMuZ2xvYmFsVHlwZVNl
dC5kaXNwbGF5VHlwZU5hbWUgPT09ICJPYmplY3QiLCAiRnVuY3Rpb24gJ0N0b3InIHNob3VsZCBy
ZXR1cm4gT2JqZWN0Iik7Cithc3NlcnQodHlwZXMuZ2xvYmFsVHlwZVNldC5wcmltaXRpdmVUeXBl
TmFtZXMuaW5kZXhPZihULlN0cmluZykgIT09IC0xLCAiRnVuY3Rpb24gJ0N0b3InIHNob3VsZCBy
ZXR1cm4gU3RyaW5nIik7CisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237121</attachid>
            <date>2014-08-25 17:34:51 -0700</date>
            <delta_ts>2014-09-02 18:18:21 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>26468</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAxNzI4NTkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQAogI2lu
Y2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVSYXJlRGF0YUlu
bGluZXMuaCIKICNpbmNsdWRlICJUZXN0UnVubmVyVXRpbHMuaCIKKyNpbmNsdWRlICJUeXBlUHJv
ZmlsZXJMb2cuaCIKICNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNs
dWRlIDxzdGRsaWIuaD4KQEAgLTQ3Niw3ICs0NzcsMTAgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuYwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25JZGVudGl0eShFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uTWFrZU1hc3F1ZXJhZGVyKEV4ZWNTdGF0ZSopOwogc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25IYXNDdXN0b21Qcm9wZXJ0aWVzKEV4
ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25E
dW1wVHlwZXNGb3JBbGxWYXJpYWJsZXMgKEV4ZWNTdGF0ZSopOworc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25EdW1wVHlwZXNGb3JBbGxWYXJpYWJsZXMoRXhlY1N0
YXRlKik7CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkZpbmRU
eXBlRm9yRXhwcmVzc2lvbihFeGVjU3RhdGUqKTsKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uUmV0dXJuVHlwZUZvcihFeGVjU3RhdGUqKTsKKwogCiAjaWYgRU5B
QkxFKFNBTVBMSU5HX0ZMQUdTKQogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25TZXRTYW1wbGluZ0ZsYWdzKEV4ZWNTdGF0ZSopOwpAQCAtNjI3LDcgKzYzMSwxMCBA
QCBwcm90ZWN0ZWQ6CiAKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJjcmVhdGVJbXB1cmVHZXR0
ZXIiLCBmdW5jdGlvbkNyZWF0ZUltcHVyZUdldHRlciwgMSk7CiAgICAgICAgIGFkZEZ1bmN0aW9u
KHZtLCAic2V0SW1wdXJlR2V0dGVyRGVsZWdhdGUiLCBmdW5jdGlvblNldEltcHVyZUdldHRlckRl
bGVnYXRlLCAyKTsKLSAgICAgICAgYWRkRnVuY3Rpb24odm0sICJkdW1wVHlwZXNGb3JBbGxWYXJp
YWJsZXMiLCBmdW5jdGlvbkR1bXBUeXBlc0ZvckFsbFZhcmlhYmxlcyAsIDQpOworCisgICAgICAg
IGFkZEZ1bmN0aW9uKHZtLCAiZHVtcFR5cGVzRm9yQWxsVmFyaWFibGVzIiwgZnVuY3Rpb25EdW1w
VHlwZXNGb3JBbGxWYXJpYWJsZXMgLCAwKTsKKyAgICAgICAgYWRkRnVuY3Rpb24odm0sICJmaW5k
VHlwZUZvckV4cHJlc3Npb24iLCBmdW5jdGlvbkZpbmRUeXBlRm9yRXhwcmVzc2lvbiwgMik7Cisg
ICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAicmV0dXJuVHlwZUZvciIsIGZ1bmN0aW9uUmV0dXJuVHlw
ZUZvciwgMSk7CiAgICAgICAgIAogICAgICAgICBKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVt
cHR5QXJyYXkoZ2xvYmFsRXhlYygpLCAwKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBhcmd1bWVudHMuc2l6ZSgpOyArK2kpCkBAIC0xMDY1LDYgKzEwNzIsMzkgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkR1bQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25GaW5kVHlwZUZvckV4cHJlc3Npb24oRXhlY1N0YXRlKiBleGVjKQoreworICAgIC8vIEFQ
SSB0byB0aGlzIGZ1bmN0aW9uOiB0eXBlSlNPTlN0cmluZ0ZvckV4cHJlc3Npb25BdE9mZnNldChm
dW5jLCBzdWJzdHJpbmcgY29udGFpbmVkIGluIGZ1bmN0aW9uKTsKKyAgICBBU1NFUlQoZXhlYy0+
dm0oKS50eXBlUHJvZmlsZXIoKSk7CisgICAgZXhlYy0+dm0oKS50eXBlUHJvZmlsZXJMb2coKS0+
cHJvY2Vzc0xvZ0VudHJpZXMoQVNDSUlMaXRlcmFsKCJqc2MgVGVzdGluZyBBUEk6IGZ1bmN0aW9u
RmluZFR5cGVGb3JFeHByZXNzaW9uIikpOworCisgICAgSlNWYWx1ZSBmdW5jdGlvblZhbHVlID0g
ZXhlYy0+YXJndW1lbnQoMCk7CisgICAgQVNTRVJUKGZ1bmN0aW9uVmFsdWUuaXNGdW5jdGlvbigp
KTsKKyAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSAoanNEeW5hbWljQ2FzdDxK
U0Z1bmN0aW9uKj4oZnVuY3Rpb25WYWx1ZS5hc0NlbGwoKS0+Z2V0T2JqZWN0KCkpKS0+anNFeGVj
dXRhYmxlKCk7CisKKyAgICBBU1NFUlQoZXhlYy0+YXJndW1lbnQoMSkuaXNTdHJpbmcoKSk7Cisg
ICAgU3RyaW5nIHN1YnN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50KDEpLmdldFN0cmluZyhleGVjKTsK
KyAgICBTdHJpbmcgc291cmNlQ29kZVRleHQgPSBleGVjdXRhYmxlLT5zb3VyY2UoKS50b1N0cmlu
ZygpOworICAgIHVuc2lnbmVkIG9mZnNldCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzb3VyY2VD
b2RlVGV4dC5maW5kKHN1YnN0cmluZykgKyBleGVjdXRhYmxlLT5zb3VyY2UoKS5zdGFydE9mZnNl
dCgpKTsKKyAgICAKKyAgICBTdHJpbmcganNvblN0cmluZyA9IGV4ZWMtPnZtKCkudHlwZVByb2Zp
bGVyKCktPnR5cGVJbmZvcm1hdGlvbkpTT05Gb3JFeHByZXNzaW9uQXRPZmZzZXQoVHlwZVByb2Zp
bGVyU2VhcmNoRGVzY3JpcHRvck5vcm1hbCwgb2Zmc2V0LCBleGVjdXRhYmxlLT5zb3VyY2VJRCgp
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIGpzb25TdHJpbmcp
KTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJldHVyblR5cGVG
b3IoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEFTU0VSVChleGVjLT52bSgpLnR5cGVQcm9maWxl
cigpKTsKKyAgICBleGVjLT52bSgpLnR5cGVQcm9maWxlckxvZygpLT5wcm9jZXNzTG9nRW50cmll
cyhBU0NJSUxpdGVyYWwoImpzYyBUZXN0aW5nIEFQSTogZnVuY3Rpb25GaW5kVHlwZUZvckV4cHJl
c3Npb24iKSk7CisKKyAgICBKU1ZhbHVlIGZ1bmN0aW9uVmFsdWUgPSBleGVjLT5hcmd1bWVudCgw
KTsKKyAgICBBU1NFUlQoZnVuY3Rpb25WYWx1ZS5pc0Z1bmN0aW9uKCkpOworICAgIEZ1bmN0aW9u
RXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IChqc0R5bmFtaWNDYXN0PEpTRnVuY3Rpb24qPihmdW5j
dGlvblZhbHVlLmFzQ2VsbCgpLT5nZXRPYmplY3QoKSkpLT5qc0V4ZWN1dGFibGUoKTsKKworICAg
IHVuc2lnbmVkIG9mZnNldCA9IGV4ZWN1dGFibGUtPnNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCk7Cisg
ICAgU3RyaW5nIGpzb25TdHJpbmcgPSBleGVjLT52bSgpLnR5cGVQcm9maWxlcigpLT50eXBlSW5m
b3JtYXRpb25KU09ORm9yRXhwcmVzc2lvbkF0T2Zmc2V0KFR5cGVQcm9maWxlclNlYXJjaERlc2Ny
aXB0b3JGdW5jdGlvblJldHVybiwgb2Zmc2V0LCBleGVjdXRhYmxlLT5zb3VyY2VJRCgpKTsKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIGpzb25TdHJpbmcpKTsKK30K
KwogLy8gVXNlIFNFSCBmb3IgUmVsZWFzZSBidWlsZHMgb25seSB0byBnZXQgcmlkIG9mIHRoZSBj
cmFzaCByZXBvcnQgZGlhbG9nCiAvLyAobHVja2lseSB0aGUgc2FtZSB0ZXN0cyBmYWlsIGluIFJl
bGVhc2UgYW5kIERlYnVnIGJ1aWxkcyBzbyBmYXIpLiBOZWVkIHRvCiAvLyBiZSBpbiBhIHNlcGFy
YXRlIG1haW4gZnVuY3Rpb24gYmVjYXVzZSB0aGUganNjbWFpbiBmdW5jdGlvbiByZXF1aXJlcyBv
YmplY3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2Zp
bGVyLmNwcAkocmV2aXNpb24gMTcyODU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVHlwZVByb2ZpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsMTUgKzgyLDI3IEBAIHZv
aWQgVHlwZVByb2ZpbGVyOjpnZXRUeXBlc0ZvclZhcmlhYmxlQXQKICAgICBkZXNjcmlwdGlvbi0+
c2V0TG9jYWxTdHJ1Y3R1cmVzKGxvY2F0aW9uLT5tX2luc3RydWN0aW9uVHlwZVNldC0+YWxsU3Ry
dWN0dXJlUmVwcmVzZW50YXRpb25zKCkpOwogfQogCi1zdGF0aWMgYm9vbCBkZXNjcmlwdG9yTWF0
Y2hlc1R5cGVMb2NhdGlvbihUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yIGRlc2NyaXB0b3Is
IFR5cGVMb2NhdGlvbiogbG9jYXRpb24pCitTdHJpbmcgVHlwZVByb2ZpbGVyOjp0eXBlSW5mb3Jt
YXRpb25KU09ORm9yRXhwcmVzc2lvbkF0T2Zmc2V0KFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0
b3IgZGVzY3JpcHRvciwgdW5zaWduZWQgb2Zmc2V0LCBpbnRwdHJfdCBzb3VyY2VJRCkKIHsKLSAg
ICBpZiAoZGVzY3JpcHRvciA9PSBUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yRnVuY3Rpb25S
ZXR1cm4gJiYgbG9jYXRpb24tPm1fZ2xvYmFsVmFyaWFibGVJRCA9PSBUeXBlUHJvZmlsZXJSZXR1
cm5TdGF0ZW1lbnQpICAKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgVHlwZUxvY2F0aW9uKiBs
b2NhdGlvbiA9IGZpbmRMb2NhdGlvbihvZmZzZXQsIHNvdXJjZUlELCBkZXNjcmlwdG9yKTsKKyAg
ICBBU1NFUlQobG9jYXRpb24pOwogCi0gICAgaWYgKGRlc2NyaXB0b3IgPT0gVHlwZVByb2ZpbGVy
U2VhcmNoRGVzY3JpcHRvck5vcm1hbCAmJiBsb2NhdGlvbi0+bV9nbG9iYWxWYXJpYWJsZUlEICE9
IFR5cGVQcm9maWxlclJldHVyblN0YXRlbWVudCkgIAotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBTdHJpbmdCdWlsZGVyIGpzb247ICAKIAotICAgIHJldHVybiBmYWxzZTsKKyAgICBqc29uLmFw
cGVuZCgieyIpOworCisgICAgaWYgKGxvY2F0aW9uLT5tX2dsb2JhbFR5cGVTZXQgJiYgbG9jYXRp
b24tPm1fZ2xvYmFsVmFyaWFibGVJRCAhPSBUeXBlUHJvZmlsZXJOb0dsb2JhbElERXhpc3RzKSB7
CisgICAgICAgIGpzb24uYXBwZW5kKCJcImdsb2JhbFR5cGVTZXRcIjoiKTsKKyAgICAgICAganNv
bi5hcHBlbmQobG9jYXRpb24tPm1fZ2xvYmFsVHlwZVNldC0+dG9KU09OU3RyaW5nKCkpOworICAg
ICAgICBqc29uLmFwcGVuZCgiLCIpOworICAgIH0KKworICAgIGpzb24uYXBwZW5kKCJcImluc3Ry
dWN0aW9uVHlwZVNldFwiOiIpOworICAgIGpzb24uYXBwZW5kKGxvY2F0aW9uLT5tX2luc3RydWN0
aW9uVHlwZVNldC0+dG9KU09OU3RyaW5nKCkpOworCisgICAganNvbi5hcHBlbmQoIn0iKTsKKyAg
ICAKKyAgICByZXR1cm4ganNvbi50b1N0cmluZygpOwogfQogCiBUeXBlTG9jYXRpb24qIFR5cGVQ
cm9maWxlcjo6ZmluZExvY2F0aW9uKHVuc2lnbmVkIGRpdm90LCBpbnRwdHJfdCBzb3VyY2VJRCwg
VHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvciBkZXNjcmlwdG9yKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyLmgJKHJldmlzaW9uIDE3Mjg1OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC05Niw2ICs5Niw3IEBAIGNsYXNzIFR5cGVQcm9maWxlciB7CiBwdWJsaWM6CiAg
ICAgdm9pZCBsb2dUeXBlc0ZvclR5cGVMb2NhdGlvbihUeXBlTG9jYXRpb24qKTsKICAgICB2b2lk
IGdldFR5cGVzRm9yVmFyaWFibGVBdE9mZnNldEZvckluc3BlY3RvcihUeXBlUHJvZmlsZXJTZWFy
Y2hEZXNjcmlwdG9yLCB1bnNpZ25lZCBkaXZvdCwgaW50cHRyX3Qgc291cmNlSUQsIFJlZlB0cjxJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpUeXBlRGVzY3JpcHRpb24+Jik7CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIHR5cGVJbmZvcm1hdGlvbkpTT05Gb3JFeHByZXNzaW9u
QXRPZmZzZXQoVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvciwgdW5zaWduZWQgb2Zmc2V0LCBp
bnRwdHJfdCBzb3VyY2VJRCk7CiAgICAgdm9pZCBpbnNlcnROZXdMb2NhdGlvbihUeXBlTG9jYXRp
b24qKTsKICAgICBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUqIGZ1bmN0aW9uSGFzRXhlY3V0ZWRD
YWNoZSgpIHsgcmV0dXJuICZtX2Z1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZTsgfQogICAgIFR5cGVM
b2NhdGlvbkNhY2hlKiB0eXBlTG9jYXRpb25DYWNoZSgpIHsgcmV0dXJuICZtX3R5cGVMb2NhdGlv
bkNhY2hlOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmls
ZXJMb2cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBl
UHJvZmlsZXJMb2cuaAkocmV2aXNpb24gMTcyODU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcg
QEAgcHVibGljOgogICAgICAgICAgICAgcHJvY2Vzc0xvZ0VudHJpZXMoQVNDSUlMaXRlcmFsKCJM
b2cgRnVsbCIpKTsKICAgICB9CiAKLSAgICB2b2lkIHByb2Nlc3NMb2dFbnRyaWVzKFN0cmluZyk7
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcm9jZXNzTG9nRW50cmllcyhTdHJpbmcpOwog
ICAgIExvZ0VudHJ5KiBsb2dFbmRQdHIoKSBjb25zdCB7IHJldHVybiBtX2xvZ0VuZFB0cjsgfQog
CiAgICAgc3RhdGljIHB0cmRpZmZfdCBsb2dTdGFydE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihUeXBlUHJvZmlsZXJMb2csIG1fbG9nU3RhcnRQdHIpOyB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmNwcAkocmV2aXNpb24gMTcyODU5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI0Nyw2ICsyNTEsNzggQEAgU3RyaW5nIFR5cGVTZXQ6OmxlYXN0Q29tbW9uQW5jZXN0b3Io
KSBjbwogICAgIHJldHVybiBTdHJ1Y3R1cmVTaGFwZTo6bGVhc3RDb21tb25BbmNlc3RvcihtX3N0
cnVjdHVyZUhpc3RvcnkpOwogfQogCitTdHJpbmcgVHlwZVNldDo6dG9KU09OU3RyaW5nKCkgY29u
c3QKK3sKKyAgICAvLyBUaGlzIHJldHVybnMgYSBKU09OIHN0cmluZyByZXByZXNlbnRpbmcgYW4g
T2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgorICAgIC8vICAgICBkaXNwbGF5
VHlwZU5hbWU6IGBTdHJpbmdgCisgICAgLy8gICAgIHByaW1pdGl2ZVR5cGVOYW1lczogYEFycmF5
PFN0cmluZz5gCisgICAgLy8gICAgIHN0cnVjdHVyZXM6IGBBcnJheTxKU09OPFN0cnVjdHVyZVNo
YXBlPj5gCisKKyAgICBTdHJpbmdCdWlsZGVyIGpzb247CisgICAganNvbi5hcHBlbmQoInsiKTsK
KworICAgIGpzb24uYXBwZW5kKCJcImRpc3BsYXlUeXBlTmFtZVwiOiIpOworICAgIGpzb24uYXBw
ZW5kKCJcIiIpOworICAgIGpzb24uYXBwZW5kKGRpc3BsYXlOYW1lKCkpOworICAgIGpzb24uYXBw
ZW5kKCJcIiIpOworICAgIGpzb24uYXBwZW5kKCIsIik7CisKKyAgICBqc29uLmFwcGVuZCgiXCJw
cmltaXRpdmVUeXBlTmFtZXNcIjoiKTsKKyAgICBqc29uLmFwcGVuZCgiWyIpOworICAgIGJvb2wg
aGFzQW5JdGVtID0gZmFsc2U7CisgICAgaWYgKG1fc2VlblR5cGVzICYgVHlwZVVuZGVmaW5lZCkg
eworICAgICAgICBoYXNBbkl0ZW0gPSB0cnVlOworICAgICAgICBqc29uLmFwcGVuZCgiXCJVbmRl
ZmluZWRcIiIpOworICAgIH0KKyAgICBpZiAobV9zZWVuVHlwZXMgJiBUeXBlTnVsbCkgeworICAg
ICAgICBpZiAoaGFzQW5JdGVtKQorICAgICAgICAgICAganNvbi5hcHBlbmQoIiwiKTsKKyAgICAg
ICAgaGFzQW5JdGVtID0gdHJ1ZTsKKyAgICAgICAganNvbi5hcHBlbmQoIlwiTnVsbFwiIik7Cisg
ICAgfQorICAgIGlmIChtX3NlZW5UeXBlcyAmIFR5cGVCb29sZWFuKSB7CisgICAgICAgIGlmICho
YXNBbkl0ZW0pCisgICAgICAgICAgICBqc29uLmFwcGVuZCgiLCIpOworICAgICAgICBoYXNBbkl0
ZW0gPSB0cnVlOworICAgICAgICBqc29uLmFwcGVuZCgiXCJCb29sZWFuXCIiKTsKKyAgICB9Cisg
ICAgaWYgKG1fc2VlblR5cGVzICYgVHlwZU1hY2hpbmVJbnQpIHsKKyAgICAgICAgaWYgKGhhc0Fu
SXRlbSkKKyAgICAgICAgICAgIGpzb24uYXBwZW5kKCIsIik7CisgICAgICAgIGhhc0FuSXRlbSA9
IHRydWU7CisgICAgICAgIGpzb24uYXBwZW5kKCJcIkludGVnZXJcIiIpOworICAgIH0KKyAgICBp
ZiAobV9zZWVuVHlwZXMgJiBUeXBlTnVtYmVyKSB7CisgICAgICAgIGlmIChoYXNBbkl0ZW0pCisg
ICAgICAgICAgICBqc29uLmFwcGVuZCgiLCIpOworICAgICAgICBoYXNBbkl0ZW0gPSB0cnVlOwor
ICAgICAgICBqc29uLmFwcGVuZCgiXCJOdW1iZXJcIiIpOworICAgIH0KKyAgICBpZiAobV9zZWVu
VHlwZXMgJiBUeXBlU3RyaW5nKSB7CisgICAgICAgIGlmIChoYXNBbkl0ZW0pCisgICAgICAgICAg
ICBqc29uLmFwcGVuZCgiLCIpOworICAgICAgICBoYXNBbkl0ZW0gPSB0cnVlOworICAgICAgICBq
c29uLmFwcGVuZCgiXCJTdHJpbmdcIiIpOworICAgIH0KKyAgICBqc29uLmFwcGVuZCgiXSIpOwor
CisgICAganNvbi5hcHBlbmQoIiwiKTsKKworICAgIGpzb24uYXBwZW5kKCJcInN0cnVjdHVyZXNc
IjoiKTsKKyAgICBqc29uLmFwcGVuZCgiWyIpOworICAgIGhhc0FuSXRlbSA9IGZhbHNlOworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zdHJ1Y3R1cmVIaXN0b3J5LnNpemUoKTsgaSsrKSB7
CisgICAgICAgIGlmIChoYXNBbkl0ZW0pCisgICAgICAgICAgICBqc29uLmFwcGVuZCgiLCIpOwor
ICAgICAgICBoYXNBbkl0ZW0gPSB0cnVlOworICAgICAgICBqc29uLmFwcGVuZChtX3N0cnVjdHVy
ZUhpc3RvcnlbaV0tPnRvSlNPTlN0cmluZygpKTsKKyAgICB9CisgICAganNvbi5hcHBlbmQoIl0i
KTsKKworICAgIGpzb24uYXBwZW5kKCJ9Iik7CisgICAgcmV0dXJuIGpzb24udG9TdHJpbmcoKTsK
K30KKwogdm9pZCBUeXBlU2V0OjpkdW1wU2VlblR5cGVzKCkKIHsKICAgICBkYXRhTG9nKHNlZW5U
eXBlcygpLCAiXG4iKTsKQEAgLTM2MCw2ICs0MzYsNDkgQEAgU3RyaW5nIFN0cnVjdHVyZVNoYXBl
OjpzdHJpbmdSZXByZXNlbnRhdAogICAgIHJldHVybiByZXByZXNlbnRhdGlvbi50b1N0cmluZygp
OwogfQogCitTdHJpbmcgU3RydWN0dXJlU2hhcGU6OnRvSlNPTlN0cmluZygpIGNvbnN0Cit7Cisg
ICAgLy8gVGhpcyByZXR1cm5zIGEgSlNPTiBzdHJpbmcgcmVwcmVzZW50aW5nIGFuIE9iamVjdCB3
aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczoKKyAgICAvLyAgICAgY29uc3RydWN0b3JOYW1l
OiBgU3RyaW5nYAorICAgIC8vICAgICBmaWVsZHM6IGBBcnJheTxTdHJpbmc+YAorICAgIC8vICAg
ICBwcm90bzogYEpTT048U3RydWN0dXJlU2hhcGU+IHwgbnVsbGAKKworICAgIFN0cmluZ0J1aWxk
ZXIganNvbjsKKyAgICBqc29uLmFwcGVuZCgieyIpOworCisgICAganNvbi5hcHBlbmQoIlwiY29u
c3RydWN0b3JOYW1lXCI6Iik7CisgICAganNvbi5hcHBlbmQoIlwiIik7CisgICAganNvbi5hcHBl
bmQobV9jb25zdHJ1Y3Rvck5hbWUpOworICAgIGpzb24uYXBwZW5kKCJcIiIpOworICAgIGpzb24u
YXBwZW5kKCIsIik7CisKKyAgICBqc29uLmFwcGVuZCgiXCJmaWVsZHNcIjoiKTsKKyAgICBqc29u
LmFwcGVuZCgiWyIpOworICAgIGJvb2wgaGFzQW5JdGVtID0gZmFsc2U7CisgICAgZm9yIChhdXRv
IGl0ID0gbV9maWVsZHMuYmVnaW4oKSwgZW5kID0gbV9maWVsZHMuZW5kKCk7IGl0ICE9IGVuZDsg
KytpdCkgeworICAgICAgICBpZiAoaGFzQW5JdGVtKQorICAgICAgICAgICAganNvbi5hcHBlbmQo
IiwiKTsKKyAgICAgICAgaGFzQW5JdGVtID0gdHJ1ZTsKKworICAgICAgICBTdHJpbmcgZmllbGRO
YW1lKCgqaXQpLmdldCgpKTsKKyAgICAgICAganNvbi5hcHBlbmQoIlwiIik7CisgICAgICAgIGpz
b24uYXBwZW5kKGZpZWxkTmFtZSk7CisgICAgICAgIGpzb24uYXBwZW5kKCJcIiIpOworICAgIH0K
KyAgICBqc29uLmFwcGVuZCgiXSIpOworICAgIGpzb24uYXBwZW5kKCIsIik7CisKKyAgICBqc29u
LmFwcGVuZCgiXCJwcm90b1wiOiIpOworICAgIGlmIChtX3Byb3RvKQorICAgICAgICBqc29uLmFw
cGVuZChtX3Byb3RvLT50b0pTT05TdHJpbmcoKSk7CisgICAgZWxzZQorICAgICAgICBqc29uLmFw
cGVuZCgibnVsbCIpOworCisgICAganNvbi5hcHBlbmQoIn0iKTsKKworICAgIHJldHVybiBqc29u
LnRvU3RyaW5nKCk7Cit9CisKIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVu
dGltZTo6U3RydWN0dXJlRGVzY3JpcHRpb24+IFN0cnVjdHVyZVNoYXBlOjppbnNwZWN0b3JSZXBy
ZXNlbnRhdGlvbigpCiB7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRp
bWU6OlN0cnVjdHVyZURlc2NyaXB0aW9uPiBiYXNlID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
UnVudGltZTo6U3RydWN0dXJlRGVzY3JpcHRpb246OmNyZWF0ZSgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuaAkocmV2aXNpb24gMTcyODU5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2
ICs3MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIG1hcmtBc0ZpbmFsKCk7CiAgICAgdm9pZCBhZGRQ
cm9wZXJ0eShSZWZQdHI8U3RyaW5nSW1wbD4pOwogICAgIFN0cmluZyBzdHJpbmdSZXByZXNlbnRh
dGlvbigpOworICAgIFN0cmluZyB0b0pTT05TdHJpbmcoKSBjb25zdDsKICAgICBQYXNzUmVmUHRy
PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlN0cnVjdHVyZURlc2NyaXB0aW9uPiBp
bnNwZWN0b3JSZXByZXNlbnRhdGlvbigpOwogICAgIHZvaWQgc2V0Q29uc3RydWN0b3JOYW1lKFN0
cmluZyBuYW1lKSB7IG1fY29uc3RydWN0b3JOYW1lID0gKG5hbWUuaXNFbXB0eSgpID8gIk9iamVj
dCIgOiBuYW1lKTsgfQogICAgIFN0cmluZyBjb25zdHJ1Y3Rvck5hbWUoKSB7IHJldHVybiBtX2Nv
bnN0cnVjdG9yTmFtZTsgfQpAQCAtOTIsMTAgKzkzLDExIEBAIHB1YmxpYzoKICAgICBUeXBlU2V0
KCk7CiAgICAgdm9pZCBhZGRUeXBlSW5mb3JtYXRpb24oUnVudGltZVR5cGUsIFBhc3NSZWZQdHI8
U3RydWN0dXJlU2hhcGU+LCBTdHJ1Y3R1cmVJRCk7CiAgICAgc3RhdGljIFJ1bnRpbWVUeXBlIGdl
dFJ1bnRpbWVUeXBlRm9yVmFsdWUoSlNWYWx1ZSk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3Ry
aW5nIHNlZW5UeXBlcygpIGNvbnN0OwogICAgIFN0cmluZyBkaXNwbGF5TmFtZSgpIGNvbnN0Owog
ICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4gYWxs
UHJpbWl0aXZlVHlwZU5hbWVzKCkgY29uc3Q7CiAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpTdHJ1Y3R1
cmVEZXNjcmlwdGlvbj4+IGFsbFN0cnVjdHVyZVJlcHJlc2VudGF0aW9ucygpIGNvbnN0OworICAg
IFN0cmluZyB0b0pTT05TdHJpbmcoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBTdHJpbmcgbGVh
c3RDb21tb25BbmNlc3RvcigpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL3Byb2ZpbGVyL3R5cGUtcHJvZmlsZXItYmFzaWMuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3Byb2ZpbGVyL3R5cGUtcHJvZmlsZXItYmFzaWMuanMJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvcHJvZmlsZXIvdHlwZS1w
cm9maWxlci1iYXNpYy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACitsb2FkKCIu
L2RyaXZlci9kcml2ZXIuanMiKTsKKworZnVuY3Rpb24gd3JhcHBlcigpIHsKKworZnVuY3Rpb24g
Zm9vKGJhcil7fQorZm9vKDIwKTsKK2ZvbygyMC41KTsKKwordmFyIHRlc3QgPSB7eDoyMCwgeTo1
MH07Cit0ZXN0ID0gImhlbGxvIjsKKworfQord3JhcHBlcigpOworCisvLyA9PT09PT0gRW5kIHRl
c3QgY2FzZXMgPT09PT09CisKKy8vIGFyZ3MgZm9yIHR5cGVKU09OU3RyaW5nRm9yRXhwcmVzc2lv
bkF0T2Zmc2V0ID0+IGZ1bmN0aW9uLCBzdWJzdHJpbmcsIHNlYXJjaCBkZXNjcmlwdG9yCisvLyBz
dWJzdHJpbmdzIG11c3QgYmUgdW5pcXVlIHdpdGhpbiB0aGUgZ2l2ZW4gZnVuY3Rpb24gYXJndW1l
bnQuCisKKy8vIHR5cGVzIGZvciBhcmd1bWVudCAnYmFyJyBpbiBmdW5jdGlvbiAnZm9vJwordmFy
IHR5cGVzID0gSlNPTi5wYXJzZShmaW5kVHlwZUZvckV4cHJlc3Npb24od3JhcHBlciwgImJhciki
KSk7IAorYXNzZXJ0KHR5cGVzLmluc3RydWN0aW9uVHlwZVNldC5wcmltaXRpdmVUeXBlTmFtZXMu
aW5kZXhPZihULkludGVnZXIpICE9PSAtMSwgIlByaW1pdGl2ZSB0eXBlIG5hbWVzIHNob3VsZCBj
b250YWluICdJbnRlZ2VyJyIpOworYXNzZXJ0KHR5cGVzLmluc3RydWN0aW9uVHlwZVNldC5wcmlt
aXRpdmVUeXBlTmFtZXMuaW5kZXhPZihULk51bWJlcikgIT09IC0xLCAiUHJpbWl0aXZlIHR5cGUg
bmFtZXMgc2hvdWxkIGNvbnRhaW4gJ051bWJlciciKTsKK2Fzc2VydCh0eXBlcy5pbnN0cnVjdGlv
blR5cGVTZXQuZGlzcGxheVR5cGVOYW1lID09PSBULk51bWJlciAsICJQcmltaXRpdmUgdHlwZSBu
YW1lcyBkaXNwbGF5IG5hbWUgc2hvdWxkIGJlICdOdW1iZXInIik7CisKKy8vIHR5cGVzIGZvciB2
YXJpYWJsZSAndGVzdCcgYXQgaW5zdHJ1Y3Rpb246ICd0ZXN0ID0ge3g6MjAsIHk6NTB9JwordHlw
ZXMgPSBKU09OLnBhcnNlKGZpbmRUeXBlRm9yRXhwcmVzc2lvbih3cmFwcGVyLCAidGVzdCA9IHsi
KSk7IAorYXNzZXJ0KHR5cGVzLmdsb2JhbFR5cGVTZXQucHJpbWl0aXZlVHlwZU5hbWVzLmluZGV4
T2YoVC5TdHJpbmcpICE9PSAtMSwgIlZhcmlhYmxlICd0ZXN0JyBzaG91bGQgaGF2ZSBiZWVuIHR5
cGUgJ1N0cmluZycgZ2xvYmFsbHkiKTsKK2Fzc2VydCh0eXBlcy5pbnN0cnVjdGlvblR5cGVTZXQu
c3RydWN0dXJlcy5sZW5ndGggPT09IDEsICJWYXJpYWJsZSAndGVzdCcgc2hvdWxkIGhhdmUgb25l
IHN0cnVjdHVyZSIpOworYXNzZXJ0KHR5cGVzLmluc3RydWN0aW9uVHlwZVNldC5zdHJ1Y3R1cmVz
WzBdLmNvbnN0cnVjdG9yTmFtZSA9PT0gIk9iamVjdCIsICJ2YXJpYWJsZSAndGVzdCciKQorYXNz
ZXJ0KHR5cGVzLmluc3RydWN0aW9uVHlwZVNldC5zdHJ1Y3R1cmVzWzBdLnByb3RvLmNvbnN0cnVj
dG9yTmFtZSA9PT0gIk9iamVjdCIsICJWYXJpYWJsZSAndGVzdCcgc2hvdWxkbid0IGhhdmUgYSBw
cm90b3R5cGUiKTsKK2Fzc2VydCh0eXBlcy5pbnN0cnVjdGlvblR5cGVTZXQuc3RydWN0dXJlc1sw
XS5wcm90by5wcm90byA9PT0gbnVsbCwgIlZhcmlhYmxlICd0ZXN0JyBzaG91bGRuJ3QgaGF2ZSBh
IHByb3RvdHlwZSIpOworYXNzZXJ0KHR5cGVzLmluc3RydWN0aW9uVHlwZVNldC5zdHJ1Y3R1cmVz
WzBdLmNvbnN0cnVjdG9yTmFtZSA9PT0gIk9iamVjdCIsICJ2YXJpYWJsZSAndGVzdCcgc2hvdWxk
IGhhdmUgY29uc3RydWN0b3IgbmFtZSAnT2JqZWN0JyIpCithc3NlcnQodHlwZXMuZ2xvYmFsVHlw
ZVNldC5kaXNwbGF5VHlwZU5hbWUgPT09ICJPYmplY3QiLCAiVmFyaWFibGUgJ3Rlc3QnIGdsb2Jh
bCB0eXBlIG5hbWUgc2hvdWxkIGRpc3BsYXkgYXMgJ09iamVjdCciKTsKK2Fzc2VydCh0eXBlcy5p
bnN0cnVjdGlvblR5cGVTZXQuc3RydWN0dXJlc1swXS5maWVsZHMubGVuZ3RoID09PSAyLCAidmFy
aWFibGUgJ3Rlc3QnIHNob3VsZCBoYXZlIHR3byBmaWVsZHM6IHgseSIpOworYXNzZXJ0KHR5cGVz
Lmluc3RydWN0aW9uVHlwZVNldC5zdHJ1Y3R1cmVzWzBdLmZpZWxkcy5pbmRleE9mKCJ4IikgIT09
IC0xLCAidmFyaWFibGUgJ3Rlc3QnIHNob3VsZCBoYXZlIGZpZWxkICd4JyIpOworYXNzZXJ0KHR5
cGVzLmluc3RydWN0aW9uVHlwZVNldC5zdHJ1Y3R1cmVzWzBdLmZpZWxkcy5pbmRleE9mKCJ5Iikg
IT09IC0xLCAidmFyaWFibGUgJ3Rlc3QnIHNob3VsZCBoYXZlIGZpZWxkICd5JyIpOworCisvLyB0
eXBlcyBmb3IgdmFyaWFibGUgJ3Rlc3QnIGF0IGluc3RydWN0aW9uOiAndGVzdCA9ICJoZWxsbyIn
Cit0eXBlcyA9IEpTT04ucGFyc2UoZmluZFR5cGVGb3JFeHByZXNzaW9uKHdyYXBwZXIsICJ0ZXN0
ID0gXCJoIikpOworYXNzZXJ0KHR5cGVzLmdsb2JhbFR5cGVTZXQucHJpbWl0aXZlVHlwZU5hbWVz
LmluZGV4T2YoVC5TdHJpbmcpICE9PSAtMSwgIlZhcmlhYmxlICd0ZXN0JyBzaG91bGQgaGF2ZSBi
ZWVuIHR5cGUgJ1N0cmluZycgZ2xvYmFsbHkiKTsKK2Fzc2VydCh0eXBlcy5pbnN0cnVjdGlvblR5
cGVTZXQuZGlzcGxheVR5cGVOYW1lID09PSBULlN0cmluZywgIlZhcmlhYmxlICd0ZXN0JyBzaG91
bGQgaGF2ZSBiZWVuIGRpc3BsYXkgdHlwZSAnU3RyaW5nJyBhdCB0aGlzIGluc3RydWN0aW9uIik7
Cithc3NlcnQodHlwZXMuaW5zdHJ1Y3Rpb25UeXBlU2V0LnByaW1pdGl2ZVR5cGVOYW1lcy5pbmRl
eE9mKFQuU3RyaW5nKSAhPT0gLTEsICJWYXJpYWJsZSAndGVzdCcgc2hvdWxkIGhhdmUgYmVlbiB0
eXBlICdTdHJpbmcnIGdsb2JhbGx5Iik7Cithc3NlcnQodHlwZXMuaW5zdHJ1Y3Rpb25UeXBlU2V0
LnN0cnVjdHVyZXMubGVuZ3RoID09PSAwLCAiVmFyaWFibGUgJ3Rlc3QnIGF0IHRoaXMgaW5zdHJ1
Y3Rpb24gc2hvdWxkbid0IGhhdmUgYSBzdHJ1Y3R1cmUuIik7Cithc3NlcnQodHlwZXMuZ2xvYmFs
VHlwZVNldC5zdHJ1Y3R1cmVzLmxlbmd0aCA9PT0gMSwgIlZhcmlhYmxlICd0ZXN0JyBzaG91bGQg
c3RpbGwgaGF2ZSBvbmUgc3RydWN0dXJlIik7Cithc3NlcnQodHlwZXMuZ2xvYmFsVHlwZVNldC5z
dHJ1Y3R1cmVzWzBdLmZpZWxkcy5pbmRleE9mKCJ4IikgIT09IC0xLCAidmFyaWFibGUgJ3Rlc3Qn
IHNob3VsZCBoYXZlIGZpZWxkICd4JyBnbG9iYWxseSIpOworYXNzZXJ0KHR5cGVzLmdsb2JhbFR5
cGVTZXQuc3RydWN0dXJlc1swXS5maWVsZHMuaW5kZXhPZigieSIpICE9PSAtMSwgInZhcmlhYmxl
ICd0ZXN0JyBzaG91bGQgaGF2ZSBmaWVsZCAneScgZ2xvYmFsbHkiKTsKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3Byb2ZpbGVyL3R5cGUtcHJvZmlsZXItaW5oZXJpdGFuY2Uu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3Byb2ZpbGVyL3R5
cGUtcHJvZmlsZXItaW5oZXJpdGFuY2UuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdGVzdHMvcHJvZmlsZXIvdHlwZS1wcm9maWxlci1pbmhlcml0YW5jZS5qcwkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACitsb2FkKCIuL2RyaXZlci9kcml2ZXIuanMiKTsK
KworZnVuY3Rpb24gd3JhcHBlcigpCit7CisKK3ZhciB0aGVBID0gbmV3IEE7Cit2YXIgdGhlQiA9
IG5ldyBCOwordmFyIHRoZUMgPSBuZXcgQzsKK3ZhciBoaWVyYXJjaHlUZXN0ID0gbmV3IEI7Cito
aWVyYXJjaHlUZXN0ID0gbmV3IEM7CisKK3ZhciBzZWNvbmRIaWVyYXJjaHlUZXN0ID0gT2JqZWN0
LmNyZWF0ZSh0aGVCKTsKK3NlY29uZEhpZXJhcmNoeVRlc3QgPSBPYmplY3QuY3JlYXRlKHRoZUMp
OworCit2YXIgc2Vjb25kQiA9IE9iamVjdC5jcmVhdGUodGhlQik7CisKK2Z1bmN0aW9uIEEoKSB7
IH07CitmdW5jdGlvbiBCKCkgeyB9OyBCLnByb3RvdHlwZS5fX3Byb3RvX18gPSBBLnByb3RvdHlw
ZTsKK2Z1bmN0aW9uIEMoKSB7IH07IEMucHJvdG90eXBlLl9fcHJvdG9fXyA9IEEucHJvdG90eXBl
OworCit9Cit3cmFwcGVyKCk7CisKKy8vID09PT09PSBFbmQgdGVzdCBjYXNlcyA9PT09PT0KKwor
Ly8gYXJncyBmb3IgZmluZFR5cGVGb3JFeHByZXNzaW9uID0+IGZ1bmN0aW9uLCBzdWJzdHJpbmcs
IHNlYXJjaCBkZXNjcmlwdG9yCisvLyBzdWJzdHJpbmdzIG11c3QgYmUgdW5pcXVlIHdpdGhpbiB0
aGUgZ2l2ZW4gZnVuY3Rpb24gYXJndW1lbnQuCisKKy8vIHR5cGVzIGZvciB2YXJpYWJsZSAndGhl
QScKK3R5cGVzID0gSlNPTi5wYXJzZShmaW5kVHlwZUZvckV4cHJlc3Npb24od3JhcHBlciwgInRo
ZUEgPSBuIikpOworYXNzZXJ0KHR5cGVzLmdsb2JhbFR5cGVTZXQuZGlzcGxheVR5cGVOYW1lID09
PSAiQSIsICJ2YXJpYWJsZSAndGhlQScgc2hvdWxkIGhhdmUgZGlzcGxheVR5cGVOYW1lICdBJyIp
OworYXNzZXJ0KHR5cGVzLmluc3RydWN0aW9uVHlwZVNldC5kaXNwbGF5VHlwZU5hbWUgPT09ICJB
IiwgInZhcmlhYmxlICd0aGVBJyBzaG91bGQgaGF2ZSBkaXNwbGF5VHlwZU5hbWUgJ0EnIik7CisK
Ky8vIHR5cGVzIGZvciB2YXJpYWJsZSAndGhlQicKK3R5cGVzID0gSlNPTi5wYXJzZShmaW5kVHlw
ZUZvckV4cHJlc3Npb24od3JhcHBlciwgInRoZUIgPSBuIikpOworYXNzZXJ0KHR5cGVzLmdsb2Jh
bFR5cGVTZXQuZGlzcGxheVR5cGVOYW1lID09PSAiQiIsICJ2YXJpYWJsZSAndGhlQicgc2hvdWxk
IGhhdmUgZGlzcGxheVR5cGVOYW1lICdCJyIpOworYXNzZXJ0KHR5cGVzLmluc3RydWN0aW9uVHlw
ZVNldC5kaXNwbGF5VHlwZU5hbWUgPT09ICJCIiwgInZhcmlhYmxlICd0aGVCJyBzaG91bGQgaGF2
ZSBkaXNwbGF5VHlwZU5hbWUgJ0InIik7CisKKy8vIHR5cGVzIGZvciB2YXJpYWJsZSAndGhlQycK
K3R5cGVzID0gSlNPTi5wYXJzZShmaW5kVHlwZUZvckV4cHJlc3Npb24od3JhcHBlciwgInRoZUMg
PSBuIikpOworYXNzZXJ0KHR5cGVzLmdsb2JhbFR5cGVTZXQuZGlzcGxheVR5cGVOYW1lID09PSAi
QyIsICJ2YXJpYWJsZSAndGhlQycgc2hvdWxkIGhhdmUgZGlzcGxheVR5cGVOYW1lICdDJyIpOwor
YXNzZXJ0KHR5cGVzLmluc3RydWN0aW9uVHlwZVNldC5kaXNwbGF5VHlwZU5hbWUgPT09ICJDIiwg
InZhcmlhYmxlICd0aGVDJyBzaG91bGQgaGF2ZSBkaXNwbGF5VHlwZU5hbWUgJ0MnIik7CisKKwor
Ly8gdHlwZXMgZm9yIHZhcmlhYmxlICdoaWVyYXJjaHlUZXN0JyBhdCBpbnN0cnVjdGlvbiAnaGll
cmFyY2h5VGVzdCA9IG5ldyBCOycKK3R5cGVzID0gSlNPTi5wYXJzZShmaW5kVHlwZUZvckV4cHJl
c3Npb24od3JhcHBlciwgImhpZXJhcmNoeVRlc3QgPSBuZXcgQjsiKSk7Cithc3NlcnQodHlwZXMu
Z2xvYmFsVHlwZVNldC5kaXNwbGF5VHlwZU5hbWUgPT09ICJBIiwgInZhcmlhYmxlICdoaWVyYXJj
aHlUZXN0JyBzaG91bGQgaGF2ZSBkaXNwbGF5VHlwZU5hbWUgJ0EnIik7CisKKy8vIHR5cGVzIGZv
ciB2YXJpYWJsZSAnaGllcmFyY2h5VGVzdCcgYXQgaW5zdHJ1Y3Rpb24gJ2hpZXJhcmNoeVRlc3Qg
PSBuZXcgQzsnCit0eXBlcyA9IEpTT04ucGFyc2UoZmluZFR5cGVGb3JFeHByZXNzaW9uKHdyYXBw
ZXIsICJoaWVyYXJjaHlUZXN0ID0gbmV3IEM7IikpOworYXNzZXJ0KHR5cGVzLmdsb2JhbFR5cGVT
ZXQuZGlzcGxheVR5cGVOYW1lID09PSAiQSIsICJ2YXJpYWJsZSAnaGllcmFyY2h5VGVzdCcgc2hv
dWxkIGhhdmUgZGlzcGxheVR5cGVOYW1lICdBJyIpOworCisvLyB0eXBlcyBmb3IgdmFyaWFibGUg
J3NlY29uZEhpZXJhcmNoeVRlc3QnIGF0IGluc3RydWN0aW9uICdzZWNvbmRIaWVyYXJjaHlUZXN0
ID0gT2JqZWN0LmNyZWF0ZSh0aGVCKScKK3R5cGVzID0gSlNPTi5wYXJzZShmaW5kVHlwZUZvckV4
cHJlc3Npb24od3JhcHBlciwgInNlY29uZEhpZXJhcmNoeVRlc3QgPSBPYmplY3QuY3JlYXRlKHRo
ZUIpOyIpKTsKK2Fzc2VydCh0eXBlcy5nbG9iYWxUeXBlU2V0LmRpc3BsYXlUeXBlTmFtZSA9PT0g
IkEiLCAidmFyaWFibGUgJ3NlY29uZEhpZXJhcmNoeVRlc3QnIHNob3VsZCBoYXZlIGRpc3BsYXlU
eXBlTmFtZSAnQSciKTsKKworLy8gdHlwZXMgZm9yIHZhcmlhYmxlICdzZWNvbmRIaWVyYXJjaHlU
ZXN0JyBhdCBpbnN0cnVjdGlvbiAnc2Vjb25kSGllcmFyY2h5VGVzdCA9IE9iamVjdC5jcmVhdGUo
dGhlQyknCit0eXBlcyA9IEpTT04ucGFyc2UoZmluZFR5cGVGb3JFeHByZXNzaW9uKHdyYXBwZXIs
ICJzZWNvbmRIaWVyYXJjaHlUZXN0ID0gT2JqZWN0LmNyZWF0ZSh0aGVDKTsiKSk7Cithc3NlcnQo
dHlwZXMuZ2xvYmFsVHlwZVNldC5kaXNwbGF5VHlwZU5hbWUgPT09ICJBIiwgInZhcmlhYmxlICdz
ZWNvbmRIaWVyYXJjaHlUZXN0JyBzaG91bGQgaGF2ZSBkaXNwbGF5VHlwZU5hbWUgJ0EnIik7CisK
KworLy8gdHlwZXMgZm9yIHZhcmlhYmxlICdzZWNvbmRCJyBhdCBpbnN0cnVjdGlvbiAndmFyIHNl
Y29uZEIgPSBPYmplY3QuY3JlYXRlKHRoZUIpJwordHlwZXMgPSBKU09OLnBhcnNlKGZpbmRUeXBl
Rm9yRXhwcmVzc2lvbih3cmFwcGVyLCAic2Vjb25kQiIpKTsKK2Fzc2VydCh0eXBlcy5nbG9iYWxU
eXBlU2V0LmRpc3BsYXlUeXBlTmFtZSA9PT0gIkIiLCAidmFyaWFibGUgJ3NlY29uZEInIHNob3Vs
ZCBoYXZlIGRpc3BsYXlUeXBlTmFtZSAnQiciKTsKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3Byb2ZpbGVyL3R5cGUtcHJvZmlsZXItcmV0dXJuLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9wcm9maWxlci90eXBlLXByb2ZpbGVyLXJldHVy
bi5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9wcm9maWxl
ci90eXBlLXByb2ZpbGVyLXJldHVybi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBA
Citsb2FkKCIuL2RyaXZlci9kcml2ZXIuanMiKTsKKworZnVuY3Rpb24gZm9vKHgpIHsgcmV0dXJu
IHg7IH0KK2Z1bmN0aW9uIEN0b3IoKSB7IAorICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBDdG9y
KSkKKyAgICAgICAgcmV0dXJuICJOb3QgY2FsbGVkIHdpdGggYG5ld2AiOyAKK30KKworLy8gPT09
PT09IEVuZCB0ZXN0IGNhc2VzID09PT09PQorCisvLyBhcmdzIGZvciBmaW5kVHlwZUZvckV4cHJl
c3Npb24gPT4gZnVuY3Rpb24sIHN1YnN0cmluZywgc2VhcmNoIGRlc2NyaXB0b3IKKy8vIHN1YnN0
cmluZ3MgbXVzdCBiZSB1bmlxdWUgd2l0aGluIHRoZSBnaXZlbiBmdW5jdGlvbiBhcmd1bWVudC4K
KworZm9vKDIwKTsKKy8vIFJldHVybiB0eXBlIGZvciBmdW5jdGlvbiBmb28KK3ZhciB0eXBlcyA9
IEpTT04ucGFyc2UocmV0dXJuVHlwZUZvcihmb28pKTsKK2Fzc2VydCh0eXBlcy5nbG9iYWxUeXBl
U2V0LmRpc3BsYXlUeXBlTmFtZSA9PT0gVC5JbnRlZ2VyLCAiRnVuY3Rpb24gJ2Zvbycgc2hvdWxk
IHJldHVybiAnSW50ZWdlciciKTsKKworZm9vKDIwLjUpOworLy8gUmV0dXJuIHR5cGUgZm9yIGZ1
bmN0aW9uIGZvbwordHlwZXMgPSBKU09OLnBhcnNlKHJldHVyblR5cGVGb3IoZm9vKSk7Cithc3Nl
cnQodHlwZXMuZ2xvYmFsVHlwZVNldC5kaXNwbGF5VHlwZU5hbWUgPT09IFQuTnVtYmVyLCAiRnVu
Y3Rpb24gJ2Zvbycgc2hvdWxkIHJldHVybiAnTnVtYmVyJyBhZnRlciBiZWluZyBjYWxsZWQgdHdp
Y2UiKTsKKworZm9vKCJoZWxsbyIpOworLy8gUmV0dXJuIHR5cGUgZm9yIGZ1bmN0aW9uIGZvbwor
dHlwZXMgPSBKU09OLnBhcnNlKHJldHVyblR5cGVGb3IoZm9vKSk7Cithc3NlcnQodHlwZXMuZ2xv
YmFsVHlwZVNldC5kaXNwbGF5VHlwZU5hbWUgPT09IFQuTWFueSwgIkZ1bmN0aW9uICdmb28nIHNo
b3VsZCByZXR1cm4gJyhtYW55KScgYWZ0ZXIgYmVpbmcgY2FsbGVkIHRocmVlIHRpbWVzIik7Cith
c3NlcnQodHlwZXMuZ2xvYmFsVHlwZVNldC5wcmltaXRpdmVUeXBlTmFtZXMuaW5kZXhPZihULlN0
cmluZykgIT09IC0xLCAiRnVuY3Rpb24gJ2Zvbycgc2hvdWxkIGhhdmUgcmV0dXJuZWQgJ1N0cmlu
ZycgYXQgc29tZSBwb2ludCIpOworYXNzZXJ0KHR5cGVzLmdsb2JhbFR5cGVTZXQucHJpbWl0aXZl
VHlwZU5hbWVzLmluZGV4T2YoVC5JbnRlZ2VyKSAhPT0gLTEsICJGdW5jdGlvbiAnZm9vJyBzaG91
bGQgaGF2ZSByZXR1cm5lZCAnSW50ZWdlcicgYXQgc29tZSBwb2ludCIpOworYXNzZXJ0KHR5cGVz
Lmdsb2JhbFR5cGVTZXQucHJpbWl0aXZlVHlwZU5hbWVzLmluZGV4T2YoVC5OdW1iZXIpICE9PSAt
MSwgIkZ1bmN0aW9uICdmb28nIHNob3VsZCBoYXZlIHJldHVybmVkICdOdW1iZXInIGF0IHNvbWUg
cG9pbnQiKTsKKworbmV3IEN0b3I7Cit0eXBlcyA9IEpTT04ucGFyc2UocmV0dXJuVHlwZUZvcihD
dG9yKSk7Cithc3NlcnQodHlwZXMuZ2xvYmFsVHlwZVNldC5kaXNwbGF5VHlwZU5hbWUgPT09ICJD
dG9yIiwgIkZ1bmN0aW9uICdDdG9yJyBzaG91bGQgcmV0dXJuICdDdG9yJyIpOworYXNzZXJ0KHR5
cGVzLmdsb2JhbFR5cGVTZXQuc3RydWN0dXJlcy5sZW5ndGggPT09IDEsICJGdW5jdGlvbiAnQ3Rv
cicgc2hvdWxkIGhhdmUgc2VlbiBvbmUgc3RydWN0dXJlIik7CisKK0N0b3IoKTsKK3R5cGVzID0g
SlNPTi5wYXJzZShyZXR1cm5UeXBlRm9yKEN0b3IpKTsKK2Fzc2VydCh0eXBlcy5nbG9iYWxUeXBl
U2V0LmRpc3BsYXlUeXBlTmFtZSA9PT0gIk9iamVjdCIsICJGdW5jdGlvbiAnQ3Rvcicgc2hvdWxk
IHJldHVybiBPYmplY3QiKTsKK2Fzc2VydCh0eXBlcy5nbG9iYWxUeXBlU2V0LnByaW1pdGl2ZVR5
cGVOYW1lcy5pbmRleE9mKFQuU3RyaW5nKSAhPT0gLTEsICJGdW5jdGlvbiAnQ3Rvcicgc2hvdWxk
IHJldHVybiBTdHJpbmciKTsKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3By
b2ZpbGVyL2RyaXZlci9kcml2ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3Byb2ZpbGVyL2RyaXZlci9kcml2ZXIuanMJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvcHJvZmlsZXIvZHJpdmVyL2RyaXZlci5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDE2IEBACisvLyBUeXBlcyBtYXRjaGluZyB0aG9zZSBpbiBydW50
aW1lL1R5cGVTZXQKK3ZhciBUID0geworICAgIEJvb2xlYW46IkJvb2xlYW4iLAorICAgIEludGVn
ZXI6ICJJbnRlZ2VyIiwKKyAgICBOdWxsOiAiTnVsbCIsCisgICAgTnVtYmVyOiAiTnVtYmVyIiwK
KyAgICBNYW55OiAiKG1hbnkpIiwKKyAgICBTdHJpbmc6ICJTdHJpbmciLAorICAgIFVuZGVmaW5l
ZDogIlVuZGVmaW5lZCIsCisgICAgVW5kZWZpbmVkT3JOdWxsOiAiKD8pIgorfTsKKworZnVuY3Rp
b24gYXNzZXJ0KGNvbmRpdGlvbiwgcmVhc29uKSB7CisgICAgaWYgKCFjb25kaXRpb24pCisgICAg
ICAgIHRocm93IG5ldyBFcnJvcihyZWFzb24pOworfQpJbmRleDogVG9vbHMvU2NyaXB0cy9ydW4t
amF2YXNjcmlwdGNvcmUtdGVzdHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9ydW4tamF2
YXNjcmlwdGNvcmUtdGVzdHMJKHJldmlzaW9uIDE3Mjg1OSkKKysrIFRvb2xzL1NjcmlwdHMvcnVu
LWphdmFzY3JpcHRjb3JlLXRlc3RzCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw2ICs3Nyw4IEBAIG15
ICRydW5Nb3ppbGxhID0gMDsKICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEyMDgwOQogbXkgJHJ1bkpTQ1N0cmVzcyA9ICFpc0FwcGxlV2luV2ViS2l0KCk7CiAKK215
ICRydW5KU0NUeXBlUHJvZmlsZXJUZXN0cyA9IDE7CisKIG15ICRlbmFibGVGVEwgPSBpc0FwcGxl
V2ViS2l0KCk7CiAKIG15ICRjcmVhdGVUYXJiYWxsID0gMDsKQEAgLTg3LDYgKzg5LDcgQEAgbXkg
JGJ1aWxkSlNDRGVmYXVsdCA9ICRidWlsZEpTQyA/ICJ3aWxsIAogbXkgJHRlc3RhcGlEZWZhdWx0
ID0gJHJ1blRlc3RBUEkgPyAid2lsbCBydW4iIDogIndpbGwgbm90IHJ1biI7CiBteSAkbW96aWxs
YURlZmF1bHQgPSAkcnVuTW96aWxsYSA/ICJ3aWxsIHJ1biIgOiAid2lsbCBub3QgcnVuIjsKIG15
ICRqc2NTdHJlc3NEZWZhdWx0ID0gJHJ1bkpTQ1N0cmVzcyA/ICJ3aWxsIHJ1biIgOiAiIHdpbGwg
bm90IHJ1biI7CitteSAkcnVuSlNDVHlwZVByb2ZpbGVyVGVzdHNEZWZhdWx0ID0gJHJ1bkpTQ1R5
cGVQcm9maWxlclRlc3RzID8gIndpbGwgcnVuIiA6ICJ3aWxsIG5vdCBydW4iOwogbXkgJHVzYWdl
ID0gPDxFT0Y7CiBVc2FnZTogJHByb2dyYW1OYW1lIFtvcHRpb25zXSBbb3B0aW9ucyB0byBwYXNz
IHRvIGJ1aWxkIHN5c3RlbV0KICAgLS1oZWxwICAgICAgICAgICAgICAgICAgICAgICAgU2hvdyB0
aGlzIGhlbHAgbWVzc2FnZQpAQCAtOTcsNiArMTAwLDcgQEAgVXNhZ2U6ICRwcm9ncmFtTmFtZSBb
b3B0aW9uc10gW29wdGlvbnMgdAogICAtLVtuby1dYnVpbGQgICAgICAgICAgICAgICAgICBDaGVj
ayAob3IgZG9uJ3QgY2hlY2spIHRvIHNlZSBpZiB0aGUganNjIGJ1aWxkIGlzIHVwLXRvLWRhdGUg
KGRlZmF1bHQ6ICRidWlsZEpTQ0RlZmF1bHQpCiAgIC0tW25vLV10ZXN0YXBpICAgICAgICAgICAg
ICAgIFJ1biAob3IgZG9uJ3QgcnVuKSB0ZXN0YXBpIChkZWZhdWx0OiAkdGVzdGFwaURlZmF1bHQp
CiAgIC0tW25vLV1qc2Mtc3RyZXNzICAgICAgICAgICAgIFJ1biAob3IgZG9uJ3QgcnVuKSB0aGUg
SlNDIHN0cmVzcyB0ZXN0cyAoZGVmYXVsdDogJGpzY1N0cmVzc0RlZmF1bHQpCisgIC0tW25vLV10
eXBlLXByb2ZpbGVyICAgICAgICAgIFJ1biAob3IgZG9uJ3QgcnVuKSB0aGUgVHlwZSBQcm9maWxl
ciB0ZXN0cyAoZGVmYXVsdDogJHJ1bkpTQ1R5cGVQcm9maWxlclRlc3RzRGVmYXVsdCkKICAgLS10
YXJiYWxsICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlIGEgdGFyYmFsbCBvZiB0aGUgYnVuZGxl
IHByb2R1Y2VkIGJ5IHJ1bm5pbmcgdGhlIEpTQyBzdHJlc3MgdGVzdHMuCiAgIC0tcmVtb3RlPSAg
ICAgICAgICAgICAgICAgICAgIFJ1biB0aGUgSlNDIHN0cmVzcyB0ZXN0cyBvbiB0aGUgc3BlY2lm
aWVkIHJlbW90ZSBob3N0LiBJbXBsaWVzIC0tdGFyYmFsbC4KIEVPRgpAQCAtMTA5LDYgKzExMyw3
IEBAIEdldE9wdGlvbnMoCiAgICAgJ2Z0bC1qaXQhJyA9PiBcJGVuYWJsZUZUTCwKICAgICAndGVz
dGFwaSEnID0+IFwkcnVuVGVzdEFQSSwKICAgICAnanNjLXN0cmVzcyEnID0+IFwkcnVuSlNDU3Ry
ZXNzLAorICAgICd0eXBlLXByb2ZpbGVyIScgPT4gXCRydW5KU0NUeXBlUHJvZmlsZXJUZXN0cywK
ICAgICAndGFyYmFsbCEnID0+IFwkY3JlYXRlVGFyYmFsbCwKICAgICAncmVtb3RlPXMnID0+IFwk
cmVtb3RlSG9zdCwKICAgICAnaGVscCcgPT4gXCRzaG93SGVscApAQCAtMjY3LDYgKzI3MiwzMCBA
QCBpZiAoJHJ1bkpTQ1N0cmVzcykgewogICAgIGV4aXQgZXhpdFN0YXR1cygkcmVzdWx0KSBpZiAk
cmVzdWx0OwogfQogCitpZiAoJHJ1bkpTQ1R5cGVQcm9maWxlclRlc3RzKSB7CisgICAgIyBTZXQg
TEFORyBlbnZpcm9ubWVudCB2YXJpYWJsZSBzbyB0aGUgc3RyZXNzIHRlc3RzIHdpbGwgd29yayB3
aXRoIG5ld2VyIHJ1YnkgKDxyZGFyOi8vcHJvYmxlbS8xNTAxMDcwNT4pCisgICAgJEVOVntMQU5H
fT0iZW5fVVMuVVRGLTgiOworICAgIG15IEBqc2NTdHJlc3NEcml2ZXJDbWQgPSAoCisgICAgICAg
ICIvdXNyL2Jpbi9lbnYiLCAicnVieSIsICJUb29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRl
c3RzIiwKKyAgICAgICAgIi1qIiwganNjUGF0aCgkcHJvZHVjdERpciksICItbyIsICRqc2NTdHJl
c3NSZXN1bHRzRGlyLAorICAgICAgICAiU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3Byb2Zp
bGVyIiwKKyAgICAgICAgIi0tdHlwZS1wcm9maWxlciIKKyAgICApOworICAgIGlmICgkZW5hYmxl
RlRMKSB7CisgICAgICAgIHB1c2goQGpzY1N0cmVzc0RyaXZlckNtZCwgIi0tZnRsLWppdCIpOwor
ICAgIH0KKyAgICBpZiAoJGNyZWF0ZVRhcmJhbGwpIHsKKyAgICAgICAgcHVzaChAanNjU3RyZXNz
RHJpdmVyQ21kLCAiLS10YXJiYWxsIik7CisgICAgfQorICAgIGlmICgkcmVtb3RlSG9zdCkgewor
ICAgICAgICBwdXNoKEBqc2NTdHJlc3NEcml2ZXJDbWQsICItLXJlbW90ZSIpOworICAgICAgICBw
dXNoKEBqc2NTdHJlc3NEcml2ZXJDbWQsICRyZW1vdGVIb3N0KTsKKyAgICB9CisgICAgcHJpbnQg
IlJ1bm5pbmc6ICIgLiBqb2luKCIgIiwgQGpzY1N0cmVzc0RyaXZlckNtZCkgLiAiXG4iOworICAg
IG15ICRyZXN1bHQgPSBzeXN0ZW0oQGpzY1N0cmVzc0RyaXZlckNtZCk7CisgICAgZXhpdCBleGl0
U3RhdHVzKCRyZXN1bHQpIGlmICRyZXN1bHQ7Cit9CisKIG15ICRudW1OZXdNb3ppbGxhRmFpbHVy
ZXMgPSBrZXlzICVuZXdNb3ppbGxhRmFpbHVyZXM7CiBpZiAoJG51bU5ld01vemlsbGFGYWlsdXJl
cykgewogICAgIHByaW50ICJcbioqIFRoZSBmb2xsb3dpbmcgTW96aWxsYSB0ZXN0IGZhaWx1cmVz
IGhhdmUgYmVlbiBpbnRyb2R1Y2VkOlxuIjsKSW5kZXg6IFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1z
dHJlc3MtdGVzdHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10
ZXN0cwkocmV2aXNpb24gMTcyODU5KQorKysgVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10
ZXN0cwkod29ya2luZyBjb3B5KQpAQCAtMTAyLDYgKzEwMiw3IEBAIGVuZAogJGpzY1BhdGggPSBu
aWwKICRkb05vdE1lc3NXaXRoVk1QYXRoID0gZmFsc2UKICRlbmFibGVGVEwgPSBmYWxzZQorJGVu
YWJsZVR5cGVQcm9maWxlciA9IGZhbHNlCiAkbWVtb3J5TGltaXRlZCA9IGZhbHNlCiAkb3V0cHV0
RGlyID0gUGF0aG5hbWUubmV3KCJyZXN1bHRzIikKICR2ZXJib3NpdHkgPSAwCkBAIC0xNDEsNiAr
MTQyLDcgQEAgR2V0b3B0TG9uZy5uZXcoWyctLWhlbHAnLCAnLWgnLCBHZXRvcHRMbwogICAgICAg
ICAgICAgICAgWyctLWpzYycsICctaicsIEdldG9wdExvbmc6OlJFUVVJUkVEX0FSR1VNRU5UXSwK
ICAgICAgICAgICAgICAgIFsnLS1uby1jb3B5JywgR2V0b3B0TG9uZzo6Tk9fQVJHVU1FTlRdLAog
ICAgICAgICAgICAgICAgWyctLWZ0bC1qaXQnLCBHZXRvcHRMb25nOjpOT19BUkdVTUVOVF0sCisg
ICAgICAgICAgICAgICBbJy0tdHlwZS1wcm9maWxlcicsIEdldG9wdExvbmc6Ok5PX0FSR1VNRU5U
XSwKICAgICAgICAgICAgICAgIFsnLS1tZW1vcnktbGltaXRlZCcsIEdldG9wdExvbmc6Ok5PX0FS
R1VNRU5UXSwKICAgICAgICAgICAgICAgIFsnLS1vdXRwdXQtZGlyJywgJy1vJywgR2V0b3B0TG9u
Zzo6UkVRVUlSRURfQVJHVU1FTlRdLAogICAgICAgICAgICAgICAgWyctLXJ1bi1idW5kbGUnLCBH
ZXRvcHRMb25nOjpSRVFVSVJFRF9BUkdVTUVOVF0sCkBAIC0xODQsNiArMTg2LDggQEAgR2V0b3B0
TG9uZy5uZXcoWyctLWhlbHAnLCAnLWgnLCBHZXRvcHRMbwogICAgICAgICAkcmVtb3RlVXNlciwg
JHJlbW90ZUhvc3QsICRyZW1vdGVQb3J0ID0gdXJpLnVzZXIsIHVyaS5ob3N0LCB1cmkucG9ydAog
ICAgIHdoZW4gJy0tY2hpbGQtcHJvY2Vzc2VzJwogICAgICAgICAkbnVtUHJvY2Vzc29ycyA9IGFy
Zy50b19pCisgICAgd2hlbiAnLS10eXBlLXByb2ZpbGVyJworICAgICAgICAkZW5hYmxlVHlwZVBy
b2ZpbGVyID0gdHJ1ZQogICAgIGVuZAogfQogCkBAIC0xMjI5LDcgKzEyMzMsMTEgQEAgaWYgRU5W
WyJKU0NfdGltZW91dCJdCiAgICAgIyBJbmNyZWFzZSB0aGUgdGltZW91dCBwcm9wb3J0aW9uYWxs
eSB0byB0aGUgbnVtYmVyIG9mIHByb2Nlc3NvcnMuCiAgICAgRU5WWyJKU0NfdGltZW91dCJdID0g
KEVOVlsiSlNDX3RpbWVvdXQiXS50b19pLnRvX2YgKiBNYXRoLnNxcnQoJG51bVByb2Nlc3NvcnMp
KS50b19pLnRvX3MKIGVuZAotICAgIAorCitpZiAkZW5hYmxlVHlwZVByb2ZpbGVyCisgICAgRU5W
WyJKU0NfZW5hYmxlVHlwZVByb2ZpbGVyIl0gPSAidHJ1ZSIKK2VuZAorCiBwdXRzCiAKIGRlZiBj
bGVhblJ1bm5lckRpcmVjdG9yeQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237537</attachid>
            <date>2014-09-02 18:18:21 -0700</date>
            <delta_ts>2014-09-03 12:27:43 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>29852</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTczMTk1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU0IEBA
CisyMDE0LTA5LTAyICBTYWFtIEJhcmF0aSAgPHNhYW1iYXJhdGkxQGdtYWlsLmNvbT4KKworICAg
ICAgICBDcmVhdGUgdGVzdHMgZm9yIHR5cGUgcHJvZmlsaW5nCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzYxNjEKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgdHlwZSBwcm9maWxlciBpcyBub3cgYmVp
bmcgdGVzdGVkLiBUaGVzZSBhcmUgYmFzaWMgdGVzdHMgdGhhdCBkb24ndCAKKyAgICAgICAgY2hl
Y2sgZXZlcnkgZWRnZSBjYXNlLCBidXQgd2lsbCBjYXRjaCBhbnkgbWFqb3IgZmFpbHVyZXMgaW4g
dGhlIHR5cGUgcHJvZmlsZXIuIAorICAgICAgICBUaGVzZSB0ZXN0cyBjb3ZlcjoKKyAgICAgICAg
LSBUaGUgYmFzaWMsIGluaGVyaXRhbmNlLWJhc2VkIHR5cGUgc3lzdGVtIGluIFR5cGVTZXQuCisg
ICAgICAgIC0gRnVuY3Rpb24gcmV0dXJuIHR5cGVzLgorICAgICAgICAtIENvcnJlY3QgbWVyZ2lu
ZyBvZiB0eXBlcyBmb3IgbXVsdGlwbGUgYXNzaWdubWVudHMgdG8gb25lIHZhcmlhYmxlLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBwcm92aWRlcyBhIEpTT04tYmFzZWQgQVBJIGZvciB3cml0
aW5nIG5ldyB0ZXN0cyBmb3IKKyAgICAgICAgdGhlIHR5cGUgcHJvZmlsZXIuIFRoZSBBUEkgd29y
a3MgYnkgcGFzc2luZyBpbiBhIGZ1bmN0aW9uIGFuZCBhIAorICAgICAgICB1bmlxdWUgc3Vic3Ry
aW5nIG9mIGFuIGV4cHJlc3Npb24gY29udGFpbmVkIGluIHRoYXQgZnVuY3Rpb24sIGFuZCAKKyAg
ICAgICAgcmV0dXJucyBhIEpTT04gc3RyaW5nIHJlcHJlc2VudGluZyB0eXBlIGluZm9ybWF0aW9u
IGZvciB0aGF0IGV4cHJlc3Npb24uCisKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoR2xv
YmFsT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChmdW5jdGlvbkZpbmRUeXBlRm9y
RXhwcmVzc2lvbik6CisgICAgICAgIChmdW5jdGlvblJldHVyblR5cGVGb3IpOgorICAgICAgICAq
IHJ1bnRpbWUvVHlwZVByb2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6VHlwZVByb2ZpbGVyOjp0
eXBlSW5mb3JtYXRpb25Gb3JFeHByZXNzaW9uQXRPZmZzZXQpOgorICAgICAgICAqIHJ1bnRpbWUv
VHlwZVByb2ZpbGVyLmg6CisgICAgICAgICogcnVudGltZS9UeXBlUHJvZmlsZXJMb2cuaDoKKyAg
ICAgICAgKiBydW50aW1lL1R5cGVTZXQuY3BwOgorICAgICAgICAoSlNDOjpUeXBlU2V0Ojp0b0pT
T05TdHJpbmcpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTaGFwZTo6dG9KU09OU3RyaW5nKToK
KyAgICAgICAgKiBydW50aW1lL1R5cGVTZXQuaDoKKyAgICAgICAgKiB0ZXN0cy90eXBlUHJvZmls
ZXI6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL3R5cGVQcm9maWxlci55YW1sOiBBZGRlZC4KKyAg
ICAgICAgKiB0ZXN0cy90eXBlUHJvZmlsZXIvYmFzaWMuanM6IEFkZGVkLgorICAgICAgICAod3Jh
cHBlci5mb28pOgorICAgICAgICAod3JhcHBlcik6CisgICAgICAgICogdGVzdHMvdHlwZVByb2Zp
bGVyL2NhcHR1cmVkLmpzOiBBZGRlZC4KKyAgICAgICAgKHdyYXBwZXIuY2hhbmdlRm9vKToKKyAg
ICAgICAgKHdyYXBwZXIpOgorICAgICAgICAqIHRlc3RzL3R5cGVQcm9maWxlci9kcml2ZXI6IEFk
ZGVkLgorICAgICAgICAqIHRlc3RzL3R5cGVQcm9maWxlci9kcml2ZXIvZHJpdmVyLmpzOiBBZGRl
ZC4KKyAgICAgICAgKGFzc2VydCk6CisgICAgICAgICogdGVzdHMvdHlwZVByb2ZpbGVyL2luaGVy
aXRhbmNlLmpzOiBBZGRlZC4KKyAgICAgICAgKHdyYXBwZXIuQSk6CisgICAgICAgICh3cmFwcGVy
LkIpOgorICAgICAgICAod3JhcHBlci5DKToKKyAgICAgICAgKHdyYXBwZXIpOgorICAgICAgICAq
IHRlc3RzL3R5cGVQcm9maWxlci9yZXR1cm4uanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKyAg
ICAgICAgKEN0b3IpOgorCiAyMDE0LTA5LTAyICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxl
LmNvbT4KIAogICAgICAgICBPcHRpbWl6ZSBvd24gcHJvcGVydHkgR2V0QnlWYWxzIHdpdGggcm9w
ZSBzdHJpbmcgc3Vic2NyaXB0cy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAx
NzMxNzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKICNpbmNsdWRl
ICJTdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaCIKICNpbmNsdWRlICJUZXN0UnVubmVyVXRpbHMu
aCIKKyNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlIDxtYXRoLmg+CiAjaW5j
bHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KQEAgLTQ3Niw3ICs0NzcsOSBAQCBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbklkZW50aXR5KEV4ZWNTdGF0ZSopOwogc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25NYWtlTWFzcXVlcmFkZXIoRXhl
Y1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkhh
c0N1c3RvbVByb3BlcnRpZXMoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvbkR1bXBUeXBlc0ZvckFsbFZhcmlhYmxlcyAoRXhlY1N0YXRlKik7
CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkR1bXBUeXBlc0Zv
ckFsbFZhcmlhYmxlcyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uRmluZFR5cGVGb3JFeHByZXNzaW9uKEV4ZWNTdGF0ZSopOworc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SZXR1cm5UeXBlRm9yKEV4ZWNT
dGF0ZSopOwogCiAjaWYgRU5BQkxFKFNBTVBMSU5HX0ZMQUdTKQogc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TZXRTYW1wbGluZ0ZsYWdzKEV4ZWNTdGF0ZSopOwpA
QCAtNjI3LDcgKzYzMCwxMCBAQCBwcm90ZWN0ZWQ6CiAKICAgICAgICAgYWRkRnVuY3Rpb24odm0s
ICJjcmVhdGVJbXB1cmVHZXR0ZXIiLCBmdW5jdGlvbkNyZWF0ZUltcHVyZUdldHRlciwgMSk7CiAg
ICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAic2V0SW1wdXJlR2V0dGVyRGVsZWdhdGUiLCBmdW5jdGlv
blNldEltcHVyZUdldHRlckRlbGVnYXRlLCAyKTsKLSAgICAgICAgYWRkRnVuY3Rpb24odm0sICJk
dW1wVHlwZXNGb3JBbGxWYXJpYWJsZXMiLCBmdW5jdGlvbkR1bXBUeXBlc0ZvckFsbFZhcmlhYmxl
cyAsIDQpOworCisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiZHVtcFR5cGVzRm9yQWxsVmFyaWFi
bGVzIiwgZnVuY3Rpb25EdW1wVHlwZXNGb3JBbGxWYXJpYWJsZXMgLCAwKTsKKyAgICAgICAgYWRk
RnVuY3Rpb24odm0sICJmaW5kVHlwZUZvckV4cHJlc3Npb24iLCBmdW5jdGlvbkZpbmRUeXBlRm9y
RXhwcmVzc2lvbiwgMik7CisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAicmV0dXJuVHlwZUZvciIs
IGZ1bmN0aW9uUmV0dXJuVHlwZUZvciwgMSk7CiAgICAgICAgIAogICAgICAgICBKU0FycmF5KiBh
cnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZ2xvYmFsRXhlYygpLCAwKTsKICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBhcmd1bWVudHMuc2l6ZSgpOyArK2kpCkBAIC0xMDY1LDYgKzEw
NzEsMzkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkR1bQogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKK0VuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25GaW5kVHlwZUZvckV4cHJlc3Npb24oRXhlY1N0YXRlKiBl
eGVjKQoreworICAgIC8vIFRoaXMgZnVuY3Rpb24gdGFrZXMgaW4gYXJndW1lbnRzOiAoZnVuY3Rp
b24sIHN1YnN0cmluZyBjb250YWluZWQgaW4gZnVuY3Rpb24pCisgICAgUkVMRUFTRV9BU1NFUlQo
ZXhlYy0+dm0oKS50eXBlUHJvZmlsZXIoKSk7CisgICAgZXhlYy0+dm0oKS50eXBlUHJvZmlsZXJM
b2coKS0+cHJvY2Vzc0xvZ0VudHJpZXMoQVNDSUlMaXRlcmFsKCJqc2MgVGVzdGluZyBBUEk6IGZ1
bmN0aW9uRmluZFR5cGVGb3JFeHByZXNzaW9uIikpOworCisgICAgSlNWYWx1ZSBmdW5jdGlvblZh
bHVlID0gZXhlYy0+YXJndW1lbnQoMCk7CisgICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb25WYWx1
ZS5pc0Z1bmN0aW9uKCkpOworICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IChq
c0R5bmFtaWNDYXN0PEpTRnVuY3Rpb24qPihmdW5jdGlvblZhbHVlLmFzQ2VsbCgpLT5nZXRPYmpl
Y3QoKSkpLT5qc0V4ZWN1dGFibGUoKTsKKworICAgIEFTU0VSVChleGVjLT5hcmd1bWVudCgxKS5p
c1N0cmluZygpKTsKKyAgICBTdHJpbmcgc3Vic3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMSkuZ2V0
U3RyaW5nKGV4ZWMpOworICAgIFN0cmluZyBzb3VyY2VDb2RlVGV4dCA9IGV4ZWN1dGFibGUtPnNv
dXJjZSgpLnRvU3RyaW5nKCk7CisgICAgdW5zaWduZWQgb2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHNvdXJjZUNvZGVUZXh0LmZpbmQoc3Vic3RyaW5nKSArIGV4ZWN1dGFibGUtPnNvdXJj
ZSgpLnN0YXJ0T2Zmc2V0KCkpOworICAgIAorICAgIFN0cmluZyBqc29uU3RyaW5nID0gZXhlYy0+
dm0oKS50eXBlUHJvZmlsZXIoKS0+dHlwZUluZm9ybWF0aW9uRm9yRXhwcmVzc2lvbkF0T2Zmc2V0
KFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JOb3JtYWwsIG9mZnNldCwgZXhlY3V0YWJsZS0+
c291cmNlSUQoKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBq
c29uU3RyaW5nKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25S
ZXR1cm5UeXBlRm9yKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChleGVj
LT52bSgpLnR5cGVQcm9maWxlcigpKTsKKyAgICBleGVjLT52bSgpLnR5cGVQcm9maWxlckxvZygp
LT5wcm9jZXNzTG9nRW50cmllcyhBU0NJSUxpdGVyYWwoImpzYyBUZXN0aW5nIEFQSTogZnVuY3Rp
b25GaW5kVHlwZUZvckV4cHJlc3Npb24iKSk7CisKKyAgICBKU1ZhbHVlIGZ1bmN0aW9uVmFsdWUg
PSBleGVjLT5hcmd1bWVudCgwKTsKKyAgICBSRUxFQVNFX0FTU0VSVChmdW5jdGlvblZhbHVlLmlz
RnVuY3Rpb24oKSk7CisgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gKGpzRHlu
YW1pY0Nhc3Q8SlNGdW5jdGlvbio+KGZ1bmN0aW9uVmFsdWUuYXNDZWxsKCktPmdldE9iamVjdCgp
KSktPmpzRXhlY3V0YWJsZSgpOworCisgICAgdW5zaWduZWQgb2Zmc2V0ID0gZXhlY3V0YWJsZS0+
c291cmNlKCkuc3RhcnRPZmZzZXQoKTsKKyAgICBTdHJpbmcganNvblN0cmluZyA9IGV4ZWMtPnZt
KCkudHlwZVByb2ZpbGVyKCktPnR5cGVJbmZvcm1hdGlvbkZvckV4cHJlc3Npb25BdE9mZnNldChU
eXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yRnVuY3Rpb25SZXR1cm4sIG9mZnNldCwgZXhlY3V0
YWJsZS0+c291cmNlSUQoKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhl
eGVjLCBqc29uU3RyaW5nKSk7Cit9CisKIC8vIFVzZSBTRUggZm9yIFJlbGVhc2UgYnVpbGRzIG9u
bHkgdG8gZ2V0IHJpZCBvZiB0aGUgY3Jhc2ggcmVwb3J0IGRpYWxvZwogLy8gKGx1Y2tpbHkgdGhl
IHNhbWUgdGVzdHMgZmFpbCBpbiBSZWxlYXNlIGFuZCBEZWJ1ZyBidWlsZHMgc28gZmFyKS4gTmVl
ZCB0bwogLy8gYmUgaW4gYSBzZXBhcmF0ZSBtYWluIGZ1bmN0aW9uIGJlY2F1c2UgdGhlIGpzY21h
aW4gZnVuY3Rpb24gcmVxdWlyZXMgb2JqZWN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UeXBlUHJvZmlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlci5jcHAJKHJldmlzaW9uIDE3MzE3OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTgyLDYgKzgyLDMzIEBAIHZvaWQgVHlwZVByb2ZpbGVyOjpnZXRUeXBlc0ZvclZhcmlhYmxl
QXQKICAgICBkZXNjcmlwdGlvbi0+c2V0TG9jYWxTdHJ1Y3R1cmVzKGxvY2F0aW9uLT5tX2luc3Ry
dWN0aW9uVHlwZVNldC0+YWxsU3RydWN0dXJlUmVwcmVzZW50YXRpb25zKCkpOwogfQogCitTdHJp
bmcgVHlwZVByb2ZpbGVyOjp0eXBlSW5mb3JtYXRpb25Gb3JFeHByZXNzaW9uQXRPZmZzZXQoVHlw
ZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvciBkZXNjcmlwdG9yLCB1bnNpZ25lZCBvZmZzZXQsIGlu
dHB0cl90IHNvdXJjZUlEKQoreworICAgIC8vIFRoaXMgcmV0dXJucyBhIEpTT04gc3RyaW5nIHJl
cHJlc2VudGluZyBhbiBPYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6CisgICAg
Ly8gICAgIGdsb2JhbFR5cGVTZXQ6ICdKU09OPFR5cGVTZXQ+JworICAgIC8vICAgICBpbnN0cnVj
dGlvblR5cGVTZXQ6ICdKU09OPFR5cGVTZXQ+JworCisgICAgVHlwZUxvY2F0aW9uKiBsb2NhdGlv
biA9IGZpbmRMb2NhdGlvbihvZmZzZXQsIHNvdXJjZUlELCBkZXNjcmlwdG9yKTsKKyAgICBBU1NF
UlQobG9jYXRpb24pOworCisgICAgU3RyaW5nQnVpbGRlciBqc29uOyAgCisKKyAgICBqc29uLmFw
cGVuZCgieyIpOworCisgICAgaWYgKGxvY2F0aW9uLT5tX2dsb2JhbFR5cGVTZXQgJiYgbG9jYXRp
b24tPm1fZ2xvYmFsVmFyaWFibGVJRCAhPSBUeXBlUHJvZmlsZXJOb0dsb2JhbElERXhpc3RzKSB7
CisgICAgICAgIGpzb24uYXBwZW5kKCJcImdsb2JhbFR5cGVTZXRcIjoiKTsKKyAgICAgICAganNv
bi5hcHBlbmQobG9jYXRpb24tPm1fZ2xvYmFsVHlwZVNldC0+dG9KU09OU3RyaW5nKCkpOworICAg
ICAgICBqc29uLmFwcGVuZCgiLCIpOworICAgIH0KKworICAgIGpzb24uYXBwZW5kKCJcImluc3Ry
dWN0aW9uVHlwZVNldFwiOiIpOworICAgIGpzb24uYXBwZW5kKGxvY2F0aW9uLT5tX2luc3RydWN0
aW9uVHlwZVNldC0+dG9KU09OU3RyaW5nKCkpOworCisgICAganNvbi5hcHBlbmQoIn0iKTsKKyAg
ICAKKyAgICByZXR1cm4ganNvbi50b1N0cmluZygpOworfQorCiBUeXBlTG9jYXRpb24qIFR5cGVQ
cm9maWxlcjo6ZmluZExvY2F0aW9uKHVuc2lnbmVkIGRpdm90LCBpbnRwdHJfdCBzb3VyY2VJRCwg
VHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvciBkZXNjcmlwdG9yKQogewogICAgIFF1ZXJ5S2V5
IHF1ZXJ5S2V5KHNvdXJjZUlELCBkaXZvdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UeXBlUHJvZmlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UeXBlUHJvZmlsZXIuaAkocmV2aXNpb24gMTczMTc5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTk2
LDYgKzk2LDcgQEAgY2xhc3MgVHlwZVByb2ZpbGVyIHsKIHB1YmxpYzoKICAgICB2b2lkIGxvZ1R5
cGVzRm9yVHlwZUxvY2F0aW9uKFR5cGVMb2NhdGlvbiopOwogICAgIHZvaWQgZ2V0VHlwZXNGb3JW
YXJpYWJsZUF0T2Zmc2V0Rm9ySW5zcGVjdG9yKFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3Is
IHVuc2lnbmVkIGRpdm90LCBpbnRwdHJfdCBzb3VyY2VJRCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlJ1bnRpbWU6OlR5cGVEZXNjcmlwdGlvbj4mKTsKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSBTdHJpbmcgdHlwZUluZm9ybWF0aW9uRm9yRXhwcmVzc2lvbkF0T2Zmc2V0KFR5cGVQcm9maWxl
clNlYXJjaERlc2NyaXB0b3IsIHVuc2lnbmVkIG9mZnNldCwgaW50cHRyX3Qgc291cmNlSUQpOwog
ICAgIHZvaWQgaW5zZXJ0TmV3TG9jYXRpb24oVHlwZUxvY2F0aW9uKik7CiAgICAgRnVuY3Rpb25I
YXNFeGVjdXRlZENhY2hlKiBmdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUoKSB7IHJldHVybiAmbV9m
dW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGU7IH0KICAgICBUeXBlTG9jYXRpb25DYWNoZSogdHlwZUxv
Y2F0aW9uQ2FjaGUoKSB7IHJldHVybiAmbV90eXBlTG9jYXRpb25DYWNoZTsgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmgJKHJldmlz
aW9uIDE3MzE3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxl
ckxvZy5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIHByb2Nlc3NMb2dFbnRyaWVzKEFTQ0lJTGl0ZXJhbCgiTG9nIEZ1bGwiKSk7CiAgICAgfQog
Ci0gICAgdm9pZCBwcm9jZXNzTG9nRW50cmllcyhTdHJpbmcpOworICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgcHJvY2Vzc0xvZ0VudHJpZXMoU3RyaW5nKTsKICAgICBMb2dFbnRyeSogbG9nRW5k
UHRyKCkgY29uc3QgeyByZXR1cm4gbV9sb2dFbmRQdHI7IH0KIAogICAgIHN0YXRpYyBwdHJkaWZm
X3QgbG9nU3RhcnRPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVHlwZVByb2ZpbGVy
TG9nLCBtX2xvZ1N0YXJ0UHRyKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVHlwZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVHlwZVNldC5jcHAJKHJldmlzaW9uIDE3MzE3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1R5cGVTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTEsNiArMjUxLDc4IEBA
IFN0cmluZyBUeXBlU2V0OjpsZWFzdENvbW1vbkFuY2VzdG9yKCkgY28KICAgICByZXR1cm4gU3Ry
dWN0dXJlU2hhcGU6OmxlYXN0Q29tbW9uQW5jZXN0b3IobV9zdHJ1Y3R1cmVIaXN0b3J5KTsKIH0K
IAorU3RyaW5nIFR5cGVTZXQ6OnRvSlNPTlN0cmluZygpIGNvbnN0Cit7CisgICAgLy8gVGhpcyBy
ZXR1cm5zIGEgSlNPTiBzdHJpbmcgcmVwcmVzZW50aW5nIGFuIE9iamVjdCB3aXRoIHRoZSBmb2xs
b3dpbmcgcHJvcGVydGllczoKKyAgICAvLyAgICAgZGlzcGxheVR5cGVOYW1lOiAnU3RyaW5nJwor
ICAgIC8vICAgICBwcmltaXRpdmVUeXBlTmFtZXM6ICdBcnJheTxTdHJpbmc+JworICAgIC8vICAg
ICBzdHJ1Y3R1cmVzOiAnQXJyYXk8SlNPTjxTdHJ1Y3R1cmVTaGFwZT4+JworCisgICAgU3RyaW5n
QnVpbGRlciBqc29uOworICAgIGpzb24uYXBwZW5kKCJ7Iik7CisKKyAgICBqc29uLmFwcGVuZCgi
XCJkaXNwbGF5VHlwZU5hbWVcIjoiKTsKKyAgICBqc29uLmFwcGVuZCgiXCIiKTsKKyAgICBqc29u
LmFwcGVuZChkaXNwbGF5TmFtZSgpKTsKKyAgICBqc29uLmFwcGVuZCgiXCIiKTsKKyAgICBqc29u
LmFwcGVuZCgiLCIpOworCisgICAganNvbi5hcHBlbmQoIlwicHJpbWl0aXZlVHlwZU5hbWVzXCI6
Iik7CisgICAganNvbi5hcHBlbmQoIlsiKTsKKyAgICBib29sIGhhc0FuSXRlbSA9IGZhbHNlOwor
ICAgIGlmIChtX3NlZW5UeXBlcyAmIFR5cGVVbmRlZmluZWQpIHsKKyAgICAgICAgaGFzQW5JdGVt
ID0gdHJ1ZTsKKyAgICAgICAganNvbi5hcHBlbmQoIlwiVW5kZWZpbmVkXCIiKTsKKyAgICB9Cisg
ICAgaWYgKG1fc2VlblR5cGVzICYgVHlwZU51bGwpIHsKKyAgICAgICAgaWYgKGhhc0FuSXRlbSkK
KyAgICAgICAgICAgIGpzb24uYXBwZW5kKCIsIik7CisgICAgICAgIGhhc0FuSXRlbSA9IHRydWU7
CisgICAgICAgIGpzb24uYXBwZW5kKCJcIk51bGxcIiIpOworICAgIH0KKyAgICBpZiAobV9zZWVu
VHlwZXMgJiBUeXBlQm9vbGVhbikgeworICAgICAgICBpZiAoaGFzQW5JdGVtKQorICAgICAgICAg
ICAganNvbi5hcHBlbmQoIiwiKTsKKyAgICAgICAgaGFzQW5JdGVtID0gdHJ1ZTsKKyAgICAgICAg
anNvbi5hcHBlbmQoIlwiQm9vbGVhblwiIik7CisgICAgfQorICAgIGlmIChtX3NlZW5UeXBlcyAm
IFR5cGVNYWNoaW5lSW50KSB7CisgICAgICAgIGlmIChoYXNBbkl0ZW0pCisgICAgICAgICAgICBq
c29uLmFwcGVuZCgiLCIpOworICAgICAgICBoYXNBbkl0ZW0gPSB0cnVlOworICAgICAgICBqc29u
LmFwcGVuZCgiXCJJbnRlZ2VyXCIiKTsKKyAgICB9CisgICAgaWYgKG1fc2VlblR5cGVzICYgVHlw
ZU51bWJlcikgeworICAgICAgICBpZiAoaGFzQW5JdGVtKQorICAgICAgICAgICAganNvbi5hcHBl
bmQoIiwiKTsKKyAgICAgICAgaGFzQW5JdGVtID0gdHJ1ZTsKKyAgICAgICAganNvbi5hcHBlbmQo
IlwiTnVtYmVyXCIiKTsKKyAgICB9CisgICAgaWYgKG1fc2VlblR5cGVzICYgVHlwZVN0cmluZykg
eworICAgICAgICBpZiAoaGFzQW5JdGVtKQorICAgICAgICAgICAganNvbi5hcHBlbmQoIiwiKTsK
KyAgICAgICAgaGFzQW5JdGVtID0gdHJ1ZTsKKyAgICAgICAganNvbi5hcHBlbmQoIlwiU3RyaW5n
XCIiKTsKKyAgICB9CisgICAganNvbi5hcHBlbmQoIl0iKTsKKworICAgIGpzb24uYXBwZW5kKCIs
Iik7CisKKyAgICBqc29uLmFwcGVuZCgiXCJzdHJ1Y3R1cmVzXCI6Iik7CisgICAganNvbi5hcHBl
bmQoIlsiKTsKKyAgICBoYXNBbkl0ZW0gPSBmYWxzZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1fc3RydWN0dXJlSGlzdG9yeS5zaXplKCk7IGkrKykgeworICAgICAgICBpZiAoaGFzQW5J
dGVtKQorICAgICAgICAgICAganNvbi5hcHBlbmQoIiwiKTsKKyAgICAgICAgaGFzQW5JdGVtID0g
dHJ1ZTsKKyAgICAgICAganNvbi5hcHBlbmQobV9zdHJ1Y3R1cmVIaXN0b3J5W2ldLT50b0pTT05T
dHJpbmcoKSk7CisgICAgfQorICAgIGpzb24uYXBwZW5kKCJdIik7CisKKyAgICBqc29uLmFwcGVu
ZCgifSIpOworICAgIHJldHVybiBqc29uLnRvU3RyaW5nKCk7Cit9CisKIHZvaWQgVHlwZVNldDo6
ZHVtcFNlZW5UeXBlcygpCiB7CiAgICAgZGF0YUxvZyhzZWVuVHlwZXMoKSwgIlxuIik7CkBAIC0z
NjQsNiArNDM2LDQ5IEBAIFN0cmluZyBTdHJ1Y3R1cmVTaGFwZTo6c3RyaW5nUmVwcmVzZW50YXQK
ICAgICByZXR1cm4gcmVwcmVzZW50YXRpb24udG9TdHJpbmcoKTsKIH0KIAorU3RyaW5nIFN0cnVj
dHVyZVNoYXBlOjp0b0pTT05TdHJpbmcoKSBjb25zdAoreworICAgIC8vIFRoaXMgcmV0dXJucyBh
IEpTT04gc3RyaW5nIHJlcHJlc2VudGluZyBhbiBPYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHBy
b3BlcnRpZXM6CisgICAgLy8gICAgIGNvbnN0cnVjdG9yTmFtZTogJ1N0cmluZycKKyAgICAvLyAg
ICAgZmllbGRzOiAnQXJyYXk8U3RyaW5nPicKKyAgICAvLyAgICAgcHJvdG86ICdKU09OPFN0cnVj
dHVyZVNoYXBlPiB8IG51bGwnCisKKyAgICBTdHJpbmdCdWlsZGVyIGpzb247CisgICAganNvbi5h
cHBlbmQoInsiKTsKKworICAgIGpzb24uYXBwZW5kKCJcImNvbnN0cnVjdG9yTmFtZVwiOiIpOwor
ICAgIGpzb24uYXBwZW5kKCJcIiIpOworICAgIGpzb24uYXBwZW5kKG1fY29uc3RydWN0b3JOYW1l
KTsKKyAgICBqc29uLmFwcGVuZCgiXCIiKTsKKyAgICBqc29uLmFwcGVuZCgiLCIpOworCisgICAg
anNvbi5hcHBlbmQoIlwiZmllbGRzXCI6Iik7CisgICAganNvbi5hcHBlbmQoIlsiKTsKKyAgICBi
b29sIGhhc0FuSXRlbSA9IGZhbHNlOworICAgIGZvciAoYXV0byBpdCA9IG1fZmllbGRzLmJlZ2lu
KCksIGVuZCA9IG1fZmllbGRzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgaWYg
KGhhc0FuSXRlbSkKKyAgICAgICAgICAgIGpzb24uYXBwZW5kKCIsIik7CisgICAgICAgIGhhc0Fu
SXRlbSA9IHRydWU7CisKKyAgICAgICAgU3RyaW5nIGZpZWxkTmFtZSgoKml0KS5nZXQoKSk7Cisg
ICAgICAgIGpzb24uYXBwZW5kKCJcIiIpOworICAgICAgICBqc29uLmFwcGVuZChmaWVsZE5hbWUp
OworICAgICAgICBqc29uLmFwcGVuZCgiXCIiKTsKKyAgICB9CisgICAganNvbi5hcHBlbmQoIl0i
KTsKKyAgICBqc29uLmFwcGVuZCgiLCIpOworCisgICAganNvbi5hcHBlbmQoIlwicHJvdG9cIjoi
KTsKKyAgICBpZiAobV9wcm90bykKKyAgICAgICAganNvbi5hcHBlbmQobV9wcm90by0+dG9KU09O
U3RyaW5nKCkpOworICAgIGVsc2UKKyAgICAgICAganNvbi5hcHBlbmQoIm51bGwiKTsKKworICAg
IGpzb24uYXBwZW5kKCJ9Iik7CisKKyAgICByZXR1cm4ganNvbi50b1N0cmluZygpOworfQorCiBQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlN0cnVjdHVyZURlc2NyaXB0
aW9uPiBTdHJ1Y3R1cmVTaGFwZTo6aW5zcGVjdG9yUmVwcmVzZW50YXRpb24oKQogewogICAgIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpTdHJ1Y3R1cmVEZXNjcmlwdGlvbj4g
YmFzZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlN0cnVjdHVyZURlc2NyaXB0aW9u
OjpjcmVhdGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmgJ
KHJldmlzaW9uIDE3MzE3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVT
ZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNiArNzAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBt
YXJrQXNGaW5hbCgpOwogICAgIHZvaWQgYWRkUHJvcGVydHkoUmVmUHRyPFN0cmluZ0ltcGw+KTsK
ICAgICBTdHJpbmcgc3RyaW5nUmVwcmVzZW50YXRpb24oKTsKKyAgICBTdHJpbmcgdG9KU09OU3Ry
aW5nKCkgY29uc3Q7CiAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1l
OjpTdHJ1Y3R1cmVEZXNjcmlwdGlvbj4gaW5zcGVjdG9yUmVwcmVzZW50YXRpb24oKTsKICAgICB2
b2lkIHNldENvbnN0cnVjdG9yTmFtZShTdHJpbmcgbmFtZSkgeyBtX2NvbnN0cnVjdG9yTmFtZSA9
IChuYW1lLmlzRW1wdHkoKSA/ICJPYmplY3QiIDogbmFtZSk7IH0KICAgICBTdHJpbmcgY29uc3Ry
dWN0b3JOYW1lKCkgeyByZXR1cm4gbV9jb25zdHJ1Y3Rvck5hbWU7IH0KQEAgLTk3LDYgKzk4LDcg
QEAgcHVibGljOgogICAgIFN0cmluZyBkaXNwbGF5TmFtZSgpIGNvbnN0OwogICAgIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gYWxsUHJpbWl0aXZlVHlwZU5h
bWVzKCkgY29uc3Q7CiAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJ
bnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpTdHJ1Y3R1cmVEZXNjcmlwdGlvbj4+IGFsbFN0
cnVjdHVyZVJlcHJlc2VudGF0aW9ucygpIGNvbnN0OworICAgIFN0cmluZyB0b0pTT05TdHJpbmco
KSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBTdHJpbmcgbGVhc3RDb21tb25BbmNlc3RvcigpIGNv
bnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3R5cGVQcm9maWxlci55YW1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy90eXBlUHJvZmlsZXIu
eWFtbAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy90eXBlUHJv
ZmlsZXIueWFtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI1IEBACisjIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorIyAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorIyBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworIyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorIyBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyMgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworLSBwYXRoOiB0eXBlUHJvZmlsZXIKKyAgY21kOiBydW5UeXBl
UHJvZmlsZXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy90eXBlUHJvZmlsZXIv
YmFzaWMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3R5cGVQ
cm9maWxlci9iYXNpYy5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0cy90eXBlUHJvZmlsZXIvYmFzaWMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBA
QAorbG9hZCgiLi9kcml2ZXIvZHJpdmVyLmpzIik7CisKK2Z1bmN0aW9uIHdyYXBwZXIoKSB7CisK
K2Z1bmN0aW9uIGZvbyhiYXIpe30KK2ZvbygyMCk7Citmb28oMjAuNSk7CisKK3ZhciB0ZXN0ID0g
e3g6MjAsIHk6NTB9OwordGVzdCA9ICJoZWxsbyI7CisKK30KK3dyYXBwZXIoKTsKKworLy8gPT09
PT09IEVuZCB0ZXN0IGNhc2VzID09PT09PQorCisvLyBhcmdzIGZvciB0eXBlSlNPTlN0cmluZ0Zv
ckV4cHJlc3Npb25BdE9mZnNldCA9PiBmdW5jdGlvbiwgc3Vic3RyaW5nLCBzZWFyY2ggZGVzY3Jp
cHRvcgorLy8gc3Vic3RyaW5ncyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gdGhlIGdpdmVuIGZ1bmN0
aW9uIGFyZ3VtZW50LgorCisvLyB0eXBlcyBmb3IgYXJndW1lbnQgJ2JhcicgaW4gZnVuY3Rpb24g
J2ZvbycKK3ZhciB0eXBlcyA9IEpTT04ucGFyc2UoZmluZFR5cGVGb3JFeHByZXNzaW9uKHdyYXBw
ZXIsICJiYXIpIikpOyAKK2Fzc2VydCh0eXBlcy5pbnN0cnVjdGlvblR5cGVTZXQucHJpbWl0aXZl
VHlwZU5hbWVzLmluZGV4T2YoVC5JbnRlZ2VyKSAhPT0gLTEsICJQcmltaXRpdmUgdHlwZSBuYW1l
cyBzaG91bGQgY29udGFpbiAnSW50ZWdlciciKTsKK2Fzc2VydCh0eXBlcy5pbnN0cnVjdGlvblR5
cGVTZXQucHJpbWl0aXZlVHlwZU5hbWVzLmluZGV4T2YoVC5OdW1iZXIpICE9PSAtMSwgIlByaW1p
dGl2ZSB0eXBlIG5hbWVzIHNob3VsZCBjb250YWluICdOdW1iZXInIik7Cithc3NlcnQodHlwZXMu
aW5zdHJ1Y3Rpb25UeXBlU2V0LmRpc3BsYXlUeXBlTmFtZSA9PT0gVC5OdW1iZXIgLCAiUHJpbWl0
aXZlIHR5cGUgbmFtZXMgZGlzcGxheSBuYW1lIHNob3VsZCBiZSAnTnVtYmVyJyIpOworCisvLyB0
eXBlcyBmb3IgdmFyaWFibGUgJ3Rlc3QnIGF0IGluc3RydWN0aW9uOiAndGVzdCA9IHt4OjIwLCB5
OjUwfScKK3R5cGVzID0gSlNPTi5wYXJzZShmaW5kVHlwZUZvckV4cHJlc3Npb24od3JhcHBlciwg
InRlc3QgPSB7IikpOyAKK2Fzc2VydCh0eXBlcy5nbG9iYWxUeXBlU2V0LnByaW1pdGl2ZVR5cGVO
YW1lcy5pbmRleE9mKFQuU3RyaW5nKSAhPT0gLTEsICJWYXJpYWJsZSAndGVzdCcgc2hvdWxkIGhh
dmUgYmVlbiB0eXBlICdTdHJpbmcnIGdsb2JhbGx5Iik7Cithc3NlcnQodHlwZXMuaW5zdHJ1Y3Rp
b25UeXBlU2V0LnN0cnVjdHVyZXMubGVuZ3RoID09PSAxLCAiVmFyaWFibGUgJ3Rlc3QnIHNob3Vs
ZCBoYXZlIG9uZSBzdHJ1Y3R1cmUiKTsKK2Fzc2VydCh0eXBlcy5pbnN0cnVjdGlvblR5cGVTZXQu
c3RydWN0dXJlc1swXS5jb25zdHJ1Y3Rvck5hbWUgPT09ICJPYmplY3QiLCAidmFyaWFibGUgJ3Rl
c3QnIikKK2Fzc2VydCh0eXBlcy5pbnN0cnVjdGlvblR5cGVTZXQuc3RydWN0dXJlc1swXS5wcm90
by5jb25zdHJ1Y3Rvck5hbWUgPT09ICJPYmplY3QiLCAiVmFyaWFibGUgJ3Rlc3QnIHNob3VsZG4n
dCBoYXZlIGEgcHJvdG90eXBlIik7Cithc3NlcnQodHlwZXMuaW5zdHJ1Y3Rpb25UeXBlU2V0LnN0
cnVjdHVyZXNbMF0ucHJvdG8ucHJvdG8gPT09IG51bGwsICJWYXJpYWJsZSAndGVzdCcgc2hvdWxk
bid0IGhhdmUgYSBwcm90b3R5cGUiKTsKK2Fzc2VydCh0eXBlcy5pbnN0cnVjdGlvblR5cGVTZXQu
c3RydWN0dXJlc1swXS5jb25zdHJ1Y3Rvck5hbWUgPT09ICJPYmplY3QiLCAidmFyaWFibGUgJ3Rl
c3QnIHNob3VsZCBoYXZlIGNvbnN0cnVjdG9yIG5hbWUgJ09iamVjdCciKQorYXNzZXJ0KHR5cGVz
Lmdsb2JhbFR5cGVTZXQuZGlzcGxheVR5cGVOYW1lID09PSAiT2JqZWN0IiwgIlZhcmlhYmxlICd0
ZXN0JyBnbG9iYWwgdHlwZSBuYW1lIHNob3VsZCBkaXNwbGF5IGFzICdPYmplY3QnIik7Cithc3Nl
cnQodHlwZXMuaW5zdHJ1Y3Rpb25UeXBlU2V0LnN0cnVjdHVyZXNbMF0uZmllbGRzLmxlbmd0aCA9
PT0gMiwgInZhcmlhYmxlICd0ZXN0JyBzaG91bGQgaGF2ZSB0d28gZmllbGRzOiB4LHkiKTsKK2Fz
c2VydCh0eXBlcy5pbnN0cnVjdGlvblR5cGVTZXQuc3RydWN0dXJlc1swXS5maWVsZHMuaW5kZXhP
ZigieCIpICE9PSAtMSwgInZhcmlhYmxlICd0ZXN0JyBzaG91bGQgaGF2ZSBmaWVsZCAneCciKTsK
K2Fzc2VydCh0eXBlcy5pbnN0cnVjdGlvblR5cGVTZXQuc3RydWN0dXJlc1swXS5maWVsZHMuaW5k
ZXhPZigieSIpICE9PSAtMSwgInZhcmlhYmxlICd0ZXN0JyBzaG91bGQgaGF2ZSBmaWVsZCAneSci
KTsKKworLy8gdHlwZXMgZm9yIHZhcmlhYmxlICd0ZXN0JyBhdCBpbnN0cnVjdGlvbjogJ3Rlc3Qg
PSAiaGVsbG8iJwordHlwZXMgPSBKU09OLnBhcnNlKGZpbmRUeXBlRm9yRXhwcmVzc2lvbih3cmFw
cGVyLCAidGVzdCA9IFwiaCIpKTsKK2Fzc2VydCh0eXBlcy5nbG9iYWxUeXBlU2V0LnByaW1pdGl2
ZVR5cGVOYW1lcy5pbmRleE9mKFQuU3RyaW5nKSAhPT0gLTEsICJWYXJpYWJsZSAndGVzdCcgc2hv
dWxkIGhhdmUgYmVlbiB0eXBlICdTdHJpbmcnIGdsb2JhbGx5Iik7Cithc3NlcnQodHlwZXMuaW5z
dHJ1Y3Rpb25UeXBlU2V0LmRpc3BsYXlUeXBlTmFtZSA9PT0gVC5TdHJpbmcsICJWYXJpYWJsZSAn
dGVzdCcgc2hvdWxkIGhhdmUgYmVlbiBkaXNwbGF5IHR5cGUgJ1N0cmluZycgYXQgdGhpcyBpbnN0
cnVjdGlvbiIpOworYXNzZXJ0KHR5cGVzLmluc3RydWN0aW9uVHlwZVNldC5wcmltaXRpdmVUeXBl
TmFtZXMuaW5kZXhPZihULlN0cmluZykgIT09IC0xLCAiVmFyaWFibGUgJ3Rlc3QnIHNob3VsZCBo
YXZlIGJlZW4gdHlwZSAnU3RyaW5nJyBnbG9iYWxseSIpOworYXNzZXJ0KHR5cGVzLmluc3RydWN0
aW9uVHlwZVNldC5zdHJ1Y3R1cmVzLmxlbmd0aCA9PT0gMCwgIlZhcmlhYmxlICd0ZXN0JyBhdCB0
aGlzIGluc3RydWN0aW9uIHNob3VsZG4ndCBoYXZlIGEgc3RydWN0dXJlLiIpOworYXNzZXJ0KHR5
cGVzLmdsb2JhbFR5cGVTZXQuc3RydWN0dXJlcy5sZW5ndGggPT09IDEsICJWYXJpYWJsZSAndGVz
dCcgc2hvdWxkIHN0aWxsIGhhdmUgb25lIHN0cnVjdHVyZSIpOworYXNzZXJ0KHR5cGVzLmdsb2Jh
bFR5cGVTZXQuc3RydWN0dXJlc1swXS5maWVsZHMuaW5kZXhPZigieCIpICE9PSAtMSwgInZhcmlh
YmxlICd0ZXN0JyBzaG91bGQgaGF2ZSBmaWVsZCAneCcgZ2xvYmFsbHkiKTsKK2Fzc2VydCh0eXBl
cy5nbG9iYWxUeXBlU2V0LnN0cnVjdHVyZXNbMF0uZmllbGRzLmluZGV4T2YoInkiKSAhPT0gLTEs
ICJ2YXJpYWJsZSAndGVzdCcgc2hvdWxkIGhhdmUgZmllbGQgJ3knIGdsb2JhbGx5Iik7CisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy90eXBlUHJvZmlsZXIvY2FwdHVyZWQuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3R5cGVQcm9maWxlci9j
YXB0dXJlZC5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy90
eXBlUHJvZmlsZXIvY2FwdHVyZWQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNiBAQAor
bG9hZCgiLi9kcml2ZXIvZHJpdmVyLmpzIik7CisKK3ZhciBjaGFuZ2VGb287CitmdW5jdGlvbiB3
cmFwcGVyKCkgeworCit2YXIgZm9vPTIwOworY2hhbmdlRm9vID0gZnVuY3Rpb24oYXJnKSB7IGZv
byA9IGFyZzsgfQorCit9Cit3cmFwcGVyKCk7CisKKy8vID09PT09PSBFbmQgdGVzdCBjYXNlcyA9
PT09PT0KKworLy8gYXJncyBmb3IgdHlwZUpTT05TdHJpbmdGb3JFeHByZXNzaW9uQXRPZmZzZXQg
PT4gZnVuY3Rpb24sIHN1YnN0cmluZworLy8gc3Vic3RyaW5ncyBtdXN0IGJlIHVuaXF1ZSB3aXRo
aW4gdGhlIGdpdmVuIGZ1bmN0aW9uIGFyZ3VtZW50LgorCisvLyB0eXBlcyBmb3IgZm9vIGluc2lk
ZSB3cmFwcGVyCit2YXIgdHlwZXMgPSBKU09OLnBhcnNlKGZpbmRUeXBlRm9yRXhwcmVzc2lvbih3
cmFwcGVyLCAiZm9vPTIwOyIpKTsgCithc3NlcnQodHlwZXMuaW5zdHJ1Y3Rpb25UeXBlU2V0LnBy
aW1pdGl2ZVR5cGVOYW1lcy5pbmRleE9mKFQuSW50ZWdlcikgIT09IC0xLCAiUHJpbWl0aXZlIHR5
cGUgbmFtZXMgc2hvdWxkIGNvbnRhaW4gJ0ludGVnZXInIik7Cithc3NlcnQodHlwZXMuZ2xvYmFs
VHlwZVNldC5wcmltaXRpdmVUeXBlTmFtZXMuaW5kZXhPZihULkludGVnZXIpICE9PSAtMSwgIlBy
aW1pdGl2ZSB0eXBlIG5hbWVzIHNob3VsZCBjb250YWluICdJbnRlZ2VyJyIpOworYXNzZXJ0KHR5
cGVzLmdsb2JhbFR5cGVTZXQucHJpbWl0aXZlVHlwZU5hbWVzLmxlbmd0aCA9PT0gMSwgIlByaW1p
dGl2ZSB0eXBlIG5hbWVzIHNob3VsZCBjb250YWluIGV4YWN0bHkgb25seSBvbmUgaXRlbSBnbG9i
YWxseSIpOworYXNzZXJ0KHR5cGVzLmluc3RydWN0aW9uVHlwZVNldC5wcmltaXRpdmVUeXBlTmFt
ZXMubGVuZ3RoID09PSAxLCAiUHJpbWl0aXZlIHR5cGUgbmFtZXMgc2hvdWxkIGNvbnRhaW4gZXhh
Y3RseSBvbmx5IG9uZSBpdGVtIG9uIHRoZSBpbnN0cnVjdGlvbiIpOworYXNzZXJ0KHR5cGVzLmds
b2JhbFR5cGVTZXQuZGlzcGxheVR5cGVOYW1lID09PSBULkludGVnZXIsICJnbG9iYWwgZGlzcGxh
eSBuYW1lIHNob3VsZCBiZSBJbnRlZ2VyIik7Cithc3NlcnQodHlwZXMuaW5zdHJ1Y3Rpb25UeXBl
U2V0LmRpc3BsYXlUeXBlTmFtZSA9PT0gVC5JbnRlZ2VyLCAiaW5zdHJ1Y3Rpb24gZGlzcGxheSBu
YW1lIHNob3VsZCBiZSBJbnRlZ2VyIik7CisKK2NoYW5nZUZvbygyMC41KTsKK3R5cGVzID0gSlNP
Ti5wYXJzZShmaW5kVHlwZUZvckV4cHJlc3Npb24od3JhcHBlciwgImZvbz0yMDsiKSk7IAorYXNz
ZXJ0KHR5cGVzLmluc3RydWN0aW9uVHlwZVNldC5wcmltaXRpdmVUeXBlTmFtZXMuaW5kZXhPZihU
LkludGVnZXIpICE9PSAtMSwgIlByaW1pdGl2ZSB0eXBlIG5hbWVzIHNob3VsZCBjb250YWluICdJ
bnRlZ2VyJyIpOworYXNzZXJ0KHR5cGVzLmluc3RydWN0aW9uVHlwZVNldC5wcmltaXRpdmVUeXBl
TmFtZXMubGVuZ3RoID09PSAxLCAiUHJpbWl0aXZlIHR5cGUgbmFtZXMgc2hvdWxkIGNvbnRhaW4g
U1RJTEwgb25seSBjb250YWluIGV4YWN0bHkgb25lIGl0ZW0gb24gdGhlIGluc3RydWN0aW9uIik7
Cithc3NlcnQodHlwZXMuZ2xvYmFsVHlwZVNldC5wcmltaXRpdmVUeXBlTmFtZXMuaW5kZXhPZihU
LkludGVnZXIpICE9PSAtMSwgIkdsb2JhbCBwcmltaXRpdmUgdHlwZSBuYW1lcyBzaG91bGQgbm93
IHN0aWxsIGNvbnRhaW4gJ0ludGVnZXInIik7Cithc3NlcnQodHlwZXMuZ2xvYmFsVHlwZVNldC5w
cmltaXRpdmVUeXBlTmFtZXMuaW5kZXhPZihULk51bWJlcikgIT09IC0xLCAiR2xvYmFsIHByaW1p
dGl2ZSB0eXBlIG5hbWVzIHNob3VsZCBub3cgY29udGFpbiAnTnVtYmVyJyIpOworYXNzZXJ0KHR5
cGVzLmdsb2JhbFR5cGVTZXQucHJpbWl0aXZlVHlwZU5hbWVzLmxlbmd0aCA9PT0gMiwgIkdsb2Jh
bCBwcmltaXRpdmUgdHlwZSBuYW1lcyBzaG91bGQgY29udGFpbiBleGFjdGx5IHR3byBpdGVtcyBn
bG9iYWxseSIpOworYXNzZXJ0KHR5cGVzLmdsb2JhbFR5cGVTZXQuZGlzcGxheVR5cGVOYW1lID09
PSBULk51bWJlciwgImdsb2JhbCBkaXNwbGF5IG5hbWUgc2hvdWxkIGJlIE51bWJlciIpOworCitj
aGFuZ2VGb28obnVsbCk7CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy90eXBl
UHJvZmlsZXIvaW5oZXJpdGFuY2UuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3R5cGVQcm9maWxlci9pbmhlcml0YW5jZS5qcwkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy90eXBlUHJvZmlsZXIvaW5oZXJpdGFuY2UuanMJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw2NSBAQAorbG9hZCgiLi9kcml2ZXIvZHJpdmVyLmpzIik7
CisKK2Z1bmN0aW9uIHdyYXBwZXIoKQoreworCit2YXIgdGhlQSA9IG5ldyBBOwordmFyIHRoZUIg
PSBuZXcgQjsKK3ZhciB0aGVDID0gbmV3IEM7Cit2YXIgaGllcmFyY2h5VGVzdCA9IG5ldyBCOwor
aGllcmFyY2h5VGVzdCA9IG5ldyBDOworCit2YXIgc2Vjb25kSGllcmFyY2h5VGVzdCA9IE9iamVj
dC5jcmVhdGUodGhlQik7CitzZWNvbmRIaWVyYXJjaHlUZXN0ID0gT2JqZWN0LmNyZWF0ZSh0aGVD
KTsKKwordmFyIHNlY29uZEIgPSBPYmplY3QuY3JlYXRlKHRoZUIpOworCitmdW5jdGlvbiBBKCkg
eyB9OworZnVuY3Rpb24gQigpIHsgfTsgQi5wcm90b3R5cGUuX19wcm90b19fID0gQS5wcm90b3R5
cGU7CitmdW5jdGlvbiBDKCkgeyB9OyBDLnByb3RvdHlwZS5fX3Byb3RvX18gPSBBLnByb3RvdHlw
ZTsKKworfQord3JhcHBlcigpOworCisvLyA9PT09PT0gRW5kIHRlc3QgY2FzZXMgPT09PT09CisK
Ky8vIGFyZ3MgZm9yIGZpbmRUeXBlRm9yRXhwcmVzc2lvbiA9PiBmdW5jdGlvbiwgc3Vic3RyaW5n
CisvLyBzdWJzdHJpbmdzIG11c3QgYmUgdW5pcXVlIHdpdGhpbiB0aGUgZ2l2ZW4gZnVuY3Rpb24g
YXJndW1lbnQuCisKKy8vIHR5cGVzIGZvciB2YXJpYWJsZSAndGhlQScKK3R5cGVzID0gSlNPTi5w
YXJzZShmaW5kVHlwZUZvckV4cHJlc3Npb24od3JhcHBlciwgInRoZUEgPSBuIikpOworYXNzZXJ0
KHR5cGVzLmdsb2JhbFR5cGVTZXQuZGlzcGxheVR5cGVOYW1lID09PSAiQSIsICJ2YXJpYWJsZSAn
dGhlQScgc2hvdWxkIGhhdmUgZGlzcGxheVR5cGVOYW1lICdBJyIpOworYXNzZXJ0KHR5cGVzLmlu
c3RydWN0aW9uVHlwZVNldC5kaXNwbGF5VHlwZU5hbWUgPT09ICJBIiwgInZhcmlhYmxlICd0aGVB
JyBzaG91bGQgaGF2ZSBkaXNwbGF5VHlwZU5hbWUgJ0EnIik7CisKKy8vIHR5cGVzIGZvciB2YXJp
YWJsZSAndGhlQicKK3R5cGVzID0gSlNPTi5wYXJzZShmaW5kVHlwZUZvckV4cHJlc3Npb24od3Jh
cHBlciwgInRoZUIgPSBuIikpOworYXNzZXJ0KHR5cGVzLmdsb2JhbFR5cGVTZXQuZGlzcGxheVR5
cGVOYW1lID09PSAiQiIsICJ2YXJpYWJsZSAndGhlQicgc2hvdWxkIGhhdmUgZGlzcGxheVR5cGVO
YW1lICdCJyIpOworYXNzZXJ0KHR5cGVzLmluc3RydWN0aW9uVHlwZVNldC5kaXNwbGF5VHlwZU5h
bWUgPT09ICJCIiwgInZhcmlhYmxlICd0aGVCJyBzaG91bGQgaGF2ZSBkaXNwbGF5VHlwZU5hbWUg
J0InIik7CisKKy8vIHR5cGVzIGZvciB2YXJpYWJsZSAndGhlQycKK3R5cGVzID0gSlNPTi5wYXJz
ZShmaW5kVHlwZUZvckV4cHJlc3Npb24od3JhcHBlciwgInRoZUMgPSBuIikpOworYXNzZXJ0KHR5
cGVzLmdsb2JhbFR5cGVTZXQuZGlzcGxheVR5cGVOYW1lID09PSAiQyIsICJ2YXJpYWJsZSAndGhl
Qycgc2hvdWxkIGhhdmUgZGlzcGxheVR5cGVOYW1lICdDJyIpOworYXNzZXJ0KHR5cGVzLmluc3Ry
dWN0aW9uVHlwZVNldC5kaXNwbGF5VHlwZU5hbWUgPT09ICJDIiwgInZhcmlhYmxlICd0aGVDJyBz
aG91bGQgaGF2ZSBkaXNwbGF5VHlwZU5hbWUgJ0MnIik7CisKKworLy8gdHlwZXMgZm9yIHZhcmlh
YmxlICdoaWVyYXJjaHlUZXN0JyBhdCBpbnN0cnVjdGlvbiAnaGllcmFyY2h5VGVzdCA9IG5ldyBC
OycKK3R5cGVzID0gSlNPTi5wYXJzZShmaW5kVHlwZUZvckV4cHJlc3Npb24od3JhcHBlciwgImhp
ZXJhcmNoeVRlc3QgPSBuZXcgQjsiKSk7Cithc3NlcnQodHlwZXMuZ2xvYmFsVHlwZVNldC5kaXNw
bGF5VHlwZU5hbWUgPT09ICJBIiwgInZhcmlhYmxlICdoaWVyYXJjaHlUZXN0JyBzaG91bGQgaGF2
ZSBkaXNwbGF5VHlwZU5hbWUgJ0EnIik7CisKKy8vIHR5cGVzIGZvciB2YXJpYWJsZSAnaGllcmFy
Y2h5VGVzdCcgYXQgaW5zdHJ1Y3Rpb24gJ2hpZXJhcmNoeVRlc3QgPSBuZXcgQzsnCit0eXBlcyA9
IEpTT04ucGFyc2UoZmluZFR5cGVGb3JFeHByZXNzaW9uKHdyYXBwZXIsICJoaWVyYXJjaHlUZXN0
ID0gbmV3IEM7IikpOworYXNzZXJ0KHR5cGVzLmdsb2JhbFR5cGVTZXQuZGlzcGxheVR5cGVOYW1l
ID09PSAiQSIsICJ2YXJpYWJsZSAnaGllcmFyY2h5VGVzdCcgc2hvdWxkIGhhdmUgZGlzcGxheVR5
cGVOYW1lICdBJyIpOworCisvLyB0eXBlcyBmb3IgdmFyaWFibGUgJ3NlY29uZEhpZXJhcmNoeVRl
c3QnIGF0IGluc3RydWN0aW9uICdzZWNvbmRIaWVyYXJjaHlUZXN0ID0gT2JqZWN0LmNyZWF0ZSh0
aGVCKScKK3R5cGVzID0gSlNPTi5wYXJzZShmaW5kVHlwZUZvckV4cHJlc3Npb24od3JhcHBlciwg
InNlY29uZEhpZXJhcmNoeVRlc3QgPSBPYmplY3QuY3JlYXRlKHRoZUIpOyIpKTsKK2Fzc2VydCh0
eXBlcy5nbG9iYWxUeXBlU2V0LmRpc3BsYXlUeXBlTmFtZSA9PT0gIkEiLCAidmFyaWFibGUgJ3Nl
Y29uZEhpZXJhcmNoeVRlc3QnIHNob3VsZCBoYXZlIGRpc3BsYXlUeXBlTmFtZSAnQSciKTsKKwor
Ly8gdHlwZXMgZm9yIHZhcmlhYmxlICdzZWNvbmRIaWVyYXJjaHlUZXN0JyBhdCBpbnN0cnVjdGlv
biAnc2Vjb25kSGllcmFyY2h5VGVzdCA9IE9iamVjdC5jcmVhdGUodGhlQyknCit0eXBlcyA9IEpT
T04ucGFyc2UoZmluZFR5cGVGb3JFeHByZXNzaW9uKHdyYXBwZXIsICJzZWNvbmRIaWVyYXJjaHlU
ZXN0ID0gT2JqZWN0LmNyZWF0ZSh0aGVDKTsiKSk7Cithc3NlcnQodHlwZXMuZ2xvYmFsVHlwZVNl
dC5kaXNwbGF5VHlwZU5hbWUgPT09ICJBIiwgInZhcmlhYmxlICdzZWNvbmRIaWVyYXJjaHlUZXN0
JyBzaG91bGQgaGF2ZSBkaXNwbGF5VHlwZU5hbWUgJ0EnIik7CisKKworLy8gdHlwZXMgZm9yIHZh
cmlhYmxlICdzZWNvbmRCJyBhdCBpbnN0cnVjdGlvbiAndmFyIHNlY29uZEIgPSBPYmplY3QuY3Jl
YXRlKHRoZUIpJwordHlwZXMgPSBKU09OLnBhcnNlKGZpbmRUeXBlRm9yRXhwcmVzc2lvbih3cmFw
cGVyLCAic2Vjb25kQiIpKTsKK2Fzc2VydCh0eXBlcy5nbG9iYWxUeXBlU2V0LmRpc3BsYXlUeXBl
TmFtZSA9PT0gIkIiLCAidmFyaWFibGUgJ3NlY29uZEInIHNob3VsZCBoYXZlIGRpc3BsYXlUeXBl
TmFtZSAnQiciKTsKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3R5cGVQcm9m
aWxlci9yZXR1cm4uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3Rz
L3R5cGVQcm9maWxlci9yZXR1cm4uanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvdHlwZVByb2ZpbGVyL3JldHVybi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQxIEBACitsb2FkKCIuL2RyaXZlci9kcml2ZXIuanMiKTsKKworZnVuY3Rpb24gZm9vKHgp
IHsgcmV0dXJuIHg7IH0KK2Z1bmN0aW9uIEN0b3IoKSB7IAorICAgIGlmICghKHRoaXMgaW5zdGFu
Y2VvZiBDdG9yKSkKKyAgICAgICAgcmV0dXJuICJOb3QgY2FsbGVkIHdpdGggYG5ld2AiOyAKK30K
KworLy8gPT09PT09IEVuZCB0ZXN0IGNhc2VzID09PT09PQorCisvLyBhcmdzIGZvciBmaW5kVHlw
ZUZvckV4cHJlc3Npb24gPT4gZnVuY3Rpb24sIHN1YnN0cmluZworLy8gc3Vic3RyaW5ncyBtdXN0
IGJlIHVuaXF1ZSB3aXRoaW4gdGhlIGdpdmVuIGZ1bmN0aW9uIGFyZ3VtZW50LgorCitmb28oMjAp
OworLy8gUmV0dXJuIHR5cGUgZm9yIGZ1bmN0aW9uIGZvbwordmFyIHR5cGVzID0gSlNPTi5wYXJz
ZShyZXR1cm5UeXBlRm9yKGZvbykpOworYXNzZXJ0KHR5cGVzLmdsb2JhbFR5cGVTZXQuZGlzcGxh
eVR5cGVOYW1lID09PSBULkludGVnZXIsICJGdW5jdGlvbiAnZm9vJyBzaG91bGQgcmV0dXJuICdJ
bnRlZ2VyJyIpOworCitmb28oMjAuNSk7CisvLyBSZXR1cm4gdHlwZSBmb3IgZnVuY3Rpb24gZm9v
Cit0eXBlcyA9IEpTT04ucGFyc2UocmV0dXJuVHlwZUZvcihmb28pKTsKK2Fzc2VydCh0eXBlcy5n
bG9iYWxUeXBlU2V0LmRpc3BsYXlUeXBlTmFtZSA9PT0gVC5OdW1iZXIsICJGdW5jdGlvbiAnZm9v
JyBzaG91bGQgcmV0dXJuICdOdW1iZXInIGFmdGVyIGJlaW5nIGNhbGxlZCB0d2ljZSIpOworCitm
b28oImhlbGxvIik7CisvLyBSZXR1cm4gdHlwZSBmb3IgZnVuY3Rpb24gZm9vCit0eXBlcyA9IEpT
T04ucGFyc2UocmV0dXJuVHlwZUZvcihmb28pKTsKK2Fzc2VydCh0eXBlcy5nbG9iYWxUeXBlU2V0
LmRpc3BsYXlUeXBlTmFtZSA9PT0gVC5NYW55LCAiRnVuY3Rpb24gJ2Zvbycgc2hvdWxkIHJldHVy
biAnKG1hbnkpJyBhZnRlciBiZWluZyBjYWxsZWQgdGhyZWUgdGltZXMiKTsKK2Fzc2VydCh0eXBl
cy5nbG9iYWxUeXBlU2V0LnByaW1pdGl2ZVR5cGVOYW1lcy5pbmRleE9mKFQuU3RyaW5nKSAhPT0g
LTEsICJGdW5jdGlvbiAnZm9vJyBzaG91bGQgaGF2ZSByZXR1cm5lZCAnU3RyaW5nJyBhdCBzb21l
IHBvaW50Iik7Cithc3NlcnQodHlwZXMuZ2xvYmFsVHlwZVNldC5wcmltaXRpdmVUeXBlTmFtZXMu
aW5kZXhPZihULkludGVnZXIpICE9PSAtMSwgIkZ1bmN0aW9uICdmb28nIHNob3VsZCBoYXZlIHJl
dHVybmVkICdJbnRlZ2VyJyBhdCBzb21lIHBvaW50Iik7Cithc3NlcnQodHlwZXMuZ2xvYmFsVHlw
ZVNldC5wcmltaXRpdmVUeXBlTmFtZXMuaW5kZXhPZihULk51bWJlcikgIT09IC0xLCAiRnVuY3Rp
b24gJ2Zvbycgc2hvdWxkIGhhdmUgcmV0dXJuZWQgJ051bWJlcicgYXQgc29tZSBwb2ludCIpOwor
CituZXcgQ3RvcjsKK3R5cGVzID0gSlNPTi5wYXJzZShyZXR1cm5UeXBlRm9yKEN0b3IpKTsKK2Fz
c2VydCh0eXBlcy5nbG9iYWxUeXBlU2V0LmRpc3BsYXlUeXBlTmFtZSA9PT0gIkN0b3IiLCAiRnVu
Y3Rpb24gJ0N0b3InIHNob3VsZCByZXR1cm4gJ0N0b3InIik7Cithc3NlcnQodHlwZXMuZ2xvYmFs
VHlwZVNldC5zdHJ1Y3R1cmVzLmxlbmd0aCA9PT0gMSwgIkZ1bmN0aW9uICdDdG9yJyBzaG91bGQg
aGF2ZSBzZWVuIG9uZSBzdHJ1Y3R1cmUiKTsKKworQ3RvcigpOwordHlwZXMgPSBKU09OLnBhcnNl
KHJldHVyblR5cGVGb3IoQ3RvcikpOworYXNzZXJ0KHR5cGVzLmdsb2JhbFR5cGVTZXQuZGlzcGxh
eVR5cGVOYW1lID09PSAiT2JqZWN0IiwgIkZ1bmN0aW9uICdDdG9yJyBzaG91bGQgcmV0dXJuIE9i
amVjdCIpOworYXNzZXJ0KHR5cGVzLmdsb2JhbFR5cGVTZXQucHJpbWl0aXZlVHlwZU5hbWVzLmlu
ZGV4T2YoVC5TdHJpbmcpICE9PSAtMSwgIkZ1bmN0aW9uICdDdG9yJyBzaG91bGQgcmV0dXJuIFN0
cmluZyIpOworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvdHlwZVByb2ZpbGVy
L2RyaXZlci9kcml2ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL3R5cGVQcm9maWxlci9kcml2ZXIvZHJpdmVyLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3R5cGVQcm9maWxlci9kcml2ZXIvZHJpdmVyLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMjMgQEAKKy8vIFR5cGVzIG1hdGNoaW5nIHRob3NlIGluIHJ1
bnRpbWUvVHlwZVNldAordmFyIFQgPSB7CisgICAgQm9vbGVhbjoiQm9vbGVhbiIsCisgICAgSW50
ZWdlcjogIkludGVnZXIiLAorICAgIE51bGw6ICJOdWxsIiwKKyAgICBOdW1iZXI6ICJOdW1iZXIi
LAorICAgIE1hbnk6ICIobWFueSkiLAorICAgIFN0cmluZzogIlN0cmluZyIsCisgICAgVW5kZWZp
bmVkOiAiVW5kZWZpbmVkIiwKKyAgICBVbmRlZmluZWRPck51bGw6ICIoPykiCit9OworCit2YXIg
VE9wdGlvbmFsID0geworICAgIEJvb2xlYW46IkJvb2xlYW4/IiwKKyAgICBJbnRlZ2VyOiAiSW50
ZWdlcj8iLAorICAgIE51bWJlcjogIk51bWJlcj8iLAorICAgIFN0cmluZzogIlN0cmluZz8iCit9
OworCitmdW5jdGlvbiBhc3NlcnQoY29uZGl0aW9uLCByZWFzb24pIHsKKyAgICBpZiAoIWNvbmRp
dGlvbikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKHJlYXNvbik7Cit9CkluZGV4OiBUb29scy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNzMxOTUp
CisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAx
NC0wOS0wMiAgU2FhbSBCYXJhdGkgIDxzYWFtYmFyYXRpMUBnbWFpbC5jb20+CisKKyAgICAgICAg
Q3JlYXRlIHRlc3RzIGZvciB0eXBlIHByb2ZpbGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2MTYxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgSGF2ZSBydW4tamF2YXNjcmlwdGNvcmUtdGVzdHMgcnVu
IHRoZSBuZXdseSBjcmVhdGVkCisgICAgICAgIHRlc3RzIGZvciB0aGUgdHlwZSBwcm9maWxlci4K
KworICAgICAgICAqIFNjcmlwdHMvcnVuLWphdmFzY3JpcHRjb3JlLXRlc3RzOgorICAgICAgICAq
IFNjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHM6CisKIDIwMTQtMDktMDIgIFNpbW9uIEZyYXNl
ciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSBzdXJlIFdLMSBwcmVm
cyBhcmUgaW5pdGlhbGl6ZWQgaW4gTWluaUJyb3dzZXIKSW5kZXg6IFRvb2xzL1NjcmlwdHMvcnVu
LWphdmFzY3JpcHRjb3JlLXRlc3RzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvcnVuLWph
dmFzY3JpcHRjb3JlLXRlc3RzCShyZXZpc2lvbiAxNzMxNzkpCisrKyBUb29scy9TY3JpcHRzL3J1
bi1qYXZhc2NyaXB0Y29yZS10ZXN0cwkod29ya2luZyBjb3B5KQpAQCAtMjQwLDcgKzI0MCw4IEBA
IGlmICgkcnVuSlNDU3RyZXNzKSB7CiAgICAgICAgICJTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvc3RyZXNzIiwKICAgICAgICAgIkxheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3Rz
IiwKICAgICAgICAgIlBlcmZvcm1hbmNlVGVzdHMvU3VuU3BpZGVyL3Byb2ZpbGVyLXRlc3QueWFt
bCIsCi0gICAgICAgICJMYXlvdXRUZXN0cy9qc2MtbGF5b3V0LXRlc3RzLnlhbWwiCisgICAgICAg
ICJMYXlvdXRUZXN0cy9qc2MtbGF5b3V0LXRlc3RzLnlhbWwiLAorICAgICAgICAiU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3R5cGVQcm9maWxlci55YW1sIgogICAgICk7CiAgICAgaWYgKCRl
bmFibGVGVEwpIHsKICAgICAgICAgcHVzaChAanNjU3RyZXNzRHJpdmVyQ21kLCAiLS1mdGwtaml0
Iik7CkluZGV4OiBUb29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMJKHJldmlzaW9uIDE3MzE3OSkK
KysrIFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMJKHdvcmtpbmcgY29weSkKQEAg
LTcwOCw2ICs3MDgsMTQgQEAgZGVmIHJ1bkV4Y2VwdGlvbkZ1enoKICAgICBhZGRSdW5Db21tYW5k
KCJleGNlcHRpb24tZnV6eiIsIFsicGVybCIsIChwYXRoVG9IZWxwZXJzICsgImpzLWV4Y2VwdGlv
bi1mdXp6IikudG9fcywgc3ViQ29tbWFuZF0sIHNpbGVudE91dHB1dEhhbmRsZXIsIHNpbXBsZUVy
cm9ySGFuZGxlcikKIGVuZAogCitkZWYgcnVuVHlwZVByb2ZpbGVyCisgICAgaWYgJGVuYWJsZUZU
TAorICAgICAgICBydW4oImZ0bC1uby1jaml0LXR5cGUtcHJvZmlsZXIiLCAiLS1lbmFibGVUeXBl
UHJvZmlsZXI9dHJ1ZSIsICooRlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMpKQorICAgIGVs
c2UKKyAgICAgICBydW4oIm5vLWNqaXQtdHlwZS1wcm9maWxlciIsICItLWVuYWJsZVR5cGVQcm9m
aWxlcj10cnVlIiwgKk5PX0NKSVRfT1BUSU9OUykKKyAgICBlbmQKK2VuZAorCiBkZWYgcnVuTGF5
b3V0VGVzdChraW5kLCAqb3B0aW9ucykKICAgICByYWlzZSB1bmxlc3MgJGJlbmNobWFyay50b19z
ID1+IC9cLmpzJC8KICAgICB0ZXN0TmFtZSA9ICR+LnByZV9tYXRjaAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237569</attachid>
            <date>2014-09-03 12:27:43 -0700</date>
            <delta_ts>2014-09-03 13:40:26 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>28390</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTczMjE0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU0IEBA
CisyMDE0LTA5LTAzICBTYWFtIEJhcmF0aSAgPHNhYW1iYXJhdGkxQGdtYWlsLmNvbT4KKworICAg
ICAgICBDcmVhdGUgdGVzdHMgZm9yIHR5cGUgcHJvZmlsaW5nCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzYxNjEKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgdHlwZSBwcm9maWxlciBpcyBub3cgYmVp
bmcgdGVzdGVkLiBUaGVzZSBhcmUgYmFzaWMgdGVzdHMgdGhhdCBkb24ndCAKKyAgICAgICAgY2hl
Y2sgZXZlcnkgZWRnZSBjYXNlLCBidXQgd2lsbCBjYXRjaCBhbnkgbWFqb3IgZmFpbHVyZXMgaW4g
dGhlIHR5cGUgcHJvZmlsZXIuIAorICAgICAgICBUaGVzZSB0ZXN0cyBjb3ZlcjoKKyAgICAgICAg
LSBUaGUgYmFzaWMsIGluaGVyaXRhbmNlLWJhc2VkIHR5cGUgc3lzdGVtIGluIFR5cGVTZXQuCisg
ICAgICAgIC0gRnVuY3Rpb24gcmV0dXJuIHR5cGVzLgorICAgICAgICAtIENvcnJlY3QgbWVyZ2lu
ZyBvZiB0eXBlcyBmb3IgbXVsdGlwbGUgYXNzaWdubWVudHMgdG8gb25lIHZhcmlhYmxlLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBwcm92aWRlcyBhbiBBUEkgZm9yIHdyaXRpbmcgbmV3IHRl
c3RzIGZvcgorICAgICAgICB0aGUgdHlwZSBwcm9maWxlci4gVGhlIEFQSSB3b3JrcyBieSBwYXNz
aW5nIGluIGEgZnVuY3Rpb24gYW5kIGEgCisgICAgICAgIHVuaXF1ZSBzdWJzdHJpbmcgb2YgYW4g
ZXhwcmVzc2lvbiBjb250YWluZWQgaW4gdGhhdCBmdW5jdGlvbiwgYW5kIAorICAgICAgICByZXR1
cm5zIGFuIG9iamVjdCByZXByZXNlbnRpbmcgdHlwZSBpbmZvcm1hdGlvbiBmb3IgdGhhdCBleHBy
ZXNzaW9uLgorCisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKEdsb2JhbE9iamVjdDo6Zmlu
aXNoQ3JlYXRpb24pOgorICAgICAgICAoZnVuY3Rpb25GaW5kVHlwZUZvckV4cHJlc3Npb24pOgor
ICAgICAgICAoZnVuY3Rpb25SZXR1cm5UeXBlRm9yKToKKyAgICAgICAgKiBydW50aW1lL1R5cGVQ
cm9maWxlci5jcHA6CisgICAgICAgIChKU0M6OlR5cGVQcm9maWxlcjo6dHlwZUluZm9ybWF0aW9u
Rm9yRXhwcmVzc2lvbkF0T2Zmc2V0KToKKyAgICAgICAgKiBydW50aW1lL1R5cGVQcm9maWxlci5o
OgorICAgICAgICAqIHJ1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmg6CisgICAgICAgICogcnVudGlt
ZS9UeXBlU2V0LmNwcDoKKyAgICAgICAgKEpTQzo6VHlwZVNldDo6dG9KU09OU3RyaW5nKToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlU2hhcGU6OnRvSlNPTlN0cmluZyk6CisgICAgICAgICogcnVu
dGltZS9UeXBlU2V0Lmg6CisgICAgICAgICogdGVzdHMvdHlwZVByb2ZpbGVyOiBBZGRlZC4KKyAg
ICAgICAgKiB0ZXN0cy90eXBlUHJvZmlsZXIueWFtbDogQWRkZWQuCisgICAgICAgICogdGVzdHMv
dHlwZVByb2ZpbGVyL2Jhc2ljLmpzOiBBZGRlZC4KKyAgICAgICAgKHdyYXBwZXIuZm9vKToKKyAg
ICAgICAgKHdyYXBwZXIpOgorICAgICAgICAqIHRlc3RzL3R5cGVQcm9maWxlci9jYXB0dXJlZC5q
czogQWRkZWQuCisgICAgICAgICh3cmFwcGVyLmNoYW5nZUZvbyk6CisgICAgICAgICh3cmFwcGVy
KToKKyAgICAgICAgKiB0ZXN0cy90eXBlUHJvZmlsZXIvZHJpdmVyOiBBZGRlZC4KKyAgICAgICAg
KiB0ZXN0cy90eXBlUHJvZmlsZXIvZHJpdmVyL2RyaXZlci5qczogQWRkZWQuCisgICAgICAgIChh
c3NlcnQpOgorICAgICAgICAqIHRlc3RzL3R5cGVQcm9maWxlci9pbmhlcml0YW5jZS5qczogQWRk
ZWQuCisgICAgICAgICh3cmFwcGVyLkEpOgorICAgICAgICAod3JhcHBlci5CKToKKyAgICAgICAg
KHdyYXBwZXIuQyk6CisgICAgICAgICh3cmFwcGVyKToKKyAgICAgICAgKiB0ZXN0cy90eXBlUHJv
ZmlsZXIvcmV0dXJuLmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisgICAgICAgIChDdG9yKToK
KwogMjAxNC0wOS0wMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAg
IENhbGxFZGdlUHJvZmlsZTo6dmlzaXRXZWFrKCkgc2hvdWxkIGdyYWNlZnVsbHkgaGFuZGxlIHRo
ZSBjYXNlIHdoZXJlIHByaW1hcnlDYWxsZWUgZHVwbGljYXRlcyBhbiBlbnRyeSBpbiBvdGhlckNh
bGxlZXMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAxNzMyMTQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBA
QAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5j
bHVkZSAiSlNMb2NrLmgiCisjaW5jbHVkZSAiSlNPTk9iamVjdC5oIgogI2luY2x1ZGUgIkpTUHJv
eHkuaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIlByb2ZpbGVyRGF0YWJhc2Uu
aCIKQEAgLTQ1LDYgKzQ2LDcgQEAKICNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVGVzdFJ1bm5lclV0
aWxzLmgiCisjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCiAjaW5jbHVkZSA8bWF0aC5oPgog
I2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CkBAIC00NzYsNyArNDc4LDkg
QEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25JZGVudGl0eShFeGVjU3RhdGUqKTsKIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTWFrZU1hc3F1ZXJhZGVy
KEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25IYXNDdXN0b21Qcm9wZXJ0aWVzKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25EdW1wVHlwZXNGb3JBbGxWYXJpYWJsZXMgKEV4ZWNTdGF0
ZSopOworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25EdW1wVHlw
ZXNGb3JBbGxWYXJpYWJsZXMoRXhlY1N0YXRlKik7CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvbkZpbmRUeXBlRm9yRXhwcmVzc2lvbihFeGVjU3RhdGUqKTsKK3N0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUmV0dXJuVHlwZUZvcihF
eGVjU3RhdGUqKTsKIAogI2lmIEVOQUJMRShTQU1QTElOR19GTEFHUykKIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2V0U2FtcGxpbmdGbGFncyhFeGVjU3RhdGUq
KTsKQEAgLTYyNyw3ICs2MzEsMTAgQEAgcHJvdGVjdGVkOgogCiAgICAgICAgIGFkZEZ1bmN0aW9u
KHZtLCAiY3JlYXRlSW1wdXJlR2V0dGVyIiwgZnVuY3Rpb25DcmVhdGVJbXB1cmVHZXR0ZXIsIDEp
OwogICAgICAgICBhZGRGdW5jdGlvbih2bSwgInNldEltcHVyZUdldHRlckRlbGVnYXRlIiwgZnVu
Y3Rpb25TZXRJbXB1cmVHZXR0ZXJEZWxlZ2F0ZSwgMik7Ci0gICAgICAgIGFkZEZ1bmN0aW9uKHZt
LCAiZHVtcFR5cGVzRm9yQWxsVmFyaWFibGVzIiwgZnVuY3Rpb25EdW1wVHlwZXNGb3JBbGxWYXJp
YWJsZXMgLCA0KTsKKworICAgICAgICBhZGRGdW5jdGlvbih2bSwgImR1bXBUeXBlc0ZvckFsbFZh
cmlhYmxlcyIsIGZ1bmN0aW9uRHVtcFR5cGVzRm9yQWxsVmFyaWFibGVzICwgMCk7CisgICAgICAg
IGFkZEZ1bmN0aW9uKHZtLCAiZmluZFR5cGVGb3JFeHByZXNzaW9uIiwgZnVuY3Rpb25GaW5kVHlw
ZUZvckV4cHJlc3Npb24sIDIpOworICAgICAgICBhZGRGdW5jdGlvbih2bSwgInJldHVyblR5cGVG
b3IiLCBmdW5jdGlvblJldHVyblR5cGVGb3IsIDEpOwogICAgICAgICAKICAgICAgICAgSlNBcnJh
eSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGdsb2JhbEV4ZWMoKSwgMCk7CiAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJndW1lbnRzLnNpemUoKTsgKytpKQpAQCAtMTA2NSw2
ICsxMDcyLDM4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25EdW0KICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCitFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRmluZFR5cGVGb3JFeHByZXNzaW9uKEV4ZWNTdGF0
ZSogZXhlYykKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChleGVjLT52bSgpLnR5cGVQcm9maWxlcigp
KTsKKyAgICBleGVjLT52bSgpLnR5cGVQcm9maWxlckxvZygpLT5wcm9jZXNzTG9nRW50cmllcyhB
U0NJSUxpdGVyYWwoImpzYyBUZXN0aW5nIEFQSTogZnVuY3Rpb25GaW5kVHlwZUZvckV4cHJlc3Np
b24iKSk7CisKKyAgICBKU1ZhbHVlIGZ1bmN0aW9uVmFsdWUgPSBleGVjLT5hcmd1bWVudCgwKTsK
KyAgICBSRUxFQVNFX0FTU0VSVChmdW5jdGlvblZhbHVlLmlzRnVuY3Rpb24oKSk7CisgICAgRnVu
Y3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gKGpzRHluYW1pY0Nhc3Q8SlNGdW5jdGlvbio+
KGZ1bmN0aW9uVmFsdWUuYXNDZWxsKCktPmdldE9iamVjdCgpKSktPmpzRXhlY3V0YWJsZSgpOwor
CisgICAgUkVMRUFTRV9BU1NFUlQoZXhlYy0+YXJndW1lbnQoMSkuaXNTdHJpbmcoKSk7CisgICAg
U3RyaW5nIHN1YnN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50KDEpLmdldFN0cmluZyhleGVjKTsKKyAg
ICBTdHJpbmcgc291cmNlQ29kZVRleHQgPSBleGVjdXRhYmxlLT5zb3VyY2UoKS50b1N0cmluZygp
OworICAgIHVuc2lnbmVkIG9mZnNldCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzb3VyY2VDb2Rl
VGV4dC5maW5kKHN1YnN0cmluZykgKyBleGVjdXRhYmxlLT5zb3VyY2UoKS5zdGFydE9mZnNldCgp
KTsKKyAgICAKKyAgICBTdHJpbmcganNvblN0cmluZyA9IGV4ZWMtPnZtKCkudHlwZVByb2ZpbGVy
KCktPnR5cGVJbmZvcm1hdGlvbkZvckV4cHJlc3Npb25BdE9mZnNldChUeXBlUHJvZmlsZXJTZWFy
Y2hEZXNjcmlwdG9yTm9ybWFsLCBvZmZzZXQsIGV4ZWN1dGFibGUtPnNvdXJjZUlEKCkpOworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNPTlBhcnNlKGV4ZWMsIGpzb25TdHJpbmcpKTsKK30K
KworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJldHVyblR5cGVGb3IoRXhl
Y1N0YXRlKiBleGVjKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZtKCkudHlwZVByb2Zp
bGVyKCkpOworICAgIGV4ZWMtPnZtKCkudHlwZVByb2ZpbGVyTG9nKCktPnByb2Nlc3NMb2dFbnRy
aWVzKEFTQ0lJTGl0ZXJhbCgianNjIFRlc3RpbmcgQVBJOiBmdW5jdGlvblJldHVyblR5cGVGb3Ii
KSk7CisKKyAgICBKU1ZhbHVlIGZ1bmN0aW9uVmFsdWUgPSBleGVjLT5hcmd1bWVudCgwKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVChmdW5jdGlvblZhbHVlLmlzRnVuY3Rpb24oKSk7CisgICAgRnVuY3Rp
b25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gKGpzRHluYW1pY0Nhc3Q8SlNGdW5jdGlvbio+KGZ1
bmN0aW9uVmFsdWUuYXNDZWxsKCktPmdldE9iamVjdCgpKSktPmpzRXhlY3V0YWJsZSgpOworCisg
ICAgdW5zaWduZWQgb2Zmc2V0ID0gZXhlY3V0YWJsZS0+c291cmNlKCkuc3RhcnRPZmZzZXQoKTsK
KyAgICBTdHJpbmcganNvblN0cmluZyA9IGV4ZWMtPnZtKCkudHlwZVByb2ZpbGVyKCktPnR5cGVJ
bmZvcm1hdGlvbkZvckV4cHJlc3Npb25BdE9mZnNldChUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlw
dG9yRnVuY3Rpb25SZXR1cm4sIG9mZnNldCwgZXhlY3V0YWJsZS0+c291cmNlSUQoKSk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU09OUGFyc2UoZXhlYywganNvblN0cmluZykpOworfQor
CiAvLyBVc2UgU0VIIGZvciBSZWxlYXNlIGJ1aWxkcyBvbmx5IHRvIGdldCByaWQgb2YgdGhlIGNy
YXNoIHJlcG9ydCBkaWFsb2cKIC8vIChsdWNraWx5IHRoZSBzYW1lIHRlc3RzIGZhaWwgaW4gUmVs
ZWFzZSBhbmQgRGVidWcgYnVpbGRzIHNvIGZhcikuIE5lZWQgdG8KIC8vIGJlIGluIGEgc2VwYXJh
dGUgbWFpbiBmdW5jdGlvbiBiZWNhdXNlIHRoZSBqc2NtYWluIGZ1bmN0aW9uIHJlcXVpcmVzIG9i
amVjdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmls
ZXIuY3BwCShyZXZpc2lvbiAxNzMyMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9UeXBlUHJvZmlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw2ICs4MiwzNCBAQCB2b2lk
IFR5cGVQcm9maWxlcjo6Z2V0VHlwZXNGb3JWYXJpYWJsZUF0CiAgICAgZGVzY3JpcHRpb24tPnNl
dExvY2FsU3RydWN0dXJlcyhsb2NhdGlvbi0+bV9pbnN0cnVjdGlvblR5cGVTZXQtPmFsbFN0cnVj
dHVyZVJlcHJlc2VudGF0aW9ucygpKTsKIH0KIAorU3RyaW5nIFR5cGVQcm9maWxlcjo6dHlwZUlu
Zm9ybWF0aW9uRm9yRXhwcmVzc2lvbkF0T2Zmc2V0KFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0
b3IgZGVzY3JpcHRvciwgdW5zaWduZWQgb2Zmc2V0LCBpbnRwdHJfdCBzb3VyY2VJRCkKK3sKKyAg
ICAvLyBUaGlzIHJldHVybnMgYSBKU09OIHN0cmluZyByZXByZXNlbnRpbmcgYW4gT2JqZWN0IHdp
dGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgorICAgIC8vICAgICBnbG9iYWxUeXBlU2V0OiAn
SlNPTjxUeXBlU2V0PiB8IG51bGwnCisgICAgLy8gICAgIGluc3RydWN0aW9uVHlwZVNldDogJ0pT
T048VHlwZVNldD4nCisKKyAgICBUeXBlTG9jYXRpb24qIGxvY2F0aW9uID0gZmluZExvY2F0aW9u
KG9mZnNldCwgc291cmNlSUQsIGRlc2NyaXB0b3IpOworICAgIEFTU0VSVChsb2NhdGlvbik7CisK
KyAgICBTdHJpbmdCdWlsZGVyIGpzb247ICAKKworICAgIGpzb24uYXBwZW5kKCJ7Iik7CisKKyAg
ICBqc29uLmFwcGVuZCgiXCJnbG9iYWxUeXBlU2V0XCI6Iik7CisgICAgaWYgKGxvY2F0aW9uLT5t
X2dsb2JhbFR5cGVTZXQgJiYgbG9jYXRpb24tPm1fZ2xvYmFsVmFyaWFibGVJRCAhPSBUeXBlUHJv
ZmlsZXJOb0dsb2JhbElERXhpc3RzKQorICAgICAgICBqc29uLmFwcGVuZChsb2NhdGlvbi0+bV9n
bG9iYWxUeXBlU2V0LT50b0pTT05TdHJpbmcoKSk7CisgICAgZWxzZQorICAgICAgICBqc29uLmFw
cGVuZCgibnVsbCIpOworICAgIGpzb24uYXBwZW5kKCIsIik7CisKKyAgICBqc29uLmFwcGVuZCgi
XCJpbnN0cnVjdGlvblR5cGVTZXRcIjoiKTsKKyAgICBqc29uLmFwcGVuZChsb2NhdGlvbi0+bV9p
bnN0cnVjdGlvblR5cGVTZXQtPnRvSlNPTlN0cmluZygpKTsKKworICAgIGpzb24uYXBwZW5kKCJ9
Iik7CisgICAgCisgICAgcmV0dXJuIGpzb24udG9TdHJpbmcoKTsKK30KKwogVHlwZUxvY2F0aW9u
KiBUeXBlUHJvZmlsZXI6OmZpbmRMb2NhdGlvbih1bnNpZ25lZCBkaXZvdCwgaW50cHRyX3Qgc291
cmNlSUQsIFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3IgZGVzY3JpcHRvcikKIHsKICAgICBR
dWVyeUtleSBxdWVyeUtleShzb3VyY2VJRCwgZGl2b3QpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyLmgJKHJldmlzaW9uIDE3MzIxNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC05Niw2ICs5Niw3IEBAIGNsYXNzIFR5cGVQcm9maWxlciB7CiBwdWJsaWM6CiAgICAgdm9p
ZCBsb2dUeXBlc0ZvclR5cGVMb2NhdGlvbihUeXBlTG9jYXRpb24qKTsKICAgICB2b2lkIGdldFR5
cGVzRm9yVmFyaWFibGVBdE9mZnNldEZvckluc3BlY3RvcihUeXBlUHJvZmlsZXJTZWFyY2hEZXNj
cmlwdG9yLCB1bnNpZ25lZCBkaXZvdCwgaW50cHRyX3Qgc291cmNlSUQsIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpSdW50aW1lOjpUeXBlRGVzY3JpcHRpb24+Jik7CisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgU3RyaW5nIHR5cGVJbmZvcm1hdGlvbkZvckV4cHJlc3Npb25BdE9mZnNldChUeXBl
UHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yLCB1bnNpZ25lZCBvZmZzZXQsIGludHB0cl90IHNvdXJj
ZUlEKTsKICAgICB2b2lkIGluc2VydE5ld0xvY2F0aW9uKFR5cGVMb2NhdGlvbiopOwogICAgIEZ1
bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSogZnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlKCkgeyByZXR1
cm4gJm1fZnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlOyB9CiAgICAgVHlwZUxvY2F0aW9uQ2FjaGUq
IHR5cGVMb2NhdGlvbkNhY2hlKCkgeyByZXR1cm4gJm1fdHlwZUxvY2F0aW9uQ2FjaGU7IH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlckxvZy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlckxvZy5o
CShyZXZpc2lvbiAxNzMyMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBl
UHJvZmlsZXJMb2cuaAkod29ya2luZyBjb3B5KQpAQCAtNzQsNyArNzQsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBwcm9jZXNzTG9nRW50cmllcyhBU0NJSUxpdGVyYWwoIkxvZyBGdWxsIikpOwog
ICAgIH0KIAotICAgIHZvaWQgcHJvY2Vzc0xvZ0VudHJpZXMoU3RyaW5nKTsKKyAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIHByb2Nlc3NMb2dFbnRyaWVzKFN0cmluZyk7CiAgICAgTG9nRW50cnkq
IGxvZ0VuZFB0cigpIGNvbnN0IHsgcmV0dXJuIG1fbG9nRW5kUHRyOyB9CiAKICAgICBzdGF0aWMg
cHRyZGlmZl90IGxvZ1N0YXJ0T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFR5cGVQ
cm9maWxlckxvZywgbV9sb2dTdGFydFB0cik7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1R5cGVTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1R5cGVTZXQuY3BwCShyZXZpc2lvbiAxNzMyMTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUxLDYgKzI1
MSw3OCBAQCBTdHJpbmcgVHlwZVNldDo6bGVhc3RDb21tb25BbmNlc3RvcigpIGNvCiAgICAgcmV0
dXJuIFN0cnVjdHVyZVNoYXBlOjpsZWFzdENvbW1vbkFuY2VzdG9yKG1fc3RydWN0dXJlSGlzdG9y
eSk7CiB9CiAKK1N0cmluZyBUeXBlU2V0Ojp0b0pTT05TdHJpbmcoKSBjb25zdAoreworICAgIC8v
IFRoaXMgcmV0dXJucyBhIEpTT04gc3RyaW5nIHJlcHJlc2VudGluZyBhbiBPYmplY3Qgd2l0aCB0
aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6CisgICAgLy8gICAgIGRpc3BsYXlUeXBlTmFtZTogJ1N0
cmluZycKKyAgICAvLyAgICAgcHJpbWl0aXZlVHlwZU5hbWVzOiAnQXJyYXk8U3RyaW5nPicKKyAg
ICAvLyAgICAgc3RydWN0dXJlczogJ0FycmF5PEpTT048U3RydWN0dXJlU2hhcGU+PicKKworICAg
IFN0cmluZ0J1aWxkZXIganNvbjsKKyAgICBqc29uLmFwcGVuZCgieyIpOworCisgICAganNvbi5h
cHBlbmQoIlwiZGlzcGxheVR5cGVOYW1lXCI6Iik7CisgICAganNvbi5hcHBlbmQoIlwiIik7Cisg
ICAganNvbi5hcHBlbmQoZGlzcGxheU5hbWUoKSk7CisgICAganNvbi5hcHBlbmQoIlwiIik7Cisg
ICAganNvbi5hcHBlbmQoIiwiKTsKKworICAgIGpzb24uYXBwZW5kKCJcInByaW1pdGl2ZVR5cGVO
YW1lc1wiOiIpOworICAgIGpzb24uYXBwZW5kKCJbIik7CisgICAgYm9vbCBoYXNBbkl0ZW0gPSBm
YWxzZTsKKyAgICBpZiAobV9zZWVuVHlwZXMgJiBUeXBlVW5kZWZpbmVkKSB7CisgICAgICAgIGhh
c0FuSXRlbSA9IHRydWU7CisgICAgICAgIGpzb24uYXBwZW5kKCJcIlVuZGVmaW5lZFwiIik7Cisg
ICAgfQorICAgIGlmIChtX3NlZW5UeXBlcyAmIFR5cGVOdWxsKSB7CisgICAgICAgIGlmIChoYXNB
bkl0ZW0pCisgICAgICAgICAgICBqc29uLmFwcGVuZCgiLCIpOworICAgICAgICBoYXNBbkl0ZW0g
PSB0cnVlOworICAgICAgICBqc29uLmFwcGVuZCgiXCJOdWxsXCIiKTsKKyAgICB9CisgICAgaWYg
KG1fc2VlblR5cGVzICYgVHlwZUJvb2xlYW4pIHsKKyAgICAgICAgaWYgKGhhc0FuSXRlbSkKKyAg
ICAgICAgICAgIGpzb24uYXBwZW5kKCIsIik7CisgICAgICAgIGhhc0FuSXRlbSA9IHRydWU7Cisg
ICAgICAgIGpzb24uYXBwZW5kKCJcIkJvb2xlYW5cIiIpOworICAgIH0KKyAgICBpZiAobV9zZWVu
VHlwZXMgJiBUeXBlTWFjaGluZUludCkgeworICAgICAgICBpZiAoaGFzQW5JdGVtKQorICAgICAg
ICAgICAganNvbi5hcHBlbmQoIiwiKTsKKyAgICAgICAgaGFzQW5JdGVtID0gdHJ1ZTsKKyAgICAg
ICAganNvbi5hcHBlbmQoIlwiSW50ZWdlclwiIik7CisgICAgfQorICAgIGlmIChtX3NlZW5UeXBl
cyAmIFR5cGVOdW1iZXIpIHsKKyAgICAgICAgaWYgKGhhc0FuSXRlbSkKKyAgICAgICAgICAgIGpz
b24uYXBwZW5kKCIsIik7CisgICAgICAgIGhhc0FuSXRlbSA9IHRydWU7CisgICAgICAgIGpzb24u
YXBwZW5kKCJcIk51bWJlclwiIik7CisgICAgfQorICAgIGlmIChtX3NlZW5UeXBlcyAmIFR5cGVT
dHJpbmcpIHsKKyAgICAgICAgaWYgKGhhc0FuSXRlbSkKKyAgICAgICAgICAgIGpzb24uYXBwZW5k
KCIsIik7CisgICAgICAgIGhhc0FuSXRlbSA9IHRydWU7CisgICAgICAgIGpzb24uYXBwZW5kKCJc
IlN0cmluZ1wiIik7CisgICAgfQorICAgIGpzb24uYXBwZW5kKCJdIik7CisKKyAgICBqc29uLmFw
cGVuZCgiLCIpOworCisgICAganNvbi5hcHBlbmQoIlwic3RydWN0dXJlc1wiOiIpOworICAgIGpz
b24uYXBwZW5kKCJbIik7CisgICAgaGFzQW5JdGVtID0gZmFsc2U7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX3N0cnVjdHVyZUhpc3Rvcnkuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgaWYg
KGhhc0FuSXRlbSkKKyAgICAgICAgICAgIGpzb24uYXBwZW5kKCIsIik7CisgICAgICAgIGhhc0Fu
SXRlbSA9IHRydWU7CisgICAgICAgIGpzb24uYXBwZW5kKG1fc3RydWN0dXJlSGlzdG9yeVtpXS0+
dG9KU09OU3RyaW5nKCkpOworICAgIH0KKyAgICBqc29uLmFwcGVuZCgiXSIpOworCisgICAganNv
bi5hcHBlbmQoIn0iKTsKKyAgICByZXR1cm4ganNvbi50b1N0cmluZygpOworfQorCiB2b2lkIFR5
cGVTZXQ6OmR1bXBTZWVuVHlwZXMoKQogewogICAgIGRhdGFMb2coc2VlblR5cGVzKCksICJcbiIp
OwpAQCAtMzY0LDYgKzQzNiw0OSBAQCBTdHJpbmcgU3RydWN0dXJlU2hhcGU6OnN0cmluZ1JlcHJl
c2VudGF0CiAgICAgcmV0dXJuIHJlcHJlc2VudGF0aW9uLnRvU3RyaW5nKCk7CiB9CiAKK1N0cmlu
ZyBTdHJ1Y3R1cmVTaGFwZTo6dG9KU09OU3RyaW5nKCkgY29uc3QKK3sKKyAgICAvLyBUaGlzIHJl
dHVybnMgYSBKU09OIHN0cmluZyByZXByZXNlbnRpbmcgYW4gT2JqZWN0IHdpdGggdGhlIGZvbGxv
d2luZyBwcm9wZXJ0aWVzOgorICAgIC8vICAgICBjb25zdHJ1Y3Rvck5hbWU6ICdTdHJpbmcnCisg
ICAgLy8gICAgIGZpZWxkczogJ0FycmF5PFN0cmluZz4nCisgICAgLy8gICAgIHByb3RvOiAnSlNP
TjxTdHJ1Y3R1cmVTaGFwZT4gfCBudWxsJworCisgICAgU3RyaW5nQnVpbGRlciBqc29uOworICAg
IGpzb24uYXBwZW5kKCJ7Iik7CisKKyAgICBqc29uLmFwcGVuZCgiXCJjb25zdHJ1Y3Rvck5hbWVc
IjoiKTsKKyAgICBqc29uLmFwcGVuZCgiXCIiKTsKKyAgICBqc29uLmFwcGVuZChtX2NvbnN0cnVj
dG9yTmFtZSk7CisgICAganNvbi5hcHBlbmQoIlwiIik7CisgICAganNvbi5hcHBlbmQoIiwiKTsK
KworICAgIGpzb24uYXBwZW5kKCJcImZpZWxkc1wiOiIpOworICAgIGpzb24uYXBwZW5kKCJbIik7
CisgICAgYm9vbCBoYXNBbkl0ZW0gPSBmYWxzZTsKKyAgICBmb3IgKGF1dG8gaXQgPSBtX2ZpZWxk
cy5iZWdpbigpLCBlbmQgPSBtX2ZpZWxkcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAg
ICAgIGlmIChoYXNBbkl0ZW0pCisgICAgICAgICAgICBqc29uLmFwcGVuZCgiLCIpOworICAgICAg
ICBoYXNBbkl0ZW0gPSB0cnVlOworCisgICAgICAgIFN0cmluZyBmaWVsZE5hbWUoKCppdCkuZ2V0
KCkpOworICAgICAgICBqc29uLmFwcGVuZCgiXCIiKTsKKyAgICAgICAganNvbi5hcHBlbmQoZmll
bGROYW1lKTsKKyAgICAgICAganNvbi5hcHBlbmQoIlwiIik7CisgICAgfQorICAgIGpzb24uYXBw
ZW5kKCJdIik7CisgICAganNvbi5hcHBlbmQoIiwiKTsKKworICAgIGpzb24uYXBwZW5kKCJcInBy
b3RvXCI6Iik7CisgICAgaWYgKG1fcHJvdG8pCisgICAgICAgIGpzb24uYXBwZW5kKG1fcHJvdG8t
PnRvSlNPTlN0cmluZygpKTsKKyAgICBlbHNlCisgICAgICAgIGpzb24uYXBwZW5kKCJudWxsIik7
CisKKyAgICBqc29uLmFwcGVuZCgifSIpOworCisgICAgcmV0dXJuIGpzb24udG9TdHJpbmcoKTsK
K30KKwogUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpTdHJ1Y3R1cmVE
ZXNjcmlwdGlvbj4gU3RydWN0dXJlU2hhcGU6Omluc3BlY3RvclJlcHJlc2VudGF0aW9uKCkKIHsK
ICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6U3RydWN0dXJlRGVzY3Jp
cHRpb24+IGJhc2UgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpTdHJ1Y3R1cmVEZXNj
cmlwdGlvbjo6Y3JlYXRlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9U
eXBlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlw
ZVNldC5oCShyZXZpc2lvbiAxNzMyMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9UeXBlU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDYgKzcwLDcgQEAgcHVibGljOgogICAg
IHZvaWQgbWFya0FzRmluYWwoKTsKICAgICB2b2lkIGFkZFByb3BlcnR5KFJlZlB0cjxTdHJpbmdJ
bXBsPik7CiAgICAgU3RyaW5nIHN0cmluZ1JlcHJlc2VudGF0aW9uKCk7CisgICAgU3RyaW5nIHRv
SlNPTlN0cmluZygpIGNvbnN0OwogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
UnVudGltZTo6U3RydWN0dXJlRGVzY3JpcHRpb24+IGluc3BlY3RvclJlcHJlc2VudGF0aW9uKCk7
CiAgICAgdm9pZCBzZXRDb25zdHJ1Y3Rvck5hbWUoU3RyaW5nIG5hbWUpIHsgbV9jb25zdHJ1Y3Rv
ck5hbWUgPSAobmFtZS5pc0VtcHR5KCkgPyAiT2JqZWN0IiA6IG5hbWUpOyB9CiAgICAgU3RyaW5n
IGNvbnN0cnVjdG9yTmFtZSgpIHsgcmV0dXJuIG1fY29uc3RydWN0b3JOYW1lOyB9CkBAIC05Nyw2
ICs5OCw3IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgZGlzcGxheU5hbWUoKSBjb25zdDsKICAgICBQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IGFsbFByaW1pdGl2
ZVR5cGVOYW1lcygpIGNvbnN0OwogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6U3RydWN0dXJlRGVzY3JpcHRpb24+
PiBhbGxTdHJ1Y3R1cmVSZXByZXNlbnRhdGlvbnMoKSBjb25zdDsKKyAgICBTdHJpbmcgdG9KU09O
U3RyaW5nKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgU3RyaW5nIGxlYXN0Q29tbW9uQW5jZXN0
b3IoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy90eXBlUHJvZmls
ZXIueWFtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvdHlwZVBy
b2ZpbGVyLnlhbWwJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMv
dHlwZVByb2ZpbGVyLnlhbWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNSBAQAorIyBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjCisjIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LiAKKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAK
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyMgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworIyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyMgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisjIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKy0gcGF0aDogdHlwZVByb2ZpbGVyCisgIGNtZDog
cnVuVHlwZVByb2ZpbGVyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvdHlwZVBy
b2ZpbGVyL2Jhc2ljLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy90eXBlUHJvZmlsZXIvYmFzaWMuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvdHlwZVByb2ZpbGVyL2Jhc2ljLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDIgQEAKK2xvYWQoIi4vZHJpdmVyL2RyaXZlci5qcyIpOworCitmdW5jdGlvbiB3cmFwcGVy
KCkgeworCitmdW5jdGlvbiBmb28oYmFyKXt9Citmb28oMjApOworZm9vKDIwLjUpOworCit2YXIg
dGVzdCA9IHt4OjIwLCB5OjUwfTsKK3Rlc3QgPSAiaGVsbG8iOworCit9Cit3cmFwcGVyKCk7CisK
Ky8vID09PT09PSBFbmQgdGVzdCBjYXNlcyA9PT09PT0KKwordmFyIHR5cGVzID0gZmluZFR5cGVG
b3JFeHByZXNzaW9uKHdyYXBwZXIsICJiYXIpIik7IAorYXNzZXJ0KHR5cGVzLmluc3RydWN0aW9u
VHlwZVNldC5wcmltaXRpdmVUeXBlTmFtZXMuaW5kZXhPZihULkludGVnZXIpICE9PSAtMSwgIlBy
aW1pdGl2ZSB0eXBlIG5hbWVzIHNob3VsZCBjb250YWluICdJbnRlZ2VyJyIpOworYXNzZXJ0KHR5
cGVzLmluc3RydWN0aW9uVHlwZVNldC5wcmltaXRpdmVUeXBlTmFtZXMuaW5kZXhPZihULk51bWJl
cikgIT09IC0xLCAiUHJpbWl0aXZlIHR5cGUgbmFtZXMgc2hvdWxkIGNvbnRhaW4gJ051bWJlcici
KTsKK2Fzc2VydCh0eXBlcy5pbnN0cnVjdGlvblR5cGVTZXQuZGlzcGxheVR5cGVOYW1lID09PSBU
Lk51bWJlciAsICJQcmltaXRpdmUgdHlwZSBuYW1lcyBkaXNwbGF5IG5hbWUgc2hvdWxkIGJlICdO
dW1iZXInIik7CisKK3R5cGVzID0gZmluZFR5cGVGb3JFeHByZXNzaW9uKHdyYXBwZXIsICJ0ZXN0
ID0geyIpOyAKK2Fzc2VydCh0eXBlcy5nbG9iYWxUeXBlU2V0LnByaW1pdGl2ZVR5cGVOYW1lcy5p
bmRleE9mKFQuU3RyaW5nKSAhPT0gLTEsICJWYXJpYWJsZSAndGVzdCcgc2hvdWxkIGhhdmUgYmVl
biB0eXBlICdTdHJpbmcnIGdsb2JhbGx5Iik7Cithc3NlcnQodHlwZXMuaW5zdHJ1Y3Rpb25UeXBl
U2V0LnN0cnVjdHVyZXMubGVuZ3RoID09PSAxLCAiVmFyaWFibGUgJ3Rlc3QnIHNob3VsZCBoYXZl
IG9uZSBzdHJ1Y3R1cmUiKTsKK2Fzc2VydCh0eXBlcy5pbnN0cnVjdGlvblR5cGVTZXQuc3RydWN0
dXJlc1swXS5jb25zdHJ1Y3Rvck5hbWUgPT09ICJPYmplY3QiLCAidmFyaWFibGUgJ3Rlc3QnIikK
K2Fzc2VydCh0eXBlcy5pbnN0cnVjdGlvblR5cGVTZXQuc3RydWN0dXJlc1swXS5wcm90by5jb25z
dHJ1Y3Rvck5hbWUgPT09ICJPYmplY3QiLCAiVmFyaWFibGUgJ3Rlc3QnIHNob3VsZG4ndCBoYXZl
IGEgcHJvdG90eXBlIik7Cithc3NlcnQodHlwZXMuaW5zdHJ1Y3Rpb25UeXBlU2V0LnN0cnVjdHVy
ZXNbMF0ucHJvdG8ucHJvdG8gPT09IG51bGwsICJWYXJpYWJsZSAndGVzdCcgc2hvdWxkbid0IGhh
dmUgYSBwcm90b3R5cGUiKTsKK2Fzc2VydCh0eXBlcy5pbnN0cnVjdGlvblR5cGVTZXQuc3RydWN0
dXJlc1swXS5jb25zdHJ1Y3Rvck5hbWUgPT09ICJPYmplY3QiLCAidmFyaWFibGUgJ3Rlc3QnIHNo
b3VsZCBoYXZlIGNvbnN0cnVjdG9yIG5hbWUgJ09iamVjdCciKQorYXNzZXJ0KHR5cGVzLmdsb2Jh
bFR5cGVTZXQuZGlzcGxheVR5cGVOYW1lID09PSAiT2JqZWN0IiwgIlZhcmlhYmxlICd0ZXN0JyBn
bG9iYWwgdHlwZSBuYW1lIHNob3VsZCBkaXNwbGF5IGFzICdPYmplY3QnIik7Cithc3NlcnQodHlw
ZXMuaW5zdHJ1Y3Rpb25UeXBlU2V0LnN0cnVjdHVyZXNbMF0uZmllbGRzLmxlbmd0aCA9PT0gMiwg
InZhcmlhYmxlICd0ZXN0JyBzaG91bGQgaGF2ZSB0d28gZmllbGRzOiB4LHkiKTsKK2Fzc2VydCh0
eXBlcy5pbnN0cnVjdGlvblR5cGVTZXQuc3RydWN0dXJlc1swXS5maWVsZHMuaW5kZXhPZigieCIp
ICE9PSAtMSwgInZhcmlhYmxlICd0ZXN0JyBzaG91bGQgaGF2ZSBmaWVsZCAneCciKTsKK2Fzc2Vy
dCh0eXBlcy5pbnN0cnVjdGlvblR5cGVTZXQuc3RydWN0dXJlc1swXS5maWVsZHMuaW5kZXhPZigi
eSIpICE9PSAtMSwgInZhcmlhYmxlICd0ZXN0JyBzaG91bGQgaGF2ZSBmaWVsZCAneSciKTsKKwor
dHlwZXMgPSBmaW5kVHlwZUZvckV4cHJlc3Npb24od3JhcHBlciwgInRlc3QgPSBcImgiKTsKK2Fz
c2VydCh0eXBlcy5nbG9iYWxUeXBlU2V0LnByaW1pdGl2ZVR5cGVOYW1lcy5pbmRleE9mKFQuU3Ry
aW5nKSAhPT0gLTEsICJWYXJpYWJsZSAndGVzdCcgc2hvdWxkIGhhdmUgYmVlbiB0eXBlICdTdHJp
bmcnIGdsb2JhbGx5Iik7Cithc3NlcnQodHlwZXMuaW5zdHJ1Y3Rpb25UeXBlU2V0LmRpc3BsYXlU
eXBlTmFtZSA9PT0gVC5TdHJpbmcsICJWYXJpYWJsZSAndGVzdCcgc2hvdWxkIGhhdmUgYmVlbiBk
aXNwbGF5IHR5cGUgJ1N0cmluZycgYXQgdGhpcyBpbnN0cnVjdGlvbiIpOworYXNzZXJ0KHR5cGVz
Lmluc3RydWN0aW9uVHlwZVNldC5wcmltaXRpdmVUeXBlTmFtZXMuaW5kZXhPZihULlN0cmluZykg
IT09IC0xLCAiVmFyaWFibGUgJ3Rlc3QnIHNob3VsZCBoYXZlIGJlZW4gdHlwZSAnU3RyaW5nJyBn
bG9iYWxseSIpOworYXNzZXJ0KHR5cGVzLmluc3RydWN0aW9uVHlwZVNldC5zdHJ1Y3R1cmVzLmxl
bmd0aCA9PT0gMCwgIlZhcmlhYmxlICd0ZXN0JyBhdCB0aGlzIGluc3RydWN0aW9uIHNob3VsZG4n
dCBoYXZlIGEgc3RydWN0dXJlLiIpOworYXNzZXJ0KHR5cGVzLmdsb2JhbFR5cGVTZXQuc3RydWN0
dXJlcy5sZW5ndGggPT09IDEsICJWYXJpYWJsZSAndGVzdCcgc2hvdWxkIHN0aWxsIGhhdmUgb25l
IHN0cnVjdHVyZSIpOworYXNzZXJ0KHR5cGVzLmdsb2JhbFR5cGVTZXQuc3RydWN0dXJlc1swXS5m
aWVsZHMuaW5kZXhPZigieCIpICE9PSAtMSwgInZhcmlhYmxlICd0ZXN0JyBzaG91bGQgaGF2ZSBm
aWVsZCAneCcgZ2xvYmFsbHkiKTsKK2Fzc2VydCh0eXBlcy5nbG9iYWxUeXBlU2V0LnN0cnVjdHVy
ZXNbMF0uZmllbGRzLmluZGV4T2YoInkiKSAhPT0gLTEsICJ2YXJpYWJsZSAndGVzdCcgc2hvdWxk
IGhhdmUgZmllbGQgJ3knIGdsb2JhbGx5Iik7CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy90eXBlUHJvZmlsZXIvY2FwdHVyZWQuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3R5cGVQcm9maWxlci9jYXB0dXJlZC5qcwkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy90eXBlUHJvZmlsZXIvY2FwdHVyZWQuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorbG9hZCgiLi9kcml2ZXIvZHJpdmVyLmpz
Iik7CisKK3ZhciBjaGFuZ2VGb287CitmdW5jdGlvbiB3cmFwcGVyKCkgeworCit2YXIgZm9vPTIw
OworY2hhbmdlRm9vID0gZnVuY3Rpb24oYXJnKSB7IGZvbyA9IGFyZzsgfQorCit9Cit3cmFwcGVy
KCk7CisKKy8vID09PT09PSBFbmQgdGVzdCBjYXNlcyA9PT09PT0KKwordmFyIHR5cGVzID0gZmlu
ZFR5cGVGb3JFeHByZXNzaW9uKHdyYXBwZXIsICJmb289MjA7Iik7IAorYXNzZXJ0KHR5cGVzLmlu
c3RydWN0aW9uVHlwZVNldC5wcmltaXRpdmVUeXBlTmFtZXMuaW5kZXhPZihULkludGVnZXIpICE9
PSAtMSwgIlByaW1pdGl2ZSB0eXBlIG5hbWVzIHNob3VsZCBjb250YWluICdJbnRlZ2VyJyIpOwor
YXNzZXJ0KHR5cGVzLmdsb2JhbFR5cGVTZXQucHJpbWl0aXZlVHlwZU5hbWVzLmluZGV4T2YoVC5J
bnRlZ2VyKSAhPT0gLTEsICJQcmltaXRpdmUgdHlwZSBuYW1lcyBzaG91bGQgY29udGFpbiAnSW50
ZWdlciciKTsKK2Fzc2VydCh0eXBlcy5nbG9iYWxUeXBlU2V0LnByaW1pdGl2ZVR5cGVOYW1lcy5s
ZW5ndGggPT09IDEsICJQcmltaXRpdmUgdHlwZSBuYW1lcyBzaG91bGQgY29udGFpbiBleGFjdGx5
IG9ubHkgb25lIGl0ZW0gZ2xvYmFsbHkiKTsKK2Fzc2VydCh0eXBlcy5pbnN0cnVjdGlvblR5cGVT
ZXQucHJpbWl0aXZlVHlwZU5hbWVzLmxlbmd0aCA9PT0gMSwgIlByaW1pdGl2ZSB0eXBlIG5hbWVz
IHNob3VsZCBjb250YWluIGV4YWN0bHkgb25seSBvbmUgaXRlbSBvbiB0aGUgaW5zdHJ1Y3Rpb24i
KTsKK2Fzc2VydCh0eXBlcy5nbG9iYWxUeXBlU2V0LmRpc3BsYXlUeXBlTmFtZSA9PT0gVC5JbnRl
Z2VyLCAiZ2xvYmFsIGRpc3BsYXkgbmFtZSBzaG91bGQgYmUgSW50ZWdlciIpOworYXNzZXJ0KHR5
cGVzLmluc3RydWN0aW9uVHlwZVNldC5kaXNwbGF5VHlwZU5hbWUgPT09IFQuSW50ZWdlciwgImlu
c3RydWN0aW9uIGRpc3BsYXkgbmFtZSBzaG91bGQgYmUgSW50ZWdlciIpOworCitjaGFuZ2VGb28o
MjAuNSk7Cit0eXBlcyA9IGZpbmRUeXBlRm9yRXhwcmVzc2lvbih3cmFwcGVyLCAiZm9vPTIwOyIp
OyAKK2Fzc2VydCh0eXBlcy5pbnN0cnVjdGlvblR5cGVTZXQucHJpbWl0aXZlVHlwZU5hbWVzLmlu
ZGV4T2YoVC5JbnRlZ2VyKSAhPT0gLTEsICJQcmltaXRpdmUgdHlwZSBuYW1lcyBzaG91bGQgY29u
dGFpbiAnSW50ZWdlciciKTsKK2Fzc2VydCh0eXBlcy5pbnN0cnVjdGlvblR5cGVTZXQucHJpbWl0
aXZlVHlwZU5hbWVzLmxlbmd0aCA9PT0gMSwgIlByaW1pdGl2ZSB0eXBlIG5hbWVzIHNob3VsZCBj
b250YWluIFNUSUxMIG9ubHkgY29udGFpbiBleGFjdGx5IG9uZSBpdGVtIG9uIHRoZSBpbnN0cnVj
dGlvbiIpOworYXNzZXJ0KHR5cGVzLmdsb2JhbFR5cGVTZXQucHJpbWl0aXZlVHlwZU5hbWVzLmlu
ZGV4T2YoVC5JbnRlZ2VyKSAhPT0gLTEsICJHbG9iYWwgcHJpbWl0aXZlIHR5cGUgbmFtZXMgc2hv
dWxkIG5vdyBzdGlsbCBjb250YWluICdJbnRlZ2VyJyIpOworYXNzZXJ0KHR5cGVzLmdsb2JhbFR5
cGVTZXQucHJpbWl0aXZlVHlwZU5hbWVzLmluZGV4T2YoVC5OdW1iZXIpICE9PSAtMSwgIkdsb2Jh
bCBwcmltaXRpdmUgdHlwZSBuYW1lcyBzaG91bGQgbm93IGNvbnRhaW4gJ051bWJlciciKTsKK2Fz
c2VydCh0eXBlcy5nbG9iYWxUeXBlU2V0LnByaW1pdGl2ZVR5cGVOYW1lcy5sZW5ndGggPT09IDIs
ICJHbG9iYWwgcHJpbWl0aXZlIHR5cGUgbmFtZXMgc2hvdWxkIGNvbnRhaW4gZXhhY3RseSB0d28g
aXRlbXMgZ2xvYmFsbHkiKTsKK2Fzc2VydCh0eXBlcy5nbG9iYWxUeXBlU2V0LmRpc3BsYXlUeXBl
TmFtZSA9PT0gVC5OdW1iZXIsICJnbG9iYWwgZGlzcGxheSBuYW1lIHNob3VsZCBiZSBOdW1iZXIi
KTsKKworY2hhbmdlRm9vKG51bGwpOworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvdHlwZVByb2ZpbGVyL2luaGVyaXRhbmNlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0cy90eXBlUHJvZmlsZXIvaW5oZXJpdGFuY2UuanMJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvdHlwZVByb2ZpbGVyL2luaGVyaXRhbmNl
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKK2xvYWQoIi4vZHJpdmVyL2RyaXZl
ci5qcyIpOworCitmdW5jdGlvbiB3cmFwcGVyKCkKK3sKKwordmFyIHRoZUEgPSBuZXcgQTsKK3Zh
ciB0aGVCID0gbmV3IEI7Cit2YXIgdGhlQyA9IG5ldyBDOwordmFyIGhpZXJhcmNoeVRlc3QgPSBu
ZXcgQjsKK2hpZXJhcmNoeVRlc3QgPSBuZXcgQzsKKwordmFyIHNlY29uZEhpZXJhcmNoeVRlc3Qg
PSBPYmplY3QuY3JlYXRlKHRoZUIpOworc2Vjb25kSGllcmFyY2h5VGVzdCA9IE9iamVjdC5jcmVh
dGUodGhlQyk7CisKK3ZhciBzZWNvbmRCID0gT2JqZWN0LmNyZWF0ZSh0aGVCKTsKKworZnVuY3Rp
b24gQSgpIHsgfTsKK2Z1bmN0aW9uIEIoKSB7IH07IEIucHJvdG90eXBlLl9fcHJvdG9fXyA9IEEu
cHJvdG90eXBlOworZnVuY3Rpb24gQygpIHsgfTsgQy5wcm90b3R5cGUuX19wcm90b19fID0gQS5w
cm90b3R5cGU7CisKK30KK3dyYXBwZXIoKTsKKworLy8gPT09PT09IEVuZCB0ZXN0IGNhc2VzID09
PT09PQorCit0eXBlcyA9IGZpbmRUeXBlRm9yRXhwcmVzc2lvbih3cmFwcGVyLCAidGhlQSA9IG4i
KTsKK2Fzc2VydCh0eXBlcy5nbG9iYWxUeXBlU2V0LmRpc3BsYXlUeXBlTmFtZSA9PT0gIkEiLCAi
dmFyaWFibGUgJ3RoZUEnIHNob3VsZCBoYXZlIGRpc3BsYXlUeXBlTmFtZSAnQSciKTsKK2Fzc2Vy
dCh0eXBlcy5pbnN0cnVjdGlvblR5cGVTZXQuZGlzcGxheVR5cGVOYW1lID09PSAiQSIsICJ2YXJp
YWJsZSAndGhlQScgc2hvdWxkIGhhdmUgZGlzcGxheVR5cGVOYW1lICdBJyIpOworCit0eXBlcyA9
IGZpbmRUeXBlRm9yRXhwcmVzc2lvbih3cmFwcGVyLCAidGhlQiA9IG4iKTsKK2Fzc2VydCh0eXBl
cy5nbG9iYWxUeXBlU2V0LmRpc3BsYXlUeXBlTmFtZSA9PT0gIkIiLCAidmFyaWFibGUgJ3RoZUIn
IHNob3VsZCBoYXZlIGRpc3BsYXlUeXBlTmFtZSAnQiciKTsKK2Fzc2VydCh0eXBlcy5pbnN0cnVj
dGlvblR5cGVTZXQuZGlzcGxheVR5cGVOYW1lID09PSAiQiIsICJ2YXJpYWJsZSAndGhlQicgc2hv
dWxkIGhhdmUgZGlzcGxheVR5cGVOYW1lICdCJyIpOworCit0eXBlcyA9IGZpbmRUeXBlRm9yRXhw
cmVzc2lvbih3cmFwcGVyLCAidGhlQyA9IG4iKTsKK2Fzc2VydCh0eXBlcy5nbG9iYWxUeXBlU2V0
LmRpc3BsYXlUeXBlTmFtZSA9PT0gIkMiLCAidmFyaWFibGUgJ3RoZUMnIHNob3VsZCBoYXZlIGRp
c3BsYXlUeXBlTmFtZSAnQyciKTsKK2Fzc2VydCh0eXBlcy5pbnN0cnVjdGlvblR5cGVTZXQuZGlz
cGxheVR5cGVOYW1lID09PSAiQyIsICJ2YXJpYWJsZSAndGhlQycgc2hvdWxkIGhhdmUgZGlzcGxh
eVR5cGVOYW1lICdDJyIpOworCit0eXBlcyA9IGZpbmRUeXBlRm9yRXhwcmVzc2lvbih3cmFwcGVy
LCAiaGllcmFyY2h5VGVzdCA9IG5ldyBCOyIpOworYXNzZXJ0KHR5cGVzLmdsb2JhbFR5cGVTZXQu
ZGlzcGxheVR5cGVOYW1lID09PSAiQSIsICJ2YXJpYWJsZSAnaGllcmFyY2h5VGVzdCcgc2hvdWxk
IGhhdmUgZGlzcGxheVR5cGVOYW1lICdBJyIpOworCit0eXBlcyA9IGZpbmRUeXBlRm9yRXhwcmVz
c2lvbih3cmFwcGVyLCAiaGllcmFyY2h5VGVzdCA9IG5ldyBDOyIpOworYXNzZXJ0KHR5cGVzLmds
b2JhbFR5cGVTZXQuZGlzcGxheVR5cGVOYW1lID09PSAiQSIsICJ2YXJpYWJsZSAnaGllcmFyY2h5
VGVzdCcgc2hvdWxkIGhhdmUgZGlzcGxheVR5cGVOYW1lICdBJyIpOworCit0eXBlcyA9IGZpbmRU
eXBlRm9yRXhwcmVzc2lvbih3cmFwcGVyLCAic2Vjb25kSGllcmFyY2h5VGVzdCA9IE9iamVjdC5j
cmVhdGUodGhlQik7Iik7Cithc3NlcnQodHlwZXMuZ2xvYmFsVHlwZVNldC5kaXNwbGF5VHlwZU5h
bWUgPT09ICJBIiwgInZhcmlhYmxlICdzZWNvbmRIaWVyYXJjaHlUZXN0JyBzaG91bGQgaGF2ZSBk
aXNwbGF5VHlwZU5hbWUgJ0EnIik7CisKK3R5cGVzID0gZmluZFR5cGVGb3JFeHByZXNzaW9uKHdy
YXBwZXIsICJzZWNvbmRIaWVyYXJjaHlUZXN0ID0gT2JqZWN0LmNyZWF0ZSh0aGVDKTsiKTsKK2Fz
c2VydCh0eXBlcy5nbG9iYWxUeXBlU2V0LmRpc3BsYXlUeXBlTmFtZSA9PT0gIkEiLCAidmFyaWFi
bGUgJ3NlY29uZEhpZXJhcmNoeVRlc3QnIHNob3VsZCBoYXZlIGRpc3BsYXlUeXBlTmFtZSAnQSci
KTsKKwordHlwZXMgPSBmaW5kVHlwZUZvckV4cHJlc3Npb24od3JhcHBlciwgInNlY29uZEIiKTsK
K2Fzc2VydCh0eXBlcy5nbG9iYWxUeXBlU2V0LmRpc3BsYXlUeXBlTmFtZSA9PT0gIkIiLCAidmFy
aWFibGUgJ3NlY29uZEInIHNob3VsZCBoYXZlIGRpc3BsYXlUeXBlTmFtZSAnQiciKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy90eXBlUHJvZmlsZXIvcmV0dXJuLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy90eXBlUHJvZmlsZXIvcmV0dXJu
LmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3R5cGVQcm9m
aWxlci9yZXR1cm4uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNCBAQAorbG9hZCgiLi9k
cml2ZXIvZHJpdmVyLmpzIik7CisKK2Z1bmN0aW9uIGZvbyh4KSB7IHJldHVybiB4OyB9CitmdW5j
dGlvbiBDdG9yKCkgeyAKKyAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQ3RvcikpCisgICAgICAg
IHJldHVybiAiTm90IGNhbGxlZCB3aXRoIGBuZXdgIjsgCit9CisKKy8vID09PT09PSBFbmQgdGVz
dCBjYXNlcyA9PT09PT0KKworZm9vKDIwKTsKK3ZhciB0eXBlcyA9IHJldHVyblR5cGVGb3IoZm9v
KTsKK2Fzc2VydCh0eXBlcy5nbG9iYWxUeXBlU2V0LmRpc3BsYXlUeXBlTmFtZSA9PT0gVC5JbnRl
Z2VyLCAiRnVuY3Rpb24gJ2Zvbycgc2hvdWxkIHJldHVybiAnSW50ZWdlciciKTsKKworZm9vKDIw
LjUpOwordHlwZXMgPSByZXR1cm5UeXBlRm9yKGZvbyk7Cithc3NlcnQodHlwZXMuZ2xvYmFsVHlw
ZVNldC5kaXNwbGF5VHlwZU5hbWUgPT09IFQuTnVtYmVyLCAiRnVuY3Rpb24gJ2Zvbycgc2hvdWxk
IHJldHVybiAnTnVtYmVyJyBhZnRlciBiZWluZyBjYWxsZWQgdHdpY2UiKTsKKworZm9vKCJoZWxs
byIpOwordHlwZXMgPSByZXR1cm5UeXBlRm9yKGZvbyk7Cithc3NlcnQodHlwZXMuZ2xvYmFsVHlw
ZVNldC5kaXNwbGF5VHlwZU5hbWUgPT09IFQuTWFueSwgIkZ1bmN0aW9uICdmb28nIHNob3VsZCBy
ZXR1cm4gJyhtYW55KScgYWZ0ZXIgYmVpbmcgY2FsbGVkIHRocmVlIHRpbWVzIik7Cithc3NlcnQo
dHlwZXMuZ2xvYmFsVHlwZVNldC5wcmltaXRpdmVUeXBlTmFtZXMuaW5kZXhPZihULlN0cmluZykg
IT09IC0xLCAiRnVuY3Rpb24gJ2Zvbycgc2hvdWxkIGhhdmUgcmV0dXJuZWQgJ1N0cmluZycgYXQg
c29tZSBwb2ludCIpOworYXNzZXJ0KHR5cGVzLmdsb2JhbFR5cGVTZXQucHJpbWl0aXZlVHlwZU5h
bWVzLmluZGV4T2YoVC5JbnRlZ2VyKSAhPT0gLTEsICJGdW5jdGlvbiAnZm9vJyBzaG91bGQgaGF2
ZSByZXR1cm5lZCAnSW50ZWdlcicgYXQgc29tZSBwb2ludCIpOworYXNzZXJ0KHR5cGVzLmdsb2Jh
bFR5cGVTZXQucHJpbWl0aXZlVHlwZU5hbWVzLmluZGV4T2YoVC5OdW1iZXIpICE9PSAtMSwgIkZ1
bmN0aW9uICdmb28nIHNob3VsZCBoYXZlIHJldHVybmVkICdOdW1iZXInIGF0IHNvbWUgcG9pbnQi
KTsKKworbmV3IEN0b3I7Cit0eXBlcyA9IHJldHVyblR5cGVGb3IoQ3Rvcik7Cithc3NlcnQodHlw
ZXMuZ2xvYmFsVHlwZVNldC5kaXNwbGF5VHlwZU5hbWUgPT09ICJDdG9yIiwgIkZ1bmN0aW9uICdD
dG9yJyBzaG91bGQgcmV0dXJuICdDdG9yJyIpOworYXNzZXJ0KHR5cGVzLmdsb2JhbFR5cGVTZXQu
c3RydWN0dXJlcy5sZW5ndGggPT09IDEsICJGdW5jdGlvbiAnQ3Rvcicgc2hvdWxkIGhhdmUgc2Vl
biBvbmUgc3RydWN0dXJlIik7CisKK0N0b3IoKTsKK3R5cGVzID0gcmV0dXJuVHlwZUZvcihDdG9y
KTsKK2Fzc2VydCh0eXBlcy5nbG9iYWxUeXBlU2V0LmRpc3BsYXlUeXBlTmFtZSA9PT0gIk9iamVj
dCIsICJGdW5jdGlvbiAnQ3Rvcicgc2hvdWxkIHJldHVybiBPYmplY3QiKTsKK2Fzc2VydCh0eXBl
cy5nbG9iYWxUeXBlU2V0LnByaW1pdGl2ZVR5cGVOYW1lcy5pbmRleE9mKFQuU3RyaW5nKSAhPT0g
LTEsICJGdW5jdGlvbiAnQ3Rvcicgc2hvdWxkIHJldHVybiBTdHJpbmciKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy90eXBlUHJvZmlsZXIvZHJpdmVyL2RyaXZlci5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvdHlwZVByb2ZpbGVyL2RyaXZl
ci9kcml2ZXIuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMv
dHlwZVByb2ZpbGVyL2RyaXZlci9kcml2ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwy
MyBAQAorLy8gVHlwZXMgbWF0Y2hpbmcgdGhvc2UgaW4gcnVudGltZS9UeXBlU2V0Cit2YXIgVCA9
IHsKKyAgICBCb29sZWFuOiJCb29sZWFuIiwKKyAgICBJbnRlZ2VyOiAiSW50ZWdlciIsCisgICAg
TnVsbDogIk51bGwiLAorICAgIE51bWJlcjogIk51bWJlciIsCisgICAgTWFueTogIihtYW55KSIs
CisgICAgU3RyaW5nOiAiU3RyaW5nIiwKKyAgICBVbmRlZmluZWQ6ICJVbmRlZmluZWQiLAorICAg
IFVuZGVmaW5lZE9yTnVsbDogIig/KSIKK307CisKK3ZhciBUT3B0aW9uYWwgPSB7CisgICAgQm9v
bGVhbjoiQm9vbGVhbj8iLAorICAgIEludGVnZXI6ICJJbnRlZ2VyPyIsCisgICAgTnVtYmVyOiAi
TnVtYmVyPyIsCisgICAgU3RyaW5nOiAiU3RyaW5nPyIKK307CisKK2Z1bmN0aW9uIGFzc2VydChj
b25kaXRpb24sIHJlYXNvbikgeworICAgIGlmICghY29uZGl0aW9uKQorICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IocmVhc29uKTsKK30KSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MzIxNCkKKysrIFRvb2xzL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDE0LTA5LTAzICBTYWFtIEJhcmF0aSAg
PHNhYW1iYXJhdGkxQGdtYWlsLmNvbT4KKworICAgICAgICBDcmVhdGUgdGVzdHMgZm9yIHR5cGUg
cHJvZmlsaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMzYxNjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBIYXZlIHJ1bi1qYXZhc2NyaXB0Y29yZS10ZXN0cyBydW4gdGhlIG5ld2x5IGNyZWF0ZWQKKyAg
ICAgICAgdGVzdHMgZm9yIHRoZSB0eXBlIHByb2ZpbGVyLgorCisgICAgICAgICogU2NyaXB0cy9y
dW4tamF2YXNjcmlwdGNvcmUtdGVzdHM6CisgICAgICAgICogU2NyaXB0cy9ydW4tanNjLXN0cmVz
cy10ZXN0czoKKwogMjAxNC0wOS0wMyAgRGFuYSBCdXJrYXJ0ICA8ZGJ1cmthcnRAYXBwbGUuY29t
PgogCiAgICAgICAgIERhc2hib2FyZCBzaG91bGQgc2hvdyBwZXJmb3JtYW5jZSBib3RzLgpJbmRl
eDogVG9vbHMvU2NyaXB0cy9ydW4tamF2YXNjcmlwdGNvcmUtdGVzdHMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvU2NyaXB0cy9ydW4tamF2YXNjcmlwdGNvcmUtdGVzdHMJKHJldmlzaW9uIDE3MzIxNCkK
KysrIFRvb2xzL1NjcmlwdHMvcnVuLWphdmFzY3JpcHRjb3JlLXRlc3RzCSh3b3JraW5nIGNvcHkp
CkBAIC0yNDAsNyArMjQwLDggQEAgaWYgKCRydW5KU0NTdHJlc3MpIHsKICAgICAgICAgIlNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MiLAogICAgICAgICAiTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9zY3JpcHQtdGVzdHMiLAogICAgICAgICAiUGVyZm9ybWFuY2VUZXN0cy9TdW5TcGlk
ZXIvcHJvZmlsZXItdGVzdC55YW1sIiwKLSAgICAgICAgIkxheW91dFRlc3RzL2pzYy1sYXlvdXQt
dGVzdHMueWFtbCIKKyAgICAgICAgIkxheW91dFRlc3RzL2pzYy1sYXlvdXQtdGVzdHMueWFtbCIs
CisgICAgICAgICJTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvdHlwZVByb2ZpbGVyLnlhbWwi
CiAgICAgKTsKICAgICBpZiAoJGVuYWJsZUZUTCkgewogICAgICAgICBwdXNoKEBqc2NTdHJlc3NE
cml2ZXJDbWQsICItLWZ0bC1qaXQiKTsKSW5kZXg6IFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJl
c3MtdGVzdHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0
cwkocmV2aXNpb24gMTczMjE0KQorKysgVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0
cwkod29ya2luZyBjb3B5KQpAQCAtNzA4LDYgKzcwOCwxNCBAQCBkZWYgcnVuRXhjZXB0aW9uRnV6
egogICAgIGFkZFJ1bkNvbW1hbmQoImV4Y2VwdGlvbi1mdXp6IiwgWyJwZXJsIiwgKHBhdGhUb0hl
bHBlcnMgKyAianMtZXhjZXB0aW9uLWZ1enoiKS50b19zLCBzdWJDb21tYW5kXSwgc2lsZW50T3V0
cHV0SGFuZGxlciwgc2ltcGxlRXJyb3JIYW5kbGVyKQogZW5kCiAKK2RlZiBydW5UeXBlUHJvZmls
ZXIKKyAgICBpZiAkZW5hYmxlRlRMCisgICAgICAgIHJ1bigiZnRsLW5vLWNqaXQtdHlwZS1wcm9m
aWxlciIsICItLWVuYWJsZVR5cGVQcm9maWxlcj10cnVlIiwgKihGVExfT1BUSU9OUyArIE5PX0NK
SVRfT1BUSU9OUykpCisgICAgZWxzZQorICAgICAgIHJ1bigibm8tY2ppdC10eXBlLXByb2ZpbGVy
IiwgIi0tZW5hYmxlVHlwZVByb2ZpbGVyPXRydWUiLCAqTk9fQ0pJVF9PUFRJT05TKQorICAgIGVu
ZAorZW5kCisKIGRlZiBydW5MYXlvdXRUZXN0KGtpbmQsICpvcHRpb25zKQogICAgIHJhaXNlIHVu
bGVzcyAkYmVuY2htYXJrLnRvX3MgPX4gL1wuanMkLwogICAgIHRlc3ROYW1lID0gJH4ucHJlX21h
dGNoCg==
</data>
<flag name="review"
          id="262298"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>