<?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>10313</bug_id>
          
          <creation_ts>2006-08-08 15:55:05 -0700</creation_ts>
          <short_desc>xsl:import and document() don&apos;t work in stylesheets loaded via XMLHttpRequest</short_desc>
          <delta_ts>2014-04-13 13:52:52 -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>XML</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>60276</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Critical</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Lamar Goddard">lamargoddard</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>aca</cc>
    
    <cc>andreas.wictor</cc>
    
    <cc>ap</cc>
    
    <cc>arnaud.diederen</cc>
    
    <cc>beidson</cc>
    
    <cc>cafulnecky</cc>
    
    <cc>darin</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>don</cc>
    
    <cc>jayvdb</cc>
    
    <cc>jesse</cc>
    
    <cc>liamjfoy</cc>
    
    <cc>martin</cc>
    
    <cc>mjs</cc>
    
    <cc>mmitar</cc>
    
    <cc>mundi</cc>
    
    <cc>nbnet</cc>
    
    <cc>srab8378</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>52073</commentid>
    <comment_count>0</comment_count>
    <who name="Lamar Goddard">lamargoddard</who>
    <bug_when>2006-08-08 15:55:05 -0700</bug_when>
    <thetext>In my testing of the javascript XSLTProcessor object, attempts to load a page that does an xsl transform with an imported stylesheet result in a browser crash.


Steps to reproduce:
Download attached ajax_xsl.zip file and unzip
Open page.xhtml file in WebKit.

Actual Results:
WebKit crashes

Expected Results:
Contents of page to be displayed as &quot;Works!&quot;.

Build &amp; platform:
Tested with r15815 on 10.4.7.

Additional info:
Works as expected with FireFox 1.5.0.4 on 10.4.7</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52074</commentid>
    <comment_count>1</comment_count>
      <attachid>9949</attachid>
    <who name="Lamar Goddard">lamargoddard</who>
    <bug_when>2006-08-08 15:57:05 -0700</bug_when>
    <thetext>Created attachment 9949
Zip archive of 2 xsl, 1 xml and 1 xhtml test files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52075</commentid>
    <comment_count>2</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2006-08-08 16:04:04 -0700</bug_when>
    <thetext>Confirmed.  Reproducible crashes are P1.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52076</commentid>
    <comment_count>3</comment_count>
      <attachid>9950</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2006-08-08 16:06:53 -0700</bug_when>
    <thetext>Created attachment 9950
Crash log (r15816)

Crash log from a locally-built debug build of WebKit r15816 on Mac OS X 10.4.7 (8J135/PowerPC) with Safari 2.0.4 (419.3).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>46695</commentid>
    <comment_count>4</comment_count>
    <who name="Stephanie Lewis">slewis</who>
    <bug_when>2006-11-06 20:31:21 -0800</bug_when>
    <thetext>radar 4823079</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>43982</commentid>
    <comment_count>5</comment_count>
    <who name="Jesse Costello-Good">jesse</who>
    <bug_when>2006-11-28 10:15:49 -0800</bug_when>
    <thetext>This is currently the most significant blocking issue related to our progress on the Safari port of GI. Any progress would be greatly appreciated. </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>39883</commentid>
    <comment_count>6</comment_count>
      <attachid>12009</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-12-24 14:24:49 -0800</bug_when>
    <thetext>Created attachment 12009
partial fix

This fixes the crash and makes libxslt look for the imported stylesheet at a correct URL. The test still doesn&apos;t pass, because XSLTProcessor doesn&apos;t know how to load stylesheets on its own, relying on the document loader to pre-load them. However, subresources are not supposed to be loaded when parsing a XMLHttpRequest response.

I thought that these fixes are still worth being landed on their own (stylesheet loading is trickier, and might take longer to implement).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>39814</commentid>
    <comment_count>7</comment_count>
      <attachid>12009</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2006-12-25 08:32:34 -0800</bug_when>
    <thetext>Comment on attachment 12009
partial fix

r=me
should also add a test case for the crash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>39802</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-12-25 10:52:42 -0800</bug_when>
    <thetext>Committed revision 18413.

&gt; should also add a test case for the crash.

When the bug is fully resolved, the attached test will cover these issues, as well. I intend to keep working on it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>39233</commentid>
    <comment_count>9</comment_count>
      <attachid>12009</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-12-28 10:23:34 -0800</bug_when>
    <thetext>Comment on attachment 12009
partial fix

Clearing the review flag from a landed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>38935</commentid>
    <comment_count>10</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-12-30 02:05:58 -0800</bug_when>
    <thetext>Hm, I&apos;m getting the crash again. I guess I broke that part of the fix with some last-minute change :-/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>38722</commentid>
    <comment_count>11</comment_count>
      <attachid>12131</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-12-31 05:09:56 -0800</bug_when>
    <thetext>Created attachment 12131
work in progress

This fixes the crash for real, makes a correct absolute URL to be generated in one more place, and lets XSLImportRule know when it should load synchronously. 

A remaining architectural problem is that frameless documents such as those loaded by XMLHttpRequest can never load subresources in WebKit. Perhaps these documents should inherit FrameLoader from the document that created them or to get one of their own, I&apos;m not sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>37927</commentid>
    <comment_count>12</comment_count>
      <attachid>12158</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-01-02 02:18:23 -0800</bug_when>
    <thetext>Created attachment 12158
partial fix 2

This fixes the crash for real (by removing some XSLTProcessor logic that seems unnecessary), passes an URL in one more place and adds a test case. Please note that running the test under a debug build produces console output:

fast/xsl .....compilation error: file file:///Users/ap/WebKit/LayoutTests/fast/xsl/resources/xhr-doc.xsl line 3 element import
xsl:import : unable to load file:///Users/ap/WebKit/LayoutTests/fast/xsl/resources/xhr-doc-imported.xsl
......................</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>36850</commentid>
    <comment_count>13</comment_count>
    <who name="Jesse Costello-Good">jesse</who>
    <bug_when>2007-01-05 13:06:21 -0800</bug_when>
    <thetext>Just tested this in 18614 and I&apos;m still getting a crash. 

Date/Time:      2007-01-05 12:57:57.978 -0800
OS Version:     10.4.8 (Build 8L2127)
Report Version: 4

Command: Safari
Path:    /Applications/Safari.app/Contents/MacOS/Safari
Parent:  WindowServer [56]

Version: ??? (18614)

PID:    27834
Thread: 0

Exception:  EXC_BAD_ACCESS (0x0001)
Codes:      KERN_PROTECTION_FAILURE (0x0002) at 0x00000038

Thread 0 Crashed:
0   com.apple.WebCore              	0x0103d944 WebCore::XSLStyleSheet::document() + 6
1   com.apple.WebCore              	0x0103db2d WebCore::XSLStyleSheet::locateStylesheetSubResource(_xmlDoc*, unsigned char const*) + 25
2   com.apple.WebCore              	0x0103f509 WebCore::docLoaderFunc(unsigned char const*, _xmlDict*, int, void*, xsltLoadType) + 1263
3   libxslt.1.dylib                	0x95758f81 xsltParseStylesheetImport + 350
4   libxslt.1.dylib                	0x9574837e xsltParseStylesheetProcess + 915
5   libxslt.1.dylib                	0x9574928c xsltParseStylesheetImportedDoc + 493
6   libxslt.1.dylib                	0x957492fb xsltParseStylesheetDoc + 26
7   com.apple.WebCore              	0x0103d98e WebCore::XSLStyleSheet::compileStyleSheet() + 48
8   com.apple.WebCore              	0x0103e34c WebCore::XSLTProcessor::transformToString(WebCore::Node*, WebCore::DeprecatedString&amp;, WebCore::DeprecatedString&amp;, WebCore::DeprecatedString&amp;) + 186
9   com.apple.WebCore              	0x0103fe48 WebCore::XSLTProcessor::transformToDocument(WebCore::Node*) + 104
10  com.apple.WebCore              	0x0122257a KJS::XSLTProcessorProtoFunc::callAsFunction(KJS::ExecState*, KJS::JSObject*, KJS::List const&amp;) + 1648
11  com.apple.JavaScriptCore       	0x0013b934 KJS::JSObject::call(KJS::ExecState*, KJS::JSObject*, KJS::List const&amp;) + 112
12  com.apple.JavaScriptCore       	0x0012f919 KJS::FunctionCallDotNode::evaluate(KJS::ExecState*) + 663
13  com.apple.JavaScriptCore       	0x0012dae9 KJS::VarDeclNode::evaluate(KJS::ExecState*) + 55
14  com.apple.JavaScriptCore       	0x0012da5a KJS::VarDeclListNode::evaluate(KJS::ExecState*) + 42
15  com.apple.JavaScriptCore       	0x00133a3b KJS::VarStatementNode::execute(KJS::ExecState*) + 117
16  com.apple.JavaScriptCore       	0x0013695d KJS::SourceElementsNode::execute(KJS::ExecState*) + 421
17  com.apple.JavaScriptCore       	0x00133b0d KJS::BlockNode::execute(KJS::ExecState*) + 67
18  com.apple.JavaScriptCore       	0x00122427 KJS::DeclaredFunctionImp::execute(KJS::ExecState*) + 45
19  com.apple.JavaScriptCore       	0x00121ef0 KJS::FunctionImp::callAsFunction(KJS::ExecState*, KJS::JSObject*, KJS::List const&amp;) + 338
20  com.apple.JavaScriptCore       	0x0013b934 KJS::JSObject::call(KJS::ExecState*, KJS::JSObject*, KJS::List const&amp;) + 112
21  com.apple.JavaScriptCore       	0x0012f919 KJS::FunctionCallDotNode::evaluate(KJS::ExecState*) + 663
22  com.apple.JavaScriptCore       	0x0013571f KJS::ReturnNode::execute(KJS::ExecState*) + 189
23  com.apple.JavaScriptCore       	0x0013685b KJS::SourceElementsNode::execute(KJS::ExecState*) + 163
24  com.apple.JavaScriptCore       	0x00133b0d KJS::BlockNode::execute(KJS::ExecState*) + 67
25  com.apple.JavaScriptCore       	0x00136545 KJS::TryNode::execute(KJS::ExecState*) + 123
26  com.apple.JavaScriptCore       	0x0013695d KJS::SourceElementsNode::execute(KJS::ExecState*) + 421
27  com.apple.JavaScriptCore       	0x00133b0d KJS::BlockNode::execute(KJS::ExecState*) + 67
28  com.apple.JavaScriptCore       	0x00122427 KJS::DeclaredFunctionImp::execute(KJS::ExecState*) + 45
29  com.apple.JavaScriptCore       	0x00121ef0 KJS::FunctionImp::callAsFunction(KJS::ExecState*, KJS::JSObject*, KJS::List const&amp;) + 338
30  com.apple.JavaScriptCore       	0x0013b934 KJS::JSObject::call(KJS::ExecState*, KJS::JSObject*, KJS::List const&amp;) + 112
31  com.apple.JavaScriptCore       	0x0012f919 KJS::FunctionCallDotNode::evaluate(KJS::ExecState*) + 663
32  com.apple.JavaScriptCore       	0x0012dae9 KJS::VarDeclNode::evaluate(KJS::ExecState*) + 55
33  com.apple.JavaScriptCore       	0x0012da5a KJS::VarDeclListNode::evaluate(KJS::ExecState*) + 42
34  com.apple.JavaScriptCore       	0x00133a3b KJS::VarStatementNode::execute(KJS::ExecState*) + 117
35  com.apple.JavaScriptCore       	0x0013695d KJS::SourceElementsNode::execute(KJS::ExecState*) + 421
36  com.apple.JavaScriptCore       	0x00133b0d KJS::BlockNode::execute(KJS::ExecState*) + 67
37  com.apple.JavaScriptCore       	0x00133d9a KJS::IfNode::execute(KJS::ExecState*) + 270
38  com.apple.JavaScriptCore       	0x0013695d KJS::SourceElementsNode::execute(KJS::ExecState*) + 421
39  com.apple.JavaScriptCore       	0x00133b0d KJS::BlockNode::execute(KJS::ExecState*) + 67
40  com.apple.JavaScriptCore       	0x00122427 KJS::DeclaredFunctionImp::execute(KJS::ExecState*) + 45
41  com.apple.JavaScriptCore       	0x00121ef0 KJS::FunctionImp::callAsFunction(KJS::ExecState*, KJS::JSObject*, KJS::List const&amp;) + 338
42  com.apple.JavaScriptCore       	0x0013b934 KJS::JSObject::call(KJS::ExecState*, KJS::JSObject*, KJS::List const&amp;) + 112
43  com.apple.JavaScriptCore       	0x0012f919 KJS::FunctionCallDotNode::evaluate(KJS::ExecState*) + 663
44  com.apple.JavaScriptCore       	0x0012dae9 KJS::VarDeclNode::evaluate(KJS::ExecState*) + 55
45  com.apple.JavaScriptCore       	0x0012da5a KJS::VarDeclListNode::evaluate(KJS::ExecState*) + 42
46  com.apple.JavaScriptCore       	0x00133a3b KJS::VarStatementNode::execute(KJS::ExecState*) + 117
47  com.apple.JavaScriptCore       	0x0013695d KJS::SourceElementsNode::execute(KJS::ExecState*) + 421
48  com.apple.JavaScriptCore       	0x00133b0d KJS::BlockNode::execute(KJS::ExecState*) + 67
49  com.apple.JavaScriptCore       	0x00122427 KJS::DeclaredFunctionImp::execute(KJS::ExecState*) + 45
50  com.apple.JavaScriptCore       	0x00121ef0 KJS::FunctionImp::callAsFunction(KJS::ExecState*, KJS::JSObject*, KJS::List const&amp;) + 338
51  com.apple.JavaScriptCore       	0x0013b934 KJS::JSObject::call(KJS::ExecState*, KJS::JSObject*, KJS::List const&amp;) + 112
52  com.apple.JavaScriptCore       	0x0012ffd0 KJS::FunctionCallResolveNode::evaluate(KJS::ExecState*) + 662
53  com.apple.JavaScriptCore       	0x00133bef KJS::ExprStatementNode::execute(KJS::ExecState*) + 117
54  com.apple.JavaScriptCore       	0x0013685b KJS::SourceElementsNode::execute(KJS::ExecState*) + 163
55  com.apple.JavaScriptCore       	0x00133b0d KJS::BlockNode::execute(KJS::ExecState*) + 67
56  com.apple.JavaScriptCore       	0x00133d9a KJS::IfNode::execute(KJS::ExecState*) + 270
57  com.apple.JavaScriptCore       	0x0013685b KJS::SourceElementsNode::execute(KJS::ExecState*) + 163
58  com.apple.JavaScriptCore       	0x00133b0d KJS::BlockNode::execute(KJS::ExecState*) + 67
59  com.apple.JavaScriptCore       	0x00122427 KJS::DeclaredFunctionImp::execute(KJS::ExecState*) + 45
60  com.apple.JavaScriptCore       	0x00121ef0 KJS::FunctionImp::callAsFunction(KJS::ExecState*, KJS::JSObject*, KJS::List const&amp;) + 338
61  com.apple.JavaScriptCore       	0x0013b934 KJS::JSObject::call(KJS::ExecState*, KJS::JSObject*, KJS::List const&amp;) + 112
62  com.apple.JavaScriptCore       	0x0012f919 KJS::FunctionCallDotNode::evaluate(KJS::ExecState*) + 663
63  com.apple.JavaScriptCore       	0x00133bef KJS::ExprStatementNode::execute(KJS::ExecState*) + 117
64  com.apple.JavaScriptCore       	0x0013685b KJS::SourceElementsNode::execute(KJS::ExecState*) + 163
65  com.apple.JavaScriptCore       	0x00133b0d KJS::BlockNode::execute(KJS::ExecState*) + 67
66  com.apple.JavaScriptCore       	0x00122ceb KJS::GlobalFuncImp::callAsFunction(KJS::ExecState*, KJS::JSObject*, KJS::List const&amp;) + 641
67  com.apple.JavaScriptCore       	0x0013b934 KJS::JSObject::call(KJS::ExecState*, KJS::JSObject*, KJS::List const&amp;) + 112
68  com.apple.JavaScriptCore       	0x0012ffd0 KJS::FunctionCallResolveNode::evaluate(KJS::ExecState*) + 662
69  com.apple.JavaScriptCore       	0x00133bef KJS::ExprStatementNode::execute(KJS::ExecState*) + 117
70  com.apple.JavaScriptCore       	0x0013695d KJS::SourceElementsNode::execute(KJS::ExecState*) + 421
71  com.apple.JavaScriptCore       	0x00133b0d KJS::BlockNode::execute(KJS::ExecState*) + 67
72  com.apple.JavaScriptCore       	0x00136545 KJS::TryNode::execute(KJS::ExecState*) + 123
73  com.apple.JavaScriptCore       	0x0013695d KJS::SourceElementsNode::execute(KJS::ExecState*) + 421
74  com.apple.JavaScriptCore       	0x00133b0d KJS::BlockNode::execute(KJS::ExecState*) + 67
75  com.apple.JavaScriptCore       	0x00122427 KJS::DeclaredFunctionImp::execute(KJS::ExecState*) + 45
76  com.apple.JavaScriptCore       	0x00121ef0 KJS::FunctionImp::callAsFunction(KJS::ExecState*, KJS::JSObject*, KJS::List const&amp;) + 338
77  com.apple.JavaScriptCore       	0x0013b934 KJS::JSObject::call(KJS::ExecState*, KJS::JSObject*, KJS::List const&amp;) + 112
78  com.apple.JavaScriptCore       	0x0012f919 KJS::FunctionCallDotNode::evaluate(KJS::ExecState*) + 663
79  com.apple.JavaScriptCore       	0x00133bef KJS::ExprStatementNode::execute(KJS::ExecState*) + 117
80  com.apple.JavaScriptCore       	0x0013695d KJS::SourceElementsNode::execute(KJS::ExecState*) + 421
81  com.apple.JavaScriptCore       	0x00133b0d KJS::BlockNode::execute(KJS::ExecState*) + 67
82  com.apple.JavaScriptCore       	0x00122427 KJS::DeclaredFunctionImp::execute(KJS::ExecState*) + 45
83  com.apple.JavaScriptCore       	0x00121ef0 KJS::FunctionImp::callAsFunction(KJS::ExecState*, KJS::JSObject*, KJS::List const&amp;) + 338
84  com.apple.JavaScriptCore       	0x0013b934 KJS::JSObject::call(KJS::ExecState*, KJS::JSObject*, KJS::List const&amp;) + 112
85  com.apple.JavaScriptCore       	0x0012f919 KJS::FunctionCallDotNode::evaluate(KJS::ExecState*) + 663
86  com.apple.JavaScriptCore       	0x00133bef KJS::ExprStatementNode::execute(KJS::ExecState*) + 117
87  com.apple.JavaScriptCore       	0x0013685b KJS::SourceElementsNode::execute(KJS::ExecState*) + 163
88  com.apple.JavaScriptCore       	0x00133b0d KJS::BlockNode::execute(KJS::ExecState*) + 67
89  com.apple.JavaScriptCore       	0x0012582b KJS::Interpreter::evaluate(KJS::UString const&amp;, int, KJS::UChar const*, int, KJS::JSValue*) + 1067
90  com.apple.WebCore              	0x0123bce2 WebCore::KJSProxy::evaluate(WebCore::String const&amp;, int, WebCore::String const&amp;, WebCore::Node*) + 184
91  com.apple.WebCore              	0x0137f83d WebCore::FrameLoader::executeScript(WebCore::String const&amp;, int, WebCore::Node*, WebCore::String const&amp;) + 75
92  com.apple.WebCore              	0x0137f8c1 WebCore::FrameLoader::executeScript(WebCore::Node*, WebCore::String const&amp;, bool) + 65
93  com.apple.WebCore              	0x012414b6 KJS::ScheduledAction::execute(KJS::Window*) + 644
94  com.apple.WebCore              	0x0124170a KJS::Window::timerFired(KJS::DOMWindowTimer*) + 336
95  com.apple.WebCore              	0x012417b5 KJS::DOMWindowTimer::fired() + 39
96  com.apple.WebCore              	0x011e43c8 WebCore::TimerBase::fireTimers(double, WTF::Vector&lt;WebCore::TimerBase*, (unsigned long)0&gt; const&amp;) + 74
97  com.apple.WebCore              	0x011e44a4 WebCore::TimerBase::sharedTimerFired() + 144
98  com.apple.CoreFoundation       	0x90829bc9 CFRunLoopRunSpecific + 3341
99  com.apple.CoreFoundation       	0x90828eb5 CFRunLoopRunInMode + 61
100 com.apple.HIToolbox            	0x92dcdb90 RunCurrentEventLoopInMode + 285
101 com.apple.HIToolbox            	0x92dcd297 ReceiveNextEventCommon + 385
102 com.apple.HIToolbox            	0x92dcd0ee BlockUntilNextEventMatchingListInMode + 81
103 com.apple.AppKit               	0x9326f465 _DPSNextEvent + 572
104 com.apple.AppKit               	0x9326f056 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 137
105 com.apple.Safari               	0x00006f96 0x1000 + 24470
106 com.apple.AppKit               	0x93268ddb -[NSApplication run] + 512
107 com.apple.AppKit               	0x9325cd2f NSApplicationMain + 573
108 com.apple.Safari               	0x0005f7de 0x1000 + 387038
109 com.apple.Safari               	0x0005f6f9 0x1000 + 386809
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>36730</commentid>
    <comment_count>14</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-01-06 01:55:22 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; Just tested this in 18614 and I&apos;m still getting a crash. 

Correct - patch #2 hasn&apos;t been landed (or reviewed) yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>36626</commentid>
    <comment_count>15</comment_count>
      <attachid>12158</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-01-06 18:05:47 -0800</bug_when>
    <thetext>Comment on attachment 12158
partial fix 2

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>36590</commentid>
    <comment_count>16</comment_count>
      <attachid>12158</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-01-07 03:34:53 -0800</bug_when>
    <thetext>Comment on attachment 12158
partial fix 2

Committed revision 18644; clearing review flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>36591</commentid>
    <comment_count>17</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-01-07 03:36:26 -0800</bug_when>
    <thetext>Reassigning to webkit-unassigned while waiting for the architectural changes need to resolve the remaining problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>22955</commentid>
    <comment_count>18</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-02-16 20:45:44 -0800</bug_when>
    <thetext>What are the needed architectural changes?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>22959</commentid>
    <comment_count>19</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-02-16 22:21:39 -0800</bug_when>
    <thetext>From comment 11:

A remaining architectural problem is that frameless documents such as those
loaded by XMLHttpRequest can never load subresources in WebKit. Perhaps these
documents should inherit FrameLoader from the document that created them or to
get one of their own, I&apos;m not sure.

This also makes XMLHttpRequests unable to work from onunload handlers (YouTube tries to do that to track when the user leaves a page).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105648</commentid>
    <comment_count>20</comment_count>
    <who name="Martin Marko">marcus</who>
    <bug_when>2009-01-14 02:41:04 -0800</bug_when>
    <thetext>Sorry for question: 
is there any other way to load stylesheet for XSLTProcessor than 
using XMLHttpRequest ? The one that will work correctly in JavaScript and will support xsl:import,xsl:include ?

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105650</commentid>
    <comment_count>21</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-01-14 04:05:58 -0800</bug_when>
    <thetext>In order for import, include and document() to work, the document currently has be in a frame, so I don&apos;t think there is a workaround for XSLTProcessor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121698</commentid>
    <comment_count>22</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-05-17 11:51:29 -0700</bug_when>
    <thetext>*** Bug 25839 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213037</commentid>
    <comment_count>23</comment_count>
    <who name="Charles Fulnecky">cafulnecky</who>
    <bug_when>2010-04-15 14:09:07 -0700</bug_when>
    <thetext>Status update:

Windows XP:
Safari  (4.0.5)        - Fails Test
Chrome  (4.1.249.1045) - Fails Test
IE8     (with Sarissa) - Fails Test     
Firefox (3.6.3)        - Passes Test
Opera   (10.5.1)       - Passes Test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221076</commentid>
    <comment_count>24</comment_count>
      <attachid>55115</attachid>
    <who name="Andreas Wictor">andreas.wictor</who>
    <bug_when>2010-05-05 06:11:20 -0700</bug_when>
    <thetext>Created attachment 55115
Fix so that frameless documents from XMLHttpRequest can load subresources

I have introduced a originFrame pointer on documents which is set by XMLHttpRequest so it can be used when there is no frame pointer. The existing frame pointer was used in too many places so it was safer to introduce a new concept instead. Frames also saves a pointer to each subresource so that the originFrame pointer can be reset when frames are destroyed. It was also necessary to pass in a ownerDocument to Document::open so that we can set SecurityOrigin and change so that xsl imports are loaded synchroniously.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221134</commentid>
    <comment_count>25</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-05-05 09:05:01 -0700</bug_when>
    <thetext>It would be great to have this problem finally addressed, thanks for looking into it!

One consequence of keeping a reference to originFrame is that loading from frameless documents breaks in two cases:
1) originFrame is navigated to a different origin, so we can no longer use its FrameLoader;
2) originFrame is destroyed.

Is this what happens in other browsers, too?

CC&apos;ing some people who may have more insight into consequences of sharing originFrame in this way.

We should really be making an origin frame reference for documents created via document.implementation.createDocument() or DOMParser.parseFromString(), too. XMLHttpRequest is an important use case, but there is nothing unique about it.

The changes to XSLImportRule::loadSheet() look as if asynchronous loading was turned into synchronous, which would be a bad thing. But maybe it&apos;s only the looks, I don&apos;t remember how this function really works. A ChangeLog with a per-function explanation of changes would help a lot.

Besides a ChangeLog, a final patch would need a lot of test cases to go in - both for things that now work, and for known problems that are prevented by clever design. Please see &lt;http://webkit.org/coding/contributing.html&gt; for all the details.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222237</commentid>
    <comment_count>26</comment_count>
    <who name="Andreas Wictor">andreas.wictor</who>
    <bug_when>2010-05-07 01:11:27 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; The changes to XSLImportRule::loadSheet() look as if asynchronous loading was
&gt; turned into synchronous, which would be a bad thing. But maybe it&apos;s only the
&gt; looks, I don&apos;t remember how this function really works. A ChangeLog with a
&gt; per-function explanation of changes would help a lot.

Yes, the original code was asynchronous but I could not get it to work. The asynchronous load would always complete after the failed transformation unless it was already cached.

Is there some way to suspend the transformation until all imported documents are loaded? And is it really desirable, doesn&apos;t the Javascript programmer expect the transform functions to be synchronous?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222395</commentid>
    <comment_count>27</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-05-07 08:41:02 -0700</bug_when>
    <thetext>Yes, transforms invoked via JavaScript API have to be synchronous. But we need to make sure that behavior for transformed documents loaded into a frame doesn&apos;t get worse - I think these functions are used for both.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228905</commentid>
    <comment_count>28</comment_count>
      <attachid>56707</attachid>
    <who name="Andreas Wictor">andreas.wictor</who>
    <bug_when>2010-05-21 07:46:20 -0700</bug_when>
    <thetext>Created attachment 56707
New proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228909</commentid>
    <comment_count>29</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-21 07:51:32 -0700</bug_when>
    <thetext>Attachment 56707 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/ChangeLog:63:  Line contains tab character.  [whitespace/tab] [5]
WebCore/ChangeLog:65:  Line contains tab character.  [whitespace/tab] [5]
WebCore/dom/Document.h:465:  Use 0 instead of NULL.  [readability/null] [4]
Total errors found: 3 in 37 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229257</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-22 06:39:32 -0700</bug_when>
    <thetext>Attachment 56707 did not build on win:
Build output: http://webkit-commit-queue.appspot.com/results/2381029</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229263</commentid>
    <comment_count>31</comment_count>
      <attachid>56707</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-05-22 08:17:56 -0700</bug_when>
    <thetext>Comment on attachment 56707
New proposed patch

WebCore/bindings/js/JSDOMImplementationCustom.cpp:30
 +  JSValue JSDOMImplementation::createDocument(ExecState* exec, const ArgList&amp; args)
Please don&apos;t create more custom bindings.  Instead, you should use the [CallWith=ScriptExecutionContext] IDL attribute.

WebCore/dom/Document.cpp:1285
 +              ScriptExecutionContext::setSecurityOrigin(doc-&gt;securityOrigin());
I don&apos;t understand why we do this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229702</commentid>
    <comment_count>32</comment_count>
    <who name="Andreas Wictor">andreas.wictor</who>
    <bug_when>2010-05-24 04:57:20 -0700</bug_when>
    <thetext>(In reply to comment #31)
&gt; (From update of attachment 56707 [details])
&gt; WebCore/bindings/js/JSDOMImplementationCustom.cpp:30
&gt;  +  JSValue JSDOMImplementation::createDocument(ExecState* exec, const ArgList&amp; args)
&gt; Please don&apos;t create more custom bindings.  Instead, you should use the [CallWith=ScriptExecutionContext] IDL attribute.

I did not know about this IDL attribute, will look into it.

&gt; WebCore/dom/Document.cpp:1285
&gt;  +              ScriptExecutionContext::setSecurityOrigin(doc-&gt;securityOrigin());
&gt; I don&apos;t understand why we do this.

If we do not copy the securityOrigin from the originFrame&apos;s document then it will be empty and that means calls to SecurityOrigin::canRequest(const KURL&amp;) will return false.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229796</commentid>
    <comment_count>33</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-05-24 10:21:49 -0700</bug_when>
    <thetext>&gt; If we do not copy the securityOrigin from the originFrame&apos;s document then
&gt; it will be empty and that means calls to SecurityOrigin::canRequest(const KURL&amp;)
&gt; will return false.

Do any (all?) of the tests you added fail without this line?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230136</commentid>
    <comment_count>34</comment_count>
    <who name="Andreas Wictor">andreas.wictor</who>
    <bug_when>2010-05-25 00:41:16 -0700</bug_when>
    <thetext>(In reply to comment #33)
&gt; Do any (all?) of the tests you added fail without this line?

They will all fail without this line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230138</commentid>
    <comment_count>35</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-05-25 00:46:40 -0700</bug_when>
    <thetext>&gt; &gt; WebCore/dom/Document.cpp:1285
&gt; &gt;  +              ScriptExecutionContext::setSecurityOrigin(doc-&gt;securityOrigin());
&gt; &gt; I don&apos;t understand why we do this.
&gt; 
&gt; If we do not copy the securityOrigin from the originFrame&apos;s document then it will be empty and that means calls to SecurityOrigin::canRequest(const KURL&amp;) will return false.

I can&apos;t be right to unconditionally copy the security origin (and the cookie origin) to the new document.  The document should be able to make its own origin from its own URL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230149</commentid>
    <comment_count>36</comment_count>
    <who name="Andreas Wictor">andreas.wictor</who>
    <bug_when>2010-05-25 01:25:18 -0700</bug_when>
    <thetext>(In reply to comment #35)
&gt; The document should be able to make its own origin from its own URL.

Yes that could be possible for documents from XMLHttpRequest but not for documents from DOMParser.parseFromString() or document.implementation.createDocument().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230285</commentid>
    <comment_count>37</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-05-25 08:31:08 -0700</bug_when>
    <thetext>What origin do documents retrieved via XHR get in Firefox? There should really be a test for this added (we usually test cross-origin issues on 127.0.0.1:8000 vs. localhost:8000).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230288</commentid>
    <comment_count>38</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-05-25 08:40:43 -0700</bug_when>
    <thetext>+        (*it)-&gt;setOriginFrame(0);

With this patch, origin frame is reset when frame is destroyed, but I don&apos;t see what takes care of frame navigation. Please test the case where a subframe creates a document with DOMParser, hands it off to parent frame, and navigates to a different domain.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230757</commentid>
    <comment_count>39</comment_count>
      <attachid>57113</attachid>
    <who name="Andreas Wictor">andreas.wictor</who>
    <bug_when>2010-05-26 10:15:25 -0700</bug_when>
    <thetext>Created attachment 57113
work in progress

Change the code to use the [CallWith=ScriptExecutionContext] IDL attribute and added two tests, one for importing stylesheets cross origin and one for frame navigation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230761</commentid>
    <comment_count>40</comment_count>
    <who name="Andreas Wictor">andreas.wictor</who>
    <bug_when>2010-05-26 10:28:06 -0700</bug_when>
    <thetext>(In reply to comment #37)
&gt; What origin do documents retrieved via XHR get in Firefox? There should really be a test for this added (we usually test cross-origin issues on 127.0.0.1:8000 vs. localhost:8000).

Is the cross-origin test from my latest patch what you&apos;re looking for? I get the same behavior with this patch as I get in Firefox.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234202</commentid>
    <comment_count>41</comment_count>
      <attachid>57871</attachid>
    <who name="Andreas Wictor">andreas.wictor</who>
    <bug_when>2010-06-04 07:15:16 -0700</bug_when>
    <thetext>Created attachment 57871
New proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234291</commentid>
    <comment_count>42</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-06-04 11:00:39 -0700</bug_when>
    <thetext>&gt; Is the cross-origin test from my latest patch what you&apos;re looking for?

Sorry, I missed the question originally. I was looking for two tests - one for blocked cross-origin load (that you added), and another for permitted same origin load in the case of cross-origin XMLHttpRequest.

The transform-xhr-doc-cross-origin test you added has console output in expected results, which I don&apos;t think is the right way to report success. Also, explanatory text makes it sound like a semi-failure - isn&apos;t it expected and correct that transformation fails?

+CONSOLE MESSAGE: line 20: TypeError: Result of expression &apos;doc&apos; [undefined] is not an object.
+Test for bug 10313: xsl:import doesn&apos;t work in stylesheets loaded via XMLHttpRequest.
+
+It&apos;s nice that this hasn&apos;t crashed, but the XSL transformation has failed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235213</commentid>
    <comment_count>43</comment_count>
      <attachid>58131</attachid>
    <who name="Andreas Wictor">andreas.wictor</who>
    <bug_when>2010-06-08 05:12:24 -0700</bug_when>
    <thetext>Created attachment 58131
proposed patch

A new test added and some changes to explanatory texts in tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237396</commentid>
    <comment_count>44</comment_count>
      <attachid>58131</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-06-12 18:47:01 -0700</bug_when>
    <thetext>Comment on attachment 58131
proposed patch

Thanks for taking this on.

I&apos;m pretty sure this would work out better if it was a document that had subdocuments rather than a frame that has subdocuments. Similarly, the owner should be a document rather than a frame.

&gt; -    return CREATE_DOM_OBJECT_WRAPPER(exec, jsConstructor-&gt;globalObject(), XSLTProcessor, XSLTProcessor::create().get());
&gt; +    RefPtr&lt;XSLTProcessor&gt; xsltProcessor = XSLTProcessor::create(context);
&gt; +    return CREATE_DOM_OBJECT_WRAPPER(exec, jsConstructor-&gt;globalObject(), XSLTProcessor, xsltProcessor.get());

Breaking this up into two lines doesn&apos;t seem like a big improvement. You could have just added the &quot;context&quot; to the existing line and I think it would have read more clearly.

As long as you are adding a local variable, I would suggest just calling it processor; no need to give it the more awkward name xsltProcessor.

&gt; +    if (m_scriptExecutionContext &amp;&amp; m_scriptExecutionContext-&gt;isDocument()) {
&gt; +        Document* originDoc = static_cast&lt;Document*&gt;(m_scriptExecutionContext);
&gt; +        if (originDoc-&gt;frame())
&gt; +            originDoc-&gt;frame()-&gt;registerSubDocument(doc.get());
&gt; +    }

Please don&apos;t abbreviate &quot;document&quot; as &quot;doc&quot; in new code.

&gt; -    DOMImplementation() { }
&gt; +    DOMImplementation(ScriptExecutionContext* context)
&gt; +        : m_scriptExecutionContext(context) { }

Once we reach the point where the definition is not all on one line, we use a different brace style. It would be like this:

    DOMImplementation(ScriptExecutionContext* context) : m_scriptExecutionContext(context) { }

Or this:

    DOMImplementation(ScriptExecutionContext* context)
        : m_scriptExecutionContext(context)
    {
    }

&gt; +    ScriptExecutionContext* m_scriptExecutionContext;

I don&apos;t understand why it&apos;s safe for a DOMImplementation object to hold a raw pointer to a ScriptExecutionContext. What guarantees that the context won&apos;t be deallocated? I think this needs to be a RefPtr.

&gt; +void Document::setOriginFrame(Frame* frame, const KURL&amp; url)

It&apos;s entirely unclear what the URL is here. I know you understand it, but you need to leave something behind to make it clear what the URL is.

&gt; +{
&gt; +    m_originFrame = frame;
&gt; +    if (m_originFrame) {
&gt; +        if (!url.isEmpty()) {
&gt; +            m_cookieURL = url;
&gt; +            ScriptExecutionContext::setSecurityOrigin(SecurityOrigin::create(url));
&gt; +        } else if (Document* doc = m_originFrame-&gt;document()) {

Please don&apos;t use the abbreviation &quot;doc&quot; for &quot;document&quot; in new code.

Why is it OK to leave m_cookieURL set to the old value when the origin frame is set to 0? Why is it OK to leave the security origin when the frame is set to 0. It seems to me that the function setting the frame to 0 is really a different one than the one setting the frame. All the call sites seem to be &quot;always setting the frame&quot; and &quot;always disconnecting the frame&quot; so I suggest having two separate functions for this.

&gt; +    Frame* originFrame() const { return m_originFrame; } // can be NULL
&gt; +    void setOriginFrame(Frame* frame, const KURL&amp; url = KURL());

I find the name &quot;origin frame&quot; to be confusing. Is there some term used for this in the HTML specification? Also, can this be a document instead of a frame? The same frame is reused for successive documents, and so having a pointer to a frame is more dangerous than a pointer to a document, because the document is not reused.

The comment saying this can be null is not that useful. A more useful comment would be one defining the term &quot;origin frame&quot;.

&gt; +void Frame::registerSubDocument(Document* doc, const KURL&amp; url)

Since the word is &quot;subdocument&quot; and not the two words &quot;sub document&quot; it should be registerSubdocument, unregisterSubdocument, and m_subdocuments.

&gt; +    if (doc) {

Why is the check for null needed? Is it legal for someone to call this with a null pointer?

&gt; +void Frame::clearRegisteredSubDocuments()
&gt; +{
&gt; +    if (!m_subDocuments.isEmpty()) {

In WebKit we normally use early return for this sort of thing, rather than nesting the function body inside an if.

&gt; +        for (HashSet&lt;Document*&gt;::iterator it = m_subDocuments.begin();
&gt; +             it != m_subDocuments.end(); ++it)

This for statement should be on one line in the usual WebKit coding style.

&gt; +        void registerSubDocument(Document* doc, const KURL&amp; url = KURL());
&gt; +        void unregisterSubDocument(Document* doc);

The argument names here should be omitted.

&gt; +        // use base url from originFrame&apos;s document when parent stylesheet dont have an final url
&gt; +        // this can for example happen when the stylesheet is created with DOMParser.parseFromString

Comments should be in sentence style with capital letter and period at the end. Also worth fixing up the grammar.

&gt; +    if (ownerNode &amp;&amp; ownerNode-&gt;nodeType() == Node::PROCESSING_INSTRUCTION_NODE)
&gt; +        loadSheetAsync(docLoader, absHref);
&gt; +    else
&gt; +        loadSheetSync(docLoader, absHref);

These new functions don&apos;t have good names. For one thing, they don&apos;t do the entire job of loading the sheet, since they don&apos;t do the other things that loadSheet does, so the names are poor in that sense. Also, we normally use the adverbs &quot;synchronously&quot; and &quot;asynchronously&quot; as you can see in various existing function names, and you should do the same here. Maybe finishLoadingSheetAsynchronously?

It’s also unfortunate that we have copied and pasted code now. Is there a way to share more of the code?

&gt; +    void loadSheetAsync(DocLoader* docLoader, const String&amp; absHref);
&gt; +    void loadSheetSync(DocLoader* docLoader, const String&amp; absHref);

The argument names &quot;docLoader&quot; should be omitted here.

It does look like you added a good number of test cases, which is great.

review- largely because of the m_scriptExecutionContext raw pointer issue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238974</commentid>
    <comment_count>45</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-06-16 11:18:36 -0700</bug_when>
    <thetext>*** Bug 40715 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239279</commentid>
    <comment_count>46</comment_count>
      <attachid>58970</attachid>
    <who name="Andreas Wictor">andreas.wictor</who>
    <bug_when>2010-06-17 01:19:34 -0700</bug_when>
    <thetext>Created attachment 58970
New proposed patch

Changes from last patch: Store an &quot;origin document&quot; instead of an &quot;origin frame&quot; on documents plus other changes suggested by Darin Adler</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239383</commentid>
    <comment_count>47</comment_count>
      <attachid>58970</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-06-17 07:43:40 -0700</bug_when>
    <thetext>Comment on attachment 58970
New proposed patch

&gt; Index: WebCore/dom/DOMImplementation.h
&gt; ===================================================================
&gt; --- WebCore/dom/DOMImplementation.h	(revision 61177)
&gt; +++ WebCore/dom/DOMImplementation.h	(working copy)
&gt; @@ -24,6 +24,7 @@
&gt;  #ifndef DOMImplementation_h
&gt;  #define DOMImplementation_h
&gt;  
&gt; +#include &lt;Document.h&gt;
&gt;  #include &lt;wtf/PassRefPtr.h&gt;
&gt;  #include &lt;wtf/RefCounted.h&gt;

Why does DOMImplementation.h now need to include Document.h? I don&apos;t see new code that depends on Document, but rather ScriptExecutionContext.h. I think it would make sense to include &quot;ScriptExecutionContext.h&quot; here. Further, the syntax &lt;Document.h&gt; is incorrect, since we are in the same module. The include should be &quot;Document.h&quot;. The patch should instead add an include of &quot;ScriptExecutionContext.h&quot; and we should remove the includes of PassRefPtr.h and RefCounted.h since ScriptExecutionContext.h already includes those.

But I&apos;m wondering if it&apos;s right to store a RefPtr&lt;ScriptExecutionContext&gt; in DOMImplementation.h anyway. I think maybe we should be storing a RefPtr&lt;Document&gt;. If this is always going to be a Document and never a WorkerContext then perhaps we should do the conversion from ScriptExecutionContext at create time and store the pointer as a .

We could also avoid adding includes here by making the functions non-inline.

At minimum, this needs to be changed to &quot;Document.h&quot;, but you could consider these other comments as well.

&gt; -        m_implementation = DOMImplementation::create();
&gt; +        m_implementation = DOMImplementation::create(scriptExecutionContext());

I think you can just pass &quot;this&quot; here. There&apos;s no need to explicitly call the scriptExecutionContext() function; a Document is a script execution context.

&gt; +void Document::setOriginDocument(Document* originDocument)

A function that takes ownership of its argument should take a PassRefPtr&lt;Document&gt;, not a Document*.

&gt; +Frame* Document::findFrame() const

Since Document already has a frame function it&apos;s important to name this in a way that makes it clear when you would call this instead of frame. I think we need some sort of adjective between the word &quot;find&quot; and the word &quot;frame&quot;. This is the kind of thing that can make the class very confusing later if the name does not make it clear. How would you describe the difference between frame and findFrame in words? When would you use findFrame? This should inform a better name for findFrame. Maybe findFrameForSubresourceLoads?

I don&apos;t think it&apos;s really good to have this be a const member function. It doesn&apos;t make much sense to talk about a const Document anyway, since you can get to the frame and back to the document. This is not a simple value-type object where const is a really useful concept. I suggest omitting the const.

&gt; +    const Document* document = this;
&gt; +
&gt; +    while (document) {
&gt; +        if (document-&gt;frame())
&gt; +            return document-&gt;frame();
&gt; +        document = document-&gt;originDocument();
&gt; +    }

I think this would read better as a for loop:

    for (Document* document = this; document; document = document-&gt;originDocument()) {
        if (Frame* frame = document-&gt;frame())
            return frame;
    }

&gt; -    RefPtr&lt;XSLTProcessor&gt; processor = XSLTProcessor::create();
&gt; +    RefPtr&lt;XSLTProcessor&gt; processor = XSLTProcessor::create(scriptExecutionContext());

Again, please just pass &quot;this&quot;.

&gt; +        RefPtr&lt;ScriptExecutionContext&gt; m_scriptExecutionContext;

As above in DOMImplementation, I think it might be better for the pointer in DOMParser to be a Reftr&lt;Document&gt; and convert from script execution context to document at create time instead of doing it at parse time.

ScriptExecutionContext is an abstraction, but we don&apos;t want to overdo the abstraction in the code. If we can get to a document, then it&apos;s best to do that so the concepts in the code are clearer.

&gt; +#include &quot;Frame.h&quot;
&gt; +#include &quot;Node.h&quot;
&gt; +#include &quot;ResourceError.h&quot;
&gt; +#include &quot;TextResourceDecoder.h&quot;
&gt;  #include &quot;XSLStyleSheet.h&quot;

Are all of these includes needed? Maybe some of them include the others?

&gt; +    XSLStyleSheet* rootXSL = 0;

I think rootXSL is an unclear name for this, because it&apos;s not an &quot;XSL&quot;. You could name it rootXSLStyleSheet or even rootStyleSheet.

&gt; +    Node* ownerNode = rootXSL-&gt;ownerNode();

This dereferences rootXSL without checking if it&apos;s non-zero, so will dereference the null pointer in that case. We need a test case covering that code path and the code needs to handle it correctly.

&gt; +        // When parent stylesheet doesn&apos;t have a final url, use base url from the

In comments please call it a &quot;URL&quot; not a &quot;url&quot;.

&gt; +        // document the root stylesheet originated from. This can happen when the
&gt; +        // stylesheet is created with DOMParser.parseFromString(), for example.
&gt; +        if (Document* originDocument = ownerNode-&gt;document()-&gt;originDocument())
&gt; +            absHref = KURL(originDocument-&gt;baseURL(), m_strHref).string();

Normally to resolve a URL against a document&apos;s base we would use the Document::completeURL function rather than using KURL directly. You should do that here unless there&apos;s a reason not to.

&gt; +    if (ownerNode &amp;&amp; ownerNode-&gt;nodeType() == Node::PROCESSING_INSTRUCTION_NODE)
&gt; +        finishLoadingSheetAsynchronously(docLoader, absHref);
&gt; +    else
&gt; +        finishLoadingSheetSynchronously(docLoader, absHref);

This needs a comment. It&apos;s entirely unclear why you would do an asynchronous load when the node type is a processing instruction!

&gt; +void XSLImportRule::finishLoadingSheetSynchronously(DocLoader* docLoader, const String&amp; absHref)

Is there any way to share more code with the finishLoadingSheetAsynchronously function? This has an unpleasantly large amount of code.

&gt; +    KURL url(ParsedURLString, absHref);

We already had this in a KURL in the function that calls this function. But then we turned it into a string and back into a KURL. Lets change the argument types so we don&apos;t have to convert in this fashion.

&gt; +    if (error.isNull()) {
&gt; +        RefPtr&lt;TextResourceDecoder&gt; decoder = TextResourceDecoder::create(&quot;text/xsl&quot;);
&gt; +        String encoding = response.textEncodingName();
&gt; +        if (!encoding.isNull())
&gt; +            decoder-&gt;setEncoding(encoding, TextResourceDecoder::EncodingFromHTTPHeader);
&gt; +
&gt; +        String sheet(decoder-&gt;decode(data.data(), data.size()));
&gt; +        setXSLStyleSheet(absHref, response.url(), sheet);
&gt; +    }

The usual idiom for this sort of thing in WebKit is an early return. So you would write:

    if (error.isNotNull())
        return;

instead of nesting the non-error code inside an if statement.

&gt; +    RefPtr&lt;ScriptExecutionContext&gt; m_scriptExecutionContext;

Same comment for XSLTProcessor as the other classes. I suggest converting to a Document at create time and using a RefPtr&lt;Document&gt; rather than a RefPtr&lt;ScriptExecutionContext&gt;.

review- because of the null dereference getting ownerNode. I am not confident that test cases cover all the code changes here and I&apos;d like you to review the coverage of the tests you added. Does every new piece of code get tested at least once?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240723</commentid>
    <comment_count>48</comment_count>
    <who name="Andreas Wictor">andreas.wictor</who>
    <bug_when>2010-06-21 08:32:43 -0700</bug_when>
    <thetext>(In reply to comment #47) 
&gt; &gt; -        m_implementation = DOMImplementation::create();
&gt; &gt; +        m_implementation = DOMImplementation::create(scriptExecutionContext());
&gt; 
&gt; I think you can just pass &quot;this&quot; here. There&apos;s no need to explicitly call the scriptExecutionContext() function; a Document is a script execution context.

If you use &quot;this&quot; here you must either const_cast it since Document::implementation is a const function or remove the const declaration from the function. You did not like const on the findFrame function, so i suppose it is preferable to remove the const declaration from the function?

&gt; &gt; +    Node* ownerNode = rootXSL-&gt;ownerNode();
&gt; 
&gt; This dereferences rootXSL without checking if it&apos;s non-zero, so will dereference the null pointer in that case. We need a test case covering that code path and the code needs to handle it correctly.

I can&apos;t think of a case where the root-&gt;isXSLStyleSheet() test will fail and leave the pointer at 0, parents to a XSLImportsRule is always a XSLStyleSheet. Is it not better to just ASSERT(root-&gt;isXSLStyleSheet()) instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241024</commentid>
    <comment_count>49</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-06-21 17:53:16 -0700</bug_when>
    <thetext>(In reply to comment #48)
&gt; (In reply to comment #47) 
&gt; &gt; &gt; -        m_implementation = DOMImplementation::create();
&gt; &gt; &gt; +        m_implementation = DOMImplementation::create(scriptExecutionContext());
&gt; &gt; 
&gt; &gt; I think you can just pass &quot;this&quot; here. There&apos;s no need to explicitly call the scriptExecutionContext() function; a Document is a script execution context.
&gt; 
&gt; If you use &quot;this&quot; here you must either const_cast it since Document::implementation is a const function or remove the const declaration from the function. You did not like const on the findFrame function, so i suppose it is preferable to remove the const declaration from the function?

Yes, I think so.

&gt; &gt; &gt; +    Node* ownerNode = rootXSL-&gt;ownerNode();
&gt; &gt; 
&gt; &gt; This dereferences rootXSL without checking if it&apos;s non-zero, so will dereference the null pointer in that case. We need a test case covering that code path and the code needs to handle it correctly.
&gt; 
&gt; I can&apos;t think of a case where the root-&gt;isXSLStyleSheet() test will fail and leave the pointer at 0, parents to a XSLImportsRule is always a XSLStyleSheet. Is it not better to just ASSERT(root-&gt;isXSLStyleSheet()) instead?

You should assert something that you know is true. “I can’t think of a case” is similar, but not quite the same thing. An assertion is OK, but you are leaving me a little bit worried here!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241218</commentid>
    <comment_count>50</comment_count>
      <attachid>59361</attachid>
    <who name="Andreas Wictor">andreas.wictor</who>
    <bug_when>2010-06-22 04:42:17 -0700</bug_when>
    <thetext>Created attachment 59361
New proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242601</commentid>
    <comment_count>51</comment_count>
      <attachid>59361</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-06-24 11:26:53 -0700</bug_when>
    <thetext>Comment on attachment 59361
New proposed patch

+void Document::setOriginDocument(PassRefPtr&lt;Document&gt; originDocument)
+{
+    // This function stores a reference to the document where this document
+    // originated from. This is used for frameless documents, so that we can

I really dislike it that both Document and DOMImplementation get an m_originDocument reference. It doesn&apos;t seem that these should ever be different, but it raises all sorts of unpleasant questions about when exactly they are different in practice.

+    // find a frame when we are loading subresources. Also, because frameless
+    // documents don&apos;t get a SecurityOrigin and a cookieURL when constructed,
+    // we need to set these here to be able to load subresources.

Please add assertions that there is no SecurityOrigin and cookieURL indeed.

             m_responseXML-&gt;setURL(m_url);
+            m_responseXML-&gt;setOriginDocument(document());

This looks weird to me. The result of this code is that a script can decide which security origin to use with the result of XMLHttpRequest - req.responseXML will use one, DOMParser.parseFromString(req.responseText, &quot;application/xml&quot;) will use another. This sort of freedom looks highly suspicious.

I&apos;m not sure what exactly I&apos;m asking for here - perhaps someone CC&apos;ed on this bug (Adam?) could weigh in.

     if (!parentSheet-&gt;finalURL().isNull())
-        // use parent styleheet&apos;s URL as the base URL
-        absHref = KURL(parentSheet-&gt;finalURL(), m_strHref).string();
-    
+        // Use parent styleheet&apos;s URL as the base URL.
+        absHref = KURL(parentSheet-&gt;finalURL(), m_strHref);
+    else if (originDocument)
+        // When parent stylesheet doesn&apos;t have a final URL, use base URL from the
+        // document the root stylesheet originated from. This can happen when the
+        // stylesheet is created with DOMParser.parseFromString(), for example.
+        absHref = originDocument-&gt;completeURL(m_strHref);

Per WebKit coding style, these blocks should be in braces (comments do count).

+    else
+        absHref = KURL(ParsedURLString, m_strHref);

This doesn&apos;t seem right - what guarantees that m_strHref is indeed parsed? When do we take this code path?

It seems that this should be ASSERT_NOT_REACHED plus an early return instead.

I&apos;m going to say r- for the above comments, but there is also something I don&apos;t understand in how subresources are loaded in general. There is that old ugly code in XSLStyleSheet::loadChildSheets() that iterates over stylesheets to find imports and includes - it it obsoleted by your code? How do they interact?

I&apos;ll try to figure this out myself later, but an explanation from you would be appreciated, too.

+    void finishLoadingSheetAsynchronously(DocLoader*, const KURL&amp;);
+    void finishLoadingSheetSynchronously(DocLoader*, const KURL&amp;);

A synchronous load can be started while an asynchronous one is in progress. But we&apos;re using global variables for loading, see globalProcessor and globalDocLoader. Is there a race condition here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242606</commentid>
    <comment_count>52</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-24 11:33:40 -0700</bug_when>
    <thetext>I&apos;m concerned that this patch would make 

DOMParser.parseFromString(&quot;... untrusted data ...&quot;, &quot;application/xml&quot;)

an XSS vulnerability.  I don&apos;t think that&apos;s right.  Do these tests pass in other browsers?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243114</commentid>
    <comment_count>53</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-06-25 11:58:48 -0700</bug_when>
    <thetext>Adam, could you please elaborate on this? This doesn&apos;t seem any worse than element.innerHTML = &quot;untrusted data&quot; to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243156</commentid>
    <comment_count>54</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-25 13:08:57 -0700</bug_when>
    <thetext>(In reply to comment #53)
&gt; Adam, could you please elaborate on this? This doesn&apos;t seem any worse than element.innerHTML = &quot;untrusted data&quot; to me.

It&apos;s an expectation game.  Developers know that innerHTML = &quot;untrusted data&quot; is XSS.  They don&apos;t expect DOMParser.parse(&quot;untrusted data&quot;) to be XSS in the same way JSON.parse shouldn&apos;t be XSS either.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243168</commentid>
    <comment_count>55</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-25 13:22:28 -0700</bug_when>
    <thetext>[1:18pm] ap: abarth: DOMParser.parse(&quot;untrusted data&quot;) doesn&apos;t execute scripts when parsing AFAIK. or does it?
[1:18pm] abarth: frameless documents can&apos;t execute scripts
[1:18pm] abarth: the can&apos;t find the script controller
[1:18pm] abarth: which is on Frame
[1:18pm] ap: abarth: why is it XSS in that case?
[1:19pm] abarth: ap: because you&apos;re giving the document created from the untrusted bytes your security origin
[1:19pm] abarth: ap: in this case, you&apos;ll letting them load subresources with your authority
[1:20pm] abarth: ap: which means the attacker can learn information he&apos;s not supposed to know
[1:20pm] abarth: ap: and probably exfiltrate that information via other subresource loads
[1:20pm] ap: abarth: assuming the contributor knows about security as much or less as I do, that&apos;s probably worth explaining in a bugzilla comment</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243178</commentid>
    <comment_count>56</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-06-25 13:45:09 -0700</bug_when>
    <thetext>As we&apos;re stamping actual origin on cross-origin XMLHttpResult result, we might need to have special case when overrideMimeType is in effect. Letting someone fiddle with decoding of a document that has a different security origin is wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243181</commentid>
    <comment_count>57</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-25 13:48:15 -0700</bug_when>
    <thetext>[1:45pm] abarth: ap: i think the safest thing to is the following:
[1:46pm] abarth: 1) If the document is begin created by XHR and the document is same-origin as the page
[1:46pm] abarth: then it can inherit the page&apos;s security origin
[1:46pm] abarth: would that address the primary use case?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243201</commentid>
    <comment_count>58</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-06-25 14:31:09 -0700</bug_when>
    <thetext>I never realized it was such a can of worms :(

Even ensuring that we give the document a proper security origin isn&apos;t enough - lots of things will go wrong if several documents talk to the same FrameLoader. In particular, Origin and Referer headers will match the document that&apos;s in frame, not the one that actually initiated the load.

Maybe limiting ourselves to same origin xhr.responseXML is indeed the way to go for the first iteration. That solves most compatibility problems, and sidesteps most pitfalls. We&apos;ll still need to decide what to do with Referer header.

An semi-related thought - we need to test what happens when adding e.g. an &lt;img&gt; element to responseXML document via appendChild(). Will we trigger actual load? Will Firefox do that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243690</commentid>
    <comment_count>59</comment_count>
    <who name="Andreas Wictor">andreas.wictor</who>
    <bug_when>2010-06-28 07:40:25 -0700</bug_when>
    <thetext>(In reply to comment #51)
&gt; I really dislike it that both Document and DOMImplementation get an m_originDocument reference. It doesn&apos;t seem that these should ever be different, but it raises all sorts of unpleasant questions about when exactly they are different in practice.

I&apos;m not sure I understand the problem you are describing here.

&gt; I&apos;m going to say r- for the above comments, but there is also something I don&apos;t understand in how subresources are loaded in general. There is that old ugly code in XSLStyleSheet::loadChildSheets() that iterates over stylesheets to find imports and includes - it it obsoleted by your code? How do they interact?
&gt; 
&gt; I&apos;ll try to figure this out myself later, but an explanation from you would be appreciated, too.

No, my code does not obsolete any existing code in XSLStyleSheet. My understanding of this code is that when we find imports and includes in the loadChildSheets function we create XSLImportRule objects to represent them. These XSLImportRule objects are saved to a list by the append function inherited from StyleList, and then loaded by a call to loadSheet. Later when libxslt needs to get these imported stylesheets we call locateStylesheetSubResource which will iterate through the list of saved XSLImportRule objects and try to find the correct one. My contribution to this process is that I made loads synchronous for transformations not origination from a pi, because otherwise locateStylesheetSubResource will find the correct XSLImportRule object but it will not be fully loaded.

&gt; 
&gt; +    void finishLoadingSheetAsynchronously(DocLoader*, const KURL&amp;);
&gt; +    void finishLoadingSheetSynchronously(DocLoader*, const KURL&amp;);
&gt; 
&gt; A synchronous load can be started while an asynchronous one is in progress. But we&apos;re using global variables for loading, see globalProcessor and globalDocLoader. Is there a race condition here?

I have found a way to remove these global variables by using the _private field that exists on most libxml structs. My original plan was to submit a patch after my work on this bug was done, but maybe it should be included here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243693</commentid>
    <comment_count>60</comment_count>
    <who name="Andreas Wictor">andreas.wictor</who>
    <bug_when>2010-06-28 07:41:09 -0700</bug_when>
    <thetext>(In reply to comment #52)
&gt; Do these tests pass in other browsers?

With Firefox 3.6.3 on Ubuntu I get these results.

transform-framed-doc.xhtml: Works, both before and after the frame is navigated.
transform-xhr-doc-cross-origin.xhtml: Works
transform-xhr-doc-from-allowed-cross-origin.xhtml: Fails
transform-docimpl-doc.xhtml: Fails
transform-domparser-doc.xhtml: Works
transform-transformed-doc.xhtml: Fails
transform-xhr-doc.xhtml: Works</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243695</commentid>
    <comment_count>61</comment_count>
    <who name="Andreas Wictor">andreas.wictor</who>
    <bug_when>2010-06-28 07:48:14 -0700</bug_when>
    <thetext>(In reply to comment #58)
&gt; Maybe limiting ourselves to same origin xhr.responseXML is indeed the way to go for the first iteration. That solves most compatibility problems, and sidesteps most pitfalls. 

So this means that the originDocument idea can be used, but it will only be used for xhr.responseXML to begin with?

&gt; We&apos;ll still need to decide what to do with Referer header.

What options are there?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243972</commentid>
    <comment_count>62</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-06-28 16:23:14 -0700</bug_when>
    <thetext>&gt; I&apos;m not sure I understand the problem you are describing here.

Document and DOMImplementation are tied to each other, so giving them both an origin document pointer is confusing.

There is no back link from DOMImplementation, so I&apos;d say that it should be getting origin document pointer, but not Document.

&gt; I have found a way to remove these global variables by using the _private 
&gt; field that exists on most libxml structs. My original plan was to submit
&gt; a patch after my work on this bug was done, but maybe it should be included here?

I think that ideally, that would be done in a separate patch before this change.

&gt; With Firefox 3.6.3 on Ubuntu I get these results.

Not matching Firefox is something we wouldn&apos;t generally want for the first iteration of this fix, now that we know how sensitive it is.

&gt; So this means that the originDocument idea can be used, but it will only be used
&gt; for xhr.responseXML to begin with?

Yes, let&apos;s try the simplest thing that will fix the original test case. And only for same origin case.

As for using the originDocument idea, yes, I don&apos;t think it&apos;s been shown wrong yet. But let&apos;s find out the answer to the below question first.

&gt; &gt; We&apos;ll still need to decide what to do with Referer header.
&gt; What options are there?

First question - what does Firefox do? I can imagine several options for the Referer header:
- XMLHttpRequest request URL;
- XMLHttpRequest response URL (after redirects);
- taken from the document that created XMLHttpRequest;
- taken from the document that invoked XMLHttpRequest.responseXML;
- taken from the document that created XSLTProcessor;
- taken from the document that invoked XSLTProcessor.transformToDocument();
- no Referer sent at all.

We should investigate doing the same. If that proves too tricky, maybe it can wait until a follow-up patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243975</commentid>
    <comment_count>63</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-28 16:26:42 -0700</bug_when>
    <thetext>&gt; &gt; &gt; We&apos;ll still need to decide what to do with Referer header.
&gt; &gt; What options are there?
&gt; 
&gt; First question - what does Firefox do? I can imagine several options for the Referer header:
&gt; - XMLHttpRequest request URL;

This one seems unlikely.

&gt; - XMLHttpRequest response URL (after redirects);
&gt; - taken from the document that created XMLHttpRequest;
&gt; - taken from the document that invoked XMLHttpRequest.responseXML;
&gt; - taken from the document that created XSLTProcessor;
&gt; - taken from the document that invoked XSLTProcessor.transformToDocument();
&gt; - no Referer sent at all.

Hopefully we won&apos;t have to do this one either.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244266</commentid>
    <comment_count>64</comment_count>
    <who name="Andreas Wictor">andreas.wictor</who>
    <bug_when>2010-06-29 06:56:33 -0700</bug_when>
    <thetext>(In reply to comment #62)
&gt; &gt; I have found a way to remove these global variables by using the _private 
&gt; &gt; field that exists on most libxml structs. My original plan was to submit
&gt; &gt; a patch after my work on this bug was done, but maybe it should be included here?
&gt; 
&gt; I think that ideally, that would be done in a separate patch before this change.

I have created bug 41348 and submitted a patch there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273350</commentid>
    <comment_count>65</comment_count>
    <who name="Martin Blom">martin</who>
    <bug_when>2010-09-02 05:04:13 -0700</bug_when>
    <thetext>(In reply to comment #62)
&gt; First question - what does Firefox do? I can imagine several options for the Referer header:
&gt; - XMLHttpRequest request URL;
&gt; - XMLHttpRequest response URL (after redirects);
&gt; - taken from the document that created XMLHttpRequest;
&gt; - taken from the document that invoked XMLHttpRequest.responseXML;
&gt; - taken from the document that created XSLTProcessor;
&gt; - taken from the document that invoked XSLTProcessor.transformToDocument();
&gt; - no Referer sent at all.
&gt; 
&gt; We should investigate doing the same. If that proves too tricky, maybe it can wait until a follow-up patch.

If &quot;main-redirect.cgi&quot; redirects to &quot;main.xsl&quot; and &quot;child-1-redirect.cgi&quot; redirects to &quot;child-1.xsl&quot;, using XHR to load the XSLT stylesheet main-redirect.cgi, which imports &quot;child-1-redirect.cgi&quot;, which in turn includes &quot;child-2.xsl&quot;, the following requests are seen in Firefox 3.6.7:

GET /lcs/xslt-referrer/main-redirect.cgi (XHR)
Referer: http://localhost/lcs/xslt-referrer/

GET /lcs/xslt-referrer/main.xsl (XHR)
Referer: http://localhost/lcs/xslt-referrer/

GET /lcs/xslt-referrer/child-1-redirect.cgi (main XSLT)
Referer: http://localhost/lcs/xslt-referrer/main.xsl

GET /lcs/xslt-referrer/child-1.xsl (main XSLT)
Referer: http://localhost/lcs/xslt-referrer/main.xsl

GET /lcs/xslt-referrer/child-2.xsl (child 1 XSLT)
Referer: http://localhost/lcs/xslt-referrer/child-1-redirect.cgi

That is, when main.xsl loads the child, the redirected URI is used as referrer, but when a child loads another child, the URI specified in the stylesheet is used. (Interestingly, the main-loads-child and child-loads-child requests cannot be seen in Firebug.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273553</commentid>
    <comment_count>66</comment_count>
    <who name="Martin Blom">martin</who>
    <bug_when>2010-09-02 13:56:28 -0700</bug_when>
    <thetext>(In reply to comment #57)

Adam and Alexey,

Here&apos;s how I would assume that things should work:

* A stylesheet loaded via XHR has its &quot;Referer-URI&quot; set to the final
  redirect and a security origin created from that URI.
* A stylesheet loaded by the PI has its Referer-URI set to the final
  redirect and a security origin created from that URI.
* A stylesheet created from document.implementation inherits Referer-URI
  and security origin from document.
* A stylesheet created from DOMParser.parseFromString inherits Referer-URI
  and security origin from the frame&apos;s document.
* A stylesheet created from another stylesheet using
  XSLTProcessor.transformToDocument() inherits Referer-URI and security
  origin from the frame&apos;s document

When the stylesheet is executed, its security origin is used to check if a
child sheet can be loaded and to create the Origin header. If so, its
&quot;Referer-URI&quot; should be used as the Referer header.

* A stylesheet loaded via xsl:include, xsl:import or the document() XPath
function etc. has its &quot;Referer-URI&quot; set to the final redirect and a security
origin created from that URI.

Are my assumptions correct here?

Also, I don&apos;t understand Adam&apos;s concerns about DOMParser.parseFromString().
How can parsing an XML document in any way open up for XSS attacks? Sure,
you can take the node and insert it into you DOM or execute it as a
stylesheet, but how is that different from doing eval() on any other
string? Indeed, embedding a small stylesheet in JS code that uses a few
xsl:import tags sounds quite useful to me, and I would expect it to work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274023</commentid>
    <comment_count>67</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-09-03 10:40:49 -0700</bug_when>
    <thetext>&gt; * A stylesheet created from DOMParser.parseFromString inherits Referer-URI
&gt;   and security origin from the frame&apos;s document.
[...]
&gt; Also, I don&apos;t understand Adam&apos;s concerns about DOMParser.parseFromString().
&gt; How can parsing an XML document in any way open up for XSS attacks?

Notice that in our proposal you imbued the bytes given to parseFromString with the caller&apos;s security origin.  If those bytes are untrusted by the caller, you just gave the attacker the honest principal&apos;s authority.  That&apos;s XSS.

&gt; Sure,
&gt; you can take the node and insert it into you DOM or execute it as a
&gt; stylesheet, but how is that different from doing eval() on any other
&gt; string?

Evaling a string also imbues the string with your authority.  That means folks are careful not to eval untrusted strings.  However, it seems entirely reasonable to parse an untrusted string using DOMParser.

&gt; Indeed, embedding a small stylesheet in JS code that uses a few
&gt; xsl:import tags sounds quite useful to me, and I would expect it to work.

Whether or not it&apos;s useful, we need to get the security right first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274758</commentid>
    <comment_count>68</comment_count>
    <who name="Martin Blom">martin</who>
    <bug_when>2010-09-06 13:01:20 -0700</bug_when>
    <thetext>(In reply to comment #67)

Adam,

I have written a few tests which are available here:

http://martin.blom.org/tmp/xslt-permissions/

They test transformations using stylesheets created from four sources:

* Created manually using DOMImplementation.createDocument()
* Parsed from a string using DOMParser.parseFromString()
* Generated from another stylesheet using XSLTProcessor.transformToDocument()
* Loaded via XMLHttpRequest

Each type tests xsl:import in three different way:

* Importing a child stylesheet from the same domain
* Importing a child stylesheet from a different domain
* Importing a child stylesheet from the same domain, which in turn imports
  another child stylesheet from a different domain

(The &quot;Access-Control-Allow-Origin&quot; response header is set to &quot;*&quot;)

Firefox passes ALL tests. Both MSIE 6 and 8 pass all same-domain tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290327</commentid>
    <comment_count>69</comment_count>
      <attachid>69944</attachid>
    <who name="Andreas Wictor">andreas.wictor</who>
    <bug_when>2010-10-06 08:47:44 -0700</bug_when>
    <thetext>Created attachment 69944
New patch

I have created a new patch that I believe makes WebKit behave in much the same way as Firefox does when importing xsl stylesheets. It is still using an originDocument reference on documents to find a frame for loading sub resources but I have made a couple of other changes since the last patch.

* The XSLImportRule::loadSheet method and the libxslt loader callback in XSLTProcessorLibxslt.cpp is changed to use ThreadableLoader for synchronous loading. This will make sure that the origin header is set for cross origin loads.

* There is a new overload for loadResourceSynchronously on FrameLoader that takes a referrer string as argument.

* In DocumentThreadableLoader use the new loadResourceSynchronously overload on FrameLoader to make sure we send the right referrer when importing stylesheets and other sub resources.

* The [CallWith=ScriptExecutionContext] IDL attribute that was added to get hold of an originDocument is moved from the interfaces to the functions for DOMParser.parseFromString and DOMImplementation.createDocument.

With these changes it will pass all of the the tests in comment #68 just like Firefox.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335589</commentid>
    <comment_count>70</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-01-17 17:08:25 -0800</bug_when>
    <thetext>(In reply to comment #69)
&gt; I have created a new patch that I believe makes WebKit behave in much the same way as Firefox does when importing xsl stylesheets.

Why didn’t you set review? on the new patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360862</commentid>
    <comment_count>71</comment_count>
      <attachid>84430</attachid>
    <who name="Andreas Wictor">andreas.wictor</who>
    <bug_when>2011-03-02 09:52:32 -0800</bug_when>
    <thetext>Created attachment 84430
proposed patch

Sorry for the long delay but here is a new up to date patch with review? flag set.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360863</commentid>
    <comment_count>72</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-02 09:54:08 -0800</bug_when>
    <thetext>Attachment 84430 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/fast...&quot; exit_code: 1

Source/WebCore/xml/XSLTProcessor.h:51:  The parameter name &quot;frame&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
LayoutTests/ChangeLog:10:  Line contains tab character.  [whitespace/tab] [5]
LayoutTests/ChangeLog:13:  Line contains tab character.  [whitespace/tab] [5]
LayoutTests/ChangeLog:16:  Line contains tab character.  [whitespace/tab] [5]
LayoutTests/ChangeLog:30:  Line contains tab character.  [whitespace/tab] [5]
LayoutTests/ChangeLog:33:  Line contains tab character.  [whitespace/tab] [5]
Source/WebCore/xml/DOMParser.h:35:  The parameter name &quot;str&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/ChangeLog:49:  Line contains tab character.  [whitespace/tab] [5]
Source/WebCore/ChangeLog:50:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 9 in 41 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361364</commentid>
    <comment_count>73</comment_count>
      <attachid>84430</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-03-02 22:31:11 -0800</bug_when>
    <thetext>Comment on attachment 84430
proposed patch

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

&gt; Source/WebCore/loader/DocumentThreadableLoader.cpp:364
&gt; +        KURL referrer(m_document-&gt;url());
&gt; +        referrer.setUser(String());
&gt; +        referrer.setPass(String());
&gt; +        referrer.removeFragmentIdentifier();

There&apos;s a method on KURL that does this now.

&gt; Source/WebCore/xml/DOMParser.cpp:37
&gt; +        doc-&gt;setSecurityOrigin(static_cast&lt;Document*&gt;(scriptExecutionContext)-&gt;securityOrigin());
&gt; +        doc-&gt;setOriginDocument(static_cast&lt;Document*&gt;(scriptExecutionContext));

This is all very scary.  At a bare minimum, please add an assert that we&apos;re on the main thread.

&gt; Source/WebCore/xml/XMLHttpRequest.cpp:254
&gt;              m_responseXML-&gt;setSecurityOrigin(document()-&gt;securityOrigin());
&gt; +            m_responseXML-&gt;setOriginDocument(document());

It seems redundant to have a document and an origin set this way.  We can get the origin from the document.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361698</commentid>
    <comment_count>74</comment_count>
      <attachid>84578</attachid>
    <who name="Andreas Wictor">andreas.wictor</who>
    <bug_when>2011-03-03 10:02:50 -0800</bug_when>
    <thetext>Created attachment 84578
New proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361700</commentid>
    <comment_count>75</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-03 10:05:01 -0800</bug_when>
    <thetext>Attachment 84578 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/fast...&quot; exit_code: 1

Source/WebCore/xml/XSLTProcessor.h:51:  The parameter name &quot;frame&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/xml/DOMParser.h:35:  The parameter name &quot;str&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 2 in 41 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361873</commentid>
    <comment_count>76</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-03-03 13:08:59 -0800</bug_when>
    <thetext>&gt; Source/WebCore/xml/XSLTProcessor.h:51:  The parameter name &quot;frame&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
&gt; Source/WebCore/xml/DOMParser.h:35:  The parameter name &quot;str&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
&gt; Total errors found: 2 in 41 files

Any reason you didn&apos;t fix these style nits?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362319</commentid>
    <comment_count>77</comment_count>
    <who name="Andreas Wictor">andreas.wictor</who>
    <bug_when>2011-03-04 00:01:27 -0800</bug_when>
    <thetext>(In reply to comment #76)
&gt; &gt; Source/WebCore/xml/XSLTProcessor.h:51:  The parameter name &quot;frame&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
&gt; &gt; Source/WebCore/xml/DOMParser.h:35:  The parameter name &quot;str&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
&gt; &gt; Total errors found: 2 in 41 files
&gt; 
&gt; Any reason you didn&apos;t fix these style nits?

I was just trying to change as little as possible in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362331</commentid>
    <comment_count>78</comment_count>
      <attachid>84578</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-03-04 00:31:21 -0800</bug_when>
    <thetext>Comment on attachment 84578
New proposed patch

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

&gt;&gt; Source/WebCore/xml/DOMParser.h:35
&gt;&gt; -    PassRefPtr&lt;Document&gt; parseFromString(const String&amp;, const String&amp; contentType);
&gt;&gt; +    PassRefPtr&lt;Document&gt; parseFromString(ScriptExecutionContext*, const String&amp; str, const String&amp; contentType);
&gt; 
&gt; The parameter name &quot;str&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]

This &quot;str&quot; you added!

&gt;&gt; Source/WebCore/xml/XSLTProcessor.h:51
&gt;&gt; -    PassRefPtr&lt;Document&gt; createDocumentFromSource(const String&amp; source, const String&amp; sourceEncoding, const String&amp; sourceMIMEType, Node* sourceNode, Frame* frame);
&gt;&gt; +    PassRefPtr&lt;Document&gt; createDocumentFromSource(const String&amp; source, const String&amp; sourceEncoding, const String&amp; sourceMIMEType, Node* sourceNode, Frame* frame, ScriptExecutionContext*);
&gt; 
&gt; The parameter name &quot;frame&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]

This one is definitely worth fixing since you&apos;re touching this line and &quot;Frame* frame&quot; is totally vacuous.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362340</commentid>
    <comment_count>79</comment_count>
    <who name="Andreas Wictor">andreas.wictor</who>
    <bug_when>2011-03-04 00:49:39 -0800</bug_when>
    <thetext>(In reply to comment #78)
&gt; This &quot;str&quot; you added!

Oops, this happened accidentally because of a git rebase.

&gt; This one is definitely worth fixing since you&apos;re touching this line and &quot;Frame* frame&quot; is totally vacuous.

I will submit a new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362350</commentid>
    <comment_count>80</comment_count>
      <attachid>84709</attachid>
    <who name="Andreas Wictor">andreas.wictor</who>
    <bug_when>2011-03-04 01:03:53 -0800</bug_when>
    <thetext>Created attachment 84709
New proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398613</commentid>
    <comment_count>81</comment_count>
      <attachid>84709</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-05 01:31:05 -0700</bug_when>
    <thetext>Comment on attachment 84709
New proposed patch

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

Ok.  So, I got half-way though the review, and my conclusion is that this is too much complexity for such a corner use case.  I would like to support this use case, but the virtuous way to do that is to disentangle the loader from the Frame.  That&apos;s not going to be easy, but this patch will end up looking like the wrong direction if/when we make that happen.  I&apos;m sympathetic to the fact that you&apos;ve spent a lot of time and effort working on this patch, but this is complex stuff that&apos;s basically going to be untested because so few people will use this feature.  That means its going to have bugs, and likely bad security bugs at that.

&gt; Source/WebCore/bindings/v8/custom/V8XSLTProcessorCustom.cpp:93
&gt; +    ScriptExecutionContext* scriptContext = getScriptExecutionContext();

getScriptExecutionContext =&gt; scriptExecutionContext

&gt; Source/WebCore/dom/Document.cpp:4100
&gt; -    processor-&gt;createDocumentFromSource(newSource, resultEncoding, resultMIMEType, this, frame());
&gt; +    processor-&gt;createDocumentFromSource(newSource, resultEncoding, resultMIMEType, this, frame(), 0);

There&apos;s no origin document in this case?

&gt; Source/WebCore/dom/Document.h:521
&gt; +    void setOriginDocument(PassRefPtr&lt;Document&gt;);

This should probably have a scary warning about how calling it could be disaster.  There&apos;s a similar warning for setSecurityOrigin and this on is even more powerful!

&gt; Source/WebCore/dom/Document.h:1180
&gt; +    RefPtr&lt;Document&gt; m_originDocument;

Does this create a reference cycle?

&gt; Source/WebCore/loader/DocumentThreadableLoader.cpp:361
&gt; +        String referrer = m_document-&gt;url().strippedForUseAsReferrer();

Is this the correct referrer?  It seems like we do something more complicated when we compute frame-&gt;loader()-&gt;outgoingReferrer().

&gt; Source/WebCore/loader/DocumentThreadableLoader.cpp:363
&gt; +        identifier = frame-&gt;loader()-&gt;loadResourceSynchronously(
&gt; +            request, storedCredentials, referrer, error, response, data);

No need to break this line.

&gt; Source/WebCore/loader/FrameLoader.cpp:2763
&gt; +unsigned long FrameLoader::loadResourceSynchronously(const ResourceRequest&amp; request, StoredCredentials storedCredentials, const String&amp; outgoingReferrer, ResourceError&amp; error, ResourceResponse&amp; response, Vector&lt;char&gt;&amp; data)

Boo to adding another one of these methods.  We have too many of these FrameLoader methods with infinite arguments.

&gt; Source/WebCore/xml/DOMParser.cpp:37
&gt; +        doc-&gt;setOriginDocument(static_cast&lt;Document*&gt;(scriptExecutionContext));

Why can&apos;t we pass the origin during document construction?  That seems like a safer time than after-the-fact.

&gt; Source/WebCore/xml/DOMParser.idl:22
&gt; -        Document parseFromString(in DOMString str, in DOMString contentType);
&gt; +        [CallWith=ScriptExecutionContext] Document parseFromString(in DOMString str, in DOMString contentType);

So this means the originDocument will be based on the lexical scope in which this function was called.  I guess that makes sense.  It&apos;s slightly odd how that interacts with third-party cookie blocking, especially if the constructed document is handed off from one page to another.

&gt; Source/WebCore/xml/XMLHttpRequest.cpp:253
&gt; -            m_responseXML-&gt;setSecurityOrigin(document()-&gt;securityOrigin());
&gt; +            m_responseXML-&gt;setOriginDocument(document());

This part of the change looks elegant.

&gt; Source/WebCore/xml/XSLImportRule.cpp:100
&gt; +    RefPtr&lt;Document&gt; parentDocument = parentSheet-&gt;ownerDocument();

So there&apos;s an originDocument and a parentDocument, but they&apos;re not the same.  Interesting.

&gt; Source/WebCore/xml/XSLImportRule.cpp:112
&gt; +            parentURL = originDocument-&gt;url();

Wait, why do we care about the originDocument&apos;s URL?  That doesn&apos;t make any sense to me.  The origin document is just a bread-crumb trail back to the loader machinery.

&gt; Source/WebCore/xml/XSLImportRule.cpp:116
&gt; +        // Create a fake document used for the duration of this load.
&gt; +        parentDocument = Document::create(0, parentURL);

Woah, yet another document.  This is starting to look pretty hacky.

&gt; Source/WebCore/xml/XSLImportRule.cpp:119
&gt; +        if (originDocument)
&gt; +            parentDocument-&gt;setOriginDocument(originDocument);

Ok, you&apos;ve lost me.  Why are we calling setOrigin document on this fake document?  That seems like an extra level of indirection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398614</commentid>
    <comment_count>82</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-05 01:32:09 -0700</bug_when>
    <thetext>Lets re-visit this issue once we&apos;ve disentangled the loader from the Frame.  This bug has gone epic, so we&apos;ll probably want to start again with a fresh bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398731</commentid>
    <comment_count>83</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2011-05-05 08:38:07 -0700</bug_when>
    <thetext>(In reply to comment #82)
&gt; Lets re-visit this issue once we&apos;ve disentangled the loader from the Frame.  This bug has gone epic, so we&apos;ll probably want to start again with a fresh bug.

Adam, please open a new bug if you&apos;re going to close this one.  It&apos;s being tracked internally by Apple as &lt;rdar://problem/4823079&gt;, and closing this one without opening a new bug (and duping this one to the new bug) will make it difficult to find the &quot;new&quot; bug later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398775</commentid>
    <comment_count>84</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-05 09:27:07 -0700</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of bug 60276 ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399680</commentid>
    <comment_count>85</comment_count>
    <who name="Don Corley">don</who>
    <bug_when>2011-05-06 11:48:01 -0700</bug_when>
    <thetext>Andreas and others,

Thanks for all the hard work on this bug! Sorry to see it delayed after years of waiting.

I&apos;m surprised more people don&apos;t use xslt in javascript. For me it&apos;s such a pain to transform my xml in the browser without using stylesheets.

Thanks again... hopefully this new direction will get it fixed.

P.S. Here is the google chrome bug that is linked to this issue:
http://code.google.com/p/chromium/issues/detail?id=8441</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>9949</attachid>
            <date>2006-08-08 15:57:05 -0700</date>
            <delta_ts>2006-08-08 15:57:05 -0700</delta_ts>
            <desc>Zip archive of 2 xsl, 1 xml and 1 xhtml test files</desc>
            <filename>ajax_xsl.zip</filename>
            <type>application/octet-stream</type>
            <size>2817</size>
            <attacher name="Lamar Goddard">lamargoddard</attacher>
            
              <data encoding="base64">UEsDBAoAAAAAAAhWCDUAAAAAAAAAAAAAAAAJABAAYWpheF94c2wvVVgMAMXw2ERfzthEaxL2AVBL
AwQUAAgACAA2Ywg1AAAAAAAAAAAAAAAAEQAQAGFqYXhfeHNsL2ZpbGUueG1sVVgMAOPw2EQ35dhE
axL2ARXLOw6AIBBF0d5VkOkF7Sz4LEYfSoJgYDSwe0N5k3O1a3cUH0oNORla5UICac9HSKehl/28
kbOTHmyu3CPqBbDg/sAQo7FqNZK4CrwhHyLk6LGUnFnZH1BLBwjJh5y9VwAAAGEAAABQSwMECgAA
AAAA8GkINQAAAAAAAAAAAAAAAAkAEABfX01BQ09TWC9VWAwA4/DYROPw2ERrEvYBUEsDBAoAAAAA
APBpCDUAAAAAAAAAAAAAAAASABAAX19NQUNPU1gvYWpheF94c2wvVVgMAOPw2ETj8NhEaxL2AVBL
AwQUAAgACAA2Ywg1AAAAAAAAAAAAAAAAHAAQAF9fTUFDT1NYL2FqYXhfeHNsLy5fZmlsZS54bWxV
WAwA4/DYRDfl2ERrEvYBY2AVY2dgYsAEIDFOIDYCYgUoPwgkEeIaERKklZyBRQ8YAABQSwcIMWsN
zSMAAABSAAAAUEsDBBQACAAIAIhjCDUAAAAAAAAAAAAAAAARABAAYWpheF94c2wvZmlsZS54c2xV
WAwA4/DYRNDl2ERrEvYBdY87DsIwEERrcgpr+2RBNCSKwwXooKC1wgZH+BPZCw63JwSBoKBczZs3
2no7WiNuFGLvnYRVsQRBrvWn3p0lXLnLN7BtsnqMpop8NxQ1Ef8WMiEmiYvVBEnQzEOFmFIq0rrw
4YyrsizxuN/hISgXOx/sp/IXHzVbA032Wu7t4AMLHaiT8DroVEwJCHwzTHYwiklYxa2WgMF7ngyL
OW2VMfkHccqShOTDJc6GGr8NTyP+Ptw8AFBLBwiAivsHtQAAACgBAABQSwMEFAAIAAgAiGMINQAA
AAAAAAAAAAAAABwAEABfX01BQ09TWC9hamF4X3hzbC8uX2ZpbGUueHNsVVgMAOPw2ETQ5dhEaxL2
AWNgFWNnYGLABCAxTiA2AmIFKD8IJBHiGhESpJWcgUUPGAAAUEsHCDFrDc0jAAAAUgAAAFBLAwQU
AAgACAATYgg1AAAAAAAAAAAAAAAAFQAQAGFqYXhfeHNsL2ltcG9ydGVkLnhzbFVYDADj8NhEFuPY
RGsS9gF1kD1Pw0AMhmfyKw4vTMRULE2USxdGtiLBeso5TdT7qM5uL/33XIWEaFFX+3kf63W3WbxT
J0o8x6BhVb+AojBEO4edhqOMz2vY9FW3sGtZzo54IpLrQKVUkQRuC6RhEjm0iDnnOr/WMe1w1TQN
fm3f8SOZwGNM/jdyF18m8Q766ueykD84I6S8kWHSgClGKduHzs4nNTjDxWRpNEdXxm+RODyJyjHt
6w4LUgrgX88/bzCeNFwCfKuNpWuaraUA/ecFeLyrxOsv9d9QSwcIvFr3nMkAAABdAQAAUEsDBBQA
CAAIABNiCDUAAAAAAAAAAAAAAAAgABAAX19NQUNPU1gvYWpheF94c2wvLl9pbXBvcnRlZC54c2xV
WAwA4/DYRBbj2ERrEvYBY2AVY2dgYsAEIDFOIDYCYgUoPwgkEeIaERKklZyBRQ8YAABQSwcIMWsN
zSMAAABSAAAAUEsDBBQACAAIAFpoCDUAAAAAAAAAAAAAAAATABAAYWpheF94c2wvcGFnZS54aHRt
bFVYDADj8NhE7O3YRGsS9gGFUltvmzAUfk5/hecXqJTaQ31ZOkilJtFaKe2ilmndo4cPCZOxqW1C
omr/fccQ1D3s8oT1+buZc9LrQ63IHqyrjM5owt5TArowstLbjLa+vPhAr+dn6bvl50X+bbMiO4/8
zZeb9d2C0AvOv14uOF/mS/J8m9+vScISzlcPlNCd980V513Xse6SGbvl+SM/BHmSBMF4ZtJLigm9
MZbRLvuDNpnNZoOCBtKVEqEf6F4JQs7PJqmvvIL5wSlS1Y2xnnhwPuUDjPeusFWD6LGBjHo4eP5D
7MWAos9kUra68PgfiDJCxufkFbHJXlhi4YVkRENHnu/Xt1juEV5aNI/PP44UjPUj52mdb6wpwDlj
TxR0YKYBHUefVnk0JVFZKWAownMplIM3mgMtY90qNUDBmA0PevJHBW4H4ONAtOAaox1gp4H6j6D6
/0HhFdIU+Ig+0luhXWlsnZulKdoa9F9Sg660YhsYKJYn8qnzg5EQI8ZGfKUgfKbE2xbeevfp1f53
gy2M5JvjnYwjvI4GAZ5YIyzeBHus1ChRwGJXKRmPVabBrqf/xNnzYcy4LXxYl/S7kUdidBh1RoeB
hyVIQ4kKIfxSwoMgMHshbt/8F1BLBwg3wpCSygEAADEDAABQSwMEFAAIAAgAWmgINQAAAAAAAAAA
AAAAAB4AEABfX01BQ09TWC9hamF4X3hzbC8uX3BhZ2UueGh0bWxVWAwA4/DYROzt2ERrEvYBY2AV
Y2dgYsAEIDFOIDYCYgUoPwgkEeIaERKklZyBRQ8YAABQSwcIMWsNzSMAAABSAAAAUEsBAhUDCgAA
AAAACFYINQAAAAAAAAAAAAAAAAkADAAAAAAAAAAAQO1BAAAAAGFqYXhfeHNsL1VYCADF8NhEX87Y
RFBLAQIVAxQACAAIADZjCDXJh5y9VwAAAGEAAAARAAwAAAAAAAAAAECkgTcAAABhamF4X3hzbC9m
aWxlLnhtbFVYCADj8NhEN+XYRFBLAQIVAwoAAAAAAPBpCDUAAAAAAAAAAAAAAAAJAAwAAAAAAAAA
AED9Qd0AAABfX01BQ09TWC9VWAgA4/DYROPw2ERQSwECFQMKAAAAAADwaQg1AAAAAAAAAAAAAAAA
EgAMAAAAAAAAAABA/UEUAQAAX19NQUNPU1gvYWpheF94c2wvVVgIAOPw2ETj8NhEUEsBAhUDFAAI
AAgANmMINTFrDc0jAAAAUgAAABwADAAAAAAAAAAAQKSBVAEAAF9fTUFDT1NYL2FqYXhfeHNsLy5f
ZmlsZS54bWxVWAgA4/DYRDfl2ERQSwECFQMUAAgACACIYwg1gIr7B7UAAAAoAQAAEQAMAAAAAAAA
AABApIHRAQAAYWpheF94c2wvZmlsZS54c2xVWAgA4/DYRNDl2ERQSwECFQMUAAgACACIYwg1MWsN
zSMAAABSAAAAHAAMAAAAAAAAAABApIHVAgAAX19NQUNPU1gvYWpheF94c2wvLl9maWxlLnhzbFVY
CADj8NhE0OXYRFBLAQIVAxQACAAIABNiCDW8WvecyQAAAF0BAAAVAAwAAAAAAAAAAECkgVIDAABh
amF4X3hzbC9pbXBvcnRlZC54c2xVWAgA4/DYRBbj2ERQSwECFQMUAAgACAATYgg1MWsNzSMAAABS
AAAAIAAMAAAAAAAAAABApIFuBAAAX19NQUNPU1gvYWpheF94c2wvLl9pbXBvcnRlZC54c2xVWAgA
4/DYRBbj2ERQSwECFQMUAAgACABaaAg1N8KQksoBAAAxAwAAEwAMAAAAAAAAAABApIHvBAAAYWph
eF94c2wvcGFnZS54aHRtbFVYCADj8NhE7O3YRFBLAQIVAxQACAAIAFpoCDUxaw3NIwAAAFIAAAAe
AAwAAAAAAAAAAECkgQoHAABfX01BQ09TWC9hamF4X3hzbC8uX3BhZ2UueGh0bWxVWAgA4/DYROzt
2ERQSwUGAAAAAAsACwBiAwAAiQcAAAAA
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>9950</attachid>
            <date>2006-08-08 16:06:53 -0700</date>
            <delta_ts>2006-08-08 16:06:53 -0700</delta_ts>
            <desc>Crash log (r15816)</desc>
            <filename>bug-10313-crash-log.txt</filename>
            <type>text/plain</type>
            <size>31376</size>
            <attacher name="David Kilzer (:ddkilzer)">ddkilzer</attacher>
            
              <data encoding="base64">RGF0ZS9UaW1lOiAgICAgIDIwMDYtMDgtMDggMTY6MDA6MjQuNDg3IC0wNzAwCk9TIFZlcnNpb246
ICAgICAxMC40LjcgKEJ1aWxkIDhKMTM1KQpSZXBvcnQgVmVyc2lvbjogNAoKQ29tbWFuZDogU2Fm
YXJpClBhdGg6ICAgIC9BcHBsaWNhdGlvbnMvU2FmYXJpLmFwcC9Db250ZW50cy9NYWNPUy9TYWZh
cmkKUGFyZW50OiAgYmFzaCBbMjgwXQoKVmVyc2lvbjogICAgICAgIDIuMC40ICg0MTkuMykKQnVp
bGQgVmVyc2lvbjogIDEKUHJvamVjdCBOYW1lOiAgIFdlYkJyb3dzZXIKU291cmNlIFZlcnNpb246
IDQxOTAzMDAKClBJRDogICAgMzE3MgpUaHJlYWQ6IDAKCkV4Y2VwdGlvbjogIEVYQ19CQURfQUND
RVNTICgweDAwMDEpCkNvZGVzOiAgICAgIEtFUk5fUFJPVEVDVElPTl9GQUlMVVJFICgweDAwMDIp
IGF0IDB4MDAwMDAwMzgKClRocmVhZCAwIENyYXNoZWQ6CjAgICBjb20uYXBwbGUuV2ViQ29yZSAg
ICAgICAgICAgICAgCTB4MDE4ZDFlNzAgV2ViQ29yZTo6WFNMU3R5bGVTaGVldDo6ZG9jdW1lbnQo
KSArIDI4IChYU0xTdHlsZVNoZWV0LmNwcDo5NCkKMSAgIGNvbS5hcHBsZS5XZWJDb3JlICAgICAg
ICAgICAgICAJMHgwMThkMmFlMCBXZWJDb3JlOjpYU0xTdHlsZVNoZWV0Ojpsb2NhdGVTdHlsZXNo
ZWV0U3ViUmVzb3VyY2UoX3htbERvYyosIHVuc2lnbmVkIGNoYXIgY29uc3QqKSArIDQ4IChYU0xT
dHlsZVNoZWV0LmNwcDoyMTUpCjIgICBjb20uYXBwbGUuV2ViQ29yZSAgICAgICAgICAgICAgCTB4
MDE4ZDQ4YWMgV2ViQ29yZTo6ZG9jTG9hZGVyRnVuYyh1bnNpZ25lZCBjaGFyIGNvbnN0KiwgX3ht
bERpY3QqLCBpbnQsIHZvaWQqLCB4c2x0TG9hZFR5cGUpICsgNzI0IChYU0xUUHJvY2Vzc29yLmNw
cDoxMDIpCjMgICBsaWJ4c2x0LjEuZHlsaWIgICAgICAgICAgICAgICAgCTB4OTYxMjc4MTggeHNs
dFBhcnNlU3R5bGVzaGVldEltcG9ydCArIDMzMgo0ICAgbGlieHNsdC4xLmR5bGliICAgICAgICAg
ICAgICAgIAkweDk2MTE1MTU0IHhzbHRQYXJzZVRlbXBsYXRlQ29udGVudCArIDI4NDgKNSAgIGxp
YnhzbHQuMS5keWxpYiAgICAgICAgICAgICAgICAJMHg5NjExNTY5YyB4c2x0UGFyc2VTdHlsZXNo
ZWV0UHJvY2VzcyArIDI1Ngo2ICAgbGlieHNsdC4xLmR5bGliICAgICAgICAgICAgICAgIAkweDk2
MTE1ODY4IHhzbHRQYXJzZVN0eWxlc2hlZXRJbXBvcnRlZERvYyArIDE2NAo3ICAgbGlieHNsdC4x
LmR5bGliICAgICAgICAgICAgICAgIAkweDk2MTE1OGQ4IHhzbHRQYXJzZVN0eWxlc2hlZXREb2Mg
KyAyNAo4ICAgY29tLmFwcGxlLldlYkNvcmUgICAgICAgICAgICAgIAkweDAxOGQyMDA0IFdlYkNv
cmU6OlhTTFN0eWxlU2hlZXQ6OmNvbXBpbGVTdHlsZVNoZWV0KCkgKyAxNjAgKFhTTFN0eWxlU2hl
ZXQuY3BwOjIwNykKOSAgIGNvbS5hcHBsZS5XZWJDb3JlICAgICAgICAgICAgICAJMHgwMThkMzYy
YyBXZWJDb3JlOjp4c2x0U3R5bGVzaGVldFBvaW50ZXIoV1RGOjpSZWZQdHI8V2ViQ29yZTo6WFNM
U3R5bGVTaGVldD4mLCBXZWJDb3JlOjpOb2RlKikgKyA0NjQgKFhTTFRQcm9jZXNzb3IuY3BwOjI1
OCkKMTAgIGNvbS5hcHBsZS5XZWJDb3JlICAgICAgICAgICAgICAJMHgwMThkNDE3YyBXZWJDb3Jl
OjpYU0xUUHJvY2Vzc29yOjp0cmFuc2Zvcm1Ub1N0cmluZyhXZWJDb3JlOjpOb2RlKiwgV2ViQ29y
ZTo6RGVwcmVjYXRlZFN0cmluZyYsIFdlYkNvcmU6OkRlcHJlY2F0ZWRTdHJpbmcmLCBXZWJDb3Jl
OjpEZXByZWNhdGVkU3RyaW5nJikgKyAxODQgKFhTTFRQcm9jZXNzb3IuY3BwOjMwMSkKMTEgIGNv
bS5hcHBsZS5XZWJDb3JlICAgICAgICAgICAgICAJMHgwMThkNDRlNCBXZWJDb3JlOjpYU0xUUHJv
Y2Vzc29yOjp0cmFuc2Zvcm1Ub0RvY3VtZW50KFdlYkNvcmU6Ok5vZGUqKSArIDk2IChYU0xUUHJv
Y2Vzc29yLmNwcDozNDYpCjEyICBjb20uYXBwbGUuV2ViQ29yZSAgICAgICAgICAgICAgCTB4MDFi
OGE5ZjQgS0pTOjpYU0xUUHJvY2Vzc29yUHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbihLSlM6OkV4
ZWNTdGF0ZSosIEtKUzo6SlNPYmplY3QqLCBLSlM6Okxpc3QgY29uc3QmKSArIDY5MiAoSlNYU0xU
UHJvY2Vzc29yLmNwcDoxMDYpCjEzICBjb20uYXBwbGUuSmF2YVNjcmlwdENvcmUgICAgICAgCTB4
MDEwNDA5MjAgS0pTOjpKU09iamVjdDo6Y2FsbChLSlM6OkV4ZWNTdGF0ZSosIEtKUzo6SlNPYmpl
Y3QqLCBLSlM6Okxpc3QgY29uc3QmKSArIDI4OCAob2JqZWN0LmNwcDo5NikKMTQgIGNvbS5hcHBs
ZS5KYXZhU2NyaXB0Q29yZSAgICAgICAJMHgwMTAzNGEzOCBLSlM6OkZ1bmN0aW9uQ2FsbERvdE5v
ZGU6OmV2YWx1YXRlKEtKUzo6RXhlY1N0YXRlKikgKyA5NzIgKG5vZGVzLmNwcDo3NzIpCjE1ICBj
b20uYXBwbGUuSmF2YVNjcmlwdENvcmUgICAgICAgCTB4MDEwMmJhOGMgS0pTOjpBc3NpZ25FeHBy
Tm9kZTo6ZXZhbHVhdGUoS0pTOjpFeGVjU3RhdGUqKSArIDg0IChub2Rlcy5jcHA6MTUyNykKMTYg
IGNvbS5hcHBsZS5KYXZhU2NyaXB0Q29yZSAgICAgICAJMHgwMTAzMTMyMCBLSlM6OlZhckRlY2xO
b2RlOjpldmFsdWF0ZShLSlM6OkV4ZWNTdGF0ZSopICsgMTg0IChub2Rlcy5jcHA6MTU0NSkKMTcg
IGNvbS5hcHBsZS5KYXZhU2NyaXB0Q29yZSAgICAgICAJMHgwMTAzMTFhOCBLSlM6OlZhckRlY2xM
aXN0Tm9kZTo6ZXZhbHVhdGUoS0pTOjpFeGVjU3RhdGUqKSArIDk2IChub2Rlcy5jcHA6MTU5MykK
MTggIGNvbS5hcHBsZS5KYXZhU2NyaXB0Q29yZSAgICAgICAJMHgwMTAzMTA0YyBLSlM6OlZhclN0
YXRlbWVudE5vZGU6OmV4ZWN1dGUoS0pTOjpFeGVjU3RhdGUqKSArIDIyMCAobm9kZXMuY3BwOjE2
MTcpCjE5ICBjb20uYXBwbGUuSmF2YVNjcmlwdENvcmUgICAgICAgCTB4MDEwMmU0MDggS0pTOjpT
b3VyY2VFbGVtZW50c05vZGU6OmV4ZWN1dGUoS0pTOjpFeGVjU3RhdGUqKSArIDY1NiAobm9kZXMu
Y3BwOjI0NTYpCjIwICBjb20uYXBwbGUuSmF2YVNjcmlwdENvcmUgICAgICAgCTB4MDEwMmJkOWMg
S0pTOjpCbG9ja05vZGU6OmV4ZWN1dGUoS0pTOjpFeGVjU3RhdGUqKSArIDIxNiAobm9kZXMuY3Bw
OjE2NDkpCjIxICBjb20uYXBwbGUuSmF2YVNjcmlwdENvcmUgICAgICAgCTB4MDEwMWEzNmMgS0pT
OjpEZWNsYXJlZEZ1bmN0aW9uSW1wOjpleGVjdXRlKEtKUzo6RXhlY1N0YXRlKikgKyA5MiAoZnVu
Y3Rpb24uY3BwOjMzOCkKMjIgIGNvbS5hcHBsZS5KYXZhU2NyaXB0Q29yZSAgICAgICAJMHgwMTAx
OTk3NCBLSlM6OkZ1bmN0aW9uSW1wOjpjYWxsQXNGdW5jdGlvbihLSlM6OkV4ZWNTdGF0ZSosIEtK
Uzo6SlNPYmplY3QqLCBLSlM6Okxpc3QgY29uc3QmKSArIDY2OCAoZnVuY3Rpb24uY3BwOjEwNCkK
MjMgIGNvbS5hcHBsZS5KYXZhU2NyaXB0Q29yZSAgICAgICAJMHgwMTA0MDkyMCBLSlM6OkpTT2Jq
ZWN0OjpjYWxsKEtKUzo6RXhlY1N0YXRlKiwgS0pTOjpKU09iamVjdCosIEtKUzo6TGlzdCBjb25z
dCYpICsgMjg4IChvYmplY3QuY3BwOjk2KQoyNCAgY29tLmFwcGxlLkphdmFTY3JpcHRDb3JlICAg
ICAgIAkweDAxMDM1MzI0IEtKUzo6RnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGU6OmV2YWx1YXRlKEtK
Uzo6RXhlY1N0YXRlKikgKyA4NTYgKG5vZGVzLmNwcDo2NzkpCjI1ICBjb20uYXBwbGUuSmF2YVNj
cmlwdENvcmUgICAgICAgCTB4MDEwMzBlNmMgS0pTOjpFeHByU3RhdGVtZW50Tm9kZTo6ZXhlY3V0
ZShLSlM6OkV4ZWNTdGF0ZSopICsgMjIwIChub2Rlcy5jcHA6MTY3MikKMjYgIGNvbS5hcHBsZS5K
YXZhU2NyaXB0Q29yZSAgICAgICAJMHgwMTAyZTJhNCBLSlM6OlNvdXJjZUVsZW1lbnRzTm9kZTo6
ZXhlY3V0ZShLSlM6OkV4ZWNTdGF0ZSopICsgMzAwIChub2Rlcy5jcHA6MjQ1MCkKMjcgIGNvbS5h
cHBsZS5KYXZhU2NyaXB0Q29yZSAgICAgICAJMHgwMTAyYmQ5YyBLSlM6OkJsb2NrTm9kZTo6ZXhl
Y3V0ZShLSlM6OkV4ZWNTdGF0ZSopICsgMjE2IChub2Rlcy5jcHA6MTY0OSkKMjggIGNvbS5hcHBs
ZS5KYXZhU2NyaXB0Q29yZSAgICAgICAJMHgwMTAxYTM2YyBLSlM6OkRlY2xhcmVkRnVuY3Rpb25J
bXA6OmV4ZWN1dGUoS0pTOjpFeGVjU3RhdGUqKSArIDkyIChmdW5jdGlvbi5jcHA6MzM4KQoyOSAg
Y29tLmFwcGxlLkphdmFTY3JpcHRDb3JlICAgICAgIAkweDAxMDE5OTc0IEtKUzo6RnVuY3Rpb25J
bXA6OmNhbGxBc0Z1bmN0aW9uKEtKUzo6RXhlY1N0YXRlKiwgS0pTOjpKU09iamVjdCosIEtKUzo6
TGlzdCBjb25zdCYpICsgNjY4IChmdW5jdGlvbi5jcHA6MTA0KQozMCAgY29tLmFwcGxlLkphdmFT
Y3JpcHRDb3JlICAgICAgIAkweDAxMDQwOTIwIEtKUzo6SlNPYmplY3Q6OmNhbGwoS0pTOjpFeGVj
U3RhdGUqLCBLSlM6OkpTT2JqZWN0KiwgS0pTOjpMaXN0IGNvbnN0JikgKyAyODggKG9iamVjdC5j
cHA6OTYpCjMxICBjb20uYXBwbGUuV2ViQ29yZSAgICAgICAgICAgICAgCTB4MDFiOTlhNzggS0pT
OjpKU0Fic3RyYWN0RXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoV2ViQ29yZTo6RXZlbnQqLCBi
b29sKSArIDc2OCAoa2pzX2V2ZW50cy5jcHA6MTE2KQozMiAgY29tLmFwcGxlLldlYkNvcmUgICAg
ICAgICAgICAgIAkweDAxOWEyODljIFdlYkNvcmU6OkRvY3VtZW50OjpoYW5kbGVXaW5kb3dFdmVu
dChXZWJDb3JlOjpFdmVudCosIGJvb2wpICsgNDE2IChEb2N1bWVudC5jcHA6MjI0MikKMzMgIGNv
bS5hcHBsZS5XZWJDb3JlICAgICAgICAgICAgICAJMHgwMWI1YTg2YyBXZWJDb3JlOjpFdmVudFRh
cmdldE5vZGU6OmRpc3BhdGNoV2luZG93RXZlbnQoV2ViQ29yZTo6QXRvbWljU3RyaW5nIGNvbnN0
JiwgYm9vbCwgYm9vbCkgKyAzMjQgKEV2ZW50VGFyZ2V0Tm9kZS5jcHA6MzI0KQozNCAgY29tLmFw
cGxlLldlYkNvcmUgICAgICAgICAgICAgIAkweDAxOWE1NDU4IFdlYkNvcmU6OkRvY3VtZW50Ojpp
bXBsaWNpdENsb3NlKCkgKyA2NzYgKERvY3VtZW50LmNwcDoxMjExKQozNSAgY29tLmFwcGxlLldl
YkNvcmUgICAgICAgICAgICAgIAkweDAxOTcwODA4IFdlYkNvcmU6OkZyYW1lOjpjaGVja0VtaXRM
b2FkRXZlbnQoKSArIDcyNCAoRnJhbWUuY3BwOjgzNikKMzYgIGNvbS5hcHBsZS5XZWJDb3JlICAg
ICAgICAgICAgICAJMHgwMTk3NTZjYyBXZWJDb3JlOjpGcmFtZTo6Y2hlY2tDb21wbGV0ZWQoKSAr
IDUyOCAoRnJhbWUuY3BwOjgwMSkKMzcgIGNvbS5hcHBsZS5XZWJDb3JlICAgICAgICAgICAgICAJ
MHgwMTk3NWIxMCBXZWJDb3JlOjpGcmFtZTo6ZmluaXNoZWRQYXJzaW5nKCkgKyA0NCAoRnJhbWUu
Y3BwOjc1NikKMzggIGNvbS5hcHBsZS5XZWJDb3JlICAgICAgICAgICAgICAJMHgwMTk5ZjEzMCBX
ZWJDb3JlOjpEb2N1bWVudDo6ZmluaXNoZWRQYXJzaW5nKCkgKyA3MiAoRG9jdW1lbnQuY3BwOjMy
OTQpCjM5ICBjb20uYXBwbGUuV2ViQ29yZSAgICAgICAgICAgICAgCTB4MDE4YWU5NjQgV2ViQ29y
ZTo6WE1MVG9rZW5pemVyOjplbmQoKSArIDM5NiAoWE1MVG9rZW5pemVyLmNwcDoxMjQ0KQo0MCAg
Y29tLmFwcGxlLldlYkNvcmUgICAgICAgICAgICAgIAkweDAxOGFlZTBjIFdlYkNvcmU6OlhNTFRv
a2VuaXplcjo6ZmluaXNoKCkgKyA2NCAoWE1MVG9rZW5pemVyLmNwcDoxMjUyKQo0MSAgY29tLmFw
cGxlLldlYkNvcmUgICAgICAgICAgICAgIAkweDAxOTljZWNjIFdlYkNvcmU6OkRvY3VtZW50Ojpm
aW5pc2hQYXJzaW5nKCkgKyA4NCAoRG9jdW1lbnQuY3BwOjEzNDUpCjQyICBjb20uYXBwbGUuV2Vi
Q29yZSAgICAgICAgICAgICAgCTB4MDE5NzVlNTAgV2ViQ29yZTo6RnJhbWU6OmVuZElmTm90TG9h
ZGluZygpICsgNDMyIChGcmFtZS5jcHA6NzEyKQo0MyAgY29tLmFwcGxlLldlYkNvcmUgICAgICAg
ICAgICAgIAkweDAxOTc1ZWE0IFdlYkNvcmU6OkZyYW1lOjplbmQoKSArIDUyIChGcmFtZS5jcHA6
Njk1KQo0NCAgY29tLmFwcGxlLldlYkNvcmUgICAgICAgICAgICAgIAkweDAxOWI2ZmM4IC1bV2Vi
Q29yZUZyYW1lQnJpZGdlIGVuZF0gKyA3MiAoV2ViQ29yZUZyYW1lQnJpZGdlLm1tOjcwOCkKNDUg
IGNvbS5hcHBsZS5XZWJLaXQgICAgICAgICAgICAgICAJMHgwMDM0NTc3NCAtW1dlYkRhdGFTb3Vy
Y2UoV2ViUHJpdmF0ZSkgX2ZpbmlzaGVkTG9hZGluZ10gKyAyMjAgKFdlYkRhdGFTb3VyY2UubTo3
NzUpCjQ2ICBjb20uYXBwbGUuV2ViS2l0ICAgICAgICAgICAgICAgCTB4MDAzZTJmOWMgLVtXZWJG
cmFtZUxvYWRlciBfZmluaXNoZWRMb2FkaW5nXSArIDk2IChXZWJGcmFtZUxvYWRlci5tOjUwNykK
NDcgIGNvbS5hcHBsZS5XZWJLaXQgICAgICAgICAgICAgICAJMHgwMDNlODMwOCAtW1dlYk1haW5S
ZXNvdXJjZUxvYWRlciBkaWRGaW5pc2hMb2FkaW5nXSArIDUyOCAoV2ViTWFpblJlc291cmNlTG9h
ZGVyLm06MzkyKQo0OCAgY29tLmFwcGxlLldlYktpdCAgICAgICAgICAgICAgIAkweDAwM2U1YmM4
IC1bV2ViTG9hZGVyIGNvbm5lY3Rpb25EaWRGaW5pc2hMb2FkaW5nOl0gKyAxODQgKFdlYkxvYWRl
ci5tOjU3NSkKNDkgIGNvbS5hcHBsZS5Gb3VuZGF0aW9uICAgICAgICAgICAJMHg5Mjk3Njg0YyAt
W05TVVJMQ29ubmVjdGlvbihOU1VSTENvbm5lY3Rpb25JbnRlcm5hbCkgX3NlbmREaWRGaW5pc2hM
b2FkaW5nQ2FsbGJhY2tdICsgMTg4CjUwICBjb20uYXBwbGUuRm91bmRhdGlvbiAgICAgICAgICAg
CTB4OTI5NzRhYjggLVtOU1VSTENvbm5lY3Rpb24oTlNVUkxDb25uZWN0aW9uSW50ZXJuYWwpIF9z
ZW5kQ2FsbGJhY2tzXSArIDU1Ngo1MSAgY29tLmFwcGxlLkZvdW5kYXRpb24gICAgICAgICAgIAkw
eDkyOTc0ODEwIF9zZW5kQ2FsbGJhY2tzICsgMTU2CjUyICBjb20uYXBwbGUuQ29yZUZvdW5kYXRp
b24gICAgICAgCTB4OTA3ZGM0Y2MgX19DRlJ1bkxvb3BEb1NvdXJjZXMwICsgMzg0CjUzICBjb20u
YXBwbGUuQ29yZUZvdW5kYXRpb24gICAgICAgCTB4OTA3ZGI5ZmMgX19DRlJ1bkxvb3BSdW4gKyA0
NTIKNTQgIGNvbS5hcHBsZS5Db3JlRm91bmRhdGlvbiAgICAgICAJMHg5MDdkYjQ3YyBDRlJ1bkxv
b3BSdW5TcGVjaWZpYyArIDI2OAo1NSAgY29tLmFwcGxlLkhJVG9vbGJveCAgICAgICAgICAgIAkw
eDkzMWViNzQwIFJ1bkN1cnJlbnRFdmVudExvb3BJbk1vZGUgKyAyNjQKNTYgIGNvbS5hcHBsZS5I
SVRvb2xib3ggICAgICAgICAgICAJMHg5MzFlYWQ0YyBSZWNlaXZlTmV4dEV2ZW50Q29tbW9uICsg
MjQ0CjU3ICBjb20uYXBwbGUuSElUb29sYm94ICAgICAgICAgICAgCTB4OTMxZWFjNDAgQmxvY2tV
bnRpbE5leHRFdmVudE1hdGNoaW5nTGlzdEluTW9kZSArIDk2CjU4ICBjb20uYXBwbGUuQXBwS2l0
ICAgICAgICAgICAgICAgCTB4OTM2ZWVhZTQgX0RQU05leHRFdmVudCArIDM4NAo1OSAgY29tLmFw
cGxlLkFwcEtpdCAgICAgICAgICAgICAgIAkweDkzNmVlN2E4IC1bTlNBcHBsaWNhdGlvbiBuZXh0
RXZlbnRNYXRjaGluZ01hc2s6dW50aWxEYXRlOmluTW9kZTpkZXF1ZXVlOl0gKyAxMTYKNjAgIGNv
bS5hcHBsZS5TYWZhcmkgICAgICAgICAgICAgICAJMHgwMDAwNjc0MCAweDEwMDAgKyAyMjMzNgo2
MSAgY29tLmFwcGxlLkFwcEtpdCAgICAgICAgICAgICAgIAkweDkzNmVhY2VjIC1bTlNBcHBsaWNh
dGlvbiBydW5dICsgNDcyCjYyICBjb20uYXBwbGUuQXBwS2l0ICAgICAgICAgICAgICAgCTB4OTM3
ZGI4N2MgTlNBcHBsaWNhdGlvbk1haW4gKyA0NTIKNjMgIGNvbS5hcHBsZS5TYWZhcmkgICAgICAg
ICAgICAgICAJMHgwMDA1Yzc3YyAweDEwMDAgKyAzNzQ2NTIKNjQgIGNvbS5hcHBsZS5TYWZhcmkg
ICAgICAgICAgICAgICAJMHgwMDA1YzYyNCAweDEwMDAgKyAzNzQzMDgKClRocmVhZCAxOgowICAg
bGliU3lzdGVtLkIuZHlsaWIgICAgICAgICAgICAgIAkweDkwMDBiMjY4IG1hY2hfbXNnX3RyYXAg
KyA4CjEgICBsaWJTeXN0ZW0uQi5keWxpYiAgICAgICAgICAgICAgCTB4OTAwMGIxYmMgbWFjaF9t
c2cgKyA2MAoyICAgY29tLmFwcGxlLkNvcmVGb3VuZGF0aW9uICAgICAgIAkweDkwN2RiYjc4IF9f
Q0ZSdW5Mb29wUnVuICsgODMyCjMgICBjb20uYXBwbGUuQ29yZUZvdW5kYXRpb24gICAgICAgCTB4
OTA3ZGI0N2MgQ0ZSdW5Mb29wUnVuU3BlY2lmaWMgKyAyNjgKNCAgIGNvbS5hcHBsZS5Gb3VuZGF0
aW9uICAgICAgICAgICAJMHg5Mjk1MzE2NCAtW05TUnVuTG9vcCBydW5Nb2RlOmJlZm9yZURhdGU6
XSArIDE3Mgo1ICAgY29tLmFwcGxlLkZvdW5kYXRpb24gICAgICAgICAgIAkweDkyOTUzMDljIC1b
TlNSdW5Mb29wIHJ1bl0gKyA3Ngo2ICAgY29tLmFwcGxlLldlYktpdCAgICAgICAgICAgICAgIAkw
eDAwM2FmNzYwICtbV2ViRmlsZURhdGFiYXNlIF9zeW5jTG9vcDpdICsgNDIwIChXZWJGaWxlRGF0
YWJhc2UubToyOTQpCjcgICBjb20uYXBwbGUuRm91bmRhdGlvbiAgICAgICAgICAgCTB4OTI5NDQx
OTQgZm9ya1RocmVhZEZvckZ1bmN0aW9uICsgMTA4CjggICBsaWJTeXN0ZW0uQi5keWxpYiAgICAg
ICAgICAgICAgCTB4OTAwMmJjMjggX3B0aHJlYWRfYm9keSArIDk2CgpUaHJlYWQgMjoKMCAgIGxp
YlN5c3RlbS5CLmR5bGliICAgICAgICAgICAgICAJMHg5MDAwYjI2OCBtYWNoX21zZ190cmFwICsg
OAoxICAgbGliU3lzdGVtLkIuZHlsaWIgICAgICAgICAgICAgIAkweDkwMDBiMWJjIG1hY2hfbXNn
ICsgNjAKMiAgIGNvbS5hcHBsZS5Db3JlRm91bmRhdGlvbiAgICAgICAJMHg5MDdkYmI3OCBfX0NG
UnVuTG9vcFJ1biArIDgzMgozICAgY29tLmFwcGxlLkNvcmVGb3VuZGF0aW9uICAgICAgIAkweDkw
N2RiNDdjIENGUnVuTG9vcFJ1blNwZWNpZmljICsgMjY4CjQgICBjb20uYXBwbGUuRm91bmRhdGlv
biAgICAgICAgICAgCTB4OTI5NmI2OWMgK1tOU1VSTENvbm5lY3Rpb24oTlNVUkxDb25uZWN0aW9u
SW50ZXJuYWwpIF9yZXNvdXJjZUxvYWRMb29wOl0gKyAyNjQKNSAgIGNvbS5hcHBsZS5Gb3VuZGF0
aW9uICAgICAgICAgICAJMHg5Mjk0NDE5NCBmb3JrVGhyZWFkRm9yRnVuY3Rpb24gKyAxMDgKNiAg
IGxpYlN5c3RlbS5CLmR5bGliICAgICAgICAgICAgICAJMHg5MDAyYmMyOCBfcHRocmVhZF9ib2R5
ICsgOTYKClRocmVhZCAzOgowICAgbGliU3lzdGVtLkIuZHlsaWIgICAgICAgICAgICAgIAkweDkw
MDBiMjY4IG1hY2hfbXNnX3RyYXAgKyA4CjEgICBsaWJTeXN0ZW0uQi5keWxpYiAgICAgICAgICAg
ICAgCTB4OTAwMGIxYmMgbWFjaF9tc2cgKyA2MAoyICAgY29tLmFwcGxlLkNvcmVGb3VuZGF0aW9u
ICAgICAgIAkweDkwN2RiYjc4IF9fQ0ZSdW5Mb29wUnVuICsgODMyCjMgICBjb20uYXBwbGUuQ29y
ZUZvdW5kYXRpb24gICAgICAgCTB4OTA3ZGI0N2MgQ0ZSdW5Mb29wUnVuU3BlY2lmaWMgKyAyNjgK
NCAgIGNvbS5hcHBsZS5Gb3VuZGF0aW9uICAgICAgICAgICAJMHg5Mjk2YzdkYyArW05TVVJMQ2Fj
aGUgX2Rpc2tDYWNoZVN5bmNMb29wOl0gKyAxNTIKNSAgIGNvbS5hcHBsZS5Gb3VuZGF0aW9uICAg
ICAgICAgICAJMHg5Mjk0NDE5NCBmb3JrVGhyZWFkRm9yRnVuY3Rpb24gKyAxMDgKNiAgIGxpYlN5
c3RlbS5CLmR5bGliICAgICAgICAgICAgICAJMHg5MDAyYmMyOCBfcHRocmVhZF9ib2R5ICsgOTYK
ClRocmVhZCA0OgowICAgbGliU3lzdGVtLkIuZHlsaWIgICAgICAgICAgICAgIAkweDkwMDJjMmU4
IHNlbWFwaG9yZV93YWl0X3NpZ25hbF90cmFwICsgOAoxICAgbGliU3lzdGVtLkIuZHlsaWIgICAg
ICAgICAgICAgIAkweDkwMDMwZGNjIHB0aHJlYWRfY29uZF93YWl0ICsgNDgwCjIgICBjb20uYXBw
bGUuRm91bmRhdGlvbiAgICAgICAgICAgCTB4OTI5NGIzMDAgLVtOU0NvbmRpdGlvbkxvY2sgbG9j
a1doZW5Db25kaXRpb246XSArIDY4CjMgICBjb20uYXBwbGUuU3luZGljYXRpb24gICAgICAgICAg
CTB4OWIxNDc0MmMgLVtBc3luY0RCIF9ydW46XSArIDE5Mgo0ICAgY29tLmFwcGxlLkZvdW5kYXRp
b24gICAgICAgICAgIAkweDkyOTQ0MTk0IGZvcmtUaHJlYWRGb3JGdW5jdGlvbiArIDEwOAo1ICAg
bGliU3lzdGVtLkIuZHlsaWIgICAgICAgICAgICAgIAkweDkwMDJiYzI4IF9wdGhyZWFkX2JvZHkg
KyA5NgoKVGhyZWFkIDU6CjAgICBsaWJTeXN0ZW0uQi5keWxpYiAgICAgICAgICAgICAgCTB4OTAw
MWY3YWMgc2VsZWN0ICsgMTIKMSAgIGNvbS5hcHBsZS5Db3JlRm91bmRhdGlvbiAgICAgICAJMHg5
MDdlZTQwYyBfX0NGU29ja2V0TWFuYWdlciArIDQ3MgoyICAgbGliU3lzdGVtLkIuZHlsaWIgICAg
ICAgICAgICAgIAkweDkwMDJiYzI4IF9wdGhyZWFkX2JvZHkgKyA5NgoKVGhyZWFkIDY6CjAgICBs
aWJTeXN0ZW0uQi5keWxpYiAgICAgICAgICAgICAgCTB4OTAwMmMyZTggc2VtYXBob3JlX3dhaXRf
c2lnbmFsX3RyYXAgKyA4CjEgICBsaWJTeXN0ZW0uQi5keWxpYiAgICAgICAgICAgICAgCTB4OTAw
MzBkY2MgcHRocmVhZF9jb25kX3dhaXQgKyA0ODAKMiAgIGNvbS5hcHBsZS5Gb3VuZGF0aW9uICAg
ICAgICAgICAJMHg5Mjk0YjMwMCAtW05TQ29uZGl0aW9uTG9jayBsb2NrV2hlbkNvbmRpdGlvbjpd
ICsgNjgKMyAgIGNvbS5hcHBsZS5BcHBLaXQgICAgICAgICAgICAgICAJMHg5Mzc4YjcwOCAtW05T
VUlIZWFydEJlYXQgX2hlYXJ0QmVhdFRocmVhZDpdICsgMzI0CjQgICBjb20uYXBwbGUuRm91bmRh
dGlvbiAgICAgICAgICAgCTB4OTI5NDQxOTQgZm9ya1RocmVhZEZvckZ1bmN0aW9uICsgMTA4CjUg
ICBsaWJTeXN0ZW0uQi5keWxpYiAgICAgICAgICAgICAgCTB4OTAwMmJjMjggX3B0aHJlYWRfYm9k
eSArIDk2CgpUaHJlYWQgNzoKMCAgIGxpYlN5c3RlbS5CLmR5bGliICAgICAgICAgICAgICAJMHg5
MDAwYjI2OCBtYWNoX21zZ190cmFwICsgOAoxICAgbGliU3lzdGVtLkIuZHlsaWIgICAgICAgICAg
ICAgIAkweDkwMDBiMWJjIG1hY2hfbXNnICsgNjAKMiAgIGNvbS5hcHBsZS5Db3JlRm91bmRhdGlv
biAgICAgICAJMHg5MDdkYmI3OCBfX0NGUnVuTG9vcFJ1biArIDgzMgozICAgY29tLmFwcGxlLkNv
cmVGb3VuZGF0aW9uICAgICAgIAkweDkwN2RiNDdjIENGUnVuTG9vcFJ1blNwZWNpZmljICsgMjY4
CjQgICBjb20uYXBwbGUuQ29yZUZvdW5kYXRpb24gICAgICAgCTB4OTA3ZWE4ZGMgQ0ZSdW5Mb29w
UnVuICsgNTIKNSAgIGNvbS5hcHBsZS5RdWlja1RpbWUgICAgICAgICAgICAJMHg5NDdhZTIwOCBR
VFNOZXR3b3JrVGhyZWFkX1J1blRocmVhZCArIDEyOAo2ICAgbGliU3lzdGVtLkIuZHlsaWIgICAg
ICAgICAgICAgIAkweDkwMDJiYzI4IF9wdGhyZWFkX2JvZHkgKyA5NgoKVGhyZWFkIDg6CjAgICBs
aWJTeXN0ZW0uQi5keWxpYiAgICAgICAgICAgICAgCTB4OTAwNTUxYTggc2VtYXBob3JlX3RpbWVk
d2FpdF9zaWduYWxfdHJhcCArIDgKMSAgIGxpYlN5c3RlbS5CLmR5bGliICAgICAgICAgICAgICAJ
MHg5MDA3MTgyOCBwdGhyZWFkX2NvbmRfdGltZWR3YWl0X3JlbGF0aXZlX25wICsgNTU2CjIgICAu
Li5wbGUuQ29yZVNlcnZpY2VzLkNhcmJvbkNvcmUgCTB4OTBiZjQ1NTAgVFNXYWl0T25TZW1hcGhv
cmVDb21tb24gKyAxNzYKMyAgIC4uLnBsZS5Db3JlU2VydmljZXMuQ2FyYm9uQ29yZSAJMHg5MGJm
NDNhNCBBc3luY0ZpbGVUaHJlYWQodm9pZCopICsgNTYKNCAgIGxpYlN5c3RlbS5CLmR5bGliICAg
ICAgICAgICAgICAJMHg5MDAyYmMyOCBfcHRocmVhZF9ib2R5ICsgOTYKClRocmVhZCA5OgowICAg
bGliU3lzdGVtLkIuZHlsaWIgICAgICAgICAgICAgIAkweDkwMDBiMjY4IG1hY2hfbXNnX3RyYXAg
KyA4CjEgICBsaWJTeXN0ZW0uQi5keWxpYiAgICAgICAgICAgICAgCTB4OTAwMGIxYmMgbWFjaF9t
c2cgKyA2MAoyICAgY29tLmFwcGxlLkNvcmVGb3VuZGF0aW9uICAgICAgIAkweDkwN2RiYjc4IF9f
Q0ZSdW5Mb29wUnVuICsgODMyCjMgICBjb20uYXBwbGUuQ29yZUZvdW5kYXRpb24gICAgICAgCTB4
OTA3ZGI0N2MgQ0ZSdW5Mb29wUnVuU3BlY2lmaWMgKyAyNjgKNCAgIGNvbS5hcHBsZS5Gb3VuZGF0
aW9uICAgICAgICAgICAJMHg5Mjk1MzE2NCAtW05TUnVuTG9vcCBydW5Nb2RlOmJlZm9yZURhdGU6
XSArIDE3Mgo1ICAgY29tLmFwcGxlLkZvdW5kYXRpb24gICAgICAgICAgIAkweDkyOTUzMDljIC1b
TlNSdW5Mb29wIHJ1bl0gKyA3Ngo2ICAgY29tLmFwcGxlLlNhZmFyaSAgICAgICAgICAgICAgIAkw
eDAwMDNkNWYwIDB4MTAwMCArIDI0NzI4MAo3ICAgY29tLmFwcGxlLkZvdW5kYXRpb24gICAgICAg
ICAgIAkweDkyOTQ0MTk0IGZvcmtUaHJlYWRGb3JGdW5jdGlvbiArIDEwOAo4ICAgbGliU3lzdGVt
LkIuZHlsaWIgICAgICAgICAgICAgIAkweDkwMDJiYzI4IF9wdGhyZWFkX2JvZHkgKyA5NgoKVGhy
ZWFkIDAgY3Jhc2hlZCB3aXRoIFBQQyBUaHJlYWQgU3RhdGUgNjQ6CiAgc3JyMDogMHgwMDAwMDAw
MDAxOGQxZTcwIHNycjE6IDB4MDAwMDAwMDAwMjAwZjAzMCAgICAgICAgICAgICAgICAgICAgICAg
IHZyc2F2ZTogMHgwMDAwMDAwMDAwMDAwMDAwCiAgICBjcjogMHg0NDAwNDIyMiAgICAgICAgICB4
ZXI6IDB4MDAwMDAwMDAwMDAwMDAwNiAgIGxyOiAweDAwMDAwMDAwMDE4ZDJhZTAgIGN0cjogMHgw
MDAwMDAwMDAxOGQ0NWQ4CiAgICByMDogMHgwMDAwMDAwMDAxOGQyYWUwICAgcjE6IDB4MDAwMDAw
MDBiZmZmY2EzMCAgIHIyOiAweDAwMDAwMDAwMDAwMDAwMDAgICByMzogMHgwMDAwMDAwMDAwMDAw
MDAwCiAgICByNDogMHgwMDAwMDAwMDE4NjIyMGQwICAgcjU6IDB4MDAwMDAwMDAxYmQ5MjcxMCAg
IHI2OiAweDAwMDAwMDAwMWEzNDNkNjAgICByNzogMHgwMDAwMDAwMDAwMDAwMDAxCiAgICByODog
MHgwMDAwMDAwMDAwMDAwMDAxICAgcjk6IDB4MDAwMDAwMDAwMDAwMDAwMCAgcjEwOiAweDAwMDAw
MDAwOTYxMzJmMjQgIHIxMTogMHgwMDAwMDAwMGE2MTExMmI4CiAgIHIxMjogMHgwMDAwMDAwMDAx
OGQ0NWQ4ICByMTM6IDB4MDAwMDAwMDAwMDAwMDAwMCAgcjE0OiAweDAwMDAwMDAwMDAwMDAwMDEg
IHIxNTogMHgwMDAwMDAwMDAwMDAwMDAwCiAgIHIxNjogMHgwMDAwMDAwMDAwMDAwMDAxICByMTc6
IDB4MDAwMDAwMDBiZmZmZWNhMCAgcjE4OiAweDAwMDAwMDAwMDAwMDAwMDAgIHIxOTogMHgwMDAw
MDAwMDE3YzE0YTIwCiAgIHIyMDogMHgwMDAwMDAwMDAwMDAwMDAwICByMjE6IDB4MDAwMDAwMDAw
MDAwMDAwMCAgcjIyOiAweDAwMDAwMDAwMDAwMDAwMDEgIHIyMzogMHgwMDAwMDAwMGZmZmZmZmZm
CiAgIHIyNDogMHgwMDAwMDAwMDFhMDFhMDgwICByMjU6IDB4MDAwMDAwMDAxOTlhZjQ0MCAgcjI2
OiAweDAwMDAwMDAwMWJkOTI3MTAgIHIyNzogMHgwMDAwMDAwMDFhN2Q0ZDcwCiAgIHIyODogMHgw
MDAwMDAwMDFhMzQzZDYwICByMjk6IDB4MDAwMDAwMDAxYTM0M2Q2MCAgcjMwOiAweDAwMDAwMDAw
YmZmZmNhMzAgIHIzMTogMHgwMDAwMDAwMDAxOGQyYWM4CgpCaW5hcnkgSW1hZ2VzIERlc2NyaXB0
aW9uOgogICAgMHgxMDAwIC0gICAgMHhkY2ZmZiBjb20uYXBwbGUuU2FmYXJpIDIuMC40ICg0MTku
MykJL0FwcGxpY2F0aW9ucy9TYWZhcmkuYXBwL0NvbnRlbnRzL01hY09TL1NhZmFyaQogIDB4MzA1
MDAwIC0gICAweDQxYWZmZiBjb20uYXBwbGUuV2ViS2l0IDQyMCsJL1VzZXJzL2Rka2lsemVyL1By
b2plY3RzL0NvY29hL1dlYktpdC9XZWJLaXRCdWlsZC9EZWJ1Zy9XZWJLaXQuZnJhbWV3b3JrL1Zl
cnNpb25zL0EvV2ViS2l0CiAweDEwMDgwMDAgLSAgMHgxMGRmZmZmIGNvbS5hcHBsZS5KYXZhU2Ny
aXB0Q29yZSA0MjArCS9Vc2Vycy9kZGtpbHplci9Qcm9qZWN0cy9Db2NvYS9XZWJLaXQvV2ViS2l0
QnVpbGQvRGVidWcvSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrL1ZlcnNpb25zL0EvSmF2YVNjcmlw
dENvcmUKIDB4MTg1YzAwMCAtICAweDFlNWZmZmYgY29tLmFwcGxlLldlYkNvcmUgNDIwKwkvVXNl
cnMvZGRraWx6ZXIvUHJvamVjdHMvQ29jb2EvV2ViS2l0L1dlYktpdEJ1aWxkL0RlYnVnL1dlYkNv
cmUuZnJhbWV3b3JrL1ZlcnNpb25zL0EvV2ViQ29yZQoweDE1NjdiMDAwIC0gMHgxNTY3YmZmZiBj
b20uYXBwbGUuU3BvdExpZ2h0Q00gMS4wICgxMjEuMjAuMikJL1N5c3RlbS9MaWJyYXJ5L0NvbnRl
eHR1YWwgTWVudSBJdGVtcy9TcG90bGlnaHRDTS5wbHVnaW4vQ29udGVudHMvTWFjT1MvU3BvdGxp
Z2h0Q00KMHgxN2FjOTAwMCAtIDB4MTdhY2JmZmYgY29tLmFwcGxlLkF1dG9tYXRvckNNTSAxLjAg
KDQ4KQkvU3lzdGVtL0xpYnJhcnkvQ29udGV4dHVhbCBNZW51IEl0ZW1zL0F1dG9tYXRvckNNTS5w
bHVnaW4vQ29udGVudHMvTWFjT1MvQXV0b21hdG9yQ01NCjB4MWFjOTIwMDAgLSAweDFhYzk2ZmZm
IGNvbS5hcHBsZS5Gb2xkZXJBY3Rpb25zTWVudSAxLjMJL1N5c3RlbS9MaWJyYXJ5L0NvbnRleHR1
YWwgTWVudSBJdGVtcy9Gb2xkZXJBY3Rpb25zTWVudS5wbHVnaW4vQ29udGVudHMvTWFjT1MvRm9s
ZGVyQWN0aW9uc01lbnUKMHgxYjRlNTAwMCAtIDB4MWI0ZmVmZmYgR0xEcml2ZXIgCS9TeXN0ZW0v
TGlicmFyeS9GcmFtZXdvcmtzL09wZW5HTC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9SZXNvdXJjZXMv
R0xEcml2ZXIuYnVuZGxlL0dMRHJpdmVyCjB4MWI1NmUwMDAgLSAweDFiNWMzZmZmIGNvbS5EaXZY
SW5jLkRpdlhEZWNvZGVyIDYuMC4wCS9MaWJyYXJ5L1F1aWNrVGltZS9EaXZYIDYgRGVjb2Rlci5j
b21wb25lbnQvQ29udGVudHMvTWFjT1MvRGl2WCA2IERlY29kZXIKMHgxYmFkNDAwMCAtIDB4MWJh
ZWZmZmYgR0xSZW5kZXJlckZsb2F0IAkvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9PcGVuR0wu
ZnJhbWV3b3JrL1ZlcnNpb25zL0EvUmVzb3VyY2VzL0dMUmVuZGVyZXJGbG9hdC5idW5kbGUvR0xS
ZW5kZXJlckZsb2F0CjB4MWM5NGIwMDAgLSAweDFjOTU4ZmZmIGNvbS5hcHBsZS5xdWlja3RpbWUu
d2VicGx1Z2luIDcuMS4yCS9MaWJyYXJ5L0ludGVybmV0IFBsdWctSW5zL1F1aWNrVGltZSBQbHVn
aW4ud2VicGx1Z2luL0NvbnRlbnRzL01hY09TL1F1aWNrVGltZSBQbHVnaW4KMHgxYzk4NzAwMCAt
IDB4MWNhOTZmZmYgR0xFbmdpbmUgCS9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL09wZW5HTC5m
cmFtZXdvcmsvUmVzb3VyY2VzL0dMRW5naW5lLmJ1bmRsZS9HTEVuZ2luZQoweDFjYWM1MDAwIC0g
MHgxY2JiNWZmZiBjb20uYXBwbGUuQVRJUmFkZW9uOTcwMEdMRHJpdmVyIDEuNC4xOCAoNC4xLjgp
CS9TeXN0ZW0vTGlicmFyeS9FeHRlbnNpb25zL0FUSVJhZGVvbjk3MDBHTERyaXZlci5idW5kbGUv
Q29udGVudHMvTWFjT1MvQVRJUmFkZW9uOTcwMEdMRHJpdmVyCjB4MWNkMDUwMDAgLSAweDFjZWY1
ZmZmIGNvbS5tYWNyb21lZGlhLkZsYXNoIFBsYXllci5wbHVnaW4gOC4wLjI0ICgxLjAuMWYyNCkJ
L0xpYnJhcnkvSW50ZXJuZXQgUGx1Zy1JbnMvRmxhc2ggUGxheWVyLnBsdWdpbi9Db250ZW50cy9N
YWNPUy9GbGFzaCBQbGF5ZXIKMHgxZTNkZTAwMCAtIDB4MWUzZjhmZmYgY29tLmFwcGxlLkFwcGxl
SW50ZXJtZWRpYXRlQ29kZWMgMS4xICgxNDEpCS9MaWJyYXJ5L1F1aWNrVGltZS9BcHBsZUludGVy
bWVkaWF0ZUNvZGVjLmNvbXBvbmVudC9Db250ZW50cy9NYWNPUy9BcHBsZUludGVybWVkaWF0ZUNv
ZGVjCjB4MWU1NzYwMDAgLSAweDFlNWVmZmZmIGNvbS5hcHBsZS5hcHBsZXBpeGxldHZpZGVvIDEu
Mi41ICgxLjJkNSkJL1N5c3RlbS9MaWJyYXJ5L1F1aWNrVGltZS9BcHBsZVBpeGxldFZpZGVvLmNv
bXBvbmVudC9Db250ZW50cy9NYWNPUy9BcHBsZVBpeGxldFZpZGVvCjB4MWY4MDgwMDAgLSAweDFm
OWUzZmZmIG5ldC50ZWxlc3RyZWFtLndtdi5pbXBvcnQgMi4wLjIuMTAJL0xpYnJhcnkvUXVpY2tU
aW1lL0ZsaXA0TWFjIFdNViBJbXBvcnQuY29tcG9uZW50L0NvbnRlbnRzL01hY09TL0ZsaXA0TWFj
IFdNViBJbXBvcnQKMHg4ZmQ1MDAwMCAtIDB4OGZkOGRmZmYgY29tLmFwcGxlLlF1aWNrVGltZUZp
cmVXaXJlRFYuY29tcG9uZW50IDcuMS4yCS9TeXN0ZW0vTGlicmFyeS9RdWlja1RpbWUvUXVpY2tU
aW1lRmlyZXdpcmVEVi5jb21wb25lbnQvQ29udGVudHMvTWFjT1MvUXVpY2tUaW1lRmlyZVdpcmVE
VgoweDhmZTAwMDAwIC0gMHg4ZmU1MmZmZiBkeWxkIDQ1LjMJL3Vzci9saWIvZHlsZAoweDkwMDAw
MDAwIC0gMHg5MDFiYmZmZiBsaWJTeXN0ZW0uQi5keWxpYiAJL3Vzci9saWIvbGliU3lzdGVtLkIu
ZHlsaWIKMHg5MDIxMzAwMCAtIDB4OTAyMThmZmYgbGlibWF0aENvbW1vbi5BLmR5bGliIAkvdXNy
L2xpYi9zeXN0ZW0vbGlibWF0aENvbW1vbi5BLmR5bGliCjB4OTAyMWEwMDAgLSAweDkwMjY3ZmZm
IGNvbS5hcHBsZS5Db3JlVGV4dCAxLjAuMiAoPz8/KQkvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jr
cy9BcHBsaWNhdGlvblNlcnZpY2VzLmZyYW1ld29yay9WZXJzaW9ucy9BL0ZyYW1ld29ya3MvQ29y
ZVRleHQuZnJhbWV3b3JrL1ZlcnNpb25zL0EvQ29yZVRleHQKMHg5MDI5MjAwMCAtIDB4OTAzNDNm
ZmYgQVRTIAkvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9BcHBsaWNhdGlvblNlcnZpY2VzLmZy
YW1ld29yay9WZXJzaW9ucy9BL0ZyYW1ld29ya3MvQVRTLmZyYW1ld29yay9WZXJzaW9ucy9BL0FU
UwoweDkwMzcyMDAwIC0gMHg5MDcyY2ZmZiBjb20uYXBwbGUuQ29yZUdyYXBoaWNzIDEuMjU4LjMz
ICg/Pz8pCS9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0FwcGxpY2F0aW9uU2VydmljZXMuZnJh
bWV3b3JrL1ZlcnNpb25zL0EvRnJhbWV3b3Jrcy9Db3JlR3JhcGhpY3MuZnJhbWV3b3JrL1ZlcnNp
b25zL0EvQ29yZUdyYXBoaWNzCjB4OTA3YjkwMDAgLSAweDkwODkyZmZmIGNvbS5hcHBsZS5Db3Jl
Rm91bmRhdGlvbiA2LjQuNiAoMzY4LjI3KQkvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Db3Jl
Rm91bmRhdGlvbi5mcmFtZXdvcmsvVmVyc2lvbnMvQS9Db3JlRm91bmRhdGlvbgoweDkwOGRiMDAw
IC0gMHg5MDhkYmZmZiBjb20uYXBwbGUuQ29yZVNlcnZpY2VzIDEwLjQgKD8/PykJL1N5c3RlbS9M
aWJyYXJ5L0ZyYW1ld29ya3MvQ29yZVNlcnZpY2VzLmZyYW1ld29yay9WZXJzaW9ucy9BL0NvcmVT
ZXJ2aWNlcwoweDkwOGRkMDAwIC0gMHg5MDlkZmZmZiBsaWJpY3Vjb3JlLkEuZHlsaWIgCS91c3Iv
bGliL2xpYmljdWNvcmUuQS5keWxpYgoweDkwYTM5MDAwIC0gMHg5MGFiZGZmZiBsaWJvYmpjLkEu
ZHlsaWIgCS91c3IvbGliL2xpYm9iamMuQS5keWxpYgoweDkwYWU3MDAwIC0gMHg5MGI1N2ZmZiBj
b20uYXBwbGUuZnJhbWV3b3JrLklPS2l0IDEuNCAoPz8/KQkvU3lzdGVtL0xpYnJhcnkvRnJhbWV3
b3Jrcy9JT0tpdC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9JT0tpdAoweDkwYjZkMDAwIC0gMHg5MGI3
ZmZmZiBsaWJhdXRvLmR5bGliIAkvdXNyL2xpYi9saWJhdXRvLmR5bGliCjB4OTBiODYwMDAgLSAw
eDkwZTVkZmZmIGNvbS5hcHBsZS5Db3JlU2VydmljZXMuQ2FyYm9uQ29yZSA2ODEuNAkvU3lzdGVt
L0xpYnJhcnkvRnJhbWV3b3Jrcy9Db3JlU2VydmljZXMuZnJhbWV3b3JrL1ZlcnNpb25zL0EvRnJh
bWV3b3Jrcy9DYXJib25Db3JlLmZyYW1ld29yay9WZXJzaW9ucy9BL0NhcmJvbkNvcmUKMHg5MGVj
MzAwMCAtIDB4OTBmNDNmZmYgY29tLmFwcGxlLkNvcmVTZXJ2aWNlcy5PU1NlcnZpY2VzIDQuMQkv
U3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Db3JlU2VydmljZXMuZnJhbWV3b3JrL1ZlcnNpb25z
L0EvRnJhbWV3b3Jrcy9PU1NlcnZpY2VzLmZyYW1ld29yay9WZXJzaW9ucy9BL09TU2VydmljZXMK
MHg5MGY4ZDAwMCAtIDB4OTBmY2VmZmYgY29tLmFwcGxlLkNGTmV0d29yayAxMjkuMTYJL1N5c3Rl
bS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ29yZVNlcnZpY2VzLmZyYW1ld29yay9WZXJzaW9ucy9BL0Zy
YW1ld29ya3MvQ0ZOZXR3b3JrLmZyYW1ld29yay9WZXJzaW9ucy9BL0NGTmV0d29yawoweDkwZmUz
MDAwIC0gMHg5MGZmYmZmZiBjb20uYXBwbGUuV2ViU2VydmljZXMgMS4xLjIgKDEuMS4wKQkvU3lz
dGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Db3JlU2VydmljZXMuZnJhbWV3b3JrL1ZlcnNpb25zL0Ev
RnJhbWV3b3Jrcy9XZWJTZXJ2aWNlc0NvcmUuZnJhbWV3b3JrL1ZlcnNpb25zL0EvV2ViU2Vydmlj
ZXNDb3JlCjB4OTEwMGIwMDAgLSAweDkxMDhjZmZmIGNvbS5hcHBsZS5TZWFyY2hLaXQgMS4wLjUJ
L1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ29yZVNlcnZpY2VzLmZyYW1ld29yay9WZXJzaW9u
cy9BL0ZyYW1ld29ya3MvU2VhcmNoS2l0LmZyYW1ld29yay9WZXJzaW9ucy9BL1NlYXJjaEtpdAow
eDkxMGQyMDAwIC0gMHg5MTBmY2ZmZiBjb20uYXBwbGUuTWV0YWRhdGEgMTAuNC40ICgxMjEuMzYp
CS9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0NvcmVTZXJ2aWNlcy5mcmFtZXdvcmsvVmVyc2lv
bnMvQS9GcmFtZXdvcmtzL01ldGFkYXRhLmZyYW1ld29yay9WZXJzaW9ucy9BL01ldGFkYXRhCjB4
OTExMGQwMDAgLSAweDkxMTFiZmZmIGxpYnouMS5keWxpYiAJL3Vzci9saWIvbGliei4xLmR5bGli
CjB4OTExMWUwMDAgLSAweDkxMmQ4ZmZmIGNvbS5hcHBsZS5zZWN1cml0eSA0LjQgKDI3NTY2KQkv
U3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9TZWN1cml0eS5mcmFtZXdvcmsvVmVyc2lvbnMvQS9T
ZWN1cml0eQoweDkxM2Q2MDAwIC0gMHg5MTNkZmZmZiBjb20uYXBwbGUuRGlza0FyYml0cmF0aW9u
IDIuMQkvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9EaXNrQXJiaXRyYXRpb24uZnJhbWV3b3Jr
L1ZlcnNpb25zL0EvRGlza0FyYml0cmF0aW9uCjB4OTEzZTYwMDAgLSAweDkxNDBlZmZmIGNvbS5h
cHBsZS5TeXN0ZW1Db25maWd1cmF0aW9uIDEuOC4zCS9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtz
L1N5c3RlbUNvbmZpZ3VyYXRpb24uZnJhbWV3b3JrL1ZlcnNpb25zL0EvU3lzdGVtQ29uZmlndXJh
dGlvbgoweDkxNDIxMDAwIC0gMHg5MTQyY2ZmZiBsaWJnY2Nfcy4xLmR5bGliIAkvdXNyL2xpYi9s
aWJnY2Nfcy4xLmR5bGliCjB4OTE0MzEwMDAgLSAweDkxNDM5ZmZmIGxpYmJzbS5keWxpYiAJL3Vz
ci9saWIvbGliYnNtLmR5bGliCjB4OTE0M2QwMDAgLSAweDkxNGI4ZmZmIGNvbS5hcHBsZS5hdWRp
by5Db3JlQXVkaW8gMy4wLjQJL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ29yZUF1ZGlvLmZy
YW1ld29yay9WZXJzaW9ucy9BL0NvcmVBdWRpbwoweDkxNGY1MDAwIC0gMHg5MTRmNWZmZiBjb20u
YXBwbGUuQXBwbGljYXRpb25TZXJ2aWNlcyAxMC40ICg/Pz8pCS9TeXN0ZW0vTGlicmFyeS9GcmFt
ZXdvcmtzL0FwcGxpY2F0aW9uU2VydmljZXMuZnJhbWV3b3JrL1ZlcnNpb25zL0EvQXBwbGljYXRp
b25TZXJ2aWNlcwoweDkxNGY3MDAwIC0gMHg5MTUyZmZmZiBjb20uYXBwbGUuQUUgMS41ICgyOTcp
CS9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0FwcGxpY2F0aW9uU2VydmljZXMuZnJhbWV3b3Jr
L1ZlcnNpb25zL0EvRnJhbWV3b3Jrcy9BRS5mcmFtZXdvcmsvVmVyc2lvbnMvQS9BRQoweDkxNTRh
MDAwIC0gMHg5MTYxN2ZmZiBjb20uYXBwbGUuQ29sb3JTeW5jIDQuNC40CS9TeXN0ZW0vTGlicmFy
eS9GcmFtZXdvcmtzL0FwcGxpY2F0aW9uU2VydmljZXMuZnJhbWV3b3JrL1ZlcnNpb25zL0EvRnJh
bWV3b3Jrcy9Db2xvclN5bmMuZnJhbWV3b3JrL1ZlcnNpb25zL0EvQ29sb3JTeW5jCjB4OTE2NmMw
MDAgLSAweDkxNmZkZmZmIGNvbS5hcHBsZS5wcmludC5mcmFtZXdvcmsuUHJpbnRDb3JlIDQuNiAo
MTc3LjEzKQkvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9BcHBsaWNhdGlvblNlcnZpY2VzLmZy
YW1ld29yay9WZXJzaW9ucy9BL0ZyYW1ld29ya3MvUHJpbnRDb3JlLmZyYW1ld29yay9WZXJzaW9u
cy9BL1ByaW50Q29yZQoweDkxNzQ0MDAwIC0gMHg5MTdmYmZmZiBjb20uYXBwbGUuUUQgMy4xMC4y
MCAoPz8/KQkvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9BcHBsaWNhdGlvblNlcnZpY2VzLmZy
YW1ld29yay9WZXJzaW9ucy9BL0ZyYW1ld29ya3MvUUQuZnJhbWV3b3JrL1ZlcnNpb25zL0EvUUQK
MHg5MTgzODAwMCAtIDB4OTE4OTZmZmYgY29tLmFwcGxlLkhJU2VydmljZXMgMS41LjMgKD8/PykJ
L1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQXBwbGljYXRpb25TZXJ2aWNlcy5mcmFtZXdvcmsv
VmVyc2lvbnMvQS9GcmFtZXdvcmtzL0hJU2VydmljZXMuZnJhbWV3b3JrL1ZlcnNpb25zL0EvSElT
ZXJ2aWNlcwoweDkxOGM1MDAwIC0gMHg5MThlOWZmZiBjb20uYXBwbGUuTGFuZ0FuYWx5c2lzIDEu
Ni4xCS9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0FwcGxpY2F0aW9uU2VydmljZXMuZnJhbWV3
b3JrL1ZlcnNpb25zL0EvRnJhbWV3b3Jrcy9MYW5nQW5hbHlzaXMuZnJhbWV3b3JrL1ZlcnNpb25z
L0EvTGFuZ0FuYWx5c2lzCjB4OTE4ZmQwMDAgLSAweDkxOTIyZmZmIGNvbS5hcHBsZS5GaW5kQnlD
b250ZW50IDEuNQkvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9BcHBsaWNhdGlvblNlcnZpY2Vz
LmZyYW1ld29yay9WZXJzaW9ucy9BL0ZyYW1ld29ya3MvRmluZEJ5Q29udGVudC5mcmFtZXdvcmsv
VmVyc2lvbnMvQS9GaW5kQnlDb250ZW50CjB4OTE5MzUwMDAgLSAweDkxOTc3ZmZmIGNvbS5hcHBs
ZS5MYXVuY2hTZXJ2aWNlcyAxODEJL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQXBwbGljYXRp
b25TZXJ2aWNlcy5mcmFtZXdvcmsvVmVyc2lvbnMvQS9GcmFtZXdvcmtzL0xhdW5jaFNlcnZpY2Vz
LmZyYW1ld29yay9WZXJzaW9ucy9BL0xhdW5jaFNlcnZpY2VzCjB4OTE5OTMwMDAgLSAweDkxOWE3
ZmZmIGNvbS5hcHBsZS5zcGVlY2guc3ludGhlc2lzLmZyYW1ld29yayAzLjMJL1N5c3RlbS9MaWJy
YXJ5L0ZyYW1ld29ya3MvQXBwbGljYXRpb25TZXJ2aWNlcy5mcmFtZXdvcmsvVmVyc2lvbnMvQS9G
cmFtZXdvcmtzL1NwZWVjaFN5bnRoZXNpcy5mcmFtZXdvcmsvVmVyc2lvbnMvQS9TcGVlY2hTeW50
aGVzaXMKMHg5MTliNTAwMCAtIDB4OTE5ZjVmZmYgY29tLmFwcGxlLkltYWdlSU8uZnJhbWV3b3Jr
IDEuNC44CS9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0FwcGxpY2F0aW9uU2VydmljZXMuZnJh
bWV3b3JrL1ZlcnNpb25zL0EvRnJhbWV3b3Jrcy9JbWFnZUlPLmZyYW1ld29yay9WZXJzaW9ucy9B
L0ltYWdlSU8KMHg5MWEwYjAwMCAtIDB4OTFhZDNmZmYgbGliY3J5cHRvLjAuOS43LmR5bGliIAkv
dXNyL2xpYi9saWJjcnlwdG8uMC45LjcuZHlsaWIKMHg5MWIyMTAwMCAtIDB4OTFiMzZmZmYgbGli
Y3Vwcy4yLmR5bGliIAkvdXNyL2xpYi9saWJjdXBzLjIuZHlsaWIKMHg5MWIzYjAwMCAtIDB4OTFi
NThmZmYgbGliSlBFRy5keWxpYiAJL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQXBwbGljYXRp
b25TZXJ2aWNlcy5mcmFtZXdvcmsvVmVyc2lvbnMvQS9GcmFtZXdvcmtzL0ltYWdlSU8uZnJhbWV3
b3JrL1ZlcnNpb25zL0EvUmVzb3VyY2VzL2xpYkpQRUcuZHlsaWIKMHg5MWI1ZDAwMCAtIDB4OTFi
Y2NmZmYgbGliSlAyLmR5bGliIAkvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9BcHBsaWNhdGlv
blNlcnZpY2VzLmZyYW1ld29yay9WZXJzaW9ucy9BL0ZyYW1ld29ya3MvSW1hZ2VJTy5mcmFtZXdv
cmsvVmVyc2lvbnMvQS9SZXNvdXJjZXMvbGliSlAyLmR5bGliCjB4OTFiZTMwMDAgLSAweDkxYmU3
ZmZmIGxpYkdJRi5keWxpYiAJL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQXBwbGljYXRpb25T
ZXJ2aWNlcy5mcmFtZXdvcmsvVmVyc2lvbnMvQS9GcmFtZXdvcmtzL0ltYWdlSU8uZnJhbWV3b3Jr
L1ZlcnNpb25zL0EvUmVzb3VyY2VzL2xpYkdJRi5keWxpYgoweDkxYmU5MDAwIC0gMHg5MWMzMWZm
ZiBsaWJSYXcuZHlsaWIgCS9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0FwcGxpY2F0aW9uU2Vy
dmljZXMuZnJhbWV3b3JrL1ZlcnNpb25zL0EvRnJhbWV3b3Jrcy9JbWFnZUlPLmZyYW1ld29yay9W
ZXJzaW9ucy9BL1Jlc291cmNlcy9saWJSYXcuZHlsaWIKMHg5MWMzNjAwMCAtIDB4OTFjNzNmZmYg
bGliVElGRi5keWxpYiAJL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQXBwbGljYXRpb25TZXJ2
aWNlcy5mcmFtZXdvcmsvVmVyc2lvbnMvQS9GcmFtZXdvcmtzL0ltYWdlSU8uZnJhbWV3b3JrL1Zl
cnNpb25zL0EvUmVzb3VyY2VzL2xpYlRJRkYuZHlsaWIKMHg5MWM3YTAwMCAtIDB4OTFjOTNmZmYg
bGliUG5nLmR5bGliIAkvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9BcHBsaWNhdGlvblNlcnZp
Y2VzLmZyYW1ld29yay9WZXJzaW9ucy9BL0ZyYW1ld29ya3MvSW1hZ2VJTy5mcmFtZXdvcmsvVmVy
c2lvbnMvQS9SZXNvdXJjZXMvbGliUG5nLmR5bGliCjB4OTFjOTgwMDAgLSAweDkxYzliZmZmIGxp
YlJhZGlhbmNlLmR5bGliIAkvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9BcHBsaWNhdGlvblNl
cnZpY2VzLmZyYW1ld29yay9WZXJzaW9ucy9BL0ZyYW1ld29ya3MvSW1hZ2VJTy5mcmFtZXdvcmsv
VmVyc2lvbnMvQS9SZXNvdXJjZXMvbGliUmFkaWFuY2UuZHlsaWIKMHg5MWM5ZDAwMCAtIDB4OTFj
OWRmZmYgY29tLmFwcGxlLkFjY2VsZXJhdGUgMS4yLjIgKEFjY2VsZXJhdGUgMS4yLjIpCS9TeXN0
ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0FjY2VsZXJhdGUuZnJhbWV3b3JrL1ZlcnNpb25zL0EvQWNj
ZWxlcmF0ZQoweDkxYzlmMDAwIC0gMHg5MWQ4NGZmZiBjb20uYXBwbGUudkltYWdlIDIuNAkvU3lz
dGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9BY2NlbGVyYXRlLmZyYW1ld29yay9WZXJzaW9ucy9BL0Zy
YW1ld29ya3MvdkltYWdlLmZyYW1ld29yay9WZXJzaW9ucy9BL3ZJbWFnZQoweDkxZDhjMDAwIC0g
MHg5MWRhYmZmZiBjb20uYXBwbGUuQWNjZWxlcmF0ZS52ZWNMaWIgMy4yLjIgKHZlY0xpYiAzLjIu
MikJL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQWNjZWxlcmF0ZS5mcmFtZXdvcmsvVmVyc2lv
bnMvQS9GcmFtZXdvcmtzL3ZlY0xpYi5mcmFtZXdvcmsvVmVyc2lvbnMvQS92ZWNMaWIKMHg5MWUx
NzAwMCAtIDB4OTFlODVmZmYgbGlidk1pc2MuZHlsaWIgCS9TeXN0ZW0vTGlicmFyeS9GcmFtZXdv
cmtzL0FjY2VsZXJhdGUuZnJhbWV3b3JrL1ZlcnNpb25zL0EvRnJhbWV3b3Jrcy92ZWNMaWIuZnJh
bWV3b3JrL1ZlcnNpb25zL0EvbGlidk1pc2MuZHlsaWIKMHg5MWU5MDAwMCAtIDB4OTFmMjVmZmYg
bGlidkRTUC5keWxpYiAJL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQWNjZWxlcmF0ZS5mcmFt
ZXdvcmsvVmVyc2lvbnMvQS9GcmFtZXdvcmtzL3ZlY0xpYi5mcmFtZXdvcmsvVmVyc2lvbnMvQS9s
aWJ2RFNQLmR5bGliCjB4OTFmM2YwMDAgLSAweDkyNGM3ZmZmIGxpYkJMQVMuZHlsaWIgCS9TeXN0
ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0FjY2VsZXJhdGUuZnJhbWV3b3JrL1ZlcnNpb25zL0EvRnJh
bWV3b3Jrcy92ZWNMaWIuZnJhbWV3b3JrL1ZlcnNpb25zL0EvbGliQkxBUy5keWxpYgoweDkyNGZh
MDAwIC0gMHg5MjgyNWZmZiBsaWJMQVBBQ0suZHlsaWIgCS9TeXN0ZW0vTGlicmFyeS9GcmFtZXdv
cmtzL0FjY2VsZXJhdGUuZnJhbWV3b3JrL1ZlcnNpb25zL0EvRnJhbWV3b3Jrcy92ZWNMaWIuZnJh
bWV3b3JrL1ZlcnNpb25zL0EvbGliTEFQQUNLLmR5bGliCjB4OTI4NTUwMDAgLSAweDkyOGRkZmZm
IGNvbS5hcHBsZS5EZXNrdG9wU2VydmljZXMgMS4zLjQJL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVG
cmFtZXdvcmtzL0Rlc2t0b3BTZXJ2aWNlc1ByaXYuZnJhbWV3b3JrL1ZlcnNpb25zL0EvRGVza3Rv
cFNlcnZpY2VzUHJpdgoweDkyOTFlMDAwIC0gMHg5MmI0OWZmZiBjb20uYXBwbGUuRm91bmRhdGlv
biA2LjQuNiAoNTY3LjI3KQkvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Gb3VuZGF0aW9uLmZy
YW1ld29yay9WZXJzaW9ucy9DL0ZvdW5kYXRpb24KMHg5MmM2NzAwMCAtIDB4OTJkNDVmZmYgbGli
eG1sMi4yLmR5bGliIAkvdXNyL2xpYi9saWJ4bWwyLjIuZHlsaWIKMHg5MmQ2NTAwMCAtIDB4OTJl
NTNmZmYgbGliaWNvbnYuMi5keWxpYiAJL3Vzci9saWIvbGliaWNvbnYuMi5keWxpYgoweDkyZTY1
MDAwIC0gMHg5MmU4M2ZmZiBsaWJHTC5keWxpYiAJL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3Mv
T3BlbkdMLmZyYW1ld29yay9WZXJzaW9ucy9BL0xpYnJhcmllcy9saWJHTC5keWxpYgoweDkyZThl
MDAwIC0gMHg5MmVlOGZmZiBsaWJHTFUuZHlsaWIgCS9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtz
L09wZW5HTC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9MaWJyYXJpZXMvbGliR0xVLmR5bGliCjB4OTJm
MDYwMDAgLSAweDkyZjA2ZmZmIGNvbS5hcHBsZS5DYXJib24gMTAuNCAoPz8/KQkvU3lzdGVtL0xp
YnJhcnkvRnJhbWV3b3Jrcy9DYXJib24uZnJhbWV3b3JrL1ZlcnNpb25zL0EvQ2FyYm9uCjB4OTJm
MDgwMDAgLSAweDkyZjFjZmZmIGNvbS5hcHBsZS5JbWFnZUNhcHR1cmUgMy4wCS9TeXN0ZW0vTGli
cmFyeS9GcmFtZXdvcmtzL0NhcmJvbi5mcmFtZXdvcmsvVmVyc2lvbnMvQS9GcmFtZXdvcmtzL0lt
YWdlQ2FwdHVyZS5mcmFtZXdvcmsvVmVyc2lvbnMvQS9JbWFnZUNhcHR1cmUKMHg5MmYzNDAwMCAt
IDB4OTJmNDRmZmYgY29tLmFwcGxlLnNwZWVjaC5yZWNvZ25pdGlvbi5mcmFtZXdvcmsgMy40CS9T
eXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0NhcmJvbi5mcmFtZXdvcmsvVmVyc2lvbnMvQS9GcmFt
ZXdvcmtzL1NwZWVjaFJlY29nbml0aW9uLmZyYW1ld29yay9WZXJzaW9ucy9BL1NwZWVjaFJlY29n
bml0aW9uCjB4OTJmNTAwMDAgLSAweDkyZjY1ZmZmIGNvbS5hcHBsZS5zZWN1cml0eWhpIDIuMCAo
MjAzKQkvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9DYXJib24uZnJhbWV3b3JrL1ZlcnNpb25z
L0EvRnJhbWV3b3Jrcy9TZWN1cml0eUhJLmZyYW1ld29yay9WZXJzaW9ucy9BL1NlY3VyaXR5SEkK
MHg5MmY3NzAwMCAtIDB4OTJmZmVmZmYgY29tLmFwcGxlLmluay5mcmFtZXdvcmsgMTAxLjIgKDY5
KQkvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9DYXJib24uZnJhbWV3b3JrL1ZlcnNpb25zL0Ev
RnJhbWV3b3Jrcy9JbmsuZnJhbWV3b3JrL1ZlcnNpb25zL0EvSW5rCjB4OTMwMTIwMDAgLSAweDkz
MDFkZmZmIGNvbS5hcHBsZS5oZWxwIDEuMC4zICgzMikJL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29y
a3MvQ2FyYm9uLmZyYW1ld29yay9WZXJzaW9ucy9BL0ZyYW1ld29ya3MvSGVscC5mcmFtZXdvcmsv
VmVyc2lvbnMvQS9IZWxwCjB4OTMwMjcwMDAgLSAweDkzMDU0ZmZmIGNvbS5hcHBsZS5vcGVuc2Ny
aXB0aW5nIDEuMi41ICg/Pz8pCS9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0NhcmJvbi5mcmFt
ZXdvcmsvVmVyc2lvbnMvQS9GcmFtZXdvcmtzL09wZW5TY3JpcHRpbmcuZnJhbWV3b3JrL1ZlcnNp
b25zL0EvT3BlblNjcmlwdGluZwoweDkzMDZlMDAwIC0gMHg5MzA3ZWZmZiBjb20uYXBwbGUucHJp
bnQuZnJhbWV3b3JrLlByaW50IDUuMCAoMTkwLjEpCS9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtz
L0NhcmJvbi5mcmFtZXdvcmsvVmVyc2lvbnMvQS9GcmFtZXdvcmtzL1ByaW50LmZyYW1ld29yay9W
ZXJzaW9ucy9BL1ByaW50CjB4OTMwOGEwMDAgLSAweDkzMGYwZmZmIGNvbS5hcHBsZS5odG1scmVu
ZGVyaW5nIDEuMS4yCS9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0NhcmJvbi5mcmFtZXdvcmsv
VmVyc2lvbnMvQS9GcmFtZXdvcmtzL0hUTUxSZW5kZXJpbmcuZnJhbWV3b3JrL1ZlcnNpb25zL0Ev
SFRNTFJlbmRlcmluZwoweDkzMTIxMDAwIC0gMHg5MzE3MGZmZiBjb20uYXBwbGUuTmF2aWdhdGlv
blNlcnZpY2VzIDMuNC40ICgzLjQuMykJL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ2FyYm9u
LmZyYW1ld29yay9WZXJzaW9ucy9BL0ZyYW1ld29ya3MvTmF2aWdhdGlvblNlcnZpY2VzLmZyYW1l
d29yay9WZXJzaW9ucy9BL05hdmlnYXRpb25TZXJ2aWNlcwoweDkzMTllMDAwIC0gMHg5MzFiYmZm
ZiBjb20uYXBwbGUuYXVkaW8uU291bmRNYW5hZ2VyIDMuOQkvU3lzdGVtL0xpYnJhcnkvRnJhbWV3
b3Jrcy9DYXJib24uZnJhbWV3b3JrL1ZlcnNpb25zL0EvRnJhbWV3b3Jrcy9DYXJib25Tb3VuZC5m
cmFtZXdvcmsvVmVyc2lvbnMvQS9DYXJib25Tb3VuZAoweDkzMWNkMDAwIC0gMHg5MzFkYWZmZiBj
b20uYXBwbGUuQ29tbW9uUGFuZWxzIDEuMi4yICg3MykJL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29y
a3MvQ2FyYm9uLmZyYW1ld29yay9WZXJzaW9ucy9BL0ZyYW1ld29ya3MvQ29tbW9uUGFuZWxzLmZy
YW1ld29yay9WZXJzaW9ucy9BL0NvbW1vblBhbmVscwoweDkzMWUzMDAwIC0gMHg5MzRmMGZmZiBj
b20uYXBwbGUuSElUb29sYm94IDEuNC44ICg/Pz8pCS9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtz
L0NhcmJvbi5mcmFtZXdvcmsvVmVyc2lvbnMvQS9GcmFtZXdvcmtzL0hJVG9vbGJveC5mcmFtZXdv
cmsvVmVyc2lvbnMvQS9ISVRvb2xib3gKMHg5MzYzZjAwMCAtIDB4OTM2NGJmZmYgY29tLmFwcGxl
Lm9wZW5nbCAxLjQuNwkvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9PcGVuR0wuZnJhbWV3b3Jr
L1ZlcnNpb25zL0EvT3BlbkdMCjB4OTM2NTAwMDAgLSAweDkzNjcwZmZmIGNvbS5hcHBsZS5EaXJl
Y3RvcnlTZXJ2aWNlLkZyYW1ld29yayAzLjEJL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvRGly
ZWN0b3J5U2VydmljZS5mcmFtZXdvcmsvVmVyc2lvbnMvQS9EaXJlY3RvcnlTZXJ2aWNlCjB4OTM2
ZTQwMDAgLSAweDkzNmU0ZmZmIGNvbS5hcHBsZS5Db2NvYSA2LjQgKD8/PykJL1N5c3RlbS9MaWJy
YXJ5L0ZyYW1ld29ya3MvQ29jb2EuZnJhbWV3b3JrL1ZlcnNpb25zL0EvQ29jb2EKMHg5MzZlNjAw
MCAtIDB4OTNkMTlmZmYgY29tLmFwcGxlLkFwcEtpdCA2LjQuNyAoODI0LjQxKQkvU3lzdGVtL0xp
YnJhcnkvRnJhbWV3b3Jrcy9BcHBLaXQuZnJhbWV3b3JrL1ZlcnNpb25zL0MvQXBwS2l0CjB4OTQw
YTYwMDAgLSAweDk0MTE2ZmZmIGNvbS5hcHBsZS5Db3JlRGF0YSA4MAkvU3lzdGVtL0xpYnJhcnkv
RnJhbWV3b3Jrcy9Db3JlRGF0YS5mcmFtZXdvcmsvVmVyc2lvbnMvQS9Db3JlRGF0YQoweDk0MTRm
MDAwIC0gMHg5NDIxMmZmZiBjb20uYXBwbGUuYXVkaW8udG9vbGJveC5BdWRpb1Rvb2xib3ggMS40
LjMJL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQXVkaW9Ub29sYm94LmZyYW1ld29yay9WZXJz
aW9ucy9BL0F1ZGlvVG9vbGJveAoweDk0MjY0MDAwIC0gMHg5NDI2NGZmZiBjb20uYXBwbGUuYXVk
aW8udW5pdHMuQXVkaW9Vbml0IDEuNAkvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9BdWRpb1Vu
aXQuZnJhbWV3b3JrL1ZlcnNpb25zL0EvQXVkaW9Vbml0CjB4OTQyNjYwMDAgLSAweDk0NDE5ZmZm
IGNvbS5hcHBsZS5RdWFydHpDb3JlIDEuNC44CS9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL1F1
YXJ0ekNvcmUuZnJhbWV3b3JrL1ZlcnNpb25zL0EvUXVhcnR6Q29yZQoweDk0NDZjMDAwIC0gMHg5
NDRhOWZmZiBsaWJzcWxpdGUzLjAuZHlsaWIgCS91c3IvbGliL2xpYnNxbGl0ZTMuMC5keWxpYgow
eDk0NGIxMDAwIC0gMHg5NDUwMWZmZiBsaWJHTEltYWdlLmR5bGliIAkvU3lzdGVtL0xpYnJhcnkv
RnJhbWV3b3Jrcy9PcGVuR0wuZnJhbWV3b3JrL1ZlcnNpb25zL0EvTGlicmFyaWVzL2xpYkdMSW1h
Z2UuZHlsaWIKMHg5NDU5MTAwMCAtIDB4OTQ1ZDNmZmYgY29tLmFwcGxlLnZtdXRpbHMgNC4wLjIg
KDkzLjEpCS9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy92bXV0aWxzLmZyYW1ld29y
ay9WZXJzaW9ucy9BL3ZtdXRpbHMKMHg5NDYxNzAwMCAtIDB4OTQ2MzNmZmYgY29tLmFwcGxlLnNl
Y3VyaXR5Zm91bmRhdGlvbiAyLjIgKDI3NzEwKQkvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9T
ZWN1cml0eUZvdW5kYXRpb24uZnJhbWV3b3JrL1ZlcnNpb25zL0EvU2VjdXJpdHlGb3VuZGF0aW9u
CjB4OTQ2NDcwMDAgLSAweDk0NjhiZmZmIGNvbS5hcHBsZS5zZWN1cml0eWludGVyZmFjZSAyLjIg
KDI3NjkyKQkvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9TZWN1cml0eUludGVyZmFjZS5mcmFt
ZXdvcmsvVmVyc2lvbnMvQS9TZWN1cml0eUludGVyZmFjZQoweDk0NmFmMDAwIC0gMHg5NDZiZWZm
ZiBsaWJDR0FUUy5BLmR5bGliIAkvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9BcHBsaWNhdGlv
blNlcnZpY2VzLmZyYW1ld29yay9WZXJzaW9ucy9BL0ZyYW1ld29ya3MvQ29yZUdyYXBoaWNzLmZy
YW1ld29yay9WZXJzaW9ucy9BL1Jlc291cmNlcy9saWJDR0FUUy5BLmR5bGliCjB4OTQ2YzYwMDAg
LSAweDk0NmQyZmZmIGxpYkNTeW5jLkEuZHlsaWIgCS9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtz
L0FwcGxpY2F0aW9uU2VydmljZXMuZnJhbWV3b3JrL1ZlcnNpb25zL0EvRnJhbWV3b3Jrcy9Db3Jl
R3JhcGhpY3MuZnJhbWV3b3JrL1ZlcnNpb25zL0EvUmVzb3VyY2VzL2xpYkNTeW5jLkEuZHlsaWIK
MHg5NDcxODAwMCAtIDB4OTQ3MzBmZmYgbGliUklQLkEuZHlsaWIgCS9TeXN0ZW0vTGlicmFyeS9G
cmFtZXdvcmtzL0FwcGxpY2F0aW9uU2VydmljZXMuZnJhbWV3b3JrL1ZlcnNpb25zL0EvRnJhbWV3
b3Jrcy9Db3JlR3JhcGhpY3MuZnJhbWV3b3JrL1ZlcnNpb25zL0EvUmVzb3VyY2VzL2xpYlJJUC5B
LmR5bGliCjB4OTQ3MzcwMDAgLSAweDk0OWViZmZmIGNvbS5hcHBsZS5RdWlja1RpbWUgNy4xLjIJ
L1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvUXVpY2tUaW1lLmZyYW1ld29yay9WZXJzaW9ucy9B
L1F1aWNrVGltZQoweDk0YWFmMDAwIC0gMHg5NGIyMGZmZiBsaWJzdGRjKysuNi5keWxpYiAJL3Vz
ci9saWIvbGlic3RkYysrLjYuZHlsaWIKMHg5NGI5MzAwMCAtIDB4OTRiYjNmZmYgbGlibXguQS5k
eWxpYiAJL3Vzci9saWIvbGlibXguQS5keWxpYgoweDk0Y2JiMDAwIC0gMHg5NGRlYmZmZiBjb20u
YXBwbGUuQWRkcmVzc0Jvb2suZnJhbWV3b3JrIDQuMC40ICg0ODUuMSkJL1N5c3RlbS9MaWJyYXJ5
L0ZyYW1ld29ya3MvQWRkcmVzc0Jvb2suZnJhbWV3b3JrL1ZlcnNpb25zL0EvQWRkcmVzc0Jvb2sK
MHg5NGU3ZDAwMCAtIDB4OTRlOGNmZmYgY29tLmFwcGxlLkRTT2JqQ1dyYXBwZXJzLkZyYW1ld29y
ayAxLjEJL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0RTT2JqQ1dyYXBwZXJzLmZy
YW1ld29yay9WZXJzaW9ucy9BL0RTT2JqQ1dyYXBwZXJzCjB4OTRlOTQwMDAgLSAweDk0ZWMxZmZm
IGNvbS5hcHBsZS5MREFQRnJhbWV3b3JrIDEuNC4xICg2OS4wLjEpCS9TeXN0ZW0vTGlicmFyeS9G
cmFtZXdvcmtzL0xEQVAuZnJhbWV3b3JrL1ZlcnNpb25zL0EvTERBUAoweDk0ZWM4MDAwIC0gMHg5
NGVkOGZmZiBsaWJzYXNsMi4yLmR5bGliIAkvdXNyL2xpYi9saWJzYXNsMi4yLmR5bGliCjB4OTRl
ZGMwMDAgLSAweDk0ZjBiZmZmIGxpYnNzbC4wLjkuNy5keWxpYiAJL3Vzci9saWIvbGlic3NsLjAu
OS43LmR5bGliCjB4OTRmMWIwMDAgLSAweDk0ZjM4ZmZmIGxpYnJlc29sdi45LmR5bGliIAkvdXNy
L2xpYi9saWJyZXNvbHYuOS5keWxpYgoweDk2MTExMDAwIC0gMHg5NjEzYWZmZiBsaWJ4c2x0LjEu
ZHlsaWIgCS91c3IvbGliL2xpYnhzbHQuMS5keWxpYgoweDk2M2VlMDAwIC0gMHg5NjQyZGZmZiBj
b20uYXBwbGUuUVRLaXQgNy4xLjIJL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvUVRLaXQuZnJh
bWV3b3JrL1ZlcnNpb25zL0EvUVRLaXQKMHg5NjQ4YTAwMCAtIDB4OTY0YmNmZmYgY29tLmFwcGxl
LlBERktpdCAxLjAuMQkvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9RdWFydHouZnJhbWV3b3Jr
L1ZlcnNpb25zL0EvRnJhbWV3b3Jrcy9QREZLaXQuZnJhbWV3b3JrL1BERktpdAoweDk3NDYxMDAw
IC0gMHg5NzQ4MGZmZiBjb20uYXBwbGUudmVjTGliIDMuMi4yICh2ZWNMaWIgMy4yLjIpCS9TeXN0
ZW0vTGlicmFyeS9GcmFtZXdvcmtzL3ZlY0xpYi5mcmFtZXdvcmsvVmVyc2lvbnMvQS92ZWNMaWIK
MHg5N2I5NzAwMCAtIDB4OTdjNThmZmYgbGliR0xQcm9ncmFtbWFiaWxpdHkuZHlsaWIgCS9TeXN0
ZW0vTGlicmFyeS9GcmFtZXdvcmtzL09wZW5HTC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9MaWJyYXJp
ZXMvbGliR0xQcm9ncmFtbWFiaWxpdHkuZHlsaWIKMHg5N2M4MzAwMCAtIDB4OTdjODRmZmYgbGli
R0xTeXN0ZW0uZHlsaWIgCS9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL09wZW5HTC5mcmFtZXdv
cmsvVmVyc2lvbnMvQS9MaWJyYXJpZXMvbGliR0xTeXN0ZW0uZHlsaWIKMHg5N2M4NjAwMCAtIDB4
OTdjOTNmZmYgY29tLmFwcGxlLmFnbCAyLjUuNiAoQUdMLTIuNS42KQkvU3lzdGVtL0xpYnJhcnkv
RnJhbWV3b3Jrcy9BR0wuZnJhbWV3b3JrL1ZlcnNpb25zL0EvQUdMCjB4OTk3OGEwMDAgLSAweDlh
MTYwZmZmIGNvbS5hcHBsZS5RdWlja1RpbWVDb21wb25lbnRzLmNvbXBvbmVudCA3LjEuMgkvU3lz
dGVtL0xpYnJhcnkvUXVpY2tUaW1lL1F1aWNrVGltZUNvbXBvbmVudHMuY29tcG9uZW50L0NvbnRl
bnRzL01hY09TL1F1aWNrVGltZUNvbXBvbmVudHMKMHg5YTM3NjAwMCAtIDB4OWEzNzlmZmYgY29t
LmFwcGxlLlF1aWNrVGltZUgyNjQuY29tcG9uZW50IDcuMS4yCS9TeXN0ZW0vTGlicmFyeS9RdWlj
a1RpbWUvUXVpY2tUaW1lSDI2NC5jb21wb25lbnQvQ29udGVudHMvTWFjT1MvUXVpY2tUaW1lSDI2
NAoweDlhNTg1MDAwIC0gMHg5YTY0M2ZmZiBjb20uYXBwbGUuUXVpY2tUaW1lTVBFRzQuY29tcG9u
ZW50IDcuMS4yCS9TeXN0ZW0vTGlicmFyeS9RdWlja1RpbWUvUXVpY2tUaW1lTVBFRzQuY29tcG9u
ZW50L0NvbnRlbnRzL01hY09TL1F1aWNrVGltZU1QRUc0CjB4OWE2NWYwMDAgLSAweDlhN2FlZmZm
IGNvbS5hcHBsZS5RdWlja1RpbWVTdHJlYW1pbmcuY29tcG9uZW50IDcuMS4yCS9TeXN0ZW0vTGli
cmFyeS9RdWlja1RpbWUvUXVpY2tUaW1lU3RyZWFtaW5nLmNvbXBvbmVudC9Db250ZW50cy9NYWNP
Uy9RdWlja1RpbWVTdHJlYW1pbmcKMHg5YWQ5NDAwMCAtIDB4OWFkYmJmZmYgY29tLmFwcGxlLlF1
aWNrVGltZSBQbHVnaW4ucGx1Z2luIDcuMS4yCS9MaWJyYXJ5L0ludGVybmV0IFBsdWctSW5zL1F1
aWNrVGltZSBQbHVnaW4ucGx1Z2luL0NvbnRlbnRzL01hY09TL1F1aWNrVGltZSBQbHVnaW4KMHg5
YjE0NDAwMCAtIDB4OWIxN2FmZmYgY29tLmFwcGxlLlN5bmRpY2F0aW9uIDEuMC42ICg1NCkJL1N5
c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL1N5bmRpY2F0aW9uLmZyYW1ld29yay9WZXJz
aW9ucy9BL1N5bmRpY2F0aW9uCjB4OWIxOTcwMDAgLSAweDliMWE5ZmZmIGNvbS5hcHBsZS5TeW5k
aWNhdGlvblVJIDEuMC42ICg1NCkJL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL1N5
bmRpY2F0aW9uVUkuZnJhbWV3b3JrL1ZlcnNpb25zL0EvU3luZGljYXRpb25VSQoKTW9kZWw6IFBv
d2VyQm9vazUsNCwgQm9vdFJPTSA0LjguNmYwLCAxIHByb2Nlc3NvcnMsIFBvd2VyUEMgRzQgICgx
LjEpLCAxLjUgR0h6LCAxIEdCCkdyYXBoaWNzOiBBVEkgTW9iaWxpdHkgUmFkZW9uIDk3MDAsIEFU
WSxSVjM2ME0xMSwgQUdQLCAxMjggTUIKTWVtb3J5IE1vZHVsZTogU09ESU1NMS9KMjVVUFBFUiwg
MSBHQiwgRERSIFNEUkFNLCBQQzI3MDBVLTI1MzMwCkFpclBvcnQ6IEFpclBvcnQgRXh0cmVtZSwg
NDA0LjIgKDMuOTAuMzQuMC5wMTYpCk1vZGVtOiBKdW1wLCAsIFYuOTIsIFZlcnNpb24gMS4wLCAK
Qmx1ZXRvb3RoOiBWZXJzaW9uIDEuNy41ZjEwLCAyIHNlcnZpY2UsIDAgZGV2aWNlcywgMSBpbmNv
bWluZyBzZXJpYWwgcG9ydHMKTmV0d29yayBTZXJ2aWNlOiBBaXJQb3J0LCBBaXJQb3J0LCBlbjEK
UENJIENhcmQ6IFRYTixQQ0lYWFhYLTAwLCBjYXJkYnVzLCBQQyBDYXJkClBhcmFsbGVsIEFUQSBE
ZXZpY2U6IE1BVFNISVRBRFZELVIgICBVSi04MjUsIApQYXJhbGxlbCBBVEEgRGV2aWNlOiBIaXRh
Y2hpIEhUUzU0ODA4ME05QVQwMCwgNzQuNTMgR0IKVVNCIERldmljZTogQmx1ZXRvb3RoIEhDSSwg
LCBVcCB0byAxMiBNYi9zZWMsIDUwMCBtQQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>12009</attachid>
            <date>2006-12-24 14:24:49 -0800</date>
            <delta_ts>2010-06-11 15:07:57 -0700</delta_ts>
            <desc>partial fix</desc>
            <filename>10313r0_patch.txt</filename>
            <type>text/plain</type>
            <size>2817</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxODQxMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjIgQEAKKzIwMDYtMTItMjQgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzEzCisgICAgICAgIFJl
cHJvZHVjaWJsZSBjcmFzaCB3aGVuIGRvaW5nIGltcG9ydFN0eWxlc2hlZXQgaW4gamF2YXNjcmlw
dCB3aXRoIAorICAgICAgICB4c2wgZmlsZXMgdGhhdCB1c2UgeHNsOmltcG9ydAorCisgICAgICAg
IFRoaXMgZG9lc24ndCBmdWxseSBhZGRyZXNzIHRoZSBidWcsIGJ1dCBtYWtlcyBhIGNvdXBsZSBv
ZiBzdGVwcworICAgICAgICBpbiB0aGF0IGRpcmVjdGlvbi4KKworICAgICAgICAqIHhtbC9YU0xU
UHJvY2Vzc29yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRyYW5zZm9ybVRvU3RyaW5nKTogU2V0
IG1fc3R5bGVzaGVldCBldmVuIGlmIGl0J3MgY3JlYXRlZCBpbXBsaWNpdGx5LAorICAgICAgICBy
YXRoZXIgdGhhbiBwYXNzZWQgZnJvbSBvdXRzaWRlLiBBbHdheXMgcmVzZXQgaXQgaW4gdGhlIGVu
ZCAodGhpcyBkb2Vzbid0IGFmZmVjdAorICAgICAgICBEb2N1bWVudDo6YXBwbHlYU0xUcmFuc2Zv
cm0oKSwgd2hpY2ggd2FzIHRoZSBvbmx5IHVzZXIgb2Ygc2V0WFNMU3R5bGVzaGVldCgpKS4KKwor
ICAgICAgICAqIHhtbC94bWxodHRwcmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxI
dHRwUmVxdWVzdDo6Z2V0UmVzcG9uc2VYTUwpOiBTZXQgdGhlIGxvYWRlZCBkb2N1bWVudCdzIFVS
TC4KKwogMjAwNi0xMi0yNCAgTWl0eiBQZXR0ZWwgIDxtaXR6QHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgTWFjaWVqIGFuZCBHZW9mZi4KSW5kZXg6IFdlYkNvcmUveG1sL1hTTFRQ
cm9jZXNzb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuY3Bw
CShyZXZpc2lvbiAxODQwNSkKKysrIFdlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yLDYgKzIsNyBAQAogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFhT
TCBpbXBsZW1lbnRhdGlvbi4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYg
QXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBBbGV4ZXkg
UHJvc2t1cnlha292IDxhcEB3ZWJraXQub3JnPgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMTIs
NiArMzEzLDkgQEAgYm9vbCBYU0xUUHJvY2Vzc29yOjp0cmFuc2Zvcm1Ub1N0cmluZyhObwogICAg
IH0KICAgICBjYWNoZWRTdHlsZXNoZWV0LT5jbGVhckRvY3VtZW50cygpOwogICAgIAorICAgIGlm
ICghbV9zdHlsZXNoZWV0KQorICAgICAgICBtX3N0eWxlc2hlZXQgPSBjYWNoZWRTdHlsZXNoZWV0
OworCiAgICAgeG1sQ2hhciogb3JpZ01ldGhvZCA9IHNoZWV0LT5tZXRob2Q7CiAgICAgaWYgKCFv
cmlnTWV0aG9kICYmIG1pbWVUeXBlID09ICJ0ZXh0L2h0bWwiKQogICAgICAgICBzaGVldC0+bWV0
aG9kID0gKHhtbENoYXIqKSJodG1sIjsKQEAgLTM1MCw2ICszNTQsNyBAQCBib29sIFhTTFRQcm9j
ZXNzb3I6OnRyYW5zZm9ybVRvU3RyaW5nKE5vCiAgICAgc2hlZXQtPm1ldGhvZCA9IG9yaWdNZXRo
b2Q7CiAgICAgc2V0WFNMVExvYWRDYWxsQmFjaygwLCAwLCAwKTsKICAgICB4c2x0RnJlZVN0eWxl
c2hlZXQoc2hlZXQpOworICAgIG1fc3R5bGVzaGVldCA9IDA7CiAKICAgICByZXR1cm4gc3VjY2Vz
czsKIH0KSW5kZXg6IFdlYkNvcmUveG1sL3htbGh0dHByZXF1ZXN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3htbC94bWxodHRwcmVxdWVzdC5jcHAJKHJldmlzaW9uIDE4NDA1KQorKysgV2Vi
Q29yZS94bWwveG1saHR0cHJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjEsNiArMTYx
LDggQEAgRG9jdW1lbnQqIFhNTEh0dHBSZXF1ZXN0OjpnZXRSZXNwb25zZVhNTAogICAgICAgICBp
ZiAocmVzcG9uc2VJc1hNTCgpKSB7CiAgICAgICAgICAgICBtX3Jlc3BvbnNlWE1MID0gbV9kb2Mt
PmltcGxlbWVudGF0aW9uKCktPmNyZWF0ZURvY3VtZW50KDApOwogICAgICAgICAgICAgbV9yZXNw
b25zZVhNTC0+b3BlbigpOworICAgICAgICAgICAgbV9yZXNwb25zZVhNTC0+c2V0VVJMKG1fdXJs
LnVybCgpKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBzZXQgTGFzdC1Nb2RpZmllZCBhbmQgY29v
a2llcyAoY3VycmVudGx5LCB0aG9zZSBhcmUgb25seSBhdmFpbGFibGUgZm9yIEhUTUxEb2N1bWVu
dHMpLgogICAgICAgICAgICAgbV9yZXNwb25zZVhNTC0+d3JpdGUobV9yZXNwb25zZVRleHQpOwog
ICAgICAgICAgICAgbV9yZXNwb25zZVhNTC0+ZmluaXNoUGFyc2luZygpOwogICAgICAgICAgICAg
bV9yZXNwb25zZVhNTC0+Y2xvc2UoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>12131</attachid>
            <date>2006-12-31 05:09:56 -0800</date>
            <delta_ts>2006-12-31 05:09:56 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>load-stylesheet.txt</filename>
            <type>text/plain</type>
            <size>13171</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAJKHJldmlzaW9uIDE4NDgzKQorKysgV2Vi
Q29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzYsNyAr
NDM2LDcgQEAgdW5zaWduZWQgc2hvcnQgQ1NTUHJpbWl0aXZlVmFsdWU6OmNzc1ZhbAogICAgIHJl
dHVybiBDU1NfUFJJTUlUSVZFX1ZBTFVFOwogfQogCi1ib29sIENTU1ByaW1pdGl2ZVZhbHVlOjpw
YXJzZVN0cmluZyggY29uc3QgU3RyaW5nICYvKnN0cmluZyovLCBib29sICkKK2Jvb2wgQ1NTUHJp
bWl0aXZlVmFsdWU6OnBhcnNlU3RyaW5nKGNvbnN0IFN0cmluZyAmLypzdHJpbmcqLywgYm9vbCwg
Ym9vbCkKIHsKICAgICAvLyAjIyMKICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBXZWJDb3JlL2Nz
cy9DU1NQcmltaXRpdmVWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1ByaW1p
dGl2ZVZhbHVlLmgJKHJldmlzaW9uIDE4NDgzKQorKysgV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZl
VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDcgKzE0NSw3IEBAIHB1YmxpYzoKIAogICAg
IGludCBnZXRJZGVudCgpOwogCi0gICAgdmlydHVhbCBib29sIHBhcnNlU3RyaW5nKGNvbnN0IFN0
cmluZyYsIGJvb2wgPSBmYWxzZSk7CisgICAgdmlydHVhbCBib29sIHBhcnNlU3RyaW5nKGNvbnN0
IFN0cmluZyYsIGJvb2wgc3RyaWN0ID0gZmFsc2UsIGJvb2wgYXN5bmMgPSB0cnVlKTsKICAgICB2
aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNRdWly
a1ZhbHVlKCkgeyByZXR1cm4gZmFsc2U7IH0KSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1N0eWxlUnVs
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTU3R5bGVSdWxlLmNwcAkocmV2aXNp
b24gMTg0ODMpCisrKyBXZWJDb3JlL2Nzcy9DU1NTdHlsZVJ1bGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03Miw3ICs3Miw3IEBAIFN0cmluZyBDU1NTdHlsZVJ1bGU6OmNzc1RleHQoKSBjb25zdAog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWJvb2wgQ1NTU3R5bGVSdWxlOjpwYXJzZVN0cmluZyhj
b25zdCBTdHJpbmcmIC8qc3RyaW5nKi8sIGJvb2wgLypzdHJpY3QqLykKK2Jvb2wgQ1NTU3R5bGVS
dWxlOjpwYXJzZVN0cmluZyhjb25zdCBTdHJpbmcmIC8qc3RyaW5nKi8sIGJvb2wgLypzdHJpY3Qq
LywgYm9vbCAvKmFzeW5jKi8pCiB7CiAgICAgLy8gRklYTUUKICAgICByZXR1cm4gZmFsc2U7Cklu
ZGV4OiBXZWJDb3JlL2Nzcy9DU1NTdHlsZVJ1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nz
cy9DU1NTdHlsZVJ1bGUuaAkocmV2aXNpb24gMTg0ODMpCisrKyBXZWJDb3JlL2Nzcy9DU1NTdHls
ZVJ1bGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwogCiAgICAgLy8gTm90IHBhcnQgb2YgdGhlIENT
U09NCi0gICAgdmlydHVhbCBib29sIHBhcnNlU3RyaW5nKGNvbnN0IFN0cmluZyYsIGJvb2wgPSBm
YWxzZSk7CisgICAgdmlydHVhbCBib29sIHBhcnNlU3RyaW5nKGNvbnN0IFN0cmluZyYsIGJvb2wg
c3RyaWN0ID0gZmFsc2UsIGJvb2wgYXN5bmMgPSB0cnVlKTsKIAogICAgIHZvaWQgc2V0U2VsZWN0
b3IoQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKSB7IG1fc2VsZWN0b3IgPSBzZWxlY3RvcjsgfQogICAg
IHZvaWQgc2V0RGVjbGFyYXRpb24oUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bj4pOwpJbmRleDogV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAJKHJldmlzaW9uIDE4NDgzKQorKysgV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw3ICsxNDUsNyBA
QCBjb25zdCBBdG9taWNTdHJpbmcmIENTU1N0eWxlU2hlZXQ6OmRldGVyCiAgICAgcmV0dXJuIG51
bGxBdG9tOyAvLyBBc3N1bWUgd2Ugd29udCBtYXRjaCBhbnkgbmFtZXNwYWNlcy4KIH0KIAotYm9v
bCBDU1NTdHlsZVNoZWV0OjpwYXJzZVN0cmluZyhjb25zdCBTdHJpbmcgJnN0cmluZywgYm9vbCBz
dHJpY3QpCitib29sIENTU1N0eWxlU2hlZXQ6OnBhcnNlU3RyaW5nKGNvbnN0IFN0cmluZyAmc3Ry
aW5nLCBib29sIHN0cmljdCwgYm9vbCAvKmFzeW5jKi8pCiB7CiAgICAgc2V0U3RyaWN0UGFyc2lu
ZyhzdHJpY3QpOwogICAgIENTU1BhcnNlciBwKHN0cmljdCk7CkluZGV4OiBXZWJDb3JlL2Nzcy9D
U1NTdHlsZVNoZWV0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5o
CShyZXZpc2lvbiAxODQ4MykKKysrIFdlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCB2b2lk
IHN0eWxlU2hlZXRDaGFuZ2VkKCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VTdHJpbmcoY29u
c3QgU3RyaW5nJiwgYm9vbCBzdHJpY3QgPSB0cnVlKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VT
dHJpbmcoY29uc3QgU3RyaW5nJiwgYm9vbCBzdHJpY3QgPSB0cnVlLCBib29sIGFzeW5jID0gdHJ1
ZSk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNMb2FkaW5nKCk7CiAKSW5kZXg6IFdlYkNvcmUvY3Nz
L1N0eWxlQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL1N0eWxlQmFzZS5oCShyZXZp
c2lvbiAxODQ4MykKKysrIFdlYkNvcmUvY3NzL1N0eWxlQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC03MSw3ICs3MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBib29s
IGlzU1ZHUGFpbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKLSAgICAgICAg
dmlydHVhbCBib29sIHBhcnNlU3RyaW5nKGNvbnN0IFN0cmluZyYsIGJvb2wgLypzdHJpY3QqLyA9
IGZhbHNlKSB7IHJldHVybiBmYWxzZTsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgcGFyc2VTdHJp
bmcoY29uc3QgU3RyaW5nJiwgYm9vbCAvKnN0cmljdCovID0gZmFsc2UsIGJvb2wgLyphc3luYyov
ID0gdHJ1ZSkgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGNoZWNrTG9h
ZGVkKCk7CiAKICAgICAgICAgdm9pZCBzZXRTdHJpY3RQYXJzaW5nKGJvb2wgYikgeyBtX3N0cmlj
dFBhcnNpbmcgPSBiOyB9CkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGUuY3BwCShyZXZpc2lvbiAxODQ4MykKKysrIFdlYkNv
cmUvbG9hZGVyL0NhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODksNyArODksNyBAQCBDYWNo
ZWRSZXNvdXJjZSogQ2FjaGU6OnJlcXVlc3RSZXNvdXJjZShECiAKICAgICBpZiAoIXJlc291cmNl
KSB7CiAgICAgICAgIC8vIFRoZSByZXNvdXJjZSBkb2VzIG5vdCBleGlzdC4gIENyZWF0ZSBpdC4K
LSAgICAgICAgcmVzb3VyY2UgPSBjcmVhdGVSZXNvdXJjZSh0eXBlLCBkb2NMb2FkZXIsIHVybC51
cmwoKSwgZXhwaXJlRGF0ZSwgY2hhcnNldCk7CisgICAgICAgIHJlc291cmNlID0gY3JlYXRlUmVz
b3VyY2UodHlwZSwgZG9jTG9hZGVyLCB1cmwsIGV4cGlyZURhdGUsIGNoYXJzZXQpOwogICAgICAg
ICBBU1NFUlQocmVzb3VyY2UpOwogICAgICAgICByZXNvdXJjZS0+c2V0SW5DYWNoZSghZGlzYWJs
ZWQoKSk7CiAgICAgICAgIGlmICghZGlzYWJsZWQoKSkKSW5kZXg6IFdlYkNvcmUveG1sL1hTTElt
cG9ydFJ1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1sL1hTTEltcG9ydFJ1bGUuY3Bw
CShyZXZpc2lvbiAxODQ4MykKKysrIFdlYkNvcmUveG1sL1hTTEltcG9ydFJ1bGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw4IEBACiAKICNpbmNsdWRlICJDYWNoZWRYU0xTdHlsZVNo
ZWV0LmgiCiAjaW5jbHVkZSAiRG9jTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNs
dWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIlhTTFN0eWxlU2hlZXQuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtNzQsMjEgKzc2LDE4IEBAIGJvb2wgWFNMSW1wb3J0UnVsZTo6aXNM
b2FkaW5nKCkKICAgICByZXR1cm4gKG1fbG9hZGluZyB8fCAobV9zdHlsZVNoZWV0ICYmIG1fc3R5
bGVTaGVldC0+aXNMb2FkaW5nKCkpKTsKIH0KIAotdm9pZCBYU0xJbXBvcnRSdWxlOjpsb2FkU2hl
ZXQoKQordm9pZCBYU0xJbXBvcnRSdWxlOjpsb2FkU2hlZXQoYm9vbCBhc3luYykKIHsKLSAgICBE
b2NMb2FkZXIqIGRvY0xvYWRlciA9IDA7CiAgICAgU3R5bGVCYXNlKiByb290ID0gdGhpczsKICAg
ICBTdHlsZUJhc2UqIHBhcmVudDsKICAgICB3aGlsZSAoKHBhcmVudCA9IHJvb3QtPnBhcmVudCgp
KSkKICAgICAgICAgcm9vdCA9IHBhcmVudDsKLSAgICBpZiAocm9vdC0+aXNYU0xTdHlsZVNoZWV0
KCkpCi0gICAgICAgIGRvY0xvYWRlciA9IHN0YXRpY19jYXN0PFhTTFN0eWxlU2hlZXQqPihyb290
KS0+ZG9jTG9hZGVyKCk7CiAgICAgCiAgICAgU3RyaW5nIGFic0hyZWYgPSBtX3N0ckhyZWY7CiAg
ICAgWFNMU3R5bGVTaGVldCogcGFyZW50U2hlZXQgPSBwYXJlbnRTdHlsZVNoZWV0KCk7CiAgICAg
aWYgKCFwYXJlbnRTaGVldC0+aHJlZigpLmlzTnVsbCgpKQogICAgICAgICAvLyB1c2UgcGFyZW50
IHN0eWxlaGVldCdzIFVSTCBhcyB0aGUgYmFzZSBVUkwKLSAgICAgICAgYWJzSHJlZiA9IEtVUkwo
cGFyZW50U2hlZXQtPmhyZWYoKS5kZXByZWNhdGVkU3RyaW5nKCksbV9zdHJIcmVmLmRlcHJlY2F0
ZWRTdHJpbmcoKSkudXJsKCk7CisgICAgICAgIGFic0hyZWYgPSBLVVJMKHBhcmVudFNoZWV0LT5o
cmVmKCkuZGVwcmVjYXRlZFN0cmluZygpLCBtX3N0ckhyZWYuZGVwcmVjYXRlZFN0cmluZygpKS51
cmwoKTsKICAgICAKICAgICAvLyBDaGVjayBmb3IgYSBjeWNsZSBpbiBvdXIgaW1wb3J0IGNoYWlu
LiAgSWYgd2UgZW5jb3VudGVyIGEgc3R5bGVzaGVldAogICAgIC8vIGluIG91ciBwYXJlbnQgY2hh
aW4gd2l0aCB0aGUgc2FtZSBVUkwsIHRoZW4ganVzdCBiYWlsLgpAQCAtOTcsMTcgKzk2LDMwIEBA
IHZvaWQgWFNMSW1wb3J0UnVsZTo6bG9hZFNoZWV0KCkKICAgICAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgCi0gICAgbV9jYWNoZWRTaGVldCA9IGRvY0xvYWRlci0+cmVxdWVzdFhTTFN0eWxl
U2hlZXQoYWJzSHJlZik7CisgICAgQVNTRVJUKHJvb3QtPmlzWFNMU3R5bGVTaGVldCgpKTsKKyAg
ICBEb2NMb2FkZXIqIGRvY0xvYWRlciA9IHN0YXRpY19jYXN0PFhTTFN0eWxlU2hlZXQqPihyb290
KS0+ZG9jTG9hZGVyKCk7CiAgICAgCi0gICAgaWYgKG1fY2FjaGVkU2hlZXQpIHsKLSAgICAgICAg
bV9jYWNoZWRTaGVldC0+cmVmKHRoaXMpOworICAgIGlmIChhc3luYykgeworICAgICAgICBtX2Nh
Y2hlZFNoZWV0ID0gZG9jTG9hZGVyLT5yZXF1ZXN0WFNMU3R5bGVTaGVldChhYnNIcmVmKTsKICAg
ICAgICAgCi0gICAgICAgIC8vIElmIHRoZSBpbXBvcnRlZCBzaGVldCBpcyBpbiB0aGUgY2FjaGUs
IHRoZW4gc2V0WFNMU3R5bGVTaGVldCBnZXRzIGNhbGxlZCwKLSAgICAgICAgLy8gYW5kIHRoZSBz
aGVldCBldmVuIGdldHMgcGFyc2VkICh2aWEgcGFyc2VTdHJpbmcpLiAgSW4gdGhpcyBjYXNlIHdl
IGhhdmUKLSAgICAgICAgLy8gbG9hZGVkIChldmVuIGlmIG91ciBzdWJyZXNvdXJjZXMgaGF2ZW4n
dCksIHNvIGlmIHdlIGhhdmUgYSBzdHlsZXNoZWV0IGFmdGVyCi0gICAgICAgIC8vIGNoZWNraW5n
IHRoZSBjYWNoZSwgdGhlbiB3ZSd2ZSBjbGVhcmx5IGxvYWRlZC4KLSAgICAgICAgaWYgKCFtX3N0
eWxlU2hlZXQpCi0gICAgICAgICAgICBtX2xvYWRpbmcgPSB0cnVlOworICAgICAgICBpZiAobV9j
YWNoZWRTaGVldCkgeworICAgICAgICAgICAgbV9jYWNoZWRTaGVldC0+cmVmKHRoaXMpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICAvLyBJZiB0aGUgaW1wb3J0ZWQgc2hlZXQgaXMgaW4gdGhl
IGNhY2hlLCB0aGVuIHNldFhTTFN0eWxlU2hlZXQgZ2V0cyBjYWxsZWQsCisgICAgICAgICAgICAv
LyBhbmQgdGhlIHNoZWV0IGV2ZW4gZ2V0cyBwYXJzZWQgKHZpYSBwYXJzZVN0cmluZykuICBJbiB0
aGlzIGNhc2Ugd2UgaGF2ZQorICAgICAgICAgICAgLy8gbG9hZGVkIChldmVuIGlmIG91ciBzdWJy
ZXNvdXJjZXMgaGF2ZW4ndCksIHNvIGlmIHdlIGhhdmUgYSBzdHlsZXNoZWV0IGFmdGVyCisgICAg
ICAgICAgICAvLyBjaGVja2luZyB0aGUgY2FjaGUsIHRoZW4gd2UndmUgY2xlYXJseSBsb2FkZWQu
CisgICAgICAgICAgICBpZiAoIW1fc3R5bGVTaGVldCkKKyAgICAgICAgICAgICAgICBtX2xvYWRp
bmcgPSB0cnVlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgUmVzb3VyY2VSZXNw
b25zZSByZXNwb25zZTsKKyAgICAgICAgVmVjdG9yPGNoYXI+IGRhdGE7CisgICAgICAgICAgICAK
KyAgICAgICAgaWYgKGRvY0xvYWRlci0+ZnJhbWUoKSkgCisgICAgICAgICAgICBkb2NMb2FkZXIt
PmZyYW1lKCktPmxvYWRlcigpLT5sb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KGFic0hyZWYsIHJl
c3BvbnNlLCBkYXRhKTsKKyAgICAgICAgCisgICAgICAgIHNldFhTTFN0eWxlU2hlZXQoYWJzSHJl
ZiwgU3RyaW5nKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSkpOwogICAgIH0KIH0KIApJbmRleDog
V2ViQ29yZS94bWwvWFNMSW1wb3J0UnVsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1sL1hT
TEltcG9ydFJ1bGUuaAkocmV2aXNpb24gMTg0ODMpCisrKyBXZWJDb3JlL3htbC9YU0xJbXBvcnRS
dWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBzZXRYU0xTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcm
IHNoZWV0KTsKICAgICAKICAgICBib29sIGlzTG9hZGluZygpOwotICAgIHZvaWQgbG9hZFNoZWV0
KCk7CisgICAgdm9pZCBsb2FkU2hlZXQoYm9vbCBhc3luYyk7IC8vIGFzeW5jID09IHRydWUgd2ls
bCBzdGlsbCByZXN1bHQgaW4gYSBzeW5jaHJvbm91cyBsb2FkIGlmIHRoZSBzdHlsZXNoZWV0IHdh
cyBjYWNoZWQuCiAgICAgCiBwcm90ZWN0ZWQ6CiAgICAgU3RyaW5nIG1fc3RySHJlZjsKSW5kZXg6
IFdlYkNvcmUveG1sL1hTTFN0eWxlU2hlZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1s
L1hTTFN0eWxlU2hlZXQuY3BwCShyZXZpc2lvbiAxODQ4MykKKysrIFdlYkNvcmUveG1sL1hTTFN0
eWxlU2hlZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNyArMTE4LDcgQEAgRG9jTG9hZGVy
KiBYU0xTdHlsZVNoZWV0Ojpkb2NMb2FkZXIoKQogICAgIHJldHVybiBtX293bmVyRG9jdW1lbnQt
PmRvY0xvYWRlcigpOwogfQogCi1ib29sIFhTTFN0eWxlU2hlZXQ6OnBhcnNlU3RyaW5nKGNvbnN0
IFN0cmluZyYgc3RyaW5nLCBib29sIHN0cmljdCkKK2Jvb2wgWFNMU3R5bGVTaGVldDo6cGFyc2VT
dHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wgc3RyaWN0LCBib29sIGFzeW5jKQogewog
ICAgIC8vIFBhcnNlIGluIGEgc2luZ2xlIGNodW5rIGludG8gYW4geG1sRG9jUHRyCiAgICAgY29u
c3QgVUNoYXIgQk9NID0gMHhGRUZGOwpAQCAtMTMxLDEyICsxMzEsMTIgQEAgYm9vbCBYU0xTdHls
ZVNoZWV0OjpwYXJzZVN0cmluZyhjb25zdCBTdAogICAgICAgICBtX293bmVyRG9jdW1lbnQtPlVS
TCgpLmFzY2lpKCksCiAgICAgICAgIEJPTUhpZ2hCeXRlID09IDB4RkYgPyAiVVRGLTE2TEUiIDog
IlVURi0xNkJFIiwgCiAgICAgICAgIFhNTF9QQVJTRV9OT0VOVCB8IFhNTF9QQVJTRV9EVERBVFRS
IHwgWE1MX1BBUlNFX05PRVJST1IgfCBYTUxfUEFSU0VfTk9XQVJOSU5HIHwgWE1MX1BBUlNFX05P
Q0RBVEEpOwotICAgIGxvYWRDaGlsZFNoZWV0cygpOworICAgIGxvYWRDaGlsZFNoZWV0cyhhc3lu
Yyk7CiAgICAgc2V0TG9hZGVyRm9yTGliWE1MQ2FsbGJhY2tzKDApOwogICAgIHJldHVybiBtX3N0
eWxlc2hlZXREb2M7CiB9CiAKLXZvaWQgWFNMU3R5bGVTaGVldDo6bG9hZENoaWxkU2hlZXRzKCkK
K3ZvaWQgWFNMU3R5bGVTaGVldDo6bG9hZENoaWxkU2hlZXRzKGJvb2wgYXN5bmMpCiB7CiAgICAg
aWYgKCFkb2N1bWVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNzAsNyArMTcwLDcgQEAgdm9p
ZCBYU0xTdHlsZVNoZWV0Ojpsb2FkQ2hpbGRTaGVldHMoKQogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgaWYgKGN1cnItPnR5cGUgPT0gWE1MX0VMRU1FTlRfTk9ERSAmJiBJU19YU0xUX0VMRU0o
Y3VycikgJiYgSVNfWFNMVF9OQU1FKGN1cnIsICJpbXBvcnQiKSkgewogICAgICAgICAgICAgICAg
IHhtbENoYXIqIHVyaVJlZiA9IHhzbHRHZXROc1Byb3AoY3VyciwgKGNvbnN0IHhtbENoYXIqKSJo
cmVmIiwgWFNMVF9OQU1FU1BBQ0UpOyAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBs
b2FkQ2hpbGRTaGVldChEZXByZWNhdGVkU3RyaW5nOjpmcm9tVXRmOCgoY29uc3QgY2hhciopdXJp
UmVmKSk7CisgICAgICAgICAgICAgICAgbG9hZENoaWxkU2hlZXQoRGVwcmVjYXRlZFN0cmluZzo6
ZnJvbVV0ZjgoKGNvbnN0IGNoYXIqKXVyaVJlZiksIGFzeW5jKTsKICAgICAgICAgICAgICAgICB4
bWxGcmVlKHVyaVJlZik7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBicmVh
azsKQEAgLTE4MSw3ICsxODEsNyBAQCB2b2lkIFhTTFN0eWxlU2hlZXQ6OmxvYWRDaGlsZFNoZWV0
cygpCiAgICAgICAgIHdoaWxlIChjdXJyKSB7CiAgICAgICAgICAgICBpZiAoY3Vyci0+dHlwZSA9
PSBYTUxfRUxFTUVOVF9OT0RFICYmIElTX1hTTFRfRUxFTShjdXJyKSAmJiBJU19YU0xUX05BTUUo
Y3VyciwgImluY2x1ZGUiKSkgewogICAgICAgICAgICAgICAgIHhtbENoYXIqIHVyaVJlZiA9IHhz
bHRHZXROc1Byb3AoY3VyciwgKGNvbnN0IHhtbENoYXIqKSJocmVmIiwgWFNMVF9OQU1FU1BBQ0Up
OwotICAgICAgICAgICAgICAgIGxvYWRDaGlsZFNoZWV0KERlcHJlY2F0ZWRTdHJpbmc6OmZyb21V
dGY4KChjb25zdCBjaGFyKil1cmlSZWYpKTsKKyAgICAgICAgICAgICAgICBsb2FkQ2hpbGRTaGVl
dChEZXByZWNhdGVkU3RyaW5nOjpmcm9tVXRmOCgoY29uc3QgY2hhciopdXJpUmVmKSwgYXN5bmMp
OwogICAgICAgICAgICAgICAgIHhtbEZyZWUodXJpUmVmKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGN1cnIgPSBjdXJyLT5uZXh0OwpAQCAtMTg5LDExICsxODksMTEgQEAgdm9pZCBYU0xT
dHlsZVNoZWV0Ojpsb2FkQ2hpbGRTaGVldHMoKQogICAgIH0KIH0KIAotdm9pZCBYU0xTdHlsZVNo
ZWV0Ojpsb2FkQ2hpbGRTaGVldChjb25zdCBEZXByZWNhdGVkU3RyaW5nJiBocmVmKQordm9pZCBY
U0xTdHlsZVNoZWV0Ojpsb2FkQ2hpbGRTaGVldChjb25zdCBEZXByZWNhdGVkU3RyaW5nJiBocmVm
LCBib29sIGFzeW5jKQogewogICAgIFJlZlB0cjxYU0xJbXBvcnRSdWxlPiBjaGlsZFJ1bGUgPSBu
ZXcgWFNMSW1wb3J0UnVsZSh0aGlzLCBocmVmKTsKICAgICBhcHBlbmQoY2hpbGRSdWxlKTsKLSAg
ICBjaGlsZFJ1bGUtPmxvYWRTaGVldCgpOworICAgIGNoaWxkUnVsZS0+bG9hZFNoZWV0KGFzeW5j
KTsKIH0KIAogeHNsdFN0eWxlc2hlZXRQdHIgWFNMU3R5bGVTaGVldDo6Y29tcGlsZVN0eWxlU2hl
ZXQoKQpJbmRleDogV2ViQ29yZS94bWwvWFNMU3R5bGVTaGVldC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUveG1sL1hTTFN0eWxlU2hlZXQuaAkocmV2aXNpb24gMTg0ODMpCisrKyBXZWJDb3JlL3ht
bC9YU0xTdHlsZVNoZWV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDEzICs0NSwxMyBAQCBwdWJs
aWM6CiAKICAgICB2aXJ0dWFsIFN0cmluZyB0eXBlKCkgY29uc3QgeyByZXR1cm4gInRleHQveG1s
IjsgfQogCi0gICAgdmlydHVhbCBib29sIHBhcnNlU3RyaW5nKGNvbnN0IFN0cmluZyAmc3RyaW5n
LCBib29sIHN0cmljdCA9IHRydWUpOworICAgIHZpcnR1YWwgYm9vbCBwYXJzZVN0cmluZyhjb25z
dCBTdHJpbmcgJnN0cmluZywgYm9vbCBzdHJpY3QgPSB0cnVlLCBib29sIGFzeW5jID0gdHJ1ZSk7
CiAgICAgCiAgICAgdmlydHVhbCBib29sIGlzTG9hZGluZygpOwogICAgIHZpcnR1YWwgdm9pZCBj
aGVja0xvYWRlZCgpOwogCi0gICAgdm9pZCBsb2FkQ2hpbGRTaGVldHMoKTsKLSAgICB2b2lkIGxv
YWRDaGlsZFNoZWV0KGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIGhyZWYpOworICAgIHZvaWQgbG9h
ZENoaWxkU2hlZXRzKGJvb2wgYXN5bmMpOworICAgIHZvaWQgbG9hZENoaWxkU2hlZXQoY29uc3Qg
RGVwcmVjYXRlZFN0cmluZyYgaHJlZiwgYm9vbCBhc3luYyk7CiAKICAgICB4c2x0U3R5bGVzaGVl
dFB0ciBjb21waWxlU3R5bGVTaGVldCgpOwogCkluZGV4OiBXZWJDb3JlL3htbC9YU0xUUHJvY2Vz
c29yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yLmNwcAkocmV2
aXNpb24gMTg0ODMpCisrKyBXZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjU2LDggKzI1NiwxMCBAQCBzdGF0aWMgaW5saW5lIFJlZlB0cjxEb2N1bWVudEZy
YWdtZW50PiBjCiBzdGF0aWMgeHNsdFN0eWxlc2hlZXRQdHIgeHNsdFN0eWxlc2hlZXRQb2ludGVy
KFJlZlB0cjxYU0xTdHlsZVNoZWV0PiAmY2FjaGVkU3R5bGVzaGVldCwgTm9kZSAqc3R5bGVzaGVl
dFJvb3ROb2RlKQogewogICAgIGlmICghY2FjaGVkU3R5bGVzaGVldCAmJiBzdHlsZXNoZWV0Um9v
dE5vZGUpIHsKLSAgICAgICAgY2FjaGVkU3R5bGVzaGVldCA9IG5ldyBYU0xTdHlsZVNoZWV0KHN0
eWxlc2hlZXRSb290Tm9kZS0+cGFyZW50KCkgPyBzdHlsZXNoZWV0Um9vdE5vZGUtPnBhcmVudCgp
IDogc3R5bGVzaGVldFJvb3ROb2RlKTsKLSAgICAgICAgY2FjaGVkU3R5bGVzaGVldC0+cGFyc2VT
dHJpbmcoY3JlYXRlTWFya3VwKHN0eWxlc2hlZXRSb290Tm9kZSkpOworICAgICAgICBjYWNoZWRT
dHlsZXNoZWV0ID0gbmV3IFhTTFN0eWxlU2hlZXQoc3R5bGVzaGVldFJvb3ROb2RlLT5wYXJlbnQo
KSA/IHN0eWxlc2hlZXRSb290Tm9kZS0+cGFyZW50KCkgOiBzdHlsZXNoZWV0Um9vdE5vZGUsIHN0
eWxlc2hlZXRSb290Tm9kZS0+ZG9jdW1lbnQoKS0+VVJMKCkpOworICAgICAgICAvLyBXZSBvbmx5
IGdldCBoZXJlIHdoZW4gaGFuZGxpbmcgWFNMVFByb2Nlc3NvciBtZXRob2RzLCBub3Qgd2hlbiB0
cmFuc2Zvcm1pbmcgdGhlIG1haW4gZG9jdW1lbnQuCisgICAgICAgIC8vIFNvLCBzdWJyZXNvdXJj
ZXMgbmVlZCB0byBiZSBsb2FkZWQgc3luY2hyb25vdXNseS4KKyAgICAgICAgY2FjaGVkU3R5bGVz
aGVldC0+cGFyc2VTdHJpbmcoY3JlYXRlTWFya3VwKHN0eWxlc2hlZXRSb290Tm9kZSksIHRydWUs
IGZhbHNlKTsKICAgICB9CiAgICAgCiAgICAgaWYgKCFjYWNoZWRTdHlsZXNoZWV0IHx8ICFjYWNo
ZWRTdHlsZXNoZWV0LT5kb2N1bWVudCgpKQpAQCAtMzAzLDE4ICszMDUsMTQgQEAgc3RhdGljIGlu
bGluZSBEZXByZWNhdGVkU3RyaW5nIHJlc3VsdE1JTQogYm9vbCBYU0xUUHJvY2Vzc29yOjp0cmFu
c2Zvcm1Ub1N0cmluZyhOb2RlICpzb3VyY2VOb2RlLCBEZXByZWNhdGVkU3RyaW5nICZtaW1lVHlw
ZSwgRGVwcmVjYXRlZFN0cmluZyAmcmVzdWx0U3RyaW5nLCBEZXByZWNhdGVkU3RyaW5nICZyZXN1
bHRFbmNvZGluZykKIHsKICAgICBSZWZQdHI8RG9jdW1lbnQ+IG93bmVyRG9jdW1lbnQgPSBzb3Vy
Y2VOb2RlLT5kb2N1bWVudCgpOwotICAgIFJlZlB0cjxYU0xTdHlsZVNoZWV0PiBjYWNoZWRTdHls
ZXNoZWV0ID0gbV9zdHlsZXNoZWV0OwogICAgIAogICAgIHNldFhTTFRMb2FkQ2FsbEJhY2soZG9j
TG9hZGVyRnVuYywgdGhpcywgb3duZXJEb2N1bWVudC0+ZG9jTG9hZGVyKCkpOwotICAgIHhzbHRT
dHlsZXNoZWV0UHRyIHNoZWV0ID0geHNsdFN0eWxlc2hlZXRQb2ludGVyKGNhY2hlZFN0eWxlc2hl
ZXQsIG1fc3R5bGVzaGVldFJvb3ROb2RlLmdldCgpKTsKKyAgICB4c2x0U3R5bGVzaGVldFB0ciBz
aGVldCA9IHhzbHRTdHlsZXNoZWV0UG9pbnRlcihtX3N0eWxlc2hlZXQsIG1fc3R5bGVzaGVldFJv
b3ROb2RlLmdldCgpKTsKICAgICBpZiAoIXNoZWV0KSB7CiAgICAgICAgIHNldFhTTFRMb2FkQ2Fs
bEJhY2soMCwgMCwgMCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgY2FjaGVk
U3R5bGVzaGVldC0+Y2xlYXJEb2N1bWVudHMoKTsKLSAgICAKLSAgICBpZiAoIW1fc3R5bGVzaGVl
dCkKLSAgICAgICAgbV9zdHlsZXNoZWV0ID0gY2FjaGVkU3R5bGVzaGVldDsKKyAgICBtX3N0eWxl
c2hlZXQtPmNsZWFyRG9jdW1lbnRzKCk7CiAKICAgICB4bWxDaGFyKiBvcmlnTWV0aG9kID0gc2hl
ZXQtPm1ldGhvZDsKICAgICBpZiAoIW9yaWdNZXRob2QgJiYgbWltZVR5cGUgPT0gInRleHQvaHRt
bCIpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>12158</attachid>
            <date>2007-01-02 02:18:23 -0800</date>
            <delta_ts>2007-01-07 03:34:53 -0800</delta_ts>
            <desc>partial fix 2</desc>
            <filename>10313-partial-fix-2.txt</filename>
            <type>text/plain</type>
            <size>8109</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDE4NTE4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMDctMDEtMDIgIExhbWFyIEdvZGRhcmQgIDxs
YW1hcmdvZGRhcmRAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRlc3QgZm9yIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEwMzEzCisgICAgICAgIHhzbDppbXBvcnQgZG9lc24ndCB3b3JrIGluIHN0eWxlc2hl
ZXRzIGxvYWRlZCB2aWEgWE1MSHR0cFJlcXVlc3QKKworICAgICAgICAqIGZhc3QveHNsL3Jlc291
cmNlcy94aHItZG9jLWltcG9ydGVkLnhzbDogQWRkZWQuCisgICAgICAgICogZmFzdC94c2wvcmVz
b3VyY2VzL3hoci1kb2MueG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3hzbC9yZXNvdXJjZXMv
eGhyLWRvYy54c2w6IEFkZGVkLgorICAgICAgICAqIGZhc3QveHNsL3RyYW5zZm9ybS14aHItZG9j
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC94c2wvdHJhbnNmb3JtLXhoci1k
b2MueGh0bWw6IEFkZGVkLgorCiAyMDA3LTAxLTAxICBNaXR6IFBldHRlbCAgPG1pdHpAd2Via2l0
Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbi4KSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QveHNsL3RyYW5zZm9ybS14aHItZG9jLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0teGhyLWRvYy1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0teGhyLWRvYy1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNCBAQAorVGVzdCBmb3IgYnVnIDEwMzEzOiB4c2w6
aW1wb3J0IGRvZXNuJ3Qgd29yayBpbiBzdHlsZXNoZWV0cyBsb2FkZWQgdmlhIFhNTEh0dHBSZXF1
ZXN0LgorCitJdCdzIG5pY2UgdGhhdCB0aGlzIGhhc24ndCBjcmFzaGVkLCBidXQgdGhlIFhTTCB0
cmFuc2Zvcm1hdGlvbiBoYXMgZmFpbGVkLgorCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRU
ZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0teGhyLWRvYy1leHBlY3RlZC50eHQKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpO
YW1lOiBzdm46bWltZS10eXBlCiAgICsgdGV4dC9wbGFpbgpOYW1lOiBzdm46ZW9sLXN0eWxlCiAg
ICsgbmF0aXZlCgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC94c2wvdHJhbnNmb3JtLXhoci1kb2Mu
eGh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC94c2wvdHJhbnNmb3JtLXhoci1k
b2MueGh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0t
eGhyLWRvYy54aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMyBAQAorPD94bWwgdmVyc2lv
bj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzND
Ly9EVEQgWEhUTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMTEvRFREL3ho
dG1sMTEuZHRkIj4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4
bWw6bGFuZz0iZW4iPgorPGhlYWQ+CisgICAgPHRpdGxlPnhzbCBpbXBvcnQgdGVzdDwvdGl0bGU+
CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgICBmdW5jdGlvbiBs
b2FkKCkgeworICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAg
ICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICB2YXIgcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7Cisg
ICAgICAgICAgICB2YXIgeHNsdCA9IG5ldyBYU0xUUHJvY2Vzc29yKCk7CisgICAgICAgICAgICBy
ZXEub3BlbignR0VUJywgJ3Jlc291cmNlcy94aHItZG9jLnhzbCcsIGZhbHNlKTsKKyAgICAgICAg
ICAgIHJlcS5zZW5kKG51bGwpOworICAgICAgICAgICAgeHNsdC5pbXBvcnRTdHlsZXNoZWV0KHJl
cS5yZXNwb25zZVhNTCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJlcS5vcGVuKCdHRVQn
LCAncmVzb3VyY2VzL3hoci1kb2MueG1sJywgZmFsc2UpOworICAgICAgICAgICAgcmVxLnNlbmQo
bnVsbCk7CisgICAgICAgICAgICB2YXIgZG9jID0geHNsdC50cmFuc2Zvcm1Ub0RvY3VtZW50KHJl
cS5yZXNwb25zZVhNTCk7CisgICAgICAgICAgICB2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5pbXBv
cnROb2RlKGRvYy5kb2N1bWVudEVsZW1lbnQsIHRydWUpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RpdicpOworICAgICAgICAg
ICAgZGl2LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGZyYWdtZW50LCBkaXYpOworICAgICAgICB9
CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9ImxvYWQoKSI+Cis8cD5UZXN0
IGZvciA8YSBocmVmPSJodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDMx
MyI+YnVnIDEwMzEzPC9hPjoKK3hzbDppbXBvcnQgZG9lc24ndCB3b3JrIGluIHN0eWxlc2hlZXRz
IGxvYWRlZCB2aWEgWE1MSHR0cFJlcXVlc3QuPC9wPgorCis8ZGl2IGlkPSJkaXYiPkl0J3Mgbmlj
ZSB0aGF0IHRoaXMgaGFzbid0IGNyYXNoZWQsIGJ1dCB0aGUgWFNMIHRyYW5zZm9ybWF0aW9uIGhh
cyBmYWlsZWQuPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBM
YXlvdXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0teGhyLWRvYy54aHRtbApfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5h
bWU6IHN2bjptaW1lLXR5cGUKICAgKyB0ZXh0L3htbAoKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
eHNsL3Jlc291cmNlcy94aHItZG9jLWltcG9ydGVkLnhzbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L3hzbC9yZXNvdXJjZXMveGhyLWRvYy1pbXBvcnRlZC54c2wJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L3hzbC9yZXNvdXJjZXMveGhyLWRvYy1pbXBvcnRlZC54c2wJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rp
bmc9InV0Zi04Ij8+Cis8eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIgorICB4bWxuczp4c2w9
Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKKyAgeG1sbnM9Imh0dHA6Ly93
d3cudzMub3JnLzE5OTkveGh0bWwiPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIvcm9vdCI+Cisg
ICAgPGRpdiBjbGFzcz0iZGVmYXVsdCI+RkFJTDogSW5jb3JyZWN0IHRyYW5zZm9ybWF0aW9uLjwv
ZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0id29ya3MiPgorICAg
IDxkaXYgY2xhc3M9Im92ZXJyaWRkZW4iPlNVQ0NFU1M8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgor
Cis8L3hzbDpzdHlsZXNoZWV0PgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFz
dC94c2wvcmVzb3VyY2VzL3hoci1kb2MtaW1wb3J0ZWQueHNsCl9fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogc3Zu
Om1pbWUtdHlwZQogICArIHRleHQveG1sCgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC94c2wvcmVz
b3VyY2VzL3hoci1kb2MueG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QveHNsL3Jl
c291cmNlcy94aHItZG9jLnhtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QveHNs
L3Jlc291cmNlcy94aHItZG9jLnhtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACis8P3ht
bCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPD94bWwtc3R5bGVzaGVldCB0eXBl
PSJ0ZXh0L3hzbCIgaHJlZj0ieGhyLWRvYy54c2wiPz4KKzxyb290Lz4KClByb3BlcnR5IGNoYW5n
ZXMgb246IExheW91dFRlc3RzL2Zhc3QveHNsL3Jlc291cmNlcy94aHItZG9jLnhtbApfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCk5hbWU6IHN2bjptaW1lLXR5cGUKICAgKyB0ZXh0L3htbAoKSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QveHNsL3Jlc291cmNlcy94aHItZG9jLnhzbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L3hzbC9yZXNvdXJjZXMveGhyLWRvYy54c2wJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L3hzbC9yZXNvdXJjZXMveGhyLWRvYy54c2wJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8eHNsOnN0
eWxlc2hlZXQgdmVyc2lvbj0iMS4wIgorICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5
OTkvWFNML1RyYW5zZm9ybSIKKyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwi
PgorCis8eHNsOmltcG9ydCBocmVmPSJ4aHItZG9jLWltcG9ydGVkLnhzbCIgLz4KKworPHhzbDp0
ZW1wbGF0ZSBtYXRjaD0iL3Jvb3QiPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJ3b3Jr
cyIgLz4KKzwveHNsOnRlbXBsYXRlPgorCis8L3hzbDpzdHlsZXNoZWV0PgoKUHJvcGVydHkgY2hh
bmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC94c2wvcmVzb3VyY2VzL3hoci1kb2MueHNsCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KTmFtZTogc3ZuOm1pbWUtdHlwZQogICArIHRleHQveG1sCgpJbmRleDogV2ViQ29yZS9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NTE4
KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAor
MjAwNy0wMS0wMiAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cDovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzMTMKKyAgICAgICAgeHNsOmltcG9ydCBkb2Vzbid0
IHdvcmsgaW4gc3R5bGVzaGVldHMgbG9hZGVkIHZpYSBYTUxIdHRwUmVxdWVzdAorCisgICAgICAg
IFRoaXMgaXMgYSBwYXJ0aWFsIGZpeCB0aGF0IG1ha2VzIGEgY291cGxlIG1vcmUgc3RlcHMgdG93
YXJkcyBmaXhpbmcgdGhlIHByb2JsZW0uCisKKyAgICAgICAgVGVzdDogZmFzdC94c2wvdHJhbnNm
b3JtLXhoci1kb2MueGh0bWwKKworICAgICAgICAqIHhtbC9YU0xUUHJvY2Vzc29yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnhzbHRTdHlsZXNoZWV0UG9pbnRlcik6IFBhc3MgYW4gVVJMIGZvciB0
aGUgc3R5bGVzaGVldC4gSSdtIG5vdCBzdXJlIHdoeSB0aGlzIGNvbnN0cnVjdG9yIGV2ZW4gbmVl
ZHMgaXQsIAorICAgICAgICBnaXZlbiB0aGF0IGl0IGhhcyBhIE5vZGUsIGJ1dCB0aGlzIGlzIGEg
c21hbGwgbW9kaWZpY2F0aW9ucyB0aGF0IG1ha2VzIFhTTEltcG9ydFJ1bGUgdHJ5IHRvIGxvYWQg
ZnJvbSBhIGNvcnJlY3QgVVJMLgorICAgICAgICAoV2ViQ29yZTo6WFNMVFByb2Nlc3Nvcjo6dHJh
bnNmb3JtVG9TdHJpbmcpOiBGaXggdGhlIGNyYXNoIGZvciByZWFsIHRoaXMgdGltZS4KKwogMjAw
Ny0wMS0wMiAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgcndsYnVpcy4KSW5kZXg6IFdlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuY3BwCShyZXZpc2lvbiAxODQ4MykK
KysrIFdlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTYs
NyArMjU2LDcgQEAgc3RhdGljIGlubGluZSBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gYwogc3Rh
dGljIHhzbHRTdHlsZXNoZWV0UHRyIHhzbHRTdHlsZXNoZWV0UG9pbnRlcihSZWZQdHI8WFNMU3R5
bGVTaGVldD4gJmNhY2hlZFN0eWxlc2hlZXQsIE5vZGUgKnN0eWxlc2hlZXRSb290Tm9kZSkKIHsK
ICAgICBpZiAoIWNhY2hlZFN0eWxlc2hlZXQgJiYgc3R5bGVzaGVldFJvb3ROb2RlKSB7Ci0gICAg
ICAgIGNhY2hlZFN0eWxlc2hlZXQgPSBuZXcgWFNMU3R5bGVTaGVldChzdHlsZXNoZWV0Um9vdE5v
ZGUtPnBhcmVudCgpID8gc3R5bGVzaGVldFJvb3ROb2RlLT5wYXJlbnQoKSA6IHN0eWxlc2hlZXRS
b290Tm9kZSk7CisgICAgICAgIGNhY2hlZFN0eWxlc2hlZXQgPSBuZXcgWFNMU3R5bGVTaGVldChz
dHlsZXNoZWV0Um9vdE5vZGUtPnBhcmVudCgpID8gc3R5bGVzaGVldFJvb3ROb2RlLT5wYXJlbnQo
KSA6IHN0eWxlc2hlZXRSb290Tm9kZSwgc3R5bGVzaGVldFJvb3ROb2RlLT5kb2N1bWVudCgpLT5V
UkwoKSk7CiAgICAgICAgIGNhY2hlZFN0eWxlc2hlZXQtPnBhcnNlU3RyaW5nKGNyZWF0ZU1hcmt1
cChzdHlsZXNoZWV0Um9vdE5vZGUpKTsKICAgICB9CiAgICAgCkBAIC0zMDMsMTggKzMwMywxNCBA
QCBzdGF0aWMgaW5saW5lIERlcHJlY2F0ZWRTdHJpbmcgcmVzdWx0TUlNCiBib29sIFhTTFRQcm9j
ZXNzb3I6OnRyYW5zZm9ybVRvU3RyaW5nKE5vZGUgKnNvdXJjZU5vZGUsIERlcHJlY2F0ZWRTdHJp
bmcgJm1pbWVUeXBlLCBEZXByZWNhdGVkU3RyaW5nICZyZXN1bHRTdHJpbmcsIERlcHJlY2F0ZWRT
dHJpbmcgJnJlc3VsdEVuY29kaW5nKQogewogICAgIFJlZlB0cjxEb2N1bWVudD4gb3duZXJEb2N1
bWVudCA9IHNvdXJjZU5vZGUtPmRvY3VtZW50KCk7Ci0gICAgUmVmUHRyPFhTTFN0eWxlU2hlZXQ+
IGNhY2hlZFN0eWxlc2hlZXQgPSBtX3N0eWxlc2hlZXQ7CiAgICAgCiAgICAgc2V0WFNMVExvYWRD
YWxsQmFjayhkb2NMb2FkZXJGdW5jLCB0aGlzLCBvd25lckRvY3VtZW50LT5kb2NMb2FkZXIoKSk7
Ci0gICAgeHNsdFN0eWxlc2hlZXRQdHIgc2hlZXQgPSB4c2x0U3R5bGVzaGVldFBvaW50ZXIoY2Fj
aGVkU3R5bGVzaGVldCwgbV9zdHlsZXNoZWV0Um9vdE5vZGUuZ2V0KCkpOworICAgIHhzbHRTdHls
ZXNoZWV0UHRyIHNoZWV0ID0geHNsdFN0eWxlc2hlZXRQb2ludGVyKG1fc3R5bGVzaGVldCwgbV9z
dHlsZXNoZWV0Um9vdE5vZGUuZ2V0KCkpOwogICAgIGlmICghc2hlZXQpIHsKICAgICAgICAgc2V0
WFNMVExvYWRDYWxsQmFjaygwLCAwLCAwKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
LSAgICBjYWNoZWRTdHlsZXNoZWV0LT5jbGVhckRvY3VtZW50cygpOwotICAgIAotICAgIGlmICgh
bV9zdHlsZXNoZWV0KQotICAgICAgICBtX3N0eWxlc2hlZXQgPSBjYWNoZWRTdHlsZXNoZWV0Owor
ICAgIG1fc3R5bGVzaGVldC0+Y2xlYXJEb2N1bWVudHMoKTsKIAogICAgIHhtbENoYXIqIG9yaWdN
ZXRob2QgPSBzaGVldC0+bWV0aG9kOwogICAgIGlmICghb3JpZ01ldGhvZCAmJiBtaW1lVHlwZSA9
PSAidGV4dC9odG1sIikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55115</attachid>
            <date>2010-05-05 06:11:20 -0700</date>
            <delta_ts>2010-05-21 07:46:20 -0700</delta_ts>
            <desc>Fix so that frameless documents from XMLHttpRequest can load subresources</desc>
            <filename>xslimport-bug10313.patch</filename>
            <type>text/plain</type>
            <size>8218</size>
            <attacher name="Andreas Wictor">andreas.wictor</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcAppbmRleCA4OWEwMDVlLi40OWQ3OTdlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAKKysrIGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC00MDksNiArNDA5
LDcgQEAgRG9jdW1lbnQ6OkRvY3VtZW50KEZyYW1lKiBmcmFtZSwgYm9vbCBpc1hIVE1MLCBib29s
IGlzSFRNTCkKICAgICBtX2lnbm9yZUF1dG9mb2N1cyA9IGZhbHNlOwogCiAgICAgbV9mcmFtZSA9
IGZyYW1lOworICAgIG1fb3JpZ2luRnJhbWUgPSAwOwogCiAgICAgbV9heE9iamVjdENhY2hlID0g
MDsKICAgICAKQEAgLTU0NSw2ICs1NDYsOSBAQCBEb2N1bWVudDo6fkRvY3VtZW50KCkKICAgICAg
ICAgbV9zdHlsZVNoZWV0cy0+ZG9jdW1lbnREZXN0cm95ZWQoKTsKIAogICAgIG1fd2Vha1JlZmVy
ZW5jZS0+Y2xlYXIoKTsKKworICAgIGlmIChtX29yaWdpbkZyYW1lKQorICAgICAgICBtX29yaWdp
bkZyYW1lLT51bnJlZ2lzdGVyU3ViRG9jdW1lbnQodGhpcyk7CiB9CiAKICNpZiBVU0UoSlNDKQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBiL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmgKaW5kZXggZmY1ZDQzNS4uYzZhODBhYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRG9jdW1l
bnQuaAorKysgYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC00NjAsNiArNDYwLDkgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxl
cigpIGNvbnN0OyAvLyBjYW4gYmUgTlVMTAogI2VuZGlmCiAKKyAgICBGcmFtZSogb3JpZ2luRnJh
bWUoKSBjb25zdCB7IHJldHVybiBtX29yaWdpbkZyYW1lOyB9IC8vIGNhbiBiZSBOVUxMCisgICAg
dm9pZCBzZXRPcmlnaW5GcmFtZShGcmFtZSogZnJhbWUpIHsgbV9vcmlnaW5GcmFtZSA9IGZyYW1l
OyB9CisKICAgICBQYXNzUmVmUHRyPFJhbmdlPiBjcmVhdGVSYW5nZSgpOwogCiAgICAgUGFzc1Jl
ZlB0cjxOb2RlSXRlcmF0b3I+IGNyZWF0ZU5vZGVJdGVyYXRvcihOb2RlKiByb290LCB1bnNpZ25l
ZCB3aGF0VG9TaG93LApAQCAtMTAxOSw2ICsxMDIyLDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1f
ZGlkQ2FsY3VsYXRlU3R5bGVTZWxlY3RvcjsKIAogICAgIEZyYW1lKiBtX2ZyYW1lOworICAgIEZy
YW1lKiBtX29yaWdpbkZyYW1lOwogICAgIE93blB0cjxEb2NMb2FkZXI+IG1fZG9jTG9hZGVyOwog
ICAgIE93blB0cjxUb2tlbml6ZXI+IG1fdG9rZW5pemVyOwogICAgIGJvb2wgbV93ZWxsRm9ybWVk
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNw
cCBiL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAKaW5kZXggZWU5
MjZiMS4uYjY1ZjE3MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRh
YmxlTG9hZGVyLmNwcAorKysgYi9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2Fk
ZXIuY3BwCkBAIC0zMjEsOCArMzIxLDExIEBAIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVy
Ojpsb2FkUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFNlY3VyCiAgICAg
UmVzb3VyY2VFcnJvciBlcnJvcjsKICAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOwogICAg
IHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQg
bG9uZz46Om1heCgpOwotICAgIGlmIChtX2RvY3VtZW50LT5mcmFtZSgpKQotICAgICAgICBpZGVu
dGlmaWVyID0gbV9kb2N1bWVudC0+ZnJhbWUoKS0+bG9hZGVyKCktPmxvYWRSZXNvdXJjZVN5bmNo
cm9ub3VzbHkocmVxdWVzdCwgc3RvcmVkQ3JlZGVudGlhbHMsIGVycm9yLCByZXNwb25zZSwgZGF0
YSk7CisKKyAgICBGcmFtZSogZnJhbWUgPSBtX2RvY3VtZW50LT5mcmFtZSgpID8gbV9kb2N1bWVu
dC0+ZnJhbWUoKSA6IG1fZG9jdW1lbnQtPm9yaWdpbkZyYW1lKCk7CisKKyAgICBpZiAoZnJhbWUp
CisgICAgICAgIGlkZW50aWZpZXIgPSBmcmFtZS0+bG9hZGVyKCktPmxvYWRSZXNvdXJjZVN5bmNo
cm9ub3VzbHkocmVxdWVzdCwgc3RvcmVkQ3JlZGVudGlhbHMsIGVycm9yLCByZXNwb25zZSwgZGF0
YSk7CiAKICAgICAvLyBObyBleGNlcHRpb24gZm9yIGZpbGU6Ly8vIHJlc291cmNlcywgc2VlIDxy
ZGFyOi8vcHJvYmxlbS80OTYyMjk4Pi4KICAgICAvLyBBbHNvLCBpZiB3ZSBoYXZlIGFuIEhUVFAg
cmVzcG9uc2UsIHRoZW4gaXQgd2Fzbid0IGEgbmV0d29yayBlcnJvciBpbiBmYWN0LgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcCBiL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKaW5k
ZXggNTNmZDNiYS4uYWRjZDI1NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAor
KysgYi9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCkBAIC0xOTgsNiArMTk4LDEwIEBAIEZyYW1lOjp+
RnJhbWUoKQogICAgIHNldFZpZXcoMCk7CiAgICAgbG9hZGVyKCktPmNhbmNlbEFuZENsZWFyKCk7
CiAKKyAgICBmb3IgKEhhc2hTZXQ8RG9jdW1lbnQqPjo6aXRlcmF0b3IgaXQgPSBtX3N1YkRvY3Vt
ZW50cy5iZWdpbigpOworICAgICAgICAgaXQgIT0gbV9zdWJEb2N1bWVudHMuZW5kKCk7ICsraXQp
CisgICAgICAgICgqaXQpLT5zZXRPcmlnaW5GcmFtZSgwKTsKKwogICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgbm90IGJlIGRvaW5nIGFsbCB0aGlzIHdvcmsgaW5zaWRlIHRoZSBkZXN0cnVjdG9yCiAK
ICAgICBBU1NFUlQoIW1fbGlmZVN1cHBvcnRUaW1lci5pc0FjdGl2ZSgpKTsKQEAgLTE4ODEsNCAr
MTg4NSwyMCBAQCBTdHJpbmcgRnJhbWU6OmxheWVyVHJlZUFzVGV4dCgpIGNvbnN0CiAjZW5kaWYK
IH0KIAordm9pZCBGcmFtZTo6cmVnaXN0ZXJTdWJEb2N1bWVudChEb2N1bWVudCogZG9jKQorewor
ICAgIGlmIChkb2MpIHsKKyAgICAgICAgZG9jLT5zZXRPcmlnaW5GcmFtZSh0aGlzKTsKKyAgICAg
ICAgbV9zdWJEb2N1bWVudHMuYWRkKGRvYyk7CisgICAgfQorfQorCit2b2lkIEZyYW1lOjp1bnJl
Z2lzdGVyU3ViRG9jdW1lbnQoRG9jdW1lbnQqIGRvYykKK3sKKyAgICBpZiAoZG9jKSB7CisgICAg
ICAgIGRvYy0+c2V0T3JpZ2luRnJhbWUoMCk7CisgICAgICAgIG1fc3ViRG9jdW1lbnRzLnJlbW92
ZShkb2MpOworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wYWdlL0ZyYW1lLmggYi9XZWJDb3JlL3BhZ2UvRnJhbWUuaAppbmRleCA0YTdjZGFm
Li41Nzc4OGE0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRnJhbWUuaAorKysgYi9XZWJDb3Jl
L3BhZ2UvRnJhbWUuaApAQCAtMTI2LDYgKzEyNiw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgCiAgICAgICAgIFN0cmluZyBsYXllclRyZWVBc1RleHQoKSBjb25zdDsKIAorICAgICAg
ICB2b2lkIHJlZ2lzdGVyU3ViRG9jdW1lbnQoRG9jdW1lbnQqIGRvYyk7CisgICAgICAgIHZvaWQg
dW5yZWdpc3RlclN1YkRvY3VtZW50KERvY3VtZW50KiBkb2MpOworCiAgICAgcHJpdmF0ZToKICAg
ICAgICAgdm9pZCBpbmplY3RVc2VyU2NyaXB0c0ZvcldvcmxkKERPTVdyYXBwZXJXb3JsZCosIGNv
bnN0IFVzZXJTY3JpcHRWZWN0b3ImLCBVc2VyU2NyaXB0SW5qZWN0aW9uVGltZSk7CiAKQEAgLTM3
MSw2ICszNzQsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJ
TkdfU1RPUkUpICAgICAgICAKICAgICAgICAgT3duUHRyPFRpbGVkQmFja2luZ1N0b3JlPiBtX3Rp
bGVkQmFja2luZ1N0b3JlOwogI2VuZGlmCisKKyAgICAgICAgSGFzaFNldDxEb2N1bWVudCo+IG1f
c3ViRG9jdW1lbnRzOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcCBiL1dlYkNvcmUveG1sL1hNTEh0dHBS
ZXF1ZXN0LmNwcAppbmRleCBlMzdlMTYyLi5lN2MxY2ZjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3ht
bC9YTUxIdHRwUmVxdWVzdC5jcHAKKysrIGIvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3Bw
CkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiRXZlbnRFeGNlcHRpb24uaCIKICNpbmNsdWRl
ICJFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkZy
YW1lLmgiCiAjaW5jbHVkZSAiSFRUUFBhcnNlcnMuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDb250
cm9sbGVyLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIgpAQCAtMjQxLDcg
KzI0MiwxMCBAQCBEb2N1bWVudCogWE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlWE1MKCkgY29uc3QK
ICAgICAgICAgICAgIG1fcmVzcG9uc2VYTUwgPSAwOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgbV9yZXNwb25zZVhNTCA9IERvY3VtZW50OjpjcmVhdGUoMCk7Ci0gICAgICAgICAgICBt
X3Jlc3BvbnNlWE1MLT5vcGVuKCk7CisgICAgICAgICAgICBpZiAoZG9jdW1lbnQoKS0+ZnJhbWUo
KSkKKyAgICAgICAgICAgICAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5yZWdpc3RlclN1YkRvY3Vt
ZW50KG1fcmVzcG9uc2VYTUwuZ2V0KCkpOworCisgICAgICAgICAgICBtX3Jlc3BvbnNlWE1MLT5v
cGVuKGRvY3VtZW50KCkpOwogICAgICAgICAgICAgbV9yZXNwb25zZVhNTC0+c2V0VVJMKG1fdXJs
KTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBTZXQgTGFzdC1Nb2RpZmllZC4KICAgICAgICAgICAg
IG1fcmVzcG9uc2VYTUwtPndyaXRlKFN0cmluZyhtX3Jlc3BvbnNlVGV4dCkpOwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS94bWwvWFNMSW1wb3J0UnVsZS5jcHAgYi9XZWJDb3JlL3htbC9YU0xJbXBvcnRS
dWxlLmNwcAppbmRleCAwOTA4ZDc1Li4wYmYyYWEyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3htbC9Y
U0xJbXBvcnRSdWxlLmNwcAorKysgYi9XZWJDb3JlL3htbC9YU0xJbXBvcnRSdWxlLmNwcApAQCAt
MjYsNiArMjYsOSBAQAogCiAjaW5jbHVkZSAiQ2FjaGVkWFNMU3R5bGVTaGVldC5oIgogI2luY2x1
ZGUgIkRvY0xvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VF
cnJvci5oIgorI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKICNpbmNsdWRlICJYU0xT
dHlsZVNoZWV0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTk3LDE4ICsxMDAsMzUgQEAg
dm9pZCBYU0xJbXBvcnRSdWxlOjpsb2FkU2hlZXQoKQogICAgICAgICBpZiAocGFyZW50LT5pc1hT
TFN0eWxlU2hlZXQoKSAmJiBhYnNIcmVmID09IHN0YXRpY19jYXN0PFhTTFN0eWxlU2hlZXQqPihw
YXJlbnQpLT5maW5hbFVSTCgpLnN0cmluZygpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICAKLSAgICBtX2NhY2hlZFNoZWV0ID0gZG9jTG9hZGVyLT5yZXF1ZXN0WFNMU3R5bGVTaGVl
dChhYnNIcmVmKTsKLSAgICAKLSAgICBpZiAobV9jYWNoZWRTaGVldCkgewotICAgICAgICBtX2Nh
Y2hlZFNoZWV0LT5hZGRDbGllbnQodGhpcyk7Ci0gICAgICAgIAotICAgICAgICAvLyBJZiB0aGUg
aW1wb3J0ZWQgc2hlZXQgaXMgaW4gdGhlIGNhY2hlLCB0aGVuIHNldFhTTFN0eWxlU2hlZXQgZ2V0
cyBjYWxsZWQsCi0gICAgICAgIC8vIGFuZCB0aGUgc2hlZXQgZXZlbiBnZXRzIHBhcnNlZCAodmlh
IHBhcnNlU3RyaW5nKS4gIEluIHRoaXMgY2FzZSB3ZSBoYXZlCi0gICAgICAgIC8vIGxvYWRlZCAo
ZXZlbiBpZiBvdXIgc3VicmVzb3VyY2VzIGhhdmVuJ3QpLCBzbyBpZiB3ZSBoYXZlIGEgc3R5bGVz
aGVldCBhZnRlcgotICAgICAgICAvLyBjaGVja2luZyB0aGUgY2FjaGUsIHRoZW4gd2UndmUgY2xl
YXJseSBsb2FkZWQuCi0gICAgICAgIGlmICghbV9zdHlsZVNoZWV0KQotICAgICAgICAgICAgbV9s
b2FkaW5nID0gdHJ1ZTsKKworICAgIFJlc291cmNlRXJyb3IgZXJyb3I7CisgICAgUmVzb3VyY2VS
ZXNwb25zZSByZXNwb25zZTsKKyAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKKworICAgIERvY3VtZW50
KiBkb2MgPSBkb2NMb2FkZXItPmRvYygpOworICAgIEZyYW1lKiBmcmFtZSA9IGRvYy0+ZnJhbWUo
KSA/IGRvYy0+ZnJhbWUoKSA6IGRvYy0+b3JpZ2luRnJhbWUoKTsKKworICAgIEtVUkwgdXJsKFBh
cnNlZFVSTFN0cmluZywgYWJzSHJlZik7CisKKyAgICBib29sIHJlcXVlc3RBbGxvd2VkID0gZnJh
bWUgJiYgZG9jLT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHVybCk7CisgICAgaWYgKHJl
cXVlc3RBbGxvd2VkKSB7CisgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+bG9hZFJlc291cmNlU3lu
Y2hyb25vdXNseSh1cmwsIEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsIGVycm9yLCByZXNwb25zZSwg
ZGF0YSk7CisgICAgICAgIHJlcXVlc3RBbGxvd2VkID0gZG9jLT5zZWN1cml0eU9yaWdpbigpLT5j
YW5SZXF1ZXN0KHJlc3BvbnNlLnVybCgpKTsKKyAgICB9CisgICAgaWYgKCFyZXF1ZXN0QWxsb3dl
ZCkgeworICAgICAgICBkYXRhLmNsZWFyKCk7CisgICAgICAgIGRvY0xvYWRlci0+cHJpbnRBY2Nl
c3NEZW5pZWRNZXNzYWdlKHVybCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
ZXJyb3IuaXNOdWxsKCkpIHsKKyAgICAgICAgUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IGRl
Y29kZXIgPSBUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUoInRleHQveHNsIik7CisgICAgICAg
IFN0cmluZyBlbmNvZGluZyA9IHJlc3BvbnNlLnRleHRFbmNvZGluZ05hbWUoKTsKKyAgICAgICAg
aWYgKCFlbmNvZGluZy5pc051bGwoKSkKKyAgICAgICAgICAgIGRlY29kZXItPnNldEVuY29kaW5n
KGVuY29kaW5nLCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpFbmNvZGluZ0Zyb21IVFRQSGVhZGVyKTsK
KworICAgICAgICBTdHJpbmcgc2hlZXQoZGVjb2Rlci0+ZGVjb2RlKGRhdGEuZGF0YSgpLCBkYXRh
LnNpemUoKSkpOworICAgICAgICBzZXRYU0xTdHlsZVNoZWV0KGFic0hyZWYsIHJlc3BvbnNlLnVy
bCgpLCBzaGVldCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3htbC9YU0xUUHJv
Y2Vzc29yTGlieHNsdC5jcHAgYi9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yTGlieHNsdC5jcHAK
aW5kZXggYTBlZDQ1MC4uZmNkMzNhMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS94bWwvWFNMVFByb2Nl
c3NvckxpYnhzbHQuY3BwCisrKyBiL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNw
cApAQCAtMTE3LDEwICsxMTcsMTMgQEAgc3RhdGljIHhtbERvY1B0ciBkb2NMb2FkZXJGdW5jKGNv
bnN0IHhtbENoYXIqIHVyaSwKIAogICAgICAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKIAotICAgICAg
ICBib29sIHJlcXVlc3RBbGxvd2VkID0gZ2xvYmFsRG9jTG9hZGVyLT5mcmFtZSgpICYmIGdsb2Jh
bERvY0xvYWRlci0+ZG9jKCktPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QodXJsKTsKKyAg
ICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZ2xvYmFsRG9jTG9hZGVyLT5kb2MoKTsKKyAgICAg
ICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCkgPyBkb2N1bWVudC0+ZnJhbWUoKSA6
IGRvY3VtZW50LT5vcmlnaW5GcmFtZSgpOworCisgICAgICAgIGJvb2wgcmVxdWVzdEFsbG93ZWQg
PSBmcmFtZSAmJiBkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdCh1cmwpOwog
ICAgICAgICBpZiAocmVxdWVzdEFsbG93ZWQpIHsKLSAgICAgICAgICAgIGdsb2JhbERvY0xvYWRl
ci0+ZnJhbWUoKS0+bG9hZGVyKCktPmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkodXJsLCBBbGxv
d1N0b3JlZENyZWRlbnRpYWxzLCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOwotICAgICAgICAgICAg
cmVxdWVzdEFsbG93ZWQgPSBnbG9iYWxEb2NMb2FkZXItPmRvYygpLT5zZWN1cml0eU9yaWdpbigp
LT5jYW5SZXF1ZXN0KHJlc3BvbnNlLnVybCgpKTsKKyAgICAgICAgICAgIGZyYW1lLT5sb2FkZXIo
KS0+bG9hZFJlc291cmNlU3luY2hyb25vdXNseSh1cmwsIEFsbG93U3RvcmVkQ3JlZGVudGlhbHMs
IGVycm9yLCByZXNwb25zZSwgZGF0YSk7CisgICAgICAgICAgICByZXF1ZXN0QWxsb3dlZCA9IGRv
Y3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHJlc3BvbnNlLnVybCgpKTsKICAg
ICAgICAgfQogICAgICAgICBpZiAoIXJlcXVlc3RBbGxvd2VkKSB7CiAgICAgICAgICAgICBkYXRh
LmNsZWFyKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56707</attachid>
            <date>2010-05-21 07:46:20 -0700</date>
            <delta_ts>2010-06-04 07:15:16 -0700</delta_ts>
            <desc>New proposed patch</desc>
            <filename>bug10313.patch</filename>
            <type>text/plain</type>
            <size>48296</size>
            <attacher name="Andreas Wictor">andreas.wictor</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1OTkwMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsOTQgQEAKKzIwMTAtMDUtMjEgIEFuZHJlYXMgV2ljdG9yICA8YW5kcmVhcy53aWN0
b3JAeGNlcmlvbi5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgeHNsOmltcG9ydCBhbmQgZG9jdW1lbnQoKSBkb24ndCB3b3JrIGluIHN0eWxlc2hl
ZXRzIGxvYWRlZCB2aWEgWE1MSHR0cFJlcXVlc3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzEzCisKKyAgICAgICAgSW50cm9kdWNlZCB0aGUgY29u
Y2VwdCBvZiBhIG9yaWdpbkZyYW1lIHBvaW50ZXIgb24gZnJhbWVsZXNzIGRvY3VtZW50cworICAg
ICAgICBjcmVhdGVkIGJ5IFhNTEh0dHBSZXF1ZXN0LCBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5j
cmVhdGVEb2N1bWVudCgpLAorICAgICAgICBET01QYXJzZXIucGFyc2VGcm9tU3RyaW5nKCkgYW5k
IFhTTFRQcm9jZXNzb3IudHJhbnNmb3JtVG9Eb2N1bWVudCgpLgorICAgICAgICBUaGlzIG1ha2Vz
IGl0IHBvc3NpYmxlIGZvciBmcmFtZWxlc3MgZG9jdW1lbnRzIHRvIGFjY2VzcyBzdWIgcmVzb3Vy
Y2VzLgorCisgICAgICAgIFRlc3RzOiBmYXN0L3hzbC90cmFuc2Zvcm0tZG9jaW1wbC1kb2MueGh0
bWwKKyAgICAgICAgICAgICAgIGZhc3QveHNsL3RyYW5zZm9ybS1kb21wYXJzZXItZG9jLnhodG1s
CisgICAgICAgICAgICAgICBmYXN0L3hzbC90cmFuc2Zvcm0tdHJhbnNmb3JtZWQtZG9jLnhodG1s
CisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNCaW5kaW5nc0FsbEluT25lLmNwcDoKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0RPTUltcGxlbWVudGF0aW9uQ3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpKU0RPTUltcGxlbWVudGF0aW9uOjpjcmVhdGVEb2N1bWVudCk6CisgICAgICAg
IC0gcGFzcyBvcmlnaW5GcmFtZSB0byBET01JbXBsZW1lbnRhdGlvbjo6Y3JlYXRlRG9jdW1lbnQK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVBhcnNlckN1c3RvbS5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SlNET01QYXJzZXI6OnBhcnNlRnJvbVN0cmluZyk6CisgICAgICAgIC0g
cGFzcyBvcmlnaW5GcmFtZSB0byBET01QYXJzZXI6OnBhcnNlRnJvbVN0cmluZworICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3NvckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU1hTTFRQcm9jZXNzb3I6OnRyYW5zZm9ybVRvRG9jdW1lbnQpOgorICAgICAgICAtIHBhc3Mg
b3JpZ2luRnJhbWUgdG8gWFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9Eb2N1bWVudAorICAgICAg
ICAqIGJpbmRpbmdzL29iamMvRE9NSW1wbGVtZW50YXRpb25Gcm9udC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpET01JbXBsZW1lbnRhdGlvbkZyb250OjpjcmVhdGVEb2N1bWVudCk6CisgICAgICAg
ICogYmluZGluZ3Mvb2JqYy9ET01JbXBsZW1lbnRhdGlvbkZyb250Lmg6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4RE9NSW1wbGVtZW50YXRpb25DdXN0b20uY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlY4RE9NSW1wbGVtZW50YXRpb246OmNyZWF0ZURvY3VtZW50Q2FsbGJh
Y2spOgorICAgICAgICAtIHBhc3Mgb3JpZ2luRnJhbWUgdG8gRE9NSW1wbGVtZW50YXRpb246OmNy
ZWF0ZURvY3VtZW50CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NUGFyc2VyQ3Vz
dG9tLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpWOERPTVBhcnNlcjo6cGFyc2VGcm9t
U3RyaW5nQ2FsbGJhY2spOgorICAgICAgICAtIHBhc3Mgb3JpZ2luRnJhbWUgdG8gRE9NUGFyc2Vy
OjpwYXJzZUZyb21TdHJpbmcKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhYU0xUUHJv
Y2Vzc29yQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4WFNMVFByb2Nlc3Nvcjo6dHJh
bnNmb3JtVG9Eb2N1bWVudENhbGxiYWNrKToKKyAgICAgICAgLSBwYXNzIG9yaWdpbkZyYW1lIHRv
IFhTTFRQcm9jZXNzb3I6OnRyYW5zZm9ybVRvRG9jdW1lbnQKKyAgICAgICAgKiBkb20vRE9NSW1w
bGVtZW50YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NSW1wbGVtZW50YXRpb246OmNy
ZWF0ZURvY3VtZW50KToKKyAgICAgICAgLSByZWdpc3RlciBuZXcgZG9jdW1lbnQgYXMgYSBzdWIg
ZG9jdW1lbnQgb24gb3JpZ2luRnJhbWUKKyAgICAgICAgKiBkb20vRE9NSW1wbGVtZW50YXRpb24u
aDoKKyAgICAgICAgKiBkb20vRE9NSW1wbGVtZW50YXRpb24uaWRsOgorICAgICAgICAqIGRvbS9E
b2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6RG9jdW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6On5Eb2N1bWVudCk6CisgICAgICAgIC0gdW5yZWdpc3Rl
ciB0aGlzIGRvY3VtZW50IGZyb20gb3JpZ2luRnJhbWUgaWYgbmVjZXNzYXJ5CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudDo6c2V0T3JpZ2luRnJhbWUpOgorICAgICAgICAtIHNldCBvcmlnaW5G
cmFtZSBmb3IgdGhpcyBkb2N1bWVudCBhbmQgY29weSBjb29raWVVUkwKKyAgICAgICAgICBhbmQg
c2VjdXJpdHlPcmlnaW4gZnJvbSB0aGUgZnJhbWUncyBtYWluIGRvY3VtZW50CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudDo6YXBwbHlYU0xUcmFuc2Zvcm0pOgorICAgICAgICAqIGRvbS9Eb2N1
bWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Om9yaWdpbkZyYW1lKToKKyAgICAg
ICAgKiBsb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlcXVlc3QpOgorICAgICAgICAtIHVz
ZSBvcmlnaW5GcmFtZSBpZiBuZWNlc3NhcnkKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lOjp+RnJhbWUpOgorICAgICAgICAtIHJlc2V0IG9yaWdpbkZy
YW1lIGZvciBhbGwgcmVnaXN0ZXJlZCBzdWIgZG9jdW1lbnRzCisgICAgICAgIChXZWJDb3JlOjpG
cmFtZTo6cmVnaXN0ZXJTdWJEb2N1bWVudCk6CisJLSByZWdpc3RlciBhIHN1YiBkb2N1bWVudCBh
bmQgc2V0IHRoaXMgZnJhbWUgYXMgb3JpZ2luRnJhbWUgb24gdGhlIGRvY3VtZW50CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZTo6dW5yZWdpc3RlclN1YkRvY3VtZW50KToKKwktIHVucmVnaXN0ZXIg
YSBzdWIgZG9jdW1lbnQgYW5kIHJlc2V0IHRoZSBvcmlnaW5GcmFtZSBvbiB0aGUgZG9jdW1lbnQK
KyAgICAgICAgKiBwYWdlL0ZyYW1lLmg6CisgICAgICAgICogeG1sL0RPTVBhcnNlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpET01QYXJzZXI6OnBhcnNlRnJvbVN0cmluZyk6CisgICAgICAgIC0g
cmVnaXN0ZXIgbmV3IGRvY3VtZW50IGFzIGEgc3ViIGRvY3VtZW50IG9uIG9yaWdpbkZyYW1lCisg
ICAgICAgICogeG1sL0RPTVBhcnNlci5oOgorICAgICAgICAqIHhtbC9ET01QYXJzZXIuaWRsOgor
ICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxI
dHRwUmVxdWVzdDo6cmVzcG9uc2VYTUwpOgorICAgICAgICAqIHhtbC9YU0xJbXBvcnRSdWxlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlhTTEltcG9ydFJ1bGU6OmxvYWRTaGVldCk6CisgICAgICAg
IC0gbG9hZCBpbXBvcnRlZCBkb2N1bWVudHMgc3luY2hyb25vdXNseSBpZiBpbnZva2VkIGJ5IGph
dmFzY3JpcHQKKyAgICAgICAgICBhbmQgdXNlIGJhc2UgVVJMIGZyb20gb3JpZ2luRnJhbWUncyBk
b2N1bWVudCB3aGVuIHBhcmVudCBzdHlsZXNoZWV0CisgICAgICAgICAgZG9uJ3QgaGF2ZSBhbiBV
UkwKKyAgICAgICAgKFdlYkNvcmU6OlhTTEltcG9ydFJ1bGU6OmxvYWRTaGVldEFzeW5jKToKKyAg
ICAgICAgKFdlYkNvcmU6OlhTTEltcG9ydFJ1bGU6OmxvYWRTaGVldFN5bmMpOgorICAgICAgICAq
IHhtbC9YU0xJbXBvcnRSdWxlLmg6CisgICAgICAgICogeG1sL1hTTFRQcm9jZXNzb3IuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6WFNMVFByb2Nlc3Nvcjo6Y3JlYXRlRG9jdW1lbnRGcm9tU291cmNl
KToKKyAgICAgICAgLSByZWdpc3RlciBuZXcgZG9jdW1lbnQgYXMgYSBzdWIgZG9jdW1lbnQgb24g
b3JpZ2luRnJhbWUKKyAgICAgICAgICBpZiB0aGVyZSBpcyBubyBmcmFtZSBwb2ludGVyCisgICAg
ICAgIChXZWJDb3JlOjpYU0xUUHJvY2Vzc29yOjp0cmFuc2Zvcm1Ub0RvY3VtZW50KToKKyAgICAg
ICAgKiB4bWwvWFNMVFByb2Nlc3Nvci5oOgorICAgICAgICAqIHhtbC9YU0xUUHJvY2Vzc29yTGli
eHNsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkb2NMb2FkZXJGdW5jKToKKyAgICAgICAgLSB1
c2Ugb3JpZ2luRnJhbWUgaWYgbmVjZXNzYXJ5CisKIDIwMTAtMDUtMjAgIEFkYW0gUm9iZW4gIDxh
cm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFN0b3AgbGVha2luZyBhbGwgQ0FDRkNvbnRleHRz
CkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05V
bWFrZWZpbGUuYW0JKHJldmlzaW9uIDU5OTAwKQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQko
d29ya2luZyBjb3B5KQpAQCAtNDE1LDYgKzQxNSw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJ
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUZvcm1EYXRhQ3VzdG9tLmNwcCBcCiAJV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMv
SlNET01HbG9iYWxPYmplY3QuaCBcCisJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUltcGxlbWVu
dGF0aW9uQ3VzdG9tLmNwcCBcCisJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVBhcnNlckN1c3Rv
bS5jcHAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcCBcCiAJV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDU5OTAwKQorKysgV2Vi
Q29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTczMyw2ICs3MzMsOCBAQAogICAg
ICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERlZGljYXRlZFdvcmtlckNvbnRleHRDdXN0
b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhEb2N1bWVudExvY2F0
aW9uQ3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NRm9y
bURhdGFDdXN0b20uY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhET01J
bXBsZW1lbnRhdGlvbkN1c3RvbS5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOERPTVBhcnNlckN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOERPTVdpbmRvd0N1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOERvY3VtZW50Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9t
L1Y4RWxlbWVudEN1c3RvbS5jcHAnLApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0JpbmRp
bmdzQWxsSW5PbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNCaW5k
aW5nc0FsbEluT25lLmNwcAkocmV2aXNpb24gNTk5MDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQmluZGluZ3NBbGxJbk9uZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDggQEAK
ICNpbmNsdWRlICJKU0RPTUFwcGxpY2F0aW9uQ2FjaGVDdXN0b20uY3BwIgogI2luY2x1ZGUgIkpT
RE9NQmluZGluZy5jcHAiCiAjaW5jbHVkZSAiSlNET01HbG9iYWxPYmplY3QuY3BwIgorI2luY2x1
ZGUgIkpTRE9NSW1wbGVtZW5hdGlvbkN1c3RvbS5jcHAiCisjaW5jbHVkZSAiSlNET01QYXJzZXJD
dXN0b20uY3BwIgogI2luY2x1ZGUgIkpTRE9NV2luZG93QmFzZS5jcHAiCiAjaW5jbHVkZSAiSlNE
T01XaW5kb3dDdXN0b20uY3BwIgogI2luY2x1ZGUgIkpTRE9NV2luZG93U2hlbGwuY3BwIgpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUltcGxlbWVudGF0aW9uQ3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NSW1wbGVtZW50YXRpb25DdXN0b20u
Y3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUltcGxlbWVudGF0
aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqICBDb3B5
cmlnaHQgKEMpIDIwMTAgWGNlcmlvbiBBQi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5k
YXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjEx
MS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNET01J
bXBsZW1lbnRhdGlvbi5oIgorCisjaW5jbHVkZSAiRE9NSW1wbGVtZW50YXRpb24uaCIKKyNpbmNs
dWRlICJKU0RvY3VtZW50LmgiCisjaW5jbHVkZSAiSlNEb2N1bWVudFR5cGUuaCIKKwordXNpbmcg
bmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitKU1ZhbHVlIEpTRE9NSW1w
bGVtZW50YXRpb246OmNyZWF0ZURvY3VtZW50KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlz
dCYgYXJncykKK3sKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBjb25zdCBTdHJpbmcm
IG5hbWVzcGFjZVVSSSA9IHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMsIGFyZ3MuYXQo
MCkpOworICAgIGNvbnN0IFN0cmluZyYgcXVhbGlmaWVkTmFtZSA9IHZhbHVlVG9TdHJpbmdXaXRo
TnVsbENoZWNrKGV4ZWMsIGFyZ3MuYXQoMSkpOworICAgIERvY3VtZW50VHlwZSogZG9jdHlwZSA9
IHRvRG9jdW1lbnRUeXBlKGFyZ3MuYXQoMikpOworCisgICAgRnJhbWUqIG9yaWdpbkZyYW1lID0g
MDsKKyAgICBpZiAoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0RvY3VtZW50KCkpIHsKKyAg
ICAgICAgRG9jdW1lbnQqIGRvYyA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpKTsKKyAgICAgICAgb3JpZ2luRnJhbWUgPSBkb2MtPmZyYW1lKCk7CisgICAg
fQorCisgICAgUmVmUHRyPERvY3VtZW50PiByZXN1bHREb2N1bWVudCA9IGltcGwoKS0+Y3JlYXRl
RG9jdW1lbnQobmFtZXNwYWNlVVJJLCBxdWFsaWZpZWROYW1lLCBkb2N0eXBlLCBvcmlnaW5GcmFt
ZSwgZWMpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwg
cmVzdWx0RG9jdW1lbnQuZ2V0KCkpOworICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTVBhcnNlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTVBhcnNlckN1c3RvbS5jcHAJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUGFyc2VyQ3VzdG9tLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw0NCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgWGNlcmlvbiBBQi4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwg
U3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSlNET01QYXJzZXIuaCIKKworI2luY2x1ZGUgIkRPTVBhcnNl
ci5oIgorI2luY2x1ZGUgIkpTRG9jdW1lbnQuaCIKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitKU1ZhbHVlIEpTRE9NUGFyc2VyOjpwYXJzZUZyb21TdHJp
bmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQoreworICAgIGNvbnN0IFN0
cmluZyYgc3RyID0gdXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpOwor
ICAgIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUgPSB1c3RyaW5nVG9TdHJpbmcoYXJncy5hdCgx
KS50b1N0cmluZyhleGVjKSk7CisKKyAgICBGcmFtZSogb3JpZ2luRnJhbWUgPSAwOworICAgIGlm
IChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzRG9jdW1lbnQoKSkgeworICAgICAgICBEb2N1
bWVudCogZG9jID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihzY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkpOworICAgICAgICBvcmlnaW5GcmFtZSA9IGRvYy0+ZnJhbWUoKTsKKyAgICB9CisKKyAgICBS
ZWZQdHI8RG9jdW1lbnQ+IHJlc3VsdERvY3VtZW50ID0gaW1wbCgpLT5wYXJzZUZyb21TdHJpbmco
c3RyLCBjb250ZW50VHlwZSwgb3JpZ2luRnJhbWUpOworICAgIHJldHVybiB0b0pTKGV4ZWMsIGds
b2JhbE9iamVjdCgpLCByZXN1bHREb2N1bWVudC5nZXQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yQ3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3NvckN1
c3RvbS5jcHAJKHJldmlzaW9uIDU5OTAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hTTFRQ
cm9jZXNzb3JDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3NiwxNCBAQCBKU1Zh
bHVlIEpTWFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9Eb2N1CiAgICAgSlNWYWx1ZSBub2RlVmFs
ID0gYXJncy5hdCgwKTsKICAgICBpZiAobm9kZVZhbC5pbmhlcml0cygmSlNOb2RlOjpzX2luZm8p
KSB7CiAgICAgICAgIEpTTm9kZSogbm9kZSA9IHN0YXRpY19jYXN0PEpTTm9kZSo+KGFzT2JqZWN0
KG5vZGVWYWwpKTsKLSAgICAgICAgUmVmUHRyPERvY3VtZW50PiByZXN1bHREb2N1bWVudCA9IGlt
cGwoKS0+dHJhbnNmb3JtVG9Eb2N1bWVudChub2RlLT5pbXBsKCkpOworCisgICAgICAgIEZyYW1l
KiBvcmlnaW5GcmFtZSA9IDA7CisgICAgICAgIGlmIChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkt
PmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgRG9jdW1lbnQqIGRvYyA9IHN0YXRpY19jYXN0
PERvY3VtZW50Kj4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAgICAgICAgICAgIG9yaWdp
bkZyYW1lID0gZG9jLT5mcmFtZSgpOworICAgICAgICB9CisKKyAgICAgICAgUmVmUHRyPERvY3Vt
ZW50PiByZXN1bHREb2N1bWVudCA9IGltcGwoKS0+dHJhbnNmb3JtVG9Eb2N1bWVudChub2RlLT5p
bXBsKCksIG9yaWdpbkZyYW1lKTsKICAgICAgICAgaWYgKHJlc3VsdERvY3VtZW50KQogICAgICAg
ICAgICAgcmV0dXJuIHRvSlMoZXhlYywgcmVzdWx0RG9jdW1lbnQuZ2V0KCkpOwogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01JbXBs
ZW1lbnRhdGlvbkZyb250LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL29iamMv
RE9NSW1wbGVtZW50YXRpb25Gcm9udC5jcHAJKHJldmlzaW9uIDU5OTAwKQorKysgV2ViQ29yZS9i
aW5kaW5ncy9vYmpjL0RPTUltcGxlbWVudGF0aW9uRnJvbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02NCw2ICs2NCwxMSBAQCBQYXNzUmVmUHRyPERvY3VtZW50PiBET01JbXBsZW1lbnRhdGlvbkZy
CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8RE9NSW1wbGVtZW50YXRpb24qPih0aGlzKS0+
Y3JlYXRlRG9jdW1lbnQobmFtZXNwYWNlVVJJLCBxdWFsaWZpZWROYW1lLCB0eXBlLCBlYyk7CiB9
CiAKK1Bhc3NSZWZQdHI8RG9jdW1lbnQ+IERPTUltcGxlbWVudGF0aW9uRnJvbnQ6OmNyZWF0ZURv
Y3VtZW50KGNvbnN0IFN0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBTdHJpbmcmIHF1YWxpZmll
ZE5hbWUsIERvY3VtZW50VHlwZSogdHlwZSwgRnJhbWUqIG9yaWdpbkZyYW1lLCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxET01JbXBsZW1lbnRhdGlv
bio+KHRoaXMpLT5jcmVhdGVEb2N1bWVudChuYW1lc3BhY2VVUkksIHF1YWxpZmllZE5hbWUsIHR5
cGUsIG9yaWdpbkZyYW1lLCBlYyk7Cit9CisKIERPTUltcGxlbWVudGF0aW9uRnJvbnQqIERPTUlt
cGxlbWVudGF0aW9uRnJvbnQ6OmdldEludGVyZmFjZShjb25zdCBTdHJpbmcmIGZlYXR1cmUpCiB7
CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8RE9NSW1wbGVtZW50YXRpb25Gcm9udCo+KHJl
aW50ZXJwcmV0X2Nhc3Q8RE9NSW1wbGVtZW50YXRpb24qPih0aGlzKS0+Z2V0SW50ZXJmYWNlKGZl
YXR1cmUpKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01JbXBsZW1lbnRhdGlvbkZy
b250LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTUltcGxlbWVudGF0
aW9uRnJvbnQuaAkocmV2aXNpb24gNTk5MDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL29iamMvRE9N
SW1wbGVtZW50YXRpb25Gcm9udC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIHB1
YmxpYzoKICAgICBib29sIGhhc0ZlYXR1cmUoY29uc3QgU3RyaW5nJiBmZWF0dXJlLCBjb25zdCBT
dHJpbmcmIHZlcnNpb24pIGNvbnN0OwogICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRUeXBlPiBjcmVh
dGVEb2N1bWVudFR5cGUoY29uc3QgU3RyaW5nJiBxdWFsaWZpZWROYW1lLCBjb25zdCBTdHJpbmcm
IHB1YmxpY0lkLCBjb25zdCBTdHJpbmcmIHN5c3RlbUlkLCBFeGNlcHRpb25Db2RlJik7CiAgICAg
UGFzc1JlZlB0cjxEb2N1bWVudD4gY3JlYXRlRG9jdW1lbnQoY29uc3QgU3RyaW5nJiBuYW1lc3Bh
Y2VVUkksIGNvbnN0IFN0cmluZyYgcXVhbGlmaWVkTmFtZSwgRG9jdW1lbnRUeXBlKiwgRXhjZXB0
aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IGNyZWF0ZURvY3VtZW50KGNvbnN0
IFN0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBTdHJpbmcmIHF1YWxpZmllZE5hbWUsIERvY3Vt
ZW50VHlwZSosIEZyYW1lKiBvcmlnaW5GcmFtZSwgRXhjZXB0aW9uQ29kZSYpOwogICAgIERPTUlt
cGxlbWVudGF0aW9uRnJvbnQqIGdldEludGVyZmFjZShjb25zdCBTdHJpbmcmIGZlYXR1cmUpOwog
ICAgIFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4gY3JlYXRlQ1NTU3R5bGVTaGVldChjb25zdCBT
dHJpbmcmIHRpdGxlLCBjb25zdCBTdHJpbmcmIG1lZGlhLCBFeGNlcHRpb25Db2RlJik7CiAgICAg
UGFzc1JlZlB0cjxIVE1MRG9jdW1lbnQ+IGNyZWF0ZUhUTUxEb2N1bWVudChjb25zdCBTdHJpbmcm
IHRpdGxlKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NSW1wbGVtZW50
YXRpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4RE9NSW1wbGVtZW50YXRpb25DdXN0b20uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhET01JbXBsZW1lbnRhdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIFhjZXJpb24g
QUIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUg
UGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlY4RE9NSW1wbGVtZW50YXRpb24uaCIKKworI2lu
Y2x1ZGUgIkRPTUltcGxlbWVudGF0aW9uLmgiCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5j
bHVkZSAiVjhEb2N1bWVudC5oIgorI2luY2x1ZGUgIlY4RG9jdW1lbnRUeXBlLmgiCisjaW5jbHVk
ZSAiVjhQcm94eS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Y4OjpIYW5kbGU8djg6OlZh
bHVlPiBWOERPTUltcGxlbWVudGF0aW9uOjpjcmVhdGVEb2N1bWVudENhbGxiYWNrKGNvbnN0IHY4
OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgRE9NSW1wbGVtZW50YXRpb24qIGltcCA9IFY4RE9N
SW1wbGVtZW50YXRpb246OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOworCisgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7CisgICAgVjhQYXJhbWV0ZXI8V2l0aE51bGxDaGVjaz4gbmFtZXNwYWNlVVJJ
ID0gYXJnc1swXTsKKyAgICBWOFBhcmFtZXRlcjxXaXRoTnVsbENoZWNrPiBxdWFsaWZpZWROYW1l
ID0gYXJnc1sxXTsKKyAgICBEb2N1bWVudFR5cGUqIGRvY3R5cGUgPSBWOERvY3VtZW50VHlwZTo6
SGFzSW5zdGFuY2UoYXJnc1syXSkgPyBWOERvY3VtZW50VHlwZTo6dG9OYXRpdmUodjg6OkhhbmRs
ZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzJdKSkgOiAwOworCisgICAgRnJhbWUqIG9yaWdpbkZy
YW1lID0gMDsKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gZ2V0U2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGlmIChjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAg
ICAgICAgRG9jdW1lbnQqIGRvYyA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4dCk7Cisg
ICAgICAgIG9yaWdpbkZyYW1lID0gZG9jLT5mcmFtZSgpOworICAgIH0KKworICAgIFJlZlB0cjxE
b2N1bWVudD4gcmVzdWx0ID0gaW1wLT5jcmVhdGVEb2N1bWVudChuYW1lc3BhY2VVUkksIHF1YWxp
ZmllZE5hbWUsIGRvY3R5cGUsIG9yaWdpbkZyYW1lLCBlYyk7CisKKyAgICBpZiAoZWMpIHsKKyAg
ICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKGVjKTsKKyAgICAgICAgcmV0dXJuIHY4OjpI
YW5kbGU8djg6OlZhbHVlPigpOworICAgIH0KKworICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxl
YXNlKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOERPTVBhcnNlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01QYXJzZXJDdXN0b20uY3BwCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01QYXJzZXJDdXN0b20uY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMCBYY2Vy
aW9uIEFCLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3Qs
IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVt
cGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWOERPTVBhcnNlci5oIgorCisjaW5jbHVk
ZSAiRE9NUGFyc2VyLmgiCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhEb2N1
bWVudC5oIgorI2luY2x1ZGUgIlY4UHJveHkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhET01QYXJzZXI6OnBhcnNlRnJvbVN0cmluZ0NhbGxiYWNr
KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgSU5DX1NUQVRTKCJET00uRE9NUGFy
c2VyLnBhcnNlRnJvbVN0cmluZyIpOworICAgIERPTVBhcnNlciogaW1wID0gVjhET01QYXJzZXI6
OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOworICAgIFY4UGFyYW1ldGVyPD4gc3RyID0gYXJnc1sw
XTsKKyAgICBWOFBhcmFtZXRlcjw+IGNvbnRlbnRUeXBlID0gYXJnc1sxXTsKKworICAgIEZyYW1l
KiBvcmlnaW5GcmFtZSA9IDA7CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9
IGdldFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBpZiAoY29udGV4dC0+aXNEb2N1bWVu
dCgpKSB7CisgICAgICAgIERvY3VtZW50KiBkb2MgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNv
bnRleHQpOworICAgICAgICBvcmlnaW5GcmFtZSA9IGRvYy0+ZnJhbWUoKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gdG9WOChpbXAtPnBhcnNlRnJvbVN0cmluZyhzdHIsIGNvbnRlbnRUeXBlLCBvcmln
aW5GcmFtZSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFhTTFRQcm9jZXNzb3JDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WFNMVFByb2Nlc3NvckN1c3RvbS5jcHAJKHJl
dmlzaW9uIDU5OTAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYU0xUUHJvY2Vz
c29yQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUsMTQgQEAgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IFY4WFNMVFByb2Nlc3Nvcjo6dAogICAgIGlmICghc291cmNlKQogICAgICAg
ICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCi0gICAgUmVmUHRyPERvY3VtZW50PiByZXN1bHQg
PSBpbXAtPnRyYW5zZm9ybVRvRG9jdW1lbnQoc291cmNlKTsKKyAgICBGcmFtZSogb3JpZ2luRnJh
bWUgPSAwOworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBnZXRTY3JpcHRF
eGVjdXRpb25Db250ZXh0KCk7CisgICAgaWYgKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAg
ICAgICBEb2N1bWVudCogZG9jID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihjb250ZXh0KTsKKyAg
ICAgICAgb3JpZ2luRnJhbWUgPSBkb2MtPmZyYW1lKCk7CisgICAgfQorCisgICAgUmVmUHRyPERv
Y3VtZW50PiByZXN1bHQgPSBpbXAtPnRyYW5zZm9ybVRvRG9jdW1lbnQoc291cmNlLCBvcmlnaW5G
cmFtZSk7CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7
CiAKSW5kZXg6IFdlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAJKHJldmlzaW9uIDU5OTAwKQorKysg
V2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjQs
NiArMjI0LDEyIEBAIERPTUltcGxlbWVudGF0aW9uKiBET01JbXBsZW1lbnRhdGlvbjo6Z2UKIFBh
c3NSZWZQdHI8RG9jdW1lbnQ+IERPTUltcGxlbWVudGF0aW9uOjpjcmVhdGVEb2N1bWVudChjb25z
dCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwKICAgICBjb25zdCBTdHJpbmcmIHF1YWxpZmllZE5hbWUs
IERvY3VtZW50VHlwZSogZG9jdHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CisgICAgcmV0dXJu
IGNyZWF0ZURvY3VtZW50KG5hbWVzcGFjZVVSSSwgcXVhbGlmaWVkTmFtZSwgZG9jdHlwZSwgMCwg
ZWMpOworfQorCitQYXNzUmVmUHRyPERvY3VtZW50PiBET01JbXBsZW1lbnRhdGlvbjo6Y3JlYXRl
RG9jdW1lbnQoY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkksCisgICAgY29uc3QgU3RyaW5nJiBx
dWFsaWZpZWROYW1lLCBEb2N1bWVudFR5cGUqIGRvY3R5cGUsIEZyYW1lKiBvcmlnaW5GcmFtZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CiAgICAgUmVmUHRyPERvY3VtZW50PiBkb2M7CiAjaWYgRU5B
QkxFKFNWRykKICAgICBpZiAobmFtZXNwYWNlVVJJID09IFNWR05hbWVzOjpzdmdOYW1lc3BhY2VV
UkkpCkBAIC0yNTYsNiArMjYyLDkgQEAgUGFzc1JlZlB0cjxEb2N1bWVudD4gRE9NSW1wbGVtZW50
YXRpb246OgogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKKyAgICBpZiAob3JpZ2luRnJhbWUp
CisgICAgICAgIG9yaWdpbkZyYW1lLT5yZWdpc3RlclN1YkRvY3VtZW50KGRvYy5nZXQoKSk7CisK
ICAgICBpZiAoZG9jdHlwZSkKICAgICAgICAgZG9jLT5hZGRDaGlsZChkb2N0eXBlKTsKICAgICBp
ZiAoZG9jdW1lbnRFbGVtZW50KQpJbmRleDogV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5oCShyZXZpc2lv
biA1OTkwMCkKKysrIFdlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDYgKzQ2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGhhc0ZlYXR1cmUo
Y29uc3QgU3RyaW5nJiBmZWF0dXJlLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pOwogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPERvY3VtZW50VHlwZT4gY3JlYXRlRG9jdW1lbnRUeXBlKGNvbnN0IFN0cmlu
ZyYgcXVhbGlmaWVkTmFtZSwgY29uc3QgU3RyaW5nJiBwdWJsaWNJZCwgY29uc3QgU3RyaW5nICZz
eXN0ZW1JZCwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPERvY3VtZW50
PiBjcmVhdGVEb2N1bWVudChjb25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3RyaW5n
JiBxdWFsaWZpZWROYW1lLCBEb2N1bWVudFR5cGUqLCBFeGNlcHRpb25Db2RlJik7CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IGNyZWF0ZURvY3VtZW50KGNvbnN0IFN0cmluZyYgbmFt
ZXNwYWNlVVJJLCBjb25zdCBTdHJpbmcmIHF1YWxpZmllZE5hbWUsIERvY3VtZW50VHlwZSosIEZy
YW1lKiBvcmlnaW5GcmFtZSwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgRE9NSW1wbGVtZW50YXRp
b24qIGdldEludGVyZmFjZShjb25zdCBTdHJpbmcmIGZlYXR1cmUpOwogCkluZGV4OiBXZWJDb3Jl
L2RvbS9ET01JbXBsZW1lbnRhdGlvbi5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRE9N
SW1wbGVtZW50YXRpb24uaWRsCShyZXZpc2lvbiA1OTkwMCkKKysrIFdlYkNvcmUvZG9tL0RPTUlt
cGxlbWVudGF0aW9uLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMzMsOSArMzMsOSBAQCBtb2R1bGUg
Y29yZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW4gW0NvbnZlcnRVbmRlZmluZWRPck51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyBw
dWJsaWNJZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbiBbQ29udmVydFVuZGVmaW5lZE9yTnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5n
IHN5c3RlbUlkKQogICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7Ci0gICAgICAgIFtP
bGRTdHlsZU9iakNdIERvY3VtZW50IGNyZWF0ZURvY3VtZW50KGluIFtDb252ZXJ0TnVsbFRvTnVs
bFN0cmluZ10gRE9NU3RyaW5nIG5hbWVzcGFjZVVSSSwgCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9N
U3RyaW5nIHF1YWxpZmllZE5hbWUsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbiBbQ29udmVydE51bGxUb051bGxTdHJpbmddIERvY3VtZW50VHlwZSBk
b2N0eXBlKQorICAgICAgICBbQ3VzdG9tLCBPbGRTdHlsZU9iakNdIERvY3VtZW50IGNyZWF0ZURv
Y3VtZW50KGluIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIG5hbWVzcGFjZVVS
SSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbiBbQ29udmVydE51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyBxdWFsaWZpZWROYW1lLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
IFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRG9jdW1lbnRUeXBlIGRvY3R5cGUpCiAgICAgICAg
ICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKIAogICAgICAgICAvLyBET01JbXBsZW1lbnRhdGlv
bkNTUyBpbnRlcmZhY2UgZnJvbSBET00gTGV2ZWwgMiBDU1MKSW5kZXg6IFdlYkNvcmUvZG9tL0Rv
Y3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlz
aW9uIDU5OTAwKQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MTAsNiArNDEwLDcgQEAgRG9jdW1lbnQ6OkRvY3VtZW50KEZyYW1lKiBmcmFtZSwgYm9vbCBp
cwogICAgIG1faWdub3JlQXV0b2ZvY3VzID0gZmFsc2U7CiAKICAgICBtX2ZyYW1lID0gZnJhbWU7
CisgICAgbV9vcmlnaW5GcmFtZSA9IDA7CiAKICAgICBtX2F4T2JqZWN0Q2FjaGUgPSAwOwogICAg
IApAQCAtNTQ2LDYgKzU0Nyw5IEBAIERvY3VtZW50Ojp+RG9jdW1lbnQoKQogICAgICAgICBtX3N0
eWxlU2hlZXRzLT5kb2N1bWVudERlc3Ryb3llZCgpOwogCiAgICAgbV93ZWFrUmVmZXJlbmNlLT5j
bGVhcigpOworCisgICAgaWYgKG1fb3JpZ2luRnJhbWUpCisgICAgICAgIG1fb3JpZ2luRnJhbWUt
PnVucmVnaXN0ZXJTdWJEb2N1bWVudCh0aGlzKTsKIH0KIAogI2lmIFVTRShKU0MpCkBAIC0xMjcx
LDYgKzEyNzUsMTggQEAgU2V0dGluZ3MqIERvY3VtZW50OjpzZXR0aW5ncygpIGNvbnN0CiAgICAg
cmV0dXJuIG1fZnJhbWUgPyBtX2ZyYW1lLT5zZXR0aW5ncygpIDogMDsKIH0KIAordm9pZCBEb2N1
bWVudDo6c2V0T3JpZ2luRnJhbWUoRnJhbWUqIGZyYW1lKQoreworICAgIG1fb3JpZ2luRnJhbWUg
PSBmcmFtZTsKKyAgICBpZiAobV9vcmlnaW5GcmFtZSkgeworICAgICAgICBEb2N1bWVudCogZG9j
ID0gbV9vcmlnaW5GcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICAgICAgaWYgKGRvYykgeworICAgICAg
ICAgICAgbV9jb29raWVVUkwgPSBkb2MtPmNvb2tpZVVSTCgpOworICAgICAgICAgICAgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dDo6c2V0U2VjdXJpdHlPcmlnaW4oZG9jLT5zZWN1cml0eU9yaWdpbigp
KTsKKyAgICAgICAgfQorICAgIH0KK30KKwogUGFzc1JlZlB0cjxSYW5nZT4gRG9jdW1lbnQ6OmNy
ZWF0ZVJhbmdlKCkKIHsKICAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZSh0aGlzKTsKQEAgLTQxNjIs
NyArNDE3OCw3IEBAIHZvaWQgRG9jdW1lbnQ6OmFwcGx5WFNMVHJhbnNmb3JtKFByb2Nlc3MKICAg
ICBpZiAoIXByb2Nlc3Nvci0+dHJhbnNmb3JtVG9TdHJpbmcodGhpcywgcmVzdWx0TUlNRVR5cGUs
IG5ld1NvdXJjZSwgcmVzdWx0RW5jb2RpbmcpKQogICAgICAgICByZXR1cm47CiAgICAgLy8gRklY
TUU6IElmIHRoZSB0cmFuc2Zvcm0gZmFpbGVkIHdlIHNob3VsZCBwcm9iYWJseSByZXBvcnQgYW4g
ZXJyb3IgKGxpa2UgTW96aWxsYSBkb2VzKS4KLSAgICBwcm9jZXNzb3ItPmNyZWF0ZURvY3VtZW50
RnJvbVNvdXJjZShuZXdTb3VyY2UsIHJlc3VsdEVuY29kaW5nLCByZXN1bHRNSU1FVHlwZSwgdGhp
cywgZnJhbWUoKSk7CisgICAgcHJvY2Vzc29yLT5jcmVhdGVEb2N1bWVudEZyb21Tb3VyY2UobmV3
U291cmNlLCByZXN1bHRFbmNvZGluZywgcmVzdWx0TUlNRVR5cGUsIHRoaXMsIGZyYW1lKCksIDAp
OwogfQogCiB2b2lkIERvY3VtZW50OjpzZXRUcmFuc2Zvcm1Tb3VyY2UoUGFzc093blB0cjxUcmFu
c2Zvcm1Tb3VyY2U+IHNvdXJjZSkKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gNTk5MDApCisrKyBXZWJD
b3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NjIsNiArNDYyLDkgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxl
cigpIGNvbnN0OyAvLyBjYW4gYmUgTlVMTAogI2VuZGlmCiAKKyAgICBGcmFtZSogb3JpZ2luRnJh
bWUoKSBjb25zdCB7IHJldHVybiBtX29yaWdpbkZyYW1lOyB9IC8vIGNhbiBiZSBOVUxMCisgICAg
dm9pZCBzZXRPcmlnaW5GcmFtZShGcmFtZSogZnJhbWUpOworCiAgICAgUGFzc1JlZlB0cjxSYW5n
ZT4gY3JlYXRlUmFuZ2UoKTsKIAogICAgIFBhc3NSZWZQdHI8Tm9kZUl0ZXJhdG9yPiBjcmVhdGVO
b2RlSXRlcmF0b3IoTm9kZSogcm9vdCwgdW5zaWduZWQgd2hhdFRvU2hvdywKQEAgLTEwMjgsNiAr
MTAzMSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2RpZENhbGN1bGF0ZVN0eWxlU2VsZWN0b3I7
CiAKICAgICBGcmFtZSogbV9mcmFtZTsKKyAgICBGcmFtZSogbV9vcmlnaW5GcmFtZTsKICAgICBP
d25QdHI8RG9jTG9hZGVyPiBtX2RvY0xvYWRlcjsKICAgICBPd25QdHI8VG9rZW5pemVyPiBtX3Rv
a2VuaXplcjsKICAgICBib29sIG1fd2VsbEZvcm1lZDsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0Rv
Y3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIv
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAkocmV2aXNpb24gNTk5MDApCisrKyBXZWJDb3Jl
L2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MjEsOCArMzIxLDExIEBAIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVxdWUK
ICAgICBSZXNvdXJjZUVycm9yIGVycm9yOwogICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7
CiAgICAgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNp
Z25lZCBsb25nPjo6bWF4KCk7Ci0gICAgaWYgKG1fZG9jdW1lbnQtPmZyYW1lKCkpCi0gICAgICAg
IGlkZW50aWZpZXIgPSBtX2RvY3VtZW50LT5mcmFtZSgpLT5sb2FkZXIoKS0+bG9hZFJlc291cmNl
U3luY2hyb25vdXNseShyZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNl
LCBkYXRhKTsKKworICAgIEZyYW1lKiBmcmFtZSA9IG1fZG9jdW1lbnQtPmZyYW1lKCkgPyBtX2Rv
Y3VtZW50LT5mcmFtZSgpIDogbV9kb2N1bWVudC0+b3JpZ2luRnJhbWUoKTsKKworICAgIGlmIChm
cmFtZSkKKyAgICAgICAgaWRlbnRpZmllciA9IGZyYW1lLT5sb2FkZXIoKS0+bG9hZFJlc291cmNl
U3luY2hyb25vdXNseShyZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNl
LCBkYXRhKTsKIAogICAgIC8vIE5vIGV4Y2VwdGlvbiBmb3IgZmlsZTovLy8gcmVzb3VyY2VzLCBz
ZWUgPHJkYXI6Ly9wcm9ibGVtLzQ5NjIyOTg+LgogICAgIC8vIEFsc28sIGlmIHdlIGhhdmUgYW4g
SFRUUCByZXNwb25zZSwgdGhlbiBpdCB3YXNuJ3QgYSBuZXR3b3JrIGVycm9yIGluIGZhY3QuCklu
ZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9G
cmFtZS5jcHAJKHJldmlzaW9uIDU5OTAwKQorKysgV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTk4LDYgKzE5OCwxMCBAQCBGcmFtZTo6fkZyYW1lKCkKICAgICBzZXRW
aWV3KDApOwogICAgIGxvYWRlcigpLT5jYW5jZWxBbmRDbGVhcigpOwogCisgICAgZm9yIChIYXNo
U2V0PERvY3VtZW50Kj46Oml0ZXJhdG9yIGl0ID0gbV9zdWJEb2N1bWVudHMuYmVnaW4oKTsKKyAg
ICAgICAgIGl0ICE9IG1fc3ViRG9jdW1lbnRzLmVuZCgpOyArK2l0KQorICAgICAgICAoKml0KS0+
c2V0T3JpZ2luRnJhbWUoMCk7CisKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG5vdCBiZSBkb2lu
ZyBhbGwgdGhpcyB3b3JrIGluc2lkZSB0aGUgZGVzdHJ1Y3RvcgogCiAgICAgQVNTRVJUKCFtX2xp
ZmVTdXBwb3J0VGltZXIuaXNBY3RpdmUoKSk7CkBAIC0xNzA4LDQgKzE3MTIsMjAgQEAgU3RyaW5n
IEZyYW1lOjpsYXllclRyZWVBc1RleHQoKSBjb25zdAogI2VuZGlmCiB9CiAKK3ZvaWQgRnJhbWU6
OnJlZ2lzdGVyU3ViRG9jdW1lbnQoRG9jdW1lbnQqIGRvYykKK3sKKyAgICBpZiAoZG9jKSB7Cisg
ICAgICAgIGRvYy0+c2V0T3JpZ2luRnJhbWUodGhpcyk7CisgICAgICAgIG1fc3ViRG9jdW1lbnRz
LmFkZChkb2MpOworICAgIH0KK30KKwordm9pZCBGcmFtZTo6dW5yZWdpc3RlclN1YkRvY3VtZW50
KERvY3VtZW50KiBkb2MpCit7CisgICAgaWYgKGRvYykgeworICAgICAgICBkb2MtPnNldE9yaWdp
bkZyYW1lKDApOworICAgICAgICBtX3N1YkRvY3VtZW50cy5yZW1vdmUoZG9jKTsKKyAgICB9Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGFnZS9GcmFtZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZS5oCShyZXZpc2lvbiA1OTkwMCkKKysrIFdl
YkNvcmUvcGFnZS9GcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsNiArMTMwLDkgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAKICAgICAgICAgU3RyaW5nIGxheWVyVHJlZUFzVGV4
dCgpIGNvbnN0OwogCisgICAgICAgIHZvaWQgcmVnaXN0ZXJTdWJEb2N1bWVudChEb2N1bWVudCog
ZG9jKTsKKyAgICAgICAgdm9pZCB1bnJlZ2lzdGVyU3ViRG9jdW1lbnQoRG9jdW1lbnQqIGRvYyk7
CisKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIGluamVjdFVzZXJTY3JpcHRzRm9yV29ybGQo
RE9NV3JhcHBlcldvcmxkKiwgY29uc3QgVXNlclNjcmlwdFZlY3RvciYsIFVzZXJTY3JpcHRJbmpl
Y3Rpb25UaW1lKTsKIApAQCAtMzc1LDYgKzM3OCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNp
ZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkgICAgICAgIAogICAgICAgICBPd25QdHI8VGls
ZWRCYWNraW5nU3RvcmU+IG1fdGlsZWRCYWNraW5nU3RvcmU7CiAjZW5kaWYKKworICAgICAgICBI
YXNoU2V0PERvY3VtZW50Kj4gbV9zdWJEb2N1bWVudHM7CiAgICAgfTsKIAogICAgIGlubGluZSB2
b2lkIEZyYW1lOjppbml0KCkKSW5kZXg6IFdlYkNvcmUveG1sL0RPTVBhcnNlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS94bWwvRE9NUGFyc2VyLmNwcAkocmV2aXNpb24gNTk5MDApCisrKyBX
ZWJDb3JlL3htbC9ET01QYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwxNyArMjAsMjEg
QEAKICNpbmNsdWRlICJET01QYXJzZXIuaCIKIAogI2luY2x1ZGUgIkRPTUltcGxlbWVudGF0aW9u
LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCi1QYXNzUmVmUHRyPERvY3VtZW50PiBET01QYXJzZXI6
OnBhcnNlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0ciwgY29uc3QgU3RyaW5nJiBjb250ZW50
VHlwZSkKK1Bhc3NSZWZQdHI8RG9jdW1lbnQ+IERPTVBhcnNlcjo6cGFyc2VGcm9tU3RyaW5nKGNv
bnN0IFN0cmluZyYgc3RyLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlLCBGcmFtZSogb3JpZ2lu
RnJhbWUpCiB7CiAgICAgaWYgKCFET01JbXBsZW1lbnRhdGlvbjo6aXNYTUxNSU1FVHlwZShjb250
ZW50VHlwZSkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgUmVmUHRyPERvY3VtZW50PiBkb2Mg
PSBET01JbXBsZW1lbnRhdGlvbjo6Y3JlYXRlRG9jdW1lbnQoY29udGVudFR5cGUsIDAsIGZhbHNl
KTsKIAorICAgIGlmIChvcmlnaW5GcmFtZSkKKyAgICAgICAgb3JpZ2luRnJhbWUtPnJlZ2lzdGVy
U3ViRG9jdW1lbnQoZG9jLmdldCgpKTsKKwogICAgIGRvYy0+b3BlbigpOwogICAgIGRvYy0+d3Jp
dGUoc3RyKTsKICAgICBkb2MtPmZpbmlzaFBhcnNpbmcoKTsKSW5kZXg6IFdlYkNvcmUveG1sL0RP
TVBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1sL0RPTVBhcnNlci5oCShyZXZpc2lv
biA1OTkwMCkKKysrIFdlYkNvcmUveG1sL0RPTVBhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCw3ICszMCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPERPTVBhcnNlcj4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3
IERPTVBhcnNlcik7IH0KICAgICAgICAgCi0gICAgICAgIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IHBh
cnNlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0ciwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlw
ZSk7CisgICAgICAgIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IHBhcnNlRnJvbVN0cmluZyhjb25zdCBT
dHJpbmcmIHN0ciwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSwgRnJhbWUqIG9yaWdpbkZyYW1l
KTsKICAgICAgICAgCiAgICAgcHJpdmF0ZToKICAgICAgICAgRE9NUGFyc2VyKCkgeyB9ICAgICAg
ICAKSW5kZXg6IFdlYkNvcmUveG1sL0RPTVBhcnNlci5pZGwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS94bWwvRE9NUGFyc2VyLmlkbAkocmV2aXNpb24gNTk5MDApCisrKyBXZWJDb3JlL3htbC9ET01Q
YXJzZXIuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xOSw2ICsxOSw2IEBACiAKIG1vZHVsZSB4cGF0
aCB7CiAgICAgaW50ZXJmYWNlIFtDYW5CZUNvbnN0cnVjdGVkXSBET01QYXJzZXIgewotICAgICAg
ICBEb2N1bWVudCBwYXJzZUZyb21TdHJpbmcoaW4gRE9NU3RyaW5nIHN0ciwgaW4gRE9NU3RyaW5n
IGNvbnRlbnRUeXBlKTsKKyAgICAgICAgW0N1c3RvbV0gRG9jdW1lbnQgcGFyc2VGcm9tU3RyaW5n
KGluIERPTVN0cmluZyBzdHIsIGluIERPTVN0cmluZyBjb250ZW50VHlwZSk7CiAgICAgfTsKIH0K
SW5kZXg6IFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAJKHJldmlzaW9uIDU5OTAwKQorKysgV2ViQ29yZS94
bWwvWE1MSHR0cFJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAj
aW5jbHVkZSAiRXZlbnRFeGNlcHRpb24uaCIKICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCiAj
aW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSFRU
UFBhcnNlcnMuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAi
SW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIgpAQCAtMjQxLDYgKzI0Miw5IEBAIERvY3VtZW50KiBY
TUxIdHRwUmVxdWVzdDo6cmVzcG9uc2VYTUwoKSAKICAgICAgICAgICAgIG1fcmVzcG9uc2VYTUwg
PSAwOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbV9yZXNwb25zZVhNTCA9IERvY3Vt
ZW50OjpjcmVhdGUoMCk7CisgICAgICAgICAgICBpZiAoZG9jdW1lbnQoKS0+ZnJhbWUoKSkKKyAg
ICAgICAgICAgICAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5yZWdpc3RlclN1YkRvY3VtZW50KG1f
cmVzcG9uc2VYTUwuZ2V0KCkpOworCiAgICAgICAgICAgICBtX3Jlc3BvbnNlWE1MLT5vcGVuKCk7
CiAgICAgICAgICAgICBtX3Jlc3BvbnNlWE1MLT5zZXRVUkwobV91cmwpOwogICAgICAgICAgICAg
Ly8gRklYTUU6IFNldCBMYXN0LU1vZGlmaWVkLgpJbmRleDogV2ViQ29yZS94bWwvWFNMSW1wb3J0
UnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWFNMSW1wb3J0UnVsZS5jcHAJKHJl
dmlzaW9uIDU5OTAwKQorKysgV2ViQ29yZS94bWwvWFNMSW1wb3J0UnVsZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDYgKzI2LDEwIEBACiAKICNpbmNsdWRlICJDYWNoZWRYU0xTdHlsZVNoZWV0
LmgiCiAjaW5jbHVkZSAiRG9jTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRl
ICJOb2RlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgorI2luY2x1ZGUgIlRleHRSZXNv
dXJjZURlY29kZXIuaCIKICNpbmNsdWRlICJYU0xTdHlsZVNoZWV0LmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTc4LDE4ICs4MiwyOCBAQCBib29sIFhTTEltcG9ydFJ1bGU6OmlzTG9hZGlu
ZygpCiB2b2lkIFhTTEltcG9ydFJ1bGU6OmxvYWRTaGVldCgpCiB7CiAgICAgRG9jTG9hZGVyKiBk
b2NMb2FkZXIgPSAwOworICAgIFhTTFN0eWxlU2hlZXQqIHJvb3RYU0wgPSAwOwogICAgIFN0eWxl
QmFzZSogcm9vdCA9IHRoaXM7CiAgICAgU3R5bGVCYXNlKiBwYXJlbnQ7CiAgICAgd2hpbGUgKChw
YXJlbnQgPSByb290LT5wYXJlbnQoKSkpCiAgICAgICAgIHJvb3QgPSBwYXJlbnQ7Ci0gICAgaWYg
KHJvb3QtPmlzWFNMU3R5bGVTaGVldCgpKQotICAgICAgICBkb2NMb2FkZXIgPSBzdGF0aWNfY2Fz
dDxYU0xTdHlsZVNoZWV0Kj4ocm9vdCktPmRvY0xvYWRlcigpOworICAgIGlmIChyb290LT5pc1hT
TFN0eWxlU2hlZXQoKSkgeworICAgICAgICByb290WFNMID0gc3RhdGljX2Nhc3Q8WFNMU3R5bGVT
aGVldCo+KHJvb3QpOworICAgICAgICBkb2NMb2FkZXIgPSByb290WFNMLT5kb2NMb2FkZXIoKTsK
KyAgICB9CiAgICAgCiAgICAgU3RyaW5nIGFic0hyZWYgPSBtX3N0ckhyZWY7CisgICAgTm9kZSog
b3duZXJOb2RlID0gcm9vdFhTTC0+b3duZXJOb2RlKCk7CiAgICAgWFNMU3R5bGVTaGVldCogcGFy
ZW50U2hlZXQgPSBwYXJlbnRTdHlsZVNoZWV0KCk7CiAgICAgaWYgKCFwYXJlbnRTaGVldC0+Zmlu
YWxVUkwoKS5pc051bGwoKSkKICAgICAgICAgLy8gdXNlIHBhcmVudCBzdHlsZWhlZXQncyBVUkwg
YXMgdGhlIGJhc2UgVVJMCiAgICAgICAgIGFic0hyZWYgPSBLVVJMKHBhcmVudFNoZWV0LT5maW5h
bFVSTCgpLCBtX3N0ckhyZWYpLnN0cmluZygpOworICAgIGVsc2UgaWYgKG93bmVyTm9kZSkgewor
ICAgICAgICAvLyB1c2UgYmFzZSB1cmwgZnJvbSBvcmlnaW5GcmFtZSdzIGRvY3VtZW50IHdoZW4g
cGFyZW50IHN0eWxlc2hlZXQgZG9udCBoYXZlIGFuIGZpbmFsIHVybAorICAgICAgICAvLyB0aGlz
IGNhbiBmb3IgZXhhbXBsZSBoYXBwZW4gd2hlbiB0aGUgc3R5bGVzaGVldCBpcyBjcmVhdGVkIHdp
dGggRE9NUGFyc2VyLnBhcnNlRnJvbVN0cmluZworICAgICAgICBpZiAoRnJhbWUqIG9yaWdpbkZy
YW1lID0gb3duZXJOb2RlLT5kb2N1bWVudCgpLT5vcmlnaW5GcmFtZSgpKQorICAgICAgICAgICAg
YWJzSHJlZiA9IEtVUkwob3JpZ2luRnJhbWUtPmRvY3VtZW50KCktPmJhc2VVUkwoKSwgbV9zdHJI
cmVmKS5zdHJpbmcoKTsKKyAgICB9CiAgICAgCiAgICAgLy8gQ2hlY2sgZm9yIGEgY3ljbGUgaW4g
b3VyIGltcG9ydCBjaGFpbi4gIElmIHdlIGVuY291bnRlciBhIHN0eWxlc2hlZXQKICAgICAvLyBp
biBvdXIgcGFyZW50IGNoYWluIHdpdGggdGhlIHNhbWUgVVJMLCB0aGVuIGp1c3QgYmFpbC4KQEAg
LTk3LDEyICsxMTEsMjAgQEAgdm9pZCBYU0xJbXBvcnRSdWxlOjpsb2FkU2hlZXQoKQogICAgICAg
ICBpZiAocGFyZW50LT5pc1hTTFN0eWxlU2hlZXQoKSAmJiBhYnNIcmVmID09IHN0YXRpY19jYXN0
PFhTTFN0eWxlU2hlZXQqPihwYXJlbnQpLT5maW5hbFVSTCgpLnN0cmluZygpKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgIH0KLSAgICAKKworICAgIGlmIChvd25lck5vZGUgJiYgb3duZXJOb2Rl
LT5ub2RlVHlwZSgpID09IE5vZGU6OlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERSkKKyAgICAg
ICAgbG9hZFNoZWV0QXN5bmMoZG9jTG9hZGVyLCBhYnNIcmVmKTsKKyAgICBlbHNlCisgICAgICAg
IGxvYWRTaGVldFN5bmMoZG9jTG9hZGVyLCBhYnNIcmVmKTsKK30KKwordm9pZCBYU0xJbXBvcnRS
dWxlOjpsb2FkU2hlZXRBc3luYyhEb2NMb2FkZXIqIGRvY0xvYWRlciwgY29uc3QgU3RyaW5nJiBh
YnNIcmVmKQorewogICAgIG1fY2FjaGVkU2hlZXQgPSBkb2NMb2FkZXItPnJlcXVlc3RYU0xTdHls
ZVNoZWV0KGFic0hyZWYpOwotICAgIAorCiAgICAgaWYgKG1fY2FjaGVkU2hlZXQpIHsKICAgICAg
ICAgbV9jYWNoZWRTaGVldC0+YWRkQ2xpZW50KHRoaXMpOwotICAgICAgICAKKwogICAgICAgICAv
LyBJZiB0aGUgaW1wb3J0ZWQgc2hlZXQgaXMgaW4gdGhlIGNhY2hlLCB0aGVuIHNldFhTTFN0eWxl
U2hlZXQgZ2V0cyBjYWxsZWQsCiAgICAgICAgIC8vIGFuZCB0aGUgc2hlZXQgZXZlbiBnZXRzIHBh
cnNlZCAodmlhIHBhcnNlU3RyaW5nKS4gIEluIHRoaXMgY2FzZSB3ZSBoYXZlCiAgICAgICAgIC8v
IGxvYWRlZCAoZXZlbiBpZiBvdXIgc3VicmVzb3VyY2VzIGhhdmVuJ3QpLCBzbyBpZiB3ZSBoYXZl
IGEgc3R5bGVzaGVldCBhZnRlcgpAQCAtMTEyLDYgKzEzNCwzOSBAQCB2b2lkIFhTTEltcG9ydFJ1
bGU6OmxvYWRTaGVldCgpCiAgICAgfQogfQogCit2b2lkIFhTTEltcG9ydFJ1bGU6OmxvYWRTaGVl
dFN5bmMoRG9jTG9hZGVyKiBkb2NMb2FkZXIsIGNvbnN0IFN0cmluZyYgYWJzSHJlZikKK3sKKyAg
ICBSZXNvdXJjZUVycm9yIGVycm9yOworICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7Cisg
ICAgVmVjdG9yPGNoYXI+IGRhdGE7CisKKyAgICBEb2N1bWVudCogZG9jID0gZG9jTG9hZGVyLT5k
b2MoKTsKKyAgICBGcmFtZSogZnJhbWUgPSBkb2MtPmZyYW1lKCkgPyBkb2MtPmZyYW1lKCkgOiBk
b2MtPm9yaWdpbkZyYW1lKCk7CisKKyAgICBLVVJMIHVybChQYXJzZWRVUkxTdHJpbmcsIGFic0hy
ZWYpOworCisgICAgYm9vbCByZXF1ZXN0QWxsb3dlZCA9IGZyYW1lICYmIGRvYy0+c2VjdXJpdHlP
cmlnaW4oKS0+Y2FuUmVxdWVzdCh1cmwpOworICAgIGlmIChyZXF1ZXN0QWxsb3dlZCkgeworICAg
ICAgICBmcmFtZS0+bG9hZGVyKCktPmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkodXJsLCBBbGxv
d1N0b3JlZENyZWRlbnRpYWxzLCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOworICAgICAgICByZXF1
ZXN0QWxsb3dlZCA9IGRvYy0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChyZXNwb25zZS51
cmwoKSk7CisgICAgfQorICAgIGlmICghcmVxdWVzdEFsbG93ZWQpIHsKKyAgICAgICAgZGF0YS5j
bGVhcigpOworICAgICAgICBkb2NMb2FkZXItPnByaW50QWNjZXNzRGVuaWVkTWVzc2FnZSh1cmwp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGVycm9yLmlzTnVsbCgpKSB7Cisg
ICAgICAgIFJlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBkZWNvZGVyID0gVGV4dFJlc291cmNl
RGVjb2Rlcjo6Y3JlYXRlKCJ0ZXh0L3hzbCIpOworICAgICAgICBTdHJpbmcgZW5jb2RpbmcgPSBy
ZXNwb25zZS50ZXh0RW5jb2RpbmdOYW1lKCk7CisgICAgICAgIGlmICghZW5jb2RpbmcuaXNOdWxs
KCkpCisgICAgICAgICAgICBkZWNvZGVyLT5zZXRFbmNvZGluZyhlbmNvZGluZywgVGV4dFJlc291
cmNlRGVjb2Rlcjo6RW5jb2RpbmdGcm9tSFRUUEhlYWRlcik7CisKKyAgICAgICAgU3RyaW5nIHNo
ZWV0KGRlY29kZXItPmRlY29kZShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpKTsKKyAgICAgICAg
c2V0WFNMU3R5bGVTaGVldChhYnNIcmVmLCByZXNwb25zZS51cmwoKSwgc2hlZXQpOworICAgIH0K
K30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFhTTFQpCklu
ZGV4OiBXZWJDb3JlL3htbC9YU0xJbXBvcnRSdWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94
bWwvWFNMSW1wb3J0UnVsZS5oCShyZXZpc2lvbiA1OTkwMCkKKysrIFdlYkNvcmUveG1sL1hTTElt
cG9ydFJ1bGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsMTAgQEAgcHJpdmF0ZToKIAog
ICAgIC8vIGZyb20gQ2FjaGVkUmVzb3VyY2VDbGllbnQKICAgICB2aXJ0dWFsIHZvaWQgc2V0WFNM
U3R5bGVTaGVldChjb25zdCBTdHJpbmcmIGhyZWYsIGNvbnN0IEtVUkwmIGJhc2VVUkwsIGNvbnN0
IFN0cmluZyYgc2hlZXQpOwotICAgIAorCisgICAgdm9pZCBsb2FkU2hlZXRBc3luYyhEb2NMb2Fk
ZXIqIGRvY0xvYWRlciwgY29uc3QgU3RyaW5nJiBhYnNIcmVmKTsKKyAgICB2b2lkIGxvYWRTaGVl
dFN5bmMoRG9jTG9hZGVyKiBkb2NMb2FkZXIsIGNvbnN0IFN0cmluZyYgYWJzSHJlZik7CisKICAg
ICBTdHJpbmcgbV9zdHJIcmVmOwogICAgIFJlZlB0cjxYU0xTdHlsZVNoZWV0PiBtX3N0eWxlU2hl
ZXQ7CiAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkWFNMU3R5bGVTaGVldD4gbV9jYWNo
ZWRTaGVldDsKSW5kZXg6IFdlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuY3BwCShyZXZpc2lvbiA1OTkwMCkKKysrIFdl
YkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw5ICs2MCwx
MyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdHJhbnNmb3JtVGV4dFN0cmluZ1RvCiAgICAgICAgICI8
L2h0bWw+XG4iOwogfQogCi1QYXNzUmVmUHRyPERvY3VtZW50PiBYU0xUUHJvY2Vzc29yOjpjcmVh
dGVEb2N1bWVudEZyb21Tb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2VTdHJpbmcsCi0gICAgY29u
c3QgU3RyaW5nJiBzb3VyY2VFbmNvZGluZywgY29uc3QgU3RyaW5nJiBzb3VyY2VNSU1FVHlwZSwg
Tm9kZSogc291cmNlTm9kZSwgRnJhbWUqIGZyYW1lKQorUGFzc1JlZlB0cjxEb2N1bWVudD4gWFNM
VFByb2Nlc3Nvcjo6Y3JlYXRlRG9jdW1lbnRGcm9tU291cmNlKAorICAgIGNvbnN0IFN0cmluZyYg
c291cmNlU3RyaW5nLCBjb25zdCBTdHJpbmcmIHNvdXJjZUVuY29kaW5nLAorICAgIGNvbnN0IFN0
cmluZyYgc291cmNlTUlNRVR5cGUsIE5vZGUqIHNvdXJjZU5vZGUsCisgICAgRnJhbWUqIGZyYW1l
LCBGcmFtZSogb3JpZ2luRnJhbWUpCiB7CisgICAgQVNTRVJUKCFmcmFtZSB8fCAhb3JpZ2luRnJh
bWUpOworCiAgICAgUmVmUHRyPERvY3VtZW50PiBvd25lckRvY3VtZW50ID0gc291cmNlTm9kZS0+
ZG9jdW1lbnQoKTsKICAgICBib29sIHNvdXJjZUlzRG9jdW1lbnQgPSAoc291cmNlTm9kZSA9PSBv
d25lckRvY3VtZW50LmdldCgpKTsKICAgICBTdHJpbmcgZG9jdW1lbnRTb3VyY2UgPSBzb3VyY2VT
dHJpbmc7CkBAIC04MSw3ICs4NSw4IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IFhTTFRQcm9jZXNz
b3I6OmNyZWEKICAgICAgICAgICAgIHZpZXctPmNsZWFyKCk7CiAgICAgICAgIHJlc3VsdC0+c2V0
VHJhbnNmb3JtU291cmNlRG9jdW1lbnQoZnJhbWUtPmRvY3VtZW50KCkpOwogICAgICAgICBmcmFt
ZS0+c2V0RG9jdW1lbnQocmVzdWx0KTsKLSAgICB9CisgICAgfSBlbHNlIGlmIChvcmlnaW5GcmFt
ZSkKKyAgICAgICAgb3JpZ2luRnJhbWUtPnJlZ2lzdGVyU3ViRG9jdW1lbnQocmVzdWx0LmdldCgp
KTsKIAogICAgIGlmIChzb3VyY2VJc0RvY3VtZW50KQogICAgICAgICByZXN1bHQtPnNldFVSTChv
d25lckRvY3VtZW50LT51cmwoKSk7CkBAIC0xMTcsMTQgKzEyMiwxNCBAQCBzdGF0aWMgaW5saW5l
IFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjCiAgICAgcmV0dXJuIGZyYWdtZW50OwogfQogCi1Q
YXNzUmVmUHRyPERvY3VtZW50PiBYU0xUUHJvY2Vzc29yOjp0cmFuc2Zvcm1Ub0RvY3VtZW50KE5v
ZGUqIHNvdXJjZU5vZGUpCitQYXNzUmVmUHRyPERvY3VtZW50PiBYU0xUUHJvY2Vzc29yOjp0cmFu
c2Zvcm1Ub0RvY3VtZW50KE5vZGUqIHNvdXJjZU5vZGUsIEZyYW1lKiBvcmlnaW5GcmFtZSkKIHsK
ICAgICBTdHJpbmcgcmVzdWx0TUlNRVR5cGU7CiAgICAgU3RyaW5nIHJlc3VsdFN0cmluZzsKICAg
ICBTdHJpbmcgcmVzdWx0RW5jb2Rpbmc7CiAgICAgaWYgKCF0cmFuc2Zvcm1Ub1N0cmluZyhzb3Vy
Y2VOb2RlLCByZXN1bHRNSU1FVHlwZSwgcmVzdWx0U3RyaW5nLCByZXN1bHRFbmNvZGluZykpCiAg
ICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBjcmVhdGVEb2N1bWVudEZyb21Tb3VyY2UocmVz
dWx0U3RyaW5nLCByZXN1bHRFbmNvZGluZywgcmVzdWx0TUlNRVR5cGUsIHNvdXJjZU5vZGUsIDAp
OworICAgIHJldHVybiBjcmVhdGVEb2N1bWVudEZyb21Tb3VyY2UocmVzdWx0U3RyaW5nLCByZXN1
bHRFbmNvZGluZywgcmVzdWx0TUlNRVR5cGUsIHNvdXJjZU5vZGUsIDAsIG9yaWdpbkZyYW1lKTsK
IH0KIAogUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBYU0xUUHJvY2Vzc29yOjp0cmFuc2Zv
cm1Ub0ZyYWdtZW50KE5vZGUqIHNvdXJjZU5vZGUsIERvY3VtZW50KiBvdXRwdXREb2MpCkluZGV4
OiBXZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwv
WFNMVFByb2Nlc3Nvci5oCShyZXZpc2lvbiA1OTkwMCkKKysrIFdlYkNvcmUveG1sL1hTTFRQcm9j
ZXNzb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsMTIgKzQ3LDEyIEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgc2V0WFNMU3R5bGVTaGVldChQYXNzUmVmUHRyPFhTTFN0eWxlU2hlZXQ+IHN0eWxlU2hl
ZXQpIHsgbV9zdHlsZXNoZWV0ID0gc3R5bGVTaGVldDsgfQogICAgIGJvb2wgdHJhbnNmb3JtVG9T
dHJpbmcoTm9kZSogc291cmNlLCBTdHJpbmcmIHJlc3VsdE1JTUVUeXBlLCBTdHJpbmcmIHJlc3Vs
dFN0cmluZywgU3RyaW5nJiByZXN1bHRFbmNvZGluZyk7Ci0gICAgUGFzc1JlZlB0cjxEb2N1bWVu
dD4gY3JlYXRlRG9jdW1lbnRGcm9tU291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBT
dHJpbmcmIHNvdXJjZUVuY29kaW5nLCBjb25zdCBTdHJpbmcmIHNvdXJjZU1JTUVUeXBlLCBOb2Rl
KiBzb3VyY2VOb2RlLCBGcmFtZSogZnJhbWUpOworICAgIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IGNy
ZWF0ZURvY3VtZW50RnJvbVNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgU3RyaW5n
JiBzb3VyY2VFbmNvZGluZywgY29uc3QgU3RyaW5nJiBzb3VyY2VNSU1FVHlwZSwgTm9kZSogc291
cmNlTm9kZSwgRnJhbWUqIGZyYW1lLCBGcmFtZSogb3JpZ2luRnJhbWUpOwogICAgIAogICAgIC8v
IERPTSBtZXRob2RzCiAgICAgdm9pZCBpbXBvcnRTdHlsZXNoZWV0KFBhc3NSZWZQdHI8Tm9kZT4g
c3R5bGUpIHsgbV9zdHlsZXNoZWV0Um9vdE5vZGUgPSBzdHlsZTsgfQogICAgIFBhc3NSZWZQdHI8
RG9jdW1lbnRGcmFnbWVudD4gdHJhbnNmb3JtVG9GcmFnbWVudChOb2RlKiBzb3VyY2UsIERvY3Vt
ZW50KiBvdXB1dERvYyk7Ci0gICAgUGFzc1JlZlB0cjxEb2N1bWVudD4gdHJhbnNmb3JtVG9Eb2N1
bWVudChOb2RlKiBzb3VyY2UpOworICAgIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IHRyYW5zZm9ybVRv
RG9jdW1lbnQoTm9kZSogc291cmNlLCBGcmFtZSogb3JpZ2luRnJhbWUpOwogICAgIAogICAgIHZv
aWQgc2V0UGFyYW1ldGVyKGNvbnN0IFN0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBTdHJpbmcm
IGxvY2FsTmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CiAgICAgU3RyaW5nIGdldFBhcmFtZXRl
cihjb25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3RyaW5nJiBsb2NhbE5hbWUpIGNv
bnN0OwpJbmRleDogV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcAkocmV2aXNpb24gNTk5
MDApCisrKyBXZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yTGlieHNsdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTExNywxMCArMTE3LDEzIEBAIHN0YXRpYyB4bWxEb2NQdHIgZG9jTG9hZGVyRnVuYyhj
b25zdCB4bWwKIAogICAgICAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKIAotICAgICAgICBib29sIHJl
cXVlc3RBbGxvd2VkID0gZ2xvYmFsRG9jTG9hZGVyLT5mcmFtZSgpICYmIGdsb2JhbERvY0xvYWRl
ci0+ZG9jKCktPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QodXJsKTsKKyAgICAgICAgRG9j
dW1lbnQqIGRvY3VtZW50ID0gZ2xvYmFsRG9jTG9hZGVyLT5kb2MoKTsKKyAgICAgICAgRnJhbWUq
IGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCkgPyBkb2N1bWVudC0+ZnJhbWUoKSA6IGRvY3VtZW50
LT5vcmlnaW5GcmFtZSgpOworCisgICAgICAgIGJvb2wgcmVxdWVzdEFsbG93ZWQgPSBmcmFtZSAm
JiBkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdCh1cmwpOwogICAgICAgICBp
ZiAocmVxdWVzdEFsbG93ZWQpIHsKLSAgICAgICAgICAgIGdsb2JhbERvY0xvYWRlci0+ZnJhbWUo
KS0+bG9hZGVyKCktPmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkodXJsLCBBbGxvd1N0b3JlZENy
ZWRlbnRpYWxzLCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOwotICAgICAgICAgICAgcmVxdWVzdEFs
bG93ZWQgPSBnbG9iYWxEb2NMb2FkZXItPmRvYygpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1
ZXN0KHJlc3BvbnNlLnVybCgpKTsKKyAgICAgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+bG9hZFJl
c291cmNlU3luY2hyb25vdXNseSh1cmwsIEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsIGVycm9yLCBy
ZXNwb25zZSwgZGF0YSk7CisgICAgICAgICAgICByZXF1ZXN0QWxsb3dlZCA9IGRvY3VtZW50LT5z
ZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHJlc3BvbnNlLnVybCgpKTsKICAgICAgICAgfQog
ICAgICAgICBpZiAoIXJlcXVlc3RBbGxvd2VkKSB7CiAgICAgICAgICAgICBkYXRhLmNsZWFyKCk7
CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCShyZXZpc2lvbiA1OTkwMCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDEwLTA1LTIxICBBbmRyZWFzIFdpY3RvciAg
PGFuZHJlYXMud2ljdG9yQHhjZXJpb24uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIHhzbDppbXBvcnQgYW5kIGRvY3VtZW50KCkgZG9uJ3Qgd29y
ayBpbiBzdHlsZXNoZWV0cyBsb2FkZWQgdmlhIFhNTEh0dHBSZXF1ZXN0CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDMxMworCisgICAgICAgIFRlc3Rz
IGZvciBkaWZmZXJlbnQgd2F5cyB0byBkbyB4c2wgdHJhbnNmb3JtYXRpb25zIHdpdGggZnJhbWVs
ZXNzIGRvY3VtZW50cworCisgICAgICAgICogZmFzdC94c2wvdHJhbnNmb3JtLWRvY2ltcGwtZG9j
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC94c2wvdHJhbnNmb3JtLWRvY2lt
cGwtZG9jLnhodG1sOiBBZGRlZC4KKyAgICAgICAgICAtIFRlc3QgdGhhdCBzdHlsZXNoZWV0cyBj
cmVhdGVkIHdpdGggZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlRG9jdW1lbnQKKyAgICAg
ICAgICAgIGNhbiB1c2UgeHNsOmltcG9ydAorICAgICAgICAqIGZhc3QveHNsL3RyYW5zZm9ybS1k
b21wYXJzZXItZG9jLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC94c2wvdHJh
bnNmb3JtLWRvbXBhcnNlci1kb2MueGh0bWw6IEFkZGVkLgorICAgICAgICAgIC0gVGVzdCB0aGF0
IHN0eWxlc2hlZXRzIGNyZWF0ZWQgd2l0aCBET01QYXJzZXIucGFyc2VGcm9tU3RyaW5nCisgICAg
ICAgICAgICBjYW4gdXNlIHhzbDppbXBvcnQKKyAgICAgICAgKiBmYXN0L3hzbC90cmFuc2Zvcm0t
dHJhbnNmb3JtZWQtZG9jLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC94c2wv
dHJhbnNmb3JtLXRyYW5zZm9ybWVkLWRvYy54aHRtbDogQWRkZWQuCisgICAgICAgICAgLSBUZXN0
IHRoYXQgc3R5bGVzaGVldHMgY3JlYXRlZCB3aXRoIFhTTFRQcm9jZXNzb3IudHJhbnNmb3JtVG9E
b2N1bWVudAorICAgICAgICAgICAgY2FuIHVzZSB4c2w6aW1wb3J0CisgICAgICAgICogZmFzdC94
c2wvdHJhbnNmb3JtLXhoci1kb2MtZXhwZWN0ZWQudHh0OgorCiAyMDEwLTA1LTIwICBWaWN0b3Ig
V2FuZyAgPHZpY3RvcndAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIFVwZGF0
ZSB0ZXN0IGV4cGVjdGF0aW9ucyBmb3IgY2hyb21pdW0uCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L3hzbC90cmFuc2Zvcm0tZG9jaW1wbC1kb2MtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS1kb2NpbXBsLWRvYy1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0tZG9jaW1wbC1kb2Mt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK1Rlc3QgZm9yIGJ1ZyAx
MDMxMzogeHNsOmltcG9ydCBkb2Vzbid0IHdvcmsgaW4gc3R5bGVzaGVldHMgbG9hZGVkIHZpYSBY
TUxIdHRwUmVxdWVzdC4KKworU1VDQ0VTUwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC94c2wvdHJh
bnNmb3JtLWRvY2ltcGwtZG9jLnhodG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
eHNsL3RyYW5zZm9ybS1kb2NpbXBsLWRvYy54aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2Zhc3QveHNsL3RyYW5zZm9ybS1kb2NpbXBsLWRvYy54aHRtbAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw0NSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwh
RE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTiIgImh0dHA6Ly93
d3cudzMub3JnL1RSL3hodG1sMTEvRFREL3hodG1sMTEuZHRkIj4KKzxodG1sIHhtbG5zPSJodHRw
Oi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iPgorPGhlYWQ+CisgICAgPHRp
dGxlPnhzbCBpbXBvcnQgdGVzdDwvdGl0bGU+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFz
Y3JpcHQiPjwhW0NEQVRBWworICAgICAgICBmdW5jdGlvbiBsb2FkKCkgeworICAgICAgICAgICAg
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyAgICAgICAgICAgIHZhciB4c2x0TlMgPSAi
aHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIjsKKyAgICAgICAgICAgIHZhciB4
c2x0RG9jID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlRG9jdW1lbnQoeHNsdE5TLCAi
c3R5bGVzaGVldCIsIG51bGwpOworICAgICAgICAgICAgdmFyIHJvb3RFbGVtID0geHNsdERvYy5k
b2N1bWVudEVsZW1lbnQ7CisgICAgICAgICAgICByb290RWxlbS5zZXRBdHRyaWJ1dGUoInZlcnNp
b24iLCAiMS4wIik7CisKKyAgICAgICAgICAgIHZhciBpbXBvcnRFbGVtID0geHNsdERvYy5jcmVh
dGVFbGVtZW50TlMoeHNsdE5TLCAiaW1wb3J0Iik7CisgICAgICAgICAgICBpbXBvcnRFbGVtLnNl
dEF0dHJpYnV0ZSgiaHJlZiIsICJyZXNvdXJjZXMveGhyLWRvYy1pbXBvcnRlZC54c2wiKTsKKyAg
ICAgICAgICAgIHJvb3RFbGVtLmFwcGVuZENoaWxkKGltcG9ydEVsZW0pOworCisgICAgICAgICAg
ICB2YXIgdGVtcGxhdGVFbGVtID0geHNsdERvYy5jcmVhdGVFbGVtZW50TlMoeHNsdE5TLCAidGVt
cGxhdGUiKTsKKyAgICAgICAgICAgIHRlbXBsYXRlRWxlbS5zZXRBdHRyaWJ1dGUoIm1hdGNoIiwg
Ii9yb290Iik7CisgICAgICAgICAgICB2YXIgY2FsbEVsZW0gPSB4c2x0RG9jLmNyZWF0ZUVsZW1l
bnROUyh4c2x0TlMsICJjYWxsLXRlbXBsYXRlIik7CisgICAgICAgICAgICBjYWxsRWxlbS5zZXRB
dHRyaWJ1dGUoIm5hbWUiLCAid29ya3MiKTsKKyAgICAgICAgICAgIHRlbXBsYXRlRWxlbS5hcHBl
bmRDaGlsZChjYWxsRWxlbSk7CisgICAgICAgICAgICByb290RWxlbS5hcHBlbmRDaGlsZCh0ZW1w
bGF0ZUVsZW0pOworCisgICAgICAgICAgICB2YXIgeHNsdCA9IG5ldyBYU0xUUHJvY2Vzc29yKCk7
CisgICAgICAgICAgICB4c2x0LmltcG9ydFN0eWxlc2hlZXQoeHNsdERvYyk7CisKKyAgICAgICAg
ICAgIHZhciB4bWxEb2MgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVEb2N1bWVudCgi
IiwgInJvb3QiLCBudWxsKTsKKyAgICAgICAgICAgIHZhciByZXN1bHREb2MgPSB4c2x0LnRyYW5z
Zm9ybVRvRG9jdW1lbnQoeG1sRG9jKTsKKyAgICAgICAgICAgIHZhciBmcmFnbWVudCA9IGRvY3Vt
ZW50LmltcG9ydE5vZGUocmVzdWx0RG9jLmRvY3VtZW50RWxlbWVudCwgdHJ1ZSk7CisKKyAgICAg
ICAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGl2Jyk7CisgICAgICAg
ICAgICBkaXYucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoZnJhZ21lbnQsIGRpdik7CisgICAgICAg
IH0KKyAgICBdXT48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0ibG9hZCgpIj4KKzxw
PlRlc3QgZm9yIDxhIGhyZWY9Imh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwMzEzIj5idWcgMTAzMTM8L2E+OgoreHNsOmltcG9ydCBkb2Vzbid0IHdvcmsgaW4gc3R5bGVz
aGVldHMgbG9hZGVkIHZpYSBYTUxIdHRwUmVxdWVzdC48L3A+CisKKzxkaXYgaWQ9ImRpdiI+SXQn
cyBuaWNlIHRoYXQgdGhpcyBoYXNuJ3QgY3Jhc2hlZCwgYnV0IHRoZSBYU0wgdHJhbnNmb3JtYXRp
b24gaGFzIGZhaWxlZC48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QveHNsL3RyYW5zZm9ybS1kb21wYXJzZXItZG9jLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0tZG9tcGFyc2VyLWRvYy1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0tZG9t
cGFyc2VyLWRvYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorVGVz
dCBmb3IgYnVnIDEwMzEzOiB4c2w6aW1wb3J0IGRvZXNuJ3Qgd29yayBpbiBzdHlsZXNoZWV0cyBs
b2FkZWQgdmlhIFhNTEh0dHBSZXF1ZXN0LgorCitTVUNDRVNTCkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L3hzbC90cmFuc2Zvcm0tZG9tcGFyc2VyLWRvYy54aHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0tZG9tcGFyc2VyLWRvYy54aHRtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS1kb21wYXJzZXItZG9jLnhodG1s
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29k
aW5nPSJ1dGYtOCI/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAx
LjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwxMS5kdGQiPgor
PGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiI+
Cis8aGVhZD4KKyAgICA8dGl0bGU+eHNsIGltcG9ydCB0ZXN0PC90aXRsZT4KKyAgICA8c2NyaXB0
IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCFbQ0RBVEFbCisgICAgICAgIGZ1bmN0aW9uIGxvYWQo
KSB7CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAg
ICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworICAgICAgICAg
ICAgdmFyIHhzbHRTdHIgPQorICAgICAgICAgICAgICAgICc8eHNsOnN0eWxlc2hlZXQgdmVyc2lv
bj0iMS4wIicgKworICAgICAgICAgICAgICAgICcgIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5v
cmcvMTk5OS9YU0wvVHJhbnNmb3JtIicgKworICAgICAgICAgICAgICAgICcgIHhtbG5zPSJodHRw
Oi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4nICsKKyAgICAgICAgICAgICAgICAnPHhzbDppbXBv
cnQgaHJlZj0icmVzb3VyY2VzL3hoci1kb2MtaW1wb3J0ZWQueHNsIiAvPicgKworICAgICAgICAg
ICAgICAgICc8eHNsOnRlbXBsYXRlIG1hdGNoPSIvcm9vdCI+JyArCisgICAgICAgICAgICAgICAg
JyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0id29ya3MiIC8+JyArCisgICAgICAgICAgICAg
ICAgJzwveHNsOnRlbXBsYXRlPicgKworICAgICAgICAgICAgICAgICc8L3hzbDpzdHlsZXNoZWV0
Pic7CisKKyAgICAgICAgICAgIHZhciBwYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7CisgICAgICAg
ICAgICB2YXIgeHNsdCA9IG5ldyBYU0xUUHJvY2Vzc29yKCk7CisgICAgICAgICAgICB2YXIgeHNs
dERvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoeHNsdFN0ciwgImFwcGxpY2F0aW9uL3htbCIp
OworICAgICAgICAgICAgeHNsdC5pbXBvcnRTdHlsZXNoZWV0KHhzbHREb2MpOworCisgICAgICAg
ICAgICB2YXIgeG1sRG9jID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZygiPHJvb3QvPiIsICJhcHBs
aWNhdGlvbi94bWwiKTsKKyAgICAgICAgICAgIHZhciByZXN1bHREb2MgPSB4c2x0LnRyYW5zZm9y
bVRvRG9jdW1lbnQoeG1sRG9jKTsKKyAgICAgICAgICAgIHZhciBmcmFnbWVudCA9IGRvY3VtZW50
LmltcG9ydE5vZGUocmVzdWx0RG9jLmRvY3VtZW50RWxlbWVudCwgdHJ1ZSk7CisKKyAgICAgICAg
ICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGl2Jyk7CisgICAgICAgICAg
ICBkaXYucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoZnJhZ21lbnQsIGRpdik7CisgICAgICAgIH0K
KyAgICBdXT48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0ibG9hZCgpIj4KKzxwPlRl
c3QgZm9yIDxhIGhyZWY9Imh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEw
MzEzIj5idWcgMTAzMTM8L2E+OgoreHNsOmltcG9ydCBkb2Vzbid0IHdvcmsgaW4gc3R5bGVzaGVl
dHMgbG9hZGVkIHZpYSBYTUxIdHRwUmVxdWVzdC48L3A+CisKKzxkaXYgaWQ9ImRpdiI+SXQncyBu
aWNlIHRoYXQgdGhpcyBoYXNuJ3QgY3Jhc2hlZCwgYnV0IHRoZSBYU0wgdHJhbnNmb3JtYXRpb24g
aGFzIGZhaWxlZC48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QveHNsL3RyYW5zZm9ybS10cmFuc2Zvcm1lZC1kb2MtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS10cmFuc2Zvcm1lZC1kb2MtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC94c2wvdHJhbnNmb3JtLXRy
YW5zZm9ybWVkLWRvYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAor
VGVzdCBmb3IgYnVnIDEwMzEzOiB4c2w6aW1wb3J0IGRvZXNuJ3Qgd29yayBpbiBzdHlsZXNoZWV0
cyBsb2FkZWQgdmlhIFhNTEh0dHBSZXF1ZXN0LgorCitTVUNDRVNTCkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L3hzbC90cmFuc2Zvcm0tdHJhbnNmb3JtZWQtZG9jLnhodG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS10cmFuc2Zvcm1lZC1kb2MueGh0bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0tdHJhbnNmb3JtZWQt
ZG9jLnhodG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4IEBACis8P3htbCB2ZXJzaW9uPSIx
LjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RU
RCBYSFRNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwx
MS5kdGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDps
YW5nPSJlbiI+Cis8aGVhZD4KKyAgICA8dGl0bGU+eHNsIGltcG9ydCB0ZXN0PC90aXRsZT4KKyAg
ICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCFbQ0RBVEFbCisgICAgICAgIGZ1bmN0
aW9uIGxvYWQoKSB7CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KQorICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKwor
ICAgICAgICAgICAgdmFyIGNvcHlYc2x0U3RyID0KKyAgICAgICAgICAgICAgICAnPHhzbDpzdHls
ZXNoZWV0IHZlcnNpb249IjEuMCInICsKKyAgICAgICAgICAgICAgICAnICB4bWxuczp4c2w9Imh0
dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSInICsKKyAgICAgICAgICAgICAgICAn
ICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+JyArCisgICAgICAgICAgICAg
ICAgJzx4c2w6dGVtcGxhdGUgbWF0Y2g9IkAqfG5vZGUoKSI+JyArCisgICAgICAgICAgICAgICAg
JyAgPHhzbDpjb3B5PicgKworICAgICAgICAgICAgICAgICcgICAgPHhzbDphcHBseS10ZW1wbGF0
ZXMgc2VsZWN0PSJAKnxub2RlKCkiLz4nICsKKyAgICAgICAgICAgICAgICAnICA8L3hzbDpjb3B5
PicgKworICAgICAgICAgICAgICAgICc8L3hzbDp0ZW1wbGF0ZT4nICsKKyAgICAgICAgICAgICAg
ICAnPC94c2w6c3R5bGVzaGVldD4nOworCisgICAgICAgICAgICB2YXIgcGFyc2VyID0gbmV3IERP
TVBhcnNlcigpOworICAgICAgICAgICAgdmFyIHhzbHQgPSBuZXcgWFNMVFByb2Nlc3NvcigpOwor
ICAgICAgICAgICAgY29weVhzbHREb2MgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKGNvcHlYc2x0
U3RyLCAiYXBwbGljYXRpb24veG1sIik7CisgICAgICAgICAgICB4c2x0LmltcG9ydFN0eWxlc2hl
ZXQoY29weVhzbHREb2MpOworCisgICAgICAgICAgICB2YXIgcmVxID0gbmV3IFhNTEh0dHBSZXF1
ZXN0KCk7CisgICAgICAgICAgICByZXEub3BlbignR0VUJywgJ3Jlc291cmNlcy94aHItZG9jLnhz
bCcsIGZhbHNlKTsKKyAgICAgICAgICAgIHJlcS5zZW5kKG51bGwpOworICAgICAgICAgICAgdmFy
IHhzbHREb2MgPSB4c2x0LnRyYW5zZm9ybVRvRG9jdW1lbnQocmVxLnJlc3BvbnNlWE1MKTsKKyAg
ICAgICAgICAgIHhzbHQuaW1wb3J0U3R5bGVzaGVldCh4c2x0RG9jKTsKKworICAgICAgICAgICAg
dmFyIHhtbERvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoIjxyb290Lz4iLCAiYXBwbGljYXRp
b24veG1sIik7CisgICAgICAgICAgICB2YXIgcmVzdWx0RG9jID0geHNsdC50cmFuc2Zvcm1Ub0Rv
Y3VtZW50KHhtbERvYyk7CisgICAgICAgICAgICB2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5pbXBv
cnROb2RlKHJlc3VsdERvYy5kb2N1bWVudEVsZW1lbnQsIHRydWUpOworCisgICAgICAgICAgICB2
YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RpdicpOworICAgICAgICAgICAgZGl2
LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGZyYWdtZW50LCBkaXYpOworICAgICAgICB9CisgICAg
XV0+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9ImxvYWQoKSI+Cis8cD5UZXN0IGZv
ciA8YSBocmVmPSJodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDMxMyI+
YnVnIDEwMzEzPC9hPjoKK3hzbDppbXBvcnQgZG9lc24ndCB3b3JrIGluIHN0eWxlc2hlZXRzIGxv
YWRlZCB2aWEgWE1MSHR0cFJlcXVlc3QuPC9wPgorCis8ZGl2IGlkPSJkaXYiPkl0J3MgbmljZSB0
aGF0IHRoaXMgaGFzbid0IGNyYXNoZWQsIGJ1dCB0aGUgWFNMIHRyYW5zZm9ybWF0aW9uIGhhcyBm
YWlsZWQuPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3hz
bC90cmFuc2Zvcm0teGhyLWRvYy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC94c2wvdHJhbnNmb3JtLXhoci1kb2MtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA1OTkw
MCkKKysrIExheW91dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS14aHItZG9jLWV4cGVjdGVkLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDMgQEAKLUNPTlNPTEUgTUVTU0FHRTogbGluZSAy
MDogVHlwZUVycm9yOiBSZXN1bHQgb2YgZXhwcmVzc2lvbiAnZG9jJyBbdW5kZWZpbmVkXSBpcyBu
b3QgYW4gb2JqZWN0LgogVGVzdCBmb3IgYnVnIDEwMzEzOiB4c2w6aW1wb3J0IGRvZXNuJ3Qgd29y
ayBpbiBzdHlsZXNoZWV0cyBsb2FkZWQgdmlhIFhNTEh0dHBSZXF1ZXN0LgogCi1JdCdzIG5pY2Ug
dGhhdCB0aGlzIGhhc24ndCBjcmFzaGVkLCBidXQgdGhlIFhTTCB0cmFuc2Zvcm1hdGlvbiBoYXMg
ZmFpbGVkLgorU1VDQ0VTUwo=
</data>
<flag name="review"
          id="41171"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57113</attachid>
            <date>2010-05-26 10:15:25 -0700</date>
            <delta_ts>2010-06-04 07:15:16 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>bug10313_wip_0526.patch</filename>
            <type>text/plain</type>
            <size>42282</size>
            <attacher name="Andreas Wictor">andreas.wictor</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDE3MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjIgQEAKKzIwMTAtMDUtMjYgIEFuZHJlYXMgV2ljdG9yICA8YW5kcmVhcy53aWN0
b3JAeGNlcmlvbi5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgeHNsOmltcG9ydCBhbmQgZG9jdW1lbnQoKSBkb24ndCB3b3JrIGluIHN0eWxlc2hl
ZXRzIGxvYWRlZCB2aWEgWE1MSHR0cFJlcXVlc3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzEzCisKKyAgICAgICAgVGVzdHM6IGZhc3QveHNsL3Ry
YW5zZm9ybS1kb2NpbXBsLWRvYy54aHRtbAorICAgICAgICAgICAgICAgZmFzdC94c2wvdHJhbnNm
b3JtLWRvbXBhcnNlci1kb2MueGh0bWwKKyAgICAgICAgICAgICAgIGZhc3QveHNsL3RyYW5zZm9y
bS10cmFuc2Zvcm1lZC1kb2MueGh0bWwKKyAgICAgICAgICAgICAgIGh0dHAvdGVzdHMveHNsL3Ry
YW5zZm9ybS1mcmFtZWQtZG9jLnhodG1sCisgICAgICAgICAgICAgICBodHRwL3Rlc3RzL3hzbC90
cmFuc2Zvcm0teGhyLWRvYy1jcm9zcy1vcmlnaW4ueGh0bWwKKworICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTWFNMVFByb2Nlc3NvckNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNv
bnN0cnVjdFhTTFRQcm9jZXNzb3IpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFhT
TFRQcm9jZXNzb3JDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhYU0xUUHJvY2Vzc29y
Ojpjb25zdHJ1Y3RvckNhbGxiYWNrKToKKyAgICAgICAgKiBkb20vRE9NSW1wbGVtZW50YXRpb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NSW1wbGVtZW50YXRpb246OmNyZWF0ZURvY3VtZW50
KToKKyAgICAgICAgKiBkb20vRE9NSW1wbGVtZW50YXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6
OkRPTUltcGxlbWVudGF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NSW1wbGVt
ZW50YXRpb246OkRPTUltcGxlbWVudGF0aW9uKToKKyAgICAgICAgKiBkb20vRE9NSW1wbGVtZW50
YXRpb24uaWRsOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudDo6RG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6On5Eb2N1
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6aW1wbGVtZW50YXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNldE9yaWdpbkZyYW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50OjphcHBseVhTTFRyYW5zZm9ybSk6CisgICAgICAgICogZG9tL0RvY3VtZW50
Lmg6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6b3JpZ2luRnJhbWUpOgorICAgICAgICAq
IGxvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVxdWVzdCk6CisgICAgICAgICogcGFnZS9G
cmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6fkZyYW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lOjpyZWdpc3RlclN1YkRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lOjp1bnJlZ2lzdGVyU3ViRG9jdW1lbnQpOgorICAgICAgICAqIHBhZ2UvRnJhbWUuaDoKKyAg
ICAgICAgKiB4bWwvRE9NUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVBhcnNlcjo6
cGFyc2VGcm9tU3RyaW5nKToKKyAgICAgICAgKiB4bWwvRE9NUGFyc2VyLmg6CisgICAgICAgIChX
ZWJDb3JlOjpET01QYXJzZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpET01QYXJzZXI6
OkRPTVBhcnNlcik6CisgICAgICAgICogeG1sL0RPTVBhcnNlci5pZGw6CisgICAgICAgICogeG1s
L1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0Ojpy
ZXNwb25zZVhNTCk6CisgICAgICAgICogeG1sL1hTTEltcG9ydFJ1bGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6WFNMSW1wb3J0UnVsZTo6bG9hZFNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlhT
TEltcG9ydFJ1bGU6OmxvYWRTaGVldEFzeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OlhTTEltcG9y
dFJ1bGU6OmxvYWRTaGVldFN5bmMpOgorICAgICAgICAqIHhtbC9YU0xJbXBvcnRSdWxlLmg6Cisg
ICAgICAgICogeG1sL1hTTFRQcm9jZXNzb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFNMVFBy
b2Nlc3Nvcjo6Y3JlYXRlRG9jdW1lbnRGcm9tU291cmNlKToKKyAgICAgICAgKiB4bWwvWFNMVFBy
b2Nlc3Nvci5oOgorICAgICAgICAoV2ViQ29yZTo6WFNMVFByb2Nlc3Nvcjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlhTTFRQcm9jZXNzb3I6OlhTTFRQcm9jZXNzb3IpOgorICAgICAgICAq
IHhtbC9YU0xUUHJvY2Vzc29yTGlieHNsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkb2NMb2Fk
ZXJGdW5jKToKKwogMjAxMC0wNS0yNSAgVmFuZ2VsaXMgS29ra2V2aXMgIDx2YW5nZWxpc0BjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1hTTFRQcm9jZXNzb3JDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hTTFRQcm9jZXNzb3JDb25zdHJ1Y3Rvci5jcHAJ
KHJldmlzaW9uIDYwMTcxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hTTFRQcm9jZXNzb3JD
b25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1
ZGUgIkpTWFNMVFByb2Nlc3Nvci5oIgogI2luY2x1ZGUgIlhTTFRQcm9jZXNzb3IuaCIKKyNpbmNs
dWRlIDxydW50aW1lL0Vycm9yLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiB1c2luZyBu
YW1lc3BhY2UgSlNDOwpAQCAtNTAsNyArNTEsMTIgQEAgSlNYU0xUUHJvY2Vzc29yQ29uc3RydWN0
b3I6OkpTWFNMVFByb2Nlcwogc3RhdGljIEpTT2JqZWN0KiBjb25zdHJ1Y3RYU0xUUHJvY2Vzc29y
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGNvbnN0cnVjdG9yLCBjb25zdCBBcmdMaXN0JikK
IHsKICAgICBKU1hTTFRQcm9jZXNzb3JDb25zdHJ1Y3RvcioganNDb25zdHJ1Y3RvciA9IHN0YXRp
Y19jYXN0PEpTWFNMVFByb2Nlc3NvckNvbnN0cnVjdG9yKj4oY29uc3RydWN0b3IpOwotICAgIHJl
dHVybiBDUkVBVEVfRE9NX09CSkVDVF9XUkFQUEVSKGV4ZWMsIGpzQ29uc3RydWN0b3ItPmdsb2Jh
bE9iamVjdCgpLCBYU0xUUHJvY2Vzc29yLCBYU0xUUHJvY2Vzc29yOjpjcmVhdGUoKS5nZXQoKSk7
CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IGpzQ29uc3RydWN0b3ItPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVy
biB0aHJvd0Vycm9yKGV4ZWMsIFJlZmVyZW5jZUVycm9yLCAiWFNMVFByb2Nlc3NvciBjb25zdHJ1
Y3RvciBhc3NvY2lhdGVkIGRvY3VtZW50IGlzIHVuYXZhaWxhYmxlIik7CisKKyAgICBSZWZQdHI8
WFNMVFByb2Nlc3Nvcj4geHNsdFByb2Nlc3NvciA9IFhTTFRQcm9jZXNzb3I6OmNyZWF0ZShjb250
ZXh0KTsKKyAgICByZXR1cm4gQ1JFQVRFX0RPTV9PQkpFQ1RfV1JBUFBFUihleGVjLCBqc0NvbnN0
cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwgWFNMVFByb2Nlc3NvciwgeHNsdFByb2Nlc3Nvci5nZXQo
KSk7CiB9CiAKIENvbnN0cnVjdFR5cGUgSlNYU0xUUHJvY2Vzc29yQ29uc3RydWN0b3I6OmdldENv
bnN0cnVjdERhdGEoQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4WFNMVFByb2Nlc3NvckN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYU0xUUHJvY2Vzc29yQ3VzdG9tLmNwcAko
cmV2aXNpb24gNjAxNzEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhTTFRQcm9j
ZXNzb3JDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFhTTFRQcm9jZXNzb3I6OmNvbnN0
cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBJTkNfU1RB
VFMoIkRPTS5YU0xUUHJvY2Vzc29yLkNvbnN0cnVjdG9yIik7Ci0gICAgcmV0dXJuIFY4UHJveHk6
OmNvbnN0cnVjdERPTU9iamVjdDxYU0xUUHJvY2Vzc29yPihhcmdzLCAmaW5mbyk7CisgICAgcmV0
dXJuIFY4UHJveHk6OmNvbnN0cnVjdERPTU9iamVjdFdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0
PFhTTFRQcm9jZXNzb3I+KGFyZ3MsICZpbmZvKTsKIH0KIAogCkluZGV4OiBXZWJDb3JlL2RvbS9E
T01JbXBsZW1lbnRhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRE9NSW1wbGVt
ZW50YXRpb24uY3BwCShyZXZpc2lvbiA2MDE3MSkKKysrIFdlYkNvcmUvZG9tL0RPTUltcGxlbWVu
dGF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU2LDYgKzI1NiwxMiBAQCBQYXNzUmVmUHRy
PERvY3VtZW50PiBET01JbXBsZW1lbnRhdGlvbjo6CiAgICAgICAgIHJldHVybiAwOwogICAgIH0K
IAorICAgIGlmIChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQgJiYgbV9zY3JpcHRFeGVjdXRpb25D
b250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgRG9jdW1lbnQqIG9yaWdpbkRvYyA9IHN0
YXRpY19jYXN0PERvY3VtZW50Kj4obV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKKyAgICAgICAg
aWYgKG9yaWdpbkRvYy0+ZnJhbWUoKSkKKyAgICAgICAgICAgIG9yaWdpbkRvYy0+ZnJhbWUoKS0+
cmVnaXN0ZXJTdWJEb2N1bWVudChkb2MuZ2V0KCkpOworICAgIH0KKwogICAgIGlmIChkb2N0eXBl
KQogICAgICAgICBkb2MtPmFkZENoaWxkKGRvY3R5cGUpOwogICAgIGlmIChkb2N1bWVudEVsZW1l
bnQpCkluZGV4OiBXZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmgJKHJldmlzaW9uIDYwMTcxKQorKysgV2Vi
Q29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTggKzM0
LDIyIEBAIGNsYXNzIERvY3VtZW50OwogY2xhc3MgRG9jdW1lbnRUeXBlOwogY2xhc3MgRnJhbWU7
CiBjbGFzcyBIVE1MRG9jdW1lbnQ7CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xh
c3MgU3RyaW5nOwogCiB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCiBjbGFzcyBET01JbXBs
ZW1lbnRhdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPERPTUltcGxlbWVudGF0aW9uPiB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RE9NSW1wbGVtZW50YXRpb24+IGNyZWF0ZSgpIHsg
cmV0dXJuIGFkb3B0UmVmKG5ldyBET01JbXBsZW1lbnRhdGlvbik7IH0KKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxET01JbXBsZW1lbnRhdGlvbj4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IERPTUltcGxlbWVu
dGF0aW9uKGNvbnRleHQpKTsKKyAgICB9CiAKICAgICAvLyBET00gbWV0aG9kcyAmIGF0dHJpYnV0
ZXMgZm9yIERPTUltcGxlbWVudGF0aW9uCiAgICAgc3RhdGljIGJvb2wgaGFzRmVhdHVyZShjb25z
dCBTdHJpbmcmIGZlYXR1cmUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbik7CiAgICAgc3RhdGljIFBh
c3NSZWZQdHI8RG9jdW1lbnRUeXBlPiBjcmVhdGVEb2N1bWVudFR5cGUoY29uc3QgU3RyaW5nJiBx
dWFsaWZpZWROYW1lLCBjb25zdCBTdHJpbmcmIHB1YmxpY0lkLCBjb25zdCBTdHJpbmcgJnN5c3Rl
bUlkLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IGNy
ZWF0ZURvY3VtZW50KGNvbnN0IFN0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBTdHJpbmcmIHF1
YWxpZmllZE5hbWUsIERvY3VtZW50VHlwZSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVm
UHRyPERvY3VtZW50PiBjcmVhdGVEb2N1bWVudChjb25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwg
Y29uc3QgU3RyaW5nJiBxdWFsaWZpZWROYW1lLCBEb2N1bWVudFR5cGUqLCBFeGNlcHRpb25Db2Rl
Jik7CiAKICAgICBET01JbXBsZW1lbnRhdGlvbiogZ2V0SW50ZXJmYWNlKGNvbnN0IFN0cmluZyYg
ZmVhdHVyZSk7CiAKQEAgLTYyLDcgKzY2LDEwIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBp
c1RleHRNSU1FVHlwZShjb25zdCBTdHJpbmcmIE1JTUVUeXBlKTsKIAogcHJpdmF0ZToKLSAgICBE
T01JbXBsZW1lbnRhdGlvbigpIHsgfQorICAgIERPTUltcGxlbWVudGF0aW9uKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQpCisgICAgICAgIDogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
KGNvbnRleHQpIHsgfQorCisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9zY3JpcHRFeGVj
dXRpb25Db250ZXh0OwogfTsKIAogfSAvL25hbWVzcGFjZQpJbmRleDogV2ViQ29yZS9kb20vRE9N
SW1wbGVtZW50YXRpb24uaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RPTUltcGxlbWVu
dGF0aW9uLmlkbAkocmV2aXNpb24gNjAxNzEpCisrKyBXZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRh
dGlvbi5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTIwLDcgKzIwLDcgQEAKIAogbW9kdWxlIGNvcmUg
ewogCi0gICAgaW50ZXJmYWNlIERPTUltcGxlbWVudGF0aW9uIHsKKyAgICBpbnRlcmZhY2UgW0Nh
bGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIERPTUltcGxlbWVudGF0aW9uIHsKIAogICAg
ICAgICAvLyBET00gTGV2ZWwgMQogCkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiA2MDE3MSkKKysr
IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEwLDYgKzQxMCw3
IEBAIERvY3VtZW50OjpEb2N1bWVudChGcmFtZSogZnJhbWUsIGJvb2wgaXMKICAgICBtX2lnbm9y
ZUF1dG9mb2N1cyA9IGZhbHNlOwogCiAgICAgbV9mcmFtZSA9IGZyYW1lOworICAgIG1fb3JpZ2lu
RnJhbWUgPSAwOwogCiAgICAgbV9heE9iamVjdENhY2hlID0gMDsKICAgICAKQEAgLTU0Niw2ICs1
NDcsOSBAQCBEb2N1bWVudDo6fkRvY3VtZW50KCkKICAgICAgICAgbV9zdHlsZVNoZWV0cy0+ZG9j
dW1lbnREZXN0cm95ZWQoKTsKIAogICAgIG1fd2Vha1JlZmVyZW5jZS0+Y2xlYXIoKTsKKworICAg
IGlmIChtX29yaWdpbkZyYW1lKQorICAgICAgICBtX29yaWdpbkZyYW1lLT51bnJlZ2lzdGVyU3Vi
RG9jdW1lbnQodGhpcyk7CiB9CiAKICNpZiBVU0UoSlNDKQpAQCAtNjA4LDcgKzYxMiw3IEBAIHZv
aWQgRG9jdW1lbnQ6OnNldERvY1R5cGUoUGFzc1JlZlB0cjxEb2MKIERPTUltcGxlbWVudGF0aW9u
KiBEb2N1bWVudDo6aW1wbGVtZW50YXRpb24oKSBjb25zdAogewogICAgIGlmICghbV9pbXBsZW1l
bnRhdGlvbikKLSAgICAgICAgbV9pbXBsZW1lbnRhdGlvbiA9IERPTUltcGxlbWVudGF0aW9uOjpj
cmVhdGUoKTsKKyAgICAgICAgbV9pbXBsZW1lbnRhdGlvbiA9IERPTUltcGxlbWVudGF0aW9uOjpj
cmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKICAgICByZXR1cm4gbV9pbXBsZW1lbnRh
dGlvbi5nZXQoKTsKIH0KIApAQCAtMTI3MSw2ICsxMjc1LDE4IEBAIFNldHRpbmdzKiBEb2N1bWVu
dDo6c2V0dGluZ3MoKSBjb25zdAogICAgIHJldHVybiBtX2ZyYW1lID8gbV9mcmFtZS0+c2V0dGlu
Z3MoKSA6IDA7CiB9CiAKK3ZvaWQgRG9jdW1lbnQ6OnNldE9yaWdpbkZyYW1lKEZyYW1lKiBmcmFt
ZSkKK3sKKyAgICBtX29yaWdpbkZyYW1lID0gZnJhbWU7CisgICAgaWYgKG1fb3JpZ2luRnJhbWUp
IHsKKyAgICAgICAgRG9jdW1lbnQqIGRvYyA9IG1fb3JpZ2luRnJhbWUtPmRvY3VtZW50KCk7Cisg
ICAgICAgIGlmIChkb2MpIHsKKyAgICAgICAgICAgIG1fY29va2llVVJMID0gZG9jLT5jb29raWVV
UkwoKTsKKyAgICAgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnNldFNlY3VyaXR5T3Jp
Z2luKGRvYy0+c2VjdXJpdHlPcmlnaW4oKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKIFBhc3NS
ZWZQdHI8UmFuZ2U+IERvY3VtZW50OjpjcmVhdGVSYW5nZSgpCiB7CiAgICAgcmV0dXJuIFJhbmdl
OjpjcmVhdGUodGhpcyk7CkBAIC00MTU1LDcgKzQxNzEsNyBAQCB2b2lkIERvY3VtZW50OjpzZXRN
YXJrZXJzQWN0aXZlKE5vZGUqIG5vCiAKIHZvaWQgRG9jdW1lbnQ6OmFwcGx5WFNMVHJhbnNmb3Jt
KFByb2Nlc3NpbmdJbnN0cnVjdGlvbiogcGkpCiB7Ci0gICAgUmVmUHRyPFhTTFRQcm9jZXNzb3I+
IHByb2Nlc3NvciA9IFhTTFRQcm9jZXNzb3I6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxYU0xUUHJv
Y2Vzc29yPiBwcm9jZXNzb3IgPSBYU0xUUHJvY2Vzc29yOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpKTsKICAgICBwcm9jZXNzb3ItPnNldFhTTFN0eWxlU2hlZXQoc3RhdGljX2Nhc3Q8
WFNMU3R5bGVTaGVldCo+KHBpLT5zaGVldCgpKSk7CiAgICAgU3RyaW5nIHJlc3VsdE1JTUVUeXBl
OwogICAgIFN0cmluZyBuZXdTb3VyY2U7CkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDYwMTcxKQorKysg
V2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDYyLDYgKzQ2Miw5IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRy
b2xsZXIoKSBjb25zdDsgLy8gY2FuIGJlIE5VTEwKICNlbmRpZgogCisgICAgRnJhbWUqIG9yaWdp
bkZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW5GcmFtZTsgfSAvLyBjYW4gYmUgTlVMTAor
ICAgIHZvaWQgc2V0T3JpZ2luRnJhbWUoRnJhbWUqIGZyYW1lKTsKKwogICAgIFBhc3NSZWZQdHI8
UmFuZ2U+IGNyZWF0ZVJhbmdlKCk7CiAKICAgICBQYXNzUmVmUHRyPE5vZGVJdGVyYXRvcj4gY3Jl
YXRlTm9kZUl0ZXJhdG9yKE5vZGUqIHJvb3QsIHVuc2lnbmVkIHdoYXRUb1Nob3csCkBAIC0xMDI4
LDYgKzEwMzEsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9kaWRDYWxjdWxhdGVTdHlsZVNlbGVj
dG9yOwogCiAgICAgRnJhbWUqIG1fZnJhbWU7CisgICAgRnJhbWUqIG1fb3JpZ2luRnJhbWU7CiAg
ICAgT3duUHRyPERvY0xvYWRlcj4gbV9kb2NMb2FkZXI7CiAgICAgT3duUHRyPFRva2VuaXplcj4g
bV90b2tlbml6ZXI7CiAgICAgYm9vbCBtX3dlbGxGb3JtZWQ7CkluZGV4OiBXZWJDb3JlL2xvYWRl
ci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9h
ZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAJKHJldmlzaW9uIDYwMTcxKQorKysgV2Vi
Q29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzIxLDggKzMyMSwxMSBAQCB2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJl
cXVlCiAgICAgUmVzb3VyY2VFcnJvciBlcnJvcjsKICAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3Bv
bnNlOwogICAgIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciA9IHN0ZDo6bnVtZXJpY19saW1pdHM8
dW5zaWduZWQgbG9uZz46Om1heCgpOwotICAgIGlmIChtX2RvY3VtZW50LT5mcmFtZSgpKQotICAg
ICAgICBpZGVudGlmaWVyID0gbV9kb2N1bWVudC0+ZnJhbWUoKS0+bG9hZGVyKCktPmxvYWRSZXNv
dXJjZVN5bmNocm9ub3VzbHkocmVxdWVzdCwgc3RvcmVkQ3JlZGVudGlhbHMsIGVycm9yLCByZXNw
b25zZSwgZGF0YSk7CisKKyAgICBGcmFtZSogZnJhbWUgPSBtX2RvY3VtZW50LT5mcmFtZSgpID8g
bV9kb2N1bWVudC0+ZnJhbWUoKSA6IG1fZG9jdW1lbnQtPm9yaWdpbkZyYW1lKCk7CisKKyAgICBp
ZiAoZnJhbWUpCisgICAgICAgIGlkZW50aWZpZXIgPSBmcmFtZS0+bG9hZGVyKCktPmxvYWRSZXNv
dXJjZVN5bmNocm9ub3VzbHkocmVxdWVzdCwgc3RvcmVkQ3JlZGVudGlhbHMsIGVycm9yLCByZXNw
b25zZSwgZGF0YSk7CiAKICAgICAvLyBObyBleGNlcHRpb24gZm9yIGZpbGU6Ly8vIHJlc291cmNl
cywgc2VlIDxyZGFyOi8vcHJvYmxlbS80OTYyMjk4Pi4KICAgICAvLyBBbHNvLCBpZiB3ZSBoYXZl
IGFuIEhUVFAgcmVzcG9uc2UsIHRoZW4gaXQgd2Fzbid0IGEgbmV0d29yayBlcnJvciBpbiBmYWN0
LgpJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bh
Z2UvRnJhbWUuY3BwCShyZXZpc2lvbiA2MDE3MSkKKysrIFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE5NSw2ICsxOTUsMTAgQEAgRnJhbWU6On5GcmFtZSgpCiAgICAg
c2V0VmlldygwKTsKICAgICBsb2FkZXIoKS0+Y2FuY2VsQW5kQ2xlYXIoKTsKIAorICAgIGZvciAo
SGFzaFNldDxEb2N1bWVudCo+OjppdGVyYXRvciBpdCA9IG1fc3ViRG9jdW1lbnRzLmJlZ2luKCk7
CisgICAgICAgICBpdCAhPSBtX3N1YkRvY3VtZW50cy5lbmQoKTsgKytpdCkKKyAgICAgICAgKCpp
dCktPnNldE9yaWdpbkZyYW1lKDApOworCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBub3QgYmUg
ZG9pbmcgYWxsIHRoaXMgd29yayBpbnNpZGUgdGhlIGRlc3RydWN0b3IKIAogICAgIEFTU0VSVCgh
bV9saWZlU3VwcG9ydFRpbWVyLmlzQWN0aXZlKCkpOwpAQCAtMTY0OSw0ICsxNjUzLDIwIEBAIFN0
cmluZyBGcmFtZTo6bGF5ZXJUcmVlQXNUZXh0KCkgY29uc3QKICNlbmRpZgogfQogCit2b2lkIEZy
YW1lOjpyZWdpc3RlclN1YkRvY3VtZW50KERvY3VtZW50KiBkb2MpCit7CisgICAgaWYgKGRvYykg
eworICAgICAgICBkb2MtPnNldE9yaWdpbkZyYW1lKHRoaXMpOworICAgICAgICBtX3N1YkRvY3Vt
ZW50cy5hZGQoZG9jKTsKKyAgICB9Cit9CisKK3ZvaWQgRnJhbWU6OnVucmVnaXN0ZXJTdWJEb2N1
bWVudChEb2N1bWVudCogZG9jKQoreworICAgIGlmIChkb2MpIHsKKyAgICAgICAgZG9jLT5zZXRP
cmlnaW5GcmFtZSgwKTsKKyAgICAgICAgbV9zdWJEb2N1bWVudHMucmVtb3ZlKGRvYyk7CisgICAg
fQorfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRnJhbWUuaAkocmV2aXNpb24gNjAxNzEpCisr
KyBXZWJDb3JlL3BhZ2UvRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDYgKzEzMCw5IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgCiAgICAgICAgIFN0cmluZyBsYXllclRyZWVB
c1RleHQoKSBjb25zdDsKIAorICAgICAgICB2b2lkIHJlZ2lzdGVyU3ViRG9jdW1lbnQoRG9jdW1l
bnQqIGRvYyk7CisgICAgICAgIHZvaWQgdW5yZWdpc3RlclN1YkRvY3VtZW50KERvY3VtZW50KiBk
b2MpOworCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBpbmplY3RVc2VyU2NyaXB0c0Zvcldv
cmxkKERPTVdyYXBwZXJXb3JsZCosIGNvbnN0IFVzZXJTY3JpcHRWZWN0b3ImLCBVc2VyU2NyaXB0
SW5qZWN0aW9uVGltZSk7CiAKQEAgLTM2Miw2ICszNjUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpICAgICAgICAKICAgICAgICAgT3duUHRy
PFRpbGVkQmFja2luZ1N0b3JlPiBtX3RpbGVkQmFja2luZ1N0b3JlOwogI2VuZGlmCisKKyAgICAg
ICAgSGFzaFNldDxEb2N1bWVudCo+IG1fc3ViRG9jdW1lbnRzOwogICAgIH07CiAKICAgICBpbmxp
bmUgdm9pZCBGcmFtZTo6aW5pdCgpCkluZGV4OiBXZWJDb3JlL3htbC9ET01QYXJzZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUveG1sL0RPTVBhcnNlci5jcHAJKHJldmlzaW9uIDYwMTcxKQor
KysgV2ViQ29yZS94bWwvRE9NUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAsNiArMjAs
NyBAQAogI2luY2x1ZGUgIkRPTVBhcnNlci5oIgogCiAjaW5jbHVkZSAiRE9NSW1wbGVtZW50YXRp
b24uaCIKKyNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTMxLDYgKzMyLDEyIEBAIFBhc3NSZWZQdHI8RG9jdW1l
bnQ+IERPTVBhcnNlcjo6cGFyc2VGcm8KIAogICAgIFJlZlB0cjxEb2N1bWVudD4gZG9jID0gRE9N
SW1wbGVtZW50YXRpb246OmNyZWF0ZURvY3VtZW50KGNvbnRlbnRUeXBlLCAwLCBmYWxzZSk7CiAK
KyAgICBpZiAobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0ICYmIG1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgIERvY3VtZW50KiBvcmlnaW5Eb2MgPSBzdGF0
aWNfY2FzdDxEb2N1bWVudCo+KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CisgICAgICAgIGlm
IChvcmlnaW5Eb2MtPmZyYW1lKCkpCisgICAgICAgICAgICBvcmlnaW5Eb2MtPmZyYW1lKCktPnJl
Z2lzdGVyU3ViRG9jdW1lbnQoZG9jLmdldCgpKTsKKyAgICB9CisKICAgICBkb2MtPm9wZW4oKTsK
ICAgICBkb2MtPndyaXRlKHN0cik7CiAgICAgZG9jLT5maW5pc2hQYXJzaW5nKCk7CkluZGV4OiBX
ZWJDb3JlL3htbC9ET01QYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9ET01QYXJz
ZXIuaAkocmV2aXNpb24gNjAxNzEpCisrKyBXZWJDb3JlL3htbC9ET01QYXJzZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsMTIgKzI4LDE4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKICAg
ICBjbGFzcyBET01QYXJzZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxET01QYXJzZXI+IHsKICAgICBw
dWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPERPTVBhcnNlcj4gY3JlYXRlKCkgeyBy
ZXR1cm4gYWRvcHRSZWYobmV3IERPTVBhcnNlcik7IH0KLSAgICAgICAgCisgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPERPTVBhcnNlcj4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRE9NUGFy
c2VyKGNvbnRleHQpKTsKKyAgICAgICAgfQorCiAgICAgICAgIFBhc3NSZWZQdHI8RG9jdW1lbnQ+
IHBhcnNlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0ciwgY29uc3QgU3RyaW5nJiBjb250ZW50
VHlwZSk7CiAgICAgICAgIAogICAgIHByaXZhdGU6Ci0gICAgICAgIERPTVBhcnNlcigpIHsgfSAg
ICAgICAgCisgICAgICAgIERPTVBhcnNlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
KQorICAgICAgICAgICAgOiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoY29udGV4dCkgeyB9CisK
KyAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
OwogICAgIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUveG1sL0RPTVBhcnNlci5pZGwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS94bWwvRE9NUGFyc2VyLmlkbAkocmV2aXNpb24gNjAxNzEpCisrKyBXZWJD
b3JlL3htbC9ET01QYXJzZXIuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xOCw3ICsxOCwxMCBAQAog
ICovCiAKIG1vZHVsZSB4cGF0aCB7Ci0gICAgaW50ZXJmYWNlIFtDYW5CZUNvbnN0cnVjdGVkXSBE
T01QYXJzZXIgeworICAgIGludGVyZmFjZSBbCisgICAgICAgIENhbkJlQ29uc3RydWN0ZWQsCisg
ICAgICAgIENhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQKKyAgICBdIERPTVBhcnNlciB7
CiAgICAgICAgIERvY3VtZW50IHBhcnNlRnJvbVN0cmluZyhpbiBET01TdHJpbmcgc3RyLCBpbiBE
T01TdHJpbmcgY29udGVudFR5cGUpOwogICAgIH07CiB9CkluZGV4OiBXZWJDb3JlL3htbC9YTUxI
dHRwUmVxdWVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3Qu
Y3BwCShyZXZpc2lvbiA2MDE3MSkKKysrIFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkV2ZW50RXhjZXB0aW9u
LmgiCiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIK
KyNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUVFBQYXJzZXJzLmgiCiAjaW5jbHVkZSAi
SW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkluc3BlY3RvclRpbWVsaW5lQWdlbnQu
aCIKQEAgLTI0MSw2ICsyNDIsOSBAQCBEb2N1bWVudCogWE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNl
WE1MKCkgCiAgICAgICAgICAgICBtX3Jlc3BvbnNlWE1MID0gMDsKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIG1fcmVzcG9uc2VYTUwgPSBEb2N1bWVudDo6Y3JlYXRlKDApOworICAgICAg
ICAgICAgaWYgKGRvY3VtZW50KCktPmZyYW1lKCkpCisgICAgICAgICAgICAgICAgZG9jdW1lbnQo
KS0+ZnJhbWUoKS0+cmVnaXN0ZXJTdWJEb2N1bWVudChtX3Jlc3BvbnNlWE1MLmdldCgpKTsKKwog
ICAgICAgICAgICAgbV9yZXNwb25zZVhNTC0+b3BlbigpOwogICAgICAgICAgICAgbV9yZXNwb25z
ZVhNTC0+c2V0VVJMKG1fdXJsKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBTZXQgTGFzdC1Nb2Rp
ZmllZC4KSW5kZXg6IFdlYkNvcmUveG1sL1hTTEltcG9ydFJ1bGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUveG1sL1hTTEltcG9ydFJ1bGUuY3BwCShyZXZpc2lvbiA2MDE3MSkKKysrIFdlYkNv
cmUveG1sL1hTTEltcG9ydFJ1bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiwxMCBA
QAogCiAjaW5jbHVkZSAiQ2FjaGVkWFNMU3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIkRvY0xvYWRl
ci5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIlJl
c291cmNlRXJyb3IuaCIKKyNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCiAjaW5jbHVk
ZSAiWFNMU3R5bGVTaGVldC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03OCwxOCArODIs
MjggQEAgYm9vbCBYU0xJbXBvcnRSdWxlOjppc0xvYWRpbmcoKQogdm9pZCBYU0xJbXBvcnRSdWxl
Ojpsb2FkU2hlZXQoKQogewogICAgIERvY0xvYWRlciogZG9jTG9hZGVyID0gMDsKKyAgICBYU0xT
dHlsZVNoZWV0KiByb290WFNMID0gMDsKICAgICBTdHlsZUJhc2UqIHJvb3QgPSB0aGlzOwogICAg
IFN0eWxlQmFzZSogcGFyZW50OwogICAgIHdoaWxlICgocGFyZW50ID0gcm9vdC0+cGFyZW50KCkp
KQogICAgICAgICByb290ID0gcGFyZW50OwotICAgIGlmIChyb290LT5pc1hTTFN0eWxlU2hlZXQo
KSkKLSAgICAgICAgZG9jTG9hZGVyID0gc3RhdGljX2Nhc3Q8WFNMU3R5bGVTaGVldCo+KHJvb3Qp
LT5kb2NMb2FkZXIoKTsKKyAgICBpZiAocm9vdC0+aXNYU0xTdHlsZVNoZWV0KCkpIHsKKyAgICAg
ICAgcm9vdFhTTCA9IHN0YXRpY19jYXN0PFhTTFN0eWxlU2hlZXQqPihyb290KTsKKyAgICAgICAg
ZG9jTG9hZGVyID0gcm9vdFhTTC0+ZG9jTG9hZGVyKCk7CisgICAgfQogICAgIAogICAgIFN0cmlu
ZyBhYnNIcmVmID0gbV9zdHJIcmVmOworICAgIE5vZGUqIG93bmVyTm9kZSA9IHJvb3RYU0wtPm93
bmVyTm9kZSgpOwogICAgIFhTTFN0eWxlU2hlZXQqIHBhcmVudFNoZWV0ID0gcGFyZW50U3R5bGVT
aGVldCgpOwogICAgIGlmICghcGFyZW50U2hlZXQtPmZpbmFsVVJMKCkuaXNOdWxsKCkpCiAgICAg
ICAgIC8vIHVzZSBwYXJlbnQgc3R5bGVoZWV0J3MgVVJMIGFzIHRoZSBiYXNlIFVSTAogICAgICAg
ICBhYnNIcmVmID0gS1VSTChwYXJlbnRTaGVldC0+ZmluYWxVUkwoKSwgbV9zdHJIcmVmKS5zdHJp
bmcoKTsKKyAgICBlbHNlIGlmIChvd25lck5vZGUpIHsKKyAgICAgICAgLy8gdXNlIGJhc2UgdXJs
IGZyb20gb3JpZ2luRnJhbWUncyBkb2N1bWVudCB3aGVuIHBhcmVudCBzdHlsZXNoZWV0IGRvbnQg
aGF2ZSBhbiBmaW5hbCB1cmwKKyAgICAgICAgLy8gdGhpcyBjYW4gZm9yIGV4YW1wbGUgaGFwcGVu
IHdoZW4gdGhlIHN0eWxlc2hlZXQgaXMgY3JlYXRlZCB3aXRoIERPTVBhcnNlci5wYXJzZUZyb21T
dHJpbmcKKyAgICAgICAgaWYgKEZyYW1lKiBvcmlnaW5GcmFtZSA9IG93bmVyTm9kZS0+ZG9jdW1l
bnQoKS0+b3JpZ2luRnJhbWUoKSkKKyAgICAgICAgICAgIGFic0hyZWYgPSBLVVJMKG9yaWdpbkZy
YW1lLT5kb2N1bWVudCgpLT5iYXNlVVJMKCksIG1fc3RySHJlZikuc3RyaW5nKCk7CisgICAgfQog
ICAgIAogICAgIC8vIENoZWNrIGZvciBhIGN5Y2xlIGluIG91ciBpbXBvcnQgY2hhaW4uICBJZiB3
ZSBlbmNvdW50ZXIgYSBzdHlsZXNoZWV0CiAgICAgLy8gaW4gb3VyIHBhcmVudCBjaGFpbiB3aXRo
IHRoZSBzYW1lIFVSTCwgdGhlbiBqdXN0IGJhaWwuCkBAIC05NywxMiArMTExLDIwIEBAIHZvaWQg
WFNMSW1wb3J0UnVsZTo6bG9hZFNoZWV0KCkKICAgICAgICAgaWYgKHBhcmVudC0+aXNYU0xTdHls
ZVNoZWV0KCkgJiYgYWJzSHJlZiA9PSBzdGF0aWNfY2FzdDxYU0xTdHlsZVNoZWV0Kj4ocGFyZW50
KS0+ZmluYWxVUkwoKS5zdHJpbmcoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
CisKKyAgICBpZiAob3duZXJOb2RlICYmIG93bmVyTm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpQ
Uk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREUpCisgICAgICAgIGxvYWRTaGVldEFzeW5jKGRvY0xv
YWRlciwgYWJzSHJlZik7CisgICAgZWxzZQorICAgICAgICBsb2FkU2hlZXRTeW5jKGRvY0xvYWRl
ciwgYWJzSHJlZik7Cit9CisKK3ZvaWQgWFNMSW1wb3J0UnVsZTo6bG9hZFNoZWV0QXN5bmMoRG9j
TG9hZGVyKiBkb2NMb2FkZXIsIGNvbnN0IFN0cmluZyYgYWJzSHJlZikKK3sKICAgICBtX2NhY2hl
ZFNoZWV0ID0gZG9jTG9hZGVyLT5yZXF1ZXN0WFNMU3R5bGVTaGVldChhYnNIcmVmKTsKLSAgICAK
KwogICAgIGlmIChtX2NhY2hlZFNoZWV0KSB7CiAgICAgICAgIG1fY2FjaGVkU2hlZXQtPmFkZENs
aWVudCh0aGlzKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gSWYgdGhlIGltcG9ydGVkIHNoZWV0
IGlzIGluIHRoZSBjYWNoZSwgdGhlbiBzZXRYU0xTdHlsZVNoZWV0IGdldHMgY2FsbGVkLAogICAg
ICAgICAvLyBhbmQgdGhlIHNoZWV0IGV2ZW4gZ2V0cyBwYXJzZWQgKHZpYSBwYXJzZVN0cmluZyku
ICBJbiB0aGlzIGNhc2Ugd2UgaGF2ZQogICAgICAgICAvLyBsb2FkZWQgKGV2ZW4gaWYgb3VyIHN1
YnJlc291cmNlcyBoYXZlbid0KSwgc28gaWYgd2UgaGF2ZSBhIHN0eWxlc2hlZXQgYWZ0ZXIKQEAg
LTExMiw2ICsxMzQsMzkgQEAgdm9pZCBYU0xJbXBvcnRSdWxlOjpsb2FkU2hlZXQoKQogICAgIH0K
IH0KIAordm9pZCBYU0xJbXBvcnRSdWxlOjpsb2FkU2hlZXRTeW5jKERvY0xvYWRlciogZG9jTG9h
ZGVyLCBjb25zdCBTdHJpbmcmIGFic0hyZWYpCit7CisgICAgUmVzb3VyY2VFcnJvciBlcnJvcjsK
KyAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOworICAgIFZlY3RvcjxjaGFyPiBkYXRhOwor
CisgICAgRG9jdW1lbnQqIGRvYyA9IGRvY0xvYWRlci0+ZG9jKCk7CisgICAgRnJhbWUqIGZyYW1l
ID0gZG9jLT5mcmFtZSgpID8gZG9jLT5mcmFtZSgpIDogZG9jLT5vcmlnaW5GcmFtZSgpOworCisg
ICAgS1VSTCB1cmwoUGFyc2VkVVJMU3RyaW5nLCBhYnNIcmVmKTsKKworICAgIGJvb2wgcmVxdWVz
dEFsbG93ZWQgPSBmcmFtZSAmJiBkb2MtPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QodXJs
KTsKKyAgICBpZiAocmVxdWVzdEFsbG93ZWQpIHsKKyAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5s
b2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KHVybCwgQWxsb3dTdG9yZWRDcmVkZW50aWFscywgZXJy
b3IsIHJlc3BvbnNlLCBkYXRhKTsKKyAgICAgICAgcmVxdWVzdEFsbG93ZWQgPSBkb2MtPnNlY3Vy
aXR5T3JpZ2luKCktPmNhblJlcXVlc3QocmVzcG9uc2UudXJsKCkpOworICAgIH0KKyAgICBpZiAo
IXJlcXVlc3RBbGxvd2VkKSB7CisgICAgICAgIGRhdGEuY2xlYXIoKTsKKyAgICAgICAgZG9jTG9h
ZGVyLT5wcmludEFjY2Vzc0RlbmllZE1lc3NhZ2UodXJsKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChlcnJvci5pc051bGwoKSkgeworICAgICAgICBSZWZQdHI8VGV4dFJlc291
cmNlRGVjb2Rlcj4gZGVjb2RlciA9IFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZSgidGV4dC94
c2wiKTsKKyAgICAgICAgU3RyaW5nIGVuY29kaW5nID0gcmVzcG9uc2UudGV4dEVuY29kaW5nTmFt
ZSgpOworICAgICAgICBpZiAoIWVuY29kaW5nLmlzTnVsbCgpKQorICAgICAgICAgICAgZGVjb2Rl
ci0+c2V0RW5jb2RpbmcoZW5jb2RpbmcsIFRleHRSZXNvdXJjZURlY29kZXI6OkVuY29kaW5nRnJv
bUhUVFBIZWFkZXIpOworCisgICAgICAgIFN0cmluZyBzaGVldChkZWNvZGVyLT5kZWNvZGUoZGF0
YS5kYXRhKCksIGRhdGEuc2l6ZSgpKSk7CisgICAgICAgIHNldFhTTFN0eWxlU2hlZXQoYWJzSHJl
ZiwgcmVzcG9uc2UudXJsKCksIHNoZWV0KTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShYU0xUKQpJbmRleDogV2ViQ29yZS94bWwvWFNMSW1w
b3J0UnVsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1sL1hTTEltcG9ydFJ1bGUuaAkocmV2
aXNpb24gNjAxNzEpCisrKyBXZWJDb3JlL3htbC9YU0xJbXBvcnRSdWxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU4LDcgKzU4LDEwIEBAIHByaXZhdGU6CiAKICAgICAvLyBmcm9tIENhY2hlZFJlc291
cmNlQ2xpZW50CiAgICAgdmlydHVhbCB2b2lkIHNldFhTTFN0eWxlU2hlZXQoY29uc3QgU3RyaW5n
JiBocmVmLCBjb25zdCBLVVJMJiBiYXNlVVJMLCBjb25zdCBTdHJpbmcmIHNoZWV0KTsKLSAgICAK
KworICAgIHZvaWQgbG9hZFNoZWV0QXN5bmMoRG9jTG9hZGVyKiBkb2NMb2FkZXIsIGNvbnN0IFN0
cmluZyYgYWJzSHJlZik7CisgICAgdm9pZCBsb2FkU2hlZXRTeW5jKERvY0xvYWRlciogZG9jTG9h
ZGVyLCBjb25zdCBTdHJpbmcmIGFic0hyZWYpOworCiAgICAgU3RyaW5nIG1fc3RySHJlZjsKICAg
ICBSZWZQdHI8WFNMU3R5bGVTaGVldD4gbV9zdHlsZVNoZWV0OwogICAgIENhY2hlZFJlc291cmNl
SGFuZGxlPENhY2hlZFhTTFN0eWxlU2hlZXQ+IG1fY2FjaGVkU2hlZXQ7CkluZGV4OiBXZWJDb3Jl
L3htbC9YU0xUUHJvY2Vzc29yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YU0xUUHJv
Y2Vzc29yLmNwcAkocmV2aXNpb24gNjAxNzEpCisrKyBXZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsNiArODEsMTAgQEAgUGFzc1JlZlB0cjxEb2N1bWVu
dD4gWFNMVFByb2Nlc3Nvcjo6Y3JlYQogICAgICAgICAgICAgdmlldy0+Y2xlYXIoKTsKICAgICAg
ICAgcmVzdWx0LT5zZXRUcmFuc2Zvcm1Tb3VyY2VEb2N1bWVudChmcmFtZS0+ZG9jdW1lbnQoKSk7
CiAgICAgICAgIGZyYW1lLT5zZXREb2N1bWVudChyZXN1bHQpOworICAgIH0gZWxzZSBpZiAobV9z
Y3JpcHRFeGVjdXRpb25Db250ZXh0ICYmIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNEb2N1
bWVudCgpKSB7CisgICAgICAgIERvY3VtZW50KiBvcmlnaW5Eb2MgPSBzdGF0aWNfY2FzdDxEb2N1
bWVudCo+KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CisgICAgICAgIGlmIChvcmlnaW5Eb2Mt
PmZyYW1lKCkpCisgICAgICAgICAgICBvcmlnaW5Eb2MtPmZyYW1lKCktPnJlZ2lzdGVyU3ViRG9j
dW1lbnQocmVzdWx0LmdldCgpKTsKICAgICB9CiAKICAgICBpZiAoc291cmNlSXNEb2N1bWVudCkK
SW5kZXg6IFdlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3htbC9YU0xUUHJvY2Vzc29yLmgJKHJldmlzaW9uIDYwMTcxKQorKysgV2ViQ29yZS94bWwvWFNM
VFByb2Nlc3Nvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0MywxMCBAQCBjbGFzcyBEb2N1
bWVudEZyYWdtZW50OwogCiBjbGFzcyBYU0xUUHJvY2Vzc29yIDogcHVibGljIFJlZkNvdW50ZWQ8
WFNMVFByb2Nlc3Nvcj4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFhTTFRQcm9j
ZXNzb3I+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBYU0xUUHJvY2Vzc29yKTsgfQor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFhTTFRQcm9jZXNzb3I+IGNyZWF0ZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBY
U0xUUHJvY2Vzc29yKGNvbnRleHQpKTsKKyAgICB9CiAKICAgICB2b2lkIHNldFhTTFN0eWxlU2hl
ZXQoUGFzc1JlZlB0cjxYU0xTdHlsZVNoZWV0PiBzdHlsZVNoZWV0KSB7IG1fc3R5bGVzaGVldCA9
IHN0eWxlU2hlZXQ7IH0KICAgICBib29sIHRyYW5zZm9ybVRvU3RyaW5nKE5vZGUqIHNvdXJjZSwg
U3RyaW5nJiByZXN1bHRNSU1FVHlwZSwgU3RyaW5nJiByZXN1bHRTdHJpbmcsIFN0cmluZyYgcmVz
dWx0RW5jb2RpbmcpOwpAQCAtNzIsOCArNzUsMTAgQEAgcHVibGljOgogICAgIHR5cGVkZWYgSGFz
aE1hcDxTdHJpbmcsIFN0cmluZz4gUGFyYW1ldGVyTWFwOwogCiBwcml2YXRlOgotICAgIFhTTFRQ
cm9jZXNzb3IoKSB7IH0KKyAgICBYU0xUUHJvY2Vzc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQpCisgICAgICAgIDogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KGNvbnRleHQpIHsg
fQogCisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
OwogICAgIFJlZlB0cjxYU0xTdHlsZVNoZWV0PiBtX3N0eWxlc2hlZXQ7CiAgICAgUmVmUHRyPE5v
ZGU+IG1fc3R5bGVzaGVldFJvb3ROb2RlOwogICAgIFBhcmFtZXRlck1hcCBtX3BhcmFtZXRlcnM7
CkluZGV4OiBXZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yTGlieHNsdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwCShyZXZpc2lvbiA2MDE3MSkK
KysrIFdlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTE3LDEwICsxMTcsMTMgQEAgc3RhdGljIHhtbERvY1B0ciBkb2NMb2FkZXJGdW5jKGNvbnN0
IHhtbAogCiAgICAgICAgIFZlY3RvcjxjaGFyPiBkYXRhOwogCi0gICAgICAgIGJvb2wgcmVxdWVz
dEFsbG93ZWQgPSBnbG9iYWxEb2NMb2FkZXItPmZyYW1lKCkgJiYgZ2xvYmFsRG9jTG9hZGVyLT5k
b2MoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdCh1cmwpOworICAgICAgICBEb2N1bWVu
dCogZG9jdW1lbnQgPSBnbG9iYWxEb2NMb2FkZXItPmRvYygpOworICAgICAgICBGcmFtZSogZnJh
bWUgPSBkb2N1bWVudC0+ZnJhbWUoKSA/IGRvY3VtZW50LT5mcmFtZSgpIDogZG9jdW1lbnQtPm9y
aWdpbkZyYW1lKCk7CisKKyAgICAgICAgYm9vbCByZXF1ZXN0QWxsb3dlZCA9IGZyYW1lICYmIGRv
Y3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHVybCk7CiAgICAgICAgIGlmIChy
ZXF1ZXN0QWxsb3dlZCkgewotICAgICAgICAgICAgZ2xvYmFsRG9jTG9hZGVyLT5mcmFtZSgpLT5s
b2FkZXIoKS0+bG9hZFJlc291cmNlU3luY2hyb25vdXNseSh1cmwsIEFsbG93U3RvcmVkQ3JlZGVu
dGlhbHMsIGVycm9yLCByZXNwb25zZSwgZGF0YSk7Ci0gICAgICAgICAgICByZXF1ZXN0QWxsb3dl
ZCA9IGdsb2JhbERvY0xvYWRlci0+ZG9jKCktPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3Qo
cmVzcG9uc2UudXJsKCkpOworICAgICAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5sb2FkUmVzb3Vy
Y2VTeW5jaHJvbm91c2x5KHVybCwgQWxsb3dTdG9yZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3Bv
bnNlLCBkYXRhKTsKKyAgICAgICAgICAgIHJlcXVlc3RBbGxvd2VkID0gZG9jdW1lbnQtPnNlY3Vy
aXR5T3JpZ2luKCktPmNhblJlcXVlc3QocmVzcG9uc2UudXJsKCkpOwogICAgICAgICB9CiAgICAg
ICAgIGlmICghcmVxdWVzdEFsbG93ZWQpIHsKICAgICAgICAgICAgIGRhdGEuY2xlYXIoKTsKSW5k
ZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDYwMTcxKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTAtMDUtMjYgIEFuZHJlYXMgV2ljdG9yICA8YW5k
cmVhcy53aWN0b3JAeGNlcmlvbi5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgeHNsOmltcG9ydCBhbmQgZG9jdW1lbnQoKSBkb24ndCB3b3JrIGlu
IHN0eWxlc2hlZXRzIGxvYWRlZCB2aWEgWE1MSHR0cFJlcXVlc3QKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzEzCisKKyAgICAgICAgKiBmYXN0L3hz
bC90cmFuc2Zvcm0tZG9jaW1wbC1kb2MtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L3hzbC90cmFuc2Zvcm0tZG9jaW1wbC1kb2MueGh0bWw6IEFkZGVkLgorICAgICAgICAqIGZh
c3QveHNsL3RyYW5zZm9ybS1kb21wYXJzZXItZG9jLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogZmFzdC94c2wvdHJhbnNmb3JtLWRvbXBhcnNlci1kb2MueGh0bWw6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QveHNsL3RyYW5zZm9ybS10cmFuc2Zvcm1lZC1kb2MtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L3hzbC90cmFuc2Zvcm0tdHJhbnNmb3JtZWQtZG9jLnhodG1s
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3hzbC90cmFuc2Zvcm0teGhyLWRvYy1leHBlY3RlZC50
eHQ6CisgICAgICAgICogaHR0cC90ZXN0cy94c2w6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVz
dHMveHNsL3Jlc291cmNlczogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy94c2wvcmVzb3Vy
Y2VzL3RyYW5zZm9ybS1mcmFtZWQtc3ViZnJhbWUxLnhodG1sOiBBZGRlZC4KKyAgICAgICAgKiBo
dHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMvdHJhbnNmb3JtLWZyYW1lZC1zdWJmcmFtZTIueGh0bWw6
IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMveHNsL3Jlc291cmNlcy94aHItZG9jLWNyb3Nz
LW9yaWdpbi54c2w6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMveHNsL3Jlc291cmNlcy94
aHItZG9jLWltcG9ydGVkLnhzbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy94c2wvcmVz
b3VyY2VzL3hoci1kb2MueG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3hzbC9yZXNv
dXJjZXMveGhyLWRvYy54c2w6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMveHNsL3RyYW5z
Zm9ybS1mcmFtZWQtZG9jLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0
cy94c2wvdHJhbnNmb3JtLWZyYW1lZC1kb2MueGh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAv
dGVzdHMveHNsL3RyYW5zZm9ybS14aHItZG9jLWNyb3NzLW9yaWdpbi1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMveHNsL3RyYW5zZm9ybS14aHItZG9jLWNyb3NzLW9y
aWdpbi54aHRtbDogQWRkZWQuCisKIDIwMTAtMDUtMjUgIEFudG9uaW8gR29tZXMgIDx0b25pa2l0
b29Ad2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIGF0dGVtcHQgdG8gbWFrZSBUaWdl
ciBib3QgZ3JlZW4uCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0tZG9jaW1w
bC1kb2MtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QveHNsL3Ry
YW5zZm9ybS1kb2NpbXBsLWRvYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0tZG9jaW1wbC1kb2MtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDMgQEAKK1Rlc3QgZm9yIGJ1ZyAxMDMxMzogeHNsOmltcG9ydCBkb2Vz
bid0IHdvcmsgaW4gc3R5bGVzaGVldHMgbG9hZGVkIHZpYSBYTUxIdHRwUmVxdWVzdC4KKworU1VD
Q0VTUwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC94c2wvdHJhbnNmb3JtLWRvY2ltcGwtZG9jLnho
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS1kb2NpbXBs
LWRvYy54aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9y
bS1kb2NpbXBsLWRvYy54aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NSBAQAorPD94bWwg
dmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAi
LS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMTEv
RFREL3hodG1sMTEuZHRkIj4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3ho
dG1sIiB4bWw6bGFuZz0iZW4iPgorPGhlYWQ+CisgICAgPHRpdGxlPnhzbCBpbXBvcnQgdGVzdDwv
dGl0bGU+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhW0NEQVRBWworICAg
ICAgICBmdW5jdGlvbiBsb2FkKCkgeworICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNU
ZXh0KCk7CisKKyAgICAgICAgICAgIHZhciB4c2x0TlMgPSAiaHR0cDovL3d3dy53My5vcmcvMTk5
OS9YU0wvVHJhbnNmb3JtIjsKKyAgICAgICAgICAgIHZhciB4c2x0RG9jID0gZG9jdW1lbnQuaW1w
bGVtZW50YXRpb24uY3JlYXRlRG9jdW1lbnQoeHNsdE5TLCAic3R5bGVzaGVldCIsIG51bGwpOwor
ICAgICAgICAgICAgdmFyIHJvb3RFbGVtID0geHNsdERvYy5kb2N1bWVudEVsZW1lbnQ7CisgICAg
ICAgICAgICByb290RWxlbS5zZXRBdHRyaWJ1dGUoInZlcnNpb24iLCAiMS4wIik7CisKKyAgICAg
ICAgICAgIHZhciBpbXBvcnRFbGVtID0geHNsdERvYy5jcmVhdGVFbGVtZW50TlMoeHNsdE5TLCAi
aW1wb3J0Iik7CisgICAgICAgICAgICBpbXBvcnRFbGVtLnNldEF0dHJpYnV0ZSgiaHJlZiIsICJy
ZXNvdXJjZXMveGhyLWRvYy1pbXBvcnRlZC54c2wiKTsKKyAgICAgICAgICAgIHJvb3RFbGVtLmFw
cGVuZENoaWxkKGltcG9ydEVsZW0pOworCisgICAgICAgICAgICB2YXIgdGVtcGxhdGVFbGVtID0g
eHNsdERvYy5jcmVhdGVFbGVtZW50TlMoeHNsdE5TLCAidGVtcGxhdGUiKTsKKyAgICAgICAgICAg
IHRlbXBsYXRlRWxlbS5zZXRBdHRyaWJ1dGUoIm1hdGNoIiwgIi9yb290Iik7CisgICAgICAgICAg
ICB2YXIgY2FsbEVsZW0gPSB4c2x0RG9jLmNyZWF0ZUVsZW1lbnROUyh4c2x0TlMsICJjYWxsLXRl
bXBsYXRlIik7CisgICAgICAgICAgICBjYWxsRWxlbS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCAid29y
a3MiKTsKKyAgICAgICAgICAgIHRlbXBsYXRlRWxlbS5hcHBlbmRDaGlsZChjYWxsRWxlbSk7Cisg
ICAgICAgICAgICByb290RWxlbS5hcHBlbmRDaGlsZCh0ZW1wbGF0ZUVsZW0pOworCisgICAgICAg
ICAgICB2YXIgeHNsdCA9IG5ldyBYU0xUUHJvY2Vzc29yKCk7CisgICAgICAgICAgICB4c2x0Lmlt
cG9ydFN0eWxlc2hlZXQoeHNsdERvYyk7CisKKyAgICAgICAgICAgIHZhciB4bWxEb2MgPSBkb2N1
bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVEb2N1bWVudCgiIiwgInJvb3QiLCBudWxsKTsKKyAg
ICAgICAgICAgIHZhciByZXN1bHREb2MgPSB4c2x0LnRyYW5zZm9ybVRvRG9jdW1lbnQoeG1sRG9j
KTsKKyAgICAgICAgICAgIHZhciBmcmFnbWVudCA9IGRvY3VtZW50LmltcG9ydE5vZGUocmVzdWx0
RG9jLmRvY3VtZW50RWxlbWVudCwgdHJ1ZSk7CisKKyAgICAgICAgICAgIHZhciBkaXYgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgnZGl2Jyk7CisgICAgICAgICAgICBkaXYucGFyZW50Tm9kZS5y
ZXBsYWNlQ2hpbGQoZnJhZ21lbnQsIGRpdik7CisgICAgICAgIH0KKyAgICBdXT48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5IG9ubG9hZD0ibG9hZCgpIj4KKzxwPlRlc3QgZm9yIDxhIGhyZWY9Imh0
dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzEzIj5idWcgMTAzMTM8L2E+
OgoreHNsOmltcG9ydCBkb2Vzbid0IHdvcmsgaW4gc3R5bGVzaGVldHMgbG9hZGVkIHZpYSBYTUxI
dHRwUmVxdWVzdC48L3A+CisKKzxkaXYgaWQ9ImRpdiI+SXQncyBuaWNlIHRoYXQgdGhpcyBoYXNu
J3QgY3Jhc2hlZCwgYnV0IHRoZSBYU0wgdHJhbnNmb3JtYXRpb24gaGFzIGZhaWxlZC48L2Rpdj4K
KzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS1k
b21wYXJzZXItZG9jLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L3hzbC90cmFuc2Zvcm0tZG9tcGFyc2VyLWRvYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0tZG9tcGFyc2VyLWRvYy1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorVGVzdCBmb3IgYnVnIDEwMzEzOiB4c2w6
aW1wb3J0IGRvZXNuJ3Qgd29yayBpbiBzdHlsZXNoZWV0cyBsb2FkZWQgdmlhIFhNTEh0dHBSZXF1
ZXN0LgorCitTVUNDRVNTCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0tZG9t
cGFyc2VyLWRvYy54aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3hzbC90cmFu
c2Zvcm0tZG9tcGFyc2VyLWRvYy54aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zh
c3QveHNsL3RyYW5zZm9ybS1kb21wYXJzZXItZG9jLnhodG1sCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDQxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCFET0NU
WVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53
My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwxMS5kdGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93
d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiI+Cis8aGVhZD4KKyAgICA8dGl0bGU+
eHNsIGltcG9ydCB0ZXN0PC90aXRsZT4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw
dCI+PCFbQ0RBVEFbCisgICAgICAgIGZ1bmN0aW9uIGxvYWQoKSB7CisgICAgICAgICAgICBpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworICAgICAgICAgICAgdmFyIHhzbHRTdHIgPQorICAg
ICAgICAgICAgICAgICc8eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIicgKworICAgICAgICAg
ICAgICAgICcgIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3Jt
IicgKworICAgICAgICAgICAgICAgICcgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3ho
dG1sIj4nICsKKyAgICAgICAgICAgICAgICAnPHhzbDppbXBvcnQgaHJlZj0icmVzb3VyY2VzL3ho
ci1kb2MtaW1wb3J0ZWQueHNsIiAvPicgKworICAgICAgICAgICAgICAgICc8eHNsOnRlbXBsYXRl
IG1hdGNoPSIvcm9vdCI+JyArCisgICAgICAgICAgICAgICAgJyAgICA8eHNsOmNhbGwtdGVtcGxh
dGUgbmFtZT0id29ya3MiIC8+JyArCisgICAgICAgICAgICAgICAgJzwveHNsOnRlbXBsYXRlPicg
KworICAgICAgICAgICAgICAgICc8L3hzbDpzdHlsZXNoZWV0Pic7CisKKyAgICAgICAgICAgIHZh
ciBwYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7CisgICAgICAgICAgICB2YXIgeHNsdCA9IG5ldyBY
U0xUUHJvY2Vzc29yKCk7CisgICAgICAgICAgICB2YXIgeHNsdERvYyA9IHBhcnNlci5wYXJzZUZy
b21TdHJpbmcoeHNsdFN0ciwgImFwcGxpY2F0aW9uL3htbCIpOworICAgICAgICAgICAgeHNsdC5p
bXBvcnRTdHlsZXNoZWV0KHhzbHREb2MpOworCisgICAgICAgICAgICB2YXIgeG1sRG9jID0gcGFy
c2VyLnBhcnNlRnJvbVN0cmluZygiPHJvb3QvPiIsICJhcHBsaWNhdGlvbi94bWwiKTsKKyAgICAg
ICAgICAgIHZhciByZXN1bHREb2MgPSB4c2x0LnRyYW5zZm9ybVRvRG9jdW1lbnQoeG1sRG9jKTsK
KyAgICAgICAgICAgIHZhciBmcmFnbWVudCA9IGRvY3VtZW50LmltcG9ydE5vZGUocmVzdWx0RG9j
LmRvY3VtZW50RWxlbWVudCwgdHJ1ZSk7CisKKyAgICAgICAgICAgIHZhciBkaXYgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnZGl2Jyk7CisgICAgICAgICAgICBkaXYucGFyZW50Tm9kZS5yZXBs
YWNlQ2hpbGQoZnJhZ21lbnQsIGRpdik7CisgICAgICAgIH0KKyAgICBdXT48L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5IG9ubG9hZD0ibG9hZCgpIj4KKzxwPlRlc3QgZm9yIDxhIGhyZWY9Imh0dHA6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzEzIj5idWcgMTAzMTM8L2E+Ogor
eHNsOmltcG9ydCBkb2Vzbid0IHdvcmsgaW4gc3R5bGVzaGVldHMgbG9hZGVkIHZpYSBYTUxIdHRw
UmVxdWVzdC48L3A+CisKKzxkaXYgaWQ9ImRpdiI+SXQncyBuaWNlIHRoYXQgdGhpcyBoYXNuJ3Qg
Y3Jhc2hlZCwgYnV0IHRoZSBYU0wgdHJhbnNmb3JtYXRpb24gaGFzIGZhaWxlZC48L2Rpdj4KKzwv
Ym9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS10cmFu
c2Zvcm1lZC1kb2MtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
eHNsL3RyYW5zZm9ybS10cmFuc2Zvcm1lZC1kb2MtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC94c2wvdHJhbnNmb3JtLXRyYW5zZm9ybWVkLWRvYy1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorVGVzdCBmb3IgYnVnIDEwMzEzOiB4
c2w6aW1wb3J0IGRvZXNuJ3Qgd29yayBpbiBzdHlsZXNoZWV0cyBsb2FkZWQgdmlhIFhNTEh0dHBS
ZXF1ZXN0LgorCitTVUNDRVNTCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0t
dHJhbnNmb3JtZWQtZG9jLnhodG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QveHNs
L3RyYW5zZm9ybS10cmFuc2Zvcm1lZC1kb2MueGh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0tdHJhbnNmb3JtZWQtZG9jLnhodG1sCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDQ4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/
PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VOIiAiaHR0
cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwxMS5kdGQiPgorPGh0bWwgeG1sbnM9
Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiI+Cis8aGVhZD4KKyAg
ICA8dGl0bGU+eHNsIGltcG9ydCB0ZXN0PC90aXRsZT4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQv
amF2YXNjcmlwdCI+PCFbQ0RBVEFbCisgICAgICAgIGZ1bmN0aW9uIGxvYWQoKSB7CisgICAgICAg
ICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworICAgICAgICAgICAgdmFyIGNvcHlY
c2x0U3RyID0KKyAgICAgICAgICAgICAgICAnPHhzbDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCIn
ICsKKyAgICAgICAgICAgICAgICAnICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkv
WFNML1RyYW5zZm9ybSInICsKKyAgICAgICAgICAgICAgICAnICB4bWxucz0iaHR0cDovL3d3dy53
My5vcmcvMTk5OS94aHRtbCI+JyArCisgICAgICAgICAgICAgICAgJzx4c2w6dGVtcGxhdGUgbWF0
Y2g9IkAqfG5vZGUoKSI+JyArCisgICAgICAgICAgICAgICAgJyAgPHhzbDpjb3B5PicgKworICAg
ICAgICAgICAgICAgICcgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJAKnxub2RlKCki
Lz4nICsKKyAgICAgICAgICAgICAgICAnICA8L3hzbDpjb3B5PicgKworICAgICAgICAgICAgICAg
ICc8L3hzbDp0ZW1wbGF0ZT4nICsKKyAgICAgICAgICAgICAgICAnPC94c2w6c3R5bGVzaGVldD4n
OworCisgICAgICAgICAgICB2YXIgcGFyc2VyID0gbmV3IERPTVBhcnNlcigpOworICAgICAgICAg
ICAgdmFyIHhzbHQgPSBuZXcgWFNMVFByb2Nlc3NvcigpOworICAgICAgICAgICAgY29weVhzbHRE
b2MgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKGNvcHlYc2x0U3RyLCAiYXBwbGljYXRpb24veG1s
Iik7CisgICAgICAgICAgICB4c2x0LmltcG9ydFN0eWxlc2hlZXQoY29weVhzbHREb2MpOworCisg
ICAgICAgICAgICB2YXIgcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgICAgICAgICBy
ZXEub3BlbignR0VUJywgJ3Jlc291cmNlcy94aHItZG9jLnhzbCcsIGZhbHNlKTsKKyAgICAgICAg
ICAgIHJlcS5zZW5kKG51bGwpOworICAgICAgICAgICAgdmFyIHhzbHREb2MgPSB4c2x0LnRyYW5z
Zm9ybVRvRG9jdW1lbnQocmVxLnJlc3BvbnNlWE1MKTsKKyAgICAgICAgICAgIHhzbHQuaW1wb3J0
U3R5bGVzaGVldCh4c2x0RG9jKTsKKworICAgICAgICAgICAgdmFyIHhtbERvYyA9IHBhcnNlci5w
YXJzZUZyb21TdHJpbmcoIjxyb290Lz4iLCAiYXBwbGljYXRpb24veG1sIik7CisgICAgICAgICAg
ICB2YXIgcmVzdWx0RG9jID0geHNsdC50cmFuc2Zvcm1Ub0RvY3VtZW50KHhtbERvYyk7CisgICAg
ICAgICAgICB2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5pbXBvcnROb2RlKHJlc3VsdERvYy5kb2N1
bWVudEVsZW1lbnQsIHRydWUpOworCisgICAgICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ2RpdicpOworICAgICAgICAgICAgZGl2LnBhcmVudE5vZGUucmVwbGFjZUNo
aWxkKGZyYWdtZW50LCBkaXYpOworICAgICAgICB9CisgICAgXV0+PC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keSBvbmxvYWQ9ImxvYWQoKSI+Cis8cD5UZXN0IGZvciA8YSBocmVmPSJodHRwOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDMxMyI+YnVnIDEwMzEzPC9hPjoKK3hzbDpp
bXBvcnQgZG9lc24ndCB3b3JrIGluIHN0eWxlc2hlZXRzIGxvYWRlZCB2aWEgWE1MSHR0cFJlcXVl
c3QuPC9wPgorCis8ZGl2IGlkPSJkaXYiPkl0J3MgbmljZSB0aGF0IHRoaXMgaGFzbid0IGNyYXNo
ZWQsIGJ1dCB0aGUgWFNMIHRyYW5zZm9ybWF0aW9uIGhhcyBmYWlsZWQuPC9kaXY+Cis8L2JvZHk+
Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0teGhyLWRvYy1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC94c2wvdHJhbnNmb3Jt
LXhoci1kb2MtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA2MDE3MSkKKysrIExheW91dFRlc3RzL2Zh
c3QveHNsL3RyYW5zZm9ybS14aHItZG9jLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
MSw0ICsxLDMgQEAKLUNPTlNPTEUgTUVTU0FHRTogbGluZSAyMDogVHlwZUVycm9yOiBSZXN1bHQg
b2YgZXhwcmVzc2lvbiAnZG9jJyBbdW5kZWZpbmVkXSBpcyBub3QgYW4gb2JqZWN0LgogVGVzdCBm
b3IgYnVnIDEwMzEzOiB4c2w6aW1wb3J0IGRvZXNuJ3Qgd29yayBpbiBzdHlsZXNoZWV0cyBsb2Fk
ZWQgdmlhIFhNTEh0dHBSZXF1ZXN0LgogCi1JdCdzIG5pY2UgdGhhdCB0aGlzIGhhc24ndCBjcmFz
aGVkLCBidXQgdGhlIFhTTCB0cmFuc2Zvcm1hdGlvbiBoYXMgZmFpbGVkLgorU1VDQ0VTUwpJbmRl
eDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvdHJhbnNmb3JtLWZyYW1lZC1kb2MtZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3RyYW5zZm9y
bS1mcmFtZWQtZG9jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0
dHAvdGVzdHMveHNsL3RyYW5zZm9ybS1mcmFtZWQtZG9jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw5IEBACitUZXN0IGZvciBidWcgMTAzMTM6IHhzbDppbXBvcnQgZG9lc24n
dCB3b3JrIGluIHN0eWxlc2hlZXRzIGxvYWRlZCB2aWEgWE1MSHR0cFJlcXVlc3QuCisKK1NVQ0NF
U1MKKworCistLS0tLS0tLQorRnJhbWU6ICdzdWJmcmFtZScKKy0tLS0tLS0tCitzdWJmcmFtZSAy
CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0tZnJhbWVkLWRvYy54
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0t
ZnJhbWVkLWRvYy54aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMv
eHNsL3RyYW5zZm9ybS1mcmFtZWQtZG9jLnhodG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQw
IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCFET0NUWVBFIGh0
bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcv
VFIveGh0bWwxMS9EVEQveGh0bWwxMS5kdGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMu
b3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiI+Cis8aGVhZD4KKyAgICA8dGl0bGU+eHNsIGlt
cG9ydCB0ZXN0PC90aXRsZT4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCFb
Q0RBVEFbCisgICAgICAgIHZhciB4c2x0RG9jOworCisgICAgICAgIHZhciBwYXJzZXIgPSBuZXcg
RE9NUGFyc2VyKCk7CisgICAgICAgIHZhciB4bWxEb2MgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5n
KCI8cm9vdC8+IiwgImFwcGxpY2F0aW9uL3htbCIpOworCisgICAgICAgIGZ1bmN0aW9uIHRyYW5z
Zm9ybShkaXYpIHsKKyAgICAgICAgICAgIHZhciB4c2x0ID0gbmV3IFhTTFRQcm9jZXNzb3IoKTsK
KyAgICAgICAgICAgIHhzbHQuaW1wb3J0U3R5bGVzaGVldCh4c2x0RG9jKTsKKyAgICAgICAgICAg
IHZhciByZXN1bHREb2MgPSB4c2x0LnRyYW5zZm9ybVRvRG9jdW1lbnQoeG1sRG9jKTsKKyAgICAg
ICAgICAgIHZhciBmcmFnbWVudCA9IGRvY3VtZW50LmltcG9ydE5vZGUocmVzdWx0RG9jLmRvY3Vt
ZW50RWxlbWVudCwgdHJ1ZSk7CisgICAgICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ2RpdicpOworICAgICAgICAgICAgZGl2LnBhcmVudE5vZGUucmVwbGFjZUNoaWxk
KGZyYWdtZW50LCBkaXYpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gbG9hZCgpIHsK
KyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAg
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcENoaWxkRnJhbWVzQXNUZXh0KCk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHhzbHREb2MgPSBzdWJmcmFtZS54c2x0RG9jOworICAgICAg
ICAgICAgc3ViZnJhbWUud2luZG93LmxvY2F0aW9uID0gInJlc291cmNlcy90cmFuc2Zvcm0tZnJh
bWVkLXN1YmZyYW1lMi54aHRtbCI7CisgICAgICAgIH0KKyAgICBdXT48L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5IG9ubG9hZD0ibG9hZCgpIj4KKzxwPlRlc3QgZm9yIDxhIGhyZWY9Imh0dHA6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzEzIj5idWcgMTAzMTM8L2E+OgoreHNs
OmltcG9ydCBkb2Vzbid0IHdvcmsgaW4gc3R5bGVzaGVldHMgbG9hZGVkIHZpYSBYTUxIdHRwUmVx
dWVzdC48L3A+Cis8ZGl2IGlkPSJkaXYiPkl0J3MgbmljZSB0aGF0IHRoaXMgaGFzbid0IGNyYXNo
ZWQsIGJ1dCB0aGUgWFNMIHRyYW5zZm9ybWF0aW9uIGhhcyBmYWlsZWQuCis8L2Rpdj4KKzxpZnJh
bWUgaWQ9InN1YmZyYW1lIiBzcmM9InJlc291cmNlcy90cmFuc2Zvcm0tZnJhbWVkLXN1YmZyYW1l
MS54aHRtbCI+Cis8L2lmcmFtZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3Rz
L2h0dHAvdGVzdHMveHNsL3RyYW5zZm9ybS14aHItZG9jLWNyb3NzLW9yaWdpbi1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvdHJhbnNmb3JtLXho
ci1kb2MtY3Jvc3Mtb3JpZ2luLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2h0dHAvdGVzdHMveHNsL3RyYW5zZm9ybS14aHItZG9jLWNyb3NzLW9yaWdpbi1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNCBAQAorQ09OU09MRSBNRVNTQUdFOiBsaW5l
IDIwOiBUeXBlRXJyb3I6IFJlc3VsdCBvZiBleHByZXNzaW9uICdkb2MnIFt1bmRlZmluZWRdIGlz
IG5vdCBhbiBvYmplY3QuCitUZXN0IGZvciBidWcgMTAzMTM6IHhzbDppbXBvcnQgZG9lc24ndCB3
b3JrIGluIHN0eWxlc2hlZXRzIGxvYWRlZCB2aWEgWE1MSHR0cFJlcXVlc3QuCisKK0l0J3Mgbmlj
ZSB0aGF0IHRoaXMgaGFzbid0IGNyYXNoZWQsIGJ1dCB0aGUgWFNMIHRyYW5zZm9ybWF0aW9uIGhh
cyBmYWlsZWQuCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0teGhy
LWRvYy1jcm9zcy1vcmlnaW4ueGh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy94c2wvdHJhbnNmb3JtLXhoci1kb2MtY3Jvc3Mtb3JpZ2luLnhodG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvdHJhbnNmb3JtLXhoci1kb2MtY3Jvc3Mt
b3JpZ2luLnhodG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMzIEBACis8P3htbCB2ZXJzaW9u
PSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0Mv
L0RURCBYSFRNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0
bWwxMS5kdGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHht
bDpsYW5nPSJlbiI+Cis8aGVhZD4KKyAgICA8dGl0bGU+eHNsIGltcG9ydCB0ZXN0PC90aXRsZT4K
KyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgICAgIGZ1bmN0aW9uIGxv
YWQoKSB7CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAg
ICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgIHZhciByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAg
ICAgICAgICAgIHZhciB4c2x0ID0gbmV3IFhTTFRQcm9jZXNzb3IoKTsKKyAgICAgICAgICAgIHJl
cS5vcGVuKCdHRVQnLCAncmVzb3VyY2VzL3hoci1kb2MtY3Jvc3Mtb3JpZ2luLnhzbCcsIGZhbHNl
KTsKKyAgICAgICAgICAgIHJlcS5zZW5kKG51bGwpOworICAgICAgICAgICAgeHNsdC5pbXBvcnRT
dHlsZXNoZWV0KHJlcS5yZXNwb25zZVhNTCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJl
cS5vcGVuKCdHRVQnLCAncmVzb3VyY2VzL3hoci1kb2MueG1sJywgZmFsc2UpOworICAgICAgICAg
ICAgcmVxLnNlbmQobnVsbCk7CisgICAgICAgICAgICB2YXIgZG9jID0geHNsdC50cmFuc2Zvcm1U
b0RvY3VtZW50KHJlcS5yZXNwb25zZVhNTCk7CisgICAgICAgICAgICB2YXIgZnJhZ21lbnQgPSBk
b2N1bWVudC5pbXBvcnROb2RlKGRvYy5kb2N1bWVudEVsZW1lbnQsIHRydWUpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Rpdicp
OworICAgICAgICAgICAgZGl2LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGZyYWdtZW50LCBkaXYp
OworICAgICAgICB9CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9ImxvYWQo
KSI+Cis8cD5UZXN0IGZvciA8YSBocmVmPSJodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMDMxMyI+YnVnIDEwMzEzPC9hPjoKK3hzbDppbXBvcnQgZG9lc24ndCB3b3JrIGlu
IHN0eWxlc2hlZXRzIGxvYWRlZCB2aWEgWE1MSHR0cFJlcXVlc3QuPC9wPgorCis8ZGl2IGlkPSJk
aXYiPkl0J3MgbmljZSB0aGF0IHRoaXMgaGFzbid0IGNyYXNoZWQsIGJ1dCB0aGUgWFNMIHRyYW5z
Zm9ybWF0aW9uIGhhcyBmYWlsZWQuPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMvdHJhbnNmb3JtLWZyYW1lZC1zdWJmcmFt
ZTEueGh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvcmVzb3Vy
Y2VzL3RyYW5zZm9ybS1mcmFtZWQtc3ViZnJhbWUxLnhodG1sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL3RyYW5zZm9ybS1mcmFtZWQtc3ViZnJh
bWUxLnhodG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI0IEBACis8P3htbCB2ZXJzaW9uPSIx
LjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RU
RCBYSFRNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwx
MS5kdGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDps
YW5nPSJlbiI+Cis8aGVhZD4KKyAgICA8dGl0bGU+eHNsIGltcG9ydCB0ZXN0PC90aXRsZT4KKyAg
ICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCFbQ0RBVEFbCisgICAgICAgIHZhciB4
c2x0U3RyID0KKyAgICAgICAgICAgICc8eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIicgKwor
ICAgICAgICAgICAgJyAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFu
c2Zvcm0iJyArCisgICAgICAgICAgICAnICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94
aHRtbCI+JyArCisgICAgICAgICAgICAnPHhzbDppbXBvcnQgaHJlZj0ieGhyLWRvYy1pbXBvcnRl
ZC54c2wiIC8+JyArCisgICAgICAgICAgICAnPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iL3Jvb3QiPicg
KworICAgICAgICAgICAgJyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0id29ya3MiIC8+JyAr
CisgICAgICAgICAgICAnPC94c2w6dGVtcGxhdGU+JyArCisgICAgICAgICAgICAnPC94c2w6c3R5
bGVzaGVldD4nOworCisgICAgICAgIHZhciBwYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7CisgICAg
ICAgIHZhciB4c2x0RG9jID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyh4c2x0U3RyLCAiYXBwbGlj
YXRpb24veG1sIik7CisgICAgXV0+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KK3N1YmZyYW1l
IDEKKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3Jl
c291cmNlcy90cmFuc2Zvcm0tZnJhbWVkLXN1YmZyYW1lMi54aHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMvdHJhbnNmb3JtLWZyYW1lZC1zdWJm
cmFtZTIueGh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9y
ZXNvdXJjZXMvdHJhbnNmb3JtLWZyYW1lZC1zdWJmcmFtZTIueGh0bWwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8
IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iICJodHRwOi8v
d3d3LnczLm9yZy9UUi94aHRtbDExL0RURC94aHRtbDExLmR0ZCI+Cis8aHRtbCB4bWxucz0iaHR0
cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIj4KKzxoZWFkPgorICAgIDx0
aXRsZT54c2wgaW1wb3J0IHRlc3Q8L3RpdGxlPgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZh
c2NyaXB0Ij48IVtDREFUQVsKKyAgICAgICAgZnVuY3Rpb24gbG9hZCgpIHsKKyAgICAgICAgICAg
IHBhcmVudC50cmFuc2Zvcm0oKTsKKyAgICAgICAgfQorICAgIF1dPjwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHkgb25sb2FkPSJsb2FkKCkiPgorc3ViZnJhbWUgMgorPC9ib2R5PgorPC9odG1sPgpJ
bmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL3hoci1kb2MtY3Jvc3Mt
b3JpZ2luLnhzbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNv
dXJjZXMveGhyLWRvYy1jcm9zcy1vcmlnaW4ueHNsCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL3hoci1kb2MtY3Jvc3Mtb3JpZ2luLnhzbAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0i
dXRmLTgiPz4KKzx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiCisgIHhtbG5zOnhzbD0iaHR0
cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgorICB4bWxucz0iaHR0cDovL3d3dy53
My5vcmcvMTk5OS94aHRtbCI+CisKKzx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9sb2NhbGhvc3Q6
ODAwMC94c2wvcmVzb3VyY2VzL3hoci1kb2MtaW1wb3J0ZWQueHNsIiAvPgorCis8eHNsOnRlbXBs
YXRlIG1hdGNoPSIvcm9vdCI+CisgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9IndvcmtzIiAv
PgorPC94c2w6dGVtcGxhdGU+CisKKzwveHNsOnN0eWxlc2hlZXQ+CkluZGV4OiBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMveGhyLWRvYy1pbXBvcnRlZC54c2wKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL3hoci1kb2MtaW1wb3J0
ZWQueHNsCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvcmVzb3Vy
Y2VzL3hoci1kb2MtaW1wb3J0ZWQueHNsCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0IEBACis8
P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPHhzbDpzdHlsZXNoZWV0IHZl
cnNpb249IjEuMCIKKyAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFu
c2Zvcm0iCisgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKworPHhzbDp0
ZW1wbGF0ZSBtYXRjaD0iL3Jvb3QiPgorICAgIDxkaXYgY2xhc3M9ImRlZmF1bHQiPkZBSUw6IElu
Y29ycmVjdCB0cmFuc2Zvcm1hdGlvbi48L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRl
bXBsYXRlIG5hbWU9IndvcmtzIj4KKyAgICA8ZGl2IGNsYXNzPSJvdmVycmlkZGVuIj5TVUNDRVNT
PC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPC94c2w6c3R5bGVzaGVldD4KSW5kZXg6IExheW91
dFRlc3RzL2h0dHAvdGVzdHMveHNsL3Jlc291cmNlcy94aHItZG9jLnhtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMveGhyLWRvYy54bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMveGhyLWRvYy54
bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNv
ZGluZz0idXRmLTgiPz4KKzw/eG1sLXN0eWxlc2hlZXQgdHlwZT0idGV4dC94c2wiIGhyZWY9Inho
ci1kb2MueHNsIj8+Cis8cm9vdC8+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9y
ZXNvdXJjZXMveGhyLWRvYy54c2wKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy94c2wvcmVzb3VyY2VzL3hoci1kb2MueHNsCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL3hoci1kb2MueHNsCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDEyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPHhzbDpz
dHlsZXNoZWV0IHZlcnNpb249IjEuMCIKKyAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8x
OTk5L1hTTC9UcmFuc2Zvcm0iCisgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1s
Ij4KKworPHhzbDppbXBvcnQgaHJlZj0ieGhyLWRvYy1pbXBvcnRlZC54c2wiIC8+CisKKzx4c2w6
dGVtcGxhdGUgbWF0Y2g9Ii9yb290Ij4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0id29y
a3MiIC8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPC94c2w6c3R5bGVzaGVldD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57871</attachid>
            <date>2010-06-04 07:15:16 -0700</date>
            <delta_ts>2010-06-08 05:12:24 -0700</delta_ts>
            <desc>New proposed patch</desc>
            <filename>bug10313_0604.patch</filename>
            <type>text/plain</type>
            <size>45548</size>
            <attacher name="Andreas Wictor">andreas.wictor</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDQ2MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsOTAgQEAKKzIwMTAtMDYtMDQgIEFuZHJlYXMgV2ljdG9yICA8YW5kcmVhcy53aWN0
b3JAeGNlcmlvbi5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgeHNsOmltcG9ydCBhbmQgZG9jdW1lbnQoKSBkb24ndCB3b3JrIGluIHN0eWxlc2hl
ZXRzIGxvYWRlZCB2aWEgWE1MSHR0cFJlcXVlc3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzEzCisKKyAgICAgICAgSW50cm9kdWNlZCB0aGUgY29u
Y2VwdCBvZiBhIG9yaWdpbkZyYW1lIHBvaW50ZXIgb24gZnJhbWVsZXNzIGRvY3VtZW50cworICAg
ICAgICBjcmVhdGVkIGJ5IFhNTEh0dHBSZXF1ZXN0LCBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5j
cmVhdGVEb2N1bWVudCgpLAorICAgICAgICBET01QYXJzZXIucGFyc2VGcm9tU3RyaW5nKCkgYW5k
IFhTTFRQcm9jZXNzb3IudHJhbnNmb3JtVG9Eb2N1bWVudCgpLgorICAgICAgICBUaGlzIG1ha2Vz
IGl0IHBvc3NpYmxlIGZvciBmcmFtZWxlc3MgZG9jdW1lbnRzIHRvIGFjY2VzcyBzdWIgcmVzb3Vy
Y2VzLgorCisgICAgICAgIEZyYW1lbGVzcyBkb2N1bWVudHMgaXMgcmVnaXN0ZXJlZCBhcyBzdWIg
ZG9jdW1lbnRzIG9uIHRoZSBvcmlnaW5GcmFtZQorICAgICAgICBzbyB0aGF0IHRoZSBvcmlnaW5G
cmFtZSBwb2ludGVyIG9uIGRvY3VtZW50cyBjYW4gYmUgcmVzZXQgb24gZnJhbWUKKyAgICAgICAg
bmF2aWdhdGlvbiBvciB3aGVuIHRoZSBmcmFtZSBpcyBkZXN0cm95ZWQuCisKKyAgICAgICAgVGVz
dHM6IGZhc3QveHNsL3RyYW5zZm9ybS1kb2NpbXBsLWRvYy54aHRtbAorICAgICAgICAgICAgICAg
ZmFzdC94c2wvdHJhbnNmb3JtLWRvbXBhcnNlci1kb2MueGh0bWwKKyAgICAgICAgICAgICAgIGZh
c3QveHNsL3RyYW5zZm9ybS10cmFuc2Zvcm1lZC1kb2MueGh0bWwKKyAgICAgICAgICAgICAgIGh0
dHAvdGVzdHMveHNsL3RyYW5zZm9ybS1mcmFtZWQtZG9jLnhodG1sCisgICAgICAgICAgICAgICBo
dHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0teGhyLWRvYy1jcm9zcy1vcmlnaW4ueGh0bWwKKworICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3NvckNvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbnN0cnVjdFhTTFRQcm9jZXNzb3IpOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L2N1c3RvbS9WOFhTTFRQcm9jZXNzb3JDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VjhYU0xUUHJvY2Vzc29yOjpjb25zdHJ1Y3RvckNhbGxiYWNrKToKKyAgICAgICAgKiBkb20vRE9N
SW1wbGVtZW50YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NSW1wbGVtZW50YXRpb246
OmNyZWF0ZURvY3VtZW50KToKKyAgICAgICAgIC0gUmVnaXN0ZXIgdGhlIHJlc3VsdGluZyBkb2N1
bWVudCBhcyBhIHN1YiBkb2N1bWVudCBvbiB0aGUgb3JpZ2luIGZyYW1lCisgICAgICAgICogZG9t
L0RPTUltcGxlbWVudGF0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpET01JbXBsZW1lbnRhdGlv
bjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUltcGxlbWVudGF0aW9uOjpET01JbXBs
ZW1lbnRhdGlvbik6CisgICAgICAgICogZG9tL0RPTUltcGxlbWVudGF0aW9uLmlkbDoKKyAgICAg
ICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OkRvY3Vt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp+RG9jdW1lbnQpOgorICAgICAgICAg
LSBVbnJlZ2lzdGVyIHRoaXMgZG9jdW1lbnQgZnJvbSBvcmlnaW5GcmFtZSBpZiBuZWNlc3NhcnkK
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjppbXBsZW1lbnRhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudDo6c2V0T3JpZ2luRnJhbWUpOgorICAgICAgICAgLSBTZXQgb3JpZ2lu
RnJhbWUgZm9yIHRoaXMgZG9jdW1lbnQgYW5kIGlmIGFuIFVSTCB3YXMgc3VwcGxpZWQKKyAgICAg
ICAgICAgY3JlYXRlIGEgbmV3IFNlY3VyaXR5T3JpZ2luIGJhc2VkIG9uIHRoZSBVUkwgYW5kIHVz
ZSB0aGUgVVJMCisgICAgICAgICAgIGFzIGNvb2tpZVVSTCwgb3RoZXJ3aXNlIGNvcHkgY29va2ll
VVJMIGFuZCBzZWN1cml0eU9yaWdpbiBmcm9tCisgICAgICAgICAgIHRoZSBmcmFtZSdzIG1haW4g
ZG9jdW1lbnQKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjphcHBseVhTTFRyYW5zZm9ybSk6
CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6
b3JpZ2luRnJhbWUpOgorICAgICAgICAqIGxvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVx
dWVzdCk6CisgICAgICAgICAtIFVzZSBvcmlnaW5GcmFtZSBpZiBuZWNlc3NhcnkKKyAgICAgICAg
KiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjp+RnJhbWUpOgorICAg
ICAgICAgLSBSZXNldCBvcmlnaW5GcmFtZSBmb3IgYWxsIHJlZ2lzdGVyZWQgc3ViIGRvY3VtZW50
cworICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnNldERvY3VtZW50KToKKyAgICAgICAgIC0gUmVz
ZXQgb3JpZ2luRnJhbWUgZm9yIGFsbCByZWdpc3RlcmVkIHN1YiBkb2N1bWVudHMKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lOjpyZWdpc3RlclN1YkRvY3VtZW50KToKKyAgICAgICAgIC0gUmVnaXN0
ZXIgYSBzdWIgZG9jdW1lbnQgYW5kIHNldCB0aGlzIGZyYW1lIGFzIG9yaWdpbkZyYW1lIG9uIHRo
ZSBkb2N1bWVudAorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnVucmVnaXN0ZXJTdWJEb2N1bWVu
dCk6CisgICAgICAgICAtIFVucmVnaXN0ZXIgYSBzdWIgZG9jdW1lbnQgYW5kIHJlc2V0IHRoZSBv
cmlnaW5GcmFtZSBvbiB0aGUgZG9jdW1lbnQKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpjbGVh
clJlZ2lzdGVyZWRTdWJEb2N1bWVudHMpOgorICAgICAgICAqIHBhZ2UvRnJhbWUuaDoKKyAgICAg
ICAgKiB4bWwvRE9NUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVBhcnNlcjo6cGFy
c2VGcm9tU3RyaW5nKToKKyAgICAgICAgIC0gUmVnaXN0ZXIgdGhlIHJlc3VsdGluZyBkb2N1bWVu
dCBhcyBhIHN1YiBkb2N1bWVudCBvbiB0aGUgb3JpZ2luIGZyYW1lCisgICAgICAgICogeG1sL0RP
TVBhcnNlci5oOgorICAgICAgICAoV2ViQ29yZTo6RE9NUGFyc2VyOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RE9NUGFyc2VyOjpET01QYXJzZXIpOgorICAgICAgICAqIHhtbC9ET01QYXJz
ZXIuaWRsOgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpYTUxIdHRwUmVxdWVzdDo6cmVzcG9uc2VYTUwpOgorICAgICAgICAgLSBSZWdpc3RlciB0
aGUgcmVzdWx0aW5nIGRvY3VtZW50IGFzIGEgc3ViIGRvY3VtZW50IG9uIHRoZSBvcmlnaW4gZnJh
bWUKKyAgICAgICAgKiB4bWwvWFNMSW1wb3J0UnVsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpY
U0xJbXBvcnRSdWxlOjpsb2FkU2hlZXQpOgorICAgICAgICAgLSBMb2FkIGltcG9ydGVkIGRvY3Vt
ZW50cyBzeW5jaHJvbm91c2x5IGlmIGludm9rZWQgYnkgamF2YXNjcmlwdAorICAgICAgICAgICBh
bmQgdXNlIGJhc2UgVVJMIGZyb20gb3JpZ2luRnJhbWUncyBkb2N1bWVudCB3aGVuIHBhcmVudCBz
dHlsZXNoZWV0CisgICAgICAgICAgIGRvbid0IGhhdmUgYW4gVVJMCisgICAgICAgIChXZWJDb3Jl
OjpYU0xJbXBvcnRSdWxlOjpsb2FkU2hlZXRBc3luYyk6CisgICAgICAgIChXZWJDb3JlOjpYU0xJ
bXBvcnRSdWxlOjpsb2FkU2hlZXRTeW5jKToKKyAgICAgICAgKiB4bWwvWFNMSW1wb3J0UnVsZS5o
OgorICAgICAgICAqIHhtbC9YU0xUUHJvY2Vzc29yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhT
TFRQcm9jZXNzb3I6OmNyZWF0ZURvY3VtZW50RnJvbVNvdXJjZSk6CisgICAgICAgICAtIFJlZ2lz
dGVyIHRoZSByZXN1bHRpbmcgZG9jdW1lbnQgYXMgYSBzdWIgZG9jdW1lbnQgb24gdGhlIG9yaWdp
biBmcmFtZQorICAgICAgICAqIHhtbC9YU0xUUHJvY2Vzc29yLmg6CisgICAgICAgIChXZWJDb3Jl
OjpYU0xUUHJvY2Vzc29yOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFNMVFByb2Nlc3Nv
cjo6WFNMVFByb2Nlc3Nvcik6CisgICAgICAgICogeG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmRvY0xvYWRlckZ1bmMpOgorICAgICAgICAgLSBVc2Ugb3Jp
Z2luRnJhbWUgaWYgbmVjZXNzYXJ5CisKIDIwMTAtMDUtMzEgIEVyaWMgU2VpZGVsIDxlcmljQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yQ29uc3RydWN0b3IuY3BwCShy
ZXZpc2lvbiA2MDQ2MikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yQ29u
c3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAKICNpbmNsdWRl
ICJKU1hTTFRQcm9jZXNzb3IuaCIKICNpbmNsdWRlICJYU0xUUHJvY2Vzc29yLmgiCisjaW5jbHVk
ZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogdXNpbmcgbmFt
ZXNwYWNlIEpTQzsKQEAgLTUwLDcgKzUxLDEyIEBAIEpTWFNMVFByb2Nlc3NvckNvbnN0cnVjdG9y
OjpKU1hTTFRQcm9jZXMKIHN0YXRpYyBKU09iamVjdCogY29uc3RydWN0WFNMVFByb2Nlc3NvcihF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBjb25zdHJ1Y3RvciwgY29uc3QgQXJnTGlzdCYpCiB7
CiAgICAgSlNYU0xUUHJvY2Vzc29yQ29uc3RydWN0b3IqIGpzQ29uc3RydWN0b3IgPSBzdGF0aWNf
Y2FzdDxKU1hTTFRQcm9jZXNzb3JDb25zdHJ1Y3Rvcio+KGNvbnN0cnVjdG9yKTsKLSAgICByZXR1
cm4gQ1JFQVRFX0RPTV9PQkpFQ1RfV1JBUFBFUihleGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxP
YmplY3QoKSwgWFNMVFByb2Nlc3NvciwgWFNMVFByb2Nlc3Nvcjo6Y3JlYXRlKCkuZ2V0KCkpOwor
ICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBqc0NvbnN0cnVjdG9yLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcihleGVjLCBSZWZlcmVuY2VFcnJvciwgIlhTTFRQcm9jZXNzb3IgY29uc3RydWN0
b3IgYXNzb2NpYXRlZCBkb2N1bWVudCBpcyB1bmF2YWlsYWJsZSIpOworCisgICAgUmVmUHRyPFhT
TFRQcm9jZXNzb3I+IHhzbHRQcm9jZXNzb3IgPSBYU0xUUHJvY2Vzc29yOjpjcmVhdGUoY29udGV4
dCk7CisgICAgcmV0dXJuIENSRUFURV9ET01fT0JKRUNUX1dSQVBQRVIoZXhlYywganNDb25zdHJ1
Y3Rvci0+Z2xvYmFsT2JqZWN0KCksIFhTTFRQcm9jZXNzb3IsIHhzbHRQcm9jZXNzb3IuZ2V0KCkp
OwogfQogCiBDb25zdHJ1Y3RUeXBlIEpTWFNMVFByb2Nlc3NvckNvbnN0cnVjdG9yOjpnZXRDb25z
dHJ1Y3REYXRhKENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFhTTFRQcm9jZXNzb3JDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WFNMVFByb2Nlc3NvckN1c3RvbS5jcHAJKHJl
dmlzaW9uIDYwNDYyKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYU0xUUHJvY2Vz
c29yQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhYU0xUUHJvY2Vzc29yOjpjb25zdHJ1
Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NUQVRT
KCJET00uWFNMVFByb2Nlc3Nvci5Db25zdHJ1Y3RvciIpOwotICAgIHJldHVybiBWOFByb3h5Ojpj
b25zdHJ1Y3RET01PYmplY3Q8WFNMVFByb2Nlc3Nvcj4oYXJncywgJmluZm8pOworICAgIHJldHVy
biBWOFByb3h5Ojpjb25zdHJ1Y3RET01PYmplY3RXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dDxY
U0xUUHJvY2Vzc29yPihhcmdzLCAmaW5mbyk7CiB9CiAKIApJbmRleDogV2ViQ29yZS9kb20vRE9N
SW1wbGVtZW50YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RPTUltcGxlbWVu
dGF0aW9uLmNwcAkocmV2aXNpb24gNjA0NjIpCisrKyBXZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRh
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Niw2ICsyNTYsMTIgQEAgUGFzc1JlZlB0cjxE
b2N1bWVudD4gRE9NSW1wbGVtZW50YXRpb246OgogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAK
KyAgICBpZiAobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0ICYmIG1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgIERvY3VtZW50KiBvcmlnaW5Eb2MgPSBzdGF0
aWNfY2FzdDxEb2N1bWVudCo+KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CisgICAgICAgIGlm
IChvcmlnaW5Eb2MtPmZyYW1lKCkpCisgICAgICAgICAgICBvcmlnaW5Eb2MtPmZyYW1lKCktPnJl
Z2lzdGVyU3ViRG9jdW1lbnQoZG9jLmdldCgpKTsKKyAgICB9CisKICAgICBpZiAoZG9jdHlwZSkK
ICAgICAgICAgZG9jLT5hZGRDaGlsZChkb2N0eXBlKTsKICAgICBpZiAoZG9jdW1lbnRFbGVtZW50
KQpJbmRleDogV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5oCShyZXZpc2lvbiA2MDQ2MikKKysrIFdlYkNv
cmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDE4ICszNCwy
MiBAQCBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIERvY3VtZW50VHlwZTsKIGNsYXNzIEZyYW1lOwog
Y2xhc3MgSFRNTERvY3VtZW50OworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIGNsYXNz
IFN0cmluZzsKIAogdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAogY2xhc3MgRE9NSW1wbGVt
ZW50YXRpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxET01JbXBsZW1lbnRhdGlvbj4gewogcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPERPTUltcGxlbWVudGF0aW9uPiBjcmVhdGUoKSB7IHJl
dHVybiBhZG9wdFJlZihuZXcgRE9NSW1wbGVtZW50YXRpb24pOyB9CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8RE9NSW1wbGVtZW50YXRpb24+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBET01JbXBsZW1lbnRh
dGlvbihjb250ZXh0KSk7CisgICAgfQogCiAgICAgLy8gRE9NIG1ldGhvZHMgJiBhdHRyaWJ1dGVz
IGZvciBET01JbXBsZW1lbnRhdGlvbgogICAgIHN0YXRpYyBib29sIGhhc0ZlYXR1cmUoY29uc3Qg
U3RyaW5nJiBmZWF0dXJlLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pOwogICAgIHN0YXRpYyBQYXNz
UmVmUHRyPERvY3VtZW50VHlwZT4gY3JlYXRlRG9jdW1lbnRUeXBlKGNvbnN0IFN0cmluZyYgcXVh
bGlmaWVkTmFtZSwgY29uc3QgU3RyaW5nJiBwdWJsaWNJZCwgY29uc3QgU3RyaW5nICZzeXN0ZW1J
ZCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPERvY3VtZW50PiBjcmVh
dGVEb2N1bWVudChjb25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3RyaW5nJiBxdWFs
aWZpZWROYW1lLCBEb2N1bWVudFR5cGUqLCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0
cjxEb2N1bWVudD4gY3JlYXRlRG9jdW1lbnQoY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNv
bnN0IFN0cmluZyYgcXVhbGlmaWVkTmFtZSwgRG9jdW1lbnRUeXBlKiwgRXhjZXB0aW9uQ29kZSYp
OwogCiAgICAgRE9NSW1wbGVtZW50YXRpb24qIGdldEludGVyZmFjZShjb25zdCBTdHJpbmcmIGZl
YXR1cmUpOwogCkBAIC02Miw3ICs2NiwxMCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgaXNU
ZXh0TUlNRVR5cGUoY29uc3QgU3RyaW5nJiBNSU1FVHlwZSk7CiAKIHByaXZhdGU6Ci0gICAgRE9N
SW1wbGVtZW50YXRpb24oKSB7IH0KKyAgICBET01JbXBsZW1lbnRhdGlvbihTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0KQorICAgICAgICA6IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dChj
b250ZXh0KSB7IH0KKworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIG1fc2NyaXB0RXhlY3V0
aW9uQ29udGV4dDsKIH07CiAKIH0gLy9uYW1lc3BhY2UKSW5kZXg6IFdlYkNvcmUvZG9tL0RPTUlt
cGxlbWVudGF0aW9uLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRh
dGlvbi5pZGwJKHJldmlzaW9uIDYwNDYyKQorKysgV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRp
b24uaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw3ICsyMCw3IEBACiAKIG1vZHVsZSBjb3JlIHsK
IAotICAgIGludGVyZmFjZSBET01JbXBsZW1lbnRhdGlvbiB7CisgICAgaW50ZXJmYWNlIFtDYWxs
V2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBET01JbXBsZW1lbnRhdGlvbiB7CiAKICAgICAg
ICAgLy8gRE9NIExldmVsIDEKIApJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gNjA0NjIpCisrKyBX
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxMCw2ICs0MTAsNyBA
QCBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBib29sIGlzCiAgICAgbV9pZ25vcmVB
dXRvZm9jdXMgPSBmYWxzZTsKIAogICAgIG1fZnJhbWUgPSBmcmFtZTsKKyAgICBtX29yaWdpbkZy
YW1lID0gMDsKIAogICAgIG1fYXhPYmplY3RDYWNoZSA9IDA7CiAgICAgCkBAIC01NDYsNiArNTQ3
LDkgQEAgRG9jdW1lbnQ6On5Eb2N1bWVudCgpCiAgICAgICAgIG1fc3R5bGVTaGVldHMtPmRvY3Vt
ZW50RGVzdHJveWVkKCk7CiAKICAgICBtX3dlYWtSZWZlcmVuY2UtPmNsZWFyKCk7CisKKyAgICBp
ZiAobV9vcmlnaW5GcmFtZSkKKyAgICAgICAgbV9vcmlnaW5GcmFtZS0+dW5yZWdpc3RlclN1YkRv
Y3VtZW50KHRoaXMpOwogfQogCiAjaWYgVVNFKEpTQykKQEAgLTYwOCw3ICs2MTIsNyBAQCB2b2lk
IERvY3VtZW50OjpzZXREb2NUeXBlKFBhc3NSZWZQdHI8RG9jCiBET01JbXBsZW1lbnRhdGlvbiog
RG9jdW1lbnQ6OmltcGxlbWVudGF0aW9uKCkgY29uc3QKIHsKICAgICBpZiAoIW1faW1wbGVtZW50
YXRpb24pCi0gICAgICAgIG1faW1wbGVtZW50YXRpb24gPSBET01JbXBsZW1lbnRhdGlvbjo6Y3Jl
YXRlKCk7CisgICAgICAgIG1faW1wbGVtZW50YXRpb24gPSBET01JbXBsZW1lbnRhdGlvbjo6Y3Jl
YXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CiAgICAgcmV0dXJuIG1faW1wbGVtZW50YXRp
b24uZ2V0KCk7CiB9CiAKQEAgLTEyNzEsNiArMTI3NSwyMCBAQCBTZXR0aW5ncyogRG9jdW1lbnQ6
OnNldHRpbmdzKCkgY29uc3QKICAgICByZXR1cm4gbV9mcmFtZSA/IG1fZnJhbWUtPnNldHRpbmdz
KCkgOiAwOwogfQogCit2b2lkIERvY3VtZW50OjpzZXRPcmlnaW5GcmFtZShGcmFtZSogZnJhbWUs
IGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICBtX29yaWdpbkZyYW1lID0gZnJhbWU7CisgICAgaWYg
KG1fb3JpZ2luRnJhbWUpIHsKKyAgICAgICAgaWYgKCF1cmwuaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICBtX2Nvb2tpZVVSTCA9IHVybDsKKyAgICAgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ6OnNldFNlY3VyaXR5T3JpZ2luKFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUodXJsKSk7CisgICAg
ICAgIH0gZWxzZSBpZiAoRG9jdW1lbnQqIGRvYyA9IG1fb3JpZ2luRnJhbWUtPmRvY3VtZW50KCkp
IHsKKyAgICAgICAgICAgIG1fY29va2llVVJMID0gZG9jLT5jb29raWVVUkwoKTsKKyAgICAgICAg
ICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnNldFNlY3VyaXR5T3JpZ2luKGRvYy0+c2VjdXJp
dHlPcmlnaW4oKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKIFBhc3NSZWZQdHI8UmFuZ2U+IERv
Y3VtZW50OjpjcmVhdGVSYW5nZSgpCiB7CiAgICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUodGhpcyk7
CkBAIC00MTU1LDcgKzQxNzMsNyBAQCB2b2lkIERvY3VtZW50OjpzZXRNYXJrZXJzQWN0aXZlKE5v
ZGUqIG5vCiAKIHZvaWQgRG9jdW1lbnQ6OmFwcGx5WFNMVHJhbnNmb3JtKFByb2Nlc3NpbmdJbnN0
cnVjdGlvbiogcGkpCiB7Ci0gICAgUmVmUHRyPFhTTFRQcm9jZXNzb3I+IHByb2Nlc3NvciA9IFhT
TFRQcm9jZXNzb3I6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxYU0xUUHJvY2Vzc29yPiBwcm9jZXNz
b3IgPSBYU0xUUHJvY2Vzc29yOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKICAg
ICBwcm9jZXNzb3ItPnNldFhTTFN0eWxlU2hlZXQoc3RhdGljX2Nhc3Q8WFNMU3R5bGVTaGVldCo+
KHBpLT5zaGVldCgpKSk7CiAgICAgU3RyaW5nIHJlc3VsdE1JTUVUeXBlOwogICAgIFN0cmluZyBu
ZXdTb3VyY2U7CkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDYwNDYyKQorKysgV2ViQ29yZS9kb20vRG9j
dW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDYzLDYgKzQ2Myw5IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIoKSBjb25zdDsg
Ly8gY2FuIGJlIE5VTEwKICNlbmRpZgogCisgICAgRnJhbWUqIG9yaWdpbkZyYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9vcmlnaW5GcmFtZTsgfSAvLyBjYW4gYmUgTlVMTAorICAgIHZvaWQgc2V0T3Jp
Z2luRnJhbWUoRnJhbWUqIGZyYW1lLCBjb25zdCBLVVJMJiB1cmwgPSBLVVJMKCkpOworCiAgICAg
UGFzc1JlZlB0cjxSYW5nZT4gY3JlYXRlUmFuZ2UoKTsKIAogICAgIFBhc3NSZWZQdHI8Tm9kZUl0
ZXJhdG9yPiBjcmVhdGVOb2RlSXRlcmF0b3IoTm9kZSogcm9vdCwgdW5zaWduZWQgd2hhdFRvU2hv
dywKQEAgLTEwMjksNiArMTAzMiw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2RpZENhbGN1bGF0
ZVN0eWxlU2VsZWN0b3I7CiAKICAgICBGcmFtZSogbV9mcmFtZTsKKyAgICBGcmFtZSogbV9vcmln
aW5GcmFtZTsKICAgICBPd25QdHI8RG9jTG9hZGVyPiBtX2RvY0xvYWRlcjsKICAgICBPd25QdHI8
VG9rZW5pemVyPiBtX3Rva2VuaXplcjsKICAgICBib29sIG1fd2VsbEZvcm1lZDsKSW5kZXg6IFdl
YkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAkocmV2aXNpb24gNjA0
NjIpCisrKyBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMjEsOCArMzIxLDExIEBAIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9h
ZGVyOjpsb2FkUmVxdWUKICAgICBSZXNvdXJjZUVycm9yIGVycm9yOwogICAgIFJlc291cmNlUmVz
cG9uc2UgcmVzcG9uc2U7CiAgICAgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyID0gc3RkOjpudW1l
cmljX2xpbWl0czx1bnNpZ25lZCBsb25nPjo6bWF4KCk7Ci0gICAgaWYgKG1fZG9jdW1lbnQtPmZy
YW1lKCkpCi0gICAgICAgIGlkZW50aWZpZXIgPSBtX2RvY3VtZW50LT5mcmFtZSgpLT5sb2FkZXIo
KS0+bG9hZFJlc291cmNlU3luY2hyb25vdXNseShyZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFscywg
ZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKKworICAgIEZyYW1lKiBmcmFtZSA9IG1fZG9jdW1lbnQt
PmZyYW1lKCkgPyBtX2RvY3VtZW50LT5mcmFtZSgpIDogbV9kb2N1bWVudC0+b3JpZ2luRnJhbWUo
KTsKKworICAgIGlmIChmcmFtZSkKKyAgICAgICAgaWRlbnRpZmllciA9IGZyYW1lLT5sb2FkZXIo
KS0+bG9hZFJlc291cmNlU3luY2hyb25vdXNseShyZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFscywg
ZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKIAogICAgIC8vIE5vIGV4Y2VwdGlvbiBmb3IgZmlsZTov
Ly8gcmVzb3VyY2VzLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzQ5NjIyOTg+LgogICAgIC8vIEFsc28s
IGlmIHdlIGhhdmUgYW4gSFRUUCByZXNwb25zZSwgdGhlbiBpdCB3YXNuJ3QgYSBuZXR3b3JrIGVy
cm9yIGluIGZhY3QuCkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHJldmlzaW9uIDYwNDYyKQorKysgV2ViQ29yZS9wYWdl
L0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk1LDYgKzE5NSw4IEBAIEZyYW1lOjp+RnJh
bWUoKQogICAgIHNldFZpZXcoMCk7CiAgICAgbG9hZGVyKCktPmNhbmNlbEFuZENsZWFyKCk7CiAK
KyAgICBjbGVhclJlZ2lzdGVyZWRTdWJEb2N1bWVudHMoKTsKKwogICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgbm90IGJlIGRvaW5nIGFsbCB0aGlzIHdvcmsgaW5zaWRlIHRoZSBkZXN0cnVjdG9yCiAK
ICAgICBBU1NFUlQoIW1fbGlmZVN1cHBvcnRUaW1lci5pc0FjdGl2ZSgpKTsKQEAgLTI2MCw2ICsy
NjIsOCBAQCB2b2lkIEZyYW1lOjpzZXREb2N1bWVudChQYXNzUmVmUHRyPERvY3VtCiAgICAgICAg
IG1fZG9jLT5kZXRhY2goKTsKICAgICB9CiAKKyAgICBjbGVhclJlZ2lzdGVyZWRTdWJEb2N1bWVu
dHMoKTsKKwogICAgIG1fZG9jID0gbmV3RG9jOwogICAgIHNlbGVjdGlvbigpLT51cGRhdGVTZWN1
cmVLZXlib2FyZEVudHJ5SWZBY3RpdmUoKTsKIApAQCAtMTY0OSw0ICsxNjUzLDMxIEBAIFN0cmlu
ZyBGcmFtZTo6bGF5ZXJUcmVlQXNUZXh0KCkgY29uc3QKICNlbmRpZgogfQogCit2b2lkIEZyYW1l
OjpyZWdpc3RlclN1YkRvY3VtZW50KERvY3VtZW50KiBkb2MsIGNvbnN0IEtVUkwmIHVybCkKK3sK
KyAgICBpZiAoZG9jKSB7CisgICAgICAgIGRvYy0+c2V0T3JpZ2luRnJhbWUodGhpcywgdXJsKTsK
KyAgICAgICAgbV9zdWJEb2N1bWVudHMuYWRkKGRvYyk7CisgICAgfQorfQorCit2b2lkIEZyYW1l
Ojp1bnJlZ2lzdGVyU3ViRG9jdW1lbnQoRG9jdW1lbnQqIGRvYykKK3sKKyAgICBpZiAoZG9jKSB7
CisgICAgICAgIGRvYy0+c2V0T3JpZ2luRnJhbWUoMCk7CisgICAgICAgIG1fc3ViRG9jdW1lbnRz
LnJlbW92ZShkb2MpOworICAgIH0KK30KKwordm9pZCBGcmFtZTo6Y2xlYXJSZWdpc3RlcmVkU3Vi
RG9jdW1lbnRzKCkKK3sKKyAgICBpZiAoIW1fc3ViRG9jdW1lbnRzLmlzRW1wdHkoKSkgeworICAg
ICAgICBmb3IgKEhhc2hTZXQ8RG9jdW1lbnQqPjo6aXRlcmF0b3IgaXQgPSBtX3N1YkRvY3VtZW50
cy5iZWdpbigpOworICAgICAgICAgICAgIGl0ICE9IG1fc3ViRG9jdW1lbnRzLmVuZCgpOyArK2l0
KQorICAgICAgICAgICAgKCppdCktPnNldE9yaWdpbkZyYW1lKDApOworCisgICAgICAgIG1fc3Vi
RG9jdW1lbnRzLmNsZWFyKCk7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRnJh
bWUuaAkocmV2aXNpb24gNjA0NjIpCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMTMwLDYgKzEzMCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIAog
ICAgICAgICBTdHJpbmcgbGF5ZXJUcmVlQXNUZXh0KCkgY29uc3Q7CiAKKyAgICAgICAgdm9pZCBy
ZWdpc3RlclN1YkRvY3VtZW50KERvY3VtZW50KiBkb2MsIGNvbnN0IEtVUkwmIHVybCA9IEtVUkwo
KSk7CisgICAgICAgIHZvaWQgdW5yZWdpc3RlclN1YkRvY3VtZW50KERvY3VtZW50KiBkb2MpOwor
ICAgICAgICB2b2lkIGNsZWFyUmVnaXN0ZXJlZFN1YkRvY3VtZW50cygpOworCiAgICAgcHJpdmF0
ZToKICAgICAgICAgdm9pZCBpbmplY3RVc2VyU2NyaXB0c0ZvcldvcmxkKERPTVdyYXBwZXJXb3Js
ZCosIGNvbnN0IFVzZXJTY3JpcHRWZWN0b3ImLCBVc2VyU2NyaXB0SW5qZWN0aW9uVGltZSk7CiAK
QEAgLTM2Miw2ICszNjYsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjaWYgRU5BQkxFKFRJTEVE
X0JBQ0tJTkdfU1RPUkUpICAgICAgICAKICAgICAgICAgT3duUHRyPFRpbGVkQmFja2luZ1N0b3Jl
PiBtX3RpbGVkQmFja2luZ1N0b3JlOwogI2VuZGlmCisKKyAgICAgICAgSGFzaFNldDxEb2N1bWVu
dCo+IG1fc3ViRG9jdW1lbnRzOwogICAgIH07CiAKICAgICBpbmxpbmUgdm9pZCBGcmFtZTo6aW5p
dCgpCkluZGV4OiBXZWJDb3JlL3htbC9ET01QYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUveG1sL0RPTVBhcnNlci5jcHAJKHJldmlzaW9uIDYwNDYyKQorKysgV2ViQ29yZS94bWwvRE9N
UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgIkRP
TVBhcnNlci5oIgogCiAjaW5jbHVkZSAiRE9NSW1wbGVtZW50YXRpb24uaCIKKyNpbmNsdWRlICJG
cmFtZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTMxLDYgKzMyLDEyIEBAIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IERPTVBhcnNlcjo6cGFy
c2VGcm8KIAogICAgIFJlZlB0cjxEb2N1bWVudD4gZG9jID0gRE9NSW1wbGVtZW50YXRpb246OmNy
ZWF0ZURvY3VtZW50KGNvbnRlbnRUeXBlLCAwLCBmYWxzZSk7CiAKKyAgICBpZiAobV9zY3JpcHRF
eGVjdXRpb25Db250ZXh0ICYmIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNEb2N1bWVudCgp
KSB7CisgICAgICAgIERvY3VtZW50KiBvcmlnaW5Eb2MgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+
KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CisgICAgICAgIGlmIChvcmlnaW5Eb2MtPmZyYW1l
KCkpCisgICAgICAgICAgICBvcmlnaW5Eb2MtPmZyYW1lKCktPnJlZ2lzdGVyU3ViRG9jdW1lbnQo
ZG9jLmdldCgpKTsKKyAgICB9CisKICAgICBkb2MtPm9wZW4oKTsKICAgICBkb2MtPndyaXRlKHN0
cik7CiAgICAgZG9jLT5maW5pc2hQYXJzaW5nKCk7CkluZGV4OiBXZWJDb3JlL3htbC9ET01QYXJz
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9ET01QYXJzZXIuaAkocmV2aXNpb24gNjA0
NjIpCisrKyBXZWJDb3JlL3htbC9ET01QYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTIg
KzI4LDE4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKICAgICBjbGFzcyBET01QYXJzZXIg
OiBwdWJsaWMgUmVmQ291bnRlZDxET01QYXJzZXI+IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPERPTVBhcnNlcj4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3
IERPTVBhcnNlcik7IH0KLSAgICAgICAgCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPERPTVBh
cnNlcj4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRE9NUGFyc2VyKGNvbnRleHQpKTsKKyAg
ICAgICAgfQorCiAgICAgICAgIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IHBhcnNlRnJvbVN0cmluZyhj
b25zdCBTdHJpbmcmIHN0ciwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSk7CiAgICAgICAgIAog
ICAgIHByaXZhdGU6Ci0gICAgICAgIERPTVBhcnNlcigpIHsgfSAgICAgICAgCisgICAgICAgIERP
TVBhcnNlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQorICAgICAgICAgICAgOiBt
X3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoY29udGV4dCkgeyB9CisKKyAgICAgICAgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0OwogICAgIH07CiAKIH0KSW5k
ZXg6IFdlYkNvcmUveG1sL0RPTVBhcnNlci5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwv
RE9NUGFyc2VyLmlkbAkocmV2aXNpb24gNjA0NjIpCisrKyBXZWJDb3JlL3htbC9ET01QYXJzZXIu
aWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xOCw3ICsxOCwxMCBAQAogICovCiAKIG1vZHVsZSB4cGF0
aCB7Ci0gICAgaW50ZXJmYWNlIFtDYW5CZUNvbnN0cnVjdGVkXSBET01QYXJzZXIgeworICAgIGlu
dGVyZmFjZSBbCisgICAgICAgIENhbkJlQ29uc3RydWN0ZWQsCisgICAgICAgIENhbGxXaXRoPVNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQKKyAgICBdIERPTVBhcnNlciB7CiAgICAgICAgIERvY3VtZW50
IHBhcnNlRnJvbVN0cmluZyhpbiBET01TdHJpbmcgc3RyLCBpbiBET01TdHJpbmcgY29udGVudFR5
cGUpOwogICAgIH07CiB9CkluZGV4OiBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCShyZXZpc2lvbiA2MDQ2
MikKKysrIFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkV2ZW50RXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiRXZl
bnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJGcmFtZS5o
IgogI2luY2x1ZGUgIkhUVFBQYXJzZXJzLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxl
ci5oIgogI2luY2x1ZGUgIkluc3BlY3RvclRpbWVsaW5lQWdlbnQuaCIKQEAgLTI0MSw2ICsyNDIs
OSBAQCBEb2N1bWVudCogWE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlWE1MKCkgCiAgICAgICAgICAg
ICBtX3Jlc3BvbnNlWE1MID0gMDsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1fcmVz
cG9uc2VYTUwgPSBEb2N1bWVudDo6Y3JlYXRlKDApOworICAgICAgICAgICAgaWYgKGRvY3VtZW50
KCktPmZyYW1lKCkpCisgICAgICAgICAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+cmVnaXN0
ZXJTdWJEb2N1bWVudChtX3Jlc3BvbnNlWE1MLmdldCgpLCBtX3VybCk7CisKICAgICAgICAgICAg
IG1fcmVzcG9uc2VYTUwtPm9wZW4oKTsKICAgICAgICAgICAgIG1fcmVzcG9uc2VYTUwtPnNldFVS
TChtX3VybCk7CiAgICAgICAgICAgICAvLyBGSVhNRTogU2V0IExhc3QtTW9kaWZpZWQuCkluZGV4
OiBXZWJDb3JlL3htbC9YU0xJbXBvcnRSdWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3ht
bC9YU0xJbXBvcnRSdWxlLmNwcAkocmV2aXNpb24gNjA0NjIpCisrKyBXZWJDb3JlL3htbC9YU0xJ
bXBvcnRSdWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsMTAgQEAKIAogI2luY2x1
ZGUgIkNhY2hlZFhTTFN0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJEb2NMb2FkZXIuaCIKKyNpbmNs
dWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUVycm9y
LmgiCisjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgogI2luY2x1ZGUgIlhTTFN0eWxl
U2hlZXQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzgsMTggKzgyLDI4IEBAIGJvb2wg
WFNMSW1wb3J0UnVsZTo6aXNMb2FkaW5nKCkKIHZvaWQgWFNMSW1wb3J0UnVsZTo6bG9hZFNoZWV0
KCkKIHsKICAgICBEb2NMb2FkZXIqIGRvY0xvYWRlciA9IDA7CisgICAgWFNMU3R5bGVTaGVldCog
cm9vdFhTTCA9IDA7CiAgICAgU3R5bGVCYXNlKiByb290ID0gdGhpczsKICAgICBTdHlsZUJhc2Uq
IHBhcmVudDsKICAgICB3aGlsZSAoKHBhcmVudCA9IHJvb3QtPnBhcmVudCgpKSkKICAgICAgICAg
cm9vdCA9IHBhcmVudDsKLSAgICBpZiAocm9vdC0+aXNYU0xTdHlsZVNoZWV0KCkpCi0gICAgICAg
IGRvY0xvYWRlciA9IHN0YXRpY19jYXN0PFhTTFN0eWxlU2hlZXQqPihyb290KS0+ZG9jTG9hZGVy
KCk7CisgICAgaWYgKHJvb3QtPmlzWFNMU3R5bGVTaGVldCgpKSB7CisgICAgICAgIHJvb3RYU0wg
PSBzdGF0aWNfY2FzdDxYU0xTdHlsZVNoZWV0Kj4ocm9vdCk7CisgICAgICAgIGRvY0xvYWRlciA9
IHJvb3RYU0wtPmRvY0xvYWRlcigpOworICAgIH0KICAgICAKICAgICBTdHJpbmcgYWJzSHJlZiA9
IG1fc3RySHJlZjsKKyAgICBOb2RlKiBvd25lck5vZGUgPSByb290WFNMLT5vd25lck5vZGUoKTsK
ICAgICBYU0xTdHlsZVNoZWV0KiBwYXJlbnRTaGVldCA9IHBhcmVudFN0eWxlU2hlZXQoKTsKICAg
ICBpZiAoIXBhcmVudFNoZWV0LT5maW5hbFVSTCgpLmlzTnVsbCgpKQogICAgICAgICAvLyB1c2Ug
cGFyZW50IHN0eWxlaGVldCdzIFVSTCBhcyB0aGUgYmFzZSBVUkwKICAgICAgICAgYWJzSHJlZiA9
IEtVUkwocGFyZW50U2hlZXQtPmZpbmFsVVJMKCksIG1fc3RySHJlZikuc3RyaW5nKCk7CisgICAg
ZWxzZSBpZiAob3duZXJOb2RlKSB7CisgICAgICAgIC8vIHVzZSBiYXNlIHVybCBmcm9tIG9yaWdp
bkZyYW1lJ3MgZG9jdW1lbnQgd2hlbiBwYXJlbnQgc3R5bGVzaGVldCBkb250IGhhdmUgYW4gZmlu
YWwgdXJsCisgICAgICAgIC8vIHRoaXMgY2FuIGZvciBleGFtcGxlIGhhcHBlbiB3aGVuIHRoZSBz
dHlsZXNoZWV0IGlzIGNyZWF0ZWQgd2l0aCBET01QYXJzZXIucGFyc2VGcm9tU3RyaW5nCisgICAg
ICAgIGlmIChGcmFtZSogb3JpZ2luRnJhbWUgPSBvd25lck5vZGUtPmRvY3VtZW50KCktPm9yaWdp
bkZyYW1lKCkpCisgICAgICAgICAgICBhYnNIcmVmID0gS1VSTChvcmlnaW5GcmFtZS0+ZG9jdW1l
bnQoKS0+YmFzZVVSTCgpLCBtX3N0ckhyZWYpLnN0cmluZygpOworICAgIH0KICAgICAKICAgICAv
LyBDaGVjayBmb3IgYSBjeWNsZSBpbiBvdXIgaW1wb3J0IGNoYWluLiAgSWYgd2UgZW5jb3VudGVy
IGEgc3R5bGVzaGVldAogICAgIC8vIGluIG91ciBwYXJlbnQgY2hhaW4gd2l0aCB0aGUgc2FtZSBV
UkwsIHRoZW4ganVzdCBiYWlsLgpAQCAtOTcsMTIgKzExMSwyMCBAQCB2b2lkIFhTTEltcG9ydFJ1
bGU6OmxvYWRTaGVldCgpCiAgICAgICAgIGlmIChwYXJlbnQtPmlzWFNMU3R5bGVTaGVldCgpICYm
IGFic0hyZWYgPT0gc3RhdGljX2Nhc3Q8WFNMU3R5bGVTaGVldCo+KHBhcmVudCktPmZpbmFsVVJM
KCkuc3RyaW5nKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAorCisgICAgaWYg
KG93bmVyTm9kZSAmJiBvd25lck5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6UFJPQ0VTU0lOR19J
TlNUUlVDVElPTl9OT0RFKQorICAgICAgICBsb2FkU2hlZXRBc3luYyhkb2NMb2FkZXIsIGFic0hy
ZWYpOworICAgIGVsc2UKKyAgICAgICAgbG9hZFNoZWV0U3luYyhkb2NMb2FkZXIsIGFic0hyZWYp
OworfQorCit2b2lkIFhTTEltcG9ydFJ1bGU6OmxvYWRTaGVldEFzeW5jKERvY0xvYWRlciogZG9j
TG9hZGVyLCBjb25zdCBTdHJpbmcmIGFic0hyZWYpCit7CiAgICAgbV9jYWNoZWRTaGVldCA9IGRv
Y0xvYWRlci0+cmVxdWVzdFhTTFN0eWxlU2hlZXQoYWJzSHJlZik7Ci0gICAgCisKICAgICBpZiAo
bV9jYWNoZWRTaGVldCkgewogICAgICAgICBtX2NhY2hlZFNoZWV0LT5hZGRDbGllbnQodGhpcyk7
Ci0gICAgICAgIAorCiAgICAgICAgIC8vIElmIHRoZSBpbXBvcnRlZCBzaGVldCBpcyBpbiB0aGUg
Y2FjaGUsIHRoZW4gc2V0WFNMU3R5bGVTaGVldCBnZXRzIGNhbGxlZCwKICAgICAgICAgLy8gYW5k
IHRoZSBzaGVldCBldmVuIGdldHMgcGFyc2VkICh2aWEgcGFyc2VTdHJpbmcpLiAgSW4gdGhpcyBj
YXNlIHdlIGhhdmUKICAgICAgICAgLy8gbG9hZGVkIChldmVuIGlmIG91ciBzdWJyZXNvdXJjZXMg
aGF2ZW4ndCksIHNvIGlmIHdlIGhhdmUgYSBzdHlsZXNoZWV0IGFmdGVyCkBAIC0xMTIsNiArMTM0
LDM5IEBAIHZvaWQgWFNMSW1wb3J0UnVsZTo6bG9hZFNoZWV0KCkKICAgICB9CiB9CiAKK3ZvaWQg
WFNMSW1wb3J0UnVsZTo6bG9hZFNoZWV0U3luYyhEb2NMb2FkZXIqIGRvY0xvYWRlciwgY29uc3Qg
U3RyaW5nJiBhYnNIcmVmKQoreworICAgIFJlc291cmNlRXJyb3IgZXJyb3I7CisgICAgUmVzb3Vy
Y2VSZXNwb25zZSByZXNwb25zZTsKKyAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKKworICAgIERvY3Vt
ZW50KiBkb2MgPSBkb2NMb2FkZXItPmRvYygpOworICAgIEZyYW1lKiBmcmFtZSA9IGRvYy0+ZnJh
bWUoKSA/IGRvYy0+ZnJhbWUoKSA6IGRvYy0+b3JpZ2luRnJhbWUoKTsKKworICAgIEtVUkwgdXJs
KFBhcnNlZFVSTFN0cmluZywgYWJzSHJlZik7CisKKyAgICBib29sIHJlcXVlc3RBbGxvd2VkID0g
ZnJhbWUgJiYgZG9jLT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHVybCk7CisgICAgaWYg
KHJlcXVlc3RBbGxvd2VkKSB7CisgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+bG9hZFJlc291cmNl
U3luY2hyb25vdXNseSh1cmwsIEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsIGVycm9yLCByZXNwb25z
ZSwgZGF0YSk7CisgICAgICAgIHJlcXVlc3RBbGxvd2VkID0gZG9jLT5zZWN1cml0eU9yaWdpbigp
LT5jYW5SZXF1ZXN0KHJlc3BvbnNlLnVybCgpKTsKKyAgICB9CisgICAgaWYgKCFyZXF1ZXN0QWxs
b3dlZCkgeworICAgICAgICBkYXRhLmNsZWFyKCk7CisgICAgICAgIGRvY0xvYWRlci0+cHJpbnRB
Y2Nlc3NEZW5pZWRNZXNzYWdlKHVybCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoZXJyb3IuaXNOdWxsKCkpIHsKKyAgICAgICAgUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+
IGRlY29kZXIgPSBUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUoInRleHQveHNsIik7CisgICAg
ICAgIFN0cmluZyBlbmNvZGluZyA9IHJlc3BvbnNlLnRleHRFbmNvZGluZ05hbWUoKTsKKyAgICAg
ICAgaWYgKCFlbmNvZGluZy5pc051bGwoKSkKKyAgICAgICAgICAgIGRlY29kZXItPnNldEVuY29k
aW5nKGVuY29kaW5nLCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpFbmNvZGluZ0Zyb21IVFRQSGVhZGVy
KTsKKworICAgICAgICBTdHJpbmcgc2hlZXQoZGVjb2Rlci0+ZGVjb2RlKGRhdGEuZGF0YSgpLCBk
YXRhLnNpemUoKSkpOworICAgICAgICBzZXRYU0xTdHlsZVNoZWV0KGFic0hyZWYsIHJlc3BvbnNl
LnVybCgpLCBzaGVldCk7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNl
bmRpZiAvLyBFTkFCTEUoWFNMVCkKSW5kZXg6IFdlYkNvcmUveG1sL1hTTEltcG9ydFJ1bGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YU0xJbXBvcnRSdWxlLmgJKHJldmlzaW9uIDYwNDYy
KQorKysgV2ViQ29yZS94bWwvWFNMSW1wb3J0UnVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3
ICs1OCwxMCBAQCBwcml2YXRlOgogCiAgICAgLy8gZnJvbSBDYWNoZWRSZXNvdXJjZUNsaWVudAog
ICAgIHZpcnR1YWwgdm9pZCBzZXRYU0xTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgaHJlZiwgY29u
c3QgS1VSTCYgYmFzZVVSTCwgY29uc3QgU3RyaW5nJiBzaGVldCk7Ci0gICAgCisKKyAgICB2b2lk
IGxvYWRTaGVldEFzeW5jKERvY0xvYWRlciogZG9jTG9hZGVyLCBjb25zdCBTdHJpbmcmIGFic0hy
ZWYpOworICAgIHZvaWQgbG9hZFNoZWV0U3luYyhEb2NMb2FkZXIqIGRvY0xvYWRlciwgY29uc3Qg
U3RyaW5nJiBhYnNIcmVmKTsKKwogICAgIFN0cmluZyBtX3N0ckhyZWY7CiAgICAgUmVmUHRyPFhT
TFN0eWxlU2hlZXQ+IG1fc3R5bGVTaGVldDsKICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNo
ZWRYU0xTdHlsZVNoZWV0PiBtX2NhY2hlZFNoZWV0OwpJbmRleDogV2ViQ29yZS94bWwvWFNMVFBy
b2Nlc3Nvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5jcHAJ
KHJldmlzaW9uIDYwNDYyKQorKysgV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTgxLDYgKzgxLDEwIEBAIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IFhTTFRQcm9j
ZXNzb3I6OmNyZWEKICAgICAgICAgICAgIHZpZXctPmNsZWFyKCk7CiAgICAgICAgIHJlc3VsdC0+
c2V0VHJhbnNmb3JtU291cmNlRG9jdW1lbnQoZnJhbWUtPmRvY3VtZW50KCkpOwogICAgICAgICBm
cmFtZS0+c2V0RG9jdW1lbnQocmVzdWx0KTsKKyAgICB9IGVsc2UgaWYgKG1fc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCAmJiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzRG9jdW1lbnQoKSkgewor
ICAgICAgICBEb2N1bWVudCogb3JpZ2luRG9jID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihtX3Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQpOworICAgICAgICBpZiAob3JpZ2luRG9jLT5mcmFtZSgpKQor
ICAgICAgICAgICAgb3JpZ2luRG9jLT5mcmFtZSgpLT5yZWdpc3RlclN1YkRvY3VtZW50KHJlc3Vs
dC5nZXQoKSk7CiAgICAgfQogCiAgICAgaWYgKHNvdXJjZUlzRG9jdW1lbnQpCkluZGV4OiBXZWJD
b3JlL3htbC9YU0xUUHJvY2Vzc29yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWFNMVFBy
b2Nlc3Nvci5oCShyZXZpc2lvbiA2MDQ2MikKKysrIFdlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsMTAgQEAgY2xhc3MgRG9jdW1lbnRGcmFnbWVu
dDsKIAogY2xhc3MgWFNMVFByb2Nlc3NvciA6IHB1YmxpYyBSZWZDb3VudGVkPFhTTFRQcm9jZXNz
b3I+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxYU0xUUHJvY2Vzc29yPiBjcmVh
dGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgWFNMVFByb2Nlc3Nvcik7IH0KKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxYU0xUUHJvY2Vzc29yPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgWFNMVFByb2Nlc3Nv
cihjb250ZXh0KSk7CisgICAgfQogCiAgICAgdm9pZCBzZXRYU0xTdHlsZVNoZWV0KFBhc3NSZWZQ
dHI8WFNMU3R5bGVTaGVldD4gc3R5bGVTaGVldCkgeyBtX3N0eWxlc2hlZXQgPSBzdHlsZVNoZWV0
OyB9CiAgICAgYm9vbCB0cmFuc2Zvcm1Ub1N0cmluZyhOb2RlKiBzb3VyY2UsIFN0cmluZyYgcmVz
dWx0TUlNRVR5cGUsIFN0cmluZyYgcmVzdWx0U3RyaW5nLCBTdHJpbmcmIHJlc3VsdEVuY29kaW5n
KTsKQEAgLTcyLDggKzc1LDEwIEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5n
LCBTdHJpbmc+IFBhcmFtZXRlck1hcDsKIAogcHJpdmF0ZToKLSAgICBYU0xUUHJvY2Vzc29yKCkg
eyB9CisgICAgWFNMVFByb2Nlc3NvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQor
ICAgICAgICA6IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dChjb250ZXh0KSB7IH0KIAorICAgIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKICAgICBSZWZQ
dHI8WFNMU3R5bGVTaGVldD4gbV9zdHlsZXNoZWV0OwogICAgIFJlZlB0cjxOb2RlPiBtX3N0eWxl
c2hlZXRSb290Tm9kZTsKICAgICBQYXJhbWV0ZXJNYXAgbV9wYXJhbWV0ZXJzOwpJbmRleDogV2Vi
Q29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
eG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcAkocmV2aXNpb24gNjA0NjIpCisrKyBXZWJDb3Jl
L3htbC9YU0xUUHJvY2Vzc29yTGlieHNsdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNywxMCAr
MTE3LDEzIEBAIHN0YXRpYyB4bWxEb2NQdHIgZG9jTG9hZGVyRnVuYyhjb25zdCB4bWwKIAogICAg
ICAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKIAotICAgICAgICBib29sIHJlcXVlc3RBbGxvd2VkID0g
Z2xvYmFsRG9jTG9hZGVyLT5mcmFtZSgpICYmIGdsb2JhbERvY0xvYWRlci0+ZG9jKCktPnNlY3Vy
aXR5T3JpZ2luKCktPmNhblJlcXVlc3QodXJsKTsKKyAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50
ID0gZ2xvYmFsRG9jTG9hZGVyLT5kb2MoKTsKKyAgICAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1l
bnQtPmZyYW1lKCkgPyBkb2N1bWVudC0+ZnJhbWUoKSA6IGRvY3VtZW50LT5vcmlnaW5GcmFtZSgp
OworCisgICAgICAgIGJvb2wgcmVxdWVzdEFsbG93ZWQgPSBmcmFtZSAmJiBkb2N1bWVudC0+c2Vj
dXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdCh1cmwpOwogICAgICAgICBpZiAocmVxdWVzdEFsbG93
ZWQpIHsKLSAgICAgICAgICAgIGdsb2JhbERvY0xvYWRlci0+ZnJhbWUoKS0+bG9hZGVyKCktPmxv
YWRSZXNvdXJjZVN5bmNocm9ub3VzbHkodXJsLCBBbGxvd1N0b3JlZENyZWRlbnRpYWxzLCBlcnJv
ciwgcmVzcG9uc2UsIGRhdGEpOwotICAgICAgICAgICAgcmVxdWVzdEFsbG93ZWQgPSBnbG9iYWxE
b2NMb2FkZXItPmRvYygpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHJlc3BvbnNlLnVy
bCgpKTsKKyAgICAgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+bG9hZFJlc291cmNlU3luY2hyb25v
dXNseSh1cmwsIEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsIGVycm9yLCByZXNwb25zZSwgZGF0YSk7
CisgICAgICAgICAgICByZXF1ZXN0QWxsb3dlZCA9IGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigp
LT5jYW5SZXF1ZXN0KHJlc3BvbnNlLnVybCgpKTsKICAgICAgICAgfQogICAgICAgICBpZiAoIXJl
cXVlc3RBbGxvd2VkKSB7CiAgICAgICAgICAgICBkYXRhLmNsZWFyKCk7CkluZGV4OiBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiA2MDQ2MikKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDM4IEBACisyMDEwLTA2LTA0ICBBbmRyZWFzIFdpY3RvciAgPGFuZHJlYXMud2ljdG9y
QHhjZXJpb24uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIHhzbDppbXBvcnQgYW5kIGRvY3VtZW50KCkgZG9uJ3Qgd29yayBpbiBzdHlsZXNoZWV0
cyBsb2FkZWQgdmlhIFhNTEh0dHBSZXF1ZXN0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMDMxMworCisgICAgICAgICogZmFzdC94c2wvdHJhbnNmb3Jt
LWRvY2ltcGwtZG9jLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC94c2wvdHJh
bnNmb3JtLWRvY2ltcGwtZG9jLnhodG1sOiBBZGRlZC4KKyAgICAgICAgIC0gVGVzdCB0aGF0IHN0
eWxlc2hlZXRzIGNyZWF0ZWQgd2l0aCBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVEb2N1
bWVudAorICAgICAgICAgICBjYW4gdXNlIHhzbDppbXBvcnQKKyAgICAgICAgKiBmYXN0L3hzbC90
cmFuc2Zvcm0tZG9tcGFyc2VyLWRvYy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZh
c3QveHNsL3RyYW5zZm9ybS1kb21wYXJzZXItZG9jLnhodG1sOiBBZGRlZC4KKyAgICAgICAgIC0g
VGVzdCB0aGF0IHN0eWxlc2hlZXRzIGNyZWF0ZWQgd2l0aCBET01QYXJzZXIucGFyc2VGcm9tU3Ry
aW5nCisgICAgICAgICAgIGNhbiB1c2UgeHNsOmltcG9ydAorICAgICAgICAqIGZhc3QveHNsL3Ry
YW5zZm9ybS10cmFuc2Zvcm1lZC1kb2MtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L3hzbC90cmFuc2Zvcm0tdHJhbnNmb3JtZWQtZG9jLnhodG1sOiBBZGRlZC4KKyAgICAgICAg
IC0gVGVzdCB0aGF0IHN0eWxlc2hlZXRzIGNyZWF0ZWQgd2l0aCBYU0xUUHJvY2Vzc29yLnRyYW5z
Zm9ybVRvRG9jdW1lbnQKKyAgICAgICAgICAgY2FuIHVzZSB4c2w6aW1wb3J0CisgICAgICAgICog
ZmFzdC94c2wvdHJhbnNmb3JtLXhoci1kb2MtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGh0dHAv
dGVzdHMveHNsOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXM6IEFk
ZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMveHNsL3Jlc291cmNlcy90cmFuc2Zvcm0tZnJhbWVk
LXN1YmZyYW1lMS54aHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy94c2wvcmVzb3Vy
Y2VzL3RyYW5zZm9ybS1mcmFtZWQtc3ViZnJhbWUyLnhodG1sOiBBZGRlZC4KKyAgICAgICAgKiBo
dHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMveGhyLWRvYy1jcm9zcy1vcmlnaW4ueHNsOiBBZGRlZC4K
KyAgICAgICAgKiBodHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMveGhyLWRvYy1pbXBvcnRlZC54c2w6
IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMveHNsL3Jlc291cmNlcy94aHItZG9jLnhtbDog
QWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL3hoci1kb2MueHNsOiBB
ZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0tZnJhbWVkLWRvYy1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMveHNsL3RyYW5zZm9ybS1mcmFt
ZWQtZG9jLnhodG1sOiBBZGRlZC4KKyAgICAgICAgIC0gVGVzdCB0aGF0IG9yaWdpbkZyYW1lIGlz
IHJlc2V0IG9uIGZyYW1lIG5hdmlnYXRpb24KKyAgICAgICAgKiBodHRwL3Rlc3RzL3hzbC90cmFu
c2Zvcm0teGhyLWRvYy1jcm9zcy1vcmlnaW4tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBodHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0teGhyLWRvYy1jcm9zcy1vcmlnaW4ueGh0bWw6IEFk
ZGVkLgorICAgICAgICAgLSBUZXN0IHRoYXQgeW91IGNhbid0IGltcG9ydCBkb2N1bWVudHMgY3Jv
c3Mgb3JpZ2luCisKIDIwMTAtMDUtMzEgIFJvbGFuZCBTdGVpbmVyICA8cm9sYW5kc3RlaW5lckBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZDogbGFuZCBuZXcgQ2hyb21pdW0gYmFz
ZWxpbmVzIHRvIHVuYmxvY2sgV2ViS2l0IHJvbGwKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QveHNs
L3RyYW5zZm9ybS1kb2NpbXBsLWRvYy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC94c2wvdHJhbnNmb3JtLWRvY2ltcGwtZG9jLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS1kb2NpbXBsLWRvYy1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorVGVzdCBmb3IgYnVnIDEwMzEz
OiB4c2w6aW1wb3J0IGRvZXNuJ3Qgd29yayBpbiBzdHlsZXNoZWV0cyBsb2FkZWQgdmlhIFhNTEh0
dHBSZXF1ZXN0LgorCitTVUNDRVNTCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zv
cm0tZG9jaW1wbC1kb2MueGh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC94c2wv
dHJhbnNmb3JtLWRvY2ltcGwtZG9jLnhodG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC94c2wvdHJhbnNmb3JtLWRvY2ltcGwtZG9jLnhodG1sCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDQ1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCFET0NU
WVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53
My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwxMS5kdGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93
d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiI+Cis8aGVhZD4KKyAgICA8dGl0bGU+
eHNsIGltcG9ydCB0ZXN0PC90aXRsZT4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw
dCI+PCFbQ0RBVEFbCisgICAgICAgIGZ1bmN0aW9uIGxvYWQoKSB7CisgICAgICAgICAgICBpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworICAgICAgICAgICAgdmFyIHhzbHROUyA9ICJodHRw
Oi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iOworICAgICAgICAgICAgdmFyIHhzbHRE
b2MgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVEb2N1bWVudCh4c2x0TlMsICJzdHls
ZXNoZWV0IiwgbnVsbCk7CisgICAgICAgICAgICB2YXIgcm9vdEVsZW0gPSB4c2x0RG9jLmRvY3Vt
ZW50RWxlbWVudDsKKyAgICAgICAgICAgIHJvb3RFbGVtLnNldEF0dHJpYnV0ZSgidmVyc2lvbiIs
ICIxLjAiKTsKKworICAgICAgICAgICAgdmFyIGltcG9ydEVsZW0gPSB4c2x0RG9jLmNyZWF0ZUVs
ZW1lbnROUyh4c2x0TlMsICJpbXBvcnQiKTsKKyAgICAgICAgICAgIGltcG9ydEVsZW0uc2V0QXR0
cmlidXRlKCJocmVmIiwgInJlc291cmNlcy94aHItZG9jLWltcG9ydGVkLnhzbCIpOworICAgICAg
ICAgICAgcm9vdEVsZW0uYXBwZW5kQ2hpbGQoaW1wb3J0RWxlbSk7CisKKyAgICAgICAgICAgIHZh
ciB0ZW1wbGF0ZUVsZW0gPSB4c2x0RG9jLmNyZWF0ZUVsZW1lbnROUyh4c2x0TlMsICJ0ZW1wbGF0
ZSIpOworICAgICAgICAgICAgdGVtcGxhdGVFbGVtLnNldEF0dHJpYnV0ZSgibWF0Y2giLCAiL3Jv
b3QiKTsKKyAgICAgICAgICAgIHZhciBjYWxsRWxlbSA9IHhzbHREb2MuY3JlYXRlRWxlbWVudE5T
KHhzbHROUywgImNhbGwtdGVtcGxhdGUiKTsKKyAgICAgICAgICAgIGNhbGxFbGVtLnNldEF0dHJp
YnV0ZSgibmFtZSIsICJ3b3JrcyIpOworICAgICAgICAgICAgdGVtcGxhdGVFbGVtLmFwcGVuZENo
aWxkKGNhbGxFbGVtKTsKKyAgICAgICAgICAgIHJvb3RFbGVtLmFwcGVuZENoaWxkKHRlbXBsYXRl
RWxlbSk7CisKKyAgICAgICAgICAgIHZhciB4c2x0ID0gbmV3IFhTTFRQcm9jZXNzb3IoKTsKKyAg
ICAgICAgICAgIHhzbHQuaW1wb3J0U3R5bGVzaGVldCh4c2x0RG9jKTsKKworICAgICAgICAgICAg
dmFyIHhtbERvYyA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZURvY3VtZW50KCIiLCAi
cm9vdCIsIG51bGwpOworICAgICAgICAgICAgdmFyIHJlc3VsdERvYyA9IHhzbHQudHJhbnNmb3Jt
VG9Eb2N1bWVudCh4bWxEb2MpOworICAgICAgICAgICAgdmFyIGZyYWdtZW50ID0gZG9jdW1lbnQu
aW1wb3J0Tm9kZShyZXN1bHREb2MuZG9jdW1lbnRFbGVtZW50LCB0cnVlKTsKKworICAgICAgICAg
ICAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkaXYnKTsKKyAgICAgICAgICAg
IGRpdi5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChmcmFnbWVudCwgZGl2KTsKKyAgICAgICAgfQor
ICAgIF1dPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJsb2FkKCkiPgorPHA+VGVz
dCBmb3IgPGEgaHJlZj0iaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAz
MTMiPmJ1ZyAxMDMxMzwvYT46Cit4c2w6aW1wb3J0IGRvZXNuJ3Qgd29yayBpbiBzdHlsZXNoZWV0
cyBsb2FkZWQgdmlhIFhNTEh0dHBSZXF1ZXN0LjwvcD4KKworPGRpdiBpZD0iZGl2Ij5JdCdzIG5p
Y2UgdGhhdCB0aGlzIGhhc24ndCBjcmFzaGVkLCBidXQgdGhlIFhTTCB0cmFuc2Zvcm1hdGlvbiBo
YXMgZmFpbGVkLjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC94c2wvdHJhbnNmb3JtLWRvbXBhcnNlci1kb2MtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS1kb21wYXJzZXItZG9jLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS1kb21wYXJz
ZXItZG9jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitUZXN0IGZv
ciBidWcgMTAzMTM6IHhzbDppbXBvcnQgZG9lc24ndCB3b3JrIGluIHN0eWxlc2hlZXRzIGxvYWRl
ZCB2aWEgWE1MSHR0cFJlcXVlc3QuCisKK1NVQ0NFU1MKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
eHNsL3RyYW5zZm9ybS1kb21wYXJzZXItZG9jLnhodG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QveHNsL3RyYW5zZm9ybS1kb21wYXJzZXItZG9jLnhodG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC94c2wvdHJhbnNmb3JtLWRvbXBhcnNlci1kb2MueGh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNDEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9
InV0Zi04Ij8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMS8v
RU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDExL0RURC94aHRtbDExLmR0ZCI+Cis8aHRt
bCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIj4KKzxo
ZWFkPgorICAgIDx0aXRsZT54c2wgaW1wb3J0IHRlc3Q8L3RpdGxlPgorICAgIDxzY3JpcHQgdHlw
ZT0idGV4dC9qYXZhc2NyaXB0Ij48IVtDREFUQVsKKyAgICAgICAgZnVuY3Rpb24gbG9hZCgpIHsK
KyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAg
ICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCisgICAgICAgICAgICB2
YXIgeHNsdFN0ciA9CisgICAgICAgICAgICAgICAgJzx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIx
LjAiJyArCisgICAgICAgICAgICAgICAgJyAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8x
OTk5L1hTTC9UcmFuc2Zvcm0iJyArCisgICAgICAgICAgICAgICAgJyAgeG1sbnM9Imh0dHA6Ly93
d3cudzMub3JnLzE5OTkveGh0bWwiPicgKworICAgICAgICAgICAgICAgICc8eHNsOmltcG9ydCBo
cmVmPSJyZXNvdXJjZXMveGhyLWRvYy1pbXBvcnRlZC54c2wiIC8+JyArCisgICAgICAgICAgICAg
ICAgJzx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii9yb290Ij4nICsKKyAgICAgICAgICAgICAgICAnICAg
IDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJ3b3JrcyIgLz4nICsKKyAgICAgICAgICAgICAgICAn
PC94c2w6dGVtcGxhdGU+JyArCisgICAgICAgICAgICAgICAgJzwveHNsOnN0eWxlc2hlZXQ+JzsK
KworICAgICAgICAgICAgdmFyIHBhcnNlciA9IG5ldyBET01QYXJzZXIoKTsKKyAgICAgICAgICAg
IHZhciB4c2x0ID0gbmV3IFhTTFRQcm9jZXNzb3IoKTsKKyAgICAgICAgICAgIHZhciB4c2x0RG9j
ID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyh4c2x0U3RyLCAiYXBwbGljYXRpb24veG1sIik7Cisg
ICAgICAgICAgICB4c2x0LmltcG9ydFN0eWxlc2hlZXQoeHNsdERvYyk7CisKKyAgICAgICAgICAg
IHZhciB4bWxEb2MgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKCI8cm9vdC8+IiwgImFwcGxpY2F0
aW9uL3htbCIpOworICAgICAgICAgICAgdmFyIHJlc3VsdERvYyA9IHhzbHQudHJhbnNmb3JtVG9E
b2N1bWVudCh4bWxEb2MpOworICAgICAgICAgICAgdmFyIGZyYWdtZW50ID0gZG9jdW1lbnQuaW1w
b3J0Tm9kZShyZXN1bHREb2MuZG9jdW1lbnRFbGVtZW50LCB0cnVlKTsKKworICAgICAgICAgICAg
dmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkaXYnKTsKKyAgICAgICAgICAgIGRp
di5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChmcmFnbWVudCwgZGl2KTsKKyAgICAgICAgfQorICAg
IF1dPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJsb2FkKCkiPgorPHA+VGVzdCBm
b3IgPGEgaHJlZj0iaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzMTMi
PmJ1ZyAxMDMxMzwvYT46Cit4c2w6aW1wb3J0IGRvZXNuJ3Qgd29yayBpbiBzdHlsZXNoZWV0cyBs
b2FkZWQgdmlhIFhNTEh0dHBSZXF1ZXN0LjwvcD4KKworPGRpdiBpZD0iZGl2Ij5JdCdzIG5pY2Ug
dGhhdCB0aGlzIGhhc24ndCBjcmFzaGVkLCBidXQgdGhlIFhTTCB0cmFuc2Zvcm1hdGlvbiBoYXMg
ZmFpbGVkLjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC94
c2wvdHJhbnNmb3JtLXRyYW5zZm9ybWVkLWRvYy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC94c2wvdHJhbnNmb3JtLXRyYW5zZm9ybWVkLWRvYy1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0tdHJhbnNm
b3JtZWQtZG9jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitUZXN0
IGZvciBidWcgMTAzMTM6IHhzbDppbXBvcnQgZG9lc24ndCB3b3JrIGluIHN0eWxlc2hlZXRzIGxv
YWRlZCB2aWEgWE1MSHR0cFJlcXVlc3QuCisKK1NVQ0NFU1MKSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QveHNsL3RyYW5zZm9ybS10cmFuc2Zvcm1lZC1kb2MueGh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC94c2wvdHJhbnNmb3JtLXRyYW5zZm9ybWVkLWRvYy54aHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS10cmFuc2Zvcm1lZC1kb2Mu
eGh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIg
ZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhI
VE1MIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDExL0RURC94aHRtbDExLmR0
ZCI+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9
ImVuIj4KKzxoZWFkPgorICAgIDx0aXRsZT54c2wgaW1wb3J0IHRlc3Q8L3RpdGxlPgorICAgIDxz
Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IVtDREFUQVsKKyAgICAgICAgZnVuY3Rpb24g
bG9hZCgpIHsKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisg
ICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCisgICAg
ICAgICAgICB2YXIgY29weVhzbHRTdHIgPQorICAgICAgICAgICAgICAgICc8eHNsOnN0eWxlc2hl
ZXQgdmVyc2lvbj0iMS4wIicgKworICAgICAgICAgICAgICAgICcgIHhtbG5zOnhzbD0iaHR0cDov
L3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIicgKworICAgICAgICAgICAgICAgICcgIHht
bG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4nICsKKyAgICAgICAgICAgICAgICAn
PHhzbDp0ZW1wbGF0ZSBtYXRjaD0iQCp8bm9kZSgpIj4nICsKKyAgICAgICAgICAgICAgICAnICA8
eHNsOmNvcHk+JyArCisgICAgICAgICAgICAgICAgJyAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBz
ZWxlY3Q9IkAqfG5vZGUoKSIvPicgKworICAgICAgICAgICAgICAgICcgIDwveHNsOmNvcHk+JyAr
CisgICAgICAgICAgICAgICAgJzwveHNsOnRlbXBsYXRlPicgKworICAgICAgICAgICAgICAgICc8
L3hzbDpzdHlsZXNoZWV0Pic7CisKKyAgICAgICAgICAgIHZhciBwYXJzZXIgPSBuZXcgRE9NUGFy
c2VyKCk7CisgICAgICAgICAgICB2YXIgeHNsdCA9IG5ldyBYU0xUUHJvY2Vzc29yKCk7CisgICAg
ICAgICAgICBjb3B5WHNsdERvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoY29weVhzbHRTdHIs
ICJhcHBsaWNhdGlvbi94bWwiKTsKKyAgICAgICAgICAgIHhzbHQuaW1wb3J0U3R5bGVzaGVldChj
b3B5WHNsdERvYyk7CisKKyAgICAgICAgICAgIHZhciByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3Qo
KTsKKyAgICAgICAgICAgIHJlcS5vcGVuKCdHRVQnLCAncmVzb3VyY2VzL3hoci1kb2MueHNsJywg
ZmFsc2UpOworICAgICAgICAgICAgcmVxLnNlbmQobnVsbCk7CisgICAgICAgICAgICB2YXIgeHNs
dERvYyA9IHhzbHQudHJhbnNmb3JtVG9Eb2N1bWVudChyZXEucmVzcG9uc2VYTUwpOworICAgICAg
ICAgICAgeHNsdC5pbXBvcnRTdHlsZXNoZWV0KHhzbHREb2MpOworCisgICAgICAgICAgICB2YXIg
eG1sRG9jID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZygiPHJvb3QvPiIsICJhcHBsaWNhdGlvbi94
bWwiKTsKKyAgICAgICAgICAgIHZhciByZXN1bHREb2MgPSB4c2x0LnRyYW5zZm9ybVRvRG9jdW1l
bnQoeG1sRG9jKTsKKyAgICAgICAgICAgIHZhciBmcmFnbWVudCA9IGRvY3VtZW50LmltcG9ydE5v
ZGUocmVzdWx0RG9jLmRvY3VtZW50RWxlbWVudCwgdHJ1ZSk7CisKKyAgICAgICAgICAgIHZhciBk
aXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGl2Jyk7CisgICAgICAgICAgICBkaXYucGFy
ZW50Tm9kZS5yZXBsYWNlQ2hpbGQoZnJhZ21lbnQsIGRpdik7CisgICAgICAgIH0KKyAgICBdXT48
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0ibG9hZCgpIj4KKzxwPlRlc3QgZm9yIDxh
IGhyZWY9Imh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzEzIj5idWcg
MTAzMTM8L2E+OgoreHNsOmltcG9ydCBkb2Vzbid0IHdvcmsgaW4gc3R5bGVzaGVldHMgbG9hZGVk
IHZpYSBYTUxIdHRwUmVxdWVzdC48L3A+CisKKzxkaXYgaWQ9ImRpdiI+SXQncyBuaWNlIHRoYXQg
dGhpcyBoYXNuJ3QgY3Jhc2hlZCwgYnV0IHRoZSBYU0wgdHJhbnNmb3JtYXRpb24gaGFzIGZhaWxl
ZC48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QveHNsL3Ry
YW5zZm9ybS14aHItZG9jLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L3hzbC90cmFuc2Zvcm0teGhyLWRvYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDYwNDYyKQor
KysgTGF5b3V0VGVzdHMvZmFzdC94c2wvdHJhbnNmb3JtLXhoci1kb2MtZXhwZWN0ZWQudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsMyBAQAotQ09OU09MRSBNRVNTQUdFOiBsaW5lIDIwOiBU
eXBlRXJyb3I6IFJlc3VsdCBvZiBleHByZXNzaW9uICdkb2MnIFt1bmRlZmluZWRdIGlzIG5vdCBh
biBvYmplY3QuCiBUZXN0IGZvciBidWcgMTAzMTM6IHhzbDppbXBvcnQgZG9lc24ndCB3b3JrIGlu
IHN0eWxlc2hlZXRzIGxvYWRlZCB2aWEgWE1MSHR0cFJlcXVlc3QuCiAKLUl0J3MgbmljZSB0aGF0
IHRoaXMgaGFzbid0IGNyYXNoZWQsIGJ1dCB0aGUgWFNMIHRyYW5zZm9ybWF0aW9uIGhhcyBmYWls
ZWQuCitTVUNDRVNTCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0t
ZnJhbWVkLWRvYy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy94c2wvdHJhbnNmb3JtLWZyYW1lZC1kb2MtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvdHJhbnNmb3JtLWZyYW1lZC1kb2MtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBACitDT05TT0xFIE1FU1NBR0U6IGxp
bmUgMjE6IFR5cGVFcnJvcjogUmVzdWx0IG9mIGV4cHJlc3Npb24gJ3Jlc3VsdERvYycgW3VuZGVm
aW5lZF0gaXMgbm90IGFuIG9iamVjdC4KK1Rlc3QgZm9yIGJ1ZyAxMDMxMzogeHNsOmltcG9ydCBk
b2Vzbid0IHdvcmsgaW4gc3R5bGVzaGVldHMgbG9hZGVkIHZpYSBYTUxIdHRwUmVxdWVzdC4KKwor
U1VDQ0VTUworSXQncyBuaWNlIHRoYXQgdGhpcyBoYXNuJ3QgY3Jhc2hlZCwgYnV0IHRoZSBYU0wg
dHJhbnNmb3JtYXRpb24gaGFzIGZhaWxlZC4KKworCistLS0tLS0tLQorRnJhbWU6ICdzdWJmcmFt
ZScKKy0tLS0tLS0tCitzdWJmcmFtZSAyCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hz
bC90cmFuc2Zvcm0tZnJhbWVkLWRvYy54aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0tZnJhbWVkLWRvYy54aHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3RyYW5zZm9ybS1mcmFtZWQtZG9jLnhodG1sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5n
PSJ1dGYtOCI/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjEv
L0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwxMS5kdGQiPgorPGh0
bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiI+Cis8
aGVhZD4KKyAgICA8dGl0bGU+eHNsIGltcG9ydCB0ZXN0PC90aXRsZT4KKyAgICA8c2NyaXB0IHR5
cGU9InRleHQvamF2YXNjcmlwdCI+PCFbQ0RBVEFbCisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBB
c1RleHQoKTsKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBDaGlsZEZyYW1l
c0FzVGV4dCgpOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHhzbHREb2MgPSBudWxsOworCisg
ICAgICAgIHZhciBwYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7CisgICAgICAgIHZhciB4bWxEb2Mg
PSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKCI8cm9vdC8+IiwgImFwcGxpY2F0aW9uL3htbCIpOwor
CisgICAgICAgIGZ1bmN0aW9uIHRyYW5zZm9ybShkaXYpIHsKKyAgICAgICAgICAgIHZhciB4c2x0
ID0gbmV3IFhTTFRQcm9jZXNzb3IoKTsKKyAgICAgICAgICAgIHhzbHQuaW1wb3J0U3R5bGVzaGVl
dCh4c2x0RG9jKTsKKyAgICAgICAgICAgIHZhciByZXN1bHREb2MgPSB4c2x0LnRyYW5zZm9ybVRv
RG9jdW1lbnQoeG1sRG9jKTsKKyAgICAgICAgICAgIHZhciBmcmFnbWVudCA9IGRvY3VtZW50Lmlt
cG9ydE5vZGUocmVzdWx0RG9jLmRvY3VtZW50RWxlbWVudCwgdHJ1ZSk7CisgICAgICAgICAgICBk
aXYucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoZnJhZ21lbnQsIGRpdik7CisgICAgICAgIH0KKwor
ICAgICAgICBmdW5jdGlvbiBsb2FkKCkgeworICAgICAgICAgICAgaWYgKCF4c2x0RG9jKSB7Cisg
ICAgICAgICAgICAgICAgeHNsdERvYyA9IHN1YmZyYW1lLnhzbHREb2M7CisgICAgICAgICAgICAg
ICAgdHJhbnNmb3JtKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkaXYxJykpOworICAgICAgICAg
ICAgICAgIHN1YmZyYW1lLndpbmRvdy5sb2NhdGlvbiA9ICJodHRwOi8vMTI3LjAuMC4xOjgwMDAv
eHNsL3Jlc291cmNlcy90cmFuc2Zvcm0tZnJhbWVkLXN1YmZyYW1lMi54aHRtbCI7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRyYW5zZm9ybShkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnZGl2MicpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIF1dPjwvc2Ny
aXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cD5UZXN0IGZvciA8YSBocmVmPSJodHRwOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDMxMyI+YnVnIDEwMzEzPC9hPjoKK3hzbDppbXBv
cnQgZG9lc24ndCB3b3JrIGluIHN0eWxlc2hlZXRzIGxvYWRlZCB2aWEgWE1MSHR0cFJlcXVlc3Qu
PC9wPgorPGRpdiBpZD0iZGl2MSI+SXQncyBuaWNlIHRoYXQgdGhpcyBoYXNuJ3QgY3Jhc2hlZCwg
YnV0IHRoZSBYU0wgdHJhbnNmb3JtYXRpb24gaGFzIGZhaWxlZC4KKzwvZGl2PgorPGRpdiBpZD0i
ZGl2MiI+SXQncyBuaWNlIHRoYXQgdGhpcyBoYXNuJ3QgY3Jhc2hlZCwgYnV0IHRoZSBYU0wgdHJh
bnNmb3JtYXRpb24gaGFzIGZhaWxlZC4KKzwvZGl2PgorPGlmcmFtZSBpZD0ic3ViZnJhbWUiIHNy
Yz0icmVzb3VyY2VzL3RyYW5zZm9ybS1mcmFtZWQtc3ViZnJhbWUxLnhodG1sIiBvbmxvYWQ9Imxv
YWQoKSI+Cis8L2lmcmFtZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0
dHAvdGVzdHMveHNsL3RyYW5zZm9ybS14aHItZG9jLWNyb3NzLW9yaWdpbi1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvdHJhbnNmb3JtLXhoci1k
b2MtY3Jvc3Mtb3JpZ2luLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2h0dHAvdGVzdHMveHNsL3RyYW5zZm9ybS14aHItZG9jLWNyb3NzLW9yaWdpbi1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNCBAQAorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDIw
OiBUeXBlRXJyb3I6IFJlc3VsdCBvZiBleHByZXNzaW9uICdkb2MnIFt1bmRlZmluZWRdIGlzIG5v
dCBhbiBvYmplY3QuCitUZXN0IGZvciBidWcgMTAzMTM6IHhzbDppbXBvcnQgZG9lc24ndCB3b3Jr
IGluIHN0eWxlc2hlZXRzIGxvYWRlZCB2aWEgWE1MSHR0cFJlcXVlc3QuCisKK0l0J3MgbmljZSB0
aGF0IHRoaXMgaGFzbid0IGNyYXNoZWQsIGJ1dCB0aGUgWFNMIHRyYW5zZm9ybWF0aW9uIGhhcyBm
YWlsZWQuCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0teGhyLWRv
Yy1jcm9zcy1vcmlnaW4ueGh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy94c2wvdHJhbnNmb3JtLXhoci1kb2MtY3Jvc3Mtb3JpZ2luLnhodG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvdHJhbnNmb3JtLXhoci1kb2MtY3Jvc3Mtb3Jp
Z2luLnhodG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMzIEBACis8P3htbCB2ZXJzaW9uPSIx
LjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RU
RCBYSFRNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwx
MS5kdGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDps
YW5nPSJlbiI+Cis8aGVhZD4KKyAgICA8dGl0bGU+eHNsIGltcG9ydCB0ZXN0PC90aXRsZT4KKyAg
ICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgICAgIGZ1bmN0aW9uIGxvYWQo
KSB7CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAg
ICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIHZhciByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICAg
ICAgICAgIHZhciB4c2x0ID0gbmV3IFhTTFRQcm9jZXNzb3IoKTsKKyAgICAgICAgICAgIHJlcS5v
cGVuKCdHRVQnLCAncmVzb3VyY2VzL3hoci1kb2MtY3Jvc3Mtb3JpZ2luLnhzbCcsIGZhbHNlKTsK
KyAgICAgICAgICAgIHJlcS5zZW5kKG51bGwpOworICAgICAgICAgICAgeHNsdC5pbXBvcnRTdHls
ZXNoZWV0KHJlcS5yZXNwb25zZVhNTCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJlcS5v
cGVuKCdHRVQnLCAncmVzb3VyY2VzL3hoci1kb2MueG1sJywgZmFsc2UpOworICAgICAgICAgICAg
cmVxLnNlbmQobnVsbCk7CisgICAgICAgICAgICB2YXIgZG9jID0geHNsdC50cmFuc2Zvcm1Ub0Rv
Y3VtZW50KHJlcS5yZXNwb25zZVhNTCk7CisgICAgICAgICAgICB2YXIgZnJhZ21lbnQgPSBkb2N1
bWVudC5pbXBvcnROb2RlKGRvYy5kb2N1bWVudEVsZW1lbnQsIHRydWUpOworICAgICAgICAgICAg
CisgICAgICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RpdicpOwor
ICAgICAgICAgICAgZGl2LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGZyYWdtZW50LCBkaXYpOwor
ICAgICAgICB9CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9ImxvYWQoKSI+
Cis8cD5UZXN0IGZvciA8YSBocmVmPSJodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMDMxMyI+YnVnIDEwMzEzPC9hPjoKK3hzbDppbXBvcnQgZG9lc24ndCB3b3JrIGluIHN0
eWxlc2hlZXRzIGxvYWRlZCB2aWEgWE1MSHR0cFJlcXVlc3QuPC9wPgorCis8ZGl2IGlkPSJkaXYi
Pkl0J3MgbmljZSB0aGF0IHRoaXMgaGFzbid0IGNyYXNoZWQsIGJ1dCB0aGUgWFNMIHRyYW5zZm9y
bWF0aW9uIGhhcyBmYWlsZWQuPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMvdHJhbnNmb3JtLWZyYW1lZC1zdWJmcmFtZTEu
eGh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvcmVzb3VyY2Vz
L3RyYW5zZm9ybS1mcmFtZWQtc3ViZnJhbWUxLnhodG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL3RyYW5zZm9ybS1mcmFtZWQtc3ViZnJhbWUx
LnhodG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAi
IGVuY29kaW5nPSJ1dGYtOCI/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBY
SFRNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwxMS5k
dGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5n
PSJlbiI+Cis8aGVhZD4KKyAgICA8dGl0bGU+eHNsIGltcG9ydCB0ZXN0PC90aXRsZT4KKyAgICA8
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCFbQ0RBVEFbCisgICAgICAgIHZhciB4c2x0
U3RyID0KKyAgICAgICAgICAgICc8eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIicgKworICAg
ICAgICAgICAgJyAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zv
cm0iJyArCisgICAgICAgICAgICAnICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRt
bCI+JyArCisgICAgICAgICAgICAnPHhzbDppbXBvcnQgaHJlZj0ieGhyLWRvYy1pbXBvcnRlZC54
c2wiIC8+JyArCisgICAgICAgICAgICAnPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iL3Jvb3QiPicgKwor
ICAgICAgICAgICAgJyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0id29ya3MiIC8+JyArCisg
ICAgICAgICAgICAnPC94c2w6dGVtcGxhdGU+JyArCisgICAgICAgICAgICAnPC94c2w6c3R5bGVz
aGVldD4nOworCisgICAgICAgIHZhciBwYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7CisgICAgICAg
IHZhciB4c2x0RG9jID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyh4c2x0U3RyLCAiYXBwbGljYXRp
b24veG1sIik7CisgICAgXV0+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KK3N1YmZyYW1lIDEK
KzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3Jlc291
cmNlcy90cmFuc2Zvcm0tZnJhbWVkLXN1YmZyYW1lMi54aHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMvdHJhbnNmb3JtLWZyYW1lZC1zdWJmcmFt
ZTIueGh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNv
dXJjZXMvdHJhbnNmb3JtLWZyYW1lZC1zdWJmcmFtZTIueGh0bWwJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IURP
Q1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iICJodHRwOi8vd3d3
LnczLm9yZy9UUi94aHRtbDExL0RURC94aHRtbDExLmR0ZCI+Cis8aHRtbCB4bWxucz0iaHR0cDov
L3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIj4KKzxoZWFkPgorICAgIDx0aXRs
ZT54c2wgaW1wb3J0IHRlc3Q8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+CitzdWJmcmFtZSAyCis8
L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNvdXJj
ZXMveGhyLWRvYy1jcm9zcy1vcmlnaW4ueHNsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0
dHAvdGVzdHMveHNsL3Jlc291cmNlcy94aHItZG9jLWNyb3NzLW9yaWdpbi54c2wJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMveGhyLWRvYy1jcm9z
cy1vcmlnaW4ueHNsCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACis8P3htbCB2ZXJzaW9u
PSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPHhzbDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCIK
KyAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisgIHht
bG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKworPHhzbDppbXBvcnQgaHJlZj0i
aHR0cDovL2xvY2FsaG9zdDo4MDAwL3hzbC9yZXNvdXJjZXMveGhyLWRvYy1pbXBvcnRlZC54c2wi
IC8+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii9yb290Ij4KKyAgICA8eHNsOmNhbGwtdGVtcGxh
dGUgbmFtZT0id29ya3MiIC8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPC94c2w6c3R5bGVzaGVldD4K
SW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3Jlc291cmNlcy94aHItZG9jLWltcG9y
dGVkLnhzbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNvdXJj
ZXMveGhyLWRvYy1pbXBvcnRlZC54c2wJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3hzbC9yZXNvdXJjZXMveGhyLWRvYy1pbXBvcnRlZC54c2wJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8
eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIgorICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMu
b3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKKyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkv
eGh0bWwiPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIvcm9vdCI+CisgICAgPGRpdiBjbGFzcz0i
ZGVmYXVsdCI+RkFJTDogSW5jb3JyZWN0IHRyYW5zZm9ybWF0aW9uLjwvZGl2PgorPC94c2w6dGVt
cGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0id29ya3MiPgorICAgIDxkaXYgY2xhc3M9Im92
ZXJyaWRkZW4iPlNVQ0NFU1M8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8L3hzbDpzdHlsZXNo
ZWV0PgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL3hoci1kb2Mu
eG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3Jlc291cmNlcy94
aHItZG9jLnhtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3Jl
c291cmNlcy94aHItZG9jLnhtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACis8P3htbCB2
ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPD94bWwtc3R5bGVzaGVldCB0eXBlPSJ0
ZXh0L3hzbCIgaHJlZj0ieGhyLWRvYy54c2wiPz4KKzxyb290Lz4KSW5kZXg6IExheW91dFRlc3Rz
L2h0dHAvdGVzdHMveHNsL3Jlc291cmNlcy94aHItZG9jLnhzbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMveGhyLWRvYy54c2wJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMveGhyLWRvYy54c2wJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9
InV0Zi04Ij8+Cis8eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIgorICB4bWxuczp4c2w9Imh0
dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKKyAgeG1sbnM9Imh0dHA6Ly93d3cu
dzMub3JnLzE5OTkveGh0bWwiPgorCis8eHNsOmltcG9ydCBocmVmPSJ4aHItZG9jLWltcG9ydGVk
LnhzbCIgLz4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iL3Jvb3QiPgorICAgIDx4c2w6Y2FsbC10
ZW1wbGF0ZSBuYW1lPSJ3b3JrcyIgLz4KKzwveHNsOnRlbXBsYXRlPgorCis8L3hzbDpzdHlsZXNo
ZWV0Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58131</attachid>
            <date>2010-06-08 05:12:24 -0700</date>
            <delta_ts>2010-06-17 01:19:34 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>bug10313_0608.patch</filename>
            <type>text/plain</type>
            <size>49611</size>
            <attacher name="Andreas Wictor">andreas.wictor</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDQ2MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsOTIgQEAKKzIwMTAtMDYtMDggIEFuZHJlYXMgV2ljdG9yICA8YW5kcmVhcy53aWN0
b3JAeGNlcmlvbi5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgeHNsOmltcG9ydCBhbmQgZG9jdW1lbnQoKSBkb24ndCB3b3JrIGluIHN0eWxlc2hl
ZXRzIGxvYWRlZCB2aWEgWE1MSHR0cFJlcXVlc3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzEzCisKKyAgICAgICAgSW50cm9kdWNlZCB0aGUgY29u
Y2VwdCBvZiBhIG9yaWdpbkZyYW1lIHBvaW50ZXIgb24gZnJhbWVsZXNzIGRvY3VtZW50cworICAg
ICAgICBjcmVhdGVkIGJ5IFhNTEh0dHBSZXF1ZXN0LCBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5j
cmVhdGVEb2N1bWVudCwKKyAgICAgICAgRE9NUGFyc2VyLnBhcnNlRnJvbVN0cmluZyBhbmQgWFNM
VFByb2Nlc3Nvci50cmFuc2Zvcm1Ub0RvY3VtZW50LgorICAgICAgICBUaGlzIG1ha2VzIGl0IHBv
c3NpYmxlIGZvciBmcmFtZWxlc3MgZG9jdW1lbnRzIHRvIGFjY2VzcyBzdWIgcmVzb3VyY2VzLgor
CisgICAgICAgIEZyYW1lbGVzcyBkb2N1bWVudHMgaXMgcmVnaXN0ZXJlZCBhcyBzdWIgZG9jdW1l
bnRzIG9uIHRoZSBvcmlnaW5GcmFtZQorICAgICAgICBzbyB0aGF0IHRoZSBvcmlnaW5GcmFtZSBw
b2ludGVyIG9uIGRvY3VtZW50cyBjYW4gYmUgcmVzZXQgb24gZnJhbWUKKyAgICAgICAgbmF2aWdh
dGlvbiBvciB3aGVuIHRoZSBmcmFtZSBpcyBkZXN0cm95ZWQuCisKKyAgICAgICAgVGVzdHM6IGZh
c3QveHNsL3RyYW5zZm9ybS1kb2NpbXBsLWRvYy54aHRtbAorICAgICAgICAgICAgICAgZmFzdC94
c2wvdHJhbnNmb3JtLWRvbXBhcnNlci1kb2MueGh0bWwKKyAgICAgICAgICAgICAgIGZhc3QveHNs
L3RyYW5zZm9ybS10cmFuc2Zvcm1lZC1kb2MueGh0bWwKKyAgICAgICAgICAgICAgIGh0dHAvdGVz
dHMveHNsL3RyYW5zZm9ybS1mcmFtZWQtZG9jLnhodG1sCisgICAgICAgICAgICAgICBodHRwL3Rl
c3RzL3hzbC90cmFuc2Zvcm0teGhyLWRvYy1jcm9zcy1vcmlnaW4ueGh0bWwKKyAgICAgICAgICAg
ICAgIGh0dHAvdGVzdHMveHNsL3RyYW5zZm9ybS14aHItZG9jLWZyb20tYWxsb3dlZC1jcm9zcy1v
cmlnaW4ueGh0bWwKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3NvckNvbnN0
cnVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdFhTTFRQcm9jZXNzb3IpOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFhTTFRQcm9jZXNzb3JDdXN0b20uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VjhYU0xUUHJvY2Vzc29yOjpjb25zdHJ1Y3RvckNhbGxiYWNrKToK
KyAgICAgICAgKiBkb20vRE9NSW1wbGVtZW50YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RE9NSW1wbGVtZW50YXRpb246OmNyZWF0ZURvY3VtZW50KToKKyAgICAgICAgIC0gUmVnaXN0ZXIg
dGhlIHJlc3VsdGluZyBkb2N1bWVudCBhcyBhIHN1YiBkb2N1bWVudCBvbiB0aGUgb3JpZ2luIGZy
YW1lCisgICAgICAgICogZG9tL0RPTUltcGxlbWVudGF0aW9uLmg6CisgICAgICAgIChXZWJDb3Jl
OjpET01JbXBsZW1lbnRhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUltcGxl
bWVudGF0aW9uOjpET01JbXBsZW1lbnRhdGlvbik6CisgICAgICAgICogZG9tL0RPTUltcGxlbWVu
dGF0aW9uLmlkbDoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnQ6OkRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp+RG9j
dW1lbnQpOgorICAgICAgICAgLSBVbnJlZ2lzdGVyIHRoaXMgZG9jdW1lbnQgZnJvbSBvcmlnaW5G
cmFtZSBpZiBuZWNlc3NhcnkKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjppbXBsZW1lbnRh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0T3JpZ2luRnJhbWUpOgorICAg
ICAgICAgLSBTZXQgb3JpZ2luRnJhbWUgZm9yIHRoaXMgZG9jdW1lbnQgYW5kIGlmIGFuIFVSTCB3
YXMgc3VwcGxpZWQKKyAgICAgICAgICAgY3JlYXRlIGEgbmV3IFNlY3VyaXR5T3JpZ2luIGJhc2Vk
IG9uIHRoYXQgVVJMIGFuZCB1c2UgdGhhdCBVUkwKKyAgICAgICAgICAgYXMgY29va2llVVJMLiBP
dGhlcndpc2UsIGNvcHkgY29va2llVVJMIGFuZCBzZWN1cml0eU9yaWdpbiBmcm9tCisgICAgICAg
ICAgIHRoZSBmcmFtZSdzIG1haW4gZG9jdW1lbnQKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
OjphcHBseVhTTFRyYW5zZm9ybSk6CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudDo6b3JpZ2luRnJhbWUpOgorICAgICAgICAqIGxvYWRlci9Eb2N1
bWVudFRocmVhZGFibGVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJl
YWRhYmxlTG9hZGVyOjpsb2FkUmVxdWVzdCk6CisgICAgICAgICAtIFVzZSBvcmlnaW5GcmFtZSBp
ZiBuZWNlc3NhcnkKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lOjp+RnJhbWUpOgorICAgICAgICAgLSBSZXNldCBvcmlnaW5GcmFtZSBmb3IgYWxsIHJl
Z2lzdGVyZWQgc3ViIGRvY3VtZW50cworICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnNldERvY3Vt
ZW50KToKKyAgICAgICAgIC0gUmVzZXQgb3JpZ2luRnJhbWUgZm9yIGFsbCByZWdpc3RlcmVkIHN1
YiBkb2N1bWVudHMKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpyZWdpc3RlclN1YkRvY3VtZW50
KToKKyAgICAgICAgIC0gUmVnaXN0ZXIgYSBzdWIgZG9jdW1lbnQgYW5kIHNldCB0aGlzIGZyYW1l
IGFzIG9yaWdpbkZyYW1lIG9uIHRoZSBkb2N1bWVudAorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6
OnVucmVnaXN0ZXJTdWJEb2N1bWVudCk6CisgICAgICAgICAtIFVucmVnaXN0ZXIgYSBzdWIgZG9j
dW1lbnQgYW5kIHJlc2V0IHRoZSBvcmlnaW5GcmFtZSBvbiB0aGUgZG9jdW1lbnQKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lOjpjbGVhclJlZ2lzdGVyZWRTdWJEb2N1bWVudHMpOgorICAgICAgICAq
IHBhZ2UvRnJhbWUuaDoKKyAgICAgICAgKiB4bWwvRE9NUGFyc2VyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRPTVBhcnNlcjo6cGFyc2VGcm9tU3RyaW5nKToKKyAgICAgICAgIC0gUmVnaXN0ZXIg
dGhlIHJlc3VsdGluZyBkb2N1bWVudCBhcyBhIHN1YiBkb2N1bWVudCBvbiB0aGUgb3JpZ2luIGZy
YW1lCisgICAgICAgICogeG1sL0RPTVBhcnNlci5oOgorICAgICAgICAoV2ViQ29yZTo6RE9NUGFy
c2VyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NUGFyc2VyOjpET01QYXJzZXIpOgor
ICAgICAgICAqIHhtbC9ET01QYXJzZXIuaWRsOgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVz
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6cmVzcG9uc2VYTUwpOgor
ICAgICAgICAgLSBSZWdpc3RlciB0aGUgcmVzdWx0aW5nIGRvY3VtZW50IGFzIGEgc3ViIGRvY3Vt
ZW50IG9uIHRoZSBvcmlnaW4gZnJhbWUKKyAgICAgICAgKiB4bWwvWFNMSW1wb3J0UnVsZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpYU0xJbXBvcnRSdWxlOjpsb2FkU2hlZXQpOgorICAgICAgICAg
LSBMb2FkIGltcG9ydGVkIGRvY3VtZW50cyBzeW5jaHJvbm91c2x5IGlmIGludm9rZWQgYnkgamF2
YXNjcmlwdAorICAgICAgICAgICBhbmQgdXNlIGJhc2UgVVJMIGZyb20gb3JpZ2luRnJhbWUncyBk
b2N1bWVudCB3aGVuIHBhcmVudCBzdHlsZXNoZWV0CisgICAgICAgICAgIGRvbid0IGhhdmUgYW4g
VVJMCisgICAgICAgIChXZWJDb3JlOjpYU0xJbXBvcnRSdWxlOjpsb2FkU2hlZXRBc3luYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpYU0xJbXBvcnRSdWxlOjpsb2FkU2hlZXRTeW5jKToKKyAgICAgICAg
KiB4bWwvWFNMSW1wb3J0UnVsZS5oOgorICAgICAgICAqIHhtbC9YU0xUUHJvY2Vzc29yLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlhTTFRQcm9jZXNzb3I6OmNyZWF0ZURvY3VtZW50RnJvbVNvdXJj
ZSk6CisgICAgICAgICAtIFJlZ2lzdGVyIHRoZSByZXN1bHRpbmcgZG9jdW1lbnQgYXMgYSBzdWIg
ZG9jdW1lbnQgb24gdGhlIG9yaWdpbiBmcmFtZQorICAgICAgICAqIHhtbC9YU0xUUHJvY2Vzc29y
Lmg6CisgICAgICAgIChXZWJDb3JlOjpYU0xUUHJvY2Vzc29yOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6WFNMVFByb2Nlc3Nvcjo6WFNMVFByb2Nlc3Nvcik6CisgICAgICAgICogeG1sL1hT
TFRQcm9jZXNzb3JMaWJ4c2x0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRvY0xvYWRlckZ1bmMp
OgorICAgICAgICAgLSBVc2Ugb3JpZ2luRnJhbWUgaWYgbmVjZXNzYXJ5CisKIDIwMTAtMDUtMzEg
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRh
bSBCYXJ0aC4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yQ29uc3Ry
dWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vz
c29yQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA2MDQ2MikKKysrIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNYU0xUUHJvY2Vzc29yQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2
ICszMSw3IEBACiAKICNpbmNsdWRlICJKU1hTTFRQcm9jZXNzb3IuaCIKICNpbmNsdWRlICJYU0xU
UHJvY2Vzc29yLmgiCisjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKQEAgLTUwLDcgKzUxLDEyIEBAIEpTWFNM
VFByb2Nlc3NvckNvbnN0cnVjdG9yOjpKU1hTTFRQcm9jZXMKIHN0YXRpYyBKU09iamVjdCogY29u
c3RydWN0WFNMVFByb2Nlc3NvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBjb25zdHJ1Y3Rv
ciwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgSlNYU0xUUHJvY2Vzc29yQ29uc3RydWN0b3IqIGpz
Q29uc3RydWN0b3IgPSBzdGF0aWNfY2FzdDxKU1hTTFRQcm9jZXNzb3JDb25zdHJ1Y3Rvcio+KGNv
bnN0cnVjdG9yKTsKLSAgICByZXR1cm4gQ1JFQVRFX0RPTV9PQkpFQ1RfV1JBUFBFUihleGVjLCBq
c0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwgWFNMVFByb2Nlc3NvciwgWFNMVFByb2Nlc3Nv
cjo6Y3JlYXRlKCkuZ2V0KCkpOworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQg
PSBqc0NvbnN0cnVjdG9yLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgaWYgKCFjb250
ZXh0KQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBSZWZlcmVuY2VFcnJvciwgIlhT
TFRQcm9jZXNzb3IgY29uc3RydWN0b3IgYXNzb2NpYXRlZCBkb2N1bWVudCBpcyB1bmF2YWlsYWJs
ZSIpOworCisgICAgUmVmUHRyPFhTTFRQcm9jZXNzb3I+IHhzbHRQcm9jZXNzb3IgPSBYU0xUUHJv
Y2Vzc29yOjpjcmVhdGUoY29udGV4dCk7CisgICAgcmV0dXJuIENSRUFURV9ET01fT0JKRUNUX1dS
QVBQRVIoZXhlYywganNDb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCksIFhTTFRQcm9jZXNzb3Is
IHhzbHRQcm9jZXNzb3IuZ2V0KCkpOwogfQogCiBDb25zdHJ1Y3RUeXBlIEpTWFNMVFByb2Nlc3Nv
ckNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERh
dGEpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhTTFRQcm9jZXNzb3JDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WFNMVFBy
b2Nlc3NvckN1c3RvbS5jcHAJKHJldmlzaW9uIDYwNDYyKQorKysgV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhYU0xUUHJvY2Vzc29yQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDks
NyArNDksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhY
U0xUUHJvY2Vzc29yOjpjb25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFy
Z3MpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uWFNMVFByb2Nlc3Nvci5Db25zdHJ1Y3RvciIpOwot
ICAgIHJldHVybiBWOFByb3h5Ojpjb25zdHJ1Y3RET01PYmplY3Q8WFNMVFByb2Nlc3Nvcj4oYXJn
cywgJmluZm8pOworICAgIHJldHVybiBWOFByb3h5Ojpjb25zdHJ1Y3RET01PYmplY3RXaXRoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDxYU0xUUHJvY2Vzc29yPihhcmdzLCAmaW5mbyk7CiB9CiAKIApJ
bmRleDogV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcAkocmV2aXNpb24gNjA0NjIpCisrKyBXZWJD
b3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Niw2ICsy
NTYsMTIgQEAgUGFzc1JlZlB0cjxEb2N1bWVudD4gRE9NSW1wbGVtZW50YXRpb246OgogICAgICAg
ICByZXR1cm4gMDsKICAgICB9CiAKKyAgICBpZiAobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0ICYm
IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgIERvY3Vt
ZW50KiBvcmlnaW5Eb2MgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KG1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCk7CisgICAgICAgIGlmIChvcmlnaW5Eb2MtPmZyYW1lKCkpCisgICAgICAgICAgICBv
cmlnaW5Eb2MtPmZyYW1lKCktPnJlZ2lzdGVyU3ViRG9jdW1lbnQoZG9jLmdldCgpKTsKKyAgICB9
CisKICAgICBpZiAoZG9jdHlwZSkKICAgICAgICAgZG9jLT5hZGRDaGlsZChkb2N0eXBlKTsKICAg
ICBpZiAoZG9jdW1lbnRFbGVtZW50KQpJbmRleDogV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5oCShyZXZp
c2lvbiA2MDQ2MikKKysrIFdlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDE4ICszNCwyMiBAQCBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIERvY3VtZW50
VHlwZTsKIGNsYXNzIEZyYW1lOwogY2xhc3MgSFRNTERvY3VtZW50OworY2xhc3MgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDsKIGNsYXNzIFN0cmluZzsKIAogdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29k
ZTsKIAogY2xhc3MgRE9NSW1wbGVtZW50YXRpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxET01JbXBs
ZW1lbnRhdGlvbj4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPERPTUltcGxlbWVu
dGF0aW9uPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgRE9NSW1wbGVtZW50YXRpb24p
OyB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RE9NSW1wbGVtZW50YXRpb24+IGNyZWF0ZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBET01JbXBsZW1lbnRhdGlvbihjb250ZXh0KSk7CisgICAgfQogCiAgICAgLy8gRE9N
IG1ldGhvZHMgJiBhdHRyaWJ1dGVzIGZvciBET01JbXBsZW1lbnRhdGlvbgogICAgIHN0YXRpYyBi
b29sIGhhc0ZlYXR1cmUoY29uc3QgU3RyaW5nJiBmZWF0dXJlLCBjb25zdCBTdHJpbmcmIHZlcnNp
b24pOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPERvY3VtZW50VHlwZT4gY3JlYXRlRG9jdW1lbnRU
eXBlKGNvbnN0IFN0cmluZyYgcXVhbGlmaWVkTmFtZSwgY29uc3QgU3RyaW5nJiBwdWJsaWNJZCwg
Y29uc3QgU3RyaW5nICZzeXN0ZW1JZCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPERvY3VtZW50PiBjcmVhdGVEb2N1bWVudChjb25zdCBTdHJpbmcmIG5hbWVzcGFjZVVS
SSwgY29uc3QgU3RyaW5nJiBxdWFsaWZpZWROYW1lLCBEb2N1bWVudFR5cGUqLCBFeGNlcHRpb25D
b2RlJik7CisgICAgUGFzc1JlZlB0cjxEb2N1bWVudD4gY3JlYXRlRG9jdW1lbnQoY29uc3QgU3Ry
aW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IFN0cmluZyYgcXVhbGlmaWVkTmFtZSwgRG9jdW1lbnRU
eXBlKiwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgRE9NSW1wbGVtZW50YXRpb24qIGdldEludGVy
ZmFjZShjb25zdCBTdHJpbmcmIGZlYXR1cmUpOwogCkBAIC02Miw3ICs2NiwxMCBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIGJvb2wgaXNUZXh0TUlNRVR5cGUoY29uc3QgU3RyaW5nJiBNSU1FVHlwZSk7
CiAKIHByaXZhdGU6Ci0gICAgRE9NSW1wbGVtZW50YXRpb24oKSB7IH0KKyAgICBET01JbXBsZW1l
bnRhdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQorICAgICAgICA6IG1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dChjb250ZXh0KSB7IH0KKworICAgIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIH07CiAKIH0gLy9uYW1lc3BhY2UKSW5k
ZXg6IFdlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmlkbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5pZGwJKHJldmlzaW9uIDYwNDYyKQorKysgV2ViQ29y
ZS9kb20vRE9NSW1wbGVtZW50YXRpb24uaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw3ICsyMCw3
IEBACiAKIG1vZHVsZSBjb3JlIHsKIAotICAgIGludGVyZmFjZSBET01JbXBsZW1lbnRhdGlvbiB7
CisgICAgaW50ZXJmYWNlIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBET01JbXBs
ZW1lbnRhdGlvbiB7CiAKICAgICAgICAgLy8gRE9NIExldmVsIDEKIApJbmRleDogV2ViQ29yZS9k
b20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAko
cmV2aXNpb24gNjA0NjIpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQxMCw2ICs0MTAsNyBAQCBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBi
b29sIGlzCiAgICAgbV9pZ25vcmVBdXRvZm9jdXMgPSBmYWxzZTsKIAogICAgIG1fZnJhbWUgPSBm
cmFtZTsKKyAgICBtX29yaWdpbkZyYW1lID0gMDsKIAogICAgIG1fYXhPYmplY3RDYWNoZSA9IDA7
CiAgICAgCkBAIC01NDYsNiArNTQ3LDkgQEAgRG9jdW1lbnQ6On5Eb2N1bWVudCgpCiAgICAgICAg
IG1fc3R5bGVTaGVldHMtPmRvY3VtZW50RGVzdHJveWVkKCk7CiAKICAgICBtX3dlYWtSZWZlcmVu
Y2UtPmNsZWFyKCk7CisKKyAgICBpZiAobV9vcmlnaW5GcmFtZSkKKyAgICAgICAgbV9vcmlnaW5G
cmFtZS0+dW5yZWdpc3RlclN1YkRvY3VtZW50KHRoaXMpOwogfQogCiAjaWYgVVNFKEpTQykKQEAg
LTYwOCw3ICs2MTIsNyBAQCB2b2lkIERvY3VtZW50OjpzZXREb2NUeXBlKFBhc3NSZWZQdHI8RG9j
CiBET01JbXBsZW1lbnRhdGlvbiogRG9jdW1lbnQ6OmltcGxlbWVudGF0aW9uKCkgY29uc3QKIHsK
ICAgICBpZiAoIW1faW1wbGVtZW50YXRpb24pCi0gICAgICAgIG1faW1wbGVtZW50YXRpb24gPSBE
T01JbXBsZW1lbnRhdGlvbjo6Y3JlYXRlKCk7CisgICAgICAgIG1faW1wbGVtZW50YXRpb24gPSBE
T01JbXBsZW1lbnRhdGlvbjo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CiAgICAg
cmV0dXJuIG1faW1wbGVtZW50YXRpb24uZ2V0KCk7CiB9CiAKQEAgLTEyNzEsNiArMTI3NSwyMCBA
QCBTZXR0aW5ncyogRG9jdW1lbnQ6OnNldHRpbmdzKCkgY29uc3QKICAgICByZXR1cm4gbV9mcmFt
ZSA/IG1fZnJhbWUtPnNldHRpbmdzKCkgOiAwOwogfQogCit2b2lkIERvY3VtZW50OjpzZXRPcmln
aW5GcmFtZShGcmFtZSogZnJhbWUsIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICBtX29yaWdpbkZy
YW1lID0gZnJhbWU7CisgICAgaWYgKG1fb3JpZ2luRnJhbWUpIHsKKyAgICAgICAgaWYgKCF1cmwu
aXNFbXB0eSgpKSB7CisgICAgICAgICAgICBtX2Nvb2tpZVVSTCA9IHVybDsKKyAgICAgICAgICAg
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnNldFNlY3VyaXR5T3JpZ2luKFNlY3VyaXR5T3JpZ2lu
OjpjcmVhdGUodXJsKSk7CisgICAgICAgIH0gZWxzZSBpZiAoRG9jdW1lbnQqIGRvYyA9IG1fb3Jp
Z2luRnJhbWUtPmRvY3VtZW50KCkpIHsKKyAgICAgICAgICAgIG1fY29va2llVVJMID0gZG9jLT5j
b29raWVVUkwoKTsKKyAgICAgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnNldFNlY3Vy
aXR5T3JpZ2luKGRvYy0+c2VjdXJpdHlPcmlnaW4oKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisK
IFBhc3NSZWZQdHI8UmFuZ2U+IERvY3VtZW50OjpjcmVhdGVSYW5nZSgpCiB7CiAgICAgcmV0dXJu
IFJhbmdlOjpjcmVhdGUodGhpcyk7CkBAIC00MTU1LDcgKzQxNzMsNyBAQCB2b2lkIERvY3VtZW50
OjpzZXRNYXJrZXJzQWN0aXZlKE5vZGUqIG5vCiAKIHZvaWQgRG9jdW1lbnQ6OmFwcGx5WFNMVHJh
bnNmb3JtKFByb2Nlc3NpbmdJbnN0cnVjdGlvbiogcGkpCiB7Ci0gICAgUmVmUHRyPFhTTFRQcm9j
ZXNzb3I+IHByb2Nlc3NvciA9IFhTTFRQcm9jZXNzb3I6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxY
U0xUUHJvY2Vzc29yPiBwcm9jZXNzb3IgPSBYU0xUUHJvY2Vzc29yOjpjcmVhdGUoc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpKTsKICAgICBwcm9jZXNzb3ItPnNldFhTTFN0eWxlU2hlZXQoc3RhdGlj
X2Nhc3Q8WFNMU3R5bGVTaGVldCo+KHBpLT5zaGVldCgpKSk7CiAgICAgU3RyaW5nIHJlc3VsdE1J
TUVUeXBlOwogICAgIFN0cmluZyBuZXdTb3VyY2U7CkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDYwNDYy
KQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDYzLDYgKzQ2
Myw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3Rv
ckNvbnRyb2xsZXIoKSBjb25zdDsgLy8gY2FuIGJlIE5VTEwKICNlbmRpZgogCisgICAgRnJhbWUq
IG9yaWdpbkZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW5GcmFtZTsgfSAvLyBjYW4gYmUg
TlVMTAorICAgIHZvaWQgc2V0T3JpZ2luRnJhbWUoRnJhbWUqIGZyYW1lLCBjb25zdCBLVVJMJiB1
cmwgPSBLVVJMKCkpOworCiAgICAgUGFzc1JlZlB0cjxSYW5nZT4gY3JlYXRlUmFuZ2UoKTsKIAog
ICAgIFBhc3NSZWZQdHI8Tm9kZUl0ZXJhdG9yPiBjcmVhdGVOb2RlSXRlcmF0b3IoTm9kZSogcm9v
dCwgdW5zaWduZWQgd2hhdFRvU2hvdywKQEAgLTEwMjksNiArMTAzMiw3IEBAIHByaXZhdGU6CiAg
ICAgYm9vbCBtX2RpZENhbGN1bGF0ZVN0eWxlU2VsZWN0b3I7CiAKICAgICBGcmFtZSogbV9mcmFt
ZTsKKyAgICBGcmFtZSogbV9vcmlnaW5GcmFtZTsKICAgICBPd25QdHI8RG9jTG9hZGVyPiBtX2Rv
Y0xvYWRlcjsKICAgICBPd25QdHI8VG9rZW5pemVyPiBtX3Rva2VuaXplcjsKICAgICBib29sIG1f
d2VsbEZvcm1lZDsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9h
ZGVyLmNwcAkocmV2aXNpb24gNjA0NjIpCisrKyBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVh
ZGFibGVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjEsOCArMzIxLDExIEBAIHZvaWQg
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVxdWUKICAgICBSZXNvdXJjZUVycm9yIGVy
cm9yOwogICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7CiAgICAgdW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBsb25nPjo6bWF4KCk7Ci0g
ICAgaWYgKG1fZG9jdW1lbnQtPmZyYW1lKCkpCi0gICAgICAgIGlkZW50aWZpZXIgPSBtX2RvY3Vt
ZW50LT5mcmFtZSgpLT5sb2FkZXIoKS0+bG9hZFJlc291cmNlU3luY2hyb25vdXNseShyZXF1ZXN0
LCBzdG9yZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKKworICAgIEZyYW1l
KiBmcmFtZSA9IG1fZG9jdW1lbnQtPmZyYW1lKCkgPyBtX2RvY3VtZW50LT5mcmFtZSgpIDogbV9k
b2N1bWVudC0+b3JpZ2luRnJhbWUoKTsKKworICAgIGlmIChmcmFtZSkKKyAgICAgICAgaWRlbnRp
ZmllciA9IGZyYW1lLT5sb2FkZXIoKS0+bG9hZFJlc291cmNlU3luY2hyb25vdXNseShyZXF1ZXN0
LCBzdG9yZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKIAogICAgIC8vIE5v
IGV4Y2VwdGlvbiBmb3IgZmlsZTovLy8gcmVzb3VyY2VzLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzQ5
NjIyOTg+LgogICAgIC8vIEFsc28sIGlmIHdlIGhhdmUgYW4gSFRUUCByZXNwb25zZSwgdGhlbiBp
dCB3YXNuJ3QgYSBuZXR3b3JrIGVycm9yIGluIGZhY3QuCkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJh
bWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHJldmlzaW9uIDYw
NDYyKQorKysgV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk1LDYg
KzE5NSw4IEBAIEZyYW1lOjp+RnJhbWUoKQogICAgIHNldFZpZXcoMCk7CiAgICAgbG9hZGVyKCkt
PmNhbmNlbEFuZENsZWFyKCk7CiAKKyAgICBjbGVhclJlZ2lzdGVyZWRTdWJEb2N1bWVudHMoKTsK
KwogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90IGJlIGRvaW5nIGFsbCB0aGlzIHdvcmsgaW5z
aWRlIHRoZSBkZXN0cnVjdG9yCiAKICAgICBBU1NFUlQoIW1fbGlmZVN1cHBvcnRUaW1lci5pc0Fj
dGl2ZSgpKTsKQEAgLTI2MCw2ICsyNjIsOCBAQCB2b2lkIEZyYW1lOjpzZXREb2N1bWVudChQYXNz
UmVmUHRyPERvY3VtCiAgICAgICAgIG1fZG9jLT5kZXRhY2goKTsKICAgICB9CiAKKyAgICBjbGVh
clJlZ2lzdGVyZWRTdWJEb2N1bWVudHMoKTsKKwogICAgIG1fZG9jID0gbmV3RG9jOwogICAgIHNl
bGVjdGlvbigpLT51cGRhdGVTZWN1cmVLZXlib2FyZEVudHJ5SWZBY3RpdmUoKTsKIApAQCAtMTY0
OSw0ICsxNjUzLDMxIEBAIFN0cmluZyBGcmFtZTo6bGF5ZXJUcmVlQXNUZXh0KCkgY29uc3QKICNl
bmRpZgogfQogCit2b2lkIEZyYW1lOjpyZWdpc3RlclN1YkRvY3VtZW50KERvY3VtZW50KiBkb2Ms
IGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICBpZiAoZG9jKSB7CisgICAgICAgIGRvYy0+c2V0T3Jp
Z2luRnJhbWUodGhpcywgdXJsKTsKKyAgICAgICAgbV9zdWJEb2N1bWVudHMuYWRkKGRvYyk7Cisg
ICAgfQorfQorCit2b2lkIEZyYW1lOjp1bnJlZ2lzdGVyU3ViRG9jdW1lbnQoRG9jdW1lbnQqIGRv
YykKK3sKKyAgICBpZiAoZG9jKSB7CisgICAgICAgIGRvYy0+c2V0T3JpZ2luRnJhbWUoMCk7Cisg
ICAgICAgIG1fc3ViRG9jdW1lbnRzLnJlbW92ZShkb2MpOworICAgIH0KK30KKwordm9pZCBGcmFt
ZTo6Y2xlYXJSZWdpc3RlcmVkU3ViRG9jdW1lbnRzKCkKK3sKKyAgICBpZiAoIW1fc3ViRG9jdW1l
bnRzLmlzRW1wdHkoKSkgeworICAgICAgICBmb3IgKEhhc2hTZXQ8RG9jdW1lbnQqPjo6aXRlcmF0
b3IgaXQgPSBtX3N1YkRvY3VtZW50cy5iZWdpbigpOworICAgICAgICAgICAgIGl0ICE9IG1fc3Vi
RG9jdW1lbnRzLmVuZCgpOyArK2l0KQorICAgICAgICAgICAgKCppdCktPnNldE9yaWdpbkZyYW1l
KDApOworCisgICAgICAgIG1fc3ViRG9jdW1lbnRzLmNsZWFyKCk7CisgICAgfQorfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BhZ2UvRnJhbWUuaAkocmV2aXNpb24gNjA0NjIpCisrKyBXZWJDb3JlL3Bh
Z2UvRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDYgKzEzMCwxMCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIAogICAgICAgICBTdHJpbmcgbGF5ZXJUcmVlQXNUZXh0KCkgY29u
c3Q7CiAKKyAgICAgICAgdm9pZCByZWdpc3RlclN1YkRvY3VtZW50KERvY3VtZW50KiBkb2MsIGNv
bnN0IEtVUkwmIHVybCA9IEtVUkwoKSk7CisgICAgICAgIHZvaWQgdW5yZWdpc3RlclN1YkRvY3Vt
ZW50KERvY3VtZW50KiBkb2MpOworICAgICAgICB2b2lkIGNsZWFyUmVnaXN0ZXJlZFN1YkRvY3Vt
ZW50cygpOworCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBpbmplY3RVc2VyU2NyaXB0c0Zv
cldvcmxkKERPTVdyYXBwZXJXb3JsZCosIGNvbnN0IFVzZXJTY3JpcHRWZWN0b3ImLCBVc2VyU2Ny
aXB0SW5qZWN0aW9uVGltZSk7CiAKQEAgLTM2Miw2ICszNjYsOCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpICAgICAgICAKICAgICAgICAgT3du
UHRyPFRpbGVkQmFja2luZ1N0b3JlPiBtX3RpbGVkQmFja2luZ1N0b3JlOwogI2VuZGlmCisKKyAg
ICAgICAgSGFzaFNldDxEb2N1bWVudCo+IG1fc3ViRG9jdW1lbnRzOwogICAgIH07CiAKICAgICBp
bmxpbmUgdm9pZCBGcmFtZTo6aW5pdCgpCkluZGV4OiBXZWJDb3JlL3htbC9ET01QYXJzZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1sL0RPTVBhcnNlci5jcHAJKHJldmlzaW9uIDYwNDYy
KQorKysgV2ViQ29yZS94bWwvRE9NUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAsNiAr
MjAsNyBAQAogI2luY2x1ZGUgIkRPTVBhcnNlci5oIgogCiAjaW5jbHVkZSAiRE9NSW1wbGVtZW50
YXRpb24uaCIKKyNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTMxLDYgKzMyLDEyIEBAIFBhc3NSZWZQdHI8RG9j
dW1lbnQ+IERPTVBhcnNlcjo6cGFyc2VGcm8KIAogICAgIFJlZlB0cjxEb2N1bWVudD4gZG9jID0g
RE9NSW1wbGVtZW50YXRpb246OmNyZWF0ZURvY3VtZW50KGNvbnRlbnRUeXBlLCAwLCBmYWxzZSk7
CiAKKyAgICBpZiAobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0ICYmIG1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgIERvY3VtZW50KiBvcmlnaW5Eb2MgPSBz
dGF0aWNfY2FzdDxEb2N1bWVudCo+KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CisgICAgICAg
IGlmIChvcmlnaW5Eb2MtPmZyYW1lKCkpCisgICAgICAgICAgICBvcmlnaW5Eb2MtPmZyYW1lKCkt
PnJlZ2lzdGVyU3ViRG9jdW1lbnQoZG9jLmdldCgpKTsKKyAgICB9CisKICAgICBkb2MtPm9wZW4o
KTsKICAgICBkb2MtPndyaXRlKHN0cik7CiAgICAgZG9jLT5maW5pc2hQYXJzaW5nKCk7CkluZGV4
OiBXZWJDb3JlL3htbC9ET01QYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9ET01Q
YXJzZXIuaAkocmV2aXNpb24gNjA0NjIpCisrKyBXZWJDb3JlL3htbC9ET01QYXJzZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMjgsMTIgKzI4LDE4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAK
ICAgICBjbGFzcyBET01QYXJzZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxET01QYXJzZXI+IHsKICAg
ICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPERPTVBhcnNlcj4gY3JlYXRlKCkg
eyByZXR1cm4gYWRvcHRSZWYobmV3IERPTVBhcnNlcik7IH0KLSAgICAgICAgCisgICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPERPTVBhcnNlcj4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRE9N
UGFyc2VyKGNvbnRleHQpKTsKKyAgICAgICAgfQorCiAgICAgICAgIFBhc3NSZWZQdHI8RG9jdW1l
bnQ+IHBhcnNlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0ciwgY29uc3QgU3RyaW5nJiBjb250
ZW50VHlwZSk7CiAgICAgICAgIAogICAgIHByaXZhdGU6Ci0gICAgICAgIERPTVBhcnNlcigpIHsg
fSAgICAgICAgCisgICAgICAgIERPTVBhcnNlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0KQorICAgICAgICAgICAgOiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoY29udGV4dCkgeyB9
CisKKyAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9zY3JpcHRFeGVjdXRpb25Db250
ZXh0OwogICAgIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUveG1sL0RPTVBhcnNlci5pZGwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS94bWwvRE9NUGFyc2VyLmlkbAkocmV2aXNpb24gNjA0NjIpCisrKyBX
ZWJDb3JlL3htbC9ET01QYXJzZXIuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xOCw3ICsxOCwxMCBA
QAogICovCiAKIG1vZHVsZSB4cGF0aCB7Ci0gICAgaW50ZXJmYWNlIFtDYW5CZUNvbnN0cnVjdGVk
XSBET01QYXJzZXIgeworICAgIGludGVyZmFjZSBbCisgICAgICAgIENhbkJlQ29uc3RydWN0ZWQs
CisgICAgICAgIENhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQKKyAgICBdIERPTVBhcnNl
ciB7CiAgICAgICAgIERvY3VtZW50IHBhcnNlRnJvbVN0cmluZyhpbiBET01TdHJpbmcgc3RyLCBp
biBET01TdHJpbmcgY29udGVudFR5cGUpOwogICAgIH07CiB9CkluZGV4OiBXZWJDb3JlL3htbC9Y
TUxIdHRwUmVxdWVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVl
c3QuY3BwCShyZXZpc2lvbiA2MDQ2MikKKysrIFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkV2ZW50RXhjZXB0
aW9uLmgiCiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMu
aCIKKyNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUVFBQYXJzZXJzLmgiCiAjaW5jbHVk
ZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkluc3BlY3RvclRpbWVsaW5lQWdl
bnQuaCIKQEAgLTI0MSw2ICsyNDIsOSBAQCBEb2N1bWVudCogWE1MSHR0cFJlcXVlc3Q6OnJlc3Bv
bnNlWE1MKCkgCiAgICAgICAgICAgICBtX3Jlc3BvbnNlWE1MID0gMDsKICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIG1fcmVzcG9uc2VYTUwgPSBEb2N1bWVudDo6Y3JlYXRlKDApOworICAg
ICAgICAgICAgaWYgKGRvY3VtZW50KCktPmZyYW1lKCkpCisgICAgICAgICAgICAgICAgZG9jdW1l
bnQoKS0+ZnJhbWUoKS0+cmVnaXN0ZXJTdWJEb2N1bWVudChtX3Jlc3BvbnNlWE1MLmdldCgpLCBt
X3VybCk7CisKICAgICAgICAgICAgIG1fcmVzcG9uc2VYTUwtPm9wZW4oKTsKICAgICAgICAgICAg
IG1fcmVzcG9uc2VYTUwtPnNldFVSTChtX3VybCk7CiAgICAgICAgICAgICAvLyBGSVhNRTogU2V0
IExhc3QtTW9kaWZpZWQuCkluZGV4OiBXZWJDb3JlL3htbC9YU0xJbXBvcnRSdWxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YU0xJbXBvcnRSdWxlLmNwcAkocmV2aXNpb24gNjA0NjIp
CisrKyBXZWJDb3JlL3htbC9YU0xJbXBvcnRSdWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYs
NiArMjYsMTAgQEAKIAogI2luY2x1ZGUgIkNhY2hlZFhTTFN0eWxlU2hlZXQuaCIKICNpbmNsdWRl
ICJEb2NMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNp
bmNsdWRlICJSZXNvdXJjZUVycm9yLmgiCisjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5o
IgogI2luY2x1ZGUgIlhTTFN0eWxlU2hlZXQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
NzgsMTggKzgyLDI4IEBAIGJvb2wgWFNMSW1wb3J0UnVsZTo6aXNMb2FkaW5nKCkKIHZvaWQgWFNM
SW1wb3J0UnVsZTo6bG9hZFNoZWV0KCkKIHsKICAgICBEb2NMb2FkZXIqIGRvY0xvYWRlciA9IDA7
CisgICAgWFNMU3R5bGVTaGVldCogcm9vdFhTTCA9IDA7CiAgICAgU3R5bGVCYXNlKiByb290ID0g
dGhpczsKICAgICBTdHlsZUJhc2UqIHBhcmVudDsKICAgICB3aGlsZSAoKHBhcmVudCA9IHJvb3Qt
PnBhcmVudCgpKSkKICAgICAgICAgcm9vdCA9IHBhcmVudDsKLSAgICBpZiAocm9vdC0+aXNYU0xT
dHlsZVNoZWV0KCkpCi0gICAgICAgIGRvY0xvYWRlciA9IHN0YXRpY19jYXN0PFhTTFN0eWxlU2hl
ZXQqPihyb290KS0+ZG9jTG9hZGVyKCk7CisgICAgaWYgKHJvb3QtPmlzWFNMU3R5bGVTaGVldCgp
KSB7CisgICAgICAgIHJvb3RYU0wgPSBzdGF0aWNfY2FzdDxYU0xTdHlsZVNoZWV0Kj4ocm9vdCk7
CisgICAgICAgIGRvY0xvYWRlciA9IHJvb3RYU0wtPmRvY0xvYWRlcigpOworICAgIH0KICAgICAK
ICAgICBTdHJpbmcgYWJzSHJlZiA9IG1fc3RySHJlZjsKKyAgICBOb2RlKiBvd25lck5vZGUgPSBy
b290WFNMLT5vd25lck5vZGUoKTsKICAgICBYU0xTdHlsZVNoZWV0KiBwYXJlbnRTaGVldCA9IHBh
cmVudFN0eWxlU2hlZXQoKTsKICAgICBpZiAoIXBhcmVudFNoZWV0LT5maW5hbFVSTCgpLmlzTnVs
bCgpKQogICAgICAgICAvLyB1c2UgcGFyZW50IHN0eWxlaGVldCdzIFVSTCBhcyB0aGUgYmFzZSBV
UkwKICAgICAgICAgYWJzSHJlZiA9IEtVUkwocGFyZW50U2hlZXQtPmZpbmFsVVJMKCksIG1fc3Ry
SHJlZikuc3RyaW5nKCk7CisgICAgZWxzZSBpZiAob3duZXJOb2RlKSB7CisgICAgICAgIC8vIHVz
ZSBiYXNlIHVybCBmcm9tIG9yaWdpbkZyYW1lJ3MgZG9jdW1lbnQgd2hlbiBwYXJlbnQgc3R5bGVz
aGVldCBkb250IGhhdmUgYW4gZmluYWwgdXJsCisgICAgICAgIC8vIHRoaXMgY2FuIGZvciBleGFt
cGxlIGhhcHBlbiB3aGVuIHRoZSBzdHlsZXNoZWV0IGlzIGNyZWF0ZWQgd2l0aCBET01QYXJzZXIu
cGFyc2VGcm9tU3RyaW5nCisgICAgICAgIGlmIChGcmFtZSogb3JpZ2luRnJhbWUgPSBvd25lck5v
ZGUtPmRvY3VtZW50KCktPm9yaWdpbkZyYW1lKCkpCisgICAgICAgICAgICBhYnNIcmVmID0gS1VS
TChvcmlnaW5GcmFtZS0+ZG9jdW1lbnQoKS0+YmFzZVVSTCgpLCBtX3N0ckhyZWYpLnN0cmluZygp
OworICAgIH0KICAgICAKICAgICAvLyBDaGVjayBmb3IgYSBjeWNsZSBpbiBvdXIgaW1wb3J0IGNo
YWluLiAgSWYgd2UgZW5jb3VudGVyIGEgc3R5bGVzaGVldAogICAgIC8vIGluIG91ciBwYXJlbnQg
Y2hhaW4gd2l0aCB0aGUgc2FtZSBVUkwsIHRoZW4ganVzdCBiYWlsLgpAQCAtOTcsMTIgKzExMSwy
MCBAQCB2b2lkIFhTTEltcG9ydFJ1bGU6OmxvYWRTaGVldCgpCiAgICAgICAgIGlmIChwYXJlbnQt
PmlzWFNMU3R5bGVTaGVldCgpICYmIGFic0hyZWYgPT0gc3RhdGljX2Nhc3Q8WFNMU3R5bGVTaGVl
dCo+KHBhcmVudCktPmZpbmFsVVJMKCkuc3RyaW5nKCkpCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgfQotICAgIAorCisgICAgaWYgKG93bmVyTm9kZSAmJiBvd25lck5vZGUtPm5vZGVUeXBlKCkg
PT0gTm9kZTo6UFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFKQorICAgICAgICBsb2FkU2hlZXRB
c3luYyhkb2NMb2FkZXIsIGFic0hyZWYpOworICAgIGVsc2UKKyAgICAgICAgbG9hZFNoZWV0U3lu
Yyhkb2NMb2FkZXIsIGFic0hyZWYpOworfQorCit2b2lkIFhTTEltcG9ydFJ1bGU6OmxvYWRTaGVl
dEFzeW5jKERvY0xvYWRlciogZG9jTG9hZGVyLCBjb25zdCBTdHJpbmcmIGFic0hyZWYpCit7CiAg
ICAgbV9jYWNoZWRTaGVldCA9IGRvY0xvYWRlci0+cmVxdWVzdFhTTFN0eWxlU2hlZXQoYWJzSHJl
Zik7Ci0gICAgCisKICAgICBpZiAobV9jYWNoZWRTaGVldCkgewogICAgICAgICBtX2NhY2hlZFNo
ZWV0LT5hZGRDbGllbnQodGhpcyk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIElmIHRoZSBpbXBv
cnRlZCBzaGVldCBpcyBpbiB0aGUgY2FjaGUsIHRoZW4gc2V0WFNMU3R5bGVTaGVldCBnZXRzIGNh
bGxlZCwKICAgICAgICAgLy8gYW5kIHRoZSBzaGVldCBldmVuIGdldHMgcGFyc2VkICh2aWEgcGFy
c2VTdHJpbmcpLiAgSW4gdGhpcyBjYXNlIHdlIGhhdmUKICAgICAgICAgLy8gbG9hZGVkIChldmVu
IGlmIG91ciBzdWJyZXNvdXJjZXMgaGF2ZW4ndCksIHNvIGlmIHdlIGhhdmUgYSBzdHlsZXNoZWV0
IGFmdGVyCkBAIC0xMTIsNiArMTM0LDM5IEBAIHZvaWQgWFNMSW1wb3J0UnVsZTo6bG9hZFNoZWV0
KCkKICAgICB9CiB9CiAKK3ZvaWQgWFNMSW1wb3J0UnVsZTo6bG9hZFNoZWV0U3luYyhEb2NMb2Fk
ZXIqIGRvY0xvYWRlciwgY29uc3QgU3RyaW5nJiBhYnNIcmVmKQoreworICAgIFJlc291cmNlRXJy
b3IgZXJyb3I7CisgICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZTsKKyAgICBWZWN0b3I8Y2hh
cj4gZGF0YTsKKworICAgIERvY3VtZW50KiBkb2MgPSBkb2NMb2FkZXItPmRvYygpOworICAgIEZy
YW1lKiBmcmFtZSA9IGRvYy0+ZnJhbWUoKSA/IGRvYy0+ZnJhbWUoKSA6IGRvYy0+b3JpZ2luRnJh
bWUoKTsKKworICAgIEtVUkwgdXJsKFBhcnNlZFVSTFN0cmluZywgYWJzSHJlZik7CisKKyAgICBi
b29sIHJlcXVlc3RBbGxvd2VkID0gZnJhbWUgJiYgZG9jLT5zZWN1cml0eU9yaWdpbigpLT5jYW5S
ZXF1ZXN0KHVybCk7CisgICAgaWYgKHJlcXVlc3RBbGxvd2VkKSB7CisgICAgICAgIGZyYW1lLT5s
b2FkZXIoKS0+bG9hZFJlc291cmNlU3luY2hyb25vdXNseSh1cmwsIEFsbG93U3RvcmVkQ3JlZGVu
dGlhbHMsIGVycm9yLCByZXNwb25zZSwgZGF0YSk7CisgICAgICAgIHJlcXVlc3RBbGxvd2VkID0g
ZG9jLT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHJlc3BvbnNlLnVybCgpKTsKKyAgICB9
CisgICAgaWYgKCFyZXF1ZXN0QWxsb3dlZCkgeworICAgICAgICBkYXRhLmNsZWFyKCk7CisgICAg
ICAgIGRvY0xvYWRlci0+cHJpbnRBY2Nlc3NEZW5pZWRNZXNzYWdlKHVybCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoZXJyb3IuaXNOdWxsKCkpIHsKKyAgICAgICAgUmVmUHRy
PFRleHRSZXNvdXJjZURlY29kZXI+IGRlY29kZXIgPSBUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVh
dGUoInRleHQveHNsIik7CisgICAgICAgIFN0cmluZyBlbmNvZGluZyA9IHJlc3BvbnNlLnRleHRF
bmNvZGluZ05hbWUoKTsKKyAgICAgICAgaWYgKCFlbmNvZGluZy5pc051bGwoKSkKKyAgICAgICAg
ICAgIGRlY29kZXItPnNldEVuY29kaW5nKGVuY29kaW5nLCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpF
bmNvZGluZ0Zyb21IVFRQSGVhZGVyKTsKKworICAgICAgICBTdHJpbmcgc2hlZXQoZGVjb2Rlci0+
ZGVjb2RlKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSkpOworICAgICAgICBzZXRYU0xTdHlsZVNo
ZWV0KGFic0hyZWYsIHJlc3BvbnNlLnVybCgpLCBzaGVldCk7CisgICAgfQorfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoWFNMVCkKSW5kZXg6IFdlYkNvcmUv
eG1sL1hTTEltcG9ydFJ1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YU0xJbXBvcnRS
dWxlLmgJKHJldmlzaW9uIDYwNDYyKQorKysgV2ViQ29yZS94bWwvWFNMSW1wb3J0UnVsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCwxMCBAQCBwcml2YXRlOgogCiAgICAgLy8gZnJvbSBD
YWNoZWRSZXNvdXJjZUNsaWVudAogICAgIHZpcnR1YWwgdm9pZCBzZXRYU0xTdHlsZVNoZWV0KGNv
bnN0IFN0cmluZyYgaHJlZiwgY29uc3QgS1VSTCYgYmFzZVVSTCwgY29uc3QgU3RyaW5nJiBzaGVl
dCk7Ci0gICAgCisKKyAgICB2b2lkIGxvYWRTaGVldEFzeW5jKERvY0xvYWRlciogZG9jTG9hZGVy
LCBjb25zdCBTdHJpbmcmIGFic0hyZWYpOworICAgIHZvaWQgbG9hZFNoZWV0U3luYyhEb2NMb2Fk
ZXIqIGRvY0xvYWRlciwgY29uc3QgU3RyaW5nJiBhYnNIcmVmKTsKKwogICAgIFN0cmluZyBtX3N0
ckhyZWY7CiAgICAgUmVmUHRyPFhTTFN0eWxlU2hlZXQ+IG1fc3R5bGVTaGVldDsKICAgICBDYWNo
ZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRYU0xTdHlsZVNoZWV0PiBtX2NhY2hlZFNoZWV0OwpJbmRl
eDogV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94
bWwvWFNMVFByb2Nlc3Nvci5jcHAJKHJldmlzaW9uIDYwNDYyKQorKysgV2ViQ29yZS94bWwvWFNM
VFByb2Nlc3Nvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDYgKzgxLDEwIEBAIFBhc3NSZWZQ
dHI8RG9jdW1lbnQ+IFhTTFRQcm9jZXNzb3I6OmNyZWEKICAgICAgICAgICAgIHZpZXctPmNsZWFy
KCk7CiAgICAgICAgIHJlc3VsdC0+c2V0VHJhbnNmb3JtU291cmNlRG9jdW1lbnQoZnJhbWUtPmRv
Y3VtZW50KCkpOwogICAgICAgICBmcmFtZS0+c2V0RG9jdW1lbnQocmVzdWx0KTsKKyAgICB9IGVs
c2UgaWYgKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCAmJiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICBEb2N1bWVudCogb3JpZ2luRG9jID0gc3RhdGlj
X2Nhc3Q8RG9jdW1lbnQqPihtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOworICAgICAgICBpZiAo
b3JpZ2luRG9jLT5mcmFtZSgpKQorICAgICAgICAgICAgb3JpZ2luRG9jLT5mcmFtZSgpLT5yZWdp
c3RlclN1YkRvY3VtZW50KHJlc3VsdC5nZXQoKSk7CiAgICAgfQogCiAgICAgaWYgKHNvdXJjZUlz
RG9jdW1lbnQpCkluZGV4OiBXZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5oCShyZXZpc2lvbiA2MDQ2MikKKysrIFdlYkNv
cmUveG1sL1hTTFRQcm9jZXNzb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsMTAgQEAg
Y2xhc3MgRG9jdW1lbnRGcmFnbWVudDsKIAogY2xhc3MgWFNMVFByb2Nlc3NvciA6IHB1YmxpYyBS
ZWZDb3VudGVkPFhTTFRQcm9jZXNzb3I+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxYU0xUUHJvY2Vzc29yPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgWFNMVFByb2Nl
c3Nvcik7IH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxYU0xUUHJvY2Vzc29yPiBjcmVhdGUoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgWFNMVFByb2Nlc3Nvcihjb250ZXh0KSk7CisgICAgfQogCiAgICAgdm9pZCBzZXRY
U0xTdHlsZVNoZWV0KFBhc3NSZWZQdHI8WFNMU3R5bGVTaGVldD4gc3R5bGVTaGVldCkgeyBtX3N0
eWxlc2hlZXQgPSBzdHlsZVNoZWV0OyB9CiAgICAgYm9vbCB0cmFuc2Zvcm1Ub1N0cmluZyhOb2Rl
KiBzb3VyY2UsIFN0cmluZyYgcmVzdWx0TUlNRVR5cGUsIFN0cmluZyYgcmVzdWx0U3RyaW5nLCBT
dHJpbmcmIHJlc3VsdEVuY29kaW5nKTsKQEAgLTcyLDggKzc1LDEwIEBAIHB1YmxpYzoKICAgICB0
eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IFBhcmFtZXRlck1hcDsKIAogcHJpdmF0ZToK
LSAgICBYU0xUUHJvY2Vzc29yKCkgeyB9CisgICAgWFNMVFByb2Nlc3NvcihTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0KQorICAgICAgICA6IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dChj
b250ZXh0KSB7IH0KIAorICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIG1fc2NyaXB0RXhlY3V0
aW9uQ29udGV4dDsKICAgICBSZWZQdHI8WFNMU3R5bGVTaGVldD4gbV9zdHlsZXNoZWV0OwogICAg
IFJlZlB0cjxOb2RlPiBtX3N0eWxlc2hlZXRSb290Tm9kZTsKICAgICBQYXJhbWV0ZXJNYXAgbV9w
YXJhbWV0ZXJzOwpJbmRleDogV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcAkocmV2aXNp
b24gNjA0NjIpCisrKyBXZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yTGlieHNsdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExNywxMCArMTE3LDEzIEBAIHN0YXRpYyB4bWxEb2NQdHIgZG9jTG9hZGVy
RnVuYyhjb25zdCB4bWwKIAogICAgICAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKIAotICAgICAgICBi
b29sIHJlcXVlc3RBbGxvd2VkID0gZ2xvYmFsRG9jTG9hZGVyLT5mcmFtZSgpICYmIGdsb2JhbERv
Y0xvYWRlci0+ZG9jKCktPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QodXJsKTsKKyAgICAg
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZ2xvYmFsRG9jTG9hZGVyLT5kb2MoKTsKKyAgICAgICAg
RnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCkgPyBkb2N1bWVudC0+ZnJhbWUoKSA6IGRv
Y3VtZW50LT5vcmlnaW5GcmFtZSgpOworCisgICAgICAgIGJvb2wgcmVxdWVzdEFsbG93ZWQgPSBm
cmFtZSAmJiBkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdCh1cmwpOwogICAg
ICAgICBpZiAocmVxdWVzdEFsbG93ZWQpIHsKLSAgICAgICAgICAgIGdsb2JhbERvY0xvYWRlci0+
ZnJhbWUoKS0+bG9hZGVyKCktPmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkodXJsLCBBbGxvd1N0
b3JlZENyZWRlbnRpYWxzLCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOwotICAgICAgICAgICAgcmVx
dWVzdEFsbG93ZWQgPSBnbG9iYWxEb2NMb2FkZXItPmRvYygpLT5zZWN1cml0eU9yaWdpbigpLT5j
YW5SZXF1ZXN0KHJlc3BvbnNlLnVybCgpKTsKKyAgICAgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+
bG9hZFJlc291cmNlU3luY2hyb25vdXNseSh1cmwsIEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsIGVy
cm9yLCByZXNwb25zZSwgZGF0YSk7CisgICAgICAgICAgICByZXF1ZXN0QWxsb3dlZCA9IGRvY3Vt
ZW50LT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHJlc3BvbnNlLnVybCgpKTsKICAgICAg
ICAgfQogICAgICAgICBpZiAoIXJlcXVlc3RBbGxvd2VkKSB7CiAgICAgICAgICAgICBkYXRhLmNs
ZWFyKCk7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2MDQ2MikKKysrIExheW91dFRlc3RzL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDEwLTA2LTA4ICBBbmRyZWFzIFdp
Y3RvciAgPGFuZHJlYXMud2ljdG9yQHhjZXJpb24uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIHhzbDppbXBvcnQgYW5kIGRvY3VtZW50KCkgZG9u
J3Qgd29yayBpbiBzdHlsZXNoZWV0cyBsb2FkZWQgdmlhIFhNTEh0dHBSZXF1ZXN0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDMxMworCisgICAgICAg
ICogZmFzdC94c2wvdHJhbnNmb3JtLWRvY2ltcGwtZG9jLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogZmFzdC94c2wvdHJhbnNmb3JtLWRvY2ltcGwtZG9jLnhodG1sOiBBZGRlZC4KKyAg
ICAgICAgIC0gVGVzdCB0aGF0IHN0eWxlc2hlZXRzIGNyZWF0ZWQgd2l0aCBkb2N1bWVudC5pbXBs
ZW1lbnRhdGlvbi5jcmVhdGVEb2N1bWVudAorICAgICAgICAgICBjYW4gdXNlIHhzbDppbXBvcnQK
KyAgICAgICAgKiBmYXN0L3hzbC90cmFuc2Zvcm0tZG9tcGFyc2VyLWRvYy1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGZhc3QveHNsL3RyYW5zZm9ybS1kb21wYXJzZXItZG9jLnhodG1s
OiBBZGRlZC4KKyAgICAgICAgIC0gVGVzdCB0aGF0IHN0eWxlc2hlZXRzIGNyZWF0ZWQgd2l0aCBE
T01QYXJzZXIucGFyc2VGcm9tU3RyaW5nCisgICAgICAgICAgIGNhbiB1c2UgeHNsOmltcG9ydAor
ICAgICAgICAqIGZhc3QveHNsL3RyYW5zZm9ybS10cmFuc2Zvcm1lZC1kb2MtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3hzbC90cmFuc2Zvcm0tdHJhbnNmb3JtZWQtZG9jLnho
dG1sOiBBZGRlZC4KKyAgICAgICAgIC0gVGVzdCB0aGF0IHN0eWxlc2hlZXRzIGNyZWF0ZWQgd2l0
aCBYU0xUUHJvY2Vzc29yLnRyYW5zZm9ybVRvRG9jdW1lbnQKKyAgICAgICAgICAgY2FuIHVzZSB4
c2w6aW1wb3J0CisgICAgICAgICogZmFzdC94c2wvdHJhbnNmb3JtLXhoci1kb2MtZXhwZWN0ZWQu
dHh0OgorICAgICAgICAqIGh0dHAvdGVzdHMveHNsOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rl
c3RzL3hzbC9yZXNvdXJjZXM6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMveHNsL3Jlc291
cmNlcy9hbGxvdy1jcm9zcy1vcmlnaW4taGVhZGVyLmNnaTogQWRkZWQuCisgICAgICAgICogaHR0
cC90ZXN0cy94c2wvcmVzb3VyY2VzL3RyYW5zZm9ybS1mcmFtZWQtc3ViZnJhbWUxLnhodG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMvdHJhbnNmb3JtLWZyYW1l
ZC1zdWJmcmFtZTIueGh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMveHNsL3Jlc291
cmNlcy94aHItZG9jLWNyb3NzLW9yaWdpbi54c2w6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVz
dHMveHNsL3Jlc291cmNlcy94aHItZG9jLWltcG9ydGVkLnhzbDogQWRkZWQuCisgICAgICAgICog
aHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL3hoci1kb2MueG1sOiBBZGRlZC4KKyAgICAgICAgKiBo
dHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMveGhyLWRvYy54c2w6IEFkZGVkLgorICAgICAgICAqIGh0
dHAvdGVzdHMveHNsL3RyYW5zZm9ybS1mcmFtZWQtZG9jLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogaHR0cC90ZXN0cy94c2wvdHJhbnNmb3JtLWZyYW1lZC1kb2MueGh0bWw6IEFkZGVk
LgorICAgICAgICAgLSBUZXN0IHRoYXQgb3JpZ2luRnJhbWUgaXMgcmVzZXQgb24gZnJhbWUgbmF2
aWdhdGlvbgorICAgICAgICAqIGh0dHAvdGVzdHMveHNsL3RyYW5zZm9ybS14aHItZG9jLWNyb3Nz
LW9yaWdpbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMveHNsL3Ry
YW5zZm9ybS14aHItZG9jLWNyb3NzLW9yaWdpbi54aHRtbDogQWRkZWQuCisgICAgICAgICAtIFRl
c3QgdGhhdCB5b3UgY2FuJ3QgaW1wb3J0IGRvY3VtZW50cyBjcm9zcyBvcmlnaW4KKyAgICAgICAg
KiBodHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0teGhyLWRvYy1mcm9tLWFsbG93ZWQtY3Jvc3Mtb3Jp
Z2luLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy94c2wvdHJhbnNm
b3JtLXhoci1kb2MtZnJvbS1hbGxvd2VkLWNyb3NzLW9yaWdpbi54aHRtbDogQWRkZWQuCisgICAg
ICAgICAtIFRlc3QgZm9yIHBlcm1pdHRlZCBzYW1lIG9yaWdpbiBsb2FkIGluIHRoZSBjYXNlIG9m
IGNyb3NzLW9yaWdpbiBYTUxIdHRwUmVxdWVzdAorCiAyMDEwLTA1LTMxICBSb2xhbmQgU3RlaW5l
ciAgPHJvbGFuZHN0ZWluZXJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQ6IGxh
bmQgbmV3IENocm9taXVtIGJhc2VsaW5lcyB0byB1bmJsb2NrIFdlYktpdCByb2xsCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0tZG9jaW1wbC1kb2MtZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS1kb2NpbXBsLWRvYy1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zv
cm0tZG9jaW1wbC1kb2MtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAK
K1Rlc3QgZm9yIGJ1ZyAxMDMxMzogeHNsOmltcG9ydCBkb2Vzbid0IHdvcmsgaW4gc3R5bGVzaGVl
dHMgbG9hZGVkIHZpYSBYTUxIdHRwUmVxdWVzdC4KKworU1VDQ0VTUwpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC94c2wvdHJhbnNmb3JtLWRvY2ltcGwtZG9jLnhodG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS1kb2NpbXBsLWRvYy54aHRtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS1kb2NpbXBsLWRvYy54aHRtbAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGlu
Zz0idXRmLTgiPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4x
Ly9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMTEvRFREL3hodG1sMTEuZHRkIj4KKzxo
dG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iPgor
PGhlYWQ+CisgICAgPHRpdGxlPnhzbCBpbXBvcnQgdGVzdDwvdGl0bGU+CisgICAgPHNjcmlwdCB0
eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhW0NEQVRBWworICAgICAgICBmdW5jdGlvbiBsb2FkKCkg
eworICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAg
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyAgICAgICAgICAg
IHZhciB4c2x0TlMgPSAiaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIjsKKyAg
ICAgICAgICAgIHZhciB4c2x0RG9jID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlRG9j
dW1lbnQoeHNsdE5TLCAic3R5bGVzaGVldCIsIG51bGwpOworICAgICAgICAgICAgdmFyIHJvb3RF
bGVtID0geHNsdERvYy5kb2N1bWVudEVsZW1lbnQ7CisgICAgICAgICAgICByb290RWxlbS5zZXRB
dHRyaWJ1dGUoInZlcnNpb24iLCAiMS4wIik7CisKKyAgICAgICAgICAgIHZhciBpbXBvcnRFbGVt
ID0geHNsdERvYy5jcmVhdGVFbGVtZW50TlMoeHNsdE5TLCAiaW1wb3J0Iik7CisgICAgICAgICAg
ICBpbXBvcnRFbGVtLnNldEF0dHJpYnV0ZSgiaHJlZiIsICJyZXNvdXJjZXMveGhyLWRvYy1pbXBv
cnRlZC54c2wiKTsKKyAgICAgICAgICAgIHJvb3RFbGVtLmFwcGVuZENoaWxkKGltcG9ydEVsZW0p
OworCisgICAgICAgICAgICB2YXIgdGVtcGxhdGVFbGVtID0geHNsdERvYy5jcmVhdGVFbGVtZW50
TlMoeHNsdE5TLCAidGVtcGxhdGUiKTsKKyAgICAgICAgICAgIHRlbXBsYXRlRWxlbS5zZXRBdHRy
aWJ1dGUoIm1hdGNoIiwgIi9yb290Iik7CisgICAgICAgICAgICB2YXIgY2FsbEVsZW0gPSB4c2x0
RG9jLmNyZWF0ZUVsZW1lbnROUyh4c2x0TlMsICJjYWxsLXRlbXBsYXRlIik7CisgICAgICAgICAg
ICBjYWxsRWxlbS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCAid29ya3MiKTsKKyAgICAgICAgICAgIHRl
bXBsYXRlRWxlbS5hcHBlbmRDaGlsZChjYWxsRWxlbSk7CisgICAgICAgICAgICByb290RWxlbS5h
cHBlbmRDaGlsZCh0ZW1wbGF0ZUVsZW0pOworCisgICAgICAgICAgICB2YXIgeHNsdCA9IG5ldyBY
U0xUUHJvY2Vzc29yKCk7CisgICAgICAgICAgICB4c2x0LmltcG9ydFN0eWxlc2hlZXQoeHNsdERv
Yyk7CisKKyAgICAgICAgICAgIHZhciB4bWxEb2MgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5j
cmVhdGVEb2N1bWVudCgiIiwgInJvb3QiLCBudWxsKTsKKyAgICAgICAgICAgIHZhciByZXN1bHRE
b2MgPSB4c2x0LnRyYW5zZm9ybVRvRG9jdW1lbnQoeG1sRG9jKTsKKyAgICAgICAgICAgIHZhciBm
cmFnbWVudCA9IGRvY3VtZW50LmltcG9ydE5vZGUocmVzdWx0RG9jLmRvY3VtZW50RWxlbWVudCwg
dHJ1ZSk7CisKKyAgICAgICAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
ZGl2Jyk7CisgICAgICAgICAgICBkaXYucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoZnJhZ21lbnQs
IGRpdik7CisgICAgICAgIH0KKyAgICBdXT48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9h
ZD0ibG9hZCgpIj4KKzxwPlRlc3QgZm9yIDxhIGhyZWY9Imh0dHA6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEwMzEzIj5idWcgMTAzMTM8L2E+OgoreHNsOmltcG9ydCBkb2Vzbid0
IHdvcmsgaW4gc3R5bGVzaGVldHMgbG9hZGVkIHZpYSBYTUxIdHRwUmVxdWVzdC48L3A+CisKKzxk
aXYgaWQ9ImRpdiI+SXQncyBuaWNlIHRoYXQgdGhpcyBoYXNuJ3QgY3Jhc2hlZCwgYnV0IHRoZSBY
U0wgdHJhbnNmb3JtYXRpb24gaGFzIGZhaWxlZC48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS1kb21wYXJzZXItZG9jLWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0tZG9tcGFy
c2VyLWRvYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3hz
bC90cmFuc2Zvcm0tZG9tcGFyc2VyLWRvYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMyBAQAorVGVzdCBmb3IgYnVnIDEwMzEzOiB4c2w6aW1wb3J0IGRvZXNuJ3Qgd29yayBp
biBzdHlsZXNoZWV0cyBsb2FkZWQgdmlhIFhNTEh0dHBSZXF1ZXN0LgorCitTVUNDRVNTCkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0tZG9tcGFyc2VyLWRvYy54aHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0tZG9tcGFyc2VyLWRvYy54
aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS1kb21w
YXJzZXItZG9jLnhodG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQxIEBACis8P3htbCB2ZXJz
aW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9X
M0MvL0RURCBYSFRNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQv
eGh0bWwxMS5kdGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwi
IHhtbDpsYW5nPSJlbiI+Cis8aGVhZD4KKyAgICA8dGl0bGU+eHNsIGltcG9ydCB0ZXN0PC90aXRs
ZT4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCFbQ0RBVEFbCisgICAgICAg
IGZ1bmN0aW9uIGxvYWQoKSB7CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKQorICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQo
KTsKKworICAgICAgICAgICAgdmFyIHhzbHRTdHIgPQorICAgICAgICAgICAgICAgICc8eHNsOnN0
eWxlc2hlZXQgdmVyc2lvbj0iMS4wIicgKworICAgICAgICAgICAgICAgICcgIHhtbG5zOnhzbD0i
aHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIicgKworICAgICAgICAgICAgICAg
ICcgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4nICsKKyAgICAgICAgICAg
ICAgICAnPHhzbDppbXBvcnQgaHJlZj0icmVzb3VyY2VzL3hoci1kb2MtaW1wb3J0ZWQueHNsIiAv
PicgKworICAgICAgICAgICAgICAgICc8eHNsOnRlbXBsYXRlIG1hdGNoPSIvcm9vdCI+JyArCisg
ICAgICAgICAgICAgICAgJyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0id29ya3MiIC8+JyAr
CisgICAgICAgICAgICAgICAgJzwveHNsOnRlbXBsYXRlPicgKworICAgICAgICAgICAgICAgICc8
L3hzbDpzdHlsZXNoZWV0Pic7CisKKyAgICAgICAgICAgIHZhciBwYXJzZXIgPSBuZXcgRE9NUGFy
c2VyKCk7CisgICAgICAgICAgICB2YXIgeHNsdCA9IG5ldyBYU0xUUHJvY2Vzc29yKCk7CisgICAg
ICAgICAgICB2YXIgeHNsdERvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoeHNsdFN0ciwgImFw
cGxpY2F0aW9uL3htbCIpOworICAgICAgICAgICAgeHNsdC5pbXBvcnRTdHlsZXNoZWV0KHhzbHRE
b2MpOworCisgICAgICAgICAgICB2YXIgeG1sRG9jID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZygi
PHJvb3QvPiIsICJhcHBsaWNhdGlvbi94bWwiKTsKKyAgICAgICAgICAgIHZhciByZXN1bHREb2Mg
PSB4c2x0LnRyYW5zZm9ybVRvRG9jdW1lbnQoeG1sRG9jKTsKKyAgICAgICAgICAgIHZhciBmcmFn
bWVudCA9IGRvY3VtZW50LmltcG9ydE5vZGUocmVzdWx0RG9jLmRvY3VtZW50RWxlbWVudCwgdHJ1
ZSk7CisKKyAgICAgICAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGl2
Jyk7CisgICAgICAgICAgICBkaXYucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoZnJhZ21lbnQsIGRp
dik7CisgICAgICAgIH0KKyAgICBdXT48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0i
bG9hZCgpIj4KKzxwPlRlc3QgZm9yIDxhIGhyZWY9Imh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEwMzEzIj5idWcgMTAzMTM8L2E+OgoreHNsOmltcG9ydCBkb2Vzbid0IHdv
cmsgaW4gc3R5bGVzaGVldHMgbG9hZGVkIHZpYSBYTUxIdHRwUmVxdWVzdC48L3A+CisKKzxkaXYg
aWQ9ImRpdiI+SXQncyBuaWNlIHRoYXQgdGhpcyBoYXNuJ3QgY3Jhc2hlZCwgYnV0IHRoZSBYU0wg
dHJhbnNmb3JtYXRpb24gaGFzIGZhaWxlZC48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS10cmFuc2Zvcm1lZC1kb2MtZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS10cmFuc2Zv
cm1lZC1kb2MtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC94
c2wvdHJhbnNmb3JtLXRyYW5zZm9ybWVkLWRvYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMyBAQAorVGVzdCBmb3IgYnVnIDEwMzEzOiB4c2w6aW1wb3J0IGRvZXNuJ3Qgd29y
ayBpbiBzdHlsZXNoZWV0cyBsb2FkZWQgdmlhIFhNTEh0dHBSZXF1ZXN0LgorCitTVUNDRVNTCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0tdHJhbnNmb3JtZWQtZG9jLnhodG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS10cmFuc2Zvcm1l
ZC1kb2MueGh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zv
cm0tdHJhbnNmb3JtZWQtZG9jLnhodG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4IEBACis8
P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCFET0NUWVBFIGh0bWwgUFVC
TElDICItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0
bWwxMS9EVEQveGh0bWwxMS5kdGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5
OTkveGh0bWwiIHhtbDpsYW5nPSJlbiI+Cis8aGVhZD4KKyAgICA8dGl0bGU+eHNsIGltcG9ydCB0
ZXN0PC90aXRsZT4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCFbQ0RBVEFb
CisgICAgICAgIGZ1bmN0aW9uIGxvYWQoKSB7CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1
bXBBc1RleHQoKTsKKworICAgICAgICAgICAgdmFyIGNvcHlYc2x0U3RyID0KKyAgICAgICAgICAg
ICAgICAnPHhzbDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCInICsKKyAgICAgICAgICAgICAgICAn
ICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSInICsKKyAg
ICAgICAgICAgICAgICAnICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+JyAr
CisgICAgICAgICAgICAgICAgJzx4c2w6dGVtcGxhdGUgbWF0Y2g9IkAqfG5vZGUoKSI+JyArCisg
ICAgICAgICAgICAgICAgJyAgPHhzbDpjb3B5PicgKworICAgICAgICAgICAgICAgICcgICAgPHhz
bDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJAKnxub2RlKCkiLz4nICsKKyAgICAgICAgICAgICAg
ICAnICA8L3hzbDpjb3B5PicgKworICAgICAgICAgICAgICAgICc8L3hzbDp0ZW1wbGF0ZT4nICsK
KyAgICAgICAgICAgICAgICAnPC94c2w6c3R5bGVzaGVldD4nOworCisgICAgICAgICAgICB2YXIg
cGFyc2VyID0gbmV3IERPTVBhcnNlcigpOworICAgICAgICAgICAgdmFyIHhzbHQgPSBuZXcgWFNM
VFByb2Nlc3NvcigpOworICAgICAgICAgICAgY29weVhzbHREb2MgPSBwYXJzZXIucGFyc2VGcm9t
U3RyaW5nKGNvcHlYc2x0U3RyLCAiYXBwbGljYXRpb24veG1sIik7CisgICAgICAgICAgICB4c2x0
LmltcG9ydFN0eWxlc2hlZXQoY29weVhzbHREb2MpOworCisgICAgICAgICAgICB2YXIgcmVxID0g
bmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgICAgICAgICByZXEub3BlbignR0VUJywgJ3Jlc291
cmNlcy94aHItZG9jLnhzbCcsIGZhbHNlKTsKKyAgICAgICAgICAgIHJlcS5zZW5kKG51bGwpOwor
ICAgICAgICAgICAgdmFyIHhzbHREb2MgPSB4c2x0LnRyYW5zZm9ybVRvRG9jdW1lbnQocmVxLnJl
c3BvbnNlWE1MKTsKKyAgICAgICAgICAgIHhzbHQuaW1wb3J0U3R5bGVzaGVldCh4c2x0RG9jKTsK
KworICAgICAgICAgICAgdmFyIHhtbERvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoIjxyb290
Lz4iLCAiYXBwbGljYXRpb24veG1sIik7CisgICAgICAgICAgICB2YXIgcmVzdWx0RG9jID0geHNs
dC50cmFuc2Zvcm1Ub0RvY3VtZW50KHhtbERvYyk7CisgICAgICAgICAgICB2YXIgZnJhZ21lbnQg
PSBkb2N1bWVudC5pbXBvcnROb2RlKHJlc3VsdERvYy5kb2N1bWVudEVsZW1lbnQsIHRydWUpOwor
CisgICAgICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RpdicpOwor
ICAgICAgICAgICAgZGl2LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGZyYWdtZW50LCBkaXYpOwor
ICAgICAgICB9CisgICAgXV0+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9ImxvYWQo
KSI+Cis8cD5UZXN0IGZvciA8YSBocmVmPSJodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMDMxMyI+YnVnIDEwMzEzPC9hPjoKK3hzbDppbXBvcnQgZG9lc24ndCB3b3JrIGlu
IHN0eWxlc2hlZXRzIGxvYWRlZCB2aWEgWE1MSHR0cFJlcXVlc3QuPC9wPgorCis8ZGl2IGlkPSJk
aXYiPkl0J3MgbmljZSB0aGF0IHRoaXMgaGFzbid0IGNyYXNoZWQsIGJ1dCB0aGUgWFNMIHRyYW5z
Zm9ybWF0aW9uIGhhcyBmYWlsZWQuPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0teGhyLWRvYy1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC94c2wvdHJhbnNmb3JtLXhoci1kb2MtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiA2MDQ2MikKKysrIExheW91dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS14aHIt
ZG9jLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDMgQEAKLUNPTlNPTEUg
TUVTU0FHRTogbGluZSAyMDogVHlwZUVycm9yOiBSZXN1bHQgb2YgZXhwcmVzc2lvbiAnZG9jJyBb
dW5kZWZpbmVkXSBpcyBub3QgYW4gb2JqZWN0LgogVGVzdCBmb3IgYnVnIDEwMzEzOiB4c2w6aW1w
b3J0IGRvZXNuJ3Qgd29yayBpbiBzdHlsZXNoZWV0cyBsb2FkZWQgdmlhIFhNTEh0dHBSZXF1ZXN0
LgogCi1JdCdzIG5pY2UgdGhhdCB0aGlzIGhhc24ndCBjcmFzaGVkLCBidXQgdGhlIFhTTCB0cmFu
c2Zvcm1hdGlvbiBoYXMgZmFpbGVkLgorU1VDQ0VTUwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy94c2wvdHJhbnNmb3JtLWZyYW1lZC1kb2MtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3RyYW5zZm9ybS1mcmFtZWQtZG9jLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3RyYW5zZm9y
bS1mcmFtZWQtZG9jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMCBAQAor
VGVzdCBmb3IgYnVnIDEwMzEzOiB4c2w6aW1wb3J0IGRvZXNuJ3Qgd29yayBpbiBzdHlsZXNoZWV0
cyBsb2FkZWQgdmlhIFhNTEh0dHBSZXF1ZXN0LgorCitTVUNDRVNTCitUaGlzIHRyYW5zZm9ybWF0
aW9uIGhhcyBmYWlsZWQgYmVjYXVzZSB0aGUgZnJhbWUgbm8gbG9uZ2VyIGhhcyB0aGUgc2FtZSBv
cmlnaW4uCisKKworLS0tLS0tLS0KK0ZyYW1lOiAnc3ViZnJhbWUnCistLS0tLS0tLQorc3ViZnJh
bWUgMgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvdHJhbnNmb3JtLWZyYW1lZC1k
b2MueGh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvdHJhbnNm
b3JtLWZyYW1lZC1kb2MueGh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3hzbC90cmFuc2Zvcm0tZnJhbWVkLWRvYy54aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw1OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhRE9DVFlQ
RSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMu
b3JnL1RSL3hodG1sMTEvRFREL3hodG1sMTEuZHRkIj4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3
LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iPgorPGhlYWQ+CisgICAgPHRpdGxlPnhz
bCBpbXBvcnQgdGVzdDwvdGl0bGU+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQi
PjwhW0NEQVRBWworICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAg
ICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworCisgICAgICAg
IHZhciB4c2x0RG9jOworCisgICAgICAgIHZhciBwYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7Cisg
ICAgICAgIHZhciB4bWxEb2MgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKCI8cm9vdC8+IiwgImFw
cGxpY2F0aW9uL3htbCIpOworCisgICAgICAgIGZ1bmN0aW9uIHRyYW5zZm9ybShkaXYpIHsKKyAg
ICAgICAgICAgIHZhciB4c2x0ID0gbmV3IFhTTFRQcm9jZXNzb3IoKTsKKyAgICAgICAgICAgIHhz
bHQuaW1wb3J0U3R5bGVzaGVldCh4c2x0RG9jKTsKKyAgICAgICAgICAgIHZhciByZXN1bHREb2Mg
PSB4c2x0LnRyYW5zZm9ybVRvRG9jdW1lbnQoeG1sRG9jKTsKKyAgICAgICAgICAgIHZhciBmcmFn
bWVudCA9IGRvY3VtZW50LmltcG9ydE5vZGUocmVzdWx0RG9jLmRvY3VtZW50RWxlbWVudCwgdHJ1
ZSk7CisgICAgICAgICAgICBkaXYucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoZnJhZ21lbnQsIGRp
dik7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBsb2FkKCkgeworICAgICAgICAgICAg
aWYgKCF4c2x0RG9jKSB7CisgICAgICAgICAgICAgICAgeHNsdERvYyA9IHN1YmZyYW1lLnhzbHRE
b2M7CisgICAgICAgICAgICAgICAgdHJhbnNmb3JtKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0
cmFuc2Zvcm0xJykpOworICAgICAgICAgICAgICAgIHN1YmZyYW1lLndpbmRvdy5sb2NhdGlvbiA9
ICJodHRwOi8vMTI3LjAuMC4xOjgwMDAveHNsL3Jlc291cmNlcy90cmFuc2Zvcm0tZnJhbWVkLXN1
YmZyYW1lMi54aHRtbCI7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZh
ciBkaXYyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RyYW5zZm9ybTInKTsKKworICAgICAg
ICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybShkaXYyKTsKKyAg
ICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMg
dHJhbnNmb3JtYXRpb24gc2hvdWxkIGZhaWwKKyAgICAgICAgICAgICAgICAgICAgZGl2Mi5pbm5l
ckhUTUwgPSAiVGhpcyB0cmFuc2Zvcm1hdGlvbiBoYXMgZmFpbGVkIGJlY2F1c2UgdGhlIGZyYW1l
IG5vIGxvbmdlciBoYXMgdGhlIHNhbWUgb3JpZ2luLiI7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAg
ICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAg
ICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBDaGlsZEZyYW1lc0FzVGV4dCgp
OworICAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgXV0+PC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwPlRlc3QgZm9yIDxhIGhyZWY9Imh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzEzIj5idWcgMTAzMTM8L2E+OgoreHNsOmlt
cG9ydCBkb2Vzbid0IHdvcmsgaW4gc3R5bGVzaGVldHMgbG9hZGVkIHZpYSBYTUxIdHRwUmVxdWVz
dC48L3A+Cis8ZGl2IGlkPSJ0cmFuc2Zvcm0xIj4KK0l0J3MgbmljZSB0aGF0IHRoaXMgaGFzbid0
IGNyYXNoZWQsIGJ1dCB0aGUgWFNMIHRyYW5zZm9ybWF0aW9uIGhhcyBmYWlsZWQuCis8L2Rpdj4K
KzxkaXYgaWQ9InRyYW5zZm9ybTIiPgorVGhpcyB0cmFuc2Zvcm1hdGlvbiBzaG91bGQgZmFpbCBi
ZWNhdXNlIHRoZSBmcmFtZSBubyBsb25nZXIgaGFzIHRoZSBzYW1lIG9yaWdpbi4KKzwvZGl2Pgor
PGlmcmFtZSBpZD0ic3ViZnJhbWUiIHNyYz0icmVzb3VyY2VzL3RyYW5zZm9ybS1mcmFtZWQtc3Vi
ZnJhbWUxLnhodG1sIiBvbmxvYWQ9ImxvYWQoKSI+Cis8L2lmcmFtZT4KKzwvYm9keT4KKzwvaHRt
bD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3RyYW5zZm9ybS14aHItZG9jLWNy
b3NzLW9yaWdpbi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy94c2wvdHJhbnNmb3JtLXhoci1kb2MtY3Jvc3Mtb3JpZ2luLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3RyYW5zZm9ybS14aHItZG9j
LWNyb3NzLW9yaWdpbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAor
VGVzdCBmb3IgYnVnIDEwMzEzOiB4c2w6aW1wb3J0IGRvZXNuJ3Qgd29yayBpbiBzdHlsZXNoZWV0
cyBsb2FkZWQgdmlhIFhNTEh0dHBSZXF1ZXN0LgorCitUaGlzIHRyYW5zZm9ybWF0aW9uIGhhcyBm
YWlsZWQgYmVjYXVzZSBpdCBpcyB0cnlpbmcgdG8gaW1wb3J0IGEgc3R5bGVzaGVldCBjcm9zcy1v
cmlnaW4uCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0teGhyLWRv
Yy1jcm9zcy1vcmlnaW4ueGh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy94c2wvdHJhbnNmb3JtLXhoci1kb2MtY3Jvc3Mtb3JpZ2luLnhodG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvdHJhbnNmb3JtLXhoci1kb2MtY3Jvc3Mtb3Jp
Z2luLnhodG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ0IEBACis8P3htbCB2ZXJzaW9uPSIx
LjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RU
RCBYSFRNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwx
MS5kdGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDps
YW5nPSJlbiI+Cis8aGVhZD4KKyAgICA8dGl0bGU+eHNsIGltcG9ydCB0ZXN0PC90aXRsZT4KKyAg
ICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgICAgIGZ1bmN0aW9uIGxvYWQo
KSB7CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAg
ICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIHZhciByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICAg
ICAgICAgIHZhciB4c2x0ID0gbmV3IFhTTFRQcm9jZXNzb3IoKTsKKyAgICAgICAgICAgIHJlcS5v
cGVuKCdHRVQnLCAncmVzb3VyY2VzL3hoci1kb2MtY3Jvc3Mtb3JpZ2luLnhzbCcsIGZhbHNlKTsK
KyAgICAgICAgICAgIHJlcS5zZW5kKG51bGwpOworICAgICAgICAgICAgeHNsdC5pbXBvcnRTdHls
ZXNoZWV0KHJlcS5yZXNwb25zZVhNTCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJlcS5v
cGVuKCdHRVQnLCAncmVzb3VyY2VzL3hoci1kb2MueG1sJywgZmFsc2UpOworICAgICAgICAgICAg
cmVxLnNlbmQobnVsbCk7CisKKyAgICAgICAgICAgIHZhciBkb2M7CisgICAgICAgICAgICB0cnkg
eworICAgICAgICAgICAgICAgIGRvYyA9IHhzbHQudHJhbnNmb3JtVG9Eb2N1bWVudChyZXEucmVz
cG9uc2VYTUwpOworICAgICAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgIC8v
IFRoaXMgdHJhbnNmb3JtYXRpb24gc2hvdWxkIGZhaWwKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkaXYnKTsKKworICAgICAg
ICAgICAgaWYgKGRvYykgeworICAgICAgICAgICAgICAgIHZhciBmcmFnbWVudCA9IGRvY3VtZW50
LmltcG9ydE5vZGUoZG9jLmRvY3VtZW50RWxlbWVudCwgdHJ1ZSk7CisgICAgICAgICAgICAgICAg
ZGl2LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGZyYWdtZW50LCBkaXYpOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0gIlRoaXMgdHJhbnNmb3Jt
YXRpb24gaGFzIGZhaWxlZCBiZWNhdXNlIGl0IGlzIHRyeWluZyB0byBpbXBvcnQgYSBzdHlsZXNo
ZWV0IGNyb3NzLW9yaWdpbi4iOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgPC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9ImxvYWQoKSI+Cis8cD5UZXN0IGZvciA8YSBocmVm
PSJodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDMxMyI+YnVnIDEwMzEz
PC9hPjoKK3hzbDppbXBvcnQgZG9lc24ndCB3b3JrIGluIHN0eWxlc2hlZXRzIGxvYWRlZCB2aWEg
WE1MSHR0cFJlcXVlc3QuPC9wPgorCis8ZGl2IGlkPSJkaXYiPlRoaXMgdHJhbnNmb3JtYXRpb24g
c2hvdWxkIGZhaWwgYmVjYXVzZSBpdCBpcyB0cnlpbmcgdG8gaW1wb3J0IGEgc3R5bGVzaGVldCBj
cm9zcy1vcmlnaW4uPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0teGhyLWRvYy1mcm9tLWFsbG93ZWQtY3Jvc3Mtb3JpZ2lu
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC90
cmFuc2Zvcm0teGhyLWRvYy1mcm9tLWFsbG93ZWQtY3Jvc3Mtb3JpZ2luLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3RyYW5zZm9ybS14aHIt
ZG9jLWZyb20tYWxsb3dlZC1jcm9zcy1vcmlnaW4tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDMgQEAKK1Rlc3QgZm9yIGJ1ZyAxMDMxMzogeHNsOmltcG9ydCBkb2Vzbid0IHdv
cmsgaW4gc3R5bGVzaGVldHMgbG9hZGVkIHZpYSBYTUxIdHRwUmVxdWVzdC4KKworU1VDQ0VTUwpJ
bmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvdHJhbnNmb3JtLXhoci1kb2MtZnJvbS1h
bGxvd2VkLWNyb3NzLW9yaWdpbi54aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3hzbC90cmFuc2Zvcm0teGhyLWRvYy1mcm9tLWFsbG93ZWQtY3Jvc3Mtb3JpZ2luLnho
dG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvdHJhbnNmb3Jt
LXhoci1kb2MtZnJvbS1hbGxvd2VkLWNyb3NzLW9yaWdpbi54aHRtbAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwzMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwh
RE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTiIgImh0dHA6Ly93
d3cudzMub3JnL1RSL3hodG1sMTEvRFREL3hodG1sMTEuZHRkIj4KKzxodG1sIHhtbG5zPSJodHRw
Oi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iPgorPGhlYWQ+CisgICAgPHRp
dGxlPnhzbCBpbXBvcnQgdGVzdDwvdGl0bGU+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFz
Y3JpcHQiPgorICAgICAgICBmdW5jdGlvbiBsb2FkKCkgeworICAgICAgICAgICAgaWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci5kdW1wQXNUZXh0KCk7CisKKyAgICAgICAgICAgIHZhciByZXEgPSBuZXcgWE1MSHR0cFJl
cXVlc3QoKTsKKyAgICAgICAgICAgIHZhciB4c2x0ID0gbmV3IFhTTFRQcm9jZXNzb3IoKTsKKyAg
ICAgICAgICAgIHJlcS5vcGVuKCdHRVQnLCAnaHR0cDovL2xvY2FsaG9zdDo4MDAwL3hzbC9yZXNv
dXJjZXMvYWxsb3ctY3Jvc3Mtb3JpZ2luLWhlYWRlci5jZ2k/eGhyLWRvYy54c2wnLCBmYWxzZSk7
CisgICAgICAgICAgICByZXEuc2VuZChudWxsKTsKKyAgICAgICAgICAgIHhzbHQuaW1wb3J0U3R5
bGVzaGVldChyZXEucmVzcG9uc2VYTUwpOworCisgICAgICAgICAgICByZXEub3BlbignR0VUJywg
J3Jlc291cmNlcy94aHItZG9jLnhtbCcsIGZhbHNlKTsKKyAgICAgICAgICAgIHJlcS5zZW5kKG51
bGwpOworICAgICAgICAgICAgdmFyIGRvYyA9IHhzbHQudHJhbnNmb3JtVG9Eb2N1bWVudChyZXEu
cmVzcG9uc2VYTUwpOworICAgICAgICAgICAgdmFyIGZyYWdtZW50ID0gZG9jdW1lbnQuaW1wb3J0
Tm9kZShkb2MuZG9jdW1lbnRFbGVtZW50LCB0cnVlKTsKKworICAgICAgICAgICAgdmFyIGRpdiA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkaXYnKTsKKyAgICAgICAgICAgIGRpdi5wYXJlbnRO
b2RlLnJlcGxhY2VDaGlsZChmcmFnbWVudCwgZGl2KTsKKyAgICAgICAgfQorICAgIDwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJsb2FkKCkiPgorPHA+VGVzdCBmb3IgPGEgaHJlZj0i
aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzMTMiPmJ1ZyAxMDMxMzwv
YT46Cit4c2w6aW1wb3J0IGRvZXNuJ3Qgd29yayBpbiBzdHlsZXNoZWV0cyBsb2FkZWQgdmlhIFhN
TEh0dHBSZXF1ZXN0LjwvcD4KKworPGRpdiBpZD0iZGl2Ij5JdCdzIG5pY2UgdGhhdCB0aGlzIGhh
c24ndCBjcmFzaGVkLCBidXQgdGhlIFhTTCB0cmFuc2Zvcm1hdGlvbiBoYXMgZmFpbGVkLjwvZGl2
PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvcmVz
b3VyY2VzL2FsbG93LWNyb3NzLW9yaWdpbi1oZWFkZXIuY2dpCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2h0dHAvdGVzdHMveHNsL3Jlc291cmNlcy9hbGxvdy1jcm9zcy1vcmlnaW4taGVhZGVy
LmNnaQkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3Jlc291cmNl
cy9hbGxvdy1jcm9zcy1vcmlnaW4taGVhZGVyLmNnaQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
MSBAQAorIyEvdXNyL2Jpbi9wZXJsIC13Cit1c2Ugc3RyaWN0OworCitwcmludCAiQ29udGVudC1U
eXBlOiBhcHBsaWNhdGlvbi94bWxcbiI7CitwcmludCAiQ2FjaGUtQ29udHJvbDogbm8tY2FjaGUs
IG5vLXN0b3JlXG4iOworcHJpbnQgIkFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbjogKlxuXG4i
OworCitteSAkZmlsZW5hbWUgPSAkRU5WeyJRVUVSWV9TVFJJTkcifTsKK29wZW4gRklMRSwgJGZp
bGVuYW1lIG9yIGRpZTsKK3ByaW50IDxGSUxFPjsKK2Nsb3NlIEZJTEU7CgpQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMvYWxsb3ctY3Jvc3Mt
b3JpZ2luLWhlYWRlci5jZ2kKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAq
CgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL3RyYW5zZm9ybS1m
cmFtZWQtc3ViZnJhbWUxLnhodG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVz
dHMveHNsL3Jlc291cmNlcy90cmFuc2Zvcm0tZnJhbWVkLXN1YmZyYW1lMS54aHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3Jlc291cmNlcy90cmFuc2Zvcm0t
ZnJhbWVkLXN1YmZyYW1lMS54aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNCBAQAorPD94
bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJ
QyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1s
MTEvRFREL3hodG1sMTEuZHRkIj4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5
L3hodG1sIiB4bWw6bGFuZz0iZW4iPgorPGhlYWQ+CisgICAgPHRpdGxlPnhzbCBpbXBvcnQgdGVz
dDwvdGl0bGU+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhW0NEQVRBWwor
ICAgICAgICB2YXIgeHNsdFN0ciA9CisgICAgICAgICAgICAnPHhzbDpzdHlsZXNoZWV0IHZlcnNp
b249IjEuMCInICsKKyAgICAgICAgICAgICcgIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcv
MTk5OS9YU0wvVHJhbnNmb3JtIicgKworICAgICAgICAgICAgJyAgeG1sbnM9Imh0dHA6Ly93d3cu
dzMub3JnLzE5OTkveGh0bWwiPicgKworICAgICAgICAgICAgJzx4c2w6aW1wb3J0IGhyZWY9Inho
ci1kb2MtaW1wb3J0ZWQueHNsIiAvPicgKworICAgICAgICAgICAgJzx4c2w6dGVtcGxhdGUgbWF0
Y2g9Ii9yb290Ij4nICsKKyAgICAgICAgICAgICcgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9
IndvcmtzIiAvPicgKworICAgICAgICAgICAgJzwveHNsOnRlbXBsYXRlPicgKworICAgICAgICAg
ICAgJzwveHNsOnN0eWxlc2hlZXQ+JzsKKworICAgICAgICB2YXIgcGFyc2VyID0gbmV3IERPTVBh
cnNlcigpOworICAgICAgICB2YXIgeHNsdERvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoeHNs
dFN0ciwgImFwcGxpY2F0aW9uL3htbCIpOworICAgIF1dPjwvc2NyaXB0PgorPC9oZWFkPgorPGJv
ZHk+CitzdWJmcmFtZSAxCis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3hzbC9yZXNvdXJjZXMvdHJhbnNmb3JtLWZyYW1lZC1zdWJmcmFtZTIueGh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL3RyYW5zZm9y
bS1mcmFtZWQtc3ViZnJhbWUyLnhodG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy94c2wvcmVzb3VyY2VzL3RyYW5zZm9ybS1mcmFtZWQtc3ViZnJhbWUyLnhodG1sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5n
PSJ1dGYtOCI/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjEv
L0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwxMS5kdGQiPgorPGh0
bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiI+Cis8
aGVhZD4KKyAgICA8dGl0bGU+eHNsIGltcG9ydCB0ZXN0PC90aXRsZT4KKzwvaGVhZD4KKzxib2R5
Pgorc3ViZnJhbWUgMgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy94c2wvcmVzb3VyY2VzL3hoci1kb2MtY3Jvc3Mtb3JpZ2luLnhzbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMveGhyLWRvYy1jcm9zcy1vcmln
aW4ueHNsCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvcmVzb3Vy
Y2VzL3hoci1kb2MtY3Jvc3Mtb3JpZ2luLnhzbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMiBA
QAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzx4c2w6c3R5bGVzaGVl
dCB2ZXJzaW9uPSIxLjAiCisgIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wv
VHJhbnNmb3JtIgorICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+CisKKzx4
c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC94c2wvcmVzb3VyY2VzL3hoci1k
b2MtaW1wb3J0ZWQueHNsIiAvPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIvcm9vdCI+CisgICAg
PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9IndvcmtzIiAvPgorPC94c2w6dGVtcGxhdGU+CisKKzwv
eHNsOnN0eWxlc2hlZXQ+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNvdXJj
ZXMveGhyLWRvYy1pbXBvcnRlZC54c2wKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy94c2wvcmVzb3VyY2VzL3hoci1kb2MtaW1wb3J0ZWQueHNsCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL3hoci1kb2MtaW1wb3J0ZWQueHNs
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29k
aW5nPSJ1dGYtOCI/PgorPHhzbDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCIKKyAgeG1sbnM6eHNs
PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisgIHhtbG5zPSJodHRwOi8v
d3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iL3Jvb3QiPgor
ICAgIDxkaXYgY2xhc3M9ImRlZmF1bHQiPkZBSUw6IEluY29ycmVjdCB0cmFuc2Zvcm1hdGlvbi48
L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9IndvcmtzIj4KKyAg
ICA8ZGl2IGNsYXNzPSJvdmVycmlkZGVuIj5TVUNDRVNTPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4K
KworPC94c2w6c3R5bGVzaGVldD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3Jl
c291cmNlcy94aHItZG9jLnhtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3hzbC9yZXNvdXJjZXMveGhyLWRvYy54bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMveGhyLWRvYy54bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzw/eG1sLXN0
eWxlc2hlZXQgdHlwZT0idGV4dC94c2wiIGhyZWY9Inhoci1kb2MueHNsIj8+Cis8cm9vdC8+Cklu
ZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMveGhyLWRvYy54c2wKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL3hoci1kb2Mu
eHNsCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvcmVzb3VyY2Vz
L3hoci1kb2MueHNsCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACis8P3htbCB2ZXJzaW9u
PSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPHhzbDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCIK
KyAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisgIHht
bG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKworPHhzbDppbXBvcnQgaHJlZj0i
eGhyLWRvYy1pbXBvcnRlZC54c2wiIC8+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii9yb290Ij4K
KyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0id29ya3MiIC8+Cis8L3hzbDp0ZW1wbGF0ZT4K
KworPC94c2w6c3R5bGVzaGVldD4K
</data>
<flag name="review"
          id="42998"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58970</attachid>
            <date>2010-06-17 01:19:34 -0700</date>
            <delta_ts>2010-06-22 04:42:17 -0700</delta_ts>
            <desc>New proposed patch</desc>
            <filename>bug10313_0617.patch</filename>
            <type>text/plain</type>
            <size>46218</size>
            <attacher name="Andreas Wictor">andreas.wictor</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTE3NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzcgQEAKKzIwMTAtMDYtMTYgIEFuZHJlYXMgV2ljdG9yICA8YW5kcmVhcy53aWN0
b3JAeGNlcmlvbi5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgeHNsOmltcG9ydCBhbmQgZG9jdW1lbnQoKSBkb24ndCB3b3JrIGluIHN0eWxlc2hl
ZXRzIGxvYWRlZCB2aWEgWE1MSHR0cFJlcXVlc3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzEzCisKKyAgICAgICAgSW50cm9kdWNlZCB0aGUgY29u
Y2VwdCBvZiBhICJvcmlnaW4gZG9jdW1lbnQiIHJlZmVyZW5jZSBvbiBmcmFtZWxlc3MKKyAgICAg
ICAgZG9jdW1lbnRzIGNyZWF0ZWQgYnkgWE1MSHR0cFJlcXVlc3QsIGRvY3VtZW50LmltcGxlbWVu
dGF0aW9uLmNyZWF0ZURvY3VtZW50LAorICAgICAgICBET01QYXJzZXIucGFyc2VGcm9tU3RyaW5n
IGFuZCBYU0xUUHJvY2Vzc29yLnRyYW5zZm9ybVRvRG9jdW1lbnQuCisgICAgICAgIFRoaXMgbWFr
ZXMgaXQgcG9zc2libGUgZm9yIGZyYW1lbGVzcyBkb2N1bWVudHMgdG8gYWNjZXNzIHN1YnJlc291
cmNlcy4KKworICAgICAgICBUZXN0czogZmFzdC94c2wvdHJhbnNmb3JtLWRvY2ltcGwtZG9jLnho
dG1sCisgICAgICAgICAgICAgICBmYXN0L3hzbC90cmFuc2Zvcm0tZG9tcGFyc2VyLWRvYy54aHRt
bAorICAgICAgICAgICAgICAgZmFzdC94c2wvdHJhbnNmb3JtLXRyYW5zZm9ybWVkLWRvYy54aHRt
bAorICAgICAgICAgICAgICAgaHR0cC90ZXN0cy94c2wvdHJhbnNmb3JtLWZyYW1lZC1kb2MueGh0
bWwKKyAgICAgICAgICAgICAgIGh0dHAvdGVzdHMveHNsL3RyYW5zZm9ybS14aHItZG9jLWNyb3Nz
LW9yaWdpbi54aHRtbAorICAgICAgICAgICAgICAgaHR0cC90ZXN0cy94c2wvdHJhbnNmb3JtLXho
ci1kb2MtZnJvbS1hbGxvd2VkLWNyb3NzLW9yaWdpbi54aHRtbAorCisgICAgICAgICogYmluZGlu
Z3MvanMvSlNYU0xUUHJvY2Vzc29yQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTWFNM
VFByb2Nlc3NvckNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1hTTFRQcm9jZXNzb3IpOgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFhTTFRQcm9jZXNzb3JDdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VjhYU0xUUHJvY2Vzc29yOjpjb25zdHJ1Y3RvckNhbGxiYWNrKToKKyAgICAg
ICAgKiBkb20vRE9NSW1wbGVtZW50YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NSW1w
bGVtZW50YXRpb246OmNyZWF0ZURvY3VtZW50KToKKyAgICAgICAgIC0gUnVuIHNldE9yaWdpbkRv
a3VtZW50IG9uIHRoZSByZXN1bHRpbmcgZG9jdW1lbnQuCisgICAgICAgICogZG9tL0RPTUltcGxl
bWVudGF0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpET01JbXBsZW1lbnRhdGlvbjo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUltcGxlbWVudGF0aW9uOjpET01JbXBsZW1lbnRhdGlv
bik6CisgICAgICAgICogZG9tL0RPTUltcGxlbWVudGF0aW9uLmlkbDoKKyAgICAgICAgKiBkb20v
RG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmltcGxlbWVudGF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzZXRPcmlnaW5Eb2N1bWVudCk6CisgICAg
ICAgICAtIFRoaXMgZnVuY3Rpb24gc3RvcmVzIGEgcmVmZXJlbmNlIHRvIHRoZSBkb2N1bWVudCB3
aGVyZSB0aGlzIGRvY3VtZW50CisgICAgICAgICAgIG9yaWdpbmF0ZWQgZnJvbS4gVGhpcyBpcyB1
c2VkIGZvciBmcmFtZWxlc3MgZG9jdW1lbnRzLCBzbyB0aGF0IHdlIGNhbgorICAgICAgICAgICBm
aW5kIGEgZnJhbWUgd2hlbiB3ZSBhcmUgbG9hZGluZyBzdWJyZXNvdXJjZXMuIEFsc28sIGJlY2F1
c2UgZnJhbWVsZXNzCisgICAgICAgICAgIGRvY3VtZW50cyBkb24ndCBnZXQgYSBTZWN1cml0eU9y
aWdpbiBhbmQgYSBjb29raWVVUkwgd2hlbiBjb25zdHJ1Y3RlZCwKKyAgICAgICAgICAgd2UgbmVl
ZCB0byBzZXQgdGhlc2UgaGVyZSB0byBiZSBhYmxlIHRvIGxvYWQgc3VicmVzb3VyY2VzLgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmZpbmRGcmFtZSk6CisgICAgICAgICAtIFJldHVybnMg
YSBmcmFtZSBmcm9tIGVpdGhlciB0aGUgZG9jdW1lbnQgb3IgdGhlIGRvY3VtZW50IGl0IG9yaWdp
bmF0ZWQgZnJvbS4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjphcHBseVhTTFRyYW5zZm9y
bSk6CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dDo6b3JpZ2luRG9jdW1lbnQpOgorICAgICAgICAqIGxvYWRlci9Eb2N1bWVudFRocmVhZGFibGVM
b2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjps
b2FkUmVxdWVzdCk6CisgICAgICAgICAtIFVzZSB0aGUgbmV3IGZpbmRGcmFtZSBtZXRob2Qgb24g
ZG9jdW1lbnRzLgorICAgICAgICAqIHhtbC9ET01QYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RE9NUGFyc2VyOjpwYXJzZUZyb21TdHJpbmcpOgorICAgICAgICAgLSBSdW4gc2V0T3JpZ2lu
RG9rdW1lbnQgb24gdGhlIHJlc3VsdGluZyBkb2N1bWVudC4KKyAgICAgICAgKiB4bWwvRE9NUGFy
c2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpET01QYXJzZXI6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpET01QYXJzZXI6OkRPTVBhcnNlcik6CisgICAgICAgICogeG1sL0RPTVBhcnNlci5p
ZGw6CisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlhNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZVhNTCk6CisgICAgICAgICAtIFJ1biBzZXRPcmlnaW5E
b2t1bWVudCBvbiB0aGUgcmVzdWx0aW5nIGRvY3VtZW50LgorICAgICAgICAqIHhtbC9YU0xJbXBv
cnRSdWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhTTEltcG9ydFJ1bGU6OmxvYWRTaGVldCk6
CisgICAgICAgICAtIExvYWQgaW1wb3J0ZWQgZG9jdW1lbnRzIHN5bmNocm9ub3VzbHkgaWYgaW52
b2tlZCBieSBqYXZhc2NyaXB0CisgICAgICAgICAgIGFuZCB1c2UgYmFzZSB1cmwgZnJvbSB0aGUg
ZG9jdW1lbnQgdGhlIHJvb3Qgc3R5bGVzaGVldCBvcmlnaW5hdGVkCisgICAgICAgICAgIGZyb20g
d2hlbiBwYXJlbnQgc3R5bGVzaGVldCBkb2Vzbid0IGhhdmUgYSBmaW5hbCB1cmwuCisgICAgICAg
IChXZWJDb3JlOjpYU0xJbXBvcnRSdWxlOjpmaW5pc2hMb2FkaW5nU2hlZXRBc3luY2hyb25vdXNs
eSk6CisgICAgICAgIChXZWJDb3JlOjpYU0xJbXBvcnRSdWxlOjpmaW5pc2hMb2FkaW5nU2hlZXRT
eW5jaHJvbm91c2x5KToKKyAgICAgICAgKiB4bWwvWFNMSW1wb3J0UnVsZS5oOgorICAgICAgICAq
IHhtbC9YU0xUUHJvY2Vzc29yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhTTFRQcm9jZXNzb3I6
OmNyZWF0ZURvY3VtZW50RnJvbVNvdXJjZSk6CisgICAgICAgICAtIFJ1biBzZXRPcmlnaW5Eb2t1
bWVudCBvbiB0aGUgcmVzdWx0aW5nIGRvY3VtZW50LgorICAgICAgICAqIHhtbC9YU0xUUHJvY2Vz
c29yLmg6CisgICAgICAgIChXZWJDb3JlOjpYU0xUUHJvY2Vzc29yOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6WFNMVFByb2Nlc3Nvcjo6WFNMVFByb2Nlc3Nvcik6CisgICAgICAgICogeG1s
L1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRvY0xvYWRlckZ1
bmMpOgorICAgICAgICAgLSBVc2UgdGhlIG5ldyBmaW5kRnJhbWUgbWV0aG9kIG9uIGRvY3VtZW50
cy4KKwogMjAxMC0wNi0xNCAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgog
CiAgICAgICAgIE5vIHJldmlldy4gR1RLIGJ1aWxkIGZpeC4KSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNYU0xUUHJvY2Vzc29yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTWFNMVFByb2Nlc3NvckN1c3RvbS5jcHAJKHJldmlzaW9uIDYxMTc3KQorKysg
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hTTFRQcm9jZXNzb3JDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNs
dWRlICJYU0xUUHJvY2Vzc29yLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVk
ZSA8cnVudGltZS9FcnJvci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkBAIC0xMTksNyAr
MTIwLDEyIEBAIEpTVmFsdWUgSlNYU0xUUHJvY2Vzc29yOjpyZW1vdmVQYXJhbWV0ZXIKIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNYU0xUUHJvY2Vzc29yQ29uc3RydWN0b3I6OmNvbnN0
cnVjdEpTWFNMVFByb2Nlc3NvcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNYU0xUUHJvY2Vz
c29yQ29uc3RydWN0b3IqIGpzQ29uc3RydWN0b3IgPSBzdGF0aWNfY2FzdDxKU1hTTFRQcm9jZXNz
b3JDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKENSRUFURV9ET01fT0JKRUNUX1dSQVBQRVIoZXhlYywganNDb25zdHJ1Y3Rvci0+Z2xvYmFs
T2JqZWN0KCksIFhTTFRQcm9jZXNzb3IsIFhTTFRQcm9jZXNzb3I6OmNyZWF0ZSgpLmdldCgpKSk7
CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IGpzQ29uc3RydWN0b3ItPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlUmVmZXJlbmNlRXJyb3IoZXhlYywgIlhTTFRQcm9j
ZXNzb3IgY29uc3RydWN0b3IgYXNzb2NpYXRlZCBkb2N1bWVudCBpcyB1bmF2YWlsYWJsZSIpKTsK
KworICAgIFJlZlB0cjxYU0xUUHJvY2Vzc29yPiBwcm9jZXNzb3IgPSBYU0xUUHJvY2Vzc29yOjpj
cmVhdGUoY29udGV4dCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShDUkVBVEVfRE9NX09C
SkVDVF9XUkFQUEVSKGV4ZWMsIGpzQ29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLCBYU0xUUHJv
Y2Vzc29yLCBwcm9jZXNzb3IuZ2V0KCkpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYU0xUUHJvY2Vzc29yQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhTTFRQcm9jZXNz
b3JDdXN0b20uY3BwCShyZXZpc2lvbiA2MTE3NykKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4WFNMVFByb2Nlc3NvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4WFNMVFBy
b2Nlc3Nvcjo6Y29uc3RydWN0b3JDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQog
ewogICAgIElOQ19TVEFUUygiRE9NLlhTTFRQcm9jZXNzb3IuQ29uc3RydWN0b3IiKTsKLSAgICBy
ZXR1cm4gVjhQcm94eTo6Y29uc3RydWN0RE9NT2JqZWN0PFhTTFRQcm9jZXNzb3I+KGFyZ3MsICZp
bmZvKTsKKyAgICByZXR1cm4gVjhQcm94eTo6Y29uc3RydWN0RE9NT2JqZWN0V2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ8WFNMVFByb2Nlc3Nvcj4oYXJncywgJmluZm8pOwogfQogCiAKSW5kZXg6
IFdlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAJKHJldmlzaW9uIDYxMTc3KQorKysgV2ViQ29yZS9k
b20vRE9NSW1wbGVtZW50YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTYsNiArMjU2LDkg
QEAgUGFzc1JlZlB0cjxEb2N1bWVudD4gRE9NSW1wbGVtZW50YXRpb246OgogICAgICAgICByZXR1
cm4gMDsKICAgICB9CiAKKyAgICBpZiAobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0ICYmIG1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC0+aXNEb2N1bWVudCgpKQorICAgICAgICBkb2MtPnNldE9yaWdp
bkRvY3VtZW50KHN0YXRpY19jYXN0PERvY3VtZW50Kj4obV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
LmdldCgpKSk7CisKICAgICBpZiAoZG9jdHlwZSkKICAgICAgICAgZG9jLT5hZGRDaGlsZChkb2N0
eXBlKTsKICAgICBpZiAoZG9jdW1lbnRFbGVtZW50KQpJbmRleDogV2ViQ29yZS9kb20vRE9NSW1w
bGVtZW50YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRhdGlv
bi5oCShyZXZpc2lvbiA2MTE3NykKKysrIFdlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAKICNpZm5kZWYgRE9NSW1wbGVtZW50YXRp
b25faAogI2RlZmluZSBET01JbXBsZW1lbnRhdGlvbl9oCiAKKyNpbmNsdWRlIDxEb2N1bWVudC5o
PgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KIApAQCAtNDAsMTIgKzQxLDE1IEBAIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKIGNs
YXNzIERPTUltcGxlbWVudGF0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8RE9NSW1wbGVtZW50YXRp
b24+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxET01JbXBsZW1lbnRhdGlvbj4g
Y3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IERPTUltcGxlbWVudGF0aW9uKTsgfQorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPERPTUltcGxlbWVudGF0aW9uPiBjcmVhdGUoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
RE9NSW1wbGVtZW50YXRpb24oY29udGV4dCkpOworICAgIH0KIAogICAgIC8vIERPTSBtZXRob2Rz
ICYgYXR0cmlidXRlcyBmb3IgRE9NSW1wbGVtZW50YXRpb24KICAgICBzdGF0aWMgYm9vbCBoYXNG
ZWF0dXJlKGNvbnN0IFN0cmluZyYgZmVhdHVyZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKTsKICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxEb2N1bWVudFR5cGU+IGNyZWF0ZURvY3VtZW50VHlwZShjb25z
dCBTdHJpbmcmIHF1YWxpZmllZE5hbWUsIGNvbnN0IFN0cmluZyYgcHVibGljSWQsIGNvbnN0IFN0
cmluZyAmc3lzdGVtSWQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxE
b2N1bWVudD4gY3JlYXRlRG9jdW1lbnQoY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0
IFN0cmluZyYgcXVhbGlmaWVkTmFtZSwgRG9jdW1lbnRUeXBlKiwgRXhjZXB0aW9uQ29kZSYpOwor
ICAgIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IGNyZWF0ZURvY3VtZW50KGNvbnN0IFN0cmluZyYgbmFt
ZXNwYWNlVVJJLCBjb25zdCBTdHJpbmcmIHF1YWxpZmllZE5hbWUsIERvY3VtZW50VHlwZSosIEV4
Y2VwdGlvbkNvZGUmKTsKIAogICAgIERPTUltcGxlbWVudGF0aW9uKiBnZXRJbnRlcmZhY2UoY29u
c3QgU3RyaW5nJiBmZWF0dXJlKTsKIApAQCAtNjIsNyArNjYsOSBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIGJvb2wgaXNUZXh0TUlNRVR5cGUoY29uc3QgU3RyaW5nJiBNSU1FVHlwZSk7CiAKIHByaXZh
dGU6Ci0gICAgRE9NSW1wbGVtZW50YXRpb24oKSB7IH0KKyAgICBET01JbXBsZW1lbnRhdGlvbihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KSA6IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dChjb250ZXh0KSB7IH0KKworICAgIFJlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0PiBtX3Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiB9OwogCiB9IC8vbmFtZXNwYWNlCkluZGV4OiBXZWJDb3Jl
L2RvbS9ET01JbXBsZW1lbnRhdGlvbi5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRE9N
SW1wbGVtZW50YXRpb24uaWRsCShyZXZpc2lvbiA2MTE3NykKKysrIFdlYkNvcmUvZG9tL0RPTUlt
cGxlbWVudGF0aW9uLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjAsNyArMjAsNyBAQAogCiBtb2R1
bGUgY29yZSB7CiAKLSAgICBpbnRlcmZhY2UgRE9NSW1wbGVtZW50YXRpb24geworICAgIGludGVy
ZmFjZSBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gRE9NSW1wbGVtZW50YXRpb24g
ewogCiAgICAgICAgIC8vIERPTSBMZXZlbCAxCiAKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDYx
MTc3KQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MTAs
NyArNjEwLDcgQEAgdm9pZCBEb2N1bWVudDo6c2V0RG9jVHlwZShQYXNzUmVmUHRyPERvYwogRE9N
SW1wbGVtZW50YXRpb24qIERvY3VtZW50OjppbXBsZW1lbnRhdGlvbigpIGNvbnN0CiB7CiAgICAg
aWYgKCFtX2ltcGxlbWVudGF0aW9uKQotICAgICAgICBtX2ltcGxlbWVudGF0aW9uID0gRE9NSW1w
bGVtZW50YXRpb246OmNyZWF0ZSgpOworICAgICAgICBtX2ltcGxlbWVudGF0aW9uID0gRE9NSW1w
bGVtZW50YXRpb246OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwogICAgIHJldHVy
biBtX2ltcGxlbWVudGF0aW9uLmdldCgpOwogfQogCkBAIC0xMjczLDYgKzEyNzMsMzkgQEAgU2V0
dGluZ3MqIERvY3VtZW50OjpzZXR0aW5ncygpIGNvbnN0CiAgICAgcmV0dXJuIG1fZnJhbWUgPyBt
X2ZyYW1lLT5zZXR0aW5ncygpIDogMDsKIH0KIAordm9pZCBEb2N1bWVudDo6c2V0T3JpZ2luRG9j
dW1lbnQoRG9jdW1lbnQqIG9yaWdpbkRvY3VtZW50KQoreworICAgIC8vIFRoaXMgZnVuY3Rpb24g
c3RvcmVzIGEgcmVmZXJlbmNlIHRvIHRoZSBkb2N1bWVudCB3aGVyZSB0aGlzIGRvY3VtZW50Cisg
ICAgLy8gb3JpZ2luYXRlZCBmcm9tLiBUaGlzIGlzIHVzZWQgZm9yIGZyYW1lbGVzcyBkb2N1bWVu
dHMsIHNvIHRoYXQgd2UgY2FuCisgICAgLy8gZmluZCBhIGZyYW1lIHdoZW4gd2UgYXJlIGxvYWRp
bmcgc3VicmVzb3VyY2VzLiBBbHNvLCBiZWNhdXNlIGZyYW1lbGVzcworICAgIC8vIGRvY3VtZW50
cyBkb24ndCBnZXQgYSBTZWN1cml0eU9yaWdpbiBhbmQgYSBjb29raWVVUkwgd2hlbiBjb25zdHJ1
Y3RlZCwKKyAgICAvLyB3ZSBuZWVkIHRvIHNldCB0aGVzZSBoZXJlIHRvIGJlIGFibGUgdG8gbG9h
ZCBzdWJyZXNvdXJjZXMuCisKKyAgICBBU1NFUlQob3JpZ2luRG9jdW1lbnQpOworICAgIG1fb3Jp
Z2luRG9jdW1lbnQgPSBvcmlnaW5Eb2N1bWVudDsKKworICAgIGlmICghbV91cmwuaXNFbXB0eSgp
KSB7CisgICAgICAgIG1fY29va2llVVJMID0gbV91cmw7CisgICAgICAgIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ6OnNldFNlY3VyaXR5T3JpZ2luKFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUobV91cmwp
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2Nvb2tpZVVSTCA9IG9yaWdpbkRvY3VtZW50LT5j
b29raWVVUkwoKTsKKyAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6c2V0U2VjdXJpdHlP
cmlnaW4ob3JpZ2luRG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCkpOworICAgIH0KK30KKworRnJh
bWUqIERvY3VtZW50OjpmaW5kRnJhbWUoKSBjb25zdAoreworICAgIGNvbnN0IERvY3VtZW50KiBk
b2N1bWVudCA9IHRoaXM7CisKKyAgICB3aGlsZSAoZG9jdW1lbnQpIHsKKyAgICAgICAgaWYgKGRv
Y3VtZW50LT5mcmFtZSgpKQorICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50LT5mcmFtZSgpOwor
ICAgICAgICBkb2N1bWVudCA9IGRvY3VtZW50LT5vcmlnaW5Eb2N1bWVudCgpOworICAgIH0KKwor
ICAgIHJldHVybiAwOworfQorCiBQYXNzUmVmUHRyPFJhbmdlPiBEb2N1bWVudDo6Y3JlYXRlUmFu
Z2UoKQogewogICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKHRoaXMpOwpAQCAtNDE1Nyw3ICs0MTkw
LDcgQEAgdm9pZCBEb2N1bWVudDo6c2V0TWFya2Vyc0FjdGl2ZShOb2RlKiBubwogCiB2b2lkIERv
Y3VtZW50OjphcHBseVhTTFRyYW5zZm9ybShQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qIHBpKQogewot
ICAgIFJlZlB0cjxYU0xUUHJvY2Vzc29yPiBwcm9jZXNzb3IgPSBYU0xUUHJvY2Vzc29yOjpjcmVh
dGUoKTsKKyAgICBSZWZQdHI8WFNMVFByb2Nlc3Nvcj4gcHJvY2Vzc29yID0gWFNMVFByb2Nlc3Nv
cjo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CiAgICAgcHJvY2Vzc29yLT5zZXRY
U0xTdHlsZVNoZWV0KHN0YXRpY19jYXN0PFhTTFN0eWxlU2hlZXQqPihwaS0+c2hlZXQoKSkpOwog
ICAgIFN0cmluZyByZXN1bHRNSU1FVHlwZTsKICAgICBTdHJpbmcgbmV3U291cmNlOwpJbmRleDog
V2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVu
dC5oCShyZXZpc2lvbiA2MTE3NykKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2NCw2ICs0NjQsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgSW5zcGVjdG9y
Q29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlcigpIGNvbnN0OyAvLyBjYW4gYmUgTlVMTAog
I2VuZGlmCiAKKyAgICBEb2N1bWVudCogb3JpZ2luRG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBt
X29yaWdpbkRvY3VtZW50LmdldCgpOyB9CisgICAgdm9pZCBzZXRPcmlnaW5Eb2N1bWVudChEb2N1
bWVudCopOworICAgIEZyYW1lKiBmaW5kRnJhbWUoKSBjb25zdDsKKwogICAgIFBhc3NSZWZQdHI8
UmFuZ2U+IGNyZWF0ZVJhbmdlKCk7CiAKICAgICBQYXNzUmVmUHRyPE5vZGVJdGVyYXRvcj4gY3Jl
YXRlTm9kZUl0ZXJhdG9yKE5vZGUqIHJvb3QsIHVuc2lnbmVkIHdoYXRUb1Nob3csCkBAIC0xMDM3
LDYgKzEwNDEsNyBAQCBwcml2YXRlOgogICAgIEZyYW1lKiBtX2ZyYW1lOwogICAgIE93blB0cjxE
b2NMb2FkZXI+IG1fZG9jTG9hZGVyOwogICAgIE93blB0cjxEb2N1bWVudFBhcnNlcj4gbV9wYXJz
ZXI7CisgICAgUmVmUHRyPERvY3VtZW50PiBtX29yaWdpbkRvY3VtZW50OwogICAgIGJvb2wgbV93
ZWxsRm9ybWVkOwogCiAgICAgLy8gRG9jdW1lbnQgVVJMcy4KSW5kZXg6IFdlYkNvcmUvbG9hZGVy
L0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2Fk
ZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAkocmV2aXNpb24gNjExNzcpCisrKyBXZWJD
b3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMjEsOCArMzIxLDggQEAgdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXF1
ZQogICAgIFJlc291cmNlRXJyb3IgZXJyb3I7CiAgICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25z
ZTsKICAgICB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVu
c2lnbmVkIGxvbmc+OjptYXgoKTsKLSAgICBpZiAobV9kb2N1bWVudC0+ZnJhbWUoKSkKLSAgICAg
ICAgaWRlbnRpZmllciA9IG1fZG9jdW1lbnQtPmZyYW1lKCktPmxvYWRlcigpLT5sb2FkUmVzb3Vy
Y2VTeW5jaHJvbm91c2x5KHJlcXVlc3QsIHN0b3JlZENyZWRlbnRpYWxzLCBlcnJvciwgcmVzcG9u
c2UsIGRhdGEpOworICAgIGlmIChGcmFtZSogZnJhbWUgPSBtX2RvY3VtZW50LT5maW5kRnJhbWUo
KSkKKyAgICAgICAgaWRlbnRpZmllciA9IGZyYW1lLT5sb2FkZXIoKS0+bG9hZFJlc291cmNlU3lu
Y2hyb25vdXNseShyZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNlLCBk
YXRhKTsKIAogICAgIC8vIE5vIGV4Y2VwdGlvbiBmb3IgZmlsZTovLy8gcmVzb3VyY2VzLCBzZWUg
PHJkYXI6Ly9wcm9ibGVtLzQ5NjIyOTg+LgogICAgIC8vIEFsc28sIGlmIHdlIGhhdmUgYW4gSFRU
UCByZXNwb25zZSwgdGhlbiBpdCB3YXNuJ3QgYSBuZXR3b3JrIGVycm9yIGluIGZhY3QuCkluZGV4
OiBXZWJDb3JlL3htbC9ET01QYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1sL0RP
TVBhcnNlci5jcHAJKHJldmlzaW9uIDYxMTc3KQorKysgV2ViQ29yZS94bWwvRE9NUGFyc2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsOSBAQCBQYXNzUmVmUHRyPERvY3VtZW50PiBE
T01QYXJzZXI6OnBhcnNlRnJvCiAKICAgICBSZWZQdHI8RG9jdW1lbnQ+IGRvYyA9IERPTUltcGxl
bWVudGF0aW9uOjpjcmVhdGVEb2N1bWVudChjb250ZW50VHlwZSwgMCwgZmFsc2UpOwogCisgICAg
aWYgKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCAmJiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQt
PmlzRG9jdW1lbnQoKSkKKyAgICAgICAgZG9jLT5zZXRPcmlnaW5Eb2N1bWVudChzdGF0aWNfY2Fz
dDxEb2N1bWVudCo+KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC5nZXQoKSkpOworCiAgICAgZG9j
LT5vcGVuKCk7CiAgICAgZG9jLT53cml0ZShzdHIpOwogICAgIGRvYy0+ZmluaXNoUGFyc2luZygp
OwpJbmRleDogV2ViQ29yZS94bWwvRE9NUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94
bWwvRE9NUGFyc2VyLmgJKHJldmlzaW9uIDYxMTc3KQorKysgV2ViQ29yZS94bWwvRE9NUGFyc2Vy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEyICsyOCwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgCiAgICAgY2xhc3MgRE9NUGFyc2VyIDogcHVibGljIFJlZkNvdW50ZWQ8RE9NUGFyc2Vy
PiB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxET01QYXJzZXI+IGNy
ZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBET01QYXJzZXIpOyB9Ci0gICAgICAgIAorICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxET01QYXJzZXI+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IERPTVBhcnNlcihjb250ZXh0KSk7CisgICAgICAgIH0KKwogICAgICAgICBQYXNzUmVmUHRy
PERvY3VtZW50PiBwYXJzZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHIsIGNvbnN0IFN0cmlu
ZyYgY29udGVudFR5cGUpOwogICAgICAgICAKICAgICBwcml2YXRlOgotICAgICAgICBET01QYXJz
ZXIoKSB7IH0gICAgICAgIAorICAgICAgICBET01QYXJzZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCkgOiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoY29udGV4dCkgeyB9CisKKyAg
ICAgICAgUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IG1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDsKICAgICB9OwogCiB9CkluZGV4OiBXZWJDb3JlL3htbC9ET01QYXJzZXIuaWRsCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUveG1sL0RPTVBhcnNlci5pZGwJKHJldmlzaW9uIDYxMTc3KQorKysg
V2ViQ29yZS94bWwvRE9NUGFyc2VyLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMTgsNyArMTgsMTAg
QEAKICAqLwogCiBtb2R1bGUgeHBhdGggewotICAgIGludGVyZmFjZSBbQ2FuQmVDb25zdHJ1Y3Rl
ZF0gRE9NUGFyc2VyIHsKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDYW5CZUNvbnN0cnVjdGVk
LAorICAgICAgICBDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0CisgICAgXSBET01QYXJz
ZXIgewogICAgICAgICBEb2N1bWVudCBwYXJzZUZyb21TdHJpbmcoaW4gRE9NU3RyaW5nIHN0ciwg
aW4gRE9NU3RyaW5nIGNvbnRlbnRUeXBlKTsKICAgICB9OwogfQpJbmRleDogV2ViQ29yZS94bWwv
WE1MSHR0cFJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1
ZXN0LmNwcAkocmV2aXNpb24gNjExNzcpCisrKyBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI0Myw2ICsyNDMsNyBAQCBEb2N1bWVudCogWE1MSHR0cFJl
cXVlc3Q6OnJlc3BvbnNlWE1MKCkgCiAgICAgICAgICAgICBtX3Jlc3BvbnNlWE1MID0gRG9jdW1l
bnQ6OmNyZWF0ZSgwKTsKICAgICAgICAgICAgIG1fcmVzcG9uc2VYTUwtPm9wZW4oKTsKICAgICAg
ICAgICAgIG1fcmVzcG9uc2VYTUwtPnNldFVSTChtX3VybCk7CisgICAgICAgICAgICBtX3Jlc3Bv
bnNlWE1MLT5zZXRPcmlnaW5Eb2N1bWVudChkb2N1bWVudCgpKTsKICAgICAgICAgICAgIC8vIEZJ
WE1FOiBTZXQgTGFzdC1Nb2RpZmllZC4KICAgICAgICAgICAgIG1fcmVzcG9uc2VYTUwtPndyaXRl
KFN0cmluZyhtX3Jlc3BvbnNlVGV4dCkpOwogICAgICAgICAgICAgbV9yZXNwb25zZVhNTC0+Zmlu
aXNoUGFyc2luZygpOwpJbmRleDogV2ViQ29yZS94bWwvWFNMSW1wb3J0UnVsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS94bWwvWFNMSW1wb3J0UnVsZS5jcHAJKHJldmlzaW9uIDYxMTc3KQor
KysgV2ViQ29yZS94bWwvWFNMSW1wb3J0UnVsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYg
KzI2LDEwIEBACiAKICNpbmNsdWRlICJDYWNoZWRYU0xTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAi
RG9jTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5j
bHVkZSAiUmVzb3VyY2VFcnJvci5oIgorI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIK
ICNpbmNsdWRlICJYU0xTdHlsZVNoZWV0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTc4
LDE4ICs4MiwyOSBAQCBib29sIFhTTEltcG9ydFJ1bGU6OmlzTG9hZGluZygpCiB2b2lkIFhTTElt
cG9ydFJ1bGU6OmxvYWRTaGVldCgpCiB7CiAgICAgRG9jTG9hZGVyKiBkb2NMb2FkZXIgPSAwOwor
ICAgIFhTTFN0eWxlU2hlZXQqIHJvb3RYU0wgPSAwOwogICAgIFN0eWxlQmFzZSogcm9vdCA9IHRo
aXM7CiAgICAgU3R5bGVCYXNlKiBwYXJlbnQ7CiAgICAgd2hpbGUgKChwYXJlbnQgPSByb290LT5w
YXJlbnQoKSkpCiAgICAgICAgIHJvb3QgPSBwYXJlbnQ7Ci0gICAgaWYgKHJvb3QtPmlzWFNMU3R5
bGVTaGVldCgpKQotICAgICAgICBkb2NMb2FkZXIgPSBzdGF0aWNfY2FzdDxYU0xTdHlsZVNoZWV0
Kj4ocm9vdCktPmRvY0xvYWRlcigpOworICAgIGlmIChyb290LT5pc1hTTFN0eWxlU2hlZXQoKSkg
eworICAgICAgICByb290WFNMID0gc3RhdGljX2Nhc3Q8WFNMU3R5bGVTaGVldCo+KHJvb3QpOwor
ICAgICAgICBkb2NMb2FkZXIgPSByb290WFNMLT5kb2NMb2FkZXIoKTsKKyAgICB9CiAgICAgCiAg
ICAgU3RyaW5nIGFic0hyZWYgPSBtX3N0ckhyZWY7CisgICAgTm9kZSogb3duZXJOb2RlID0gcm9v
dFhTTC0+b3duZXJOb2RlKCk7CiAgICAgWFNMU3R5bGVTaGVldCogcGFyZW50U2hlZXQgPSBwYXJl
bnRTdHlsZVNoZWV0KCk7CiAgICAgaWYgKCFwYXJlbnRTaGVldC0+ZmluYWxVUkwoKS5pc051bGwo
KSkKICAgICAgICAgLy8gdXNlIHBhcmVudCBzdHlsZWhlZXQncyBVUkwgYXMgdGhlIGJhc2UgVVJM
CiAgICAgICAgIGFic0hyZWYgPSBLVVJMKHBhcmVudFNoZWV0LT5maW5hbFVSTCgpLCBtX3N0ckhy
ZWYpLnN0cmluZygpOworICAgIGVsc2UgaWYgKG93bmVyTm9kZSkgeworICAgICAgICAvLyBXaGVu
IHBhcmVudCBzdHlsZXNoZWV0IGRvZXNuJ3QgaGF2ZSBhIGZpbmFsIHVybCwgdXNlIGJhc2UgdXJs
IGZyb20gdGhlCisgICAgICAgIC8vIGRvY3VtZW50IHRoZSByb290IHN0eWxlc2hlZXQgb3JpZ2lu
YXRlZCBmcm9tLiBUaGlzIGNhbiBoYXBwZW4gd2hlbiB0aGUKKyAgICAgICAgLy8gc3R5bGVzaGVl
dCBpcyBjcmVhdGVkIHdpdGggRE9NUGFyc2VyLnBhcnNlRnJvbVN0cmluZygpLCBmb3IgZXhhbXBs
ZS4KKyAgICAgICAgaWYgKERvY3VtZW50KiBvcmlnaW5Eb2N1bWVudCA9IG93bmVyTm9kZS0+ZG9j
dW1lbnQoKS0+b3JpZ2luRG9jdW1lbnQoKSkKKyAgICAgICAgICAgIGFic0hyZWYgPSBLVVJMKG9y
aWdpbkRvY3VtZW50LT5iYXNlVVJMKCksIG1fc3RySHJlZikuc3RyaW5nKCk7CisgICAgfQogICAg
IAogICAgIC8vIENoZWNrIGZvciBhIGN5Y2xlIGluIG91ciBpbXBvcnQgY2hhaW4uICBJZiB3ZSBl
bmNvdW50ZXIgYSBzdHlsZXNoZWV0CiAgICAgLy8gaW4gb3VyIHBhcmVudCBjaGFpbiB3aXRoIHRo
ZSBzYW1lIFVSTCwgdGhlbiBqdXN0IGJhaWwuCkBAIC05NywxMiArMTEyLDIwIEBAIHZvaWQgWFNM
SW1wb3J0UnVsZTo6bG9hZFNoZWV0KCkKICAgICAgICAgaWYgKHBhcmVudC0+aXNYU0xTdHlsZVNo
ZWV0KCkgJiYgYWJzSHJlZiA9PSBzdGF0aWNfY2FzdDxYU0xTdHlsZVNoZWV0Kj4ocGFyZW50KS0+
ZmluYWxVUkwoKS5zdHJpbmcoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCisK
KyAgICBpZiAob3duZXJOb2RlICYmIG93bmVyTm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpQUk9D
RVNTSU5HX0lOU1RSVUNUSU9OX05PREUpCisgICAgICAgIGZpbmlzaExvYWRpbmdTaGVldEFzeW5j
aHJvbm91c2x5KGRvY0xvYWRlciwgYWJzSHJlZik7CisgICAgZWxzZQorICAgICAgICBmaW5pc2hM
b2FkaW5nU2hlZXRTeW5jaHJvbm91c2x5KGRvY0xvYWRlciwgYWJzSHJlZik7Cit9CisKK3ZvaWQg
WFNMSW1wb3J0UnVsZTo6ZmluaXNoTG9hZGluZ1NoZWV0QXN5bmNocm9ub3VzbHkoRG9jTG9hZGVy
KiBkb2NMb2FkZXIsIGNvbnN0IFN0cmluZyYgYWJzSHJlZikKK3sKICAgICBtX2NhY2hlZFNoZWV0
ID0gZG9jTG9hZGVyLT5yZXF1ZXN0WFNMU3R5bGVTaGVldChhYnNIcmVmKTsKLSAgICAKKwogICAg
IGlmIChtX2NhY2hlZFNoZWV0KSB7CiAgICAgICAgIG1fY2FjaGVkU2hlZXQtPmFkZENsaWVudCh0
aGlzKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gSWYgdGhlIGltcG9ydGVkIHNoZWV0IGlzIGlu
IHRoZSBjYWNoZSwgdGhlbiBzZXRYU0xTdHlsZVNoZWV0IGdldHMgY2FsbGVkLAogICAgICAgICAv
LyBhbmQgdGhlIHNoZWV0IGV2ZW4gZ2V0cyBwYXJzZWQgKHZpYSBwYXJzZVN0cmluZykuICBJbiB0
aGlzIGNhc2Ugd2UgaGF2ZQogICAgICAgICAvLyBsb2FkZWQgKGV2ZW4gaWYgb3VyIHN1YnJlc291
cmNlcyBoYXZlbid0KSwgc28gaWYgd2UgaGF2ZSBhIHN0eWxlc2hlZXQgYWZ0ZXIKQEAgLTExMiw2
ICsxMzUsMzkgQEAgdm9pZCBYU0xJbXBvcnRSdWxlOjpsb2FkU2hlZXQoKQogICAgIH0KIH0KIAor
dm9pZCBYU0xJbXBvcnRSdWxlOjpmaW5pc2hMb2FkaW5nU2hlZXRTeW5jaHJvbm91c2x5KERvY0xv
YWRlciogZG9jTG9hZGVyLCBjb25zdCBTdHJpbmcmIGFic0hyZWYpCit7CisgICAgUmVzb3VyY2VF
cnJvciBlcnJvcjsKKyAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOworICAgIFZlY3Rvcjxj
aGFyPiBkYXRhOworCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZG9jTG9hZGVyLT5kb2MoKTsK
KyAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZmluZEZyYW1lKCk7CisKKyAgICBLVVJMIHVy
bChQYXJzZWRVUkxTdHJpbmcsIGFic0hyZWYpOworCisgICAgYm9vbCByZXF1ZXN0QWxsb3dlZCA9
IGZyYW1lICYmIGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHVybCk7Cisg
ICAgaWYgKHJlcXVlc3RBbGxvd2VkKSB7CisgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+bG9hZFJl
c291cmNlU3luY2hyb25vdXNseSh1cmwsIEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsIGVycm9yLCBy
ZXNwb25zZSwgZGF0YSk7CisgICAgICAgIHJlcXVlc3RBbGxvd2VkID0gZG9jdW1lbnQtPnNlY3Vy
aXR5T3JpZ2luKCktPmNhblJlcXVlc3QocmVzcG9uc2UudXJsKCkpOworICAgIH0KKyAgICBpZiAo
IXJlcXVlc3RBbGxvd2VkKSB7CisgICAgICAgIGRhdGEuY2xlYXIoKTsKKyAgICAgICAgZG9jTG9h
ZGVyLT5wcmludEFjY2Vzc0RlbmllZE1lc3NhZ2UodXJsKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChlcnJvci5pc051bGwoKSkgeworICAgICAgICBSZWZQdHI8VGV4dFJlc291
cmNlRGVjb2Rlcj4gZGVjb2RlciA9IFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZSgidGV4dC94
c2wiKTsKKyAgICAgICAgU3RyaW5nIGVuY29kaW5nID0gcmVzcG9uc2UudGV4dEVuY29kaW5nTmFt
ZSgpOworICAgICAgICBpZiAoIWVuY29kaW5nLmlzTnVsbCgpKQorICAgICAgICAgICAgZGVjb2Rl
ci0+c2V0RW5jb2RpbmcoZW5jb2RpbmcsIFRleHRSZXNvdXJjZURlY29kZXI6OkVuY29kaW5nRnJv
bUhUVFBIZWFkZXIpOworCisgICAgICAgIFN0cmluZyBzaGVldChkZWNvZGVyLT5kZWNvZGUoZGF0
YS5kYXRhKCksIGRhdGEuc2l6ZSgpKSk7CisgICAgICAgIHNldFhTTFN0eWxlU2hlZXQoYWJzSHJl
ZiwgcmVzcG9uc2UudXJsKCksIHNoZWV0KTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShYU0xUKQpJbmRleDogV2ViQ29yZS94bWwvWFNMSW1w
b3J0UnVsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1sL1hTTEltcG9ydFJ1bGUuaAkocmV2
aXNpb24gNjExNzcpCisrKyBXZWJDb3JlL3htbC9YU0xJbXBvcnRSdWxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU4LDcgKzU4LDEwIEBAIHByaXZhdGU6CiAKICAgICAvLyBmcm9tIENhY2hlZFJlc291
cmNlQ2xpZW50CiAgICAgdmlydHVhbCB2b2lkIHNldFhTTFN0eWxlU2hlZXQoY29uc3QgU3RyaW5n
JiBocmVmLCBjb25zdCBLVVJMJiBiYXNlVVJMLCBjb25zdCBTdHJpbmcmIHNoZWV0KTsKLSAgICAK
KworICAgIHZvaWQgZmluaXNoTG9hZGluZ1NoZWV0QXN5bmNocm9ub3VzbHkoRG9jTG9hZGVyKiwg
Y29uc3QgU3RyaW5nJiBhYnNIcmVmKTsKKyAgICB2b2lkIGZpbmlzaExvYWRpbmdTaGVldFN5bmNo
cm9ub3VzbHkoRG9jTG9hZGVyKiwgY29uc3QgU3RyaW5nJiBhYnNIcmVmKTsKKwogICAgIFN0cmlu
ZyBtX3N0ckhyZWY7CiAgICAgUmVmUHRyPFhTTFN0eWxlU2hlZXQ+IG1fc3R5bGVTaGVldDsKICAg
ICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRYU0xTdHlsZVNoZWV0PiBtX2NhY2hlZFNoZWV0
OwpJbmRleDogV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS94bWwvWFNMVFByb2Nlc3Nvci5jcHAJKHJldmlzaW9uIDYxMTc3KQorKysgV2ViQ29yZS94
bWwvWFNMVFByb2Nlc3Nvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDggQEAgUGFz
c1JlZlB0cjxEb2N1bWVudD4gWFNMVFByb2Nlc3Nvcjo6Y3JlYQogICAgICAgICAgICAgdmlldy0+
Y2xlYXIoKTsKICAgICAgICAgcmVzdWx0LT5zZXRUcmFuc2Zvcm1Tb3VyY2VEb2N1bWVudChmcmFt
ZS0+ZG9jdW1lbnQoKSk7CiAgICAgICAgIGZyYW1lLT5zZXREb2N1bWVudChyZXN1bHQpOwotICAg
IH0KKyAgICB9IGVsc2UgaWYgKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCAmJiBtX3NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQtPmlzRG9jdW1lbnQoKSkKKyAgICAgICAgcmVzdWx0LT5zZXRPcmlnaW5E
b2N1bWVudChzdGF0aWNfY2FzdDxEb2N1bWVudCo+KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC5n
ZXQoKSkpOwogCiAgICAgaWYgKHNvdXJjZUlzRG9jdW1lbnQpCiAgICAgICAgIHJlc3VsdC0+c2V0
VVJMKG93bmVyRG9jdW1lbnQtPnVybCgpKTsKSW5kZXg6IFdlYkNvcmUveG1sL1hTTFRQcm9jZXNz
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yLmgJKHJldmlzaW9u
IDYxMTc3KQorKysgV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Myw3ICs0MywxMCBAQCBjbGFzcyBEb2N1bWVudEZyYWdtZW50OwogCiBjbGFzcyBYU0xUUHJv
Y2Vzc29yIDogcHVibGljIFJlZkNvdW50ZWQ8WFNMVFByb2Nlc3Nvcj4gewogcHVibGljOgotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFhTTFRQcm9jZXNzb3I+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0
UmVmKG5ldyBYU0xUUHJvY2Vzc29yKTsgfQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFhTTFRQcm9j
ZXNzb3I+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBYU0xUUHJvY2Vzc29yKGNvbnRleHQpKTsKKyAgICB9
CiAKICAgICB2b2lkIHNldFhTTFN0eWxlU2hlZXQoUGFzc1JlZlB0cjxYU0xTdHlsZVNoZWV0PiBz
dHlsZVNoZWV0KSB7IG1fc3R5bGVzaGVldCA9IHN0eWxlU2hlZXQ7IH0KICAgICBib29sIHRyYW5z
Zm9ybVRvU3RyaW5nKE5vZGUqIHNvdXJjZSwgU3RyaW5nJiByZXN1bHRNSU1FVHlwZSwgU3RyaW5n
JiByZXN1bHRTdHJpbmcsIFN0cmluZyYgcmVzdWx0RW5jb2RpbmcpOwpAQCAtNzIsOCArNzUsOSBA
QCBwdWJsaWM6CiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBQYXJhbWV0ZXJN
YXA7CiAKIHByaXZhdGU6Ci0gICAgWFNMVFByb2Nlc3NvcigpIHsgfQorICAgIFhTTFRQcm9jZXNz
b3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkgOiBtX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoY29udGV4dCkgeyB9CiAKKyAgICBSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4g
bV9zY3JpcHRFeGVjdXRpb25Db250ZXh0OwogICAgIFJlZlB0cjxYU0xTdHlsZVNoZWV0PiBtX3N0
eWxlc2hlZXQ7CiAgICAgUmVmUHRyPE5vZGU+IG1fc3R5bGVzaGVldFJvb3ROb2RlOwogICAgIFBh
cmFtZXRlck1hcCBtX3BhcmFtZXRlcnM7CkluZGV4OiBXZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29y
TGlieHNsdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhz
bHQuY3BwCShyZXZpc2lvbiA2MTE3NykKKysrIFdlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JMaWJ4
c2x0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDEwICsxMTcsMTMgQEAgc3RhdGljIHhtbERv
Y1B0ciBkb2NMb2FkZXJGdW5jKGNvbnN0IHhtbAogCiAgICAgICAgIFZlY3RvcjxjaGFyPiBkYXRh
OwogCi0gICAgICAgIGJvb2wgcmVxdWVzdEFsbG93ZWQgPSBnbG9iYWxEb2NMb2FkZXItPmZyYW1l
KCkgJiYgZ2xvYmFsRG9jTG9hZGVyLT5kb2MoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVz
dCh1cmwpOworICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBnbG9iYWxEb2NMb2FkZXItPmRv
YygpOworICAgICAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZmluZEZyYW1lKCk7CisKKyAg
ICAgICAgYm9vbCByZXF1ZXN0QWxsb3dlZCA9IGZyYW1lICYmIGRvY3VtZW50LT5zZWN1cml0eU9y
aWdpbigpLT5jYW5SZXF1ZXN0KHVybCk7CiAgICAgICAgIGlmIChyZXF1ZXN0QWxsb3dlZCkgewot
ICAgICAgICAgICAgZ2xvYmFsRG9jTG9hZGVyLT5mcmFtZSgpLT5sb2FkZXIoKS0+bG9hZFJlc291
cmNlU3luY2hyb25vdXNseSh1cmwsIEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsIGVycm9yLCByZXNw
b25zZSwgZGF0YSk7Ci0gICAgICAgICAgICByZXF1ZXN0QWxsb3dlZCA9IGdsb2JhbERvY0xvYWRl
ci0+ZG9jKCktPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QocmVzcG9uc2UudXJsKCkpOwor
ICAgICAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5sb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KHVy
bCwgQWxsb3dTdG9yZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKKyAgICAg
ICAgICAgIHJlcXVlc3RBbGxvd2VkID0gZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCktPmNhblJl
cXVlc3QocmVzcG9uc2UudXJsKCkpOwogICAgICAgICB9CiAgICAgICAgIGlmICghcmVxdWVzdEFs
bG93ZWQpIHsKICAgICAgICAgICAgIGRhdGEuY2xlYXIoKTsKSW5kZXg6IExheW91dFRlc3RzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDYx
MTc3KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
NDIgQEAKKzIwMTAtMDYtMTYgIEFuZHJlYXMgV2ljdG9yICA8YW5kcmVhcy53aWN0b3JAeGNlcmlv
bi5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
eHNsOmltcG9ydCBhbmQgZG9jdW1lbnQoKSBkb24ndCB3b3JrIGluIHN0eWxlc2hlZXRzIGxvYWRl
ZCB2aWEgWE1MSHR0cFJlcXVlc3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEwMzEzCisKKyAgICAgICAgKiBmYXN0L3hzbC90cmFuc2Zvcm0tZG9jaW1w
bC1kb2MtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3hzbC90cmFuc2Zvcm0t
ZG9jaW1wbC1kb2MueGh0bWw6IEFkZGVkLgorICAgICAgICAgLSBUZXN0IHRoYXQgc3R5bGVzaGVl
dHMgY3JlYXRlZCB3aXRoIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZURvY3VtZW50Cisg
ICAgICAgICAgIGNhbiB1c2UgeHNsOmltcG9ydAorICAgICAgICAqIGZhc3QveHNsL3RyYW5zZm9y
bS1kb21wYXJzZXItZG9jLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC94c2wv
dHJhbnNmb3JtLWRvbXBhcnNlci1kb2MueGh0bWw6IEFkZGVkLgorICAgICAgICAgLSBUZXN0IHRo
YXQgc3R5bGVzaGVldHMgY3JlYXRlZCB3aXRoIERPTVBhcnNlci5wYXJzZUZyb21TdHJpbmcKKyAg
ICAgICAgICAgY2FuIHVzZSB4c2w6aW1wb3J0CisgICAgICAgICogZmFzdC94c2wvdHJhbnNmb3Jt
LXRyYW5zZm9ybWVkLWRvYy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QveHNs
L3RyYW5zZm9ybS10cmFuc2Zvcm1lZC1kb2MueGh0bWw6IEFkZGVkLgorICAgICAgICAgLSBUZXN0
IHRoYXQgc3R5bGVzaGVldHMgY3JlYXRlZCB3aXRoIFhTTFRQcm9jZXNzb3IudHJhbnNmb3JtVG9E
b2N1bWVudAorICAgICAgICAgICBjYW4gdXNlIHhzbDppbXBvcnQKKyAgICAgICAgKiBmYXN0L3hz
bC90cmFuc2Zvcm0teGhyLWRvYy1leHBlY3RlZC50eHQ6CisgICAgICAgICogaHR0cC90ZXN0cy94
c2w6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMveHNsL3Jlc291cmNlczogQWRkZWQuCisg
ICAgICAgICogaHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL2FsbG93LWNyb3NzLW9yaWdpbi1oZWFk
ZXIuY2dpOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMvdHJhbnNm
b3JtLWZyYW1lZC1zdWJmcmFtZTEueGh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMv
eHNsL3Jlc291cmNlcy90cmFuc2Zvcm0tZnJhbWVkLXN1YmZyYW1lMi54aHRtbDogQWRkZWQuCisg
ICAgICAgICogaHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL3hoci1kb2MtY3Jvc3Mtb3JpZ2luLnhz
bDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL3hoci1kb2MtaW1w
b3J0ZWQueHNsOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMveGhy
LWRvYy54bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMveHNsL3Jlc291cmNlcy94aHIt
ZG9jLnhzbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy94c2wvdHJhbnNmb3JtLWZyYW1l
ZC1kb2MtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3hzbC90cmFu
c2Zvcm0tZnJhbWVkLWRvYy54aHRtbDogQWRkZWQuCisgICAgICAgICAtIFRlc3Qgc3R5bGVzaGVl
dHMgb3JpZ2luYXRpbmcgZnJvbSBhbm90aGVyIGZyYW1lLgorICAgICAgICAqIGh0dHAvdGVzdHMv
eHNsL3RyYW5zZm9ybS14aHItZG9jLWNyb3NzLW9yaWdpbi1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGh0dHAvdGVzdHMveHNsL3RyYW5zZm9ybS14aHItZG9jLWNyb3NzLW9yaWdpbi54
aHRtbDogQWRkZWQuCisgICAgICAgICAtIFRlc3QgdGhhdCB5b3UgY2FuJ3QgaW1wb3J0IGRvY3Vt
ZW50cyBjcm9zcyBvcmlnaW4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0teGhy
LWRvYy1mcm9tLWFsbG93ZWQtY3Jvc3Mtb3JpZ2luLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogaHR0cC90ZXN0cy94c2wvdHJhbnNmb3JtLXhoci1kb2MtZnJvbS1hbGxvd2VkLWNyb3Nz
LW9yaWdpbi54aHRtbDogQWRkZWQuCisgICAgICAgICAtIFRlc3QgZm9yIHBlcm1pdHRlZCBzYW1l
IG9yaWdpbiBsb2FkIGluIHRoZSBjYXNlIG9mIGNyb3NzLW9yaWdpbiBYTUxIdHRwUmVxdWVzdAor
CiAyMDEwLTA2LTE0ICBEbWl0cnkgVGl0b3YgIDxkaW1pY2hAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIE5vdCByZXZpZXdlZCwgdXBkYXRlIENocm9taXVtIGV4cGVjdGF0aW9ucyBmb3IgYSBuZXcg
dGVzdC4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS1kb2NpbXBsLWRvYy1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC94c2wvdHJhbnNmb3Jt
LWRvY2ltcGwtZG9jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zh
c3QveHNsL3RyYW5zZm9ybS1kb2NpbXBsLWRvYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMyBAQAorVGVzdCBmb3IgYnVnIDEwMzEzOiB4c2w6aW1wb3J0IGRvZXNuJ3Qgd29y
ayBpbiBzdHlsZXNoZWV0cyBsb2FkZWQgdmlhIFhNTEh0dHBSZXF1ZXN0LgorCitTVUNDRVNTCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0tZG9jaW1wbC1kb2MueGh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC94c2wvdHJhbnNmb3JtLWRvY2ltcGwtZG9jLnho
dG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC94c2wvdHJhbnNmb3JtLWRvY2lt
cGwtZG9jLnhodG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ1IEBACis8P3htbCB2ZXJzaW9u
PSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0Mv
L0RURCBYSFRNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0
bWwxMS5kdGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHht
bDpsYW5nPSJlbiI+Cis8aGVhZD4KKyAgICA8dGl0bGU+eHNsIGltcG9ydCB0ZXN0PC90aXRsZT4K
KyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCFbQ0RBVEFbCisgICAgICAgIGZ1
bmN0aW9uIGxvYWQoKSB7CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKQorICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsK
KworICAgICAgICAgICAgdmFyIHhzbHROUyA9ICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9U
cmFuc2Zvcm0iOworICAgICAgICAgICAgdmFyIHhzbHREb2MgPSBkb2N1bWVudC5pbXBsZW1lbnRh
dGlvbi5jcmVhdGVEb2N1bWVudCh4c2x0TlMsICJzdHlsZXNoZWV0IiwgbnVsbCk7CisgICAgICAg
ICAgICB2YXIgcm9vdEVsZW0gPSB4c2x0RG9jLmRvY3VtZW50RWxlbWVudDsKKyAgICAgICAgICAg
IHJvb3RFbGVtLnNldEF0dHJpYnV0ZSgidmVyc2lvbiIsICIxLjAiKTsKKworICAgICAgICAgICAg
dmFyIGltcG9ydEVsZW0gPSB4c2x0RG9jLmNyZWF0ZUVsZW1lbnROUyh4c2x0TlMsICJpbXBvcnQi
KTsKKyAgICAgICAgICAgIGltcG9ydEVsZW0uc2V0QXR0cmlidXRlKCJocmVmIiwgInJlc291cmNl
cy94aHItZG9jLWltcG9ydGVkLnhzbCIpOworICAgICAgICAgICAgcm9vdEVsZW0uYXBwZW5kQ2hp
bGQoaW1wb3J0RWxlbSk7CisKKyAgICAgICAgICAgIHZhciB0ZW1wbGF0ZUVsZW0gPSB4c2x0RG9j
LmNyZWF0ZUVsZW1lbnROUyh4c2x0TlMsICJ0ZW1wbGF0ZSIpOworICAgICAgICAgICAgdGVtcGxh
dGVFbGVtLnNldEF0dHJpYnV0ZSgibWF0Y2giLCAiL3Jvb3QiKTsKKyAgICAgICAgICAgIHZhciBj
YWxsRWxlbSA9IHhzbHREb2MuY3JlYXRlRWxlbWVudE5TKHhzbHROUywgImNhbGwtdGVtcGxhdGUi
KTsKKyAgICAgICAgICAgIGNhbGxFbGVtLnNldEF0dHJpYnV0ZSgibmFtZSIsICJ3b3JrcyIpOwor
ICAgICAgICAgICAgdGVtcGxhdGVFbGVtLmFwcGVuZENoaWxkKGNhbGxFbGVtKTsKKyAgICAgICAg
ICAgIHJvb3RFbGVtLmFwcGVuZENoaWxkKHRlbXBsYXRlRWxlbSk7CisKKyAgICAgICAgICAgIHZh
ciB4c2x0ID0gbmV3IFhTTFRQcm9jZXNzb3IoKTsKKyAgICAgICAgICAgIHhzbHQuaW1wb3J0U3R5
bGVzaGVldCh4c2x0RG9jKTsKKworICAgICAgICAgICAgdmFyIHhtbERvYyA9IGRvY3VtZW50Lmlt
cGxlbWVudGF0aW9uLmNyZWF0ZURvY3VtZW50KCIiLCAicm9vdCIsIG51bGwpOworICAgICAgICAg
ICAgdmFyIHJlc3VsdERvYyA9IHhzbHQudHJhbnNmb3JtVG9Eb2N1bWVudCh4bWxEb2MpOworICAg
ICAgICAgICAgdmFyIGZyYWdtZW50ID0gZG9jdW1lbnQuaW1wb3J0Tm9kZShyZXN1bHREb2MuZG9j
dW1lbnRFbGVtZW50LCB0cnVlKTsKKworICAgICAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdkaXYnKTsKKyAgICAgICAgICAgIGRpdi5wYXJlbnROb2RlLnJlcGxhY2VD
aGlsZChmcmFnbWVudCwgZGl2KTsKKyAgICAgICAgfQorICAgIF1dPjwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHkgb25sb2FkPSJsb2FkKCkiPgorPHA+VGVzdCBmb3IgPGEgaHJlZj0iaHR0cDovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzMTMiPmJ1ZyAxMDMxMzwvYT46Cit4c2w6
aW1wb3J0IGRvZXNuJ3Qgd29yayBpbiBzdHlsZXNoZWV0cyBsb2FkZWQgdmlhIFhNTEh0dHBSZXF1
ZXN0LjwvcD4KKworPGRpdiBpZD0iZGl2Ij5JdCdzIG5pY2UgdGhhdCB0aGlzIGhhc24ndCBjcmFz
aGVkLCBidXQgdGhlIFhTTCB0cmFuc2Zvcm1hdGlvbiBoYXMgZmFpbGVkLjwvZGl2PgorPC9ib2R5
PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC94c2wvdHJhbnNmb3JtLWRvbXBhcnNl
ci1kb2MtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QveHNsL3Ry
YW5zZm9ybS1kb21wYXJzZXItZG9jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS1kb21wYXJzZXItZG9jLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitUZXN0IGZvciBidWcgMTAzMTM6IHhzbDppbXBvcnQg
ZG9lc24ndCB3b3JrIGluIHN0eWxlc2hlZXRzIGxvYWRlZCB2aWEgWE1MSHR0cFJlcXVlc3QuCisK
K1NVQ0NFU1MKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS1kb21wYXJzZXIt
ZG9jLnhodG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS1k
b21wYXJzZXItZG9jLnhodG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC94c2wv
dHJhbnNmb3JtLWRvbXBhcnNlci1kb2MueGh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDEg
QEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IURPQ1RZUEUgaHRt
bCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9U
Ui94aHRtbDExL0RURC94aHRtbDExLmR0ZCI+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5v
cmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIj4KKzxoZWFkPgorICAgIDx0aXRsZT54c2wgaW1w
b3J0IHRlc3Q8L3RpdGxlPgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IVtD
REFUQVsKKyAgICAgICAgZnVuY3Rpb24gbG9hZCgpIHsKKyAgICAgICAgICAgIGlmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuZHVtcEFzVGV4dCgpOworCisgICAgICAgICAgICB2YXIgeHNsdFN0ciA9CisgICAgICAgICAg
ICAgICAgJzx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiJyArCisgICAgICAgICAgICAgICAg
JyAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iJyArCisg
ICAgICAgICAgICAgICAgJyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPicg
KworICAgICAgICAgICAgICAgICc8eHNsOmltcG9ydCBocmVmPSJyZXNvdXJjZXMveGhyLWRvYy1p
bXBvcnRlZC54c2wiIC8+JyArCisgICAgICAgICAgICAgICAgJzx4c2w6dGVtcGxhdGUgbWF0Y2g9
Ii9yb290Ij4nICsKKyAgICAgICAgICAgICAgICAnICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1l
PSJ3b3JrcyIgLz4nICsKKyAgICAgICAgICAgICAgICAnPC94c2w6dGVtcGxhdGU+JyArCisgICAg
ICAgICAgICAgICAgJzwveHNsOnN0eWxlc2hlZXQ+JzsKKworICAgICAgICAgICAgdmFyIHBhcnNl
ciA9IG5ldyBET01QYXJzZXIoKTsKKyAgICAgICAgICAgIHZhciB4c2x0ID0gbmV3IFhTTFRQcm9j
ZXNzb3IoKTsKKyAgICAgICAgICAgIHZhciB4c2x0RG9jID0gcGFyc2VyLnBhcnNlRnJvbVN0cmlu
Zyh4c2x0U3RyLCAiYXBwbGljYXRpb24veG1sIik7CisgICAgICAgICAgICB4c2x0LmltcG9ydFN0
eWxlc2hlZXQoeHNsdERvYyk7CisKKyAgICAgICAgICAgIHZhciB4bWxEb2MgPSBwYXJzZXIucGFy
c2VGcm9tU3RyaW5nKCI8cm9vdC8+IiwgImFwcGxpY2F0aW9uL3htbCIpOworICAgICAgICAgICAg
dmFyIHJlc3VsdERvYyA9IHhzbHQudHJhbnNmb3JtVG9Eb2N1bWVudCh4bWxEb2MpOworICAgICAg
ICAgICAgdmFyIGZyYWdtZW50ID0gZG9jdW1lbnQuaW1wb3J0Tm9kZShyZXN1bHREb2MuZG9jdW1l
bnRFbGVtZW50LCB0cnVlKTsKKworICAgICAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdkaXYnKTsKKyAgICAgICAgICAgIGRpdi5wYXJlbnROb2RlLnJlcGxhY2VDaGls
ZChmcmFnbWVudCwgZGl2KTsKKyAgICAgICAgfQorICAgIF1dPjwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHkgb25sb2FkPSJsb2FkKCkiPgorPHA+VGVzdCBmb3IgPGEgaHJlZj0iaHR0cDovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzMTMiPmJ1ZyAxMDMxMzwvYT46Cit4c2w6aW1w
b3J0IGRvZXNuJ3Qgd29yayBpbiBzdHlsZXNoZWV0cyBsb2FkZWQgdmlhIFhNTEh0dHBSZXF1ZXN0
LjwvcD4KKworPGRpdiBpZD0iZGl2Ij5JdCdzIG5pY2UgdGhhdCB0aGlzIGhhc24ndCBjcmFzaGVk
LCBidXQgdGhlIFhTTCB0cmFuc2Zvcm1hdGlvbiBoYXMgZmFpbGVkLjwvZGl2PgorPC9ib2R5Pgor
PC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC94c2wvdHJhbnNmb3JtLXRyYW5zZm9ybWVk
LWRvYy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC94c2wvdHJh
bnNmb3JtLXRyYW5zZm9ybWVkLWRvYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0tdHJhbnNmb3JtZWQtZG9jLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitUZXN0IGZvciBidWcgMTAzMTM6IHhzbDppbXBv
cnQgZG9lc24ndCB3b3JrIGluIHN0eWxlc2hlZXRzIGxvYWRlZCB2aWEgWE1MSHR0cFJlcXVlc3Qu
CisKK1NVQ0NFU1MKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS10cmFuc2Zv
cm1lZC1kb2MueGh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC94c2wvdHJhbnNm
b3JtLXRyYW5zZm9ybWVkLWRvYy54aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zh
c3QveHNsL3RyYW5zZm9ybS10cmFuc2Zvcm1lZC1kb2MueGh0bWwJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNDggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IURP
Q1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iICJodHRwOi8vd3d3
LnczLm9yZy9UUi94aHRtbDExL0RURC94aHRtbDExLmR0ZCI+Cis8aHRtbCB4bWxucz0iaHR0cDov
L3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIj4KKzxoZWFkPgorICAgIDx0aXRs
ZT54c2wgaW1wb3J0IHRlc3Q8L3RpdGxlPgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2Ny
aXB0Ij48IVtDREFUQVsKKyAgICAgICAgZnVuY3Rpb24gbG9hZCgpIHsKKyAgICAgICAgICAgIGlm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCisgICAgICAgICAgICB2YXIgY29weVhzbHRTdHIg
PQorICAgICAgICAgICAgICAgICc8eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIicgKworICAg
ICAgICAgICAgICAgICcgIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJh
bnNmb3JtIicgKworICAgICAgICAgICAgICAgICcgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8x
OTk5L3hodG1sIj4nICsKKyAgICAgICAgICAgICAgICAnPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iQCp8
bm9kZSgpIj4nICsKKyAgICAgICAgICAgICAgICAnICA8eHNsOmNvcHk+JyArCisgICAgICAgICAg
ICAgICAgJyAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9IkAqfG5vZGUoKSIvPicgKwor
ICAgICAgICAgICAgICAgICcgIDwveHNsOmNvcHk+JyArCisgICAgICAgICAgICAgICAgJzwveHNs
OnRlbXBsYXRlPicgKworICAgICAgICAgICAgICAgICc8L3hzbDpzdHlsZXNoZWV0Pic7CisKKyAg
ICAgICAgICAgIHZhciBwYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7CisgICAgICAgICAgICB2YXIg
eHNsdCA9IG5ldyBYU0xUUHJvY2Vzc29yKCk7CisgICAgICAgICAgICBjb3B5WHNsdERvYyA9IHBh
cnNlci5wYXJzZUZyb21TdHJpbmcoY29weVhzbHRTdHIsICJhcHBsaWNhdGlvbi94bWwiKTsKKyAg
ICAgICAgICAgIHhzbHQuaW1wb3J0U3R5bGVzaGVldChjb3B5WHNsdERvYyk7CisKKyAgICAgICAg
ICAgIHZhciByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICAgICAgICAgIHJlcS5vcGVu
KCdHRVQnLCAncmVzb3VyY2VzL3hoci1kb2MueHNsJywgZmFsc2UpOworICAgICAgICAgICAgcmVx
LnNlbmQobnVsbCk7CisgICAgICAgICAgICB2YXIgeHNsdERvYyA9IHhzbHQudHJhbnNmb3JtVG9E
b2N1bWVudChyZXEucmVzcG9uc2VYTUwpOworICAgICAgICAgICAgeHNsdC5pbXBvcnRTdHlsZXNo
ZWV0KHhzbHREb2MpOworCisgICAgICAgICAgICB2YXIgeG1sRG9jID0gcGFyc2VyLnBhcnNlRnJv
bVN0cmluZygiPHJvb3QvPiIsICJhcHBsaWNhdGlvbi94bWwiKTsKKyAgICAgICAgICAgIHZhciBy
ZXN1bHREb2MgPSB4c2x0LnRyYW5zZm9ybVRvRG9jdW1lbnQoeG1sRG9jKTsKKyAgICAgICAgICAg
IHZhciBmcmFnbWVudCA9IGRvY3VtZW50LmltcG9ydE5vZGUocmVzdWx0RG9jLmRvY3VtZW50RWxl
bWVudCwgdHJ1ZSk7CisKKyAgICAgICAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnZGl2Jyk7CisgICAgICAgICAgICBkaXYucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoZnJh
Z21lbnQsIGRpdik7CisgICAgICAgIH0KKyAgICBdXT48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
IG9ubG9hZD0ibG9hZCgpIj4KKzxwPlRlc3QgZm9yIDxhIGhyZWY9Imh0dHA6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzEzIj5idWcgMTAzMTM8L2E+OgoreHNsOmltcG9ydCBk
b2Vzbid0IHdvcmsgaW4gc3R5bGVzaGVldHMgbG9hZGVkIHZpYSBYTUxIdHRwUmVxdWVzdC48L3A+
CisKKzxkaXYgaWQ9ImRpdiI+SXQncyBuaWNlIHRoYXQgdGhpcyBoYXNuJ3QgY3Jhc2hlZCwgYnV0
IHRoZSBYU0wgdHJhbnNmb3JtYXRpb24gaGFzIGZhaWxlZC48L2Rpdj4KKzwvYm9keT4KKzwvaHRt
bD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS14aHItZG9jLWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0teGhyLWRv
Yy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDYxMTc3KQorKysgTGF5b3V0VGVzdHMvZmFzdC94c2wv
dHJhbnNmb3JtLXhoci1kb2MtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEs
MyBAQAotQ09OU09MRSBNRVNTQUdFOiBsaW5lIDIwOiBUeXBlRXJyb3I6IFJlc3VsdCBvZiBleHBy
ZXNzaW9uICdkb2MnIFt1bmRlZmluZWRdIGlzIG5vdCBhbiBvYmplY3QuCiBUZXN0IGZvciBidWcg
MTAzMTM6IHhzbDppbXBvcnQgZG9lc24ndCB3b3JrIGluIHN0eWxlc2hlZXRzIGxvYWRlZCB2aWEg
WE1MSHR0cFJlcXVlc3QuCiAKLUl0J3MgbmljZSB0aGF0IHRoaXMgaGFzbid0IGNyYXNoZWQsIGJ1
dCB0aGUgWFNMIHRyYW5zZm9ybWF0aW9uIGhhcyBmYWlsZWQuCitTVUNDRVNTCkluZGV4OiBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0tZnJhbWVkLWRvYy1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvdHJhbnNmb3JtLWZyYW1l
ZC1kb2MtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy94c2wvdHJhbnNmb3JtLWZyYW1lZC1kb2MtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDEwIEBACitUZXN0IGZvciBidWcgMTAzMTM6IHhzbDppbXBvcnQgZG9lc24ndCB3b3Jr
IGluIHN0eWxlc2hlZXRzIGxvYWRlZCB2aWEgWE1MSHR0cFJlcXVlc3QuCisKK1NVQ0NFU1MKK1Ro
aXMgdHJhbnNmb3JtYXRpb24gaGFzIGZhaWxlZCBiZWNhdXNlIHRoZSBmcmFtZSBubyBsb25nZXIg
aGFzIHRoZSBzYW1lIG9yaWdpbi4KKworCistLS0tLS0tLQorRnJhbWU6ICdzdWJmcmFtZScKKy0t
LS0tLS0tCitzdWJmcmFtZSAyCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC90cmFu
c2Zvcm0tZnJhbWVkLWRvYy54aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3hzbC90cmFuc2Zvcm0tZnJhbWVkLWRvYy54aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2h0dHAvdGVzdHMveHNsL3RyYW5zZm9ybS1mcmFtZWQtZG9jLnhodG1sCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDU5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYt
OCI/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VOIiAi
aHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwxMS5kdGQiPgorPGh0bWwgeG1s
bnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiI+Cis8aGVhZD4K
KyAgICA8dGl0bGU+eHNsIGltcG9ydCB0ZXN0PC90aXRsZT4KKyAgICA8c2NyaXB0IHR5cGU9InRl
eHQvamF2YXNjcmlwdCI+PCFbQ0RBVEFbCisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpCisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25l
KCk7CisKKyAgICAgICAgdmFyIHhzbHREb2M7CisKKyAgICAgICAgdmFyIHBhcnNlciA9IG5ldyBE
T01QYXJzZXIoKTsKKyAgICAgICAgdmFyIHhtbERvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmco
Ijxyb290Lz4iLCAiYXBwbGljYXRpb24veG1sIik7CisKKyAgICAgICAgZnVuY3Rpb24gdHJhbnNm
b3JtKGRpdikgeworICAgICAgICAgICAgdmFyIHhzbHQgPSBuZXcgWFNMVFByb2Nlc3NvcigpOwor
ICAgICAgICAgICAgeHNsdC5pbXBvcnRTdHlsZXNoZWV0KHhzbHREb2MpOworICAgICAgICAgICAg
dmFyIHJlc3VsdERvYyA9IHhzbHQudHJhbnNmb3JtVG9Eb2N1bWVudCh4bWxEb2MpOworICAgICAg
ICAgICAgdmFyIGZyYWdtZW50ID0gZG9jdW1lbnQuaW1wb3J0Tm9kZShyZXN1bHREb2MuZG9jdW1l
bnRFbGVtZW50LCB0cnVlKTsKKyAgICAgICAgICAgIGRpdi5wYXJlbnROb2RlLnJlcGxhY2VDaGls
ZChmcmFnbWVudCwgZGl2KTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGxvYWQoKSB7
CisgICAgICAgICAgICBpZiAoIXhzbHREb2MpIHsKKyAgICAgICAgICAgICAgICB4c2x0RG9jID0g
c3ViZnJhbWUueHNsdERvYzsKKyAgICAgICAgICAgICAgICB0cmFuc2Zvcm0oZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ3RyYW5zZm9ybTEnKSk7CisgICAgICAgICAgICAgICAgc3ViZnJhbWUud2lu
ZG93LmxvY2F0aW9uID0gImh0dHA6Ly8xMjcuMC4wLjE6ODAwMC94c2wvcmVzb3VyY2VzL3RyYW5z
Zm9ybS1mcmFtZWQtc3ViZnJhbWUyLnhodG1sIjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgdmFyIGRpdjIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndHJhbnNmb3Jt
MicpOworCisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNm
b3JtKGRpdjIpOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gVGhpcyB0cmFuc2Zvcm1hdGlvbiBzaG91bGQgZmFpbAorICAgICAgICAgICAgICAg
ICAgICBkaXYyLmlubmVySFRNTCA9ICJUaGlzIHRyYW5zZm9ybWF0aW9uIGhhcyBmYWlsZWQgYmVj
YXVzZSB0aGUgZnJhbWUgbm8gbG9uZ2VyIGhhcyB0aGUgc2FtZSBvcmlnaW4uIjsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKSB7CisgICAgICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1Rl
eHQoKTsKKyAgICAgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcENoaWxk
RnJhbWVzQXNUZXh0KCk7CisgICAgICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVy
Lm5vdGlmeURvbmUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICBdXT48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHA+VGVzdCBmb3IgPGEgaHJl
Zj0iaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzMTMiPmJ1ZyAxMDMx
MzwvYT46Cit4c2w6aW1wb3J0IGRvZXNuJ3Qgd29yayBpbiBzdHlsZXNoZWV0cyBsb2FkZWQgdmlh
IFhNTEh0dHBSZXF1ZXN0LjwvcD4KKzxkaXYgaWQ9InRyYW5zZm9ybTEiPgorSXQncyBuaWNlIHRo
YXQgdGhpcyBoYXNuJ3QgY3Jhc2hlZCwgYnV0IHRoZSBYU0wgdHJhbnNmb3JtYXRpb24gaGFzIGZh
aWxlZC4KKzwvZGl2PgorPGRpdiBpZD0idHJhbnNmb3JtMiI+CitUaGlzIHRyYW5zZm9ybWF0aW9u
IHNob3VsZCBmYWlsIGJlY2F1c2UgdGhlIGZyYW1lIG5vIGxvbmdlciBoYXMgdGhlIHNhbWUgb3Jp
Z2luLgorPC9kaXY+Cis8aWZyYW1lIGlkPSJzdWJmcmFtZSIgc3JjPSJyZXNvdXJjZXMvdHJhbnNm
b3JtLWZyYW1lZC1zdWJmcmFtZTEueGh0bWwiIG9ubG9hZD0ibG9hZCgpIj4KKzwvaWZyYW1lPgor
PC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvdHJhbnNm
b3JtLXhoci1kb2MtY3Jvc3Mtb3JpZ2luLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0teGhyLWRvYy1jcm9zcy1vcmlnaW4tZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvdHJh
bnNmb3JtLXhoci1kb2MtY3Jvc3Mtb3JpZ2luLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwzIEBACitUZXN0IGZvciBidWcgMTAzMTM6IHhzbDppbXBvcnQgZG9lc24ndCB3b3Jr
IGluIHN0eWxlc2hlZXRzIGxvYWRlZCB2aWEgWE1MSHR0cFJlcXVlc3QuCisKK1RoaXMgdHJhbnNm
b3JtYXRpb24gaGFzIGZhaWxlZCBiZWNhdXNlIGl0IGlzIHRyeWluZyB0byBpbXBvcnQgYSBzdHls
ZXNoZWV0IGNyb3NzLW9yaWdpbi4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3Ry
YW5zZm9ybS14aHItZG9jLWNyb3NzLW9yaWdpbi54aHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0teGhyLWRvYy1jcm9zcy1vcmlnaW4ueGh0bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0teGhy
LWRvYy1jcm9zcy1vcmlnaW4ueGh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDQgQEAKKzw/
eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IURPQ1RZUEUgaHRtbCBQVUJM
SUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRt
bDExL0RURC94aHRtbDExLmR0ZCI+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5
OS94aHRtbCIgeG1sOmxhbmc9ImVuIj4KKzxoZWFkPgorICAgIDx0aXRsZT54c2wgaW1wb3J0IHRl
c3Q8L3RpdGxlPgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICAgICAg
ZnVuY3Rpb24gbG9hZCgpIHsKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgp
OworCisgICAgICAgICAgICB2YXIgcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgICAg
ICAgICB2YXIgeHNsdCA9IG5ldyBYU0xUUHJvY2Vzc29yKCk7CisgICAgICAgICAgICByZXEub3Bl
bignR0VUJywgJ3Jlc291cmNlcy94aHItZG9jLWNyb3NzLW9yaWdpbi54c2wnLCBmYWxzZSk7Cisg
ICAgICAgICAgICByZXEuc2VuZChudWxsKTsKKyAgICAgICAgICAgIHhzbHQuaW1wb3J0U3R5bGVz
aGVldChyZXEucmVzcG9uc2VYTUwpOworCisgICAgICAgICAgICByZXEub3BlbignR0VUJywgJ3Jl
c291cmNlcy94aHItZG9jLnhtbCcsIGZhbHNlKTsKKyAgICAgICAgICAgIHJlcS5zZW5kKG51bGwp
OworCisgICAgICAgICAgICB2YXIgZG9jOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAg
ICAgICBkb2MgPSB4c2x0LnRyYW5zZm9ybVRvRG9jdW1lbnQocmVxLnJlc3BvbnNlWE1MKTsKKyAg
ICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGlzIHRyYW5zZm9y
bWF0aW9uIHNob3VsZCBmYWlsCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciBkaXYg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGl2Jyk7CisKKyAgICAgICAgICAgIGlmIChkb2Mp
IHsKKyAgICAgICAgICAgICAgICB2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5pbXBvcnROb2RlKGRv
Yy5kb2N1bWVudEVsZW1lbnQsIHRydWUpOworICAgICAgICAgICAgICAgIGRpdi5wYXJlbnROb2Rl
LnJlcGxhY2VDaGlsZChmcmFnbWVudCwgZGl2KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgZGl2LmlubmVySFRNTCA9ICJUaGlzIHRyYW5zZm9ybWF0aW9uIGhhcyBmYWls
ZWQgYmVjYXVzZSBpdCBpcyB0cnlpbmcgdG8gaW1wb3J0IGEgc3R5bGVzaGVldCBjcm9zcy1vcmln
aW4uIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIDwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHkgb25sb2FkPSJsb2FkKCkiPgorPHA+VGVzdCBmb3IgPGEgaHJlZj0iaHR0cDovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzMTMiPmJ1ZyAxMDMxMzwvYT46Cit4c2w6aW1w
b3J0IGRvZXNuJ3Qgd29yayBpbiBzdHlsZXNoZWV0cyBsb2FkZWQgdmlhIFhNTEh0dHBSZXF1ZXN0
LjwvcD4KKworPGRpdiBpZD0iZGl2Ij5UaGlzIHRyYW5zZm9ybWF0aW9uIHNob3VsZCBmYWlsIGJl
Y2F1c2UgaXQgaXMgdHJ5aW5nIHRvIGltcG9ydCBhIHN0eWxlc2hlZXQgY3Jvc3Mtb3JpZ2luLjwv
ZGl2PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wv
dHJhbnNmb3JtLXhoci1kb2MtZnJvbS1hbGxvd2VkLWNyb3NzLW9yaWdpbi1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvdHJhbnNmb3JtLXhoci1k
b2MtZnJvbS1hbGxvd2VkLWNyb3NzLW9yaWdpbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0teGhyLWRvYy1mcm9tLWFsbG93
ZWQtY3Jvc3Mtb3JpZ2luLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBA
CitUZXN0IGZvciBidWcgMTAzMTM6IHhzbDppbXBvcnQgZG9lc24ndCB3b3JrIGluIHN0eWxlc2hl
ZXRzIGxvYWRlZCB2aWEgWE1MSHR0cFJlcXVlc3QuCisKK1NVQ0NFU1MKSW5kZXg6IExheW91dFRl
c3RzL2h0dHAvdGVzdHMveHNsL3RyYW5zZm9ybS14aHItZG9jLWZyb20tYWxsb3dlZC1jcm9zcy1v
cmlnaW4ueGh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvdHJh
bnNmb3JtLXhoci1kb2MtZnJvbS1hbGxvd2VkLWNyb3NzLW9yaWdpbi54aHRtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3RyYW5zZm9ybS14aHItZG9jLWZyb20t
YWxsb3dlZC1jcm9zcy1vcmlnaW4ueGh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzMgQEAK
Kzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IURPQ1RZUEUgaHRtbCBQ
VUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94
aHRtbDExL0RURC94aHRtbDExLmR0ZCI+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIj4KKzxoZWFkPgorICAgIDx0aXRsZT54c2wgaW1wb3J0
IHRlc3Q8L3RpdGxlPgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICAg
ICAgZnVuY3Rpb24gbG9hZCgpIHsKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpCisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4
dCgpOworCisgICAgICAgICAgICB2YXIgcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAg
ICAgICAgICB2YXIgeHNsdCA9IG5ldyBYU0xUUHJvY2Vzc29yKCk7CisgICAgICAgICAgICByZXEu
b3BlbignR0VUJywgJ2h0dHA6Ly9sb2NhbGhvc3Q6ODAwMC94c2wvcmVzb3VyY2VzL2FsbG93LWNy
b3NzLW9yaWdpbi1oZWFkZXIuY2dpP3hoci1kb2MueHNsJywgZmFsc2UpOworICAgICAgICAgICAg
cmVxLnNlbmQobnVsbCk7CisgICAgICAgICAgICB4c2x0LmltcG9ydFN0eWxlc2hlZXQocmVxLnJl
c3BvbnNlWE1MKTsKKworICAgICAgICAgICAgcmVxLm9wZW4oJ0dFVCcsICdyZXNvdXJjZXMveGhy
LWRvYy54bWwnLCBmYWxzZSk7CisgICAgICAgICAgICByZXEuc2VuZChudWxsKTsKKyAgICAgICAg
ICAgIHZhciBkb2MgPSB4c2x0LnRyYW5zZm9ybVRvRG9jdW1lbnQocmVxLnJlc3BvbnNlWE1MKTsK
KyAgICAgICAgICAgIHZhciBmcmFnbWVudCA9IGRvY3VtZW50LmltcG9ydE5vZGUoZG9jLmRvY3Vt
ZW50RWxlbWVudCwgdHJ1ZSk7CisKKyAgICAgICAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnZGl2Jyk7CisgICAgICAgICAgICBkaXYucGFyZW50Tm9kZS5yZXBsYWNlQ2hp
bGQoZnJhZ21lbnQsIGRpdik7CisgICAgICAgIH0KKyAgICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5IG9ubG9hZD0ibG9hZCgpIj4KKzxwPlRlc3QgZm9yIDxhIGhyZWY9Imh0dHA6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzEzIj5idWcgMTAzMTM8L2E+OgoreHNsOmltcG9y
dCBkb2Vzbid0IHdvcmsgaW4gc3R5bGVzaGVldHMgbG9hZGVkIHZpYSBYTUxIdHRwUmVxdWVzdC48
L3A+CisKKzxkaXYgaWQ9ImRpdiI+SXQncyBuaWNlIHRoYXQgdGhpcyBoYXNuJ3QgY3Jhc2hlZCwg
YnV0IHRoZSBYU0wgdHJhbnNmb3JtYXRpb24gaGFzIGZhaWxlZC48L2Rpdj4KKzwvYm9keT4KKzwv
aHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3Jlc291cmNlcy9hbGxvdy1j
cm9zcy1vcmlnaW4taGVhZGVyLmNnaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3hzbC9yZXNvdXJjZXMvYWxsb3ctY3Jvc3Mtb3JpZ2luLWhlYWRlci5jZ2kJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMvYWxsb3ctY3Jvc3Mt
b3JpZ2luLWhlYWRlci5jZ2kJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKKyMhL3Vzci9i
aW4vcGVybCAtdwordXNlIHN0cmljdDsKKworcHJpbnQgIkNvbnRlbnQtVHlwZTogYXBwbGljYXRp
b24veG1sXG4iOworcHJpbnQgIkNhY2hlLUNvbnRyb2w6IG5vLWNhY2hlLCBuby1zdG9yZVxuIjsK
K3ByaW50ICJBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW46ICpcblxuIjsKKworbXkgJGZpbGVu
YW1lID0gJEVOVnsiUVVFUllfU1RSSU5HIn07CitvcGVuIEZJTEUsICRmaWxlbmFtZSBvciBkaWU7
CitwcmludCA8RklMRT47CitjbG9zZSBGSUxFOwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy94c2wvcmVzb3VyY2VzL3RyYW5zZm9ybS1mcmFtZWQtc3ViZnJhbWUxLnhodG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3Jlc291cmNlcy90cmFuc2Zvcm0tZnJh
bWVkLXN1YmZyYW1lMS54aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVz
dHMveHNsL3Jlc291cmNlcy90cmFuc2Zvcm0tZnJhbWVkLXN1YmZyYW1lMS54aHRtbAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwyNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRm
LTgiPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTiIg
Imh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMTEvRFREL3hodG1sMTEuZHRkIj4KKzxodG1sIHht
bG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iPgorPGhlYWQ+
CisgICAgPHRpdGxlPnhzbCBpbXBvcnQgdGVzdDwvdGl0bGU+CisgICAgPHNjcmlwdCB0eXBlPSJ0
ZXh0L2phdmFzY3JpcHQiPjwhW0NEQVRBWworICAgICAgICB2YXIgeHNsdFN0ciA9CisgICAgICAg
ICAgICAnPHhzbDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCInICsKKyAgICAgICAgICAgICcgIHht
bG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIicgKworICAgICAg
ICAgICAgJyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPicgKworICAgICAg
ICAgICAgJzx4c2w6aW1wb3J0IGhyZWY9Inhoci1kb2MtaW1wb3J0ZWQueHNsIiAvPicgKworICAg
ICAgICAgICAgJzx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii9yb290Ij4nICsKKyAgICAgICAgICAgICcg
ICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9IndvcmtzIiAvPicgKworICAgICAgICAgICAgJzwv
eHNsOnRlbXBsYXRlPicgKworICAgICAgICAgICAgJzwveHNsOnN0eWxlc2hlZXQ+JzsKKworICAg
ICAgICB2YXIgcGFyc2VyID0gbmV3IERPTVBhcnNlcigpOworICAgICAgICB2YXIgeHNsdERvYyA9
IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoeHNsdFN0ciwgImFwcGxpY2F0aW9uL3htbCIpOworICAg
IF1dPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CitzdWJmcmFtZSAxCis8L2JvZHk+Cis8L2h0
bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMvdHJhbnNmb3Jt
LWZyYW1lZC1zdWJmcmFtZTIueGh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy94c2wvcmVzb3VyY2VzL3RyYW5zZm9ybS1mcmFtZWQtc3ViZnJhbWUyLnhodG1sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL3RyYW5zZm9y
bS1mcmFtZWQtc3ViZnJhbWUyLnhodG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACis8
P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCFET0NUWVBFIGh0bWwgUFVC
TElDICItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0
bWwxMS9EVEQveGh0bWwxMS5kdGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5
OTkveGh0bWwiIHhtbDpsYW5nPSJlbiI+Cis8aGVhZD4KKyAgICA8dGl0bGU+eHNsIGltcG9ydCB0
ZXN0PC90aXRsZT4KKzwvaGVhZD4KKzxib2R5Pgorc3ViZnJhbWUgMgorPC9ib2R5PgorPC9odG1s
PgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL3hoci1kb2MtY3Jv
c3Mtb3JpZ2luLnhzbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9y
ZXNvdXJjZXMveGhyLWRvYy1jcm9zcy1vcmlnaW4ueHNsCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL3hoci1kb2MtY3Jvc3Mtb3JpZ2luLnhzbAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGlu
Zz0idXRmLTgiPz4KKzx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiCisgIHhtbG5zOnhzbD0i
aHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgorICB4bWxucz0iaHR0cDovL3d3
dy53My5vcmcvMTk5OS94aHRtbCI+CisKKzx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9sb2NhbGhv
c3Q6ODAwMC94c2wvcmVzb3VyY2VzL3hoci1kb2MtaW1wb3J0ZWQueHNsIiAvPgorCis8eHNsOnRl
bXBsYXRlIG1hdGNoPSIvcm9vdCI+CisgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9Indvcmtz
IiAvPgorPC94c2w6dGVtcGxhdGU+CisKKzwveHNsOnN0eWxlc2hlZXQ+CkluZGV4OiBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMveGhyLWRvYy1pbXBvcnRlZC54c2wKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL3hoci1kb2MtaW1w
b3J0ZWQueHNsCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvcmVz
b3VyY2VzL3hoci1kb2MtaW1wb3J0ZWQueHNsCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0IEBA
Cis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPHhzbDpzdHlsZXNoZWV0
IHZlcnNpb249IjEuMCIKKyAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9U
cmFuc2Zvcm0iCisgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKworPHhz
bDp0ZW1wbGF0ZSBtYXRjaD0iL3Jvb3QiPgorICAgIDxkaXYgY2xhc3M9ImRlZmF1bHQiPkZBSUw6
IEluY29ycmVjdCB0cmFuc2Zvcm1hdGlvbi48L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNs
OnRlbXBsYXRlIG5hbWU9IndvcmtzIj4KKyAgICA8ZGl2IGNsYXNzPSJvdmVycmlkZGVuIj5TVUND
RVNTPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPC94c2w6c3R5bGVzaGVldD4KSW5kZXg6IExh
eW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3Jlc291cmNlcy94aHItZG9jLnhtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMveGhyLWRvYy54bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMveGhyLWRv
Yy54bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBl
bmNvZGluZz0idXRmLTgiPz4KKzw/eG1sLXN0eWxlc2hlZXQgdHlwZT0idGV4dC94c2wiIGhyZWY9
Inhoci1kb2MueHNsIj8+Cis8cm9vdC8+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hz
bC9yZXNvdXJjZXMveGhyLWRvYy54c2wKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy94c2wvcmVzb3VyY2VzL3hoci1kb2MueHNsCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL3hoci1kb2MueHNsCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDEyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPHhz
bDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCIKKyAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9y
Zy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3ho
dG1sIj4KKworPHhzbDppbXBvcnQgaHJlZj0ieGhyLWRvYy1pbXBvcnRlZC54c2wiIC8+CisKKzx4
c2w6dGVtcGxhdGUgbWF0Y2g9Ii9yb290Ij4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0i
d29ya3MiIC8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPC94c2w6c3R5bGVzaGVldD4K
</data>
<flag name="review"
          id="45538"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59361</attachid>
            <date>2010-06-22 04:42:17 -0700</date>
            <delta_ts>2010-10-06 08:47:44 -0700</delta_ts>
            <desc>New proposed patch</desc>
            <filename>bug10313_0622.patch</filename>
            <type>text/plain</type>
            <size>48092</size>
            <attacher name="Andreas Wictor">andreas.wictor</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTE3NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzcgQEAKKzIwMTAtMDYtMjIgIEFuZHJlYXMgV2ljdG9yICA8YW5kcmVhcy53aWN0
b3JAeGNlcmlvbi5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgeHNsOmltcG9ydCBhbmQgZG9jdW1lbnQoKSBkb24ndCB3b3JrIGluIHN0eWxlc2hl
ZXRzIGxvYWRlZCB2aWEgWE1MSHR0cFJlcXVlc3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzEzCisKKyAgICAgICAgSW50cm9kdWNlZCB0aGUgY29u
Y2VwdCBvZiBhICJvcmlnaW4gZG9jdW1lbnQiIHJlZmVyZW5jZSBvbiBmcmFtZWxlc3MKKyAgICAg
ICAgZG9jdW1lbnRzIGNyZWF0ZWQgYnkgWE1MSHR0cFJlcXVlc3QsIGRvY3VtZW50LmltcGxlbWVu
dGF0aW9uLmNyZWF0ZURvY3VtZW50LAorICAgICAgICBET01QYXJzZXIucGFyc2VGcm9tU3RyaW5n
IGFuZCBYU0xUUHJvY2Vzc29yLnRyYW5zZm9ybVRvRG9jdW1lbnQuCisgICAgICAgIFRoaXMgbWFr
ZXMgaXQgcG9zc2libGUgZm9yIGZyYW1lbGVzcyBkb2N1bWVudHMgdG8gYWNjZXNzIHN1YnJlc291
cmNlcy4KKworICAgICAgICBUZXN0czogZmFzdC94c2wvdHJhbnNmb3JtLWRvY2ltcGwtZG9jLnho
dG1sCisgICAgICAgICAgICAgICBmYXN0L3hzbC90cmFuc2Zvcm0tZG9tcGFyc2VyLWRvYy54aHRt
bAorICAgICAgICAgICAgICAgZmFzdC94c2wvdHJhbnNmb3JtLXRyYW5zZm9ybWVkLWRvYy54aHRt
bAorICAgICAgICAgICAgICAgaHR0cC90ZXN0cy94c2wvdHJhbnNmb3JtLWZyYW1lZC1kb2MueGh0
bWwKKyAgICAgICAgICAgICAgIGh0dHAvdGVzdHMveHNsL3RyYW5zZm9ybS14aHItZG9jLWNyb3Nz
LW9yaWdpbi54aHRtbAorICAgICAgICAgICAgICAgaHR0cC90ZXN0cy94c2wvdHJhbnNmb3JtLXho
ci1kb2MtZnJvbS1hbGxvd2VkLWNyb3NzLW9yaWdpbi54aHRtbAorCisgICAgICAgICogYmluZGlu
Z3MvanMvSlNYU0xUUHJvY2Vzc29yQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTWFNM
VFByb2Nlc3NvckNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1hTTFRQcm9jZXNzb3IpOgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFhTTFRQcm9jZXNzb3JDdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VjhYU0xUUHJvY2Vzc29yOjpjb25zdHJ1Y3RvckNhbGxiYWNrKToKKyAgICAg
ICAgKiBkb20vRE9NSW1wbGVtZW50YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NSW1w
bGVtZW50YXRpb246OkRPTUltcGxlbWVudGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUlt
cGxlbWVudGF0aW9uOjpjcmVhdGVEb2N1bWVudCk6CisgICAgICAgICAtIFJ1biBzZXRPcmlnaW5E
b2t1bWVudCBvbiB0aGUgcmVzdWx0aW5nIGRvY3VtZW50LgorICAgICAgICAqIGRvbS9ET01JbXBs
ZW1lbnRhdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6RE9NSW1wbGVtZW50YXRpb246OmNyZWF0
ZSk6CisgICAgICAgICogZG9tL0RPTUltcGxlbWVudGF0aW9uLmlkbDoKKyAgICAgICAgKiBkb20v
RG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmltcGxlbWVudGF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzZXRPcmlnaW5Eb2N1bWVudCk6CisgICAg
ICAgICAtIFRoaXMgZnVuY3Rpb24gc3RvcmVzIGEgcmVmZXJlbmNlIHRvIHRoZSBkb2N1bWVudCB3
aGVyZSB0aGlzIGRvY3VtZW50CisgICAgICAgICAgIG9yaWdpbmF0ZWQgZnJvbS4gVGhpcyBpcyB1
c2VkIGZvciBmcmFtZWxlc3MgZG9jdW1lbnRzLCBzbyB0aGF0IHdlIGNhbgorICAgICAgICAgICBm
aW5kIGEgZnJhbWUgd2hlbiB3ZSBhcmUgbG9hZGluZyBzdWJyZXNvdXJjZXMuIEFsc28sIGJlY2F1
c2UgZnJhbWVsZXNzCisgICAgICAgICAgIGRvY3VtZW50cyBkb24ndCBnZXQgYSBTZWN1cml0eU9y
aWdpbiBhbmQgYSBjb29raWVVUkwgd2hlbiBjb25zdHJ1Y3RlZCwKKyAgICAgICAgICAgd2UgbmVl
ZCB0byBzZXQgdGhlc2UgaGVyZSB0byBiZSBhYmxlIHRvIGxvYWQgc3VicmVzb3VyY2VzLgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmZpbmRGcmFtZUZvclN1YnJlc291cmNlTG9hZHMpOgor
ICAgICAgICAgLSBSZXR1cm5zIGEgZnJhbWUgZnJvbSBlaXRoZXIgdGhlIGRvY3VtZW50IG9yIHRo
ZSBkb2N1bWVudCBpdCBvcmlnaW5hdGVkIGZyb20uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dDo6YXBwbHlYU0xUcmFuc2Zvcm0pOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnQ6Om9yaWdpbkRvY3VtZW50KToKKyAgICAgICAgKiBsb2FkZXIv
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
VGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlcXVlc3QpOgorICAgICAgICAgLSBVc2UgdGhlIG5ldyBm
aW5kRnJhbWVGb3JTdWJyZXNvdXJjZUxvYWRzIG1ldGhvZCBvbiBkb2N1bWVudHMuCisgICAgICAg
ICogeG1sL0RPTVBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01QYXJzZXI6OkRPTVBh
cnNlcik6CisgICAgICAgIChXZWJDb3JlOjpET01QYXJzZXI6OnBhcnNlRnJvbVN0cmluZyk6Cisg
ICAgICAgICAtIFJ1biBzZXRPcmlnaW5Eb2t1bWVudCBvbiB0aGUgcmVzdWx0aW5nIGRvY3VtZW50
LgorICAgICAgICAqIHhtbC9ET01QYXJzZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVBhcnNl
cjo6Y3JlYXRlKToKKyAgICAgICAgKiB4bWwvRE9NUGFyc2VyLmlkbDoKKyAgICAgICAgKiB4bWwv
WE1MSHR0cFJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnJl
c3BvbnNlWE1MKToKKyAgICAgICAgIC0gUnVuIHNldE9yaWdpbkRva3VtZW50IG9uIHRoZSByZXN1
bHRpbmcgZG9jdW1lbnQuCisgICAgICAgICogeG1sL1hTTEltcG9ydFJ1bGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6WFNMSW1wb3J0UnVsZTo6bG9hZFNoZWV0KToKKyAgICAgICAgIC0gTG9hZCBp
bXBvcnRlZCBkb2N1bWVudHMgc3luY2hyb25vdXNseSBpZiBpbnZva2VkIGJ5IGphdmFzY3JpcHQK
KyAgICAgICAgICAgYW5kIHVzZSBiYXNlIFVSTCBmcm9tIHRoZSBkb2N1bWVudCB0aGUgcm9vdCBz
dHlsZXNoZWV0IG9yaWdpbmF0ZWQKKyAgICAgICAgICAgZnJvbSB3aGVuIHBhcmVudCBzdHlsZXNo
ZWV0IGRvZXNuJ3QgaGF2ZSBhIGZpbmFsIFVSTC4KKyAgICAgICAgKFdlYkNvcmU6OlhTTEltcG9y
dFJ1bGU6OmZpbmlzaExvYWRpbmdTaGVldEFzeW5jaHJvbm91c2x5KToKKyAgICAgICAgKFdlYkNv
cmU6OlhTTEltcG9ydFJ1bGU6OmZpbmlzaExvYWRpbmdTaGVldFN5bmNocm9ub3VzbHkpOgorICAg
ICAgICAqIHhtbC9YU0xJbXBvcnRSdWxlLmg6CisgICAgICAgICogeG1sL1hTTFRQcm9jZXNzb3Iu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6WFNMVFByb2Nlc3Nvcjo6WFNMVFByb2Nlc3Nvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpYU0xUUHJvY2Vzc29yOjpjcmVhdGVEb2N1bWVudEZyb21Tb3VyY2Up
OgorICAgICAgICAgLSBSdW4gc2V0T3JpZ2luRG9rdW1lbnQgb24gdGhlIHJlc3VsdGluZyBkb2N1
bWVudC4KKyAgICAgICAgKiB4bWwvWFNMVFByb2Nlc3Nvci5oOgorICAgICAgICAoV2ViQ29yZTo6
WFNMVFByb2Nlc3Nvcjo6Y3JlYXRlKToKKyAgICAgICAgKiB4bWwvWFNMVFByb2Nlc3NvckxpYnhz
bHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZG9jTG9hZGVyRnVuYyk6CisgICAgICAgICAtIFVz
ZSB0aGUgbmV3IGZpbmRGcmFtZUZvclN1YnJlc291cmNlTG9hZHMgbWV0aG9kIG9uIGRvY3VtZW50
cy4KKwogMjAxMC0wNi0xNCAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgog
CiAgICAgICAgIE5vIHJldmlldy4gR1RLIGJ1aWxkIGZpeC4KSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNYU0xUUHJvY2Vzc29yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTWFNMVFByb2Nlc3NvckN1c3RvbS5jcHAJKHJldmlzaW9uIDYxMTc3KQorKysg
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hTTFRQcm9jZXNzb3JDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNs
dWRlICJYU0xUUHJvY2Vzc29yLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVk
ZSA8cnVudGltZS9FcnJvci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkBAIC0xMTksNyAr
MTIwLDEyIEBAIEpTVmFsdWUgSlNYU0xUUHJvY2Vzc29yOjpyZW1vdmVQYXJhbWV0ZXIKIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNYU0xUUHJvY2Vzc29yQ29uc3RydWN0b3I6OmNvbnN0
cnVjdEpTWFNMVFByb2Nlc3NvcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNYU0xUUHJvY2Vz
c29yQ29uc3RydWN0b3IqIGpzQ29uc3RydWN0b3IgPSBzdGF0aWNfY2FzdDxKU1hTTFRQcm9jZXNz
b3JDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKENSRUFURV9ET01fT0JKRUNUX1dSQVBQRVIoZXhlYywganNDb25zdHJ1Y3Rvci0+Z2xvYmFs
T2JqZWN0KCksIFhTTFRQcm9jZXNzb3IsIFhTTFRQcm9jZXNzb3I6OmNyZWF0ZSgpLmdldCgpKSk7
CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IGpzQ29uc3RydWN0b3ItPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlUmVmZXJlbmNlRXJyb3IoZXhlYywgIlhTTFRQcm9j
ZXNzb3IgY29uc3RydWN0b3IgYXNzb2NpYXRlZCBkb2N1bWVudCBpcyB1bmF2YWlsYWJsZSIpKTsK
KworICAgIFJlZlB0cjxYU0xUUHJvY2Vzc29yPiBwcm9jZXNzb3IgPSBYU0xUUHJvY2Vzc29yOjpj
cmVhdGUoY29udGV4dCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShDUkVBVEVfRE9NX09C
SkVDVF9XUkFQUEVSKGV4ZWMsIGpzQ29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLCBYU0xUUHJv
Y2Vzc29yLCBwcm9jZXNzb3IuZ2V0KCkpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYU0xUUHJvY2Vzc29yQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhTTFRQcm9jZXNz
b3JDdXN0b20uY3BwCShyZXZpc2lvbiA2MTE3NykKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4WFNMVFByb2Nlc3NvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4WFNMVFBy
b2Nlc3Nvcjo6Y29uc3RydWN0b3JDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQog
ewogICAgIElOQ19TVEFUUygiRE9NLlhTTFRQcm9jZXNzb3IuQ29uc3RydWN0b3IiKTsKLSAgICBy
ZXR1cm4gVjhQcm94eTo6Y29uc3RydWN0RE9NT2JqZWN0PFhTTFRQcm9jZXNzb3I+KGFyZ3MsICZp
bmZvKTsKKyAgICByZXR1cm4gVjhQcm94eTo6Y29uc3RydWN0RE9NT2JqZWN0V2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ8WFNMVFByb2Nlc3Nvcj4oYXJncywgJmluZm8pOwogfQogCiAKSW5kZXg6
IFdlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAJKHJldmlzaW9uIDYxMTc3KQorKysgV2ViQ29yZS9k
b20vRE9NSW1wbGVtZW50YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2MywxMiBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK0RPTUltcGxlbWVudGF0aW9uOjpET01JbXBsZW1l
bnRhdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQoreworICAgIGlmIChjb250
ZXh0ICYmIGNvbnRleHQtPmlzRG9jdW1lbnQoKSkKKyAgICAgICAgbV9vcmlnaW5Eb2N1bWVudCA9
IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4dCk7Cit9CisKICNpZiBFTkFCTEUoU1ZHKQog
CiB0eXBlZGVmIEhhc2hTZXQ8U3RyaW5nLCBDYXNlRm9sZGluZ0hhc2g+IEZlYXR1cmVTZXQ7CkBA
IC0yNTYsNiArMjYyLDkgQEAgUGFzc1JlZlB0cjxEb2N1bWVudD4gRE9NSW1wbGVtZW50YXRpb246
OgogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKKyAgICBpZiAobV9vcmlnaW5Eb2N1bWVudCkK
KyAgICAgICAgZG9jLT5zZXRPcmlnaW5Eb2N1bWVudChtX29yaWdpbkRvY3VtZW50KTsKKwogICAg
IGlmIChkb2N0eXBlKQogICAgICAgICBkb2MtPmFkZENoaWxkKGRvY3R5cGUpOwogICAgIGlmIChk
b2N1bWVudEVsZW1lbnQpCkluZGV4OiBXZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmgJKHJldmlzaW9uIDYx
MTc3KQorKysgV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24uaAkod29ya2luZyBjb3B5KQpA
QCAtMjQsMjggKzI0LDIzIEBACiAjaWZuZGVmIERPTUltcGxlbWVudGF0aW9uX2gKICNkZWZpbmUg
RE9NSW1wbGVtZW50YXRpb25faAogCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotY2xhc3MgQ1NTU3R5bGVTaGVldDsKLWNsYXNzIERvY3VtZW50OwotY2xh
c3MgRG9jdW1lbnRUeXBlOwotY2xhc3MgRnJhbWU7Ci1jbGFzcyBIVE1MRG9jdW1lbnQ7Ci1jbGFz
cyBTdHJpbmc7Ci0KIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKIGNsYXNzIERPTUltcGxl
bWVudGF0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8RE9NSW1wbGVtZW50YXRpb24+IHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxET01JbXBsZW1lbnRhdGlvbj4gY3JlYXRlKCkgeyBy
ZXR1cm4gYWRvcHRSZWYobmV3IERPTUltcGxlbWVudGF0aW9uKTsgfQorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPERPTUltcGxlbWVudGF0aW9uPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRE9NSW1wbGVtZW50
YXRpb24oY29udGV4dCkpOworICAgIH0KIAogICAgIC8vIERPTSBtZXRob2RzICYgYXR0cmlidXRl
cyBmb3IgRE9NSW1wbGVtZW50YXRpb24KICAgICBzdGF0aWMgYm9vbCBoYXNGZWF0dXJlKGNvbnN0
IFN0cmluZyYgZmVhdHVyZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKTsKICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxEb2N1bWVudFR5cGU+IGNyZWF0ZURvY3VtZW50VHlwZShjb25zdCBTdHJpbmcmIHF1
YWxpZmllZE5hbWUsIGNvbnN0IFN0cmluZyYgcHVibGljSWQsIGNvbnN0IFN0cmluZyAmc3lzdGVt
SWQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxEb2N1bWVudD4gY3Jl
YXRlRG9jdW1lbnQoY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IFN0cmluZyYgcXVh
bGlmaWVkTmFtZSwgRG9jdW1lbnRUeXBlKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQ
dHI8RG9jdW1lbnQ+IGNyZWF0ZURvY3VtZW50KGNvbnN0IFN0cmluZyYgbmFtZXNwYWNlVVJJLCBj
b25zdCBTdHJpbmcmIHF1YWxpZmllZE5hbWUsIERvY3VtZW50VHlwZSosIEV4Y2VwdGlvbkNvZGUm
KTsKIAogICAgIERPTUltcGxlbWVudGF0aW9uKiBnZXRJbnRlcmZhY2UoY29uc3QgU3RyaW5nJiBm
ZWF0dXJlKTsKIApAQCAtNjIsNyArNTcsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgaXNU
ZXh0TUlNRVR5cGUoY29uc3QgU3RyaW5nJiBNSU1FVHlwZSk7CiAKIHByaXZhdGU6Ci0gICAgRE9N
SW1wbGVtZW50YXRpb24oKSB7IH0KKyAgICBET01JbXBsZW1lbnRhdGlvbihTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0KTsKKworICAgIFJlZlB0cjxEb2N1bWVudD4gbV9vcmlnaW5Eb2N1
bWVudDsKIH07CiAKIH0gLy9uYW1lc3BhY2UKSW5kZXg6IFdlYkNvcmUvZG9tL0RPTUltcGxlbWVu
dGF0aW9uLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5p
ZGwJKHJldmlzaW9uIDYxMTc3KQorKysgV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24uaWRs
CSh3b3JraW5nIGNvcHkpCkBAIC0yMCw3ICsyMCw3IEBACiAKIG1vZHVsZSBjb3JlIHsKIAotICAg
IGludGVyZmFjZSBET01JbXBsZW1lbnRhdGlvbiB7CisgICAgaW50ZXJmYWNlIFtDYWxsV2l0aD1T
Y3JpcHRFeGVjdXRpb25Db250ZXh0XSBET01JbXBsZW1lbnRhdGlvbiB7CiAKICAgICAgICAgLy8g
RE9NIExldmVsIDEKIApJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gNjExNzcpCisrKyBXZWJDb3Jl
L2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwNywxMCArNjA3LDEwIEBAIHZv
aWQgRG9jdW1lbnQ6OnNldERvY1R5cGUoUGFzc1JlZlB0cjxEb2MKICAgICBkZXRlcm1pbmVQYXJz
ZU1vZGUoKTsKIH0KIAotRE9NSW1wbGVtZW50YXRpb24qIERvY3VtZW50OjppbXBsZW1lbnRhdGlv
bigpIGNvbnN0CitET01JbXBsZW1lbnRhdGlvbiogRG9jdW1lbnQ6OmltcGxlbWVudGF0aW9uKCkK
IHsKICAgICBpZiAoIW1faW1wbGVtZW50YXRpb24pCi0gICAgICAgIG1faW1wbGVtZW50YXRpb24g
PSBET01JbXBsZW1lbnRhdGlvbjo6Y3JlYXRlKCk7CisgICAgICAgIG1faW1wbGVtZW50YXRpb24g
PSBET01JbXBsZW1lbnRhdGlvbjo6Y3JlYXRlKHRoaXMpOwogICAgIHJldHVybiBtX2ltcGxlbWVu
dGF0aW9uLmdldCgpOwogfQogCkBAIC0xMjczLDYgKzEyNzMsMzUgQEAgU2V0dGluZ3MqIERvY3Vt
ZW50OjpzZXR0aW5ncygpIGNvbnN0CiAgICAgcmV0dXJuIG1fZnJhbWUgPyBtX2ZyYW1lLT5zZXR0
aW5ncygpIDogMDsKIH0KIAordm9pZCBEb2N1bWVudDo6c2V0T3JpZ2luRG9jdW1lbnQoUGFzc1Jl
ZlB0cjxEb2N1bWVudD4gb3JpZ2luRG9jdW1lbnQpCit7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBz
dG9yZXMgYSByZWZlcmVuY2UgdG8gdGhlIGRvY3VtZW50IHdoZXJlIHRoaXMgZG9jdW1lbnQKKyAg
ICAvLyBvcmlnaW5hdGVkIGZyb20uIFRoaXMgaXMgdXNlZCBmb3IgZnJhbWVsZXNzIGRvY3VtZW50
cywgc28gdGhhdCB3ZSBjYW4KKyAgICAvLyBmaW5kIGEgZnJhbWUgd2hlbiB3ZSBhcmUgbG9hZGlu
ZyBzdWJyZXNvdXJjZXMuIEFsc28sIGJlY2F1c2UgZnJhbWVsZXNzCisgICAgLy8gZG9jdW1lbnRz
IGRvbid0IGdldCBhIFNlY3VyaXR5T3JpZ2luIGFuZCBhIGNvb2tpZVVSTCB3aGVuIGNvbnN0cnVj
dGVkLAorICAgIC8vIHdlIG5lZWQgdG8gc2V0IHRoZXNlIGhlcmUgdG8gYmUgYWJsZSB0byBsb2Fk
IHN1YnJlc291cmNlcy4KKworICAgIEFTU0VSVChvcmlnaW5Eb2N1bWVudCk7CisgICAgbV9vcmln
aW5Eb2N1bWVudCA9IG9yaWdpbkRvY3VtZW50OworCisgICAgaWYgKCFtX3VybC5pc0VtcHR5KCkp
IHsKKyAgICAgICAgbV9jb29raWVVUkwgPSBtX3VybDsKKyAgICAgICAgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dDo6c2V0U2VjdXJpdHlPcmlnaW4oU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShtX3VybCkp
OworICAgIH0gZWxzZSB7CisgICAgICAgIG1fY29va2llVVJMID0gbV9vcmlnaW5Eb2N1bWVudC0+
Y29va2llVVJMKCk7CisgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnNldFNlY3VyaXR5
T3JpZ2luKG1fb3JpZ2luRG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCkpOworICAgIH0KK30KKwor
RnJhbWUqIERvY3VtZW50OjpmaW5kRnJhbWVGb3JTdWJyZXNvdXJjZUxvYWRzKCkKK3sKKyAgICBm
b3IgKERvY3VtZW50KiBkb2N1bWVudCA9IHRoaXM7IGRvY3VtZW50OyBkb2N1bWVudCA9IGRvY3Vt
ZW50LT5vcmlnaW5Eb2N1bWVudCgpKSB7CisgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1
bWVudC0+ZnJhbWUoKSkKKyAgICAgICAgICAgIHJldHVybiBmcmFtZTsKKyAgICB9CisgICAgcmV0
dXJuIDA7Cit9CisKIFBhc3NSZWZQdHI8UmFuZ2U+IERvY3VtZW50OjpjcmVhdGVSYW5nZSgpCiB7
CiAgICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUodGhpcyk7CkBAIC00MTU3LDcgKzQxODYsNyBAQCB2
b2lkIERvY3VtZW50OjpzZXRNYXJrZXJzQWN0aXZlKE5vZGUqIG5vCiAKIHZvaWQgRG9jdW1lbnQ6
OmFwcGx5WFNMVHJhbnNmb3JtKFByb2Nlc3NpbmdJbnN0cnVjdGlvbiogcGkpCiB7Ci0gICAgUmVm
UHRyPFhTTFRQcm9jZXNzb3I+IHByb2Nlc3NvciA9IFhTTFRQcm9jZXNzb3I6OmNyZWF0ZSgpOwor
ICAgIFJlZlB0cjxYU0xUUHJvY2Vzc29yPiBwcm9jZXNzb3IgPSBYU0xUUHJvY2Vzc29yOjpjcmVh
dGUodGhpcyk7CiAgICAgcHJvY2Vzc29yLT5zZXRYU0xTdHlsZVNoZWV0KHN0YXRpY19jYXN0PFhT
TFN0eWxlU2hlZXQqPihwaS0+c2hlZXQoKSkpOwogICAgIFN0cmluZyByZXN1bHRNSU1FVHlwZTsK
ICAgICBTdHJpbmcgbmV3U291cmNlOwpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiA2MTE3NykKKysrIFdl
YkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3NCw3ICsyNzQsNyBAQCBw
dWJsaWM6CiAKICAgICBEb2N1bWVudFR5cGUqIGRvY3R5cGUoKSBjb25zdCB7IHJldHVybiBtX2Rv
Y1R5cGUuZ2V0KCk7IH0KIAotICAgIERPTUltcGxlbWVudGF0aW9uKiBpbXBsZW1lbnRhdGlvbigp
IGNvbnN0OworICAgIERPTUltcGxlbWVudGF0aW9uKiBpbXBsZW1lbnRhdGlvbigpOwogICAgIAog
ICAgIEVsZW1lbnQqIGRvY3VtZW50RWxlbWVudCgpIGNvbnN0CiAgICAgewpAQCAtNDY0LDYgKzQ2
NCwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0
b3JDb250cm9sbGVyKCkgY29uc3Q7IC8vIGNhbiBiZSBOVUxMCiAjZW5kaWYKIAorICAgIERvY3Vt
ZW50KiBvcmlnaW5Eb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luRG9jdW1lbnQuZ2V0
KCk7IH0KKyAgICB2b2lkIHNldE9yaWdpbkRvY3VtZW50KFBhc3NSZWZQdHI8RG9jdW1lbnQ+KTsK
KyAgICBGcmFtZSogZmluZEZyYW1lRm9yU3VicmVzb3VyY2VMb2FkcygpOworCiAgICAgUGFzc1Jl
ZlB0cjxSYW5nZT4gY3JlYXRlUmFuZ2UoKTsKIAogICAgIFBhc3NSZWZQdHI8Tm9kZUl0ZXJhdG9y
PiBjcmVhdGVOb2RlSXRlcmF0b3IoTm9kZSogcm9vdCwgdW5zaWduZWQgd2hhdFRvU2hvdywKQEAg
LTEwMzcsNiArMTA0MSw3IEBAIHByaXZhdGU6CiAgICAgRnJhbWUqIG1fZnJhbWU7CiAgICAgT3du
UHRyPERvY0xvYWRlcj4gbV9kb2NMb2FkZXI7CiAgICAgT3duUHRyPERvY3VtZW50UGFyc2VyPiBt
X3BhcnNlcjsKKyAgICBSZWZQdHI8RG9jdW1lbnQ+IG1fb3JpZ2luRG9jdW1lbnQ7CiAgICAgYm9v
bCBtX3dlbGxGb3JtZWQ7CiAKICAgICAvLyBEb2N1bWVudCBVUkxzLgpJbmRleDogV2ViQ29yZS9s
b2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwCShyZXZpc2lvbiA2MTE3NykKKysr
IFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMyMSw4ICszMjEsOCBAQCB2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6bG9h
ZFJlcXVlCiAgICAgUmVzb3VyY2VFcnJvciBlcnJvcjsKICAgICBSZXNvdXJjZVJlc3BvbnNlIHJl
c3BvbnNlOwogICAgIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciA9IHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQgbG9uZz46Om1heCgpOwotICAgIGlmIChtX2RvY3VtZW50LT5mcmFtZSgpKQot
ICAgICAgICBpZGVudGlmaWVyID0gbV9kb2N1bWVudC0+ZnJhbWUoKS0+bG9hZGVyKCktPmxvYWRS
ZXNvdXJjZVN5bmNocm9ub3VzbHkocmVxdWVzdCwgc3RvcmVkQ3JlZGVudGlhbHMsIGVycm9yLCBy
ZXNwb25zZSwgZGF0YSk7CisgICAgaWYgKEZyYW1lKiBmcmFtZSA9IG1fZG9jdW1lbnQtPmZpbmRG
cmFtZUZvclN1YnJlc291cmNlTG9hZHMoKSkKKyAgICAgICAgaWRlbnRpZmllciA9IGZyYW1lLT5s
b2FkZXIoKS0+bG9hZFJlc291cmNlU3luY2hyb25vdXNseShyZXF1ZXN0LCBzdG9yZWRDcmVkZW50
aWFscywgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKIAogICAgIC8vIE5vIGV4Y2VwdGlvbiBmb3Ig
ZmlsZTovLy8gcmVzb3VyY2VzLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzQ5NjIyOTg+LgogICAgIC8v
IEFsc28sIGlmIHdlIGhhdmUgYW4gSFRUUCByZXNwb25zZSwgdGhlbiBpdCB3YXNuJ3QgYSBuZXR3
b3JrIGVycm9yIGluIGZhY3QuCkluZGV4OiBXZWJDb3JlL3htbC9ET01QYXJzZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUveG1sL0RPTVBhcnNlci5jcHAJKHJldmlzaW9uIDYxMTc3KQorKysg
V2ViQ29yZS94bWwvRE9NUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsMTIg
QEAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0RPTVBhcnNlcjo6RE9NUGFyc2VyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCit7
CisgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC0+aXNEb2N1bWVudCgpKQorICAgICAgICBtX29y
aWdpbkRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihjb250ZXh0KTsKK30KICAgICAK
IFBhc3NSZWZQdHI8RG9jdW1lbnQ+IERPTVBhcnNlcjo6cGFyc2VGcm9tU3RyaW5nKGNvbnN0IFN0
cmluZyYgc3RyLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKQogewpAQCAtMzEsNiArMzcsOSBA
QCBQYXNzUmVmUHRyPERvY3VtZW50PiBET01QYXJzZXI6OnBhcnNlRnJvCiAKICAgICBSZWZQdHI8
RG9jdW1lbnQ+IGRvYyA9IERPTUltcGxlbWVudGF0aW9uOjpjcmVhdGVEb2N1bWVudChjb250ZW50
VHlwZSwgMCwgZmFsc2UpOwogCisgICAgaWYgKG1fb3JpZ2luRG9jdW1lbnQpCisgICAgICAgIGRv
Yy0+c2V0T3JpZ2luRG9jdW1lbnQobV9vcmlnaW5Eb2N1bWVudCk7CisKICAgICBkb2MtPm9wZW4o
KTsKICAgICBkb2MtPndyaXRlKHN0cik7CiAgICAgZG9jLT5maW5pc2hQYXJzaW5nKCk7CkluZGV4
OiBXZWJDb3JlL3htbC9ET01QYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9ET01Q
YXJzZXIuaAkocmV2aXNpb24gNjExNzcpCisrKyBXZWJDb3JlL3htbC9ET01QYXJzZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMTksMjEgKzE5LDIzIEBACiAjaWZuZGVmIERPTVBhcnNlcl9oCiAjZGVm
aW5lIERPTVBhcnNlcl9oCiAKLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUg
IkRvY3VtZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIFN0cmluZzsK
ICAgICAKICAgICBjbGFzcyBET01QYXJzZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxET01QYXJzZXI+
IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPERPTVBhcnNlcj4gY3Jl
YXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IERPTVBhcnNlcik7IH0KLSAgICAgICAgCisgICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPERPTVBhcnNlcj4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgRE9NUGFyc2VyKGNvbnRleHQpKTsKKyAgICAgICAgfQorCiAgICAgICAgIFBhc3NSZWZQdHI8
RG9jdW1lbnQ+IHBhcnNlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0ciwgY29uc3QgU3RyaW5n
JiBjb250ZW50VHlwZSk7CiAgICAgICAgIAogICAgIHByaXZhdGU6Ci0gICAgICAgIERPTVBhcnNl
cigpIHsgfSAgICAgICAgCisgICAgICAgIERPTVBhcnNlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0KTsKKworICAgICAgICBSZWZQdHI8RG9jdW1lbnQ+IG1fb3JpZ2luRG9jdW1lbnQ7
CiAgICAgfTsKIAogfQpJbmRleDogV2ViQ29yZS94bWwvRE9NUGFyc2VyLmlkbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3htbC9ET01QYXJzZXIuaWRsCShyZXZpc2lvbiA2MTE3NykKKysrIFdlYkNv
cmUveG1sL0RPTVBhcnNlci5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTE4LDcgKzE4LDEwIEBACiAg
Ki8KIAogbW9kdWxlIHhwYXRoIHsKLSAgICBpbnRlcmZhY2UgW0NhbkJlQ29uc3RydWN0ZWRdIERP
TVBhcnNlciB7CisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ2FuQmVDb25zdHJ1Y3RlZCwKKyAg
ICAgICAgQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dAorICAgIF0gRE9NUGFyc2VyIHsK
ICAgICAgICAgRG9jdW1lbnQgcGFyc2VGcm9tU3RyaW5nKGluIERPTVN0cmluZyBzdHIsIGluIERP
TVN0cmluZyBjb250ZW50VHlwZSk7CiAgICAgfTsKIH0KSW5kZXg6IFdlYkNvcmUveG1sL1hNTEh0
dHBSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5j
cHAJKHJldmlzaW9uIDYxMTc3KQorKysgV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNDMsNiArMjQzLDcgQEAgRG9jdW1lbnQqIFhNTEh0dHBSZXF1ZXN0
OjpyZXNwb25zZVhNTCgpIAogICAgICAgICAgICAgbV9yZXNwb25zZVhNTCA9IERvY3VtZW50Ojpj
cmVhdGUoMCk7CiAgICAgICAgICAgICBtX3Jlc3BvbnNlWE1MLT5vcGVuKCk7CiAgICAgICAgICAg
ICBtX3Jlc3BvbnNlWE1MLT5zZXRVUkwobV91cmwpOworICAgICAgICAgICAgbV9yZXNwb25zZVhN
TC0+c2V0T3JpZ2luRG9jdW1lbnQoZG9jdW1lbnQoKSk7CiAgICAgICAgICAgICAvLyBGSVhNRTog
U2V0IExhc3QtTW9kaWZpZWQuCiAgICAgICAgICAgICBtX3Jlc3BvbnNlWE1MLT53cml0ZShTdHJp
bmcobV9yZXNwb25zZVRleHQpKTsKICAgICAgICAgICAgIG1fcmVzcG9uc2VYTUwtPmZpbmlzaFBh
cnNpbmcoKTsKSW5kZXg6IFdlYkNvcmUveG1sL1hTTEltcG9ydFJ1bGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUveG1sL1hTTEltcG9ydFJ1bGUuY3BwCShyZXZpc2lvbiA2MTE3NykKKysrIFdl
YkNvcmUveG1sL1hTTEltcG9ydFJ1bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiwx
MCBAQAogCiAjaW5jbHVkZSAiQ2FjaGVkWFNMU3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIkRvY0xv
YWRlci5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNs
dWRlICJSZXNvdXJjZUVycm9yLmgiCisjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgog
I2luY2x1ZGUgIlhTTFN0eWxlU2hlZXQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzcs
MzIgKzgxLDU3IEBAIGJvb2wgWFNMSW1wb3J0UnVsZTo6aXNMb2FkaW5nKCkKIAogdm9pZCBYU0xJ
bXBvcnRSdWxlOjpsb2FkU2hlZXQoKQogewotICAgIERvY0xvYWRlciogZG9jTG9hZGVyID0gMDsK
ICAgICBTdHlsZUJhc2UqIHJvb3QgPSB0aGlzOwogICAgIFN0eWxlQmFzZSogcGFyZW50OworCiAg
ICAgd2hpbGUgKChwYXJlbnQgPSByb290LT5wYXJlbnQoKSkpCiAgICAgICAgIHJvb3QgPSBwYXJl
bnQ7Ci0gICAgaWYgKHJvb3QtPmlzWFNMU3R5bGVTaGVldCgpKQotICAgICAgICBkb2NMb2FkZXIg
PSBzdGF0aWNfY2FzdDxYU0xTdHlsZVNoZWV0Kj4ocm9vdCktPmRvY0xvYWRlcigpOwotICAgIAot
ICAgIFN0cmluZyBhYnNIcmVmID0gbV9zdHJIcmVmOworCisgICAgQVNTRVJUKHJvb3QtPmlzWFNM
U3R5bGVTaGVldCgpKTsKKyAgICBYU0xTdHlsZVNoZWV0KiByb290U3R5bGVTaGVldCA9IHN0YXRp
Y19jYXN0PFhTTFN0eWxlU2hlZXQqPihyb290KTsKKyAgICBEb2NMb2FkZXIqIGRvY0xvYWRlciA9
IHJvb3RTdHlsZVNoZWV0LT5kb2NMb2FkZXIoKTsKKyAgICBOb2RlKiBvd25lck5vZGUgPSByb290
U3R5bGVTaGVldC0+b3duZXJOb2RlKCk7CisgICAgRG9jdW1lbnQqIG9yaWdpbkRvY3VtZW50ID0g
b3duZXJOb2RlID8gb3duZXJOb2RlLT5kb2N1bWVudCgpLT5vcmlnaW5Eb2N1bWVudCgpIDogMDsK
KwogICAgIFhTTFN0eWxlU2hlZXQqIHBhcmVudFNoZWV0ID0gcGFyZW50U3R5bGVTaGVldCgpOwor
ICAgIEFTU0VSVChwYXJlbnRTaGVldCk7CisKKyAgICBLVVJMIGFic0hyZWY7CiAgICAgaWYgKCFw
YXJlbnRTaGVldC0+ZmluYWxVUkwoKS5pc051bGwoKSkKLSAgICAgICAgLy8gdXNlIHBhcmVudCBz
dHlsZWhlZXQncyBVUkwgYXMgdGhlIGJhc2UgVVJMCi0gICAgICAgIGFic0hyZWYgPSBLVVJMKHBh
cmVudFNoZWV0LT5maW5hbFVSTCgpLCBtX3N0ckhyZWYpLnN0cmluZygpOwotICAgIAorICAgICAg
ICAvLyBVc2UgcGFyZW50IHN0eWxlaGVldCdzIFVSTCBhcyB0aGUgYmFzZSBVUkwuCisgICAgICAg
IGFic0hyZWYgPSBLVVJMKHBhcmVudFNoZWV0LT5maW5hbFVSTCgpLCBtX3N0ckhyZWYpOworICAg
IGVsc2UgaWYgKG9yaWdpbkRvY3VtZW50KQorICAgICAgICAvLyBXaGVuIHBhcmVudCBzdHlsZXNo
ZWV0IGRvZXNuJ3QgaGF2ZSBhIGZpbmFsIFVSTCwgdXNlIGJhc2UgVVJMIGZyb20gdGhlCisgICAg
ICAgIC8vIGRvY3VtZW50IHRoZSByb290IHN0eWxlc2hlZXQgb3JpZ2luYXRlZCBmcm9tLiBUaGlz
IGNhbiBoYXBwZW4gd2hlbiB0aGUKKyAgICAgICAgLy8gc3R5bGVzaGVldCBpcyBjcmVhdGVkIHdp
dGggRE9NUGFyc2VyLnBhcnNlRnJvbVN0cmluZygpLCBmb3IgZXhhbXBsZS4KKyAgICAgICAgYWJz
SHJlZiA9IG9yaWdpbkRvY3VtZW50LT5jb21wbGV0ZVVSTChtX3N0ckhyZWYpOworICAgIGVsc2UK
KyAgICAgICAgYWJzSHJlZiA9IEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBtX3N0ckhyZWYpOworCiAg
ICAgLy8gQ2hlY2sgZm9yIGEgY3ljbGUgaW4gb3VyIGltcG9ydCBjaGFpbi4gIElmIHdlIGVuY291
bnRlciBhIHN0eWxlc2hlZXQKICAgICAvLyBpbiBvdXIgcGFyZW50IGNoYWluIHdpdGggdGhlIHNh
bWUgVVJMLCB0aGVuIGp1c3QgYmFpbC4KICAgICBmb3IgKHBhcmVudCA9IHRoaXMtPnBhcmVudCgp
OyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50KCkpIHsKLSAgICAgICAgaWYgKHBhcmVu
dC0+aXNYU0xTdHlsZVNoZWV0KCkgJiYgYWJzSHJlZiA9PSBzdGF0aWNfY2FzdDxYU0xTdHlsZVNo
ZWV0Kj4ocGFyZW50KS0+ZmluYWxVUkwoKS5zdHJpbmcoKSkKKyAgICAgICAgaWYgKHBhcmVudC0+
aXNYU0xTdHlsZVNoZWV0KCkgJiYgYWJzSHJlZiA9PSBzdGF0aWNfY2FzdDxYU0xTdHlsZVNoZWV0
Kj4ocGFyZW50KS0+ZmluYWxVUkwoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
Ci0gICAgbV9jYWNoZWRTaGVldCA9IGRvY0xvYWRlci0+cmVxdWVzdFhTTFN0eWxlU2hlZXQoYWJz
SHJlZik7Ci0gICAgCisKKyAgICAvLyBXZSBuZWVkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gdHJh
bnNmb3JtYXRpb25zIHN0YXJ0ZWQgdmlhIGEgcHJvY2Vzc2luZworICAgIC8vIGluc3RydWN0aW9u
IGZyb20gdGhvc2Ugc3RhcnRlZCB2aWEgSmF2YXNjcmlwdCBhbmQgWFNMVFByb2Nlc3Nvci4gVGhv
c2UKKyAgICAvLyBzdGFydGVkIHZpYSBKYXZhc2NyaXB0IG11c3QgbG9hZCBzdWJyZXNvdXJjZXMg
c3luY2hyb25vdXNseSBvciB0aGV5CisgICAgLy8gd29uJ3QgYmUgcmVhZHkgd2hlbiBsaWJ4c2x0
IG5lZWRzIHRoZW0uCisgICAgaWYgKG93bmVyTm9kZSAmJiBvd25lck5vZGUtPm5vZGVUeXBlKCkg
PT0gTm9kZTo6UFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFKQorICAgICAgICBmaW5pc2hMb2Fk
aW5nU2hlZXRBc3luY2hyb25vdXNseShkb2NMb2FkZXIsIGFic0hyZWYpOworICAgIGVsc2UKKyAg
ICAgICAgZmluaXNoTG9hZGluZ1NoZWV0U3luY2hyb25vdXNseShkb2NMb2FkZXIsIGFic0hyZWYp
OworfQorCit2b2lkIFhTTEltcG9ydFJ1bGU6OmZpbmlzaExvYWRpbmdTaGVldEFzeW5jaHJvbm91
c2x5KERvY0xvYWRlciogZG9jTG9hZGVyLCBjb25zdCBLVVJMJiB1cmwpCit7CisgICAgbV9jYWNo
ZWRTaGVldCA9IGRvY0xvYWRlci0+cmVxdWVzdFhTTFN0eWxlU2hlZXQodXJsLnN0cmluZygpKTsK
KwogICAgIGlmIChtX2NhY2hlZFNoZWV0KSB7CiAgICAgICAgIG1fY2FjaGVkU2hlZXQtPmFkZENs
aWVudCh0aGlzKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gSWYgdGhlIGltcG9ydGVkIHNoZWV0
IGlzIGluIHRoZSBjYWNoZSwgdGhlbiBzZXRYU0xTdHlsZVNoZWV0IGdldHMgY2FsbGVkLAogICAg
ICAgICAvLyBhbmQgdGhlIHNoZWV0IGV2ZW4gZ2V0cyBwYXJzZWQgKHZpYSBwYXJzZVN0cmluZyku
ICBJbiB0aGlzIGNhc2Ugd2UgaGF2ZQogICAgICAgICAvLyBsb2FkZWQgKGV2ZW4gaWYgb3VyIHN1
YnJlc291cmNlcyBoYXZlbid0KSwgc28gaWYgd2UgaGF2ZSBhIHN0eWxlc2hlZXQgYWZ0ZXIKQEAg
LTExMiw2ICsxNDEsMzggQEAgdm9pZCBYU0xJbXBvcnRSdWxlOjpsb2FkU2hlZXQoKQogICAgIH0K
IH0KIAordm9pZCBYU0xJbXBvcnRSdWxlOjpmaW5pc2hMb2FkaW5nU2hlZXRTeW5jaHJvbm91c2x5
KERvY0xvYWRlciogZG9jTG9hZGVyLCBjb25zdCBLVVJMJiB1cmwpCit7CisgICAgUmVzb3VyY2VF
cnJvciBlcnJvcjsKKyAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOworICAgIFZlY3Rvcjxj
aGFyPiBkYXRhOworCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZG9jTG9hZGVyLT5kb2MoKTsK
KyAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZmluZEZyYW1lRm9yU3VicmVzb3VyY2VMb2Fk
cygpOworCisgICAgYm9vbCByZXF1ZXN0QWxsb3dlZCA9IGZyYW1lICYmIGRvY3VtZW50LT5zZWN1
cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHVybCk7CisgICAgaWYgKHJlcXVlc3RBbGxvd2VkKSB7
CisgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+bG9hZFJlc291cmNlU3luY2hyb25vdXNseSh1cmws
IEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsIGVycm9yLCByZXNwb25zZSwgZGF0YSk7CisgICAgICAg
IHJlcXVlc3RBbGxvd2VkID0gZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3Qo
cmVzcG9uc2UudXJsKCkpOworICAgIH0KKyAgICBpZiAoIXJlcXVlc3RBbGxvd2VkKSB7CisgICAg
ICAgIGRhdGEuY2xlYXIoKTsKKyAgICAgICAgZG9jTG9hZGVyLT5wcmludEFjY2Vzc0RlbmllZE1l
c3NhZ2UodXJsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghZXJyb3IuaXNO
dWxsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVy
PiBkZWNvZGVyID0gVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKCJ0ZXh0L3hzbCIpOworICAg
IFN0cmluZyBlbmNvZGluZyA9IHJlc3BvbnNlLnRleHRFbmNvZGluZ05hbWUoKTsKKyAgICBpZiAo
IWVuY29kaW5nLmlzTnVsbCgpKQorICAgICAgICBkZWNvZGVyLT5zZXRFbmNvZGluZyhlbmNvZGlu
ZywgVGV4dFJlc291cmNlRGVjb2Rlcjo6RW5jb2RpbmdGcm9tSFRUUEhlYWRlcik7CisKKyAgICBT
dHJpbmcgc2hlZXQoZGVjb2Rlci0+ZGVjb2RlKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSkpOwor
ICAgIHNldFhTTFN0eWxlU2hlZXQodXJsLnN0cmluZygpLCByZXNwb25zZS51cmwoKSwgc2hlZXQp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoWFNMVCkK
SW5kZXg6IFdlYkNvcmUveG1sL1hTTEltcG9ydFJ1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3htbC9YU0xJbXBvcnRSdWxlLmgJKHJldmlzaW9uIDYxMTc3KQorKysgV2ViQ29yZS94bWwvWFNM
SW1wb3J0UnVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCwxMCBAQCBwcml2YXRlOgog
CiAgICAgLy8gZnJvbSBDYWNoZWRSZXNvdXJjZUNsaWVudAogICAgIHZpcnR1YWwgdm9pZCBzZXRY
U0xTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgaHJlZiwgY29uc3QgS1VSTCYgYmFzZVVSTCwgY29u
c3QgU3RyaW5nJiBzaGVldCk7Ci0gICAgCisKKyAgICB2b2lkIGZpbmlzaExvYWRpbmdTaGVldEFz
eW5jaHJvbm91c2x5KERvY0xvYWRlciosIGNvbnN0IEtVUkwmKTsKKyAgICB2b2lkIGZpbmlzaExv
YWRpbmdTaGVldFN5bmNocm9ub3VzbHkoRG9jTG9hZGVyKiwgY29uc3QgS1VSTCYpOworCiAgICAg
U3RyaW5nIG1fc3RySHJlZjsKICAgICBSZWZQdHI8WFNMU3R5bGVTaGVldD4gbV9zdHlsZVNoZWV0
OwogICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFhTTFN0eWxlU2hlZXQ+IG1fY2FjaGVk
U2hlZXQ7CkluZGV4OiBXZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yLmNwcAkocmV2aXNpb24gNjExNzcpCisrKyBXZWJD
b3JlL3htbC9YU0xUUHJvY2Vzc29yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsMTIg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitYU0xUUHJvY2Vzc29yOjpYU0xUUHJvY2Vzc29y
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCit7CisgICAgaWYgKGNvbnRleHQgJiYg
Y29udGV4dC0+aXNEb2N1bWVudCgpKQorICAgICAgICBtX29yaWdpbkRvY3VtZW50ID0gc3RhdGlj
X2Nhc3Q8RG9jdW1lbnQqPihjb250ZXh0KTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIHRyYW5z
Zm9ybVRleHRTdHJpbmdUb1hIVE1MRG9jdW1lbnRTdHJpbmcoU3RyaW5nJiB0ZXh0KQogewogICAg
IC8vIE1vZGlmeSB0aGUgb3V0cHV0IHNvIHRoYXQgaXQgaXMgYSB3ZWxsLWZvcm1lZCBYSFRNTCBk
b2N1bWVudCB3aXRoIGEgPHByZT4gdGFnIGVuY2xvc2luZyB0aGUgdGV4dC4KQEAgLTgxLDcgKzg3
LDggQEAgUGFzc1JlZlB0cjxEb2N1bWVudD4gWFNMVFByb2Nlc3Nvcjo6Y3JlYQogICAgICAgICAg
ICAgdmlldy0+Y2xlYXIoKTsKICAgICAgICAgcmVzdWx0LT5zZXRUcmFuc2Zvcm1Tb3VyY2VEb2N1
bWVudChmcmFtZS0+ZG9jdW1lbnQoKSk7CiAgICAgICAgIGZyYW1lLT5zZXREb2N1bWVudChyZXN1
bHQpOwotICAgIH0KKyAgICB9IGVsc2UgaWYgKG1fb3JpZ2luRG9jdW1lbnQpCisgICAgICAgIHJl
c3VsdC0+c2V0T3JpZ2luRG9jdW1lbnQobV9vcmlnaW5Eb2N1bWVudCk7CiAKICAgICBpZiAoc291
cmNlSXNEb2N1bWVudCkKICAgICAgICAgcmVzdWx0LT5zZXRVUkwob3duZXJEb2N1bWVudC0+dXJs
KCkpOwpJbmRleDogV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuaAkocmV2aXNpb24gNjExNzcpCisrKyBXZWJDb3JlL3ht
bC9YU0xUUHJvY2Vzc29yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDEwIEBAIGNsYXNz
IERvY3VtZW50RnJhZ21lbnQ7CiAKIGNsYXNzIFhTTFRQcm9jZXNzb3IgOiBwdWJsaWMgUmVmQ291
bnRlZDxYU0xUUHJvY2Vzc29yPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8WFNM
VFByb2Nlc3Nvcj4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFhTTFRQcm9jZXNzb3Ip
OyB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8WFNMVFByb2Nlc3Nvcj4gY3JlYXRlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFhTTFRQcm9jZXNzb3IoY29udGV4dCkpOworICAgIH0KIAogICAgIHZvaWQgc2V0WFNMU3R5
bGVTaGVldChQYXNzUmVmUHRyPFhTTFN0eWxlU2hlZXQ+IHN0eWxlU2hlZXQpIHsgbV9zdHlsZXNo
ZWV0ID0gc3R5bGVTaGVldDsgfQogICAgIGJvb2wgdHJhbnNmb3JtVG9TdHJpbmcoTm9kZSogc291
cmNlLCBTdHJpbmcmIHJlc3VsdE1JTUVUeXBlLCBTdHJpbmcmIHJlc3VsdFN0cmluZywgU3RyaW5n
JiByZXN1bHRFbmNvZGluZyk7CkBAIC03Miw4ICs3NSw5IEBAIHB1YmxpYzoKICAgICB0eXBlZGVm
IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IFBhcmFtZXRlck1hcDsKIAogcHJpdmF0ZToKLSAgICBY
U0xUUHJvY2Vzc29yKCkgeyB9CisgICAgWFNMVFByb2Nlc3NvcihTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0KTsKIAorICAgIFJlZlB0cjxEb2N1bWVudD4gbV9vcmlnaW5Eb2N1bWVudDsK
ICAgICBSZWZQdHI8WFNMU3R5bGVTaGVldD4gbV9zdHlsZXNoZWV0OwogICAgIFJlZlB0cjxOb2Rl
PiBtX3N0eWxlc2hlZXRSb290Tm9kZTsKICAgICBQYXJhbWV0ZXJNYXAgbV9wYXJhbWV0ZXJzOwpJ
bmRleDogV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcAkocmV2aXNpb24gNjExNzcpCisr
KyBXZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yTGlieHNsdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExNywxMCArMTE3LDEzIEBAIHN0YXRpYyB4bWxEb2NQdHIgZG9jTG9hZGVyRnVuYyhjb25zdCB4
bWwKIAogICAgICAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKIAotICAgICAgICBib29sIHJlcXVlc3RB
bGxvd2VkID0gZ2xvYmFsRG9jTG9hZGVyLT5mcmFtZSgpICYmIGdsb2JhbERvY0xvYWRlci0+ZG9j
KCktPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QodXJsKTsKKyAgICAgICAgRG9jdW1lbnQq
IGRvY3VtZW50ID0gZ2xvYmFsRG9jTG9hZGVyLT5kb2MoKTsKKyAgICAgICAgRnJhbWUqIGZyYW1l
ID0gZG9jdW1lbnQtPmZpbmRGcmFtZUZvclN1YnJlc291cmNlTG9hZHMoKTsKKworICAgICAgICBi
b29sIHJlcXVlc3RBbGxvd2VkID0gZnJhbWUgJiYgZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCkt
PmNhblJlcXVlc3QodXJsKTsKICAgICAgICAgaWYgKHJlcXVlc3RBbGxvd2VkKSB7Ci0gICAgICAg
ICAgICBnbG9iYWxEb2NMb2FkZXItPmZyYW1lKCktPmxvYWRlcigpLT5sb2FkUmVzb3VyY2VTeW5j
aHJvbm91c2x5KHVybCwgQWxsb3dTdG9yZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNlLCBk
YXRhKTsKLSAgICAgICAgICAgIHJlcXVlc3RBbGxvd2VkID0gZ2xvYmFsRG9jTG9hZGVyLT5kb2Mo
KS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChyZXNwb25zZS51cmwoKSk7CisgICAgICAg
ICAgICBmcmFtZS0+bG9hZGVyKCktPmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkodXJsLCBBbGxv
d1N0b3JlZENyZWRlbnRpYWxzLCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOworICAgICAgICAgICAg
cmVxdWVzdEFsbG93ZWQgPSBkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChy
ZXNwb25zZS51cmwoKSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFyZXF1ZXN0QWxsb3dlZCkg
ewogICAgICAgICAgICAgZGF0YS5jbGVhcigpOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNjExNzcpCisr
KyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0MiBAQAor
MjAxMC0wNi0yMiAgQW5kcmVhcyBXaWN0b3IgIDxhbmRyZWFzLndpY3RvckB4Y2VyaW9uLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICB4c2w6aW1w
b3J0IGFuZCBkb2N1bWVudCgpIGRvbid0IHdvcmsgaW4gc3R5bGVzaGVldHMgbG9hZGVkIHZpYSBY
TUxIdHRwUmVxdWVzdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTAzMTMKKworICAgICAgICAqIGZhc3QveHNsL3RyYW5zZm9ybS1kb2NpbXBsLWRvYy1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QveHNsL3RyYW5zZm9ybS1kb2NpbXBs
LWRvYy54aHRtbDogQWRkZWQuCisgICAgICAgICAtIFRlc3QgdGhhdCBzdHlsZXNoZWV0cyBjcmVh
dGVkIHdpdGggZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlRG9jdW1lbnQKKyAgICAgICAg
ICAgY2FuIHVzZSB4c2w6aW1wb3J0CisgICAgICAgICogZmFzdC94c2wvdHJhbnNmb3JtLWRvbXBh
cnNlci1kb2MtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3hzbC90cmFuc2Zv
cm0tZG9tcGFyc2VyLWRvYy54aHRtbDogQWRkZWQuCisgICAgICAgICAtIFRlc3QgdGhhdCBzdHls
ZXNoZWV0cyBjcmVhdGVkIHdpdGggRE9NUGFyc2VyLnBhcnNlRnJvbVN0cmluZworICAgICAgICAg
ICBjYW4gdXNlIHhzbDppbXBvcnQKKyAgICAgICAgKiBmYXN0L3hzbC90cmFuc2Zvcm0tdHJhbnNm
b3JtZWQtZG9jLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC94c2wvdHJhbnNm
b3JtLXRyYW5zZm9ybWVkLWRvYy54aHRtbDogQWRkZWQuCisgICAgICAgICAtIFRlc3QgdGhhdCBz
dHlsZXNoZWV0cyBjcmVhdGVkIHdpdGggWFNMVFByb2Nlc3Nvci50cmFuc2Zvcm1Ub0RvY3VtZW50
CisgICAgICAgICAgIGNhbiB1c2UgeHNsOmltcG9ydAorICAgICAgICAqIGZhc3QveHNsL3RyYW5z
Zm9ybS14aHItZG9jLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL3hzbDogQWRk
ZWQuCisgICAgICAgICogaHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzOiBBZGRlZC4KKyAgICAgICAg
KiBodHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMvYWxsb3ctY3Jvc3Mtb3JpZ2luLWhlYWRlci5jZ2k6
IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMveHNsL3Jlc291cmNlcy90cmFuc2Zvcm0tZnJh
bWVkLXN1YmZyYW1lMS54aHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy94c2wvcmVz
b3VyY2VzL3RyYW5zZm9ybS1mcmFtZWQtc3ViZnJhbWUyLnhodG1sOiBBZGRlZC4KKyAgICAgICAg
KiBodHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMveGhyLWRvYy1jcm9zcy1vcmlnaW4ueHNsOiBBZGRl
ZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMveGhyLWRvYy1pbXBvcnRlZC54
c2w6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMveHNsL3Jlc291cmNlcy94aHItZG9jLnht
bDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL3hoci1kb2MueHNs
OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0tZnJhbWVkLWRvYy1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMveHNsL3RyYW5zZm9ybS1m
cmFtZWQtZG9jLnhodG1sOiBBZGRlZC4KKyAgICAgICAgIC0gVGVzdCBzdHlsZXNoZWV0cyBvcmln
aW5hdGluZyBmcm9tIGFub3RoZXIgZnJhbWUuCisgICAgICAgICogaHR0cC90ZXN0cy94c2wvdHJh
bnNmb3JtLXhoci1kb2MtY3Jvc3Mtb3JpZ2luLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogaHR0cC90ZXN0cy94c2wvdHJhbnNmb3JtLXhoci1kb2MtY3Jvc3Mtb3JpZ2luLnhodG1sOiBB
ZGRlZC4KKyAgICAgICAgIC0gVGVzdCB0aGF0IHlvdSBjYW4ndCBpbXBvcnQgZG9jdW1lbnRzIGNy
b3NzIG9yaWdpbgorICAgICAgICAqIGh0dHAvdGVzdHMveHNsL3RyYW5zZm9ybS14aHItZG9jLWZy
b20tYWxsb3dlZC1jcm9zcy1vcmlnaW4tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBo
dHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0teGhyLWRvYy1mcm9tLWFsbG93ZWQtY3Jvc3Mtb3JpZ2lu
LnhodG1sOiBBZGRlZC4KKyAgICAgICAgIC0gVGVzdCBmb3IgcGVybWl0dGVkIHNhbWUgb3JpZ2lu
IGxvYWQgaW4gdGhlIGNhc2Ugb2YgY3Jvc3Mtb3JpZ2luIFhNTEh0dHBSZXF1ZXN0CisKIDIwMTAt
MDYtMTQgIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgTm90
IHJldmlld2VkLCB1cGRhdGUgQ2hyb21pdW0gZXhwZWN0YXRpb25zIGZvciBhIG5ldyB0ZXN0LgpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC94c2wvdHJhbnNmb3JtLWRvY2ltcGwtZG9jLWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0tZG9jaW1w
bC1kb2MtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC94c2wv
dHJhbnNmb3JtLWRvY2ltcGwtZG9jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwzIEBACitUZXN0IGZvciBidWcgMTAzMTM6IHhzbDppbXBvcnQgZG9lc24ndCB3b3JrIGluIHN0
eWxlc2hlZXRzIGxvYWRlZCB2aWEgWE1MSHR0cFJlcXVlc3QuCisKK1NVQ0NFU1MKSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS1kb2NpbXBsLWRvYy54aHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0tZG9jaW1wbC1kb2MueGh0bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0tZG9jaW1wbC1kb2Mu
eGh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIg
ZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhI
VE1MIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDExL0RURC94aHRtbDExLmR0
ZCI+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9
ImVuIj4KKzxoZWFkPgorICAgIDx0aXRsZT54c2wgaW1wb3J0IHRlc3Q8L3RpdGxlPgorICAgIDxz
Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IVtDREFUQVsKKyAgICAgICAgZnVuY3Rpb24g
bG9hZCgpIHsKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisg
ICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCisgICAg
ICAgICAgICB2YXIgeHNsdE5TID0gImh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9y
bSI7CisgICAgICAgICAgICB2YXIgeHNsdERvYyA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNy
ZWF0ZURvY3VtZW50KHhzbHROUywgInN0eWxlc2hlZXQiLCBudWxsKTsKKyAgICAgICAgICAgIHZh
ciByb290RWxlbSA9IHhzbHREb2MuZG9jdW1lbnRFbGVtZW50OworICAgICAgICAgICAgcm9vdEVs
ZW0uc2V0QXR0cmlidXRlKCJ2ZXJzaW9uIiwgIjEuMCIpOworCisgICAgICAgICAgICB2YXIgaW1w
b3J0RWxlbSA9IHhzbHREb2MuY3JlYXRlRWxlbWVudE5TKHhzbHROUywgImltcG9ydCIpOworICAg
ICAgICAgICAgaW1wb3J0RWxlbS5zZXRBdHRyaWJ1dGUoImhyZWYiLCAicmVzb3VyY2VzL3hoci1k
b2MtaW1wb3J0ZWQueHNsIik7CisgICAgICAgICAgICByb290RWxlbS5hcHBlbmRDaGlsZChpbXBv
cnRFbGVtKTsKKworICAgICAgICAgICAgdmFyIHRlbXBsYXRlRWxlbSA9IHhzbHREb2MuY3JlYXRl
RWxlbWVudE5TKHhzbHROUywgInRlbXBsYXRlIik7CisgICAgICAgICAgICB0ZW1wbGF0ZUVsZW0u
c2V0QXR0cmlidXRlKCJtYXRjaCIsICIvcm9vdCIpOworICAgICAgICAgICAgdmFyIGNhbGxFbGVt
ID0geHNsdERvYy5jcmVhdGVFbGVtZW50TlMoeHNsdE5TLCAiY2FsbC10ZW1wbGF0ZSIpOworICAg
ICAgICAgICAgY2FsbEVsZW0uc2V0QXR0cmlidXRlKCJuYW1lIiwgIndvcmtzIik7CisgICAgICAg
ICAgICB0ZW1wbGF0ZUVsZW0uYXBwZW5kQ2hpbGQoY2FsbEVsZW0pOworICAgICAgICAgICAgcm9v
dEVsZW0uYXBwZW5kQ2hpbGQodGVtcGxhdGVFbGVtKTsKKworICAgICAgICAgICAgdmFyIHhzbHQg
PSBuZXcgWFNMVFByb2Nlc3NvcigpOworICAgICAgICAgICAgeHNsdC5pbXBvcnRTdHlsZXNoZWV0
KHhzbHREb2MpOworCisgICAgICAgICAgICB2YXIgeG1sRG9jID0gZG9jdW1lbnQuaW1wbGVtZW50
YXRpb24uY3JlYXRlRG9jdW1lbnQoIiIsICJyb290IiwgbnVsbCk7CisgICAgICAgICAgICB2YXIg
cmVzdWx0RG9jID0geHNsdC50cmFuc2Zvcm1Ub0RvY3VtZW50KHhtbERvYyk7CisgICAgICAgICAg
ICB2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5pbXBvcnROb2RlKHJlc3VsdERvYy5kb2N1bWVudEVs
ZW1lbnQsIHRydWUpOworCisgICAgICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ2RpdicpOworICAgICAgICAgICAgZGl2LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGZy
YWdtZW50LCBkaXYpOworICAgICAgICB9CisgICAgXV0+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eSBvbmxvYWQ9ImxvYWQoKSI+Cis8cD5UZXN0IGZvciA8YSBocmVmPSJodHRwOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDMxMyI+YnVnIDEwMzEzPC9hPjoKK3hzbDppbXBvcnQg
ZG9lc24ndCB3b3JrIGluIHN0eWxlc2hlZXRzIGxvYWRlZCB2aWEgWE1MSHR0cFJlcXVlc3QuPC9w
PgorCis8ZGl2IGlkPSJkaXYiPkl0J3MgbmljZSB0aGF0IHRoaXMgaGFzbid0IGNyYXNoZWQsIGJ1
dCB0aGUgWFNMIHRyYW5zZm9ybWF0aW9uIGhhcyBmYWlsZWQuPC9kaXY+Cis8L2JvZHk+Cis8L2h0
bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0tZG9tcGFyc2VyLWRvYy1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC94c2wvdHJhbnNmb3Jt
LWRvbXBhcnNlci1kb2MtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC94c2wvdHJhbnNmb3JtLWRvbXBhcnNlci1kb2MtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDMgQEAKK1Rlc3QgZm9yIGJ1ZyAxMDMxMzogeHNsOmltcG9ydCBkb2Vzbid0
IHdvcmsgaW4gc3R5bGVzaGVldHMgbG9hZGVkIHZpYSBYTUxIdHRwUmVxdWVzdC4KKworU1VDQ0VT
UwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC94c2wvdHJhbnNmb3JtLWRvbXBhcnNlci1kb2MueGh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC94c2wvdHJhbnNmb3JtLWRvbXBhcnNl
ci1kb2MueGh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zv
cm0tZG9tcGFyc2VyLWRvYy54aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MSBAQAorPD94
bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJ
QyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1s
MTEvRFREL3hodG1sMTEuZHRkIj4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5
L3hodG1sIiB4bWw6bGFuZz0iZW4iPgorPGhlYWQ+CisgICAgPHRpdGxlPnhzbCBpbXBvcnQgdGVz
dDwvdGl0bGU+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhW0NEQVRBWwor
ICAgICAgICBmdW5jdGlvbiBsb2FkKCkgeworICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1w
QXNUZXh0KCk7CisKKyAgICAgICAgICAgIHZhciB4c2x0U3RyID0KKyAgICAgICAgICAgICAgICAn
PHhzbDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCInICsKKyAgICAgICAgICAgICAgICAnICB4bWxu
czp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSInICsKKyAgICAgICAg
ICAgICAgICAnICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+JyArCisgICAg
ICAgICAgICAgICAgJzx4c2w6aW1wb3J0IGhyZWY9InJlc291cmNlcy94aHItZG9jLWltcG9ydGVk
LnhzbCIgLz4nICsKKyAgICAgICAgICAgICAgICAnPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iL3Jvb3Qi
PicgKworICAgICAgICAgICAgICAgICcgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9Indvcmtz
IiAvPicgKworICAgICAgICAgICAgICAgICc8L3hzbDp0ZW1wbGF0ZT4nICsKKyAgICAgICAgICAg
ICAgICAnPC94c2w6c3R5bGVzaGVldD4nOworCisgICAgICAgICAgICB2YXIgcGFyc2VyID0gbmV3
IERPTVBhcnNlcigpOworICAgICAgICAgICAgdmFyIHhzbHQgPSBuZXcgWFNMVFByb2Nlc3Nvcigp
OworICAgICAgICAgICAgdmFyIHhzbHREb2MgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKHhzbHRT
dHIsICJhcHBsaWNhdGlvbi94bWwiKTsKKyAgICAgICAgICAgIHhzbHQuaW1wb3J0U3R5bGVzaGVl
dCh4c2x0RG9jKTsKKworICAgICAgICAgICAgdmFyIHhtbERvYyA9IHBhcnNlci5wYXJzZUZyb21T
dHJpbmcoIjxyb290Lz4iLCAiYXBwbGljYXRpb24veG1sIik7CisgICAgICAgICAgICB2YXIgcmVz
dWx0RG9jID0geHNsdC50cmFuc2Zvcm1Ub0RvY3VtZW50KHhtbERvYyk7CisgICAgICAgICAgICB2
YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5pbXBvcnROb2RlKHJlc3VsdERvYy5kb2N1bWVudEVsZW1l
bnQsIHRydWUpOworCisgICAgICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ2RpdicpOworICAgICAgICAgICAgZGl2LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGZyYWdt
ZW50LCBkaXYpOworICAgICAgICB9CisgICAgXV0+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBv
bmxvYWQ9ImxvYWQoKSI+Cis8cD5UZXN0IGZvciA8YSBocmVmPSJodHRwOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMDMxMyI+YnVnIDEwMzEzPC9hPjoKK3hzbDppbXBvcnQgZG9l
c24ndCB3b3JrIGluIHN0eWxlc2hlZXRzIGxvYWRlZCB2aWEgWE1MSHR0cFJlcXVlc3QuPC9wPgor
Cis8ZGl2IGlkPSJkaXYiPkl0J3MgbmljZSB0aGF0IHRoaXMgaGFzbid0IGNyYXNoZWQsIGJ1dCB0
aGUgWFNMIHRyYW5zZm9ybWF0aW9uIGhhcyBmYWlsZWQuPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0tdHJhbnNmb3JtZWQtZG9jLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0t
dHJhbnNmb3JtZWQtZG9jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2Zhc3QveHNsL3RyYW5zZm9ybS10cmFuc2Zvcm1lZC1kb2MtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDMgQEAKK1Rlc3QgZm9yIGJ1ZyAxMDMxMzogeHNsOmltcG9ydCBkb2Vz
bid0IHdvcmsgaW4gc3R5bGVzaGVldHMgbG9hZGVkIHZpYSBYTUxIdHRwUmVxdWVzdC4KKworU1VD
Q0VTUwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC94c2wvdHJhbnNmb3JtLXRyYW5zZm9ybWVkLWRv
Yy54aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0tdHJh
bnNmb3JtZWQtZG9jLnhodG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC94c2wv
dHJhbnNmb3JtLXRyYW5zZm9ybWVkLWRvYy54aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0
OCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhRE9DVFlQRSBo
dG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3Jn
L1RSL3hodG1sMTEvRFREL3hodG1sMTEuZHRkIj4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3Lncz
Lm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iPgorPGhlYWQ+CisgICAgPHRpdGxlPnhzbCBp
bXBvcnQgdGVzdDwvdGl0bGU+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwh
W0NEQVRBWworICAgICAgICBmdW5jdGlvbiBsb2FkKCkgeworICAgICAgICAgICAgaWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci5kdW1wQXNUZXh0KCk7CisKKyAgICAgICAgICAgIHZhciBjb3B5WHNsdFN0ciA9CisgICAg
ICAgICAgICAgICAgJzx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiJyArCisgICAgICAgICAg
ICAgICAgJyAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0i
JyArCisgICAgICAgICAgICAgICAgJyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0
bWwiPicgKworICAgICAgICAgICAgICAgICc8eHNsOnRlbXBsYXRlIG1hdGNoPSJAKnxub2RlKCki
PicgKworICAgICAgICAgICAgICAgICcgIDx4c2w6Y29weT4nICsKKyAgICAgICAgICAgICAgICAn
ICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iQCp8bm9kZSgpIi8+JyArCisgICAgICAg
ICAgICAgICAgJyAgPC94c2w6Y29weT4nICsKKyAgICAgICAgICAgICAgICAnPC94c2w6dGVtcGxh
dGU+JyArCisgICAgICAgICAgICAgICAgJzwveHNsOnN0eWxlc2hlZXQ+JzsKKworICAgICAgICAg
ICAgdmFyIHBhcnNlciA9IG5ldyBET01QYXJzZXIoKTsKKyAgICAgICAgICAgIHZhciB4c2x0ID0g
bmV3IFhTTFRQcm9jZXNzb3IoKTsKKyAgICAgICAgICAgIGNvcHlYc2x0RG9jID0gcGFyc2VyLnBh
cnNlRnJvbVN0cmluZyhjb3B5WHNsdFN0ciwgImFwcGxpY2F0aW9uL3htbCIpOworICAgICAgICAg
ICAgeHNsdC5pbXBvcnRTdHlsZXNoZWV0KGNvcHlYc2x0RG9jKTsKKworICAgICAgICAgICAgdmFy
IHJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgICAgICAgICAgcmVxLm9wZW4oJ0dFVCcs
ICdyZXNvdXJjZXMveGhyLWRvYy54c2wnLCBmYWxzZSk7CisgICAgICAgICAgICByZXEuc2VuZChu
dWxsKTsKKyAgICAgICAgICAgIHZhciB4c2x0RG9jID0geHNsdC50cmFuc2Zvcm1Ub0RvY3VtZW50
KHJlcS5yZXNwb25zZVhNTCk7CisgICAgICAgICAgICB4c2x0LmltcG9ydFN0eWxlc2hlZXQoeHNs
dERvYyk7CisKKyAgICAgICAgICAgIHZhciB4bWxEb2MgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5n
KCI8cm9vdC8+IiwgImFwcGxpY2F0aW9uL3htbCIpOworICAgICAgICAgICAgdmFyIHJlc3VsdERv
YyA9IHhzbHQudHJhbnNmb3JtVG9Eb2N1bWVudCh4bWxEb2MpOworICAgICAgICAgICAgdmFyIGZy
YWdtZW50ID0gZG9jdW1lbnQuaW1wb3J0Tm9kZShyZXN1bHREb2MuZG9jdW1lbnRFbGVtZW50LCB0
cnVlKTsKKworICAgICAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdk
aXYnKTsKKyAgICAgICAgICAgIGRpdi5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChmcmFnbWVudCwg
ZGl2KTsKKyAgICAgICAgfQorICAgIF1dPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2Fk
PSJsb2FkKCkiPgorPHA+VGVzdCBmb3IgPGEgaHJlZj0iaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTAzMTMiPmJ1ZyAxMDMxMzwvYT46Cit4c2w6aW1wb3J0IGRvZXNuJ3Qg
d29yayBpbiBzdHlsZXNoZWV0cyBsb2FkZWQgdmlhIFhNTEh0dHBSZXF1ZXN0LjwvcD4KKworPGRp
diBpZD0iZGl2Ij5JdCdzIG5pY2UgdGhhdCB0aGlzIGhhc24ndCBjcmFzaGVkLCBidXQgdGhlIFhT
TCB0cmFuc2Zvcm1hdGlvbiBoYXMgZmFpbGVkLjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC94c2wvdHJhbnNmb3JtLXhoci1kb2MtZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS14aHItZG9jLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gNjExNzcpCisrKyBMYXlvdXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zv
cm0teGhyLWRvYy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSwzIEBACi1D
T05TT0xFIE1FU1NBR0U6IGxpbmUgMjA6IFR5cGVFcnJvcjogUmVzdWx0IG9mIGV4cHJlc3Npb24g
J2RvYycgW3VuZGVmaW5lZF0gaXMgbm90IGFuIG9iamVjdC4KIFRlc3QgZm9yIGJ1ZyAxMDMxMzog
eHNsOmltcG9ydCBkb2Vzbid0IHdvcmsgaW4gc3R5bGVzaGVldHMgbG9hZGVkIHZpYSBYTUxIdHRw
UmVxdWVzdC4KIAotSXQncyBuaWNlIHRoYXQgdGhpcyBoYXNuJ3QgY3Jhc2hlZCwgYnV0IHRoZSBY
U0wgdHJhbnNmb3JtYXRpb24gaGFzIGZhaWxlZC4KK1NVQ0NFU1MKSW5kZXg6IExheW91dFRlc3Rz
L2h0dHAvdGVzdHMveHNsL3RyYW5zZm9ybS1mcmFtZWQtZG9jLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0tZnJhbWVkLWRvYy1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC90
cmFuc2Zvcm0tZnJhbWVkLWRvYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTAgQEAKK1Rlc3QgZm9yIGJ1ZyAxMDMxMzogeHNsOmltcG9ydCBkb2Vzbid0IHdvcmsgaW4gc3R5
bGVzaGVldHMgbG9hZGVkIHZpYSBYTUxIdHRwUmVxdWVzdC4KKworU1VDQ0VTUworVGhpcyB0cmFu
c2Zvcm1hdGlvbiBoYXMgZmFpbGVkIGJlY2F1c2UgdGhlIGZyYW1lIG5vIGxvbmdlciBoYXMgdGhl
IHNhbWUgb3JpZ2luLgorCisKKy0tLS0tLS0tCitGcmFtZTogJ3N1YmZyYW1lJworLS0tLS0tLS0K
K3N1YmZyYW1lIDIKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3RyYW5zZm9ybS1m
cmFtZWQtZG9jLnhodG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNs
L3RyYW5zZm9ybS1mcmFtZWQtZG9jLnhodG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy94c2wvdHJhbnNmb3JtLWZyYW1lZC1kb2MueGh0bWwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNTkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8
IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iICJodHRwOi8v
d3d3LnczLm9yZy9UUi94aHRtbDExL0RURC94aHRtbDExLmR0ZCI+Cis8aHRtbCB4bWxucz0iaHR0
cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIj4KKzxoZWFkPgorICAgIDx0
aXRsZT54c2wgaW1wb3J0IHRlc3Q8L3RpdGxlPgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZh
c2NyaXB0Ij48IVtDREFUQVsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKwor
ICAgICAgICB2YXIgeHNsdERvYzsKKworICAgICAgICB2YXIgcGFyc2VyID0gbmV3IERPTVBhcnNl
cigpOworICAgICAgICB2YXIgeG1sRG9jID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZygiPHJvb3Qv
PiIsICJhcHBsaWNhdGlvbi94bWwiKTsKKworICAgICAgICBmdW5jdGlvbiB0cmFuc2Zvcm0oZGl2
KSB7CisgICAgICAgICAgICB2YXIgeHNsdCA9IG5ldyBYU0xUUHJvY2Vzc29yKCk7CisgICAgICAg
ICAgICB4c2x0LmltcG9ydFN0eWxlc2hlZXQoeHNsdERvYyk7CisgICAgICAgICAgICB2YXIgcmVz
dWx0RG9jID0geHNsdC50cmFuc2Zvcm1Ub0RvY3VtZW50KHhtbERvYyk7CisgICAgICAgICAgICB2
YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5pbXBvcnROb2RlKHJlc3VsdERvYy5kb2N1bWVudEVsZW1l
bnQsIHRydWUpOworICAgICAgICAgICAgZGl2LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGZyYWdt
ZW50LCBkaXYpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gbG9hZCgpIHsKKyAgICAg
ICAgICAgIGlmICgheHNsdERvYykgeworICAgICAgICAgICAgICAgIHhzbHREb2MgPSBzdWJmcmFt
ZS54c2x0RG9jOworICAgICAgICAgICAgICAgIHRyYW5zZm9ybShkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgndHJhbnNmb3JtMScpKTsKKyAgICAgICAgICAgICAgICBzdWJmcmFtZS53aW5kb3cubG9j
YXRpb24gPSAiaHR0cDovLzEyNy4wLjAuMTo4MDAwL3hzbC9yZXNvdXJjZXMvdHJhbnNmb3JtLWZy
YW1lZC1zdWJmcmFtZTIueGh0bWwiOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICB2YXIgZGl2MiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0cmFuc2Zvcm0yJyk7CisK
KyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0oZGl2
Mik7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgICAgICAv
LyBUaGlzIHRyYW5zZm9ybWF0aW9uIHNob3VsZCBmYWlsCisgICAgICAgICAgICAgICAgICAgIGRp
djIuaW5uZXJIVE1MID0gIlRoaXMgdHJhbnNmb3JtYXRpb24gaGFzIGZhaWxlZCBiZWNhdXNlIHRo
ZSBmcmFtZSBubyBsb25nZXIgaGFzIHRoZSBzYW1lIG9yaWdpbi4iOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsK
KyAgICAgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwor
ICAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQ2hpbGRGcmFtZXNB
c1RleHQoKTsKKyAgICAgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5
RG9uZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IF1dPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cD5UZXN0IGZvciA8YSBocmVmPSJodHRw
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDMxMyI+YnVnIDEwMzEzPC9hPjoK
K3hzbDppbXBvcnQgZG9lc24ndCB3b3JrIGluIHN0eWxlc2hlZXRzIGxvYWRlZCB2aWEgWE1MSHR0
cFJlcXVlc3QuPC9wPgorPGRpdiBpZD0idHJhbnNmb3JtMSI+CitJdCdzIG5pY2UgdGhhdCB0aGlz
IGhhc24ndCBjcmFzaGVkLCBidXQgdGhlIFhTTCB0cmFuc2Zvcm1hdGlvbiBoYXMgZmFpbGVkLgor
PC9kaXY+Cis8ZGl2IGlkPSJ0cmFuc2Zvcm0yIj4KK1RoaXMgdHJhbnNmb3JtYXRpb24gc2hvdWxk
IGZhaWwgYmVjYXVzZSB0aGUgZnJhbWUgbm8gbG9uZ2VyIGhhcyB0aGUgc2FtZSBvcmlnaW4uCis8
L2Rpdj4KKzxpZnJhbWUgaWQ9InN1YmZyYW1lIiBzcmM9InJlc291cmNlcy90cmFuc2Zvcm0tZnJh
bWVkLXN1YmZyYW1lMS54aHRtbCIgb25sb2FkPSJsb2FkKCkiPgorPC9pZnJhbWU+Cis8L2JvZHk+
Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0teGhy
LWRvYy1jcm9zcy1vcmlnaW4tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2h0dHAvdGVzdHMveHNsL3RyYW5zZm9ybS14aHItZG9jLWNyb3NzLW9yaWdpbi1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0t
eGhyLWRvYy1jcm9zcy1vcmlnaW4tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDMgQEAKK1Rlc3QgZm9yIGJ1ZyAxMDMxMzogeHNsOmltcG9ydCBkb2Vzbid0IHdvcmsgaW4gc3R5
bGVzaGVldHMgbG9hZGVkIHZpYSBYTUxIdHRwUmVxdWVzdC4KKworVGhpcyB0cmFuc2Zvcm1hdGlv
biBoYXMgZmFpbGVkIGJlY2F1c2UgaXQgaXMgdHJ5aW5nIHRvIGltcG9ydCBhIHN0eWxlc2hlZXQg
Y3Jvc3Mtb3JpZ2luLgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvdHJhbnNmb3Jt
LXhoci1kb2MtY3Jvc3Mtb3JpZ2luLnhodG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0
dHAvdGVzdHMveHNsL3RyYW5zZm9ybS14aHItZG9jLWNyb3NzLW9yaWdpbi54aHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3RyYW5zZm9ybS14aHItZG9jLWNy
b3NzLW9yaWdpbi54aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NCBAQAorPD94bWwgdmVy
c2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8v
VzNDLy9EVEQgWEhUTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMTEvRFRE
L3hodG1sMTEuZHRkIj4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1s
IiB4bWw6bGFuZz0iZW4iPgorPGhlYWQ+CisgICAgPHRpdGxlPnhzbCBpbXBvcnQgdGVzdDwvdGl0
bGU+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgICBmdW5jdGlv
biBsb2FkKCkgeworICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikK
KyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyAg
ICAgICAgICAgIHZhciByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICAgICAgICAgIHZh
ciB4c2x0ID0gbmV3IFhTTFRQcm9jZXNzb3IoKTsKKyAgICAgICAgICAgIHJlcS5vcGVuKCdHRVQn
LCAncmVzb3VyY2VzL3hoci1kb2MtY3Jvc3Mtb3JpZ2luLnhzbCcsIGZhbHNlKTsKKyAgICAgICAg
ICAgIHJlcS5zZW5kKG51bGwpOworICAgICAgICAgICAgeHNsdC5pbXBvcnRTdHlsZXNoZWV0KHJl
cS5yZXNwb25zZVhNTCk7CisKKyAgICAgICAgICAgIHJlcS5vcGVuKCdHRVQnLCAncmVzb3VyY2Vz
L3hoci1kb2MueG1sJywgZmFsc2UpOworICAgICAgICAgICAgcmVxLnNlbmQobnVsbCk7CisKKyAg
ICAgICAgICAgIHZhciBkb2M7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGRv
YyA9IHhzbHQudHJhbnNmb3JtVG9Eb2N1bWVudChyZXEucmVzcG9uc2VYTUwpOworICAgICAgICAg
ICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgIC8vIFRoaXMgdHJhbnNmb3JtYXRpb24g
c2hvdWxkIGZhaWwKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIGRpdiA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCdkaXYnKTsKKworICAgICAgICAgICAgaWYgKGRvYykgeworICAg
ICAgICAgICAgICAgIHZhciBmcmFnbWVudCA9IGRvY3VtZW50LmltcG9ydE5vZGUoZG9jLmRvY3Vt
ZW50RWxlbWVudCwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgZGl2LnBhcmVudE5vZGUucmVwbGFj
ZUNoaWxkKGZyYWdtZW50LCBkaXYpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBkaXYuaW5uZXJIVE1MID0gIlRoaXMgdHJhbnNmb3JtYXRpb24gaGFzIGZhaWxlZCBiZWNh
dXNlIGl0IGlzIHRyeWluZyB0byBpbXBvcnQgYSBzdHlsZXNoZWV0IGNyb3NzLW9yaWdpbi4iOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBv
bmxvYWQ9ImxvYWQoKSI+Cis8cD5UZXN0IGZvciA8YSBocmVmPSJodHRwOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMDMxMyI+YnVnIDEwMzEzPC9hPjoKK3hzbDppbXBvcnQgZG9l
c24ndCB3b3JrIGluIHN0eWxlc2hlZXRzIGxvYWRlZCB2aWEgWE1MSHR0cFJlcXVlc3QuPC9wPgor
Cis8ZGl2IGlkPSJkaXYiPlRoaXMgdHJhbnNmb3JtYXRpb24gc2hvdWxkIGZhaWwgYmVjYXVzZSBp
dCBpcyB0cnlpbmcgdG8gaW1wb3J0IGEgc3R5bGVzaGVldCBjcm9zcy1vcmlnaW4uPC9kaXY+Cis8
L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC90cmFuc2Zv
cm0teGhyLWRvYy1mcm9tLWFsbG93ZWQtY3Jvc3Mtb3JpZ2luLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0teGhyLWRvYy1mcm9t
LWFsbG93ZWQtY3Jvc3Mtb3JpZ2luLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2h0dHAvdGVzdHMveHNsL3RyYW5zZm9ybS14aHItZG9jLWZyb20tYWxsb3dlZC1jcm9z
cy1vcmlnaW4tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK1Rlc3Qg
Zm9yIGJ1ZyAxMDMxMzogeHNsOmltcG9ydCBkb2Vzbid0IHdvcmsgaW4gc3R5bGVzaGVldHMgbG9h
ZGVkIHZpYSBYTUxIdHRwUmVxdWVzdC4KKworU1VDQ0VTUwpJbmRleDogTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy94c2wvdHJhbnNmb3JtLXhoci1kb2MtZnJvbS1hbGxvd2VkLWNyb3NzLW9yaWdpbi54
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0t
eGhyLWRvYy1mcm9tLWFsbG93ZWQtY3Jvc3Mtb3JpZ2luLnhodG1sCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvdHJhbnNmb3JtLXhoci1kb2MtZnJvbS1hbGxvd2Vk
LWNyb3NzLW9yaWdpbi54aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMyBAQAorPD94bWwg
dmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAi
LS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMTEv
RFREL3hodG1sMTEuZHRkIj4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3ho
dG1sIiB4bWw6bGFuZz0iZW4iPgorPGhlYWQ+CisgICAgPHRpdGxlPnhzbCBpbXBvcnQgdGVzdDwv
dGl0bGU+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgICBmdW5j
dGlvbiBsb2FkKCkgeworICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisK
KyAgICAgICAgICAgIHZhciByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICAgICAgICAg
IHZhciB4c2x0ID0gbmV3IFhTTFRQcm9jZXNzb3IoKTsKKyAgICAgICAgICAgIHJlcS5vcGVuKCdH
RVQnLCAnaHR0cDovL2xvY2FsaG9zdDo4MDAwL3hzbC9yZXNvdXJjZXMvYWxsb3ctY3Jvc3Mtb3Jp
Z2luLWhlYWRlci5jZ2k/eGhyLWRvYy54c2wnLCBmYWxzZSk7CisgICAgICAgICAgICByZXEuc2Vu
ZChudWxsKTsKKyAgICAgICAgICAgIHhzbHQuaW1wb3J0U3R5bGVzaGVldChyZXEucmVzcG9uc2VY
TUwpOworCisgICAgICAgICAgICByZXEub3BlbignR0VUJywgJ3Jlc291cmNlcy94aHItZG9jLnht
bCcsIGZhbHNlKTsKKyAgICAgICAgICAgIHJlcS5zZW5kKG51bGwpOworICAgICAgICAgICAgdmFy
IGRvYyA9IHhzbHQudHJhbnNmb3JtVG9Eb2N1bWVudChyZXEucmVzcG9uc2VYTUwpOworICAgICAg
ICAgICAgdmFyIGZyYWdtZW50ID0gZG9jdW1lbnQuaW1wb3J0Tm9kZShkb2MuZG9jdW1lbnRFbGVt
ZW50LCB0cnVlKTsKKworICAgICAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdkaXYnKTsKKyAgICAgICAgICAgIGRpdi5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChmcmFn
bWVudCwgZGl2KTsKKyAgICAgICAgfQorICAgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25s
b2FkPSJsb2FkKCkiPgorPHA+VGVzdCBmb3IgPGEgaHJlZj0iaHR0cDovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTAzMTMiPmJ1ZyAxMDMxMzwvYT46Cit4c2w6aW1wb3J0IGRvZXNu
J3Qgd29yayBpbiBzdHlsZXNoZWV0cyBsb2FkZWQgdmlhIFhNTEh0dHBSZXF1ZXN0LjwvcD4KKwor
PGRpdiBpZD0iZGl2Ij5JdCdzIG5pY2UgdGhhdCB0aGlzIGhhc24ndCBjcmFzaGVkLCBidXQgdGhl
IFhTTCB0cmFuc2Zvcm1hdGlvbiBoYXMgZmFpbGVkLjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpJ
bmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL2FsbG93LWNyb3NzLW9y
aWdpbi1oZWFkZXIuY2dpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNs
L3Jlc291cmNlcy9hbGxvdy1jcm9zcy1vcmlnaW4taGVhZGVyLmNnaQkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3Jlc291cmNlcy9hbGxvdy1jcm9zcy1vcmlnaW4t
aGVhZGVyLmNnaQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAorIyEvdXNyL2Jpbi9wZXJs
IC13Cit1c2Ugc3RyaWN0OworCitwcmludCAiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94bWxc
biI7CitwcmludCAiQ2FjaGUtQ29udHJvbDogbm8tY2FjaGUsIG5vLXN0b3JlXG4iOworcHJpbnQg
IkFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbjogKlxuXG4iOworCitteSAkZmlsZW5hbWUgPSAk
RU5WeyJRVUVSWV9TVFJJTkcifTsKK29wZW4gRklMRSwgJGZpbGVuYW1lIG9yIGRpZTsKK3ByaW50
IDxGSUxFPjsKK2Nsb3NlIEZJTEU7CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9y
ZXNvdXJjZXMvdHJhbnNmb3JtLWZyYW1lZC1zdWJmcmFtZTEueGh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL3RyYW5zZm9ybS1mcmFtZWQtc3Vi
ZnJhbWUxLnhodG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wv
cmVzb3VyY2VzL3RyYW5zZm9ybS1mcmFtZWQtc3ViZnJhbWUxLnhodG1sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDI0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pgor
PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VOIiAiaHR0cDov
L3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwxMS5kdGQiPgorPGh0bWwgeG1sbnM9Imh0
dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiI+Cis8aGVhZD4KKyAgICA8
dGl0bGU+eHNsIGltcG9ydCB0ZXN0PC90aXRsZT4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2
YXNjcmlwdCI+PCFbQ0RBVEFbCisgICAgICAgIHZhciB4c2x0U3RyID0KKyAgICAgICAgICAgICc8
eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIicgKworICAgICAgICAgICAgJyAgeG1sbnM6eHNs
PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iJyArCisgICAgICAgICAgICAn
ICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+JyArCisgICAgICAgICAgICAn
PHhzbDppbXBvcnQgaHJlZj0ieGhyLWRvYy1pbXBvcnRlZC54c2wiIC8+JyArCisgICAgICAgICAg
ICAnPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iL3Jvb3QiPicgKworICAgICAgICAgICAgJyAgICA8eHNs
OmNhbGwtdGVtcGxhdGUgbmFtZT0id29ya3MiIC8+JyArCisgICAgICAgICAgICAnPC94c2w6dGVt
cGxhdGU+JyArCisgICAgICAgICAgICAnPC94c2w6c3R5bGVzaGVldD4nOworCisgICAgICAgIHZh
ciBwYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7CisgICAgICAgIHZhciB4c2x0RG9jID0gcGFyc2Vy
LnBhcnNlRnJvbVN0cmluZyh4c2x0U3RyLCAiYXBwbGljYXRpb24veG1sIik7CisgICAgXV0+PC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KK3N1YmZyYW1lIDEKKzwvYm9keT4KKzwvaHRtbD4KSW5k
ZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3Jlc291cmNlcy90cmFuc2Zvcm0tZnJhbWVk
LXN1YmZyYW1lMi54aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hz
bC9yZXNvdXJjZXMvdHJhbnNmb3JtLWZyYW1lZC1zdWJmcmFtZTIueGh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMvdHJhbnNmb3JtLWZyYW1l
ZC1zdWJmcmFtZTIueGh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKKzw/eG1sIHZl
cnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0v
L1czQy8vRFREIFhIVE1MIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDExL0RU
RC94aHRtbDExLmR0ZCI+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRt
bCIgeG1sOmxhbmc9ImVuIj4KKzxoZWFkPgorICAgIDx0aXRsZT54c2wgaW1wb3J0IHRlc3Q8L3Rp
dGxlPgorPC9oZWFkPgorPGJvZHk+CitzdWJmcmFtZSAyCis8L2JvZHk+Cis8L2h0bWw+CkluZGV4
OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMveGhyLWRvYy1jcm9zcy1vcmln
aW4ueHNsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3Jlc291cmNl
cy94aHItZG9jLWNyb3NzLW9yaWdpbi54c2wJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMveGhyLWRvYy1jcm9zcy1vcmlnaW4ueHNsCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDEyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYt
OCI/PgorPHhzbDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCIKKyAgeG1sbnM6eHNsPSJodHRwOi8v
d3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9y
Zy8xOTk5L3hodG1sIj4KKworPHhzbDppbXBvcnQgaHJlZj0iaHR0cDovL2xvY2FsaG9zdDo4MDAw
L3hzbC9yZXNvdXJjZXMveGhyLWRvYy1pbXBvcnRlZC54c2wiIC8+CisKKzx4c2w6dGVtcGxhdGUg
bWF0Y2g9Ii9yb290Ij4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0id29ya3MiIC8+Cis8
L3hzbDp0ZW1wbGF0ZT4KKworPC94c2w6c3R5bGVzaGVldD4KSW5kZXg6IExheW91dFRlc3RzL2h0
dHAvdGVzdHMveHNsL3Jlc291cmNlcy94aHItZG9jLWltcG9ydGVkLnhzbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMveGhyLWRvYy1pbXBvcnRlZC54
c2wJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMv
eGhyLWRvYy1pbXBvcnRlZC54c2wJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQgQEAKKzw/eG1s
IHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8eHNsOnN0eWxlc2hlZXQgdmVyc2lv
bj0iMS4wIgorICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9y
bSIKKyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgorCis8eHNsOnRlbXBs
YXRlIG1hdGNoPSIvcm9vdCI+CisgICAgPGRpdiBjbGFzcz0iZGVmYXVsdCI+RkFJTDogSW5jb3Jy
ZWN0IHRyYW5zZm9ybWF0aW9uLjwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxh
dGUgbmFtZT0id29ya3MiPgorICAgIDxkaXYgY2xhc3M9Im92ZXJyaWRkZW4iPlNVQ0NFU1M8L2Rp
dj4KKzwveHNsOnRlbXBsYXRlPgorCis8L3hzbDpzdHlsZXNoZWV0PgpJbmRleDogTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL3hoci1kb2MueG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3Jlc291cmNlcy94aHItZG9jLnhtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3Jlc291cmNlcy94aHItZG9jLnhtbAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5n
PSJ1dGYtOCI/PgorPD94bWwtc3R5bGVzaGVldCB0eXBlPSJ0ZXh0L3hzbCIgaHJlZj0ieGhyLWRv
Yy54c2wiPz4KKzxyb290Lz4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3Jlc291
cmNlcy94aHItZG9jLnhzbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hz
bC9yZXNvdXJjZXMveGhyLWRvYy54c2wJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3hzbC9yZXNvdXJjZXMveGhyLWRvYy54c2wJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8eHNsOnN0eWxl
c2hlZXQgdmVyc2lvbj0iMS4wIgorICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkv
WFNML1RyYW5zZm9ybSIKKyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgor
Cis8eHNsOmltcG9ydCBocmVmPSJ4aHItZG9jLWltcG9ydGVkLnhzbCIgLz4KKworPHhzbDp0ZW1w
bGF0ZSBtYXRjaD0iL3Jvb3QiPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJ3b3JrcyIg
Lz4KKzwveHNsOnRlbXBsYXRlPgorCis8L3hzbDpzdHlsZXNoZWV0Pgo=
</data>
<flag name="review"
          id="46175"
          type_id="1"
          status="-"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69944</attachid>
            <date>2010-10-06 08:47:44 -0700</date>
            <delta_ts>2011-03-02 09:52:32 -0800</delta_ts>
            <desc>New patch</desc>
            <filename>bug10313_1006.patch</filename>
            <type>text/plain</type>
            <size>58292</size>
            <attacher name="Andreas Wictor">andreas.wictor</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2ODk5NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTAxIEBACisyMDEwLTEwLTA1ICBBbmRyZWFzIFdpY3RvciAgPGFuZHJlYXMud2lj
dG9yQHhjZXJpb24uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIHhzbDppbXBvcnQgYW5kIGRvY3VtZW50KCkgZG9uJ3Qgd29yayBpbiBzdHlsZXNo
ZWV0cyBsb2FkZWQgdmlhIFhNTEh0dHBSZXF1ZXN0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDMxMworCisgICAgICAgIEludHJvZHVjZWQgdGhlIGNv
bmNlcHQgb2YgYSAib3JpZ2luIGRvY3VtZW50IiByZWZlcmVuY2Ugb24gZnJhbWVsZXNzCisgICAg
ICAgIGRvY3VtZW50cyBjcmVhdGVkIGJ5IFhNTEh0dHBSZXF1ZXN0LCBkb2N1bWVudC5pbXBsZW1l
bnRhdGlvbi5jcmVhdGVEb2N1bWVudCwKKyAgICAgICAgRE9NUGFyc2VyLnBhcnNlRnJvbVN0cmlu
ZyBhbmQgWFNMVFByb2Nlc3Nvci50cmFuc2Zvcm1Ub0RvY3VtZW50LgorICAgICAgICBUaGlzIG1h
a2VzIGl0IHBvc3NpYmxlIGZvciBmcmFtZWxlc3MgZG9jdW1lbnRzIHRvIGFjY2VzcyBzdWJyZXNv
dXJjZXMuCisKKyAgICAgICAgVGVzdHM6IGZhc3QveHNsL3RyYW5zZm9ybS1kb2NpbXBsLWRvYy54
aHRtbAorICAgICAgICAgICAgICAgZmFzdC94c2wvdHJhbnNmb3JtLWRvbXBhcnNlci1kb2MueGh0
bWwKKyAgICAgICAgICAgICAgIGZhc3QveHNsL3RyYW5zZm9ybS10cmFuc2Zvcm1lZC1kb2MueGh0
bWwKKyAgICAgICAgICAgICAgIGh0dHAvdGVzdHMveHNsL3RyYW5zZm9ybS1mcmFtZWQtZG9jLnho
dG1sCisgICAgICAgICAgICAgICBodHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0teGhyLWRvYy1jcm9z
cy1vcmlnaW4ueGh0bWwKKyAgICAgICAgICAgICAgIGh0dHAvdGVzdHMveHNsL3RyYW5zZm9ybS14
aHItZG9jLWZyb20tYWxsb3dlZC1jcm9zcy1vcmlnaW4ueGh0bWwKKworICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTWFNMVFByb2Nlc3NvckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1hT
TFRQcm9jZXNzb3I6OnRyYW5zZm9ybVRvRG9jdW1lbnQpOgorICAgICAgICBVc2UgY3VycmVudCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0IGFzIGZpcnN0IGFyZ3VtZW50IHRvIHRyYW5zZm9ybVRvRG9j
dW1lbnQuCisgICAgICAgICogYmluZGluZ3Mvb2JqYy9ET01JbXBsZW1lbnRhdGlvbkZyb250LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTUltcGxlbWVudGF0aW9uRnJvbnQ6OmNyZWF0ZURvY3Vt
ZW50KToKKyAgICAgICAgVXNlIGEgbnVsbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0IGFzIGZpcnN0
IGFyZ3VtZW50IHRvIGNyZWF0ZURvY3VtZW50LgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvckdPYmplY3QucG06CisgICAgICAgIEdlbmVyYXRlIGNvZGUgdGhhdCB1c2Ug
YSBudWxsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgZm9yIGZ1bmN0aW9ucworICAgICAgICB3aXRo
IGEgQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dCBhdHRyaWJ1dGUuCisgICAgICAgICog
YmluZGluZ3MvdjgvY3VzdG9tL1Y4WFNMVFByb2Nlc3NvckN1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpWOFhTTFRQcm9jZXNzb3I6OnRyYW5zZm9ybVRvRG9jdW1lbnRDYWxsYmFjayk6Cisg
ICAgICAgIFVzZSBjdXJyZW50IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgYXMgZmlyc3QgYXJndW1l
bnQgdG8gdHJhbnNmb3JtVG9Eb2N1bWVudC4KKyAgICAgICAgKiBkb20vRE9NSW1wbGVtZW50YXRp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NSW1wbGVtZW50YXRpb246OmNyZWF0ZURvY3Vt
ZW50KToKKyAgICAgICAgUnVuIHNldE9yaWdpbkRvY3VtZW50IG9uIHRoZSByZXN1bHRpbmcgZG9j
dW1lbnQuCisgICAgICAgICogZG9tL0RPTUltcGxlbWVudGF0aW9uLmg6CisgICAgICAgICogZG9t
L0RPTUltcGxlbWVudGF0aW9uLmlkbDoKKyAgICAgICAgQWRkZWQgQ2FsbFdpdGg9U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCBhdHRyaWJ1dGUgdG8gY3JlYXRlRG9jdW1lbnQuCisgICAgICAgICogZG9t
L0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzZXRPcmlnaW5Eb2N1
bWVudCk6CisgICAgICAgIFRoaXMgZnVuY3Rpb24gc3RvcmVzIGEgcmVmZXJlbmNlIHRvIHRoZSBk
b2N1bWVudCB3aGVyZSB0aGlzIGRvY3VtZW50CisgICAgICAgIG9yaWdpbmF0ZWQgZnJvbS4gVGhp
cyBpcyB1c2VkIGZvciBmcmFtZWxlc3MgZG9jdW1lbnRzLCBzbyB0aGF0IHdlIGNhbgorICAgICAg
ICBmaW5kIGEgZnJhbWUgd2hlbiB3ZSBhcmUgbG9hZGluZyBzdWJyZXNvdXJjZXMuIEFsc28sIGJl
Y2F1c2UgZnJhbWVsZXNzCisgICAgICAgIGRvY3VtZW50cyBkb24ndCBnZXQgYSBTZWN1cml0eU9y
aWdpbiB3aGVuIGNvbnN0cnVjdGVkLCB3ZSBuZWVkIHRvIHNldAorICAgICAgICBpdCBoZXJlIHRv
IGJlIGFibGUgdG8gbG9hZCBzdWJyZXNvdXJjZXMuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dDo6ZmluZEZyYW1lRm9yU3VicmVzb3VyY2VMb2Fkcyk6CisgICAgICAgIFJldHVybnMgYSBmcmFt
ZSBmcm9tIGVpdGhlciB0aGUgZG9jdW1lbnQgb3IgdGhlIGRvY3VtZW50IGl0IG9yaWdpbmF0ZWQg
ZnJvbS4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjphcHBseVhTTFRyYW5zZm9ybSk6Cisg
ICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6b3Jp
Z2luRG9jdW1lbnQpOgorICAgICAgICAqIGxvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVx
dWVzdCk6CisgICAgICAgIFVzZSB0aGUgbmV3IGZpbmRGcmFtZUZvclN1YnJlc291cmNlTG9hZHMg
bWV0aG9kIG9uIGRvY3VtZW50cyBhbmQgdXNlIHRoZQorICAgICAgICBuZXcgbG9hZFJlc291cmNl
U3luY2hyb25vdXNseSBvdmVybG9hZCB0aGF0IHRha2VzIGEgcmVmZXJyZXIgc3RyaW5nLgorICAg
ICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxv
YWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAgIEFkZGVkIGEgb3Zlcmxv
YWQgdG8gbG9hZFJlc291cmNlU3luY2hyb25vdXNseSB0aGF0IHRha2VzIHRoZSBvdXRnb2luZwor
ICAgICAgICByZWZlcnJlciBhcyBhcmd1bWVudC4KKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2Fk
ZXIuaDoKKyAgICAgICAgKiB4bWwvRE9NUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRP
TVBhcnNlcjo6cGFyc2VGcm9tU3RyaW5nKToKKyAgICAgICAgUnVuIHNldE9yaWdpbkRvY3VtZW50
IG9uIHRoZSByZXN1bHRpbmcgZG9jdW1lbnQuCisgICAgICAgICogeG1sL0RPTVBhcnNlci5oOgor
ICAgICAgICAqIHhtbC9ET01QYXJzZXIuaWRsOgorICAgICAgICBBZGRlZCBDYWxsV2l0aD1TY3Jp
cHRFeGVjdXRpb25Db250ZXh0IGF0dHJpYnV0ZSB0byBwYXJzZUZyb21TdHJpbmcuCisgICAgICAg
ICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1
ZXN0OjpyZXNwb25zZVhNTCk6CisgICAgICAgIFJ1biBzZXRPcmlnaW5Eb2N1bWVudCBvbiB0aGUg
cmVzdWx0aW5nIGRvY3VtZW50LgorICAgICAgICAqIHhtbC9YU0xJbXBvcnRSdWxlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlhTTEltcG9ydFJ1bGU6OmxvYWRTaGVldCk6CisgICAgICAgIExvYWQg
aW1wb3J0ZWQgZG9jdW1lbnRzIHN5bmNocm9ub3VzbHkgaWYgaW52b2tlZCBieSBqYXZhc2NyaXB0
LgorCVRoZSBzeW5jaHJvbm91cyBsb2FkIGlzIHBlcmZvcm1lZCBieSBEb2N1bWVudFRocmVhZGFi
bGVMb2FkZXIgdGhhdAorCXJlcXVpcmVzIGEgZG9jdW1lbnQgdG8gbG9hZCBzdWIgcmVzb3VyY2Vz
LiBUaGF0IGRvY3VtZW50cyBkb2VzIG5vdAorCWFsd2F5cyBleGlzdCB3aGVuIGltcG9ydGluZyB4
c2wgc3R5bGVzaGVldHMsIHNvIGluIHRoYXQgY2FzZSB3ZQorCWNyZWF0ZSBhIHRlbXBvcmFyeSBk
b2N1bWVudCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoaXMgbG9hZC4KKyAgICAgICAgKFdlYkNvcmU6
OlhTTEltcG9ydFJ1bGU6OmZpbmlzaExvYWRpbmdTaGVldEFzeW5jaHJvbm91c2x5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltcG9ydExvYWRlckNsaWVudDo6SW1wb3J0TG9hZGVyQ2xpZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltcG9ydExvYWRlckNsaWVudDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkltcG9ydExvYWRlckNsaWVudDo6ZGlkUmVjZWl2ZURhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1wb3J0TG9hZGVyQ2xpZW50OjpkaWRGYWlsKToKKyAgICAgICAg
KFdlYkNvcmU6OkltcG9ydExvYWRlckNsaWVudDo6cmF3RGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbXBvcnRMb2FkZXJDbGllbnQ6OnJlc3BvbnNlVVJMKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
cG9ydExvYWRlckNsaWVudDo6ZmFpbGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlhTTEltcG9ydFJ1
bGU6OmZpbmlzaExvYWRpbmdTaGVldFN5bmNocm9ub3VzbHkpOgorICAgICAgICAqIHhtbC9YU0xJ
bXBvcnRSdWxlLmg6CisgICAgICAgICogeG1sL1hTTFRQcm9jZXNzb3IuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6WFNMVFByb2Nlc3Nvcjo6Y3JlYXRlRG9jdW1lbnRGcm9tU291cmNlKToKKyAgICAg
ICAgUnVuIHNldE9yaWdpbkRvY3VtZW50IG9uIHRoZSByZXN1bHRpbmcgZG9jdW1lbnQuCisgICAg
ICAgIChXZWJDb3JlOjpYU0xUUHJvY2Vzc29yOjp0cmFuc2Zvcm1Ub0RvY3VtZW50KToKKyAgICAg
ICAgKiB4bWwvWFNMVFByb2Nlc3Nvci5oOgorICAgICAgICAqIHhtbC9YU0xUUHJvY2Vzc29yTGli
eHNsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMb2FkRG9jdW1lbnRMb2FkZXJDbGllbnQ6Okxv
YWREb2N1bWVudExvYWRlckNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpMb2FkRG9jdW1lbnRM
b2FkZXJDbGllbnQ6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkxvYWREb2N1
bWVudExvYWRlckNsaWVudDo6ZGlkRmFpbCk6CisgICAgICAgIChXZWJDb3JlOjpMb2FkRG9jdW1l
bnRMb2FkZXJDbGllbnQ6OnJhd0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6TG9hZERvY3VtZW50
TG9hZGVyQ2xpZW50OjpmYWlsZWQpOgorICAgICAgICAoV2ViQ29yZTo6ZG9jTG9hZGVyRnVuYyk6
CisJVXNlIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlciB0byBsb2FkIGRvY3VtZW50cy4KKwogMjAx
MC0xMC0wMyAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEhvbGdlciBGcmV5dGhlci4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNYU0xU
UHJvY2Vzc29yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
WFNMVFByb2Nlc3NvckN1c3RvbS5jcHAJKHJldmlzaW9uIDY4OTk1KQorKysgV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1hTTFRQcm9jZXNzb3JDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw4
ICs3NSw5IEBAIEpTVmFsdWUgSlNYU0xUUHJvY2Vzc29yOjp0cmFuc2Zvcm1Ub0RvY3UKIHsKICAg
ICBKU1ZhbHVlIG5vZGVWYWwgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAobm9kZVZhbC5p
bmhlcml0cygmSlNOb2RlOjpzX2luZm8pKSB7CisgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIHNjcmlwdENvbnRleHQgPSBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICAg
ICAgSlNOb2RlKiBub2RlID0gc3RhdGljX2Nhc3Q8SlNOb2RlKj4oYXNPYmplY3Qobm9kZVZhbCkp
OwotICAgICAgICBSZWZQdHI8RG9jdW1lbnQ+IHJlc3VsdERvY3VtZW50ID0gaW1wbCgpLT50cmFu
c2Zvcm1Ub0RvY3VtZW50KG5vZGUtPmltcGwoKSk7CisgICAgICAgIFJlZlB0cjxEb2N1bWVudD4g
cmVzdWx0RG9jdW1lbnQgPSBpbXBsKCktPnRyYW5zZm9ybVRvRG9jdW1lbnQoc2NyaXB0Q29udGV4
dCwgbm9kZS0+aW1wbCgpKTsKICAgICAgICAgaWYgKHJlc3VsdERvY3VtZW50KQogICAgICAgICAg
ICAgcmV0dXJuIHRvSlMoZXhlYywgcmVzdWx0RG9jdW1lbnQuZ2V0KCkpOwogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01JbXBsZW1l
bnRhdGlvbkZyb250LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL29iamMvRE9N
SW1wbGVtZW50YXRpb25Gcm9udC5jcHAJKHJldmlzaW9uIDY4OTk1KQorKysgV2ViQ29yZS9iaW5k
aW5ncy9vYmpjL0RPTUltcGxlbWVudGF0aW9uRnJvbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
MSw3ICs2MSw3IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRUeXBlPiBET01JbXBsZW1lbnRhdGkKIAog
UGFzc1JlZlB0cjxEb2N1bWVudD4gRE9NSW1wbGVtZW50YXRpb25Gcm9udDo6Y3JlYXRlRG9jdW1l
bnQoY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IFN0cmluZyYgcXVhbGlmaWVkTmFt
ZSwgRG9jdW1lbnRUeXBlKiB0eXBlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxET01JbXBsZW1lbnRhdGlvbio+KHRoaXMpLT5jcmVhdGVEb2N1bWVu
dChuYW1lc3BhY2VVUkksIHF1YWxpZmllZE5hbWUsIHR5cGUsIGVjKTsKKyAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxET01JbXBsZW1lbnRhdGlvbio+KHRoaXMpLT5jcmVhdGVEb2N1bWVudCgw
LCBuYW1lc3BhY2VVUkksIHF1YWxpZmllZE5hbWUsIHR5cGUsIGVjKTsKIH0KIAogRE9NSW1wbGVt
ZW50YXRpb25Gcm9udCogRE9NSW1wbGVtZW50YXRpb25Gcm9udDo6Z2V0SW50ZXJmYWNlKGNvbnN0
IFN0cmluZyYgZmVhdHVyZSkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9yR09iamVjdC5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvckdPYmplY3QucG0JKHJldmlzaW9uIDY4OTk1KQorKysgV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0LnBtCSh3b3JraW5nIGNvcHkpCkBAIC04
NjMsNiArODYzLDEyIEBAIHN1YiBHZW5lcmF0ZUZ1bmN0aW9uIHsKICAgICAgICAgJGNhbGxJbXBs
UGFyYW1zIC49ICIsICIgaWYgJGNhbGxJbXBsUGFyYW1zOwogICAgICAgICAkY2FsbEltcGxQYXJh
bXMgLj0gImZhbHNlIjsKICAgICB9CisgICAgbXkgJGNhbGxXaXRoID0gJGZ1bmN0aW9uLT5zaWdu
YXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWxsV2l0aCJ9OworICAgIGlmICgkY2FsbFdp
dGggJiYgJGNhbGxXaXRoIGVxICJTY3JpcHRFeGVjdXRpb25Db250ZXh0IikgeworICAgICAgICBt
eSAkY2FsbFdpdGhBcmcgPSAiMCI7CisgICAgICAgICRjYWxsV2l0aEFyZyAuPSAiLCAiIGlmICRj
YWxsSW1wbFBhcmFtczsKKyAgICAgICAgJGNhbGxJbXBsUGFyYW1zID0gJGNhbGxXaXRoQXJnIC4g
JGNhbGxJbXBsUGFyYW1zOworICAgIH0KIAogICAgIGlmICgkcmV0dXJuVHlwZSBuZSAidm9pZCIg
JiYgJHJldHVyblZhbHVlSXNHRE9NVHlwZSAmJiAkZnVuY3Rpb25TaWdUeXBlIG5lICJET01PYmpl
Y3QiKSB7CiAgICAgICAgIGlmICgkZnVuY3Rpb25TaWdUeXBlIG5lICJFdmVudFRhcmdldCIpIHsK
QEAgLTEyNzQsNyArMTI4MCw2IEBAIHN1YiBHZW5lcmF0ZUV2ZW50VGFyZ2V0SWZhY2UgewogCiAg
ICAgbXkgJGludGVyZmFjZU5hbWUgPSAkZGF0YU5vZGUtPm5hbWU7CiAgICAgbXkgJGRlY2FtZWxp
emUgPSBGaXhVcERlY2FtZWxpemVkTmFtZShkZWNhbWVsaXplKCRpbnRlcmZhY2VOYW1lKSk7Ci0K
ICAgICAkaW1wbEluY2x1ZGVzeyJXZWJLaXRET01FdmVudFRhcmdldC5oIn0gPSAxOwogICAgICRp
bXBsSW5jbHVkZXN7IldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIn0gPSAxOwogCkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhTTFRQcm9jZXNzb3JDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WFNMVFByb2Nlc3NvckN1c3RvbS5j
cHAJKHJldmlzaW9uIDY4OTk1KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYU0xU
UHJvY2Vzc29yQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsMTIgKzkwLDEzIEBAIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBWOFhTTFRQcm9jZXNzb3I6OnQKICAgICAgICAgcmV0dXJuIHY4
OjpVbmRlZmluZWQoKTsKIAogICAgIFhTTFRQcm9jZXNzb3IqIGltcCA9IFY4WFNMVFByb2Nlc3Nv
cjo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
c2NyaXB0Q29udGV4dCA9IGdldFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKIAogICAgIE5vZGUq
IHNvdXJjZSA9IFY4Tm9kZTo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChh
cmdzWzBdKSk7CiAgICAgaWYgKCFzb3VyY2UpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVk
KCk7CiAKLSAgICBSZWZQdHI8RG9jdW1lbnQ+IHJlc3VsdCA9IGltcC0+dHJhbnNmb3JtVG9Eb2N1
bWVudChzb3VyY2UpOworICAgIFJlZlB0cjxEb2N1bWVudD4gcmVzdWx0ID0gaW1wLT50cmFuc2Zv
cm1Ub0RvY3VtZW50KHNjcmlwdENvbnRleHQsIHNvdXJjZSk7CiAgICAgaWYgKCFyZXN1bHQpCiAg
ICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAKSW5kZXg6IFdlYkNvcmUvZG9tL0RPTUlt
cGxlbWVudGF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRh
dGlvbi5jcHAJKHJldmlzaW9uIDY4OTk1KQorKysgV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjEsNyArMjIxLDcgQEAgRE9NSW1wbGVtZW50YXRp
b24qIERPTUltcGxlbWVudGF0aW9uOjpnZQogICAgIHJldHVybiAwOwogfQogCi1QYXNzUmVmUHRy
PERvY3VtZW50PiBET01JbXBsZW1lbnRhdGlvbjo6Y3JlYXRlRG9jdW1lbnQoY29uc3QgU3RyaW5n
JiBuYW1lc3BhY2VVUkksCitQYXNzUmVmUHRyPERvY3VtZW50PiBET01JbXBsZW1lbnRhdGlvbjo6
Y3JlYXRlRG9jdW1lbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkksCiAgICAgY29uc3QgU3RyaW5nJiBxdWFs
aWZpZWROYW1lLCBEb2N1bWVudFR5cGUqIGRvY3R5cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewog
ICAgIFJlZlB0cjxEb2N1bWVudD4gZG9jOwpAQCAtMjU2LDYgKzI1Niw5IEBAIFBhc3NSZWZQdHI8
RG9jdW1lbnQ+IERPTUltcGxlbWVudGF0aW9uOjoKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQog
CisgICAgaWYgKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgJiYgc2NyaXB0RXhlY3V0aW9uQ29udGV4
dC0+aXNEb2N1bWVudCgpKQorICAgICAgICBkb2MtPnNldE9yaWdpbkRvY3VtZW50KHN0YXRpY19j
YXN0PERvY3VtZW50Kj4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkpOworCiAgICAgLy8gRklYTUU6
IFNob3VsZG4ndCB0aGlzIGNhbGwgYXBwZW5kQ2hpbGQgaW5zdGVhZD8KICAgICBpZiAoZG9jdHlw
ZSkKICAgICAgICAgZG9jLT5wYXJzZXJBZGRDaGlsZChkb2N0eXBlKTsKSW5kZXg6IFdlYkNvcmUv
ZG9tL0RPTUltcGxlbWVudGF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRE9NSW1w
bGVtZW50YXRpb24uaAkocmV2aXNpb24gNjg5OTUpCisrKyBXZWJDb3JlL2RvbS9ET01JbXBsZW1l
bnRhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBAIGNsYXNzIERvY3VtZW50
VHlwZTsKIGNsYXNzIEZyYW1lOwogY2xhc3MgSFRNTERvY3VtZW50OwogY2xhc3MgS1VSTDsKK2Ns
YXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAKIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7
CiAKQEAgLTQ2LDcgKzQ3LDcgQEAgcHVibGljOgogICAgIC8vIERPTSBtZXRob2RzICYgYXR0cmli
dXRlcyBmb3IgRE9NSW1wbGVtZW50YXRpb24KICAgICBzdGF0aWMgYm9vbCBoYXNGZWF0dXJlKGNv
bnN0IFN0cmluZyYgZmVhdHVyZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKTsKICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxEb2N1bWVudFR5cGU+IGNyZWF0ZURvY3VtZW50VHlwZShjb25zdCBTdHJpbmcm
IHF1YWxpZmllZE5hbWUsIGNvbnN0IFN0cmluZyYgcHVibGljSWQsIGNvbnN0IFN0cmluZyAmc3lz
dGVtSWQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxEb2N1bWVudD4g
Y3JlYXRlRG9jdW1lbnQoY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IFN0cmluZyYg
cXVhbGlmaWVkTmFtZSwgRG9jdW1lbnRUeXBlKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPERvY3VtZW50PiBjcmVhdGVEb2N1bWVudChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IFN0cmluZyYgcXVhbGlmaWVk
TmFtZSwgRG9jdW1lbnRUeXBlKiwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgRE9NSW1wbGVtZW50
YXRpb24qIGdldEludGVyZmFjZShjb25zdCBTdHJpbmcmIGZlYXR1cmUpOwogCkluZGV4OiBXZWJD
b3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20v
RE9NSW1wbGVtZW50YXRpb24uaWRsCShyZXZpc2lvbiA2ODk5NSkKKysrIFdlYkNvcmUvZG9tL0RP
TUltcGxlbWVudGF0aW9uLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMzMsOSArMzMsOSBAQCBtb2R1
bGUgY29yZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW4gW0NvbnZlcnRVbmRlZmluZWRPck51bGxUb051bGxTdHJpbmddIERPTVN0cmlu
ZyBwdWJsaWNJZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbiBbQ29udmVydFVuZGVmaW5lZE9yTnVsbFRvTnVsbFN0cmluZ10gRE9NU3Ry
aW5nIHN5c3RlbUlkKQogICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7Ci0gICAgICAg
IFtPbGRTdHlsZU9iakNdIERvY3VtZW50IGNyZWF0ZURvY3VtZW50KGluIFtDb252ZXJ0TnVsbFRv
TnVsbFN0cmluZ10gRE9NU3RyaW5nIG5hbWVzcGFjZVVSSSwgCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZ10g
RE9NU3RyaW5nIHF1YWxpZmllZE5hbWUsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbiBbQ29udmVydE51bGxUb051bGxTdHJpbmddIERvY3VtZW50VHlw
ZSBkb2N0eXBlKQorICAgICAgICBbT2xkU3R5bGVPYmpDLCBDYWxsV2l0aD1TY3JpcHRFeGVjdXRp
b25Db250ZXh0XSBEb2N1bWVudCBjcmVhdGVEb2N1bWVudChpbiBbQ29udmVydE51bGxUb051bGxT
dHJpbmddIERPTVN0cmluZyBuYW1lc3BhY2VVUkksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
IFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIHF1YWxpZmllZE5hbWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGluIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRG9jdW1lbnRU
eXBlIGRvY3R5cGUpCiAgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKIAogICAgICAg
ICAvLyBET01JbXBsZW1lbnRhdGlvbkNTUyBpbnRlcmZhY2UgZnJvbSBET00gTGV2ZWwgMiBDU1MK
SW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDY4OTk1KQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzc2LDYgKzEzNzYsMzQgQEAgU2V0dGluZ3MqIERvY3Vt
ZW50OjpzZXR0aW5ncygpIGNvbnN0CiAgICAgcmV0dXJuIG1fZnJhbWUgPyBtX2ZyYW1lLT5zZXR0
aW5ncygpIDogMDsKIH0KIAordm9pZCBEb2N1bWVudDo6c2V0T3JpZ2luRG9jdW1lbnQoUGFzc1Jl
ZlB0cjxEb2N1bWVudD4gb3JpZ2luRG9jdW1lbnQpCit7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBz
dG9yZXMgYSByZWZlcmVuY2UgdG8gdGhlIGRvY3VtZW50IHdoZXJlIHRoaXMgZG9jdW1lbnQKKyAg
ICAvLyBvcmlnaW5hdGVkIGZyb20uIFRoaXMgaXMgdXNlZCBmb3IgZnJhbWVsZXNzIGRvY3VtZW50
cywgc28gdGhhdCB3ZSBjYW4KKyAgICAvLyBmaW5kIGEgZnJhbWUgd2hlbiB3ZSBhcmUgbG9hZGlu
ZyBzdWJyZXNvdXJjZXMuIEFsc28sIGJlY2F1c2UgZnJhbWVsZXNzCisgICAgLy8gZG9jdW1lbnRz
IGRvbid0IGdldCBhIFNlY3VyaXR5T3JpZ2luIHdoZW4gY29uc3RydWN0ZWQsIHdlIG5lZWQgdG8g
c2V0CisgICAgLy8gaXQgaGVyZSB0byBiZSBhYmxlIHRvIGxvYWQgc3VicmVzb3VyY2VzLgorCisg
ICAgQVNTRVJUKG9yaWdpbkRvY3VtZW50KTsKKyAgICBBU1NFUlQoc2VjdXJpdHlPcmlnaW4oKS0+
aXNFbXB0eSgpKTsKKworICAgIG1fb3JpZ2luRG9jdW1lbnQgPSBvcmlnaW5Eb2N1bWVudDsKKwor
ICAgIGlmICghbV91cmwuaXNFbXB0eSgpKQorICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0
OjpzZXRTZWN1cml0eU9yaWdpbihTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKG1fdXJsKSk7CisgICAg
ZWxzZQorICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpzZXRTZWN1cml0eU9yaWdpbiht
X29yaWdpbkRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpKTsKK30KKworRnJhbWUqIERvY3VtZW50
OjpmaW5kRnJhbWVGb3JTdWJyZXNvdXJjZUxvYWRzKCkKK3sKKyAgICBmb3IgKERvY3VtZW50KiBk
b2N1bWVudCA9IHRoaXM7IGRvY3VtZW50OyBkb2N1bWVudCA9IGRvY3VtZW50LT5vcmlnaW5Eb2N1
bWVudCgpKSB7CisgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKSkK
KyAgICAgICAgICAgIHJldHVybiBmcmFtZTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKIFBh
c3NSZWZQdHI8UmFuZ2U+IERvY3VtZW50OjpjcmVhdGVSYW5nZSgpCiB7CiAgICAgcmV0dXJuIFJh
bmdlOjpjcmVhdGUodGhpcyk7CkBAIC0zOTU1LDcgKzM5ODMsNyBAQCB2b2lkIERvY3VtZW50Ojph
cHBseVhTTFRyYW5zZm9ybShQcm9jZXNzCiAgICAgaWYgKCFwcm9jZXNzb3ItPnRyYW5zZm9ybVRv
U3RyaW5nKHRoaXMsIHJlc3VsdE1JTUVUeXBlLCBuZXdTb3VyY2UsIHJlc3VsdEVuY29kaW5nKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIC8vIEZJWE1FOiBJZiB0aGUgdHJhbnNmb3JtIGZhaWxlZCB3
ZSBzaG91bGQgcHJvYmFibHkgcmVwb3J0IGFuIGVycm9yIChsaWtlIE1vemlsbGEgZG9lcykuCi0g
ICAgcHJvY2Vzc29yLT5jcmVhdGVEb2N1bWVudEZyb21Tb3VyY2UobmV3U291cmNlLCByZXN1bHRF
bmNvZGluZywgcmVzdWx0TUlNRVR5cGUsIHRoaXMsIGZyYW1lKCkpOworICAgIHByb2Nlc3Nvci0+
Y3JlYXRlRG9jdW1lbnRGcm9tU291cmNlKG5ld1NvdXJjZSwgcmVzdWx0RW5jb2RpbmcsIHJlc3Vs
dE1JTUVUeXBlLCB0aGlzLCBmcmFtZSgpLCAwKTsKIH0KIAogdm9pZCBEb2N1bWVudDo6c2V0VHJh
bnNmb3JtU291cmNlKFBhc3NPd25QdHI8VHJhbnNmb3JtU291cmNlPiBzb3VyY2UpCkluZGV4OiBX
ZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50
LmgJKHJldmlzaW9uIDY4OTk1KQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtNDg1LDYgKzQ4NSwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBJbnNwZWN0b3JD
b250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyKCkgY29uc3Q7IC8vIGNhbiBiZSBOVUxMCiAj
ZW5kaWYKIAorICAgIERvY3VtZW50KiBvcmlnaW5Eb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
b3JpZ2luRG9jdW1lbnQuZ2V0KCk7IH0KKyAgICB2b2lkIHNldE9yaWdpbkRvY3VtZW50KFBhc3NS
ZWZQdHI8RG9jdW1lbnQ+KTsKKyAgICBGcmFtZSogZmluZEZyYW1lRm9yU3VicmVzb3VyY2VMb2Fk
cygpOworCiAgICAgUGFzc1JlZlB0cjxSYW5nZT4gY3JlYXRlUmFuZ2UoKTsKIAogICAgIFBhc3NS
ZWZQdHI8Tm9kZUl0ZXJhdG9yPiBjcmVhdGVOb2RlSXRlcmF0b3IoTm9kZSogcm9vdCwgdW5zaWdu
ZWQgd2hhdFRvU2hvdywKQEAgLTEwODMsNiArMTA4Nyw3IEBAIHByaXZhdGU6CiAgICAgRnJhbWUq
IG1fZnJhbWU7CiAgICAgT3duUHRyPENhY2hlZFJlc291cmNlTG9hZGVyPiBtX2NhY2hlZFJlc291
cmNlTG9hZGVyOwogICAgIFJlZlB0cjxEb2N1bWVudFBhcnNlcj4gbV9wYXJzZXI7CisgICAgUmVm
UHRyPERvY3VtZW50PiBtX29yaWdpbkRvY3VtZW50OwogICAgIGJvb2wgbV93ZWxsRm9ybWVkOwog
CiAgICAgLy8gRG9jdW1lbnQgVVJMcy4KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRU
aHJlYWRhYmxlTG9hZGVyLmNwcAkocmV2aXNpb24gNjg5OTUpCisrKyBXZWJDb3JlL2xvYWRlci9E
b2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzAsOCArMzMw
LDE2IEBAIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVxdWUKICAgICBSZXNv
dXJjZUVycm9yIGVycm9yOwogICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7CiAgICAgdW5z
aWduZWQgbG9uZyBpZGVudGlmaWVyID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBsb25n
Pjo6bWF4KCk7Ci0gICAgaWYgKG1fZG9jdW1lbnQtPmZyYW1lKCkpCi0gICAgICAgIGlkZW50aWZp
ZXIgPSBtX2RvY3VtZW50LT5mcmFtZSgpLT5sb2FkZXIoKS0+bG9hZFJlc291cmNlU3luY2hyb25v
dXNseShyZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsK
KyAgICBpZiAoRnJhbWUqIGZyYW1lID0gbV9kb2N1bWVudC0+ZmluZEZyYW1lRm9yU3VicmVzb3Vy
Y2VMb2FkcygpKSB7CisgICAgICAgIEtVUkwgcmVmZXJyZXIobV9kb2N1bWVudC0+dXJsKCkpOwor
ICAgICAgICByZWZlcnJlci5zZXRVc2VyKFN0cmluZygpKTsKKyAgICAgICAgcmVmZXJyZXIuc2V0
UGFzcyhTdHJpbmcoKSk7CisgICAgICAgIHJlZmVycmVyLnJlbW92ZUZyYWdtZW50SWRlbnRpZmll
cigpOworCisgICAgICAgIGlkZW50aWZpZXIgPSBmcmFtZS0+bG9hZGVyKCktPmxvYWRSZXNvdXJj
ZVN5bmNocm9ub3VzbHkoCisgICAgICAgICAgICByZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFscywg
cmVmZXJyZXIuc3RyaW5nKCksCisgICAgICAgICAgICBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOwor
ICAgIH0KIAogICAgIC8vIE5vIGV4Y2VwdGlvbiBmb3IgZmlsZTovLy8gcmVzb3VyY2VzLCBzZWUg
PHJkYXI6Ly9wcm9ibGVtLzQ5NjIyOTg+LgogICAgIC8vIEFsc28sIGlmIHdlIGhhdmUgYW4gSFRU
UCByZXNwb25zZSwgdGhlbiBpdCB3YXNuJ3QgYSBuZXR3b3JrIGVycm9yIGluIGZhY3QuCkluZGV4
OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9s
b2FkZXIvRnJhbWVMb2FkZXIuY3BwCShyZXZpc2lvbiA2ODk5NSkKKysrIFdlYkNvcmUvbG9hZGVy
L0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjczOCw3ICsyNzM4LDEyIEBAIHZv
aWQgRnJhbWVMb2FkZXI6OmxvYWRQb3N0UmVxdWVzdChjb25zdCAKIAogdW5zaWduZWQgbG9uZyBG
cmFtZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzLCBSZXNvdXJj
ZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYg
ZGF0YSkKIHsKLSAgICBTdHJpbmcgcmVmZXJyZXIgPSBtX291dGdvaW5nUmVmZXJyZXI7CisgICAg
cmV0dXJuIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkocmVxdWVzdCwgc3RvcmVkQ3JlZGVudGlh
bHMsIG1fb3V0Z29pbmdSZWZlcnJlciwgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKK30KKwordW5z
aWduZWQgbG9uZyBGcmFtZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRp
YWxzLCBjb25zdCBTdHJpbmcmIG91dGdvaW5nUmVmZXJyZXIsIFJlc291cmNlRXJyb3ImIGVycm9y
LCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQoreworICAg
IFN0cmluZyByZWZlcnJlciA9IG91dGdvaW5nUmVmZXJyZXI7CiAgICAgaWYgKFNlY3VyaXR5T3Jp
Z2luOjpzaG91bGRIaWRlUmVmZXJyZXIocmVxdWVzdC51cmwoKSwgcmVmZXJyZXIpKQogICAgICAg
ICByZWZlcnJlciA9IFN0cmluZygpOwogICAgIApJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVM
b2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCShyZXZp
c2lvbiA2ODk5NSkKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEyMyw2ICsxMjMsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgcmVwb3J0TG9j
YWxMb2FkRmFpbGVkKEZyYW1lKiwgY29uc3QgU3RyaW5nJiB1cmwpOwogCiAgICAgdW5zaWduZWQg
bG9uZyBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFN0
b3JlZENyZWRlbnRpYWxzLCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3Rv
cjxjaGFyPiYgZGF0YSk7CisgICAgdW5zaWduZWQgbG9uZyBsb2FkUmVzb3VyY2VTeW5jaHJvbm91
c2x5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFN0b3JlZENyZWRlbnRpYWxzLCBjb25zdCBTdHJp
bmcmIG91dGdvaW5nUmVmZXJyZXIsIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwg
VmVjdG9yPGNoYXI+JiBkYXRhKTsKIAogICAgIGJvb2wgY2FuSGFuZGxlUmVxdWVzdChjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmKTsKIApJbmRleDogV2ViQ29yZS94bWwvRE9NUGFyc2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3htbC9ET01QYXJzZXIuY3BwCShyZXZpc2lvbiA2ODk5NSkKKysr
IFdlYkNvcmUveG1sL0RPTVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDEzICsyNCwx
NiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCi1QYXNzUmVmUHRyPERvY3VtZW50PiBE
T01QYXJzZXI6OnBhcnNlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0ciwgY29uc3QgU3RyaW5n
JiBjb250ZW50VHlwZSkKK1Bhc3NSZWZQdHI8RG9jdW1lbnQ+IERPTVBhcnNlcjo6cGFyc2VGcm9t
U3RyaW5nKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNv
bnN0IFN0cmluZyYgc3RyLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKQogewogICAgIGlmICgh
RE9NSW1wbGVtZW50YXRpb246OmlzWE1MTUlNRVR5cGUoY29udGVudFR5cGUpKQogICAgICAgICBy
ZXR1cm4gMDsKIAogICAgIFJlZlB0cjxEb2N1bWVudD4gZG9jID0gRE9NSW1wbGVtZW50YXRpb246
OmNyZWF0ZURvY3VtZW50KGNvbnRlbnRUeXBlLCAwLCBLVVJMKCksIGZhbHNlKTsKIAorICAgIGlm
IChzY3JpcHRFeGVjdXRpb25Db250ZXh0ICYmIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzRG9j
dW1lbnQoKSkKKyAgICAgICAgZG9jLT5zZXRPcmlnaW5Eb2N1bWVudChzdGF0aWNfY2FzdDxEb2N1
bWVudCo+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpKTsKKwogICAgIGRvYy0+b3BlbigpOwogICAg
IGRvYy0+d3JpdGUoc3RyKTsKICAgICBkb2MtPmZpbmlzaFBhcnNpbmcoKTsKSW5kZXg6IFdlYkNv
cmUveG1sL0RPTVBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1sL0RPTVBhcnNlci5o
CShyZXZpc2lvbiA2ODk5NSkKKysrIFdlYkNvcmUveG1sL0RPTVBhcnNlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSw3ICsyOSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwdWJsaWM6CiAg
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPERPTVBhcnNlcj4gY3JlYXRlKCkgeyByZXR1cm4gYWRv
cHRSZWYobmV3IERPTVBhcnNlcik7IH0KICAgICAgICAgCi0gICAgICAgIFBhc3NSZWZQdHI8RG9j
dW1lbnQ+IHBhcnNlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0ciwgY29uc3QgU3RyaW5nJiBj
b250ZW50VHlwZSk7CisgICAgICAgIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IHBhcnNlRnJvbVN0cmlu
ZyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBzdHIsIGNvbnN0IFN0cmlu
ZyYgY29udGVudFR5cGUpOwogICAgICAgICAKICAgICBwcml2YXRlOgogICAgICAgICBET01QYXJz
ZXIoKSB7IH0gICAgICAgIApJbmRleDogV2ViQ29yZS94bWwvRE9NUGFyc2VyLmlkbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3htbC9ET01QYXJzZXIuaWRsCShyZXZpc2lvbiA2ODk5NSkKKysrIFdl
YkNvcmUveG1sL0RPTVBhcnNlci5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTE5LDYgKzE5LDYgQEAK
IAogbW9kdWxlIHhwYXRoIHsKICAgICBpbnRlcmZhY2UgW0NhbkJlQ29uc3RydWN0ZWRdIERPTVBh
cnNlciB7Ci0gICAgICAgIERvY3VtZW50IHBhcnNlRnJvbVN0cmluZyhpbiBET01TdHJpbmcgc3Ry
LCBpbiBET01TdHJpbmcgY29udGVudFR5cGUpOworICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dF0gRG9jdW1lbnQgcGFyc2VGcm9tU3RyaW5nKGluIERPTVN0cmluZyBzdHIs
IGluIERPTVN0cmluZyBjb250ZW50VHlwZSk7CiAgICAgfTsKIH0KSW5kZXg6IFdlYkNvcmUveG1s
L1hNTEh0dHBSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YTUxIdHRwUmVx
dWVzdC5jcHAJKHJldmlzaW9uIDY4OTk1KQorKysgV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTgsNiArMjU4LDcgQEAgRG9jdW1lbnQqIFhNTEh0dHBS
ZXF1ZXN0OjpyZXNwb25zZVhNTChFeAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbV9y
ZXNwb25zZVhNTCA9IERvY3VtZW50OjpjcmVhdGUoMCwgbV91cmwpOwogICAgICAgICAgICAgbV9y
ZXNwb25zZVhNTC0+b3BlbigpOworICAgICAgICAgICAgbV9yZXNwb25zZVhNTC0+c2V0T3JpZ2lu
RG9jdW1lbnQoZG9jdW1lbnQoKSk7CiAgICAgICAgICAgICAvLyBGSVhNRTogU2V0IExhc3QtTW9k
aWZpZWQuCiAgICAgICAgICAgICBtX3Jlc3BvbnNlWE1MLT53cml0ZShTdHJpbmcobV9yZXNwb25z
ZVRleHQpKTsKICAgICAgICAgICAgIG1fcmVzcG9uc2VYTUwtPmZpbmlzaFBhcnNpbmcoKTsKSW5k
ZXg6IFdlYkNvcmUveG1sL1hTTEltcG9ydFJ1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
eG1sL1hTTEltcG9ydFJ1bGUuY3BwCShyZXZpc2lvbiA2ODk5NSkKKysrIFdlYkNvcmUveG1sL1hT
TEltcG9ydFJ1bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiwxMiBAQAogCiAjaW5j
bHVkZSAiQ2FjaGVkWFNMU3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9h
ZGVyLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3Qu
aCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIlRleHRSZXNvdXJjZURl
Y29kZXIuaCIKKyNpbmNsdWRlICJUaHJlYWRhYmxlTG9hZGVyLmgiCisjaW5jbHVkZSAiVGhyZWFk
YWJsZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIlhTTFN0eWxlU2hlZXQuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtNzcsMzIgKzgzLDY4IEBAIGJvb2wgWFNMSW1wb3J0UnVsZTo6aXNM
b2FkaW5nKCkKIAogdm9pZCBYU0xJbXBvcnRSdWxlOjpsb2FkU2hlZXQoKQogewotICAgIENhY2hl
ZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IDA7CiAgICAgU3R5bGVCYXNl
KiByb290ID0gdGhpczsKICAgICBTdHlsZUJhc2UqIHBhcmVudDsKKwogICAgIHdoaWxlICgocGFy
ZW50ID0gcm9vdC0+cGFyZW50KCkpKQogICAgICAgICByb290ID0gcGFyZW50OwotICAgIGlmIChy
b290LT5pc1hTTFN0eWxlU2hlZXQoKSkKLSAgICAgICAgY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBz
dGF0aWNfY2FzdDxYU0xTdHlsZVNoZWV0Kj4ocm9vdCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7
Ci0gICAgCi0gICAgU3RyaW5nIGFic0hyZWYgPSBtX3N0ckhyZWY7CisKKyAgICBBU1NFUlQocm9v
dC0+aXNYU0xTdHlsZVNoZWV0KCkpOworICAgIFhTTFN0eWxlU2hlZXQqIHJvb3RTdHlsZVNoZWV0
ID0gc3RhdGljX2Nhc3Q8WFNMU3R5bGVTaGVldCo+KHJvb3QpOworICAgIE5vZGUqIG93bmVyTm9k
ZSA9IHJvb3RTdHlsZVNoZWV0LT5vd25lck5vZGUoKTsKKyAgICBEb2N1bWVudCogb3JpZ2luRG9j
dW1lbnQgPSBvd25lck5vZGUgPyBvd25lck5vZGUtPmRvY3VtZW50KCktPm9yaWdpbkRvY3VtZW50
KCkgOiAwOworCiAgICAgWFNMU3R5bGVTaGVldCogcGFyZW50U2hlZXQgPSBwYXJlbnRTdHlsZVNo
ZWV0KCk7Ci0gICAgaWYgKCFwYXJlbnRTaGVldC0+ZmluYWxVUkwoKS5pc051bGwoKSkKLSAgICAg
ICAgLy8gdXNlIHBhcmVudCBzdHlsZWhlZXQncyBVUkwgYXMgdGhlIGJhc2UgVVJMCi0gICAgICAg
IGFic0hyZWYgPSBLVVJMKHBhcmVudFNoZWV0LT5maW5hbFVSTCgpLCBtX3N0ckhyZWYpLnN0cmlu
ZygpOwotICAgIAorICAgIEFTU0VSVChwYXJlbnRTaGVldCk7CisKKyAgICBSZWZQdHI8RG9jdW1l
bnQ+IHBhcmVudERvY3VtZW50ID0gcGFyZW50U2hlZXQtPm93bmVyRG9jdW1lbnQoKTsKKworICAg
IGlmICghcGFyZW50RG9jdW1lbnQgfHwgcGFyZW50RG9jdW1lbnQtPnVybCgpLmlzTnVsbCgpIHx8
IHBhcmVudERvY3VtZW50LT51cmwoKSAhPSBwYXJlbnRTaGVldC0+ZmluYWxVUkwoKSkgeworICAg
ICAgICBLVVJMIHBhcmVudFVSTDsKKworICAgICAgICBpZiAoIXBhcmVudFNoZWV0LT5maW5hbFVS
TCgpLmlzTnVsbCgpKSB7CisgICAgICAgICAgICAvLyBVc2UgcGFyZW50IHN0eWxlaGVldCdzIFVS
TCBhcyB0aGUgYmFzZSBVUkwuCisgICAgICAgICAgICBwYXJlbnRVUkwgPSBwYXJlbnRTaGVldC0+
ZmluYWxVUkwoKTsKKyAgICAgICAgfSBlbHNlIGlmIChvcmlnaW5Eb2N1bWVudCkgeworICAgICAg
ICAgICAgLy8gV2hlbiBwYXJlbnQgc3R5bGVzaGVldCBkb2Vzbid0IGhhdmUgYSBmaW5hbCBVUkws
IHVzZSBiYXNlIFVSTCBmcm9tIHRoZQorICAgICAgICAgICAgLy8gZG9jdW1lbnQgdGhlIHJvb3Qg
c3R5bGVzaGVldCBvcmlnaW5hdGVkIGZyb20uIFRoaXMgY2FuIGhhcHBlbiB3aGVuIHRoZQorICAg
ICAgICAgICAgLy8gc3R5bGVzaGVldCBpcyBjcmVhdGVkIHdpdGggRE9NUGFyc2VyLnBhcnNlRnJv
bVN0cmluZygpLCBmb3IgZXhhbXBsZS4KKyAgICAgICAgICAgIHBhcmVudFVSTCA9IG9yaWdpbkRv
Y3VtZW50LT51cmwoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENyZWF0ZSBhIGZha2UgZG9j
dW1lbnQgdXNlZCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoaXMgbG9hZC4KKyAgICAgICAgcGFyZW50
RG9jdW1lbnQgPSBEb2N1bWVudDo6Y3JlYXRlKDAsIHBhcmVudFVSTCk7CisKKyAgICAgICAgaWYg
KG9yaWdpbkRvY3VtZW50KQorICAgICAgICAgICAgcGFyZW50RG9jdW1lbnQtPnNldE9yaWdpbkRv
Y3VtZW50KG9yaWdpbkRvY3VtZW50KTsKKyAgICB9CisKKyAgICBLVVJMIGFic0hyZWYgPSBwYXJl
bnREb2N1bWVudC0+Y29tcGxldGVVUkwobV9zdHJIcmVmKTsKKwogICAgIC8vIENoZWNrIGZvciBh
IGN5Y2xlIGluIG91ciBpbXBvcnQgY2hhaW4uICBJZiB3ZSBlbmNvdW50ZXIgYSBzdHlsZXNoZWV0
CiAgICAgLy8gaW4gb3VyIHBhcmVudCBjaGFpbiB3aXRoIHRoZSBzYW1lIFVSTCwgdGhlbiBqdXN0
IGJhaWwuCiAgICAgZm9yIChwYXJlbnQgPSB0aGlzLT5wYXJlbnQoKTsgcGFyZW50OyBwYXJlbnQg
PSBwYXJlbnQtPnBhcmVudCgpKSB7Ci0gICAgICAgIGlmIChwYXJlbnQtPmlzWFNMU3R5bGVTaGVl
dCgpICYmIGFic0hyZWYgPT0gc3RhdGljX2Nhc3Q8WFNMU3R5bGVTaGVldCo+KHBhcmVudCktPmZp
bmFsVVJMKCkuc3RyaW5nKCkpCisgICAgICAgIGlmIChwYXJlbnQtPmlzWFNMU3R5bGVTaGVldCgp
ICYmIGFic0hyZWYgPT0gc3RhdGljX2Nhc3Q8WFNMU3R5bGVTaGVldCo+KHBhcmVudCktPmZpbmFs
VVJMKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAotICAgIG1fY2FjaGVkU2hl
ZXQgPSBjYWNoZWRSZXNvdXJjZUxvYWRlci0+cmVxdWVzdFhTTFN0eWxlU2hlZXQoYWJzSHJlZik7
Ci0gICAgCisKKyAgICAvLyBXZSBuZWVkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gdHJhbnNmb3Jt
YXRpb25zIHN0YXJ0ZWQgdmlhIGEgcHJvY2Vzc2luZworICAgIC8vIGluc3RydWN0aW9uIGZyb20g
dGhvc2Ugc3RhcnRlZCB2aWEgSmF2YXNjcmlwdCBhbmQgWFNMVFByb2Nlc3Nvci4gVGhvc2UKKyAg
ICAvLyBzdGFydGVkIHZpYSBKYXZhc2NyaXB0IG11c3QgbG9hZCBzdWJyZXNvdXJjZXMgc3luY2hy
b25vdXNseSBvciB0aGV5CisgICAgLy8gd29uJ3QgYmUgcmVhZHkgd2hlbiBsaWJ4c2x0IG5lZWRz
IHRoZW0uCisgICAgaWYgKG93bmVyTm9kZSAmJiBvd25lck5vZGUtPm5vZGVUeXBlKCkgPT0gTm9k
ZTo6UFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFKQorICAgICAgICBmaW5pc2hMb2FkaW5nU2hl
ZXRBc3luY2hyb25vdXNseShwYXJlbnRTaGVldC0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKSwgYWJz
SHJlZik7CisgICAgZWxzZQorICAgICAgICBmaW5pc2hMb2FkaW5nU2hlZXRTeW5jaHJvbm91c2x5
KHBhcmVudERvY3VtZW50LmdldCgpLCBhYnNIcmVmKTsKK30KKwordm9pZCBYU0xJbXBvcnRSdWxl
OjpmaW5pc2hMb2FkaW5nU2hlZXRBc3luY2hyb25vdXNseShDYWNoZWRSZXNvdXJjZUxvYWRlciog
Y2FjaGVkUmVzb3VyY2VMb2FkZXIsIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICBtX2NhY2hlZFNo
ZWV0ID0gY2FjaGVkUmVzb3VyY2VMb2FkZXItPnJlcXVlc3RYU0xTdHlsZVNoZWV0KHVybC5zdHJp
bmcoKSk7CisKICAgICBpZiAobV9jYWNoZWRTaGVldCkgewogICAgICAgICBtX2NhY2hlZFNoZWV0
LT5hZGRDbGllbnQodGhpcyk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIElmIHRoZSBpbXBvcnRl
ZCBzaGVldCBpcyBpbiB0aGUgY2FjaGUsIHRoZW4gc2V0WFNMU3R5bGVTaGVldCBnZXRzIGNhbGxl
ZCwKICAgICAgICAgLy8gYW5kIHRoZSBzaGVldCBldmVuIGdldHMgcGFyc2VkICh2aWEgcGFyc2VT
dHJpbmcpLiAgSW4gdGhpcyBjYXNlIHdlIGhhdmUKICAgICAgICAgLy8gbG9hZGVkIChldmVuIGlm
IG91ciBzdWJyZXNvdXJjZXMgaGF2ZW4ndCksIHNvIGlmIHdlIGhhdmUgYSBzdHlsZXNoZWV0IGFm
dGVyCkBAIC0xMTIsNiArMTU0LDQ4IEBAIHZvaWQgWFNMSW1wb3J0UnVsZTo6bG9hZFNoZWV0KCkK
ICAgICB9CiB9CiAKK2NsYXNzIEltcG9ydExvYWRlckNsaWVudCA6IHB1YmxpYyBUaHJlYWRhYmxl
TG9hZGVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBJbXBvcnRMb2FkZXJDbGllbnQoKSA6IG1fZmFp
bGVkKGZhbHNlKSB7IH0KKworICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmIHJlc3BvbnNlKSB7IG1fcmVzcG9uc2VVUkwgPSByZXNwb25zZS51cmwoKTsg
fQorICAgIHZvaWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkg
eyBtX3Jhd0RhdGEuYXBwZW5kKGRhdGEsIGxlbmd0aCk7IH0KKyAgICB2b2lkIGRpZEZhaWwoY29u
c3QgUmVzb3VyY2VFcnJvciYpIHsgbV9mYWlsZWQgPSB0cnVlOyB9CisKKyAgICBjb25zdCBWZWN0
b3I8Y2hhcj4mIHJhd0RhdGEoKSBjb25zdCB7IHJldHVybiBtX3Jhd0RhdGE7IH0KKyAgICBjb25z
dCBLVVJMJiByZXNwb25zZVVSTCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzcG9uc2VVUkw7IH0KKyAg
ICBib29sIGZhaWxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmFpbGVkOyB9CisKK3ByaXZhdGU6Cisg
ICAgVmVjdG9yPGNoYXI+IG1fcmF3RGF0YTsKKyAgICBLVVJMIG1fcmVzcG9uc2VVUkw7CisgICAg
Ym9vbCBtX2ZhaWxlZDsKK307CisKK3ZvaWQgWFNMSW1wb3J0UnVsZTo6ZmluaXNoTG9hZGluZ1No
ZWV0U3luY2hyb25vdXNseShEb2N1bWVudCogcGFyZW50RG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVy
bCkKK3sKKyAgICBib29sIHNhbWVPcmlnaW5SZXF1ZXN0ID0gcGFyZW50RG9jdW1lbnQtPnNlY3Vy
aXR5T3JpZ2luKCktPmNhblJlcXVlc3QodXJsKTsKKworICAgIFRocmVhZGFibGVMb2FkZXJPcHRp
b25zIG9wdGlvbnM7CisgICAgb3B0aW9ucy5zZW5kTG9hZENhbGxiYWNrcyA9IHRydWU7CisgICAg
b3B0aW9ucy5zbmlmZkNvbnRlbnQgPSBmYWxzZTsKKyAgICBvcHRpb25zLmZvcmNlUHJlZmxpZ2h0
ID0gZmFsc2U7CisgICAgb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzID0gc2FtZU9yaWdpblJlcXVl
c3Q7CisgICAgb3B0aW9ucy5jcm9zc09yaWdpblJlcXVlc3RQb2xpY3kgPSBVc2VBY2Nlc3NDb250
cm9sOworCisgICAgSW1wb3J0TG9hZGVyQ2xpZW50IGNsaWVudDsKKyAgICBUaHJlYWRhYmxlTG9h
ZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KHBhcmVudERvY3VtZW50LCB1cmwsIGNsaWVu
dCwgb3B0aW9ucyk7CisKKyAgICBpZiAoY2xpZW50LmZhaWxlZCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gZGVjb2RlciA9IFRleHRSZXNvdXJj
ZURlY29kZXI6OmNyZWF0ZSgidGV4dC94c2wiKTsKKyAgICBTdHJpbmcgc2hlZXQoZGVjb2Rlci0+
ZGVjb2RlKGNsaWVudC5yYXdEYXRhKCkuZGF0YSgpLCBjbGllbnQucmF3RGF0YSgpLnNpemUoKSkp
OworICAgIHNoZWV0ICs9IGRlY29kZXItPmZsdXNoKCk7CisKKyAgICBzZXRYU0xTdHlsZVNoZWV0
KHVybC5zdHJpbmcoKSwgY2xpZW50LnJlc3BvbnNlVVJMKCksIHNoZWV0KTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFhTTFQpCkluZGV4OiBXZWJDb3Jl
L3htbC9YU0xJbXBvcnRSdWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWFNMSW1wb3J0
UnVsZS5oCShyZXZpc2lvbiA2ODk5NSkKKysrIFdlYkNvcmUveG1sL1hTTEltcG9ydFJ1bGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsMTAgQEAgcHJpdmF0ZToKIAogICAgIC8vIGZyb20g
Q2FjaGVkUmVzb3VyY2VDbGllbnQKICAgICB2aXJ0dWFsIHZvaWQgc2V0WFNMU3R5bGVTaGVldChj
b25zdCBTdHJpbmcmIGhyZWYsIGNvbnN0IEtVUkwmIGJhc2VVUkwsIGNvbnN0IFN0cmluZyYgc2hl
ZXQpOwotICAgIAorCisgICAgdm9pZCBmaW5pc2hMb2FkaW5nU2hlZXRBc3luY2hyb25vdXNseShD
YWNoZWRSZXNvdXJjZUxvYWRlciosIGNvbnN0IEtVUkwmKTsKKyAgICB2b2lkIGZpbmlzaExvYWRp
bmdTaGVldFN5bmNocm9ub3VzbHkoRG9jdW1lbnQqLCBjb25zdCBLVVJMJik7CisKICAgICBTdHJp
bmcgbV9zdHJIcmVmOwogICAgIFJlZlB0cjxYU0xTdHlsZVNoZWV0PiBtX3N0eWxlU2hlZXQ7CiAg
ICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkWFNMU3R5bGVTaGVldD4gbV9jYWNoZWRTaGVl
dDsKSW5kZXg6IFdlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuY3BwCShyZXZpc2lvbiA2ODk5NSkKKysrIFdlYkNvcmUv
eG1sL1hTTFRQcm9jZXNzb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIHN0
YXRpYyBpbmxpbmUgdm9pZCB0cmFuc2Zvcm1UZXh0U3RyaW5nVG8KIH0KIAogUGFzc1JlZlB0cjxE
b2N1bWVudD4gWFNMVFByb2Nlc3Nvcjo6Y3JlYXRlRG9jdW1lbnRGcm9tU291cmNlKGNvbnN0IFN0
cmluZyYgc291cmNlU3RyaW5nLAotICAgIGNvbnN0IFN0cmluZyYgc291cmNlRW5jb2RpbmcsIGNv
bnN0IFN0cmluZyYgc291cmNlTUlNRVR5cGUsIE5vZGUqIHNvdXJjZU5vZGUsIEZyYW1lKiBmcmFt
ZSkKKyAgICBjb25zdCBTdHJpbmcmIHNvdXJjZUVuY29kaW5nLCBjb25zdCBTdHJpbmcmIHNvdXJj
ZU1JTUVUeXBlLCBOb2RlKiBzb3VyY2VOb2RlLCBGcmFtZSogZnJhbWUsIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCiB7CiAgICAgUmVmUHRyPERvY3VtZW50
PiBvd25lckRvY3VtZW50ID0gc291cmNlTm9kZS0+ZG9jdW1lbnQoKTsKICAgICBib29sIHNvdXJj
ZUlzRG9jdW1lbnQgPSAoc291cmNlTm9kZSA9PSBvd25lckRvY3VtZW50LmdldCgpKTsKQEAgLTgx
LDcgKzgxLDggQEAgUGFzc1JlZlB0cjxEb2N1bWVudD4gWFNMVFByb2Nlc3Nvcjo6Y3JlYQogICAg
ICAgICAgICAgdmlldy0+Y2xlYXIoKTsKICAgICAgICAgcmVzdWx0LT5zZXRUcmFuc2Zvcm1Tb3Vy
Y2VEb2N1bWVudChmcmFtZS0+ZG9jdW1lbnQoKSk7CiAgICAgICAgIGZyYW1lLT5zZXREb2N1bWVu
dChyZXN1bHQpOwotICAgIH0KKyAgICB9IGVsc2UgaWYgKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQg
JiYgc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNEb2N1bWVudCgpKQorICAgICAgICByZXN1bHQt
PnNldE9yaWdpbkRvY3VtZW50KHN0YXRpY19jYXN0PERvY3VtZW50Kj4oc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCkpOwogCiAgICAgcmVzdWx0LT5vcGVuKCk7CiAKQEAgLTEyMiwxNCArMTIzLDE0IEBA
IHN0YXRpYyBpbmxpbmUgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGMKICAgICByZXR1cm4gZnJh
Z21lbnQ7CiB9CiAKLVBhc3NSZWZQdHI8RG9jdW1lbnQ+IFhTTFRQcm9jZXNzb3I6OnRyYW5zZm9y
bVRvRG9jdW1lbnQoTm9kZSogc291cmNlTm9kZSkKK1Bhc3NSZWZQdHI8RG9jdW1lbnQ+IFhTTFRQ
cm9jZXNzb3I6OnRyYW5zZm9ybVRvRG9jdW1lbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCwgTm9kZSogc291cmNlTm9kZSkKIHsKICAgICBTdHJpbmcgcmVz
dWx0TUlNRVR5cGU7CiAgICAgU3RyaW5nIHJlc3VsdFN0cmluZzsKICAgICBTdHJpbmcgcmVzdWx0
RW5jb2Rpbmc7CiAgICAgaWYgKCF0cmFuc2Zvcm1Ub1N0cmluZyhzb3VyY2VOb2RlLCByZXN1bHRN
SU1FVHlwZSwgcmVzdWx0U3RyaW5nLCByZXN1bHRFbmNvZGluZykpCiAgICAgICAgIHJldHVybiAw
OwotICAgIHJldHVybiBjcmVhdGVEb2N1bWVudEZyb21Tb3VyY2UocmVzdWx0U3RyaW5nLCByZXN1
bHRFbmNvZGluZywgcmVzdWx0TUlNRVR5cGUsIHNvdXJjZU5vZGUsIDApOworICAgIHJldHVybiBj
cmVhdGVEb2N1bWVudEZyb21Tb3VyY2UocmVzdWx0U3RyaW5nLCByZXN1bHRFbmNvZGluZywgcmVz
dWx0TUlNRVR5cGUsIHNvdXJjZU5vZGUsIDAsIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogfQog
CiBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFhTTFRQcm9jZXNzb3I6OnRyYW5zZm9ybVRv
RnJhZ21lbnQoTm9kZSogc291cmNlTm9kZSwgRG9jdW1lbnQqIG91dHB1dERvYykKSW5kZXg6IFdl
YkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YU0xU
UHJvY2Vzc29yLmgJKHJldmlzaW9uIDY4OTk1KQorKysgV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NywxMiArNDcsMTIgQEAgcHVibGljOgogCiAgICAgdm9p
ZCBzZXRYU0xTdHlsZVNoZWV0KFBhc3NSZWZQdHI8WFNMU3R5bGVTaGVldD4gc3R5bGVTaGVldCkg
eyBtX3N0eWxlc2hlZXQgPSBzdHlsZVNoZWV0OyB9CiAgICAgYm9vbCB0cmFuc2Zvcm1Ub1N0cmlu
ZyhOb2RlKiBzb3VyY2UsIFN0cmluZyYgcmVzdWx0TUlNRVR5cGUsIFN0cmluZyYgcmVzdWx0U3Ry
aW5nLCBTdHJpbmcmIHJlc3VsdEVuY29kaW5nKTsKLSAgICBQYXNzUmVmUHRyPERvY3VtZW50PiBj
cmVhdGVEb2N1bWVudEZyb21Tb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmlu
ZyYgc291cmNlRW5jb2RpbmcsIGNvbnN0IFN0cmluZyYgc291cmNlTUlNRVR5cGUsIE5vZGUqIHNv
dXJjZU5vZGUsIEZyYW1lKiBmcmFtZSk7CisgICAgUGFzc1JlZlB0cjxEb2N1bWVudD4gY3JlYXRl
RG9jdW1lbnRGcm9tU291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmcmIHNv
dXJjZUVuY29kaW5nLCBjb25zdCBTdHJpbmcmIHNvdXJjZU1JTUVUeXBlLCBOb2RlKiBzb3VyY2VO
b2RlLCBGcmFtZSogZnJhbWUsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKICAgICAKICAgICAv
LyBET00gbWV0aG9kcwogICAgIHZvaWQgaW1wb3J0U3R5bGVzaGVldChQYXNzUmVmUHRyPE5vZGU+
IHN0eWxlKSB7IG1fc3R5bGVzaGVldFJvb3ROb2RlID0gc3R5bGU7IH0KICAgICBQYXNzUmVmUHRy
PERvY3VtZW50RnJhZ21lbnQ+IHRyYW5zZm9ybVRvRnJhZ21lbnQoTm9kZSogc291cmNlLCBEb2N1
bWVudCogb3VwdXREb2MpOwotICAgIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IHRyYW5zZm9ybVRvRG9j
dW1lbnQoTm9kZSogc291cmNlKTsKKyAgICBQYXNzUmVmUHRyPERvY3VtZW50PiB0cmFuc2Zvcm1U
b0RvY3VtZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBOb2RlKiBzb3VyY2UpOwogICAgIAog
ICAgIHZvaWQgc2V0UGFyYW1ldGVyKGNvbnN0IFN0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBT
dHJpbmcmIGxvY2FsTmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CiAgICAgU3RyaW5nIGdldFBh
cmFtZXRlcihjb25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3RyaW5nJiBsb2NhbE5h
bWUpIGNvbnN0OwpJbmRleDogV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcAkocmV2aXNp
b24gNjg5OTUpCisrKyBXZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yTGlieHNsdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDEwICszMCw5IEBACiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5j
bHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1
ZGUgIlJlc291cmNlRXJyb3IuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgogI2luY2x1
ZGUgIlJlc291cmNlUmVxdWVzdC5oIgotI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKKyNp
bmNsdWRlICJUaHJlYWRhYmxlTG9hZGVyLmgiCisjaW5jbHVkZSAiVGhyZWFkYWJsZUxvYWRlckNs
aWVudC5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybVNvdXJjZS5oIgogI2luY2x1ZGUgIlhNTERvY3Vt
ZW50UGFyc2VyLmgiCiAjaW5jbHVkZSAiWFNMU3R5bGVTaGVldC5oIgpAQCAtOTQsNiArOTMsMjEg
QEAgdm9pZCBYU0xUUHJvY2Vzc29yOjpwYXJzZUVycm9yRnVuYyh2b2lkKgogICAgIGNvbnNvbGUt
PmFkZE1lc3NhZ2UoWE1MTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIGxldmVsLCBlcnJv
ci0+bWVzc2FnZSwgZXJyb3ItPmxpbmUsIGVycm9yLT5maWxlKTsKIH0KIAorY2xhc3MgTG9hZERv
Y3VtZW50TG9hZGVyQ2xpZW50IDogcHVibGljIFRocmVhZGFibGVMb2FkZXJDbGllbnQgeworcHVi
bGljOgorICAgIExvYWREb2N1bWVudExvYWRlckNsaWVudCgpIDogbV9mYWlsZWQoZmFsc2UpIHsg
fQorCisgICAgdm9pZCBkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3Ro
KSB7IG1fcmF3RGF0YS5hcHBlbmQoZGF0YSwgbGVuZ3RoKTsgfQorICAgIHZvaWQgZGlkRmFpbChj
b25zdCBSZXNvdXJjZUVycm9yJikgeyBtX2ZhaWxlZCA9IHRydWU7IH0KKworICAgIGNvbnN0IFZl
Y3RvcjxjaGFyPiYgcmF3RGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fcmF3RGF0YTsgfQorICAgIGJv
b2wgZmFpbGVkKCkgY29uc3QgeyByZXR1cm4gbV9mYWlsZWQ7IH0KKworcHJpdmF0ZToKKyAgICBW
ZWN0b3I8Y2hhcj4gbV9yYXdEYXRhOworICAgIGJvb2wgbV9mYWlsZWQ7Cit9OworCiAvLyBGSVhN
RTogVGhlcmUgc2VlbXMgdG8gYmUgbm8gd2F5IHRvIGNvbnRyb2wgdGhlIGN0eHQgcG9pbnRlciBm
b3IgbG9hZGluZyBoZXJlLCB0aHVzIHdlIGhhdmUgZ2xvYmFscy4KIHN0YXRpYyBYU0xUUHJvY2Vz
c29yKiBnbG9iYWxQcm9jZXNzb3IgPSAwOwogc3RhdGljIENhY2hlZFJlc291cmNlTG9hZGVyKiBn
bG9iYWxDYWNoZWRSZXNvdXJjZUxvYWRlciA9IDA7CkBAIC0xMTIsMjAgKzEyNiwyMiBAQCBzdGF0
aWMgeG1sRG9jUHRyIGRvY0xvYWRlckZ1bmMoY29uc3QgeG1sCiAgICAgICAgIHhtbENoYXIqIGJh
c2UgPSB4bWxOb2RlR2V0QmFzZShjb250ZXh0LT5kb2N1bWVudC0+ZG9jLCBjb250ZXh0LT5ub2Rl
KTsKICAgICAgICAgS1VSTCB1cmwoS1VSTChQYXJzZWRVUkxTdHJpbmcsIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgY2hhcio+KGJhc2UpKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4odXJp
KSk7CiAgICAgICAgIHhtbEZyZWUoYmFzZSk7Ci0gICAgICAgIFJlc291cmNlRXJyb3IgZXJyb3I7
Ci0gICAgICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7CiAKLSAgICAgICAgVmVjdG9yPGNo
YXI+IGRhdGE7CisgICAgICAgIERvY3VtZW50KiBvd25lckRvY3VtZW50ID0gZ2xvYmFsQ2FjaGVk
UmVzb3VyY2VMb2FkZXItPmRvYygpOworICAgICAgICBib29sIHNhbWVPcmlnaW5SZXF1ZXN0ID0g
b3duZXJEb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdCh1cmwpOwogCi0gICAg
ICAgIGJvb2wgcmVxdWVzdEFsbG93ZWQgPSBnbG9iYWxDYWNoZWRSZXNvdXJjZUxvYWRlci0+ZnJh
bWUoKSAmJiBnbG9iYWxDYWNoZWRSZXNvdXJjZUxvYWRlci0+ZG9jKCktPnNlY3VyaXR5T3JpZ2lu
KCktPmNhblJlcXVlc3QodXJsKTsKLSAgICAgICAgaWYgKHJlcXVlc3RBbGxvd2VkKSB7Ci0gICAg
ICAgICAgICBnbG9iYWxDYWNoZWRSZXNvdXJjZUxvYWRlci0+ZnJhbWUoKS0+bG9hZGVyKCktPmxv
YWRSZXNvdXJjZVN5bmNocm9ub3VzbHkodXJsLCBBbGxvd1N0b3JlZENyZWRlbnRpYWxzLCBlcnJv
ciwgcmVzcG9uc2UsIGRhdGEpOwotICAgICAgICAgICAgcmVxdWVzdEFsbG93ZWQgPSBnbG9iYWxD
YWNoZWRSZXNvdXJjZUxvYWRlci0+ZG9jKCktPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3Qo
cmVzcG9uc2UudXJsKCkpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghcmVxdWVzdEFsbG93ZWQp
IHsKLSAgICAgICAgICAgIGRhdGEuY2xlYXIoKTsKLSAgICAgICAgICAgIGdsb2JhbENhY2hlZFJl
c291cmNlTG9hZGVyLT5wcmludEFjY2Vzc0RlbmllZE1lc3NhZ2UodXJsKTsKLSAgICAgICAgfQor
ICAgICAgICBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyBsb2FkZXJPcHRpb25zOworICAgICAgICBs
b2FkZXJPcHRpb25zLnNlbmRMb2FkQ2FsbGJhY2tzID0gdHJ1ZTsKKyAgICAgICAgbG9hZGVyT3B0
aW9ucy5zbmlmZkNvbnRlbnQgPSBmYWxzZTsKKyAgICAgICAgbG9hZGVyT3B0aW9ucy5mb3JjZVBy
ZWZsaWdodCA9IGZhbHNlOworICAgICAgICBsb2FkZXJPcHRpb25zLmFsbG93Q3JlZGVudGlhbHMg
PSBzYW1lT3JpZ2luUmVxdWVzdDsKKyAgICAgICAgbG9hZGVyT3B0aW9ucy5jcm9zc09yaWdpblJl
cXVlc3RQb2xpY3kgPSBVc2VBY2Nlc3NDb250cm9sOworCisgICAgICAgIExvYWREb2N1bWVudExv
YWRlckNsaWVudCBjbGllbnQ7CisgICAgICAgIFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXNvdXJj
ZVN5bmNocm9ub3VzbHkob3duZXJEb2N1bWVudCwgdXJsLCBjbGllbnQsIGxvYWRlck9wdGlvbnMp
OworCisgICAgICAgIGlmIChjbGllbnQuZmFpbGVkKCkpCisgICAgICAgICAgICByZXR1cm4gMDsK
IAogICAgICAgICBDb25zb2xlKiBjb25zb2xlID0gMDsKICAgICAgICAgaWYgKEZyYW1lKiBmcmFt
ZSA9IGdsb2JhbFByb2Nlc3Nvci0+eHNsU3R5bGVzaGVldCgpLT5vd25lckRvY3VtZW50KCktPmZy
YW1lKCkpCkBAIC0xMzUsNyArMTUxLDggQEAgc3RhdGljIHhtbERvY1B0ciBkb2NMb2FkZXJGdW5j
KGNvbnN0IHhtbAogCiAgICAgICAgIC8vIFdlIGRvbid0IHNwZWNpZnkgYW4gZW5jb2RpbmcgaGVy
ZS4gTmVpdGhlciBHZWNrbyBub3IgV2luSUUgcmVzcGVjdHMKICAgICAgICAgLy8gdGhlIGVuY29k
aW5nIHNwZWNpZmllZCBpbiB0aGUgSFRUUCBoZWFkZXJzLgotICAgICAgICB4bWxEb2NQdHIgZG9j
ID0geG1sUmVhZE1lbW9yeShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCksIChjb25zdCBjaGFyKil1
cmksIDAsIG9wdGlvbnMpOworICAgICAgICB4bWxEb2NQdHIgZG9jID0geG1sUmVhZE1lbW9yeShj
bGllbnQucmF3RGF0YSgpLmRhdGEoKSwgY2xpZW50LnJhd0RhdGEoKS5zaXplKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hh
cio+KHVyaSksIDAsIG9wdGlvbnMpOwogCiAgICAgICAgIHhtbFNldFN0cnVjdHVyZWRFcnJvckZ1
bmMoMCwgMCk7CiAgICAgICAgIHhtbFNldEdlbmVyaWNFcnJvckZ1bmMoMCwgMCk7CkluZGV4OiBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2ODk5NSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDQyIEBACisyMDEwLTEwLTA1ICBBbmRyZWFzIFdpY3RvciAgPGFuZHJlYXMu
d2ljdG9yQHhjZXJpb24uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIHhzbDppbXBvcnQgYW5kIGRvY3VtZW50KCkgZG9uJ3Qgd29yayBpbiBzdHls
ZXNoZWV0cyBsb2FkZWQgdmlhIFhNTEh0dHBSZXF1ZXN0CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDMxMworCisgICAgICAgICogZmFzdC94c2wvdHJh
bnNmb3JtLWRvY2ltcGwtZG9jLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC94
c2wvdHJhbnNmb3JtLWRvY2ltcGwtZG9jLnhodG1sOiBBZGRlZC4KKwlUZXN0IHRoYXQgc3R5bGVz
aGVldHMgY3JlYXRlZCB3aXRoIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZURvY3VtZW50
CisJY2FuIHVzZSB4c2w6aW1wb3J0LgorICAgICAgICAqIGZhc3QveHNsL3RyYW5zZm9ybS1kb21w
YXJzZXItZG9jLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC94c2wvdHJhbnNm
b3JtLWRvbXBhcnNlci1kb2MueGh0bWw6IEFkZGVkLgorCVRlc3QgdGhhdCBzdHlsZXNoZWV0cyBj
cmVhdGVkIHdpdGggRE9NUGFyc2VyLnBhcnNlRnJvbVN0cmluZworCWNhbiB1c2UgeHNsOmltcG9y
dC4KKyAgICAgICAgKiBmYXN0L3hzbC90cmFuc2Zvcm0tdHJhbnNmb3JtZWQtZG9jLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC94c2wvdHJhbnNmb3JtLXRyYW5zZm9ybWVkLWRv
Yy54aHRtbDogQWRkZWQuCisJVGVzdCB0aGF0IHN0eWxlc2hlZXRzIGNyZWF0ZWQgd2l0aCBYU0xU
UHJvY2Vzc29yLnRyYW5zZm9ybVRvRG9jdW1lbnQKKwljYW4gdXNlIHhzbDppbXBvcnQuCisgICAg
ICAgICogZmFzdC94c2wvdHJhbnNmb3JtLXhoci1kb2MtZXhwZWN0ZWQudHh0OgorICAgICAgICAq
IGh0dHAvdGVzdHMveHNsOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3hzbC9yZXNvdXJj
ZXM6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMveHNsL3Jlc291cmNlcy9hbGxvdy1jcm9z
cy1vcmlnaW4taGVhZGVyLmNnaTogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy94c2wvcmVz
b3VyY2VzL3RyYW5zZm9ybS1mcmFtZWQtc3ViZnJhbWUxLnhodG1sOiBBZGRlZC4KKyAgICAgICAg
KiBodHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMvdHJhbnNmb3JtLWZyYW1lZC1zdWJmcmFtZTIueGh0
bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMveHNsL3Jlc291cmNlcy94aHItZG9jLWNy
b3NzLW9yaWdpbi54c2w6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMveHNsL3Jlc291cmNl
cy94aHItZG9jLWZyb20tYWxsb3dlZC1jcm9zcy1vcmlnaW4ueHNsOiBBZGRlZC4KKyAgICAgICAg
KiBodHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMveGhyLWRvYy1pbXBvcnRlZC54c2w6IEFkZGVkLgor
ICAgICAgICAqIGh0dHAvdGVzdHMveHNsL3Jlc291cmNlcy94aHItZG9jLnhtbDogQWRkZWQuCisg
ICAgICAgICogaHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL3hoci1kb2MueHNsOiBBZGRlZC4KKyAg
ICAgICAgKiBodHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0tZnJhbWVkLWRvYy1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMveHNsL3RyYW5zZm9ybS1mcmFtZWQtZG9jLnho
dG1sOiBBZGRlZC4KKwlUZXN0IHN0eWxlc2hlZXRzIG9yaWdpbmF0aW5nIGZyb20gYW5vdGhlciBm
cmFtZS4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0teGhyLWRvYy1jcm9zcy1v
cmlnaW4tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3hzbC90cmFu
c2Zvcm0teGhyLWRvYy1jcm9zcy1vcmlnaW4ueGh0bWw6IEFkZGVkLgorCVRlc3QgdGhhdCB5b3Ug
Y2FuJ3QgaW1wb3J0IGRvY3VtZW50cyBjcm9zcyBvcmlnaW4uCisgICAgICAgICogaHR0cC90ZXN0
cy94c2wvdHJhbnNmb3JtLXhoci1kb2MtZnJvbS1hbGxvd2VkLWNyb3NzLW9yaWdpbi1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMveHNsL3RyYW5zZm9ybS14aHItZG9j
LWZyb20tYWxsb3dlZC1jcm9zcy1vcmlnaW4ueGh0bWw6IEFkZGVkLgorCiAyMDEwLTEwLTAzICBL
ZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCBy
ZW1vdmUgcmVkdW5kYW50IGV4cGVjdGF0aW9ucy4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QveHNs
L3RyYW5zZm9ybS1kb2NpbXBsLWRvYy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC94c2wvdHJhbnNmb3JtLWRvY2ltcGwtZG9jLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS1kb2NpbXBsLWRvYy1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorVGVzdCBmb3IgYnVnIDEwMzEz
OiB4c2w6aW1wb3J0IGRvZXNuJ3Qgd29yayBpbiBzdHlsZXNoZWV0cyBsb2FkZWQgdmlhIFhNTEh0
dHBSZXF1ZXN0LgorCitTVUNDRVNTCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zv
cm0tZG9jaW1wbC1kb2MueGh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC94c2wv
dHJhbnNmb3JtLWRvY2ltcGwtZG9jLnhodG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC94c2wvdHJhbnNmb3JtLWRvY2ltcGwtZG9jLnhodG1sCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDQ1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCFET0NU
WVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53
My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwxMS5kdGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93
d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiI+Cis8aGVhZD4KKyAgICA8dGl0bGU+
eHNsIGltcG9ydCB0ZXN0PC90aXRsZT4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw
dCI+PCFbQ0RBVEFbCisgICAgICAgIGZ1bmN0aW9uIGxvYWQoKSB7CisgICAgICAgICAgICBpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworICAgICAgICAgICAgdmFyIHhzbHROUyA9ICJodHRw
Oi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iOworICAgICAgICAgICAgdmFyIHhzbHRE
b2MgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVEb2N1bWVudCh4c2x0TlMsICJzdHls
ZXNoZWV0IiwgbnVsbCk7CisgICAgICAgICAgICB2YXIgcm9vdEVsZW0gPSB4c2x0RG9jLmRvY3Vt
ZW50RWxlbWVudDsKKyAgICAgICAgICAgIHJvb3RFbGVtLnNldEF0dHJpYnV0ZSgidmVyc2lvbiIs
ICIxLjAiKTsKKworICAgICAgICAgICAgdmFyIGltcG9ydEVsZW0gPSB4c2x0RG9jLmNyZWF0ZUVs
ZW1lbnROUyh4c2x0TlMsICJpbXBvcnQiKTsKKyAgICAgICAgICAgIGltcG9ydEVsZW0uc2V0QXR0
cmlidXRlKCJocmVmIiwgInJlc291cmNlcy94aHItZG9jLWltcG9ydGVkLnhzbCIpOworICAgICAg
ICAgICAgcm9vdEVsZW0uYXBwZW5kQ2hpbGQoaW1wb3J0RWxlbSk7CisKKyAgICAgICAgICAgIHZh
ciB0ZW1wbGF0ZUVsZW0gPSB4c2x0RG9jLmNyZWF0ZUVsZW1lbnROUyh4c2x0TlMsICJ0ZW1wbGF0
ZSIpOworICAgICAgICAgICAgdGVtcGxhdGVFbGVtLnNldEF0dHJpYnV0ZSgibWF0Y2giLCAiL3Jv
b3QiKTsKKyAgICAgICAgICAgIHZhciBjYWxsRWxlbSA9IHhzbHREb2MuY3JlYXRlRWxlbWVudE5T
KHhzbHROUywgImNhbGwtdGVtcGxhdGUiKTsKKyAgICAgICAgICAgIGNhbGxFbGVtLnNldEF0dHJp
YnV0ZSgibmFtZSIsICJ3b3JrcyIpOworICAgICAgICAgICAgdGVtcGxhdGVFbGVtLmFwcGVuZENo
aWxkKGNhbGxFbGVtKTsKKyAgICAgICAgICAgIHJvb3RFbGVtLmFwcGVuZENoaWxkKHRlbXBsYXRl
RWxlbSk7CisKKyAgICAgICAgICAgIHZhciB4c2x0ID0gbmV3IFhTTFRQcm9jZXNzb3IoKTsKKyAg
ICAgICAgICAgIHhzbHQuaW1wb3J0U3R5bGVzaGVldCh4c2x0RG9jKTsKKworICAgICAgICAgICAg
dmFyIHhtbERvYyA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZURvY3VtZW50KCIiLCAi
cm9vdCIsIG51bGwpOworICAgICAgICAgICAgdmFyIHJlc3VsdERvYyA9IHhzbHQudHJhbnNmb3Jt
VG9Eb2N1bWVudCh4bWxEb2MpOworICAgICAgICAgICAgdmFyIGZyYWdtZW50ID0gZG9jdW1lbnQu
aW1wb3J0Tm9kZShyZXN1bHREb2MuZG9jdW1lbnRFbGVtZW50LCB0cnVlKTsKKworICAgICAgICAg
ICAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkaXYnKTsKKyAgICAgICAgICAg
IGRpdi5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChmcmFnbWVudCwgZGl2KTsKKyAgICAgICAgfQor
ICAgIF1dPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJsb2FkKCkiPgorPHA+VGVz
dCBmb3IgPGEgaHJlZj0iaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAz
MTMiPmJ1ZyAxMDMxMzwvYT46Cit4c2w6aW1wb3J0IGRvZXNuJ3Qgd29yayBpbiBzdHlsZXNoZWV0
cyBsb2FkZWQgdmlhIFhNTEh0dHBSZXF1ZXN0LjwvcD4KKworPGRpdiBpZD0iZGl2Ij5JdCdzIG5p
Y2UgdGhhdCB0aGlzIGhhc24ndCBjcmFzaGVkLCBidXQgdGhlIFhTTCB0cmFuc2Zvcm1hdGlvbiBo
YXMgZmFpbGVkLjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC94c2wvdHJhbnNmb3JtLWRvbXBhcnNlci1kb2MtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS1kb21wYXJzZXItZG9jLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS1kb21wYXJz
ZXItZG9jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitUZXN0IGZv
ciBidWcgMTAzMTM6IHhzbDppbXBvcnQgZG9lc24ndCB3b3JrIGluIHN0eWxlc2hlZXRzIGxvYWRl
ZCB2aWEgWE1MSHR0cFJlcXVlc3QuCisKK1NVQ0NFU1MKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
eHNsL3RyYW5zZm9ybS1kb21wYXJzZXItZG9jLnhodG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QveHNsL3RyYW5zZm9ybS1kb21wYXJzZXItZG9jLnhodG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC94c2wvdHJhbnNmb3JtLWRvbXBhcnNlci1kb2MueGh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNDEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9
InV0Zi04Ij8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMS8v
RU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDExL0RURC94aHRtbDExLmR0ZCI+Cis8aHRt
bCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIj4KKzxo
ZWFkPgorICAgIDx0aXRsZT54c2wgaW1wb3J0IHRlc3Q8L3RpdGxlPgorICAgIDxzY3JpcHQgdHlw
ZT0idGV4dC9qYXZhc2NyaXB0Ij48IVtDREFUQVsKKyAgICAgICAgZnVuY3Rpb24gbG9hZCgpIHsK
KyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAg
ICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCisgICAgICAgICAgICB2
YXIgeHNsdFN0ciA9CisgICAgICAgICAgICAgICAgJzx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIx
LjAiJyArCisgICAgICAgICAgICAgICAgJyAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8x
OTk5L1hTTC9UcmFuc2Zvcm0iJyArCisgICAgICAgICAgICAgICAgJyAgeG1sbnM9Imh0dHA6Ly93
d3cudzMub3JnLzE5OTkveGh0bWwiPicgKworICAgICAgICAgICAgICAgICc8eHNsOmltcG9ydCBo
cmVmPSJyZXNvdXJjZXMveGhyLWRvYy1pbXBvcnRlZC54c2wiIC8+JyArCisgICAgICAgICAgICAg
ICAgJzx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii9yb290Ij4nICsKKyAgICAgICAgICAgICAgICAnICAg
IDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJ3b3JrcyIgLz4nICsKKyAgICAgICAgICAgICAgICAn
PC94c2w6dGVtcGxhdGU+JyArCisgICAgICAgICAgICAgICAgJzwveHNsOnN0eWxlc2hlZXQ+JzsK
KworICAgICAgICAgICAgdmFyIHBhcnNlciA9IG5ldyBET01QYXJzZXIoKTsKKyAgICAgICAgICAg
IHZhciB4c2x0ID0gbmV3IFhTTFRQcm9jZXNzb3IoKTsKKyAgICAgICAgICAgIHZhciB4c2x0RG9j
ID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyh4c2x0U3RyLCAiYXBwbGljYXRpb24veG1sIik7Cisg
ICAgICAgICAgICB4c2x0LmltcG9ydFN0eWxlc2hlZXQoeHNsdERvYyk7CisKKyAgICAgICAgICAg
IHZhciB4bWxEb2MgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKCI8cm9vdC8+IiwgImFwcGxpY2F0
aW9uL3htbCIpOworICAgICAgICAgICAgdmFyIHJlc3VsdERvYyA9IHhzbHQudHJhbnNmb3JtVG9E
b2N1bWVudCh4bWxEb2MpOworICAgICAgICAgICAgdmFyIGZyYWdtZW50ID0gZG9jdW1lbnQuaW1w
b3J0Tm9kZShyZXN1bHREb2MuZG9jdW1lbnRFbGVtZW50LCB0cnVlKTsKKworICAgICAgICAgICAg
dmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkaXYnKTsKKyAgICAgICAgICAgIGRp
di5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChmcmFnbWVudCwgZGl2KTsKKyAgICAgICAgfQorICAg
IF1dPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJsb2FkKCkiPgorPHA+VGVzdCBm
b3IgPGEgaHJlZj0iaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzMTMi
PmJ1ZyAxMDMxMzwvYT46Cit4c2w6aW1wb3J0IGRvZXNuJ3Qgd29yayBpbiBzdHlsZXNoZWV0cyBs
b2FkZWQgdmlhIFhNTEh0dHBSZXF1ZXN0LjwvcD4KKworPGRpdiBpZD0iZGl2Ij5JdCdzIG5pY2Ug
dGhhdCB0aGlzIGhhc24ndCBjcmFzaGVkLCBidXQgdGhlIFhTTCB0cmFuc2Zvcm1hdGlvbiBoYXMg
ZmFpbGVkLjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC94
c2wvdHJhbnNmb3JtLXRyYW5zZm9ybWVkLWRvYy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC94c2wvdHJhbnNmb3JtLXRyYW5zZm9ybWVkLWRvYy1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0tdHJhbnNm
b3JtZWQtZG9jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitUZXN0
IGZvciBidWcgMTAzMTM6IHhzbDppbXBvcnQgZG9lc24ndCB3b3JrIGluIHN0eWxlc2hlZXRzIGxv
YWRlZCB2aWEgWE1MSHR0cFJlcXVlc3QuCisKK1NVQ0NFU1MKSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QveHNsL3RyYW5zZm9ybS10cmFuc2Zvcm1lZC1kb2MueGh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC94c2wvdHJhbnNmb3JtLXRyYW5zZm9ybWVkLWRvYy54aHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS10cmFuc2Zvcm1lZC1kb2Mu
eGh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIg
ZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhI
VE1MIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDExL0RURC94aHRtbDExLmR0
ZCI+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9
ImVuIj4KKzxoZWFkPgorICAgIDx0aXRsZT54c2wgaW1wb3J0IHRlc3Q8L3RpdGxlPgorICAgIDxz
Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IVtDREFUQVsKKyAgICAgICAgZnVuY3Rpb24g
bG9hZCgpIHsKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisg
ICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCisgICAg
ICAgICAgICB2YXIgY29weVhzbHRTdHIgPQorICAgICAgICAgICAgICAgICc8eHNsOnN0eWxlc2hl
ZXQgdmVyc2lvbj0iMS4wIicgKworICAgICAgICAgICAgICAgICcgIHhtbG5zOnhzbD0iaHR0cDov
L3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIicgKworICAgICAgICAgICAgICAgICcgIHht
bG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4nICsKKyAgICAgICAgICAgICAgICAn
PHhzbDp0ZW1wbGF0ZSBtYXRjaD0iQCp8bm9kZSgpIj4nICsKKyAgICAgICAgICAgICAgICAnICA8
eHNsOmNvcHk+JyArCisgICAgICAgICAgICAgICAgJyAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBz
ZWxlY3Q9IkAqfG5vZGUoKSIvPicgKworICAgICAgICAgICAgICAgICcgIDwveHNsOmNvcHk+JyAr
CisgICAgICAgICAgICAgICAgJzwveHNsOnRlbXBsYXRlPicgKworICAgICAgICAgICAgICAgICc8
L3hzbDpzdHlsZXNoZWV0Pic7CisKKyAgICAgICAgICAgIHZhciBwYXJzZXIgPSBuZXcgRE9NUGFy
c2VyKCk7CisgICAgICAgICAgICB2YXIgeHNsdCA9IG5ldyBYU0xUUHJvY2Vzc29yKCk7CisgICAg
ICAgICAgICBjb3B5WHNsdERvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoY29weVhzbHRTdHIs
ICJhcHBsaWNhdGlvbi94bWwiKTsKKyAgICAgICAgICAgIHhzbHQuaW1wb3J0U3R5bGVzaGVldChj
b3B5WHNsdERvYyk7CisKKyAgICAgICAgICAgIHZhciByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3Qo
KTsKKyAgICAgICAgICAgIHJlcS5vcGVuKCdHRVQnLCAncmVzb3VyY2VzL3hoci1kb2MueHNsJywg
ZmFsc2UpOworICAgICAgICAgICAgcmVxLnNlbmQobnVsbCk7CisgICAgICAgICAgICB2YXIgeHNs
dERvYyA9IHhzbHQudHJhbnNmb3JtVG9Eb2N1bWVudChyZXEucmVzcG9uc2VYTUwpOworICAgICAg
ICAgICAgeHNsdC5pbXBvcnRTdHlsZXNoZWV0KHhzbHREb2MpOworCisgICAgICAgICAgICB2YXIg
eG1sRG9jID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZygiPHJvb3QvPiIsICJhcHBsaWNhdGlvbi94
bWwiKTsKKyAgICAgICAgICAgIHZhciByZXN1bHREb2MgPSB4c2x0LnRyYW5zZm9ybVRvRG9jdW1l
bnQoeG1sRG9jKTsKKyAgICAgICAgICAgIHZhciBmcmFnbWVudCA9IGRvY3VtZW50LmltcG9ydE5v
ZGUocmVzdWx0RG9jLmRvY3VtZW50RWxlbWVudCwgdHJ1ZSk7CisKKyAgICAgICAgICAgIHZhciBk
aXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGl2Jyk7CisgICAgICAgICAgICBkaXYucGFy
ZW50Tm9kZS5yZXBsYWNlQ2hpbGQoZnJhZ21lbnQsIGRpdik7CisgICAgICAgIH0KKyAgICBdXT48
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0ibG9hZCgpIj4KKzxwPlRlc3QgZm9yIDxh
IGhyZWY9Imh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzEzIj5idWcg
MTAzMTM8L2E+OgoreHNsOmltcG9ydCBkb2Vzbid0IHdvcmsgaW4gc3R5bGVzaGVldHMgbG9hZGVk
IHZpYSBYTUxIdHRwUmVxdWVzdC48L3A+CisKKzxkaXYgaWQ9ImRpdiI+SXQncyBuaWNlIHRoYXQg
dGhpcyBoYXNuJ3QgY3Jhc2hlZCwgYnV0IHRoZSBYU0wgdHJhbnNmb3JtYXRpb24gaGFzIGZhaWxl
ZC48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QveHNsL3Ry
YW5zZm9ybS14aHItZG9jLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L3hzbC90cmFuc2Zvcm0teGhyLWRvYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDY4OTk1KQor
KysgTGF5b3V0VGVzdHMvZmFzdC94c2wvdHJhbnNmb3JtLXhoci1kb2MtZXhwZWN0ZWQudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsMyBAQAotQ09OU09MRSBNRVNTQUdFOiBsaW5lIDIwOiBU
eXBlRXJyb3I6IFJlc3VsdCBvZiBleHByZXNzaW9uICdkb2MnIFt1bmRlZmluZWRdIGlzIG5vdCBh
biBvYmplY3QuCiBUZXN0IGZvciBidWcgMTAzMTM6IHhzbDppbXBvcnQgZG9lc24ndCB3b3JrIGlu
IHN0eWxlc2hlZXRzIGxvYWRlZCB2aWEgWE1MSHR0cFJlcXVlc3QuCiAKLUl0J3MgbmljZSB0aGF0
IHRoaXMgaGFzbid0IGNyYXNoZWQsIGJ1dCB0aGUgWFNMIHRyYW5zZm9ybWF0aW9uIGhhcyBmYWls
ZWQuCitTVUNDRVNTCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0t
ZnJhbWVkLWRvYy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy94c2wvdHJhbnNmb3JtLWZyYW1lZC1kb2MtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvdHJhbnNmb3JtLWZyYW1lZC1kb2MtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACitUZXN0IGZvciBidWcgMTAzMTM6
IHhzbDppbXBvcnQgZG9lc24ndCB3b3JrIGluIHN0eWxlc2hlZXRzIGxvYWRlZCB2aWEgWE1MSHR0
cFJlcXVlc3QuCisKK1NVQ0NFU1MKK1RoaXMgdHJhbnNmb3JtYXRpb24gaGFzIGZhaWxlZCBiZWNh
dXNlIHRoZSBmcmFtZSBubyBsb25nZXIgaGFzIHRoZSBzYW1lIG9yaWdpbi4KKworCistLS0tLS0t
LQorRnJhbWU6ICdzdWJmcmFtZScKKy0tLS0tLS0tCitzdWJmcmFtZSAyCkluZGV4OiBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0tZnJhbWVkLWRvYy54aHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0tZnJhbWVkLWRvYy54aHRt
bAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3RyYW5zZm9ybS1m
cmFtZWQtZG9jLnhodG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU5IEBACis8P3htbCB2ZXJz
aW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9X
M0MvL0RURCBYSFRNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQv
eGh0bWwxMS5kdGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwi
IHhtbDpsYW5nPSJlbiI+Cis8aGVhZD4KKyAgICA8dGl0bGU+eHNsIGltcG9ydCB0ZXN0PC90aXRs
ZT4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCFbQ0RBVEFbCisgICAgICAg
IGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisKKyAgICAgICAgdmFyIHhzbHREb2M7CisKKyAg
ICAgICAgdmFyIHBhcnNlciA9IG5ldyBET01QYXJzZXIoKTsKKyAgICAgICAgdmFyIHhtbERvYyA9
IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoIjxyb290Lz4iLCAiYXBwbGljYXRpb24veG1sIik7CisK
KyAgICAgICAgZnVuY3Rpb24gdHJhbnNmb3JtKGRpdikgeworICAgICAgICAgICAgdmFyIHhzbHQg
PSBuZXcgWFNMVFByb2Nlc3NvcigpOworICAgICAgICAgICAgeHNsdC5pbXBvcnRTdHlsZXNoZWV0
KHhzbHREb2MpOworICAgICAgICAgICAgdmFyIHJlc3VsdERvYyA9IHhzbHQudHJhbnNmb3JtVG9E
b2N1bWVudCh4bWxEb2MpOworICAgICAgICAgICAgdmFyIGZyYWdtZW50ID0gZG9jdW1lbnQuaW1w
b3J0Tm9kZShyZXN1bHREb2MuZG9jdW1lbnRFbGVtZW50LCB0cnVlKTsKKyAgICAgICAgICAgIGRp
di5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChmcmFnbWVudCwgZGl2KTsKKyAgICAgICAgfQorCisg
ICAgICAgIGZ1bmN0aW9uIGxvYWQoKSB7CisgICAgICAgICAgICBpZiAoIXhzbHREb2MpIHsKKyAg
ICAgICAgICAgICAgICB4c2x0RG9jID0gc3ViZnJhbWUueHNsdERvYzsKKyAgICAgICAgICAgICAg
ICB0cmFuc2Zvcm0oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RyYW5zZm9ybTEnKSk7CisgICAg
ICAgICAgICAgICAgc3ViZnJhbWUud2luZG93LmxvY2F0aW9uID0gImh0dHA6Ly8xMjcuMC4wLjE6
ODAwMC94c2wvcmVzb3VyY2VzL3RyYW5zZm9ybS1mcmFtZWQtc3ViZnJhbWUyLnhodG1sIjsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIGRpdjIgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgndHJhbnNmb3JtMicpOworCisgICAgICAgICAgICAgICAgdHJ5IHsKKyAg
ICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtKGRpdjIpOworICAgICAgICAgICAgICAgIH0gY2F0
Y2ggKGUpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyB0cmFuc2Zvcm1hdGlvbiBzaG91
bGQgZmFpbAorICAgICAgICAgICAgICAgICAgICBkaXYyLmlubmVySFRNTCA9ICJUaGlzIHRyYW5z
Zm9ybWF0aW9uIGhhcyBmYWlsZWQgYmVjYXVzZSB0aGUgZnJhbWUgbm8gbG9uZ2VyIGhhcyB0aGUg
c2FtZSBvcmlnaW4uIjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgICAgICAgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgICAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIuZHVtcENoaWxkRnJhbWVzQXNUZXh0KCk7CisgICAgICAgICAgICAgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICBdXT48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPHA+VGVzdCBmb3IgPGEgaHJlZj0iaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTAzMTMiPmJ1ZyAxMDMxMzwvYT46Cit4c2w6aW1wb3J0IGRvZXNuJ3Qgd29yayBp
biBzdHlsZXNoZWV0cyBsb2FkZWQgdmlhIFhNTEh0dHBSZXF1ZXN0LjwvcD4KKzxkaXYgaWQ9InRy
YW5zZm9ybTEiPgorSXQncyBuaWNlIHRoYXQgdGhpcyBoYXNuJ3QgY3Jhc2hlZCwgYnV0IHRoZSBY
U0wgdHJhbnNmb3JtYXRpb24gaGFzIGZhaWxlZC4KKzwvZGl2PgorPGRpdiBpZD0idHJhbnNmb3Jt
MiI+CitUaGlzIHRyYW5zZm9ybWF0aW9uIHNob3VsZCBmYWlsIGJlY2F1c2UgdGhlIGZyYW1lIG5v
IGxvbmdlciBoYXMgdGhlIHNhbWUgb3JpZ2luLgorPC9kaXY+Cis8aWZyYW1lIGlkPSJzdWJmcmFt
ZSIgc3JjPSJyZXNvdXJjZXMvdHJhbnNmb3JtLWZyYW1lZC1zdWJmcmFtZTEueGh0bWwiIG9ubG9h
ZD0ibG9hZCgpIj4KKzwvaWZyYW1lPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy94c2wvdHJhbnNmb3JtLXhoci1kb2MtY3Jvc3Mtb3JpZ2luLWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0t
eGhyLWRvYy1jcm9zcy1vcmlnaW4tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy94c2wvdHJhbnNmb3JtLXhoci1kb2MtY3Jvc3Mtb3JpZ2luLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitUZXN0IGZvciBidWcgMTAzMTM6
IHhzbDppbXBvcnQgZG9lc24ndCB3b3JrIGluIHN0eWxlc2hlZXRzIGxvYWRlZCB2aWEgWE1MSHR0
cFJlcXVlc3QuCisKK1RoaXMgdHJhbnNmb3JtYXRpb24gaGFzIGZhaWxlZCBiZWNhdXNlIGl0IGlz
IHRyeWluZyB0byBpbXBvcnQgYSBzdHlsZXNoZWV0IGNyb3NzLW9yaWdpbi4KSW5kZXg6IExheW91
dFRlc3RzL2h0dHAvdGVzdHMveHNsL3RyYW5zZm9ybS14aHItZG9jLWNyb3NzLW9yaWdpbi54aHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0teGhy
LWRvYy1jcm9zcy1vcmlnaW4ueGh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3hzbC90cmFuc2Zvcm0teGhyLWRvYy1jcm9zcy1vcmlnaW4ueGh0bWwJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04
Ij8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iICJo
dHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDExL0RURC94aHRtbDExLmR0ZCI+Cis8aHRtbCB4bWxu
cz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIj4KKzxoZWFkPgor
ICAgIDx0aXRsZT54c2wgaW1wb3J0IHRlc3Q8L3RpdGxlPgorICAgIDxzY3JpcHQgdHlwZT0idGV4
dC9qYXZhc2NyaXB0Ij4KKyAgICAgICAgZnVuY3Rpb24gbG9hZCgpIHsKKyAgICAgICAgICAgIGlm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCisgICAgICAgICAgICB2YXIgcmVxID0gbmV3IFhN
TEh0dHBSZXF1ZXN0KCk7CisgICAgICAgICAgICB2YXIgeHNsdCA9IG5ldyBYU0xUUHJvY2Vzc29y
KCk7CisgICAgICAgICAgICByZXEub3BlbignR0VUJywgJ3Jlc291cmNlcy94aHItZG9jLWNyb3Nz
LW9yaWdpbi54c2wnLCBmYWxzZSk7CisgICAgICAgICAgICByZXEuc2VuZChudWxsKTsKKyAgICAg
ICAgICAgIHhzbHQuaW1wb3J0U3R5bGVzaGVldChyZXEucmVzcG9uc2VYTUwpOworCisgICAgICAg
ICAgICByZXEub3BlbignR0VUJywgJ3Jlc291cmNlcy94aHItZG9jLnhtbCcsIGZhbHNlKTsKKyAg
ICAgICAgICAgIHJlcS5zZW5kKG51bGwpOworCisgICAgICAgICAgICB2YXIgZG9jOworICAgICAg
ICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBkb2MgPSB4c2x0LnRyYW5zZm9ybVRvRG9jdW1l
bnQocmVxLnJlc3BvbnNlWE1MKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAg
ICAgICAgICAvLyBUaGlzIHRyYW5zZm9ybWF0aW9uIHNob3VsZCBmYWlsCisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGl2Jyk7
CisKKyAgICAgICAgICAgIGlmIChkb2MpIHsKKyAgICAgICAgICAgICAgICB2YXIgZnJhZ21lbnQg
PSBkb2N1bWVudC5pbXBvcnROb2RlKGRvYy5kb2N1bWVudEVsZW1lbnQsIHRydWUpOworICAgICAg
ICAgICAgICAgIGRpdi5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChmcmFnbWVudCwgZGl2KTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZGl2LmlubmVySFRNTCA9ICJUaGlz
IHRyYW5zZm9ybWF0aW9uIGhhcyBmYWlsZWQgYmVjYXVzZSBpdCBpcyB0cnlpbmcgdG8gaW1wb3J0
IGEgc3R5bGVzaGVldCBjcm9zcy1vcmlnaW4uIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJsb2FkKCkiPgorPHA+VGVzdCBm
b3IgPGEgaHJlZj0iaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzMTMi
PmJ1ZyAxMDMxMzwvYT46Cit4c2w6aW1wb3J0IGRvZXNuJ3Qgd29yayBpbiBzdHlsZXNoZWV0cyBs
b2FkZWQgdmlhIFhNTEh0dHBSZXF1ZXN0LjwvcD4KKworPGRpdiBpZD0iZGl2Ij5UaGlzIHRyYW5z
Zm9ybWF0aW9uIHNob3VsZCBmYWlsIGJlY2F1c2UgaXQgaXMgdHJ5aW5nIHRvIGltcG9ydCBhIHN0
eWxlc2hlZXQgY3Jvc3Mtb3JpZ2luLjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvdHJhbnNmb3JtLXhoci1kb2MtZnJvbS1hbGxvd2VkLWNy
b3NzLW9yaWdpbi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy94c2wvdHJhbnNmb3JtLXhoci1kb2MtZnJvbS1hbGxvd2VkLWNyb3NzLW9yaWdpbi1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC90cmFu
c2Zvcm0teGhyLWRvYy1mcm9tLWFsbG93ZWQtY3Jvc3Mtb3JpZ2luLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitUZXN0IGZvciBidWcgMTAzMTM6IHhzbDppbXBvcnQg
ZG9lc24ndCB3b3JrIGluIHN0eWxlc2hlZXRzIGxvYWRlZCB2aWEgWE1MSHR0cFJlcXVlc3QuCisK
K1NVQ0NFU1MKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3RyYW5zZm9ybS14aHIt
ZG9jLWZyb20tYWxsb3dlZC1jcm9zcy1vcmlnaW4ueGh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy94c2wvdHJhbnNmb3JtLXhoci1kb2MtZnJvbS1hbGxvd2VkLWNyb3Nz
LW9yaWdpbi54aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNs
L3RyYW5zZm9ybS14aHItZG9jLWZyb20tYWxsb3dlZC1jcm9zcy1vcmlnaW4ueGh0bWwJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMzMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0
Zi04Ij8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4i
ICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDExL0RURC94aHRtbDExLmR0ZCI+Cis8aHRtbCB4
bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIj4KKzxoZWFk
PgorICAgIDx0aXRsZT54c2wgaW1wb3J0IHRlc3Q8L3RpdGxlPgorICAgIDxzY3JpcHQgdHlwZT0i
dGV4dC9qYXZhc2NyaXB0Ij4KKyAgICAgICAgZnVuY3Rpb24gbG9hZCgpIHsKKyAgICAgICAgICAg
IGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCisgICAgICAgICAgICB2YXIgcmVxID0gbmV3
IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgICAgICAgICB2YXIgeHNsdCA9IG5ldyBYU0xUUHJvY2Vz
c29yKCk7CisgICAgICAgICAgICByZXEub3BlbignR0VUJywgJ3Jlc291cmNlcy94aHItZG9jLWZy
b20tYWxsb3dlZC1jcm9zcy1vcmlnaW4ueHNsJywgZmFsc2UpOworICAgICAgICAgICAgcmVxLnNl
bmQobnVsbCk7CisgICAgICAgICAgICB4c2x0LmltcG9ydFN0eWxlc2hlZXQocmVxLnJlc3BvbnNl
WE1MKTsKKworICAgICAgICAgICAgcmVxLm9wZW4oJ0dFVCcsICdyZXNvdXJjZXMveGhyLWRvYy54
bWwnLCBmYWxzZSk7CisgICAgICAgICAgICByZXEuc2VuZChudWxsKTsKKyAgICAgICAgICAgIHZh
ciBkb2MgPSB4c2x0LnRyYW5zZm9ybVRvRG9jdW1lbnQocmVxLnJlc3BvbnNlWE1MKTsKKyAgICAg
ICAgICAgIHZhciBmcmFnbWVudCA9IGRvY3VtZW50LmltcG9ydE5vZGUoZG9jLmRvY3VtZW50RWxl
bWVudCwgdHJ1ZSk7CisKKyAgICAgICAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnZGl2Jyk7CisgICAgICAgICAgICBkaXYucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoZnJh
Z21lbnQsIGRpdik7CisgICAgICAgIH0KKyAgICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9u
bG9hZD0ibG9hZCgpIj4KKzxwPlRlc3QgZm9yIDxhIGhyZWY9Imh0dHA6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEwMzEzIj5idWcgMTAzMTM8L2E+OgoreHNsOmltcG9ydCBkb2Vz
bid0IHdvcmsgaW4gc3R5bGVzaGVldHMgbG9hZGVkIHZpYSBYTUxIdHRwUmVxdWVzdC48L3A+CisK
KzxkaXYgaWQ9ImRpdiI+SXQncyBuaWNlIHRoYXQgdGhpcyBoYXNuJ3QgY3Jhc2hlZCwgYnV0IHRo
ZSBYU0wgdHJhbnNmb3JtYXRpb24gaGFzIGZhaWxlZC48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4K
SW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3Jlc291cmNlcy9hbGxvdy1jcm9zcy1v
cmlnaW4taGVhZGVyLmNnaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hz
bC9yZXNvdXJjZXMvYWxsb3ctY3Jvc3Mtb3JpZ2luLWhlYWRlci5jZ2kJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMvYWxsb3ctY3Jvc3Mtb3JpZ2lu
LWhlYWRlci5jZ2kJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKKyMhL3Vzci9iaW4vcGVy
bCAtdwordXNlIHN0cmljdDsKKworcHJpbnQgIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veG1s
XG4iOworcHJpbnQgIkNhY2hlLUNvbnRyb2w6IG5vLWNhY2hlLCBuby1zdG9yZVxuIjsKK3ByaW50
ICJBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW46ICpcblxuIjsKKworbXkgJGZpbGVuYW1lID0g
JEVOVnsiUVVFUllfU1RSSU5HIn07CitvcGVuIEZJTEUsICRmaWxlbmFtZSBvciBkaWU7Citwcmlu
dCA8RklMRT47CitjbG9zZSBGSUxFOwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wv
cmVzb3VyY2VzL3RyYW5zZm9ybS1mcmFtZWQtc3ViZnJhbWUxLnhodG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3Jlc291cmNlcy90cmFuc2Zvcm0tZnJhbWVkLXN1
YmZyYW1lMS54aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNs
L3Jlc291cmNlcy90cmFuc2Zvcm0tZnJhbWVkLXN1YmZyYW1lMS54aHRtbAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwyNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4K
KzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTiIgImh0dHA6
Ly93d3cudzMub3JnL1RSL3hodG1sMTEvRFREL3hodG1sMTEuZHRkIj4KKzxodG1sIHhtbG5zPSJo
dHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iPgorPGhlYWQ+CisgICAg
PHRpdGxlPnhzbCBpbXBvcnQgdGVzdDwvdGl0bGU+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2ph
dmFzY3JpcHQiPjwhW0NEQVRBWworICAgICAgICB2YXIgeHNsdFN0ciA9CisgICAgICAgICAgICAn
PHhzbDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCInICsKKyAgICAgICAgICAgICcgIHhtbG5zOnhz
bD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIicgKworICAgICAgICAgICAg
JyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPicgKworICAgICAgICAgICAg
Jzx4c2w6aW1wb3J0IGhyZWY9Inhoci1kb2MtaW1wb3J0ZWQueHNsIiAvPicgKworICAgICAgICAg
ICAgJzx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii9yb290Ij4nICsKKyAgICAgICAgICAgICcgICAgPHhz
bDpjYWxsLXRlbXBsYXRlIG5hbWU9IndvcmtzIiAvPicgKworICAgICAgICAgICAgJzwveHNsOnRl
bXBsYXRlPicgKworICAgICAgICAgICAgJzwveHNsOnN0eWxlc2hlZXQ+JzsKKworICAgICAgICB2
YXIgcGFyc2VyID0gbmV3IERPTVBhcnNlcigpOworICAgICAgICB2YXIgeHNsdERvYyA9IHBhcnNl
ci5wYXJzZUZyb21TdHJpbmcoeHNsdFN0ciwgImFwcGxpY2F0aW9uL3htbCIpOworICAgIF1dPjwv
c2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CitzdWJmcmFtZSAxCis8L2JvZHk+Cis8L2h0bWw+Cklu
ZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMvdHJhbnNmb3JtLWZyYW1l
ZC1zdWJmcmFtZTIueGh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94
c2wvcmVzb3VyY2VzL3RyYW5zZm9ybS1mcmFtZWQtc3ViZnJhbWUyLnhodG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL3RyYW5zZm9ybS1mcmFt
ZWQtc3ViZnJhbWUyLnhodG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACis8P3htbCB2
ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICIt
Ly9XM0MvL0RURCBYSFRNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9E
VEQveGh0bWwxMS5kdGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0
bWwiIHhtbDpsYW5nPSJlbiI+Cis8aGVhZD4KKyAgICA8dGl0bGU+eHNsIGltcG9ydCB0ZXN0PC90
aXRsZT4KKzwvaGVhZD4KKzxib2R5Pgorc3ViZnJhbWUgMgorPC9ib2R5PgorPC9odG1sPgpJbmRl
eDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL3hoci1kb2MtY3Jvc3Mtb3Jp
Z2luLnhzbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNvdXJj
ZXMveGhyLWRvYy1jcm9zcy1vcmlnaW4ueHNsCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL3hoci1kb2MtY3Jvc3Mtb3JpZ2luLnhzbAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRm
LTgiPz4KKzx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiCisgIHhtbG5zOnhzbD0iaHR0cDov
L3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgorICB4bWxucz0iaHR0cDovL3d3dy53My5v
cmcvMTk5OS94aHRtbCI+CisKKzx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9sb2NhbGhvc3Q6ODAw
MC94c2wvcmVzb3VyY2VzL3hoci1kb2MtaW1wb3J0ZWQueHNsIiAvPgorCis8eHNsOnRlbXBsYXRl
IG1hdGNoPSIvcm9vdCI+CisgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9IndvcmtzIiAvPgor
PC94c2w6dGVtcGxhdGU+CisKKzwveHNsOnN0eWxlc2hlZXQ+CkluZGV4OiBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMveGhyLWRvYy1mcm9tLWFsbG93ZWQtY3Jvc3Mtb3JpZ2lu
LnhzbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMv
eGhyLWRvYy1mcm9tLWFsbG93ZWQtY3Jvc3Mtb3JpZ2luLnhzbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3Jlc291cmNlcy94aHItZG9jLWZyb20tYWxsb3dlZC1j
cm9zcy1vcmlnaW4ueHNsCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACis8P3htbCB2ZXJz
aW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPHhzbDpzdHlsZXNoZWV0IHZlcnNpb249IjEu
MCIKKyAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisg
IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKworPHhzbDppbXBvcnQgaHJl
Zj0iaHR0cDovL2xvY2FsaG9zdDo4MDAwL3hzbC9yZXNvdXJjZXMvYWxsb3ctY3Jvc3Mtb3JpZ2lu
LWhlYWRlci5jZ2k/eGhyLWRvYy1pbXBvcnRlZC54c2wiIC8+CisKKzx4c2w6dGVtcGxhdGUgbWF0
Y2g9Ii9yb290Ij4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0id29ya3MiIC8+Cis8L3hz
bDp0ZW1wbGF0ZT4KKworPC94c2w6c3R5bGVzaGVldD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAv
dGVzdHMveHNsL3Jlc291cmNlcy94aHItZG9jLWltcG9ydGVkLnhzbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMveGhyLWRvYy1pbXBvcnRlZC54c2wJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMveGhy
LWRvYy1pbXBvcnRlZC54c2wJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQgQEAKKzw/eG1sIHZl
cnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0i
MS4wIgorICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIK
KyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgorCis8eHNsOnRlbXBsYXRl
IG1hdGNoPSIvcm9vdCI+CisgICAgPGRpdiBjbGFzcz0iZGVmYXVsdCI+RkFJTDogSW5jb3JyZWN0
IHRyYW5zZm9ybWF0aW9uLjwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUg
bmFtZT0id29ya3MiPgorICAgIDxkaXYgY2xhc3M9Im92ZXJyaWRkZW4iPlNVQ0NFU1M8L2Rpdj4K
KzwveHNsOnRlbXBsYXRlPgorCis8L3hzbDpzdHlsZXNoZWV0PgpJbmRleDogTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL3hoci1kb2MueG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2h0dHAvdGVzdHMveHNsL3Jlc291cmNlcy94aHItZG9jLnhtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3Jlc291cmNlcy94aHItZG9jLnhtbAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1
dGYtOCI/PgorPD94bWwtc3R5bGVzaGVldCB0eXBlPSJ0ZXh0L3hzbCIgaHJlZj0ieGhyLWRvYy54
c2wiPz4KKzxyb290Lz4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3Jlc291cmNl
cy94aHItZG9jLnhzbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9y
ZXNvdXJjZXMveGhyLWRvYy54c2wJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3hzbC9yZXNvdXJjZXMveGhyLWRvYy54c2wJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIg
QEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8eHNsOnN0eWxlc2hl
ZXQgdmVyc2lvbj0iMS4wIgorICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNM
L1RyYW5zZm9ybSIKKyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgorCis8
eHNsOmltcG9ydCBocmVmPSJ4aHItZG9jLWltcG9ydGVkLnhzbCIgLz4KKworPHhzbDp0ZW1wbGF0
ZSBtYXRjaD0iL3Jvb3QiPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJ3b3JrcyIgLz4K
KzwveHNsOnRlbXBsYXRlPgorCis8L3hzbDpzdHlsZXNoZWV0Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84430</attachid>
            <date>2011-03-02 09:52:32 -0800</date>
            <delta_ts>2011-03-03 10:02:50 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>bug10313_110302.patch</filename>
            <type>text/plain</type>
            <size>53866</size>
            <attacher name="Andreas Wictor">andreas.wictor</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwMDA1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzUgQEAKKzIwMTEtMDMtMDIgIEFuZHJlYXMg
V2ljdG9yICA8YW5kcmVhcy53Y2l0b3JAeGNlcmlvbi5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgeHNsOmltcG9ydCBhbmQgZG9jdW1lbnQoKSBk
b24ndCB3b3JrIGluIHN0eWxlc2hlZXRzIGxvYWRlZCB2aWEgWE1MSHR0cFJlcXVlc3QKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzEzCisKKyAgICAg
ICAgSW50cm9kdWNlZCB0aGUgY29uY2VwdCBvZiBhICJvcmlnaW4gZG9jdW1lbnQiIHJlZmVyZW5j
ZSBvbiBmcmFtZWxlc3MKKyAgICAgICAgZG9jdW1lbnRzIGNyZWF0ZWQgYnkgWE1MSHR0cFJlcXVl
c3QsIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZURvY3VtZW50LAorICAgICAgICBET01Q
YXJzZXIucGFyc2VGcm9tU3RyaW5nIGFuZCBYU0xUUHJvY2Vzc29yLnRyYW5zZm9ybVRvRG9jdW1l
bnQuCisgICAgICAgIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgZm9yIGZyYW1lbGVzcyBkb2N1bWVu
dHMgdG8gYWNjZXNzIHN1YnJlc291cmNlcy4KKworICAgICAgICBUZXN0czogZmFzdC94c2wvdHJh
bnNmb3JtLWRvY2ltcGwtZG9jLnhodG1sCisgICAgICAgICAgICAgICBmYXN0L3hzbC90cmFuc2Zv
cm0tZG9tcGFyc2VyLWRvYy54aHRtbAorICAgICAgICAgICAgICAgZmFzdC94c2wvdHJhbnNmb3Jt
LXRyYW5zZm9ybWVkLWRvYy54aHRtbAorICAgICAgICAgICAgICAgaHR0cC90ZXN0cy94c2wvdHJh
bnNmb3JtLWZyYW1lZC1kb2MueGh0bWwKKyAgICAgICAgICAgICAgIGh0dHAvdGVzdHMveHNsL3Ry
YW5zZm9ybS14aHItZG9jLWNyb3NzLW9yaWdpbi54aHRtbAorICAgICAgICAgICAgICAgaHR0cC90
ZXN0cy94c2wvdHJhbnNmb3JtLXhoci1kb2MtZnJvbS1hbGxvd2VkLWNyb3NzLW9yaWdpbi54aHRt
bAorCisgICAgICAgICogYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yQ3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTWFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9Eb2N1bWVudCk6IFVz
ZSBjdXJyZW50IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgYXMgZmlyc3QgYXJndW1lbnQgdG8gdHJh
bnNmb3JtVG9Eb2N1bWVudC4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhYU0xUUHJv
Y2Vzc29yQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4WFNMVFByb2Nlc3Nvcjo6dHJh
bnNmb3JtVG9Eb2N1bWVudENhbGxiYWNrKTogVXNlIGN1cnJlbnQgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCBhcyBmaXJzdCBhcmd1bWVudCB0byB0cmFuc2Zvcm1Ub0RvY3VtZW50LgorICAgICAgICAq
IGRvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01JbXBsZW1l
bnRhdGlvbjo6Y3JlYXRlRG9jdW1lbnQpOiBSdW4gc2V0T3JpZ2luRG9jdW1lbnQgb24gdGhlIHJl
c3VsdGluZyBkb2N1bWVudC4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnQ6OnNldE9yaWdpbkRvY3VtZW50KTogVGhpcyBmdW5jdGlvbiBzdG9y
ZXMgYSByZWZlcmVuY2UgdG8gdGhlIGRvY3VtZW50IHdoZXJlIHRoaXMgZG9jdW1lbnQKKyAgICAg
ICAgb3JpZ2luYXRlZCBmcm9tLiBUaGlzIGlzIHVzZWQgZm9yIGZyYW1lbGVzcyBkb2N1bWVudHMs
IHNvIHRoYXQgd2UgY2FuIGZpbmQgYSBmcmFtZSB3aGVuIHdlIGFyZSBsb2FkaW5nIHN1YnJlc291
cmNlcy4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpmaW5kRnJhbWVGb3JTdWJyZXNvdXJj
ZUxvYWRzKTogUmV0dXJucyBhIGZyYW1lIGZyb20gZWl0aGVyIHRoZSBkb2N1bWVudCBvciB0aGUg
ZG9jdW1lbnQgaXQgb3JpZ2luYXRlZCBmcm9tLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6
OmFwcGx5WFNMVHJhbnNmb3JtKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50OjpvcmlnaW5Eb2N1bWVudCk6CisgICAgICAgICogbG9hZGVyL0Rv
Y3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRo
cmVhZGFibGVMb2FkZXI6OmxvYWRSZXF1ZXN0KTogVXNlIHRoZSBuZXcgZmluZEZyYW1lRm9yU3Vi
cmVzb3VyY2VMb2FkcyBtZXRob2Qgb24gZG9jdW1lbnRzIGFuZCB1c2UgdGhlCisgICAgICAgIG5l
dyBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5IG92ZXJsb2FkIHRoYXQgdGFrZXMgYSByZWZlcnJl
ciBzdHJpbmcuCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KTogQWRkZWQgYSBv
dmVybG9hZCB0byBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5IHRoYXQgdGFrZXMgdGhlIG91dGdv
aW5nIHJlZmVycmVyIGFzIGFyZ3VtZW50LgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5o
OgorICAgICAgICAqIHhtbC9ET01QYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NUGFy
c2VyOjpwYXJzZUZyb21TdHJpbmcpOiBSdW4gc2V0T3JpZ2luRG9jdW1lbnQgb24gdGhlIHJlc3Vs
dGluZyBkb2N1bWVudC4KKyAgICAgICAgKiB4bWwvRE9NUGFyc2VyLmg6CisgICAgICAgICogeG1s
L0RPTVBhcnNlci5pZGw6IEFkZGVkIENhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgYXR0
cmlidXRlIHRvIHBhcnNlRnJvbVN0cmluZy4KKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlWE1MKTogUnVu
IHNldE9yaWdpbkRvY3VtZW50IG9uIHRoZSByZXN1bHRpbmcgZG9jdW1lbnQuCisgICAgICAgICog
eG1sL1hNTFRyZWVWaWV3ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MVHJlZVZpZXdlcjo6
dHJhbnNmb3JtRG9jdW1lbnRUb1RyZWVWaWV3KToKKyAgICAgICAgKiB4bWwvWFNMSW1wb3J0UnVs
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYU0xJbXBvcnRSdWxlOjpsb2FkU2hlZXQpOiBMb2Fk
IGltcG9ydGVkIGRvY3VtZW50cyBzeW5jaHJvbm91c2x5IGlmIGludm9rZWQgYnkgamF2YXNjcmlw
dC4KKwlUaGUgc3luY2hyb25vdXMgbG9hZCBpcyBwZXJmb3JtZWQgYnkgRG9jdW1lbnRUaHJlYWRh
YmxlTG9hZGVyIHRoYXQgcmVxdWlyZXMgYSBkb2N1bWVudCB0byBsb2FkIHN1YiByZXNvdXJjZXMu
IFRoYXQgZG9jdW1lbnRzIGRvZXMgbm90CisJYWx3YXlzIGV4aXN0IHdoZW4gaW1wb3J0aW5nIHhz
bCBzdHlsZXNoZWV0cywgc28gaW4gdGhhdCBjYXNlIHdlIGNyZWF0ZSBhIHRlbXBvcmFyeSBkb2N1
bWVudCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoaXMgbG9hZC4KKyAgICAgICAgKFdlYkNvcmU6OlhT
TEltcG9ydFJ1bGU6OmZpbmlzaExvYWRpbmdTaGVldEFzeW5jaHJvbm91c2x5KToKKyAgICAgICAg
KFdlYkNvcmU6OkltcG9ydExvYWRlckNsaWVudDo6SW1wb3J0TG9hZGVyQ2xpZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltcG9ydExvYWRlckNsaWVudDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltcG9ydExvYWRlckNsaWVudDo6ZGlkUmVjZWl2ZURhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1wb3J0TG9hZGVyQ2xpZW50OjpkaWRGYWlsKToKKyAgICAgICAgKFdl
YkNvcmU6OkltcG9ydExvYWRlckNsaWVudDo6cmF3RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bXBvcnRMb2FkZXJDbGllbnQ6OnJlc3BvbnNlVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkltcG9y
dExvYWRlckNsaWVudDo6ZmFpbGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlhTTEltcG9ydFJ1bGU6
OmZpbmlzaExvYWRpbmdTaGVldFN5bmNocm9ub3VzbHkpOgorICAgICAgICAqIHhtbC9YU0xJbXBv
cnRSdWxlLmg6CisgICAgICAgICogeG1sL1hTTFRQcm9jZXNzb3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6WFNMVFByb2Nlc3Nvcjo6Y3JlYXRlRG9jdW1lbnRGcm9tU291cmNlKToKKyAgICAgICAg
KFdlYkNvcmU6OlhTTFRQcm9jZXNzb3I6OnRyYW5zZm9ybVRvRG9jdW1lbnQpOgorICAgICAgICAq
IHhtbC9YU0xUUHJvY2Vzc29yLmg6CisgICAgICAgICogeG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxvYWREb2N1bWVudExvYWRlckNsaWVudDo6TG9hZERv
Y3VtZW50TG9hZGVyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxvYWREb2N1bWVudExvYWRl
ckNsaWVudDo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6TG9hZERvY3VtZW50
TG9hZGVyQ2xpZW50OjpkaWRGYWlsKToKKyAgICAgICAgKFdlYkNvcmU6OkxvYWREb2N1bWVudExv
YWRlckNsaWVudDo6cmF3RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpMb2FkRG9jdW1lbnRMb2Fk
ZXJDbGllbnQ6OmZhaWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpkb2NMb2FkZXJGdW5jKTogVXNl
IERvY3VtZW50VGhyZWFkYWJsZUxvYWRlciB0byBsb2FkIGRvY3VtZW50cy4KKwogMjAxMS0wMy0w
MSAgSWx5YSBUaWtob25vdnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTWFNMVFByb2Nlc3NvckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yQ3VzdG9tLmNwcAkocmV2aXNpb24gODAwMDUpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hTTFRQcm9jZXNzb3JDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03NSw4ICs3NSw5IEBAIEpTVmFsdWUgSlNYU0xUUHJvY2Vzc29yOjp0
cmFuc2Zvcm1Ub0RvY3UKIHsKICAgICBKU1ZhbHVlIG5vZGVWYWwgPSBleGVjLT5hcmd1bWVudCgw
KTsKICAgICBpZiAobm9kZVZhbC5pbmhlcml0cygmSlNOb2RlOjpzX2luZm8pKSB7CisgICAgICAg
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdENvbnRleHQgPSBzdGF0aWNfY2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKTsKICAgICAgICAgSlNOb2RlKiBub2RlID0gc3RhdGljX2Nhc3Q8SlNOb2Rl
Kj4oYXNPYmplY3Qobm9kZVZhbCkpOwotICAgICAgICBSZWZQdHI8RG9jdW1lbnQ+IHJlc3VsdERv
Y3VtZW50ID0gaW1wbCgpLT50cmFuc2Zvcm1Ub0RvY3VtZW50KG5vZGUtPmltcGwoKSk7CisgICAg
ICAgIFJlZlB0cjxEb2N1bWVudD4gcmVzdWx0RG9jdW1lbnQgPSBpbXBsKCktPnRyYW5zZm9ybVRv
RG9jdW1lbnQoc2NyaXB0Q29udGV4dCwgbm9kZS0+aW1wbCgpKTsKICAgICAgICAgaWYgKHJlc3Vs
dERvY3VtZW50KQogICAgICAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgcmVzdWx0RG9jdW1lbnQu
Z2V0KCkpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhTTFRQcm9jZXNzb3JDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhTTFRQcm9jZXNzb3JD
dXN0b20uY3BwCShyZXZpc2lvbiA4MDAwNSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOFhTTFRQcm9jZXNzb3JDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCwx
MiArOTAsMTMgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4WFNMVFByb2Nlc3Nvcjo6dAogICAg
ICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCiAgICAgWFNMVFByb2Nlc3NvciogaW1wID0g
VjhYU0xUUHJvY2Vzc29yOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKKyAgICBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBzY3JpcHRDb250ZXh0ID0gZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
OwogCiAgICAgTm9kZSogc291cmNlID0gVjhOb2RlOjp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+OjpDYXN0KGFyZ3NbMF0pKTsKICAgICBpZiAoIXNvdXJjZSkKICAgICAgICAgcmV0dXJu
IHY4OjpVbmRlZmluZWQoKTsKIAotICAgIFJlZlB0cjxEb2N1bWVudD4gcmVzdWx0ID0gaW1wLT50
cmFuc2Zvcm1Ub0RvY3VtZW50KHNvdXJjZSk7CisgICAgUmVmUHRyPERvY3VtZW50PiByZXN1bHQg
PSBpbXAtPnRyYW5zZm9ybVRvRG9jdW1lbnQoc2NyaXB0Q29udGV4dCwgc291cmNlKTsKICAgICBp
ZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24uY3BwCShyZXZpc2lvbiA4MDAwNSkKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI1MSw2ICsyNTEsNyBAQCBQYXNzUmVmUHRyPERvY3VtZW50PiBET01JbXBsZW1lbnRhdGlv
bjo6CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBkb2MtPnNldFNlY3VyaXR5T3JpZ2lu
KG1fb3duZXJEb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSk7CisgICAgZG9jLT5zZXRPcmlnaW5E
b2N1bWVudChtX293bmVyRG9jdW1lbnQpOwogCiAgICAgUmVmUHRyPE5vZGU+IGRvY3VtZW50RWxl
bWVudDsKICAgICBpZiAoIXF1YWxpZmllZE5hbWUuaXNFbXB0eSgpKSB7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDgwMDA1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5Nyw2ICsxMzk3LDI1IEBAIFNldHRpbmdz
KiBEb2N1bWVudDo6c2V0dGluZ3MoKSBjb25zdAogICAgIHJldHVybiBtX2ZyYW1lID8gbV9mcmFt
ZS0+c2V0dGluZ3MoKSA6IDA7CiB9CiAKK3ZvaWQgRG9jdW1lbnQ6OnNldE9yaWdpbkRvY3VtZW50
KFBhc3NSZWZQdHI8RG9jdW1lbnQ+IG9yaWdpbkRvY3VtZW50KQoreworICAgIC8vIFRoaXMgZnVu
Y3Rpb24gc3RvcmVzIGEgcmVmZXJlbmNlIHRvIHRoZSBkb2N1bWVudCB3aGVyZSB0aGlzIGRvY3Vt
ZW50CisgICAgLy8gb3JpZ2luYXRlZCBmcm9tLiBUaGlzIGlzIHVzZWQgZm9yIGZyYW1lbGVzcyBk
b2N1bWVudHMsIHNvIHRoYXQgd2UgY2FuCisgICAgLy8gZmluZCBhIGZyYW1lIHdoZW4gd2UgYXJl
IGxvYWRpbmcgc3VicmVzb3VyY2VzLgorCisgICAgQVNTRVJUKG9yaWdpbkRvY3VtZW50KTsKKyAg
ICBtX29yaWdpbkRvY3VtZW50ID0gb3JpZ2luRG9jdW1lbnQ7Cit9CisKK0ZyYW1lKiBEb2N1bWVu
dDo6ZmluZEZyYW1lRm9yU3VicmVzb3VyY2VMb2FkcygpCit7CisgICAgZm9yIChEb2N1bWVudCog
ZG9jdW1lbnQgPSB0aGlzOyBkb2N1bWVudDsgZG9jdW1lbnQgPSBkb2N1bWVudC0+b3JpZ2luRG9j
dW1lbnQoKSkgeworICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCkp
CisgICAgICAgICAgICByZXR1cm4gZnJhbWU7CisgICAgfQorICAgIHJldHVybiAwOworfQorCiBQ
YXNzUmVmUHRyPFJhbmdlPiBEb2N1bWVudDo6Y3JlYXRlUmFuZ2UoKQogewogICAgIHJldHVybiBS
YW5nZTo6Y3JlYXRlKHRoaXMpOwpAQCAtNDA0Miw3ICs0MDYxLDcgQEAgdm9pZCBEb2N1bWVudDo6
YXBwbHlYU0xUcmFuc2Zvcm0oUHJvY2VzcwogICAgIGlmICghcHJvY2Vzc29yLT50cmFuc2Zvcm1U
b1N0cmluZyh0aGlzLCByZXN1bHRNSU1FVHlwZSwgbmV3U291cmNlLCByZXN1bHRFbmNvZGluZykp
CiAgICAgICAgIHJldHVybjsKICAgICAvLyBGSVhNRTogSWYgdGhlIHRyYW5zZm9ybSBmYWlsZWQg
d2Ugc2hvdWxkIHByb2JhYmx5IHJlcG9ydCBhbiBlcnJvciAobGlrZSBNb3ppbGxhIGRvZXMpLgot
ICAgIHByb2Nlc3Nvci0+Y3JlYXRlRG9jdW1lbnRGcm9tU291cmNlKG5ld1NvdXJjZSwgcmVzdWx0
RW5jb2RpbmcsIHJlc3VsdE1JTUVUeXBlLCB0aGlzLCBmcmFtZSgpKTsKKyAgICBwcm9jZXNzb3It
PmNyZWF0ZURvY3VtZW50RnJvbVNvdXJjZShuZXdTb3VyY2UsIHJlc3VsdEVuY29kaW5nLCByZXN1
bHRNSU1FVHlwZSwgdGhpcywgZnJhbWUoKSwgMCk7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OnNldFRy
YW5zZm9ybVNvdXJjZShQYXNzT3duUHRyPFRyYW5zZm9ybVNvdXJjZT4gc291cmNlKQpJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDgwMDA1KQorKysgU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUyMCw2ICs1MjAsMTAgQEAgcHVibGljOgog
ICAgIFBhZ2UqIHBhZ2UoKSBjb25zdDsgLy8gY2FuIGJlIE5VTEwKICAgICBTZXR0aW5ncyogc2V0
dGluZ3MoKSBjb25zdDsgLy8gY2FuIGJlIE5VTEwKIAorICAgIERvY3VtZW50KiBvcmlnaW5Eb2N1
bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luRG9jdW1lbnQuZ2V0KCk7IH0KKyAgICB2b2lk
IHNldE9yaWdpbkRvY3VtZW50KFBhc3NSZWZQdHI8RG9jdW1lbnQ+KTsKKyAgICBGcmFtZSogZmlu
ZEZyYW1lRm9yU3VicmVzb3VyY2VMb2FkcygpOworCiAgICAgUGFzc1JlZlB0cjxSYW5nZT4gY3Jl
YXRlUmFuZ2UoKTsKIAogICAgIFBhc3NSZWZQdHI8Tm9kZUl0ZXJhdG9yPiBjcmVhdGVOb2RlSXRl
cmF0b3IoTm9kZSogcm9vdCwgdW5zaWduZWQgd2hhdFRvU2hvdywKQEAgLTExNzIsNiArMTE3Niw3
IEBAIHByaXZhdGU6CiAgICAgRG9jdW1lbnRMb2FkZXIqIG1fZG9jdW1lbnRMb2FkZXI7CiAgICAg
T3duUHRyPENhY2hlZFJlc291cmNlTG9hZGVyPiBtX2NhY2hlZFJlc291cmNlTG9hZGVyOwogICAg
IFJlZlB0cjxEb2N1bWVudFBhcnNlcj4gbV9wYXJzZXI7CisgICAgUmVmUHRyPERvY3VtZW50PiBt
X29yaWdpbkRvY3VtZW50OwogICAgIGJvb2wgbV93ZWxsRm9ybWVkOwogCiAgICAgLy8gRG9jdW1l
bnQgVVJMcy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVM
b2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRo
cmVhZGFibGVMb2FkZXIuY3BwCShyZXZpc2lvbiA4MDAwNSkKKysrIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTcs
OCArMzU3LDE2IEBAIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVxdWUKICAg
ICBSZXNvdXJjZUVycm9yIGVycm9yOwogICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7CiAg
ICAgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25l
ZCBsb25nPjo6bWF4KCk7Ci0gICAgaWYgKG1fZG9jdW1lbnQtPmZyYW1lKCkpCi0gICAgICAgIGlk
ZW50aWZpZXIgPSBtX2RvY3VtZW50LT5mcmFtZSgpLT5sb2FkZXIoKS0+bG9hZFJlc291cmNlU3lu
Y2hyb25vdXNseShyZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNlLCBk
YXRhKTsKKyAgICBpZiAoRnJhbWUqIGZyYW1lID0gbV9kb2N1bWVudC0+ZmluZEZyYW1lRm9yU3Vi
cmVzb3VyY2VMb2FkcygpKSB7CisgICAgICAgIEtVUkwgcmVmZXJyZXIobV9kb2N1bWVudC0+dXJs
KCkpOworICAgICAgICByZWZlcnJlci5zZXRVc2VyKFN0cmluZygpKTsKKyAgICAgICAgcmVmZXJy
ZXIuc2V0UGFzcyhTdHJpbmcoKSk7CisgICAgICAgIHJlZmVycmVyLnJlbW92ZUZyYWdtZW50SWRl
bnRpZmllcigpOworCisgICAgICAgIGlkZW50aWZpZXIgPSBmcmFtZS0+bG9hZGVyKCktPmxvYWRS
ZXNvdXJjZVN5bmNocm9ub3VzbHkoCisgICAgICAgICAgICByZXF1ZXN0LCBzdG9yZWRDcmVkZW50
aWFscywgcmVmZXJyZXIuc3RyaW5nKCksCisgICAgICAgICAgICBlcnJvciwgcmVzcG9uc2UsIGRh
dGEpOworICAgIH0KIAogICAgIC8vIE5vIGV4Y2VwdGlvbiBmb3IgZmlsZTovLy8gcmVzb3VyY2Vz
LCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzQ5NjIyOTg+LgogICAgIC8vIEFsc28sIGlmIHdlIGhhdmUg
YW4gSFRUUCByZXNwb25zZSwgdGhlbiBpdCB3YXNuJ3QgYSBuZXR3b3JrIGVycm9yIGluIGZhY3Qu
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDgwMDA1
KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjc1Nyw3ICsyNzU3LDEyIEBAIHZvaWQgRnJhbWVMb2FkZXI6OmxvYWRQb3N0UmVxdWVz
dChjb25zdAogCiB1bnNpZ25lZCBsb25nIEZyYW1lTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJv
bm91c2x5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHMg
c3RvcmVkQ3JlZGVudGlhbHMsIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNl
JiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQogewotICAgIFN0cmluZyByZWZlcnJlciA9
IG1fb3V0Z29pbmdSZWZlcnJlcjsKKyAgICByZXR1cm4gbG9hZFJlc291cmNlU3luY2hyb25vdXNs
eShyZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFscywgbV9vdXRnb2luZ1JlZmVycmVyLCBlcnJvciwg
cmVzcG9uc2UsIGRhdGEpOworfQorCit1bnNpZ25lZCBsb25nIEZyYW1lTG9hZGVyOjpsb2FkUmVz
b3VyY2VTeW5jaHJvbm91c2x5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVk
Q3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsIGNvbnN0IFN0cmluZyYgb3V0Z29pbmdSZWZl
cnJlciwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBW
ZWN0b3I8Y2hhcj4mIGRhdGEpCit7CisgICAgU3RyaW5nIHJlZmVycmVyID0gb3V0Z29pbmdSZWZl
cnJlcjsKICAgICBpZiAoU2VjdXJpdHlPcmlnaW46OnNob3VsZEhpZGVSZWZlcnJlcihyZXF1ZXN0
LnVybCgpLCByZWZlcnJlcikpCiAgICAgICAgIHJlZmVycmVyID0gU3RyaW5nKCk7CiAgICAgCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAkocmV2aXNpb24gODAwMDUpCisrKyBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTI0
LDYgKzEyNCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCByZXBvcnRMb2NhbExvYWRGYWls
ZWQoRnJhbWUqLCBjb25zdCBTdHJpbmcmIHVybCk7CiAKICAgICB1bnNpZ25lZCBsb25nIGxvYWRS
ZXNvdXJjZVN5bmNocm9ub3VzbHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVu
dGlhbHMsIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBk
YXRhKTsKKyAgICB1bnNpZ25lZCBsb25nIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHMsIGNvbnN0IFN0cmluZyYgb3V0Z29p
bmdSZWZlcnJlciwgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hh
cj4mIGRhdGEpOwogCiAgICAgYm9vbCBjYW5IYW5kbGVSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVx
dWVzdCYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvRE9NUGFyc2VyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvRE9NUGFyc2VyLmNwcAkocmV2aXNpb24gODAwMDUp
CisrKyBTb3VyY2UvV2ViQ29yZS94bWwvRE9NUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjUsMTIgKzI1LDE4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxEb2N1
bWVudD4gRE9NUGFyc2VyOjpwYXJzZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHIsIGNvbnN0
IFN0cmluZyYgY29udGVudFR5cGUpCitQYXNzUmVmUHRyPERvY3VtZW50PiBET01QYXJzZXI6OnBh
cnNlRnJvbVN0cmluZyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250
ZXh0LCBjb25zdCBTdHJpbmcmIHN0ciwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSkKIHsKICAg
ICBpZiAoIURPTUltcGxlbWVudGF0aW9uOjppc1hNTE1JTUVUeXBlKGNvbnRlbnRUeXBlKSkKICAg
ICAgICAgcmV0dXJuIDA7CiAKICAgICBSZWZQdHI8RG9jdW1lbnQ+IGRvYyA9IERPTUltcGxlbWVu
dGF0aW9uOjpjcmVhdGVEb2N1bWVudChjb250ZW50VHlwZSwgMCwgS1VSTCgpLCBmYWxzZSk7CisK
KyAgICBpZiAoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCAmJiBzY3JpcHRFeGVjdXRpb25Db250ZXh0
LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgZG9jLT5zZXRTZWN1cml0eU9yaWdpbihzdGF0aWNf
Y2FzdDxEb2N1bWVudCo+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpLT5zZWN1cml0eU9yaWdpbigp
KTsKKyAgICAgICAgZG9jLT5zZXRPcmlnaW5Eb2N1bWVudChzdGF0aWNfY2FzdDxEb2N1bWVudCo+
KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpKTsKKyAgICB9CisKICAgICBkb2MtPnNldENvbnRlbnQo
c3RyKTsKICAgICByZXR1cm4gZG9jLnJlbGVhc2UoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3htbC9ET01QYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvRE9NUGFy
c2VyLmgJKHJldmlzaW9uIDgwMDA1KQorKysgU291cmNlL1dlYkNvcmUveG1sL0RPTVBhcnNlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMiArMjYsMTMgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogCiBjbGFz
cyBET01QYXJzZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxET01QYXJzZXI+IHsKIHB1YmxpYzoKICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxET01QYXJzZXI+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVm
KG5ldyBET01QYXJzZXIpOyB9CiAKLSAgICBQYXNzUmVmUHRyPERvY3VtZW50PiBwYXJzZUZyb21T
dHJpbmcoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSk7CisgICAgUGFz
c1JlZlB0cjxEb2N1bWVudD4gcGFyc2VGcm9tU3RyaW5nKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBjb25zdCBTdHJpbmcmIHN0ciwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSk7CiAKIHByaXZh
dGU6CiAgICAgRE9NUGFyc2VyKCkgeyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvRE9NUGFy
c2VyLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvRE9NUGFyc2VyLmlkbAko
cmV2aXNpb24gODAwMDUpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvRE9NUGFyc2VyLmlkbAkod29y
a2luZyBjb3B5KQpAQCAtMTksNiArMTksNiBAQAogCiBtb2R1bGUgeHBhdGggewogICAgIGludGVy
ZmFjZSBbQ2FuQmVDb25zdHJ1Y3RlZF0gRE9NUGFyc2VyIHsKLSAgICAgICAgRG9jdW1lbnQgcGFy
c2VGcm9tU3RyaW5nKGluIERPTVN0cmluZyBzdHIsIGluIERPTVN0cmluZyBjb250ZW50VHlwZSk7
CisgICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBEb2N1bWVudCBwYXJz
ZUZyb21TdHJpbmcoaW4gRE9NU3RyaW5nIHN0ciwgaW4gRE9NU3RyaW5nIGNvbnRlbnRUeXBlKTsK
ICAgICB9OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCShyZXZp
c2lvbiA4MDAwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI1MSw2ICsyNTEsNyBAQCBEb2N1bWVudCogWE1MSHR0cFJlcXVlc3Q6
OnJlc3BvbnNlWE1MKEV4CiAgICAgICAgICAgICAvLyBGSVhNRTogU2V0IExhc3QtTW9kaWZpZWQu
CiAgICAgICAgICAgICBtX3Jlc3BvbnNlWE1MLT5zZXRDb250ZW50KG1fcmVzcG9uc2VCdWlsZGVy
LnRvU3RyaW5nUHJlc2VydmVDYXBhY2l0eSgpKTsKICAgICAgICAgICAgIG1fcmVzcG9uc2VYTUwt
PnNldFNlY3VyaXR5T3JpZ2luKGRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkpOworICAgICAg
ICAgICAgbV9yZXNwb25zZVhNTC0+c2V0T3JpZ2luRG9jdW1lbnQoZG9jdW1lbnQoKSk7CiAgICAg
ICAgICAgICBpZiAoIW1fcmVzcG9uc2VYTUwtPndlbGxGb3JtZWQoKSkKICAgICAgICAgICAgICAg
ICBtX3Jlc3BvbnNlWE1MID0gMDsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUveG1s
L1hNTFRyZWVWaWV3ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9YTUxU
cmVlVmlld2VyLmNwcAkocmV2aXNpb24gODAwMDUpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWE1M
VHJlZVZpZXdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw3ICsxMDMsNyBAQCB2b2lkIFhN
TFRyZWVWaWV3ZXI6OnRyYW5zZm9ybURvY3VtZW50VG9UCiAgICAgRnJhbWUqIGZyYW1lID0gbV9k
b2N1bWVudC0+ZnJhbWUoKTsKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGludHJvZHVjZSBlcnJv
ciBoYW5kbGluZwogICAgIGlmIChwcm9jZXNzb3ItPnRyYW5zZm9ybVRvU3RyaW5nKG1fZG9jdW1l
bnQsIHJlc3VsdE1JTUVUeXBlLCBuZXdTb3VyY2UsIHJlc3VsdEVuY29kaW5nKSkKLSAgICAgICAg
cHJvY2Vzc29yLT5jcmVhdGVEb2N1bWVudEZyb21Tb3VyY2UobmV3U291cmNlLCByZXN1bHRFbmNv
ZGluZywgcmVzdWx0TUlNRVR5cGUsIG1fZG9jdW1lbnQsIGZyYW1lKTsKKyAgICAgICAgcHJvY2Vz
c29yLT5jcmVhdGVEb2N1bWVudEZyb21Tb3VyY2UobmV3U291cmNlLCByZXN1bHRFbmNvZGluZywg
cmVzdWx0TUlNRVR5cGUsIG1fZG9jdW1lbnQsIGZyYW1lLCAwKTsKICAgICAvLyBOZXcgZG9jdW1l
bnQgc2hvdWxkIGhhdmUgYmVlbiBsb2FkZWQgaW4gZnJhbWUuIFRlbGwgaXQgdG8gdXNlIHZpZXcg
c291cmNlIHN0eWxlcy4KICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+c2V0VXNlc1ZpZXdTb3VyY2VT
dHlsZXModHJ1ZSk7CiAgICAgZnJhbWUtPmRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3JDaGFuZ2Vk
KFJlY2FsY1N0eWxlSW1tZWRpYXRlbHkpOwpJbmRleDogU291cmNlL1dlYkNvcmUveG1sL1hTTElt
cG9ydFJ1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9YU0xJbXBvcnRS
dWxlLmNwcAkocmV2aXNpb24gODAwMDUpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWFNMSW1wb3J0
UnVsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDEyIEBACiAKICNpbmNsdWRlICJD
YWNoZWRYU0xTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIK
KyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgorI2lu
Y2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5o
IgorI2luY2x1ZGUgIlRocmVhZGFibGVMb2FkZXIuaCIKKyNpbmNsdWRlICJUaHJlYWRhYmxlTG9h
ZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiWFNMU3R5bGVTaGVldC5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC03NywyOSArODMsNjcgQEAgYm9vbCBYU0xJbXBvcnRSdWxlOjppc0xvYWRpbmco
KQogCiB2b2lkIFhTTEltcG9ydFJ1bGU6OmxvYWRTaGVldCgpCiB7Ci0gICAgQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0gMDsKICAgICBTdHlsZUJhc2UqIHJvb3Qg
PSB0aGlzOwogICAgIFN0eWxlQmFzZSogcGFyZW50OworCiAgICAgd2hpbGUgKChwYXJlbnQgPSBy
b290LT5wYXJlbnQoKSkpCiAgICAgICAgIHJvb3QgPSBwYXJlbnQ7Ci0gICAgaWYgKHJvb3QtPmlz
WFNMU3R5bGVTaGVldCgpKQotICAgICAgICBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IHN0YXRpY19j
YXN0PFhTTFN0eWxlU2hlZXQqPihyb290KS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKLSAgICAK
LSAgICBTdHJpbmcgYWJzSHJlZiA9IG1fc3RySHJlZjsKKworICAgIEFTU0VSVChyb290LT5pc1hT
TFN0eWxlU2hlZXQoKSk7CisgICAgWFNMU3R5bGVTaGVldCogcm9vdFN0eWxlU2hlZXQgPSBzdGF0
aWNfY2FzdDxYU0xTdHlsZVNoZWV0Kj4ocm9vdCk7CisgICAgTm9kZSogb3duZXJOb2RlID0gcm9v
dFN0eWxlU2hlZXQtPm93bmVyTm9kZSgpOworICAgIERvY3VtZW50KiBvcmlnaW5Eb2N1bWVudCA9
IG93bmVyTm9kZSA/IG93bmVyTm9kZS0+ZG9jdW1lbnQoKS0+b3JpZ2luRG9jdW1lbnQoKSA6IDA7
CisKICAgICBYU0xTdHlsZVNoZWV0KiBwYXJlbnRTaGVldCA9IHBhcmVudFN0eWxlU2hlZXQoKTsK
LSAgICBpZiAoIXBhcmVudFNoZWV0LT5maW5hbFVSTCgpLmlzTnVsbCgpKQotICAgICAgICAvLyB1
c2UgcGFyZW50IHN0eWxlaGVldCdzIFVSTCBhcyB0aGUgYmFzZSBVUkwKLSAgICAgICAgYWJzSHJl
ZiA9IEtVUkwocGFyZW50U2hlZXQtPmZpbmFsVVJMKCksIG1fc3RySHJlZikuc3RyaW5nKCk7Ci0g
ICAgCisgICAgQVNTRVJUKHBhcmVudFNoZWV0KTsKKworICAgIFJlZlB0cjxEb2N1bWVudD4gcGFy
ZW50RG9jdW1lbnQgPSBwYXJlbnRTaGVldC0+b3duZXJEb2N1bWVudCgpOworCisgICAgaWYgKCFw
YXJlbnREb2N1bWVudCB8fCBwYXJlbnREb2N1bWVudC0+dXJsKCkuaXNOdWxsKCkgfHwgcGFyZW50
RG9jdW1lbnQtPnVybCgpICE9IHBhcmVudFNoZWV0LT5maW5hbFVSTCgpKSB7CisgICAgICAgIEtV
UkwgcGFyZW50VVJMOworCisgICAgICAgIGlmICghcGFyZW50U2hlZXQtPmZpbmFsVVJMKCkuaXNO
dWxsKCkpIHsKKyAgICAgICAgICAgIC8vIFVzZSBwYXJlbnQgc3R5bGVoZWV0J3MgVVJMIGFzIHRo
ZSBiYXNlIFVSTC4KKyAgICAgICAgICAgIHBhcmVudFVSTCA9IHBhcmVudFNoZWV0LT5maW5hbFVS
TCgpOworICAgICAgICB9IGVsc2UgaWYgKG9yaWdpbkRvY3VtZW50KSB7CisgICAgICAgICAgICAv
LyBXaGVuIHBhcmVudCBzdHlsZXNoZWV0IGRvZXNuJ3QgaGF2ZSBhIGZpbmFsIFVSTCwgdXNlIGJh
c2UgVVJMIGZyb20gdGhlCisgICAgICAgICAgICAvLyBkb2N1bWVudCB0aGUgcm9vdCBzdHlsZXNo
ZWV0IG9yaWdpbmF0ZWQgZnJvbS4gVGhpcyBjYW4gaGFwcGVuIHdoZW4gdGhlCisgICAgICAgICAg
ICAvLyBzdHlsZXNoZWV0IGlzIGNyZWF0ZWQgd2l0aCBET01QYXJzZXIucGFyc2VGcm9tU3RyaW5n
KCksIGZvciBleGFtcGxlLgorICAgICAgICAgICAgcGFyZW50VVJMID0gb3JpZ2luRG9jdW1lbnQt
PnVybCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gQ3JlYXRlIGEgZmFrZSBkb2N1bWVudCB1
c2VkIGZvciB0aGUgZHVyYXRpb24gb2YgdGhpcyBsb2FkLgorICAgICAgICBwYXJlbnREb2N1bWVu
dCA9IERvY3VtZW50OjpjcmVhdGUoMCwgcGFyZW50VVJMKTsKKworICAgICAgICBpZiAob3JpZ2lu
RG9jdW1lbnQpIHsKKyAgICAgICAgICAgIHBhcmVudERvY3VtZW50LT5zZXRTZWN1cml0eU9yaWdp
bihvcmlnaW5Eb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSk7CisgICAgICAgICAgICBwYXJlbnRE
b2N1bWVudC0+c2V0T3JpZ2luRG9jdW1lbnQob3JpZ2luRG9jdW1lbnQpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgS1VSTCBhYnNIcmVmID0gcGFyZW50RG9jdW1lbnQtPmNvbXBsZXRlVVJMKG1f
c3RySHJlZik7CisKICAgICAvLyBDaGVjayBmb3IgYSBjeWNsZSBpbiBvdXIgaW1wb3J0IGNoYWlu
LiAgSWYgd2UgZW5jb3VudGVyIGEgc3R5bGVzaGVldAogICAgIC8vIGluIG91ciBwYXJlbnQgY2hh
aW4gd2l0aCB0aGUgc2FtZSBVUkwsIHRoZW4ganVzdCBiYWlsLgogICAgIGZvciAocGFyZW50ID0g
dGhpcy0+cGFyZW50KCk7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnQoKSkgewotICAg
ICAgICBpZiAocGFyZW50LT5pc1hTTFN0eWxlU2hlZXQoKSAmJiBhYnNIcmVmID09IHN0YXRpY19j
YXN0PFhTTFN0eWxlU2hlZXQqPihwYXJlbnQpLT5maW5hbFVSTCgpLnN0cmluZygpKQorICAgICAg
ICBpZiAocGFyZW50LT5pc1hTTFN0eWxlU2hlZXQoKSAmJiBhYnNIcmVmID09IHN0YXRpY19jYXN0
PFhTTFN0eWxlU2hlZXQqPihwYXJlbnQpLT5maW5hbFVSTCgpKQogICAgICAgICAgICAgcmV0dXJu
OwogICAgIH0KLSAgICAKLSAgICBtX2NhY2hlZFNoZWV0ID0gY2FjaGVkUmVzb3VyY2VMb2FkZXIt
PnJlcXVlc3RYU0xTdHlsZVNoZWV0KGFic0hyZWYpOwotICAgIAorCisgICAgLy8gV2UgbmVlZCB0
byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRyYW5zZm9ybWF0aW9ucyBzdGFydGVkIHZpYSBhIHByb2Nl
c3NpbmcKKyAgICAvLyBpbnN0cnVjdGlvbiBmcm9tIHRob3NlIHN0YXJ0ZWQgdmlhIEphdmFzY3Jp
cHQgYW5kIFhTTFRQcm9jZXNzb3IuIFRob3NlCisgICAgLy8gc3RhcnRlZCB2aWEgSmF2YXNjcmlw
dCBtdXN0IGxvYWQgc3VicmVzb3VyY2VzIHN5bmNocm9ub3VzbHkgb3IgdGhleQorICAgIC8vIHdv
bid0IGJlIHJlYWR5IHdoZW4gbGlieHNsdCBuZWVkcyB0aGVtLgorICAgIGlmIChvd25lck5vZGUg
JiYgb3duZXJOb2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OlBST0NFU1NJTkdfSU5TVFJVQ1RJT05f
Tk9ERSkKKyAgICAgICAgZmluaXNoTG9hZGluZ1NoZWV0QXN5bmNocm9ub3VzbHkocGFyZW50U2hl
ZXQtPmNhY2hlZFJlc291cmNlTG9hZGVyKCksIGFic0hyZWYpOworICAgIGVsc2UKKyAgICAgICAg
ZmluaXNoTG9hZGluZ1NoZWV0U3luY2hyb25vdXNseShwYXJlbnREb2N1bWVudC5nZXQoKSwgYWJz
SHJlZik7Cit9CisKK3ZvaWQgWFNMSW1wb3J0UnVsZTo6ZmluaXNoTG9hZGluZ1NoZWV0QXN5bmNo
cm9ub3VzbHkoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyLCBjb25z
dCBLVVJMJiB1cmwpCit7CisgICAgbV9jYWNoZWRTaGVldCA9IGNhY2hlZFJlc291cmNlTG9hZGVy
LT5yZXF1ZXN0WFNMU3R5bGVTaGVldCh1cmwuc3RyaW5nKCkpOworCiAgICAgaWYgKG1fY2FjaGVk
U2hlZXQpIHsKICAgICAgICAgbV9jYWNoZWRTaGVldC0+YWRkQ2xpZW50KHRoaXMpOwogICAgICAg
ICAKQEAgLTExMiw2ICsxNTYsNDggQEAgdm9pZCBYU0xJbXBvcnRSdWxlOjpsb2FkU2hlZXQoKQog
ICAgIH0KIH0KIAorY2xhc3MgSW1wb3J0TG9hZGVyQ2xpZW50IDogcHVibGljIFRocmVhZGFibGVM
b2FkZXJDbGllbnQgeworcHVibGljOgorICAgIEltcG9ydExvYWRlckNsaWVudCgpIDogbV9mYWls
ZWQoZmFsc2UpIHsgfQorCisgICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYgcmVzcG9uc2UpIHsgbV9yZXNwb25zZVVSTCA9IHJlc3BvbnNlLnVybCgpOyB9
CisgICAgdm9pZCBkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKSB7
IG1fcmF3RGF0YS5hcHBlbmQoZGF0YSwgbGVuZ3RoKTsgfQorICAgIHZvaWQgZGlkRmFpbChjb25z
dCBSZXNvdXJjZUVycm9yJikgeyBtX2ZhaWxlZCA9IHRydWU7IH0KKworICAgIGNvbnN0IFZlY3Rv
cjxjaGFyPiYgcmF3RGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fcmF3RGF0YTsgfQorICAgIGNvbnN0
IEtVUkwmIHJlc3BvbnNlVVJMKCkgY29uc3QgeyByZXR1cm4gbV9yZXNwb25zZVVSTDsgfQorICAg
IGJvb2wgZmFpbGVkKCkgY29uc3QgeyByZXR1cm4gbV9mYWlsZWQ7IH0KKworcHJpdmF0ZToKKyAg
ICBWZWN0b3I8Y2hhcj4gbV9yYXdEYXRhOworICAgIEtVUkwgbV9yZXNwb25zZVVSTDsKKyAgICBi
b29sIG1fZmFpbGVkOworfTsKKwordm9pZCBYU0xJbXBvcnRSdWxlOjpmaW5pc2hMb2FkaW5nU2hl
ZXRTeW5jaHJvbm91c2x5KERvY3VtZW50KiBwYXJlbnREb2N1bWVudCwgY29uc3QgS1VSTCYgdXJs
KQoreworICAgIGJvb2wgc2FtZU9yaWdpblJlcXVlc3QgPSBwYXJlbnREb2N1bWVudC0+c2VjdXJp
dHlPcmlnaW4oKS0+Y2FuUmVxdWVzdCh1cmwpOworCisgICAgVGhyZWFkYWJsZUxvYWRlck9wdGlv
bnMgb3B0aW9uczsKKyAgICBvcHRpb25zLnNlbmRMb2FkQ2FsbGJhY2tzID0gdHJ1ZTsKKyAgICBv
cHRpb25zLnNuaWZmQ29udGVudCA9IGZhbHNlOworICAgIG9wdGlvbnMuZm9yY2VQcmVmbGlnaHQg
PSBmYWxzZTsKKyAgICBvcHRpb25zLmFsbG93Q3JlZGVudGlhbHMgPSBzYW1lT3JpZ2luUmVxdWVz
dDsKKyAgICBvcHRpb25zLmNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeSA9IFVzZUFjY2Vzc0NvbnRy
b2w7CisKKyAgICBJbXBvcnRMb2FkZXJDbGllbnQgY2xpZW50OworICAgIFRocmVhZGFibGVMb2Fk
ZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkocGFyZW50RG9jdW1lbnQsIHVybCwgY2xpZW50
LCBvcHRpb25zKTsKKworICAgIGlmIChjbGllbnQuZmFpbGVkKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIFJlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBkZWNvZGVyID0gVGV4dFJlc291cmNl
RGVjb2Rlcjo6Y3JlYXRlKCJ0ZXh0L3hzbCIpOworICAgIFN0cmluZyBzaGVldChkZWNvZGVyLT5k
ZWNvZGUoY2xpZW50LnJhd0RhdGEoKS5kYXRhKCksIGNsaWVudC5yYXdEYXRhKCkuc2l6ZSgpKSk7
CisgICAgc2hlZXQgKz0gZGVjb2Rlci0+Zmx1c2goKTsKKworICAgIHNldFhTTFN0eWxlU2hlZXQo
dXJsLnN0cmluZygpLCBjbGllbnQucmVzcG9uc2VVUkwoKSwgc2hlZXQpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoWFNMVCkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3htbC9YU0xJbXBvcnRSdWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
eG1sL1hTTEltcG9ydFJ1bGUuaAkocmV2aXNpb24gODAwMDUpCisrKyBTb3VyY2UvV2ViQ29yZS94
bWwvWFNMSW1wb3J0UnVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw2ICs2MCw5IEBAIHByaXZh
dGU6CiAgICAgLy8gZnJvbSBDYWNoZWRSZXNvdXJjZUNsaWVudAogICAgIHZpcnR1YWwgdm9pZCBz
ZXRYU0xTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgaHJlZiwgY29uc3QgS1VSTCYgYmFzZVVSTCwg
Y29uc3QgU3RyaW5nJiBzaGVldCk7CiAgICAgCisgICAgdm9pZCBmaW5pc2hMb2FkaW5nU2hlZXRB
c3luY2hyb25vdXNseShDYWNoZWRSZXNvdXJjZUxvYWRlciosIGNvbnN0IEtVUkwmKTsKKyAgICB2
b2lkIGZpbmlzaExvYWRpbmdTaGVldFN5bmNocm9ub3VzbHkoRG9jdW1lbnQqLCBjb25zdCBLVVJM
Jik7CisKICAgICBTdHJpbmcgbV9zdHJIcmVmOwogICAgIFJlZlB0cjxYU0xTdHlsZVNoZWV0PiBt
X3N0eWxlU2hlZXQ7CiAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkWFNMU3R5bGVTaGVl
dD4gbV9jYWNoZWRTaGVldDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5jcHAJ
KHJldmlzaW9uIDgwMDA1KQorKysgU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIFhTTFRQcm9jZXNzb3I6On5YU0xUUHJv
Y2Vzc29yKCkKIH0KIAogUGFzc1JlZlB0cjxEb2N1bWVudD4gWFNMVFByb2Nlc3Nvcjo6Y3JlYXRl
RG9jdW1lbnRGcm9tU291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlU3RyaW5nLAotICAgIGNvbnN0
IFN0cmluZyYgc291cmNlRW5jb2RpbmcsIGNvbnN0IFN0cmluZyYgc291cmNlTUlNRVR5cGUsIE5v
ZGUqIHNvdXJjZU5vZGUsIEZyYW1lKiBmcmFtZSkKKyAgICBjb25zdCBTdHJpbmcmIHNvdXJjZUVu
Y29kaW5nLCBjb25zdCBTdHJpbmcmIHNvdXJjZU1JTUVUeXBlLCBOb2RlKiBzb3VyY2VOb2RlLCBG
cmFtZSogZnJhbWUsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQpCiB7CiAgICAgUmVmUHRyPERvY3VtZW50PiBvd25lckRvY3VtZW50ID0gc291cmNlTm9kZS0+
ZG9jdW1lbnQoKTsKICAgICBib29sIHNvdXJjZUlzRG9jdW1lbnQgPSAoc291cmNlTm9kZSA9PSBv
d25lckRvY3VtZW50LmdldCgpKTsKQEAgLTg2LDYgKzg2LDkgQEAgUGFzc1JlZlB0cjxEb2N1bWVu
dD4gWFNMVFByb2Nlc3Nvcjo6Y3JlYQogICAgICAgICAgICAgdmlldy0+Y2xlYXIoKTsKICAgICAg
ICAgcmVzdWx0LT5zZXRUcmFuc2Zvcm1Tb3VyY2VEb2N1bWVudChmcmFtZS0+ZG9jdW1lbnQoKSk7
CiAgICAgICAgIGZyYW1lLT5zZXREb2N1bWVudChyZXN1bHQpOworICAgIH0gZWxzZSBpZiAoc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCAmJiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0RvY3VtZW50
KCkpIHsKKyAgICAgICAgcmVzdWx0LT5zZXRTZWN1cml0eU9yaWdpbihzdGF0aWNfY2FzdDxEb2N1
bWVudCo+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpLT5zZWN1cml0eU9yaWdpbigpKTsKKyAgICAg
ICAgcmVzdWx0LT5zZXRPcmlnaW5Eb2N1bWVudChzdGF0aWNfY2FzdDxEb2N1bWVudCo+KHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQpKTsKICAgICB9CiAKICAgICBSZWZQdHI8VGV4dFJlc291cmNlRGVj
b2Rlcj4gZGVjb2RlciA9IFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZShzb3VyY2VNSU1FVHlw
ZSk7CkBAIC0xMjMsMTQgKzEyNiwxNCBAQCBzdGF0aWMgaW5saW5lIFJlZlB0cjxEb2N1bWVudEZy
YWdtZW50PiBjCiAgICAgcmV0dXJuIGZyYWdtZW50OwogfQogCi1QYXNzUmVmUHRyPERvY3VtZW50
PiBYU0xUUHJvY2Vzc29yOjp0cmFuc2Zvcm1Ub0RvY3VtZW50KE5vZGUqIHNvdXJjZU5vZGUpCitQ
YXNzUmVmUHRyPERvY3VtZW50PiBYU0xUUHJvY2Vzc29yOjp0cmFuc2Zvcm1Ub0RvY3VtZW50KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIE5vZGUqIHNvdXJj
ZU5vZGUpCiB7CiAgICAgU3RyaW5nIHJlc3VsdE1JTUVUeXBlOwogICAgIFN0cmluZyByZXN1bHRT
dHJpbmc7CiAgICAgU3RyaW5nIHJlc3VsdEVuY29kaW5nOwogICAgIGlmICghdHJhbnNmb3JtVG9T
dHJpbmcoc291cmNlTm9kZSwgcmVzdWx0TUlNRVR5cGUsIHJlc3VsdFN0cmluZywgcmVzdWx0RW5j
b2RpbmcpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gY3JlYXRlRG9jdW1lbnRGcm9t
U291cmNlKHJlc3VsdFN0cmluZywgcmVzdWx0RW5jb2RpbmcsIHJlc3VsdE1JTUVUeXBlLCBzb3Vy
Y2VOb2RlLCAwKTsKKyAgICByZXR1cm4gY3JlYXRlRG9jdW1lbnRGcm9tU291cmNlKHJlc3VsdFN0
cmluZywgcmVzdWx0RW5jb2RpbmcsIHJlc3VsdE1JTUVUeXBlLCBzb3VyY2VOb2RlLCAwLCBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KTsKIH0KIAogUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBY
U0xUUHJvY2Vzc29yOjp0cmFuc2Zvcm1Ub0ZyYWdtZW50KE5vZGUqIHNvdXJjZU5vZGUsIERvY3Vt
ZW50KiBvdXRwdXREb2MpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yLmgJKHJldmlz
aW9uIDgwMDA1KQorKysgU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgsMTIgKzQ4LDEyIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0WFNMU3R5
bGVTaGVldChQYXNzUmVmUHRyPFhTTFN0eWxlU2hlZXQ+IHN0eWxlU2hlZXQpIHsgbV9zdHlsZXNo
ZWV0ID0gc3R5bGVTaGVldDsgfQogICAgIGJvb2wgdHJhbnNmb3JtVG9TdHJpbmcoTm9kZSogc291
cmNlLCBTdHJpbmcmIHJlc3VsdE1JTUVUeXBlLCBTdHJpbmcmIHJlc3VsdFN0cmluZywgU3RyaW5n
JiByZXN1bHRFbmNvZGluZyk7Ci0gICAgUGFzc1JlZlB0cjxEb2N1bWVudD4gY3JlYXRlRG9jdW1l
bnRGcm9tU291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmcmIHNvdXJjZUVu
Y29kaW5nLCBjb25zdCBTdHJpbmcmIHNvdXJjZU1JTUVUeXBlLCBOb2RlKiBzb3VyY2VOb2RlLCBG
cmFtZSogZnJhbWUpOworICAgIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IGNyZWF0ZURvY3VtZW50RnJv
bVNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VFbmNvZGlu
ZywgY29uc3QgU3RyaW5nJiBzb3VyY2VNSU1FVHlwZSwgTm9kZSogc291cmNlTm9kZSwgRnJhbWUq
IGZyYW1lLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CiAgICAgCiAgICAgLy8gRE9NIG1ldGhv
ZHMKICAgICB2b2lkIGltcG9ydFN0eWxlc2hlZXQoUGFzc1JlZlB0cjxOb2RlPiBzdHlsZSkgeyBt
X3N0eWxlc2hlZXRSb290Tm9kZSA9IHN0eWxlOyB9CiAgICAgUGFzc1JlZlB0cjxEb2N1bWVudEZy
YWdtZW50PiB0cmFuc2Zvcm1Ub0ZyYWdtZW50KE5vZGUqIHNvdXJjZSwgRG9jdW1lbnQqIG91cHV0
RG9jKTsKLSAgICBQYXNzUmVmUHRyPERvY3VtZW50PiB0cmFuc2Zvcm1Ub0RvY3VtZW50KE5vZGUq
IHNvdXJjZSk7CisgICAgUGFzc1JlZlB0cjxEb2N1bWVudD4gdHJhbnNmb3JtVG9Eb2N1bWVudChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgTm9kZSogc291cmNlKTsKICAgICAKICAgICB2b2lkIHNl
dFBhcmFtZXRlcihjb25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3RyaW5nJiBsb2Nh
bE5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwogICAgIFN0cmluZyBnZXRQYXJhbWV0ZXIoY29u
c3QgU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IFN0cmluZyYgbG9jYWxOYW1lKSBjb25zdDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yTGlieHNsdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcAkocmV2
aXNpb24gODAwMDUpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMCArMzAsOSBAQAogI2luY2x1ZGUgIkRPTVdpbmRv
dy5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUu
aCIKLSNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUu
aCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKLSNpbmNsdWRlICJSZXNvdXJjZVJlc3Bv
bnNlLmgiCisjaW5jbHVkZSAiVGhyZWFkYWJsZUxvYWRlci5oIgorI2luY2x1ZGUgIlRocmVhZGFi
bGVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1Tb3VyY2UuaCIKICNpbmNsdWRl
ICJYTUxEb2N1bWVudFBhcnNlci5oIgogI2luY2x1ZGUgIlhTTFN0eWxlU2hlZXQuaCIKQEAgLTEw
MSw2ICsxMDAsMjEgQEAgdm9pZCBYU0xUUHJvY2Vzc29yOjpwYXJzZUVycm9yRnVuYyh2b2lkKgog
ICAgIGNvbnNvbGUtPmFkZE1lc3NhZ2UoWE1MTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUs
IGxldmVsLCBlcnJvci0+bWVzc2FnZSwgZXJyb3ItPmxpbmUsIGVycm9yLT5maWxlKTsKIH0KIAor
Y2xhc3MgTG9hZERvY3VtZW50TG9hZGVyQ2xpZW50IDogcHVibGljIFRocmVhZGFibGVMb2FkZXJD
bGllbnQgeworcHVibGljOgorICAgIExvYWREb2N1bWVudExvYWRlckNsaWVudCgpIDogbV9mYWls
ZWQoZmFsc2UpIHsgfQorCisgICAgdm9pZCBkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBkYXRh
LCBpbnQgbGVuZ3RoKSB7IG1fcmF3RGF0YS5hcHBlbmQoZGF0YSwgbGVuZ3RoKTsgfQorICAgIHZv
aWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJikgeyBtX2ZhaWxlZCA9IHRydWU7IH0KKwor
ICAgIGNvbnN0IFZlY3RvcjxjaGFyPiYgcmF3RGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fcmF3RGF0
YTsgfQorICAgIGJvb2wgZmFpbGVkKCkgY29uc3QgeyByZXR1cm4gbV9mYWlsZWQ7IH0KKworcHJp
dmF0ZToKKyAgICBWZWN0b3I8Y2hhcj4gbV9yYXdEYXRhOworICAgIGJvb2wgbV9mYWlsZWQ7Cit9
OworCiAvLyBGSVhNRTogVGhlcmUgc2VlbXMgdG8gYmUgbm8gd2F5IHRvIGNvbnRyb2wgdGhlIGN0
eHQgcG9pbnRlciBmb3IgbG9hZGluZyBoZXJlLCB0aHVzIHdlIGhhdmUgZ2xvYmFscy4KIHN0YXRp
YyBYU0xUUHJvY2Vzc29yKiBnbG9iYWxQcm9jZXNzb3IgPSAwOwogc3RhdGljIENhY2hlZFJlc291
cmNlTG9hZGVyKiBnbG9iYWxDYWNoZWRSZXNvdXJjZUxvYWRlciA9IDA7CkBAIC0xMTksMjAgKzEz
MywyMiBAQCBzdGF0aWMgeG1sRG9jUHRyIGRvY0xvYWRlckZ1bmMoY29uc3QgeG1sCiAgICAgICAg
IHhtbENoYXIqIGJhc2UgPSB4bWxOb2RlR2V0QmFzZShjb250ZXh0LT5kb2N1bWVudC0+ZG9jLCBj
b250ZXh0LT5ub2RlKTsKICAgICAgICAgS1VSTCB1cmwoS1VSTChQYXJzZWRVUkxTdHJpbmcsIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGJhc2UpKSwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBjaGFyKj4odXJpKSk7CiAgICAgICAgIHhtbEZyZWUoYmFzZSk7Ci0gICAgICAgIFJlc291cmNl
RXJyb3IgZXJyb3I7Ci0gICAgICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7CiAKLSAgICAg
ICAgVmVjdG9yPGNoYXI+IGRhdGE7CisgICAgICAgIERvY3VtZW50KiBvd25lckRvY3VtZW50ID0g
Z2xvYmFsQ2FjaGVkUmVzb3VyY2VMb2FkZXItPmRvY3VtZW50KCk7CisgICAgICAgIGJvb2wgc2Ft
ZU9yaWdpblJlcXVlc3QgPSBvd25lckRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1
ZXN0KHVybCk7CisKKyAgICAgICAgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMgbG9hZGVyT3B0aW9u
czsKKyAgICAgICAgbG9hZGVyT3B0aW9ucy5zZW5kTG9hZENhbGxiYWNrcyA9IHRydWU7CisgICAg
ICAgIGxvYWRlck9wdGlvbnMuc25pZmZDb250ZW50ID0gZmFsc2U7CisgICAgICAgIGxvYWRlck9w
dGlvbnMuZm9yY2VQcmVmbGlnaHQgPSBmYWxzZTsKKyAgICAgICAgbG9hZGVyT3B0aW9ucy5hbGxv
d0NyZWRlbnRpYWxzID0gc2FtZU9yaWdpblJlcXVlc3Q7CisgICAgICAgIGxvYWRlck9wdGlvbnMu
Y3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5ID0gVXNlQWNjZXNzQ29udHJvbDsKKworICAgICAgICBM
b2FkRG9jdW1lbnRMb2FkZXJDbGllbnQgY2xpZW50OworICAgICAgICBUaHJlYWRhYmxlTG9hZGVy
Ojpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KG93bmVyRG9jdW1lbnQsIHVybCwgY2xpZW50LCBs
b2FkZXJPcHRpb25zKTsKIAotICAgICAgICBib29sIHJlcXVlc3RBbGxvd2VkID0gZ2xvYmFsQ2Fj
aGVkUmVzb3VyY2VMb2FkZXItPmZyYW1lKCkgJiYgZ2xvYmFsQ2FjaGVkUmVzb3VyY2VMb2FkZXIt
PmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QodXJsKTsKLSAgICAgICAg
aWYgKHJlcXVlc3RBbGxvd2VkKSB7Ci0gICAgICAgICAgICBnbG9iYWxDYWNoZWRSZXNvdXJjZUxv
YWRlci0+ZnJhbWUoKS0+bG9hZGVyKCktPmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkodXJsLCBB
bGxvd1N0b3JlZENyZWRlbnRpYWxzLCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOwotICAgICAgICAg
ICAgcmVxdWVzdEFsbG93ZWQgPSBnbG9iYWxDYWNoZWRSZXNvdXJjZUxvYWRlci0+ZG9jdW1lbnQo
KS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChyZXNwb25zZS51cmwoKSk7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKCFyZXF1ZXN0QWxsb3dlZCkgewotICAgICAgICAgICAgZGF0YS5jbGVh
cigpOwotICAgICAgICAgICAgZ2xvYmFsQ2FjaGVkUmVzb3VyY2VMb2FkZXItPnByaW50QWNjZXNz
RGVuaWVkTWVzc2FnZSh1cmwpOwotICAgICAgICB9CisgICAgICAgIGlmIChjbGllbnQuZmFpbGVk
KCkpCisgICAgICAgICAgICByZXR1cm4gMDsKIAogICAgICAgICBDb25zb2xlKiBjb25zb2xlID0g
MDsKICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGdsb2JhbFByb2Nlc3Nvci0+eHNsU3R5bGVz
aGVldCgpLT5vd25lckRvY3VtZW50KCktPmZyYW1lKCkpCkBAIC0xNDIsNyArMTU4LDggQEAgc3Rh
dGljIHhtbERvY1B0ciBkb2NMb2FkZXJGdW5jKGNvbnN0IHhtbAogCiAgICAgICAgIC8vIFdlIGRv
bid0IHNwZWNpZnkgYW4gZW5jb2RpbmcgaGVyZS4gTmVpdGhlciBHZWNrbyBub3IgV2luSUUgcmVz
cGVjdHMKICAgICAgICAgLy8gdGhlIGVuY29kaW5nIHNwZWNpZmllZCBpbiB0aGUgSFRUUCBoZWFk
ZXJzLgotICAgICAgICB4bWxEb2NQdHIgZG9jID0geG1sUmVhZE1lbW9yeShkYXRhLmRhdGEoKSwg
ZGF0YS5zaXplKCksIChjb25zdCBjaGFyKil1cmksIDAsIG9wdGlvbnMpOworICAgICAgICB4bWxE
b2NQdHIgZG9jID0geG1sUmVhZE1lbW9yeShjbGllbnQucmF3RGF0YSgpLmRhdGEoKSwgY2xpZW50
LnJhd0RhdGEoKS5zaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHVyaSksIDAsIG9wdGlvbnMpOwogCiAgICAg
ICAgIHhtbFNldFN0cnVjdHVyZWRFcnJvckZ1bmMoMCwgMCk7CiAgICAgICAgIHhtbFNldEdlbmVy
aWNFcnJvckZ1bmMoMCwgMCk7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA4MDAwNSkKKysrIExheW91dFRl
c3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBACisyMDExLTAzLTAy
ICBBbmRyZWFzIFdpY3RvciAgPGFuZHJlYXMud2NpdG9yQHhjZXJpb24uY29tPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIHhzbDppbXBvcnQgYW5kIGRv
Y3VtZW50KCkgZG9uJ3Qgd29yayBpbiBzdHlsZXNoZWV0cyBsb2FkZWQgdmlhIFhNTEh0dHBSZXF1
ZXN0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDMx
MworCisgICAgICAgICogZmFzdC94c2wvdHJhbnNmb3JtLWRvY2ltcGwtZG9jLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogZmFzdC94c2wvdHJhbnNmb3JtLWRvY2ltcGwtZG9jLnhodG1s
OiBBZGRlZC4KKwlUZXN0IHRoYXQgc3R5bGVzaGVldHMgY3JlYXRlZCB3aXRoIGRvY3VtZW50Lmlt
cGxlbWVudGF0aW9uLmNyZWF0ZURvY3VtZW50IGNhbiB1c2UgeHNsOmltcG9ydC4KKyAgICAgICAg
KiBmYXN0L3hzbC90cmFuc2Zvcm0tZG9tcGFyc2VyLWRvYy1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGZhc3QveHNsL3RyYW5zZm9ybS1kb21wYXJzZXItZG9jLnhodG1sOiBBZGRlZC4K
KwlUZXN0IHRoYXQgc3R5bGVzaGVldHMgY3JlYXRlZCB3aXRoIERPTVBhcnNlci5wYXJzZUZyb21T
dHJpbmcgY2FuIHVzZSB4c2w6aW1wb3J0LgorICAgICAgICAqIGZhc3QveHNsL3RyYW5zZm9ybS10
cmFuc2Zvcm1lZC1kb2MtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3hzbC90
cmFuc2Zvcm0tdHJhbnNmb3JtZWQtZG9jLnhodG1sOiBBZGRlZC4KKwlUZXN0IHRoYXQgc3R5bGVz
aGVldHMgY3JlYXRlZCB3aXRoIFhTTFRQcm9jZXNzb3IudHJhbnNmb3JtVG9Eb2N1bWVudCBjYW4g
dXNlIHhzbDppbXBvcnQuCisgICAgICAgICogZmFzdC94c2wvdHJhbnNmb3JtLXhoci1kb2MtZXhw
ZWN0ZWQudHh0OgorICAgICAgICAqIGh0dHAvdGVzdHMveHNsOiBBZGRlZC4KKyAgICAgICAgKiBo
dHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXM6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMveHNs
L3Jlc291cmNlcy9hbGxvdy1jcm9zcy1vcmlnaW4taGVhZGVyLmNnaTogQWRkZWQuCisgICAgICAg
ICogaHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL3RyYW5zZm9ybS1mcmFtZWQtc3ViZnJhbWUxLnho
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMvdHJhbnNmb3Jt
LWZyYW1lZC1zdWJmcmFtZTIueGh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMveHNs
L3Jlc291cmNlcy94aHItZG9jLWNyb3NzLW9yaWdpbi54c2w6IEFkZGVkLgorICAgICAgICAqIGh0
dHAvdGVzdHMveHNsL3Jlc291cmNlcy94aHItZG9jLWZyb20tYWxsb3dlZC1jcm9zcy1vcmlnaW4u
eHNsOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMveGhyLWRvYy1p
bXBvcnRlZC54c2w6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMveHNsL3Jlc291cmNlcy94
aHItZG9jLnhtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL3ho
ci1kb2MueHNsOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0tZnJh
bWVkLWRvYy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMveHNsL3Ry
YW5zZm9ybS1mcmFtZWQtZG9jLnhodG1sOiBBZGRlZC4KKwlUZXN0IHN0eWxlc2hlZXRzIG9yaWdp
bmF0aW5nIGZyb20gYW5vdGhlciBmcmFtZS4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3hzbC90cmFu
c2Zvcm0teGhyLWRvYy1jcm9zcy1vcmlnaW4tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBodHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0teGhyLWRvYy1jcm9zcy1vcmlnaW4ueGh0bWw6IEFk
ZGVkLgorCVRlc3QgdGhhdCB5b3UgY2FuJ3QgaW1wb3J0IGRvY3VtZW50cyBjcm9zcyBvcmlnaW4u
CisgICAgICAgICogaHR0cC90ZXN0cy94c2wvdHJhbnNmb3JtLXhoci1kb2MtZnJvbS1hbGxvd2Vk
LWNyb3NzLW9yaWdpbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMv
eHNsL3RyYW5zZm9ybS14aHItZG9jLWZyb20tYWxsb3dlZC1jcm9zcy1vcmlnaW4ueGh0bWw6IEFk
ZGVkLgorCiAyMDExLTAzLTAxICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IFl1cnkgU2VtaWtoYXRza3kuCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0tZG9jaW1wbC1kb2MtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS1kb2NpbXBsLWRvYy1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0tZG9j
aW1wbC1kb2MtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK1Rlc3Qg
Zm9yIGJ1ZyAxMDMxMzogeHNsOmltcG9ydCBkb2Vzbid0IHdvcmsgaW4gc3R5bGVzaGVldHMgbG9h
ZGVkIHZpYSBYTUxIdHRwUmVxdWVzdC4KKworU1VDQ0VTUwpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC94c2wvdHJhbnNmb3JtLWRvY2ltcGwtZG9jLnhodG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QveHNsL3RyYW5zZm9ybS1kb2NpbXBsLWRvYy54aHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS1kb2NpbXBsLWRvYy54aHRtbAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw0NSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRm
LTgiPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTiIg
Imh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMTEvRFREL3hodG1sMTEuZHRkIj4KKzxodG1sIHht
bG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iPgorPGhlYWQ+
CisgICAgPHRpdGxlPnhzbCBpbXBvcnQgdGVzdDwvdGl0bGU+CisgICAgPHNjcmlwdCB0eXBlPSJ0
ZXh0L2phdmFzY3JpcHQiPjwhW0NEQVRBWworICAgICAgICBmdW5jdGlvbiBsb2FkKCkgeworICAg
ICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyAgICAgICAgICAgIHZhciB4
c2x0TlMgPSAiaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIjsKKyAgICAgICAg
ICAgIHZhciB4c2x0RG9jID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlRG9jdW1lbnQo
eHNsdE5TLCAic3R5bGVzaGVldCIsIG51bGwpOworICAgICAgICAgICAgdmFyIHJvb3RFbGVtID0g
eHNsdERvYy5kb2N1bWVudEVsZW1lbnQ7CisgICAgICAgICAgICByb290RWxlbS5zZXRBdHRyaWJ1
dGUoInZlcnNpb24iLCAiMS4wIik7CisKKyAgICAgICAgICAgIHZhciBpbXBvcnRFbGVtID0geHNs
dERvYy5jcmVhdGVFbGVtZW50TlMoeHNsdE5TLCAiaW1wb3J0Iik7CisgICAgICAgICAgICBpbXBv
cnRFbGVtLnNldEF0dHJpYnV0ZSgiaHJlZiIsICJyZXNvdXJjZXMveGhyLWRvYy1pbXBvcnRlZC54
c2wiKTsKKyAgICAgICAgICAgIHJvb3RFbGVtLmFwcGVuZENoaWxkKGltcG9ydEVsZW0pOworCisg
ICAgICAgICAgICB2YXIgdGVtcGxhdGVFbGVtID0geHNsdERvYy5jcmVhdGVFbGVtZW50TlMoeHNs
dE5TLCAidGVtcGxhdGUiKTsKKyAgICAgICAgICAgIHRlbXBsYXRlRWxlbS5zZXRBdHRyaWJ1dGUo
Im1hdGNoIiwgIi9yb290Iik7CisgICAgICAgICAgICB2YXIgY2FsbEVsZW0gPSB4c2x0RG9jLmNy
ZWF0ZUVsZW1lbnROUyh4c2x0TlMsICJjYWxsLXRlbXBsYXRlIik7CisgICAgICAgICAgICBjYWxs
RWxlbS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCAid29ya3MiKTsKKyAgICAgICAgICAgIHRlbXBsYXRl
RWxlbS5hcHBlbmRDaGlsZChjYWxsRWxlbSk7CisgICAgICAgICAgICByb290RWxlbS5hcHBlbmRD
aGlsZCh0ZW1wbGF0ZUVsZW0pOworCisgICAgICAgICAgICB2YXIgeHNsdCA9IG5ldyBYU0xUUHJv
Y2Vzc29yKCk7CisgICAgICAgICAgICB4c2x0LmltcG9ydFN0eWxlc2hlZXQoeHNsdERvYyk7CisK
KyAgICAgICAgICAgIHZhciB4bWxEb2MgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVE
b2N1bWVudCgiIiwgInJvb3QiLCBudWxsKTsKKyAgICAgICAgICAgIHZhciByZXN1bHREb2MgPSB4
c2x0LnRyYW5zZm9ybVRvRG9jdW1lbnQoeG1sRG9jKTsKKyAgICAgICAgICAgIHZhciBmcmFnbWVu
dCA9IGRvY3VtZW50LmltcG9ydE5vZGUocmVzdWx0RG9jLmRvY3VtZW50RWxlbWVudCwgdHJ1ZSk7
CisKKyAgICAgICAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGl2Jyk7
CisgICAgICAgICAgICBkaXYucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoZnJhZ21lbnQsIGRpdik7
CisgICAgICAgIH0KKyAgICBdXT48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0ibG9h
ZCgpIj4KKzxwPlRlc3QgZm9yIDxhIGhyZWY9Imh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEwMzEzIj5idWcgMTAzMTM8L2E+OgoreHNsOmltcG9ydCBkb2Vzbid0IHdvcmsg
aW4gc3R5bGVzaGVldHMgbG9hZGVkIHZpYSBYTUxIdHRwUmVxdWVzdC48L3A+CisKKzxkaXYgaWQ9
ImRpdiI+SXQncyBuaWNlIHRoYXQgdGhpcyBoYXNuJ3QgY3Jhc2hlZCwgYnV0IHRoZSBYU0wgdHJh
bnNmb3JtYXRpb24gaGFzIGZhaWxlZC48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS1kb21wYXJzZXItZG9jLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0tZG9tcGFyc2VyLWRv
Yy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3hzbC90cmFu
c2Zvcm0tZG9tcGFyc2VyLWRvYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MyBAQAorVGVzdCBmb3IgYnVnIDEwMzEzOiB4c2w6aW1wb3J0IGRvZXNuJ3Qgd29yayBpbiBzdHls
ZXNoZWV0cyBsb2FkZWQgdmlhIFhNTEh0dHBSZXF1ZXN0LgorCitTVUNDRVNTCkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0tZG9tcGFyc2VyLWRvYy54aHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0tZG9tcGFyc2VyLWRvYy54aHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS1kb21wYXJzZXIt
ZG9jLnhodG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQxIEBACis8P3htbCB2ZXJzaW9uPSIx
LjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RU
RCBYSFRNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwx
MS5kdGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDps
YW5nPSJlbiI+Cis8aGVhZD4KKyAgICA8dGl0bGU+eHNsIGltcG9ydCB0ZXN0PC90aXRsZT4KKyAg
ICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCFbQ0RBVEFbCisgICAgICAgIGZ1bmN0
aW9uIGxvYWQoKSB7CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KQorICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKwor
ICAgICAgICAgICAgdmFyIHhzbHRTdHIgPQorICAgICAgICAgICAgICAgICc8eHNsOnN0eWxlc2hl
ZXQgdmVyc2lvbj0iMS4wIicgKworICAgICAgICAgICAgICAgICcgIHhtbG5zOnhzbD0iaHR0cDov
L3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIicgKworICAgICAgICAgICAgICAgICcgIHht
bG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4nICsKKyAgICAgICAgICAgICAgICAn
PHhzbDppbXBvcnQgaHJlZj0icmVzb3VyY2VzL3hoci1kb2MtaW1wb3J0ZWQueHNsIiAvPicgKwor
ICAgICAgICAgICAgICAgICc8eHNsOnRlbXBsYXRlIG1hdGNoPSIvcm9vdCI+JyArCisgICAgICAg
ICAgICAgICAgJyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0id29ya3MiIC8+JyArCisgICAg
ICAgICAgICAgICAgJzwveHNsOnRlbXBsYXRlPicgKworICAgICAgICAgICAgICAgICc8L3hzbDpz
dHlsZXNoZWV0Pic7CisKKyAgICAgICAgICAgIHZhciBwYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7
CisgICAgICAgICAgICB2YXIgeHNsdCA9IG5ldyBYU0xUUHJvY2Vzc29yKCk7CisgICAgICAgICAg
ICB2YXIgeHNsdERvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoeHNsdFN0ciwgImFwcGxpY2F0
aW9uL3htbCIpOworICAgICAgICAgICAgeHNsdC5pbXBvcnRTdHlsZXNoZWV0KHhzbHREb2MpOwor
CisgICAgICAgICAgICB2YXIgeG1sRG9jID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZygiPHJvb3Qv
PiIsICJhcHBsaWNhdGlvbi94bWwiKTsKKyAgICAgICAgICAgIHZhciByZXN1bHREb2MgPSB4c2x0
LnRyYW5zZm9ybVRvRG9jdW1lbnQoeG1sRG9jKTsKKyAgICAgICAgICAgIHZhciBmcmFnbWVudCA9
IGRvY3VtZW50LmltcG9ydE5vZGUocmVzdWx0RG9jLmRvY3VtZW50RWxlbWVudCwgdHJ1ZSk7CisK
KyAgICAgICAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGl2Jyk7Cisg
ICAgICAgICAgICBkaXYucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoZnJhZ21lbnQsIGRpdik7Cisg
ICAgICAgIH0KKyAgICBdXT48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0ibG9hZCgp
Ij4KKzxwPlRlc3QgZm9yIDxhIGhyZWY9Imh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEwMzEzIj5idWcgMTAzMTM8L2E+OgoreHNsOmltcG9ydCBkb2Vzbid0IHdvcmsgaW4g
c3R5bGVzaGVldHMgbG9hZGVkIHZpYSBYTUxIdHRwUmVxdWVzdC48L3A+CisKKzxkaXYgaWQ9ImRp
diI+SXQncyBuaWNlIHRoYXQgdGhpcyBoYXNuJ3QgY3Jhc2hlZCwgYnV0IHRoZSBYU0wgdHJhbnNm
b3JtYXRpb24gaGFzIGZhaWxlZC48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS10cmFuc2Zvcm1lZC1kb2MtZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS10cmFuc2Zvcm1lZC1k
b2MtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC94c2wvdHJh
bnNmb3JtLXRyYW5zZm9ybWVkLWRvYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMyBAQAorVGVzdCBmb3IgYnVnIDEwMzEzOiB4c2w6aW1wb3J0IGRvZXNuJ3Qgd29yayBpbiBz
dHlsZXNoZWV0cyBsb2FkZWQgdmlhIFhNTEh0dHBSZXF1ZXN0LgorCitTVUNDRVNTCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0tdHJhbnNmb3JtZWQtZG9jLnhodG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS10cmFuc2Zvcm1lZC1kb2Mu
eGh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0tdHJh
bnNmb3JtZWQtZG9jLnhodG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4IEBACis8P3htbCB2
ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICIt
Ly9XM0MvL0RURCBYSFRNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9E
VEQveGh0bWwxMS5kdGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0
bWwiIHhtbDpsYW5nPSJlbiI+Cis8aGVhZD4KKyAgICA8dGl0bGU+eHNsIGltcG9ydCB0ZXN0PC90
aXRsZT4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCFbQ0RBVEFbCisgICAg
ICAgIGZ1bmN0aW9uIGxvYWQoKSB7CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKQorICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1Rl
eHQoKTsKKworICAgICAgICAgICAgdmFyIGNvcHlYc2x0U3RyID0KKyAgICAgICAgICAgICAgICAn
PHhzbDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCInICsKKyAgICAgICAgICAgICAgICAnICB4bWxu
czp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSInICsKKyAgICAgICAg
ICAgICAgICAnICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+JyArCisgICAg
ICAgICAgICAgICAgJzx4c2w6dGVtcGxhdGUgbWF0Y2g9IkAqfG5vZGUoKSI+JyArCisgICAgICAg
ICAgICAgICAgJyAgPHhzbDpjb3B5PicgKworICAgICAgICAgICAgICAgICcgICAgPHhzbDphcHBs
eS10ZW1wbGF0ZXMgc2VsZWN0PSJAKnxub2RlKCkiLz4nICsKKyAgICAgICAgICAgICAgICAnICA8
L3hzbDpjb3B5PicgKworICAgICAgICAgICAgICAgICc8L3hzbDp0ZW1wbGF0ZT4nICsKKyAgICAg
ICAgICAgICAgICAnPC94c2w6c3R5bGVzaGVldD4nOworCisgICAgICAgICAgICB2YXIgcGFyc2Vy
ID0gbmV3IERPTVBhcnNlcigpOworICAgICAgICAgICAgdmFyIHhzbHQgPSBuZXcgWFNMVFByb2Nl
c3NvcigpOworICAgICAgICAgICAgY29weVhzbHREb2MgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5n
KGNvcHlYc2x0U3RyLCAiYXBwbGljYXRpb24veG1sIik7CisgICAgICAgICAgICB4c2x0LmltcG9y
dFN0eWxlc2hlZXQoY29weVhzbHREb2MpOworCisgICAgICAgICAgICB2YXIgcmVxID0gbmV3IFhN
TEh0dHBSZXF1ZXN0KCk7CisgICAgICAgICAgICByZXEub3BlbignR0VUJywgJ3Jlc291cmNlcy94
aHItZG9jLnhzbCcsIGZhbHNlKTsKKyAgICAgICAgICAgIHJlcS5zZW5kKG51bGwpOworICAgICAg
ICAgICAgdmFyIHhzbHREb2MgPSB4c2x0LnRyYW5zZm9ybVRvRG9jdW1lbnQocmVxLnJlc3BvbnNl
WE1MKTsKKyAgICAgICAgICAgIHhzbHQuaW1wb3J0U3R5bGVzaGVldCh4c2x0RG9jKTsKKworICAg
ICAgICAgICAgdmFyIHhtbERvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoIjxyb290Lz4iLCAi
YXBwbGljYXRpb24veG1sIik7CisgICAgICAgICAgICB2YXIgcmVzdWx0RG9jID0geHNsdC50cmFu
c2Zvcm1Ub0RvY3VtZW50KHhtbERvYyk7CisgICAgICAgICAgICB2YXIgZnJhZ21lbnQgPSBkb2N1
bWVudC5pbXBvcnROb2RlKHJlc3VsdERvYy5kb2N1bWVudEVsZW1lbnQsIHRydWUpOworCisgICAg
ICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RpdicpOworICAgICAg
ICAgICAgZGl2LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGZyYWdtZW50LCBkaXYpOworICAgICAg
ICB9CisgICAgXV0+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9ImxvYWQoKSI+Cis8
cD5UZXN0IGZvciA8YSBocmVmPSJodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMDMxMyI+YnVnIDEwMzEzPC9hPjoKK3hzbDppbXBvcnQgZG9lc24ndCB3b3JrIGluIHN0eWxl
c2hlZXRzIGxvYWRlZCB2aWEgWE1MSHR0cFJlcXVlc3QuPC9wPgorCis8ZGl2IGlkPSJkaXYiPkl0
J3MgbmljZSB0aGF0IHRoaXMgaGFzbid0IGNyYXNoZWQsIGJ1dCB0aGUgWFNMIHRyYW5zZm9ybWF0
aW9uIGhhcyBmYWlsZWQuPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L3hzbC90cmFuc2Zvcm0teGhyLWRvYy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC94c2wvdHJhbnNmb3JtLXhoci1kb2MtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiA4MDAwNSkKKysrIExheW91dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS14aHItZG9jLWV4
cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDMgQEAKLUNPTlNPTEUgTUVTU0FH
RTogbGluZSAyMDogVHlwZUVycm9yOiAndW5kZWZpbmVkJyBpcyBub3QgYW4gb2JqZWN0IChldmFs
dWF0aW5nICdkb2MuZG9jdW1lbnRFbGVtZW50JykKIFRlc3QgZm9yIGJ1ZyAxMDMxMzogeHNsOmlt
cG9ydCBkb2Vzbid0IHdvcmsgaW4gc3R5bGVzaGVldHMgbG9hZGVkIHZpYSBYTUxIdHRwUmVxdWVz
dC4KIAotSXQncyBuaWNlIHRoYXQgdGhpcyBoYXNuJ3QgY3Jhc2hlZCwgYnV0IHRoZSBYU0wgdHJh
bnNmb3JtYXRpb24gaGFzIGZhaWxlZC4KK1NVQ0NFU1MKSW5kZXg6IExheW91dFRlc3RzL2h0dHAv
dGVzdHMveHNsL3RyYW5zZm9ybS1mcmFtZWQtZG9jLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0tZnJhbWVkLWRvYy1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC90cmFuc2Zv
cm0tZnJhbWVkLWRvYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAK
K1Rlc3QgZm9yIGJ1ZyAxMDMxMzogeHNsOmltcG9ydCBkb2Vzbid0IHdvcmsgaW4gc3R5bGVzaGVl
dHMgbG9hZGVkIHZpYSBYTUxIdHRwUmVxdWVzdC4KKworU1VDQ0VTUworVGhpcyB0cmFuc2Zvcm1h
dGlvbiBoYXMgZmFpbGVkIGJlY2F1c2UgdGhlIGZyYW1lIG5vIGxvbmdlciBoYXMgdGhlIHNhbWUg
b3JpZ2luLgorCisKKy0tLS0tLS0tCitGcmFtZTogJ3N1YmZyYW1lJworLS0tLS0tLS0KK3N1YmZy
YW1lIDIKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3RyYW5zZm9ybS1mcmFtZWQt
ZG9jLnhodG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3RyYW5z
Zm9ybS1mcmFtZWQtZG9jLnhodG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy94c2wvdHJhbnNmb3JtLWZyYW1lZC1kb2MueGh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNTkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IURPQ1RZ
UEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iICJodHRwOi8vd3d3Lncz
Lm9yZy9UUi94aHRtbDExL0RURC94aHRtbDExLmR0ZCI+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3
dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIj4KKzxoZWFkPgorICAgIDx0aXRsZT54
c2wgaW1wb3J0IHRlc3Q8L3RpdGxlPgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0
Ij48IVtDREFUQVsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAg
ICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKworICAgICAg
ICB2YXIgeHNsdERvYzsKKworICAgICAgICB2YXIgcGFyc2VyID0gbmV3IERPTVBhcnNlcigpOwor
ICAgICAgICB2YXIgeG1sRG9jID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZygiPHJvb3QvPiIsICJh
cHBsaWNhdGlvbi94bWwiKTsKKworICAgICAgICBmdW5jdGlvbiB0cmFuc2Zvcm0oZGl2KSB7Cisg
ICAgICAgICAgICB2YXIgeHNsdCA9IG5ldyBYU0xUUHJvY2Vzc29yKCk7CisgICAgICAgICAgICB4
c2x0LmltcG9ydFN0eWxlc2hlZXQoeHNsdERvYyk7CisgICAgICAgICAgICB2YXIgcmVzdWx0RG9j
ID0geHNsdC50cmFuc2Zvcm1Ub0RvY3VtZW50KHhtbERvYyk7CisgICAgICAgICAgICB2YXIgZnJh
Z21lbnQgPSBkb2N1bWVudC5pbXBvcnROb2RlKHJlc3VsdERvYy5kb2N1bWVudEVsZW1lbnQsIHRy
dWUpOworICAgICAgICAgICAgZGl2LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGZyYWdtZW50LCBk
aXYpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gbG9hZCgpIHsKKyAgICAgICAgICAg
IGlmICgheHNsdERvYykgeworICAgICAgICAgICAgICAgIHhzbHREb2MgPSBzdWJmcmFtZS54c2x0
RG9jOworICAgICAgICAgICAgICAgIHRyYW5zZm9ybShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
dHJhbnNmb3JtMScpKTsKKyAgICAgICAgICAgICAgICBzdWJmcmFtZS53aW5kb3cubG9jYXRpb24g
PSAiaHR0cDovLzEyNy4wLjAuMTo4MDAwL3hzbC9yZXNvdXJjZXMvdHJhbnNmb3JtLWZyYW1lZC1z
dWJmcmFtZTIueGh0bWwiOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2
YXIgZGl2MiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0cmFuc2Zvcm0yJyk7CisKKyAgICAg
ICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0oZGl2Mik7Cisg
ICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgICAgICAvLyBUaGlz
IHRyYW5zZm9ybWF0aW9uIHNob3VsZCBmYWlsCisgICAgICAgICAgICAgICAgICAgIGRpdjIuaW5u
ZXJIVE1MID0gIlRoaXMgdHJhbnNmb3JtYXRpb24gaGFzIGZhaWxlZCBiZWNhdXNlIHRoZSBmcmFt
ZSBubyBsb25nZXIgaGFzIHRoZSBzYW1lIG9yaWdpbi4iOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAg
ICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAg
ICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQ2hpbGRGcmFtZXNBc1RleHQo
KTsKKyAgICAgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIF1dPjwv
c2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cD5UZXN0IGZvciA8YSBocmVmPSJodHRwOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDMxMyI+YnVnIDEwMzEzPC9hPjoKK3hzbDpp
bXBvcnQgZG9lc24ndCB3b3JrIGluIHN0eWxlc2hlZXRzIGxvYWRlZCB2aWEgWE1MSHR0cFJlcXVl
c3QuPC9wPgorPGRpdiBpZD0idHJhbnNmb3JtMSI+CitJdCdzIG5pY2UgdGhhdCB0aGlzIGhhc24n
dCBjcmFzaGVkLCBidXQgdGhlIFhTTCB0cmFuc2Zvcm1hdGlvbiBoYXMgZmFpbGVkLgorPC9kaXY+
Cis8ZGl2IGlkPSJ0cmFuc2Zvcm0yIj4KK1RoaXMgdHJhbnNmb3JtYXRpb24gc2hvdWxkIGZhaWwg
YmVjYXVzZSB0aGUgZnJhbWUgbm8gbG9uZ2VyIGhhcyB0aGUgc2FtZSBvcmlnaW4uCis8L2Rpdj4K
KzxpZnJhbWUgaWQ9InN1YmZyYW1lIiBzcmM9InJlc291cmNlcy90cmFuc2Zvcm0tZnJhbWVkLXN1
YmZyYW1lMS54aHRtbCIgb25sb2FkPSJsb2FkKCkiPgorPC9pZnJhbWU+Cis8L2JvZHk+Cis8L2h0
bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0teGhyLWRvYy1j
cm9zcy1vcmlnaW4tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAv
dGVzdHMveHNsL3RyYW5zZm9ybS14aHItZG9jLWNyb3NzLW9yaWdpbi1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0teGhyLWRv
Yy1jcm9zcy1vcmlnaW4tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAK
K1Rlc3QgZm9yIGJ1ZyAxMDMxMzogeHNsOmltcG9ydCBkb2Vzbid0IHdvcmsgaW4gc3R5bGVzaGVl
dHMgbG9hZGVkIHZpYSBYTUxIdHRwUmVxdWVzdC4KKworVGhpcyB0cmFuc2Zvcm1hdGlvbiBoYXMg
ZmFpbGVkIGJlY2F1c2UgaXQgaXMgdHJ5aW5nIHRvIGltcG9ydCBhIHN0eWxlc2hlZXQgY3Jvc3Mt
b3JpZ2luLgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvdHJhbnNmb3JtLXhoci1k
b2MtY3Jvc3Mtb3JpZ2luLnhodG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVz
dHMveHNsL3RyYW5zZm9ybS14aHItZG9jLWNyb3NzLW9yaWdpbi54aHRtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3RyYW5zZm9ybS14aHItZG9jLWNyb3NzLW9y
aWdpbi54aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NCBAQAorPD94bWwgdmVyc2lvbj0i
MS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9E
VEQgWEhUTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMTEvRFREL3hodG1s
MTEuZHRkIj4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6
bGFuZz0iZW4iPgorPGhlYWQ+CisgICAgPHRpdGxlPnhzbCBpbXBvcnQgdGVzdDwvdGl0bGU+Cisg
ICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgICBmdW5jdGlvbiBsb2Fk
KCkgeworICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAg
ICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyAgICAgICAg
ICAgIHZhciByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICAgICAgICAgIHZhciB4c2x0
ID0gbmV3IFhTTFRQcm9jZXNzb3IoKTsKKyAgICAgICAgICAgIHJlcS5vcGVuKCdHRVQnLCAncmVz
b3VyY2VzL3hoci1kb2MtY3Jvc3Mtb3JpZ2luLnhzbCcsIGZhbHNlKTsKKyAgICAgICAgICAgIHJl
cS5zZW5kKG51bGwpOworICAgICAgICAgICAgeHNsdC5pbXBvcnRTdHlsZXNoZWV0KHJlcS5yZXNw
b25zZVhNTCk7CisKKyAgICAgICAgICAgIHJlcS5vcGVuKCdHRVQnLCAncmVzb3VyY2VzL3hoci1k
b2MueG1sJywgZmFsc2UpOworICAgICAgICAgICAgcmVxLnNlbmQobnVsbCk7CisKKyAgICAgICAg
ICAgIHZhciBkb2M7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGRvYyA9IHhz
bHQudHJhbnNmb3JtVG9Eb2N1bWVudChyZXEucmVzcG9uc2VYTUwpOworICAgICAgICAgICAgfSBj
YXRjaCAoZSkgeworICAgICAgICAgICAgICAgIC8vIFRoaXMgdHJhbnNmb3JtYXRpb24gc2hvdWxk
IGZhaWwKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdkaXYnKTsKKworICAgICAgICAgICAgaWYgKGRvYykgeworICAgICAgICAg
ICAgICAgIHZhciBmcmFnbWVudCA9IGRvY3VtZW50LmltcG9ydE5vZGUoZG9jLmRvY3VtZW50RWxl
bWVudCwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgZGl2LnBhcmVudE5vZGUucmVwbGFjZUNoaWxk
KGZyYWdtZW50LCBkaXYpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBk
aXYuaW5uZXJIVE1MID0gIlRoaXMgdHJhbnNmb3JtYXRpb24gaGFzIGZhaWxlZCBiZWNhdXNlIGl0
IGlzIHRyeWluZyB0byBpbXBvcnQgYSBzdHlsZXNoZWV0IGNyb3NzLW9yaWdpbi4iOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9
ImxvYWQoKSI+Cis8cD5UZXN0IGZvciA8YSBocmVmPSJodHRwOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDMxMyI+YnVnIDEwMzEzPC9hPjoKK3hzbDppbXBvcnQgZG9lc24ndCB3
b3JrIGluIHN0eWxlc2hlZXRzIGxvYWRlZCB2aWEgWE1MSHR0cFJlcXVlc3QuPC9wPgorCis8ZGl2
IGlkPSJkaXYiPlRoaXMgdHJhbnNmb3JtYXRpb24gc2hvdWxkIGZhaWwgYmVjYXVzZSBpdCBpcyB0
cnlpbmcgdG8gaW1wb3J0IGEgc3R5bGVzaGVldCBjcm9zcy1vcmlnaW4uPC9kaXY+Cis8L2JvZHk+
Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0teGhy
LWRvYy1mcm9tLWFsbG93ZWQtY3Jvc3Mtb3JpZ2luLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0teGhyLWRvYy1mcm9tLWFsbG93
ZWQtY3Jvc3Mtb3JpZ2luLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2h0dHAvdGVzdHMveHNsL3RyYW5zZm9ybS14aHItZG9jLWZyb20tYWxsb3dlZC1jcm9zcy1vcmln
aW4tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK1Rlc3QgZm9yIGJ1
ZyAxMDMxMzogeHNsOmltcG9ydCBkb2Vzbid0IHdvcmsgaW4gc3R5bGVzaGVldHMgbG9hZGVkIHZp
YSBYTUxIdHRwUmVxdWVzdC4KKworU1VDQ0VTUwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy94c2wvdHJhbnNmb3JtLXhoci1kb2MtZnJvbS1hbGxvd2VkLWNyb3NzLW9yaWdpbi54aHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0teGhyLWRv
Yy1mcm9tLWFsbG93ZWQtY3Jvc3Mtb3JpZ2luLnhodG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy94c2wvdHJhbnNmb3JtLXhoci1kb2MtZnJvbS1hbGxvd2VkLWNyb3Nz
LW9yaWdpbi54aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMyBAQAorPD94bWwgdmVyc2lv
bj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzND
Ly9EVEQgWEhUTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMTEvRFREL3ho
dG1sMTEuZHRkIj4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4
bWw6bGFuZz0iZW4iPgorPGhlYWQ+CisgICAgPHRpdGxlPnhzbCBpbXBvcnQgdGVzdDwvdGl0bGU+
CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgICBmdW5jdGlvbiBs
b2FkKCkgeworICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAg
ICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyAgICAg
ICAgICAgIHZhciByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICAgICAgICAgIHZhciB4
c2x0ID0gbmV3IFhTTFRQcm9jZXNzb3IoKTsKKyAgICAgICAgICAgIHJlcS5vcGVuKCdHRVQnLCAn
cmVzb3VyY2VzL3hoci1kb2MtZnJvbS1hbGxvd2VkLWNyb3NzLW9yaWdpbi54c2wnLCBmYWxzZSk7
CisgICAgICAgICAgICByZXEuc2VuZChudWxsKTsKKyAgICAgICAgICAgIHhzbHQuaW1wb3J0U3R5
bGVzaGVldChyZXEucmVzcG9uc2VYTUwpOworCisgICAgICAgICAgICByZXEub3BlbignR0VUJywg
J3Jlc291cmNlcy94aHItZG9jLnhtbCcsIGZhbHNlKTsKKyAgICAgICAgICAgIHJlcS5zZW5kKG51
bGwpOworICAgICAgICAgICAgdmFyIGRvYyA9IHhzbHQudHJhbnNmb3JtVG9Eb2N1bWVudChyZXEu
cmVzcG9uc2VYTUwpOworICAgICAgICAgICAgdmFyIGZyYWdtZW50ID0gZG9jdW1lbnQuaW1wb3J0
Tm9kZShkb2MuZG9jdW1lbnRFbGVtZW50LCB0cnVlKTsKKworICAgICAgICAgICAgdmFyIGRpdiA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkaXYnKTsKKyAgICAgICAgICAgIGRpdi5wYXJlbnRO
b2RlLnJlcGxhY2VDaGlsZChmcmFnbWVudCwgZGl2KTsKKyAgICAgICAgfQorICAgIDwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJsb2FkKCkiPgorPHA+VGVzdCBmb3IgPGEgaHJlZj0i
aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzMTMiPmJ1ZyAxMDMxMzwv
YT46Cit4c2w6aW1wb3J0IGRvZXNuJ3Qgd29yayBpbiBzdHlsZXNoZWV0cyBsb2FkZWQgdmlhIFhN
TEh0dHBSZXF1ZXN0LjwvcD4KKworPGRpdiBpZD0iZGl2Ij5JdCdzIG5pY2UgdGhhdCB0aGlzIGhh
c24ndCBjcmFzaGVkLCBidXQgdGhlIFhTTCB0cmFuc2Zvcm1hdGlvbiBoYXMgZmFpbGVkLjwvZGl2
PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvcmVz
b3VyY2VzL2FsbG93LWNyb3NzLW9yaWdpbi1oZWFkZXIuY2dpCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2h0dHAvdGVzdHMveHNsL3Jlc291cmNlcy9hbGxvdy1jcm9zcy1vcmlnaW4taGVhZGVy
LmNnaQkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3Jlc291cmNl
cy9hbGxvdy1jcm9zcy1vcmlnaW4taGVhZGVyLmNnaQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
MSBAQAorIyEvdXNyL2Jpbi9wZXJsIC13Cit1c2Ugc3RyaWN0OworCitwcmludCAiQ29udGVudC1U
eXBlOiBhcHBsaWNhdGlvbi94bWxcbiI7CitwcmludCAiQ2FjaGUtQ29udHJvbDogbm8tY2FjaGUs
IG5vLXN0b3JlXG4iOworcHJpbnQgIkFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbjogKlxuXG4i
OworCitteSAkZmlsZW5hbWUgPSAkRU5WeyJRVUVSWV9TVFJJTkcifTsKK29wZW4gRklMRSwgJGZp
bGVuYW1lIG9yIGRpZTsKK3ByaW50IDxGSUxFPjsKK2Nsb3NlIEZJTEU7CkluZGV4OiBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMvdHJhbnNmb3JtLWZyYW1lZC1zdWJmcmFtZTEu
eGh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvcmVzb3VyY2Vz
L3RyYW5zZm9ybS1mcmFtZWQtc3ViZnJhbWUxLnhodG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL3RyYW5zZm9ybS1mcmFtZWQtc3ViZnJhbWUx
LnhodG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAi
IGVuY29kaW5nPSJ1dGYtOCI/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBY
SFRNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwxMS5k
dGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5n
PSJlbiI+Cis8aGVhZD4KKyAgICA8dGl0bGU+eHNsIGltcG9ydCB0ZXN0PC90aXRsZT4KKyAgICA8
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCFbQ0RBVEFbCisgICAgICAgIHZhciB4c2x0
U3RyID0KKyAgICAgICAgICAgICc8eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIicgKworICAg
ICAgICAgICAgJyAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zv
cm0iJyArCisgICAgICAgICAgICAnICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRt
bCI+JyArCisgICAgICAgICAgICAnPHhzbDppbXBvcnQgaHJlZj0ieGhyLWRvYy1pbXBvcnRlZC54
c2wiIC8+JyArCisgICAgICAgICAgICAnPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iL3Jvb3QiPicgKwor
ICAgICAgICAgICAgJyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0id29ya3MiIC8+JyArCisg
ICAgICAgICAgICAnPC94c2w6dGVtcGxhdGU+JyArCisgICAgICAgICAgICAnPC94c2w6c3R5bGVz
aGVldD4nOworCisgICAgICAgIHZhciBwYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7CisgICAgICAg
IHZhciB4c2x0RG9jID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyh4c2x0U3RyLCAiYXBwbGljYXRp
b24veG1sIik7CisgICAgXV0+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KK3N1YmZyYW1lIDEK
KzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3Jlc291
cmNlcy90cmFuc2Zvcm0tZnJhbWVkLXN1YmZyYW1lMi54aHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMvdHJhbnNmb3JtLWZyYW1lZC1zdWJmcmFt
ZTIueGh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNv
dXJjZXMvdHJhbnNmb3JtLWZyYW1lZC1zdWJmcmFtZTIueGh0bWwJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IURP
Q1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iICJodHRwOi8vd3d3
LnczLm9yZy9UUi94aHRtbDExL0RURC94aHRtbDExLmR0ZCI+Cis8aHRtbCB4bWxucz0iaHR0cDov
L3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIj4KKzxoZWFkPgorICAgIDx0aXRs
ZT54c2wgaW1wb3J0IHRlc3Q8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+CitzdWJmcmFtZSAyCis8
L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNvdXJj
ZXMveGhyLWRvYy1jcm9zcy1vcmlnaW4ueHNsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0
dHAvdGVzdHMveHNsL3Jlc291cmNlcy94aHItZG9jLWNyb3NzLW9yaWdpbi54c2wJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMveGhyLWRvYy1jcm9z
cy1vcmlnaW4ueHNsCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACis8P3htbCB2ZXJzaW9u
PSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPHhzbDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCIK
KyAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisgIHht
bG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKworPHhzbDppbXBvcnQgaHJlZj0i
aHR0cDovL2xvY2FsaG9zdDo4MDAwL3hzbC9yZXNvdXJjZXMveGhyLWRvYy1pbXBvcnRlZC54c2wi
IC8+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii9yb290Ij4KKyAgICA8eHNsOmNhbGwtdGVtcGxh
dGUgbmFtZT0id29ya3MiIC8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPC94c2w6c3R5bGVzaGVldD4K
SW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3Jlc291cmNlcy94aHItZG9jLWZyb20t
YWxsb3dlZC1jcm9zcy1vcmlnaW4ueHNsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAv
dGVzdHMveHNsL3Jlc291cmNlcy94aHItZG9jLWZyb20tYWxsb3dlZC1jcm9zcy1vcmlnaW4ueHNs
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL3ho
ci1kb2MtZnJvbS1hbGxvd2VkLWNyb3NzLW9yaWdpbi54c2wJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8eHNsOnN0
eWxlc2hlZXQgdmVyc2lvbj0iMS4wIgorICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5
OTkvWFNML1RyYW5zZm9ybSIKKyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwi
PgorCis8eHNsOmltcG9ydCBocmVmPSJodHRwOi8vbG9jYWxob3N0OjgwMDAveHNsL3Jlc291cmNl
cy9hbGxvdy1jcm9zcy1vcmlnaW4taGVhZGVyLmNnaT94aHItZG9jLWltcG9ydGVkLnhzbCIgLz4K
KworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iL3Jvb3QiPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBu
YW1lPSJ3b3JrcyIgLz4KKzwveHNsOnRlbXBsYXRlPgorCis8L3hzbDpzdHlsZXNoZWV0PgpJbmRl
eDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL3hoci1kb2MtaW1wb3J0ZWQu
eHNsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3Jlc291cmNlcy94
aHItZG9jLWltcG9ydGVkLnhzbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVz
dHMveHNsL3Jlc291cmNlcy94aHItZG9jLWltcG9ydGVkLnhzbAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzx4c2w6
c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiCisgIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcv
MTk5OS9YU0wvVHJhbnNmb3JtIgorICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRt
bCI+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii9yb290Ij4KKyAgICA8ZGl2IGNsYXNzPSJkZWZh
dWx0Ij5GQUlMOiBJbmNvcnJlY3QgdHJhbnNmb3JtYXRpb24uPC9kaXY+Cis8L3hzbDp0ZW1wbGF0
ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJ3b3JrcyI+CisgICAgPGRpdiBjbGFzcz0ib3ZlcnJp
ZGRlbiI+U1VDQ0VTUzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzwveHNsOnN0eWxlc2hlZXQ+
CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMveGhyLWRvYy54bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL3hoci1k
b2MueG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvcmVzb3Vy
Y2VzL3hoci1kb2MueG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKKzw/eG1sIHZlcnNp
b249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8P3htbC1zdHlsZXNoZWV0IHR5cGU9InRleHQv
eHNsIiBocmVmPSJ4aHItZG9jLnhzbCI/PgorPHJvb3QvPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy94c2wvcmVzb3VyY2VzL3hoci1kb2MueHNsCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2h0dHAvdGVzdHMveHNsL3Jlc291cmNlcy94aHItZG9jLnhzbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3Jlc291cmNlcy94aHItZG9jLnhzbAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRm
LTgiPz4KKzx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiCisgIHhtbG5zOnhzbD0iaHR0cDov
L3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgorICB4bWxucz0iaHR0cDovL3d3dy53My5v
cmcvMTk5OS94aHRtbCI+CisKKzx4c2w6aW1wb3J0IGhyZWY9Inhoci1kb2MtaW1wb3J0ZWQueHNs
IiAvPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIvcm9vdCI+CisgICAgPHhzbDpjYWxsLXRlbXBs
YXRlIG5hbWU9IndvcmtzIiAvPgorPC94c2w6dGVtcGxhdGU+CisKKzwveHNsOnN0eWxlc2hlZXQ+
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84578</attachid>
            <date>2011-03-03 10:02:50 -0800</date>
            <delta_ts>2011-03-04 01:03:53 -0800</delta_ts>
            <desc>New proposed patch</desc>
            <filename>bug10313_110303.patch</filename>
            <type>text/plain</type>
            <size>54039</size>
            <attacher name="Andreas Wictor">andreas.wictor</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwMTY4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzggQEAKKzIwMTEtMDMtMDMgIEFuZHJlYXMg
V2ljdG9yICA8YW5kcmVhcy53Y2l0b3JAeGNlcmlvbi5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgeHNsOmltcG9ydCBhbmQgZG9jdW1lbnQoKSBk
b24ndCB3b3JrIGluIHN0eWxlc2hlZXRzIGxvYWRlZCB2aWEgWE1MSHR0cFJlcXVlc3QKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzEzCisKKyAgICAg
ICAgSW50cm9kdWNlZCB0aGUgY29uY2VwdCBvZiBhICJvcmlnaW4gZG9jdW1lbnQiIHJlZmVyZW5j
ZSBvbiBmcmFtZWxlc3MKKyAgICAgICAgZG9jdW1lbnRzIGNyZWF0ZWQgYnkgWE1MSHR0cFJlcXVl
c3QsIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZURvY3VtZW50LAorICAgICAgICBET01Q
YXJzZXIucGFyc2VGcm9tU3RyaW5nIGFuZCBYU0xUUHJvY2Vzc29yLnRyYW5zZm9ybVRvRG9jdW1l
bnQuCisgICAgICAgIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgZm9yIGZyYW1lbGVzcyBkb2N1bWVu
dHMgdG8gYWNjZXNzIHN1YnJlc291cmNlcy4KKworICAgICAgICBUZXN0czogZmFzdC94c2wvdHJh
bnNmb3JtLWRvY2ltcGwtZG9jLnhodG1sCisgICAgICAgICAgICAgICBmYXN0L3hzbC90cmFuc2Zv
cm0tZG9tcGFyc2VyLWRvYy54aHRtbAorICAgICAgICAgICAgICAgZmFzdC94c2wvdHJhbnNmb3Jt
LXRyYW5zZm9ybWVkLWRvYy54aHRtbAorICAgICAgICAgICAgICAgaHR0cC90ZXN0cy94c2wvdHJh
bnNmb3JtLWZyYW1lZC1kb2MueGh0bWwKKyAgICAgICAgICAgICAgIGh0dHAvdGVzdHMveHNsL3Ry
YW5zZm9ybS14aHItZG9jLWNyb3NzLW9yaWdpbi54aHRtbAorICAgICAgICAgICAgICAgaHR0cC90
ZXN0cy94c2wvdHJhbnNmb3JtLXhoci1kb2MtZnJvbS1hbGxvd2VkLWNyb3NzLW9yaWdpbi54aHRt
bAorCisgICAgICAgICogYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yQ3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTWFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9Eb2N1bWVudCk6IFVz
ZSBjdXJyZW50IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgYXMgZmlyc3QgYXJndW1lbnQgdG8gdHJh
bnNmb3JtVG9Eb2N1bWVudC4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhYU0xUUHJv
Y2Vzc29yQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4WFNMVFByb2Nlc3Nvcjo6dHJh
bnNmb3JtVG9Eb2N1bWVudENhbGxiYWNrKTogVXNlIGN1cnJlbnQgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCBhcyBmaXJzdCBhcmd1bWVudCB0byB0cmFuc2Zvcm1Ub0RvY3VtZW50LgorICAgICAgICAq
IGRvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01JbXBsZW1l
bnRhdGlvbjo6Y3JlYXRlRG9jdW1lbnQpOiBSdW4gc2V0T3JpZ2luRG9jdW1lbnQgb24gdGhlIHJl
c3VsdGluZyBkb2N1bWVudC4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnQ6OnNldE9yaWdpbkRvY3VtZW50KTogVGhpcyBmdW5jdGlvbiBzdG9y
ZXMgYSByZWZlcmVuY2UgdG8gdGhlIGRvY3VtZW50IHdoZXJlIHRoaXMgZG9jdW1lbnQKKyAgICAg
ICAgb3JpZ2luYXRlZCBmcm9tLiBUaGlzIGlzIHVzZWQgZm9yIGZyYW1lbGVzcyBkb2N1bWVudHMs
IHNvIHRoYXQgd2UgY2FuCisgICAgICAgIGZpbmQgYSBmcmFtZSB3aGVuIHdlIGFyZSBsb2FkaW5n
IHN1YnJlc291cmNlcy4gQWxzbywgYmVjYXVzZSBmcmFtZWxlc3MKKyAgICAgICAgZG9jdW1lbnRz
IGRvbid0IGdldCBhIFNlY3VyaXR5T3JpZ2luIHdoZW4gY29uc3RydWN0ZWQsIHdlIG5lZWQgdG8g
c2V0CisgICAgICAgIGl0IGhlcmUgdG8gYmUgYWJsZSB0byBsb2FkIHN1YnJlc291cmNlcy4KKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpmaW5kRnJhbWVGb3JTdWJyZXNvdXJjZUxvYWRzKTog
UmV0dXJucyBhIGZyYW1lIGZyb20gZWl0aGVyIHRoZSBkb2N1bWVudCBvciB0aGUgZG9jdW1lbnQg
aXQgb3JpZ2luYXRlZCBmcm9tLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmFwcGx5WFNM
VHJhbnNmb3JtKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50OjpvcmlnaW5Eb2N1bWVudCk6CisgICAgICAgICogbG9hZGVyL0RvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRocmVhZGFibGVM
b2FkZXI6OmxvYWRSZXF1ZXN0KTogVXNlIHRoZSBuZXcgZmluZEZyYW1lRm9yU3VicmVzb3VyY2VM
b2FkcyBtZXRob2Qgb24gZG9jdW1lbnRzIGFuZCB1c2UgdGhlCisgICAgICAgIG5ldyBsb2FkUmVz
b3VyY2VTeW5jaHJvbm91c2x5IG92ZXJsb2FkIHRoYXQgdGFrZXMgYSByZWZlcnJlciBzdHJpbmcu
CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KTogQWRkZWQgYSBvdmVybG9hZCB0
byBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5IHRoYXQgdGFrZXMgdGhlIG91dGdvaW5nIHJlZmVy
cmVyIGFzIGFyZ3VtZW50LgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5oOgorICAgICAg
ICAqIHhtbC9ET01QYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NUGFyc2VyOjpwYXJz
ZUZyb21TdHJpbmcpOiBSdW4gc2V0T3JpZ2luRG9jdW1lbnQgb24gdGhlIHJlc3VsdGluZyBkb2N1
bWVudC4KKyAgICAgICAgKiB4bWwvRE9NUGFyc2VyLmg6CisgICAgICAgICogeG1sL0RPTVBhcnNl
ci5pZGw6IEFkZGVkIENhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgYXR0cmlidXRlIHRv
IHBhcnNlRnJvbVN0cmluZy4KKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlWE1MKTogUnVuIHNldE9yaWdp
bkRvY3VtZW50IG9uIHRoZSByZXN1bHRpbmcgZG9jdW1lbnQuCisgICAgICAgICogeG1sL1hNTFRy
ZWVWaWV3ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MVHJlZVZpZXdlcjo6dHJhbnNmb3Jt
RG9jdW1lbnRUb1RyZWVWaWV3KToKKyAgICAgICAgKiB4bWwvWFNMSW1wb3J0UnVsZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpYU0xJbXBvcnRSdWxlOjpsb2FkU2hlZXQpOiBMb2FkIGltcG9ydGVk
IGRvY3VtZW50cyBzeW5jaHJvbm91c2x5IGlmIGludm9rZWQgYnkgamF2YXNjcmlwdC4KKyAgICAg
ICAgVGhlIHN5bmNocm9ub3VzIGxvYWQgaXMgcGVyZm9ybWVkIGJ5IERvY3VtZW50VGhyZWFkYWJs
ZUxvYWRlciB0aGF0IHJlcXVpcmVzIGEgZG9jdW1lbnQgdG8gbG9hZCBzdWIgcmVzb3VyY2VzLiBU
aGF0IGRvY3VtZW50cyBkb2VzIG5vdAorICAgICAgICBhbHdheXMgZXhpc3Qgd2hlbiBpbXBvcnRp
bmcgeHNsIHN0eWxlc2hlZXRzLCBzbyBpbiB0aGF0IGNhc2Ugd2UgY3JlYXRlIGEgdGVtcG9yYXJ5
IGRvY3VtZW50IGZvciB0aGUgZHVyYXRpb24gb2YgdGhpcyBsb2FkLgorICAgICAgICAoV2ViQ29y
ZTo6WFNMSW1wb3J0UnVsZTo6ZmluaXNoTG9hZGluZ1NoZWV0QXN5bmNocm9ub3VzbHkpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1wb3J0TG9hZGVyQ2xpZW50OjpJbXBvcnRMb2FkZXJDbGllbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1wb3J0TG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlUmVzcG9uc2Up
OgorICAgICAgICAoV2ViQ29yZTo6SW1wb3J0TG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpJbXBvcnRMb2FkZXJDbGllbnQ6OmRpZEZhaWwpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1wb3J0TG9hZGVyQ2xpZW50OjpyYXdEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkltcG9ydExvYWRlckNsaWVudDo6cmVzcG9uc2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6
SW1wb3J0TG9hZGVyQ2xpZW50OjpmYWlsZWQpOgorICAgICAgICAoV2ViQ29yZTo6WFNMSW1wb3J0
UnVsZTo6ZmluaXNoTG9hZGluZ1NoZWV0U3luY2hyb25vdXNseSk6CisgICAgICAgICogeG1sL1hT
TEltcG9ydFJ1bGUuaDoKKyAgICAgICAgKiB4bWwvWFNMVFByb2Nlc3Nvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpYU0xUUHJvY2Vzc29yOjpjcmVhdGVEb2N1bWVudEZyb21Tb3VyY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6WFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9Eb2N1bWVudCk6CisgICAg
ICAgICogeG1sL1hTTFRQcm9jZXNzb3IuaDoKKyAgICAgICAgKiB4bWwvWFNMVFByb2Nlc3Nvckxp
YnhzbHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9hZERvY3VtZW50TG9hZGVyQ2xpZW50OjpM
b2FkRG9jdW1lbnRMb2FkZXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6TG9hZERvY3VtZW50
TG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpMb2FkRG9j
dW1lbnRMb2FkZXJDbGllbnQ6OmRpZEZhaWwpOgorICAgICAgICAoV2ViQ29yZTo6TG9hZERvY3Vt
ZW50TG9hZGVyQ2xpZW50OjpyYXdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkxvYWREb2N1bWVu
dExvYWRlckNsaWVudDo6ZmFpbGVkKToKKyAgICAgICAgKFdlYkNvcmU6OmRvY0xvYWRlckZ1bmMp
OiBVc2UgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyIHRvIGxvYWQgZG9jdW1lbnRzLgorCiAyMDEx
LTAzLTAyICBEYW5pZWwgQ2hlbmcgIDxkY2hlbmdAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IERhdmlkIExldmluLgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNYU0xUUHJvY2Vzc29yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1hTTFRQcm9jZXNzb3JDdXN0b20uY3BwCShyZXZpc2lvbiA4MDE2OCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3NvckN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc1LDggKzc1LDkgQEAgSlNWYWx1ZSBKU1hTTFRQcm9jZXNzb3I6OnRy
YW5zZm9ybVRvRG9jdQogewogICAgIEpTVmFsdWUgbm9kZVZhbCA9IGV4ZWMtPmFyZ3VtZW50KDAp
OwogICAgIGlmIChub2RlVmFsLmluaGVyaXRzKCZKU05vZGU6OnNfaW5mbykpIHsKKyAgICAgICAg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0Q29udGV4dCA9IHN0YXRpY19jYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpOwogICAgICAgICBKU05vZGUqIG5vZGUgPSBzdGF0aWNfY2FzdDxKU05vZGUq
Pihhc09iamVjdChub2RlVmFsKSk7Ci0gICAgICAgIFJlZlB0cjxEb2N1bWVudD4gcmVzdWx0RG9j
dW1lbnQgPSBpbXBsKCktPnRyYW5zZm9ybVRvRG9jdW1lbnQobm9kZS0+aW1wbCgpKTsKKyAgICAg
ICAgUmVmUHRyPERvY3VtZW50PiByZXN1bHREb2N1bWVudCA9IGltcGwoKS0+dHJhbnNmb3JtVG9E
b2N1bWVudChzY3JpcHRDb250ZXh0LCBub2RlLT5pbXBsKCkpOwogICAgICAgICBpZiAocmVzdWx0
RG9jdW1lbnQpCiAgICAgICAgICAgICByZXR1cm4gdG9KUyhleGVjLCByZXN1bHREb2N1bWVudC5n
ZXQoKSk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WFNMVFByb2Nlc3NvckN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WFNMVFByb2Nlc3NvckN1
c3RvbS5jcHAJKHJldmlzaW9uIDgwMTY4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4WFNMVFByb2Nlc3NvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDEy
ICs5MCwxMyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhYU0xUUHJvY2Vzc29yOjp0CiAgICAg
ICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAKICAgICBYU0xUUHJvY2Vzc29yKiBpbXAgPSBW
OFhTTFRQcm9jZXNzb3I6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOworICAgIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIHNjcmlwdENvbnRleHQgPSBnZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
CiAKICAgICBOb2RlKiBzb3VyY2UgPSBWOE5vZGU6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9i
amVjdD46OkNhc3QoYXJnc1swXSkpOwogICAgIGlmICghc291cmNlKQogICAgICAgICByZXR1cm4g
djg6OlVuZGVmaW5lZCgpOwogCi0gICAgUmVmUHRyPERvY3VtZW50PiByZXN1bHQgPSBpbXAtPnRy
YW5zZm9ybVRvRG9jdW1lbnQoc291cmNlKTsKKyAgICBSZWZQdHI8RG9jdW1lbnQ+IHJlc3VsdCA9
IGltcC0+dHJhbnNmb3JtVG9Eb2N1bWVudChzY3JpcHRDb250ZXh0LCBzb3VyY2UpOwogICAgIGlm
ICghcmVzdWx0KQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAJKHJldmlzaW9uIDgwMTY4KQorKysg
U291cmNlL1dlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjUwLDcgKzI1MCw3IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IERPTUltcGxlbWVudGF0aW9u
OjoKICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgfQotICAgIGRvYy0+c2V0U2VjdXJpdHlPcmlnaW4obV9vd25lckRvY3VtZW50LT5zZWN1cml0
eU9yaWdpbigpKTsKKyAgICBkb2MtPnNldE9yaWdpbkRvY3VtZW50KG1fb3duZXJEb2N1bWVudCk7
CiAKICAgICBSZWZQdHI8Tm9kZT4gZG9jdW1lbnRFbGVtZW50OwogICAgIGlmICghcXVhbGlmaWVk
TmFtZS5pc0VtcHR5KCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24g
ODAxNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzk4LDYgKzEzOTgsMzAgQEAgU2V0dGluZ3MqIERvY3VtZW50OjpzZXR0aW5ncygpIGNv
bnN0CiAgICAgcmV0dXJuIG1fZnJhbWUgPyBtX2ZyYW1lLT5zZXR0aW5ncygpIDogMDsKIH0KIAor
dm9pZCBEb2N1bWVudDo6c2V0T3JpZ2luRG9jdW1lbnQoUGFzc1JlZlB0cjxEb2N1bWVudD4gb3Jp
Z2luRG9jdW1lbnQpCit7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBzdG9yZXMgYSByZWZlcmVuY2Ug
dG8gdGhlIGRvY3VtZW50IHdoZXJlIHRoaXMgZG9jdW1lbnQKKyAgICAvLyBvcmlnaW5hdGVkIGZy
b20uIFRoaXMgaXMgdXNlZCBmb3IgZnJhbWVsZXNzIGRvY3VtZW50cywgc28gdGhhdCB3ZSBjYW4K
KyAgICAvLyBmaW5kIGEgZnJhbWUgd2hlbiB3ZSBhcmUgbG9hZGluZyBzdWJyZXNvdXJjZXMuIEFs
c28sIGJlY2F1c2UgZnJhbWVsZXNzCisgICAgLy8gZG9jdW1lbnRzIGRvbid0IGdldCBhIFNlY3Vy
aXR5T3JpZ2luIHdoZW4gY29uc3RydWN0ZWQsIHdlIG5lZWQgdG8gc2V0CisgICAgLy8gaXQgaGVy
ZSB0byBiZSBhYmxlIHRvIGxvYWQgc3VicmVzb3VyY2VzLgorCisgICAgQVNTRVJUKG9yaWdpbkRv
Y3VtZW50KTsKKyAgICBtX29yaWdpbkRvY3VtZW50ID0gb3JpZ2luRG9jdW1lbnQ7CisKKyAgICBB
U1NFUlQoc2VjdXJpdHlPcmlnaW4oKS0+aXNFbXB0eSgpKTsKKyAgICBzZXRTZWN1cml0eU9yaWdp
bihtX29yaWdpbkRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpKTsKK30KKworRnJhbWUqIERvY3Vt
ZW50OjpmaW5kRnJhbWVGb3JTdWJyZXNvdXJjZUxvYWRzKCkKK3sKKyAgICBmb3IgKERvY3VtZW50
KiBkb2N1bWVudCA9IHRoaXM7IGRvY3VtZW50OyBkb2N1bWVudCA9IGRvY3VtZW50LT5vcmlnaW5E
b2N1bWVudCgpKSB7CisgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUo
KSkKKyAgICAgICAgICAgIHJldHVybiBmcmFtZTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisK
IFBhc3NSZWZQdHI8UmFuZ2U+IERvY3VtZW50OjpjcmVhdGVSYW5nZSgpCiB7CiAgICAgcmV0dXJu
IFJhbmdlOjpjcmVhdGUodGhpcyk7CkBAIC00MDczLDcgKzQwOTcsNyBAQCB2b2lkIERvY3VtZW50
OjphcHBseVhTTFRyYW5zZm9ybShQcm9jZXNzCiAgICAgaWYgKCFwcm9jZXNzb3ItPnRyYW5zZm9y
bVRvU3RyaW5nKHRoaXMsIHJlc3VsdE1JTUVUeXBlLCBuZXdTb3VyY2UsIHJlc3VsdEVuY29kaW5n
KSkKICAgICAgICAgcmV0dXJuOwogICAgIC8vIEZJWE1FOiBJZiB0aGUgdHJhbnNmb3JtIGZhaWxl
ZCB3ZSBzaG91bGQgcHJvYmFibHkgcmVwb3J0IGFuIGVycm9yIChsaWtlIE1vemlsbGEgZG9lcyku
Ci0gICAgcHJvY2Vzc29yLT5jcmVhdGVEb2N1bWVudEZyb21Tb3VyY2UobmV3U291cmNlLCByZXN1
bHRFbmNvZGluZywgcmVzdWx0TUlNRVR5cGUsIHRoaXMsIGZyYW1lKCkpOworICAgIHByb2Nlc3Nv
ci0+Y3JlYXRlRG9jdW1lbnRGcm9tU291cmNlKG5ld1NvdXJjZSwgcmVzdWx0RW5jb2RpbmcsIHJl
c3VsdE1JTUVUeXBlLCB0aGlzLCBmcmFtZSgpLCAwKTsKIH0KIAogdm9pZCBEb2N1bWVudDo6c2V0
VHJhbnNmb3JtU291cmNlKFBhc3NPd25QdHI8VHJhbnNmb3JtU291cmNlPiBzb3VyY2UpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gODAxNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTE3LDYgKzUxNywxMCBAQCBwdWJsaWM6
CiAgICAgUGFnZSogcGFnZSgpIGNvbnN0OyAvLyBjYW4gYmUgTlVMTAogICAgIFNldHRpbmdzKiBz
ZXR0aW5ncygpIGNvbnN0OyAvLyBjYW4gYmUgTlVMTAogCisgICAgRG9jdW1lbnQqIG9yaWdpbkRv
Y3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW5Eb2N1bWVudC5nZXQoKTsgfQorICAgIHZv
aWQgc2V0T3JpZ2luRG9jdW1lbnQoUGFzc1JlZlB0cjxEb2N1bWVudD4pOworICAgIEZyYW1lKiBm
aW5kRnJhbWVGb3JTdWJyZXNvdXJjZUxvYWRzKCk7CisKICAgICBQYXNzUmVmUHRyPFJhbmdlPiBj
cmVhdGVSYW5nZSgpOwogCiAgICAgUGFzc1JlZlB0cjxOb2RlSXRlcmF0b3I+IGNyZWF0ZU5vZGVJ
dGVyYXRvcihOb2RlKiByb290LCB1bnNpZ25lZCB3aGF0VG9TaG93LApAQCAtMTE3Myw2ICsxMTc3
LDcgQEAgcHJpdmF0ZToKICAgICBEb2N1bWVudExvYWRlciogbV9kb2N1bWVudExvYWRlcjsKICAg
ICBPd25QdHI8Q2FjaGVkUmVzb3VyY2VMb2FkZXI+IG1fY2FjaGVkUmVzb3VyY2VMb2FkZXI7CiAg
ICAgUmVmUHRyPERvY3VtZW50UGFyc2VyPiBtX3BhcnNlcjsKKyAgICBSZWZQdHI8RG9jdW1lbnQ+
IG1fb3JpZ2luRG9jdW1lbnQ7CiAgICAgYm9vbCBtX3dlbGxGb3JtZWQ7CiAKICAgICAvLyBEb2N1
bWVudCBVUkxzLgpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJs
ZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50
VGhyZWFkYWJsZUxvYWRlci5jcHAJKHJldmlzaW9uIDgwMTY4KQorKysgU291cmNlL1dlYkNvcmUv
bG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1
Nyw4ICszNTcsMTEgQEAgdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXF1ZQog
ICAgIFJlc291cmNlRXJyb3IgZXJyb3I7CiAgICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZTsK
ICAgICB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2ln
bmVkIGxvbmc+OjptYXgoKTsKLSAgICBpZiAobV9kb2N1bWVudC0+ZnJhbWUoKSkKLSAgICAgICAg
aWRlbnRpZmllciA9IG1fZG9jdW1lbnQtPmZyYW1lKCktPmxvYWRlcigpLT5sb2FkUmVzb3VyY2VT
eW5jaHJvbm91c2x5KHJlcXVlc3QsIHN0b3JlZENyZWRlbnRpYWxzLCBlcnJvciwgcmVzcG9uc2Us
IGRhdGEpOworICAgIGlmIChGcmFtZSogZnJhbWUgPSBtX2RvY3VtZW50LT5maW5kRnJhbWVGb3JT
dWJyZXNvdXJjZUxvYWRzKCkpIHsKKyAgICAgICAgU3RyaW5nIHJlZmVycmVyID0gbV9kb2N1bWVu
dC0+dXJsKCkuc3RyaXBwZWRGb3JVc2VBc1JlZmVycmVyKCk7CisgICAgICAgIGlkZW50aWZpZXIg
PSBmcmFtZS0+bG9hZGVyKCktPmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoCisgICAgICAgICAg
ICByZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFscywgcmVmZXJyZXIsIGVycm9yLCByZXNwb25zZSwg
ZGF0YSk7CisgICAgfQogCiAgICAgLy8gTm8gZXhjZXB0aW9uIGZvciBmaWxlOi8vLyByZXNvdXJj
ZXMsIHNlZSA8cmRhcjovL3Byb2JsZW0vNDk2MjI5OD4uCiAgICAgLy8gQWxzbywgaWYgd2UgaGF2
ZSBhbiBIVFRQIHJlc3BvbnNlLCB0aGVuIGl0IHdhc24ndCBhIG5ldHdvcmsgZXJyb3IgaW4gZmFj
dC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gODAx
NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNzU3LDcgKzI3NTcsMTIgQEAgdm9pZCBGcmFtZUxvYWRlcjo6bG9hZFBvc3RSZXF1
ZXN0KGNvbnN0CiAKIHVuc2lnbmVkIGxvbmcgRnJhbWVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNo
cm9ub3VzbHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFs
cyBzdG9yZWRDcmVkZW50aWFscywgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEpCiB7Ci0gICAgU3RyaW5nIHJlZmVycmVy
ID0gbV9vdXRnb2luZ1JlZmVycmVyOworICAgIHJldHVybiBsb2FkUmVzb3VyY2VTeW5jaHJvbm91
c2x5KHJlcXVlc3QsIHN0b3JlZENyZWRlbnRpYWxzLCBtX291dGdvaW5nUmVmZXJyZXIsIGVycm9y
LCByZXNwb25zZSwgZGF0YSk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgRnJhbWVMb2FkZXI6OmxvYWRS
ZXNvdXJjZVN5bmNocm9ub3VzbHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9y
ZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscywgY29uc3QgU3RyaW5nJiBvdXRnb2luZ1Jl
ZmVycmVyLCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2Us
IFZlY3RvcjxjaGFyPiYgZGF0YSkKK3sKKyAgICBTdHJpbmcgcmVmZXJyZXIgPSBvdXRnb2luZ1Jl
ZmVycmVyOwogICAgIGlmIChTZWN1cml0eU9yaWdpbjo6c2hvdWxkSGlkZVJlZmVycmVyKHJlcXVl
c3QudXJsKCksIHJlZmVycmVyKSkKICAgICAgICAgcmVmZXJyZXIgPSBTdHJpbmcoKTsKICAgICAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCShyZXZpc2lvbiA4MDE2OCkKKysr
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjQsNiArMTI0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHJlcG9ydExvY2FsTG9hZEZh
aWxlZChGcmFtZSosIGNvbnN0IFN0cmluZyYgdXJsKTsKIAogICAgIHVuc2lnbmVkIGxvbmcgbG9h
ZFJlc291cmNlU3luY2hyb25vdXNseShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTdG9yZWRDcmVk
ZW50aWFscywgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4m
IGRhdGEpOworICAgIHVuc2lnbmVkIGxvbmcgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShjb25z
dCBSZXNvdXJjZVJlcXVlc3QmLCBTdG9yZWRDcmVkZW50aWFscywgY29uc3QgU3RyaW5nJiBvdXRn
b2luZ1JlZmVycmVyLCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3Rvcjxj
aGFyPiYgZGF0YSk7CiAKICAgICBib29sIGNhbkhhbmRsZVJlcXVlc3QoY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0Jik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9ET01QYXJzZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9ET01QYXJzZXIuY3BwCShyZXZpc2lvbiA4MDE2
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9ET01QYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNSwxMiArMjUsMTggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPERv
Y3VtZW50PiBET01QYXJzZXI6OnBhcnNlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0ciwgY29u
c3QgU3RyaW5nJiBjb250ZW50VHlwZSkKK1Bhc3NSZWZQdHI8RG9jdW1lbnQ+IERPTVBhcnNlcjo6
cGFyc2VGcm9tU3RyaW5nKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQsIGNvbnN0IFN0cmluZyYgc3RyLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKQogewog
ICAgIGlmICghRE9NSW1wbGVtZW50YXRpb246OmlzWE1MTUlNRVR5cGUoY29udGVudFR5cGUpKQog
ICAgICAgICByZXR1cm4gMDsKIAogICAgIFJlZlB0cjxEb2N1bWVudD4gZG9jID0gRE9NSW1wbGVt
ZW50YXRpb246OmNyZWF0ZURvY3VtZW50KGNvbnRlbnRUeXBlLCAwLCBLVVJMKCksIGZhbHNlKTsK
KworICAgIGlmIChzY3JpcHRFeGVjdXRpb25Db250ZXh0ICYmIHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAg
ICAgICBkb2MtPnNldE9yaWdpbkRvY3VtZW50KHN0YXRpY19jYXN0PERvY3VtZW50Kj4oc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCkpOworICAgIH0KKwogICAgIGRvYy0+c2V0Q29udGVudChzdHIpOwog
ICAgIHJldHVybiBkb2MucmVsZWFzZSgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUveG1sL0RP
TVBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9ET01QYXJzZXIuaAko
cmV2aXNpb24gODAxNjgpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvRE9NUGFyc2VyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDEyICsyNiwxMyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBEb2N1bWVudDsKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAKIGNsYXNzIERPTVBh
cnNlciA6IHB1YmxpYyBSZWZDb3VudGVkPERPTVBhcnNlcj4gewogcHVibGljOgogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPERPTVBhcnNlcj4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IERP
TVBhcnNlcik7IH0KIAotICAgIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IHBhcnNlRnJvbVN0cmluZyhj
b25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKTsKKyAgICBQYXNzUmVmUHRy
PERvY3VtZW50PiBwYXJzZUZyb21TdHJpbmcoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0
IFN0cmluZyYgc3RyLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKTsKIAogcHJpdmF0ZToKICAg
ICBET01QYXJzZXIoKSB7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9ET01QYXJzZXIuaWRs
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9ET01QYXJzZXIuaWRsCShyZXZpc2lv
biA4MDE2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9ET01QYXJzZXIuaWRsCSh3b3JraW5nIGNv
cHkpCkBAIC0xOSw2ICsxOSw2IEBACiAKIG1vZHVsZSB4cGF0aCB7CiAgICAgaW50ZXJmYWNlIFtD
YW5CZUNvbnN0cnVjdGVkXSBET01QYXJzZXIgewotICAgICAgICBEb2N1bWVudCBwYXJzZUZyb21T
dHJpbmcoaW4gRE9NU3RyaW5nIHN0ciwgaW4gRE9NU3RyaW5nIGNvbnRlbnRUeXBlKTsKKyAgICAg
ICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIERvY3VtZW50IHBhcnNlRnJvbVN0
cmluZyhpbiBET01TdHJpbmcgc3RyLCBpbiBET01TdHJpbmcgY29udGVudFR5cGUpOwogICAgIH07
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAJKHJldmlzaW9uIDgw
MTY4KQorKysgU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjUwLDcgKzI1MCw3IEBAIERvY3VtZW50KiBYTUxIdHRwUmVxdWVzdDo6cmVzcG9u
c2VYTUwoRXgKICAgICAgICAgICAgIG1fcmVzcG9uc2VYTUwgPSBEb2N1bWVudDo6Y3JlYXRlKDAs
IG1fdXJsKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBTZXQgTGFzdC1Nb2RpZmllZC4KICAgICAg
ICAgICAgIG1fcmVzcG9uc2VYTUwtPnNldENvbnRlbnQobV9yZXNwb25zZUJ1aWxkZXIudG9TdHJp
bmdQcmVzZXJ2ZUNhcGFjaXR5KCkpOwotICAgICAgICAgICAgbV9yZXNwb25zZVhNTC0+c2V0U2Vj
dXJpdHlPcmlnaW4oZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSk7CisgICAgICAgICAgICBt
X3Jlc3BvbnNlWE1MLT5zZXRPcmlnaW5Eb2N1bWVudChkb2N1bWVudCgpKTsKICAgICAgICAgICAg
IGlmICghbV9yZXNwb25zZVhNTC0+d2VsbEZvcm1lZCgpKQogICAgICAgICAgICAgICAgIG1fcmVz
cG9uc2VYTUwgPSAwOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvWE1MVHJl
ZVZpZXdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hNTFRyZWVWaWV3
ZXIuY3BwCShyZXZpc2lvbiA4MDE2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9YTUxUcmVlVmll
d2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDcgKzEwMyw3IEBAIHZvaWQgWE1MVHJlZVZp
ZXdlcjo6dHJhbnNmb3JtRG9jdW1lbnRUb1QKICAgICBGcmFtZSogZnJhbWUgPSBtX2RvY3VtZW50
LT5mcmFtZSgpOwogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaW50cm9kdWNlIGVycm9yIGhhbmRs
aW5nCiAgICAgaWYgKHByb2Nlc3Nvci0+dHJhbnNmb3JtVG9TdHJpbmcobV9kb2N1bWVudCwgcmVz
dWx0TUlNRVR5cGUsIG5ld1NvdXJjZSwgcmVzdWx0RW5jb2RpbmcpKQotICAgICAgICBwcm9jZXNz
b3ItPmNyZWF0ZURvY3VtZW50RnJvbVNvdXJjZShuZXdTb3VyY2UsIHJlc3VsdEVuY29kaW5nLCBy
ZXN1bHRNSU1FVHlwZSwgbV9kb2N1bWVudCwgZnJhbWUpOworICAgICAgICBwcm9jZXNzb3ItPmNy
ZWF0ZURvY3VtZW50RnJvbVNvdXJjZShuZXdTb3VyY2UsIHJlc3VsdEVuY29kaW5nLCByZXN1bHRN
SU1FVHlwZSwgbV9kb2N1bWVudCwgZnJhbWUsIDApOwogICAgIC8vIE5ldyBkb2N1bWVudCBzaG91
bGQgaGF2ZSBiZWVuIGxvYWRlZCBpbiBmcmFtZS4gVGVsbCBpdCB0byB1c2UgdmlldyBzb3VyY2Ug
c3R5bGVzLgogICAgIGZyYW1lLT5kb2N1bWVudCgpLT5zZXRVc2VzVmlld1NvdXJjZVN0eWxlcyh0
cnVlKTsKICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvckNoYW5nZWQoUmVjYWxj
U3R5bGVJbW1lZGlhdGVseSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvWFNMSW1wb3J0UnVs
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hTTEltcG9ydFJ1bGUuY3Bw
CShyZXZpc2lvbiA4MDE2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9YU0xJbXBvcnRSdWxlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsMTIgQEAKIAogI2luY2x1ZGUgIkNhY2hlZFhT
TFN0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgorI2luY2x1
ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAi
U2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCisjaW5j
bHVkZSAiVGhyZWFkYWJsZUxvYWRlci5oIgorI2luY2x1ZGUgIlRocmVhZGFibGVMb2FkZXJDbGll
bnQuaCIKICNpbmNsdWRlICJYU0xTdHlsZVNoZWV0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTc3LDI5ICs4Myw2NSBAQCBib29sIFhTTEltcG9ydFJ1bGU6OmlzTG9hZGluZygpCiAKIHZv
aWQgWFNMSW1wb3J0UnVsZTo6bG9hZFNoZWV0KCkKIHsKLSAgICBDYWNoZWRSZXNvdXJjZUxvYWRl
ciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSAwOwogICAgIFN0eWxlQmFzZSogcm9vdCA9IHRoaXM7
CiAgICAgU3R5bGVCYXNlKiBwYXJlbnQ7CisKICAgICB3aGlsZSAoKHBhcmVudCA9IHJvb3QtPnBh
cmVudCgpKSkKICAgICAgICAgcm9vdCA9IHBhcmVudDsKLSAgICBpZiAocm9vdC0+aXNYU0xTdHls
ZVNoZWV0KCkpCi0gICAgICAgIGNhY2hlZFJlc291cmNlTG9hZGVyID0gc3RhdGljX2Nhc3Q8WFNM
U3R5bGVTaGVldCo+KHJvb3QpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOwotICAgIAotICAgIFN0
cmluZyBhYnNIcmVmID0gbV9zdHJIcmVmOworCisgICAgQVNTRVJUKHJvb3QtPmlzWFNMU3R5bGVT
aGVldCgpKTsKKyAgICBYU0xTdHlsZVNoZWV0KiByb290U3R5bGVTaGVldCA9IHN0YXRpY19jYXN0
PFhTTFN0eWxlU2hlZXQqPihyb290KTsKKyAgICBOb2RlKiBvd25lck5vZGUgPSByb290U3R5bGVT
aGVldC0+b3duZXJOb2RlKCk7CisgICAgRG9jdW1lbnQqIG9yaWdpbkRvY3VtZW50ID0gb3duZXJO
b2RlID8gb3duZXJOb2RlLT5kb2N1bWVudCgpLT5vcmlnaW5Eb2N1bWVudCgpIDogMDsKKwogICAg
IFhTTFN0eWxlU2hlZXQqIHBhcmVudFNoZWV0ID0gcGFyZW50U3R5bGVTaGVldCgpOwotICAgIGlm
ICghcGFyZW50U2hlZXQtPmZpbmFsVVJMKCkuaXNOdWxsKCkpCi0gICAgICAgIC8vIHVzZSBwYXJl
bnQgc3R5bGVoZWV0J3MgVVJMIGFzIHRoZSBiYXNlIFVSTAotICAgICAgICBhYnNIcmVmID0gS1VS
TChwYXJlbnRTaGVldC0+ZmluYWxVUkwoKSwgbV9zdHJIcmVmKS5zdHJpbmcoKTsKLSAgICAKKyAg
ICBBU1NFUlQocGFyZW50U2hlZXQpOworCisgICAgUmVmUHRyPERvY3VtZW50PiBwYXJlbnREb2N1
bWVudCA9IHBhcmVudFNoZWV0LT5vd25lckRvY3VtZW50KCk7CisKKyAgICBpZiAoIXBhcmVudERv
Y3VtZW50IHx8IHBhcmVudERvY3VtZW50LT51cmwoKS5pc051bGwoKSB8fCBwYXJlbnREb2N1bWVu
dC0+dXJsKCkgIT0gcGFyZW50U2hlZXQtPmZpbmFsVVJMKCkpIHsKKyAgICAgICAgS1VSTCBwYXJl
bnRVUkw7CisKKyAgICAgICAgaWYgKCFwYXJlbnRTaGVldC0+ZmluYWxVUkwoKS5pc051bGwoKSkg
eworICAgICAgICAgICAgLy8gVXNlIHBhcmVudCBzdHlsZWhlZXQncyBVUkwgYXMgdGhlIGJhc2Ug
VVJMLgorICAgICAgICAgICAgcGFyZW50VVJMID0gcGFyZW50U2hlZXQtPmZpbmFsVVJMKCk7Cisg
ICAgICAgIH0gZWxzZSBpZiAob3JpZ2luRG9jdW1lbnQpIHsKKyAgICAgICAgICAgIC8vIFdoZW4g
cGFyZW50IHN0eWxlc2hlZXQgZG9lc24ndCBoYXZlIGEgZmluYWwgVVJMLCB1c2UgYmFzZSBVUkwg
ZnJvbSB0aGUKKyAgICAgICAgICAgIC8vIGRvY3VtZW50IHRoZSByb290IHN0eWxlc2hlZXQgb3Jp
Z2luYXRlZCBmcm9tLiBUaGlzIGNhbiBoYXBwZW4gd2hlbiB0aGUKKyAgICAgICAgICAgIC8vIHN0
eWxlc2hlZXQgaXMgY3JlYXRlZCB3aXRoIERPTVBhcnNlci5wYXJzZUZyb21TdHJpbmcoKSwgZm9y
IGV4YW1wbGUuCisgICAgICAgICAgICBwYXJlbnRVUkwgPSBvcmlnaW5Eb2N1bWVudC0+dXJsKCk7
CisgICAgICAgIH0KKworICAgICAgICAvLyBDcmVhdGUgYSBmYWtlIGRvY3VtZW50IHVzZWQgZm9y
IHRoZSBkdXJhdGlvbiBvZiB0aGlzIGxvYWQuCisgICAgICAgIHBhcmVudERvY3VtZW50ID0gRG9j
dW1lbnQ6OmNyZWF0ZSgwLCBwYXJlbnRVUkwpOworCisgICAgICAgIGlmIChvcmlnaW5Eb2N1bWVu
dCkKKyAgICAgICAgICAgIHBhcmVudERvY3VtZW50LT5zZXRPcmlnaW5Eb2N1bWVudChvcmlnaW5E
b2N1bWVudCk7CisgICAgfQorCisgICAgS1VSTCBhYnNIcmVmID0gcGFyZW50RG9jdW1lbnQtPmNv
bXBsZXRlVVJMKG1fc3RySHJlZik7CisKICAgICAvLyBDaGVjayBmb3IgYSBjeWNsZSBpbiBvdXIg
aW1wb3J0IGNoYWluLiAgSWYgd2UgZW5jb3VudGVyIGEgc3R5bGVzaGVldAogICAgIC8vIGluIG91
ciBwYXJlbnQgY2hhaW4gd2l0aCB0aGUgc2FtZSBVUkwsIHRoZW4ganVzdCBiYWlsLgogICAgIGZv
ciAocGFyZW50ID0gdGhpcy0+cGFyZW50KCk7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5wYXJl
bnQoKSkgewotICAgICAgICBpZiAocGFyZW50LT5pc1hTTFN0eWxlU2hlZXQoKSAmJiBhYnNIcmVm
ID09IHN0YXRpY19jYXN0PFhTTFN0eWxlU2hlZXQqPihwYXJlbnQpLT5maW5hbFVSTCgpLnN0cmlu
ZygpKQorICAgICAgICBpZiAocGFyZW50LT5pc1hTTFN0eWxlU2hlZXQoKSAmJiBhYnNIcmVmID09
IHN0YXRpY19jYXN0PFhTTFN0eWxlU2hlZXQqPihwYXJlbnQpLT5maW5hbFVSTCgpKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKLSAgICBtX2NhY2hlZFNoZWV0ID0gY2FjaGVkUmVz
b3VyY2VMb2FkZXItPnJlcXVlc3RYU0xTdHlsZVNoZWV0KGFic0hyZWYpOwotICAgIAorCisgICAg
Ly8gV2UgbmVlZCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRyYW5zZm9ybWF0aW9ucyBzdGFydGVk
IHZpYSBhIHByb2Nlc3NpbmcKKyAgICAvLyBpbnN0cnVjdGlvbiBmcm9tIHRob3NlIHN0YXJ0ZWQg
dmlhIEphdmFzY3JpcHQgYW5kIFhTTFRQcm9jZXNzb3IuIFRob3NlCisgICAgLy8gc3RhcnRlZCB2
aWEgSmF2YXNjcmlwdCBtdXN0IGxvYWQgc3VicmVzb3VyY2VzIHN5bmNocm9ub3VzbHkgb3IgdGhl
eQorICAgIC8vIHdvbid0IGJlIHJlYWR5IHdoZW4gbGlieHNsdCBuZWVkcyB0aGVtLgorICAgIGlm
IChvd25lck5vZGUgJiYgb3duZXJOb2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OlBST0NFU1NJTkdf
SU5TVFJVQ1RJT05fTk9ERSkKKyAgICAgICAgZmluaXNoTG9hZGluZ1NoZWV0QXN5bmNocm9ub3Vz
bHkocGFyZW50U2hlZXQtPmNhY2hlZFJlc291cmNlTG9hZGVyKCksIGFic0hyZWYpOworICAgIGVs
c2UKKyAgICAgICAgZmluaXNoTG9hZGluZ1NoZWV0U3luY2hyb25vdXNseShwYXJlbnREb2N1bWVu
dC5nZXQoKSwgYWJzSHJlZik7Cit9CisKK3ZvaWQgWFNMSW1wb3J0UnVsZTo6ZmluaXNoTG9hZGlu
Z1NoZWV0QXN5bmNocm9ub3VzbHkoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNl
TG9hZGVyLCBjb25zdCBLVVJMJiB1cmwpCit7CisgICAgbV9jYWNoZWRTaGVldCA9IGNhY2hlZFJl
c291cmNlTG9hZGVyLT5yZXF1ZXN0WFNMU3R5bGVTaGVldCh1cmwuc3RyaW5nKCkpOworCiAgICAg
aWYgKG1fY2FjaGVkU2hlZXQpIHsKICAgICAgICAgbV9jYWNoZWRTaGVldC0+YWRkQ2xpZW50KHRo
aXMpOwogICAgICAgICAKQEAgLTExMiw2ICsxNTQsNDggQEAgdm9pZCBYU0xJbXBvcnRSdWxlOjps
b2FkU2hlZXQoKQogICAgIH0KIH0KIAorY2xhc3MgSW1wb3J0TG9hZGVyQ2xpZW50IDogcHVibGlj
IFRocmVhZGFibGVMb2FkZXJDbGllbnQgeworcHVibGljOgorICAgIEltcG9ydExvYWRlckNsaWVu
dCgpIDogbV9mYWlsZWQoZmFsc2UpIHsgfQorCisgICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2Uo
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpIHsgbV9yZXNwb25zZVVSTCA9IHJlc3Bv
bnNlLnVybCgpOyB9CisgICAgdm9pZCBkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBp
bnQgbGVuZ3RoKSB7IG1fcmF3RGF0YS5hcHBlbmQoZGF0YSwgbGVuZ3RoKTsgfQorICAgIHZvaWQg
ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJikgeyBtX2ZhaWxlZCA9IHRydWU7IH0KKworICAg
IGNvbnN0IFZlY3RvcjxjaGFyPiYgcmF3RGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fcmF3RGF0YTsg
fQorICAgIGNvbnN0IEtVUkwmIHJlc3BvbnNlVVJMKCkgY29uc3QgeyByZXR1cm4gbV9yZXNwb25z
ZVVSTDsgfQorICAgIGJvb2wgZmFpbGVkKCkgY29uc3QgeyByZXR1cm4gbV9mYWlsZWQ7IH0KKwor
cHJpdmF0ZToKKyAgICBWZWN0b3I8Y2hhcj4gbV9yYXdEYXRhOworICAgIEtVUkwgbV9yZXNwb25z
ZVVSTDsKKyAgICBib29sIG1fZmFpbGVkOworfTsKKwordm9pZCBYU0xJbXBvcnRSdWxlOjpmaW5p
c2hMb2FkaW5nU2hlZXRTeW5jaHJvbm91c2x5KERvY3VtZW50KiBwYXJlbnREb2N1bWVudCwgY29u
c3QgS1VSTCYgdXJsKQoreworICAgIGJvb2wgc2FtZU9yaWdpblJlcXVlc3QgPSBwYXJlbnREb2N1
bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdCh1cmwpOworCisgICAgVGhyZWFkYWJs
ZUxvYWRlck9wdGlvbnMgb3B0aW9uczsKKyAgICBvcHRpb25zLnNlbmRMb2FkQ2FsbGJhY2tzID0g
dHJ1ZTsKKyAgICBvcHRpb25zLnNuaWZmQ29udGVudCA9IGZhbHNlOworICAgIG9wdGlvbnMuZm9y
Y2VQcmVmbGlnaHQgPSBmYWxzZTsKKyAgICBvcHRpb25zLmFsbG93Q3JlZGVudGlhbHMgPSBzYW1l
T3JpZ2luUmVxdWVzdDsKKyAgICBvcHRpb25zLmNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeSA9IFVz
ZUFjY2Vzc0NvbnRyb2w7CisKKyAgICBJbXBvcnRMb2FkZXJDbGllbnQgY2xpZW50OworICAgIFRo
cmVhZGFibGVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkocGFyZW50RG9jdW1lbnQs
IHVybCwgY2xpZW50LCBvcHRpb25zKTsKKworICAgIGlmIChjbGllbnQuZmFpbGVkKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIFJlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBkZWNvZGVyID0g
VGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKCJ0ZXh0L3hzbCIpOworICAgIFN0cmluZyBzaGVl
dChkZWNvZGVyLT5kZWNvZGUoY2xpZW50LnJhd0RhdGEoKS5kYXRhKCksIGNsaWVudC5yYXdEYXRh
KCkuc2l6ZSgpKSk7CisgICAgc2hlZXQgKz0gZGVjb2Rlci0+Zmx1c2goKTsKKworICAgIHNldFhT
TFN0eWxlU2hlZXQodXJsLnN0cmluZygpLCBjbGllbnQucmVzcG9uc2VVUkwoKSwgc2hlZXQpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoWFNMVCkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YU0xJbXBvcnRSdWxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUveG1sL1hTTEltcG9ydFJ1bGUuaAkocmV2aXNpb24gODAxNjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS94bWwvWFNMSW1wb3J0UnVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw2ICs2
MCw5IEBAIHByaXZhdGU6CiAgICAgLy8gZnJvbSBDYWNoZWRSZXNvdXJjZUNsaWVudAogICAgIHZp
cnR1YWwgdm9pZCBzZXRYU0xTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgaHJlZiwgY29uc3QgS1VS
TCYgYmFzZVVSTCwgY29uc3QgU3RyaW5nJiBzaGVldCk7CiAgICAgCisgICAgdm9pZCBmaW5pc2hM
b2FkaW5nU2hlZXRBc3luY2hyb25vdXNseShDYWNoZWRSZXNvdXJjZUxvYWRlciosIGNvbnN0IEtV
UkwmKTsKKyAgICB2b2lkIGZpbmlzaExvYWRpbmdTaGVldFN5bmNocm9ub3VzbHkoRG9jdW1lbnQq
LCBjb25zdCBLVVJMJik7CisKICAgICBTdHJpbmcgbV9zdHJIcmVmOwogICAgIFJlZlB0cjxYU0xT
dHlsZVNoZWV0PiBtX3N0eWxlU2hlZXQ7CiAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVk
WFNMU3R5bGVTaGVldD4gbV9jYWNoZWRTaGVldDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9Y
U0xUUHJvY2Vzc29yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvWFNMVFBy
b2Nlc3Nvci5jcHAJKHJldmlzaW9uIDgwMTY4KQorKysgU291cmNlL1dlYkNvcmUveG1sL1hTTFRQ
cm9jZXNzb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIFhTTFRQcm9jZXNz
b3I6On5YU0xUUHJvY2Vzc29yKCkKIH0KIAogUGFzc1JlZlB0cjxEb2N1bWVudD4gWFNMVFByb2Nl
c3Nvcjo6Y3JlYXRlRG9jdW1lbnRGcm9tU291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlU3RyaW5n
LAotICAgIGNvbnN0IFN0cmluZyYgc291cmNlRW5jb2RpbmcsIGNvbnN0IFN0cmluZyYgc291cmNl
TUlNRVR5cGUsIE5vZGUqIHNvdXJjZU5vZGUsIEZyYW1lKiBmcmFtZSkKKyAgICBjb25zdCBTdHJp
bmcmIHNvdXJjZUVuY29kaW5nLCBjb25zdCBTdHJpbmcmIHNvdXJjZU1JTUVUeXBlLCBOb2RlKiBz
b3VyY2VOb2RlLCBGcmFtZSogZnJhbWUsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQpCiB7CiAgICAgUmVmUHRyPERvY3VtZW50PiBvd25lckRvY3VtZW50ID0g
c291cmNlTm9kZS0+ZG9jdW1lbnQoKTsKICAgICBib29sIHNvdXJjZUlzRG9jdW1lbnQgPSAoc291
cmNlTm9kZSA9PSBvd25lckRvY3VtZW50LmdldCgpKTsKQEAgLTg2LDYgKzg2LDggQEAgUGFzc1Jl
ZlB0cjxEb2N1bWVudD4gWFNMVFByb2Nlc3Nvcjo6Y3JlYQogICAgICAgICAgICAgdmlldy0+Y2xl
YXIoKTsKICAgICAgICAgcmVzdWx0LT5zZXRUcmFuc2Zvcm1Tb3VyY2VEb2N1bWVudChmcmFtZS0+
ZG9jdW1lbnQoKSk7CiAgICAgICAgIGZyYW1lLT5zZXREb2N1bWVudChyZXN1bHQpOworICAgIH0g
ZWxzZSBpZiAoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCAmJiBzY3JpcHRFeGVjdXRpb25Db250ZXh0
LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgcmVzdWx0LT5zZXRPcmlnaW5Eb2N1bWVudChzdGF0
aWNfY2FzdDxEb2N1bWVudCo+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpKTsKICAgICB9CiAKICAg
ICBSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gZGVjb2RlciA9IFRleHRSZXNvdXJjZURlY29k
ZXI6OmNyZWF0ZShzb3VyY2VNSU1FVHlwZSk7CkBAIC0xMjMsMTQgKzEyNSwxNCBAQCBzdGF0aWMg
aW5saW5lIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjCiAgICAgcmV0dXJuIGZyYWdtZW50Owog
fQogCi1QYXNzUmVmUHRyPERvY3VtZW50PiBYU0xUUHJvY2Vzc29yOjp0cmFuc2Zvcm1Ub0RvY3Vt
ZW50KE5vZGUqIHNvdXJjZU5vZGUpCitQYXNzUmVmUHRyPERvY3VtZW50PiBYU0xUUHJvY2Vzc29y
Ojp0cmFuc2Zvcm1Ub0RvY3VtZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQsIE5vZGUqIHNvdXJjZU5vZGUpCiB7CiAgICAgU3RyaW5nIHJlc3VsdE1JTUVU
eXBlOwogICAgIFN0cmluZyByZXN1bHRTdHJpbmc7CiAgICAgU3RyaW5nIHJlc3VsdEVuY29kaW5n
OwogICAgIGlmICghdHJhbnNmb3JtVG9TdHJpbmcoc291cmNlTm9kZSwgcmVzdWx0TUlNRVR5cGUs
IHJlc3VsdFN0cmluZywgcmVzdWx0RW5jb2RpbmcpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBy
ZXR1cm4gY3JlYXRlRG9jdW1lbnRGcm9tU291cmNlKHJlc3VsdFN0cmluZywgcmVzdWx0RW5jb2Rp
bmcsIHJlc3VsdE1JTUVUeXBlLCBzb3VyY2VOb2RlLCAwKTsKKyAgICByZXR1cm4gY3JlYXRlRG9j
dW1lbnRGcm9tU291cmNlKHJlc3VsdFN0cmluZywgcmVzdWx0RW5jb2RpbmcsIHJlc3VsdE1JTUVU
eXBlLCBzb3VyY2VOb2RlLCAwLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKIH0KIAogUGFzc1Jl
ZlB0cjxEb2N1bWVudEZyYWdtZW50PiBYU0xUUHJvY2Vzc29yOjp0cmFuc2Zvcm1Ub0ZyYWdtZW50
KE5vZGUqIHNvdXJjZU5vZGUsIERvY3VtZW50KiBvdXRwdXREb2MpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS94bWwvWFNMVFByb2Nlc3Nvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3ht
bC9YU0xUUHJvY2Vzc29yLmgJKHJldmlzaW9uIDgwMTY4KQorKysgU291cmNlL1dlYkNvcmUveG1s
L1hTTFRQcm9jZXNzb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTIgKzQ4LDEyIEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgc2V0WFNMU3R5bGVTaGVldChQYXNzUmVmUHRyPFhTTFN0eWxlU2hlZXQ+
IHN0eWxlU2hlZXQpIHsgbV9zdHlsZXNoZWV0ID0gc3R5bGVTaGVldDsgfQogICAgIGJvb2wgdHJh
bnNmb3JtVG9TdHJpbmcoTm9kZSogc291cmNlLCBTdHJpbmcmIHJlc3VsdE1JTUVUeXBlLCBTdHJp
bmcmIHJlc3VsdFN0cmluZywgU3RyaW5nJiByZXN1bHRFbmNvZGluZyk7Ci0gICAgUGFzc1JlZlB0
cjxEb2N1bWVudD4gY3JlYXRlRG9jdW1lbnRGcm9tU291cmNlKGNvbnN0IFN0cmluZyYgc291cmNl
LCBjb25zdCBTdHJpbmcmIHNvdXJjZUVuY29kaW5nLCBjb25zdCBTdHJpbmcmIHNvdXJjZU1JTUVU
eXBlLCBOb2RlKiBzb3VyY2VOb2RlLCBGcmFtZSogZnJhbWUpOworICAgIFBhc3NSZWZQdHI8RG9j
dW1lbnQ+IGNyZWF0ZURvY3VtZW50RnJvbVNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29u
c3QgU3RyaW5nJiBzb3VyY2VFbmNvZGluZywgY29uc3QgU3RyaW5nJiBzb3VyY2VNSU1FVHlwZSwg
Tm9kZSogc291cmNlTm9kZSwgRnJhbWUqIGZyYW1lLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7
CiAgICAgCiAgICAgLy8gRE9NIG1ldGhvZHMKICAgICB2b2lkIGltcG9ydFN0eWxlc2hlZXQoUGFz
c1JlZlB0cjxOb2RlPiBzdHlsZSkgeyBtX3N0eWxlc2hlZXRSb290Tm9kZSA9IHN0eWxlOyB9CiAg
ICAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiB0cmFuc2Zvcm1Ub0ZyYWdtZW50KE5vZGUq
IHNvdXJjZSwgRG9jdW1lbnQqIG91cHV0RG9jKTsKLSAgICBQYXNzUmVmUHRyPERvY3VtZW50PiB0
cmFuc2Zvcm1Ub0RvY3VtZW50KE5vZGUqIHNvdXJjZSk7CisgICAgUGFzc1JlZlB0cjxEb2N1bWVu
dD4gdHJhbnNmb3JtVG9Eb2N1bWVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgTm9kZSogc291
cmNlKTsKICAgICAKICAgICB2b2lkIHNldFBhcmFtZXRlcihjb25zdCBTdHJpbmcmIG5hbWVzcGFj
ZVVSSSwgY29uc3QgU3RyaW5nJiBsb2NhbE5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwogICAg
IFN0cmluZyBnZXRQYXJhbWV0ZXIoY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IFN0
cmluZyYgbG9jYWxOYW1lKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJv
Y2Vzc29yTGlieHNsdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hTTFRQ
cm9jZXNzb3JMaWJ4c2x0LmNwcAkocmV2aXNpb24gODAxNjgpCisrKyBTb3VyY2UvV2ViQ29yZS94
bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMCArMzAs
OSBAQAogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9h
ZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgiCi0j
aW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIK
LSNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5jbHVkZSAiVGhyZWFkYWJsZUxvYWRl
ci5oIgorI2luY2x1ZGUgIlRocmVhZGFibGVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJUcmFu
c2Zvcm1Tb3VyY2UuaCIKICNpbmNsdWRlICJYTUxEb2N1bWVudFBhcnNlci5oIgogI2luY2x1ZGUg
IlhTTFN0eWxlU2hlZXQuaCIKQEAgLTEwMSw2ICsxMDAsMjEgQEAgdm9pZCBYU0xUUHJvY2Vzc29y
OjpwYXJzZUVycm9yRnVuYyh2b2lkKgogICAgIGNvbnNvbGUtPmFkZE1lc3NhZ2UoWE1MTWVzc2Fn
ZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIGxldmVsLCBlcnJvci0+bWVzc2FnZSwgZXJyb3ItPmxp
bmUsIGVycm9yLT5maWxlKTsKIH0KIAorY2xhc3MgTG9hZERvY3VtZW50TG9hZGVyQ2xpZW50IDog
cHVibGljIFRocmVhZGFibGVMb2FkZXJDbGllbnQgeworcHVibGljOgorICAgIExvYWREb2N1bWVu
dExvYWRlckNsaWVudCgpIDogbV9mYWlsZWQoZmFsc2UpIHsgfQorCisgICAgdm9pZCBkaWRSZWNl
aXZlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKSB7IG1fcmF3RGF0YS5hcHBlbmQo
ZGF0YSwgbGVuZ3RoKTsgfQorICAgIHZvaWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJikg
eyBtX2ZhaWxlZCA9IHRydWU7IH0KKworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiYgcmF3RGF0YSgp
IGNvbnN0IHsgcmV0dXJuIG1fcmF3RGF0YTsgfQorICAgIGJvb2wgZmFpbGVkKCkgY29uc3QgeyBy
ZXR1cm4gbV9mYWlsZWQ7IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8Y2hhcj4gbV9yYXdEYXRh
OworICAgIGJvb2wgbV9mYWlsZWQ7Cit9OworCiAvLyBGSVhNRTogVGhlcmUgc2VlbXMgdG8gYmUg
bm8gd2F5IHRvIGNvbnRyb2wgdGhlIGN0eHQgcG9pbnRlciBmb3IgbG9hZGluZyBoZXJlLCB0aHVz
IHdlIGhhdmUgZ2xvYmFscy4KIHN0YXRpYyBYU0xUUHJvY2Vzc29yKiBnbG9iYWxQcm9jZXNzb3Ig
PSAwOwogc3RhdGljIENhY2hlZFJlc291cmNlTG9hZGVyKiBnbG9iYWxDYWNoZWRSZXNvdXJjZUxv
YWRlciA9IDA7CkBAIC0xMTksMjAgKzEzMywyMiBAQCBzdGF0aWMgeG1sRG9jUHRyIGRvY0xvYWRl
ckZ1bmMoY29uc3QgeG1sCiAgICAgICAgIHhtbENoYXIqIGJhc2UgPSB4bWxOb2RlR2V0QmFzZShj
b250ZXh0LT5kb2N1bWVudC0+ZG9jLCBjb250ZXh0LT5ub2RlKTsKICAgICAgICAgS1VSTCB1cmwo
S1VSTChQYXJzZWRVUkxTdHJpbmcsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGJhc2Up
KSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4odXJpKSk7CiAgICAgICAgIHhtbEZyZWUo
YmFzZSk7Ci0gICAgICAgIFJlc291cmNlRXJyb3IgZXJyb3I7Ci0gICAgICAgIFJlc291cmNlUmVz
cG9uc2UgcmVzcG9uc2U7CiAKLSAgICAgICAgVmVjdG9yPGNoYXI+IGRhdGE7CisgICAgICAgIERv
Y3VtZW50KiBvd25lckRvY3VtZW50ID0gZ2xvYmFsQ2FjaGVkUmVzb3VyY2VMb2FkZXItPmRvY3Vt
ZW50KCk7CisgICAgICAgIGJvb2wgc2FtZU9yaWdpblJlcXVlc3QgPSBvd25lckRvY3VtZW50LT5z
ZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHVybCk7CisKKyAgICAgICAgVGhyZWFkYWJsZUxv
YWRlck9wdGlvbnMgbG9hZGVyT3B0aW9uczsKKyAgICAgICAgbG9hZGVyT3B0aW9ucy5zZW5kTG9h
ZENhbGxiYWNrcyA9IHRydWU7CisgICAgICAgIGxvYWRlck9wdGlvbnMuc25pZmZDb250ZW50ID0g
ZmFsc2U7CisgICAgICAgIGxvYWRlck9wdGlvbnMuZm9yY2VQcmVmbGlnaHQgPSBmYWxzZTsKKyAg
ICAgICAgbG9hZGVyT3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzID0gc2FtZU9yaWdpblJlcXVlc3Q7
CisgICAgICAgIGxvYWRlck9wdGlvbnMuY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5ID0gVXNlQWNj
ZXNzQ29udHJvbDsKKworICAgICAgICBMb2FkRG9jdW1lbnRMb2FkZXJDbGllbnQgY2xpZW50Owor
ICAgICAgICBUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KG93bmVy
RG9jdW1lbnQsIHVybCwgY2xpZW50LCBsb2FkZXJPcHRpb25zKTsKIAotICAgICAgICBib29sIHJl
cXVlc3RBbGxvd2VkID0gZ2xvYmFsQ2FjaGVkUmVzb3VyY2VMb2FkZXItPmZyYW1lKCkgJiYgZ2xv
YmFsQ2FjaGVkUmVzb3VyY2VMb2FkZXItPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmNh
blJlcXVlc3QodXJsKTsKLSAgICAgICAgaWYgKHJlcXVlc3RBbGxvd2VkKSB7Ci0gICAgICAgICAg
ICBnbG9iYWxDYWNoZWRSZXNvdXJjZUxvYWRlci0+ZnJhbWUoKS0+bG9hZGVyKCktPmxvYWRSZXNv
dXJjZVN5bmNocm9ub3VzbHkodXJsLCBBbGxvd1N0b3JlZENyZWRlbnRpYWxzLCBlcnJvciwgcmVz
cG9uc2UsIGRhdGEpOwotICAgICAgICAgICAgcmVxdWVzdEFsbG93ZWQgPSBnbG9iYWxDYWNoZWRS
ZXNvdXJjZUxvYWRlci0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChy
ZXNwb25zZS51cmwoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFyZXF1ZXN0QWxsb3dlZCkg
ewotICAgICAgICAgICAgZGF0YS5jbGVhcigpOwotICAgICAgICAgICAgZ2xvYmFsQ2FjaGVkUmVz
b3VyY2VMb2FkZXItPnByaW50QWNjZXNzRGVuaWVkTWVzc2FnZSh1cmwpOwotICAgICAgICB9Cisg
ICAgICAgIGlmIChjbGllbnQuZmFpbGVkKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKIAogICAg
ICAgICBDb25zb2xlKiBjb25zb2xlID0gMDsKICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGds
b2JhbFByb2Nlc3Nvci0+eHNsU3R5bGVzaGVldCgpLT5vd25lckRvY3VtZW50KCktPmZyYW1lKCkp
CkBAIC0xNDIsNyArMTU4LDggQEAgc3RhdGljIHhtbERvY1B0ciBkb2NMb2FkZXJGdW5jKGNvbnN0
IHhtbAogCiAgICAgICAgIC8vIFdlIGRvbid0IHNwZWNpZnkgYW4gZW5jb2RpbmcgaGVyZS4gTmVp
dGhlciBHZWNrbyBub3IgV2luSUUgcmVzcGVjdHMKICAgICAgICAgLy8gdGhlIGVuY29kaW5nIHNw
ZWNpZmllZCBpbiB0aGUgSFRUUCBoZWFkZXJzLgotICAgICAgICB4bWxEb2NQdHIgZG9jID0geG1s
UmVhZE1lbW9yeShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCksIChjb25zdCBjaGFyKil1cmksIDAs
IG9wdGlvbnMpOworICAgICAgICB4bWxEb2NQdHIgZG9jID0geG1sUmVhZE1lbW9yeShjbGllbnQu
cmF3RGF0YSgpLmRhdGEoKSwgY2xpZW50LnJhd0RhdGEoKS5zaXplKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHVy
aSksIDAsIG9wdGlvbnMpOwogCiAgICAgICAgIHhtbFNldFN0cnVjdHVyZWRFcnJvckZ1bmMoMCwg
MCk7CiAgICAgICAgIHhtbFNldEdlbmVyaWNFcnJvckZ1bmMoMCwgMCk7CkluZGV4OiBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiA4MDE2OCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDM5IEBACisyMDExLTAzLTAzICBBbmRyZWFzIFdpY3RvciAgPGFuZHJlYXMud2NpdG9y
QHhjZXJpb24uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIHhzbDppbXBvcnQgYW5kIGRvY3VtZW50KCkgZG9uJ3Qgd29yayBpbiBzdHlsZXNoZWV0
cyBsb2FkZWQgdmlhIFhNTEh0dHBSZXF1ZXN0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMDMxMworCisgICAgICAgICogZmFzdC94c2wvdHJhbnNmb3Jt
LWRvY2ltcGwtZG9jLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC94c2wvdHJh
bnNmb3JtLWRvY2ltcGwtZG9jLnhodG1sOiBBZGRlZC4KKyAgICAgICAgVGVzdCB0aGF0IHN0eWxl
c2hlZXRzIGNyZWF0ZWQgd2l0aCBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVEb2N1bWVu
dCBjYW4gdXNlIHhzbDppbXBvcnQuCisgICAgICAgICogZmFzdC94c2wvdHJhbnNmb3JtLWRvbXBh
cnNlci1kb2MtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3hzbC90cmFuc2Zv
cm0tZG9tcGFyc2VyLWRvYy54aHRtbDogQWRkZWQuCisgICAgICAgIFRlc3QgdGhhdCBzdHlsZXNo
ZWV0cyBjcmVhdGVkIHdpdGggRE9NUGFyc2VyLnBhcnNlRnJvbVN0cmluZyBjYW4gdXNlIHhzbDpp
bXBvcnQuCisgICAgICAgICogZmFzdC94c2wvdHJhbnNmb3JtLXRyYW5zZm9ybWVkLWRvYy1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QveHNsL3RyYW5zZm9ybS10cmFuc2Zvcm1l
ZC1kb2MueGh0bWw6IEFkZGVkLgorICAgICAgICBUZXN0IHRoYXQgc3R5bGVzaGVldHMgY3JlYXRl
ZCB3aXRoIFhTTFRQcm9jZXNzb3IudHJhbnNmb3JtVG9Eb2N1bWVudCBjYW4gdXNlIHhzbDppbXBv
cnQuCisgICAgICAgICogZmFzdC94c2wvdHJhbnNmb3JtLXhoci1kb2MtZXhwZWN0ZWQudHh0Ogor
ICAgICAgICAqIGh0dHAvdGVzdHMveHNsOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3hz
bC9yZXNvdXJjZXM6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMveHNsL3Jlc291cmNlcy9h
bGxvdy1jcm9zcy1vcmlnaW4taGVhZGVyLmNnaTogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0
cy94c2wvcmVzb3VyY2VzL3RyYW5zZm9ybS1mcmFtZWQtc3ViZnJhbWUxLnhodG1sOiBBZGRlZC4K
KyAgICAgICAgKiBodHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMvdHJhbnNmb3JtLWZyYW1lZC1zdWJm
cmFtZTIueGh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMveHNsL3Jlc291cmNlcy94
aHItZG9jLWNyb3NzLW9yaWdpbi54c2w6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMveHNs
L3Jlc291cmNlcy94aHItZG9jLWZyb20tYWxsb3dlZC1jcm9zcy1vcmlnaW4ueHNsOiBBZGRlZC4K
KyAgICAgICAgKiBodHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMveGhyLWRvYy1pbXBvcnRlZC54c2w6
IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMveHNsL3Jlc291cmNlcy94aHItZG9jLnhtbDog
QWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL3hoci1kb2MueHNsOiBB
ZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0tZnJhbWVkLWRvYy1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMveHNsL3RyYW5zZm9ybS1mcmFt
ZWQtZG9jLnhodG1sOiBBZGRlZC4KKyAgICAgICAgVGVzdCBzdHlsZXNoZWV0cyBvcmlnaW5hdGlu
ZyBmcm9tIGFub3RoZXIgZnJhbWUuCisgICAgICAgICogaHR0cC90ZXN0cy94c2wvdHJhbnNmb3Jt
LXhoci1kb2MtY3Jvc3Mtb3JpZ2luLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0
cC90ZXN0cy94c2wvdHJhbnNmb3JtLXhoci1kb2MtY3Jvc3Mtb3JpZ2luLnhodG1sOiBBZGRlZC4K
KyAgICAgICAgVGVzdCB0aGF0IHlvdSBjYW4ndCBpbXBvcnQgZG9jdW1lbnRzIGNyb3NzIG9yaWdp
bi4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0teGhyLWRvYy1mcm9tLWFsbG93
ZWQtY3Jvc3Mtb3JpZ2luLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0
cy94c2wvdHJhbnNmb3JtLXhoci1kb2MtZnJvbS1hbGxvd2VkLWNyb3NzLW9yaWdpbi54aHRtbDog
QWRkZWQuCisKIDIwMTEtMDMtMDIgIFRvbnkgR2VudGlsY29yZSAgPHRvbnlnQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBVbnJldmlld2VkIGV4cGVjdGF0aW9ucyB1cGRhdGUKSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS1kb2NpbXBsLWRvYy1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC94c2wvdHJhbnNmb3JtLWRvY2ltcGwtZG9jLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS1k
b2NpbXBsLWRvYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorVGVz
dCBmb3IgYnVnIDEwMzEzOiB4c2w6aW1wb3J0IGRvZXNuJ3Qgd29yayBpbiBzdHlsZXNoZWV0cyBs
b2FkZWQgdmlhIFhNTEh0dHBSZXF1ZXN0LgorCitTVUNDRVNTCkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L3hzbC90cmFuc2Zvcm0tZG9jaW1wbC1kb2MueGh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC94c2wvdHJhbnNmb3JtLWRvY2ltcGwtZG9jLnhodG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC94c2wvdHJhbnNmb3JtLWRvY2ltcGwtZG9jLnhodG1sCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDQ1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1
dGYtOCI/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VO
IiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwxMS5kdGQiPgorPGh0bWwg
eG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiI+Cis8aGVh
ZD4KKyAgICA8dGl0bGU+eHNsIGltcG9ydCB0ZXN0PC90aXRsZT4KKyAgICA8c2NyaXB0IHR5cGU9
InRleHQvamF2YXNjcmlwdCI+PCFbQ0RBVEFbCisgICAgICAgIGZ1bmN0aW9uIGxvYWQoKSB7Cisg
ICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworICAgICAgICAgICAgdmFy
IHhzbHROUyA9ICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iOworICAgICAg
ICAgICAgdmFyIHhzbHREb2MgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVEb2N1bWVu
dCh4c2x0TlMsICJzdHlsZXNoZWV0IiwgbnVsbCk7CisgICAgICAgICAgICB2YXIgcm9vdEVsZW0g
PSB4c2x0RG9jLmRvY3VtZW50RWxlbWVudDsKKyAgICAgICAgICAgIHJvb3RFbGVtLnNldEF0dHJp
YnV0ZSgidmVyc2lvbiIsICIxLjAiKTsKKworICAgICAgICAgICAgdmFyIGltcG9ydEVsZW0gPSB4
c2x0RG9jLmNyZWF0ZUVsZW1lbnROUyh4c2x0TlMsICJpbXBvcnQiKTsKKyAgICAgICAgICAgIGlt
cG9ydEVsZW0uc2V0QXR0cmlidXRlKCJocmVmIiwgInJlc291cmNlcy94aHItZG9jLWltcG9ydGVk
LnhzbCIpOworICAgICAgICAgICAgcm9vdEVsZW0uYXBwZW5kQ2hpbGQoaW1wb3J0RWxlbSk7CisK
KyAgICAgICAgICAgIHZhciB0ZW1wbGF0ZUVsZW0gPSB4c2x0RG9jLmNyZWF0ZUVsZW1lbnROUyh4
c2x0TlMsICJ0ZW1wbGF0ZSIpOworICAgICAgICAgICAgdGVtcGxhdGVFbGVtLnNldEF0dHJpYnV0
ZSgibWF0Y2giLCAiL3Jvb3QiKTsKKyAgICAgICAgICAgIHZhciBjYWxsRWxlbSA9IHhzbHREb2Mu
Y3JlYXRlRWxlbWVudE5TKHhzbHROUywgImNhbGwtdGVtcGxhdGUiKTsKKyAgICAgICAgICAgIGNh
bGxFbGVtLnNldEF0dHJpYnV0ZSgibmFtZSIsICJ3b3JrcyIpOworICAgICAgICAgICAgdGVtcGxh
dGVFbGVtLmFwcGVuZENoaWxkKGNhbGxFbGVtKTsKKyAgICAgICAgICAgIHJvb3RFbGVtLmFwcGVu
ZENoaWxkKHRlbXBsYXRlRWxlbSk7CisKKyAgICAgICAgICAgIHZhciB4c2x0ID0gbmV3IFhTTFRQ
cm9jZXNzb3IoKTsKKyAgICAgICAgICAgIHhzbHQuaW1wb3J0U3R5bGVzaGVldCh4c2x0RG9jKTsK
KworICAgICAgICAgICAgdmFyIHhtbERvYyA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0
ZURvY3VtZW50KCIiLCAicm9vdCIsIG51bGwpOworICAgICAgICAgICAgdmFyIHJlc3VsdERvYyA9
IHhzbHQudHJhbnNmb3JtVG9Eb2N1bWVudCh4bWxEb2MpOworICAgICAgICAgICAgdmFyIGZyYWdt
ZW50ID0gZG9jdW1lbnQuaW1wb3J0Tm9kZShyZXN1bHREb2MuZG9jdW1lbnRFbGVtZW50LCB0cnVl
KTsKKworICAgICAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkaXYn
KTsKKyAgICAgICAgICAgIGRpdi5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChmcmFnbWVudCwgZGl2
KTsKKyAgICAgICAgfQorICAgIF1dPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJs
b2FkKCkiPgorPHA+VGVzdCBmb3IgPGEgaHJlZj0iaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTAzMTMiPmJ1ZyAxMDMxMzwvYT46Cit4c2w6aW1wb3J0IGRvZXNuJ3Qgd29y
ayBpbiBzdHlsZXNoZWV0cyBsb2FkZWQgdmlhIFhNTEh0dHBSZXF1ZXN0LjwvcD4KKworPGRpdiBp
ZD0iZGl2Ij5JdCdzIG5pY2UgdGhhdCB0aGlzIGhhc24ndCBjcmFzaGVkLCBidXQgdGhlIFhTTCB0
cmFuc2Zvcm1hdGlvbiBoYXMgZmFpbGVkLjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC94c2wvdHJhbnNmb3JtLWRvbXBhcnNlci1kb2MtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS1kb21wYXJzZXIt
ZG9jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QveHNsL3Ry
YW5zZm9ybS1kb21wYXJzZXItZG9jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwzIEBACitUZXN0IGZvciBidWcgMTAzMTM6IHhzbDppbXBvcnQgZG9lc24ndCB3b3JrIGluIHN0
eWxlc2hlZXRzIGxvYWRlZCB2aWEgWE1MSHR0cFJlcXVlc3QuCisKK1NVQ0NFU1MKSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS1kb21wYXJzZXItZG9jLnhodG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS1kb21wYXJzZXItZG9jLnhodG1s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC94c2wvdHJhbnNmb3JtLWRvbXBhcnNl
ci1kb2MueGh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDEgQEAKKzw/eG1sIHZlcnNpb249
IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8v
RFREIFhIVE1MIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDExL0RURC94aHRt
bDExLmR0ZCI+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1s
Omxhbmc9ImVuIj4KKzxoZWFkPgorICAgIDx0aXRsZT54c2wgaW1wb3J0IHRlc3Q8L3RpdGxlPgor
ICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IVtDREFUQVsKKyAgICAgICAgZnVu
Y3Rpb24gbG9hZCgpIHsKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpCisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwor
CisgICAgICAgICAgICB2YXIgeHNsdFN0ciA9CisgICAgICAgICAgICAgICAgJzx4c2w6c3R5bGVz
aGVldCB2ZXJzaW9uPSIxLjAiJyArCisgICAgICAgICAgICAgICAgJyAgeG1sbnM6eHNsPSJodHRw
Oi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iJyArCisgICAgICAgICAgICAgICAgJyAg
eG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPicgKworICAgICAgICAgICAgICAg
ICc8eHNsOmltcG9ydCBocmVmPSJyZXNvdXJjZXMveGhyLWRvYy1pbXBvcnRlZC54c2wiIC8+JyAr
CisgICAgICAgICAgICAgICAgJzx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii9yb290Ij4nICsKKyAgICAg
ICAgICAgICAgICAnICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJ3b3JrcyIgLz4nICsKKyAg
ICAgICAgICAgICAgICAnPC94c2w6dGVtcGxhdGU+JyArCisgICAgICAgICAgICAgICAgJzwveHNs
OnN0eWxlc2hlZXQ+JzsKKworICAgICAgICAgICAgdmFyIHBhcnNlciA9IG5ldyBET01QYXJzZXIo
KTsKKyAgICAgICAgICAgIHZhciB4c2x0ID0gbmV3IFhTTFRQcm9jZXNzb3IoKTsKKyAgICAgICAg
ICAgIHZhciB4c2x0RG9jID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyh4c2x0U3RyLCAiYXBwbGlj
YXRpb24veG1sIik7CisgICAgICAgICAgICB4c2x0LmltcG9ydFN0eWxlc2hlZXQoeHNsdERvYyk7
CisKKyAgICAgICAgICAgIHZhciB4bWxEb2MgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKCI8cm9v
dC8+IiwgImFwcGxpY2F0aW9uL3htbCIpOworICAgICAgICAgICAgdmFyIHJlc3VsdERvYyA9IHhz
bHQudHJhbnNmb3JtVG9Eb2N1bWVudCh4bWxEb2MpOworICAgICAgICAgICAgdmFyIGZyYWdtZW50
ID0gZG9jdW1lbnQuaW1wb3J0Tm9kZShyZXN1bHREb2MuZG9jdW1lbnRFbGVtZW50LCB0cnVlKTsK
KworICAgICAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkaXYnKTsK
KyAgICAgICAgICAgIGRpdi5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChmcmFnbWVudCwgZGl2KTsK
KyAgICAgICAgfQorICAgIF1dPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJsb2Fk
KCkiPgorPHA+VGVzdCBmb3IgPGEgaHJlZj0iaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTAzMTMiPmJ1ZyAxMDMxMzwvYT46Cit4c2w6aW1wb3J0IGRvZXNuJ3Qgd29yayBp
biBzdHlsZXNoZWV0cyBsb2FkZWQgdmlhIFhNTEh0dHBSZXF1ZXN0LjwvcD4KKworPGRpdiBpZD0i
ZGl2Ij5JdCdzIG5pY2UgdGhhdCB0aGlzIGhhc24ndCBjcmFzaGVkLCBidXQgdGhlIFhTTCB0cmFu
c2Zvcm1hdGlvbiBoYXMgZmFpbGVkLjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC94c2wvdHJhbnNmb3JtLXRyYW5zZm9ybWVkLWRvYy1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC94c2wvdHJhbnNmb3JtLXRyYW5zZm9ybWVk
LWRvYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3hzbC90
cmFuc2Zvcm0tdHJhbnNmb3JtZWQtZG9jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwzIEBACitUZXN0IGZvciBidWcgMTAzMTM6IHhzbDppbXBvcnQgZG9lc24ndCB3b3JrIGlu
IHN0eWxlc2hlZXRzIGxvYWRlZCB2aWEgWE1MSHR0cFJlcXVlc3QuCisKK1NVQ0NFU1MKSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS10cmFuc2Zvcm1lZC1kb2MueGh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC94c2wvdHJhbnNmb3JtLXRyYW5zZm9ybWVkLWRv
Yy54aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS10
cmFuc2Zvcm1lZC1kb2MueGh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDggQEAKKzw/eG1s
IHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMg
Ii0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEx
L0RURC94aHRtbDExLmR0ZCI+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94
aHRtbCIgeG1sOmxhbmc9ImVuIj4KKzxoZWFkPgorICAgIDx0aXRsZT54c2wgaW1wb3J0IHRlc3Q8
L3RpdGxlPgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IVtDREFUQVsKKyAg
ICAgICAgZnVuY3Rpb24gbG9hZCgpIHsKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFz
VGV4dCgpOworCisgICAgICAgICAgICB2YXIgY29weVhzbHRTdHIgPQorICAgICAgICAgICAgICAg
ICc8eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIicgKworICAgICAgICAgICAgICAgICcgIHht
bG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIicgKworICAgICAg
ICAgICAgICAgICcgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4nICsKKyAg
ICAgICAgICAgICAgICAnPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iQCp8bm9kZSgpIj4nICsKKyAgICAg
ICAgICAgICAgICAnICA8eHNsOmNvcHk+JyArCisgICAgICAgICAgICAgICAgJyAgICA8eHNsOmFw
cGx5LXRlbXBsYXRlcyBzZWxlY3Q9IkAqfG5vZGUoKSIvPicgKworICAgICAgICAgICAgICAgICcg
IDwveHNsOmNvcHk+JyArCisgICAgICAgICAgICAgICAgJzwveHNsOnRlbXBsYXRlPicgKworICAg
ICAgICAgICAgICAgICc8L3hzbDpzdHlsZXNoZWV0Pic7CisKKyAgICAgICAgICAgIHZhciBwYXJz
ZXIgPSBuZXcgRE9NUGFyc2VyKCk7CisgICAgICAgICAgICB2YXIgeHNsdCA9IG5ldyBYU0xUUHJv
Y2Vzc29yKCk7CisgICAgICAgICAgICBjb3B5WHNsdERvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJp
bmcoY29weVhzbHRTdHIsICJhcHBsaWNhdGlvbi94bWwiKTsKKyAgICAgICAgICAgIHhzbHQuaW1w
b3J0U3R5bGVzaGVldChjb3B5WHNsdERvYyk7CisKKyAgICAgICAgICAgIHZhciByZXEgPSBuZXcg
WE1MSHR0cFJlcXVlc3QoKTsKKyAgICAgICAgICAgIHJlcS5vcGVuKCdHRVQnLCAncmVzb3VyY2Vz
L3hoci1kb2MueHNsJywgZmFsc2UpOworICAgICAgICAgICAgcmVxLnNlbmQobnVsbCk7CisgICAg
ICAgICAgICB2YXIgeHNsdERvYyA9IHhzbHQudHJhbnNmb3JtVG9Eb2N1bWVudChyZXEucmVzcG9u
c2VYTUwpOworICAgICAgICAgICAgeHNsdC5pbXBvcnRTdHlsZXNoZWV0KHhzbHREb2MpOworCisg
ICAgICAgICAgICB2YXIgeG1sRG9jID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZygiPHJvb3QvPiIs
ICJhcHBsaWNhdGlvbi94bWwiKTsKKyAgICAgICAgICAgIHZhciByZXN1bHREb2MgPSB4c2x0LnRy
YW5zZm9ybVRvRG9jdW1lbnQoeG1sRG9jKTsKKyAgICAgICAgICAgIHZhciBmcmFnbWVudCA9IGRv
Y3VtZW50LmltcG9ydE5vZGUocmVzdWx0RG9jLmRvY3VtZW50RWxlbWVudCwgdHJ1ZSk7CisKKyAg
ICAgICAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGl2Jyk7CisgICAg
ICAgICAgICBkaXYucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoZnJhZ21lbnQsIGRpdik7CisgICAg
ICAgIH0KKyAgICBdXT48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0ibG9hZCgpIj4K
KzxwPlRlc3QgZm9yIDxhIGhyZWY9Imh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEwMzEzIj5idWcgMTAzMTM8L2E+OgoreHNsOmltcG9ydCBkb2Vzbid0IHdvcmsgaW4gc3R5
bGVzaGVldHMgbG9hZGVkIHZpYSBYTUxIdHRwUmVxdWVzdC48L3A+CisKKzxkaXYgaWQ9ImRpdiI+
SXQncyBuaWNlIHRoYXQgdGhpcyBoYXNuJ3QgY3Jhc2hlZCwgYnV0IHRoZSBYU0wgdHJhbnNmb3Jt
YXRpb24gaGFzIGZhaWxlZC48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QveHNsL3RyYW5zZm9ybS14aHItZG9jLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0teGhyLWRvYy1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDgwMTY4KQorKysgTGF5b3V0VGVzdHMvZmFzdC94c2wvdHJhbnNmb3JtLXhoci1kb2Mt
ZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsMyBAQAotQ09OU09MRSBNRVNT
QUdFOiBsaW5lIDIwOiBUeXBlRXJyb3I6ICd1bmRlZmluZWQnIGlzIG5vdCBhbiBvYmplY3QgKGV2
YWx1YXRpbmcgJ2RvYy5kb2N1bWVudEVsZW1lbnQnKQogVGVzdCBmb3IgYnVnIDEwMzEzOiB4c2w6
aW1wb3J0IGRvZXNuJ3Qgd29yayBpbiBzdHlsZXNoZWV0cyBsb2FkZWQgdmlhIFhNTEh0dHBSZXF1
ZXN0LgogCi1JdCdzIG5pY2UgdGhhdCB0aGlzIGhhc24ndCBjcmFzaGVkLCBidXQgdGhlIFhTTCB0
cmFuc2Zvcm1hdGlvbiBoYXMgZmFpbGVkLgorU1VDQ0VTUwpJbmRleDogTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy94c2wvdHJhbnNmb3JtLWZyYW1lZC1kb2MtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3RyYW5zZm9ybS1mcmFtZWQtZG9jLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3RyYW5z
Zm9ybS1mcmFtZWQtZG9jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMCBA
QAorVGVzdCBmb3IgYnVnIDEwMzEzOiB4c2w6aW1wb3J0IGRvZXNuJ3Qgd29yayBpbiBzdHlsZXNo
ZWV0cyBsb2FkZWQgdmlhIFhNTEh0dHBSZXF1ZXN0LgorCitTVUNDRVNTCitUaGlzIHRyYW5zZm9y
bWF0aW9uIGhhcyBmYWlsZWQgYmVjYXVzZSB0aGUgZnJhbWUgbm8gbG9uZ2VyIGhhcyB0aGUgc2Ft
ZSBvcmlnaW4uCisKKworLS0tLS0tLS0KK0ZyYW1lOiAnc3ViZnJhbWUnCistLS0tLS0tLQorc3Vi
ZnJhbWUgMgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvdHJhbnNmb3JtLWZyYW1l
ZC1kb2MueGh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvdHJh
bnNmb3JtLWZyYW1lZC1kb2MueGh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3hzbC90cmFuc2Zvcm0tZnJhbWVkLWRvYy54aHRtbAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw1OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhRE9D
VFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cu
dzMub3JnL1RSL3hodG1sMTEvRFREL3hodG1sMTEuZHRkIj4KKzxodG1sIHhtbG5zPSJodHRwOi8v
d3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iPgorPGhlYWQ+CisgICAgPHRpdGxl
PnhzbCBpbXBvcnQgdGVzdDwvdGl0bGU+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp
cHQiPjwhW0NEQVRBWworICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQor
ICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworCisgICAg
ICAgIHZhciB4c2x0RG9jOworCisgICAgICAgIHZhciBwYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7
CisgICAgICAgIHZhciB4bWxEb2MgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKCI8cm9vdC8+Iiwg
ImFwcGxpY2F0aW9uL3htbCIpOworCisgICAgICAgIGZ1bmN0aW9uIHRyYW5zZm9ybShkaXYpIHsK
KyAgICAgICAgICAgIHZhciB4c2x0ID0gbmV3IFhTTFRQcm9jZXNzb3IoKTsKKyAgICAgICAgICAg
IHhzbHQuaW1wb3J0U3R5bGVzaGVldCh4c2x0RG9jKTsKKyAgICAgICAgICAgIHZhciByZXN1bHRE
b2MgPSB4c2x0LnRyYW5zZm9ybVRvRG9jdW1lbnQoeG1sRG9jKTsKKyAgICAgICAgICAgIHZhciBm
cmFnbWVudCA9IGRvY3VtZW50LmltcG9ydE5vZGUocmVzdWx0RG9jLmRvY3VtZW50RWxlbWVudCwg
dHJ1ZSk7CisgICAgICAgICAgICBkaXYucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoZnJhZ21lbnQs
IGRpdik7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBsb2FkKCkgeworICAgICAgICAg
ICAgaWYgKCF4c2x0RG9jKSB7CisgICAgICAgICAgICAgICAgeHNsdERvYyA9IHN1YmZyYW1lLnhz
bHREb2M7CisgICAgICAgICAgICAgICAgdHJhbnNmb3JtKGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCd0cmFuc2Zvcm0xJykpOworICAgICAgICAgICAgICAgIHN1YmZyYW1lLndpbmRvdy5sb2NhdGlv
biA9ICJodHRwOi8vMTI3LjAuMC4xOjgwMDAveHNsL3Jlc291cmNlcy90cmFuc2Zvcm0tZnJhbWVk
LXN1YmZyYW1lMi54aHRtbCI7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IHZhciBkaXYyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RyYW5zZm9ybTInKTsKKworICAg
ICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybShkaXYyKTsK
KyAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRo
aXMgdHJhbnNmb3JtYXRpb24gc2hvdWxkIGZhaWwKKyAgICAgICAgICAgICAgICAgICAgZGl2Mi5p
bm5lckhUTUwgPSAiVGhpcyB0cmFuc2Zvcm1hdGlvbiBoYXMgZmFpbGVkIGJlY2F1c2UgdGhlIGZy
YW1lIG5vIGxvbmdlciBoYXMgdGhlIHNhbWUgb3JpZ2luLiI7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAg
ICAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAg
ICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBDaGlsZEZyYW1lc0FzVGV4
dCgpOworICAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25l
KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgXV0+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwPlRlc3QgZm9yIDxhIGhyZWY9Imh0dHA6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzEzIj5idWcgMTAzMTM8L2E+OgoreHNs
OmltcG9ydCBkb2Vzbid0IHdvcmsgaW4gc3R5bGVzaGVldHMgbG9hZGVkIHZpYSBYTUxIdHRwUmVx
dWVzdC48L3A+Cis8ZGl2IGlkPSJ0cmFuc2Zvcm0xIj4KK0l0J3MgbmljZSB0aGF0IHRoaXMgaGFz
bid0IGNyYXNoZWQsIGJ1dCB0aGUgWFNMIHRyYW5zZm9ybWF0aW9uIGhhcyBmYWlsZWQuCis8L2Rp
dj4KKzxkaXYgaWQ9InRyYW5zZm9ybTIiPgorVGhpcyB0cmFuc2Zvcm1hdGlvbiBzaG91bGQgZmFp
bCBiZWNhdXNlIHRoZSBmcmFtZSBubyBsb25nZXIgaGFzIHRoZSBzYW1lIG9yaWdpbi4KKzwvZGl2
PgorPGlmcmFtZSBpZD0ic3ViZnJhbWUiIHNyYz0icmVzb3VyY2VzL3RyYW5zZm9ybS1mcmFtZWQt
c3ViZnJhbWUxLnhodG1sIiBvbmxvYWQ9ImxvYWQoKSI+Cis8L2lmcmFtZT4KKzwvYm9keT4KKzwv
aHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3RyYW5zZm9ybS14aHItZG9j
LWNyb3NzLW9yaWdpbi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy94c2wvdHJhbnNmb3JtLXhoci1kb2MtY3Jvc3Mtb3JpZ2luLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3RyYW5zZm9ybS14aHIt
ZG9jLWNyb3NzLW9yaWdpbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBA
QAorVGVzdCBmb3IgYnVnIDEwMzEzOiB4c2w6aW1wb3J0IGRvZXNuJ3Qgd29yayBpbiBzdHlsZXNo
ZWV0cyBsb2FkZWQgdmlhIFhNTEh0dHBSZXF1ZXN0LgorCitUaGlzIHRyYW5zZm9ybWF0aW9uIGhh
cyBmYWlsZWQgYmVjYXVzZSBpdCBpcyB0cnlpbmcgdG8gaW1wb3J0IGEgc3R5bGVzaGVldCBjcm9z
cy1vcmlnaW4uCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0teGhy
LWRvYy1jcm9zcy1vcmlnaW4ueGh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy94c2wvdHJhbnNmb3JtLXhoci1kb2MtY3Jvc3Mtb3JpZ2luLnhodG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvdHJhbnNmb3JtLXhoci1kb2MtY3Jvc3Mt
b3JpZ2luLnhodG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ0IEBACis8P3htbCB2ZXJzaW9u
PSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0Mv
L0RURCBYSFRNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0
bWwxMS5kdGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHht
bDpsYW5nPSJlbiI+Cis8aGVhZD4KKyAgICA8dGl0bGU+eHNsIGltcG9ydCB0ZXN0PC90aXRsZT4K
KyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgICAgIGZ1bmN0aW9uIGxv
YWQoKSB7CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAg
ICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworICAgICAg
ICAgICAgdmFyIHJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgICAgICAgICAgdmFyIHhz
bHQgPSBuZXcgWFNMVFByb2Nlc3NvcigpOworICAgICAgICAgICAgcmVxLm9wZW4oJ0dFVCcsICdy
ZXNvdXJjZXMveGhyLWRvYy1jcm9zcy1vcmlnaW4ueHNsJywgZmFsc2UpOworICAgICAgICAgICAg
cmVxLnNlbmQobnVsbCk7CisgICAgICAgICAgICB4c2x0LmltcG9ydFN0eWxlc2hlZXQocmVxLnJl
c3BvbnNlWE1MKTsKKworICAgICAgICAgICAgcmVxLm9wZW4oJ0dFVCcsICdyZXNvdXJjZXMveGhy
LWRvYy54bWwnLCBmYWxzZSk7CisgICAgICAgICAgICByZXEuc2VuZChudWxsKTsKKworICAgICAg
ICAgICAgdmFyIGRvYzsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgZG9jID0g
eHNsdC50cmFuc2Zvcm1Ub0RvY3VtZW50KHJlcS5yZXNwb25zZVhNTCk7CisgICAgICAgICAgICB9
IGNhdGNoIChlKSB7CisgICAgICAgICAgICAgICAgLy8gVGhpcyB0cmFuc2Zvcm1hdGlvbiBzaG91
bGQgZmFpbAorICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2RpdicpOworCisgICAgICAgICAgICBpZiAoZG9jKSB7CisgICAgICAg
ICAgICAgICAgdmFyIGZyYWdtZW50ID0gZG9jdW1lbnQuaW1wb3J0Tm9kZShkb2MuZG9jdW1lbnRF
bGVtZW50LCB0cnVlKTsKKyAgICAgICAgICAgICAgICBkaXYucGFyZW50Tm9kZS5yZXBsYWNlQ2hp
bGQoZnJhZ21lbnQsIGRpdik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IGRpdi5pbm5lckhUTUwgPSAiVGhpcyB0cmFuc2Zvcm1hdGlvbiBoYXMgZmFpbGVkIGJlY2F1c2Ug
aXQgaXMgdHJ5aW5nIHRvIGltcG9ydCBhIHN0eWxlc2hlZXQgY3Jvc3Mtb3JpZ2luLiI7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9h
ZD0ibG9hZCgpIj4KKzxwPlRlc3QgZm9yIDxhIGhyZWY9Imh0dHA6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEwMzEzIj5idWcgMTAzMTM8L2E+OgoreHNsOmltcG9ydCBkb2Vzbid0
IHdvcmsgaW4gc3R5bGVzaGVldHMgbG9hZGVkIHZpYSBYTUxIdHRwUmVxdWVzdC48L3A+CisKKzxk
aXYgaWQ9ImRpdiI+VGhpcyB0cmFuc2Zvcm1hdGlvbiBzaG91bGQgZmFpbCBiZWNhdXNlIGl0IGlz
IHRyeWluZyB0byBpbXBvcnQgYSBzdHlsZXNoZWV0IGNyb3NzLW9yaWdpbi48L2Rpdj4KKzwvYm9k
eT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3RyYW5zZm9ybS14
aHItZG9jLWZyb20tYWxsb3dlZC1jcm9zcy1vcmlnaW4tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3RyYW5zZm9ybS14aHItZG9jLWZyb20tYWxs
b3dlZC1jcm9zcy1vcmlnaW4tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy94c2wvdHJhbnNmb3JtLXhoci1kb2MtZnJvbS1hbGxvd2VkLWNyb3NzLW9y
aWdpbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorVGVzdCBmb3Ig
YnVnIDEwMzEzOiB4c2w6aW1wb3J0IGRvZXNuJ3Qgd29yayBpbiBzdHlsZXNoZWV0cyBsb2FkZWQg
dmlhIFhNTEh0dHBSZXF1ZXN0LgorCitTVUNDRVNTCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3hzbC90cmFuc2Zvcm0teGhyLWRvYy1mcm9tLWFsbG93ZWQtY3Jvc3Mtb3JpZ2luLnhodG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3RyYW5zZm9ybS14aHIt
ZG9jLWZyb20tYWxsb3dlZC1jcm9zcy1vcmlnaW4ueGh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0teGhyLWRvYy1mcm9tLWFsbG93ZWQtY3Jv
c3Mtb3JpZ2luLnhodG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMzIEBACis8P3htbCB2ZXJz
aW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9X
M0MvL0RURCBYSFRNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQv
eGh0bWwxMS5kdGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwi
IHhtbDpsYW5nPSJlbiI+Cis8aGVhZD4KKyAgICA8dGl0bGU+eHNsIGltcG9ydCB0ZXN0PC90aXRs
ZT4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgICAgIGZ1bmN0aW9u
IGxvYWQoKSB7CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQor
ICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworICAg
ICAgICAgICAgdmFyIHJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgICAgICAgICAgdmFy
IHhzbHQgPSBuZXcgWFNMVFByb2Nlc3NvcigpOworICAgICAgICAgICAgcmVxLm9wZW4oJ0dFVCcs
ICdyZXNvdXJjZXMveGhyLWRvYy1mcm9tLWFsbG93ZWQtY3Jvc3Mtb3JpZ2luLnhzbCcsIGZhbHNl
KTsKKyAgICAgICAgICAgIHJlcS5zZW5kKG51bGwpOworICAgICAgICAgICAgeHNsdC5pbXBvcnRT
dHlsZXNoZWV0KHJlcS5yZXNwb25zZVhNTCk7CisKKyAgICAgICAgICAgIHJlcS5vcGVuKCdHRVQn
LCAncmVzb3VyY2VzL3hoci1kb2MueG1sJywgZmFsc2UpOworICAgICAgICAgICAgcmVxLnNlbmQo
bnVsbCk7CisgICAgICAgICAgICB2YXIgZG9jID0geHNsdC50cmFuc2Zvcm1Ub0RvY3VtZW50KHJl
cS5yZXNwb25zZVhNTCk7CisgICAgICAgICAgICB2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5pbXBv
cnROb2RlKGRvYy5kb2N1bWVudEVsZW1lbnQsIHRydWUpOworCisgICAgICAgICAgICB2YXIgZGl2
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RpdicpOworICAgICAgICAgICAgZGl2LnBhcmVu
dE5vZGUucmVwbGFjZUNoaWxkKGZyYWdtZW50LCBkaXYpOworICAgICAgICB9CisgICAgPC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9ImxvYWQoKSI+Cis8cD5UZXN0IGZvciA8YSBocmVm
PSJodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDMxMyI+YnVnIDEwMzEz
PC9hPjoKK3hzbDppbXBvcnQgZG9lc24ndCB3b3JrIGluIHN0eWxlc2hlZXRzIGxvYWRlZCB2aWEg
WE1MSHR0cFJlcXVlc3QuPC9wPgorCis8ZGl2IGlkPSJkaXYiPkl0J3MgbmljZSB0aGF0IHRoaXMg
aGFzbid0IGNyYXNoZWQsIGJ1dCB0aGUgWFNMIHRyYW5zZm9ybWF0aW9uIGhhcyBmYWlsZWQuPC9k
aXY+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9y
ZXNvdXJjZXMvYWxsb3ctY3Jvc3Mtb3JpZ2luLWhlYWRlci5jZ2kKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL2FsbG93LWNyb3NzLW9yaWdpbi1oZWFk
ZXIuY2dpCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvcmVzb3Vy
Y2VzL2FsbG93LWNyb3NzLW9yaWdpbi1oZWFkZXIuY2dpCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDExIEBACisjIS91c3IvYmluL3BlcmwgLXcKK3VzZSBzdHJpY3Q7CisKK3ByaW50ICJDb250ZW50
LVR5cGU6IGFwcGxpY2F0aW9uL3htbFxuIjsKK3ByaW50ICJDYWNoZS1Db250cm9sOiBuby1jYWNo
ZSwgbm8tc3RvcmVcbiI7CitwcmludCAiQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luOiAqXG5c
biI7CisKK215ICRmaWxlbmFtZSA9ICRFTlZ7IlFVRVJZX1NUUklORyJ9Oworb3BlbiBGSUxFLCAk
ZmlsZW5hbWUgb3IgZGllOworcHJpbnQgPEZJTEU+OworY2xvc2UgRklMRTsKSW5kZXg6IExheW91
dFRlc3RzL2h0dHAvdGVzdHMveHNsL3Jlc291cmNlcy90cmFuc2Zvcm0tZnJhbWVkLXN1YmZyYW1l
MS54aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNvdXJj
ZXMvdHJhbnNmb3JtLWZyYW1lZC1zdWJmcmFtZTEueGh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMvdHJhbnNmb3JtLWZyYW1lZC1zdWJmcmFt
ZTEueGh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjQgQEAKKzw/eG1sIHZlcnNpb249IjEu
MCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFRE
IFhIVE1MIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDExL0RURC94aHRtbDEx
LmR0ZCI+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxh
bmc9ImVuIj4KKzxoZWFkPgorICAgIDx0aXRsZT54c2wgaW1wb3J0IHRlc3Q8L3RpdGxlPgorICAg
IDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IVtDREFUQVsKKyAgICAgICAgdmFyIHhz
bHRTdHIgPQorICAgICAgICAgICAgJzx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiJyArCisg
ICAgICAgICAgICAnICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5z
Zm9ybSInICsKKyAgICAgICAgICAgICcgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3ho
dG1sIj4nICsKKyAgICAgICAgICAgICc8eHNsOmltcG9ydCBocmVmPSJ4aHItZG9jLWltcG9ydGVk
LnhzbCIgLz4nICsKKyAgICAgICAgICAgICc8eHNsOnRlbXBsYXRlIG1hdGNoPSIvcm9vdCI+JyAr
CisgICAgICAgICAgICAnICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJ3b3JrcyIgLz4nICsK
KyAgICAgICAgICAgICc8L3hzbDp0ZW1wbGF0ZT4nICsKKyAgICAgICAgICAgICc8L3hzbDpzdHls
ZXNoZWV0Pic7CisKKyAgICAgICAgdmFyIHBhcnNlciA9IG5ldyBET01QYXJzZXIoKTsKKyAgICAg
ICAgdmFyIHhzbHREb2MgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKHhzbHRTdHIsICJhcHBsaWNh
dGlvbi94bWwiKTsKKyAgICBdXT48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5Pgorc3ViZnJhbWUg
MQorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvcmVz
b3VyY2VzL3RyYW5zZm9ybS1mcmFtZWQtc3ViZnJhbWUyLnhodG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3Jlc291cmNlcy90cmFuc2Zvcm0tZnJhbWVkLXN1YmZy
YW1lMi54aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3Jl
c291cmNlcy90cmFuc2Zvcm0tZnJhbWVkLXN1YmZyYW1lMi54aHRtbAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwh
RE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTiIgImh0dHA6Ly93
d3cudzMub3JnL1RSL3hodG1sMTEvRFREL3hodG1sMTEuZHRkIj4KKzxodG1sIHhtbG5zPSJodHRw
Oi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iPgorPGhlYWQ+CisgICAgPHRp
dGxlPnhzbCBpbXBvcnQgdGVzdDwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KK3N1YmZyYW1lIDIK
KzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3Jlc291
cmNlcy94aHItZG9jLWNyb3NzLW9yaWdpbi54c2wKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL3hoci1kb2MtY3Jvc3Mtb3JpZ2luLnhzbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3Jlc291cmNlcy94aHItZG9jLWNy
b3NzLW9yaWdpbi54c2wJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKKzw/eG1sIHZlcnNp
b249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4w
IgorICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKKyAg
eG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgorCis8eHNsOmltcG9ydCBocmVm
PSJodHRwOi8vbG9jYWxob3N0OjgwMDAveHNsL3Jlc291cmNlcy94aHItZG9jLWltcG9ydGVkLnhz
bCIgLz4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iL3Jvb3QiPgorICAgIDx4c2w6Y2FsbC10ZW1w
bGF0ZSBuYW1lPSJ3b3JrcyIgLz4KKzwveHNsOnRlbXBsYXRlPgorCis8L3hzbDpzdHlsZXNoZWV0
PgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL3hoci1kb2MtZnJv
bS1hbGxvd2VkLWNyb3NzLW9yaWdpbi54c2wKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy94c2wvcmVzb3VyY2VzL3hoci1kb2MtZnJvbS1hbGxvd2VkLWNyb3NzLW9yaWdpbi54
c2wJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMv
eGhyLWRvYy1mcm9tLWFsbG93ZWQtY3Jvc3Mtb3JpZ2luLnhzbAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzx4c2w6
c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiCisgIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcv
MTk5OS9YU0wvVHJhbnNmb3JtIgorICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRt
bCI+CisKKzx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC94c2wvcmVzb3Vy
Y2VzL2FsbG93LWNyb3NzLW9yaWdpbi1oZWFkZXIuY2dpP3hoci1kb2MtaW1wb3J0ZWQueHNsIiAv
PgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIvcm9vdCI+CisgICAgPHhzbDpjYWxsLXRlbXBsYXRl
IG5hbWU9IndvcmtzIiAvPgorPC94c2w6dGVtcGxhdGU+CisKKzwveHNsOnN0eWxlc2hlZXQ+Cklu
ZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMveGhyLWRvYy1pbXBvcnRl
ZC54c2wKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvcmVzb3VyY2Vz
L3hoci1kb2MtaW1wb3J0ZWQueHNsCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy94c2wvcmVzb3VyY2VzL3hoci1kb2MtaW1wb3J0ZWQueHNsCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDE0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPHhz
bDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCIKKyAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9y
Zy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3ho
dG1sIj4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iL3Jvb3QiPgorICAgIDxkaXYgY2xhc3M9ImRl
ZmF1bHQiPkZBSUw6IEluY29ycmVjdCB0cmFuc2Zvcm1hdGlvbi48L2Rpdj4KKzwveHNsOnRlbXBs
YXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9IndvcmtzIj4KKyAgICA8ZGl2IGNsYXNzPSJvdmVy
cmlkZGVuIj5TVUNDRVNTPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPC94c2w6c3R5bGVzaGVl
dD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3Jlc291cmNlcy94aHItZG9jLnht
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMveGhy
LWRvYy54bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNv
dXJjZXMveGhyLWRvYy54bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorPD94bWwgdmVy
c2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzw/eG1sLXN0eWxlc2hlZXQgdHlwZT0idGV4
dC94c2wiIGhyZWY9Inhoci1kb2MueHNsIj8+Cis8cm9vdC8+CkluZGV4OiBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMveGhyLWRvYy54c2wKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL3hoci1kb2MueHNsCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL3hoci1kb2MueHNsCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1
dGYtOCI/PgorPHhzbDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCIKKyAgeG1sbnM6eHNsPSJodHRw
Oi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisgIHhtbG5zPSJodHRwOi8vd3d3Lncz
Lm9yZy8xOTk5L3hodG1sIj4KKworPHhzbDppbXBvcnQgaHJlZj0ieGhyLWRvYy1pbXBvcnRlZC54
c2wiIC8+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii9yb290Ij4KKyAgICA8eHNsOmNhbGwtdGVt
cGxhdGUgbmFtZT0id29ya3MiIC8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPC94c2w6c3R5bGVzaGVl
dD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84709</attachid>
            <date>2011-03-04 01:03:53 -0800</date>
            <delta_ts>2011-05-05 01:31:05 -0700</delta_ts>
            <desc>New proposed patch</desc>
            <filename>bug10313_110304.patch</filename>
            <type>text/plain</type>
            <size>54029</size>
            <attacher name="Andreas Wictor">andreas.wictor</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwMTY4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzggQEAKKzIwMTEtMDMtMDMgIEFuZHJlYXMg
V2ljdG9yICA8YW5kcmVhcy53Y2l0b3JAeGNlcmlvbi5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgeHNsOmltcG9ydCBhbmQgZG9jdW1lbnQoKSBk
b24ndCB3b3JrIGluIHN0eWxlc2hlZXRzIGxvYWRlZCB2aWEgWE1MSHR0cFJlcXVlc3QKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzEzCisKKyAgICAg
ICAgSW50cm9kdWNlZCB0aGUgY29uY2VwdCBvZiBhICJvcmlnaW4gZG9jdW1lbnQiIHJlZmVyZW5j
ZSBvbiBmcmFtZWxlc3MKKyAgICAgICAgZG9jdW1lbnRzIGNyZWF0ZWQgYnkgWE1MSHR0cFJlcXVl
c3QsIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZURvY3VtZW50LAorICAgICAgICBET01Q
YXJzZXIucGFyc2VGcm9tU3RyaW5nIGFuZCBYU0xUUHJvY2Vzc29yLnRyYW5zZm9ybVRvRG9jdW1l
bnQuCisgICAgICAgIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgZm9yIGZyYW1lbGVzcyBkb2N1bWVu
dHMgdG8gYWNjZXNzIHN1YnJlc291cmNlcy4KKworICAgICAgICBUZXN0czogZmFzdC94c2wvdHJh
bnNmb3JtLWRvY2ltcGwtZG9jLnhodG1sCisgICAgICAgICAgICAgICBmYXN0L3hzbC90cmFuc2Zv
cm0tZG9tcGFyc2VyLWRvYy54aHRtbAorICAgICAgICAgICAgICAgZmFzdC94c2wvdHJhbnNmb3Jt
LXRyYW5zZm9ybWVkLWRvYy54aHRtbAorICAgICAgICAgICAgICAgaHR0cC90ZXN0cy94c2wvdHJh
bnNmb3JtLWZyYW1lZC1kb2MueGh0bWwKKyAgICAgICAgICAgICAgIGh0dHAvdGVzdHMveHNsL3Ry
YW5zZm9ybS14aHItZG9jLWNyb3NzLW9yaWdpbi54aHRtbAorICAgICAgICAgICAgICAgaHR0cC90
ZXN0cy94c2wvdHJhbnNmb3JtLXhoci1kb2MtZnJvbS1hbGxvd2VkLWNyb3NzLW9yaWdpbi54aHRt
bAorCisgICAgICAgICogYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yQ3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTWFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9Eb2N1bWVudCk6IFVz
ZSBjdXJyZW50IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgYXMgZmlyc3QgYXJndW1lbnQgdG8gdHJh
bnNmb3JtVG9Eb2N1bWVudC4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhYU0xUUHJv
Y2Vzc29yQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4WFNMVFByb2Nlc3Nvcjo6dHJh
bnNmb3JtVG9Eb2N1bWVudENhbGxiYWNrKTogVXNlIGN1cnJlbnQgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCBhcyBmaXJzdCBhcmd1bWVudCB0byB0cmFuc2Zvcm1Ub0RvY3VtZW50LgorICAgICAgICAq
IGRvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01JbXBsZW1l
bnRhdGlvbjo6Y3JlYXRlRG9jdW1lbnQpOiBSdW4gc2V0T3JpZ2luRG9jdW1lbnQgb24gdGhlIHJl
c3VsdGluZyBkb2N1bWVudC4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnQ6OnNldE9yaWdpbkRvY3VtZW50KTogVGhpcyBmdW5jdGlvbiBzdG9y
ZXMgYSByZWZlcmVuY2UgdG8gdGhlIGRvY3VtZW50IHdoZXJlIHRoaXMgZG9jdW1lbnQKKyAgICAg
ICAgb3JpZ2luYXRlZCBmcm9tLiBUaGlzIGlzIHVzZWQgZm9yIGZyYW1lbGVzcyBkb2N1bWVudHMs
IHNvIHRoYXQgd2UgY2FuCisgICAgICAgIGZpbmQgYSBmcmFtZSB3aGVuIHdlIGFyZSBsb2FkaW5n
IHN1YnJlc291cmNlcy4gQWxzbywgYmVjYXVzZSBmcmFtZWxlc3MKKyAgICAgICAgZG9jdW1lbnRz
IGRvbid0IGdldCBhIFNlY3VyaXR5T3JpZ2luIHdoZW4gY29uc3RydWN0ZWQsIHdlIG5lZWQgdG8g
c2V0CisgICAgICAgIGl0IGhlcmUgdG8gYmUgYWJsZSB0byBsb2FkIHN1YnJlc291cmNlcy4KKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpmaW5kRnJhbWVGb3JTdWJyZXNvdXJjZUxvYWRzKTog
UmV0dXJucyBhIGZyYW1lIGZyb20gZWl0aGVyIHRoZSBkb2N1bWVudCBvciB0aGUgZG9jdW1lbnQg
aXQgb3JpZ2luYXRlZCBmcm9tLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmFwcGx5WFNM
VHJhbnNmb3JtKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50OjpvcmlnaW5Eb2N1bWVudCk6CisgICAgICAgICogbG9hZGVyL0RvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRocmVhZGFibGVM
b2FkZXI6OmxvYWRSZXF1ZXN0KTogVXNlIHRoZSBuZXcgZmluZEZyYW1lRm9yU3VicmVzb3VyY2VM
b2FkcyBtZXRob2Qgb24gZG9jdW1lbnRzIGFuZCB1c2UgdGhlCisgICAgICAgIG5ldyBsb2FkUmVz
b3VyY2VTeW5jaHJvbm91c2x5IG92ZXJsb2FkIHRoYXQgdGFrZXMgYSByZWZlcnJlciBzdHJpbmcu
CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KTogQWRkZWQgYSBvdmVybG9hZCB0
byBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5IHRoYXQgdGFrZXMgdGhlIG91dGdvaW5nIHJlZmVy
cmVyIGFzIGFyZ3VtZW50LgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5oOgorICAgICAg
ICAqIHhtbC9ET01QYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NUGFyc2VyOjpwYXJz
ZUZyb21TdHJpbmcpOiBSdW4gc2V0T3JpZ2luRG9jdW1lbnQgb24gdGhlIHJlc3VsdGluZyBkb2N1
bWVudC4KKyAgICAgICAgKiB4bWwvRE9NUGFyc2VyLmg6CisgICAgICAgICogeG1sL0RPTVBhcnNl
ci5pZGw6IEFkZGVkIENhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgYXR0cmlidXRlIHRv
IHBhcnNlRnJvbVN0cmluZy4KKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlWE1MKTogUnVuIHNldE9yaWdp
bkRvY3VtZW50IG9uIHRoZSByZXN1bHRpbmcgZG9jdW1lbnQuCisgICAgICAgICogeG1sL1hNTFRy
ZWVWaWV3ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MVHJlZVZpZXdlcjo6dHJhbnNmb3Jt
RG9jdW1lbnRUb1RyZWVWaWV3KToKKyAgICAgICAgKiB4bWwvWFNMSW1wb3J0UnVsZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpYU0xJbXBvcnRSdWxlOjpsb2FkU2hlZXQpOiBMb2FkIGltcG9ydGVk
IGRvY3VtZW50cyBzeW5jaHJvbm91c2x5IGlmIGludm9rZWQgYnkgamF2YXNjcmlwdC4KKyAgICAg
ICAgVGhlIHN5bmNocm9ub3VzIGxvYWQgaXMgcGVyZm9ybWVkIGJ5IERvY3VtZW50VGhyZWFkYWJs
ZUxvYWRlciB0aGF0IHJlcXVpcmVzIGEgZG9jdW1lbnQgdG8gbG9hZCBzdWIgcmVzb3VyY2VzLiBU
aGF0IGRvY3VtZW50cyBkb2VzIG5vdAorICAgICAgICBhbHdheXMgZXhpc3Qgd2hlbiBpbXBvcnRp
bmcgeHNsIHN0eWxlc2hlZXRzLCBzbyBpbiB0aGF0IGNhc2Ugd2UgY3JlYXRlIGEgdGVtcG9yYXJ5
IGRvY3VtZW50IGZvciB0aGUgZHVyYXRpb24gb2YgdGhpcyBsb2FkLgorICAgICAgICAoV2ViQ29y
ZTo6WFNMSW1wb3J0UnVsZTo6ZmluaXNoTG9hZGluZ1NoZWV0QXN5bmNocm9ub3VzbHkpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1wb3J0TG9hZGVyQ2xpZW50OjpJbXBvcnRMb2FkZXJDbGllbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1wb3J0TG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlUmVzcG9uc2Up
OgorICAgICAgICAoV2ViQ29yZTo6SW1wb3J0TG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpJbXBvcnRMb2FkZXJDbGllbnQ6OmRpZEZhaWwpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1wb3J0TG9hZGVyQ2xpZW50OjpyYXdEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkltcG9ydExvYWRlckNsaWVudDo6cmVzcG9uc2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6
SW1wb3J0TG9hZGVyQ2xpZW50OjpmYWlsZWQpOgorICAgICAgICAoV2ViQ29yZTo6WFNMSW1wb3J0
UnVsZTo6ZmluaXNoTG9hZGluZ1NoZWV0U3luY2hyb25vdXNseSk6CisgICAgICAgICogeG1sL1hT
TEltcG9ydFJ1bGUuaDoKKyAgICAgICAgKiB4bWwvWFNMVFByb2Nlc3Nvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpYU0xUUHJvY2Vzc29yOjpjcmVhdGVEb2N1bWVudEZyb21Tb3VyY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6WFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9Eb2N1bWVudCk6CisgICAg
ICAgICogeG1sL1hTTFRQcm9jZXNzb3IuaDoKKyAgICAgICAgKiB4bWwvWFNMVFByb2Nlc3Nvckxp
YnhzbHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9hZERvY3VtZW50TG9hZGVyQ2xpZW50OjpM
b2FkRG9jdW1lbnRMb2FkZXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6TG9hZERvY3VtZW50
TG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpMb2FkRG9j
dW1lbnRMb2FkZXJDbGllbnQ6OmRpZEZhaWwpOgorICAgICAgICAoV2ViQ29yZTo6TG9hZERvY3Vt
ZW50TG9hZGVyQ2xpZW50OjpyYXdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkxvYWREb2N1bWVu
dExvYWRlckNsaWVudDo6ZmFpbGVkKToKKyAgICAgICAgKFdlYkNvcmU6OmRvY0xvYWRlckZ1bmMp
OiBVc2UgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyIHRvIGxvYWQgZG9jdW1lbnRzLgorCiAyMDEx
LTAzLTAyICBEYW5pZWwgQ2hlbmcgIDxkY2hlbmdAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IERhdmlkIExldmluLgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNYU0xUUHJvY2Vzc29yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1hTTFRQcm9jZXNzb3JDdXN0b20uY3BwCShyZXZpc2lvbiA4MDE2OCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3NvckN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc1LDggKzc1LDkgQEAgSlNWYWx1ZSBKU1hTTFRQcm9jZXNzb3I6OnRy
YW5zZm9ybVRvRG9jdQogewogICAgIEpTVmFsdWUgbm9kZVZhbCA9IGV4ZWMtPmFyZ3VtZW50KDAp
OwogICAgIGlmIChub2RlVmFsLmluaGVyaXRzKCZKU05vZGU6OnNfaW5mbykpIHsKKyAgICAgICAg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0Q29udGV4dCA9IHN0YXRpY19jYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpOwogICAgICAgICBKU05vZGUqIG5vZGUgPSBzdGF0aWNfY2FzdDxKU05vZGUq
Pihhc09iamVjdChub2RlVmFsKSk7Ci0gICAgICAgIFJlZlB0cjxEb2N1bWVudD4gcmVzdWx0RG9j
dW1lbnQgPSBpbXBsKCktPnRyYW5zZm9ybVRvRG9jdW1lbnQobm9kZS0+aW1wbCgpKTsKKyAgICAg
ICAgUmVmUHRyPERvY3VtZW50PiByZXN1bHREb2N1bWVudCA9IGltcGwoKS0+dHJhbnNmb3JtVG9E
b2N1bWVudChzY3JpcHRDb250ZXh0LCBub2RlLT5pbXBsKCkpOwogICAgICAgICBpZiAocmVzdWx0
RG9jdW1lbnQpCiAgICAgICAgICAgICByZXR1cm4gdG9KUyhleGVjLCByZXN1bHREb2N1bWVudC5n
ZXQoKSk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WFNMVFByb2Nlc3NvckN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WFNMVFByb2Nlc3NvckN1
c3RvbS5jcHAJKHJldmlzaW9uIDgwMTY4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4WFNMVFByb2Nlc3NvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDEy
ICs5MCwxMyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhYU0xUUHJvY2Vzc29yOjp0CiAgICAg
ICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAKICAgICBYU0xUUHJvY2Vzc29yKiBpbXAgPSBW
OFhTTFRQcm9jZXNzb3I6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOworICAgIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIHNjcmlwdENvbnRleHQgPSBnZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
CiAKICAgICBOb2RlKiBzb3VyY2UgPSBWOE5vZGU6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9i
amVjdD46OkNhc3QoYXJnc1swXSkpOwogICAgIGlmICghc291cmNlKQogICAgICAgICByZXR1cm4g
djg6OlVuZGVmaW5lZCgpOwogCi0gICAgUmVmUHRyPERvY3VtZW50PiByZXN1bHQgPSBpbXAtPnRy
YW5zZm9ybVRvRG9jdW1lbnQoc291cmNlKTsKKyAgICBSZWZQdHI8RG9jdW1lbnQ+IHJlc3VsdCA9
IGltcC0+dHJhbnNmb3JtVG9Eb2N1bWVudChzY3JpcHRDb250ZXh0LCBzb3VyY2UpOwogICAgIGlm
ICghcmVzdWx0KQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAJKHJldmlzaW9uIDgwMTY4KQorKysg
U291cmNlL1dlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjUwLDcgKzI1MCw3IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IERPTUltcGxlbWVudGF0aW9u
OjoKICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgfQotICAgIGRvYy0+c2V0U2VjdXJpdHlPcmlnaW4obV9vd25lckRvY3VtZW50LT5zZWN1cml0
eU9yaWdpbigpKTsKKyAgICBkb2MtPnNldE9yaWdpbkRvY3VtZW50KG1fb3duZXJEb2N1bWVudCk7
CiAKICAgICBSZWZQdHI8Tm9kZT4gZG9jdW1lbnRFbGVtZW50OwogICAgIGlmICghcXVhbGlmaWVk
TmFtZS5pc0VtcHR5KCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24g
ODAxNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzk4LDYgKzEzOTgsMzAgQEAgU2V0dGluZ3MqIERvY3VtZW50OjpzZXR0aW5ncygpIGNv
bnN0CiAgICAgcmV0dXJuIG1fZnJhbWUgPyBtX2ZyYW1lLT5zZXR0aW5ncygpIDogMDsKIH0KIAor
dm9pZCBEb2N1bWVudDo6c2V0T3JpZ2luRG9jdW1lbnQoUGFzc1JlZlB0cjxEb2N1bWVudD4gb3Jp
Z2luRG9jdW1lbnQpCit7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBzdG9yZXMgYSByZWZlcmVuY2Ug
dG8gdGhlIGRvY3VtZW50IHdoZXJlIHRoaXMgZG9jdW1lbnQKKyAgICAvLyBvcmlnaW5hdGVkIGZy
b20uIFRoaXMgaXMgdXNlZCBmb3IgZnJhbWVsZXNzIGRvY3VtZW50cywgc28gdGhhdCB3ZSBjYW4K
KyAgICAvLyBmaW5kIGEgZnJhbWUgd2hlbiB3ZSBhcmUgbG9hZGluZyBzdWJyZXNvdXJjZXMuIEFs
c28sIGJlY2F1c2UgZnJhbWVsZXNzCisgICAgLy8gZG9jdW1lbnRzIGRvbid0IGdldCBhIFNlY3Vy
aXR5T3JpZ2luIHdoZW4gY29uc3RydWN0ZWQsIHdlIG5lZWQgdG8gc2V0CisgICAgLy8gaXQgaGVy
ZSB0byBiZSBhYmxlIHRvIGxvYWQgc3VicmVzb3VyY2VzLgorCisgICAgQVNTRVJUKG9yaWdpbkRv
Y3VtZW50KTsKKyAgICBtX29yaWdpbkRvY3VtZW50ID0gb3JpZ2luRG9jdW1lbnQ7CisKKyAgICBB
U1NFUlQoc2VjdXJpdHlPcmlnaW4oKS0+aXNFbXB0eSgpKTsKKyAgICBzZXRTZWN1cml0eU9yaWdp
bihtX29yaWdpbkRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpKTsKK30KKworRnJhbWUqIERvY3Vt
ZW50OjpmaW5kRnJhbWVGb3JTdWJyZXNvdXJjZUxvYWRzKCkKK3sKKyAgICBmb3IgKERvY3VtZW50
KiBkb2N1bWVudCA9IHRoaXM7IGRvY3VtZW50OyBkb2N1bWVudCA9IGRvY3VtZW50LT5vcmlnaW5E
b2N1bWVudCgpKSB7CisgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUo
KSkKKyAgICAgICAgICAgIHJldHVybiBmcmFtZTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisK
IFBhc3NSZWZQdHI8UmFuZ2U+IERvY3VtZW50OjpjcmVhdGVSYW5nZSgpCiB7CiAgICAgcmV0dXJu
IFJhbmdlOjpjcmVhdGUodGhpcyk7CkBAIC00MDczLDcgKzQwOTcsNyBAQCB2b2lkIERvY3VtZW50
OjphcHBseVhTTFRyYW5zZm9ybShQcm9jZXNzCiAgICAgaWYgKCFwcm9jZXNzb3ItPnRyYW5zZm9y
bVRvU3RyaW5nKHRoaXMsIHJlc3VsdE1JTUVUeXBlLCBuZXdTb3VyY2UsIHJlc3VsdEVuY29kaW5n
KSkKICAgICAgICAgcmV0dXJuOwogICAgIC8vIEZJWE1FOiBJZiB0aGUgdHJhbnNmb3JtIGZhaWxl
ZCB3ZSBzaG91bGQgcHJvYmFibHkgcmVwb3J0IGFuIGVycm9yIChsaWtlIE1vemlsbGEgZG9lcyku
Ci0gICAgcHJvY2Vzc29yLT5jcmVhdGVEb2N1bWVudEZyb21Tb3VyY2UobmV3U291cmNlLCByZXN1
bHRFbmNvZGluZywgcmVzdWx0TUlNRVR5cGUsIHRoaXMsIGZyYW1lKCkpOworICAgIHByb2Nlc3Nv
ci0+Y3JlYXRlRG9jdW1lbnRGcm9tU291cmNlKG5ld1NvdXJjZSwgcmVzdWx0RW5jb2RpbmcsIHJl
c3VsdE1JTUVUeXBlLCB0aGlzLCBmcmFtZSgpLCAwKTsKIH0KIAogdm9pZCBEb2N1bWVudDo6c2V0
VHJhbnNmb3JtU291cmNlKFBhc3NPd25QdHI8VHJhbnNmb3JtU291cmNlPiBzb3VyY2UpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gODAxNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTE3LDYgKzUxNywxMCBAQCBwdWJsaWM6
CiAgICAgUGFnZSogcGFnZSgpIGNvbnN0OyAvLyBjYW4gYmUgTlVMTAogICAgIFNldHRpbmdzKiBz
ZXR0aW5ncygpIGNvbnN0OyAvLyBjYW4gYmUgTlVMTAogCisgICAgRG9jdW1lbnQqIG9yaWdpbkRv
Y3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW5Eb2N1bWVudC5nZXQoKTsgfQorICAgIHZv
aWQgc2V0T3JpZ2luRG9jdW1lbnQoUGFzc1JlZlB0cjxEb2N1bWVudD4pOworICAgIEZyYW1lKiBm
aW5kRnJhbWVGb3JTdWJyZXNvdXJjZUxvYWRzKCk7CisKICAgICBQYXNzUmVmUHRyPFJhbmdlPiBj
cmVhdGVSYW5nZSgpOwogCiAgICAgUGFzc1JlZlB0cjxOb2RlSXRlcmF0b3I+IGNyZWF0ZU5vZGVJ
dGVyYXRvcihOb2RlKiByb290LCB1bnNpZ25lZCB3aGF0VG9TaG93LApAQCAtMTE3Myw2ICsxMTc3
LDcgQEAgcHJpdmF0ZToKICAgICBEb2N1bWVudExvYWRlciogbV9kb2N1bWVudExvYWRlcjsKICAg
ICBPd25QdHI8Q2FjaGVkUmVzb3VyY2VMb2FkZXI+IG1fY2FjaGVkUmVzb3VyY2VMb2FkZXI7CiAg
ICAgUmVmUHRyPERvY3VtZW50UGFyc2VyPiBtX3BhcnNlcjsKKyAgICBSZWZQdHI8RG9jdW1lbnQ+
IG1fb3JpZ2luRG9jdW1lbnQ7CiAgICAgYm9vbCBtX3dlbGxGb3JtZWQ7CiAKICAgICAvLyBEb2N1
bWVudCBVUkxzLgpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJs
ZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50
VGhyZWFkYWJsZUxvYWRlci5jcHAJKHJldmlzaW9uIDgwMTY4KQorKysgU291cmNlL1dlYkNvcmUv
bG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1
Nyw4ICszNTcsMTEgQEAgdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXF1ZQog
ICAgIFJlc291cmNlRXJyb3IgZXJyb3I7CiAgICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZTsK
ICAgICB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2ln
bmVkIGxvbmc+OjptYXgoKTsKLSAgICBpZiAobV9kb2N1bWVudC0+ZnJhbWUoKSkKLSAgICAgICAg
aWRlbnRpZmllciA9IG1fZG9jdW1lbnQtPmZyYW1lKCktPmxvYWRlcigpLT5sb2FkUmVzb3VyY2VT
eW5jaHJvbm91c2x5KHJlcXVlc3QsIHN0b3JlZENyZWRlbnRpYWxzLCBlcnJvciwgcmVzcG9uc2Us
IGRhdGEpOworICAgIGlmIChGcmFtZSogZnJhbWUgPSBtX2RvY3VtZW50LT5maW5kRnJhbWVGb3JT
dWJyZXNvdXJjZUxvYWRzKCkpIHsKKyAgICAgICAgU3RyaW5nIHJlZmVycmVyID0gbV9kb2N1bWVu
dC0+dXJsKCkuc3RyaXBwZWRGb3JVc2VBc1JlZmVycmVyKCk7CisgICAgICAgIGlkZW50aWZpZXIg
PSBmcmFtZS0+bG9hZGVyKCktPmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoCisgICAgICAgICAg
ICByZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFscywgcmVmZXJyZXIsIGVycm9yLCByZXNwb25zZSwg
ZGF0YSk7CisgICAgfQogCiAgICAgLy8gTm8gZXhjZXB0aW9uIGZvciBmaWxlOi8vLyByZXNvdXJj
ZXMsIHNlZSA8cmRhcjovL3Byb2JsZW0vNDk2MjI5OD4uCiAgICAgLy8gQWxzbywgaWYgd2UgaGF2
ZSBhbiBIVFRQIHJlc3BvbnNlLCB0aGVuIGl0IHdhc24ndCBhIG5ldHdvcmsgZXJyb3IgaW4gZmFj
dC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gODAx
NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNzU3LDcgKzI3NTcsMTIgQEAgdm9pZCBGcmFtZUxvYWRlcjo6bG9hZFBvc3RSZXF1
ZXN0KGNvbnN0CiAKIHVuc2lnbmVkIGxvbmcgRnJhbWVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNo
cm9ub3VzbHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFs
cyBzdG9yZWRDcmVkZW50aWFscywgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEpCiB7Ci0gICAgU3RyaW5nIHJlZmVycmVy
ID0gbV9vdXRnb2luZ1JlZmVycmVyOworICAgIHJldHVybiBsb2FkUmVzb3VyY2VTeW5jaHJvbm91
c2x5KHJlcXVlc3QsIHN0b3JlZENyZWRlbnRpYWxzLCBtX291dGdvaW5nUmVmZXJyZXIsIGVycm9y
LCByZXNwb25zZSwgZGF0YSk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgRnJhbWVMb2FkZXI6OmxvYWRS
ZXNvdXJjZVN5bmNocm9ub3VzbHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9y
ZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscywgY29uc3QgU3RyaW5nJiBvdXRnb2luZ1Jl
ZmVycmVyLCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2Us
IFZlY3RvcjxjaGFyPiYgZGF0YSkKK3sKKyAgICBTdHJpbmcgcmVmZXJyZXIgPSBvdXRnb2luZ1Jl
ZmVycmVyOwogICAgIGlmIChTZWN1cml0eU9yaWdpbjo6c2hvdWxkSGlkZVJlZmVycmVyKHJlcXVl
c3QudXJsKCksIHJlZmVycmVyKSkKICAgICAgICAgcmVmZXJyZXIgPSBTdHJpbmcoKTsKICAgICAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCShyZXZpc2lvbiA4MDE2OCkKKysr
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjQsNiArMTI0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHJlcG9ydExvY2FsTG9hZEZh
aWxlZChGcmFtZSosIGNvbnN0IFN0cmluZyYgdXJsKTsKIAogICAgIHVuc2lnbmVkIGxvbmcgbG9h
ZFJlc291cmNlU3luY2hyb25vdXNseShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTdG9yZWRDcmVk
ZW50aWFscywgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4m
IGRhdGEpOworICAgIHVuc2lnbmVkIGxvbmcgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShjb25z
dCBSZXNvdXJjZVJlcXVlc3QmLCBTdG9yZWRDcmVkZW50aWFscywgY29uc3QgU3RyaW5nJiBvdXRn
b2luZ1JlZmVycmVyLCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3Rvcjxj
aGFyPiYgZGF0YSk7CiAKICAgICBib29sIGNhbkhhbmRsZVJlcXVlc3QoY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0Jik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9ET01QYXJzZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9ET01QYXJzZXIuY3BwCShyZXZpc2lvbiA4MDE2
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9ET01QYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNSwxMiArMjUsMTggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPERv
Y3VtZW50PiBET01QYXJzZXI6OnBhcnNlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0ciwgY29u
c3QgU3RyaW5nJiBjb250ZW50VHlwZSkKK1Bhc3NSZWZQdHI8RG9jdW1lbnQ+IERPTVBhcnNlcjo6
cGFyc2VGcm9tU3RyaW5nKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQsIGNvbnN0IFN0cmluZyYgc3RyLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKQogewog
ICAgIGlmICghRE9NSW1wbGVtZW50YXRpb246OmlzWE1MTUlNRVR5cGUoY29udGVudFR5cGUpKQog
ICAgICAgICByZXR1cm4gMDsKIAogICAgIFJlZlB0cjxEb2N1bWVudD4gZG9jID0gRE9NSW1wbGVt
ZW50YXRpb246OmNyZWF0ZURvY3VtZW50KGNvbnRlbnRUeXBlLCAwLCBLVVJMKCksIGZhbHNlKTsK
KworICAgIGlmIChzY3JpcHRFeGVjdXRpb25Db250ZXh0ICYmIHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAg
ICAgICBkb2MtPnNldE9yaWdpbkRvY3VtZW50KHN0YXRpY19jYXN0PERvY3VtZW50Kj4oc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCkpOworICAgIH0KKwogICAgIGRvYy0+c2V0Q29udGVudChzdHIpOwog
ICAgIHJldHVybiBkb2MucmVsZWFzZSgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUveG1sL0RP
TVBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9ET01QYXJzZXIuaAko
cmV2aXNpb24gODAxNjgpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvRE9NUGFyc2VyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDEyICsyNiwxMyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBEb2N1bWVudDsKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAKIGNsYXNzIERPTVBh
cnNlciA6IHB1YmxpYyBSZWZDb3VudGVkPERPTVBhcnNlcj4gewogcHVibGljOgogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPERPTVBhcnNlcj4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IERP
TVBhcnNlcik7IH0KIAotICAgIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IHBhcnNlRnJvbVN0cmluZyhj
b25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKTsKKyAgICBQYXNzUmVmUHRy
PERvY3VtZW50PiBwYXJzZUZyb21TdHJpbmcoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0
IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUpOwogCiBwcml2YXRlOgogICAgIERP
TVBhcnNlcigpIHsgfQpJbmRleDogU291cmNlL1dlYkNvcmUveG1sL0RPTVBhcnNlci5pZGwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL0RPTVBhcnNlci5pZGwJKHJldmlzaW9uIDgw
MTY4KQorKysgU291cmNlL1dlYkNvcmUveG1sL0RPTVBhcnNlci5pZGwJKHdvcmtpbmcgY29weSkK
QEAgLTE5LDYgKzE5LDYgQEAKIAogbW9kdWxlIHhwYXRoIHsKICAgICBpbnRlcmZhY2UgW0NhbkJl
Q29uc3RydWN0ZWRdIERPTVBhcnNlciB7Ci0gICAgICAgIERvY3VtZW50IHBhcnNlRnJvbVN0cmlu
ZyhpbiBET01TdHJpbmcgc3RyLCBpbiBET01TdHJpbmcgY29udGVudFR5cGUpOworICAgICAgICBb
Q2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gRG9jdW1lbnQgcGFyc2VGcm9tU3RyaW5n
KGluIERPTVN0cmluZyBzdHIsIGluIERPTVN0cmluZyBjb250ZW50VHlwZSk7CiAgICAgfTsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkocmV2aXNpb24gODAxNjgp
CisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNTAsNyArMjUwLDcgQEAgRG9jdW1lbnQqIFhNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZVhN
TChFeAogICAgICAgICAgICAgbV9yZXNwb25zZVhNTCA9IERvY3VtZW50OjpjcmVhdGUoMCwgbV91
cmwpOwogICAgICAgICAgICAgLy8gRklYTUU6IFNldCBMYXN0LU1vZGlmaWVkLgogICAgICAgICAg
ICAgbV9yZXNwb25zZVhNTC0+c2V0Q29udGVudChtX3Jlc3BvbnNlQnVpbGRlci50b1N0cmluZ1By
ZXNlcnZlQ2FwYWNpdHkoKSk7Ci0gICAgICAgICAgICBtX3Jlc3BvbnNlWE1MLT5zZXRTZWN1cml0
eU9yaWdpbihkb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKTsKKyAgICAgICAgICAgIG1fcmVz
cG9uc2VYTUwtPnNldE9yaWdpbkRvY3VtZW50KGRvY3VtZW50KCkpOwogICAgICAgICAgICAgaWYg
KCFtX3Jlc3BvbnNlWE1MLT53ZWxsRm9ybWVkKCkpCiAgICAgICAgICAgICAgICAgbV9yZXNwb25z
ZVhNTCA9IDA7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YTUxUcmVlVmll
d2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvWE1MVHJlZVZpZXdlci5j
cHAJKHJldmlzaW9uIDgwMTY4KQorKysgU291cmNlL1dlYkNvcmUveG1sL1hNTFRyZWVWaWV3ZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNyArMTAzLDcgQEAgdm9pZCBYTUxUcmVlVmlld2Vy
Ojp0cmFuc2Zvcm1Eb2N1bWVudFRvVAogICAgIEZyYW1lKiBmcmFtZSA9IG1fZG9jdW1lbnQtPmZy
YW1lKCk7CiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBpbnRyb2R1Y2UgZXJyb3IgaGFuZGxpbmcK
ICAgICBpZiAocHJvY2Vzc29yLT50cmFuc2Zvcm1Ub1N0cmluZyhtX2RvY3VtZW50LCByZXN1bHRN
SU1FVHlwZSwgbmV3U291cmNlLCByZXN1bHRFbmNvZGluZykpCi0gICAgICAgIHByb2Nlc3Nvci0+
Y3JlYXRlRG9jdW1lbnRGcm9tU291cmNlKG5ld1NvdXJjZSwgcmVzdWx0RW5jb2RpbmcsIHJlc3Vs
dE1JTUVUeXBlLCBtX2RvY3VtZW50LCBmcmFtZSk7CisgICAgICAgIHByb2Nlc3Nvci0+Y3JlYXRl
RG9jdW1lbnRGcm9tU291cmNlKG5ld1NvdXJjZSwgcmVzdWx0RW5jb2RpbmcsIHJlc3VsdE1JTUVU
eXBlLCBtX2RvY3VtZW50LCBmcmFtZSwgMCk7CiAgICAgLy8gTmV3IGRvY3VtZW50IHNob3VsZCBo
YXZlIGJlZW4gbG9hZGVkIGluIGZyYW1lLiBUZWxsIGl0IHRvIHVzZSB2aWV3IHNvdXJjZSBzdHls
ZXMuCiAgICAgZnJhbWUtPmRvY3VtZW50KCktPnNldFVzZXNWaWV3U291cmNlU3R5bGVzKHRydWUp
OwogICAgIGZyYW1lLT5kb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yQ2hhbmdlZChSZWNhbGNTdHls
ZUltbWVkaWF0ZWx5KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YU0xJbXBvcnRSdWxlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvWFNMSW1wb3J0UnVsZS5jcHAJKHJl
dmlzaW9uIDgwMTY4KQorKysgU291cmNlL1dlYkNvcmUveG1sL1hTTEltcG9ydFJ1bGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiwxMiBAQAogCiAjaW5jbHVkZSAiQ2FjaGVkWFNMU3R5
bGVTaGVldC5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJTZWN1
cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKKyNpbmNsdWRl
ICJUaHJlYWRhYmxlTG9hZGVyLmgiCisjaW5jbHVkZSAiVGhyZWFkYWJsZUxvYWRlckNsaWVudC5o
IgogI2luY2x1ZGUgIlhTTFN0eWxlU2hlZXQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
NzcsMjkgKzgzLDY1IEBAIGJvb2wgWFNMSW1wb3J0UnVsZTo6aXNMb2FkaW5nKCkKIAogdm9pZCBY
U0xJbXBvcnRSdWxlOjpsb2FkU2hlZXQoKQogewotICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBj
YWNoZWRSZXNvdXJjZUxvYWRlciA9IDA7CiAgICAgU3R5bGVCYXNlKiByb290ID0gdGhpczsKICAg
ICBTdHlsZUJhc2UqIHBhcmVudDsKKwogICAgIHdoaWxlICgocGFyZW50ID0gcm9vdC0+cGFyZW50
KCkpKQogICAgICAgICByb290ID0gcGFyZW50OwotICAgIGlmIChyb290LT5pc1hTTFN0eWxlU2hl
ZXQoKSkKLSAgICAgICAgY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBzdGF0aWNfY2FzdDxYU0xTdHls
ZVNoZWV0Kj4ocm9vdCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7Ci0gICAgCi0gICAgU3RyaW5n
IGFic0hyZWYgPSBtX3N0ckhyZWY7CisKKyAgICBBU1NFUlQocm9vdC0+aXNYU0xTdHlsZVNoZWV0
KCkpOworICAgIFhTTFN0eWxlU2hlZXQqIHJvb3RTdHlsZVNoZWV0ID0gc3RhdGljX2Nhc3Q8WFNM
U3R5bGVTaGVldCo+KHJvb3QpOworICAgIE5vZGUqIG93bmVyTm9kZSA9IHJvb3RTdHlsZVNoZWV0
LT5vd25lck5vZGUoKTsKKyAgICBEb2N1bWVudCogb3JpZ2luRG9jdW1lbnQgPSBvd25lck5vZGUg
PyBvd25lck5vZGUtPmRvY3VtZW50KCktPm9yaWdpbkRvY3VtZW50KCkgOiAwOworCiAgICAgWFNM
U3R5bGVTaGVldCogcGFyZW50U2hlZXQgPSBwYXJlbnRTdHlsZVNoZWV0KCk7Ci0gICAgaWYgKCFw
YXJlbnRTaGVldC0+ZmluYWxVUkwoKS5pc051bGwoKSkKLSAgICAgICAgLy8gdXNlIHBhcmVudCBz
dHlsZWhlZXQncyBVUkwgYXMgdGhlIGJhc2UgVVJMCi0gICAgICAgIGFic0hyZWYgPSBLVVJMKHBh
cmVudFNoZWV0LT5maW5hbFVSTCgpLCBtX3N0ckhyZWYpLnN0cmluZygpOwotICAgIAorICAgIEFT
U0VSVChwYXJlbnRTaGVldCk7CisKKyAgICBSZWZQdHI8RG9jdW1lbnQ+IHBhcmVudERvY3VtZW50
ID0gcGFyZW50U2hlZXQtPm93bmVyRG9jdW1lbnQoKTsKKworICAgIGlmICghcGFyZW50RG9jdW1l
bnQgfHwgcGFyZW50RG9jdW1lbnQtPnVybCgpLmlzTnVsbCgpIHx8IHBhcmVudERvY3VtZW50LT51
cmwoKSAhPSBwYXJlbnRTaGVldC0+ZmluYWxVUkwoKSkgeworICAgICAgICBLVVJMIHBhcmVudFVS
TDsKKworICAgICAgICBpZiAoIXBhcmVudFNoZWV0LT5maW5hbFVSTCgpLmlzTnVsbCgpKSB7Cisg
ICAgICAgICAgICAvLyBVc2UgcGFyZW50IHN0eWxlaGVldCdzIFVSTCBhcyB0aGUgYmFzZSBVUkwu
CisgICAgICAgICAgICBwYXJlbnRVUkwgPSBwYXJlbnRTaGVldC0+ZmluYWxVUkwoKTsKKyAgICAg
ICAgfSBlbHNlIGlmIChvcmlnaW5Eb2N1bWVudCkgeworICAgICAgICAgICAgLy8gV2hlbiBwYXJl
bnQgc3R5bGVzaGVldCBkb2Vzbid0IGhhdmUgYSBmaW5hbCBVUkwsIHVzZSBiYXNlIFVSTCBmcm9t
IHRoZQorICAgICAgICAgICAgLy8gZG9jdW1lbnQgdGhlIHJvb3Qgc3R5bGVzaGVldCBvcmlnaW5h
dGVkIGZyb20uIFRoaXMgY2FuIGhhcHBlbiB3aGVuIHRoZQorICAgICAgICAgICAgLy8gc3R5bGVz
aGVldCBpcyBjcmVhdGVkIHdpdGggRE9NUGFyc2VyLnBhcnNlRnJvbVN0cmluZygpLCBmb3IgZXhh
bXBsZS4KKyAgICAgICAgICAgIHBhcmVudFVSTCA9IG9yaWdpbkRvY3VtZW50LT51cmwoKTsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIENyZWF0ZSBhIGZha2UgZG9jdW1lbnQgdXNlZCBmb3IgdGhl
IGR1cmF0aW9uIG9mIHRoaXMgbG9hZC4KKyAgICAgICAgcGFyZW50RG9jdW1lbnQgPSBEb2N1bWVu
dDo6Y3JlYXRlKDAsIHBhcmVudFVSTCk7CisKKyAgICAgICAgaWYgKG9yaWdpbkRvY3VtZW50KQor
ICAgICAgICAgICAgcGFyZW50RG9jdW1lbnQtPnNldE9yaWdpbkRvY3VtZW50KG9yaWdpbkRvY3Vt
ZW50KTsKKyAgICB9CisKKyAgICBLVVJMIGFic0hyZWYgPSBwYXJlbnREb2N1bWVudC0+Y29tcGxl
dGVVUkwobV9zdHJIcmVmKTsKKwogICAgIC8vIENoZWNrIGZvciBhIGN5Y2xlIGluIG91ciBpbXBv
cnQgY2hhaW4uICBJZiB3ZSBlbmNvdW50ZXIgYSBzdHlsZXNoZWV0CiAgICAgLy8gaW4gb3VyIHBh
cmVudCBjaGFpbiB3aXRoIHRoZSBzYW1lIFVSTCwgdGhlbiBqdXN0IGJhaWwuCiAgICAgZm9yIChw
YXJlbnQgPSB0aGlzLT5wYXJlbnQoKTsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudCgp
KSB7Ci0gICAgICAgIGlmIChwYXJlbnQtPmlzWFNMU3R5bGVTaGVldCgpICYmIGFic0hyZWYgPT0g
c3RhdGljX2Nhc3Q8WFNMU3R5bGVTaGVldCo+KHBhcmVudCktPmZpbmFsVVJMKCkuc3RyaW5nKCkp
CisgICAgICAgIGlmIChwYXJlbnQtPmlzWFNMU3R5bGVTaGVldCgpICYmIGFic0hyZWYgPT0gc3Rh
dGljX2Nhc3Q8WFNMU3R5bGVTaGVldCo+KHBhcmVudCktPmZpbmFsVVJMKCkpCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgfQotICAgIAotICAgIG1fY2FjaGVkU2hlZXQgPSBjYWNoZWRSZXNvdXJj
ZUxvYWRlci0+cmVxdWVzdFhTTFN0eWxlU2hlZXQoYWJzSHJlZik7Ci0gICAgCisKKyAgICAvLyBX
ZSBuZWVkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gdHJhbnNmb3JtYXRpb25zIHN0YXJ0ZWQgdmlh
IGEgcHJvY2Vzc2luZworICAgIC8vIGluc3RydWN0aW9uIGZyb20gdGhvc2Ugc3RhcnRlZCB2aWEg
SmF2YXNjcmlwdCBhbmQgWFNMVFByb2Nlc3Nvci4gVGhvc2UKKyAgICAvLyBzdGFydGVkIHZpYSBK
YXZhc2NyaXB0IG11c3QgbG9hZCBzdWJyZXNvdXJjZXMgc3luY2hyb25vdXNseSBvciB0aGV5Cisg
ICAgLy8gd29uJ3QgYmUgcmVhZHkgd2hlbiBsaWJ4c2x0IG5lZWRzIHRoZW0uCisgICAgaWYgKG93
bmVyTm9kZSAmJiBvd25lck5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6UFJPQ0VTU0lOR19JTlNU
UlVDVElPTl9OT0RFKQorICAgICAgICBmaW5pc2hMb2FkaW5nU2hlZXRBc3luY2hyb25vdXNseShw
YXJlbnRTaGVldC0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKSwgYWJzSHJlZik7CisgICAgZWxzZQor
ICAgICAgICBmaW5pc2hMb2FkaW5nU2hlZXRTeW5jaHJvbm91c2x5KHBhcmVudERvY3VtZW50Lmdl
dCgpLCBhYnNIcmVmKTsKK30KKwordm9pZCBYU0xJbXBvcnRSdWxlOjpmaW5pc2hMb2FkaW5nU2hl
ZXRBc3luY2hyb25vdXNseShDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2Fk
ZXIsIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICBtX2NhY2hlZFNoZWV0ID0gY2FjaGVkUmVzb3Vy
Y2VMb2FkZXItPnJlcXVlc3RYU0xTdHlsZVNoZWV0KHVybC5zdHJpbmcoKSk7CisKICAgICBpZiAo
bV9jYWNoZWRTaGVldCkgewogICAgICAgICBtX2NhY2hlZFNoZWV0LT5hZGRDbGllbnQodGhpcyk7
CiAgICAgICAgIApAQCAtMTEyLDYgKzE1NCw0OCBAQCB2b2lkIFhTTEltcG9ydFJ1bGU6OmxvYWRT
aGVldCgpCiAgICAgfQogfQogCitjbGFzcyBJbXBvcnRMb2FkZXJDbGllbnQgOiBwdWJsaWMgVGhy
ZWFkYWJsZUxvYWRlckNsaWVudCB7CitwdWJsaWM6CisgICAgSW1wb3J0TG9hZGVyQ2xpZW50KCkg
OiBtX2ZhaWxlZChmYWxzZSkgeyB9CisKKyAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkgeyBtX3Jlc3BvbnNlVVJMID0gcmVzcG9uc2Uu
dXJsKCk7IH0KKyAgICB2b2lkIGRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBs
ZW5ndGgpIHsgbV9yYXdEYXRhLmFwcGVuZChkYXRhLCBsZW5ndGgpOyB9CisgICAgdm9pZCBkaWRG
YWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKSB7IG1fZmFpbGVkID0gdHJ1ZTsgfQorCisgICAgY29u
c3QgVmVjdG9yPGNoYXI+JiByYXdEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9yYXdEYXRhOyB9Cisg
ICAgY29uc3QgS1VSTCYgcmVzcG9uc2VVUkwoKSBjb25zdCB7IHJldHVybiBtX3Jlc3BvbnNlVVJM
OyB9CisgICAgYm9vbCBmYWlsZWQoKSBjb25zdCB7IHJldHVybiBtX2ZhaWxlZDsgfQorCitwcml2
YXRlOgorICAgIFZlY3RvcjxjaGFyPiBtX3Jhd0RhdGE7CisgICAgS1VSTCBtX3Jlc3BvbnNlVVJM
OworICAgIGJvb2wgbV9mYWlsZWQ7Cit9OworCit2b2lkIFhTTEltcG9ydFJ1bGU6OmZpbmlzaExv
YWRpbmdTaGVldFN5bmNocm9ub3VzbHkoRG9jdW1lbnQqIHBhcmVudERvY3VtZW50LCBjb25zdCBL
VVJMJiB1cmwpCit7CisgICAgYm9vbCBzYW1lT3JpZ2luUmVxdWVzdCA9IHBhcmVudERvY3VtZW50
LT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHVybCk7CisKKyAgICBUaHJlYWRhYmxlTG9h
ZGVyT3B0aW9ucyBvcHRpb25zOworICAgIG9wdGlvbnMuc2VuZExvYWRDYWxsYmFja3MgPSB0cnVl
OworICAgIG9wdGlvbnMuc25pZmZDb250ZW50ID0gZmFsc2U7CisgICAgb3B0aW9ucy5mb3JjZVBy
ZWZsaWdodCA9IGZhbHNlOworICAgIG9wdGlvbnMuYWxsb3dDcmVkZW50aWFscyA9IHNhbWVPcmln
aW5SZXF1ZXN0OworICAgIG9wdGlvbnMuY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5ID0gVXNlQWNj
ZXNzQ29udHJvbDsKKworICAgIEltcG9ydExvYWRlckNsaWVudCBjbGllbnQ7CisgICAgVGhyZWFk
YWJsZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShwYXJlbnREb2N1bWVudCwgdXJs
LCBjbGllbnQsIG9wdGlvbnMpOworCisgICAgaWYgKGNsaWVudC5mYWlsZWQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IGRlY29kZXIgPSBUZXh0
UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUoInRleHQveHNsIik7CisgICAgU3RyaW5nIHNoZWV0KGRl
Y29kZXItPmRlY29kZShjbGllbnQucmF3RGF0YSgpLmRhdGEoKSwgY2xpZW50LnJhd0RhdGEoKS5z
aXplKCkpKTsKKyAgICBzaGVldCArPSBkZWNvZGVyLT5mbHVzaCgpOworCisgICAgc2V0WFNMU3R5
bGVTaGVldCh1cmwuc3RyaW5nKCksIGNsaWVudC5yZXNwb25zZVVSTCgpLCBzaGVldCk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShYU0xUKQpJbmRleDog
U291cmNlL1dlYkNvcmUveG1sL1hTTEltcG9ydFJ1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS94bWwvWFNMSW1wb3J0UnVsZS5oCShyZXZpc2lvbiA4MDE2OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3htbC9YU0xJbXBvcnRSdWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDYgKzYwLDkg
QEAgcHJpdmF0ZToKICAgICAvLyBmcm9tIENhY2hlZFJlc291cmNlQ2xpZW50CiAgICAgdmlydHVh
bCB2b2lkIHNldFhTTFN0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiBocmVmLCBjb25zdCBLVVJMJiBi
YXNlVVJMLCBjb25zdCBTdHJpbmcmIHNoZWV0KTsKICAgICAKKyAgICB2b2lkIGZpbmlzaExvYWRp
bmdTaGVldEFzeW5jaHJvbm91c2x5KENhY2hlZFJlc291cmNlTG9hZGVyKiwgY29uc3QgS1VSTCYp
OworICAgIHZvaWQgZmluaXNoTG9hZGluZ1NoZWV0U3luY2hyb25vdXNseShEb2N1bWVudCosIGNv
bnN0IEtVUkwmKTsKKwogICAgIFN0cmluZyBtX3N0ckhyZWY7CiAgICAgUmVmUHRyPFhTTFN0eWxl
U2hlZXQ+IG1fc3R5bGVTaGVldDsKICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRYU0xT
dHlsZVNoZWV0PiBtX2NhY2hlZFNoZWV0OwpJbmRleDogU291cmNlL1dlYkNvcmUveG1sL1hTTFRQ
cm9jZXNzb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vz
c29yLmNwcAkocmV2aXNpb24gODAxNjgpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nl
c3Nvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgWFNMVFByb2Nlc3Nvcjo6
flhTTFRQcm9jZXNzb3IoKQogfQogCiBQYXNzUmVmUHRyPERvY3VtZW50PiBYU0xUUHJvY2Vzc29y
OjpjcmVhdGVEb2N1bWVudEZyb21Tb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2VTdHJpbmcsCi0g
ICAgY29uc3QgU3RyaW5nJiBzb3VyY2VFbmNvZGluZywgY29uc3QgU3RyaW5nJiBzb3VyY2VNSU1F
VHlwZSwgTm9kZSogc291cmNlTm9kZSwgRnJhbWUqIGZyYW1lKQorICAgIGNvbnN0IFN0cmluZyYg
c291cmNlRW5jb2RpbmcsIGNvbnN0IFN0cmluZyYgc291cmNlTUlNRVR5cGUsIE5vZGUqIHNvdXJj
ZU5vZGUsIEZyYW1lKiBmcmFtZSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCkKIHsKICAgICBSZWZQdHI8RG9jdW1lbnQ+IG93bmVyRG9jdW1lbnQgPSBzb3Vy
Y2VOb2RlLT5kb2N1bWVudCgpOwogICAgIGJvb2wgc291cmNlSXNEb2N1bWVudCA9IChzb3VyY2VO
b2RlID09IG93bmVyRG9jdW1lbnQuZ2V0KCkpOwpAQCAtODYsNiArODYsOCBAQCBQYXNzUmVmUHRy
PERvY3VtZW50PiBYU0xUUHJvY2Vzc29yOjpjcmVhCiAgICAgICAgICAgICB2aWV3LT5jbGVhcigp
OwogICAgICAgICByZXN1bHQtPnNldFRyYW5zZm9ybVNvdXJjZURvY3VtZW50KGZyYW1lLT5kb2N1
bWVudCgpKTsKICAgICAgICAgZnJhbWUtPnNldERvY3VtZW50KHJlc3VsdCk7CisgICAgfSBlbHNl
IGlmIChzY3JpcHRFeGVjdXRpb25Db250ZXh0ICYmIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlz
RG9jdW1lbnQoKSkgeworICAgICAgICByZXN1bHQtPnNldE9yaWdpbkRvY3VtZW50KHN0YXRpY19j
YXN0PERvY3VtZW50Kj4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkpOwogICAgIH0KIAogICAgIFJl
ZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBkZWNvZGVyID0gVGV4dFJlc291cmNlRGVjb2Rlcjo6
Y3JlYXRlKHNvdXJjZU1JTUVUeXBlKTsKQEAgLTEyMywxNCArMTI1LDE0IEBAIHN0YXRpYyBpbmxp
bmUgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGMKICAgICByZXR1cm4gZnJhZ21lbnQ7CiB9CiAK
LVBhc3NSZWZQdHI8RG9jdW1lbnQ+IFhTTFRQcm9jZXNzb3I6OnRyYW5zZm9ybVRvRG9jdW1lbnQo
Tm9kZSogc291cmNlTm9kZSkKK1Bhc3NSZWZQdHI8RG9jdW1lbnQ+IFhTTFRQcm9jZXNzb3I6OnRy
YW5zZm9ybVRvRG9jdW1lbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCwgTm9kZSogc291cmNlTm9kZSkKIHsKICAgICBTdHJpbmcgcmVzdWx0TUlNRVR5cGU7
CiAgICAgU3RyaW5nIHJlc3VsdFN0cmluZzsKICAgICBTdHJpbmcgcmVzdWx0RW5jb2Rpbmc7CiAg
ICAgaWYgKCF0cmFuc2Zvcm1Ub1N0cmluZyhzb3VyY2VOb2RlLCByZXN1bHRNSU1FVHlwZSwgcmVz
dWx0U3RyaW5nLCByZXN1bHRFbmNvZGluZykpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVy
biBjcmVhdGVEb2N1bWVudEZyb21Tb3VyY2UocmVzdWx0U3RyaW5nLCByZXN1bHRFbmNvZGluZywg
cmVzdWx0TUlNRVR5cGUsIHNvdXJjZU5vZGUsIDApOworICAgIHJldHVybiBjcmVhdGVEb2N1bWVu
dEZyb21Tb3VyY2UocmVzdWx0U3RyaW5nLCByZXN1bHRFbmNvZGluZywgcmVzdWx0TUlNRVR5cGUs
IHNvdXJjZU5vZGUsIDAsIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogfQogCiBQYXNzUmVmUHRy
PERvY3VtZW50RnJhZ21lbnQ+IFhTTFRQcm9jZXNzb3I6OnRyYW5zZm9ybVRvRnJhZ21lbnQoTm9k
ZSogc291cmNlTm9kZSwgRG9jdW1lbnQqIG91dHB1dERvYykKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3htbC9YU0xUUHJvY2Vzc29yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hT
TFRQcm9jZXNzb3IuaAkocmV2aXNpb24gODAxNjgpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWFNM
VFByb2Nlc3Nvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMiArNDgsMTIgQEAgcHVibGljOgog
CiAgICAgdm9pZCBzZXRYU0xTdHlsZVNoZWV0KFBhc3NSZWZQdHI8WFNMU3R5bGVTaGVldD4gc3R5
bGVTaGVldCkgeyBtX3N0eWxlc2hlZXQgPSBzdHlsZVNoZWV0OyB9CiAgICAgYm9vbCB0cmFuc2Zv
cm1Ub1N0cmluZyhOb2RlKiBzb3VyY2UsIFN0cmluZyYgcmVzdWx0TUlNRVR5cGUsIFN0cmluZyYg
cmVzdWx0U3RyaW5nLCBTdHJpbmcmIHJlc3VsdEVuY29kaW5nKTsKLSAgICBQYXNzUmVmUHRyPERv
Y3VtZW50PiBjcmVhdGVEb2N1bWVudEZyb21Tb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNv
bnN0IFN0cmluZyYgc291cmNlRW5jb2RpbmcsIGNvbnN0IFN0cmluZyYgc291cmNlTUlNRVR5cGUs
IE5vZGUqIHNvdXJjZU5vZGUsIEZyYW1lKiBmcmFtZSk7CisgICAgUGFzc1JlZlB0cjxEb2N1bWVu
dD4gY3JlYXRlRG9jdW1lbnRGcm9tU291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBT
dHJpbmcmIHNvdXJjZUVuY29kaW5nLCBjb25zdCBTdHJpbmcmIHNvdXJjZU1JTUVUeXBlLCBOb2Rl
KiBzb3VyY2VOb2RlLCBGcmFtZSosIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKICAgICAKICAg
ICAvLyBET00gbWV0aG9kcwogICAgIHZvaWQgaW1wb3J0U3R5bGVzaGVldChQYXNzUmVmUHRyPE5v
ZGU+IHN0eWxlKSB7IG1fc3R5bGVzaGVldFJvb3ROb2RlID0gc3R5bGU7IH0KICAgICBQYXNzUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IHRyYW5zZm9ybVRvRnJhZ21lbnQoTm9kZSogc291cmNlLCBE
b2N1bWVudCogb3VwdXREb2MpOwotICAgIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IHRyYW5zZm9ybVRv
RG9jdW1lbnQoTm9kZSogc291cmNlKTsKKyAgICBQYXNzUmVmUHRyPERvY3VtZW50PiB0cmFuc2Zv
cm1Ub0RvY3VtZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBOb2RlKiBzb3VyY2UpOwogICAg
IAogICAgIHZvaWQgc2V0UGFyYW1ldGVyKGNvbnN0IFN0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25z
dCBTdHJpbmcmIGxvY2FsTmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CiAgICAgU3RyaW5nIGdl
dFBhcmFtZXRlcihjb25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3RyaW5nJiBsb2Nh
bE5hbWUpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JMaWJ4
c2x0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvckxp
YnhzbHQuY3BwCShyZXZpc2lvbiA4MDE2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJv
Y2Vzc29yTGlieHNsdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEwICszMCw5IEBACiAjaW5j
bHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKICNp
bmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKLSNpbmNsdWRlICJS
ZXNvdXJjZUhhbmRsZS5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgotI2luY2x1ZGUg
IlJlc291cmNlUmVzcG9uc2UuaCIKKyNpbmNsdWRlICJUaHJlYWRhYmxlTG9hZGVyLmgiCisjaW5j
bHVkZSAiVGhyZWFkYWJsZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybVNvdXJj
ZS5oIgogI2luY2x1ZGUgIlhNTERvY3VtZW50UGFyc2VyLmgiCiAjaW5jbHVkZSAiWFNMU3R5bGVT
aGVldC5oIgpAQCAtMTAxLDYgKzEwMCwyMSBAQCB2b2lkIFhTTFRQcm9jZXNzb3I6OnBhcnNlRXJy
b3JGdW5jKHZvaWQqCiAgICAgY29uc29sZS0+YWRkTWVzc2FnZShYTUxNZXNzYWdlU291cmNlLCBM
b2dNZXNzYWdlVHlwZSwgbGV2ZWwsIGVycm9yLT5tZXNzYWdlLCBlcnJvci0+bGluZSwgZXJyb3It
PmZpbGUpOwogfQogCitjbGFzcyBMb2FkRG9jdW1lbnRMb2FkZXJDbGllbnQgOiBwdWJsaWMgVGhy
ZWFkYWJsZUxvYWRlckNsaWVudCB7CitwdWJsaWM6CisgICAgTG9hZERvY3VtZW50TG9hZGVyQ2xp
ZW50KCkgOiBtX2ZhaWxlZChmYWxzZSkgeyB9CisKKyAgICB2b2lkIGRpZFJlY2VpdmVEYXRhKGNv
bnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpIHsgbV9yYXdEYXRhLmFwcGVuZChkYXRhLCBsZW5n
dGgpOyB9CisgICAgdm9pZCBkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKSB7IG1fZmFpbGVk
ID0gdHJ1ZTsgfQorCisgICAgY29uc3QgVmVjdG9yPGNoYXI+JiByYXdEYXRhKCkgY29uc3QgeyBy
ZXR1cm4gbV9yYXdEYXRhOyB9CisgICAgYm9vbCBmYWlsZWQoKSBjb25zdCB7IHJldHVybiBtX2Zh
aWxlZDsgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxjaGFyPiBtX3Jhd0RhdGE7CisgICAgYm9v
bCBtX2ZhaWxlZDsKK307CisKIC8vIEZJWE1FOiBUaGVyZSBzZWVtcyB0byBiZSBubyB3YXkgdG8g
Y29udHJvbCB0aGUgY3R4dCBwb2ludGVyIGZvciBsb2FkaW5nIGhlcmUsIHRodXMgd2UgaGF2ZSBn
bG9iYWxzLgogc3RhdGljIFhTTFRQcm9jZXNzb3IqIGdsb2JhbFByb2Nlc3NvciA9IDA7CiBzdGF0
aWMgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGdsb2JhbENhY2hlZFJlc291cmNlTG9hZGVyID0gMDsK
QEAgLTExOSwyMCArMTMzLDIyIEBAIHN0YXRpYyB4bWxEb2NQdHIgZG9jTG9hZGVyRnVuYyhjb25z
dCB4bWwKICAgICAgICAgeG1sQ2hhciogYmFzZSA9IHhtbE5vZGVHZXRCYXNlKGNvbnRleHQtPmRv
Y3VtZW50LT5kb2MsIGNvbnRleHQtPm5vZGUpOwogICAgICAgICBLVVJMIHVybChLVVJMKFBhcnNl
ZFVSTFN0cmluZywgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oYmFzZSkpLCByZWludGVy
cHJldF9jYXN0PGNvbnN0IGNoYXIqPih1cmkpKTsKICAgICAgICAgeG1sRnJlZShiYXNlKTsKLSAg
ICAgICAgUmVzb3VyY2VFcnJvciBlcnJvcjsKLSAgICAgICAgUmVzb3VyY2VSZXNwb25zZSByZXNw
b25zZTsKIAotICAgICAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKKyAgICAgICAgRG9jdW1lbnQqIG93
bmVyRG9jdW1lbnQgPSBnbG9iYWxDYWNoZWRSZXNvdXJjZUxvYWRlci0+ZG9jdW1lbnQoKTsKKyAg
ICAgICAgYm9vbCBzYW1lT3JpZ2luUmVxdWVzdCA9IG93bmVyRG9jdW1lbnQtPnNlY3VyaXR5T3Jp
Z2luKCktPmNhblJlcXVlc3QodXJsKTsKKworICAgICAgICBUaHJlYWRhYmxlTG9hZGVyT3B0aW9u
cyBsb2FkZXJPcHRpb25zOworICAgICAgICBsb2FkZXJPcHRpb25zLnNlbmRMb2FkQ2FsbGJhY2tz
ID0gdHJ1ZTsKKyAgICAgICAgbG9hZGVyT3B0aW9ucy5zbmlmZkNvbnRlbnQgPSBmYWxzZTsKKyAg
ICAgICAgbG9hZGVyT3B0aW9ucy5mb3JjZVByZWZsaWdodCA9IGZhbHNlOworICAgICAgICBsb2Fk
ZXJPcHRpb25zLmFsbG93Q3JlZGVudGlhbHMgPSBzYW1lT3JpZ2luUmVxdWVzdDsKKyAgICAgICAg
bG9hZGVyT3B0aW9ucy5jcm9zc09yaWdpblJlcXVlc3RQb2xpY3kgPSBVc2VBY2Nlc3NDb250cm9s
OworCisgICAgICAgIExvYWREb2N1bWVudExvYWRlckNsaWVudCBjbGllbnQ7CisgICAgICAgIFRo
cmVhZGFibGVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkob3duZXJEb2N1bWVudCwg
dXJsLCBjbGllbnQsIGxvYWRlck9wdGlvbnMpOwogCi0gICAgICAgIGJvb2wgcmVxdWVzdEFsbG93
ZWQgPSBnbG9iYWxDYWNoZWRSZXNvdXJjZUxvYWRlci0+ZnJhbWUoKSAmJiBnbG9iYWxDYWNoZWRS
ZXNvdXJjZUxvYWRlci0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdCh1
cmwpOwotICAgICAgICBpZiAocmVxdWVzdEFsbG93ZWQpIHsKLSAgICAgICAgICAgIGdsb2JhbENh
Y2hlZFJlc291cmNlTG9hZGVyLT5mcmFtZSgpLT5sb2FkZXIoKS0+bG9hZFJlc291cmNlU3luY2hy
b25vdXNseSh1cmwsIEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsIGVycm9yLCByZXNwb25zZSwgZGF0
YSk7Ci0gICAgICAgICAgICByZXF1ZXN0QWxsb3dlZCA9IGdsb2JhbENhY2hlZFJlc291cmNlTG9h
ZGVyLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHJlc3BvbnNlLnVy
bCgpKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIXJlcXVlc3RBbGxvd2VkKSB7Ci0gICAgICAg
ICAgICBkYXRhLmNsZWFyKCk7Ci0gICAgICAgICAgICBnbG9iYWxDYWNoZWRSZXNvdXJjZUxvYWRl
ci0+cHJpbnRBY2Nlc3NEZW5pZWRNZXNzYWdlKHVybCk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYg
KGNsaWVudC5mYWlsZWQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOwogCiAgICAgICAgIENvbnNv
bGUqIGNvbnNvbGUgPSAwOwogICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZ2xvYmFsUHJvY2Vz
c29yLT54c2xTdHlsZXNoZWV0KCktPm93bmVyRG9jdW1lbnQoKS0+ZnJhbWUoKSkKQEAgLTE0Miw3
ICsxNTgsOCBAQCBzdGF0aWMgeG1sRG9jUHRyIGRvY0xvYWRlckZ1bmMoY29uc3QgeG1sCiAKICAg
ICAgICAgLy8gV2UgZG9uJ3Qgc3BlY2lmeSBhbiBlbmNvZGluZyBoZXJlLiBOZWl0aGVyIEdlY2tv
IG5vciBXaW5JRSByZXNwZWN0cwogICAgICAgICAvLyB0aGUgZW5jb2Rpbmcgc3BlY2lmaWVkIGlu
IHRoZSBIVFRQIGhlYWRlcnMuCi0gICAgICAgIHhtbERvY1B0ciBkb2MgPSB4bWxSZWFkTWVtb3J5
KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwgKGNvbnN0IGNoYXIqKXVyaSwgMCwgb3B0aW9ucyk7
CisgICAgICAgIHhtbERvY1B0ciBkb2MgPSB4bWxSZWFkTWVtb3J5KGNsaWVudC5yYXdEYXRhKCku
ZGF0YSgpLCBjbGllbnQucmF3RGF0YSgpLnNpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4odXJpKSwgMCwgb3B0
aW9ucyk7CiAKICAgICAgICAgeG1sU2V0U3RydWN0dXJlZEVycm9yRnVuYygwLCAwKTsKICAgICAg
ICAgeG1sU2V0R2VuZXJpY0Vycm9yRnVuYygwLCAwKTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwMTY4
KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzkg
QEAKKzIwMTEtMDMtMDMgIEFuZHJlYXMgV2ljdG9yICA8YW5kcmVhcy53Y2l0b3JAeGNlcmlvbi5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgeHNs
OmltcG9ydCBhbmQgZG9jdW1lbnQoKSBkb24ndCB3b3JrIGluIHN0eWxlc2hlZXRzIGxvYWRlZCB2
aWEgWE1MSHR0cFJlcXVlc3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEwMzEzCisKKyAgICAgICAgKiBmYXN0L3hzbC90cmFuc2Zvcm0tZG9jaW1wbC1k
b2MtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3hzbC90cmFuc2Zvcm0tZG9j
aW1wbC1kb2MueGh0bWw6IEFkZGVkLgorICAgICAgICBUZXN0IHRoYXQgc3R5bGVzaGVldHMgY3Jl
YXRlZCB3aXRoIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZURvY3VtZW50IGNhbiB1c2Ug
eHNsOmltcG9ydC4KKyAgICAgICAgKiBmYXN0L3hzbC90cmFuc2Zvcm0tZG9tcGFyc2VyLWRvYy1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QveHNsL3RyYW5zZm9ybS1kb21wYXJz
ZXItZG9jLnhodG1sOiBBZGRlZC4KKyAgICAgICAgVGVzdCB0aGF0IHN0eWxlc2hlZXRzIGNyZWF0
ZWQgd2l0aCBET01QYXJzZXIucGFyc2VGcm9tU3RyaW5nIGNhbiB1c2UgeHNsOmltcG9ydC4KKyAg
ICAgICAgKiBmYXN0L3hzbC90cmFuc2Zvcm0tdHJhbnNmb3JtZWQtZG9jLWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICogZmFzdC94c2wvdHJhbnNmb3JtLXRyYW5zZm9ybWVkLWRvYy54aHRt
bDogQWRkZWQuCisgICAgICAgIFRlc3QgdGhhdCBzdHlsZXNoZWV0cyBjcmVhdGVkIHdpdGggWFNM
VFByb2Nlc3Nvci50cmFuc2Zvcm1Ub0RvY3VtZW50IGNhbiB1c2UgeHNsOmltcG9ydC4KKyAgICAg
ICAgKiBmYXN0L3hzbC90cmFuc2Zvcm0teGhyLWRvYy1leHBlY3RlZC50eHQ6CisgICAgICAgICog
aHR0cC90ZXN0cy94c2w6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMveHNsL3Jlc291cmNl
czogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL2FsbG93LWNyb3Nz
LW9yaWdpbi1oZWFkZXIuY2dpOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3hzbC9yZXNv
dXJjZXMvdHJhbnNmb3JtLWZyYW1lZC1zdWJmcmFtZTEueGh0bWw6IEFkZGVkLgorICAgICAgICAq
IGh0dHAvdGVzdHMveHNsL3Jlc291cmNlcy90cmFuc2Zvcm0tZnJhbWVkLXN1YmZyYW1lMi54aHRt
bDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL3hoci1kb2MtY3Jv
c3Mtb3JpZ2luLnhzbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy94c2wvcmVzb3VyY2Vz
L3hoci1kb2MtZnJvbS1hbGxvd2VkLWNyb3NzLW9yaWdpbi54c2w6IEFkZGVkLgorICAgICAgICAq
IGh0dHAvdGVzdHMveHNsL3Jlc291cmNlcy94aHItZG9jLWltcG9ydGVkLnhzbDogQWRkZWQuCisg
ICAgICAgICogaHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL3hoci1kb2MueG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBodHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMveGhyLWRvYy54c2w6IEFkZGVkLgorICAg
ICAgICAqIGh0dHAvdGVzdHMveHNsL3RyYW5zZm9ybS1mcmFtZWQtZG9jLWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy94c2wvdHJhbnNmb3JtLWZyYW1lZC1kb2MueGh0
bWw6IEFkZGVkLgorICAgICAgICBUZXN0IHN0eWxlc2hlZXRzIG9yaWdpbmF0aW5nIGZyb20gYW5v
dGhlciBmcmFtZS4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0teGhyLWRvYy1j
cm9zcy1vcmlnaW4tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3hz
bC90cmFuc2Zvcm0teGhyLWRvYy1jcm9zcy1vcmlnaW4ueGh0bWw6IEFkZGVkLgorICAgICAgICBU
ZXN0IHRoYXQgeW91IGNhbid0IGltcG9ydCBkb2N1bWVudHMgY3Jvc3Mgb3JpZ2luLgorICAgICAg
ICAqIGh0dHAvdGVzdHMveHNsL3RyYW5zZm9ybS14aHItZG9jLWZyb20tYWxsb3dlZC1jcm9zcy1v
cmlnaW4tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3hzbC90cmFu
c2Zvcm0teGhyLWRvYy1mcm9tLWFsbG93ZWQtY3Jvc3Mtb3JpZ2luLnhodG1sOiBBZGRlZC4KKwog
MjAxMS0wMy0wMiAgVG9ueSBHZW50aWxjb3JlICA8dG9ueWdAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQgZXhwZWN0YXRpb25zIHVwZGF0ZQpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC94c2wvdHJhbnNmb3JtLWRvY2ltcGwtZG9jLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0tZG9jaW1wbC1kb2MtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC94c2wvdHJhbnNmb3JtLWRvY2ltcGwtZG9j
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitUZXN0IGZvciBidWcg
MTAzMTM6IHhzbDppbXBvcnQgZG9lc24ndCB3b3JrIGluIHN0eWxlc2hlZXRzIGxvYWRlZCB2aWEg
WE1MSHR0cFJlcXVlc3QuCisKK1NVQ0NFU1MKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QveHNsL3Ry
YW5zZm9ybS1kb2NpbXBsLWRvYy54aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L3hzbC90cmFuc2Zvcm0tZG9jaW1wbC1kb2MueGh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0tZG9jaW1wbC1kb2MueGh0bWwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8
IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iICJodHRwOi8v
d3d3LnczLm9yZy9UUi94aHRtbDExL0RURC94aHRtbDExLmR0ZCI+Cis8aHRtbCB4bWxucz0iaHR0
cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIj4KKzxoZWFkPgorICAgIDx0
aXRsZT54c2wgaW1wb3J0IHRlc3Q8L3RpdGxlPgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZh
c2NyaXB0Ij48IVtDREFUQVsKKyAgICAgICAgZnVuY3Rpb24gbG9hZCgpIHsKKyAgICAgICAgICAg
IGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCisgICAgICAgICAgICB2YXIgeHNsdE5TID0g
Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSI7CisgICAgICAgICAgICB2YXIg
eHNsdERvYyA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZURvY3VtZW50KHhzbHROUywg
InN0eWxlc2hlZXQiLCBudWxsKTsKKyAgICAgICAgICAgIHZhciByb290RWxlbSA9IHhzbHREb2Mu
ZG9jdW1lbnRFbGVtZW50OworICAgICAgICAgICAgcm9vdEVsZW0uc2V0QXR0cmlidXRlKCJ2ZXJz
aW9uIiwgIjEuMCIpOworCisgICAgICAgICAgICB2YXIgaW1wb3J0RWxlbSA9IHhzbHREb2MuY3Jl
YXRlRWxlbWVudE5TKHhzbHROUywgImltcG9ydCIpOworICAgICAgICAgICAgaW1wb3J0RWxlbS5z
ZXRBdHRyaWJ1dGUoImhyZWYiLCAicmVzb3VyY2VzL3hoci1kb2MtaW1wb3J0ZWQueHNsIik7Cisg
ICAgICAgICAgICByb290RWxlbS5hcHBlbmRDaGlsZChpbXBvcnRFbGVtKTsKKworICAgICAgICAg
ICAgdmFyIHRlbXBsYXRlRWxlbSA9IHhzbHREb2MuY3JlYXRlRWxlbWVudE5TKHhzbHROUywgInRl
bXBsYXRlIik7CisgICAgICAgICAgICB0ZW1wbGF0ZUVsZW0uc2V0QXR0cmlidXRlKCJtYXRjaCIs
ICIvcm9vdCIpOworICAgICAgICAgICAgdmFyIGNhbGxFbGVtID0geHNsdERvYy5jcmVhdGVFbGVt
ZW50TlMoeHNsdE5TLCAiY2FsbC10ZW1wbGF0ZSIpOworICAgICAgICAgICAgY2FsbEVsZW0uc2V0
QXR0cmlidXRlKCJuYW1lIiwgIndvcmtzIik7CisgICAgICAgICAgICB0ZW1wbGF0ZUVsZW0uYXBw
ZW5kQ2hpbGQoY2FsbEVsZW0pOworICAgICAgICAgICAgcm9vdEVsZW0uYXBwZW5kQ2hpbGQodGVt
cGxhdGVFbGVtKTsKKworICAgICAgICAgICAgdmFyIHhzbHQgPSBuZXcgWFNMVFByb2Nlc3Nvcigp
OworICAgICAgICAgICAgeHNsdC5pbXBvcnRTdHlsZXNoZWV0KHhzbHREb2MpOworCisgICAgICAg
ICAgICB2YXIgeG1sRG9jID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlRG9jdW1lbnQo
IiIsICJyb290IiwgbnVsbCk7CisgICAgICAgICAgICB2YXIgcmVzdWx0RG9jID0geHNsdC50cmFu
c2Zvcm1Ub0RvY3VtZW50KHhtbERvYyk7CisgICAgICAgICAgICB2YXIgZnJhZ21lbnQgPSBkb2N1
bWVudC5pbXBvcnROb2RlKHJlc3VsdERvYy5kb2N1bWVudEVsZW1lbnQsIHRydWUpOworCisgICAg
ICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RpdicpOworICAgICAg
ICAgICAgZGl2LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGZyYWdtZW50LCBkaXYpOworICAgICAg
ICB9CisgICAgXV0+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9ImxvYWQoKSI+Cis8
cD5UZXN0IGZvciA8YSBocmVmPSJodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMDMxMyI+YnVnIDEwMzEzPC9hPjoKK3hzbDppbXBvcnQgZG9lc24ndCB3b3JrIGluIHN0eWxl
c2hlZXRzIGxvYWRlZCB2aWEgWE1MSHR0cFJlcXVlc3QuPC9wPgorCis8ZGl2IGlkPSJkaXYiPkl0
J3MgbmljZSB0aGF0IHRoaXMgaGFzbid0IGNyYXNoZWQsIGJ1dCB0aGUgWFNMIHRyYW5zZm9ybWF0
aW9uIGhhcyBmYWlsZWQuPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L3hzbC90cmFuc2Zvcm0tZG9tcGFyc2VyLWRvYy1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC94c2wvdHJhbnNmb3JtLWRvbXBhcnNlci1kb2MtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC94c2wvdHJhbnNmb3JtLWRv
bXBhcnNlci1kb2MtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK1Rl
c3QgZm9yIGJ1ZyAxMDMxMzogeHNsOmltcG9ydCBkb2Vzbid0IHdvcmsgaW4gc3R5bGVzaGVldHMg
bG9hZGVkIHZpYSBYTUxIdHRwUmVxdWVzdC4KKworU1VDQ0VTUwpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC94c2wvdHJhbnNmb3JtLWRvbXBhcnNlci1kb2MueGh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC94c2wvdHJhbnNmb3JtLWRvbXBhcnNlci1kb2MueGh0bWwJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0tZG9tcGFyc2VyLWRvYy54aHRt
bAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNv
ZGluZz0idXRmLTgiPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwg
MS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMTEvRFREL3hodG1sMTEuZHRkIj4K
KzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4i
PgorPGhlYWQ+CisgICAgPHRpdGxlPnhzbCBpbXBvcnQgdGVzdDwvdGl0bGU+CisgICAgPHNjcmlw
dCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhW0NEQVRBWworICAgICAgICBmdW5jdGlvbiBsb2Fk
KCkgeworICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAg
ICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyAgICAgICAg
ICAgIHZhciB4c2x0U3RyID0KKyAgICAgICAgICAgICAgICAnPHhzbDpzdHlsZXNoZWV0IHZlcnNp
b249IjEuMCInICsKKyAgICAgICAgICAgICAgICAnICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMu
b3JnLzE5OTkvWFNML1RyYW5zZm9ybSInICsKKyAgICAgICAgICAgICAgICAnICB4bWxucz0iaHR0
cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+JyArCisgICAgICAgICAgICAgICAgJzx4c2w6aW1w
b3J0IGhyZWY9InJlc291cmNlcy94aHItZG9jLWltcG9ydGVkLnhzbCIgLz4nICsKKyAgICAgICAg
ICAgICAgICAnPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iL3Jvb3QiPicgKworICAgICAgICAgICAgICAg
ICcgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9IndvcmtzIiAvPicgKworICAgICAgICAgICAg
ICAgICc8L3hzbDp0ZW1wbGF0ZT4nICsKKyAgICAgICAgICAgICAgICAnPC94c2w6c3R5bGVzaGVl
dD4nOworCisgICAgICAgICAgICB2YXIgcGFyc2VyID0gbmV3IERPTVBhcnNlcigpOworICAgICAg
ICAgICAgdmFyIHhzbHQgPSBuZXcgWFNMVFByb2Nlc3NvcigpOworICAgICAgICAgICAgdmFyIHhz
bHREb2MgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKHhzbHRTdHIsICJhcHBsaWNhdGlvbi94bWwi
KTsKKyAgICAgICAgICAgIHhzbHQuaW1wb3J0U3R5bGVzaGVldCh4c2x0RG9jKTsKKworICAgICAg
ICAgICAgdmFyIHhtbERvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoIjxyb290Lz4iLCAiYXBw
bGljYXRpb24veG1sIik7CisgICAgICAgICAgICB2YXIgcmVzdWx0RG9jID0geHNsdC50cmFuc2Zv
cm1Ub0RvY3VtZW50KHhtbERvYyk7CisgICAgICAgICAgICB2YXIgZnJhZ21lbnQgPSBkb2N1bWVu
dC5pbXBvcnROb2RlKHJlc3VsdERvYy5kb2N1bWVudEVsZW1lbnQsIHRydWUpOworCisgICAgICAg
ICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RpdicpOworICAgICAgICAg
ICAgZGl2LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGZyYWdtZW50LCBkaXYpOworICAgICAgICB9
CisgICAgXV0+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9ImxvYWQoKSI+Cis8cD5U
ZXN0IGZvciA8YSBocmVmPSJodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MDMxMyI+YnVnIDEwMzEzPC9hPjoKK3hzbDppbXBvcnQgZG9lc24ndCB3b3JrIGluIHN0eWxlc2hl
ZXRzIGxvYWRlZCB2aWEgWE1MSHR0cFJlcXVlc3QuPC9wPgorCis8ZGl2IGlkPSJkaXYiPkl0J3Mg
bmljZSB0aGF0IHRoaXMgaGFzbid0IGNyYXNoZWQsIGJ1dCB0aGUgWFNMIHRyYW5zZm9ybWF0aW9u
IGhhcyBmYWlsZWQuPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L3hzbC90cmFuc2Zvcm0tdHJhbnNmb3JtZWQtZG9jLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0tdHJhbnNmb3JtZWQtZG9jLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QveHNsL3RyYW5zZm9ybS10
cmFuc2Zvcm1lZC1kb2MtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAK
K1Rlc3QgZm9yIGJ1ZyAxMDMxMzogeHNsOmltcG9ydCBkb2Vzbid0IHdvcmsgaW4gc3R5bGVzaGVl
dHMgbG9hZGVkIHZpYSBYTUxIdHRwUmVxdWVzdC4KKworU1VDQ0VTUwpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC94c2wvdHJhbnNmb3JtLXRyYW5zZm9ybWVkLWRvYy54aHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0tdHJhbnNmb3JtZWQtZG9jLnhodG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC94c2wvdHJhbnNmb3JtLXRyYW5zZm9ybWVk
LWRvYy54aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OCBAQAorPD94bWwgdmVyc2lvbj0i
MS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9E
VEQgWEhUTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMTEvRFREL3hodG1s
MTEuZHRkIj4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6
bGFuZz0iZW4iPgorPGhlYWQ+CisgICAgPHRpdGxlPnhzbCBpbXBvcnQgdGVzdDwvdGl0bGU+Cisg
ICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhW0NEQVRBWworICAgICAgICBmdW5j
dGlvbiBsb2FkKCkgeworICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisK
KyAgICAgICAgICAgIHZhciBjb3B5WHNsdFN0ciA9CisgICAgICAgICAgICAgICAgJzx4c2w6c3R5
bGVzaGVldCB2ZXJzaW9uPSIxLjAiJyArCisgICAgICAgICAgICAgICAgJyAgeG1sbnM6eHNsPSJo
dHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iJyArCisgICAgICAgICAgICAgICAg
JyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPicgKworICAgICAgICAgICAg
ICAgICc8eHNsOnRlbXBsYXRlIG1hdGNoPSJAKnxub2RlKCkiPicgKworICAgICAgICAgICAgICAg
ICcgIDx4c2w6Y29weT4nICsKKyAgICAgICAgICAgICAgICAnICAgIDx4c2w6YXBwbHktdGVtcGxh
dGVzIHNlbGVjdD0iQCp8bm9kZSgpIi8+JyArCisgICAgICAgICAgICAgICAgJyAgPC94c2w6Y29w
eT4nICsKKyAgICAgICAgICAgICAgICAnPC94c2w6dGVtcGxhdGU+JyArCisgICAgICAgICAgICAg
ICAgJzwveHNsOnN0eWxlc2hlZXQ+JzsKKworICAgICAgICAgICAgdmFyIHBhcnNlciA9IG5ldyBE
T01QYXJzZXIoKTsKKyAgICAgICAgICAgIHZhciB4c2x0ID0gbmV3IFhTTFRQcm9jZXNzb3IoKTsK
KyAgICAgICAgICAgIGNvcHlYc2x0RG9jID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyhjb3B5WHNs
dFN0ciwgImFwcGxpY2F0aW9uL3htbCIpOworICAgICAgICAgICAgeHNsdC5pbXBvcnRTdHlsZXNo
ZWV0KGNvcHlYc2x0RG9jKTsKKworICAgICAgICAgICAgdmFyIHJlcSA9IG5ldyBYTUxIdHRwUmVx
dWVzdCgpOworICAgICAgICAgICAgcmVxLm9wZW4oJ0dFVCcsICdyZXNvdXJjZXMveGhyLWRvYy54
c2wnLCBmYWxzZSk7CisgICAgICAgICAgICByZXEuc2VuZChudWxsKTsKKyAgICAgICAgICAgIHZh
ciB4c2x0RG9jID0geHNsdC50cmFuc2Zvcm1Ub0RvY3VtZW50KHJlcS5yZXNwb25zZVhNTCk7Cisg
ICAgICAgICAgICB4c2x0LmltcG9ydFN0eWxlc2hlZXQoeHNsdERvYyk7CisKKyAgICAgICAgICAg
IHZhciB4bWxEb2MgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKCI8cm9vdC8+IiwgImFwcGxpY2F0
aW9uL3htbCIpOworICAgICAgICAgICAgdmFyIHJlc3VsdERvYyA9IHhzbHQudHJhbnNmb3JtVG9E
b2N1bWVudCh4bWxEb2MpOworICAgICAgICAgICAgdmFyIGZyYWdtZW50ID0gZG9jdW1lbnQuaW1w
b3J0Tm9kZShyZXN1bHREb2MuZG9jdW1lbnRFbGVtZW50LCB0cnVlKTsKKworICAgICAgICAgICAg
dmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkaXYnKTsKKyAgICAgICAgICAgIGRp
di5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChmcmFnbWVudCwgZGl2KTsKKyAgICAgICAgfQorICAg
IF1dPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJsb2FkKCkiPgorPHA+VGVzdCBm
b3IgPGEgaHJlZj0iaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzMTMi
PmJ1ZyAxMDMxMzwvYT46Cit4c2w6aW1wb3J0IGRvZXNuJ3Qgd29yayBpbiBzdHlsZXNoZWV0cyBs
b2FkZWQgdmlhIFhNTEh0dHBSZXF1ZXN0LjwvcD4KKworPGRpdiBpZD0iZGl2Ij5JdCdzIG5pY2Ug
dGhhdCB0aGlzIGhhc24ndCBjcmFzaGVkLCBidXQgdGhlIFhTTCB0cmFuc2Zvcm1hdGlvbiBoYXMg
ZmFpbGVkLjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC94
c2wvdHJhbnNmb3JtLXhoci1kb2MtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QveHNsL3RyYW5zZm9ybS14aHItZG9jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gODAx
NjgpCisrKyBMYXlvdXRUZXN0cy9mYXN0L3hzbC90cmFuc2Zvcm0teGhyLWRvYy1leHBlY3RlZC50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSwzIEBACi1DT05TT0xFIE1FU1NBR0U6IGxpbmUg
MjA6IFR5cGVFcnJvcjogJ3VuZGVmaW5lZCcgaXMgbm90IGFuIG9iamVjdCAoZXZhbHVhdGluZyAn
ZG9jLmRvY3VtZW50RWxlbWVudCcpCiBUZXN0IGZvciBidWcgMTAzMTM6IHhzbDppbXBvcnQgZG9l
c24ndCB3b3JrIGluIHN0eWxlc2hlZXRzIGxvYWRlZCB2aWEgWE1MSHR0cFJlcXVlc3QuCiAKLUl0
J3MgbmljZSB0aGF0IHRoaXMgaGFzbid0IGNyYXNoZWQsIGJ1dCB0aGUgWFNMIHRyYW5zZm9ybWF0
aW9uIGhhcyBmYWlsZWQuCitTVUNDRVNTCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hz
bC90cmFuc2Zvcm0tZnJhbWVkLWRvYy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy94c2wvdHJhbnNmb3JtLWZyYW1lZC1kb2MtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvdHJhbnNmb3JtLWZyYW1l
ZC1kb2MtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACitUZXN0IGZv
ciBidWcgMTAzMTM6IHhzbDppbXBvcnQgZG9lc24ndCB3b3JrIGluIHN0eWxlc2hlZXRzIGxvYWRl
ZCB2aWEgWE1MSHR0cFJlcXVlc3QuCisKK1NVQ0NFU1MKK1RoaXMgdHJhbnNmb3JtYXRpb24gaGFz
IGZhaWxlZCBiZWNhdXNlIHRoZSBmcmFtZSBubyBsb25nZXIgaGFzIHRoZSBzYW1lIG9yaWdpbi4K
KworCistLS0tLS0tLQorRnJhbWU6ICdzdWJmcmFtZScKKy0tLS0tLS0tCitzdWJmcmFtZSAyCklu
ZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0tZnJhbWVkLWRvYy54aHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0tZnJh
bWVkLWRvYy54aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNs
L3RyYW5zZm9ybS1mcmFtZWQtZG9jLnhodG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU5IEBA
Cis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCFET0NUWVBFIGh0bWwg
UFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIv
eGh0bWwxMS9EVEQveGh0bWwxMS5kdGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn
LzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiI+Cis8aGVhZD4KKyAgICA8dGl0bGU+eHNsIGltcG9y
dCB0ZXN0PC90aXRsZT4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCFbQ0RB
VEFbCisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisKKyAgICAgICAgdmFyIHhz
bHREb2M7CisKKyAgICAgICAgdmFyIHBhcnNlciA9IG5ldyBET01QYXJzZXIoKTsKKyAgICAgICAg
dmFyIHhtbERvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoIjxyb290Lz4iLCAiYXBwbGljYXRp
b24veG1sIik7CisKKyAgICAgICAgZnVuY3Rpb24gdHJhbnNmb3JtKGRpdikgeworICAgICAgICAg
ICAgdmFyIHhzbHQgPSBuZXcgWFNMVFByb2Nlc3NvcigpOworICAgICAgICAgICAgeHNsdC5pbXBv
cnRTdHlsZXNoZWV0KHhzbHREb2MpOworICAgICAgICAgICAgdmFyIHJlc3VsdERvYyA9IHhzbHQu
dHJhbnNmb3JtVG9Eb2N1bWVudCh4bWxEb2MpOworICAgICAgICAgICAgdmFyIGZyYWdtZW50ID0g
ZG9jdW1lbnQuaW1wb3J0Tm9kZShyZXN1bHREb2MuZG9jdW1lbnRFbGVtZW50LCB0cnVlKTsKKyAg
ICAgICAgICAgIGRpdi5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChmcmFnbWVudCwgZGl2KTsKKyAg
ICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGxvYWQoKSB7CisgICAgICAgICAgICBpZiAoIXhz
bHREb2MpIHsKKyAgICAgICAgICAgICAgICB4c2x0RG9jID0gc3ViZnJhbWUueHNsdERvYzsKKyAg
ICAgICAgICAgICAgICB0cmFuc2Zvcm0oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RyYW5zZm9y
bTEnKSk7CisgICAgICAgICAgICAgICAgc3ViZnJhbWUud2luZG93LmxvY2F0aW9uID0gImh0dHA6
Ly8xMjcuMC4wLjE6ODAwMC94c2wvcmVzb3VyY2VzL3RyYW5zZm9ybS1mcmFtZWQtc3ViZnJhbWUy
LnhodG1sIjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIGRpdjIg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndHJhbnNmb3JtMicpOworCisgICAgICAgICAgICAg
ICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtKGRpdjIpOworICAgICAgICAg
ICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyB0cmFuc2Zv
cm1hdGlvbiBzaG91bGQgZmFpbAorICAgICAgICAgICAgICAgICAgICBkaXYyLmlubmVySFRNTCA9
ICJUaGlzIHRyYW5zZm9ybWF0aW9uIGhhcyBmYWlsZWQgYmVjYXVzZSB0aGUgZnJhbWUgbm8gbG9u
Z2VyIGhhcyB0aGUgc2FtZSBvcmlnaW4uIjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgICAgICAg
ICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgICAg
ICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcENoaWxkRnJhbWVzQXNUZXh0KCk7CisgICAg
ICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICBdXT48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorPHA+VGVzdCBmb3IgPGEgaHJlZj0iaHR0cDovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzMTMiPmJ1ZyAxMDMxMzwvYT46Cit4c2w6aW1wb3J0IGRv
ZXNuJ3Qgd29yayBpbiBzdHlsZXNoZWV0cyBsb2FkZWQgdmlhIFhNTEh0dHBSZXF1ZXN0LjwvcD4K
KzxkaXYgaWQ9InRyYW5zZm9ybTEiPgorSXQncyBuaWNlIHRoYXQgdGhpcyBoYXNuJ3QgY3Jhc2hl
ZCwgYnV0IHRoZSBYU0wgdHJhbnNmb3JtYXRpb24gaGFzIGZhaWxlZC4KKzwvZGl2PgorPGRpdiBp
ZD0idHJhbnNmb3JtMiI+CitUaGlzIHRyYW5zZm9ybWF0aW9uIHNob3VsZCBmYWlsIGJlY2F1c2Ug
dGhlIGZyYW1lIG5vIGxvbmdlciBoYXMgdGhlIHNhbWUgb3JpZ2luLgorPC9kaXY+Cis8aWZyYW1l
IGlkPSJzdWJmcmFtZSIgc3JjPSJyZXNvdXJjZXMvdHJhbnNmb3JtLWZyYW1lZC1zdWJmcmFtZTEu
eGh0bWwiIG9ubG9hZD0ibG9hZCgpIj4KKzwvaWZyYW1lPgorPC9ib2R5PgorPC9odG1sPgpJbmRl
eDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvdHJhbnNmb3JtLXhoci1kb2MtY3Jvc3Mtb3Jp
Z2luLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hz
bC90cmFuc2Zvcm0teGhyLWRvYy1jcm9zcy1vcmlnaW4tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvdHJhbnNmb3JtLXhoci1kb2MtY3Jvc3Mt
b3JpZ2luLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitUZXN0IGZv
ciBidWcgMTAzMTM6IHhzbDppbXBvcnQgZG9lc24ndCB3b3JrIGluIHN0eWxlc2hlZXRzIGxvYWRl
ZCB2aWEgWE1MSHR0cFJlcXVlc3QuCisKK1RoaXMgdHJhbnNmb3JtYXRpb24gaGFzIGZhaWxlZCBi
ZWNhdXNlIGl0IGlzIHRyeWluZyB0byBpbXBvcnQgYSBzdHlsZXNoZWV0IGNyb3NzLW9yaWdpbi4K
SW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3RyYW5zZm9ybS14aHItZG9jLWNyb3Nz
LW9yaWdpbi54aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC90
cmFuc2Zvcm0teGhyLWRvYy1jcm9zcy1vcmlnaW4ueGh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3hzbC90cmFuc2Zvcm0teGhyLWRvYy1jcm9zcy1vcmlnaW4ueGh0
bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5j
b2Rpbmc9InV0Zi04Ij8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1M
IDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDExL0RURC94aHRtbDExLmR0ZCI+
Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVu
Ij4KKzxoZWFkPgorICAgIDx0aXRsZT54c2wgaW1wb3J0IHRlc3Q8L3RpdGxlPgorICAgIDxzY3Jp
cHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICAgICAgZnVuY3Rpb24gbG9hZCgpIHsKKyAg
ICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCisgICAgICAgICAgICB2YXIg
cmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgICAgICAgICB2YXIgeHNsdCA9IG5ldyBY
U0xUUHJvY2Vzc29yKCk7CisgICAgICAgICAgICByZXEub3BlbignR0VUJywgJ3Jlc291cmNlcy94
aHItZG9jLWNyb3NzLW9yaWdpbi54c2wnLCBmYWxzZSk7CisgICAgICAgICAgICByZXEuc2VuZChu
dWxsKTsKKyAgICAgICAgICAgIHhzbHQuaW1wb3J0U3R5bGVzaGVldChyZXEucmVzcG9uc2VYTUwp
OworCisgICAgICAgICAgICByZXEub3BlbignR0VUJywgJ3Jlc291cmNlcy94aHItZG9jLnhtbCcs
IGZhbHNlKTsKKyAgICAgICAgICAgIHJlcS5zZW5kKG51bGwpOworCisgICAgICAgICAgICB2YXIg
ZG9jOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBkb2MgPSB4c2x0LnRyYW5z
Zm9ybVRvRG9jdW1lbnQocmVxLnJlc3BvbnNlWE1MKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKGUp
IHsKKyAgICAgICAgICAgICAgICAvLyBUaGlzIHRyYW5zZm9ybWF0aW9uIHNob3VsZCBmYWlsCisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnZGl2Jyk7CisKKyAgICAgICAgICAgIGlmIChkb2MpIHsKKyAgICAgICAgICAgICAgICB2
YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5pbXBvcnROb2RlKGRvYy5kb2N1bWVudEVsZW1lbnQsIHRy
dWUpOworICAgICAgICAgICAgICAgIGRpdi5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChmcmFnbWVu
dCwgZGl2KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZGl2LmlubmVy
SFRNTCA9ICJUaGlzIHRyYW5zZm9ybWF0aW9uIGhhcyBmYWlsZWQgYmVjYXVzZSBpdCBpcyB0cnlp
bmcgdG8gaW1wb3J0IGEgc3R5bGVzaGVldCBjcm9zcy1vcmlnaW4uIjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJsb2FkKCki
PgorPHA+VGVzdCBmb3IgPGEgaHJlZj0iaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTAzMTMiPmJ1ZyAxMDMxMzwvYT46Cit4c2w6aW1wb3J0IGRvZXNuJ3Qgd29yayBpbiBz
dHlsZXNoZWV0cyBsb2FkZWQgdmlhIFhNTEh0dHBSZXF1ZXN0LjwvcD4KKworPGRpdiBpZD0iZGl2
Ij5UaGlzIHRyYW5zZm9ybWF0aW9uIHNob3VsZCBmYWlsIGJlY2F1c2UgaXQgaXMgdHJ5aW5nIHRv
IGltcG9ydCBhIHN0eWxlc2hlZXQgY3Jvc3Mtb3JpZ2luLjwvZGl2PgorPC9ib2R5PgorPC9odG1s
PgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvdHJhbnNmb3JtLXhoci1kb2MtZnJv
bS1hbGxvd2VkLWNyb3NzLW9yaWdpbi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy94c2wvdHJhbnNmb3JtLXhoci1kb2MtZnJvbS1hbGxvd2VkLWNyb3Nz
LW9yaWdpbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3hzbC90cmFuc2Zvcm0teGhyLWRvYy1mcm9tLWFsbG93ZWQtY3Jvc3Mtb3JpZ2luLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitUZXN0IGZvciBidWcgMTAzMTM6
IHhzbDppbXBvcnQgZG9lc24ndCB3b3JrIGluIHN0eWxlc2hlZXRzIGxvYWRlZCB2aWEgWE1MSHR0
cFJlcXVlc3QuCisKK1NVQ0NFU1MKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3Ry
YW5zZm9ybS14aHItZG9jLWZyb20tYWxsb3dlZC1jcm9zcy1vcmlnaW4ueGh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvdHJhbnNmb3JtLXhoci1kb2MtZnJvbS1h
bGxvd2VkLWNyb3NzLW9yaWdpbi54aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0
dHAvdGVzdHMveHNsL3RyYW5zZm9ybS14aHItZG9jLWZyb20tYWxsb3dlZC1jcm9zcy1vcmlnaW4u
eGh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIg
ZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhI
VE1MIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDExL0RURC94aHRtbDExLmR0
ZCI+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9
ImVuIj4KKzxoZWFkPgorICAgIDx0aXRsZT54c2wgaW1wb3J0IHRlc3Q8L3RpdGxlPgorICAgIDxz
Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICAgICAgZnVuY3Rpb24gbG9hZCgpIHsK
KyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAg
ICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCisgICAgICAgICAgICB2
YXIgcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgICAgICAgICB2YXIgeHNsdCA9IG5l
dyBYU0xUUHJvY2Vzc29yKCk7CisgICAgICAgICAgICByZXEub3BlbignR0VUJywgJ3Jlc291cmNl
cy94aHItZG9jLWZyb20tYWxsb3dlZC1jcm9zcy1vcmlnaW4ueHNsJywgZmFsc2UpOworICAgICAg
ICAgICAgcmVxLnNlbmQobnVsbCk7CisgICAgICAgICAgICB4c2x0LmltcG9ydFN0eWxlc2hlZXQo
cmVxLnJlc3BvbnNlWE1MKTsKKworICAgICAgICAgICAgcmVxLm9wZW4oJ0dFVCcsICdyZXNvdXJj
ZXMveGhyLWRvYy54bWwnLCBmYWxzZSk7CisgICAgICAgICAgICByZXEuc2VuZChudWxsKTsKKyAg
ICAgICAgICAgIHZhciBkb2MgPSB4c2x0LnRyYW5zZm9ybVRvRG9jdW1lbnQocmVxLnJlc3BvbnNl
WE1MKTsKKyAgICAgICAgICAgIHZhciBmcmFnbWVudCA9IGRvY3VtZW50LmltcG9ydE5vZGUoZG9j
LmRvY3VtZW50RWxlbWVudCwgdHJ1ZSk7CisKKyAgICAgICAgICAgIHZhciBkaXYgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnZGl2Jyk7CisgICAgICAgICAgICBkaXYucGFyZW50Tm9kZS5yZXBs
YWNlQ2hpbGQoZnJhZ21lbnQsIGRpdik7CisgICAgICAgIH0KKyAgICA8L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5IG9ubG9hZD0ibG9hZCgpIj4KKzxwPlRlc3QgZm9yIDxhIGhyZWY9Imh0dHA6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzEzIj5idWcgMTAzMTM8L2E+OgoreHNs
OmltcG9ydCBkb2Vzbid0IHdvcmsgaW4gc3R5bGVzaGVldHMgbG9hZGVkIHZpYSBYTUxIdHRwUmVx
dWVzdC48L3A+CisKKzxkaXYgaWQ9ImRpdiI+SXQncyBuaWNlIHRoYXQgdGhpcyBoYXNuJ3QgY3Jh
c2hlZCwgYnV0IHRoZSBYU0wgdHJhbnNmb3JtYXRpb24gaGFzIGZhaWxlZC48L2Rpdj4KKzwvYm9k
eT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3Jlc291cmNlcy9h
bGxvdy1jcm9zcy1vcmlnaW4taGVhZGVyLmNnaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMvYWxsb3ctY3Jvc3Mtb3JpZ2luLWhlYWRlci5jZ2kJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMvYWxsb3ct
Y3Jvc3Mtb3JpZ2luLWhlYWRlci5jZ2kJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKKyMh
L3Vzci9iaW4vcGVybCAtdwordXNlIHN0cmljdDsKKworcHJpbnQgIkNvbnRlbnQtVHlwZTogYXBw
bGljYXRpb24veG1sXG4iOworcHJpbnQgIkNhY2hlLUNvbnRyb2w6IG5vLWNhY2hlLCBuby1zdG9y
ZVxuIjsKK3ByaW50ICJBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW46ICpcblxuIjsKKworbXkg
JGZpbGVuYW1lID0gJEVOVnsiUVVFUllfU1RSSU5HIn07CitvcGVuIEZJTEUsICRmaWxlbmFtZSBv
ciBkaWU7CitwcmludCA8RklMRT47CitjbG9zZSBGSUxFOwpJbmRleDogTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy94c2wvcmVzb3VyY2VzL3RyYW5zZm9ybS1mcmFtZWQtc3ViZnJhbWUxLnhodG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3Jlc291cmNlcy90cmFuc2Zv
cm0tZnJhbWVkLXN1YmZyYW1lMS54aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0
dHAvdGVzdHMveHNsL3Jlc291cmNlcy90cmFuc2Zvcm0tZnJhbWVkLXN1YmZyYW1lMS54aHRtbAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGlu
Zz0idXRmLTgiPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4x
Ly9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMTEvRFREL3hodG1sMTEuZHRkIj4KKzxo
dG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iPgor
PGhlYWQ+CisgICAgPHRpdGxlPnhzbCBpbXBvcnQgdGVzdDwvdGl0bGU+CisgICAgPHNjcmlwdCB0
eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhW0NEQVRBWworICAgICAgICB2YXIgeHNsdFN0ciA9Cisg
ICAgICAgICAgICAnPHhzbDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCInICsKKyAgICAgICAgICAg
ICcgIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIicgKwor
ICAgICAgICAgICAgJyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPicgKwor
ICAgICAgICAgICAgJzx4c2w6aW1wb3J0IGhyZWY9Inhoci1kb2MtaW1wb3J0ZWQueHNsIiAvPicg
KworICAgICAgICAgICAgJzx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii9yb290Ij4nICsKKyAgICAgICAg
ICAgICcgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9IndvcmtzIiAvPicgKworICAgICAgICAg
ICAgJzwveHNsOnRlbXBsYXRlPicgKworICAgICAgICAgICAgJzwveHNsOnN0eWxlc2hlZXQ+JzsK
KworICAgICAgICB2YXIgcGFyc2VyID0gbmV3IERPTVBhcnNlcigpOworICAgICAgICB2YXIgeHNs
dERvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoeHNsdFN0ciwgImFwcGxpY2F0aW9uL3htbCIp
OworICAgIF1dPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CitzdWJmcmFtZSAxCis8L2JvZHk+
Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMvdHJh
bnNmb3JtLWZyYW1lZC1zdWJmcmFtZTIueGh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL3RyYW5zZm9ybS1mcmFtZWQtc3ViZnJhbWUyLnhodG1s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL3Ry
YW5zZm9ybS1mcmFtZWQtc3ViZnJhbWUyLnhodG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEw
IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCFET0NUWVBFIGh0
bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcv
VFIveGh0bWwxMS9EVEQveGh0bWwxMS5kdGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMu
b3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiI+Cis8aGVhZD4KKyAgICA8dGl0bGU+eHNsIGlt
cG9ydCB0ZXN0PC90aXRsZT4KKzwvaGVhZD4KKzxib2R5Pgorc3ViZnJhbWUgMgorPC9ib2R5Pgor
PC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL3hoci1k
b2MtY3Jvc3Mtb3JpZ2luLnhzbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3hzbC9yZXNvdXJjZXMveGhyLWRvYy1jcm9zcy1vcmlnaW4ueHNsCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL3hoci1kb2MtY3Jvc3Mtb3JpZ2lu
LnhzbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBl
bmNvZGluZz0idXRmLTgiPz4KKzx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiCisgIHhtbG5z
OnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgorICB4bWxucz0iaHR0
cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+CisKKzx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9s
b2NhbGhvc3Q6ODAwMC94c2wvcmVzb3VyY2VzL3hoci1kb2MtaW1wb3J0ZWQueHNsIiAvPgorCis8
eHNsOnRlbXBsYXRlIG1hdGNoPSIvcm9vdCI+CisgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9
IndvcmtzIiAvPgorPC94c2w6dGVtcGxhdGU+CisKKzwveHNsOnN0eWxlc2hlZXQ+CkluZGV4OiBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMveGhyLWRvYy1mcm9tLWFsbG93ZWQt
Y3Jvc3Mtb3JpZ2luLnhzbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hz
bC9yZXNvdXJjZXMveGhyLWRvYy1mcm9tLWFsbG93ZWQtY3Jvc3Mtb3JpZ2luLnhzbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3Jlc291cmNlcy94aHItZG9jLWZy
b20tYWxsb3dlZC1jcm9zcy1vcmlnaW4ueHNsCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBA
Cis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPHhzbDpzdHlsZXNoZWV0
IHZlcnNpb249IjEuMCIKKyAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9U
cmFuc2Zvcm0iCisgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKworPHhz
bDppbXBvcnQgaHJlZj0iaHR0cDovL2xvY2FsaG9zdDo4MDAwL3hzbC9yZXNvdXJjZXMvYWxsb3ct
Y3Jvc3Mtb3JpZ2luLWhlYWRlci5jZ2k/eGhyLWRvYy1pbXBvcnRlZC54c2wiIC8+CisKKzx4c2w6
dGVtcGxhdGUgbWF0Y2g9Ii9yb290Ij4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0id29y
a3MiIC8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPC94c2w6c3R5bGVzaGVldD4KSW5kZXg6IExheW91
dFRlc3RzL2h0dHAvdGVzdHMveHNsL3Jlc291cmNlcy94aHItZG9jLWltcG9ydGVkLnhzbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMveGhyLWRvYy1p
bXBvcnRlZC54c2wJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3hzbC9y
ZXNvdXJjZXMveGhyLWRvYy1pbXBvcnRlZC54c2wJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQg
QEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8eHNsOnN0eWxlc2hl
ZXQgdmVyc2lvbj0iMS4wIgorICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNM
L1RyYW5zZm9ybSIKKyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgorCis8
eHNsOnRlbXBsYXRlIG1hdGNoPSIvcm9vdCI+CisgICAgPGRpdiBjbGFzcz0iZGVmYXVsdCI+RkFJ
TDogSW5jb3JyZWN0IHRyYW5zZm9ybWF0aW9uLjwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4
c2w6dGVtcGxhdGUgbmFtZT0id29ya3MiPgorICAgIDxkaXYgY2xhc3M9Im92ZXJyaWRkZW4iPlNV
Q0NFU1M8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8L3hzbDpzdHlsZXNoZWV0PgpJbmRleDog
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94c2wvcmVzb3VyY2VzL3hoci1kb2MueG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3Jlc291cmNlcy94aHItZG9jLnhtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMveHNsL3Jlc291cmNlcy94aHIt
ZG9jLnhtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAi
IGVuY29kaW5nPSJ1dGYtOCI/PgorPD94bWwtc3R5bGVzaGVldCB0eXBlPSJ0ZXh0L3hzbCIgaHJl
Zj0ieGhyLWRvYy54c2wiPz4KKzxyb290Lz4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMv
eHNsL3Jlc291cmNlcy94aHItZG9jLnhzbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3hzbC9yZXNvdXJjZXMveGhyLWRvYy54c2wJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3hzbC9yZXNvdXJjZXMveGhyLWRvYy54c2wJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8
eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIgorICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMu
b3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKKyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkv
eGh0bWwiPgorCis8eHNsOmltcG9ydCBocmVmPSJ4aHItZG9jLWltcG9ydGVkLnhzbCIgLz4KKwor
PHhzbDp0ZW1wbGF0ZSBtYXRjaD0iL3Jvb3QiPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1l
PSJ3b3JrcyIgLz4KKzwveHNsOnRlbXBsYXRlPgorCis8L3hzbDpzdHlsZXNoZWV0Pgo=
</data>
<flag name="review"
          id="76731"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>