<?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>94386</bug_id>
          
          <creation_ts>2012-08-17 14:58:30 -0700</creation_ts>
          <short_desc>[Chromium] Implementing a global limit on memory consumed by deferred 2D canvases</short_desc>
          <delta_ts>2013-04-15 08:17:28 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>94976</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Justin Novosad">junov</reporter>
          <assigned_to name="Justin Novosad">junov</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>jamesr</cc>
    
    <cc>jchaffraix</cc>
    
    <cc>kbr</cc>
    
    <cc>schenney</cc>
    
    <cc>senorblanco</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>698697</commentid>
    <comment_count>0</comment_count>
    <who name="Justin Novosad">junov</who>
    <bug_when>2012-08-17 14:58:30 -0700</bug_when>
    <thetext>[Chromium] Implementing a global limit on memory consumed by deferred 2D canvases</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>699467</commentid>
    <comment_count>1</comment_count>
      <attachid>159415</attachid>
    <who name="Justin Novosad">junov</who>
    <bug_when>2012-08-20 06:54:38 -0700</bug_when>
    <thetext>Created attachment 159415
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>699800</commentid>
    <comment_count>2</comment_count>
      <attachid>159415</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-08-20 12:39:26 -0700</bug_when>
    <thetext>Comment on attachment 159415
Patch

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

This looks pretty good to me overall but I defer to senorblanco and jamesr for a more thorough review. One license-related issue though.

&gt; Source/WebCore/platform/graphics/chromium/DeferredLayer.cpp:16
&gt; + * this software without specific prior written permission.

Wrong license. Here and throughout, please use the two-clause license in Source/WebKit/LICENSE.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>700997</commentid>
    <comment_count>3</comment_count>
      <attachid>159737</attachid>
    <who name="Justin Novosad">junov</who>
    <bug_when>2012-08-21 12:26:16 -0700</bug_when>
    <thetext>Created attachment 159737
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701001</commentid>
    <comment_count>4</comment_count>
    <who name="Justin Novosad">junov</who>
    <bug_when>2012-08-21 12:31:23 -0700</bug_when>
    <thetext>New patch fixes:
- license issue from comment 2
- DeferredLayerManager::isInList was not working properly because next/prev linked list pointers were not reset to 0 when removing an element from the list
- Improved unit test coverage for isInList.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701916</commentid>
    <comment_count>5</comment_count>
      <attachid>159737</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-08-22 08:09:18 -0700</bug_when>
    <thetext>Comment on attachment 159737
Patch

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

I&apos;m still not fond of this solution.  It&apos;s not really &quot;global&quot; since it&apos;s only per-render process.  But you&apos;ve managed to convince me that there are use cases for which this level of complexity is necessary.  If possible, let&apos;s try to hang the manager off the GraphicsContext3D at some level, rather than using a singleton.

&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerBridge.cpp:191
&gt; +        didDraw();

This is a shame; I was hoping we could get rid of contextAcquired() altogether once we removed the non-deferred path.  Oh well.

&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerBridge.h:47
&gt; +class Canvas2DLayerBridge : public WebKit::WebExternalTextureLayerClient, public SkDeferredCanvas::NotificationClient, public DeferredLayer {

Please avoid multiple implementation inheritance, if possible.  If you must derive, please derive from the DoublyLinkedListNode&lt;&gt; directly, and just maintain a list of those in the manager.  (I think DeferredLayer could then go away).

&gt; Source/WebCore/platform/graphics/chromium/DeferredLayer.cpp:35
&gt; +    , m_manager(&amp;DeferredLayerManager::get())

Since it&apos;s a singleton, might as well just call DeferredLayerManager::get() on demand, and save the memory here.

&gt; Source/WebCore/platform/graphics/chromium/DeferredLayerManager.cpp:71
&gt; +            m_layerList.push(layer); // Set as MRU

I&apos;m not too fond of adding the complexity of MRU cache, but you&apos;ve convinced me that there is a use case apart from navigation for which it&apos;s necessary (the game with separate &quot;contexts&quot; and multiple canvases).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703217</commentid>
    <comment_count>6</comment_count>
      <attachid>160208</attachid>
    <who name="Justin Novosad">junov</who>
    <bug_when>2012-08-23 11:58:49 -0700</bug_when>
    <thetext>Created attachment 160208
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703223</commentid>
    <comment_count>7</comment_count>
    <who name="Justin Novosad">junov</who>
    <bug_when>2012-08-23 12:01:44 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Created an attachment (id=160208) [details]
&gt; Patch

New patch addresses feedback from comment #5.
After discussion, opted to not not hang the layer manager off of GraphicsContext3D and keep it as a singleton.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703259</commentid>
    <comment_count>8</comment_count>
      <attachid>160208</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-08-23 12:41:28 -0700</bug_when>
    <thetext>Comment on attachment 160208
Patch

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

Thanks for the fixes.  Remaining comments are optional.  r=me

&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerBridge.cpp:114
&gt; +    Canvas2DLayerManager::get().layerAllocatedStorageChanged(this);

If you wanted to, I think you could remove m_newBytesAllocated in each layer by passing the old and new sizes (or the delta) directly to the manager when they&apos;re changed on the layer.  Then you wouldn&apos;t need to pick them up later.

&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerBridge.cpp:127
&gt; +    m_newBytesAllocated = deferredCanvas()-&gt;storageAllocatedForRecording();

Same as above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704319</commentid>
    <comment_count>9</comment_count>
      <attachid>160470</attachid>
    <who name="Justin Novosad">junov</who>
    <bug_when>2012-08-24 12:04:51 -0700</bug_when>
    <thetext>Created attachment 160470
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704320</commentid>
    <comment_count>10</comment_count>
    <who name="Justin Novosad">junov</who>
    <bug_when>2012-08-24 12:06:32 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Created an attachment (id=160470) [details]
&gt; Patch

Implemented suggestion from comment #8</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704342</commentid>
    <comment_count>11</comment_count>
      <attachid>160470</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-08-24 12:35:04 -0700</bug_when>
    <thetext>Comment on attachment 160470
Patch

Looks good.  However, the EWS bots are having trouble; I think you might have to update.  r=me in any case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704354</commentid>
    <comment_count>12</comment_count>
      <attachid>160479</attachid>
    <who name="Justin Novosad">junov</who>
    <bug_when>2012-08-24 12:46:25 -0700</bug_when>
    <thetext>Created attachment 160479
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704355</commentid>
    <comment_count>13</comment_count>
    <who name="Justin Novosad">junov</who>
    <bug_when>2012-08-24 12:47:21 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Created an attachment (id=160479) [details]
&gt; Patch

Resolve patch conflict</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704361</commentid>
    <comment_count>14</comment_count>
      <attachid>160479</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-08-24 12:51:59 -0700</bug_when>
    <thetext>Comment on attachment 160479
Patch

r=me (bots willing).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704404</commentid>
    <comment_count>15</comment_count>
      <attachid>160479</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-24 13:47:24 -0700</bug_when>
    <thetext>Comment on attachment 160479
Patch

Clearing flags on attachment: 160479

Committed r126620: &lt;http://trac.webkit.org/changeset/126620&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704405</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-24 13:47:28 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704448</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-24 15:08:45 -0700</bug_when>
    <thetext>Re-opened since this is blocked by 94976</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704450</commentid>
    <comment_count>18</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-08-24 15:11:48 -0700</bug_when>
    <thetext>One ASSERT is triggering on the bots:

crash log for DumpRenderTree (pid 19068):
STDOUT: &lt;empty&gt;
STDERR: ASSERTION FAILED: (intptr_t)m_bytesAllocated + deltaBytes &gt; 0
STDERR: third_party/WebKit/Source/WebCore/platform/graphics/chromium/Canvas2DLayerManager.cpp(88) : void WebCore::Canvas2DLayerManager::layerAllocatedStorageChanged(WebCore::Canvas2DLayerBridge*, intptr_t)
STDERR: 1   0x7fc4feee5408
STDERR: 2   0x7fc4feee468c
STDERR: 3   0x7fc4feee46d2
STDERR: 4   0x7fc4fa75aa28
STDERR: 5   0x7fc4fa75aa5c
STDERR: 6   0x7fc4fa7aeff8 SkCanvas::flush()
STDERR: 7   0x7fc4feee49e0
STDERR: 8   0x7fc4fe3bffec
STDERR: 9   0x7fc4ffaf02bc
STDERR: 10  0x7fc4ffb26a5e
STDERR: 11  0x7fc4ffb26210
STDERR: 12  0x7fc4ffb25ff1
STDERR: 13  0x7fc4ffb776ee
STDERR: 14  0x7fc4ffb76730
STDERR: 15  0x7fc4ffb2563e
STDERR: 16  0x7fc4fe3c324b WebKit::WebLayerTreeView::compositeAndReadback(void*, WebKit::WebRect const&amp;)
STDERR: 17  0x7fc4fdd76d4c
STDERR: 18  0x7fc4fdd770ac
STDERR: 19  0x4cd696
STDERR: 20  0x4cd91c
STDERR: 21  0x4bb957
STDERR: 22  0x4ba238
STDERR: 23  0x492440
STDERR: 24  0x4939a7
STDERR: 25  0x4ccac4
STDERR: 26  0x4c9766
STDERR: 27  0x7fc4fdcb5589
STDERR: 28  0x7fc4ff5863bc
STDERR: 29  0x7fc4ff586fc6
STDERR: 30  0x7fc4ff561d50
STDERR: 31  0x7fc4ff59bfe7
STDERR: [19068:19068:13306426671345:ERROR:process_util_posix.cc(143)] Received signal 11
STDERR: 	base::debug::StackTrace::StackTrace() [0x7fc4fb805ea6]
STDERR: 	base::(anonymous namespace)::StackDumpSignalHandler() [0x7fc4fb86ceed]
STDERR: 	0x7fc4f52ccaf0
STDERR: 	WebCore::Canvas2DLayerManager::layerAllocatedStorageChanged() [0x7fc4feee5412]
STDERR: 	WebCore::Canvas2DLayerBridge::storageAllocatedForRecordingChanged() [0x7fc4feee468c]
STDERR: 	WebCore::Canvas2DLayerBridge::flushedDrawCommands() [0x7fc4feee46d2]
STDERR: 	DeferredDevice::flushPending() [0x7fc4fa75aa28]
STDERR: 	DeferredDevice::flush() [0x7fc4fa75aa5c]
STDERR: 	SkCanvas::flush() [0x7fc4fa7aeff8]
STDERR: 	WebCore::Canvas2DLayerBridge::prepareTexture() [0x7fc4feee49e0]
STDERR: 	WebKit::WebExternalTextureLayerImpl::prepareTexture() [0x7fc4fe3bffec]
STDERR: 	WebCore::TextureLayerChromium::update() [0x7fc4ffaf02bc]
STDERR: 	WebCore::CCLayerTreeHost::paintLayerContents() [0x7fc4ffb26a5e]
STDERR: 	WebCore::CCLayerTreeHost::updateLayers() [0x7fc4ffb26210]
STDERR: 	WebCore::CCLayerTreeHost::updateLayers() [0x7fc4ffb25ff1]
STDERR: 	WebCore::CCSingleThreadProxy::commitAndComposite() [0x7fc4ffb776ee]
STDERR: 	WebCore::CCSingleThreadProxy::compositeAndReadback() [0x7fc4ffb76730]
STDERR: 	WebCore::CCLayerTreeHost::compositeAndReadback() [0x7fc4ffb2563e]
STDERR: 	WebKit::WebLayerTreeView::compositeAndReadback() [0x7fc4fe3c324b]
STDERR: 	WebKit::WebViewImpl::doPixelReadbackToCanvas() [0x7fc4fdd76d4c]
STDERR: 	WebKit::WebViewImpl::paint() [0x7fc4fdd770ac]
STDERR: 	WebViewHost::paintRect() [0x4cd696]
STDERR: 	WebViewHost::paintInvalidatedRegion() [0x4cd91c]
STDERR: 	TestShell::dump() [0x4bb957]
STDERR: 	TestShell::testFinished() [0x4ba238]
STDERR: 	DRTTestRunner::WorkQueue::processWorkSoon() [0x492440]
STDERR: 	DRTTestRunner::locationChangeDone() [0x4939a7]
STDERR: 	WebViewHost::locationChangeDone() [0x4ccac4]
STDERR: 	WebViewHost::didFinishLoad() [0x4c9766]
STDERR: 	WebKit::FrameLoaderClientImpl::dispatchDidFinishLoad() [0x7fc4fdcb5589]
STDERR: 	WebCore::FrameLoader::checkLoadCompleteForThisFrame() [0x7fc4ff5863bc]
STDERR: 	WebCore::FrameLoader::checkLoadComplete() [0x7fc4ff586fc6]
STDERR: 	WebCore::DocumentLoader::finishedLoading() [0x7fc4ff561d50]
STDERR: 	WebCore::MainResourceLoader::didFinishLoading() [0x7fc4ff59bfe7]
STDERR: 	WebCore::ResourceLoader::didFinishLoading() [0x7fc4ff5b04f9]
STDERR: 	WebCore::ResourceHandleInternal::didFinishLoading() [0x7fc4fef8135a]
STDERR: 	webkit_glue::WebURLLoaderImpl::Context::OnCompletedRequest() [0x7fc4f9dab154]
STDERR: 	(anonymous namespace)::RequestProxy::NotifyCompletedRequest() [0x60288f]
STDERR: 	base::internal::RunnableAdapter&lt;&gt;::Run() [0x608c84]
STDERR: 	base::internal::InvokeHelper&lt;&gt;::MakeItSo() [0x60862e]
STDERR: 	base::internal::Invoker&lt;&gt;::Run() [0x607f40]
STDERR: 	base::Callback&lt;&gt;::Run() [0x7fc4fb7fe049]
STDERR: 	MessageLoop::RunTask() [0x7fc4fb83fb2e]
STDERR: 	MessageLoop::DeferOrRunPendingTask() [0x7fc4fb83fc46]
STDERR: 	MessageLoop::DoWork() [0x7fc4fb840461]
STDERR: 	base::MessagePumpGlib::HandleDispatch() [0x7fc4fb7e4271]
STDERR: 	(anonymous namespace)::WorkSourceDispatch() [0x7fc4fb7e398b]
STDERR: 	0x7fc4f60258c2
STDERR: 	0x7fc4f6029748
STDERR: 	0x7fc4f60298fc
STDERR: 	base::MessagePumpGlib::RunWithDispatcher() [0x7fc4fb7e3f20]
STDERR: 	base::MessagePumpGlib::Run() [0x7fc4fb7e434e]
STDERR: 	MessageLoop::RunInternal() [0x7fc4fb83f7f3]
STDERR: 	MessageLoop::RunHandler() [0x7fc4fb83f6aa]
STDERR: 	base::RunLoop::Run() [0x7fc4fb872ba6]
STDERR: 	MessageLoop::Run() [0x7fc4fb83efd8]
STDERR: 	webkit_support::RunMessageLoop() [0x52c119]
STDERR: 	TestShell::waitTestFinished() [0x4c0be2]
STDERR: 	TestShell::runFileTest() [0x4b9ca4]
STDERR: 	runTest() [0x485a82]
STDERR: 	main [0x486443]
STDERR: 	0x7fc4f52b7c4d

List of the tests triggering it:

compositing/layer-creation/spanOverlapsCanvas.html
compositing/masks/layer-mask-placement.html
compositing/overflow/image-load-overflow-scrollbars.html
compositing/overflow/overflow-hidden-canvas-layer.html
platform/chromium/compositing/scissor-out-of-viewport.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>705209</commentid>
    <comment_count>19</comment_count>
    <who name="Justin Novosad">junov</who>
    <bug_when>2012-08-27 06:13:18 -0700</bug_when>
    <thetext>D&apos;oh! The failing ASSERT should been &apos;&gt;= 0&apos; rather than &apos;&gt; 0&apos;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>705220</commentid>
    <comment_count>20</comment_count>
      <attachid>160707</attachid>
    <who name="Justin Novosad">junov</who>
    <bug_when>2012-08-27 06:32:15 -0700</bug_when>
    <thetext>Created attachment 160707
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>705235</commentid>
    <comment_count>21</comment_count>
      <attachid>160707</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-08-27 06:56:16 -0700</bug_when>
    <thetext>Comment on attachment 160707
Patch

OK.  r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>705257</commentid>
    <comment_count>22</comment_count>
      <attachid>160707</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-27 07:27:28 -0700</bug_when>
    <thetext>Comment on attachment 160707
Patch

Clearing flags on attachment: 160707

Committed r126760: &lt;http://trac.webkit.org/changeset/126760&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>705258</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-27 07:27:32 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>705428</commentid>
    <comment_count>24</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-08-27 11:25:27 -0700</bug_when>
    <thetext>This kills webkit_unit_tests in debug - isInList() in one of the ASSERT()s is doing infinite recursion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>875839</commentid>
    <comment_count>25</comment_count>
    <who name="Stephen Chenney">schenney</who>
    <bug_when>2013-04-15 08:17:28 -0700</bug_when>
    <thetext>https://code.google.com/p/chromium/issues/detail?id=231365</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159415</attachid>
            <date>2012-08-20 06:54:38 -0700</date>
            <delta_ts>2012-08-21 12:26:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94386-20120820095359.patch</filename>
            <type>text/plain</type>
            <size>32210</size>
            <attacher name="Justin Novosad">junov</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyNTkzOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwOCBAQAorMjAxMi0wOC0xNyAgSnVzdGlu
IE5vdm9zYWQgIDxqdW5vdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBJbXBs
ZW1lbnRpbmcgYSBnbG9iYWwgbGltaXQgb24gbWVtb3J5IGNvbnN1bWVkIGJ5IGRlZmVycmVkIDJE
IGNhbnZhc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05NDM4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEJlZm9yZSB0aGlzIGNoYW5nZSwgdGhlcmUgd2FzIG5vIGdsb2JhbCBib3VuZCBvbiBtZW1vcnkg
dGhhdCBjb3VsZCBiZQorICAgICAgICBjb25zdW1lZCBmb3IgdGhlIHB1cnBvc2Ugb2YgcmVjb3Jk
aW5nIDJkIGNhbnZhcyBkZWZlcnJlZCBkcmF3IGNvbW1hbmRzLgorICAgICAgICBUaGVyZSB3YXMg
b25seSBhIHBlciBjYW52YXMgbGltaXQuIEl0IGlzIHBvc3NpYmxlIGZvciBjYW52YXNlcyB0byBn
ZXQKKyAgICAgICAgZGVyZWZlcmVuY2VkIHdpdGhvdXQgZmx1c2hpbmcgcGVuZGluZyBkcmF3IGNv
bW1hbmRzLCB3aGljaCBtYXkgbG9jaworICAgICAgICByZXNvdXJjZXMgdW50aWwgdGhlIGNhbnZh
cyBlbGVtZW50IGlzIGdhcmJhZ2UgY29sbGVjdGVkLiBUaGlzIG1ha2VzCisgICAgICAgIGl0IHBv
c3NpYmxlIHRvIGdyb3cgbWVtb3J5IGNvbnN1bXB0aW9uIGluZGVmaW5pdGVseSBieSBoaXR0aW5n
IHJlbG9hZAorICAgICAgICBzdWNjZXNzaXZlbHkgb24gc29tZSBjYW52YXMtaW50ZW5zaXZlIHdl
YiBwYWdlcy4KKworICAgICAgICBUaGUgc29sdXRpb24gaW1wbGVtZW50ZWQgaW4gdGhpcyBjaGFu
Z2UgY29uc2lzdHMgaW4gbWFpbnRhaW5pbmcgYQorICAgICAgICBnbG9iYWwgcmVnaXN0cnkgb2Yg
ZGVmZXJyZWQgY2FudmFzIGxheWVycyBhbmQgdHJhY2tpbmcgdGhlIHN1bSBvZgorICAgICAgICBt
ZW1vcnkgYWxsb2NhdGVkIGJ5IGFsbCBjYW52YXNlcyBmb3IgdGhlIHB1cnBvc2Ugb2Ygc3Rvcmlu
ZyBkZWZlcnJlZAorICAgICAgICBkcmF3IGNvbW1hbmRzLiBXaGVuIG1lbW9yeSBjb25zdW1wdGlv
biByZWFjaGVzIHRoZSBhbGxvd2VkIGxpbWl0LAorICAgICAgICBjYWNoZXMgYXJlIGNsZWFyZWQg
YW5kIGRyYXcgb3BlcmF0aW9ucyBhcmUgZmx1c2hlZCBvbiBvbmUgb3Igc2V2ZXJhbAorICAgICAg
ICBjYW52YXNlcywgc3RhcnRpbmcgd2l0aCB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZCwgdW50aWwg
bWVtb3J5CisgICAgICAgIGNvbnN1bXB0aW9uIGlzIGJlbG93IGEgdGFyZ2V0IGxldmVsLgorCisg
ICAgICAgIE5ldyB0ZXN0czogd2Via2l0X3VuaXRfdGVzdHMgRGVmZXJyZWRMYXllck1hbmFnZXJU
ZXN0KgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJCcmlkZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzMkRMYXllckJyaWRnZTo6Q2FudmFzMkRMYXllckJyaWRnZSk6CisgICAgICAgIChXZWJD
b3JlOjpDYW52YXMyRExheWVyQnJpZGdlOjpzdG9yYWdlQWxsb2NhdGVkRm9yUmVjb3JkaW5nQ2hh
bmdlZCk6CisgICAgICAgIE92ZXJsb2FkZWQgZnJvbSBTa0RlZmVycmVkQ2FudmFzOjpOb3RpZmlj
YXRpb25DbGllbnQuIENhbGxlZCB3aGVuCisgICAgICAgIHRoZXJlIGlzIGEgY2hhbmdlIGluIHRo
ZSBudW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkIGJ5IHRoZSBkZWZlcnJlZAorICAgICAgICBjYW52
YXMuICBSZWxheXMgdGhlIG5vdGlmaWNhdGlvbiB0byBEZWZlcnJlZExheWVyLgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQnJpZGdlOjpmbHVzaGVk
RHJhd0NvbW1hbmRzKToKKyAgICAgICAgT3ZlcmxvYWRlZCBmcm9tIFNrRGVmZXJyZWRDYW52YXM6
Ok5vdGlmaWNhdGlvbkNsaWVudC4gQ2FsbGVkIHdoZW4KKyAgICAgICAgcGVuZGluZyBkcmF3IGNv
bW1hbmRzIGFyZSBmbHVzaCBieSB0aGUgZGVmZXJyZWQgY2FudmFzLiAgUmVsYXlzIHRoZQorICAg
ICAgICBub3RpZmljYXRpb24gdG8gRGVmZXJyZWRMYXllci4KKyAgICAgICAgKFdlYkNvcmU6OkNh
bnZhczJETGF5ZXJCcmlkZ2U6OmZyZWVNZW1vcnlJZlBvc3NpYmxlKToKKyAgICAgICAgT3Zlcmxv
YWRlZCBmcm9tIERlZmVycmVkTGF5ZXIuIENhbGxlZCBieSB0aGUgRGVmZXJyZWRMYXllck1hbmFn
ZXIgdG8KKyAgICAgICAgcmVxdWVzdCB0aGUgcmVsZWFzZSBvZiB1bmxvY2tlZCBtZW1vcnkgcmVz
b3VyY2VzIChjYWNoZXMpLiBSZXF1ZXN0CisgICAgICAgIGlzIHJlbGF5ZWQgdG8gU2tEZWZlcnJl
ZENhbnZhcy4gcmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgZnJlZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXMyRExheWVyQnJpZGdlOjpnZXRDdXJyZW50Qnl0ZXNBbGxvY2F0ZWQpOgorICAgICAg
ICBPdmVybG9hZGVkIGZyb20gRGVmZXJyZWRMYXllci4gUmV0cmlldmVzIHVwIHRvIGRhdGUgbWVt
b3J5IGNvbnN1bXB0aW9uCisgICAgICAgIGZyb20gdGhlIGRlZmVycmVkIGNhbnZhcy4KKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJCcmlkZ2U6OmZsdXNoKToKKyAgICAgICAgT3Zlcmxv
YWRlZCBmcm9tIERlZmVycmVkTGF5ZXIuIFJlcXVlc3RzIHRoYXQgcGVuZGluZyBkcmF3IGNvbW1h
bmQgYmUKKyAgICAgICAgZmx1c2hlZCBpbW1lZGlhdGVseSBmcm9tIHRoZSBkZWZlcnJlZCBjYW52
YXMgcXVldWUuIFJlcXVlc3QgaXMgcmVsYXllZAorICAgICAgICB0byBTa0RlZmVycmVkQ2FudmFz
LgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckJyaWRnZTo6Y29udGV4dEFjcXVpcmVk
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQnJp
ZGdlLmg6CisgICAgICAgIChDYW52YXMyRExheWVyQnJpZGdlKToKKyAgICAgICAgQWRkZWQgdmly
dHVhbCBvdmVybG9hZHMgdG8gaW1wbGVtZW50IGludGVyZmFjZXMgZGVmaW5lZCBpbiAKKyAgICAg
ICAgV2ViQ29yZTo6RGVmZXJyZWRMYXllciBhbmQgU2tEZWZlcnJlZENhbnZhczo6Tm90aWZpY2F0
aW9uQ0xpZW50IChza2lhKQorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Rl
ZmVycmVkTGF5ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6RGVmZXJyZWRMYXllcjo6RGVmZXJyZWRMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpE
ZWZlcnJlZExheWVyOjp+RGVmZXJyZWRMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJl
ZExheWVyOjphbGxvY2F0ZWRTdG9yYWdlQ2hhbmdlZCk6CisgICAgICAgIE1ldGhvZCBpbnZva2Vk
IGJ5IGNoaWxkIGNsYXNzIHRvIGluZGljYXRlIGEgY2hhbmdlIGluIG1lbW9yeQorICAgICAgICBj
b25zdW1wdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkTGF5ZXI6OmRpZERyYXcpOgor
ICAgICAgICBNZXRob2QgaW52b2tlIGJ5IGNoaWxkIGNsYXNzIHRvIGluZGljYXRlIHRoYXQgdGhl
IGxheWVyIHdhcyBkcmF3IHRvCisgICAgICAgIFJlZ2lzdGVycyB0aGUgbGF5ZXIgYXMgTVJVIHdp
dGggdGhlIERlZmVycmVkTGF5ZXJNYW5hZ2VyCisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZExh
eWVyOjpkaWRGbHVzaCk6CisgICAgICAgIE1ldGhvZCBpbnZva2VkIGJ5IGNoaWxkIGNsYXNzIHRv
IGluZGljYXRlIHRoYXQgcGVuZGluZyBkcmF3IGNvbW1hbmRzCisgICAgICAgIGhhdmUgYmVlbiBm
bHVzaGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkTGF5
ZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKERlZmVycmVkTGF5ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRMYXllcjo6Ynl0ZXNBbGxvY2F0ZWQpOgorICAg
ICAgICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkIGJ5IHRoZSBkZWZlcnJl
ZCBsYXllciwgYXMKKyAgICAgICAgcmVwb3J0ZWQgYnkgdGhlIGxhc3QgdXBkYXRlIChtYXkgbm90
IGJlIHVwIHRvIGRhdGUpCisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZExheWVyOjp1cGRhdGVC
eXRlc0FsbG9jYXRlZCk6CisgICAgICAgIFJldHJpZXZlcyBhbmQgcmV0dXJucyB0aGUgdXAgdG8g
ZGF0ZSBudW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkIGJ5CisgICAgICAgIHRoZSBkZWZlcnJlZCBs
YXllci4KKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkTGF5ZXI6Om1hbmFnZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkTGF5ZXJNYW5hZ2VyLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkTGF5
ZXJNYW5hZ2VyOjpEZWZlcnJlZExheWVyTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpEZWZl
cnJlZExheWVyTWFuYWdlcjo6fkRlZmVycmVkTGF5ZXJNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNv
cmU6OkRlZmVycmVkTGF5ZXJNYW5hZ2VyOjppbml0KToKKyAgICAgICAgU2V0cyB0aGUgZ2xvYmFs
IGxpbWl0IGZvciB0aGUgbWF4aW11bSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkCisg
ICAgICAgIGJ5IGRlZmVycmVkIGxheWVycy4KKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkTGF5
ZXJNYW5hZ2VyOjpnZXQpOgorICAgICAgICBTaW5nbGV0b24gYWNjZXNzb3IuCisgICAgICAgIChX
ZWJDb3JlOjpEZWZlcnJlZExheWVyTWFuYWdlcjo6bGF5ZXJEaWREcmF3KToKKyAgICAgICAgQ2Fs
bGVkIGJ5IERlZmVycmVkTGF5ZXIgdG8gaW5kaWNhdGUgdGhhdCB0aGUgbGF5ZXIgd2FzIGRyYXdu
IHRvLgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRMYXllck1hbmFnZXI6OmFkZExheWVyVG9M
aXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkTGF5ZXJNYW5hZ2VyOjpsYXllckFsbG9j
YXRlZFN0b3JhZ2VDaGFuZ2VkKToKKyAgICAgICAgQ2FsbGVkIGJ5IERlZmVycmVkTGF5ZXIgdG8g
aW5kaWNhdGUgdGhldCB0aGUgbWVtb3J5IGNvbnN1bWVkIGJ5IHRoZQorICAgICAgICBsYXllciBo
YXMgY2hhbmdlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkTGF5ZXJNYW5hZ2VyOjpsYXll
ckRpZEZsdXNoKToKKyAgICAgICAgQ2FsbGVkIGJ5IERlZmVycmVkTGF5ZXIgdG8gaW5kaWNhdGVk
IHRoYXQgdGhlIHBlbmRpbmcgZHJhdyBjb21tYW5kcworICAgICAgICBvZiB0aGUgbGF5ZXIgd2Vy
ZSBmbHVzaGVkLgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRMYXllck1hbmFnZXI6OmxheWVy
VG9CZURlc3Ryb3llZCk6CisgICAgICAgIENhbGxlZCBieSB0aGUgRGVmZXJyZWRMYXllciwgcmVt
b3ZlcyByZWZlcmVuY2VzIHRvIHRoZSBsYXllci4KKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVk
TGF5ZXJNYW5hZ2VyOjpmcmVlTWVtb3J5SWZOZWNlc3NhcnkpOgorICAgICAgICBDYWxsZWQgaW50
ZXJuYWxseS4gQ2hlY2sgdGhhdCBjdXJyZW50IG1lbW9yeSBjb25zdW1wdGlvbiBpcyBiZWxvdwor
ICAgICAgICB0aGUgdG9sZXJhdGVkIGxpbWl0LiAgSWYgY2hlY2sgZmFpbHMsIGludGlhdGVzIHJl
c291cmNlIHJlbGVhc2VzLgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRMYXllck1hbmFnZXI6
OmlzSW5MaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkTGF5ZXJNYW5hZ2VyOjp1cGRh
dGVCeXRlc0FsbG9jYXRlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
RGVmZXJyZWRMYXllck1hbmFnZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKERlZmVycmVkTGF5ZXJNYW5hZ2VyKToKKwogMjAxMi0wOC0xNyAgQnJpYW4gQW5kZXJzb24g
IDxicmlhbmRlcnNvbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgRml4IHZzeW5jVGljayBkcm91
Z2h0IHdoZW4gdnN5bmMgdGhyb3R0bGluZyBpcyBkaXNhYmxlZApJbmRleDogU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQkocmV2aXNpb24gMTI1OTI1KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjM4LDYgKzM2MzgsMTAgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Db21wb3NpdG9ySFVERm9udEF0bGFzLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nyb3NzUHJvY2Vzc0ZvbnRMb2FkaW5nLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nyb3NzUHJvY2Vzc0ZvbnRM
b2FkaW5nLm1tJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EZWZl
cnJlZExheWVyLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
RGVmZXJyZWRMYXllci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9EZWZlcnJlZExheWVyTWFuYWdlci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0RlZmVycmVkTGF5ZXJNYW5hZ2VyLmgnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0V4dGVuc2lvbnMzRENocm9taXVtLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUFuZHJv
aWQuY3BwJywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NhbnZhczJETGF5ZXJCcmlkZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJCcmlkZ2UuY3BwCShyZXZpc2lv
biAxMjU5MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
YW52YXMyRExheWVyQnJpZGdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsNyBAQCBD
YW52YXMyRExheWVyQnJpZGdlOjpDYW52YXMyRExheWVyQnJpZGdlCiAgICAgLCBtX3NpemUoc2l6
ZSkKICAgICAsIG1fY2FudmFzKDApCiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1f
Ynl0ZXNBbGxvY2F0ZWRGb3JSZWNvcmRpbmcoMCkKIHsKICAgICBpZiAobV91c2VEb3VibGVCdWZm
ZXJpbmcpIHsKICAgICAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKQEAgLTEw
Miw2ICsxMDMsMzcgQEAgdm9pZCBDYW52YXMyRExheWVyQnJpZGdlOjpwcmVwYXJlRm9yRHJhdwog
ICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiB9CiAKK3ZvaWQgQ2FudmFzMkRM
YXllckJyaWRnZTo6c3RvcmFnZUFsbG9jYXRlZEZvclJlY29yZGluZ0NoYW5nZWQoc2l6ZV90IGJ5
dGVzQWxsb2NhdGVkKQoreworICAgIEFTU0VSVChtX2RlZmVycmFsTW9kZSA9PSBEZWZlcnJlZCk7
CisgICAgbV9ieXRlc0FsbG9jYXRlZEZvclJlY29yZGluZyA9IGJ5dGVzQWxsb2NhdGVkOworICAg
IGFsbG9jYXRlZFN0b3JhZ2VDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgQ2FudmFzMkRMYXllckJyaWRn
ZTo6Zmx1c2hlZERyYXdDb21tYW5kcygpCit7CisgICAgQVNTRVJUKG1fZGVmZXJyYWxNb2RlID09
IERlZmVycmVkKTsKKyAgICBkaWRGbHVzaCgpOworfQorCitzaXplX3QgQ2FudmFzMkRMYXllckJy
aWRnZTo6ZnJlZU1lbW9yeUlmUG9zc2libGUoc2l6ZV90IGJ5dGVzVG9GcmVlKQoreworICAgIEFT
U0VSVChkZWZlcnJlZENhbnZhcygpKTsKKyAgICByZXR1cm4gZGVmZXJyZWRDYW52YXMoKS0+ZnJl
ZU1lbW9yeUlmUG9zc2libGUoYnl0ZXNUb0ZyZWUpOworfQorCitzaXplX3QgQ2FudmFzMkRMYXll
ckJyaWRnZTo6Z2V0Q3VycmVudEJ5dGVzQWxsb2NhdGVkKCkKK3sKKyAgICBBU1NFUlQoZGVmZXJy
ZWRDYW52YXMoKSk7CisgICAgcmV0dXJuIG1fYnl0ZXNBbGxvY2F0ZWRGb3JSZWNvcmRpbmc7Cit9
CisKK3ZvaWQgQ2FudmFzMkRMYXllckJyaWRnZTo6Zmx1c2goKQoreworICAgIEFTU0VSVChkZWZl
cnJlZENhbnZhcygpKTsKKyAgICBtX2NhbnZhcy0+Zmx1c2goKTsKK30KKwogU2tDYW52YXMqIENh
bnZhczJETGF5ZXJCcmlkZ2U6OnNrQ2FudmFzKFNrRGV2aWNlKiBkZXZpY2UpCiB7CiAgICAgQVNT
RVJUKCFtX2NhbnZhcyk7CkBAIC0xNTUsNiArMTg3LDggQEAgdm9pZCBDYW52YXMyRExheWVyQnJp
ZGdlOjpjb250ZXh0QWNxdWlyZQogewogICAgIGlmIChtX2RlZmVycmFsTW9kZSA9PSBOb25EZWZl
cnJlZCAmJiAhbV91c2VEb3VibGVCdWZmZXJpbmcpCiAgICAgICAgIG1fbGF5ZXIud2lsbE1vZGlm
eVRleHR1cmUoKTsKKyAgICBlbHNlIGlmIChtX2RlZmVycmFsTW9kZSA9PSBEZWZlcnJlZCkKKyAg
ICAgICAgZGlkRHJhdygpOwogfQogCiB1bnNpZ25lZCBDYW52YXMyRExheWVyQnJpZGdlOjpiYWNr
QnVmZmVyVGV4dHVyZSgpCkBAIC0xNjcsNCArMjAxLDMgQEAgdW5zaWduZWQgQ2FudmFzMkRMYXll
ckJyaWRnZTo6YmFja0J1ZmZlcgogfQogCiB9Ci0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJCcmlkZ2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVy
QnJpZGdlLmgJKHJldmlzaW9uIDEyNTkyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJCcmlkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MjYsNiArMjYsNyBAQAogI2lmbmRlZiBDYW52YXMyRExheWVyQnJpZGdlX2gKICNkZWZpbmUgQ2Fu
dmFzMkRMYXllckJyaWRnZV9oCiAKKyNpbmNsdWRlICJEZWZlcnJlZExheWVyLmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIiAvLyBGb3Ig
RGVmZXJyYWxNb2RlIGVudW0uCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgpAQCAtNDMsNyArNDQsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIExheWVyQ2hyb21pdW07CiAKLWNsYXNzIENh
bnZhczJETGF5ZXJCcmlkZ2UgOiBwdWJsaWMgV2ViS2l0OjpXZWJFeHRlcm5hbFRleHR1cmVMYXll
ckNsaWVudCwgcHVibGljIFNrRGVmZXJyZWRDYW52YXM6Ok5vdGlmaWNhdGlvbkNsaWVudCB7Citj
bGFzcyBDYW52YXMyRExheWVyQnJpZGdlIDogcHVibGljIFdlYktpdDo6V2ViRXh0ZXJuYWxUZXh0
dXJlTGF5ZXJDbGllbnQsIHB1YmxpYyBTa0RlZmVycmVkQ2FudmFzOjpOb3RpZmljYXRpb25DbGll
bnQsIHB1YmxpYyBEZWZlcnJlZExheWVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDYW52
YXMyRExheWVyQnJpZGdlKTsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxDYW52YXMy
RExheWVyQnJpZGdlPiBjcmVhdGUoUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4
dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgRGVmZXJyYWxNb2RlIGRlZmVycmFsTW9kZSwgdW5zaWdu
ZWQgdGV4dHVyZUlkKQpAQCAtNTgsNyArNTksMTQgQEAgcHVibGljOgogICAgIHZpcnR1YWwgV2Vi
S2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCgpIE9WRVJSSURFOwogCiAgICAgLy8g
U2tEZWZlcnJlZENhbnZhczo6Tm90aWZpY2F0aW9uQ2xpZW50IGltcGxlbWVudGF0aW9uCi0gICAg
dmlydHVhbCB2b2lkIHByZXBhcmVGb3JEcmF3KCk7CisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVG
b3JEcmF3KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHN0b3JhZ2VBbGxvY2F0ZWRGb3JS
ZWNvcmRpbmdDaGFuZ2VkKHNpemVfdCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGZsdXNo
ZWREcmF3Q29tbWFuZHMoKSBPVkVSUklERTsKKworICAgIC8vIFdlYkNvcmU6OkRlZmVycmVkTGF5
ZXIgaW1wbGVtZW50YXRpb24KKyAgICB2aXJ0dWFsIHNpemVfdCBmcmVlTWVtb3J5SWZQb3NzaWJs
ZShzaXplX3QpIE9WRVJSSURFOworICAgIHZpcnR1YWwgc2l6ZV90IGdldEN1cnJlbnRCeXRlc0Fs
bG9jYXRlZCgpIE9WRVJSSURFOyAKKyAgICB2aXJ0dWFsIHZvaWQgZmx1c2goKSBPVkVSUklERTsK
IAogICAgIFNrQ2FudmFzKiBza0NhbnZhcyhTa0RldmljZSopOwogICAgIFdlYktpdDo6V2ViTGF5
ZXIqIGxheWVyKCk7CkBAIC03OCw2ICs4Niw3IEBAIHByaXZhdGU6CiAgICAgU2tDYW52YXMqIG1f
Y2FudmFzOwogICAgIFdlYktpdDo6V2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXIgbV9sYXllcjsKICAg
ICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKKyAgICBzaXplX3QgbV9ieXRl
c0FsbG9jYXRlZEZvclJlY29yZGluZzsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkTGF5ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkTGF5ZXIu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vRGVmZXJyZWRMYXllci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJEZWZlcnJlZExheWVyLmgiCisKKyNpbmNsdWRl
ICJEZWZlcnJlZExheWVyTWFuYWdlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0RlZmVy
cmVkTGF5ZXI6OkRlZmVycmVkTGF5ZXIoKQorICAgIDogbV9ieXRlc0FsbG9jYXRlZCgwKQorICAg
ICwgbV9tYW5hZ2VyKCZEZWZlcnJlZExheWVyTWFuYWdlcjo6Z2V0KCkpCisgICAgLCBtX25leHQo
MCkKKyAgICAsIG1fcHJldigwKQoreworfQorCitEZWZlcnJlZExheWVyOjp+RGVmZXJyZWRMYXll
cigpCit7CisgICAgbV9tYW5hZ2VyLT5sYXllclRvQmVEZXN0cm95ZWQodGhpcyk7Cit9CisKK3Zv
aWQgRGVmZXJyZWRMYXllcjo6YWxsb2NhdGVkU3RvcmFnZUNoYW5nZWQoKQoreworICAgIG1fbWFu
YWdlci0+bGF5ZXJBbGxvY2F0ZWRTdG9yYWdlQ2hhbmdlZCh0aGlzKTsKK30KKwordm9pZCBEZWZl
cnJlZExheWVyOjpkaWREcmF3KCkKK3sKKyAgICBtX21hbmFnZXItPmxheWVyRGlkRHJhdyh0aGlz
KTsKK30KKwordm9pZCBEZWZlcnJlZExheWVyOjpkaWRGbHVzaCgpCit7CisgICAgbV9tYW5hZ2Vy
LT5sYXllckRpZEZsdXNoKHRoaXMpOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EZWZlcnJlZExheWVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRGVmZXJyZWRMYXllci5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
RGVmZXJyZWRMYXllci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDczIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHd0
Zi9Eb3VibHlMaW5rZWRMaXN0Lmg+CisKKyNpZm5kZWYgRGVmZXJyZWRMYXllcl9oCisjZGVmaW5l
IERlZmVycmVkTGF5ZXJfaAorCitjbGFzcyBEZWZlcnJlZExheWVyTWFuYWdlclRlc3Q7CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRGVmZXJyZWRMYXllck1hbmFnZXI7CisKK2NsYXNz
IERlZmVycmVkTGF5ZXIgOiBwdWJsaWMgRG91Ymx5TGlua2VkTGlzdE5vZGU8RGVmZXJyZWRMYXll
cj4geworcHVibGljOgorICAgIERlZmVycmVkTGF5ZXIoKTsKKyAgICB2aXJ0dWFsIH5EZWZlcnJl
ZExheWVyKCk7CisKKyAgICB2aXJ0dWFsIHNpemVfdCBmcmVlTWVtb3J5SWZQb3NzaWJsZShzaXpl
X3QpID0gMDsKKyAgICB2aXJ0dWFsIHNpemVfdCBnZXRDdXJyZW50Qnl0ZXNBbGxvY2F0ZWQoKSA9
IDA7IAorICAgIHZpcnR1YWwgdm9pZCBmbHVzaCgpID0gMDsKKworICAgIHNpemVfdCBieXRlc0Fs
bG9jYXRlZCgpIHsgcmV0dXJuIG1fYnl0ZXNBbGxvY2F0ZWQ7IH0KKyAgICBzaXplX3QgdXBkYXRl
Qnl0ZXNBbGxvY2F0ZWQoKSB7IHJldHVybiBtX2J5dGVzQWxsb2NhdGVkID0gZ2V0Q3VycmVudEJ5
dGVzQWxsb2NhdGVkKCk7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgYWxsb2NhdGVkU3RvcmFn
ZUNoYW5nZWQoKTsKKyAgICB2b2lkIGRpZERyYXcoKTsKKyAgICB2b2lkIGRpZEZsdXNoKCk7Cisg
ICAgRGVmZXJyZWRMYXllck1hbmFnZXIqIG1hbmFnZXIoKSB7cmV0dXJuIG1fbWFuYWdlcjt9CisK
K3ByaXZhdGU6CisgICAgc2l6ZV90IG1fYnl0ZXNBbGxvY2F0ZWQ7CisgICAgZnJpZW5kIGNsYXNz
IFdURjo6RG91Ymx5TGlua2VkTGlzdE5vZGU8RGVmZXJyZWRMYXllcj47CisgICAgRGVmZXJyZWRM
YXllck1hbmFnZXIqIG1fbWFuYWdlcjsKKyAgICBEZWZlcnJlZExheWVyKiBtX25leHQ7CisgICAg
RGVmZXJyZWRMYXllciogbV9wcmV2OworCisgICAgZnJpZW5kIGNsYXNzIDo6RGVmZXJyZWRMYXll
ck1hbmFnZXJUZXN0OworfTsKKworfQorCisjZW5kaWYKKwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRGVmZXJyZWRMYXllck1hbmFnZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVy
cmVkTGF5ZXJNYW5hZ2VyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkTGF5ZXJNYW5hZ2VyLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJEZWZl
cnJlZExheWVyTWFuYWdlci5oIgorCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCitu
YW1lc3BhY2UgeworZW51bSB7CisgICAgRGVmYXVsdE1heEJ5dGVzQWxsb2NhdGVkID0gNjQqMTAy
NCoxMDI0LAorICAgIERlZmF1bHRUYXJnZXRCeXRlc0FsbG9jYXRlZCA9IDE2KjEwMjQqMTAyNCwK
K307Cit9CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitEZWZlcnJlZExheWVyTWFuYWdlcjo6
RGVmZXJyZWRMYXllck1hbmFnZXIoKQorICAgIDogbV9ieXRlc0FsbG9jYXRlZCgwKQorICAgICwg
bV9tYXhCeXRlc0FsbG9jYXRlZChEZWZhdWx0TWF4Qnl0ZXNBbGxvY2F0ZWQpCisgICAgLCBtX3Rh
cmdldEJ5dGVzQWxsb2NhdGVkKERlZmF1bHRUYXJnZXRCeXRlc0FsbG9jYXRlZCkKK3sKK30KKwor
RGVmZXJyZWRMYXllck1hbmFnZXI6On5EZWZlcnJlZExheWVyTWFuYWdlcigpCit7CisgICAgQVNT
RVJUKCFtX2J5dGVzQWxsb2NhdGVkKTsKKyAgICBBU1NFUlQoIW1fbGF5ZXJMaXN0LmhlYWQoKSk7
Cit9CisKK3ZvaWQgRGVmZXJyZWRMYXllck1hbmFnZXI6OmluaXQoc2l6ZV90IG1heEJ5dGVzQWxs
b2NhdGVkLCBzaXplX3QgdGFyZ2V0Qnl0ZXNBbGxvY2F0ZWQpCit7CisgICAgQVNTRVJUKG1heEJ5
dGVzQWxsb2NhdGVkID49IHRhcmdldEJ5dGVzQWxsb2NhdGVkKTsKKyAgICBtX21heEJ5dGVzQWxs
b2NhdGVkID0gbWF4Qnl0ZXNBbGxvY2F0ZWQ7CisgICAgbV90YXJnZXRCeXRlc0FsbG9jYXRlZCA9
IHRhcmdldEJ5dGVzQWxsb2NhdGVkOworfQorCitEZWZlcnJlZExheWVyTWFuYWdlciYgRGVmZXJy
ZWRMYXllck1hbmFnZXI6OmdldCgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChEZWZlcnJl
ZExheWVyTWFuYWdlciwgbWFuYWdlciwgKCkpOworICAgIHJldHVybiBtYW5hZ2VyOworfQorCit2
b2lkIERlZmVycmVkTGF5ZXJNYW5hZ2VyOjpsYXllckRpZERyYXcoRGVmZXJyZWRMYXllciogbGF5
ZXIpCit7CisgICAgaWYgKGlzSW5MaXN0KGxheWVyKSkgeworICAgICAgICBpZiAobGF5ZXIgIT0g
bV9sYXllckxpc3QuaGVhZCgpKSB7CisgICAgICAgICAgICBtX2xheWVyTGlzdC5yZW1vdmUobGF5
ZXIpOworICAgICAgICAgICAgbV9sYXllckxpc3QucHVzaChsYXllcik7IC8vIFNldCBhcyBNUlUK
KyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBhZGRMYXllclRvTGlzdChsYXllcik7IAor
fQorCit2b2lkIERlZmVycmVkTGF5ZXJNYW5hZ2VyOjphZGRMYXllclRvTGlzdChEZWZlcnJlZExh
eWVyKiBsYXllcikKK3sKKyAgICBBU1NFUlQoIWlzSW5MaXN0KGxheWVyKSk7CisgICAgbV9ieXRl
c0FsbG9jYXRlZCArPSBsYXllci0+dXBkYXRlQnl0ZXNBbGxvY2F0ZWQoKTsKKyAgICBtX2xheWVy
TGlzdC5wdXNoKGxheWVyKTsgLy8gU2V0IGFzIE1SVQorfQorCit2b2lkIERlZmVycmVkTGF5ZXJN
YW5hZ2VyOjpsYXllckFsbG9jYXRlZFN0b3JhZ2VDaGFuZ2VkKERlZmVycmVkTGF5ZXIqIGxheWVy
KQoreworICAgIGlmICghaXNJbkxpc3QobGF5ZXIpKQorICAgICAgICBhZGRMYXllclRvTGlzdChs
YXllcik7IAorICAgIHVwZGF0ZUJ5dGVzQWxsb2NhdGVkKGxheWVyKTsKKyAgICBmcmVlTWVtb3J5
SWZOZWNlc3NhcnkoKTsKK30KKwordm9pZCBEZWZlcnJlZExheWVyTWFuYWdlcjo6bGF5ZXJEaWRG
bHVzaChEZWZlcnJlZExheWVyKiBsYXllcikKK3sKKyAgICB1cGRhdGVCeXRlc0FsbG9jYXRlZChs
YXllcik7Cit9CisKK3ZvaWQgRGVmZXJyZWRMYXllck1hbmFnZXI6OmxheWVyVG9CZURlc3Ryb3ll
ZChEZWZlcnJlZExheWVyKiBsYXllcikKK3sKKyAgICBpZiAoaXNJbkxpc3QobGF5ZXIpKSB7Cisg
ICAgICAgIG1fbGF5ZXJMaXN0LnJlbW92ZShsYXllcik7CisgICAgICAgIG1fYnl0ZXNBbGxvY2F0
ZWQgLT0gbGF5ZXItPmJ5dGVzQWxsb2NhdGVkKCk7CisgICAgfQorfQorCit2b2lkIERlZmVycmVk
TGF5ZXJNYW5hZ2VyOjpmcmVlTWVtb3J5SWZOZWNlc3NhcnkoKSAKK3sKKyAgICBpZiAobV9ieXRl
c0FsbG9jYXRlZCA+IG1fbWF4Qnl0ZXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgLy8gUGFzcyAxOiBG
cmVlIG1lbW9yeSBmcm9tIGNhY2hlcworICAgICAgICBEZWZlcnJlZExheWVyKiBsYXllciA9IG1f
bGF5ZXJMaXN0LnRhaWwoKTsgLy8gTFJVCisgICAgICAgIHdoaWxlIChtX2J5dGVzQWxsb2NhdGVk
ID4gbV90YXJnZXRCeXRlc0FsbG9jYXRlZCAmJiBsYXllcikgeworICAgICAgICAgICAgaWYgKGxh
eWVyLT5mcmVlTWVtb3J5SWZQb3NzaWJsZShtX2J5dGVzQWxsb2NhdGVkIC0gbV90YXJnZXRCeXRl
c0FsbG9jYXRlZCkpCisgICAgICAgICAgICAgICAgdXBkYXRlQnl0ZXNBbGxvY2F0ZWQobGF5ZXIp
OworICAgICAgICAgICAgbGF5ZXIgPSBsYXllci0+cHJldigpOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gUGFzcyAyOiBGbHVzaCBjYW52YXNlcworICAgICAgICBEZWZlcnJlZExheWVyKiBsZWFz
dFJlY2VudGx5VXNlZExheWVyID0gbV9sYXllckxpc3QudGFpbCgpOworICAgICAgICB3aGlsZSAo
bV9ieXRlc0FsbG9jYXRlZCA+IG1fdGFyZ2V0Qnl0ZXNBbGxvY2F0ZWQgJiYgbGVhc3RSZWNlbnRs
eVVzZWRMYXllcikgeworICAgICAgICAgICAgbGVhc3RSZWNlbnRseVVzZWRMYXllci0+Zmx1c2go
KTsKKyAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2VkTGF5ZXItPmZyZWVNZW1vcnlJZlBvc3Np
YmxlKH4wKTsKKyAgICAgICAgICAgIG1fYnl0ZXNBbGxvY2F0ZWQgLT0gbGVhc3RSZWNlbnRseVVz
ZWRMYXllci0+Ynl0ZXNBbGxvY2F0ZWQoKTsKKyAgICAgICAgICAgIG1fbGF5ZXJMaXN0LnJlbW92
ZShsZWFzdFJlY2VudGx5VXNlZExheWVyKTsKKyAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2Vk
TGF5ZXIgPSBtX2xheWVyTGlzdC50YWlsKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wg
RGVmZXJyZWRMYXllck1hbmFnZXI6OmlzSW5MaXN0KERlZmVycmVkTGF5ZXIqIGxheWVyKQorewor
ICAgIHJldHVybiBsYXllci0+cHJldigpIHx8IG1fbGF5ZXJMaXN0LmhlYWQoKSA9PSBsYXllcjsK
K30KKwordm9pZCBEZWZlcnJlZExheWVyTWFuYWdlcjo6dXBkYXRlQnl0ZXNBbGxvY2F0ZWQoRGVm
ZXJyZWRMYXllciogbGF5ZXIpCit7CisgICAgaWYgKCFpc0luTGlzdChsYXllcikpCisgICAgICAg
IGFkZExheWVyVG9MaXN0KGxheWVyKTsKKyAgICBzaXplX3Qgb2xkTGF5ZXJCeXRlc0FsbG9jYXRl
ZCA9IGxheWVyLT5ieXRlc0FsbG9jYXRlZCgpOworICAgIHNpemVfdCBuZXdMYXllckJ5dGVzQWxs
b2NhdGVkID0gbGF5ZXItPnVwZGF0ZUJ5dGVzQWxsb2NhdGVkKCk7CisgICAgbV9ieXRlc0FsbG9j
YXRlZCA9IG1fYnl0ZXNBbGxvY2F0ZWQgKyBuZXdMYXllckJ5dGVzQWxsb2NhdGVkIC0gb2xkTGF5
ZXJCeXRlc0FsbG9jYXRlZDsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vRGVmZXJyZWRMYXllck1hbmFnZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EZWZlcnJlZExheWVyTWFu
YWdlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vRGVmZXJyZWRMYXllck1hbmFnZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgRGVmZXJyZWRMYXllck1hbmFnZXJfaAorI2RlZmluZSBEZWZlcnJlZExheWVy
TWFuYWdlcl9oCisKKyNpbmNsdWRlICJEZWZlcnJlZExheWVyLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgRGVmZXJyZWRMYXllck1hbmFnZXIgeworcHVibGljOgorICAgIHN0YXRp
YyBEZWZlcnJlZExheWVyTWFuYWdlciYgZ2V0KCk7CisgICAgdm9pZCBpbml0KHNpemVfdCBtYXhC
eXRlc0FsbG9jYXRlZCwgc2l6ZV90IHRhcmdldEJ5dGVzQWxsb2NhdGVkKTsKKyAgICB2aXJ0dWFs
IH5EZWZlcnJlZExheWVyTWFuYWdlcigpOworCitwcml2YXRlOgorICAgIERlZmVycmVkTGF5ZXJN
YW5hZ2VyKCk7CisKKyAgICAvLyBpbnRlcmZhY2UgZm9yIERlZmVycmVkTGF5ZXIKKyAgICBmcmll
bmQgY2xhc3MgRGVmZXJyZWRMYXllcjsKKyAgICB2b2lkIGxheWVyQWxsb2NhdGVkU3RvcmFnZUNo
YW5nZWQoRGVmZXJyZWRMYXllciopOworICAgIHZvaWQgbGF5ZXJEaWRGbHVzaChEZWZlcnJlZExh
eWVyKik7CisgICAgdm9pZCBsYXllckRpZERyYXcoRGVmZXJyZWRMYXllciopOworICAgIHZvaWQg
bGF5ZXJUb0JlRGVzdHJveWVkKERlZmVycmVkTGF5ZXIqKTsKKworICAgIC8vIGludGVybmFsIG1l
dGhvZHMKKyAgICB2b2lkIGZyZWVNZW1vcnlJZk5lY2Vzc2FyeSgpOworICAgIHZvaWQgdXBkYXRl
Qnl0ZXNBbGxvY2F0ZWQoRGVmZXJyZWRMYXllciopOworICAgIGJvb2wgaXNJbkxpc3QoRGVmZXJy
ZWRMYXllciopOworICAgIHZvaWQgYWRkTGF5ZXJUb0xpc3QoRGVmZXJyZWRMYXllciopOworCisg
ICAgc2l6ZV90IG1fYnl0ZXNBbGxvY2F0ZWQ7CisgICAgc2l6ZV90IG1fbWF4Qnl0ZXNBbGxvY2F0
ZWQ7CisgICAgc2l6ZV90IG1fdGFyZ2V0Qnl0ZXNBbGxvY2F0ZWQ7CisgICAgRG91Ymx5TGlua2Vk
TGlzdDxEZWZlcnJlZExheWVyPiBtX2xheWVyTGlzdDsKKworICAgIGZyaWVuZCBjbGFzcyA6OkRl
ZmVycmVkTGF5ZXJNYW5hZ2VyVGVzdDsgLy8gZm9yIHVuaXQgdGVzdGluZworfTsKKworfQorCisj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiAxMjU5MzkpCisr
KyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI2IEBACisyMDEyLTA4LTE3ICBKdXN0aW4gTm92b3NhZCAgPGp1bm92QGNocm9taXVtLm9y
Zz4KKworICAgICAgICBbQ2hyb21pdW1dIEltcGxlbWVudGluZyBhIGdsb2JhbCBsaW1pdCBvbiBt
ZW1vcnkgY29uc3VtZWQgYnkgZGVmZXJyZWQgMkQgY2FudmFzZXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk0Mzg2CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaW5nIHVuaXQgdGVzdHMgZm9yIFdlYkNv
cmU6OkRlZmVycmVkTGF5ZXJNYW5hZ2VyCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAg
ICAgKiB0ZXN0cy9EZWZlcnJlZExheWVyTWFuYWdlclRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAg
KEZha2VEZWZlcnJlZExheWVyKToKKyAgICAgICAgKEZha2VEZWZlcnJlZExheWVyOjpGYWtlRGVm
ZXJyZWRMYXllcik6CisgICAgICAgIChGYWtlRGVmZXJyZWRMYXllcjo6ZmFrZUJ5dGVzQWxsb2Nh
dGVkKToKKyAgICAgICAgKEZha2VEZWZlcnJlZExheWVyOjpmYWtlRnJlZWFibGVCeXRlcyk6Cisg
ICAgICAgIChGYWtlRGVmZXJyZWRMYXllcjo6ZnJlZU1lbW9yeUlmUG9zc2libGUpOgorICAgICAg
ICAoRmFrZURlZmVycmVkTGF5ZXI6OmZsdXNoKToKKyAgICAgICAgKEZha2VEZWZlcnJlZExheWVy
OjpnZXRDdXJyZW50Qnl0ZXNBbGxvY2F0ZWQpOgorICAgICAgICAoRGVmZXJyZWRMYXllck1hbmFn
ZXJUZXN0KToKKyAgICAgICAgKERlZmVycmVkTGF5ZXJNYW5hZ2VyVGVzdDo6c3RvcmFnZUFsbG9j
YXRpb25UcmFja2luZ1Rlc3QpOgorICAgICAgICAoRGVmZXJyZWRMYXllck1hbmFnZXJUZXN0Ojpl
dmljdGlvblRlc3QpOgorICAgICAgICAoRGVmZXJyZWRMYXllck1hbmFnZXJUZXN0OjpmbHVzaEV2
aWN0aW9uVGVzdCk6CisKIDIwMTItMDgtMTYgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIEFkZCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy8gdG8gaW5jbHVkZSBwYXRoIGFuZCByZW1vdmUgY2MvIHBy
ZWZpeCBmcm9tIGluY2x1ZGVzCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5n
eXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkJKHJl
dmlzaW9uIDEyNTkyNSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkJKHdv
cmtpbmcgY29weSkKQEAgLTEwMSw2ICsxMDEsNyBAQAogICAgICAgICAgICAgJ3Rlc3RzL0NvbnRl
bnRMYXllckNocm9taXVtVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0RhdGVUaW1lRm9y
bWF0VGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0RlY2ltYWxUZXN0LmNwcCcsCisgICAg
ICAgICAgICAndGVzdHMvRGVmZXJyZWRMYXllck1hbmFnZXJUZXN0LmNwcCcsCiAgICAgICAgICAg
ICAndGVzdHMvRHJhZ0ltYWdlVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0V2ZW50TGlz
dGVuZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvRmFrZUNDTGF5ZXJUcmVlSG9zdENs
aWVudC5oJywKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvRGVmZXJyZWRMYXll
ck1hbmFnZXJUZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0RlZmVycmVkTGF5ZXJNYW5hZ2VyVGVzdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0RlZmVycmVkTGF5ZXJNYW5hZ2VyVGVzdC5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpbmNsdWRlICJEZWZlcnJlZExheWVyTWFuYWdlci5oIgorCisjaW5jbHVkZSA8Z21v
Y2svZ21vY2suaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKK3VzaW5nIHRlc3Rpbmc6OkluU2VxdWVuY2U7Cit1c2luZyB0ZXN0aW5nOjpSZXR1
cm47Cit1c2luZyB0ZXN0aW5nOjpUZXN0OworCitjbGFzcyBGYWtlRGVmZXJyZWRMYXllciA6IHB1
YmxpYyBEZWZlcnJlZExheWVyIHsKK3B1YmxpYzoKKyAgICBGYWtlRGVmZXJyZWRMYXllcigpIAor
ICAgICAgICA6IG1fZmFrZUJ5dGVzQWxsb2NhdGVkKDApCisgICAgICAgICwgbV9mcmVlYWJsZUJ5
dGVzKDApCisgICAgICAgICwgbV9mcmVlTWVtb3J5SWZQb3NzaWJsZUNvdW50KDApCisgICAgICAg
ICwgbV9mbHVzaENvdW50KDApCisgICAgeworICAgIH0KKworICAgIHZvaWQgZmFrZUJ5dGVzQWxs
b2NhdGVkKHNpemVfdCBzaXplKSAKKyAgICB7CisgICAgICAgIG1fZmFrZUJ5dGVzQWxsb2NhdGVk
ID0gc2l6ZTsKKyAgICAgICAgYWxsb2NhdGVkU3RvcmFnZUNoYW5nZWQoKTsKKyAgICB9CisKKyAg
ICB2b2lkIGZha2VGcmVlYWJsZUJ5dGVzKHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgICAgbV9m
cmVlYWJsZUJ5dGVzID0gc2l6ZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHNpemVfdCBmcmVlTWVt
b3J5SWZQb3NzaWJsZShzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIG1fZnJlZU1lbW9yeUlm
UG9zc2libGVDb3VudCsrOworICAgICAgICBzaXplX3QgYnl0ZXNGcmVlZCA9IHNpemUgPCBtX2Zy
ZWVhYmxlQnl0ZXMgPyBzaXplIDogbV9mcmVlYWJsZUJ5dGVzOworICAgICAgICBtX2ZyZWVhYmxl
Qnl0ZXMgLT0gYnl0ZXNGcmVlZDsKKyAgICAgICAgbV9mYWtlQnl0ZXNBbGxvY2F0ZWQgLT0gYnl0
ZXNGcmVlZDsKKyAgICAgICAgcmV0dXJuIGJ5dGVzRnJlZWQ7CisgICAgfQorCisgICAgdmlydHVh
bCB2b2lkIGZsdXNoKCkKKyAgICB7CisgICAgICAgIG1fZmx1c2hDb3VudCsrOworICAgIH0KKwor
ICAgIHZpcnR1YWwgc2l6ZV90IGdldEN1cnJlbnRCeXRlc0FsbG9jYXRlZCgpCisgICAgeworICAg
ICAgICByZXR1cm4gbV9mYWtlQnl0ZXNBbGxvY2F0ZWQ7CisgICAgfQorCitwdWJsaWM6CisgICAg
c2l6ZV90IG1fZmFrZUJ5dGVzQWxsb2NhdGVkOworICAgIHNpemVfdCBtX2ZyZWVhYmxlQnl0ZXM7
CisgICAgaW50IG1fZnJlZU1lbW9yeUlmUG9zc2libGVDb3VudDsKKyAgICBpbnQgbV9mbHVzaENv
dW50OworfTsKKworY2xhc3MgRGVmZXJyZWRMYXllck1hbmFnZXJUZXN0IDogcHVibGljIFRlc3Qg
eworcHJvdGVjdGVkOgorICAgIHZvaWQgc3RvcmFnZUFsbG9jYXRpb25UcmFja2luZ1Rlc3QoKQor
ICAgIHsKKyAgICAgICAgRGVmZXJyZWRMYXllck1hbmFnZXImIG1hbmFnZXIgPSBEZWZlcnJlZExh
eWVyTWFuYWdlcjo6Z2V0KCk7CisgICAgICAgIG1hbmFnZXIuaW5pdCgxMCwgMTApOworICAgICAg
ICB7CisgICAgICAgICAgICBGYWtlRGVmZXJyZWRMYXllciBsYXllcjE7CisgICAgICAgICAgICBF
WFBFQ1RfRVEoKHNpemVfdCkwLCBtYW5hZ2VyLm1fYnl0ZXNBbGxvY2F0ZWQpOworICAgICAgICAg
ICAgbGF5ZXIxLmZha2VCeXRlc0FsbG9jYXRlZCgxKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUSgo
c2l6ZV90KTEsIG1hbmFnZXIubV9ieXRlc0FsbG9jYXRlZCk7CisgICAgICAgICAgICAvLyBUZXN0
IGFsbG9jYXRpb24gaW5jcmVhc2UKKyAgICAgICAgICAgIGxheWVyMS5mYWtlQnl0ZXNBbGxvY2F0
ZWQoMik7CisgICAgICAgICAgICBFWFBFQ1RfRVEoKHNpemVfdCkyLCBtYW5hZ2VyLm1fYnl0ZXNB
bGxvY2F0ZWQpOworICAgICAgICAgICAgLy8gVGVzdCBhbGxvY2F0aW9uIGRlY3JlYXNlCisgICAg
ICAgICAgICBsYXllcjEuZmFrZUJ5dGVzQWxsb2NhdGVkKDEpOworICAgICAgICAgICAgRVhQRUNU
X0VRKChzaXplX3QpMSwgbWFuYWdlci5tX2J5dGVzQWxsb2NhdGVkKTsKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBGYWtlRGVmZXJyZWRMYXllciBsYXllcjI7CisgICAgICAgICAgICAg
ICAgRVhQRUNUX0VRKChzaXplX3QpMSwgbWFuYWdlci5tX2J5dGVzQWxsb2NhdGVkKTsKKyAgICAg
ICAgICAgICAgICAvLyB2ZXJpZnkgbXVsdGktbGF5ZXIgYWxsb2NhdGlvbiB0cmFja2luZworICAg
ICAgICAgICAgICAgIGxheWVyMi5mYWtlQnl0ZXNBbGxvY2F0ZWQoMik7CisgICAgICAgICAgICAg
ICAgRVhQRUNUX0VRKChzaXplX3QpMywgbWFuYWdlci5tX2J5dGVzQWxsb2NhdGVkKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIC8vIFZlcmlmeSB0cmFja2luZyBhZnRlciBkZXN0cnVjdGlv
bgorICAgICAgICAgICAgRVhQRUNUX0VRKChzaXplX3QpMSwgbWFuYWdlci5tX2J5dGVzQWxsb2Nh
dGVkKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgZXZpY3Rpb25UZXN0KCkKKyAgICB7
CisgICAgICAgIERlZmVycmVkTGF5ZXJNYW5hZ2VyJiBtYW5hZ2VyID0gRGVmZXJyZWRMYXllck1h
bmFnZXI6OmdldCgpOworICAgICAgICBtYW5hZ2VyLmluaXQoMTAsIDUpOworICAgICAgICBGYWtl
RGVmZXJyZWRMYXllciBsYXllcjsKKyAgICAgICAgbGF5ZXIuZmFrZUZyZWVhYmxlQnl0ZXMoMTAp
OworICAgICAgICBsYXllci5mYWtlQnl0ZXNBbGxvY2F0ZWQoOCk7IC8vIHVuZGVyIHRoZSBtYXgK
KyAgICAgICAgRVhQRUNUX0VRKDAsIGxheWVyLm1fZnJlZU1lbW9yeUlmUG9zc2libGVDb3VudCk7
CisgICAgICAgIGxheWVyLmZha2VCeXRlc0FsbG9jYXRlZCgxMik7IC8vIG92ZXIgdGhlIG1heAor
ICAgICAgICBFWFBFQ1RfRVEoMSwgbGF5ZXIubV9mcmVlTWVtb3J5SWZQb3NzaWJsZUNvdW50KTsK
KyAgICAgICAgRVhQRUNUX0VRKChzaXplX3QpMywgbGF5ZXIubV9mcmVlYWJsZUJ5dGVzKTsKKyAg
ICAgICAgRVhQRUNUX0VRKDAsIGxheWVyLm1fZmx1c2hDb3VudCk7IC8vIGV2aWN0aW9uIHN1Y2Nl
ZWRlZCB3aXRob3V0IHRyaWdnZXJpbmcgYSBmbHVzaAorICAgICAgICBFWFBFQ1RfRVEoKHNpemVf
dCk1LCBsYXllci5ieXRlc0FsbG9jYXRlZCgpKTsKKyAgICB9CisKKyAgICB2b2lkIGZsdXNoRXZp
Y3Rpb25UZXN0KCkKKyAgICB7CisgICAgICAgIERlZmVycmVkTGF5ZXJNYW5hZ2VyJiBtYW5hZ2Vy
ID0gRGVmZXJyZWRMYXllck1hbmFnZXI6OmdldCgpOworICAgICAgICBtYW5hZ2VyLmluaXQoMTAs
IDUpOworICAgICAgICBGYWtlRGVmZXJyZWRMYXllciBsYXllcjsKKyAgICAgICAgbGF5ZXIuZmFr
ZUZyZWVhYmxlQnl0ZXMoMSk7IC8vIE5vdCBlbm91Z2ggZnJlZWFibGUgYnl0ZXMsIHdpbGwgY2F1
c2UgYWdncmVzc2l2ZSBldmljdGlvbiBieSBmbHVzaGluZworICAgICAgICBsYXllci5mYWtlQnl0
ZXNBbGxvY2F0ZWQoOCk7IC8vIHVuZGVyIHRoZSBtYXgKKyAgICAgICAgRVhQRUNUX0VRKDAsIGxh
eWVyLm1fZnJlZU1lbW9yeUlmUG9zc2libGVDb3VudCk7CisgICAgICAgIGxheWVyLmZha2VCeXRl
c0FsbG9jYXRlZCgxMik7IC8vIG92ZXIgdGhlIG1heAorICAgICAgICBFWFBFQ1RfRVEoMiwgbGF5
ZXIubV9mcmVlTWVtb3J5SWZQb3NzaWJsZUNvdW50KTsgLy8gVHdvIHRyaWVzLCBvbmUgYmVmb3Jl
IGZsdXNoLCBvbmUgYWZ0ZXIgZmx1c2gKKyAgICAgICAgRVhQRUNUX0VRKChzaXplX3QpMCwgbGF5
ZXIubV9mcmVlYWJsZUJ5dGVzKTsKKyAgICAgICAgRVhQRUNUX0VRKDEsIGxheWVyLm1fZmx1c2hD
b3VudCk7IC8vIGZsdXNoIHdhcyBhdHRlbXB0ZWQKKyAgICAgICAgRVhQRUNUX0VRKChzaXplX3Qp
MTEsIGxheWVyLmJ5dGVzQWxsb2NhdGVkKCkpOyAvLyBmbHVzaCBkcm9wcyB0aGUgbGF5ZXIgZnJv
bSBtYW5hZ2VyJ3MgdHJhY2tpbmcgbGlzdAorICAgIH0KK307CisKK25hbWVzcGFjZSB7CisKK1RF
U1RfRihEZWZlcnJlZExheWVyTWFuYWdlclRlc3QsIHRlc3RTdG9yYWdlQWxsb2NhdGlvblRyYWNr
aW5nKQoreworICAgIHN0b3JhZ2VBbGxvY2F0aW9uVHJhY2tpbmdUZXN0KCk7Cit9CisKK1RFU1Rf
RihEZWZlcnJlZExheWVyTWFuYWdlclRlc3QsIHRlc3RFdmljdGlvbikKK3sKKyAgICBldmljdGlv
blRlc3QoKTsKK30KKworVEVTVF9GKERlZmVycmVkTGF5ZXJNYW5hZ2VyVGVzdCwgdGVzdEZsdXNo
RXZpY3Rpb24pCit7CisgICAgZmx1c2hFdmljdGlvblRlc3QoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159737</attachid>
            <date>2012-08-21 12:26:16 -0700</date>
            <delta_ts>2012-08-23 11:58:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94386-20120821152614.patch</filename>
            <type>text/plain</type>
            <size>31477</size>
            <attacher name="Justin Novosad">junov</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyNTkzOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwOSBAQAorMjAxMi0wOC0xNyAgSnVzdGlu
IE5vdm9zYWQgIDxqdW5vdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBJbXBs
ZW1lbnRpbmcgYSBnbG9iYWwgbGltaXQgb24gbWVtb3J5IGNvbnN1bWVkIGJ5IGRlZmVycmVkIDJE
IGNhbnZhc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05NDM4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEJlZm9yZSB0aGlzIGNoYW5nZSwgdGhlcmUgd2FzIG5vIGdsb2JhbCBib3VuZCBvbiBtZW1vcnkg
dGhhdCBjb3VsZCBiZQorICAgICAgICBjb25zdW1lZCBmb3IgdGhlIHB1cnBvc2Ugb2YgcmVjb3Jk
aW5nIDJkIGNhbnZhcyBkZWZlcnJlZCBkcmF3IGNvbW1hbmRzLgorICAgICAgICBUaGVyZSB3YXMg
b25seSBhIHBlciBjYW52YXMgbGltaXQuIEl0IGlzIHBvc3NpYmxlIGZvciBjYW52YXNlcyB0byBn
ZXQKKyAgICAgICAgZGVyZWZlcmVuY2VkIHdpdGhvdXQgZmx1c2hpbmcgcGVuZGluZyBkcmF3IGNv
bW1hbmRzLCB3aGljaCBtYXkgbG9jaworICAgICAgICByZXNvdXJjZXMgdW50aWwgdGhlIGNhbnZh
cyBlbGVtZW50IGlzIGdhcmJhZ2UgY29sbGVjdGVkLiBUaGlzIG1ha2VzCisgICAgICAgIGl0IHBv
c3NpYmxlIHRvIGdyb3cgbWVtb3J5IGNvbnN1bXB0aW9uIGluZGVmaW5pdGVseSBieSBoaXR0aW5n
IHJlbG9hZAorICAgICAgICBzdWNjZXNzaXZlbHkgb24gc29tZSBjYW52YXMtaW50ZW5zaXZlIHdl
YiBwYWdlcy4KKworICAgICAgICBUaGUgc29sdXRpb24gaW1wbGVtZW50ZWQgaW4gdGhpcyBjaGFu
Z2UgY29uc2lzdHMgaW4gbWFpbnRhaW5pbmcgYQorICAgICAgICBnbG9iYWwgcmVnaXN0cnkgb2Yg
ZGVmZXJyZWQgY2FudmFzIGxheWVycyBhbmQgdHJhY2tpbmcgdGhlIHN1bSBvZgorICAgICAgICBt
ZW1vcnkgYWxsb2NhdGVkIGJ5IGFsbCBjYW52YXNlcyBmb3IgdGhlIHB1cnBvc2Ugb2Ygc3Rvcmlu
ZyBkZWZlcnJlZAorICAgICAgICBkcmF3IGNvbW1hbmRzLiBXaGVuIG1lbW9yeSBjb25zdW1wdGlv
biByZWFjaGVzIHRoZSBhbGxvd2VkIGxpbWl0LAorICAgICAgICBjYWNoZXMgYXJlIGNsZWFyZWQg
YW5kIGRyYXcgb3BlcmF0aW9ucyBhcmUgZmx1c2hlZCBvbiBvbmUgb3Igc2V2ZXJhbAorICAgICAg
ICBjYW52YXNlcywgc3RhcnRpbmcgd2l0aCB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZCwgdW50aWwg
bWVtb3J5CisgICAgICAgIGNvbnN1bXB0aW9uIGlzIGJlbG93IGEgdGFyZ2V0IGxldmVsLgorCisg
ICAgICAgIE5ldyB0ZXN0czogd2Via2l0X3VuaXRfdGVzdHMgRGVmZXJyZWRMYXllck1hbmFnZXJU
ZXN0KgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJCcmlkZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzMkRMYXllckJyaWRnZTo6Q2FudmFzMkRMYXllckJyaWRnZSk6CisgICAgICAgIChXZWJD
b3JlOjpDYW52YXMyRExheWVyQnJpZGdlOjpzdG9yYWdlQWxsb2NhdGVkRm9yUmVjb3JkaW5nQ2hh
bmdlZCk6CisgICAgICAgIE92ZXJsb2FkZWQgZnJvbSBTa0RlZmVycmVkQ2FudmFzOjpOb3RpZmlj
YXRpb25DbGllbnQuIENhbGxlZCB3aGVuCisgICAgICAgIHRoZXJlIGlzIGEgY2hhbmdlIGluIHRo
ZSBudW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkIGJ5IHRoZSBkZWZlcnJlZAorICAgICAgICBjYW52
YXMuICBSZWxheXMgdGhlIG5vdGlmaWNhdGlvbiB0byBEZWZlcnJlZExheWVyLgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQnJpZGdlOjpmbHVzaGVk
RHJhd0NvbW1hbmRzKToKKyAgICAgICAgT3ZlcmxvYWRlZCBmcm9tIFNrRGVmZXJyZWRDYW52YXM6
Ok5vdGlmaWNhdGlvbkNsaWVudC4gQ2FsbGVkIHdoZW4KKyAgICAgICAgcGVuZGluZyBkcmF3IGNv
bW1hbmRzIGFyZSBmbHVzaCBieSB0aGUgZGVmZXJyZWQgY2FudmFzLiAgUmVsYXlzIHRoZQorICAg
ICAgICBub3RpZmljYXRpb24gdG8gRGVmZXJyZWRMYXllci4KKyAgICAgICAgKFdlYkNvcmU6OkNh
bnZhczJETGF5ZXJCcmlkZ2U6OmZyZWVNZW1vcnlJZlBvc3NpYmxlKToKKyAgICAgICAgT3Zlcmxv
YWRlZCBmcm9tIERlZmVycmVkTGF5ZXIuIENhbGxlZCBieSB0aGUgRGVmZXJyZWRMYXllck1hbmFn
ZXIgdG8KKyAgICAgICAgcmVxdWVzdCB0aGUgcmVsZWFzZSBvZiB1bmxvY2tlZCBtZW1vcnkgcmVz
b3VyY2VzIChjYWNoZXMpLiBSZXF1ZXN0CisgICAgICAgIGlzIHJlbGF5ZWQgdG8gU2tEZWZlcnJl
ZENhbnZhcy4gcmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgZnJlZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXMyRExheWVyQnJpZGdlOjpnZXRDdXJyZW50Qnl0ZXNBbGxvY2F0ZWQpOgorICAgICAg
ICBPdmVybG9hZGVkIGZyb20gRGVmZXJyZWRMYXllci4gUmV0cmlldmVzIHVwIHRvIGRhdGUgbWVt
b3J5IGNvbnN1bXB0aW9uCisgICAgICAgIGZyb20gdGhlIGRlZmVycmVkIGNhbnZhcy4KKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJCcmlkZ2U6OmZsdXNoKToKKyAgICAgICAgT3Zlcmxv
YWRlZCBmcm9tIERlZmVycmVkTGF5ZXIuIFJlcXVlc3RzIHRoYXQgcGVuZGluZyBkcmF3IGNvbW1h
bmQgYmUKKyAgICAgICAgZmx1c2hlZCBpbW1lZGlhdGVseSBmcm9tIHRoZSBkZWZlcnJlZCBjYW52
YXMgcXVldWUuIFJlcXVlc3QgaXMgcmVsYXllZAorICAgICAgICB0byBTa0RlZmVycmVkQ2FudmFz
LgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckJyaWRnZTo6Y29udGV4dEFjcXVpcmVk
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQnJp
ZGdlLmg6CisgICAgICAgIChDYW52YXMyRExheWVyQnJpZGdlKToKKyAgICAgICAgQWRkZWQgdmly
dHVhbCBvdmVybG9hZHMgdG8gaW1wbGVtZW50IGludGVyZmFjZXMgZGVmaW5lZCBpbiAKKyAgICAg
ICAgV2ViQ29yZTo6RGVmZXJyZWRMYXllciBhbmQgU2tEZWZlcnJlZENhbnZhczo6Tm90aWZpY2F0
aW9uQ0xpZW50IChza2lhKQorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Rl
ZmVycmVkTGF5ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6RGVmZXJyZWRMYXllcjo6RGVmZXJyZWRMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpE
ZWZlcnJlZExheWVyOjp+RGVmZXJyZWRMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJl
ZExheWVyOjphbGxvY2F0ZWRTdG9yYWdlQ2hhbmdlZCk6CisgICAgICAgIE1ldGhvZCBpbnZva2Vk
IGJ5IGNoaWxkIGNsYXNzIHRvIGluZGljYXRlIGEgY2hhbmdlIGluIG1lbW9yeQorICAgICAgICBj
b25zdW1wdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkTGF5ZXI6OmRpZERyYXcpOgor
ICAgICAgICBNZXRob2QgaW52b2tlIGJ5IGNoaWxkIGNsYXNzIHRvIGluZGljYXRlIHRoYXQgdGhl
IGxheWVyIHdhcyBkcmF3IHRvCisgICAgICAgIFJlZ2lzdGVycyB0aGUgbGF5ZXIgYXMgTVJVIHdp
dGggdGhlIERlZmVycmVkTGF5ZXJNYW5hZ2VyCisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZExh
eWVyOjpkaWRGbHVzaCk6CisgICAgICAgIE1ldGhvZCBpbnZva2VkIGJ5IGNoaWxkIGNsYXNzIHRv
IGluZGljYXRlIHRoYXQgcGVuZGluZyBkcmF3IGNvbW1hbmRzCisgICAgICAgIGhhdmUgYmVlbiBm
bHVzaGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkTGF5
ZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKERlZmVycmVkTGF5ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRMYXllcjo6Ynl0ZXNBbGxvY2F0ZWQpOgorICAg
ICAgICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkIGJ5IHRoZSBkZWZlcnJl
ZCBsYXllciwgYXMKKyAgICAgICAgcmVwb3J0ZWQgYnkgdGhlIGxhc3QgdXBkYXRlIChtYXkgbm90
IGJlIHVwIHRvIGRhdGUpCisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZExheWVyOjp1cGRhdGVC
eXRlc0FsbG9jYXRlZCk6CisgICAgICAgIFJldHJpZXZlcyBhbmQgcmV0dXJucyB0aGUgdXAgdG8g
ZGF0ZSBudW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkIGJ5CisgICAgICAgIHRoZSBkZWZlcnJlZCBs
YXllci4KKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkTGF5ZXI6Om1hbmFnZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkTGF5ZXJNYW5hZ2VyLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkTGF5
ZXJNYW5hZ2VyOjpEZWZlcnJlZExheWVyTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpEZWZl
cnJlZExheWVyTWFuYWdlcjo6fkRlZmVycmVkTGF5ZXJNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNv
cmU6OkRlZmVycmVkTGF5ZXJNYW5hZ2VyOjppbml0KToKKyAgICAgICAgU2V0cyB0aGUgZ2xvYmFs
IGxpbWl0IGZvciB0aGUgbWF4aW11bSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkCisg
ICAgICAgIGJ5IGRlZmVycmVkIGxheWVycy4KKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkTGF5
ZXJNYW5hZ2VyOjpnZXQpOgorICAgICAgICBTaW5nbGV0b24gYWNjZXNzb3IuCisgICAgICAgIChX
ZWJDb3JlOjpEZWZlcnJlZExheWVyTWFuYWdlcjo6bGF5ZXJEaWREcmF3KToKKyAgICAgICAgQ2Fs
bGVkIGJ5IERlZmVycmVkTGF5ZXIgdG8gaW5kaWNhdGUgdGhhdCB0aGUgbGF5ZXIgd2FzIGRyYXdu
IHRvLgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRMYXllck1hbmFnZXI6OmFkZExheWVyVG9M
aXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkTGF5ZXJNYW5hZ2VyOjpyZW1vdmVMYXll
ckZyb21MaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkTGF5ZXJNYW5hZ2VyOjpsYXll
ckFsbG9jYXRlZFN0b3JhZ2VDaGFuZ2VkKToKKyAgICAgICAgQ2FsbGVkIGJ5IERlZmVycmVkTGF5
ZXIgdG8gaW5kaWNhdGUgdGhldCB0aGUgbWVtb3J5IGNvbnN1bWVkIGJ5IHRoZQorICAgICAgICBs
YXllciBoYXMgY2hhbmdlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkTGF5ZXJNYW5hZ2Vy
OjpsYXllckRpZEZsdXNoKToKKyAgICAgICAgQ2FsbGVkIGJ5IERlZmVycmVkTGF5ZXIgdG8gaW5k
aWNhdGVkIHRoYXQgdGhlIHBlbmRpbmcgZHJhdyBjb21tYW5kcworICAgICAgICBvZiB0aGUgbGF5
ZXIgd2VyZSBmbHVzaGVkLgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRMYXllck1hbmFnZXI6
OmxheWVyVG9CZURlc3Ryb3llZCk6CisgICAgICAgIENhbGxlZCBieSB0aGUgRGVmZXJyZWRMYXll
ciwgcmVtb3ZlcyByZWZlcmVuY2VzIHRvIHRoZSBsYXllci4KKyAgICAgICAgKFdlYkNvcmU6OkRl
ZmVycmVkTGF5ZXJNYW5hZ2VyOjpmcmVlTWVtb3J5SWZOZWNlc3NhcnkpOgorICAgICAgICBDYWxs
ZWQgaW50ZXJuYWxseS4gQ2hlY2sgdGhhdCBjdXJyZW50IG1lbW9yeSBjb25zdW1wdGlvbiBpcyBi
ZWxvdworICAgICAgICB0aGUgdG9sZXJhdGVkIGxpbWl0LiAgSWYgY2hlY2sgZmFpbHMsIGludGlh
dGVzIHJlc291cmNlIHJlbGVhc2VzLgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRMYXllck1h
bmFnZXI6OmlzSW5MaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkTGF5ZXJNYW5hZ2Vy
Ojp1cGRhdGVCeXRlc0FsbG9jYXRlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vRGVmZXJyZWRMYXllck1hbmFnZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKERlZmVycmVkTGF5ZXJNYW5hZ2VyKToKKwogMjAxMi0wOC0xNyAgQnJpYW4gQW5k
ZXJzb24gIDxicmlhbmRlcnNvbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgRml4IHZzeW5jVGlj
ayBkcm91Z2h0IHdoZW4gdnN5bmMgdGhyb3R0bGluZyBpcyBkaXNhYmxlZApJbmRleDogU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQkocmV2aXNpb24gMTI1OTI1KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CSh3b3JraW5nIGNvcHkpCkBAIC0zNjM4LDYgKzM2MzgsMTAgQEAKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db21wb3NpdG9ySFVERm9udEF0bGFzLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nyb3NzUHJvY2Vzc0ZvbnRMb2FkaW5n
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nyb3NzUHJvY2Vz
c0ZvbnRMb2FkaW5nLm1tJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9EZWZlcnJlZExheWVyLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vRGVmZXJyZWRMYXllci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9EZWZlcnJlZExheWVyTWFuYWdlci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkTGF5ZXJNYW5hZ2VyLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0V4dGVuc2lvbnMzRENocm9t
aXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNo
ZUFuZHJvaWQuY3BwJywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NhbnZhczJETGF5ZXJCcmlkZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJCcmlkZ2UuY3BwCShy
ZXZpc2lvbiAxMjU5MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9DYW52YXMyRExheWVyQnJpZGdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMs
NyBAQCBDYW52YXMyRExheWVyQnJpZGdlOjpDYW52YXMyRExheWVyQnJpZGdlCiAgICAgLCBtX3Np
emUoc2l6ZSkKICAgICAsIG1fY2FudmFzKDApCiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKKyAg
ICAsIG1fYnl0ZXNBbGxvY2F0ZWRGb3JSZWNvcmRpbmcoMCkKIHsKICAgICBpZiAobV91c2VEb3Vi
bGVCdWZmZXJpbmcpIHsKICAgICAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsK
QEAgLTEwMiw2ICsxMDMsMzcgQEAgdm9pZCBDYW52YXMyRExheWVyQnJpZGdlOjpwcmVwYXJlRm9y
RHJhdwogICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiB9CiAKK3ZvaWQgQ2Fu
dmFzMkRMYXllckJyaWRnZTo6c3RvcmFnZUFsbG9jYXRlZEZvclJlY29yZGluZ0NoYW5nZWQoc2l6
ZV90IGJ5dGVzQWxsb2NhdGVkKQoreworICAgIEFTU0VSVChtX2RlZmVycmFsTW9kZSA9PSBEZWZl
cnJlZCk7CisgICAgbV9ieXRlc0FsbG9jYXRlZEZvclJlY29yZGluZyA9IGJ5dGVzQWxsb2NhdGVk
OworICAgIGFsbG9jYXRlZFN0b3JhZ2VDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgQ2FudmFzMkRMYXll
ckJyaWRnZTo6Zmx1c2hlZERyYXdDb21tYW5kcygpCit7CisgICAgQVNTRVJUKG1fZGVmZXJyYWxN
b2RlID09IERlZmVycmVkKTsKKyAgICBkaWRGbHVzaCgpOworfQorCitzaXplX3QgQ2FudmFzMkRM
YXllckJyaWRnZTo6ZnJlZU1lbW9yeUlmUG9zc2libGUoc2l6ZV90IGJ5dGVzVG9GcmVlKQorewor
ICAgIEFTU0VSVChkZWZlcnJlZENhbnZhcygpKTsKKyAgICByZXR1cm4gZGVmZXJyZWRDYW52YXMo
KS0+ZnJlZU1lbW9yeUlmUG9zc2libGUoYnl0ZXNUb0ZyZWUpOworfQorCitzaXplX3QgQ2FudmFz
MkRMYXllckJyaWRnZTo6Z2V0Q3VycmVudEJ5dGVzQWxsb2NhdGVkKCkKK3sKKyAgICBBU1NFUlQo
ZGVmZXJyZWRDYW52YXMoKSk7CisgICAgcmV0dXJuIG1fYnl0ZXNBbGxvY2F0ZWRGb3JSZWNvcmRp
bmc7Cit9CisKK3ZvaWQgQ2FudmFzMkRMYXllckJyaWRnZTo6Zmx1c2goKQoreworICAgIEFTU0VS
VChkZWZlcnJlZENhbnZhcygpKTsKKyAgICBtX2NhbnZhcy0+Zmx1c2goKTsKK30KKwogU2tDYW52
YXMqIENhbnZhczJETGF5ZXJCcmlkZ2U6OnNrQ2FudmFzKFNrRGV2aWNlKiBkZXZpY2UpCiB7CiAg
ICAgQVNTRVJUKCFtX2NhbnZhcyk7CkBAIC0xNTUsNiArMTg3LDggQEAgdm9pZCBDYW52YXMyRExh
eWVyQnJpZGdlOjpjb250ZXh0QWNxdWlyZQogewogICAgIGlmIChtX2RlZmVycmFsTW9kZSA9PSBO
b25EZWZlcnJlZCAmJiAhbV91c2VEb3VibGVCdWZmZXJpbmcpCiAgICAgICAgIG1fbGF5ZXIud2ls
bE1vZGlmeVRleHR1cmUoKTsKKyAgICBlbHNlIGlmIChtX2RlZmVycmFsTW9kZSA9PSBEZWZlcnJl
ZCkKKyAgICAgICAgZGlkRHJhdygpOwogfQogCiB1bnNpZ25lZCBDYW52YXMyRExheWVyQnJpZGdl
OjpiYWNrQnVmZmVyVGV4dHVyZSgpCkBAIC0xNjcsNCArMjAxLDMgQEAgdW5zaWduZWQgQ2FudmFz
MkRMYXllckJyaWRnZTo6YmFja0J1ZmZlcgogfQogCiB9Ci0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJCcmlkZ2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMy
RExheWVyQnJpZGdlLmgJKHJldmlzaW9uIDEyNTkyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJCcmlkZ2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBDYW52YXMyRExheWVyQnJpZGdlX2gKICNkZWZp
bmUgQ2FudmFzMkRMYXllckJyaWRnZV9oCiAKKyNpbmNsdWRlICJEZWZlcnJlZExheWVyLmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIiAv
LyBGb3IgRGVmZXJyYWxNb2RlIGVudW0uCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgpAQCAtNDMsNyAr
NDQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIExheWVyQ2hyb21pdW07CiAKLWNs
YXNzIENhbnZhczJETGF5ZXJCcmlkZ2UgOiBwdWJsaWMgV2ViS2l0OjpXZWJFeHRlcm5hbFRleHR1
cmVMYXllckNsaWVudCwgcHVibGljIFNrRGVmZXJyZWRDYW52YXM6Ok5vdGlmaWNhdGlvbkNsaWVu
dCB7CitjbGFzcyBDYW52YXMyRExheWVyQnJpZGdlIDogcHVibGljIFdlYktpdDo6V2ViRXh0ZXJu
YWxUZXh0dXJlTGF5ZXJDbGllbnQsIHB1YmxpYyBTa0RlZmVycmVkQ2FudmFzOjpOb3RpZmljYXRp
b25DbGllbnQsIHB1YmxpYyBEZWZlcnJlZExheWVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShDYW52YXMyRExheWVyQnJpZGdlKTsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxD
YW52YXMyRExheWVyQnJpZGdlPiBjcmVhdGUoUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4g
Y29udGV4dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgRGVmZXJyYWxNb2RlIGRlZmVycmFsTW9kZSwg
dW5zaWduZWQgdGV4dHVyZUlkKQpAQCAtNTgsNyArNTksMTQgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCgpIE9WRVJSSURFOwogCiAg
ICAgLy8gU2tEZWZlcnJlZENhbnZhczo6Tm90aWZpY2F0aW9uQ2xpZW50IGltcGxlbWVudGF0aW9u
Ci0gICAgdmlydHVhbCB2b2lkIHByZXBhcmVGb3JEcmF3KCk7CisgICAgdmlydHVhbCB2b2lkIHBy
ZXBhcmVGb3JEcmF3KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHN0b3JhZ2VBbGxvY2F0
ZWRGb3JSZWNvcmRpbmdDaGFuZ2VkKHNpemVfdCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lk
IGZsdXNoZWREcmF3Q29tbWFuZHMoKSBPVkVSUklERTsKKworICAgIC8vIFdlYkNvcmU6OkRlZmVy
cmVkTGF5ZXIgaW1wbGVtZW50YXRpb24KKyAgICB2aXJ0dWFsIHNpemVfdCBmcmVlTWVtb3J5SWZQ
b3NzaWJsZShzaXplX3QpIE9WRVJSSURFOworICAgIHZpcnR1YWwgc2l6ZV90IGdldEN1cnJlbnRC
eXRlc0FsbG9jYXRlZCgpIE9WRVJSSURFOyAKKyAgICB2aXJ0dWFsIHZvaWQgZmx1c2goKSBPVkVS
UklERTsKIAogICAgIFNrQ2FudmFzKiBza0NhbnZhcyhTa0RldmljZSopOwogICAgIFdlYktpdDo6
V2ViTGF5ZXIqIGxheWVyKCk7CkBAIC03OCw2ICs4Niw3IEBAIHByaXZhdGU6CiAgICAgU2tDYW52
YXMqIG1fY2FudmFzOwogICAgIFdlYktpdDo6V2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXIgbV9sYXll
cjsKICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKKyAgICBzaXplX3Qg
bV9ieXRlc0FsbG9jYXRlZEZvclJlY29yZGluZzsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkTGF5ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVk
TGF5ZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vRGVmZXJyZWRMYXllci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjEg
QEAKKy8qCitDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAKK1RI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5EIEFOWQorRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCitESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCitBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiRGVmZXJy
ZWRMYXllci5oIgorCisjaW5jbHVkZSAiRGVmZXJyZWRMYXllck1hbmFnZXIuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitEZWZlcnJlZExheWVyOjpEZWZlcnJlZExheWVyKCkKKyAgICA6IG1f
Ynl0ZXNBbGxvY2F0ZWQoMCkKKyAgICAsIG1fbWFuYWdlcigmRGVmZXJyZWRMYXllck1hbmFnZXI6
OmdldCgpKQorICAgICwgbV9uZXh0KDApCisgICAgLCBtX3ByZXYoMCkKK3sKK30KKworRGVmZXJy
ZWRMYXllcjo6fkRlZmVycmVkTGF5ZXIoKQoreworICAgIG1fbWFuYWdlci0+bGF5ZXJUb0JlRGVz
dHJveWVkKHRoaXMpOworfQorCit2b2lkIERlZmVycmVkTGF5ZXI6OmFsbG9jYXRlZFN0b3JhZ2VD
aGFuZ2VkKCkKK3sKKyAgICBtX21hbmFnZXItPmxheWVyQWxsb2NhdGVkU3RvcmFnZUNoYW5nZWQo
dGhpcyk7Cit9CisKK3ZvaWQgRGVmZXJyZWRMYXllcjo6ZGlkRHJhdygpCit7CisgICAgbV9tYW5h
Z2VyLT5sYXllckRpZERyYXcodGhpcyk7Cit9CisKK3ZvaWQgRGVmZXJyZWRMYXllcjo6ZGlkRmx1
c2goKQoreworICAgIG1fbWFuYWdlci0+bGF5ZXJEaWRGbHVzaCh0aGlzKTsKK30KKworfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRGVmZXJyZWRMYXll
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0RlZmVycmVkTGF5ZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkTGF5ZXIuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw2NyBAQAorLyoKK0NvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKzIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICAgIAorVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCitFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKK0RJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CitMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KK0FOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaW5jbHVkZSA8d3RmL0RvdWJseUxpbmtlZExpc3Qu
aD4KKworI2lmbmRlZiBEZWZlcnJlZExheWVyX2gKKyNkZWZpbmUgRGVmZXJyZWRMYXllcl9oCisK
K2NsYXNzIERlZmVycmVkTGF5ZXJNYW5hZ2VyVGVzdDsKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBEZWZlcnJlZExheWVyTWFuYWdlcjsKKworY2xhc3MgRGVmZXJyZWRMYXllciA6IHB1
YmxpYyBEb3VibHlMaW5rZWRMaXN0Tm9kZTxEZWZlcnJlZExheWVyPiB7CitwdWJsaWM6CisgICAg
RGVmZXJyZWRMYXllcigpOworICAgIHZpcnR1YWwgfkRlZmVycmVkTGF5ZXIoKTsKKworICAgIHZp
cnR1YWwgc2l6ZV90IGZyZWVNZW1vcnlJZlBvc3NpYmxlKHNpemVfdCkgPSAwOworICAgIHZpcnR1
YWwgc2l6ZV90IGdldEN1cnJlbnRCeXRlc0FsbG9jYXRlZCgpID0gMDsgCisgICAgdmlydHVhbCB2
b2lkIGZsdXNoKCkgPSAwOworCisgICAgc2l6ZV90IGJ5dGVzQWxsb2NhdGVkKCkgeyByZXR1cm4g
bV9ieXRlc0FsbG9jYXRlZDsgfQorICAgIHNpemVfdCB1cGRhdGVCeXRlc0FsbG9jYXRlZCgpIHsg
cmV0dXJuIG1fYnl0ZXNBbGxvY2F0ZWQgPSBnZXRDdXJyZW50Qnl0ZXNBbGxvY2F0ZWQoKTsgfQor
Citwcm90ZWN0ZWQ6CisgICAgdm9pZCBhbGxvY2F0ZWRTdG9yYWdlQ2hhbmdlZCgpOworICAgIHZv
aWQgZGlkRHJhdygpOworICAgIHZvaWQgZGlkRmx1c2goKTsKKyAgICBEZWZlcnJlZExheWVyTWFu
YWdlciogbWFuYWdlcigpIHtyZXR1cm4gbV9tYW5hZ2VyO30KKworcHJpdmF0ZToKKyAgICBzaXpl
X3QgbV9ieXRlc0FsbG9jYXRlZDsKKyAgICBmcmllbmQgY2xhc3MgV1RGOjpEb3VibHlMaW5rZWRM
aXN0Tm9kZTxEZWZlcnJlZExheWVyPjsKKyAgICBEZWZlcnJlZExheWVyTWFuYWdlciogbV9tYW5h
Z2VyOworICAgIERlZmVycmVkTGF5ZXIqIG1fbmV4dDsKKyAgICBEZWZlcnJlZExheWVyKiBtX3By
ZXY7CisKKyAgICBmcmllbmQgY2xhc3MgOjpEZWZlcnJlZExheWVyTWFuYWdlclRlc3Q7Cit9Owor
Cit9CisKKyNlbmRpZgorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9EZWZlcnJlZExheWVyTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRGVmZXJyZWRMYXllck1hbmFnZXIuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vRGVmZXJyZWRMYXllck1hbmFnZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1MCBA
QAorLyoKK0NvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KzIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCitUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORCBBTlkKK0VYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKK0xP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTgorQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
CitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyovCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJEZWZlcnJlZExheWVy
TWFuYWdlci5oIgorCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2Ug
eworZW51bSB7CisgICAgRGVmYXVsdE1heEJ5dGVzQWxsb2NhdGVkID0gNjQqMTAyNCoxMDI0LAor
ICAgIERlZmF1bHRUYXJnZXRCeXRlc0FsbG9jYXRlZCA9IDE2KjEwMjQqMTAyNCwKK307Cit9CisK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitEZWZlcnJlZExheWVyTWFuYWdlcjo6RGVmZXJyZWRM
YXllck1hbmFnZXIoKQorICAgIDogbV9ieXRlc0FsbG9jYXRlZCgwKQorICAgICwgbV9tYXhCeXRl
c0FsbG9jYXRlZChEZWZhdWx0TWF4Qnl0ZXNBbGxvY2F0ZWQpCisgICAgLCBtX3RhcmdldEJ5dGVz
QWxsb2NhdGVkKERlZmF1bHRUYXJnZXRCeXRlc0FsbG9jYXRlZCkKK3sKK30KKworRGVmZXJyZWRM
YXllck1hbmFnZXI6On5EZWZlcnJlZExheWVyTWFuYWdlcigpCit7CisgICAgQVNTRVJUKCFtX2J5
dGVzQWxsb2NhdGVkKTsKKyAgICBBU1NFUlQoIW1fbGF5ZXJMaXN0LmhlYWQoKSk7Cit9CisKK3Zv
aWQgRGVmZXJyZWRMYXllck1hbmFnZXI6OmluaXQoc2l6ZV90IG1heEJ5dGVzQWxsb2NhdGVkLCBz
aXplX3QgdGFyZ2V0Qnl0ZXNBbGxvY2F0ZWQpCit7CisgICAgQVNTRVJUKG1heEJ5dGVzQWxsb2Nh
dGVkID49IHRhcmdldEJ5dGVzQWxsb2NhdGVkKTsKKyAgICBtX21heEJ5dGVzQWxsb2NhdGVkID0g
bWF4Qnl0ZXNBbGxvY2F0ZWQ7CisgICAgbV90YXJnZXRCeXRlc0FsbG9jYXRlZCA9IHRhcmdldEJ5
dGVzQWxsb2NhdGVkOworfQorCitEZWZlcnJlZExheWVyTWFuYWdlciYgRGVmZXJyZWRMYXllck1h
bmFnZXI6OmdldCgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChEZWZlcnJlZExheWVyTWFu
YWdlciwgbWFuYWdlciwgKCkpOworICAgIHJldHVybiBtYW5hZ2VyOworfQorCit2b2lkIERlZmVy
cmVkTGF5ZXJNYW5hZ2VyOjpsYXllckRpZERyYXcoRGVmZXJyZWRMYXllciogbGF5ZXIpCit7Cisg
ICAgaWYgKGlzSW5MaXN0KGxheWVyKSkgeworICAgICAgICBpZiAobGF5ZXIgIT0gbV9sYXllckxp
c3QuaGVhZCgpKSB7CisgICAgICAgICAgICBtX2xheWVyTGlzdC5yZW1vdmUobGF5ZXIpOworICAg
ICAgICAgICAgbV9sYXllckxpc3QucHVzaChsYXllcik7IC8vIFNldCBhcyBNUlUKKyAgICAgICAg
fQorICAgIH0gZWxzZQorICAgICAgICBhZGRMYXllclRvTGlzdChsYXllcik7IAorfQorCit2b2lk
IERlZmVycmVkTGF5ZXJNYW5hZ2VyOjphZGRMYXllclRvTGlzdChEZWZlcnJlZExheWVyKiBsYXll
cikKK3sKKyAgICBBU1NFUlQoIWlzSW5MaXN0KGxheWVyKSk7CisgICAgbV9ieXRlc0FsbG9jYXRl
ZCArPSBsYXllci0+dXBkYXRlQnl0ZXNBbGxvY2F0ZWQoKTsKKyAgICBtX2xheWVyTGlzdC5wdXNo
KGxheWVyKTsgLy8gU2V0IGFzIE1SVQorfQorCit2b2lkIERlZmVycmVkTGF5ZXJNYW5hZ2VyOjps
YXllckFsbG9jYXRlZFN0b3JhZ2VDaGFuZ2VkKERlZmVycmVkTGF5ZXIqIGxheWVyKQoreworICAg
IGlmICghaXNJbkxpc3QobGF5ZXIpKQorICAgICAgICBhZGRMYXllclRvTGlzdChsYXllcik7IAor
ICAgIHVwZGF0ZUJ5dGVzQWxsb2NhdGVkKGxheWVyKTsKKyAgICBmcmVlTWVtb3J5SWZOZWNlc3Nh
cnkoKTsKK30KKwordm9pZCBEZWZlcnJlZExheWVyTWFuYWdlcjo6bGF5ZXJEaWRGbHVzaChEZWZl
cnJlZExheWVyKiBsYXllcikKK3sKKyAgICB1cGRhdGVCeXRlc0FsbG9jYXRlZChsYXllcik7Cit9
CisKK3ZvaWQgRGVmZXJyZWRMYXllck1hbmFnZXI6OmxheWVyVG9CZURlc3Ryb3llZChEZWZlcnJl
ZExheWVyKiBsYXllcikKK3sKKyAgICBpZiAoaXNJbkxpc3QobGF5ZXIpKSB7CisgICAgICAgIHJl
bW92ZUxheWVyRnJvbUxpc3QobGF5ZXIpOworICAgICAgICBtX2J5dGVzQWxsb2NhdGVkIC09IGxh
eWVyLT5ieXRlc0FsbG9jYXRlZCgpOworICAgIH0KK30KKwordm9pZCBEZWZlcnJlZExheWVyTWFu
YWdlcjo6ZnJlZU1lbW9yeUlmTmVjZXNzYXJ5KCkgCit7CisgICAgaWYgKG1fYnl0ZXNBbGxvY2F0
ZWQgPiBtX21heEJ5dGVzQWxsb2NhdGVkKSB7CisgICAgICAgIC8vIFBhc3MgMTogRnJlZSBtZW1v
cnkgZnJvbSBjYWNoZXMKKyAgICAgICAgRGVmZXJyZWRMYXllciogbGF5ZXIgPSBtX2xheWVyTGlz
dC50YWlsKCk7IC8vIExSVQorICAgICAgICB3aGlsZSAobV9ieXRlc0FsbG9jYXRlZCA+IG1fdGFy
Z2V0Qnl0ZXNBbGxvY2F0ZWQgJiYgbGF5ZXIpIHsKKyAgICAgICAgICAgIGlmIChsYXllci0+ZnJl
ZU1lbW9yeUlmUG9zc2libGUobV9ieXRlc0FsbG9jYXRlZCAtIG1fdGFyZ2V0Qnl0ZXNBbGxvY2F0
ZWQpKQorICAgICAgICAgICAgICAgIHVwZGF0ZUJ5dGVzQWxsb2NhdGVkKGxheWVyKTsKKyAgICAg
ICAgICAgIGxheWVyID0gbGF5ZXItPnByZXYoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFBh
c3MgMjogRmx1c2ggY2FudmFzZXMKKyAgICAgICAgRGVmZXJyZWRMYXllciogbGVhc3RSZWNlbnRs
eVVzZWRMYXllciA9IG1fbGF5ZXJMaXN0LnRhaWwoKTsKKyAgICAgICAgd2hpbGUgKG1fYnl0ZXNB
bGxvY2F0ZWQgPiBtX3RhcmdldEJ5dGVzQWxsb2NhdGVkICYmIGxlYXN0UmVjZW50bHlVc2VkTGF5
ZXIpIHsKKyAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2VkTGF5ZXItPmZsdXNoKCk7CisgICAg
ICAgICAgICBsZWFzdFJlY2VudGx5VXNlZExheWVyLT5mcmVlTWVtb3J5SWZQb3NzaWJsZSh+MCk7
CisgICAgICAgICAgICBtX2J5dGVzQWxsb2NhdGVkIC09IGxlYXN0UmVjZW50bHlVc2VkTGF5ZXIt
PmJ5dGVzQWxsb2NhdGVkKCk7CisgICAgICAgICAgICByZW1vdmVMYXllckZyb21MaXN0KGxlYXN0
UmVjZW50bHlVc2VkTGF5ZXIpOworICAgICAgICAgICAgbGVhc3RSZWNlbnRseVVzZWRMYXllciA9
IG1fbGF5ZXJMaXN0LnRhaWwoKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBEZWZlcnJl
ZExheWVyTWFuYWdlcjo6cmVtb3ZlTGF5ZXJGcm9tTGlzdChEZWZlcnJlZExheWVyKiBsYXllcikK
K3sKKyAgICBBU1NFUlQoaXNJbkxpc3QobGF5ZXIpKTsKKyAgICBtX2xheWVyTGlzdC5yZW1vdmUo
bGF5ZXIpOworICAgIGxheWVyLT5zZXROZXh0KDApOworICAgIGxheWVyLT5zZXRQcmV2KDApOwor
fQorCitib29sIERlZmVycmVkTGF5ZXJNYW5hZ2VyOjppc0luTGlzdChEZWZlcnJlZExheWVyKiBs
YXllcikKK3sKKyAgICByZXR1cm4gbGF5ZXItPnByZXYoKSB8fCBtX2xheWVyTGlzdC5oZWFkKCkg
PT0gbGF5ZXI7Cit9CisKK3ZvaWQgRGVmZXJyZWRMYXllck1hbmFnZXI6OnVwZGF0ZUJ5dGVzQWxs
b2NhdGVkKERlZmVycmVkTGF5ZXIqIGxheWVyKQoreworICAgIGlmICghaXNJbkxpc3QobGF5ZXIp
KQorICAgICAgICBhZGRMYXllclRvTGlzdChsYXllcik7CisgICAgc2l6ZV90IG9sZExheWVyQnl0
ZXNBbGxvY2F0ZWQgPSBsYXllci0+Ynl0ZXNBbGxvY2F0ZWQoKTsKKyAgICBzaXplX3QgbmV3TGF5
ZXJCeXRlc0FsbG9jYXRlZCA9IGxheWVyLT51cGRhdGVCeXRlc0FsbG9jYXRlZCgpOworICAgIG1f
Ynl0ZXNBbGxvY2F0ZWQgPSBtX2J5dGVzQWxsb2NhdGVkICsgbmV3TGF5ZXJCeXRlc0FsbG9jYXRl
ZCAtIG9sZExheWVyQnl0ZXNBbGxvY2F0ZWQ7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkTGF5ZXJNYW5hZ2VyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRGVmZXJy
ZWRMYXllck1hbmFnZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkTGF5ZXJNYW5hZ2VyLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNjUgQEAKKy8qCitDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAgICAKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCitESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCitBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2lmbmRlZiBEZWZlcnJlZExheWVyTWFuYWdl
cl9oCisjZGVmaW5lIERlZmVycmVkTGF5ZXJNYW5hZ2VyX2gKKworI2luY2x1ZGUgIkRlZmVycmVk
TGF5ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEZWZlcnJlZExheWVyTWFu
YWdlciB7CitwdWJsaWM6CisgICAgc3RhdGljIERlZmVycmVkTGF5ZXJNYW5hZ2VyJiBnZXQoKTsK
KyAgICB2b2lkIGluaXQoc2l6ZV90IG1heEJ5dGVzQWxsb2NhdGVkLCBzaXplX3QgdGFyZ2V0Qnl0
ZXNBbGxvY2F0ZWQpOworICAgIHZpcnR1YWwgfkRlZmVycmVkTGF5ZXJNYW5hZ2VyKCk7CisKK3By
aXZhdGU6CisgICAgRGVmZXJyZWRMYXllck1hbmFnZXIoKTsKKworICAgIC8vIGludGVyZmFjZSBm
b3IgRGVmZXJyZWRMYXllcgorICAgIGZyaWVuZCBjbGFzcyBEZWZlcnJlZExheWVyOworICAgIHZv
aWQgbGF5ZXJBbGxvY2F0ZWRTdG9yYWdlQ2hhbmdlZChEZWZlcnJlZExheWVyKik7CisgICAgdm9p
ZCBsYXllckRpZEZsdXNoKERlZmVycmVkTGF5ZXIqKTsKKyAgICB2b2lkIGxheWVyRGlkRHJhdyhE
ZWZlcnJlZExheWVyKik7CisgICAgdm9pZCBsYXllclRvQmVEZXN0cm95ZWQoRGVmZXJyZWRMYXll
ciopOworCisgICAgLy8gaW50ZXJuYWwgbWV0aG9kcworICAgIHZvaWQgZnJlZU1lbW9yeUlmTmVj
ZXNzYXJ5KCk7CisgICAgdm9pZCB1cGRhdGVCeXRlc0FsbG9jYXRlZChEZWZlcnJlZExheWVyKik7
CisgICAgYm9vbCBpc0luTGlzdChEZWZlcnJlZExheWVyKik7CisgICAgdm9pZCBhZGRMYXllclRv
TGlzdChEZWZlcnJlZExheWVyKik7CisgICAgdm9pZCByZW1vdmVMYXllckZyb21MaXN0KERlZmVy
cmVkTGF5ZXIqKTsKKworICAgIHNpemVfdCBtX2J5dGVzQWxsb2NhdGVkOworICAgIHNpemVfdCBt
X21heEJ5dGVzQWxsb2NhdGVkOworICAgIHNpemVfdCBtX3RhcmdldEJ5dGVzQWxsb2NhdGVkOwor
ICAgIERvdWJseUxpbmtlZExpc3Q8RGVmZXJyZWRMYXllcj4gbV9sYXllckxpc3Q7CisKKyAgICBm
cmllbmQgY2xhc3MgOjpEZWZlcnJlZExheWVyTWFuYWdlclRlc3Q7IC8vIGZvciB1bml0IHRlc3Rp
bmcKK307CisKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2
aXNpb24gMTI1OTM5KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwyNiBAQAorMjAxMi0wOC0xNyAgSnVzdGluIE5vdm9zYWQgIDxq
dW5vdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBJbXBsZW1lbnRpbmcgYSBn
bG9iYWwgbGltaXQgb24gbWVtb3J5IGNvbnN1bWVkIGJ5IGRlZmVycmVkIDJEIGNhbnZhc2VzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDM4NgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGluZyB1bml0
IHRlc3RzIGZvciBXZWJDb3JlOjpEZWZlcnJlZExheWVyTWFuYWdlcgorCisgICAgICAgICogV2Vi
S2l0Lmd5cGk6CisgICAgICAgICogdGVzdHMvRGVmZXJyZWRMYXllck1hbmFnZXJUZXN0LmNwcDog
QWRkZWQuCisgICAgICAgIChGYWtlRGVmZXJyZWRMYXllcik6CisgICAgICAgIChGYWtlRGVmZXJy
ZWRMYXllcjo6RmFrZURlZmVycmVkTGF5ZXIpOgorICAgICAgICAoRmFrZURlZmVycmVkTGF5ZXI6
OmZha2VCeXRlc0FsbG9jYXRlZCk6CisgICAgICAgIChGYWtlRGVmZXJyZWRMYXllcjo6ZmFrZUZy
ZWVhYmxlQnl0ZXMpOgorICAgICAgICAoRmFrZURlZmVycmVkTGF5ZXI6OmZyZWVNZW1vcnlJZlBv
c3NpYmxlKToKKyAgICAgICAgKEZha2VEZWZlcnJlZExheWVyOjpmbHVzaCk6CisgICAgICAgIChG
YWtlRGVmZXJyZWRMYXllcjo6Z2V0Q3VycmVudEJ5dGVzQWxsb2NhdGVkKToKKyAgICAgICAgKERl
ZmVycmVkTGF5ZXJNYW5hZ2VyVGVzdCk6CisgICAgICAgIChEZWZlcnJlZExheWVyTWFuYWdlclRl
c3Q6OnN0b3JhZ2VBbGxvY2F0aW9uVHJhY2tpbmdUZXN0KToKKyAgICAgICAgKERlZmVycmVkTGF5
ZXJNYW5hZ2VyVGVzdDo6ZXZpY3Rpb25UZXN0KToKKyAgICAgICAgKERlZmVycmVkTGF5ZXJNYW5h
Z2VyVGVzdDo6Zmx1c2hFdmljdGlvblRlc3QpOgorCiAyMDEyLTA4LTE2ICBKYW1lcyBSb2JpbnNv
biAgPGphbWVzckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBBZGQgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvIHRvIGluY2x1ZGUgcGF0aCBh
bmQgcmVtb3ZlIGNjLyBwcmVmaXggZnJvbSBpbmNsdWRlcwpJbmRleDogU291cmNlL1dlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L1dlYktpdC5neXBpCShyZXZpc2lvbiAxMjU5MjUpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L1dlYktpdC5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNiArMTAxLDcgQEAKICAgICAgICAg
ICAgICd0ZXN0cy9Db250ZW50TGF5ZXJDaHJvbWl1bVRlc3QuY3BwJywKICAgICAgICAgICAgICd0
ZXN0cy9EYXRlVGltZUZvcm1hdFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9EZWNpbWFs
VGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0RlZmVycmVkTGF5ZXJNYW5hZ2VyVGVzdC5j
cHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0RyYWdJbWFnZVRlc3QuY3BwJywKICAgICAgICAgICAg
ICd0ZXN0cy9FdmVudExpc3RlbmVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0Zha2VD
Q0xheWVyVHJlZUhvc3RDbGllbnQuaCcsCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0RlZmVycmVkTGF5ZXJNYW5hZ2VyVGVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9EZWZlcnJlZExheWVyTWFuYWdlclRlc3QuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9EZWZlcnJlZExheWVyTWFuYWdl
clRlc3QuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAq
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiRGVmZXJyZWRMYXllck1hbmFnZXIuaCIK
KworI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyB0ZXN0aW5nOjpJblNlcXVlbmNlOwordXNp
bmcgdGVzdGluZzo6UmV0dXJuOwordXNpbmcgdGVzdGluZzo6VGVzdDsKKworY2xhc3MgRmFrZURl
ZmVycmVkTGF5ZXIgOiBwdWJsaWMgRGVmZXJyZWRMYXllciB7CitwdWJsaWM6CisgICAgRmFrZURl
ZmVycmVkTGF5ZXIoKSAKKyAgICAgICAgOiBtX2Zha2VCeXRlc0FsbG9jYXRlZCgwKQorICAgICAg
ICAsIG1fZnJlZWFibGVCeXRlcygwKQorICAgICAgICAsIG1fZnJlZU1lbW9yeUlmUG9zc2libGVD
b3VudCgwKQorICAgICAgICAsIG1fZmx1c2hDb3VudCgwKQorICAgIHsKKyAgICB9CisKKyAgICB2
b2lkIGZha2VCeXRlc0FsbG9jYXRlZChzaXplX3Qgc2l6ZSkgCisgICAgeworICAgICAgICBtX2Zh
a2VCeXRlc0FsbG9jYXRlZCA9IHNpemU7CisgICAgICAgIGFsbG9jYXRlZFN0b3JhZ2VDaGFuZ2Vk
KCk7CisgICAgfQorCisgICAgdm9pZCBmYWtlRnJlZWFibGVCeXRlcyhzaXplX3Qgc2l6ZSkKKyAg
ICB7CisgICAgICAgIG1fZnJlZWFibGVCeXRlcyA9IHNpemU7CisgICAgfQorCisgICAgdmlydHVh
bCBzaXplX3QgZnJlZU1lbW9yeUlmUG9zc2libGUoc2l6ZV90IHNpemUpCisgICAgeworICAgICAg
ICBtX2ZyZWVNZW1vcnlJZlBvc3NpYmxlQ291bnQrKzsKKyAgICAgICAgc2l6ZV90IGJ5dGVzRnJl
ZWQgPSBzaXplIDwgbV9mcmVlYWJsZUJ5dGVzID8gc2l6ZSA6IG1fZnJlZWFibGVCeXRlczsKKyAg
ICAgICAgbV9mcmVlYWJsZUJ5dGVzIC09IGJ5dGVzRnJlZWQ7CisgICAgICAgIG1fZmFrZUJ5dGVz
QWxsb2NhdGVkIC09IGJ5dGVzRnJlZWQ7CisgICAgICAgIHJldHVybiBieXRlc0ZyZWVkOworICAg
IH0KKworICAgIHZpcnR1YWwgdm9pZCBmbHVzaCgpCisgICAgeworICAgICAgICBtX2ZsdXNoQ291
bnQrKzsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHNpemVfdCBnZXRDdXJyZW50Qnl0ZXNBbGxvY2F0
ZWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZmFrZUJ5dGVzQWxsb2NhdGVkOworICAgIH0K
KworcHVibGljOgorICAgIHNpemVfdCBtX2Zha2VCeXRlc0FsbG9jYXRlZDsKKyAgICBzaXplX3Qg
bV9mcmVlYWJsZUJ5dGVzOworICAgIGludCBtX2ZyZWVNZW1vcnlJZlBvc3NpYmxlQ291bnQ7Cisg
ICAgaW50IG1fZmx1c2hDb3VudDsKK307CisKK2NsYXNzIERlZmVycmVkTGF5ZXJNYW5hZ2VyVGVz
dCA6IHB1YmxpYyBUZXN0IHsKK3Byb3RlY3RlZDoKKyAgICB2b2lkIHN0b3JhZ2VBbGxvY2F0aW9u
VHJhY2tpbmdUZXN0KCkKKyAgICB7CisgICAgICAgIERlZmVycmVkTGF5ZXJNYW5hZ2VyJiBtYW5h
Z2VyID0gRGVmZXJyZWRMYXllck1hbmFnZXI6OmdldCgpOworICAgICAgICBtYW5hZ2VyLmluaXQo
MTAsIDEwKTsKKyAgICAgICAgeworICAgICAgICAgICAgRmFrZURlZmVycmVkTGF5ZXIgbGF5ZXIx
OworICAgICAgICAgICAgRVhQRUNUX0VRKChzaXplX3QpMCwgbWFuYWdlci5tX2J5dGVzQWxsb2Nh
dGVkKTsKKyAgICAgICAgICAgIGxheWVyMS5mYWtlQnl0ZXNBbGxvY2F0ZWQoMSk7CisgICAgICAg
ICAgICBFWFBFQ1RfRVEoKHNpemVfdCkxLCBtYW5hZ2VyLm1fYnl0ZXNBbGxvY2F0ZWQpOworICAg
ICAgICAgICAgLy8gVGVzdCBhbGxvY2F0aW9uIGluY3JlYXNlCisgICAgICAgICAgICBsYXllcjEu
ZmFrZUJ5dGVzQWxsb2NhdGVkKDIpOworICAgICAgICAgICAgRVhQRUNUX0VRKChzaXplX3QpMiwg
bWFuYWdlci5tX2J5dGVzQWxsb2NhdGVkKTsKKyAgICAgICAgICAgIC8vIFRlc3QgYWxsb2NhdGlv
biBkZWNyZWFzZQorICAgICAgICAgICAgbGF5ZXIxLmZha2VCeXRlc0FsbG9jYXRlZCgxKTsKKyAg
ICAgICAgICAgIEVYUEVDVF9FUSgoc2l6ZV90KTEsIG1hbmFnZXIubV9ieXRlc0FsbG9jYXRlZCk7
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRmFrZURlZmVycmVkTGF5ZXIgbGF5ZXIy
OworICAgICAgICAgICAgICAgIEVYUEVDVF9FUSgoc2l6ZV90KTEsIG1hbmFnZXIubV9ieXRlc0Fs
bG9jYXRlZCk7CisgICAgICAgICAgICAgICAgLy8gdmVyaWZ5IG11bHRpLWxheWVyIGFsbG9jYXRp
b24gdHJhY2tpbmcKKyAgICAgICAgICAgICAgICBsYXllcjIuZmFrZUJ5dGVzQWxsb2NhdGVkKDIp
OworICAgICAgICAgICAgICAgIEVYUEVDVF9FUSgoc2l6ZV90KTMsIG1hbmFnZXIubV9ieXRlc0Fs
bG9jYXRlZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBWZXJpZnkgdHJhY2tpbmcg
YWZ0ZXIgZGVzdHJ1Y3Rpb24KKyAgICAgICAgICAgIEVYUEVDVF9FUSgoc2l6ZV90KTEsIG1hbmFn
ZXIubV9ieXRlc0FsbG9jYXRlZCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGV2aWN0
aW9uVGVzdCgpCisgICAgeworICAgICAgICBEZWZlcnJlZExheWVyTWFuYWdlciYgbWFuYWdlciA9
IERlZmVycmVkTGF5ZXJNYW5hZ2VyOjpnZXQoKTsKKyAgICAgICAgbWFuYWdlci5pbml0KDEwLCA1
KTsKKyAgICAgICAgRmFrZURlZmVycmVkTGF5ZXIgbGF5ZXI7CisgICAgICAgIGxheWVyLmZha2VG
cmVlYWJsZUJ5dGVzKDEwKTsKKyAgICAgICAgbGF5ZXIuZmFrZUJ5dGVzQWxsb2NhdGVkKDgpOyAv
LyB1bmRlciB0aGUgbWF4CisgICAgICAgIEVYUEVDVF9FUSgwLCBsYXllci5tX2ZyZWVNZW1vcnlJ
ZlBvc3NpYmxlQ291bnQpOworICAgICAgICBsYXllci5mYWtlQnl0ZXNBbGxvY2F0ZWQoMTIpOyAv
LyBvdmVyIHRoZSBtYXgKKyAgICAgICAgRVhQRUNUX0VRKDEsIGxheWVyLm1fZnJlZU1lbW9yeUlm
UG9zc2libGVDb3VudCk7CisgICAgICAgIEVYUEVDVF9FUSgoc2l6ZV90KTMsIGxheWVyLm1fZnJl
ZWFibGVCeXRlcyk7CisgICAgICAgIEVYUEVDVF9FUSgwLCBsYXllci5tX2ZsdXNoQ291bnQpOyAv
LyBldmljdGlvbiBzdWNjZWVkZWQgd2l0aG91dCB0cmlnZ2VyaW5nIGEgZmx1c2gKKyAgICAgICAg
RVhQRUNUX0VRKChzaXplX3QpNSwgbGF5ZXIuYnl0ZXNBbGxvY2F0ZWQoKSk7CisgICAgfQorCisg
ICAgdm9pZCBmbHVzaEV2aWN0aW9uVGVzdCgpCisgICAgeworICAgICAgICBEZWZlcnJlZExheWVy
TWFuYWdlciYgbWFuYWdlciA9IERlZmVycmVkTGF5ZXJNYW5hZ2VyOjpnZXQoKTsKKyAgICAgICAg
bWFuYWdlci5pbml0KDEwLCA1KTsKKyAgICAgICAgRmFrZURlZmVycmVkTGF5ZXIgbGF5ZXI7Cisg
ICAgICAgIGxheWVyLmZha2VGcmVlYWJsZUJ5dGVzKDEpOyAvLyBOb3QgZW5vdWdoIGZyZWVhYmxl
IGJ5dGVzLCB3aWxsIGNhdXNlIGFnZ3Jlc3NpdmUgZXZpY3Rpb24gYnkgZmx1c2hpbmcKKyAgICAg
ICAgbGF5ZXIuZmFrZUJ5dGVzQWxsb2NhdGVkKDgpOyAvLyB1bmRlciB0aGUgbWF4CisgICAgICAg
IEVYUEVDVF9FUSgwLCBsYXllci5tX2ZyZWVNZW1vcnlJZlBvc3NpYmxlQ291bnQpOworICAgICAg
ICBsYXllci5mYWtlQnl0ZXNBbGxvY2F0ZWQoMTIpOyAvLyBvdmVyIHRoZSBtYXgKKyAgICAgICAg
RVhQRUNUX0VRKDIsIGxheWVyLm1fZnJlZU1lbW9yeUlmUG9zc2libGVDb3VudCk7IC8vIFR3byB0
cmllcywgb25lIGJlZm9yZSBmbHVzaCwgb25lIGFmdGVyIGZsdXNoCisgICAgICAgIEVYUEVDVF9F
USgoc2l6ZV90KTAsIGxheWVyLm1fZnJlZWFibGVCeXRlcyk7CisgICAgICAgIEVYUEVDVF9FUSgx
LCBsYXllci5tX2ZsdXNoQ291bnQpOyAvLyBmbHVzaCB3YXMgYXR0ZW1wdGVkCisgICAgICAgIEVY
UEVDVF9FUSgoc2l6ZV90KTExLCBsYXllci5ieXRlc0FsbG9jYXRlZCgpKTsgLy8gZmx1c2ggZHJv
cHMgdGhlIGxheWVyIGZyb20gbWFuYWdlcidzIHRyYWNraW5nIGxpc3QKKyAgICAgICAgRVhQRUNU
X0ZBTFNFKG1hbmFnZXIuaXNJbkxpc3QoJmxheWVyKSk7CisgICAgfQorfTsKKworbmFtZXNwYWNl
IHsKKworVEVTVF9GKERlZmVycmVkTGF5ZXJNYW5hZ2VyVGVzdCwgdGVzdFN0b3JhZ2VBbGxvY2F0
aW9uVHJhY2tpbmcpCit7CisgICAgc3RvcmFnZUFsbG9jYXRpb25UcmFja2luZ1Rlc3QoKTsKK30K
KworVEVTVF9GKERlZmVycmVkTGF5ZXJNYW5hZ2VyVGVzdCwgdGVzdEV2aWN0aW9uKQoreworICAg
IGV2aWN0aW9uVGVzdCgpOworfQorCitURVNUX0YoRGVmZXJyZWRMYXllck1hbmFnZXJUZXN0LCB0
ZXN0Rmx1c2hFdmljdGlvbikKK3sKKyAgICBmbHVzaEV2aWN0aW9uVGVzdCgpOworfQorCit9IC8v
IG5hbWVzcGFjZQorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160208</attachid>
            <date>2012-08-23 11:58:49 -0700</date>
            <delta_ts>2012-08-24 12:04:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94386-20120823145846.patch</filename>
            <type>text/plain</type>
            <size>26161</size>
            <attacher name="Justin Novosad">junov</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyNjQ1OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgyIEBACisyMDEyLTA4LTIzICBKdXN0aW4g
Tm92b3NhZCAgPGp1bm92QGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIEltcGxl
bWVudGluZyBhIGdsb2JhbCBsaW1pdCBvbiBtZW1vcnkgY29uc3VtZWQgYnkgZGVmZXJyZWQgMkQg
Y2FudmFzZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTk0Mzg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QmVmb3JlIHRoaXMgY2hhbmdlLCB0aGVyZSB3YXMgbm8gZ2xvYmFsIGJvdW5kIG9uIG1lbW9yeSB0
aGF0IGNvdWxkIGJlCisgICAgICAgIGNvbnN1bWVkIGZvciB0aGUgcHVycG9zZSBvZiByZWNvcmRp
bmcgMmQgY2FudmFzIGRlZmVycmVkIGRyYXcgY29tbWFuZHMuCisgICAgICAgIFRoZXJlIHdhcyBv
bmx5IGEgcGVyIGNhbnZhcyBsaW1pdC4gSXQgaXMgcG9zc2libGUgZm9yIGNhbnZhc2VzIHRvIGdl
dAorICAgICAgICBkZXJlZmVyZW5jZWQgd2l0aG91dCBmbHVzaGluZyBwZW5kaW5nIGRyYXcgY29t
bWFuZHMsIHdoaWNoIG1heSBsb2NrCisgICAgICAgIHJlc291cmNlcyB1bnRpbCB0aGUgY2FudmFz
IGVsZW1lbnQgaXMgZ2FyYmFnZSBjb2xsZWN0ZWQuIFRoaXMgbWFrZXMKKyAgICAgICAgaXQgcG9z
c2libGUgdG8gZ3JvdyBtZW1vcnkgY29uc3VtcHRpb24gaW5kZWZpbml0ZWx5IGJ5IGhpdHRpbmcg
cmVsb2FkCisgICAgICAgIHN1Y2Nlc3NpdmVseSBvbiBzb21lIGNhbnZhcy1pbnRlbnNpdmUgd2Vi
IHBhZ2VzLgorCisgICAgICAgIFRoZSBzb2x1dGlvbiBpbXBsZW1lbnRlZCBpbiB0aGlzIGNoYW5n
ZSBjb25zaXN0cyBpbiBtYWludGFpbmluZyBhCisgICAgICAgIGdsb2JhbCByZWdpc3RyeSBvZiBk
ZWZlcnJlZCBjYW52YXMgbGF5ZXJzIGFuZCB0cmFja2luZyB0aGUgc3VtIG9mCisgICAgICAgIG1l
bW9yeSBhbGxvY2F0ZWQgYnkgYWxsIGNhbnZhc2VzIGZvciB0aGUgcHVycG9zZSBvZiBzdG9yaW5n
IGRlZmVycmVkCisgICAgICAgIGRyYXcgY29tbWFuZHMuIFdoZW4gbWVtb3J5IGNvbnN1bXB0aW9u
IHJlYWNoZXMgdGhlIGFsbG93ZWQgbGltaXQsCisgICAgICAgIGNhY2hlcyBhcmUgY2xlYXJlZCBh
bmQgZHJhdyBvcGVyYXRpb25zIGFyZSBmbHVzaGVkIG9uIG9uZSBvciBzZXZlcmFsCisgICAgICAg
IGNhbnZhc2VzLCBzdGFydGluZyB3aXRoIHRoZSBsZWFzdCByZWNlbnRseSB1c2VkLCB1bnRpbCBt
ZW1vcnkKKyAgICAgICAgY29uc3VtcHRpb24gaXMgYmVsb3cgYSB0YXJnZXQgbGV2ZWwuCisKKyAg
ICAgICAgTmV3IHRlc3RzOiB3ZWJraXRfdW5pdF90ZXN0cyBEZWZlcnJlZExheWVyTWFuYWdlclRl
c3QqCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckJyaWRnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
YW52YXMyRExheWVyQnJpZGdlOjpDYW52YXMyRExheWVyQnJpZGdlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNhbnZhczJETGF5ZXJCcmlkZ2U6On5DYW52YXMyRExheWVyQnJpZGdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNhbnZhczJETGF5ZXJCcmlkZ2U6OnN0b3JhZ2VBbGxvY2F0ZWRGb3JSZWNvcmRp
bmdDaGFuZ2VkKToKKyAgICAgICAgT3ZlcmxvYWRlZCBmcm9tIFNrRGVmZXJyZWRDYW52YXM6Ok5v
dGlmaWNhdGlvbkNsaWVudC4gQ2FsbGVkIHdoZW4KKyAgICAgICAgdGhlcmUgaXMgYSBjaGFuZ2Ug
aW4gdGhlIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQgYnkgdGhlIGRlZmVycmVkCisgICAgICAg
IGNhbnZhcy4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRM
YXllckJyaWRnZTo6Zmx1c2hlZERyYXdDb21tYW5kcyk6CisgICAgICAgIE92ZXJsb2FkZWQgZnJv
bSBTa0RlZmVycmVkQ2FudmFzOjpOb3RpZmljYXRpb25DbGllbnQuIENhbGxlZCB3aGVuCisgICAg
ICAgIHBlbmRpbmcgZHJhdyBjb21tYW5kcyBhcmUgZmx1c2ggYnkgdGhlIGRlZmVycmVkIGNhbnZh
cy4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJCcmlkZ2U6OmZyZWVNZW1vcnlJZlBv
c3NpYmxlKToKKyAgICAgICAgQ2FsbGVkIGJ5IHRoZSBDYW52YXMyRExheWVyTWFuYWdlciB0byBy
ZXF1ZXN0IHRoZSByZWxlYXNlIG9mIHVubG9ja2VkCisgICAgICAgIG1lbW9yeSByZXNvdXJjZXMg
KGNhY2hlcykuIFJlcXVlc3QgaXMgcmVsYXllZCB0byBTa0RlZmVycmVkQ2FudmFzLgorICAgICAg
ICByZXR1cm5zIG51bWJlciBvZiBieXRlcyBmcmVlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
czJETGF5ZXJCcmlkZ2U6OmZsdXNoKToKKyAgICAgICAgUmVxdWVzdHMgdGhhdCBwZW5kaW5nIGRy
YXcgY29tbWFuZHMgYmUgZmx1c2hlZCBpbW1lZGlhdGVseSBmcm9tIHRoZQorICAgICAgICBkZWZl
cnJlZCBjYW52YXMgcXVldWUuIFJlcXVlc3QgaXMgcmVsYXllZCB0byBTa0RlZmVycmVkQ2FudmFz
LgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckJyaWRnZTo6Y29udGV4dEFjcXVpcmVk
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQnJp
ZGdlLmg6CisgICAgICAgIChDYW52YXMyRExheWVyQnJpZGdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhczJETGF5ZXJCcmlkZ2U6OmJ5dGVzQWxsb2NhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhczJETGF5ZXJCcmlkZ2U6OnVwZGF0ZUJ5dGVzQWxsb2NhdGVkKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyTWFuYWdlci5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyTWFu
YWdlcjo6Q2FudmFzMkRMYXllck1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRM
YXllck1hbmFnZXI6On5DYW52YXMyRExheWVyTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpD
YW52YXMyRExheWVyTWFuYWdlcjo6aW5pdCk6CisgICAgICAgIFNldHMgdGhlIGdsb2JhbCBsaW1p
dCBmb3IgdGhlIG1heGltdW0gdG90YWwgbnVtYmVyIG9mIGJ5dGVzIGFsbG9jYXRlZAorICAgICAg
ICBieSBkZWZlcnJlZCBsYXllcnMuCisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyTWFu
YWdlcjo6Z2V0KToKKyAgICAgICAgU2luZ2xldG9uIGFjY2Vzc29yCisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXMyRExheWVyTWFuYWdlcjo6bGF5ZXJEaWREcmF3KToKKyAgICAgICAgQ2FsbGVkIGJ5
IENhbnZhczJETGF5ZXJCcmlkZ2UgdG8gaW5kaWNhdGUgdGhhdCB0aGUgbGF5ZXIgd2FzIGRyYXdu
IHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllck1hbmFnZXI6OmFkZExheWVyVG9M
aXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJNYW5hZ2VyOjpsYXllckFsbG9j
YXRlZFN0b3JhZ2VDaGFuZ2VkKToKKyAgICAgICAgQ2FsbGVkIGJ5IENhbnZhczJETGF5ZXJCcmlk
Z2UgdG8gaW5kaWNhdGUgdGhldCB0aGUgbWVtb3J5IGNvbnN1bWVkIGJ5CisgICAgICAgIHRoZSBs
YXllciBoYXMgY2hhbmdlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJNYW5hZ2Vy
OjpsYXllckRpZEZsdXNoKToKKyAgICAgICAgQ2FsbGVkIGJ5IENhbnZhczJETGF5ZXJCcmlkZ2Ug
dG8gaW5kaWNhdGVkIHRoYXQgdGhlIHBlbmRpbmcgZHJhdworICAgICAgICBjb21tYW5kcyBvZiB0
aGUgbGF5ZXIgd2VyZSBmbHVzaGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllck1h
bmFnZXI6OmxheWVyVG9CZURlc3Ryb3llZCk6CisgICAgICAgIENhbGxlZCBieSBDYW52YXMyRExh
eWVyQnJpZGdlIHVwb24gZGVzdHJ1Y3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExh
eWVyTWFuYWdlcjo6ZnJlZU1lbW9yeUlmTmVjZXNzYXJ5KToKKyAgICAgICAgQ2FsbGVkIGludGVy
bmFsbHkuIENoZWNrIHRoYXQgY3VycmVudCBtZW1vcnkgY29uc3VtcHRpb24gaXMgYmVsb3cKKyAg
ICAgICAgdGhlIHRvbGVyYXRlZCBsaW1pdC4gIElmIGNoZWNrIGZhaWxzLCBpbnRpYXRlcyByZXNv
dXJjZSByZWxlYXNlcy4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJNYW5hZ2VyOjpy
ZW1vdmVMYXllckZyb21MaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJNYW5h
Z2VyOjppc0luTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyTWFuYWdlcjo6
dXBkYXRlQnl0ZXNBbGxvY2F0ZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0NhbnZhczJETGF5ZXJNYW5hZ2VyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChDYW52YXMyRExheWVyTWFuYWdlcik6CisKIDIwMTItMDgtMjMgIEtldmluIE9sbGl2
aWVyICA8a2V2aW5vQHRoZW9sbGl2aWVycy5jb20+CiAKICAgICAgICAgW3d4XSBVbnJldmlld2Vk
IGJ1aWxkIGZpeC4gQWRkIHd4IHRvIHRoZSBsaXN0IG9mIHBsYXRmb3JtcyB0aGF0IHVzZSBDb3Jl
VGV4dApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gMTI2NDUxKQorKysgU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0zNjU3LDYgKzM2NTcsOCBAQAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0FuaW1hdGlvblRyYW5zbGF0
aW9uVXRpbC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52
YXMyRExheWVyQnJpZGdlLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ2FudmFzMkRMYXllckJyaWRnZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyTWFuYWdlci5jcHAnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJNYW5hZ2VyLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbXBvc2l0b3JIVURGb250QXRsYXMu
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db21wb3NpdG9y
SFVERm9udEF0bGFzLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0Nyb3NzUHJvY2Vzc0ZvbnRMb2FkaW5nLmgnLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckJyaWRnZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXll
ckJyaWRnZS5jcHAJKHJldmlzaW9uIDEyNjQ1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJCcmlkZ2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJDYW52YXMyRExheWVyQnJpZGdlLmgiCiAK
KyNpbmNsdWRlICJDYW52YXMyRExheWVyTWFuYWdlci5oIgogI2luY2x1ZGUgIkdyQ29udGV4dC5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlLmgiCkBAIC01Myw2ICs1NCwxMCBAQCBDYW52YXMyRExheWVyQnJpZGdlOjpD
YW52YXMyRExheWVyQnJpZGdlCiAgICAgLCBtX3NpemUoc2l6ZSkKICAgICAsIG1fY2FudmFzKDAp
CiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1fYnl0ZXNBbGxvY2F0ZWQoMCkKKyAg
ICAsIG1fbmV3Qnl0ZXNBbGxvY2F0ZWQoMCkKKyAgICAsIG1fbmV4dCgwKQorICAgICwgbV9wcmV2
KDApCiB7CiAgICAgaWYgKG1fdXNlRG91YmxlQnVmZmVyaW5nKSB7CiAgICAgICAgIG1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CkBAIC03Niw2ICs4MSw3IEBAIENhbnZhczJETGF5ZXJC
cmlkZ2U6OkNhbnZhczJETGF5ZXJCcmlkZ2UKIAogQ2FudmFzMkRMYXllckJyaWRnZTo6fkNhbnZh
czJETGF5ZXJCcmlkZ2UoKQogeworICAgIENhbnZhczJETGF5ZXJNYW5hZ2VyOjpnZXQoKS5sYXll
clRvQmVEZXN0cm95ZWQodGhpcyk7CiAgICAgaWYgKFNrRGVmZXJyZWRDYW52YXMqIGRlZmVycmVk
ID0gZGVmZXJyZWRDYW52YXMoKSkKICAgICAgICAgZGVmZXJyZWQtPnNldE5vdGlmaWNhdGlvbkNs
aWVudCgwKTsKICAgICBtX2xheWVyLT5zZXRUZXh0dXJlSWQoMCk7CkBAIC0xMDEsNiArMTA3LDMz
IEBAIHZvaWQgQ2FudmFzMkRMYXllckJyaWRnZTo6cHJlcGFyZUZvckRyYXcKICAgICBtX2NvbnRl
eHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwogfQogCit2b2lkIENhbnZhczJETGF5ZXJCcmlkZ2U6
OnN0b3JhZ2VBbGxvY2F0ZWRGb3JSZWNvcmRpbmdDaGFuZ2VkKHNpemVfdCBieXRlc0FsbG9jYXRl
ZCkKK3sKKyAgICBBU1NFUlQobV9kZWZlcnJhbE1vZGUgPT0gRGVmZXJyZWQpOworICAgIG1fbmV3
Qnl0ZXNBbGxvY2F0ZWQgPSBieXRlc0FsbG9jYXRlZDsKKyAgICBDYW52YXMyRExheWVyTWFuYWdl
cjo6Z2V0KCkubGF5ZXJBbGxvY2F0ZWRTdG9yYWdlQ2hhbmdlZCh0aGlzKTsKK30KKwordm9pZCBD
YW52YXMyRExheWVyQnJpZGdlOjpmbHVzaGVkRHJhd0NvbW1hbmRzKCkKK3sKKyAgICBBU1NFUlQo
bV9kZWZlcnJhbE1vZGUgPT0gRGVmZXJyZWQpOworICAgIENhbnZhczJETGF5ZXJNYW5hZ2VyOjpn
ZXQoKS5sYXllckRpZEZsdXNoKHRoaXMpOworfQorCitzaXplX3QgQ2FudmFzMkRMYXllckJyaWRn
ZTo6ZnJlZU1lbW9yeUlmUG9zc2libGUoc2l6ZV90IGJ5dGVzVG9GcmVlKQoreworICAgIEFTU0VS
VChkZWZlcnJlZENhbnZhcygpKTsKKyAgICBzaXplX3QgYnl0ZXNGcmVlZCA9IGRlZmVycmVkQ2Fu
dmFzKCktPmZyZWVNZW1vcnlJZlBvc3NpYmxlKGJ5dGVzVG9GcmVlKTsKKyAgICBtX25ld0J5dGVz
QWxsb2NhdGVkID0gZGVmZXJyZWRDYW52YXMoKS0+c3RvcmFnZUFsbG9jYXRlZEZvclJlY29yZGlu
ZygpOworICAgIHJldHVybiBieXRlc0ZyZWVkOworfQorCit2b2lkIENhbnZhczJETGF5ZXJCcmlk
Z2U6OmZsdXNoKCkKK3sKKyAgICBBU1NFUlQoZGVmZXJyZWRDYW52YXMoKSk7CisgICAgbV9jYW52
YXMtPmZsdXNoKCk7Cit9CisKIFNrQ2FudmFzKiBDYW52YXMyRExheWVyQnJpZGdlOjpza0NhbnZh
cyhTa0RldmljZSogZGV2aWNlKQogewogICAgIEFTU0VSVCghbV9jYW52YXMpOwpAQCAtMTU0LDYg
KzE4Nyw4IEBAIHZvaWQgQ2FudmFzMkRMYXllckJyaWRnZTo6Y29udGV4dEFjcXVpcmUKIHsKICAg
ICBpZiAobV9kZWZlcnJhbE1vZGUgPT0gTm9uRGVmZXJyZWQgJiYgIW1fdXNlRG91YmxlQnVmZmVy
aW5nKQogICAgICAgICBtX2xheWVyLT53aWxsTW9kaWZ5VGV4dHVyZSgpOworICAgIGVsc2UgaWYg
KG1fZGVmZXJyYWxNb2RlID09IERlZmVycmVkKQorICAgICAgICBDYW52YXMyRExheWVyTWFuYWdl
cjo6Z2V0KCkubGF5ZXJEaWREcmF3KHRoaXMpOwogfQogCiB1bnNpZ25lZCBDYW52YXMyRExheWVy
QnJpZGdlOjpiYWNrQnVmZmVyVGV4dHVyZSgpCkBAIC0xNjYsNCArMjAxLDMgQEAgdW5zaWduZWQg
Q2FudmFzMkRMYXllckJyaWRnZTo6YmFja0J1ZmZlcgogfQogCiB9Ci0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJCcmlkZ2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
YW52YXMyRExheWVyQnJpZGdlLmgJKHJldmlzaW9uIDEyNjQ1MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJCcmlkZ2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIlNrRGVmZXJyZWRDYW52YXMuaCIK
ICNpbmNsdWRlIDxwdWJsaWMvV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXIuaD4KICNpbmNsdWRlIDxw
dWJsaWMvV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJDbGllbnQuaD4KKyNpbmNsdWRlIDx3dGYvRG91
Ymx5TGlua2VkTGlzdC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgogCkBAIC00Myw3ICs0NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgTGF5ZXJDaHJvbWl1bTsKIAotY2xhc3MgQ2FudmFzMkRMYXllckJyaWRnZSA6IHB1Ymxp
YyBXZWJLaXQ6OldlYkV4dGVybmFsVGV4dHVyZUxheWVyQ2xpZW50LCBwdWJsaWMgU2tEZWZlcnJl
ZENhbnZhczo6Tm90aWZpY2F0aW9uQ2xpZW50IHsKK2NsYXNzIENhbnZhczJETGF5ZXJCcmlkZ2Ug
OiBwdWJsaWMgV2ViS2l0OjpXZWJFeHRlcm5hbFRleHR1cmVMYXllckNsaWVudCwgcHVibGljIFNr
RGVmZXJyZWRDYW52YXM6Ok5vdGlmaWNhdGlvbkNsaWVudCwgcHVibGljIERvdWJseUxpbmtlZExp
c3ROb2RlPENhbnZhczJETGF5ZXJCcmlkZ2U+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShD
YW52YXMyRExheWVyQnJpZGdlKTsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxDYW52
YXMyRExheWVyQnJpZGdlPiBjcmVhdGUoUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29u
dGV4dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgRGVmZXJyYWxNb2RlIGRlZmVycmFsTW9kZSwgdW5z
aWduZWQgdGV4dHVyZUlkKQpAQCAtNTgsNyArNTksMTUgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
V2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCgpIE9WRVJSSURFOwogCiAgICAg
Ly8gU2tEZWZlcnJlZENhbnZhczo6Tm90aWZpY2F0aW9uQ2xpZW50IGltcGxlbWVudGF0aW9uCi0g
ICAgdmlydHVhbCB2b2lkIHByZXBhcmVGb3JEcmF3KCk7CisgICAgdmlydHVhbCB2b2lkIHByZXBh
cmVGb3JEcmF3KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHN0b3JhZ2VBbGxvY2F0ZWRG
b3JSZWNvcmRpbmdDaGFuZ2VkKHNpemVfdCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGZs
dXNoZWREcmF3Q29tbWFuZHMoKSBPVkVSUklERTsKKworICAgIC8vIE1ldGhvZHMgdXNlZCBieSBD
YW52YXMyRExheWVyTWFuYWdlcgorICAgIHZpcnR1YWwgc2l6ZV90IGZyZWVNZW1vcnlJZlBvc3Np
YmxlKHNpemVfdCk7IC8vIHZpcnR1YWwgZm9yIG1vY2tpbmcKKyAgICB2aXJ0dWFsIHZvaWQgZmx1
c2goKTsgLy8gdmlydHVhbCBmb3IgbW9ja2luZworICAgIHNpemVfdCBieXRlc0FsbG9jYXRlZCgp
IHsgcmV0dXJuIG1fYnl0ZXNBbGxvY2F0ZWQ7IH0KKyAgICBzaXplX3QgdXBkYXRlQnl0ZXNBbGxv
Y2F0ZWQoKSB7IHJldHVybiBtX2J5dGVzQWxsb2NhdGVkID0gbV9uZXdCeXRlc0FsbG9jYXRlZDsg
fQogCiAgICAgU2tDYW52YXMqIHNrQ2FudmFzKFNrRGV2aWNlKik7CiAgICAgV2ViS2l0OjpXZWJM
YXllciogbGF5ZXIoKTsKQEAgLTY2LDcgKzc1LDcgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQg
YmFja0J1ZmZlclRleHR1cmUoKTsKIAotcHJpdmF0ZToKK3Byb3RlY3RlZDoKICAgICBDYW52YXMy
RExheWVyQnJpZGdlKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBjb25zdCBJbnRTaXpl
JiwgRGVmZXJyYWxNb2RlLCB1bnNpZ25lZCB0ZXh0dXJlSWQpOwogICAgIFNrRGVmZXJyZWRDYW52
YXMqIGRlZmVycmVkQ2FudmFzKCk7CiAKQEAgLTc4LDYgKzg3LDEyIEBAIHByaXZhdGU6CiAgICAg
U2tDYW52YXMqIG1fY2FudmFzOwogICAgIE93blB0cjxXZWJLaXQ6OldlYkV4dGVybmFsVGV4dHVy
ZUxheWVyPiBtX2xheWVyOwogICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0
OworICAgIHNpemVfdCBtX2J5dGVzQWxsb2NhdGVkOworICAgIHNpemVfdCBtX25ld0J5dGVzQWxs
b2NhdGVkOworCisgICAgZnJpZW5kIGNsYXNzIFdURjo6RG91Ymx5TGlua2VkTGlzdE5vZGU8Q2Fu
dmFzMkRMYXllckJyaWRnZT47CisgICAgQ2FudmFzMkRMYXllckJyaWRnZSogbV9uZXh0OworICAg
IENhbnZhczJETGF5ZXJCcmlkZ2UqIG1fcHJldjsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJNYW5hZ2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
YW52YXMyRExheWVyTWFuYWdlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyTWFuYWdlci5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0
OgorMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCitESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCitBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2luY2x1ZGUgIkNhbnZhczJETGF5ZXJNYW5hZ2VyLmgiCisKKyNpbmNsdWRlIDx3dGYvU3RkTGli
RXh0cmFzLmg+CisKK25hbWVzcGFjZSB7CitlbnVtIHsKKyAgICBEZWZhdWx0TWF4Qnl0ZXNBbGxv
Y2F0ZWQgPSA2NCoxMDI0KjEwMjQsCisgICAgRGVmYXVsdFRhcmdldEJ5dGVzQWxsb2NhdGVkID0g
MTYqMTAyNCoxMDI0LAorfTsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDYW52YXMyRExh
eWVyTWFuYWdlcjo6Q2FudmFzMkRMYXllck1hbmFnZXIoKQorICAgIDogbV9ieXRlc0FsbG9jYXRl
ZCgwKQorICAgICwgbV9tYXhCeXRlc0FsbG9jYXRlZChEZWZhdWx0TWF4Qnl0ZXNBbGxvY2F0ZWQp
CisgICAgLCBtX3RhcmdldEJ5dGVzQWxsb2NhdGVkKERlZmF1bHRUYXJnZXRCeXRlc0FsbG9jYXRl
ZCkKK3sKK30KKworQ2FudmFzMkRMYXllck1hbmFnZXI6On5DYW52YXMyRExheWVyTWFuYWdlcigp
Cit7CisgICAgQVNTRVJUKCFtX2J5dGVzQWxsb2NhdGVkKTsKKyAgICBBU1NFUlQoIW1fbGF5ZXJM
aXN0LmhlYWQoKSk7Cit9CisKK3ZvaWQgQ2FudmFzMkRMYXllck1hbmFnZXI6OmluaXQoc2l6ZV90
IG1heEJ5dGVzQWxsb2NhdGVkLCBzaXplX3QgdGFyZ2V0Qnl0ZXNBbGxvY2F0ZWQpCit7CisgICAg
QVNTRVJUKG1heEJ5dGVzQWxsb2NhdGVkID49IHRhcmdldEJ5dGVzQWxsb2NhdGVkKTsKKyAgICBt
X21heEJ5dGVzQWxsb2NhdGVkID0gbWF4Qnl0ZXNBbGxvY2F0ZWQ7CisgICAgbV90YXJnZXRCeXRl
c0FsbG9jYXRlZCA9IHRhcmdldEJ5dGVzQWxsb2NhdGVkOworfQorCitDYW52YXMyRExheWVyTWFu
YWdlciYgQ2FudmFzMkRMYXllck1hbmFnZXI6OmdldCgpCit7CisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChDYW52YXMyRExheWVyTWFuYWdlciwgbWFuYWdlciwgKCkpOworICAgIHJldHVybiBtYW5h
Z2VyOworfQorCit2b2lkIENhbnZhczJETGF5ZXJNYW5hZ2VyOjpsYXllckRpZERyYXcoQ2FudmFz
MkRMYXllckJyaWRnZSogbGF5ZXIpCit7CisgICAgaWYgKGlzSW5MaXN0KGxheWVyKSkgeworICAg
ICAgICBpZiAobGF5ZXIgIT0gbV9sYXllckxpc3QuaGVhZCgpKSB7CisgICAgICAgICAgICBtX2xh
eWVyTGlzdC5yZW1vdmUobGF5ZXIpOworICAgICAgICAgICAgbV9sYXllckxpc3QucHVzaChsYXll
cik7IC8vIFNldCBhcyBNUlUKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBhZGRMYXll
clRvTGlzdChsYXllcik7IAorfQorCit2b2lkIENhbnZhczJETGF5ZXJNYW5hZ2VyOjphZGRMYXll
clRvTGlzdChDYW52YXMyRExheWVyQnJpZGdlKiBsYXllcikKK3sKKyAgICBBU1NFUlQoIWlzSW5M
aXN0KGxheWVyKSk7CisgICAgbV9ieXRlc0FsbG9jYXRlZCArPSBsYXllci0+dXBkYXRlQnl0ZXNB
bGxvY2F0ZWQoKTsKKyAgICBtX2xheWVyTGlzdC5wdXNoKGxheWVyKTsgLy8gU2V0IGFzIE1SVQor
fQorCit2b2lkIENhbnZhczJETGF5ZXJNYW5hZ2VyOjpsYXllckFsbG9jYXRlZFN0b3JhZ2VDaGFu
Z2VkKENhbnZhczJETGF5ZXJCcmlkZ2UqIGxheWVyKQoreworICAgIGlmICghaXNJbkxpc3QobGF5
ZXIpKQorICAgICAgICBhZGRMYXllclRvTGlzdChsYXllcik7IAorICAgIHVwZGF0ZUJ5dGVzQWxs
b2NhdGVkKGxheWVyKTsKKyAgICBmcmVlTWVtb3J5SWZOZWNlc3NhcnkoKTsKK30KKwordm9pZCBD
YW52YXMyRExheWVyTWFuYWdlcjo6bGF5ZXJEaWRGbHVzaChDYW52YXMyRExheWVyQnJpZGdlKiBs
YXllcikKK3sKKyAgICB1cGRhdGVCeXRlc0FsbG9jYXRlZChsYXllcik7Cit9CisKK3ZvaWQgQ2Fu
dmFzMkRMYXllck1hbmFnZXI6OmxheWVyVG9CZURlc3Ryb3llZChDYW52YXMyRExheWVyQnJpZGdl
KiBsYXllcikKK3sKKyAgICBpZiAoaXNJbkxpc3QobGF5ZXIpKQorICAgICAgICByZW1vdmVMYXll
ckZyb21MaXN0KGxheWVyKTsKK30KKwordm9pZCBDYW52YXMyRExheWVyTWFuYWdlcjo6ZnJlZU1l
bW9yeUlmTmVjZXNzYXJ5KCkgCit7CisgICAgaWYgKG1fYnl0ZXNBbGxvY2F0ZWQgPiBtX21heEJ5
dGVzQWxsb2NhdGVkKSB7CisgICAgICAgIC8vIFBhc3MgMTogRnJlZSBtZW1vcnkgZnJvbSBjYWNo
ZXMKKyAgICAgICAgQ2FudmFzMkRMYXllckJyaWRnZSogbGF5ZXIgPSBtX2xheWVyTGlzdC50YWls
KCk7IC8vIExSVQorICAgICAgICB3aGlsZSAobV9ieXRlc0FsbG9jYXRlZCA+IG1fdGFyZ2V0Qnl0
ZXNBbGxvY2F0ZWQgJiYgbGF5ZXIpIHsKKyAgICAgICAgICAgIGlmIChsYXllci0+ZnJlZU1lbW9y
eUlmUG9zc2libGUobV9ieXRlc0FsbG9jYXRlZCAtIG1fdGFyZ2V0Qnl0ZXNBbGxvY2F0ZWQpKQor
ICAgICAgICAgICAgICAgIHVwZGF0ZUJ5dGVzQWxsb2NhdGVkKGxheWVyKTsKKyAgICAgICAgICAg
IGxheWVyID0gbGF5ZXItPnByZXYoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFBhc3MgMjog
Rmx1c2ggY2FudmFzZXMKKyAgICAgICAgQ2FudmFzMkRMYXllckJyaWRnZSogbGVhc3RSZWNlbnRs
eVVzZWRMYXllciA9IG1fbGF5ZXJMaXN0LnRhaWwoKTsKKyAgICAgICAgd2hpbGUgKG1fYnl0ZXNB
bGxvY2F0ZWQgPiBtX3RhcmdldEJ5dGVzQWxsb2NhdGVkICYmIGxlYXN0UmVjZW50bHlVc2VkTGF5
ZXIpIHsKKyAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2VkTGF5ZXItPmZsdXNoKCk7CisgICAg
ICAgICAgICBsZWFzdFJlY2VudGx5VXNlZExheWVyLT5mcmVlTWVtb3J5SWZQb3NzaWJsZSh+MCk7
CisgICAgICAgICAgICByZW1vdmVMYXllckZyb21MaXN0KGxlYXN0UmVjZW50bHlVc2VkTGF5ZXIp
OworICAgICAgICAgICAgbGVhc3RSZWNlbnRseVVzZWRMYXllciA9IG1fbGF5ZXJMaXN0LnRhaWwo
KTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBDYW52YXMyRExheWVyTWFuYWdlcjo6cmVt
b3ZlTGF5ZXJGcm9tTGlzdChDYW52YXMyRExheWVyQnJpZGdlKiBsYXllcikKK3sKKyAgICBBU1NF
UlQoaXNJbkxpc3QobGF5ZXIpKTsKKyAgICBtX2J5dGVzQWxsb2NhdGVkIC09IGxheWVyLT5ieXRl
c0FsbG9jYXRlZCgpOworICAgIG1fbGF5ZXJMaXN0LnJlbW92ZShsYXllcik7CisgICAgbGF5ZXIt
PnNldE5leHQoMCk7CisgICAgbGF5ZXItPnNldFByZXYoMCk7Cit9CisKK2Jvb2wgQ2FudmFzMkRM
YXllck1hbmFnZXI6OmlzSW5MaXN0KENhbnZhczJETGF5ZXJCcmlkZ2UqIGxheWVyKQoreworICAg
IHJldHVybiBsYXllci0+cHJldigpIHx8IG1fbGF5ZXJMaXN0LmhlYWQoKSA9PSBsYXllcjsKK30K
Kwordm9pZCBDYW52YXMyRExheWVyTWFuYWdlcjo6dXBkYXRlQnl0ZXNBbGxvY2F0ZWQoQ2FudmFz
MkRMYXllckJyaWRnZSogbGF5ZXIpCit7CisgICAgaWYgKCFpc0luTGlzdChsYXllcikpCisgICAg
ICAgIGFkZExheWVyVG9MaXN0KGxheWVyKTsKKyAgICBlbHNlIHsKKyAgICAgICAgc2l6ZV90IG9s
ZExheWVyQnl0ZXNBbGxvY2F0ZWQgPSBsYXllci0+Ynl0ZXNBbGxvY2F0ZWQoKTsKKyAgICAgICAg
c2l6ZV90IG5ld0xheWVyQnl0ZXNBbGxvY2F0ZWQgPSBsYXllci0+dXBkYXRlQnl0ZXNBbGxvY2F0
ZWQoKTsKKyAgICAgICAgbV9ieXRlc0FsbG9jYXRlZCA9IG1fYnl0ZXNBbGxvY2F0ZWQgKyBuZXdM
YXllckJ5dGVzQWxsb2NhdGVkIC0gb2xkTGF5ZXJCeXRlc0FsbG9jYXRlZDsKKyAgICB9Cit9CisK
K30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZh
czJETGF5ZXJNYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllck1hbmFnZXIuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJN
YW5hZ2VyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjQgQEAKKy8qCitDb3B5cmlnaHQgKEMp
IDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKK2FyZSBtZXQ6CisxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAKK1RISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQor
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCitE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCitBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2lm
bmRlZiBDYW52YXMyRExheWVyTWFuYWdlcl9oCisjZGVmaW5lIENhbnZhczJETGF5ZXJNYW5hZ2Vy
X2gKKworI2luY2x1ZGUgIkNhbnZhczJETGF5ZXJCcmlkZ2UuaCIKKworY2xhc3MgQ2FudmFzMkRM
YXllck1hbmFnZXJUZXN0OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENhbnZhczJE
TGF5ZXJNYW5hZ2VyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgQ2FudmFzMkRMYXllck1hbmFnZXIm
IGdldCgpOworICAgIHZvaWQgaW5pdChzaXplX3QgbWF4Qnl0ZXNBbGxvY2F0ZWQsIHNpemVfdCB0
YXJnZXRCeXRlc0FsbG9jYXRlZCk7CisgICAgdmlydHVhbCB+Q2FudmFzMkRMYXllck1hbmFnZXIo
KTsKKworICAgIHZvaWQgbGF5ZXJBbGxvY2F0ZWRTdG9yYWdlQ2hhbmdlZChDYW52YXMyRExheWVy
QnJpZGdlKik7CisgICAgdm9pZCBsYXllckRpZEZsdXNoKENhbnZhczJETGF5ZXJCcmlkZ2UqKTsK
KyAgICB2b2lkIGxheWVyRGlkRHJhdyhDYW52YXMyRExheWVyQnJpZGdlKik7CisgICAgdm9pZCBs
YXllclRvQmVEZXN0cm95ZWQoQ2FudmFzMkRMYXllckJyaWRnZSopOworcHJpdmF0ZToKKyAgICBD
YW52YXMyRExheWVyTWFuYWdlcigpOworCisgICAgLy8gaW50ZXJuYWwgbWV0aG9kcworICAgIHZv
aWQgZnJlZU1lbW9yeUlmTmVjZXNzYXJ5KCk7CisgICAgdm9pZCB1cGRhdGVCeXRlc0FsbG9jYXRl
ZChDYW52YXMyRExheWVyQnJpZGdlKik7CisgICAgYm9vbCBpc0luTGlzdChDYW52YXMyRExheWVy
QnJpZGdlKik7CisgICAgdm9pZCBhZGRMYXllclRvTGlzdChDYW52YXMyRExheWVyQnJpZGdlKik7
CisgICAgdm9pZCByZW1vdmVMYXllckZyb21MaXN0KENhbnZhczJETGF5ZXJCcmlkZ2UqKTsKKwor
ICAgIHNpemVfdCBtX2J5dGVzQWxsb2NhdGVkOworICAgIHNpemVfdCBtX21heEJ5dGVzQWxsb2Nh
dGVkOworICAgIHNpemVfdCBtX3RhcmdldEJ5dGVzQWxsb2NhdGVkOworICAgIERvdWJseUxpbmtl
ZExpc3Q8Q2FudmFzMkRMYXllckJyaWRnZT4gbV9sYXllckxpc3Q7CisKKyAgICBmcmllbmQgY2xh
c3MgOjpDYW52YXMyRExheWVyTWFuYWdlclRlc3Q7IC8vIGZvciB1bml0IHRlc3RpbmcKK307CisK
K30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gMTI2
NDU4KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwyMiBAQAorMjAxMi0wOC0yMyAgSnVzdGluIE5vdm9zYWQgIDxqdW5vdkBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBJbXBsZW1lbnRpbmcgYSBnbG9iYWwgbGlt
aXQgb24gbWVtb3J5IGNvbnN1bWVkIGJ5IGRlZmVycmVkIDJEIGNhbnZhc2VzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDM4NgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGluZyB1bml0IHRlc3RzIGZv
ciBXZWJDb3JlOjpDYW52YXMyRExheWVyTWFuYWdlcgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6
CisgICAgICAgICogdGVzdHMvQ2FudmFzMkRMYXllck1hbmFnZXJUZXN0LmNwcDogQWRkZWQuCisg
ICAgICAgIChGYWtlQ2FudmFzMkRMYXllckJyaWRnZSk6CisgICAgICAgIChGYWtlQ2FudmFzMkRM
YXllckJyaWRnZTo6RmFrZUNhbnZhczJETGF5ZXJCcmlkZ2UpOgorICAgICAgICAoRmFrZUNhbnZh
czJETGF5ZXJCcmlkZ2U6OmZha2VGcmVlYWJsZUJ5dGVzKToKKyAgICAgICAgKENhbnZhczJETGF5
ZXJNYW5hZ2VyVGVzdCk6CisgICAgICAgIChDYW52YXMyRExheWVyTWFuYWdlclRlc3Q6OnN0b3Jh
Z2VBbGxvY2F0aW9uVHJhY2tpbmdUZXN0KToKKyAgICAgICAgKENhbnZhczJETGF5ZXJNYW5hZ2Vy
VGVzdDo6ZXZpY3Rpb25UZXN0KToKKyAgICAgICAgKENhbnZhczJETGF5ZXJNYW5hZ2VyVGVzdDo6
Zmx1c2hFdmljdGlvblRlc3QpOgorCiAyMDEyLTA4LTIzICBLZW5uZXRoIFJ1c3NlbGwgIDxrYnJA
Z29vZ2xlLmNvbT4KIAogICAgICAgICBDb252ZXJ0IFNjcm9sbGFibGVBcmVhIEFTU0VSVF9OT1Rf
UkVBQ0hFRCB2aXJ0dWFscyBpbnRvIHB1cmUgdmlydHVhbHMKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwaQkocmV2aXNpb24gMTI2NDUxKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsNyBAQAogICAgICAgICAg
ICAgJ3Rlc3RzL0FyZW5hVGVzdEhlbHBlcnMuaCcsCiAgICAgICAgICAgICAndGVzdHMvQXNzb2Np
YXRlZFVSTExvYWRlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DYW52YXMyRExheWVy
QnJpZGdlVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0NhbnZhczJETGF5ZXJNYW5hZ2Vy
VGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDQWN0aXZlQW5pbWF0aW9uVGVzdC5jcHAn
LAogICAgICAgICAgICAgJ3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5jcHAnLAogICAgICAg
ICAgICAgJ3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5oJywKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ2FudmFzMkRMYXllck1hbmFnZXJUZXN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJETGF5ZXJNYW5hZ2VyVGVz
dC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZh
czJETGF5ZXJNYW5hZ2VyVGVzdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTU0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisg
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJDYW52YXMyRExh
eWVyTWFuYWdlci5oIgorCisjaW5jbHVkZSAiRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNELmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCisjaW5jbHVkZSA8Z21vY2svZ21v
Y2suaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKK3VzaW5nIHRlc3Rpbmc6OkluU2VxdWVuY2U7Cit1c2luZyB0ZXN0aW5nOjpSZXR1cm47Cit1
c2luZyB0ZXN0aW5nOjpUZXN0OworCisKK2NsYXNzIEZha2VDYW52YXMyRExheWVyQnJpZGdlIDog
cHVibGljIENhbnZhczJETGF5ZXJCcmlkZ2UgeworcHVibGljOgorICAgIEZha2VDYW52YXMyRExh
eWVyQnJpZGdlKCkgCisgICAgICAgIDogQ2FudmFzMkRMYXllckJyaWRnZShHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0KGFkb3B0UHRy
KG5ldyBXZWJLaXQ6OkZha2VXZWJHcmFwaGljc0NvbnRleHQzRCkpLCBJbnRTaXplKDEsIDEpLCBE
ZWZlcnJlZCwgMCkKKyAgICAgICAgLCBtX2ZyZWVhYmxlQnl0ZXMoMCkKKyAgICAgICAgLCBtX2Zy
ZWVNZW1vcnlJZlBvc3NpYmxlQ291bnQoMCkKKyAgICAgICAgLCBtX2ZsdXNoQ291bnQoMCkKKyAg
ICB7CisgICAgfQorCisgICAgdm9pZCBmYWtlRnJlZWFibGVCeXRlcyhzaXplX3Qgc2l6ZSkKKyAg
ICB7CisgICAgICAgIG1fZnJlZWFibGVCeXRlcyA9IHNpemU7CisgICAgfQorCisgICAgdmlydHVh
bCBzaXplX3QgZnJlZU1lbW9yeUlmUG9zc2libGUoc2l6ZV90IHNpemUpIE9WRVJSSURFCisgICAg
eworICAgICAgICBtX2ZyZWVNZW1vcnlJZlBvc3NpYmxlQ291bnQrKzsKKyAgICAgICAgc2l6ZV90
IGJ5dGVzRnJlZWQgPSBzaXplIDwgbV9mcmVlYWJsZUJ5dGVzID8gc2l6ZSA6IG1fZnJlZWFibGVC
eXRlczsKKyAgICAgICAgbV9mcmVlYWJsZUJ5dGVzIC09IGJ5dGVzRnJlZWQ7CisgICAgICAgIG1f
bmV3Qnl0ZXNBbGxvY2F0ZWQgLT0gYnl0ZXNGcmVlZDsKKyAgICAgICAgcmV0dXJuIGJ5dGVzRnJl
ZWQ7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGZsdXNoKCkgT1ZFUlJJREUKKyAgICB7Cisg
ICAgICAgIG1fZmx1c2hDb3VudCsrOworICAgIH0KKworcHVibGljOgorICAgIHNpemVfdCBtX2Zy
ZWVhYmxlQnl0ZXM7CisgICAgaW50IG1fZnJlZU1lbW9yeUlmUG9zc2libGVDb3VudDsKKyAgICBp
bnQgbV9mbHVzaENvdW50OworfTsKKworY2xhc3MgQ2FudmFzMkRMYXllck1hbmFnZXJUZXN0IDog
cHVibGljIFRlc3QgeworcHJvdGVjdGVkOgorICAgIHZvaWQgc3RvcmFnZUFsbG9jYXRpb25UcmFj
a2luZ1Rlc3QoKQorICAgIHsKKyAgICAgICAgQ2FudmFzMkRMYXllck1hbmFnZXImIG1hbmFnZXIg
PSBDYW52YXMyRExheWVyTWFuYWdlcjo6Z2V0KCk7CisgICAgICAgIG1hbmFnZXIuaW5pdCgxMCwg
MTApOworICAgICAgICB7CisgICAgICAgICAgICBGYWtlQ2FudmFzMkRMYXllckJyaWRnZSBsYXll
cjE7CisgICAgICAgICAgICBFWFBFQ1RfRVEoKHNpemVfdCkwLCBtYW5hZ2VyLm1fYnl0ZXNBbGxv
Y2F0ZWQpOworICAgICAgICAgICAgbGF5ZXIxLnN0b3JhZ2VBbGxvY2F0ZWRGb3JSZWNvcmRpbmdD
aGFuZ2VkKDEpOworICAgICAgICAgICAgRVhQRUNUX0VRKChzaXplX3QpMSwgbWFuYWdlci5tX2J5
dGVzQWxsb2NhdGVkKTsKKyAgICAgICAgICAgIC8vIFRlc3QgYWxsb2NhdGlvbiBpbmNyZWFzZQor
ICAgICAgICAgICAgbGF5ZXIxLnN0b3JhZ2VBbGxvY2F0ZWRGb3JSZWNvcmRpbmdDaGFuZ2VkKDIp
OworICAgICAgICAgICAgRVhQRUNUX0VRKChzaXplX3QpMiwgbWFuYWdlci5tX2J5dGVzQWxsb2Nh
dGVkKTsKKyAgICAgICAgICAgIC8vIFRlc3QgYWxsb2NhdGlvbiBkZWNyZWFzZQorICAgICAgICAg
ICAgbGF5ZXIxLnN0b3JhZ2VBbGxvY2F0ZWRGb3JSZWNvcmRpbmdDaGFuZ2VkKDEpOworICAgICAg
ICAgICAgRVhQRUNUX0VRKChzaXplX3QpMSwgbWFuYWdlci5tX2J5dGVzQWxsb2NhdGVkKTsKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGYWtlQ2FudmFzMkRMYXllckJyaWRnZSBsYXll
cjI7CisgICAgICAgICAgICAgICAgRVhQRUNUX0VRKChzaXplX3QpMSwgbWFuYWdlci5tX2J5dGVz
QWxsb2NhdGVkKTsKKyAgICAgICAgICAgICAgICAvLyB2ZXJpZnkgbXVsdGktbGF5ZXIgYWxsb2Nh
dGlvbiB0cmFja2luZworICAgICAgICAgICAgICAgIGxheWVyMi5zdG9yYWdlQWxsb2NhdGVkRm9y
UmVjb3JkaW5nQ2hhbmdlZCgyKTsKKyAgICAgICAgICAgICAgICBFWFBFQ1RfRVEoKHNpemVfdCkz
LCBtYW5hZ2VyLm1fYnl0ZXNBbGxvY2F0ZWQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Ly8gVmVyaWZ5IHRyYWNraW5nIGFmdGVyIGRlc3RydWN0aW9uCisgICAgICAgICAgICBFWFBFQ1Rf
RVEoKHNpemVfdCkxLCBtYW5hZ2VyLm1fYnl0ZXNBbGxvY2F0ZWQpOworICAgICAgICB9CisgICAg
fQorCisgICAgdm9pZCBldmljdGlvblRlc3QoKQorICAgIHsKKyAgICAgICAgQ2FudmFzMkRMYXll
ck1hbmFnZXImIG1hbmFnZXIgPSBDYW52YXMyRExheWVyTWFuYWdlcjo6Z2V0KCk7CisgICAgICAg
IG1hbmFnZXIuaW5pdCgxMCwgNSk7CisgICAgICAgIEZha2VDYW52YXMyRExheWVyQnJpZGdlIGxh
eWVyOworICAgICAgICBsYXllci5mYWtlRnJlZWFibGVCeXRlcygxMCk7CisgICAgICAgIGxheWVy
LnN0b3JhZ2VBbGxvY2F0ZWRGb3JSZWNvcmRpbmdDaGFuZ2VkKDgpOyAvLyB1bmRlciB0aGUgbWF4
CisgICAgICAgIEVYUEVDVF9FUSgwLCBsYXllci5tX2ZyZWVNZW1vcnlJZlBvc3NpYmxlQ291bnQp
OworICAgICAgICBsYXllci5zdG9yYWdlQWxsb2NhdGVkRm9yUmVjb3JkaW5nQ2hhbmdlZCgxMik7
IC8vIG92ZXIgdGhlIG1heAorICAgICAgICBFWFBFQ1RfRVEoMSwgbGF5ZXIubV9mcmVlTWVtb3J5
SWZQb3NzaWJsZUNvdW50KTsKKyAgICAgICAgRVhQRUNUX0VRKChzaXplX3QpMywgbGF5ZXIubV9m
cmVlYWJsZUJ5dGVzKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIGxheWVyLm1fZmx1c2hDb3VudCk7
IC8vIGV2aWN0aW9uIHN1Y2NlZWRlZCB3aXRob3V0IHRyaWdnZXJpbmcgYSBmbHVzaAorICAgICAg
ICBFWFBFQ1RfRVEoKHNpemVfdCk1LCBsYXllci5ieXRlc0FsbG9jYXRlZCgpKTsKKyAgICB9CisK
KyAgICB2b2lkIGZsdXNoRXZpY3Rpb25UZXN0KCkKKyAgICB7CisgICAgICAgIENhbnZhczJETGF5
ZXJNYW5hZ2VyJiBtYW5hZ2VyID0gQ2FudmFzMkRMYXllck1hbmFnZXI6OmdldCgpOworICAgICAg
ICBtYW5hZ2VyLmluaXQoMTAsIDUpOworICAgICAgICBGYWtlQ2FudmFzMkRMYXllckJyaWRnZSBs
YXllcjsKKyAgICAgICAgbGF5ZXIuZmFrZUZyZWVhYmxlQnl0ZXMoMSk7IC8vIE5vdCBlbm91Z2gg
ZnJlZWFibGUgYnl0ZXMsIHdpbGwgY2F1c2UgYWdncmVzc2l2ZSBldmljdGlvbiBieSBmbHVzaGlu
ZworICAgICAgICBsYXllci5zdG9yYWdlQWxsb2NhdGVkRm9yUmVjb3JkaW5nQ2hhbmdlZCg4KTsg
Ly8gdW5kZXIgdGhlIG1heAorICAgICAgICBFWFBFQ1RfRVEoMCwgbGF5ZXIubV9mcmVlTWVtb3J5
SWZQb3NzaWJsZUNvdW50KTsKKyAgICAgICAgbGF5ZXIuc3RvcmFnZUFsbG9jYXRlZEZvclJlY29y
ZGluZ0NoYW5nZWQoMTIpOyAvLyBvdmVyIHRoZSBtYXgKKyAgICAgICAgRVhQRUNUX0VRKDIsIGxh
eWVyLm1fZnJlZU1lbW9yeUlmUG9zc2libGVDb3VudCk7IC8vIFR3byB0cmllcywgb25lIGJlZm9y
ZSBmbHVzaCwgb25lIGFmdGVyIGZsdXNoCisgICAgICAgIEVYUEVDVF9FUSgoc2l6ZV90KTAsIGxh
eWVyLm1fZnJlZWFibGVCeXRlcyk7CisgICAgICAgIEVYUEVDVF9FUSgxLCBsYXllci5tX2ZsdXNo
Q291bnQpOyAvLyBmbHVzaCB3YXMgYXR0ZW1wdGVkCisgICAgICAgIEVYUEVDVF9FUSgoc2l6ZV90
KTExLCBsYXllci5ieXRlc0FsbG9jYXRlZCgpKTsgLy8gZmx1c2ggZHJvcHMgdGhlIGxheWVyIGZy
b20gbWFuYWdlcidzIHRyYWNraW5nIGxpc3QKKyAgICAgICAgRVhQRUNUX0ZBTFNFKG1hbmFnZXIu
aXNJbkxpc3QoJmxheWVyKSk7CisgICAgfQorfTsKKworbmFtZXNwYWNlIHsKKworVEVTVF9GKENh
bnZhczJETGF5ZXJNYW5hZ2VyVGVzdCwgdGVzdFN0b3JhZ2VBbGxvY2F0aW9uVHJhY2tpbmcpCit7
CisgICAgc3RvcmFnZUFsbG9jYXRpb25UcmFja2luZ1Rlc3QoKTsKK30KKworVEVTVF9GKENhbnZh
czJETGF5ZXJNYW5hZ2VyVGVzdCwgdGVzdEV2aWN0aW9uKQoreworICAgIGV2aWN0aW9uVGVzdCgp
OworfQorCitURVNUX0YoQ2FudmFzMkRMYXllck1hbmFnZXJUZXN0LCB0ZXN0Rmx1c2hFdmljdGlv
bikKK3sKKyAgICBmbHVzaEV2aWN0aW9uVGVzdCgpOworfQorCit9IC8vIG5hbWVzcGFjZQorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160470</attachid>
            <date>2012-08-24 12:04:51 -0700</date>
            <delta_ts>2012-08-24 12:46:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94386-20120824150447.patch</filename>
            <type>text/plain</type>
            <size>25734</size>
            <attacher name="Justin Novosad">junov</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyNjQ1OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgyIEBACisyMDEyLTA4LTIzICBKdXN0aW4g
Tm92b3NhZCAgPGp1bm92QGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIEltcGxl
bWVudGluZyBhIGdsb2JhbCBsaW1pdCBvbiBtZW1vcnkgY29uc3VtZWQgYnkgZGVmZXJyZWQgMkQg
Y2FudmFzZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTk0Mzg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QmVmb3JlIHRoaXMgY2hhbmdlLCB0aGVyZSB3YXMgbm8gZ2xvYmFsIGJvdW5kIG9uIG1lbW9yeSB0
aGF0IGNvdWxkIGJlCisgICAgICAgIGNvbnN1bWVkIGZvciB0aGUgcHVycG9zZSBvZiByZWNvcmRp
bmcgMmQgY2FudmFzIGRlZmVycmVkIGRyYXcgY29tbWFuZHMuCisgICAgICAgIFRoZXJlIHdhcyBv
bmx5IGEgcGVyIGNhbnZhcyBsaW1pdC4gSXQgaXMgcG9zc2libGUgZm9yIGNhbnZhc2VzIHRvIGdl
dAorICAgICAgICBkZXJlZmVyZW5jZWQgd2l0aG91dCBmbHVzaGluZyBwZW5kaW5nIGRyYXcgY29t
bWFuZHMsIHdoaWNoIG1heSBsb2NrCisgICAgICAgIHJlc291cmNlcyB1bnRpbCB0aGUgY2FudmFz
IGVsZW1lbnQgaXMgZ2FyYmFnZSBjb2xsZWN0ZWQuIFRoaXMgbWFrZXMKKyAgICAgICAgaXQgcG9z
c2libGUgdG8gZ3JvdyBtZW1vcnkgY29uc3VtcHRpb24gaW5kZWZpbml0ZWx5IGJ5IGhpdHRpbmcg
cmVsb2FkCisgICAgICAgIHN1Y2Nlc3NpdmVseSBvbiBzb21lIGNhbnZhcy1pbnRlbnNpdmUgd2Vi
IHBhZ2VzLgorCisgICAgICAgIFRoZSBzb2x1dGlvbiBpbXBsZW1lbnRlZCBpbiB0aGlzIGNoYW5n
ZSBjb25zaXN0cyBpbiBtYWludGFpbmluZyBhCisgICAgICAgIGdsb2JhbCByZWdpc3RyeSBvZiBk
ZWZlcnJlZCBjYW52YXMgbGF5ZXJzIGFuZCB0cmFja2luZyB0aGUgc3VtIG9mCisgICAgICAgIG1l
bW9yeSBhbGxvY2F0ZWQgYnkgYWxsIGNhbnZhc2VzIGZvciB0aGUgcHVycG9zZSBvZiBzdG9yaW5n
IGRlZmVycmVkCisgICAgICAgIGRyYXcgY29tbWFuZHMuIFdoZW4gbWVtb3J5IGNvbnN1bXB0aW9u
IHJlYWNoZXMgdGhlIGFsbG93ZWQgbGltaXQsCisgICAgICAgIGNhY2hlcyBhcmUgY2xlYXJlZCBh
bmQgZHJhdyBvcGVyYXRpb25zIGFyZSBmbHVzaGVkIG9uIG9uZSBvciBzZXZlcmFsCisgICAgICAg
IGNhbnZhc2VzLCBzdGFydGluZyB3aXRoIHRoZSBsZWFzdCByZWNlbnRseSB1c2VkLCB1bnRpbCBt
ZW1vcnkKKyAgICAgICAgY29uc3VtcHRpb24gaXMgYmVsb3cgYSB0YXJnZXQgbGV2ZWwuCisKKyAg
ICAgICAgTmV3IHRlc3RzOiB3ZWJraXRfdW5pdF90ZXN0cyBEZWZlcnJlZExheWVyTWFuYWdlclRl
c3QqCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckJyaWRnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
YW52YXMyRExheWVyQnJpZGdlOjpDYW52YXMyRExheWVyQnJpZGdlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNhbnZhczJETGF5ZXJCcmlkZ2U6On5DYW52YXMyRExheWVyQnJpZGdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNhbnZhczJETGF5ZXJCcmlkZ2U6OnN0b3JhZ2VBbGxvY2F0ZWRGb3JSZWNvcmRp
bmdDaGFuZ2VkKToKKyAgICAgICAgT3ZlcmxvYWRlZCBmcm9tIFNrRGVmZXJyZWRDYW52YXM6Ok5v
dGlmaWNhdGlvbkNsaWVudC4gQ2FsbGVkIHdoZW4KKyAgICAgICAgdGhlcmUgaXMgYSBjaGFuZ2Ug
aW4gdGhlIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQgYnkgdGhlIGRlZmVycmVkCisgICAgICAg
IGNhbnZhcy4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRM
YXllckJyaWRnZTo6Zmx1c2hlZERyYXdDb21tYW5kcyk6CisgICAgICAgIE92ZXJsb2FkZWQgZnJv
bSBTa0RlZmVycmVkQ2FudmFzOjpOb3RpZmljYXRpb25DbGllbnQuIENhbGxlZCB3aGVuCisgICAg
ICAgIHBlbmRpbmcgZHJhdyBjb21tYW5kcyBhcmUgZmx1c2ggYnkgdGhlIGRlZmVycmVkIGNhbnZh
cy4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJCcmlkZ2U6OmZyZWVNZW1vcnlJZlBv
c3NpYmxlKToKKyAgICAgICAgQ2FsbGVkIGJ5IHRoZSBDYW52YXMyRExheWVyTWFuYWdlciB0byBy
ZXF1ZXN0IHRoZSByZWxlYXNlIG9mIHVubG9ja2VkCisgICAgICAgIG1lbW9yeSByZXNvdXJjZXMg
KGNhY2hlcykuIFJlcXVlc3QgaXMgcmVsYXllZCB0byBTa0RlZmVycmVkQ2FudmFzLgorICAgICAg
ICByZXR1cm5zIG51bWJlciBvZiBieXRlcyBmcmVlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
czJETGF5ZXJCcmlkZ2U6OmZsdXNoKToKKyAgICAgICAgUmVxdWVzdHMgdGhhdCBwZW5kaW5nIGRy
YXcgY29tbWFuZHMgYmUgZmx1c2hlZCBpbW1lZGlhdGVseSBmcm9tIHRoZQorICAgICAgICBkZWZl
cnJlZCBjYW52YXMgcXVldWUuIFJlcXVlc3QgaXMgcmVsYXllZCB0byBTa0RlZmVycmVkQ2FudmFz
LgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckJyaWRnZTo6Y29udGV4dEFjcXVpcmVk
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQnJp
ZGdlLmg6CisgICAgICAgIChDYW52YXMyRExheWVyQnJpZGdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhczJETGF5ZXJCcmlkZ2U6OmJ5dGVzQWxsb2NhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhczJETGF5ZXJCcmlkZ2U6OnVwZGF0ZUJ5dGVzQWxsb2NhdGVkKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyTWFuYWdlci5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyTWFu
YWdlcjo6Q2FudmFzMkRMYXllck1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRM
YXllck1hbmFnZXI6On5DYW52YXMyRExheWVyTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpD
YW52YXMyRExheWVyTWFuYWdlcjo6aW5pdCk6CisgICAgICAgIFNldHMgdGhlIGdsb2JhbCBsaW1p
dCBmb3IgdGhlIG1heGltdW0gdG90YWwgbnVtYmVyIG9mIGJ5dGVzIGFsbG9jYXRlZAorICAgICAg
ICBieSBkZWZlcnJlZCBsYXllcnMuCisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyTWFu
YWdlcjo6Z2V0KToKKyAgICAgICAgU2luZ2xldG9uIGFjY2Vzc29yCisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXMyRExheWVyTWFuYWdlcjo6bGF5ZXJEaWREcmF3KToKKyAgICAgICAgQ2FsbGVkIGJ5
IENhbnZhczJETGF5ZXJCcmlkZ2UgdG8gaW5kaWNhdGUgdGhhdCB0aGUgbGF5ZXIgd2FzIGRyYXdu
IHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllck1hbmFnZXI6OmFkZExheWVyVG9M
aXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJNYW5hZ2VyOjpsYXllckFsbG9j
YXRlZFN0b3JhZ2VDaGFuZ2VkKToKKyAgICAgICAgQ2FsbGVkIGJ5IENhbnZhczJETGF5ZXJCcmlk
Z2UgdG8gaW5kaWNhdGUgdGhldCB0aGUgbWVtb3J5IGNvbnN1bWVkIGJ5CisgICAgICAgIHRoZSBs
YXllciBoYXMgY2hhbmdlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJNYW5hZ2Vy
OjpsYXllckRpZEZsdXNoKToKKyAgICAgICAgQ2FsbGVkIGJ5IENhbnZhczJETGF5ZXJCcmlkZ2Ug
dG8gaW5kaWNhdGVkIHRoYXQgdGhlIHBlbmRpbmcgZHJhdworICAgICAgICBjb21tYW5kcyBvZiB0
aGUgbGF5ZXIgd2VyZSBmbHVzaGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllck1h
bmFnZXI6OmxheWVyVG9CZURlc3Ryb3llZCk6CisgICAgICAgIENhbGxlZCBieSBDYW52YXMyRExh
eWVyQnJpZGdlIHVwb24gZGVzdHJ1Y3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExh
eWVyTWFuYWdlcjo6ZnJlZU1lbW9yeUlmTmVjZXNzYXJ5KToKKyAgICAgICAgQ2FsbGVkIGludGVy
bmFsbHkuIENoZWNrIHRoYXQgY3VycmVudCBtZW1vcnkgY29uc3VtcHRpb24gaXMgYmVsb3cKKyAg
ICAgICAgdGhlIHRvbGVyYXRlZCBsaW1pdC4gIElmIGNoZWNrIGZhaWxzLCBpbnRpYXRlcyByZXNv
dXJjZSByZWxlYXNlcy4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJNYW5hZ2VyOjpy
ZW1vdmVMYXllckZyb21MaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJNYW5h
Z2VyOjppc0luTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyTWFuYWdlcjo6
dXBkYXRlQnl0ZXNBbGxvY2F0ZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0NhbnZhczJETGF5ZXJNYW5hZ2VyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChDYW52YXMyRExheWVyTWFuYWdlcik6CisKIDIwMTItMDgtMjMgIEtldmluIE9sbGl2
aWVyICA8a2V2aW5vQHRoZW9sbGl2aWVycy5jb20+CiAKICAgICAgICAgW3d4XSBVbnJldmlld2Vk
IGJ1aWxkIGZpeC4gQWRkIHd4IHRvIHRoZSBsaXN0IG9mIHBsYXRmb3JtcyB0aGF0IHVzZSBDb3Jl
VGV4dApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gMTI2NDUxKQorKysgU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0zNjU3LDYgKzM2NTcsOCBAQAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0FuaW1hdGlvblRyYW5zbGF0
aW9uVXRpbC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52
YXMyRExheWVyQnJpZGdlLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ2FudmFzMkRMYXllckJyaWRnZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyTWFuYWdlci5jcHAnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJNYW5hZ2VyLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbXBvc2l0b3JIVURGb250QXRsYXMu
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db21wb3NpdG9y
SFVERm9udEF0bGFzLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0Nyb3NzUHJvY2Vzc0ZvbnRMb2FkaW5nLmgnLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckJyaWRnZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXll
ckJyaWRnZS5jcHAJKHJldmlzaW9uIDEyNjQ1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJCcmlkZ2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJDYW52YXMyRExheWVyQnJpZGdlLmgiCiAK
KyNpbmNsdWRlICJDYW52YXMyRExheWVyTWFuYWdlci5oIgogI2luY2x1ZGUgIkdyQ29udGV4dC5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlLmgiCkBAIC01Myw2ICs1NCw5IEBAIENhbnZhczJETGF5ZXJCcmlkZ2U6OkNh
bnZhczJETGF5ZXJCcmlkZ2UKICAgICAsIG1fc2l6ZShzaXplKQogICAgICwgbV9jYW52YXMoMCkK
ICAgICAsIG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9ieXRlc0FsbG9jYXRlZCgwKQorICAg
ICwgbV9uZXh0KDApCisgICAgLCBtX3ByZXYoMCkKIHsKICAgICBpZiAobV91c2VEb3VibGVCdWZm
ZXJpbmcpIHsKICAgICAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKQEAgLTc2
LDYgKzgwLDcgQEAgQ2FudmFzMkRMYXllckJyaWRnZTo6Q2FudmFzMkRMYXllckJyaWRnZQogCiBD
YW52YXMyRExheWVyQnJpZGdlOjp+Q2FudmFzMkRMYXllckJyaWRnZSgpCiB7CisgICAgQ2FudmFz
MkRMYXllck1hbmFnZXI6OmdldCgpLmxheWVyVG9CZURlc3Ryb3llZCh0aGlzKTsKICAgICBpZiAo
U2tEZWZlcnJlZENhbnZhcyogZGVmZXJyZWQgPSBkZWZlcnJlZENhbnZhcygpKQogICAgICAgICBk
ZWZlcnJlZC0+c2V0Tm90aWZpY2F0aW9uQ2xpZW50KDApOwogICAgIG1fbGF5ZXItPnNldFRleHR1
cmVJZCgwKTsKQEAgLTEwMSw2ICsxMDYsMzQgQEAgdm9pZCBDYW52YXMyRExheWVyQnJpZGdlOjpw
cmVwYXJlRm9yRHJhdwogICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiB9CiAK
K3ZvaWQgQ2FudmFzMkRMYXllckJyaWRnZTo6c3RvcmFnZUFsbG9jYXRlZEZvclJlY29yZGluZ0No
YW5nZWQoc2l6ZV90IGJ5dGVzQWxsb2NhdGVkKQoreworICAgIEFTU0VSVChtX2RlZmVycmFsTW9k
ZSA9PSBEZWZlcnJlZCk7CisgICAgaW50cHRyX3QgZGVsdGEgPSAoaW50cHRyX3QpYnl0ZXNBbGxv
Y2F0ZWQgLSAoaW50cHRyX3QpbV9ieXRlc0FsbG9jYXRlZDsKKyAgICBtX2J5dGVzQWxsb2NhdGVk
ID0gYnl0ZXNBbGxvY2F0ZWQ7CisgICAgQ2FudmFzMkRMYXllck1hbmFnZXI6OmdldCgpLmxheWVy
QWxsb2NhdGVkU3RvcmFnZUNoYW5nZWQodGhpcywgZGVsdGEpOworfQorCit2b2lkIENhbnZhczJE
TGF5ZXJCcmlkZ2U6OmZsdXNoZWREcmF3Q29tbWFuZHMoKQoreworICAgIHN0b3JhZ2VBbGxvY2F0
ZWRGb3JSZWNvcmRpbmdDaGFuZ2VkKGRlZmVycmVkQ2FudmFzKCktPnN0b3JhZ2VBbGxvY2F0ZWRG
b3JSZWNvcmRpbmcoKSk7Cit9CisKK3NpemVfdCBDYW52YXMyRExheWVyQnJpZGdlOjpmcmVlTWVt
b3J5SWZQb3NzaWJsZShzaXplX3QgYnl0ZXNUb0ZyZWUpCit7CisgICAgQVNTRVJUKGRlZmVycmVk
Q2FudmFzKCkpOworICAgIHNpemVfdCBieXRlc0ZyZWVkID0gZGVmZXJyZWRDYW52YXMoKS0+ZnJl
ZU1lbW9yeUlmUG9zc2libGUoYnl0ZXNUb0ZyZWUpOworICAgIENhbnZhczJETGF5ZXJNYW5hZ2Vy
OjpnZXQoKS5sYXllckFsbG9jYXRlZFN0b3JhZ2VDaGFuZ2VkKHRoaXMsIC0oKGludHB0cl90KWJ5
dGVzRnJlZWQpKTsKKyAgICBtX2J5dGVzQWxsb2NhdGVkIC09IGJ5dGVzRnJlZWQ7CisgICAgcmV0
dXJuIGJ5dGVzRnJlZWQ7Cit9CisKK3ZvaWQgQ2FudmFzMkRMYXllckJyaWRnZTo6Zmx1c2goKQor
eworICAgIEFTU0VSVChkZWZlcnJlZENhbnZhcygpKTsKKyAgICBtX2NhbnZhcy0+Zmx1c2goKTsK
K30KKwogU2tDYW52YXMqIENhbnZhczJETGF5ZXJCcmlkZ2U6OnNrQ2FudmFzKFNrRGV2aWNlKiBk
ZXZpY2UpCiB7CiAgICAgQVNTRVJUKCFtX2NhbnZhcyk7CkBAIC0xNTQsNiArMTg3LDggQEAgdm9p
ZCBDYW52YXMyRExheWVyQnJpZGdlOjpjb250ZXh0QWNxdWlyZQogewogICAgIGlmIChtX2RlZmVy
cmFsTW9kZSA9PSBOb25EZWZlcnJlZCAmJiAhbV91c2VEb3VibGVCdWZmZXJpbmcpCiAgICAgICAg
IG1fbGF5ZXItPndpbGxNb2RpZnlUZXh0dXJlKCk7CisgICAgZWxzZSBpZiAobV9kZWZlcnJhbE1v
ZGUgPT0gRGVmZXJyZWQpCisgICAgICAgIENhbnZhczJETGF5ZXJNYW5hZ2VyOjpnZXQoKS5sYXll
ckRpZERyYXcodGhpcyk7CiB9CiAKIHVuc2lnbmVkIENhbnZhczJETGF5ZXJCcmlkZ2U6OmJhY2tC
dWZmZXJUZXh0dXJlKCkKQEAgLTE2Niw0ICsyMDEsMyBAQCB1bnNpZ25lZCBDYW52YXMyRExheWVy
QnJpZGdlOjpiYWNrQnVmZmVyCiB9CiAKIH0KLQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckJyaWRnZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJC
cmlkZ2UuaAkocmV2aXNpb24gMTI2NDUxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckJyaWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw2ICszMiw3IEBACiAjaW5jbHVkZSAiU2tEZWZlcnJlZENhbnZhcy5oIgogI2luY2x1ZGUgPHB1
YmxpYy9XZWJFeHRlcm5hbFRleHR1cmVMYXllci5oPgogI2luY2x1ZGUgPHB1YmxpYy9XZWJFeHRl
cm5hbFRleHR1cmVMYXllckNsaWVudC5oPgorI2luY2x1ZGUgPHd0Zi9Eb3VibHlMaW5rZWRMaXN0
Lmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CiAKQEAgLTQzLDcgKzQ0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBMYXllckNo
cm9taXVtOwogCi1jbGFzcyBDYW52YXMyRExheWVyQnJpZGdlIDogcHVibGljIFdlYktpdDo6V2Vi
RXh0ZXJuYWxUZXh0dXJlTGF5ZXJDbGllbnQsIHB1YmxpYyBTa0RlZmVycmVkQ2FudmFzOjpOb3Rp
ZmljYXRpb25DbGllbnQgeworY2xhc3MgQ2FudmFzMkRMYXllckJyaWRnZSA6IHB1YmxpYyBXZWJL
aXQ6OldlYkV4dGVybmFsVGV4dHVyZUxheWVyQ2xpZW50LCBwdWJsaWMgU2tEZWZlcnJlZENhbnZh
czo6Tm90aWZpY2F0aW9uQ2xpZW50LCBwdWJsaWMgRG91Ymx5TGlua2VkTGlzdE5vZGU8Q2FudmFz
MkRMYXllckJyaWRnZT4gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENhbnZhczJETGF5ZXJC
cmlkZ2UpOwogcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRyPENhbnZhczJETGF5ZXJCcmlk
Z2U+IGNyZWF0ZShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0LCBjb25zdCBJ
bnRTaXplJiBzaXplLCBEZWZlcnJhbE1vZGUgZGVmZXJyYWxNb2RlLCB1bnNpZ25lZCB0ZXh0dXJl
SWQpCkBAIC01OCw3ICs1OSwxNCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBXZWJLaXQ6OldlYkdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KCkgT1ZFUlJJREU7CiAKICAgICAvLyBTa0RlZmVycmVk
Q2FudmFzOjpOb3RpZmljYXRpb25DbGllbnQgaW1wbGVtZW50YXRpb24KLSAgICB2aXJ0dWFsIHZv
aWQgcHJlcGFyZUZvckRyYXcoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZUZvckRyYXcoKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcmFnZUFsbG9jYXRlZEZvclJlY29yZGluZ0No
YW5nZWQoc2l6ZV90KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZmx1c2hlZERyYXdDb21t
YW5kcygpIE9WRVJSSURFOworCisgICAgLy8gTWV0aG9kcyB1c2VkIGJ5IENhbnZhczJETGF5ZXJN
YW5hZ2VyCisgICAgdmlydHVhbCBzaXplX3QgZnJlZU1lbW9yeUlmUG9zc2libGUoc2l6ZV90KTsg
Ly8gdmlydHVhbCBmb3IgbW9ja2luZworICAgIHZpcnR1YWwgdm9pZCBmbHVzaCgpOyAvLyB2aXJ0
dWFsIGZvciBtb2NraW5nCisgICAgc2l6ZV90IGJ5dGVzQWxsb2NhdGVkKCkgY29uc3Qge3JldHVy
biBtX2J5dGVzQWxsb2NhdGVkO30KIAogICAgIFNrQ2FudmFzKiBza0NhbnZhcyhTa0RldmljZSop
OwogICAgIFdlYktpdDo6V2ViTGF5ZXIqIGxheWVyKCk7CkBAIC02Niw3ICs3NCw3IEBAIHB1Ymxp
YzoKIAogICAgIHVuc2lnbmVkIGJhY2tCdWZmZXJUZXh0dXJlKCk7CiAKLXByaXZhdGU6Citwcm90
ZWN0ZWQ6CiAgICAgQ2FudmFzMkRMYXllckJyaWRnZShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4
dDNEPiwgY29uc3QgSW50U2l6ZSYsIERlZmVycmFsTW9kZSwgdW5zaWduZWQgdGV4dHVyZUlkKTsK
ICAgICBTa0RlZmVycmVkQ2FudmFzKiBkZWZlcnJlZENhbnZhcygpOwogCkBAIC03OCw2ICs4Niwx
MSBAQCBwcml2YXRlOgogICAgIFNrQ2FudmFzKiBtX2NhbnZhczsKICAgICBPd25QdHI8V2ViS2l0
OjpXZWJFeHRlcm5hbFRleHR1cmVMYXllcj4gbV9sYXllcjsKICAgICBSZWZQdHI8R3JhcGhpY3ND
b250ZXh0M0Q+IG1fY29udGV4dDsKKyAgICBzaXplX3QgbV9ieXRlc0FsbG9jYXRlZDsKKworICAg
IGZyaWVuZCBjbGFzcyBXVEY6OkRvdWJseUxpbmtlZExpc3ROb2RlPENhbnZhczJETGF5ZXJCcmlk
Z2U+OworICAgIENhbnZhczJETGF5ZXJCcmlkZ2UqIG1fbmV4dDsKKyAgICBDYW52YXMyRExheWVy
QnJpZGdlKiBtX3ByZXY7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllck1h
bmFnZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ2FudmFzMkRMYXllck1hbmFnZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDEzNSBAQAorLyoKK0NvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKzIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
CitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORCBBTlkKK0VYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
K0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyovCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJDYW52
YXMyRExheWVyTWFuYWdlci5oIgorCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCitu
YW1lc3BhY2UgeworZW51bSB7CisgICAgRGVmYXVsdE1heEJ5dGVzQWxsb2NhdGVkID0gNjQqMTAy
NCoxMDI0LAorICAgIERlZmF1bHRUYXJnZXRCeXRlc0FsbG9jYXRlZCA9IDE2KjEwMjQqMTAyNCwK
K307Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ2FudmFzMkRMYXllck1hbmFnZXI6OkNh
bnZhczJETGF5ZXJNYW5hZ2VyKCkKKyAgICA6IG1fYnl0ZXNBbGxvY2F0ZWQoMCkKKyAgICAsIG1f
bWF4Qnl0ZXNBbGxvY2F0ZWQoRGVmYXVsdE1heEJ5dGVzQWxsb2NhdGVkKQorICAgICwgbV90YXJn
ZXRCeXRlc0FsbG9jYXRlZChEZWZhdWx0VGFyZ2V0Qnl0ZXNBbGxvY2F0ZWQpCit7Cit9CisKK0Nh
bnZhczJETGF5ZXJNYW5hZ2VyOjp+Q2FudmFzMkRMYXllck1hbmFnZXIoKQoreworICAgIEFTU0VS
VCghbV9ieXRlc0FsbG9jYXRlZCk7CisgICAgQVNTRVJUKCFtX2xheWVyTGlzdC5oZWFkKCkpOwor
fQorCit2b2lkIENhbnZhczJETGF5ZXJNYW5hZ2VyOjppbml0KHNpemVfdCBtYXhCeXRlc0FsbG9j
YXRlZCwgc2l6ZV90IHRhcmdldEJ5dGVzQWxsb2NhdGVkKQoreworICAgIEFTU0VSVChtYXhCeXRl
c0FsbG9jYXRlZCA+PSB0YXJnZXRCeXRlc0FsbG9jYXRlZCk7CisgICAgbV9tYXhCeXRlc0FsbG9j
YXRlZCA9IG1heEJ5dGVzQWxsb2NhdGVkOworICAgIG1fdGFyZ2V0Qnl0ZXNBbGxvY2F0ZWQgPSB0
YXJnZXRCeXRlc0FsbG9jYXRlZDsKK30KKworQ2FudmFzMkRMYXllck1hbmFnZXImIENhbnZhczJE
TGF5ZXJNYW5hZ2VyOjpnZXQoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ2FudmFzMkRM
YXllck1hbmFnZXIsIG1hbmFnZXIsICgpKTsKKyAgICByZXR1cm4gbWFuYWdlcjsKK30KKwordm9p
ZCBDYW52YXMyRExheWVyTWFuYWdlcjo6bGF5ZXJEaWREcmF3KENhbnZhczJETGF5ZXJCcmlkZ2Uq
IGxheWVyKQoreworICAgIGlmIChpc0luTGlzdChsYXllcikpIHsKKyAgICAgICAgaWYgKGxheWVy
ICE9IG1fbGF5ZXJMaXN0LmhlYWQoKSkgeworICAgICAgICAgICAgbV9sYXllckxpc3QucmVtb3Zl
KGxheWVyKTsKKyAgICAgICAgICAgIG1fbGF5ZXJMaXN0LnB1c2gobGF5ZXIpOyAvLyBTZXQgYXMg
TVJVCisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgYWRkTGF5ZXJUb0xpc3QobGF5ZXIp
OyAKK30KKwordm9pZCBDYW52YXMyRExheWVyTWFuYWdlcjo6YWRkTGF5ZXJUb0xpc3QoQ2FudmFz
MkRMYXllckJyaWRnZSogbGF5ZXIpCit7CisgICAgQVNTRVJUKCFpc0luTGlzdChsYXllcikpOwor
ICAgIG1fYnl0ZXNBbGxvY2F0ZWQgKz0gbGF5ZXItPmJ5dGVzQWxsb2NhdGVkKCk7CisgICAgbV9s
YXllckxpc3QucHVzaChsYXllcik7IC8vIFNldCBhcyBNUlUKK30KKwordm9pZCBDYW52YXMyRExh
eWVyTWFuYWdlcjo6bGF5ZXJBbGxvY2F0ZWRTdG9yYWdlQ2hhbmdlZChDYW52YXMyRExheWVyQnJp
ZGdlKiBsYXllciwgaW50cHRyX3QgZGVsdGFCeXRlcykKK3sKKyAgICBpZiAoIWlzSW5MaXN0KGxh
eWVyKSkKKyAgICAgICAgYWRkTGF5ZXJUb0xpc3QobGF5ZXIpOworICAgIGVsc2UgeworICAgICAg
ICBBU1NFUlQoKGludHB0cl90KW1fYnl0ZXNBbGxvY2F0ZWQgKyBkZWx0YUJ5dGVzID4gMCk7IAor
ICAgICAgICBtX2J5dGVzQWxsb2NhdGVkID0gKGludHB0cl90KW1fYnl0ZXNBbGxvY2F0ZWQgKyBk
ZWx0YUJ5dGVzOworICAgIH0KKyAgICBmcmVlTWVtb3J5SWZOZWNlc3NhcnkoKTsKK30KKwordm9p
ZCBDYW52YXMyRExheWVyTWFuYWdlcjo6bGF5ZXJUb0JlRGVzdHJveWVkKENhbnZhczJETGF5ZXJC
cmlkZ2UqIGxheWVyKQoreworICAgIGlmIChpc0luTGlzdChsYXllcikpCisgICAgICAgIHJlbW92
ZUxheWVyRnJvbUxpc3QobGF5ZXIpOworfQorCit2b2lkIENhbnZhczJETGF5ZXJNYW5hZ2VyOjpm
cmVlTWVtb3J5SWZOZWNlc3NhcnkoKSAKK3sKKyAgICBpZiAobV9ieXRlc0FsbG9jYXRlZCA+IG1f
bWF4Qnl0ZXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgLy8gUGFzcyAxOiBGcmVlIG1lbW9yeSBmcm9t
IGNhY2hlcworICAgICAgICBDYW52YXMyRExheWVyQnJpZGdlKiBsYXllciA9IG1fbGF5ZXJMaXN0
LnRhaWwoKTsgLy8gTFJVCisgICAgICAgIHdoaWxlIChtX2J5dGVzQWxsb2NhdGVkID4gbV90YXJn
ZXRCeXRlc0FsbG9jYXRlZCAmJiBsYXllcikgeworICAgICAgICAgICAgbGF5ZXItPmZyZWVNZW1v
cnlJZlBvc3NpYmxlKG1fYnl0ZXNBbGxvY2F0ZWQgLSBtX3RhcmdldEJ5dGVzQWxsb2NhdGVkKTsK
KyAgICAgICAgICAgIGxheWVyID0gbGF5ZXItPnByZXYoKTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIFBhc3MgMjogRmx1c2ggY2FudmFzZXMKKyAgICAgICAgQ2FudmFzMkRMYXllckJyaWRnZSog
bGVhc3RSZWNlbnRseVVzZWRMYXllciA9IG1fbGF5ZXJMaXN0LnRhaWwoKTsKKyAgICAgICAgd2hp
bGUgKG1fYnl0ZXNBbGxvY2F0ZWQgPiBtX3RhcmdldEJ5dGVzQWxsb2NhdGVkICYmIGxlYXN0UmVj
ZW50bHlVc2VkTGF5ZXIpIHsKKyAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2VkTGF5ZXItPmZs
dXNoKCk7CisgICAgICAgICAgICBsZWFzdFJlY2VudGx5VXNlZExheWVyLT5mcmVlTWVtb3J5SWZQ
b3NzaWJsZSh+MCk7CisgICAgICAgICAgICByZW1vdmVMYXllckZyb21MaXN0KGxlYXN0UmVjZW50
bHlVc2VkTGF5ZXIpOworICAgICAgICAgICAgbGVhc3RSZWNlbnRseVVzZWRMYXllciA9IG1fbGF5
ZXJMaXN0LnRhaWwoKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBDYW52YXMyRExheWVy
TWFuYWdlcjo6cmVtb3ZlTGF5ZXJGcm9tTGlzdChDYW52YXMyRExheWVyQnJpZGdlKiBsYXllcikK
K3sKKyAgICBBU1NFUlQoaXNJbkxpc3QobGF5ZXIpKTsKKyAgICBtX2J5dGVzQWxsb2NhdGVkIC09
IGxheWVyLT5ieXRlc0FsbG9jYXRlZCgpOworICAgIG1fbGF5ZXJMaXN0LnJlbW92ZShsYXllcik7
CisgICAgbGF5ZXItPnNldE5leHQoMCk7CisgICAgbGF5ZXItPnNldFByZXYoMCk7Cit9CisKK2Jv
b2wgQ2FudmFzMkRMYXllck1hbmFnZXI6OmlzSW5MaXN0KENhbnZhczJETGF5ZXJCcmlkZ2UqIGxh
eWVyKQoreworICAgIHJldHVybiBsYXllci0+cHJldigpIHx8IG1fbGF5ZXJMaXN0LmhlYWQoKSA9
PSBsYXllcjsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ2FudmFzMkRMYXllck1hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyTWFuYWdlci5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q2FudmFzMkRMYXllck1hbmFnZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MiBAQAorLyoK
K0NvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgIAorVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCitFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCitESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKK0RJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CitMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KK0FOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisqLworCisjaWZuZGVmIENhbnZhczJETGF5ZXJNYW5hZ2VyX2gKKyNkZWZpbmUgQ2FudmFz
MkRMYXllck1hbmFnZXJfaAorCisjaW5jbHVkZSAiQ2FudmFzMkRMYXllckJyaWRnZS5oIgorCitj
bGFzcyBDYW52YXMyRExheWVyTWFuYWdlclRlc3Q7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgQ2FudmFzMkRMYXllck1hbmFnZXIgeworcHVibGljOgorICAgIHN0YXRpYyBDYW52YXMy
RExheWVyTWFuYWdlciYgZ2V0KCk7CisgICAgdm9pZCBpbml0KHNpemVfdCBtYXhCeXRlc0FsbG9j
YXRlZCwgc2l6ZV90IHRhcmdldEJ5dGVzQWxsb2NhdGVkKTsKKyAgICB2aXJ0dWFsIH5DYW52YXMy
RExheWVyTWFuYWdlcigpOworCisgICAgdm9pZCBsYXllckFsbG9jYXRlZFN0b3JhZ2VDaGFuZ2Vk
KENhbnZhczJETGF5ZXJCcmlkZ2UqLCBpbnRwdHJfdCBkZWx0YUJ5dGVzKTsKKyAgICB2b2lkIGxh
eWVyRGlkRHJhdyhDYW52YXMyRExheWVyQnJpZGdlKik7CisgICAgdm9pZCBsYXllclRvQmVEZXN0
cm95ZWQoQ2FudmFzMkRMYXllckJyaWRnZSopOworcHJpdmF0ZToKKyAgICBDYW52YXMyRExheWVy
TWFuYWdlcigpOworCisgICAgLy8gaW50ZXJuYWwgbWV0aG9kcworICAgIHZvaWQgZnJlZU1lbW9y
eUlmTmVjZXNzYXJ5KCk7CisgICAgYm9vbCBpc0luTGlzdChDYW52YXMyRExheWVyQnJpZGdlKik7
CisgICAgdm9pZCBhZGRMYXllclRvTGlzdChDYW52YXMyRExheWVyQnJpZGdlKik7CisgICAgdm9p
ZCByZW1vdmVMYXllckZyb21MaXN0KENhbnZhczJETGF5ZXJCcmlkZ2UqKTsKKworICAgIHNpemVf
dCBtX2J5dGVzQWxsb2NhdGVkOworICAgIHNpemVfdCBtX21heEJ5dGVzQWxsb2NhdGVkOworICAg
IHNpemVfdCBtX3RhcmdldEJ5dGVzQWxsb2NhdGVkOworICAgIERvdWJseUxpbmtlZExpc3Q8Q2Fu
dmFzMkRMYXllckJyaWRnZT4gbV9sYXllckxpc3Q7CisKKyAgICBmcmllbmQgY2xhc3MgOjpDYW52
YXMyRExheWVyTWFuYWdlclRlc3Q7IC8vIGZvciB1bml0IHRlc3RpbmcKK307CisKK30KKworI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gMTI2NDU4KQorKysg
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwyMiBAQAorMjAxMi0wOC0yMyAgSnVzdGluIE5vdm9zYWQgIDxqdW5vdkBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgW0Nocm9taXVtXSBJbXBsZW1lbnRpbmcgYSBnbG9iYWwgbGltaXQgb24gbWVt
b3J5IGNvbnN1bWVkIGJ5IGRlZmVycmVkIDJEIGNhbnZhc2VzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDM4NgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGluZyB1bml0IHRlc3RzIGZvciBXZWJDb3Jl
OjpDYW52YXMyRExheWVyTWFuYWdlcgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAg
ICogdGVzdHMvQ2FudmFzMkRMYXllck1hbmFnZXJUZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChG
YWtlQ2FudmFzMkRMYXllckJyaWRnZSk6CisgICAgICAgIChGYWtlQ2FudmFzMkRMYXllckJyaWRn
ZTo6RmFrZUNhbnZhczJETGF5ZXJCcmlkZ2UpOgorICAgICAgICAoRmFrZUNhbnZhczJETGF5ZXJC
cmlkZ2U6OmZha2VGcmVlYWJsZUJ5dGVzKToKKyAgICAgICAgKENhbnZhczJETGF5ZXJNYW5hZ2Vy
VGVzdCk6CisgICAgICAgIChDYW52YXMyRExheWVyTWFuYWdlclRlc3Q6OnN0b3JhZ2VBbGxvY2F0
aW9uVHJhY2tpbmdUZXN0KToKKyAgICAgICAgKENhbnZhczJETGF5ZXJNYW5hZ2VyVGVzdDo6ZXZp
Y3Rpb25UZXN0KToKKyAgICAgICAgKENhbnZhczJETGF5ZXJNYW5hZ2VyVGVzdDo6Zmx1c2hFdmlj
dGlvblRlc3QpOgorCiAyMDEyLTA4LTIzICBLZW5uZXRoIFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNv
bT4KIAogICAgICAgICBDb252ZXJ0IFNjcm9sbGFibGVBcmVhIEFTU0VSVF9OT1RfUkVBQ0hFRCB2
aXJ0dWFscyBpbnRvIHB1cmUgdmlydHVhbHMKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
V2ViS2l0Lmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwaQkocmV2aXNpb24gMTI2NDUxKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwaQkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsNyBAQAogICAgICAgICAgICAgJ3Rlc3Rz
L0FyZW5hVGVzdEhlbHBlcnMuaCcsCiAgICAgICAgICAgICAndGVzdHMvQXNzb2NpYXRlZFVSTExv
YWRlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DYW52YXMyRExheWVyQnJpZGdlVGVz
dC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0NhbnZhczJETGF5ZXJNYW5hZ2VyVGVzdC5jcHAn
LAogICAgICAgICAgICAgJ3Rlc3RzL0NDQWN0aXZlQW5pbWF0aW9uVGVzdC5jcHAnLAogICAgICAg
ICAgICAgJ3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5jcHAnLAogICAgICAgICAgICAgJ3Rl
c3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5oJywKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ2FudmFzMkRMYXllck1hbmFnZXJUZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJETGF5ZXJNYW5hZ2VyVGVzdC5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJETGF5ZXJN
YW5hZ2VyVGVzdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTU1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJDYW52YXMyRExheWVyTWFuYWdl
ci5oIgorCisjaW5jbHVkZSAiRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCisjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4KKyNp
bmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5n
IHRlc3Rpbmc6OkluU2VxdWVuY2U7Cit1c2luZyB0ZXN0aW5nOjpSZXR1cm47Cit1c2luZyB0ZXN0
aW5nOjpUZXN0OworCisKK2NsYXNzIEZha2VDYW52YXMyRExheWVyQnJpZGdlIDogcHVibGljIENh
bnZhczJETGF5ZXJCcmlkZ2UgeworcHVibGljOgorICAgIEZha2VDYW52YXMyRExheWVyQnJpZGdl
KCkgCisgICAgICAgIDogQ2FudmFzMkRMYXllckJyaWRnZShHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0KGFkb3B0UHRyKG5ldyBXZWJL
aXQ6OkZha2VXZWJHcmFwaGljc0NvbnRleHQzRCkpLCBJbnRTaXplKDEsIDEpLCBEZWZlcnJlZCwg
MCkKKyAgICAgICAgLCBtX2ZyZWVhYmxlQnl0ZXMoMCkKKyAgICAgICAgLCBtX2ZyZWVNZW1vcnlJ
ZlBvc3NpYmxlQ291bnQoMCkKKyAgICAgICAgLCBtX2ZsdXNoQ291bnQoMCkKKyAgICB7CisgICAg
fQorCisgICAgdm9pZCBmYWtlRnJlZWFibGVCeXRlcyhzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAg
ICAgIG1fZnJlZWFibGVCeXRlcyA9IHNpemU7CisgICAgfQorCisgICAgdmlydHVhbCBzaXplX3Qg
ZnJlZU1lbW9yeUlmUG9zc2libGUoc2l6ZV90IHNpemUpIE9WRVJSSURFCisgICAgeworICAgICAg
ICBtX2ZyZWVNZW1vcnlJZlBvc3NpYmxlQ291bnQrKzsKKyAgICAgICAgc2l6ZV90IGJ5dGVzRnJl
ZWQgPSBzaXplIDwgbV9mcmVlYWJsZUJ5dGVzID8gc2l6ZSA6IG1fZnJlZWFibGVCeXRlczsKKyAg
ICAgICAgbV9mcmVlYWJsZUJ5dGVzIC09IGJ5dGVzRnJlZWQ7CisgICAgICAgIENhbnZhczJETGF5
ZXJNYW5hZ2VyOjpnZXQoKS5sYXllckFsbG9jYXRlZFN0b3JhZ2VDaGFuZ2VkKHRoaXMsIC0oKGlu
dHB0cl90KWJ5dGVzRnJlZWQpKTsKKyAgICAgICAgbV9ieXRlc0FsbG9jYXRlZCAtPSBieXRlc0Zy
ZWVkOworICAgICAgICByZXR1cm4gYnl0ZXNGcmVlZDsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgZmx1c2goKSBPVkVSUklERQorICAgIHsKKyAgICAgICAgbV9mbHVzaENvdW50Kys7CisgICAg
fQorCitwdWJsaWM6CisgICAgc2l6ZV90IG1fZnJlZWFibGVCeXRlczsKKyAgICBpbnQgbV9mcmVl
TWVtb3J5SWZQb3NzaWJsZUNvdW50OworICAgIGludCBtX2ZsdXNoQ291bnQ7Cit9OworCitjbGFz
cyBDYW52YXMyRExheWVyTWFuYWdlclRlc3QgOiBwdWJsaWMgVGVzdCB7Citwcm90ZWN0ZWQ6Cisg
ICAgdm9pZCBzdG9yYWdlQWxsb2NhdGlvblRyYWNraW5nVGVzdCgpCisgICAgeworICAgICAgICBD
YW52YXMyRExheWVyTWFuYWdlciYgbWFuYWdlciA9IENhbnZhczJETGF5ZXJNYW5hZ2VyOjpnZXQo
KTsKKyAgICAgICAgbWFuYWdlci5pbml0KDEwLCAxMCk7CisgICAgICAgIHsKKyAgICAgICAgICAg
IEZha2VDYW52YXMyRExheWVyQnJpZGdlIGxheWVyMTsKKyAgICAgICAgICAgIEVYUEVDVF9FUSgo
c2l6ZV90KTAsIG1hbmFnZXIubV9ieXRlc0FsbG9jYXRlZCk7CisgICAgICAgICAgICBsYXllcjEu
c3RvcmFnZUFsbG9jYXRlZEZvclJlY29yZGluZ0NoYW5nZWQoMSk7CisgICAgICAgICAgICBFWFBF
Q1RfRVEoKHNpemVfdCkxLCBtYW5hZ2VyLm1fYnl0ZXNBbGxvY2F0ZWQpOworICAgICAgICAgICAg
Ly8gVGVzdCBhbGxvY2F0aW9uIGluY3JlYXNlCisgICAgICAgICAgICBsYXllcjEuc3RvcmFnZUFs
bG9jYXRlZEZvclJlY29yZGluZ0NoYW5nZWQoMik7CisgICAgICAgICAgICBFWFBFQ1RfRVEoKHNp
emVfdCkyLCBtYW5hZ2VyLm1fYnl0ZXNBbGxvY2F0ZWQpOworICAgICAgICAgICAgLy8gVGVzdCBh
bGxvY2F0aW9uIGRlY3JlYXNlCisgICAgICAgICAgICBsYXllcjEuc3RvcmFnZUFsbG9jYXRlZEZv
clJlY29yZGluZ0NoYW5nZWQoMSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoKHNpemVfdCkxLCBt
YW5hZ2VyLm1fYnl0ZXNBbGxvY2F0ZWQpOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IEZha2VDYW52YXMyRExheWVyQnJpZGdlIGxheWVyMjsKKyAgICAgICAgICAgICAgICBFWFBFQ1Rf
RVEoKHNpemVfdCkxLCBtYW5hZ2VyLm1fYnl0ZXNBbGxvY2F0ZWQpOworICAgICAgICAgICAgICAg
IC8vIHZlcmlmeSBtdWx0aS1sYXllciBhbGxvY2F0aW9uIHRyYWNraW5nCisgICAgICAgICAgICAg
ICAgbGF5ZXIyLnN0b3JhZ2VBbGxvY2F0ZWRGb3JSZWNvcmRpbmdDaGFuZ2VkKDIpOworICAgICAg
ICAgICAgICAgIEVYUEVDVF9FUSgoc2l6ZV90KTMsIG1hbmFnZXIubV9ieXRlc0FsbG9jYXRlZCk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBWZXJpZnkgdHJhY2tpbmcgYWZ0ZXIgZGVz
dHJ1Y3Rpb24KKyAgICAgICAgICAgIEVYUEVDVF9FUSgoc2l6ZV90KTEsIG1hbmFnZXIubV9ieXRl
c0FsbG9jYXRlZCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGV2aWN0aW9uVGVzdCgp
CisgICAgeworICAgICAgICBDYW52YXMyRExheWVyTWFuYWdlciYgbWFuYWdlciA9IENhbnZhczJE
TGF5ZXJNYW5hZ2VyOjpnZXQoKTsKKyAgICAgICAgbWFuYWdlci5pbml0KDEwLCA1KTsKKyAgICAg
ICAgRmFrZUNhbnZhczJETGF5ZXJCcmlkZ2UgbGF5ZXI7CisgICAgICAgIGxheWVyLmZha2VGcmVl
YWJsZUJ5dGVzKDEwKTsKKyAgICAgICAgbGF5ZXIuc3RvcmFnZUFsbG9jYXRlZEZvclJlY29yZGlu
Z0NoYW5nZWQoOCk7IC8vIHVuZGVyIHRoZSBtYXgKKyAgICAgICAgRVhQRUNUX0VRKDAsIGxheWVy
Lm1fZnJlZU1lbW9yeUlmUG9zc2libGVDb3VudCk7CisgICAgICAgIGxheWVyLnN0b3JhZ2VBbGxv
Y2F0ZWRGb3JSZWNvcmRpbmdDaGFuZ2VkKDEyKTsgLy8gb3ZlciB0aGUgbWF4CisgICAgICAgIEVY
UEVDVF9FUSgxLCBsYXllci5tX2ZyZWVNZW1vcnlJZlBvc3NpYmxlQ291bnQpOworICAgICAgICBF
WFBFQ1RfRVEoKHNpemVfdCkzLCBsYXllci5tX2ZyZWVhYmxlQnl0ZXMpOworICAgICAgICBFWFBF
Q1RfRVEoMCwgbGF5ZXIubV9mbHVzaENvdW50KTsgLy8gZXZpY3Rpb24gc3VjY2VlZGVkIHdpdGhv
dXQgdHJpZ2dlcmluZyBhIGZsdXNoCisgICAgICAgIEVYUEVDVF9FUSgoc2l6ZV90KTUsIGxheWVy
LmJ5dGVzQWxsb2NhdGVkKCkpOworICAgIH0KKworICAgIHZvaWQgZmx1c2hFdmljdGlvblRlc3Qo
KQorICAgIHsKKyAgICAgICAgQ2FudmFzMkRMYXllck1hbmFnZXImIG1hbmFnZXIgPSBDYW52YXMy
RExheWVyTWFuYWdlcjo6Z2V0KCk7CisgICAgICAgIG1hbmFnZXIuaW5pdCgxMCwgNSk7CisgICAg
ICAgIEZha2VDYW52YXMyRExheWVyQnJpZGdlIGxheWVyOworICAgICAgICBsYXllci5mYWtlRnJl
ZWFibGVCeXRlcygxKTsgLy8gTm90IGVub3VnaCBmcmVlYWJsZSBieXRlcywgd2lsbCBjYXVzZSBh
Z2dyZXNzaXZlIGV2aWN0aW9uIGJ5IGZsdXNoaW5nCisgICAgICAgIGxheWVyLnN0b3JhZ2VBbGxv
Y2F0ZWRGb3JSZWNvcmRpbmdDaGFuZ2VkKDgpOyAvLyB1bmRlciB0aGUgbWF4CisgICAgICAgIEVY
UEVDVF9FUSgwLCBsYXllci5tX2ZyZWVNZW1vcnlJZlBvc3NpYmxlQ291bnQpOworICAgICAgICBs
YXllci5zdG9yYWdlQWxsb2NhdGVkRm9yUmVjb3JkaW5nQ2hhbmdlZCgxMik7IC8vIG92ZXIgdGhl
IG1heAorICAgICAgICBFWFBFQ1RfRVEoMiwgbGF5ZXIubV9mcmVlTWVtb3J5SWZQb3NzaWJsZUNv
dW50KTsgLy8gVHdvIHRyaWVzLCBvbmUgYmVmb3JlIGZsdXNoLCBvbmUgYWZ0ZXIgZmx1c2gKKyAg
ICAgICAgRVhQRUNUX0VRKChzaXplX3QpMCwgbGF5ZXIubV9mcmVlYWJsZUJ5dGVzKTsKKyAgICAg
ICAgRVhQRUNUX0VRKDEsIGxheWVyLm1fZmx1c2hDb3VudCk7IC8vIGZsdXNoIHdhcyBhdHRlbXB0
ZWQKKyAgICAgICAgRVhQRUNUX0VRKChzaXplX3QpMTEsIGxheWVyLmJ5dGVzQWxsb2NhdGVkKCkp
OyAvLyBmbHVzaCBkcm9wcyB0aGUgbGF5ZXIgZnJvbSBtYW5hZ2VyJ3MgdHJhY2tpbmcgbGlzdAor
ICAgICAgICBFWFBFQ1RfRkFMU0UobWFuYWdlci5pc0luTGlzdCgmbGF5ZXIpKTsKKyAgICB9Cit9
OworCituYW1lc3BhY2UgeworCitURVNUX0YoQ2FudmFzMkRMYXllck1hbmFnZXJUZXN0LCB0ZXN0
U3RvcmFnZUFsbG9jYXRpb25UcmFja2luZykKK3sKKyAgICBzdG9yYWdlQWxsb2NhdGlvblRyYWNr
aW5nVGVzdCgpOworfQorCitURVNUX0YoQ2FudmFzMkRMYXllck1hbmFnZXJUZXN0LCB0ZXN0RXZp
Y3Rpb24pCit7CisgICAgZXZpY3Rpb25UZXN0KCk7Cit9CisKK1RFU1RfRihDYW52YXMyRExheWVy
TWFuYWdlclRlc3QsIHRlc3RGbHVzaEV2aWN0aW9uKQoreworICAgIGZsdXNoRXZpY3Rpb25UZXN0
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160479</attachid>
            <date>2012-08-24 12:46:25 -0700</date>
            <delta_ts>2012-08-27 06:32:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94386-20120824154620.patch</filename>
            <type>text/plain</type>
            <size>25699</size>
            <attacher name="Justin Novosad">junov</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyNjYxMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgyIEBACisyMDEyLTA4LTIzICBKdXN0aW4g
Tm92b3NhZCAgPGp1bm92QGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIEltcGxl
bWVudGluZyBhIGdsb2JhbCBsaW1pdCBvbiBtZW1vcnkgY29uc3VtZWQgYnkgZGVmZXJyZWQgMkQg
Y2FudmFzZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTk0Mzg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QmVmb3JlIHRoaXMgY2hhbmdlLCB0aGVyZSB3YXMgbm8gZ2xvYmFsIGJvdW5kIG9uIG1lbW9yeSB0
aGF0IGNvdWxkIGJlCisgICAgICAgIGNvbnN1bWVkIGZvciB0aGUgcHVycG9zZSBvZiByZWNvcmRp
bmcgMmQgY2FudmFzIGRlZmVycmVkIGRyYXcgY29tbWFuZHMuCisgICAgICAgIFRoZXJlIHdhcyBv
bmx5IGEgcGVyIGNhbnZhcyBsaW1pdC4gSXQgaXMgcG9zc2libGUgZm9yIGNhbnZhc2VzIHRvIGdl
dAorICAgICAgICBkZXJlZmVyZW5jZWQgd2l0aG91dCBmbHVzaGluZyBwZW5kaW5nIGRyYXcgY29t
bWFuZHMsIHdoaWNoIG1heSBsb2NrCisgICAgICAgIHJlc291cmNlcyB1bnRpbCB0aGUgY2FudmFz
IGVsZW1lbnQgaXMgZ2FyYmFnZSBjb2xsZWN0ZWQuIFRoaXMgbWFrZXMKKyAgICAgICAgaXQgcG9z
c2libGUgdG8gZ3JvdyBtZW1vcnkgY29uc3VtcHRpb24gaW5kZWZpbml0ZWx5IGJ5IGhpdHRpbmcg
cmVsb2FkCisgICAgICAgIHN1Y2Nlc3NpdmVseSBvbiBzb21lIGNhbnZhcy1pbnRlbnNpdmUgd2Vi
IHBhZ2VzLgorCisgICAgICAgIFRoZSBzb2x1dGlvbiBpbXBsZW1lbnRlZCBpbiB0aGlzIGNoYW5n
ZSBjb25zaXN0cyBpbiBtYWludGFpbmluZyBhCisgICAgICAgIGdsb2JhbCByZWdpc3RyeSBvZiBk
ZWZlcnJlZCBjYW52YXMgbGF5ZXJzIGFuZCB0cmFja2luZyB0aGUgc3VtIG9mCisgICAgICAgIG1l
bW9yeSBhbGxvY2F0ZWQgYnkgYWxsIGNhbnZhc2VzIGZvciB0aGUgcHVycG9zZSBvZiBzdG9yaW5n
IGRlZmVycmVkCisgICAgICAgIGRyYXcgY29tbWFuZHMuIFdoZW4gbWVtb3J5IGNvbnN1bXB0aW9u
IHJlYWNoZXMgdGhlIGFsbG93ZWQgbGltaXQsCisgICAgICAgIGNhY2hlcyBhcmUgY2xlYXJlZCBh
bmQgZHJhdyBvcGVyYXRpb25zIGFyZSBmbHVzaGVkIG9uIG9uZSBvciBzZXZlcmFsCisgICAgICAg
IGNhbnZhc2VzLCBzdGFydGluZyB3aXRoIHRoZSBsZWFzdCByZWNlbnRseSB1c2VkLCB1bnRpbCBt
ZW1vcnkKKyAgICAgICAgY29uc3VtcHRpb24gaXMgYmVsb3cgYSB0YXJnZXQgbGV2ZWwuCisKKyAg
ICAgICAgTmV3IHRlc3RzOiB3ZWJraXRfdW5pdF90ZXN0cyBEZWZlcnJlZExheWVyTWFuYWdlclRl
c3QqCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckJyaWRnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
YW52YXMyRExheWVyQnJpZGdlOjpDYW52YXMyRExheWVyQnJpZGdlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNhbnZhczJETGF5ZXJCcmlkZ2U6On5DYW52YXMyRExheWVyQnJpZGdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNhbnZhczJETGF5ZXJCcmlkZ2U6OnN0b3JhZ2VBbGxvY2F0ZWRGb3JSZWNvcmRp
bmdDaGFuZ2VkKToKKyAgICAgICAgT3ZlcmxvYWRlZCBmcm9tIFNrRGVmZXJyZWRDYW52YXM6Ok5v
dGlmaWNhdGlvbkNsaWVudC4gQ2FsbGVkIHdoZW4KKyAgICAgICAgdGhlcmUgaXMgYSBjaGFuZ2Ug
aW4gdGhlIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQgYnkgdGhlIGRlZmVycmVkCisgICAgICAg
IGNhbnZhcy4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRM
YXllckJyaWRnZTo6Zmx1c2hlZERyYXdDb21tYW5kcyk6CisgICAgICAgIE92ZXJsb2FkZWQgZnJv
bSBTa0RlZmVycmVkQ2FudmFzOjpOb3RpZmljYXRpb25DbGllbnQuIENhbGxlZCB3aGVuCisgICAg
ICAgIHBlbmRpbmcgZHJhdyBjb21tYW5kcyBhcmUgZmx1c2ggYnkgdGhlIGRlZmVycmVkIGNhbnZh
cy4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJCcmlkZ2U6OmZyZWVNZW1vcnlJZlBv
c3NpYmxlKToKKyAgICAgICAgQ2FsbGVkIGJ5IHRoZSBDYW52YXMyRExheWVyTWFuYWdlciB0byBy
ZXF1ZXN0IHRoZSByZWxlYXNlIG9mIHVubG9ja2VkCisgICAgICAgIG1lbW9yeSByZXNvdXJjZXMg
KGNhY2hlcykuIFJlcXVlc3QgaXMgcmVsYXllZCB0byBTa0RlZmVycmVkQ2FudmFzLgorICAgICAg
ICByZXR1cm5zIG51bWJlciBvZiBieXRlcyBmcmVlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
czJETGF5ZXJCcmlkZ2U6OmZsdXNoKToKKyAgICAgICAgUmVxdWVzdHMgdGhhdCBwZW5kaW5nIGRy
YXcgY29tbWFuZHMgYmUgZmx1c2hlZCBpbW1lZGlhdGVseSBmcm9tIHRoZQorICAgICAgICBkZWZl
cnJlZCBjYW52YXMgcXVldWUuIFJlcXVlc3QgaXMgcmVsYXllZCB0byBTa0RlZmVycmVkQ2FudmFz
LgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckJyaWRnZTo6Y29udGV4dEFjcXVpcmVk
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQnJp
ZGdlLmg6CisgICAgICAgIChDYW52YXMyRExheWVyQnJpZGdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhczJETGF5ZXJCcmlkZ2U6OmJ5dGVzQWxsb2NhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhczJETGF5ZXJCcmlkZ2U6OnVwZGF0ZUJ5dGVzQWxsb2NhdGVkKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyTWFuYWdlci5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyTWFu
YWdlcjo6Q2FudmFzMkRMYXllck1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRM
YXllck1hbmFnZXI6On5DYW52YXMyRExheWVyTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpD
YW52YXMyRExheWVyTWFuYWdlcjo6aW5pdCk6CisgICAgICAgIFNldHMgdGhlIGdsb2JhbCBsaW1p
dCBmb3IgdGhlIG1heGltdW0gdG90YWwgbnVtYmVyIG9mIGJ5dGVzIGFsbG9jYXRlZAorICAgICAg
ICBieSBkZWZlcnJlZCBsYXllcnMuCisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyTWFu
YWdlcjo6Z2V0KToKKyAgICAgICAgU2luZ2xldG9uIGFjY2Vzc29yCisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXMyRExheWVyTWFuYWdlcjo6bGF5ZXJEaWREcmF3KToKKyAgICAgICAgQ2FsbGVkIGJ5
IENhbnZhczJETGF5ZXJCcmlkZ2UgdG8gaW5kaWNhdGUgdGhhdCB0aGUgbGF5ZXIgd2FzIGRyYXdu
IHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllck1hbmFnZXI6OmFkZExheWVyVG9M
aXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJNYW5hZ2VyOjpsYXllckFsbG9j
YXRlZFN0b3JhZ2VDaGFuZ2VkKToKKyAgICAgICAgQ2FsbGVkIGJ5IENhbnZhczJETGF5ZXJCcmlk
Z2UgdG8gaW5kaWNhdGUgdGhldCB0aGUgbWVtb3J5IGNvbnN1bWVkIGJ5CisgICAgICAgIHRoZSBs
YXllciBoYXMgY2hhbmdlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJNYW5hZ2Vy
OjpsYXllckRpZEZsdXNoKToKKyAgICAgICAgQ2FsbGVkIGJ5IENhbnZhczJETGF5ZXJCcmlkZ2Ug
dG8gaW5kaWNhdGVkIHRoYXQgdGhlIHBlbmRpbmcgZHJhdworICAgICAgICBjb21tYW5kcyBvZiB0
aGUgbGF5ZXIgd2VyZSBmbHVzaGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllck1h
bmFnZXI6OmxheWVyVG9CZURlc3Ryb3llZCk6CisgICAgICAgIENhbGxlZCBieSBDYW52YXMyRExh
eWVyQnJpZGdlIHVwb24gZGVzdHJ1Y3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExh
eWVyTWFuYWdlcjo6ZnJlZU1lbW9yeUlmTmVjZXNzYXJ5KToKKyAgICAgICAgQ2FsbGVkIGludGVy
bmFsbHkuIENoZWNrIHRoYXQgY3VycmVudCBtZW1vcnkgY29uc3VtcHRpb24gaXMgYmVsb3cKKyAg
ICAgICAgdGhlIHRvbGVyYXRlZCBsaW1pdC4gIElmIGNoZWNrIGZhaWxzLCBpbnRpYXRlcyByZXNv
dXJjZSByZWxlYXNlcy4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJNYW5hZ2VyOjpy
ZW1vdmVMYXllckZyb21MaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJNYW5h
Z2VyOjppc0luTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyTWFuYWdlcjo6
dXBkYXRlQnl0ZXNBbGxvY2F0ZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0NhbnZhczJETGF5ZXJNYW5hZ2VyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChDYW52YXMyRExheWVyTWFuYWdlcik6CisKIDIwMTItMDgtMjQgIEFuaXNoIEJoYXlh
bmkgIDxhbmlzaC5iaGF5YW5pQGdtYWlsLmNvbT4KIAogICAgICAgICB3ZWJraXQtaW1hZ2Utc2V0
KCkgZnVuY3Rpb24gbm90IHNob3dpbmcgdXAgd2hlbiBjb21wdXRpbmcgYmFja2dyb3VuZCBwcm9w
ZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gMTI2NjEyKQorKysgU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0zNjU0LDYgKzM2NTQsOCBAQAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0FuaW1hdGlvblRyYW5zbGF0
aW9uVXRpbC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52
YXMyRExheWVyQnJpZGdlLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ2FudmFzMkRMYXllckJyaWRnZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyTWFuYWdlci5jcHAnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJNYW5hZ2VyLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbXBvc2l0b3JIVURGb250QXRsYXMu
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db21wb3NpdG9y
SFVERm9udEF0bGFzLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0Nyb3NzUHJvY2Vzc0ZvbnRMb2FkaW5nLmgnLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckJyaWRnZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXll
ckJyaWRnZS5jcHAJKHJldmlzaW9uIDEyNjYxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJCcmlkZ2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiQ2FudmFzMkRMYXllckJyaWRnZS5oIgogCiAj
aW5jbHVkZSAiQ0NSZW5kZXJlckdMLmgiIC8vIEZvciB0aGUgR0xDKCkgbWFjcm8uCisjaW5jbHVk
ZSAiQ2FudmFzMkRMYXllck1hbmFnZXIuaCIKICNpbmNsdWRlICJHckNvbnRleHQuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZS5oIgpAQCAtNTMsNiArNTQsOSBAQCBDYW52YXMyRExheWVyQnJpZGdlOjpDYW52YXMyRExh
eWVyQnJpZGdlCiAgICAgLCBtX3NpemUoc2l6ZSkKICAgICAsIG1fY2FudmFzKDApCiAgICAgLCBt
X2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1fYnl0ZXNBbGxvY2F0ZWQoMCkKKyAgICAsIG1fbmV4
dCgwKQorICAgICwgbV9wcmV2KDApCiB7CiAgICAgaWYgKG1fdXNlRG91YmxlQnVmZmVyaW5nKSB7
CiAgICAgICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CkBAIC03Niw2ICs4MCw3
IEBAIENhbnZhczJETGF5ZXJCcmlkZ2U6OkNhbnZhczJETGF5ZXJCcmlkZ2UKIAogQ2FudmFzMkRM
YXllckJyaWRnZTo6fkNhbnZhczJETGF5ZXJCcmlkZ2UoKQogeworICAgIENhbnZhczJETGF5ZXJN
YW5hZ2VyOjpnZXQoKS5sYXllclRvQmVEZXN0cm95ZWQodGhpcyk7CiAgICAgaWYgKFNrRGVmZXJy
ZWRDYW52YXMqIGRlZmVycmVkID0gZGVmZXJyZWRDYW52YXMoKSkKICAgICAgICAgZGVmZXJyZWQt
PnNldE5vdGlmaWNhdGlvbkNsaWVudCgwKTsKICAgICBtX2xheWVyLT5zZXRUZXh0dXJlSWQoMCk7
CkBAIC0xMDEsNiArMTA2LDM0IEBAIHZvaWQgQ2FudmFzMkRMYXllckJyaWRnZTo6cHJlcGFyZUZv
ckRyYXcKICAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwogfQogCit2b2lkIENh
bnZhczJETGF5ZXJCcmlkZ2U6OnN0b3JhZ2VBbGxvY2F0ZWRGb3JSZWNvcmRpbmdDaGFuZ2VkKHNp
emVfdCBieXRlc0FsbG9jYXRlZCkKK3sKKyAgICBBU1NFUlQobV9kZWZlcnJhbE1vZGUgPT0gRGVm
ZXJyZWQpOworICAgIGludHB0cl90IGRlbHRhID0gKGludHB0cl90KWJ5dGVzQWxsb2NhdGVkIC0g
KGludHB0cl90KW1fYnl0ZXNBbGxvY2F0ZWQ7CisgICAgbV9ieXRlc0FsbG9jYXRlZCA9IGJ5dGVz
QWxsb2NhdGVkOworICAgIENhbnZhczJETGF5ZXJNYW5hZ2VyOjpnZXQoKS5sYXllckFsbG9jYXRl
ZFN0b3JhZ2VDaGFuZ2VkKHRoaXMsIGRlbHRhKTsKK30KKwordm9pZCBDYW52YXMyRExheWVyQnJp
ZGdlOjpmbHVzaGVkRHJhd0NvbW1hbmRzKCkKK3sKKyAgICBzdG9yYWdlQWxsb2NhdGVkRm9yUmVj
b3JkaW5nQ2hhbmdlZChkZWZlcnJlZENhbnZhcygpLT5zdG9yYWdlQWxsb2NhdGVkRm9yUmVjb3Jk
aW5nKCkpOworfQorCitzaXplX3QgQ2FudmFzMkRMYXllckJyaWRnZTo6ZnJlZU1lbW9yeUlmUG9z
c2libGUoc2l6ZV90IGJ5dGVzVG9GcmVlKQoreworICAgIEFTU0VSVChkZWZlcnJlZENhbnZhcygp
KTsKKyAgICBzaXplX3QgYnl0ZXNGcmVlZCA9IGRlZmVycmVkQ2FudmFzKCktPmZyZWVNZW1vcnlJ
ZlBvc3NpYmxlKGJ5dGVzVG9GcmVlKTsKKyAgICBDYW52YXMyRExheWVyTWFuYWdlcjo6Z2V0KCku
bGF5ZXJBbGxvY2F0ZWRTdG9yYWdlQ2hhbmdlZCh0aGlzLCAtKChpbnRwdHJfdClieXRlc0ZyZWVk
KSk7CisgICAgbV9ieXRlc0FsbG9jYXRlZCAtPSBieXRlc0ZyZWVkOworICAgIHJldHVybiBieXRl
c0ZyZWVkOworfQorCit2b2lkIENhbnZhczJETGF5ZXJCcmlkZ2U6OmZsdXNoKCkKK3sKKyAgICBB
U1NFUlQoZGVmZXJyZWRDYW52YXMoKSk7CisgICAgbV9jYW52YXMtPmZsdXNoKCk7Cit9CisKIFNr
Q2FudmFzKiBDYW52YXMyRExheWVyQnJpZGdlOjpza0NhbnZhcyhTa0RldmljZSogZGV2aWNlKQog
ewogICAgIEFTU0VSVCghbV9jYW52YXMpOwpAQCAtMTU0LDYgKzE4Nyw4IEBAIHZvaWQgQ2FudmFz
MkRMYXllckJyaWRnZTo6Y29udGV4dEFjcXVpcmUKIHsKICAgICBpZiAobV9kZWZlcnJhbE1vZGUg
PT0gTm9uRGVmZXJyZWQgJiYgIW1fdXNlRG91YmxlQnVmZmVyaW5nKQogICAgICAgICBtX2xheWVy
LT53aWxsTW9kaWZ5VGV4dHVyZSgpOworICAgIGVsc2UgaWYgKG1fZGVmZXJyYWxNb2RlID09IERl
ZmVycmVkKQorICAgICAgICBDYW52YXMyRExheWVyTWFuYWdlcjo6Z2V0KCkubGF5ZXJEaWREcmF3
KHRoaXMpOwogfQogCiB1bnNpZ25lZCBDYW52YXMyRExheWVyQnJpZGdlOjpiYWNrQnVmZmVyVGV4
dHVyZSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
YW52YXMyRExheWVyQnJpZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckJyaWRnZS5oCShyZXZpc2lvbiAxMjY2
MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMy
RExheWVyQnJpZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRl
ICJTa0RlZmVycmVkQ2FudmFzLmgiCiAjaW5jbHVkZSA8cHVibGljL1dlYkV4dGVybmFsVGV4dHVy
ZUxheWVyLmg+CiAjaW5jbHVkZSA8cHVibGljL1dlYkV4dGVybmFsVGV4dHVyZUxheWVyQ2xpZW50
Lmg+CisjaW5jbHVkZSA8d3RmL0RvdWJseUxpbmtlZExpc3QuaD4KICNpbmNsdWRlIDx3dGYvUGFz
c093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIApAQCAtNDMsNyArNDQsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIExheWVyQ2hyb21pdW07CiAKLWNsYXNzIENhbnZh
czJETGF5ZXJCcmlkZ2UgOiBwdWJsaWMgV2ViS2l0OjpXZWJFeHRlcm5hbFRleHR1cmVMYXllckNs
aWVudCwgcHVibGljIFNrRGVmZXJyZWRDYW52YXM6Ok5vdGlmaWNhdGlvbkNsaWVudCB7CitjbGFz
cyBDYW52YXMyRExheWVyQnJpZGdlIDogcHVibGljIFdlYktpdDo6V2ViRXh0ZXJuYWxUZXh0dXJl
TGF5ZXJDbGllbnQsIHB1YmxpYyBTa0RlZmVycmVkQ2FudmFzOjpOb3RpZmljYXRpb25DbGllbnQs
IHB1YmxpYyBEb3VibHlMaW5rZWRMaXN0Tm9kZTxDYW52YXMyRExheWVyQnJpZGdlPiB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoQ2FudmFzMkRMYXllckJyaWRnZSk7CiBwdWJsaWM6CiAgICAg
c3RhdGljIFBhc3NPd25QdHI8Q2FudmFzMkRMYXllckJyaWRnZT4gY3JlYXRlKFBhc3NSZWZQdHI8
R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUsIERlZmVycmFs
TW9kZSBkZWZlcnJhbE1vZGUsIHVuc2lnbmVkIHRleHR1cmVJZCkKQEAgLTU4LDcgKzU5LDE0IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQoKSBPVkVSUklERTsKIAogICAgIC8vIFNrRGVmZXJyZWRDYW52YXM6Ok5vdGlmaWNhdGlvbkNs
aWVudCBpbXBsZW1lbnRhdGlvbgotICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlRm9yRHJhdygpOwor
ICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlRm9yRHJhdygpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCBzdG9yYWdlQWxsb2NhdGVkRm9yUmVjb3JkaW5nQ2hhbmdlZChzaXplX3QpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBmbHVzaGVkRHJhd0NvbW1hbmRzKCkgT1ZFUlJJREU7CisKKyAg
ICAvLyBNZXRob2RzIHVzZWQgYnkgQ2FudmFzMkRMYXllck1hbmFnZXIKKyAgICB2aXJ0dWFsIHNp
emVfdCBmcmVlTWVtb3J5SWZQb3NzaWJsZShzaXplX3QpOyAvLyB2aXJ0dWFsIGZvciBtb2NraW5n
CisgICAgdmlydHVhbCB2b2lkIGZsdXNoKCk7IC8vIHZpcnR1YWwgZm9yIG1vY2tpbmcKKyAgICBz
aXplX3QgYnl0ZXNBbGxvY2F0ZWQoKSBjb25zdCB7cmV0dXJuIG1fYnl0ZXNBbGxvY2F0ZWQ7fQog
CiAgICAgU2tDYW52YXMqIHNrQ2FudmFzKFNrRGV2aWNlKik7CiAgICAgV2ViS2l0OjpXZWJMYXll
ciogbGF5ZXIoKTsKQEAgLTY2LDcgKzc0LDcgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgYmFj
a0J1ZmZlclRleHR1cmUoKTsKIAotcHJpdmF0ZToKK3Byb3RlY3RlZDoKICAgICBDYW52YXMyRExh
eWVyQnJpZGdlKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBjb25zdCBJbnRTaXplJiwg
RGVmZXJyYWxNb2RlLCB1bnNpZ25lZCB0ZXh0dXJlSWQpOwogICAgIFNrRGVmZXJyZWRDYW52YXMq
IGRlZmVycmVkQ2FudmFzKCk7CiAKQEAgLTc4LDYgKzg2LDExIEBAIHByaXZhdGU6CiAgICAgU2tD
YW52YXMqIG1fY2FudmFzOwogICAgIE93blB0cjxXZWJLaXQ6OldlYkV4dGVybmFsVGV4dHVyZUxh
eWVyPiBtX2xheWVyOwogICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0Owor
ICAgIHNpemVfdCBtX2J5dGVzQWxsb2NhdGVkOworCisgICAgZnJpZW5kIGNsYXNzIFdURjo6RG91
Ymx5TGlua2VkTGlzdE5vZGU8Q2FudmFzMkRMYXllckJyaWRnZT47CisgICAgQ2FudmFzMkRMYXll
ckJyaWRnZSogbV9uZXh0OworICAgIENhbnZhczJETGF5ZXJCcmlkZ2UqIG1fcHJldjsKIH07CiAK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZh
czJETGF5ZXJNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyTWFuYWdlci5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExh
eWVyTWFuYWdlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTM1IEBACisvKgorQ29weXJp
Z2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFO
WQorRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CitESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OCitBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkNhbnZhczJETGF5ZXJNYW5hZ2VyLmgiCisK
KyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSB7CitlbnVtIHsKKyAg
ICBEZWZhdWx0TWF4Qnl0ZXNBbGxvY2F0ZWQgPSA2NCoxMDI0KjEwMjQsCisgICAgRGVmYXVsdFRh
cmdldEJ5dGVzQWxsb2NhdGVkID0gMTYqMTAyNCoxMDI0LAorfTsKK30KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitDYW52YXMyRExheWVyTWFuYWdlcjo6Q2FudmFzMkRMYXllck1hbmFnZXIoKQor
ICAgIDogbV9ieXRlc0FsbG9jYXRlZCgwKQorICAgICwgbV9tYXhCeXRlc0FsbG9jYXRlZChEZWZh
dWx0TWF4Qnl0ZXNBbGxvY2F0ZWQpCisgICAgLCBtX3RhcmdldEJ5dGVzQWxsb2NhdGVkKERlZmF1
bHRUYXJnZXRCeXRlc0FsbG9jYXRlZCkKK3sKK30KKworQ2FudmFzMkRMYXllck1hbmFnZXI6On5D
YW52YXMyRExheWVyTWFuYWdlcigpCit7CisgICAgQVNTRVJUKCFtX2J5dGVzQWxsb2NhdGVkKTsK
KyAgICBBU1NFUlQoIW1fbGF5ZXJMaXN0LmhlYWQoKSk7Cit9CisKK3ZvaWQgQ2FudmFzMkRMYXll
ck1hbmFnZXI6OmluaXQoc2l6ZV90IG1heEJ5dGVzQWxsb2NhdGVkLCBzaXplX3QgdGFyZ2V0Qnl0
ZXNBbGxvY2F0ZWQpCit7CisgICAgQVNTRVJUKG1heEJ5dGVzQWxsb2NhdGVkID49IHRhcmdldEJ5
dGVzQWxsb2NhdGVkKTsKKyAgICBtX21heEJ5dGVzQWxsb2NhdGVkID0gbWF4Qnl0ZXNBbGxvY2F0
ZWQ7CisgICAgbV90YXJnZXRCeXRlc0FsbG9jYXRlZCA9IHRhcmdldEJ5dGVzQWxsb2NhdGVkOwor
fQorCitDYW52YXMyRExheWVyTWFuYWdlciYgQ2FudmFzMkRMYXllck1hbmFnZXI6OmdldCgpCit7
CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDYW52YXMyRExheWVyTWFuYWdlciwgbWFuYWdlciwg
KCkpOworICAgIHJldHVybiBtYW5hZ2VyOworfQorCit2b2lkIENhbnZhczJETGF5ZXJNYW5hZ2Vy
OjpsYXllckRpZERyYXcoQ2FudmFzMkRMYXllckJyaWRnZSogbGF5ZXIpCit7CisgICAgaWYgKGlz
SW5MaXN0KGxheWVyKSkgeworICAgICAgICBpZiAobGF5ZXIgIT0gbV9sYXllckxpc3QuaGVhZCgp
KSB7CisgICAgICAgICAgICBtX2xheWVyTGlzdC5yZW1vdmUobGF5ZXIpOworICAgICAgICAgICAg
bV9sYXllckxpc3QucHVzaChsYXllcik7IC8vIFNldCBhcyBNUlUKKyAgICAgICAgfQorICAgIH0g
ZWxzZQorICAgICAgICBhZGRMYXllclRvTGlzdChsYXllcik7IAorfQorCit2b2lkIENhbnZhczJE
TGF5ZXJNYW5hZ2VyOjphZGRMYXllclRvTGlzdChDYW52YXMyRExheWVyQnJpZGdlKiBsYXllcikK
K3sKKyAgICBBU1NFUlQoIWlzSW5MaXN0KGxheWVyKSk7CisgICAgbV9ieXRlc0FsbG9jYXRlZCAr
PSBsYXllci0+Ynl0ZXNBbGxvY2F0ZWQoKTsKKyAgICBtX2xheWVyTGlzdC5wdXNoKGxheWVyKTsg
Ly8gU2V0IGFzIE1SVQorfQorCit2b2lkIENhbnZhczJETGF5ZXJNYW5hZ2VyOjpsYXllckFsbG9j
YXRlZFN0b3JhZ2VDaGFuZ2VkKENhbnZhczJETGF5ZXJCcmlkZ2UqIGxheWVyLCBpbnRwdHJfdCBk
ZWx0YUJ5dGVzKQoreworICAgIGlmICghaXNJbkxpc3QobGF5ZXIpKQorICAgICAgICBhZGRMYXll
clRvTGlzdChsYXllcik7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVCgoaW50cHRyX3QpbV9i
eXRlc0FsbG9jYXRlZCArIGRlbHRhQnl0ZXMgPiAwKTsgCisgICAgICAgIG1fYnl0ZXNBbGxvY2F0
ZWQgPSAoaW50cHRyX3QpbV9ieXRlc0FsbG9jYXRlZCArIGRlbHRhQnl0ZXM7CisgICAgfQorICAg
IGZyZWVNZW1vcnlJZk5lY2Vzc2FyeSgpOworfQorCit2b2lkIENhbnZhczJETGF5ZXJNYW5hZ2Vy
OjpsYXllclRvQmVEZXN0cm95ZWQoQ2FudmFzMkRMYXllckJyaWRnZSogbGF5ZXIpCit7CisgICAg
aWYgKGlzSW5MaXN0KGxheWVyKSkKKyAgICAgICAgcmVtb3ZlTGF5ZXJGcm9tTGlzdChsYXllcik7
Cit9CisKK3ZvaWQgQ2FudmFzMkRMYXllck1hbmFnZXI6OmZyZWVNZW1vcnlJZk5lY2Vzc2FyeSgp
IAoreworICAgIGlmIChtX2J5dGVzQWxsb2NhdGVkID4gbV9tYXhCeXRlc0FsbG9jYXRlZCkgewor
ICAgICAgICAvLyBQYXNzIDE6IEZyZWUgbWVtb3J5IGZyb20gY2FjaGVzCisgICAgICAgIENhbnZh
czJETGF5ZXJCcmlkZ2UqIGxheWVyID0gbV9sYXllckxpc3QudGFpbCgpOyAvLyBMUlUKKyAgICAg
ICAgd2hpbGUgKG1fYnl0ZXNBbGxvY2F0ZWQgPiBtX3RhcmdldEJ5dGVzQWxsb2NhdGVkICYmIGxh
eWVyKSB7CisgICAgICAgICAgICBsYXllci0+ZnJlZU1lbW9yeUlmUG9zc2libGUobV9ieXRlc0Fs
bG9jYXRlZCAtIG1fdGFyZ2V0Qnl0ZXNBbGxvY2F0ZWQpOworICAgICAgICAgICAgbGF5ZXIgPSBs
YXllci0+cHJldigpOworICAgICAgICB9CisKKyAgICAgICAgLy8gUGFzcyAyOiBGbHVzaCBjYW52
YXNlcworICAgICAgICBDYW52YXMyRExheWVyQnJpZGdlKiBsZWFzdFJlY2VudGx5VXNlZExheWVy
ID0gbV9sYXllckxpc3QudGFpbCgpOworICAgICAgICB3aGlsZSAobV9ieXRlc0FsbG9jYXRlZCA+
IG1fdGFyZ2V0Qnl0ZXNBbGxvY2F0ZWQgJiYgbGVhc3RSZWNlbnRseVVzZWRMYXllcikgeworICAg
ICAgICAgICAgbGVhc3RSZWNlbnRseVVzZWRMYXllci0+Zmx1c2goKTsKKyAgICAgICAgICAgIGxl
YXN0UmVjZW50bHlVc2VkTGF5ZXItPmZyZWVNZW1vcnlJZlBvc3NpYmxlKH4wKTsKKyAgICAgICAg
ICAgIHJlbW92ZUxheWVyRnJvbUxpc3QobGVhc3RSZWNlbnRseVVzZWRMYXllcik7CisgICAgICAg
ICAgICBsZWFzdFJlY2VudGx5VXNlZExheWVyID0gbV9sYXllckxpc3QudGFpbCgpOworICAgICAg
ICB9CisgICAgfQorfQorCit2b2lkIENhbnZhczJETGF5ZXJNYW5hZ2VyOjpyZW1vdmVMYXllckZy
b21MaXN0KENhbnZhczJETGF5ZXJCcmlkZ2UqIGxheWVyKQoreworICAgIEFTU0VSVChpc0luTGlz
dChsYXllcikpOworICAgIG1fYnl0ZXNBbGxvY2F0ZWQgLT0gbGF5ZXItPmJ5dGVzQWxsb2NhdGVk
KCk7CisgICAgbV9sYXllckxpc3QucmVtb3ZlKGxheWVyKTsKKyAgICBsYXllci0+c2V0TmV4dCgw
KTsKKyAgICBsYXllci0+c2V0UHJldigwKTsKK30KKworYm9vbCBDYW52YXMyRExheWVyTWFuYWdl
cjo6aXNJbkxpc3QoQ2FudmFzMkRMYXllckJyaWRnZSogbGF5ZXIpCit7CisgICAgcmV0dXJuIGxh
eWVyLT5wcmV2KCkgfHwgbV9sYXllckxpc3QuaGVhZCgpID09IGxheWVyOworfQorCit9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVy
TWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NhbnZhczJETGF5ZXJNYW5hZ2VyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyTWFuYWdlci5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYyIEBACisvKgorQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCith
cmUgbWV0OgorMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgICAgCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKK0VYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpZm5kZWYgQ2Fu
dmFzMkRMYXllck1hbmFnZXJfaAorI2RlZmluZSBDYW52YXMyRExheWVyTWFuYWdlcl9oCisKKyNp
bmNsdWRlICJDYW52YXMyRExheWVyQnJpZGdlLmgiCisKK2NsYXNzIENhbnZhczJETGF5ZXJNYW5h
Z2VyVGVzdDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDYW52YXMyRExheWVyTWFu
YWdlciB7CitwdWJsaWM6CisgICAgc3RhdGljIENhbnZhczJETGF5ZXJNYW5hZ2VyJiBnZXQoKTsK
KyAgICB2b2lkIGluaXQoc2l6ZV90IG1heEJ5dGVzQWxsb2NhdGVkLCBzaXplX3QgdGFyZ2V0Qnl0
ZXNBbGxvY2F0ZWQpOworICAgIHZpcnR1YWwgfkNhbnZhczJETGF5ZXJNYW5hZ2VyKCk7CisKKyAg
ICB2b2lkIGxheWVyQWxsb2NhdGVkU3RvcmFnZUNoYW5nZWQoQ2FudmFzMkRMYXllckJyaWRnZSos
IGludHB0cl90IGRlbHRhQnl0ZXMpOworICAgIHZvaWQgbGF5ZXJEaWREcmF3KENhbnZhczJETGF5
ZXJCcmlkZ2UqKTsKKyAgICB2b2lkIGxheWVyVG9CZURlc3Ryb3llZChDYW52YXMyRExheWVyQnJp
ZGdlKik7Citwcml2YXRlOgorICAgIENhbnZhczJETGF5ZXJNYW5hZ2VyKCk7CisKKyAgICAvLyBp
bnRlcm5hbCBtZXRob2RzCisgICAgdm9pZCBmcmVlTWVtb3J5SWZOZWNlc3NhcnkoKTsKKyAgICBi
b29sIGlzSW5MaXN0KENhbnZhczJETGF5ZXJCcmlkZ2UqKTsKKyAgICB2b2lkIGFkZExheWVyVG9M
aXN0KENhbnZhczJETGF5ZXJCcmlkZ2UqKTsKKyAgICB2b2lkIHJlbW92ZUxheWVyRnJvbUxpc3Qo
Q2FudmFzMkRMYXllckJyaWRnZSopOworCisgICAgc2l6ZV90IG1fYnl0ZXNBbGxvY2F0ZWQ7Cisg
ICAgc2l6ZV90IG1fbWF4Qnl0ZXNBbGxvY2F0ZWQ7CisgICAgc2l6ZV90IG1fdGFyZ2V0Qnl0ZXNB
bGxvY2F0ZWQ7CisgICAgRG91Ymx5TGlua2VkTGlzdDxDYW52YXMyRExheWVyQnJpZGdlPiBtX2xh
eWVyTGlzdDsKKworICAgIGZyaWVuZCBjbGFzcyA6OkNhbnZhczJETGF5ZXJNYW5hZ2VyVGVzdDsg
Ly8gZm9yIHVuaXQgdGVzdGluZworfTsKKworfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCShyZXZpc2lvbiAxMjY2MTIpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDEyLTA4LTIzICBK
dXN0aW4gTm92b3NhZCAgPGp1bm92QGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1d
IEltcGxlbWVudGluZyBhIGdsb2JhbCBsaW1pdCBvbiBtZW1vcnkgY29uc3VtZWQgYnkgZGVmZXJy
ZWQgMkQgY2FudmFzZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTk0Mzg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWRkaW5nIHVuaXQgdGVzdHMgZm9yIFdlYkNvcmU6OkNhbnZhczJETGF5ZXJNYW5hZ2Vy
CisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiB0ZXN0cy9DYW52YXMyRExheWVy
TWFuYWdlclRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKEZha2VDYW52YXMyRExheWVyQnJpZGdl
KToKKyAgICAgICAgKEZha2VDYW52YXMyRExheWVyQnJpZGdlOjpGYWtlQ2FudmFzMkRMYXllckJy
aWRnZSk6CisgICAgICAgIChGYWtlQ2FudmFzMkRMYXllckJyaWRnZTo6ZmFrZUZyZWVhYmxlQnl0
ZXMpOgorICAgICAgICAoQ2FudmFzMkRMYXllck1hbmFnZXJUZXN0KToKKyAgICAgICAgKENhbnZh
czJETGF5ZXJNYW5hZ2VyVGVzdDo6c3RvcmFnZUFsbG9jYXRpb25UcmFja2luZ1Rlc3QpOgorICAg
ICAgICAoQ2FudmFzMkRMYXllck1hbmFnZXJUZXN0OjpldmljdGlvblRlc3QpOgorICAgICAgICAo
Q2FudmFzMkRMYXllck1hbmFnZXJUZXN0OjpmbHVzaEV2aWN0aW9uVGVzdCk6CisKIDIwMTItMDgt
MjQgIENyaXMgTmVja2FyICA8Y2RuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBQbHVtYiBjb25z
dW1lVXNlckdlc3R1cmUoKSB0byB0aGUgY2hyb21pdW0gcGxhdGZvcm0gbGF5ZXIuCkluZGV4OiBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkJKHJldmlzaW9uIDEyNjYxMikKKysrIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDcg
QEAKICAgICAgICAgICAgICd0ZXN0cy9BcmVuYVRlc3RIZWxwZXJzLmgnLAogICAgICAgICAgICAg
J3Rlc3RzL0Fzc29jaWF0ZWRVUkxMb2FkZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMv
Q2FudmFzMkRMYXllckJyaWRnZVRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9DYW52YXMy
RExheWVyTWFuYWdlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0FjdGl2ZUFuaW1h
dGlvblRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24u
Y3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uaCcsCkluZGV4
OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJETGF5ZXJNYW5hZ2VyVGVzdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DYW52YXMyRExh
eWVyTWFuYWdlclRlc3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DYW52YXMyRExheWVyTWFuYWdlclRlc3QuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDE1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVk
ZSAiQ2FudmFzMkRMYXllck1hbmFnZXIuaCIKKworI2luY2x1ZGUgIkZha2VXZWJHcmFwaGljc0Nv
bnRleHQzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIgorI2luY2x1
ZGUgPGdtb2NrL2dtb2NrLmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7Cit1c2luZyB0ZXN0aW5nOjpJblNlcXVlbmNlOwordXNpbmcgdGVzdGlu
Zzo6UmV0dXJuOwordXNpbmcgdGVzdGluZzo6VGVzdDsKKworCitjbGFzcyBGYWtlQ2FudmFzMkRM
YXllckJyaWRnZSA6IHB1YmxpYyBDYW52YXMyRExheWVyQnJpZGdlIHsKK3B1YmxpYzoKKyAgICBG
YWtlQ2FudmFzMkRMYXllckJyaWRnZSgpIAorICAgICAgICA6IENhbnZhczJETGF5ZXJCcmlkZ2Uo
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29u
dGV4dChhZG9wdFB0cihuZXcgV2ViS2l0OjpGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QpKSwgSW50
U2l6ZSgxLCAxKSwgRGVmZXJyZWQsIDApCisgICAgICAgICwgbV9mcmVlYWJsZUJ5dGVzKDApCisg
ICAgICAgICwgbV9mcmVlTWVtb3J5SWZQb3NzaWJsZUNvdW50KDApCisgICAgICAgICwgbV9mbHVz
aENvdW50KDApCisgICAgeworICAgIH0KKworICAgIHZvaWQgZmFrZUZyZWVhYmxlQnl0ZXMoc2l6
ZV90IHNpemUpCisgICAgeworICAgICAgICBtX2ZyZWVhYmxlQnl0ZXMgPSBzaXplOworICAgIH0K
KworICAgIHZpcnR1YWwgc2l6ZV90IGZyZWVNZW1vcnlJZlBvc3NpYmxlKHNpemVfdCBzaXplKSBP
VkVSUklERQorICAgIHsKKyAgICAgICAgbV9mcmVlTWVtb3J5SWZQb3NzaWJsZUNvdW50Kys7Cisg
ICAgICAgIHNpemVfdCBieXRlc0ZyZWVkID0gc2l6ZSA8IG1fZnJlZWFibGVCeXRlcyA/IHNpemUg
OiBtX2ZyZWVhYmxlQnl0ZXM7CisgICAgICAgIG1fZnJlZWFibGVCeXRlcyAtPSBieXRlc0ZyZWVk
OworICAgICAgICBDYW52YXMyRExheWVyTWFuYWdlcjo6Z2V0KCkubGF5ZXJBbGxvY2F0ZWRTdG9y
YWdlQ2hhbmdlZCh0aGlzLCAtKChpbnRwdHJfdClieXRlc0ZyZWVkKSk7CisgICAgICAgIG1fYnl0
ZXNBbGxvY2F0ZWQgLT0gYnl0ZXNGcmVlZDsKKyAgICAgICAgcmV0dXJuIGJ5dGVzRnJlZWQ7Cisg
ICAgfQorCisgICAgdmlydHVhbCB2b2lkIGZsdXNoKCkgT1ZFUlJJREUKKyAgICB7CisgICAgICAg
IG1fZmx1c2hDb3VudCsrOworICAgIH0KKworcHVibGljOgorICAgIHNpemVfdCBtX2ZyZWVhYmxl
Qnl0ZXM7CisgICAgaW50IG1fZnJlZU1lbW9yeUlmUG9zc2libGVDb3VudDsKKyAgICBpbnQgbV9m
bHVzaENvdW50OworfTsKKworY2xhc3MgQ2FudmFzMkRMYXllck1hbmFnZXJUZXN0IDogcHVibGlj
IFRlc3QgeworcHJvdGVjdGVkOgorICAgIHZvaWQgc3RvcmFnZUFsbG9jYXRpb25UcmFja2luZ1Rl
c3QoKQorICAgIHsKKyAgICAgICAgQ2FudmFzMkRMYXllck1hbmFnZXImIG1hbmFnZXIgPSBDYW52
YXMyRExheWVyTWFuYWdlcjo6Z2V0KCk7CisgICAgICAgIG1hbmFnZXIuaW5pdCgxMCwgMTApOwor
ICAgICAgICB7CisgICAgICAgICAgICBGYWtlQ2FudmFzMkRMYXllckJyaWRnZSBsYXllcjE7Cisg
ICAgICAgICAgICBFWFBFQ1RfRVEoKHNpemVfdCkwLCBtYW5hZ2VyLm1fYnl0ZXNBbGxvY2F0ZWQp
OworICAgICAgICAgICAgbGF5ZXIxLnN0b3JhZ2VBbGxvY2F0ZWRGb3JSZWNvcmRpbmdDaGFuZ2Vk
KDEpOworICAgICAgICAgICAgRVhQRUNUX0VRKChzaXplX3QpMSwgbWFuYWdlci5tX2J5dGVzQWxs
b2NhdGVkKTsKKyAgICAgICAgICAgIC8vIFRlc3QgYWxsb2NhdGlvbiBpbmNyZWFzZQorICAgICAg
ICAgICAgbGF5ZXIxLnN0b3JhZ2VBbGxvY2F0ZWRGb3JSZWNvcmRpbmdDaGFuZ2VkKDIpOworICAg
ICAgICAgICAgRVhQRUNUX0VRKChzaXplX3QpMiwgbWFuYWdlci5tX2J5dGVzQWxsb2NhdGVkKTsK
KyAgICAgICAgICAgIC8vIFRlc3QgYWxsb2NhdGlvbiBkZWNyZWFzZQorICAgICAgICAgICAgbGF5
ZXIxLnN0b3JhZ2VBbGxvY2F0ZWRGb3JSZWNvcmRpbmdDaGFuZ2VkKDEpOworICAgICAgICAgICAg
RVhQRUNUX0VRKChzaXplX3QpMSwgbWFuYWdlci5tX2J5dGVzQWxsb2NhdGVkKTsKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBGYWtlQ2FudmFzMkRMYXllckJyaWRnZSBsYXllcjI7Cisg
ICAgICAgICAgICAgICAgRVhQRUNUX0VRKChzaXplX3QpMSwgbWFuYWdlci5tX2J5dGVzQWxsb2Nh
dGVkKTsKKyAgICAgICAgICAgICAgICAvLyB2ZXJpZnkgbXVsdGktbGF5ZXIgYWxsb2NhdGlvbiB0
cmFja2luZworICAgICAgICAgICAgICAgIGxheWVyMi5zdG9yYWdlQWxsb2NhdGVkRm9yUmVjb3Jk
aW5nQ2hhbmdlZCgyKTsKKyAgICAgICAgICAgICAgICBFWFBFQ1RfRVEoKHNpemVfdCkzLCBtYW5h
Z2VyLm1fYnl0ZXNBbGxvY2F0ZWQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gVmVy
aWZ5IHRyYWNraW5nIGFmdGVyIGRlc3RydWN0aW9uCisgICAgICAgICAgICBFWFBFQ1RfRVEoKHNp
emVfdCkxLCBtYW5hZ2VyLm1fYnl0ZXNBbGxvY2F0ZWQpOworICAgICAgICB9CisgICAgfQorCisg
ICAgdm9pZCBldmljdGlvblRlc3QoKQorICAgIHsKKyAgICAgICAgQ2FudmFzMkRMYXllck1hbmFn
ZXImIG1hbmFnZXIgPSBDYW52YXMyRExheWVyTWFuYWdlcjo6Z2V0KCk7CisgICAgICAgIG1hbmFn
ZXIuaW5pdCgxMCwgNSk7CisgICAgICAgIEZha2VDYW52YXMyRExheWVyQnJpZGdlIGxheWVyOwor
ICAgICAgICBsYXllci5mYWtlRnJlZWFibGVCeXRlcygxMCk7CisgICAgICAgIGxheWVyLnN0b3Jh
Z2VBbGxvY2F0ZWRGb3JSZWNvcmRpbmdDaGFuZ2VkKDgpOyAvLyB1bmRlciB0aGUgbWF4CisgICAg
ICAgIEVYUEVDVF9FUSgwLCBsYXllci5tX2ZyZWVNZW1vcnlJZlBvc3NpYmxlQ291bnQpOworICAg
ICAgICBsYXllci5zdG9yYWdlQWxsb2NhdGVkRm9yUmVjb3JkaW5nQ2hhbmdlZCgxMik7IC8vIG92
ZXIgdGhlIG1heAorICAgICAgICBFWFBFQ1RfRVEoMSwgbGF5ZXIubV9mcmVlTWVtb3J5SWZQb3Nz
aWJsZUNvdW50KTsKKyAgICAgICAgRVhQRUNUX0VRKChzaXplX3QpMywgbGF5ZXIubV9mcmVlYWJs
ZUJ5dGVzKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIGxheWVyLm1fZmx1c2hDb3VudCk7IC8vIGV2
aWN0aW9uIHN1Y2NlZWRlZCB3aXRob3V0IHRyaWdnZXJpbmcgYSBmbHVzaAorICAgICAgICBFWFBF
Q1RfRVEoKHNpemVfdCk1LCBsYXllci5ieXRlc0FsbG9jYXRlZCgpKTsKKyAgICB9CisKKyAgICB2
b2lkIGZsdXNoRXZpY3Rpb25UZXN0KCkKKyAgICB7CisgICAgICAgIENhbnZhczJETGF5ZXJNYW5h
Z2VyJiBtYW5hZ2VyID0gQ2FudmFzMkRMYXllck1hbmFnZXI6OmdldCgpOworICAgICAgICBtYW5h
Z2VyLmluaXQoMTAsIDUpOworICAgICAgICBGYWtlQ2FudmFzMkRMYXllckJyaWRnZSBsYXllcjsK
KyAgICAgICAgbGF5ZXIuZmFrZUZyZWVhYmxlQnl0ZXMoMSk7IC8vIE5vdCBlbm91Z2ggZnJlZWFi
bGUgYnl0ZXMsIHdpbGwgY2F1c2UgYWdncmVzc2l2ZSBldmljdGlvbiBieSBmbHVzaGluZworICAg
ICAgICBsYXllci5zdG9yYWdlQWxsb2NhdGVkRm9yUmVjb3JkaW5nQ2hhbmdlZCg4KTsgLy8gdW5k
ZXIgdGhlIG1heAorICAgICAgICBFWFBFQ1RfRVEoMCwgbGF5ZXIubV9mcmVlTWVtb3J5SWZQb3Nz
aWJsZUNvdW50KTsKKyAgICAgICAgbGF5ZXIuc3RvcmFnZUFsbG9jYXRlZEZvclJlY29yZGluZ0No
YW5nZWQoMTIpOyAvLyBvdmVyIHRoZSBtYXgKKyAgICAgICAgRVhQRUNUX0VRKDIsIGxheWVyLm1f
ZnJlZU1lbW9yeUlmUG9zc2libGVDb3VudCk7IC8vIFR3byB0cmllcywgb25lIGJlZm9yZSBmbHVz
aCwgb25lIGFmdGVyIGZsdXNoCisgICAgICAgIEVYUEVDVF9FUSgoc2l6ZV90KTAsIGxheWVyLm1f
ZnJlZWFibGVCeXRlcyk7CisgICAgICAgIEVYUEVDVF9FUSgxLCBsYXllci5tX2ZsdXNoQ291bnQp
OyAvLyBmbHVzaCB3YXMgYXR0ZW1wdGVkCisgICAgICAgIEVYUEVDVF9FUSgoc2l6ZV90KTExLCBs
YXllci5ieXRlc0FsbG9jYXRlZCgpKTsgLy8gZmx1c2ggZHJvcHMgdGhlIGxheWVyIGZyb20gbWFu
YWdlcidzIHRyYWNraW5nIGxpc3QKKyAgICAgICAgRVhQRUNUX0ZBTFNFKG1hbmFnZXIuaXNJbkxp
c3QoJmxheWVyKSk7CisgICAgfQorfTsKKworbmFtZXNwYWNlIHsKKworVEVTVF9GKENhbnZhczJE
TGF5ZXJNYW5hZ2VyVGVzdCwgdGVzdFN0b3JhZ2VBbGxvY2F0aW9uVHJhY2tpbmcpCit7CisgICAg
c3RvcmFnZUFsbG9jYXRpb25UcmFja2luZ1Rlc3QoKTsKK30KKworVEVTVF9GKENhbnZhczJETGF5
ZXJNYW5hZ2VyVGVzdCwgdGVzdEV2aWN0aW9uKQoreworICAgIGV2aWN0aW9uVGVzdCgpOworfQor
CitURVNUX0YoQ2FudmFzMkRMYXllck1hbmFnZXJUZXN0LCB0ZXN0Rmx1c2hFdmljdGlvbikKK3sK
KyAgICBmbHVzaEV2aWN0aW9uVGVzdCgpOworfQorCit9IC8vIG5hbWVzcGFjZQorCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160707</attachid>
            <date>2012-08-27 06:32:15 -0700</date>
            <delta_ts>2012-08-27 07:27:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94386-20120827093207.patch</filename>
            <type>text/plain</type>
            <size>25220</size>
            <attacher name="Justin Novosad">junov</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyNjc1MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgyIEBACisyMDEyLTA4LTI3ICBKdXN0aW4g
Tm92b3NhZCAgPGp1bm92QGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIEltcGxl
bWVudGluZyBhIGdsb2JhbCBsaW1pdCBvbiBtZW1vcnkgY29uc3VtZWQgYnkgZGVmZXJyZWQgMkQg
Y2FudmFzZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTk0Mzg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QmVmb3JlIHRoaXMgY2hhbmdlLCB0aGVyZSB3YXMgbm8gZ2xvYmFsIGJvdW5kIG9uIG1lbW9yeSB0
aGF0IGNvdWxkIGJlCisgICAgICAgIGNvbnN1bWVkIGZvciB0aGUgcHVycG9zZSBvZiByZWNvcmRp
bmcgMmQgY2FudmFzIGRlZmVycmVkIGRyYXcgY29tbWFuZHMuCisgICAgICAgIFRoZXJlIHdhcyBv
bmx5IGEgcGVyIGNhbnZhcyBsaW1pdC4gSXQgaXMgcG9zc2libGUgZm9yIGNhbnZhc2VzIHRvIGdl
dAorICAgICAgICBkZXJlZmVyZW5jZWQgd2l0aG91dCBmbHVzaGluZyBwZW5kaW5nIGRyYXcgY29t
bWFuZHMsIHdoaWNoIG1heSBsb2NrCisgICAgICAgIHJlc291cmNlcyB1bnRpbCB0aGUgY2FudmFz
IGVsZW1lbnQgaXMgZ2FyYmFnZSBjb2xsZWN0ZWQuIFRoaXMgbWFrZXMKKyAgICAgICAgaXQgcG9z
c2libGUgdG8gZ3JvdyBtZW1vcnkgY29uc3VtcHRpb24gaW5kZWZpbml0ZWx5IGJ5IGhpdHRpbmcg
cmVsb2FkCisgICAgICAgIHN1Y2Nlc3NpdmVseSBvbiBzb21lIGNhbnZhcy1pbnRlbnNpdmUgd2Vi
IHBhZ2VzLgorCisgICAgICAgIFRoZSBzb2x1dGlvbiBpbXBsZW1lbnRlZCBpbiB0aGlzIGNoYW5n
ZSBjb25zaXN0cyBpbiBtYWludGFpbmluZyBhCisgICAgICAgIGdsb2JhbCByZWdpc3RyeSBvZiBk
ZWZlcnJlZCBjYW52YXMgbGF5ZXJzIGFuZCB0cmFja2luZyB0aGUgc3VtIG9mCisgICAgICAgIG1l
bW9yeSBhbGxvY2F0ZWQgYnkgYWxsIGNhbnZhc2VzIGZvciB0aGUgcHVycG9zZSBvZiBzdG9yaW5n
IGRlZmVycmVkCisgICAgICAgIGRyYXcgY29tbWFuZHMuIFdoZW4gbWVtb3J5IGNvbnN1bXB0aW9u
IHJlYWNoZXMgdGhlIGFsbG93ZWQgbGltaXQsCisgICAgICAgIGNhY2hlcyBhcmUgY2xlYXJlZCBh
bmQgZHJhdyBvcGVyYXRpb25zIGFyZSBmbHVzaGVkIG9uIG9uZSBvciBzZXZlcmFsCisgICAgICAg
IGNhbnZhc2VzLCBzdGFydGluZyB3aXRoIHRoZSBsZWFzdCByZWNlbnRseSB1c2VkLCB1bnRpbCBt
ZW1vcnkKKyAgICAgICAgY29uc3VtcHRpb24gaXMgYmVsb3cgYSB0YXJnZXQgbGV2ZWwuCisKKyAg
ICAgICAgTmV3IHRlc3RzOiB3ZWJraXRfdW5pdF90ZXN0cyBEZWZlcnJlZExheWVyTWFuYWdlclRl
c3QqCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckJyaWRnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
YW52YXMyRExheWVyQnJpZGdlOjpDYW52YXMyRExheWVyQnJpZGdlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNhbnZhczJETGF5ZXJCcmlkZ2U6On5DYW52YXMyRExheWVyQnJpZGdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNhbnZhczJETGF5ZXJCcmlkZ2U6OnN0b3JhZ2VBbGxvY2F0ZWRGb3JSZWNvcmRp
bmdDaGFuZ2VkKToKKyAgICAgICAgT3ZlcmxvYWRlZCBmcm9tIFNrRGVmZXJyZWRDYW52YXM6Ok5v
dGlmaWNhdGlvbkNsaWVudC4gQ2FsbGVkIHdoZW4KKyAgICAgICAgdGhlcmUgaXMgYSBjaGFuZ2Ug
aW4gdGhlIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQgYnkgdGhlIGRlZmVycmVkCisgICAgICAg
IGNhbnZhcy4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRM
YXllckJyaWRnZTo6Zmx1c2hlZERyYXdDb21tYW5kcyk6CisgICAgICAgIE92ZXJsb2FkZWQgZnJv
bSBTa0RlZmVycmVkQ2FudmFzOjpOb3RpZmljYXRpb25DbGllbnQuIENhbGxlZCB3aGVuCisgICAg
ICAgIHBlbmRpbmcgZHJhdyBjb21tYW5kcyBhcmUgZmx1c2ggYnkgdGhlIGRlZmVycmVkIGNhbnZh
cy4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJCcmlkZ2U6OmZyZWVNZW1vcnlJZlBv
c3NpYmxlKToKKyAgICAgICAgQ2FsbGVkIGJ5IHRoZSBDYW52YXMyRExheWVyTWFuYWdlciB0byBy
ZXF1ZXN0IHRoZSByZWxlYXNlIG9mIHVubG9ja2VkCisgICAgICAgIG1lbW9yeSByZXNvdXJjZXMg
KGNhY2hlcykuIFJlcXVlc3QgaXMgcmVsYXllZCB0byBTa0RlZmVycmVkQ2FudmFzLgorICAgICAg
ICByZXR1cm5zIG51bWJlciBvZiBieXRlcyBmcmVlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
czJETGF5ZXJCcmlkZ2U6OmZsdXNoKToKKyAgICAgICAgUmVxdWVzdHMgdGhhdCBwZW5kaW5nIGRy
YXcgY29tbWFuZHMgYmUgZmx1c2hlZCBpbW1lZGlhdGVseSBmcm9tIHRoZQorICAgICAgICBkZWZl
cnJlZCBjYW52YXMgcXVldWUuIFJlcXVlc3QgaXMgcmVsYXllZCB0byBTa0RlZmVycmVkQ2FudmFz
LgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckJyaWRnZTo6Y29udGV4dEFjcXVpcmVk
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQnJp
ZGdlLmg6CisgICAgICAgIChDYW52YXMyRExheWVyQnJpZGdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhczJETGF5ZXJCcmlkZ2U6OmJ5dGVzQWxsb2NhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhczJETGF5ZXJCcmlkZ2U6OnVwZGF0ZUJ5dGVzQWxsb2NhdGVkKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyTWFuYWdlci5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyTWFu
YWdlcjo6Q2FudmFzMkRMYXllck1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRM
YXllck1hbmFnZXI6On5DYW52YXMyRExheWVyTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpD
YW52YXMyRExheWVyTWFuYWdlcjo6aW5pdCk6CisgICAgICAgIFNldHMgdGhlIGdsb2JhbCBsaW1p
dCBmb3IgdGhlIG1heGltdW0gdG90YWwgbnVtYmVyIG9mIGJ5dGVzIGFsbG9jYXRlZAorICAgICAg
ICBieSBkZWZlcnJlZCBsYXllcnMuCisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyTWFu
YWdlcjo6Z2V0KToKKyAgICAgICAgU2luZ2xldG9uIGFjY2Vzc29yCisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXMyRExheWVyTWFuYWdlcjo6bGF5ZXJEaWREcmF3KToKKyAgICAgICAgQ2FsbGVkIGJ5
IENhbnZhczJETGF5ZXJCcmlkZ2UgdG8gaW5kaWNhdGUgdGhhdCB0aGUgbGF5ZXIgd2FzIGRyYXdu
IHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllck1hbmFnZXI6OmFkZExheWVyVG9M
aXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJNYW5hZ2VyOjpsYXllckFsbG9j
YXRlZFN0b3JhZ2VDaGFuZ2VkKToKKyAgICAgICAgQ2FsbGVkIGJ5IENhbnZhczJETGF5ZXJCcmlk
Z2UgdG8gaW5kaWNhdGUgdGhldCB0aGUgbWVtb3J5IGNvbnN1bWVkIGJ5CisgICAgICAgIHRoZSBs
YXllciBoYXMgY2hhbmdlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJNYW5hZ2Vy
OjpsYXllckRpZEZsdXNoKToKKyAgICAgICAgQ2FsbGVkIGJ5IENhbnZhczJETGF5ZXJCcmlkZ2Ug
dG8gaW5kaWNhdGVkIHRoYXQgdGhlIHBlbmRpbmcgZHJhdworICAgICAgICBjb21tYW5kcyBvZiB0
aGUgbGF5ZXIgd2VyZSBmbHVzaGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllck1h
bmFnZXI6OmxheWVyVG9CZURlc3Ryb3llZCk6CisgICAgICAgIENhbGxlZCBieSBDYW52YXMyRExh
eWVyQnJpZGdlIHVwb24gZGVzdHJ1Y3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExh
eWVyTWFuYWdlcjo6ZnJlZU1lbW9yeUlmTmVjZXNzYXJ5KToKKyAgICAgICAgQ2FsbGVkIGludGVy
bmFsbHkuIENoZWNrIHRoYXQgY3VycmVudCBtZW1vcnkgY29uc3VtcHRpb24gaXMgYmVsb3cKKyAg
ICAgICAgdGhlIHRvbGVyYXRlZCBsaW1pdC4gIElmIGNoZWNrIGZhaWxzLCBpbnRpYXRlcyByZXNv
dXJjZSByZWxlYXNlcy4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJNYW5hZ2VyOjpy
ZW1vdmVMYXllckZyb21MaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJNYW5h
Z2VyOjppc0luTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyTWFuYWdlcjo6
dXBkYXRlQnl0ZXNBbGxvY2F0ZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0NhbnZhczJETGF5ZXJNYW5hZ2VyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChDYW52YXMyRExheWVyTWFuYWdlcik6CisKIDIwMTItMDgtMjcgIEt5dW5nVGFlIEtp
bSAgPGt0Zi5raW1Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAgW0VGTF0gV3JvbmcgYnV0dG9uIGhl
aWdodCBvbiBDU1MgdGVzdHMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDEyNjc1MSkK
KysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMzY1Myw2
ICszNjUzLDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Bbmlt
YXRpb25UcmFuc2xhdGlvblV0aWwuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ2FudmFzMkRMYXllckJyaWRnZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJCcmlkZ2UuaCcsCisgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllck1hbmFnZXIuY3BwJywKKyAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyTWFuYWdl
ci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db21wb3NpdG9y
SFVERm9udEF0bGFzLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ29tcG9zaXRvckhVREZvbnRBdGxhcy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Dcm9zc1Byb2Nlc3NGb250TG9hZGluZy5oJywKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJCcmlkZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NhbnZhczJETGF5ZXJCcmlkZ2UuY3BwCShyZXZpc2lvbiAxMjY3NTEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQnJpZGdlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkNhbnZhczJETGF5ZXJC
cmlkZ2UuaCIKIAogI2luY2x1ZGUgIkNDUmVuZGVyZXJHTC5oIiAvLyBGb3IgdGhlIEdMQygpIG1h
Y3JvLgorI2luY2x1ZGUgIkNhbnZhczJETGF5ZXJNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiR3JDb250
ZXh0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGUuaCIKQEAgLTUzLDYgKzU0LDkgQEAgQ2FudmFzMkRMYXllckJyaWRn
ZTo6Q2FudmFzMkRMYXllckJyaWRnZQogICAgICwgbV9zaXplKHNpemUpCiAgICAgLCBtX2NhbnZh
cygwKQogICAgICwgbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBtX2J5dGVzQWxsb2NhdGVkKDAp
CisgICAgLCBtX25leHQoMCkKKyAgICAsIG1fcHJldigwKQogewogICAgIGlmIChtX3VzZURvdWJs
ZUJ1ZmZlcmluZykgewogICAgICAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwpA
QCAtNzYsNiArODAsNyBAQCBDYW52YXMyRExheWVyQnJpZGdlOjpDYW52YXMyRExheWVyQnJpZGdl
CiAKIENhbnZhczJETGF5ZXJCcmlkZ2U6On5DYW52YXMyRExheWVyQnJpZGdlKCkKIHsKKyAgICBD
YW52YXMyRExheWVyTWFuYWdlcjo6Z2V0KCkubGF5ZXJUb0JlRGVzdHJveWVkKHRoaXMpOwogICAg
IGlmIChTa0RlZmVycmVkQ2FudmFzKiBkZWZlcnJlZCA9IGRlZmVycmVkQ2FudmFzKCkpCiAgICAg
ICAgIGRlZmVycmVkLT5zZXROb3RpZmljYXRpb25DbGllbnQoMCk7CiAgICAgbV9sYXllci0+c2V0
VGV4dHVyZUlkKDApOwpAQCAtMTAxLDYgKzEwNiwzNCBAQCB2b2lkIENhbnZhczJETGF5ZXJCcmlk
Z2U6OnByZXBhcmVGb3JEcmF3CiAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsK
IH0KIAordm9pZCBDYW52YXMyRExheWVyQnJpZGdlOjpzdG9yYWdlQWxsb2NhdGVkRm9yUmVjb3Jk
aW5nQ2hhbmdlZChzaXplX3QgYnl0ZXNBbGxvY2F0ZWQpCit7CisgICAgQVNTRVJUKG1fZGVmZXJy
YWxNb2RlID09IERlZmVycmVkKTsKKyAgICBpbnRwdHJfdCBkZWx0YSA9IChpbnRwdHJfdClieXRl
c0FsbG9jYXRlZCAtIChpbnRwdHJfdCltX2J5dGVzQWxsb2NhdGVkOworICAgIG1fYnl0ZXNBbGxv
Y2F0ZWQgPSBieXRlc0FsbG9jYXRlZDsKKyAgICBDYW52YXMyRExheWVyTWFuYWdlcjo6Z2V0KCku
bGF5ZXJBbGxvY2F0ZWRTdG9yYWdlQ2hhbmdlZCh0aGlzLCBkZWx0YSk7Cit9CisKK3ZvaWQgQ2Fu
dmFzMkRMYXllckJyaWRnZTo6Zmx1c2hlZERyYXdDb21tYW5kcygpCit7CisgICAgc3RvcmFnZUFs
bG9jYXRlZEZvclJlY29yZGluZ0NoYW5nZWQoZGVmZXJyZWRDYW52YXMoKS0+c3RvcmFnZUFsbG9j
YXRlZEZvclJlY29yZGluZygpKTsKK30KKworc2l6ZV90IENhbnZhczJETGF5ZXJCcmlkZ2U6OmZy
ZWVNZW1vcnlJZlBvc3NpYmxlKHNpemVfdCBieXRlc1RvRnJlZSkKK3sKKyAgICBBU1NFUlQoZGVm
ZXJyZWRDYW52YXMoKSk7CisgICAgc2l6ZV90IGJ5dGVzRnJlZWQgPSBkZWZlcnJlZENhbnZhcygp
LT5mcmVlTWVtb3J5SWZQb3NzaWJsZShieXRlc1RvRnJlZSk7CisgICAgQ2FudmFzMkRMYXllck1h
bmFnZXI6OmdldCgpLmxheWVyQWxsb2NhdGVkU3RvcmFnZUNoYW5nZWQodGhpcywgLSgoaW50cHRy
X3QpYnl0ZXNGcmVlZCkpOworICAgIG1fYnl0ZXNBbGxvY2F0ZWQgLT0gYnl0ZXNGcmVlZDsKKyAg
ICByZXR1cm4gYnl0ZXNGcmVlZDsKK30KKwordm9pZCBDYW52YXMyRExheWVyQnJpZGdlOjpmbHVz
aCgpCit7CisgICAgQVNTRVJUKGRlZmVycmVkQ2FudmFzKCkpOworICAgIG1fY2FudmFzLT5mbHVz
aCgpOworfQorCiBTa0NhbnZhcyogQ2FudmFzMkRMYXllckJyaWRnZTo6c2tDYW52YXMoU2tEZXZp
Y2UqIGRldmljZSkKIHsKICAgICBBU1NFUlQoIW1fY2FudmFzKTsKQEAgLTE1NCw2ICsxODcsOCBA
QCB2b2lkIENhbnZhczJETGF5ZXJCcmlkZ2U6OmNvbnRleHRBY3F1aXJlCiB7CiAgICAgaWYgKG1f
ZGVmZXJyYWxNb2RlID09IE5vbkRlZmVycmVkICYmICFtX3VzZURvdWJsZUJ1ZmZlcmluZykKICAg
ICAgICAgbV9sYXllci0+d2lsbE1vZGlmeVRleHR1cmUoKTsKKyAgICBlbHNlIGlmIChtX2RlZmVy
cmFsTW9kZSA9PSBEZWZlcnJlZCkKKyAgICAgICAgQ2FudmFzMkRMYXllck1hbmFnZXI6OmdldCgp
LmxheWVyRGlkRHJhdyh0aGlzKTsKIH0KIAogdW5zaWduZWQgQ2FudmFzMkRMYXllckJyaWRnZTo6
YmFja0J1ZmZlclRleHR1cmUoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckJyaWRnZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJCcmlkZ2UuaAko
cmV2aXNpb24gMTI2NzUxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ2FudmFzMkRMYXllckJyaWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3
IEBACiAjaW5jbHVkZSAiU2tEZWZlcnJlZENhbnZhcy5oIgogI2luY2x1ZGUgPHB1YmxpYy9XZWJF
eHRlcm5hbFRleHR1cmVMYXllci5oPgogI2luY2x1ZGUgPHB1YmxpYy9XZWJFeHRlcm5hbFRleHR1
cmVMYXllckNsaWVudC5oPgorI2luY2x1ZGUgPHd0Zi9Eb3VibHlMaW5rZWRMaXN0Lmg+CiAjaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKQEAgLTQz
LDcgKzQ0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBMYXllckNocm9taXVtOwog
Ci1jbGFzcyBDYW52YXMyRExheWVyQnJpZGdlIDogcHVibGljIFdlYktpdDo6V2ViRXh0ZXJuYWxU
ZXh0dXJlTGF5ZXJDbGllbnQsIHB1YmxpYyBTa0RlZmVycmVkQ2FudmFzOjpOb3RpZmljYXRpb25D
bGllbnQgeworY2xhc3MgQ2FudmFzMkRMYXllckJyaWRnZSA6IHB1YmxpYyBXZWJLaXQ6OldlYkV4
dGVybmFsVGV4dHVyZUxheWVyQ2xpZW50LCBwdWJsaWMgU2tEZWZlcnJlZENhbnZhczo6Tm90aWZp
Y2F0aW9uQ2xpZW50LCBwdWJsaWMgRG91Ymx5TGlua2VkTGlzdE5vZGU8Q2FudmFzMkRMYXllckJy
aWRnZT4gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENhbnZhczJETGF5ZXJCcmlkZ2UpOwog
cHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRyPENhbnZhczJETGF5ZXJCcmlkZ2U+IGNyZWF0
ZShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0LCBjb25zdCBJbnRTaXplJiBz
aXplLCBEZWZlcnJhbE1vZGUgZGVmZXJyYWxNb2RlLCB1bnNpZ25lZCB0ZXh0dXJlSWQpCkBAIC01
OCw3ICs1OSwxNCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBXZWJLaXQ6OldlYkdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0KCkgT1ZFUlJJREU7CiAKICAgICAvLyBTa0RlZmVycmVkQ2FudmFzOjpO
b3RpZmljYXRpb25DbGllbnQgaW1wbGVtZW50YXRpb24KLSAgICB2aXJ0dWFsIHZvaWQgcHJlcGFy
ZUZvckRyYXcoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZUZvckRyYXcoKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIHZvaWQgc3RvcmFnZUFsbG9jYXRlZEZvclJlY29yZGluZ0NoYW5nZWQoc2l6
ZV90KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZmx1c2hlZERyYXdDb21tYW5kcygpIE9W
RVJSSURFOworCisgICAgLy8gTWV0aG9kcyB1c2VkIGJ5IENhbnZhczJETGF5ZXJNYW5hZ2VyCisg
ICAgdmlydHVhbCBzaXplX3QgZnJlZU1lbW9yeUlmUG9zc2libGUoc2l6ZV90KTsgLy8gdmlydHVh
bCBmb3IgbW9ja2luZworICAgIHZpcnR1YWwgdm9pZCBmbHVzaCgpOyAvLyB2aXJ0dWFsIGZvciBt
b2NraW5nCisgICAgc2l6ZV90IGJ5dGVzQWxsb2NhdGVkKCkgY29uc3Qge3JldHVybiBtX2J5dGVz
QWxsb2NhdGVkO30KIAogICAgIFNrQ2FudmFzKiBza0NhbnZhcyhTa0RldmljZSopOwogICAgIFdl
YktpdDo6V2ViTGF5ZXIqIGxheWVyKCk7CkBAIC02Niw3ICs3NCw3IEBAIHB1YmxpYzoKIAogICAg
IHVuc2lnbmVkIGJhY2tCdWZmZXJUZXh0dXJlKCk7CiAKLXByaXZhdGU6Citwcm90ZWN0ZWQ6CiAg
ICAgQ2FudmFzMkRMYXllckJyaWRnZShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgY29u
c3QgSW50U2l6ZSYsIERlZmVycmFsTW9kZSwgdW5zaWduZWQgdGV4dHVyZUlkKTsKICAgICBTa0Rl
ZmVycmVkQ2FudmFzKiBkZWZlcnJlZENhbnZhcygpOwogCkBAIC03OCw2ICs4NiwxMSBAQCBwcml2
YXRlOgogICAgIFNrQ2FudmFzKiBtX2NhbnZhczsKICAgICBPd25QdHI8V2ViS2l0OjpXZWJFeHRl
cm5hbFRleHR1cmVMYXllcj4gbV9sYXllcjsKICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+
IG1fY29udGV4dDsKKyAgICBzaXplX3QgbV9ieXRlc0FsbG9jYXRlZDsKKworICAgIGZyaWVuZCBj
bGFzcyBXVEY6OkRvdWJseUxpbmtlZExpc3ROb2RlPENhbnZhczJETGF5ZXJCcmlkZ2U+OworICAg
IENhbnZhczJETGF5ZXJCcmlkZ2UqIG1fbmV4dDsKKyAgICBDYW52YXMyRExheWVyQnJpZGdlKiBt
X3ByZXY7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9DYW52YXMyRExheWVyTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllck1hbmFnZXIuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ2FudmFzMkRMYXllck1hbmFnZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzNiBA
QAorLyoKK0NvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KzIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCitUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORCBBTlkKK0VYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKK0xP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTgorQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
CitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyovCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJDYW52YXMyRExheWVy
TWFuYWdlci5oIgorCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2Ug
eworZW51bSB7CisgICAgRGVmYXVsdE1heEJ5dGVzQWxsb2NhdGVkID0gNjQqMTAyNCoxMDI0LAor
ICAgIERlZmF1bHRUYXJnZXRCeXRlc0FsbG9jYXRlZCA9IDE2KjEwMjQqMTAyNCwKK307Cit9CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ2FudmFzMkRMYXllck1hbmFnZXI6OkNhbnZhczJETGF5
ZXJNYW5hZ2VyKCkKKyAgICA6IG1fYnl0ZXNBbGxvY2F0ZWQoMCkKKyAgICAsIG1fbWF4Qnl0ZXNB
bGxvY2F0ZWQoRGVmYXVsdE1heEJ5dGVzQWxsb2NhdGVkKQorICAgICwgbV90YXJnZXRCeXRlc0Fs
bG9jYXRlZChEZWZhdWx0VGFyZ2V0Qnl0ZXNBbGxvY2F0ZWQpCit7Cit9CisKK0NhbnZhczJETGF5
ZXJNYW5hZ2VyOjp+Q2FudmFzMkRMYXllck1hbmFnZXIoKQoreworICAgIEFTU0VSVCghbV9ieXRl
c0FsbG9jYXRlZCk7CisgICAgQVNTRVJUKCFtX2xheWVyTGlzdC5oZWFkKCkpOworfQorCit2b2lk
IENhbnZhczJETGF5ZXJNYW5hZ2VyOjppbml0KHNpemVfdCBtYXhCeXRlc0FsbG9jYXRlZCwgc2l6
ZV90IHRhcmdldEJ5dGVzQWxsb2NhdGVkKQoreworICAgIEFTU0VSVChtYXhCeXRlc0FsbG9jYXRl
ZCA+PSB0YXJnZXRCeXRlc0FsbG9jYXRlZCk7CisgICAgbV9tYXhCeXRlc0FsbG9jYXRlZCA9IG1h
eEJ5dGVzQWxsb2NhdGVkOworICAgIG1fdGFyZ2V0Qnl0ZXNBbGxvY2F0ZWQgPSB0YXJnZXRCeXRl
c0FsbG9jYXRlZDsKK30KKworQ2FudmFzMkRMYXllck1hbmFnZXImIENhbnZhczJETGF5ZXJNYW5h
Z2VyOjpnZXQoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ2FudmFzMkRMYXllck1hbmFn
ZXIsIG1hbmFnZXIsICgpKTsKKyAgICByZXR1cm4gbWFuYWdlcjsKK30KKwordm9pZCBDYW52YXMy
RExheWVyTWFuYWdlcjo6bGF5ZXJEaWREcmF3KENhbnZhczJETGF5ZXJCcmlkZ2UqIGxheWVyKQor
eworICAgIGlmIChpc0luTGlzdChsYXllcikpIHsKKyAgICAgICAgaWYgKGxheWVyICE9IG1fbGF5
ZXJMaXN0LmhlYWQoKSkgeworICAgICAgICAgICAgbV9sYXllckxpc3QucmVtb3ZlKGxheWVyKTsK
KyAgICAgICAgICAgIG1fbGF5ZXJMaXN0LnB1c2gobGF5ZXIpOyAvLyBTZXQgYXMgTVJVCisgICAg
ICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgYWRkTGF5ZXJUb0xpc3QobGF5ZXIpOyAKK30KKwor
dm9pZCBDYW52YXMyRExheWVyTWFuYWdlcjo6YWRkTGF5ZXJUb0xpc3QoQ2FudmFzMkRMYXllckJy
aWRnZSogbGF5ZXIpCit7CisgICAgQVNTRVJUKCFpc0luTGlzdChsYXllcikpOworICAgIG1fYnl0
ZXNBbGxvY2F0ZWQgKz0gbGF5ZXItPmJ5dGVzQWxsb2NhdGVkKCk7CisgICAgbV9sYXllckxpc3Qu
cHVzaChsYXllcik7IC8vIFNldCBhcyBNUlUKK30KKwordm9pZCBDYW52YXMyRExheWVyTWFuYWdl
cjo6bGF5ZXJBbGxvY2F0ZWRTdG9yYWdlQ2hhbmdlZChDYW52YXMyRExheWVyQnJpZGdlKiBsYXll
ciwgaW50cHRyX3QgZGVsdGFCeXRlcykKK3sKKyAgICBpZiAoIWlzSW5MaXN0KGxheWVyKSkKKyAg
ICAgICAgYWRkTGF5ZXJUb0xpc3QobGF5ZXIpOworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQo
KGludHB0cl90KW1fYnl0ZXNBbGxvY2F0ZWQgKyBkZWx0YUJ5dGVzID49IDApOyAKKyAgICAgICAg
bV9ieXRlc0FsbG9jYXRlZCA9IChpbnRwdHJfdCltX2J5dGVzQWxsb2NhdGVkICsgZGVsdGFCeXRl
czsKKyAgICB9CisgICAgZnJlZU1lbW9yeUlmTmVjZXNzYXJ5KCk7Cit9CisKK3ZvaWQgQ2FudmFz
MkRMYXllck1hbmFnZXI6OmxheWVyVG9CZURlc3Ryb3llZChDYW52YXMyRExheWVyQnJpZGdlKiBs
YXllcikKK3sKKyAgICBpZiAoaXNJbkxpc3QobGF5ZXIpKQorICAgICAgICByZW1vdmVMYXllckZy
b21MaXN0KGxheWVyKTsKK30KKwordm9pZCBDYW52YXMyRExheWVyTWFuYWdlcjo6ZnJlZU1lbW9y
eUlmTmVjZXNzYXJ5KCkgCit7CisgICAgaWYgKG1fYnl0ZXNBbGxvY2F0ZWQgPiBtX21heEJ5dGVz
QWxsb2NhdGVkKSB7CisgICAgICAgIC8vIFBhc3MgMTogRnJlZSBtZW1vcnkgZnJvbSBjYWNoZXMK
KyAgICAgICAgQ2FudmFzMkRMYXllckJyaWRnZSogbGF5ZXIgPSBtX2xheWVyTGlzdC50YWlsKCk7
IC8vIExSVQorICAgICAgICB3aGlsZSAobV9ieXRlc0FsbG9jYXRlZCA+IG1fdGFyZ2V0Qnl0ZXNB
bGxvY2F0ZWQgJiYgbGF5ZXIpIHsKKyAgICAgICAgICAgIGxheWVyLT5mcmVlTWVtb3J5SWZQb3Nz
aWJsZShtX2J5dGVzQWxsb2NhdGVkIC0gbV90YXJnZXRCeXRlc0FsbG9jYXRlZCk7CisgICAgICAg
ICAgICBsYXllciA9IGxheWVyLT5wcmV2KCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBQYXNz
IDI6IEZsdXNoIGNhbnZhc2VzCisgICAgICAgIENhbnZhczJETGF5ZXJCcmlkZ2UqIGxlYXN0UmVj
ZW50bHlVc2VkTGF5ZXIgPSBtX2xheWVyTGlzdC50YWlsKCk7CisgICAgICAgIHdoaWxlIChtX2J5
dGVzQWxsb2NhdGVkID4gbV90YXJnZXRCeXRlc0FsbG9jYXRlZCAmJiBsZWFzdFJlY2VudGx5VXNl
ZExheWVyKSB7CisgICAgICAgICAgICBsZWFzdFJlY2VudGx5VXNlZExheWVyLT5mbHVzaCgpOwor
ICAgICAgICAgICAgbGVhc3RSZWNlbnRseVVzZWRMYXllci0+ZnJlZU1lbW9yeUlmUG9zc2libGUo
fjApOworICAgICAgICAgICAgcmVtb3ZlTGF5ZXJGcm9tTGlzdChsZWFzdFJlY2VudGx5VXNlZExh
eWVyKTsKKyAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2VkTGF5ZXIgPSBtX2xheWVyTGlzdC50
YWlsKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQ2FudmFzMkRMYXllck1hbmFnZXI6
OnJlbW92ZUxheWVyRnJvbUxpc3QoQ2FudmFzMkRMYXllckJyaWRnZSogbGF5ZXIpCit7CisgICAg
QVNTRVJUKGlzSW5MaXN0KGxheWVyKSk7CisgICAgbV9ieXRlc0FsbG9jYXRlZCAtPSBsYXllci0+
Ynl0ZXNBbGxvY2F0ZWQoKTsKKyAgICBtX2xheWVyTGlzdC5yZW1vdmUobGF5ZXIpOworICAgIGxh
eWVyLT5zZXROZXh0KDApOworICAgIGxheWVyLT5zZXRQcmV2KDApOworfQorCitib29sIENhbnZh
czJETGF5ZXJNYW5hZ2VyOjppc0luTGlzdChDYW52YXMyRExheWVyQnJpZGdlKiBsYXllcikKK3sK
KyAgICByZXR1cm4gbGF5ZXItPnByZXYoKSB8fCBtX2xheWVyTGlzdC5oZWFkKCkgPT0gbGF5ZXI7
Cit9CisKK30KKwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ2FudmFzMkRMYXllck1hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyTWFuYWdlci5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFz
MkRMYXllck1hbmFnZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MyBAQAorLyoKK0NvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgIAorVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQgQU5ZCitFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCitESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKK0RJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CitMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KK0FOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisq
LworCisjaWZuZGVmIENhbnZhczJETGF5ZXJNYW5hZ2VyX2gKKyNkZWZpbmUgQ2FudmFzMkRMYXll
ck1hbmFnZXJfaAorCisjaW5jbHVkZSAiQ2FudmFzMkRMYXllckJyaWRnZS5oIgorCitjbGFzcyBD
YW52YXMyRExheWVyTWFuYWdlclRlc3Q7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
Q2FudmFzMkRMYXllck1hbmFnZXIgeworcHVibGljOgorICAgIHN0YXRpYyBDYW52YXMyRExheWVy
TWFuYWdlciYgZ2V0KCk7CisgICAgdm9pZCBpbml0KHNpemVfdCBtYXhCeXRlc0FsbG9jYXRlZCwg
c2l6ZV90IHRhcmdldEJ5dGVzQWxsb2NhdGVkKTsKKyAgICB2aXJ0dWFsIH5DYW52YXMyRExheWVy
TWFuYWdlcigpOworCisgICAgdm9pZCBsYXllckFsbG9jYXRlZFN0b3JhZ2VDaGFuZ2VkKENhbnZh
czJETGF5ZXJCcmlkZ2UqLCBpbnRwdHJfdCBkZWx0YUJ5dGVzKTsKKyAgICB2b2lkIGxheWVyRGlk
RHJhdyhDYW52YXMyRExheWVyQnJpZGdlKik7CisgICAgdm9pZCBsYXllclRvQmVEZXN0cm95ZWQo
Q2FudmFzMkRMYXllckJyaWRnZSopOworcHJpdmF0ZToKKyAgICBDYW52YXMyRExheWVyTWFuYWdl
cigpOworCisgICAgLy8gaW50ZXJuYWwgbWV0aG9kcworICAgIHZvaWQgZnJlZU1lbW9yeUlmTmVj
ZXNzYXJ5KCk7CisgICAgYm9vbCBpc0luTGlzdChDYW52YXMyRExheWVyQnJpZGdlKik7CisgICAg
dm9pZCBhZGRMYXllclRvTGlzdChDYW52YXMyRExheWVyQnJpZGdlKik7CisgICAgdm9pZCByZW1v
dmVMYXllckZyb21MaXN0KENhbnZhczJETGF5ZXJCcmlkZ2UqKTsKKworICAgIHNpemVfdCBtX2J5
dGVzQWxsb2NhdGVkOworICAgIHNpemVfdCBtX21heEJ5dGVzQWxsb2NhdGVkOworICAgIHNpemVf
dCBtX3RhcmdldEJ5dGVzQWxsb2NhdGVkOworICAgIERvdWJseUxpbmtlZExpc3Q8Q2FudmFzMkRM
YXllckJyaWRnZT4gbV9sYXllckxpc3Q7CisKKyAgICBmcmllbmQgY2xhc3MgOjpDYW52YXMyRExh
eWVyTWFuYWdlclRlc3Q7IC8vIGZvciB1bml0IHRlc3RpbmcKK307CisKK30KKworI2VuZGlmCisK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiAxMjY3NTMpCisrKyBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0
IEBACisyMDEyLTA4LTI3ICBKdXN0aW4gTm92b3NhZCAgPGp1bm92QGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBbQ2hyb21pdW1dIEltcGxlbWVudGluZyBhIGdsb2JhbCBsaW1pdCBvbiBtZW1vcnkg
Y29uc3VtZWQgYnkgZGVmZXJyZWQgMkQgY2FudmFzZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk0Mzg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaW5nIHVuaXQgdGVzdHMgZm9yIFdlYkNvcmU6OkNh
bnZhczJETGF5ZXJNYW5hZ2VyCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKwogMjAxMi0wOC0y
NyAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAg
VW5yZXZpZXdlZC4gIFJvbGxlZCBERVBTLgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9X
ZWJLaXQuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5n
eXBpCShyZXZpc2lvbiAxMjY3NTEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5n
eXBpCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1Niw3IEBACiAgICAgICAgICAgICAndGVzdHMv
QXJlbmFUZXN0SGVscGVycy5oJywKICAgICAgICAgICAgICd0ZXN0cy9Bc3NvY2lhdGVkVVJMTG9h
ZGVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NhbnZhczJETGF5ZXJCcmlkZ2VUZXN0
LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvQ2FudmFzMkRMYXllck1hbmFnZXJUZXN0LmNwcCcs
CiAgICAgICAgICAgICAndGVzdHMvQ0NBY3RpdmVBbmltYXRpb25UZXN0LmNwcCcsCiAgICAgICAg
ICAgICAndGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmNwcCcsCiAgICAgICAgICAgICAndGVz
dHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmgnLApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DYW52YXMyRExheWVyTWFuYWdlclRlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ2FudmFzMkRMYXllck1hbmFnZXJUZXN0LmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ2FudmFzMkRMYXllck1h
bmFnZXJUZXN0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
CisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkNhbnZhczJETGF5ZXJNYW5hZ2Vy
LmgiCisKKyNpbmNsdWRlICJGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQzRFByaXZhdGUuaCIKKyNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgorI2lu
Y2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcg
dGVzdGluZzo6SW5TZXF1ZW5jZTsKK3VzaW5nIHRlc3Rpbmc6OlJldHVybjsKK3VzaW5nIHRlc3Rp
bmc6OlRlc3Q7CisKKworY2xhc3MgRmFrZUNhbnZhczJETGF5ZXJCcmlkZ2UgOiBwdWJsaWMgQ2Fu
dmFzMkRMYXllckJyaWRnZSB7CitwdWJsaWM6CisgICAgRmFrZUNhbnZhczJETGF5ZXJCcmlkZ2Uo
KSAKKyAgICAgICAgOiBDYW52YXMyRExheWVyQnJpZGdlKEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRleHQoYWRvcHRQdHIobmV3IFdlYktp
dDo6RmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEKSksIEludFNpemUoMSwgMSksIERlZmVycmVkLCAw
KQorICAgICAgICAsIG1fZnJlZWFibGVCeXRlcygwKQorICAgICAgICAsIG1fZnJlZU1lbW9yeUlm
UG9zc2libGVDb3VudCgwKQorICAgICAgICAsIG1fZmx1c2hDb3VudCgwKQorICAgIHsKKyAgICB9
CisKKyAgICB2b2lkIGZha2VGcmVlYWJsZUJ5dGVzKHNpemVfdCBzaXplKQorICAgIHsKKyAgICAg
ICAgbV9mcmVlYWJsZUJ5dGVzID0gc2l6ZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHNpemVfdCBm
cmVlTWVtb3J5SWZQb3NzaWJsZShzaXplX3Qgc2l6ZSkgT1ZFUlJJREUKKyAgICB7CisgICAgICAg
IG1fZnJlZU1lbW9yeUlmUG9zc2libGVDb3VudCsrOworICAgICAgICBzaXplX3QgYnl0ZXNGcmVl
ZCA9IHNpemUgPCBtX2ZyZWVhYmxlQnl0ZXMgPyBzaXplIDogbV9mcmVlYWJsZUJ5dGVzOworICAg
ICAgICBtX2ZyZWVhYmxlQnl0ZXMgLT0gYnl0ZXNGcmVlZDsKKyAgICAgICAgQ2FudmFzMkRMYXll
ck1hbmFnZXI6OmdldCgpLmxheWVyQWxsb2NhdGVkU3RvcmFnZUNoYW5nZWQodGhpcywgLSgoaW50
cHRyX3QpYnl0ZXNGcmVlZCkpOworICAgICAgICBtX2J5dGVzQWxsb2NhdGVkIC09IGJ5dGVzRnJl
ZWQ7CisgICAgICAgIHJldHVybiBieXRlc0ZyZWVkOworICAgIH0KKworICAgIHZpcnR1YWwgdm9p
ZCBmbHVzaCgpIE9WRVJSSURFCisgICAgeworICAgICAgICBtX2ZsdXNoQ291bnQrKzsKKyAgICB9
CisKK3B1YmxpYzoKKyAgICBzaXplX3QgbV9mcmVlYWJsZUJ5dGVzOworICAgIGludCBtX2ZyZWVN
ZW1vcnlJZlBvc3NpYmxlQ291bnQ7CisgICAgaW50IG1fZmx1c2hDb3VudDsKK307CisKK2NsYXNz
IENhbnZhczJETGF5ZXJNYW5hZ2VyVGVzdCA6IHB1YmxpYyBUZXN0IHsKK3Byb3RlY3RlZDoKKyAg
ICB2b2lkIHN0b3JhZ2VBbGxvY2F0aW9uVHJhY2tpbmdUZXN0KCkKKyAgICB7CisgICAgICAgIENh
bnZhczJETGF5ZXJNYW5hZ2VyJiBtYW5hZ2VyID0gQ2FudmFzMkRMYXllck1hbmFnZXI6OmdldCgp
OworICAgICAgICBtYW5hZ2VyLmluaXQoMTAsIDEwKTsKKyAgICAgICAgeworICAgICAgICAgICAg
RmFrZUNhbnZhczJETGF5ZXJCcmlkZ2UgbGF5ZXIxOworICAgICAgICAgICAgRVhQRUNUX0VRKChz
aXplX3QpMCwgbWFuYWdlci5tX2J5dGVzQWxsb2NhdGVkKTsKKyAgICAgICAgICAgIGxheWVyMS5z
dG9yYWdlQWxsb2NhdGVkRm9yUmVjb3JkaW5nQ2hhbmdlZCgxKTsKKyAgICAgICAgICAgIEVYUEVD
VF9FUSgoc2l6ZV90KTEsIG1hbmFnZXIubV9ieXRlc0FsbG9jYXRlZCk7CisgICAgICAgICAgICAv
LyBUZXN0IGFsbG9jYXRpb24gaW5jcmVhc2UKKyAgICAgICAgICAgIGxheWVyMS5zdG9yYWdlQWxs
b2NhdGVkRm9yUmVjb3JkaW5nQ2hhbmdlZCgyKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUSgoc2l6
ZV90KTIsIG1hbmFnZXIubV9ieXRlc0FsbG9jYXRlZCk7CisgICAgICAgICAgICAvLyBUZXN0IGFs
bG9jYXRpb24gZGVjcmVhc2UKKyAgICAgICAgICAgIGxheWVyMS5zdG9yYWdlQWxsb2NhdGVkRm9y
UmVjb3JkaW5nQ2hhbmdlZCgxKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUSgoc2l6ZV90KTEsIG1h
bmFnZXIubV9ieXRlc0FsbG9jYXRlZCk7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
RmFrZUNhbnZhczJETGF5ZXJCcmlkZ2UgbGF5ZXIyOworICAgICAgICAgICAgICAgIEVYUEVDVF9F
USgoc2l6ZV90KTEsIG1hbmFnZXIubV9ieXRlc0FsbG9jYXRlZCk7CisgICAgICAgICAgICAgICAg
Ly8gdmVyaWZ5IG11bHRpLWxheWVyIGFsbG9jYXRpb24gdHJhY2tpbmcKKyAgICAgICAgICAgICAg
ICBsYXllcjIuc3RvcmFnZUFsbG9jYXRlZEZvclJlY29yZGluZ0NoYW5nZWQoMik7CisgICAgICAg
ICAgICAgICAgRVhQRUNUX0VRKChzaXplX3QpMywgbWFuYWdlci5tX2J5dGVzQWxsb2NhdGVkKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIFZlcmlmeSB0cmFja2luZyBhZnRlciBkZXN0
cnVjdGlvbgorICAgICAgICAgICAgRVhQRUNUX0VRKChzaXplX3QpMSwgbWFuYWdlci5tX2J5dGVz
QWxsb2NhdGVkKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgZXZpY3Rpb25UZXN0KCkK
KyAgICB7CisgICAgICAgIENhbnZhczJETGF5ZXJNYW5hZ2VyJiBtYW5hZ2VyID0gQ2FudmFzMkRM
YXllck1hbmFnZXI6OmdldCgpOworICAgICAgICBtYW5hZ2VyLmluaXQoMTAsIDUpOworICAgICAg
ICBGYWtlQ2FudmFzMkRMYXllckJyaWRnZSBsYXllcjsKKyAgICAgICAgbGF5ZXIuZmFrZUZyZWVh
YmxlQnl0ZXMoMTApOworICAgICAgICBsYXllci5zdG9yYWdlQWxsb2NhdGVkRm9yUmVjb3JkaW5n
Q2hhbmdlZCg4KTsgLy8gdW5kZXIgdGhlIG1heAorICAgICAgICBFWFBFQ1RfRVEoMCwgbGF5ZXIu
bV9mcmVlTWVtb3J5SWZQb3NzaWJsZUNvdW50KTsKKyAgICAgICAgbGF5ZXIuc3RvcmFnZUFsbG9j
YXRlZEZvclJlY29yZGluZ0NoYW5nZWQoMTIpOyAvLyBvdmVyIHRoZSBtYXgKKyAgICAgICAgRVhQ
RUNUX0VRKDEsIGxheWVyLm1fZnJlZU1lbW9yeUlmUG9zc2libGVDb3VudCk7CisgICAgICAgIEVY
UEVDVF9FUSgoc2l6ZV90KTMsIGxheWVyLm1fZnJlZWFibGVCeXRlcyk7CisgICAgICAgIEVYUEVD
VF9FUSgwLCBsYXllci5tX2ZsdXNoQ291bnQpOyAvLyBldmljdGlvbiBzdWNjZWVkZWQgd2l0aG91
dCB0cmlnZ2VyaW5nIGEgZmx1c2gKKyAgICAgICAgRVhQRUNUX0VRKChzaXplX3QpNSwgbGF5ZXIu
Ynl0ZXNBbGxvY2F0ZWQoKSk7CisgICAgfQorCisgICAgdm9pZCBmbHVzaEV2aWN0aW9uVGVzdCgp
CisgICAgeworICAgICAgICBDYW52YXMyRExheWVyTWFuYWdlciYgbWFuYWdlciA9IENhbnZhczJE
TGF5ZXJNYW5hZ2VyOjpnZXQoKTsKKyAgICAgICAgbWFuYWdlci5pbml0KDEwLCA1KTsKKyAgICAg
ICAgRmFrZUNhbnZhczJETGF5ZXJCcmlkZ2UgbGF5ZXI7CisgICAgICAgIGxheWVyLmZha2VGcmVl
YWJsZUJ5dGVzKDEpOyAvLyBOb3QgZW5vdWdoIGZyZWVhYmxlIGJ5dGVzLCB3aWxsIGNhdXNlIGFn
Z3Jlc3NpdmUgZXZpY3Rpb24gYnkgZmx1c2hpbmcKKyAgICAgICAgbGF5ZXIuc3RvcmFnZUFsbG9j
YXRlZEZvclJlY29yZGluZ0NoYW5nZWQoOCk7IC8vIHVuZGVyIHRoZSBtYXgKKyAgICAgICAgRVhQ
RUNUX0VRKDAsIGxheWVyLm1fZnJlZU1lbW9yeUlmUG9zc2libGVDb3VudCk7CisgICAgICAgIGxh
eWVyLnN0b3JhZ2VBbGxvY2F0ZWRGb3JSZWNvcmRpbmdDaGFuZ2VkKDEyKTsgLy8gb3ZlciB0aGUg
bWF4CisgICAgICAgIEVYUEVDVF9FUSgyLCBsYXllci5tX2ZyZWVNZW1vcnlJZlBvc3NpYmxlQ291
bnQpOyAvLyBUd28gdHJpZXMsIG9uZSBiZWZvcmUgZmx1c2gsIG9uZSBhZnRlciBmbHVzaAorICAg
ICAgICBFWFBFQ1RfRVEoKHNpemVfdCkwLCBsYXllci5tX2ZyZWVhYmxlQnl0ZXMpOworICAgICAg
ICBFWFBFQ1RfRVEoMSwgbGF5ZXIubV9mbHVzaENvdW50KTsgLy8gZmx1c2ggd2FzIGF0dGVtcHRl
ZAorICAgICAgICBFWFBFQ1RfRVEoKHNpemVfdCkxMSwgbGF5ZXIuYnl0ZXNBbGxvY2F0ZWQoKSk7
IC8vIGZsdXNoIGRyb3BzIHRoZSBsYXllciBmcm9tIG1hbmFnZXIncyB0cmFja2luZyBsaXN0Cisg
ICAgICAgIEVYUEVDVF9GQUxTRShtYW5hZ2VyLmlzSW5MaXN0KCZsYXllcikpOworICAgIH0KK307
CisKK25hbWVzcGFjZSB7CisKK1RFU1RfRihDYW52YXMyRExheWVyTWFuYWdlclRlc3QsIHRlc3RT
dG9yYWdlQWxsb2NhdGlvblRyYWNraW5nKQoreworICAgIHN0b3JhZ2VBbGxvY2F0aW9uVHJhY2tp
bmdUZXN0KCk7Cit9CisKK1RFU1RfRihDYW52YXMyRExheWVyTWFuYWdlclRlc3QsIHRlc3RFdmlj
dGlvbikKK3sKKyAgICBldmljdGlvblRlc3QoKTsKK30KKworVEVTVF9GKENhbnZhczJETGF5ZXJN
YW5hZ2VyVGVzdCwgdGVzdEZsdXNoRXZpY3Rpb24pCit7CisgICAgZmx1c2hFdmljdGlvblRlc3Qo
KTsKK30KKworfSAvLyBuYW1lc3BhY2UKKwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>