<?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>133927</bug_id>
          
          <creation_ts>2014-06-15 11:37:43 -0700</creation_ts>
          <short_desc>Change GenericCallback&lt;&gt; function parameters into std::function&lt;&gt;</short_desc>
          <delta_ts>2014-06-16 20:54:01 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>mitz</reporter>
          <assigned_to>mitz</assigned_to>
          <cc>andersca</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>glenn</cc>
    
    <cc>jer.noble</cc>
    
    <cc>philipj</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1015773</commentid>
    <comment_count>0</comment_count>
    <who name="">mitz</who>
    <bug_when>2014-06-15 11:37:43 -0700</bug_when>
    <thetext>Have callers pass a std::function&lt;&gt;, and the callee create the GenericCallback&lt;&gt; if necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1015774</commentid>
    <comment_count>1</comment_count>
      <attachid>233143</attachid>
    <who name="">mitz</who>
    <bug_when>2014-06-15 11:43:10 -0700</bug_when>
    <thetext>Created attachment 233143
Part 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1015775</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-06-15 11:46:12 -0700</bug_when>
    <thetext>Attachment 233143 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/Plugins/WebPluginSiteDataManager.cpp:141:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebResourceCacheManagerProxy.h:54:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebDatabaseManagerProxy.cpp:155:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebDatabaseManagerProxy.cpp:208:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebCookieManagerProxy.h:63:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebCookieManagerProxy.h:69:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebFrameProxy.cpp:198:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebFrameProxy.cpp:208:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebFrameProxy.cpp:218:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebKeyValueStorageManager.h:48:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebKeyValueStorageManager.h:49:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebDatabaseManagerProxy.h:58:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebDatabaseManagerProxy.h:59:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebResourceCacheManagerProxy.cpp:91:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebContext.cpp:1219:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebApplicationCacheManagerProxy.h:55:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/ios/WebPageProxyIOS.mm:306:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/ios/WebPageProxyIOS.mm:402:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebApplicationCacheManagerProxy.cpp:83:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebMediaCacheManagerProxy.cpp:84:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/Plugins/WebPluginSiteDataManager.h:53:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.cpp:2295:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.cpp:2308:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.cpp:2321:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.h:400:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.h:402:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.h:483:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.h:660:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.h:661:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.h:666:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebKeyValueStorageManager.cpp:102:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebKeyValueStorageManager.cpp:131:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebCookieManagerProxy.cpp:102:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebCookieManagerProxy.cpp:164:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/mac/WebPageProxyMac.mm:328:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebFrameProxy.h:98:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebFrameProxy.h:99:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebFrameProxy.h:100:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebOriginDataManagerProxy.h:57:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebContext.h:270:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebMediaCacheManagerProxy.h:51:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebOriginDataManagerProxy.cpp:83:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 42 in 38 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1015787</commentid>
    <comment_count>3</comment_count>
      <attachid>233143</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-06-15 13:49:11 -0700</bug_when>
    <thetext>Comment on attachment 233143
Part 1

Nice!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1015789</commentid>
    <comment_count>4</comment_count>
      <attachid>233147</attachid>
    <who name="">mitz</who>
    <bug_when>2014-06-15 13:55:38 -0700</bug_when>
    <thetext>Created attachment 233147
Part 1, with std::move()ing the functions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1015790</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-06-15 13:57:41 -0700</bug_when>
    <thetext>Attachment 233147 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/Plugins/WebPluginSiteDataManager.cpp:141:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebResourceCacheManagerProxy.h:54:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebDatabaseManagerProxy.cpp:155:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebDatabaseManagerProxy.cpp:208:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebCookieManagerProxy.h:63:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebCookieManagerProxy.h:69:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebFrameProxy.cpp:198:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebFrameProxy.cpp:208:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebFrameProxy.cpp:218:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebKeyValueStorageManager.h:48:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebKeyValueStorageManager.h:49:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebDatabaseManagerProxy.h:58:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebDatabaseManagerProxy.h:59:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebResourceCacheManagerProxy.cpp:91:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebContext.cpp:1219:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebApplicationCacheManagerProxy.h:55:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/ios/WebPageProxyIOS.mm:306:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/ios/WebPageProxyIOS.mm:402:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebApplicationCacheManagerProxy.cpp:83:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebMediaCacheManagerProxy.cpp:84:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/Plugins/WebPluginSiteDataManager.h:53:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.cpp:2295:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.cpp:2308:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.cpp:2321:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.h:400:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.h:402:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.h:483:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.h:660:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.h:661:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.h:666:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebKeyValueStorageManager.cpp:102:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebKeyValueStorageManager.cpp:131:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebCookieManagerProxy.cpp:102:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebCookieManagerProxy.cpp:164:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/mac/WebPageProxyMac.mm:328:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebFrameProxy.h:98:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebFrameProxy.h:99:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebFrameProxy.h:100:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebOriginDataManagerProxy.h:57:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebContext.h:270:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebMediaCacheManagerProxy.h:51:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebOriginDataManagerProxy.cpp:83:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 42 in 38 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1015809</commentid>
    <comment_count>6</comment_count>
    <who name="">mitz</who>
    <bug_when>2014-06-15 21:10:55 -0700</bug_when>
    <thetext>Part 1 committed as &lt;http://trac.webkit.org/r170000&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1015963</commentid>
    <comment_count>7</comment_count>
      <attachid>233181</attachid>
    <who name="">mitz</who>
    <bug_when>2014-06-16 14:36:11 -0700</bug_when>
    <thetext>Created attachment 233181
Part 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1015965</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-06-16 14:38:56 -0700</bug_when>
    <thetext>Attachment 233181 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/Plugins/WebPluginSiteDataManager.cpp:171:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/Plugins/WebPluginSiteDataManager.h:56:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.cpp:1242:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.cpp:2188:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.cpp:2201:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.cpp:2214:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.cpp:2228:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.cpp:2242:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.cpp:2257:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.cpp:2271:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.cpp:2284:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.cpp:4991:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.cpp:5006:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.cpp:5021:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.cpp:5036:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.cpp:5072:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.h:378:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.h:401:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.h:406:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.h:407:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.h:409:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.h:411:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.h:474:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.h:475:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.h:476:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.h:477:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.h:654:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.h:655:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.h:658:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.h:662:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.h:663:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.h:664:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.h:665:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.h:667:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebPageProxy.h:895:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/ios/WebPageProxyIOS.mm:320:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/ios/WebPageProxyIOS.mm:344:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/ios/WebPageProxyIOS.mm:358:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/ios/WebPageProxyIOS.mm:379:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/ios/WebPageProxyIOS.mm:393:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 40 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016051</commentid>
    <comment_count>9</comment_count>
    <who name="">mitz</who>
    <bug_when>2014-06-16 20:54:01 -0700</bug_when>
    <thetext>Part 2 committed as &lt;http://trac.webkit.org/r170041&gt;. The few remaining GenericCallback&lt;&gt; parameters are a little more tricky to fix. I’ll use a separate bug for them if needed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233143</attachid>
            <date>2014-06-15 11:43:10 -0700</date>
            <delta_ts>2014-06-15 13:55:34 -0700</delta_ts>
            <desc>Part 1</desc>
            <filename>bug-133927-20140615114247.patch</filename>
            <type>text/plain</type>
            <size>49743</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2OTk5MSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg5IEBACisyMDE0LTA2LTE1ICBEYW4gQmVy
bnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CisKKyAgICAgICAgUGFydCAxIG9mIENoYW5nZSBHZW5l
cmljQ2FsbGJhY2s8PiBmdW5jdGlvbiBwYXJhbWV0ZXJzIGludG8gc3RkOjpmdW5jdGlvbjw+Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzM5MjcKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQy9XS0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdLQXBwbGlj
YXRpb25DYWNoZU1hbmFnZXJHZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2lucyk6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHA6CisgICAgICAgIChXS0NvbnRleHRHZXRTdGF0
aXN0aWNzKToKKyAgICAgICAgKFdLQ29udGV4dEdldFN0YXRpc3RpY3NXaXRoT3B0aW9ucyk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQ29va2llTWFuYWdlci5jcHA6CisgICAgICAgIChX
S0Nvb2tpZU1hbmFnZXJHZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAgIChXS0Nvb2tp
ZU1hbmFnZXJHZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0MvV0tEYXRhYmFzZU1hbmFnZXIuY3BwOgorICAgICAgICAoV0tEYXRhYmFzZU1hbmFnZXJH
ZXREYXRhYmFzZXNCeU9yaWdpbik6CisgICAgICAgIChXS0RhdGFiYXNlTWFuYWdlckdldERhdGFi
YXNlT3JpZ2lucyk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLRnJhbWUuY3BwOgorICAg
ICAgICAoV0tGcmFtZUdldE1haW5SZXNvdXJjZURhdGEpOgorICAgICAgICAoV0tGcmFtZUdldFJl
c291cmNlRGF0YSk6CisgICAgICAgIChXS0ZyYW1lR2V0V2ViQXJjaGl2ZSk6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9DL1dLS2V5VmFsdWVTdG9yYWdlTWFuYWdlci5jcHA6CisgICAgICAgIChX
S0tleVZhbHVlU3RvcmFnZU1hbmFnZXJHZXRLZXlWYWx1ZVN0b3JhZ2VPcmlnaW5zKToKKyAgICAg
ICAgKFdLS2V5VmFsdWVTdG9yYWdlTWFuYWdlckdldFN0b3JhZ2VEZXRhaWxzQnlPcmlnaW4pOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS01lZGlhQ2FjaGVNYW5hZ2VyLmNwcDoKKyAgICAg
ICAgKFdLTWVkaWFDYWNoZU1hbmFnZXJHZXRIb3N0bmFtZXNXaXRoTWVkaWFDYWNoZSk6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9DL1dLT3JpZ2luRGF0YU1hbmFnZXIuY3BwOgorICAgICAgICAo
V0tPcmlnaW5EYXRhTWFuYWdlckdldE9yaWdpbnMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Qy9XS1BsdWdpblNpdGVEYXRhTWFuYWdlci5jcHA6CisgICAgICAgIChXS1BsdWdpblNpdGVEYXRh
TWFuYWdlckdldFNpdGVzV2l0aERhdGEpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1Jl
c291cmNlQ2FjaGVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdLUmVzb3VyY2VDYWNoZU1hbmFnZXJH
ZXRDYWNoZU9yaWdpbnMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3
Lm1tOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2dldFdlYkFyY2hpdmVEYXRhV2l0aENvbXBsZXRp
b25IYW5kbGVyOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbToKKyAg
ICAgICAgKC1bV0tWaWV3IGF0dHJpYnV0ZWRTdWJzdHJpbmdGb3JQcm9wb3NlZFJhbmdlOmNvbXBs
ZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9QbHVnaW5zL1dlYlBsdWdpblNp
dGVEYXRhTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBsdWdpblNpdGVEYXRhTWFu
YWdlcjo6Z2V0U2l0ZXNXaXRoRGF0YSk6CisgICAgICAgICogVUlQcm9jZXNzL1BsdWdpbnMvV2Vi
UGx1Z2luU2l0ZURhdGFNYW5hZ2VyLmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkFwcGxpY2F0
aW9uQ2FjaGVNYW5hZ2VyUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJBcHBsaWNhdGlv
bkNhY2hlTWFuYWdlclByb3h5OjpnZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2lucyk6CisgICAgICAg
ICogVUlQcm9jZXNzL1dlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHkuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHQ6
OmdldFN0YXRpc3RpY3MpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb250ZXh0Lmg6CisgICAg
ICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhUVFBDb29raWVBY2NlcHRQ
b2xpY3kpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHkuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJEYXRhYmFzZU1hbmFnZXJQcm94eTo6Z2V0RGF0YWJhc2VzQnlPcmlnaW4pOgor
ICAgICAgICAoV2ViS2l0OjpXZWJEYXRhYmFzZU1hbmFnZXJQcm94eTo6Z2V0RGF0YWJhc2VPcmln
aW5zKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHkuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViRnJhbWVQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YkZyYW1lUHJveHk6OmdldFdlYkFyY2hpdmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZVBy
b3h5OjpnZXRNYWluUmVzb3VyY2VEYXRhKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVQcm94
eTo6Z2V0UmVzb3VyY2VEYXRhKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViRnJhbWVQcm94eS5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViS2V5VmFsdWVTdG9yYWdlTWFuYWdlcjo6Z2V0S2V5VmFsdWVTdG9y
YWdlT3JpZ2lucyk6CisgICAgICAgIChXZWJLaXQ6OldlYktleVZhbHVlU3RvcmFnZU1hbmFnZXI6
OmdldFN0b3JhZ2VEZXRhaWxzQnlPcmlnaW4pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJLZXlW
YWx1ZVN0b3JhZ2VNYW5hZ2VyLmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYk1lZGlhQ2FjaGVN
YW5hZ2VyUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYUNhY2hlTWFuYWdlclBy
b3h5OjpnZXRIb3N0bmFtZXNXaXRoTWVkaWFDYWNoZSk6CisgICAgICAgICogVUlQcm9jZXNzL1dl
Yk1lZGlhQ2FjaGVNYW5hZ2VyUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViT3JpZ2lu
RGF0YU1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYk9yaWdpbkRhdGFNYW5h
Z2VyUHJveHk6OmdldE9yaWdpbnMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJPcmlnaW5EYXRh
TWFuYWdlclByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z2V0TWFpblJlc291cmNlRGF0YU9mRnJhbWUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmdldFJlc291cmNlRGF0YUZyb21GcmFt
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z2V0V2ViQXJjaGl2ZU9mRnJhbWUp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvV2ViUmVzb3VyY2VDYWNoZU1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlJlc291cmNlQ2FjaGVNYW5hZ2VyUHJveHk6OmdldENhY2hlT3JpZ2lucyk6CisgICAgICAgICog
VUlQcm9jZXNzL1dlYlJlc291cmNlQ2FjaGVNYW5hZ2VyUHJveHkuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbToKKyAgICAgICAgKC1bV0tDb250
ZW50VmlldyBjaGFuZ2VTZWxlY3Rpb25XaXRoR2VzdHVyZUF0OndpdGhHZXN0dXJlOndpdGhTdGF0
ZTpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBjaGFuZ2VTZWxlY3Rpb25XaXRoVG91Y2hl
c0Zyb206dG86d2l0aEdlc3R1cmU6d2l0aFN0YXRlOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9p
b3MvV2ViUGFnZVByb3h5SU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNl
bGVjdFdpdGhHZXN0dXJlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZWxlY3RX
aXRoVHdvVG91Y2hlcyk6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMu
bW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6YXR0cmlidXRlZFN1YnN0cmluZ0Zv
ckNoYXJhY3RlclJhbmdlQXN5bmMpOgorCiAyMDE0LTA2LTE1ICBBbmRlcnMgQ2FybHNzb24gIDxh
bmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIFdLUGFnZVJ1bkphdmFTY3JpcHRJ
bk1haW5GcmFtZV9iCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQXBwbGljYXRp
b25DYWNoZU1hbmFnZXJQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHkuY3BwCShyZXZpc2lvbiAxNjk5
OTEpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQXBwbGljYXRpb25DYWNoZU1hbmFn
ZXJQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDEzICs4MCwxNSBAQCB2b2lkIFdlYkFw
cGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHk6OmRlCiAgICAgQVBJOjpPYmplY3Q6OmRlcmVmKCk7
CiB9CiAKLXZvaWQgV2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXJQcm94eTo6Z2V0QXBwbGljYXRp
b25DYWNoZU9yaWdpbnMoUGFzc1JlZlB0cjxBcnJheUNhbGxiYWNrPiBwcnBDYWxsYmFjaykKK3Zv
aWQgV2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXJQcm94eTo6Z2V0QXBwbGljYXRpb25DYWNoZU9y
aWdpbnMoc3RkOjpmdW5jdGlvbjx2b2lkIChBUEk6OkFycmF5KiwgQ2FsbGJhY2tCYXNlOjpFcnJv
cik+IGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgaWYgKCFjb250ZXh0KCkpCisgICAgUmVmUHRy
PEFycmF5Q2FsbGJhY2s+IGNhbGxiYWNrID0gQXJyYXlDYWxsYmFjazo6Y3JlYXRlKGNhbGxiYWNr
RnVuY3Rpb24pOworCisgICAgaWYgKCFjb250ZXh0KCkpIHsKKyAgICAgICAgY2FsbGJhY2stPmlu
dmFsaWRhdGUoKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIFJlZlB0cjxBcnJheUNh
bGxiYWNrPiBjYWxsYmFjayA9IHBycENhbGxiYWNrOwotICAgIAogICAgIHVpbnQ2NF90IGNhbGxi
YWNrSUQgPSBjYWxsYmFjay0+Y2FsbGJhY2tJRCgpOwogICAgIG1fYXJyYXlDYWxsYmFja3Muc2V0
KGNhbGxiYWNrSUQsIGNhbGxiYWNrLnJlbGVhc2UoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJBcHBsaWNhdGlvbkNhY2hlTWFuYWdlclByb3h5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHJv
eHkuaAkocmV2aXNpb24gMTY5OTkxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkFw
cGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViQXBwbGljYXRpb25DYWNoZU1h
bmFnZXJQcm94eT4gY3JlYXRlKFdlYkNvbnRleHQqKTsKICAgICB2aXJ0dWFsIH5XZWJBcHBsaWNh
dGlvbkNhY2hlTWFuYWdlclByb3h5KCk7CiAKLSAgICB2b2lkIGdldEFwcGxpY2F0aW9uQ2FjaGVP
cmlnaW5zKFBhc3NSZWZQdHI8QXJyYXlDYWxsYmFjaz4pOworICAgIHZvaWQgZ2V0QXBwbGljYXRp
b25DYWNoZU9yaWdpbnMoc3RkOjpmdW5jdGlvbjx2b2lkIChBUEk6OkFycmF5KiwgQ2FsbGJhY2tC
YXNlOjpFcnJvcik+KTsKICAgICB2b2lkIGRlbGV0ZUVudHJpZXNGb3JPcmlnaW4oV2ViU2VjdXJp
dHlPcmlnaW4qKTsKICAgICB2b2lkIGRlbGV0ZUFsbEVudHJpZXMoKTsKIApJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcAkocmV2aXNpb24gMTY5OTkxKQorKysgU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjE2LDE0ICsxMjE2LDE0IEBAIGJvb2wgV2ViQ29udGV4dDo6aHR0cFBpcGVsaW5pbmdFbmFibGVk
KCkKICNlbmRpZgogfQogCi12b2lkIFdlYkNvbnRleHQ6OmdldFN0YXRpc3RpY3ModWludDMyX3Qg
c3RhdGlzdGljc01hc2ssIFBhc3NSZWZQdHI8RGljdGlvbmFyeUNhbGxiYWNrPiBjYWxsYmFjaykK
K3ZvaWQgV2ViQ29udGV4dDo6Z2V0U3RhdGlzdGljcyh1aW50MzJfdCBzdGF0aXN0aWNzTWFzaywg
c3RkOjpmdW5jdGlvbjx2b2lkIChJbW11dGFibGVEaWN0aW9uYXJ5KiwgQ2FsbGJhY2tCYXNlOjpF
cnJvcik+IGNhbGxiYWNrRnVuY3Rpb24pCiB7CiAgICAgaWYgKCFzdGF0aXN0aWNzTWFzaykgewot
ICAgICAgICBjYWxsYmFjay0+aW52YWxpZGF0ZSgpOworICAgICAgICBjYWxsYmFja0Z1bmN0aW9u
KG51bGxwdHIsIENhbGxiYWNrQmFzZTo6RXJyb3I6OlVua25vd24pOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgUmVmUHRyPFN0YXRpc3RpY3NSZXF1ZXN0PiByZXF1ZXN0ID0gU3RhdGlz
dGljc1JlcXVlc3Q6OmNyZWF0ZShjYWxsYmFjayk7CisgICAgUmVmUHRyPFN0YXRpc3RpY3NSZXF1
ZXN0PiByZXF1ZXN0ID0gU3RhdGlzdGljc1JlcXVlc3Q6OmNyZWF0ZShEaWN0aW9uYXJ5Q2FsbGJh
Y2s6OmNyZWF0ZShjYWxsYmFja0Z1bmN0aW9uKSk7CiAKICAgICBpZiAoc3RhdGlzdGljc01hc2sg
JiBTdGF0aXN0aWNzUmVxdWVzdFR5cGVXZWJDb250ZW50KQogICAgICAgICByZXF1ZXN0V2ViQ29u
dGVudFN0YXRpc3RpY3MocmVxdWVzdC5nZXQoKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJDb250ZXh0LmgJKHJldmlzaW9uIDE2OTk5MSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2Nyw3ICsyNjcsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRIVFRQUGlwZWxpbmluZ0VuYWJsZWQoYm9vbCk7CiAgICAgYm9vbCBo
dHRwUGlwZWxpbmluZ0VuYWJsZWQoKSBjb25zdDsKIAotICAgIHZvaWQgZ2V0U3RhdGlzdGljcyh1
aW50MzJfdCBzdGF0aXN0aWNzTWFzaywgUGFzc1JlZlB0cjxEaWN0aW9uYXJ5Q2FsbGJhY2s+KTsK
KyAgICB2b2lkIGdldFN0YXRpc3RpY3ModWludDMyX3Qgc3RhdGlzdGljc01hc2ssIHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoSW1tdXRhYmxlRGljdGlvbmFyeSosIENhbGxiYWNrQmFzZTo6RXJyb3IpPik7
CiAgICAgCiAgICAgdm9pZCBnYXJiYWdlQ29sbGVjdEphdmFTY3JpcHRPYmplY3RzKCk7CiAgICAg
dm9pZCBzZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxlY3RvclRpbWVyRW5hYmxlZChib29sIGZsYWcp
OwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFn
ZXJQcm94eS5jcHAJKHJldmlzaW9uIDE2OTk5MSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OSw5ICs5OSw5
IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkZXJlZldlYkNvbnQKICAgICBBUEk6Ok9i
amVjdDo6ZGVyZWYoKTsKIH0KIAotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhvc3Ru
YW1lc1dpdGhDb29raWVzKFBhc3NSZWZQdHI8QXJyYXlDYWxsYmFjaz4gcHJwQ2FsbGJhY2spCit2
b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoc3RkOjpm
dW5jdGlvbjx2b2lkIChBUEk6OkFycmF5KiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+IGNhbGxiYWNr
RnVuY3Rpb24pCiB7Ci0gICAgUmVmUHRyPEFycmF5Q2FsbGJhY2s+IGNhbGxiYWNrID0gcHJwQ2Fs
bGJhY2s7CisgICAgUmVmUHRyPEFycmF5Q2FsbGJhY2s+IGNhbGxiYWNrID0gQXJyYXlDYWxsYmFj
azo6Y3JlYXRlKGNhbGxiYWNrRnVuY3Rpb24pOwogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBj
YWxsYmFjay0+Y2FsbGJhY2tJRCgpOwogICAgIG1fYXJyYXlDYWxsYmFja3Muc2V0KGNhbGxiYWNr
SUQsIGNhbGxiYWNrLnJlbGVhc2UoKSk7CiAKQEAgLTE2MSw5ICsxNjEsOSBAQCB2b2lkIFdlYkNv
b2tpZU1hbmFnZXJQcm94eTo6c2V0SFRUUENvb2tpCiAgICAgY29udGV4dCgpLT5zZW5kVG9OZXR3
b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6OldlYkNvb2tpZU1h
bmFnZXI6OlNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSk7CiB9CiAKLXZvaWQgV2Vi
Q29va2llTWFuYWdlclByb3h5OjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBhc3NSZWZQdHI8
SFRUUENvb2tpZUFjY2VwdFBvbGljeUNhbGxiYWNrPiBwcnBDYWxsYmFjaykKK3ZvaWQgV2ViQ29v
a2llTWFuYWdlclByb3h5OjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KHN0ZDo6ZnVuY3Rpb248
dm9pZCAoSFRUUENvb2tpZUFjY2VwdFBvbGljeSwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+IGNhbGxi
YWNrRnVuY3Rpb24pCiB7Ci0gICAgUmVmUHRyPEhUVFBDb29raWVBY2NlcHRQb2xpY3lDYWxsYmFj
az4gY2FsbGJhY2sgPSBwcnBDYWxsYmFjazsKKyAgICBSZWZQdHI8SFRUUENvb2tpZUFjY2VwdFBv
bGljeUNhbGxiYWNrPiBjYWxsYmFjayA9IEhUVFBDb29raWVBY2NlcHRQb2xpY3lDYWxsYmFjazo6
Y3JlYXRlKGNhbGxiYWNrRnVuY3Rpb24pOwogCiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IGNh
bGxiYWNrLT5jYWxsYmFja0lEKCk7CiAgICAgbV9odHRwQ29va2llQWNjZXB0UG9saWN5Q2FsbGJh
Y2tzLnNldChjYWxsYmFja0lELCBjYWxsYmFjay5yZWxlYXNlKCkpOwpJbmRleDogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaAkocmV2aXNpb24g
MTY5OTkxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCwxMyArNjAsMTMgQEAgcHVibGljOgogCiAgICAgdm9p
ZCBpbml0aWFsaXplQ2xpZW50KGNvbnN0IFdLQ29va2llTWFuYWdlckNsaWVudEJhc2UqKTsKICAg
ICAKLSAgICB2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKFBhc3NSZWZQdHI8QXJyYXlDYWxs
YmFjaz4pOworICAgIHZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoc3RkOjpmdW5jdGlvbjx2
b2lkIChBUEk6OkFycmF5KiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+KTsKICAgICB2b2lkIGRlbGV0
ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKTsKICAgICB2b2lkIGRl
bGV0ZUFsbENvb2tpZXMoKTsKICAgICB2b2lkIGRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZEFmdGVy
RGF0ZShkb3VibGUpOwogCiAgICAgdm9pZCBzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KEhUVFBD
b29raWVBY2NlcHRQb2xpY3kpOwotICAgIHZvaWQgZ2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQ
YXNzUmVmUHRyPEhUVFBDb29raWVBY2NlcHRQb2xpY3lDYWxsYmFjaz4pOworICAgIHZvaWQgZ2V0
SFRUUENvb2tpZUFjY2VwdFBvbGljeShzdGQ6OmZ1bmN0aW9uPHZvaWQgKEhUVFBDb29raWVBY2Nl
cHRQb2xpY3ksIENhbGxiYWNrQmFzZTo6RXJyb3IpPik7CiAKICAgICB2b2lkIHN0YXJ0T2JzZXJ2
aW5nQ29va2llQ2hhbmdlcygpOwogICAgIHZvaWQgc3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMo
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJEYXRhYmFzZU1hbmFnZXJQcm94
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkRhdGFiYXNl
TWFuYWdlclByb3h5LmNwcAkocmV2aXNpb24gMTY5OTkxKQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYkRhdGFiYXNlTWFuYWdlclByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUy
LDkgKzE1Miw5IEBAIHZvaWQgV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHk6OmRlcmVmV2ViQ28KICAg
ICBBUEk6Ok9iamVjdDo6ZGVyZWYoKTsKIH0KIAotdm9pZCBXZWJEYXRhYmFzZU1hbmFnZXJQcm94
eTo6Z2V0RGF0YWJhc2VzQnlPcmlnaW4oUGFzc1JlZlB0cjxBcnJheUNhbGxiYWNrPiBwcnBDYWxs
YmFjaykKK3ZvaWQgV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHk6OmdldERhdGFiYXNlc0J5T3JpZ2lu
KHN0ZDo6ZnVuY3Rpb248dm9pZCAoQVBJOjpBcnJheSosIENhbGxiYWNrQmFzZTo6RXJyb3IpPiBj
YWxsYmFja0Z1bmN0aW9uKQogewotICAgIFJlZlB0cjxBcnJheUNhbGxiYWNrPiBjYWxsYmFjayA9
IHBycENhbGxiYWNrOworICAgIFJlZlB0cjxBcnJheUNhbGxiYWNrPiBjYWxsYmFjayA9IEFycmF5
Q2FsbGJhY2s6OmNyZWF0ZShjYWxsYmFja0Z1bmN0aW9uKTsKICAgICB1aW50NjRfdCBjYWxsYmFj
a0lEID0gY2FsbGJhY2stPmNhbGxiYWNrSUQoKTsKICAgICBtX2FycmF5Q2FsbGJhY2tzLnNldChj
YWxsYmFja0lELCBjYWxsYmFjay5yZWxlYXNlKCkpOwogCkBAIC0yMDUsOSArMjA1LDkgQEAgdm9p
ZCBXZWJEYXRhYmFzZU1hbmFnZXJQcm94eTo6ZGlkR2V0RGF0YQogICAgIGNhbGxiYWNrLT5wZXJm
b3JtQ2FsbGJhY2tXaXRoUmV0dXJuVmFsdWUoQVBJOjpBcnJheTo6Y3JlYXRlKHN0ZDo6bW92ZShy
ZXN1bHQpKS5nZXQoKSk7CiB9CiAKLXZvaWQgV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHk6OmdldERh
dGFiYXNlT3JpZ2lucyhQYXNzUmVmUHRyPEFycmF5Q2FsbGJhY2s+IHBycENhbGxiYWNrKQordm9p
ZCBXZWJEYXRhYmFzZU1hbmFnZXJQcm94eTo6Z2V0RGF0YWJhc2VPcmlnaW5zKHN0ZDo6ZnVuY3Rp
b248dm9pZCAoQVBJOjpBcnJheSosIENhbGxiYWNrQmFzZTo6RXJyb3IpPiBjYWxsYmFja0Z1bmN0
aW9uKQogewotICAgIFJlZlB0cjxBcnJheUNhbGxiYWNrPiBjYWxsYmFjayA9IHBycENhbGxiYWNr
OworICAgIFJlZlB0cjxBcnJheUNhbGxiYWNrPiBjYWxsYmFjayA9IEFycmF5Q2FsbGJhY2s6OmNy
ZWF0ZShjYWxsYmFja0Z1bmN0aW9uKTsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gY2FsbGJh
Y2stPmNhbGxiYWNrSUQoKTsKICAgICBtX2FycmF5Q2FsbGJhY2tzLnNldChjYWxsYmFja0lELCBj
YWxsYmFjay5yZWxlYXNlKCkpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
RGF0YWJhc2VNYW5hZ2VyUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHkuaAkocmV2aXNpb24gMTY5OTkxKQorKysgU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkRhdGFiYXNlTWFuYWdlclByb3h5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU1LDggKzU1LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBpbml0aWFsaXplQ2xp
ZW50KGNvbnN0IFdLRGF0YWJhc2VNYW5hZ2VyQ2xpZW50QmFzZSopOwogCi0gICAgdm9pZCBnZXRE
YXRhYmFzZXNCeU9yaWdpbihQYXNzUmVmUHRyPEFycmF5Q2FsbGJhY2s+KTsKLSAgICB2b2lkIGdl
dERhdGFiYXNlT3JpZ2lucyhQYXNzUmVmUHRyPEFycmF5Q2FsbGJhY2s+KTsKKyAgICB2b2lkIGdl
dERhdGFiYXNlc0J5T3JpZ2luKHN0ZDo6ZnVuY3Rpb248dm9pZCAoQVBJOjpBcnJheSosIENhbGxi
YWNrQmFzZTo6RXJyb3IpPik7CisgICAgdm9pZCBnZXREYXRhYmFzZU9yaWdpbnMoc3RkOjpmdW5j
dGlvbjx2b2lkIChBUEk6OkFycmF5KiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+KTsKICAgICB2b2lk
IGRlbGV0ZURhdGFiYXNlV2l0aE5hbWVGb3JPcmlnaW4oY29uc3QgU3RyaW5nJiBkYXRhYmFzZUlk
ZW50aWZpZXIsIFdlYlNlY3VyaXR5T3JpZ2luKik7CiAgICAgdm9pZCBkZWxldGVEYXRhYmFzZXNG
b3JPcmlnaW4oV2ViU2VjdXJpdHlPcmlnaW4qKTsKICAgICB2b2lkIGRlbGV0ZUFsbERhdGFiYXNl
cygpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkZyYW1lUHJveHkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJGcmFtZVByb3h5LmNwcAko
cmV2aXNpb24gMTY5OTkxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkZyYW1lUHJv
eHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTUsMzQgKzE5NSwzNCBAQCBXZWJGb3JtU3VibWlz
c2lvbkxpc3RlbmVyUHJveHkqIFdlYkZyYW1lCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkZv
cm1TdWJtaXNzaW9uTGlzdGVuZXJQcm94eSo+KG1fYWN0aXZlTGlzdGVuZXIuZ2V0KCkpOwogfQog
Ci12b2lkIFdlYkZyYW1lUHJveHk6OmdldFdlYkFyY2hpdmUoUGFzc1JlZlB0cjxEYXRhQ2FsbGJh
Y2s+IGNhbGxiYWNrKQordm9pZCBXZWJGcmFtZVByb3h5OjpnZXRXZWJBcmNoaXZlKHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoQVBJOjpEYXRhKiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+IGNhbGxiYWNrRnVu
Y3Rpb24pCiB7CiAgICAgaWYgKCFtX3BhZ2UpIHsKLSAgICAgICAgY2FsbGJhY2stPmludmFsaWRh
dGUoKTsKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlvbihudWxscHRyLCBDYWxsYmFja0Jhc2U6OkVy
cm9yOjpVbmtub3duKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fcGFnZS0+Z2V0
V2ViQXJjaGl2ZU9mRnJhbWUodGhpcywgY2FsbGJhY2spOworICAgIG1fcGFnZS0+Z2V0V2ViQXJj
aGl2ZU9mRnJhbWUodGhpcywgY2FsbGJhY2tGdW5jdGlvbik7CiB9CiAKLXZvaWQgV2ViRnJhbWVQ
cm94eTo6Z2V0TWFpblJlc291cmNlRGF0YShQYXNzUmVmUHRyPERhdGFDYWxsYmFjaz4gY2FsbGJh
Y2spCit2b2lkIFdlYkZyYW1lUHJveHk6OmdldE1haW5SZXNvdXJjZURhdGEoc3RkOjpmdW5jdGlv
bjx2b2lkIChBUEk6OkRhdGEqLCBDYWxsYmFja0Jhc2U6OkVycm9yKT4gY2FsbGJhY2tGdW5jdGlv
bikKIHsKICAgICBpZiAoIW1fcGFnZSkgewotICAgICAgICBjYWxsYmFjay0+aW52YWxpZGF0ZSgp
OworICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKG51bGxwdHIsIENhbGxiYWNrQmFzZTo6RXJyb3I6
OlVua25vd24pOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9wYWdlLT5nZXRNYWlu
UmVzb3VyY2VEYXRhT2ZGcmFtZSh0aGlzLCBjYWxsYmFjayk7CisgICAgbV9wYWdlLT5nZXRNYWlu
UmVzb3VyY2VEYXRhT2ZGcmFtZSh0aGlzLCBjYWxsYmFja0Z1bmN0aW9uKTsKIH0KIAotdm9pZCBX
ZWJGcmFtZVByb3h5OjpnZXRSZXNvdXJjZURhdGEoQVBJOjpVUkwqIHJlc291cmNlVVJMLCBQYXNz
UmVmUHRyPERhdGFDYWxsYmFjaz4gY2FsbGJhY2spCit2b2lkIFdlYkZyYW1lUHJveHk6OmdldFJl
c291cmNlRGF0YShBUEk6OlVSTCogcmVzb3VyY2VVUkwsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoQVBJ
OjpEYXRhKiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+IGNhbGxiYWNrRnVuY3Rpb24pCiB7CiAgICAg
aWYgKCFtX3BhZ2UpIHsKLSAgICAgICAgY2FsbGJhY2stPmludmFsaWRhdGUoKTsKKyAgICAgICAg
Y2FsbGJhY2tGdW5jdGlvbihudWxscHRyLCBDYWxsYmFja0Jhc2U6OkVycm9yOjpVbmtub3duKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fcGFnZS0+Z2V0UmVzb3VyY2VEYXRhRnJv
bUZyYW1lKHRoaXMsIHJlc291cmNlVVJMLCBjYWxsYmFjayk7CisgICAgbV9wYWdlLT5nZXRSZXNv
dXJjZURhdGFGcm9tRnJhbWUodGhpcywgcmVzb3VyY2VVUkwsIGNhbGxiYWNrRnVuY3Rpb24pOwog
fQogCiB2b2lkIFdlYkZyYW1lUHJveHk6OnNldFVucmVhY2hhYmxlVVJMKGNvbnN0IFN0cmluZyYg
dW5yZWFjaGFibGVVUkwpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViRnJhbWVQ
cm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJGcmFtZVBy
b3h5LmgJKHJldmlzaW9uIDE2OTk5MSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJG
cmFtZVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTk1LDkgKzk1LDkgQEAgcHVibGljOgogICAg
IGJvb2wgaXNEaXNwbGF5aW5nTWFya3VwRG9jdW1lbnQoKSBjb25zdDsKICAgICBib29sIGlzRGlz
cGxheWluZ1BERkRvY3VtZW50KCkgY29uc3Q7CiAKLSAgICB2b2lkIGdldFdlYkFyY2hpdmUoUGFz
c1JlZlB0cjxEYXRhQ2FsbGJhY2s+KTsKLSAgICB2b2lkIGdldE1haW5SZXNvdXJjZURhdGEoUGFz
c1JlZlB0cjxEYXRhQ2FsbGJhY2s+KTsKLSAgICB2b2lkIGdldFJlc291cmNlRGF0YShBUEk6OlVS
TCosIFBhc3NSZWZQdHI8RGF0YUNhbGxiYWNrPik7CisgICAgdm9pZCBnZXRXZWJBcmNoaXZlKHN0
ZDo6ZnVuY3Rpb248dm9pZCAoQVBJOjpEYXRhKiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+KTsKKyAg
ICB2b2lkIGdldE1haW5SZXNvdXJjZURhdGEoc3RkOjpmdW5jdGlvbjx2b2lkIChBUEk6OkRhdGEq
LCBDYWxsYmFja0Jhc2U6OkVycm9yKT4pOworICAgIHZvaWQgZ2V0UmVzb3VyY2VEYXRhKEFQSTo6
VVJMKiwgc3RkOjpmdW5jdGlvbjx2b2lkIChBUEk6OkRhdGEqLCBDYWxsYmFja0Jhc2U6OkVycm9y
KT4pOwogCiAgICAgdm9pZCBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZChjb25zdCBTdHJpbmcmIHVy
bCk7CiAgICAgdm9pZCBkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWQo
Y29uc3QgU3RyaW5nJiB1cmwpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYktl
eVZhbHVlU3RvcmFnZU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyLmNwcAkocmV2aXNpb24gMTY5OTkxKQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYktleVZhbHVlU3RvcmFnZU1hbmFnZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05OSw5ICs5OSw5IEBAIHN0YXRpYyB2b2lkIGRpZEdldEtleVZh
bHVlU3RvcmFnZU9yaWdpbnMKICAgICBjYWxsYmFjay0+cGVyZm9ybUNhbGxiYWNrV2l0aFJldHVy
blZhbHVlKEFQSTo6QXJyYXk6OmNyZWF0ZShzdGQ6Om1vdmUod2ViU2VjdXJpdHlPcmlnaW5zKSku
Z2V0KCkpOwogfQogCi12b2lkIFdlYktleVZhbHVlU3RvcmFnZU1hbmFnZXI6OmdldEtleVZhbHVl
U3RvcmFnZU9yaWdpbnMoUGFzc1JlZlB0cjxBcnJheUNhbGxiYWNrPiBwcnBDYWxsYmFjaykKK3Zv
aWQgV2ViS2V5VmFsdWVTdG9yYWdlTWFuYWdlcjo6Z2V0S2V5VmFsdWVTdG9yYWdlT3JpZ2lucyhz
dGQ6OmZ1bmN0aW9uPHZvaWQgKEFQSTo6QXJyYXkqLCBDYWxsYmFja0Jhc2U6OkVycm9yKT4gY2Fs
bGJhY2tGdW5jdGlvbikKIHsKLSAgICBjb250ZXh0KCktPnN0b3JhZ2VNYW5hZ2VyKCkuZ2V0T3Jp
Z2lucyhSdW5Mb29wOjptYWluKCksIHBycENhbGxiYWNrLmxlYWtSZWYoKSwgZGlkR2V0S2V5VmFs
dWVTdG9yYWdlT3JpZ2lucyk7CisgICAgY29udGV4dCgpLT5zdG9yYWdlTWFuYWdlcigpLmdldE9y
aWdpbnMoUnVuTG9vcDo6bWFpbigpLCBBcnJheUNhbGxiYWNrOjpjcmVhdGUoY2FsbGJhY2tGdW5j
dGlvbikubGVha1JlZigpLCBkaWRHZXRLZXlWYWx1ZVN0b3JhZ2VPcmlnaW5zKTsKIH0KIAogc3Rh
dGljIHZvaWQgZGlkR2V0U3RvcmFnZURldGFpbHNCeU9yaWdpbihjb25zdCBWZWN0b3I8TG9jYWxT
dG9yYWdlRGV0YWlscz4mIHN0b3JhZ2VEZXRhaWxzLCB2b2lkKiBjb250ZXh0KQpAQCAtMTI4LDkg
KzEyOCw5IEBAIHN0YXRpYyB2b2lkIGRpZEdldFN0b3JhZ2VEZXRhaWxzQnlPcmlnaW4KICAgICBj
YWxsYmFjay0+cGVyZm9ybUNhbGxiYWNrV2l0aFJldHVyblZhbHVlKEFQSTo6QXJyYXk6OmNyZWF0
ZShzdGQ6Om1vdmUocmVzdWx0KSkuZ2V0KCkpOwogfQogCi12b2lkIFdlYktleVZhbHVlU3RvcmFn
ZU1hbmFnZXI6OmdldFN0b3JhZ2VEZXRhaWxzQnlPcmlnaW4oUGFzc1JlZlB0cjxBcnJheUNhbGxi
YWNrPiBwcnBDYWxsYmFjaykKK3ZvaWQgV2ViS2V5VmFsdWVTdG9yYWdlTWFuYWdlcjo6Z2V0U3Rv
cmFnZURldGFpbHNCeU9yaWdpbihzdGQ6OmZ1bmN0aW9uPHZvaWQgKEFQSTo6QXJyYXkqLCBDYWxs
YmFja0Jhc2U6OkVycm9yKT4gY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBjb250ZXh0KCktPnN0
b3JhZ2VNYW5hZ2VyKCkuZ2V0U3RvcmFnZURldGFpbHNCeU9yaWdpbihSdW5Mb29wOjptYWluKCks
IHBycENhbGxiYWNrLmxlYWtSZWYoKSwgZGlkR2V0U3RvcmFnZURldGFpbHNCeU9yaWdpbik7Cisg
ICAgY29udGV4dCgpLT5zdG9yYWdlTWFuYWdlcigpLmdldFN0b3JhZ2VEZXRhaWxzQnlPcmlnaW4o
UnVuTG9vcDo6bWFpbigpLCBBcnJheUNhbGxiYWNrOjpjcmVhdGUoY2FsbGJhY2tGdW5jdGlvbiku
bGVha1JlZigpLCBkaWRHZXRTdG9yYWdlRGV0YWlsc0J5T3JpZ2luKTsKIH0KIAogdm9pZCBXZWJL
ZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyOjpkZWxldGVFbnRyaWVzRm9yT3JpZ2luKFdlYlNlY3VyaXR5
T3JpZ2luKiBvcmlnaW4pCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViS2V5VmFs
dWVTdG9yYWdlTWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyLmgJKHJldmlzaW9uIDE2OTk5MSkKKysrIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ1LDggKzQ1LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdl
YktleVZhbHVlU3RvcmFnZU1hbmFnZXI+IGNyZWF0ZShXZWJDb250ZXh0Kik7CiAgICAgdmlydHVh
bCB+V2ViS2V5VmFsdWVTdG9yYWdlTWFuYWdlcigpOwogCi0gICAgdm9pZCBnZXRLZXlWYWx1ZVN0
b3JhZ2VPcmlnaW5zKFBhc3NSZWZQdHI8QXJyYXlDYWxsYmFjaz4pOwotICAgIHZvaWQgZ2V0U3Rv
cmFnZURldGFpbHNCeU9yaWdpbihQYXNzUmVmUHRyPEFycmF5Q2FsbGJhY2s+KTsKKyAgICB2b2lk
IGdldEtleVZhbHVlU3RvcmFnZU9yaWdpbnMoc3RkOjpmdW5jdGlvbjx2b2lkIChBUEk6OkFycmF5
KiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+KTsKKyAgICB2b2lkIGdldFN0b3JhZ2VEZXRhaWxzQnlP
cmlnaW4oc3RkOjpmdW5jdGlvbjx2b2lkIChBUEk6OkFycmF5KiwgQ2FsbGJhY2tCYXNlOjpFcnJv
cik+KTsKICAgICB2b2lkIGRlbGV0ZUVudHJpZXNGb3JPcmlnaW4oV2ViU2VjdXJpdHlPcmlnaW4q
KTsKICAgICB2b2lkIGRlbGV0ZUFsbEVudHJpZXMoKTsKIApJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYk1lZGlhQ2FjaGVNYW5hZ2VyUHJveHkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJNZWRpYUNhY2hlTWFuYWdlclByb3h5LmNwcAkocmV2
aXNpb24gMTY5OTkxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYk1lZGlhQ2FjaGVN
YW5hZ2VyUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw5ICs4MSw5IEBAIHZvaWQgV2Vi
TWVkaWFDYWNoZU1hbmFnZXJQcm94eTo6ZGVyZWZXZWIKICAgICBBUEk6Ok9iamVjdDo6ZGVyZWYo
KTsKIH0KIAotdm9pZCBXZWJNZWRpYUNhY2hlTWFuYWdlclByb3h5OjpnZXRIb3N0bmFtZXNXaXRo
TWVkaWFDYWNoZShQYXNzUmVmUHRyPEFycmF5Q2FsbGJhY2s+IHBycENhbGxiYWNrKQordm9pZCBX
ZWJNZWRpYUNhY2hlTWFuYWdlclByb3h5OjpnZXRIb3N0bmFtZXNXaXRoTWVkaWFDYWNoZShzdGQ6
OmZ1bmN0aW9uPHZvaWQgKEFQSTo6QXJyYXkqLCBDYWxsYmFja0Jhc2U6OkVycm9yKT4gY2FsbGJh
Y2tGdW5jdGlvbikKIHsKLSAgICBSZWZQdHI8QXJyYXlDYWxsYmFjaz4gY2FsbGJhY2sgPSBwcnBD
YWxsYmFjazsKKyAgICBSZWZQdHI8QXJyYXlDYWxsYmFjaz4gY2FsbGJhY2sgPSBBcnJheUNhbGxi
YWNrOjpjcmVhdGUoY2FsbGJhY2tGdW5jdGlvbik7CiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9
IGNhbGxiYWNrLT5jYWxsYmFja0lEKCk7CiAgICAgbV9hcnJheUNhbGxiYWNrcy5zZXQoY2FsbGJh
Y2tJRCwgY2FsbGJhY2sucmVsZWFzZSgpKTsKIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYk1lZGlhQ2FjaGVNYW5hZ2VyUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViTWVkaWFDYWNoZU1hbmFnZXJQcm94eS5oCShyZXZpc2lvbiAxNjk5
OTEpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTWVkaWFDYWNoZU1hbmFnZXJQcm94
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxXZWJNZWRpYUNhY2hlTWFuYWdlclByb3h5PiBjcmVhdGUoV2ViQ29udGV4dCop
OwogICAgIHZpcnR1YWwgfldlYk1lZGlhQ2FjaGVNYW5hZ2VyUHJveHkoKTsKICAgICAKLSAgICB2
b2lkIGdldEhvc3RuYW1lc1dpdGhNZWRpYUNhY2hlKFBhc3NSZWZQdHI8QXJyYXlDYWxsYmFjaz4p
OworICAgIHZvaWQgZ2V0SG9zdG5hbWVzV2l0aE1lZGlhQ2FjaGUoc3RkOjpmdW5jdGlvbjx2b2lk
IChBUEk6OkFycmF5KiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+KTsKICAgICB2b2lkIGNsZWFyQ2Fj
aGVGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIGNsZWFyQ2FjaGVGb3JBbGxI
b3N0bmFtZXMoKTsKIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYk9yaWdpbkRh
dGFNYW5hZ2VyUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5LmNwcAkocmV2aXNpb24gMTY5OTkxKQorKysgU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYk9yaWdpbkRhdGFNYW5hZ2VyUHJveHkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MCwxMiArODAsMTQgQEAgdm9pZCBXZWJPcmlnaW5EYXRhTWFuYWdlclBy
b3h5OjpkZXJlZldlYgogICAgIEFQSTo6T2JqZWN0OjpkZXJlZigpOwogfQogCi12b2lkIFdlYk9y
aWdpbkRhdGFNYW5hZ2VyUHJveHk6OmdldE9yaWdpbnMoV0tPcmlnaW5EYXRhVHlwZXMgdHlwZXMs
IFBhc3NSZWZQdHI8QXJyYXlDYWxsYmFjaz4gcHJwQ2FsbGJhY2spCit2b2lkIFdlYk9yaWdpbkRh
dGFNYW5hZ2VyUHJveHk6OmdldE9yaWdpbnMoV0tPcmlnaW5EYXRhVHlwZXMgdHlwZXMsIHN0ZDo6
ZnVuY3Rpb248dm9pZCAoQVBJOjpBcnJheSosIENhbGxiYWNrQmFzZTo6RXJyb3IpPiBjYWxsYmFj
a0Z1bmN0aW9uKQogewotICAgIGlmICghY29udGV4dCgpKQotICAgICAgICByZXR1cm47CisgICAg
UmVmUHRyPEFycmF5Q2FsbGJhY2s+IGNhbGxiYWNrID0gQXJyYXlDYWxsYmFjazo6Y3JlYXRlKGNh
bGxiYWNrRnVuY3Rpb24pOwogCi0gICAgUmVmUHRyPEFycmF5Q2FsbGJhY2s+IGNhbGxiYWNrID0g
cHJwQ2FsbGJhY2s7CisgICAgaWYgKCFjb250ZXh0KCkpIHsKKyAgICAgICAgY2FsbGJhY2stPmlu
dmFsaWRhdGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIHVpbnQ2NF90IGNhbGxi
YWNrSUQgPSBjYWxsYmFjay0+Y2FsbGJhY2tJRCgpOwogICAgIG1fYXJyYXlDYWxsYmFja3Muc2V0
KGNhbGxiYWNrSUQsIGNhbGxiYWNrLnJlbGVhc2UoKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViT3JpZ2luRGF0YU1hbmFnZXJQcm94eS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5LmgJKHJldmlzaW9u
IDE2OTk5MSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJPcmlnaW5EYXRhTWFuYWdl
clByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgcHVibGljOgogICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFdlYk9yaWdpbkRhdGFNYW5hZ2VyUHJveHk+IGNyZWF0ZShXZWJDb250
ZXh0Kik7CiAgICAgdmlydHVhbCB+V2ViT3JpZ2luRGF0YU1hbmFnZXJQcm94eSgpOwogCi0gICAg
dm9pZCBnZXRPcmlnaW5zKFdLT3JpZ2luRGF0YVR5cGVzLCBQYXNzUmVmUHRyPEFycmF5Q2FsbGJh
Y2s+KTsKKyAgICB2b2lkIGdldE9yaWdpbnMoV0tPcmlnaW5EYXRhVHlwZXMsIHN0ZDo6ZnVuY3Rp
b248dm9pZCAoQVBJOjpBcnJheSosIENhbGxiYWNrQmFzZTo6RXJyb3IpPik7CiAgICAgdm9pZCBk
ZWxldGVFbnRyaWVzRm9yT3JpZ2luKFdLT3JpZ2luRGF0YVR5cGVzLCBXZWJTZWN1cml0eU9yaWdp
biopOwogICAgIHZvaWQgZGVsZXRlQWxsRW50cmllcyhXS09yaWdpbkRhdGFUeXBlcyk7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiAx
Njk5OTEpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjI5Miw5ICsyMjkyLDkgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmdldFNl
bGVjdGlvbkFzV2ViQXJjaAogICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6
R2V0U2VsZWN0aW9uQXNXZWJBcmNoaXZlRGF0YShjYWxsYmFja0lEKSwgbV9wYWdlSUQpOwogfQog
Ci12b2lkIFdlYlBhZ2VQcm94eTo6Z2V0TWFpblJlc291cmNlRGF0YU9mRnJhbWUoV2ViRnJhbWVQ
cm94eSogZnJhbWUsIFBhc3NSZWZQdHI8RGF0YUNhbGxiYWNrPiBwcnBDYWxsYmFjaykKK3ZvaWQg
V2ViUGFnZVByb3h5OjpnZXRNYWluUmVzb3VyY2VEYXRhT2ZGcmFtZShXZWJGcmFtZVByb3h5KiBm
cmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lkIChBUEk6OkRhdGEqLCBDYWxsYmFja0Jhc2U6OkVycm9y
KT4gY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBSZWZQdHI8RGF0YUNhbGxiYWNrPiBjYWxsYmFj
ayA9IHBycENhbGxiYWNrOworICAgIFJlZlB0cjxEYXRhQ2FsbGJhY2s+IGNhbGxiYWNrID0gRGF0
YUNhbGxiYWNrOjpjcmVhdGUoY2FsbGJhY2tGdW5jdGlvbik7CiAgICAgaWYgKCFpc1ZhbGlkKCkp
IHsKICAgICAgICAgY2FsbGJhY2stPmludmFsaWRhdGUoKTsKICAgICAgICAgcmV0dXJuOwpAQCAt
MjMwNSw5ICsyMzA1LDkgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmdldE1haW5SZXNvdXJjZURhdGFP
ZgogICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6R2V0TWFpblJlc291cmNl
RGF0YU9mRnJhbWUoZnJhbWUtPmZyYW1lSUQoKSwgY2FsbGJhY2tJRCksIG1fcGFnZUlEKTsKIH0K
IAotdm9pZCBXZWJQYWdlUHJveHk6OmdldFJlc291cmNlRGF0YUZyb21GcmFtZShXZWJGcmFtZVBy
b3h5KiBmcmFtZSwgQVBJOjpVUkwqIHJlc291cmNlVVJMLCBQYXNzUmVmUHRyPERhdGFDYWxsYmFj
az4gcHJwQ2FsbGJhY2spCit2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0UmVzb3VyY2VEYXRhRnJvbUZy
YW1lKFdlYkZyYW1lUHJveHkqIGZyYW1lLCBBUEk6OlVSTCogcmVzb3VyY2VVUkwsIHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoQVBJOjpEYXRhKiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+IGNhbGxiYWNrRnVu
Y3Rpb24pCiB7Ci0gICAgUmVmUHRyPERhdGFDYWxsYmFjaz4gY2FsbGJhY2sgPSBwcnBDYWxsYmFj
azsKKyAgICBSZWZQdHI8RGF0YUNhbGxiYWNrPiBjYWxsYmFjayA9IERhdGFDYWxsYmFjazo6Y3Jl
YXRlKGNhbGxiYWNrRnVuY3Rpb24pOwogICAgIGlmICghaXNWYWxpZCgpKSB7CiAgICAgICAgIGNh
bGxiYWNrLT5pbnZhbGlkYXRlKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTIzMTgsOSArMjMxOCw5
IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpnZXRSZXNvdXJjZURhdGFGcm9tRnIKICAgICBtX3Byb2Nl
c3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkdldFJlc291cmNlRGF0YUZyb21GcmFtZShmcmFt
ZS0+ZnJhbWVJRCgpLCByZXNvdXJjZVVSTC0+c3RyaW5nKCksIGNhbGxiYWNrSUQpLCBtX3BhZ2VJ
RCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpnZXRXZWJBcmNoaXZlT2ZGcmFtZShXZWJGcmFt
ZVByb3h5KiBmcmFtZSwgUGFzc1JlZlB0cjxEYXRhQ2FsbGJhY2s+IHBycENhbGxiYWNrKQordm9p
ZCBXZWJQYWdlUHJveHk6OmdldFdlYkFyY2hpdmVPZkZyYW1lKFdlYkZyYW1lUHJveHkqIGZyYW1l
LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKEFQSTo6RGF0YSosIENhbGxiYWNrQmFzZTo6RXJyb3IpPiBj
YWxsYmFja0Z1bmN0aW9uKQogewotICAgIFJlZlB0cjxEYXRhQ2FsbGJhY2s+IGNhbGxiYWNrID0g
cHJwQ2FsbGJhY2s7CisgICAgUmVmUHRyPERhdGFDYWxsYmFjaz4gY2FsbGJhY2sgPSBEYXRhQ2Fs
bGJhY2s6OmNyZWF0ZShjYWxsYmFja0Z1bmN0aW9uKTsKICAgICBpZiAoIWlzVmFsaWQoKSkgewog
ICAgICAgICBjYWxsYmFjay0+aW52YWxpZGF0ZSgpOwogICAgICAgICByZXR1cm47CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiAxNjk5OTEpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTM5Nyw5ICszOTcsOSBAQCBwdWJsaWM6CiAgICAgaW50MzJfdCBkZXZpY2VPcmllbnRhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fZGV2aWNlT3JpZW50YXRpb247IH0KICAgICB2b2lkIGRpZENv
bW1pdExheWVyVHJlZShjb25zdCBXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uJik7
CiAKLSAgICB2b2lkIHNlbGVjdFdpdGhHZXN0dXJlKGNvbnN0IFdlYkNvcmU6OkludFBvaW50LCBX
ZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHksIHVpbnQzMl90IGdlc3R1cmVUeXBlLCB1aW50MzJfdCBn
ZXN0dXJlU3RhdGUsIFBhc3NSZWZQdHI8R2VzdHVyZUNhbGxiYWNrPik7CisgICAgdm9pZCBzZWxl
Y3RXaXRoR2VzdHVyZShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCwgV2ViQ29yZTo6VGV4dEdyYW51
bGFyaXR5LCB1aW50MzJfdCBnZXN0dXJlVHlwZSwgdWludDMyX3QgZ2VzdHVyZVN0YXRlLCBzdGQ6
OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgdWludDMyX3QsIHVpbnQz
Ml90LCB1aW50MzJfdCwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+KTsKICAgICB2b2lkIHVwZGF0ZVNl
bGVjdGlvbldpdGhUb3VjaGVzKGNvbnN0IFdlYkNvcmU6OkludFBvaW50LCB1aW50MzJfdCB0b3Vj
aGVzLCBib29sIGJhc2VJc1N0YXJ0LCBQYXNzUmVmUHRyPFRvdWNoZXNDYWxsYmFjaz4pOwotICAg
IHZvaWQgc2VsZWN0V2l0aFR3b1RvdWNoZXMoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQgZnJvbSwg
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQgdG8sIHVpbnQzMl90IGdlc3R1cmVUeXBlLCB1aW50MzJf
dCBnZXN0dXJlU3RhdGUsIFBhc3NSZWZQdHI8R2VzdHVyZUNhbGxiYWNrPik7CisgICAgdm9pZCBz
ZWxlY3RXaXRoVHdvVG91Y2hlcyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCBmcm9tLCBjb25zdCBX
ZWJDb3JlOjpJbnRQb2ludCB0bywgdWludDMyX3QgZ2VzdHVyZVR5cGUsIHVpbnQzMl90IGdlc3R1
cmVTdGF0ZSwgc3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIHVp
bnQzMl90LCB1aW50MzJfdCwgdWludDMyX3QsIENhbGxiYWNrQmFzZTo6RXJyb3IpPik7CiAgICAg
dm9pZCB1cGRhdGVCbG9ja1NlbGVjdGlvbldpdGhUb3VjaChjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCwgdWludDMyX3QgdG91Y2gsIHVpbnQzMl90IGhhbmRsZVBvc2l0aW9uKTsKICAgICB2b2lkIGV4
dGVuZFNlbGVjdGlvbihXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHkpOwogICAgIHZvaWQgc2VsZWN0
V29yZEJhY2t3YXJkKCk7CkBAIC00ODAsNyArNDgwLDcgQEAgcHVibGljOgogCiAjaWYgUExBVEZP
Uk0oTUFDKQogICAgIHZvaWQgaW5zZXJ0RGljdGF0ZWRUZXh0QXN5bmMoY29uc3QgU3RyaW5nJiB0
ZXh0LCBjb25zdCBFZGl0aW5nUmFuZ2UmIHJlcGxhY2VtZW50UmFuZ2UsIGNvbnN0IFZlY3RvcjxX
ZWJDb3JlOjpUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2U+JiBkaWN0YXRpb25BbHRlcm5hdGl2ZXMp
OwotICAgIHZvaWQgYXR0cmlidXRlZFN1YnN0cmluZ0ZvckNoYXJhY3RlclJhbmdlQXN5bmMoY29u
c3QgRWRpdGluZ1JhbmdlJiwgUGFzc1JlZlB0cjxBdHRyaWJ1dGVkU3RyaW5nRm9yQ2hhcmFjdGVy
UmFuZ2VDYWxsYmFjaz4pOworICAgIHZvaWQgYXR0cmlidXRlZFN1YnN0cmluZ0ZvckNoYXJhY3Rl
clJhbmdlQXN5bmMoY29uc3QgRWRpdGluZ1JhbmdlJiwgc3RkOjpmdW5jdGlvbjx2b2lkIChjb25z
dCBBdHRyaWJ1dGVkU3RyaW5nJiwgY29uc3QgRWRpdGluZ1JhbmdlJiwgQ2FsbGJhY2tCYXNlOjpF
cnJvcik+KTsKIAogI2lmICFVU0UoQVNZTkNfTlNURVhUSU5QVVRDTElFTlQpCiAgICAgYm9vbCBp
bnNlcnRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgRWRpdGluZ1JhbmdlJiByZXBsYWNl
bWVudFJhbmdlKTsKQEAgLTY1NywxMyArNjU3LDEzIEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoTUhU
TUwpCiAgICAgdm9pZCBnZXRDb250ZW50c0FzTUhUTUxEYXRhKFBhc3NSZWZQdHI8RGF0YUNhbGxi
YWNrPiwgYm9vbCB1c2VCaW5hcnlFbmNvZGluZyk7CiAjZW5kaWYKLSAgICB2b2lkIGdldE1haW5S
ZXNvdXJjZURhdGFPZkZyYW1lKFdlYkZyYW1lUHJveHkqLCBQYXNzUmVmUHRyPERhdGFDYWxsYmFj
az4pOwotICAgIHZvaWQgZ2V0UmVzb3VyY2VEYXRhRnJvbUZyYW1lKFdlYkZyYW1lUHJveHkqLCBB
UEk6OlVSTCosIFBhc3NSZWZQdHI8RGF0YUNhbGxiYWNrPik7CisgICAgdm9pZCBnZXRNYWluUmVz
b3VyY2VEYXRhT2ZGcmFtZShXZWJGcmFtZVByb3h5Kiwgc3RkOjpmdW5jdGlvbjx2b2lkIChBUEk6
OkRhdGEqLCBDYWxsYmFja0Jhc2U6OkVycm9yKT4pOworICAgIHZvaWQgZ2V0UmVzb3VyY2VEYXRh
RnJvbUZyYW1lKFdlYkZyYW1lUHJveHkqLCBBUEk6OlVSTCosIHN0ZDo6ZnVuY3Rpb248dm9pZCAo
QVBJOjpEYXRhKiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+KTsKICAgICB2b2lkIGdldFJlbmRlclRy
ZWVFeHRlcm5hbFJlcHJlc2VudGF0aW9uKFBhc3NSZWZQdHI8U3RyaW5nQ2FsbGJhY2s+KTsKICAg
ICB2b2lkIGdldFNlbGVjdGlvbk9yQ29udGVudHNBc1N0cmluZyhQYXNzUmVmUHRyPFN0cmluZ0Nh
bGxiYWNrPik7CiAgICAgdm9pZCBnZXRTZWxlY3Rpb25Bc1dlYkFyY2hpdmVEYXRhKFBhc3NSZWZQ
dHI8RGF0YUNhbGxiYWNrPik7CiAgICAgdm9pZCBnZXRTb3VyY2VGb3JGcmFtZShXZWJGcmFtZVBy
b3h5KiwgUGFzc1JlZlB0cjxTdHJpbmdDYWxsYmFjaz4pOwotICAgIHZvaWQgZ2V0V2ViQXJjaGl2
ZU9mRnJhbWUoV2ViRnJhbWVQcm94eSosIFBhc3NSZWZQdHI8RGF0YUNhbGxiYWNrPik7CisgICAg
dm9pZCBnZXRXZWJBcmNoaXZlT2ZGcmFtZShXZWJGcmFtZVByb3h5Kiwgc3RkOjpmdW5jdGlvbjx2
b2lkIChBUEk6OkRhdGEqLCBDYWxsYmFja0Jhc2U6OkVycm9yKT4pOwogICAgIHZvaWQgcnVuSmF2
YVNjcmlwdEluTWFpbkZyYW1lKGNvbnN0IFN0cmluZyYsIFBhc3NSZWZQdHI8U2NyaXB0VmFsdWVD
YWxsYmFjaz4pOwogICAgIHZvaWQgZm9yY2VSZXBhaW50KFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNr
Pik7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUNhY2hlTWFu
YWdlclByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UmVzb3VyY2VDYWNoZU1hbmFnZXJQcm94eS5jcHAJKHJldmlzaW9uIDE2OTk5MSkKKysrIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUNhY2hlTWFuYWdlclByb3h5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODgsOSArODgsOSBAQCB2b2lkIFdlYlJlc291cmNlQ2FjaGVNYW5hZ2Vy
UHJveHk6OmRlcmVmCiAgICAgQVBJOjpPYmplY3Q6OmRlcmVmKCk7CiB9CiAKLXZvaWQgV2ViUmVz
b3VyY2VDYWNoZU1hbmFnZXJQcm94eTo6Z2V0Q2FjaGVPcmlnaW5zKFBhc3NSZWZQdHI8QXJyYXlD
YWxsYmFjaz4gcHJwQ2FsbGJhY2spCit2b2lkIFdlYlJlc291cmNlQ2FjaGVNYW5hZ2VyUHJveHk6
OmdldENhY2hlT3JpZ2lucyhzdGQ6OmZ1bmN0aW9uPHZvaWQgKEFQSTo6QXJyYXkqLCBDYWxsYmFj
a0Jhc2U6OkVycm9yKT4gY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBSZWZQdHI8QXJyYXlDYWxs
YmFjaz4gY2FsbGJhY2sgPSBwcnBDYWxsYmFjazsKKyAgICBSZWZQdHI8QXJyYXlDYWxsYmFjaz4g
Y2FsbGJhY2sgPSBBcnJheUNhbGxiYWNrOjpjcmVhdGUoY2FsbGJhY2tGdW5jdGlvbik7CiAgICAg
dWludDY0X3QgY2FsbGJhY2tJRCA9IGNhbGxiYWNrLT5jYWxsYmFja0lEKCk7CiAgICAgbV9hcnJh
eUNhbGxiYWNrcy5zZXQoY2FsbGJhY2tJRCwgY2FsbGJhY2sucmVsZWFzZSgpKTsKIApJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlQ2FjaGVNYW5hZ2VyUHJveHkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VDYWNoZU1h
bmFnZXJQcm94eS5oCShyZXZpc2lvbiAxNjk5OTEpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUmVzb3VyY2VDYWNoZU1hbmFnZXJQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3
ICs1MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJSZXNvdXJjZUNhY2hl
TWFuYWdlclByb3h5PiBjcmVhdGUoV2ViQ29udGV4dCopOwogICAgIHZpcnR1YWwgfldlYlJlc291
cmNlQ2FjaGVNYW5hZ2VyUHJveHkoKTsKIAotICAgIHZvaWQgZ2V0Q2FjaGVPcmlnaW5zKFBhc3NS
ZWZQdHI8QXJyYXlDYWxsYmFjaz4pOworICAgIHZvaWQgZ2V0Q2FjaGVPcmlnaW5zKHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoQVBJOjpBcnJheSosIENhbGxiYWNrQmFzZTo6RXJyb3IpPik7CiAgICAgdm9p
ZCBjbGVhckNhY2hlRm9yT3JpZ2luKFdlYlNlY3VyaXR5T3JpZ2luKiwgUmVzb3VyY2VDYWNoZXNU
b0NsZWFyKTsKICAgICB2b2lkIGNsZWFyQ2FjaGVGb3JBbGxPcmlnaW5zKFJlc291cmNlQ2FjaGVz
VG9DbGVhcik7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0FwcGxp
Y2F0aW9uQ2FjaGVNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0MvV0tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5jcHAJKHJldmlzaW9uIDE2OTk5
MSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0FwcGxpY2F0aW9uQ2FjaGVN
YW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBXS1R5cGVJRCBXS0Fw
cGxpY2F0aW9uQ2FjaGVNYW5hZ2VyR2V0VHlwCiAKIHZvaWQgV0tBcHBsaWNhdGlvbkNhY2hlTWFu
YWdlckdldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5zKFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXJS
ZWYgYXBwbGljYXRpb25DYWNoZU1hbmFnZXJSZWYsIHZvaWQqIGNvbnRleHQsIFdLQXBwbGljYXRp
b25DYWNoZU1hbmFnZXJHZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luc0Z1bmN0aW9uIGNhbGxiYWNr
KQogewotICAgIHRvSW1wbChhcHBsaWNhdGlvbkNhY2hlTWFuYWdlclJlZiktPmdldEFwcGxpY2F0
aW9uQ2FjaGVPcmlnaW5zKEFycmF5Q2FsbGJhY2s6OmNyZWF0ZSh0b0dlbmVyaWNDYWxsYmFja0Z1
bmN0aW9uKGNvbnRleHQsIGNhbGxiYWNrKSkpOworICAgIHRvSW1wbChhcHBsaWNhdGlvbkNhY2hl
TWFuYWdlclJlZiktPmdldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5zKHRvR2VuZXJpY0NhbGxiYWNr
RnVuY3Rpb24oY29udGV4dCwgY2FsbGJhY2spKTsKIH0KIAogdm9pZCBXS0FwcGxpY2F0aW9uQ2Fj
aGVNYW5hZ2VyRGVsZXRlRW50cmllc0Zvck9yaWdpbihXS0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2Vy
UmVmIGFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUmVmLCBXS1NlY3VyaXR5T3JpZ2luUmVmIG9yaWdp
blJlZikKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQu
Y3BwCShyZXZpc2lvbiAxNjk5OTEpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mv
V0tDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTE3LDEyICs1MTcsMTIgQEAgdm9pZCBX
S0NvbnRleHRXYXJtSW5pdGlhbFByb2Nlc3MoV0tDb250ZQogCiB2b2lkIFdLQ29udGV4dEdldFN0
YXRpc3RpY3MoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIHZvaWQqIGNvbnRleHQsIFdLQ29udGV4
dEdldFN0YXRpc3RpY3NGdW5jdGlvbiBjYWxsYmFjaykKIHsKLSAgICB0b0ltcGwoY29udGV4dFJl
ZiktPmdldFN0YXRpc3RpY3MoMHhGRkZGRkZGRiwgRGljdGlvbmFyeUNhbGxiYWNrOjpjcmVhdGUo
dG9HZW5lcmljQ2FsbGJhY2tGdW5jdGlvbihjb250ZXh0LCBjYWxsYmFjaykpKTsKKyAgICB0b0lt
cGwoY29udGV4dFJlZiktPmdldFN0YXRpc3RpY3MoMHhGRkZGRkZGRiwgdG9HZW5lcmljQ2FsbGJh
Y2tGdW5jdGlvbihjb250ZXh0LCBjYWxsYmFjaykpOwogfQogCiB2b2lkIFdLQ29udGV4dEdldFN0
YXRpc3RpY3NXaXRoT3B0aW9ucyhXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tTdGF0aXN0aWNz
T3B0aW9ucyBvcHRpb25zTWFzaywgdm9pZCogY29udGV4dCwgV0tDb250ZXh0R2V0U3RhdGlzdGlj
c0Z1bmN0aW9uIGNhbGxiYWNrKQogewotICAgIHRvSW1wbChjb250ZXh0UmVmKS0+Z2V0U3RhdGlz
dGljcyhvcHRpb25zTWFzaywgRGljdGlvbmFyeUNhbGxiYWNrOjpjcmVhdGUodG9HZW5lcmljQ2Fs
bGJhY2tGdW5jdGlvbihjb250ZXh0LCBjYWxsYmFjaykpKTsKKyAgICB0b0ltcGwoY29udGV4dFJl
ZiktPmdldFN0YXRpc3RpY3Mob3B0aW9uc01hc2ssIHRvR2VuZXJpY0NhbGxiYWNrRnVuY3Rpb24o
Y29udGV4dCwgY2FsbGJhY2spKTsKIH0KIAogdm9pZCBXS0NvbnRleHRHYXJiYWdlQ29sbGVjdEph
dmFTY3JpcHRPYmplY3RzKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQpJbmRleDogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29va2llTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29va2llTWFuYWdlci5jcHAJKHJldmlz
aW9uIDE2OTk5MSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0Nvb2tpZU1h
bmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHZvaWQgV0tDb29raWVN
YW5hZ2VyU2V0Q2xpZW50KFdLQ29va2llTWEKIAogdm9pZCBXS0Nvb2tpZU1hbmFnZXJHZXRIb3N0
bmFtZXNXaXRoQ29va2llcyhXS0Nvb2tpZU1hbmFnZXJSZWYgY29va2llTWFuYWdlclJlZiwgdm9p
ZCogY29udGV4dCwgV0tDb29raWVNYW5hZ2VyR2V0Q29va2llSG9zdG5hbWVzRnVuY3Rpb24gY2Fs
bGJhY2spCiB7Ci0gICAgdG9JbXBsKGNvb2tpZU1hbmFnZXJSZWYpLT5nZXRIb3N0bmFtZXNXaXRo
Q29va2llcyhBcnJheUNhbGxiYWNrOjpjcmVhdGUodG9HZW5lcmljQ2FsbGJhY2tGdW5jdGlvbihj
b250ZXh0LCBjYWxsYmFjaykpKTsKKyAgICB0b0ltcGwoY29va2llTWFuYWdlclJlZiktPmdldEhv
c3RuYW1lc1dpdGhDb29raWVzKHRvR2VuZXJpY0NhbGxiYWNrRnVuY3Rpb24oY29udGV4dCwgY2Fs
bGJhY2spKTsKIH0KIAogdm9pZCBXS0Nvb2tpZU1hbmFnZXJEZWxldGVDb29raWVzRm9ySG9zdG5h
bWUoV0tDb29raWVNYW5hZ2VyUmVmIGNvb2tpZU1hbmFnZXJSZWYsIFdLU3RyaW5nUmVmIGhvc3Ru
YW1lKQpAQCAtNjgsNyArNjgsNyBAQCB2b2lkIFdLQ29va2llTWFuYWdlclNldEhUVFBDb29raWVB
Y2NlcHRQCiAKIHZvaWQgV0tDb29raWVNYW5hZ2VyR2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShX
S0Nvb2tpZU1hbmFnZXJSZWYgY29va2llTWFuYWdlciwgdm9pZCogY29udGV4dCwgV0tDb29raWVN
YW5hZ2VyR2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeUZ1bmN0aW9uIGNhbGxiYWNrKQogewotICAg
IHRvSW1wbChjb29raWVNYW5hZ2VyKS0+Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShIVFRQQ29v
a2llQWNjZXB0UG9saWN5Q2FsbGJhY2s6OmNyZWF0ZSh0b0dlbmVyaWNDYWxsYmFja0Z1bmN0aW9u
PFdLSFRUUENvb2tpZUFjY2VwdFBvbGljeSwgSFRUUENvb2tpZUFjY2VwdFBvbGljeT4oY29udGV4
dCwgY2FsbGJhY2spKSk7CisgICAgdG9JbXBsKGNvb2tpZU1hbmFnZXIpLT5nZXRIVFRQQ29va2ll
QWNjZXB0UG9saWN5KHRvR2VuZXJpY0NhbGxiYWNrRnVuY3Rpb248V0tIVFRQQ29va2llQWNjZXB0
UG9saWN5LCBIVFRQQ29va2llQWNjZXB0UG9saWN5Pihjb250ZXh0LCBjYWxsYmFjaykpOwogfQog
CiB2b2lkIFdLQ29va2llTWFuYWdlclN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhXS0Nvb2tp
ZU1hbmFnZXJSZWYgY29va2llTWFuYWdlcikKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy9XS0RhdGFiYXNlTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9DL1dLRGF0YWJhc2VNYW5hZ2VyLmNwcAkocmV2aXNpb24gMTY5OTkx
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLRGF0YWJhc2VNYW5hZ2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTU1LDcgKzE1NSw3IEBAIHZvaWQgV0tEYXRhYmFzZU1hbmFn
ZXJTZXRDbGllbnQoV0tEYXRhYmEKIHZvaWQgV0tEYXRhYmFzZU1hbmFnZXJHZXREYXRhYmFzZXNC
eU9yaWdpbihXS0RhdGFiYXNlTWFuYWdlclJlZiBkYXRhYmFzZU1hbmFnZXJSZWYsIHZvaWQqIGNv
bnRleHQsIFdLRGF0YWJhc2VNYW5hZ2VyR2V0RGF0YWJhc2VzQnlPcmlnaW5GdW5jdGlvbiBjYWxs
YmFjaykKIHsKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotICAgIHRvSW1wbChkYXRhYmFzZU1h
bmFnZXJSZWYpLT5nZXREYXRhYmFzZXNCeU9yaWdpbihBcnJheUNhbGxiYWNrOjpjcmVhdGUodG9H
ZW5lcmljQ2FsbGJhY2tGdW5jdGlvbihjb250ZXh0LCBjYWxsYmFjaykpKTsKKyAgICB0b0ltcGwo
ZGF0YWJhc2VNYW5hZ2VyUmVmKS0+Z2V0RGF0YWJhc2VzQnlPcmlnaW4odG9HZW5lcmljQ2FsbGJh
Y2tGdW5jdGlvbihjb250ZXh0LCBjYWxsYmFjaykpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0o
ZGF0YWJhc2VNYW5hZ2VyUmVmKTsKICAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CkBAIC0xNjYs
NyArMTY2LDcgQEAgdm9pZCBXS0RhdGFiYXNlTWFuYWdlckdldERhdGFiYXNlc0J5T3JpZwogdm9p
ZCBXS0RhdGFiYXNlTWFuYWdlckdldERhdGFiYXNlT3JpZ2lucyhXS0RhdGFiYXNlTWFuYWdlclJl
ZiBkYXRhYmFzZU1hbmFnZXJSZWYsIHZvaWQqIGNvbnRleHQsIFdLRGF0YWJhc2VNYW5hZ2VyR2V0
RGF0YWJhc2VPcmlnaW5zRnVuY3Rpb24gY2FsbGJhY2spCiB7CiAjaWYgRU5BQkxFKFNRTF9EQVRB
QkFTRSkKLSAgICB0b0ltcGwoZGF0YWJhc2VNYW5hZ2VyUmVmKS0+Z2V0RGF0YWJhc2VPcmlnaW5z
KEFycmF5Q2FsbGJhY2s6OmNyZWF0ZSh0b0dlbmVyaWNDYWxsYmFja0Z1bmN0aW9uKGNvbnRleHQs
IGNhbGxiYWNrKSkpOworICAgIHRvSW1wbChkYXRhYmFzZU1hbmFnZXJSZWYpLT5nZXREYXRhYmFz
ZU9yaWdpbnModG9HZW5lcmljQ2FsbGJhY2tGdW5jdGlvbihjb250ZXh0LCBjYWxsYmFjaykpOwog
I2Vsc2UKICAgICBVTlVTRURfUEFSQU0oZGF0YWJhc2VNYW5hZ2VyUmVmKTsKICAgICBVTlVTRURf
UEFSQU0oY29udGV4dCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tG
cmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dL
RnJhbWUuY3BwCShyZXZpc2lvbiAxNjk5OTEpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0MvV0tGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNCwxNyArMTI0LDE3IEBAIGJv
b2wgV0tGcmFtZUlzRnJhbWVTZXQoV0tGcmFtZVJlZiBmcmFtZVIKIAogdm9pZCBXS0ZyYW1lR2V0
TWFpblJlc291cmNlRGF0YShXS0ZyYW1lUmVmIGZyYW1lUmVmLCBXS0ZyYW1lR2V0UmVzb3VyY2VE
YXRhRnVuY3Rpb24gY2FsbGJhY2ssIHZvaWQqIGNvbnRleHQpCiB7Ci0gICAgdG9JbXBsKGZyYW1l
UmVmKS0+Z2V0TWFpblJlc291cmNlRGF0YShEYXRhQ2FsbGJhY2s6OmNyZWF0ZSh0b0dlbmVyaWND
YWxsYmFja0Z1bmN0aW9uKGNvbnRleHQsIGNhbGxiYWNrKSkpOworICAgIHRvSW1wbChmcmFtZVJl
ZiktPmdldE1haW5SZXNvdXJjZURhdGEodG9HZW5lcmljQ2FsbGJhY2tGdW5jdGlvbihjb250ZXh0
LCBjYWxsYmFjaykpOwogfQogCiB2b2lkIFdLRnJhbWVHZXRSZXNvdXJjZURhdGEoV0tGcmFtZVJl
ZiBmcmFtZVJlZiwgV0tVUkxSZWYgcmVzb3VyY2VVUkwsIFdLRnJhbWVHZXRSZXNvdXJjZURhdGFG
dW5jdGlvbiBjYWxsYmFjaywgdm9pZCogY29udGV4dCkKIHsKLSAgICB0b0ltcGwoZnJhbWVSZWYp
LT5nZXRSZXNvdXJjZURhdGEodG9JbXBsKHJlc291cmNlVVJMKSwgRGF0YUNhbGxiYWNrOjpjcmVh
dGUodG9HZW5lcmljQ2FsbGJhY2tGdW5jdGlvbihjb250ZXh0LCBjYWxsYmFjaykpKTsKKyAgICB0
b0ltcGwoZnJhbWVSZWYpLT5nZXRSZXNvdXJjZURhdGEodG9JbXBsKHJlc291cmNlVVJMKSwgdG9H
ZW5lcmljQ2FsbGJhY2tGdW5jdGlvbihjb250ZXh0LCBjYWxsYmFjaykpOwogfQogCiB2b2lkIFdL
RnJhbWVHZXRXZWJBcmNoaXZlKFdLRnJhbWVSZWYgZnJhbWVSZWYsIFdLRnJhbWVHZXRXZWJBcmNo
aXZlRnVuY3Rpb24gY2FsbGJhY2ssIHZvaWQqIGNvbnRleHQpCiB7Ci0gICAgdG9JbXBsKGZyYW1l
UmVmKS0+Z2V0V2ViQXJjaGl2ZShEYXRhQ2FsbGJhY2s6OmNyZWF0ZSh0b0dlbmVyaWNDYWxsYmFj
a0Z1bmN0aW9uKGNvbnRleHQsIGNhbGxiYWNrKSkpOworICAgIHRvSW1wbChmcmFtZVJlZiktPmdl
dFdlYkFyY2hpdmUodG9HZW5lcmljQ2FsbGJhY2tGdW5jdGlvbihjb250ZXh0LCBjYWxsYmFjaykp
OwogfQogCiAvLyBOT1RFOiBUaGVzZSBhcmUgZGVwcmVjYXRlZCBhbmQgc2hvdWxkIGJlIHJlbW92
ZWQuIFRoZXkgY3VycmVudGx5IGRvIG5vdGhpbmcuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0MvV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyLmNw
cAkocmV2aXNpb24gMTY5OTkxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dL
S2V5VmFsdWVTdG9yYWdlTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDEyICs1Niwx
MiBAQCBXS1N0cmluZ1JlZiBXS0tleVZhbHVlU3RvcmFnZU1hbmFnZXJHZXRNCiAKIHZvaWQgV0tL
ZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyR2V0S2V5VmFsdWVTdG9yYWdlT3JpZ2lucyhXS0tleVZhbHVl
U3RvcmFnZU1hbmFnZXJSZWYga2V5VmFsdWVTdG9yYWdlTWFuYWdlclJlZiwgdm9pZCogY29udGV4
dCwgV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyR2V0S2V5VmFsdWVTdG9yYWdlT3JpZ2luc0Z1bmN0
aW9uIGNhbGxiYWNrKQogewotICAgIHRvSW1wbChrZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyUmVmKS0+
Z2V0S2V5VmFsdWVTdG9yYWdlT3JpZ2lucyhBcnJheUNhbGxiYWNrOjpjcmVhdGUodG9HZW5lcmlj
Q2FsbGJhY2tGdW5jdGlvbihjb250ZXh0LCBjYWxsYmFjaykpKTsKKyAgICB0b0ltcGwoa2V5VmFs
dWVTdG9yYWdlTWFuYWdlclJlZiktPmdldEtleVZhbHVlU3RvcmFnZU9yaWdpbnModG9HZW5lcmlj
Q2FsbGJhY2tGdW5jdGlvbihjb250ZXh0LCBjYWxsYmFjaykpOwogfQogCiB2b2lkIFdLS2V5VmFs
dWVTdG9yYWdlTWFuYWdlckdldFN0b3JhZ2VEZXRhaWxzQnlPcmlnaW4oV0tLZXlWYWx1ZVN0b3Jh
Z2VNYW5hZ2VyUmVmIGtleVZhbHVlU3RvcmFnZU1hbmFnZXJSZWYsIHZvaWQqIGNvbnRleHQsIFdL
S2V5VmFsdWVTdG9yYWdlTWFuYWdlckdldFN0b3JhZ2VEZXRhaWxzQnlPcmlnaW5GdW5jdGlvbiBj
YWxsYmFjaykKIHsKLSAgICB0b0ltcGwoa2V5VmFsdWVTdG9yYWdlTWFuYWdlclJlZiktPmdldFN0
b3JhZ2VEZXRhaWxzQnlPcmlnaW4oQXJyYXlDYWxsYmFjazo6Y3JlYXRlKHRvR2VuZXJpY0NhbGxi
YWNrRnVuY3Rpb24oY29udGV4dCwgY2FsbGJhY2spKSk7CisgICAgdG9JbXBsKGtleVZhbHVlU3Rv
cmFnZU1hbmFnZXJSZWYpLT5nZXRTdG9yYWdlRGV0YWlsc0J5T3JpZ2luKHRvR2VuZXJpY0NhbGxi
YWNrRnVuY3Rpb24oY29udGV4dCwgY2FsbGJhY2spKTsKIH0KIAogdm9pZCBXS0tleVZhbHVlU3Rv
cmFnZU1hbmFnZXJEZWxldGVFbnRyaWVzRm9yT3JpZ2luKFdLS2V5VmFsdWVTdG9yYWdlTWFuYWdl
clJlZiBrZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyUmVmLCBXS1NlY3VyaXR5T3JpZ2luUmVmIG9yaWdp
blJlZikKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS01lZGlhQ2FjaGVN
YW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mv
V0tNZWRpYUNhY2hlTWFuYWdlci5jcHAJKHJldmlzaW9uIDE2OTk5MSkKKysrIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQy9XS01lZGlhQ2FjaGVNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzgsNyArMzgsNyBAQCBXS1R5cGVJRCBXS01lZGlhQ2FjaGVNYW5hZ2VyR2V0VHlwZUlE
KCkKIAogdm9pZCBXS01lZGlhQ2FjaGVNYW5hZ2VyR2V0SG9zdG5hbWVzV2l0aE1lZGlhQ2FjaGUo
V0tNZWRpYUNhY2hlTWFuYWdlclJlZiBtZWRpYUNhY2hlTWFuYWdlclJlZiwgdm9pZCogY29udGV4
dCwgV0tNZWRpYUNhY2hlTWFuYWdlckdldEhvc3RuYW1lc1dpdGhNZWRpYUNhY2hlRnVuY3Rpb24g
Y2FsbGJhY2spCiB7Ci0gICAgdG9JbXBsKG1lZGlhQ2FjaGVNYW5hZ2VyUmVmKS0+Z2V0SG9zdG5h
bWVzV2l0aE1lZGlhQ2FjaGUoQXJyYXlDYWxsYmFjazo6Y3JlYXRlKHRvR2VuZXJpY0NhbGxiYWNr
RnVuY3Rpb24oY29udGV4dCwgY2FsbGJhY2spKSk7CisgICAgdG9JbXBsKG1lZGlhQ2FjaGVNYW5h
Z2VyUmVmKS0+Z2V0SG9zdG5hbWVzV2l0aE1lZGlhQ2FjaGUodG9HZW5lcmljQ2FsbGJhY2tGdW5j
dGlvbihjb250ZXh0LCBjYWxsYmFjaykpOwogfQogCiB2b2lkIFdLTWVkaWFDYWNoZU1hbmFnZXJD
bGVhckNhY2hlRm9ySG9zdG5hbWUoV0tNZWRpYUNhY2hlTWFuYWdlclJlZiBtZWRpYUNhY2hlTWFu
YWdlclJlZiwgV0tTdHJpbmdSZWYgaG9zdG5hbWUpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0MvV0tPcmlnaW5EYXRhTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLT3JpZ2luRGF0YU1hbmFnZXIuY3BwCShyZXZpc2lv
biAxNjk5OTEpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tPcmlnaW5EYXRh
TWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgV0tUeXBlSUQgV0tP
cmlnaW5EYXRhTWFuYWdlckdldFR5cGVJRCgpCiAKIHZvaWQgV0tPcmlnaW5EYXRhTWFuYWdlckdl
dE9yaWdpbnMoV0tPcmlnaW5EYXRhTWFuYWdlclJlZiBvcmlnaW5EYXRhTWFuYWdlclJlZiwgV0tP
cmlnaW5EYXRhVHlwZXMgdHlwZXMsIHZvaWQqIGNvbnRleHQsIFdLT3JpZ2luRGF0YU1hbmFnZXJH
ZXRPcmlnaW5zRnVuY3Rpb24gY2FsbGJhY2spCiB7Ci0gICAgdG9JbXBsKG9yaWdpbkRhdGFNYW5h
Z2VyUmVmKS0+Z2V0T3JpZ2lucyh0eXBlcywgQXJyYXlDYWxsYmFjazo6Y3JlYXRlKHRvR2VuZXJp
Y0NhbGxiYWNrRnVuY3Rpb24oY29udGV4dCwgY2FsbGJhY2spKSk7CisgICAgdG9JbXBsKG9yaWdp
bkRhdGFNYW5hZ2VyUmVmKS0+Z2V0T3JpZ2lucyh0eXBlcywgdG9HZW5lcmljQ2FsbGJhY2tGdW5j
dGlvbihjb250ZXh0LCBjYWxsYmFjaykpOwogfQogCiB2b2lkIFdLT3JpZ2luRGF0YU1hbmFnZXJE
ZWxldGVFbnRyaWVzRm9yT3JpZ2luKFdLT3JpZ2luRGF0YU1hbmFnZXJSZWYgb3JpZ2luRGF0YU1h
bmFnZXJSZWYsIFdLT3JpZ2luRGF0YVR5cGVzIHR5cGVzLCBXS1NlY3VyaXR5T3JpZ2luUmVmIG9y
aWdpblJlZikKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1BsdWdpblNp
dGVEYXRhTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9DL1dLUGx1Z2luU2l0ZURhdGFNYW5hZ2VyLmNwcAkocmV2aXNpb24gMTY5OTkxKQorKysg
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUGx1Z2luU2l0ZURhdGFNYW5hZ2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBXS1R5cGVJRCBXS1BsdWdpblNpdGVE
YXRhTWFuYWdlckdldFR5cGVJCiB2b2lkIFdLUGx1Z2luU2l0ZURhdGFNYW5hZ2VyR2V0U2l0ZXNX
aXRoRGF0YShXS1BsdWdpblNpdGVEYXRhTWFuYWdlclJlZiBtYW5hZ2VyUmVmLCB2b2lkKiBjb250
ZXh0LCBXS1BsdWdpblNpdGVEYXRhTWFuYWdlckdldFNpdGVzV2l0aERhdGFGdW5jdGlvbiBjYWxs
YmFjaykKIHsKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICB0b0ltcGwobWFu
YWdlclJlZiktPmdldFNpdGVzV2l0aERhdGEoQXJyYXlDYWxsYmFjazo6Y3JlYXRlKHRvR2VuZXJp
Y0NhbGxiYWNrRnVuY3Rpb24oY29udGV4dCwgY2FsbGJhY2spKSk7CisgICAgdG9JbXBsKG1hbmFn
ZXJSZWYpLT5nZXRTaXRlc1dpdGhEYXRhKHRvR2VuZXJpY0NhbGxiYWNrRnVuY3Rpb24oY29udGV4
dCwgY2FsbGJhY2spKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKG1hbmFnZXJSZWYpOwogICAg
IFVOVVNFRF9QQVJBTShjb250ZXh0KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQy9XS1Jlc291cmNlQ2FjaGVNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tSZXNvdXJjZUNhY2hlTWFuYWdlci5jcHAJKHJldmlzaW9u
IDE2OTk5MSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlQ2Fj
aGVNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBXS1R5cGVJRCBX
S1Jlc291cmNlQ2FjaGVNYW5hZ2VyR2V0VHlwZUlECiAKIHZvaWQgV0tSZXNvdXJjZUNhY2hlTWFu
YWdlckdldENhY2hlT3JpZ2lucyhXS1Jlc291cmNlQ2FjaGVNYW5hZ2VyUmVmIGNhY2hlTWFuYWdl
clJlZiwgdm9pZCogY29udGV4dCwgV0tSZXNvdXJjZUNhY2hlTWFuYWdlckdldENhY2hlT3JpZ2lu
c0Z1bmN0aW9uIGNhbGxiYWNrKQogewotICAgIHRvSW1wbChjYWNoZU1hbmFnZXJSZWYpLT5nZXRD
YWNoZU9yaWdpbnMoQXJyYXlDYWxsYmFjazo6Y3JlYXRlKHRvR2VuZXJpY0NhbGxiYWNrRnVuY3Rp
b24oY29udGV4dCwgY2FsbGJhY2spKSk7CisgICAgdG9JbXBsKGNhY2hlTWFuYWdlclJlZiktPmdl
dENhY2hlT3JpZ2lucyh0b0dlbmVyaWNDYWxsYmFja0Z1bmN0aW9uKGNvbnRleHQsIGNhbGxiYWNr
KSk7CiB9CiAKIHZvaWQgV0tSZXNvdXJjZUNhY2hlTWFuYWdlckNsZWFyQ2FjaGVGb3JPcmlnaW4o
V0tSZXNvdXJjZUNhY2hlTWFuYWdlclJlZiBjYWNoZU1hbmFnZXJSZWYsIFdLU2VjdXJpdHlPcmln
aW5SZWYgb3JpZ2luUmVmLCBXS1Jlc291cmNlQ2FjaGVzVG9DbGVhciBjYWNoZXNUb0NsZWFyKQpJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcu
bW0JKHJldmlzaW9uIDE2OTk5MSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNTIwLDcgKzE1MjAsNyBAQCAtICh2
b2lkKV9nZXRXZWJBcmNoaXZlRGF0YVdpdGhDb21wbGV0aW9uCiB7CiAgICAgYXV0byBoYW5kbGVy
ID0gYWRvcHROUyhbY29tcGxldGlvbkhhbmRsZXIgY29weV0pOwogCi0gICAgX3BhZ2UtPmdldFdl
YkFyY2hpdmVPZkZyYW1lKF9wYWdlLT5tYWluRnJhbWUoKSwgV2ViS2l0OjpEYXRhQ2FsbGJhY2s6
OmNyZWF0ZShbaGFuZGxlcl0oQVBJOjpEYXRhKiBkYXRhLCBXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6
RXJyb3IgZXJyb3IpIHsKKyAgICBfcGFnZS0+Z2V0V2ViQXJjaGl2ZU9mRnJhbWUoX3BhZ2UtPm1h
aW5GcmFtZSgpLCBbaGFuZGxlcl0oQVBJOjpEYXRhKiBkYXRhLCBXZWJLaXQ6OkNhbGxiYWNrQmFz
ZTo6RXJyb3IgZXJyb3IpIHsKICAgICAgICAgdm9pZCAoXmNvbXBsZXRpb25IYW5kbGVyQmxvY2sp
KE5TRGF0YSAqLCBOU0Vycm9yICopID0gKHZvaWQgKF4pKE5TRGF0YSAqLCBOU0Vycm9yICopKWhh
bmRsZXIuZ2V0KCk7CiAgICAgICAgIGlmIChlcnJvciAhPSBXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6
RXJyb3I6Ok5vbmUpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBQaXBlIGEgcHJvcGVyIGVycm9y
IGluIGZyb20gdGhlIFdlYlBhZ2VQcm94eS4KQEAgLTE1MjgsNyArMTUyOCw3IEBAIC0gKHZvaWQp
X2dldFdlYkFyY2hpdmVEYXRhV2l0aENvbXBsZXRpb24KICAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyQmxvY2sobmlsLCBlcnJvci5nZXQoKSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXJCbG9jayh3cmFwcGVyKCpkYXRhKSwgbmlsKTsKLSAgICB9KSk7
CisgICAgfSk7CiB9CiAKIC0gKF9XS1BhZ2luYXRpb25Nb2RlKV9wYWdpbmF0aW9uTW9kZQpJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQkocmV2aXNpb24g
MTY5OTkxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTI0LDcgKzE1MjQsNyBAQCAtICh2b2lkKWF0dHJpYnV0ZWRTdWJz
dHJpbmdGb3JQcm9wb3NlZFJhCiAgICAgUmV0YWluUHRyPGlkPiBjb21wbGV0aW9uSGFuZGxlciA9
IGFkb3B0TlMoW2NvbXBsZXRpb25IYW5kbGVyUHRyIGNvcHldKTsKIAogICAgIExPRyhUZXh0SW5w
dXQsICJhdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlOigldSwgJXUpIiwgbnNSYW5nZS5sb2Nh
dGlvbiwgbnNSYW5nZS5sZW5ndGgpOwotICAgIF9kYXRhLT5fcGFnZS0+YXR0cmlidXRlZFN1YnN0
cmluZ0ZvckNoYXJhY3RlclJhbmdlQXN5bmMobnNSYW5nZSwgQXR0cmlidXRlZFN0cmluZ0ZvckNo
YXJhY3RlclJhbmdlQ2FsbGJhY2s6OmNyZWF0ZShbY29tcGxldGlvbkhhbmRsZXJdKGNvbnN0IEF0
dHJpYnV0ZWRTdHJpbmcmIHN0cmluZywgY29uc3QgRWRpdGluZ1JhbmdlJiBhY3R1YWxSYW5nZSwg
Q2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvcikgeworICAgIF9kYXRhLT5fcGFnZS0+YXR0cmlidXRl
ZFN1YnN0cmluZ0ZvckNoYXJhY3RlclJhbmdlQXN5bmMobnNSYW5nZSwgW2NvbXBsZXRpb25IYW5k
bGVyXShjb25zdCBBdHRyaWJ1dGVkU3RyaW5nJiBzdHJpbmcsIGNvbnN0IEVkaXRpbmdSYW5nZSYg
YWN0dWFsUmFuZ2UsIENhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKICAgICAgICAgdm9pZCAo
XmNvbXBsZXRpb25IYW5kbGVyQmxvY2spKE5TQXR0cmlidXRlZFN0cmluZyAqLCBOU1JhbmdlKSA9
ICh2b2lkICheKShOU0F0dHJpYnV0ZWRTdHJpbmcgKiwgTlNSYW5nZSkpY29tcGxldGlvbkhhbmRs
ZXIuZ2V0KCk7CiAgICAgICAgIGlmIChlcnJvciAhPSBDYWxsYmFja0Jhc2U6OkVycm9yOjpOb25l
KSB7CiAgICAgICAgICAgICBMT0coVGV4dElucHV0LCAiICAgIC4uLmF0dHJpYnV0ZWRTdWJzdHJp
bmdGcm9tUmFuZ2UgZmFpbGVkLiIpOwpAQCAtMTUzMyw3ICsxNTMzLDcgQEAgLSAodm9pZClhdHRy
aWJ1dGVkU3Vic3RyaW5nRm9yUHJvcG9zZWRSYQogICAgICAgICB9CiAgICAgICAgIExPRyhUZXh0
SW5wdXQsICIgICAgLT4gYXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZSByZXR1cm5lZCAlQCIs
IFtzdHJpbmcuc3RyaW5nLmdldCgpIHN0cmluZ10pOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxl
ckJsb2NrKFtbc3RyaW5nLnN0cmluZy5nZXQoKSByZXRhaW5dIGF1dG9yZWxlYXNlXSwgYWN0dWFs
UmFuZ2UpOwotICAgIH0pKTsKKyAgICB9KTsKIH0KIAogLSAodm9pZClmaXJzdFJlY3RGb3JDaGFy
YWN0ZXJSYW5nZTooTlNSYW5nZSl0aGVSYW5nZSBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShO
U1JlY3QgZmlyc3RSZWN0LCBOU1JhbmdlIGFjdHVhbFJhbmdlKSljb21wbGV0aW9uSGFuZGxlclB0
cgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvV2ViUGx1Z2luU2l0ZURh
dGFNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1
Z2lucy9XZWJQbHVnaW5TaXRlRGF0YU1hbmFnZXIuY3BwCShyZXZpc2lvbiAxNjk5OTEpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9XZWJQbHVnaW5TaXRlRGF0YU1hbmFnZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsOSArMTM4LDkgQEAgdm9pZCBXZWJQbHVnaW5TaXRl
RGF0YU1hbmFnZXI6OmludmFsaWRhdAogICAgIG1fcGVuZGluZ0NsZWFyU2l0ZURhdGEuY2xlYXIo
KTsKIH0KIAotdm9pZCBXZWJQbHVnaW5TaXRlRGF0YU1hbmFnZXI6OmdldFNpdGVzV2l0aERhdGEo
UGFzc1JlZlB0cjxBcnJheUNhbGxiYWNrPiBwcnBDYWxsYmFjaykKK3ZvaWQgV2ViUGx1Z2luU2l0
ZURhdGFNYW5hZ2VyOjpnZXRTaXRlc1dpdGhEYXRhKHN0ZDo6ZnVuY3Rpb248dm9pZCAoQVBJOjpB
cnJheSosIENhbGxiYWNrQmFzZTo6RXJyb3IpPiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIFJl
ZlB0cjxBcnJheUNhbGxiYWNrPiBjYWxsYmFjayA9IHBycENhbGxiYWNrOworICAgIFJlZlB0cjxB
cnJheUNhbGxiYWNrPiBjYWxsYmFjayA9IEFycmF5Q2FsbGJhY2s6OmNyZWF0ZShjYWxsYmFja0Z1
bmN0aW9uKTsKIAogICAgIGlmICghbV93ZWJDb250ZXh0KSB7CiAgICAgICAgIGNhbGxiYWNrLT5p
bnZhbGlkYXRlKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9XZWJQ
bHVnaW5TaXRlRGF0YU1hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvUGx1Z2lucy9XZWJQbHVnaW5TaXRlRGF0YU1hbmFnZXIuaAkocmV2aXNpb24gMTY5OTkx
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvV2ViUGx1Z2luU2l0ZURhdGFN
YW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgIHZv
aWQgaW52YWxpZGF0ZSgpOwogICAgIHZvaWQgY2xlYXJDb250ZXh0KCkgeyBtX3dlYkNvbnRleHQg
PSAwOyB9CiAKLSAgICB2b2lkIGdldFNpdGVzV2l0aERhdGEoUGFzc1JlZlB0cjxBcnJheUNhbGxi
YWNrPik7CisgICAgdm9pZCBnZXRTaXRlc1dpdGhEYXRhKHN0ZDo6ZnVuY3Rpb248dm9pZCAoQVBJ
OjpBcnJheSosIENhbGxiYWNrQmFzZTo6RXJyb3IpPik7CiAgICAgdm9pZCBkaWRHZXRTaXRlc1dp
dGhEYXRhKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzaXRlcywgdWludDY0X3QgY2FsbGJhY2tJRCk7
CiAKICAgICB2b2lkIGNsZWFyU2l0ZURhdGEoQVBJOjpBcnJheSogc2l0ZXMsIHVpbnQ2NF90IGZs
YWdzLCB1aW50NjRfdCBtYXhBZ2VJblNlY29uZHMsIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPik7
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFj
dGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29u
dGVudFZpZXdJbnRlcmFjdGlvbi5tbQkocmV2aXNpb24gMTY5OTkxKQorKysgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTE0MjksMTEgKzE0MjksMTEgQEAgLSAodm9pZClfZGlkVXBkYXRlQmxvY2tTZWxlY3Rp
b25XaXRoVG91YwogLSAodm9pZCljaGFuZ2VTZWxlY3Rpb25XaXRoR2VzdHVyZUF0OihDR1BvaW50
KXBvaW50IHdpdGhHZXN0dXJlOihVSVdLR2VzdHVyZVR5cGUpZ2VzdHVyZVR5cGUgd2l0aFN0YXRl
OihVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGUpc3RhdGUKIHsKICAgICBfdXNpbmdHZXN0dXJlRm9y
U2VsZWN0aW9uID0gWUVTOwotICAgIF9wYWdlLT5zZWxlY3RXaXRoR2VzdHVyZShXZWJDb3JlOjpJ
bnRQb2ludChwb2ludCksIENoYXJhY3RlckdyYW51bGFyaXR5LCBzdGF0aWNfY2FzdDx1aW50MzJf
dD4odG9HZXN0dXJlVHlwZShnZXN0dXJlVHlwZSkpLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4odG9H
ZXN0dXJlUmVjb2duaXplclN0YXRlKHN0YXRlKSksIEdlc3R1cmVDYWxsYmFjazo6Y3JlYXRlKFtz
ZWxmLCBzdGF0ZV0oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCB1aW50MzJfdCBnZXN0
dXJlVHlwZSwgdWludDMyX3QgZ2VzdHVyZVN0YXRlLCB1aW50MzJfdCBmbGFncywgQ2FsbGJhY2tC
YXNlOjpFcnJvciBlcnJvcikgeworICAgIF9wYWdlLT5zZWxlY3RXaXRoR2VzdHVyZShXZWJDb3Jl
OjpJbnRQb2ludChwb2ludCksIENoYXJhY3RlckdyYW51bGFyaXR5LCBzdGF0aWNfY2FzdDx1aW50
MzJfdD4odG9HZXN0dXJlVHlwZShnZXN0dXJlVHlwZSkpLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4o
dG9HZXN0dXJlUmVjb2duaXplclN0YXRlKHN0YXRlKSksIFtzZWxmLCBzdGF0ZV0oY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmIHBvaW50LCB1aW50MzJfdCBnZXN0dXJlVHlwZSwgdWludDMyX3QgZ2Vz
dHVyZVN0YXRlLCB1aW50MzJfdCBmbGFncywgQ2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvcikgewog
ICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkV2l0aEdlc3R1cmUoc2VsZiwgcG9pbnQsIGdlc3R1cmVU
eXBlLCBnZXN0dXJlU3RhdGUsIGZsYWdzLCBlcnJvcik7CiAgICAgICAgIGlmIChzdGF0ZSA9PSBV
SUdlc3R1cmVSZWNvZ25pemVyU3RhdGVFbmRlZCB8fCBzdGF0ZSA9PSBVSUdlc3R1cmVSZWNvZ25p
emVyU3RhdGVDYW5jZWxsZWQpCiAgICAgICAgICAgICBfdXNpbmdHZXN0dXJlRm9yU2VsZWN0aW9u
ID0gTk87Ci0gICAgfSkpOworICAgIH0pOwogfQogCiAtICh2b2lkKWNoYW5nZVNlbGVjdGlvbldp
dGhUb3VjaEF0OihDR1BvaW50KXBvaW50IHdpdGhTZWxlY3Rpb25Ub3VjaDooVUlXS1NlbGVjdGlv
blRvdWNoKXRvdWNoIGJhc2VJc1N0YXJ0OihCT09MKWJhc2VJc1N0YXJ0CkBAIC0xNDQ5LDExICsx
NDQ5LDExIEBAIC0gKHZvaWQpY2hhbmdlU2VsZWN0aW9uV2l0aFRvdWNoQXQ6KENHUG8KIC0gKHZv
aWQpY2hhbmdlU2VsZWN0aW9uV2l0aFRvdWNoZXNGcm9tOihDR1BvaW50KWZyb20gdG86KENHUG9p
bnQpdG8gd2l0aEdlc3R1cmU6KFVJV0tHZXN0dXJlVHlwZSlnZXN0dXJlVHlwZSB3aXRoU3RhdGU6
KFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZSlnZXN0dXJlU3RhdGUKIHsKICAgICBfdXNpbmdHZXN0
dXJlRm9yU2VsZWN0aW9uID0gWUVTOwotICAgIF9wYWdlLT5zZWxlY3RXaXRoVHdvVG91Y2hlcyhX
ZWJDb3JlOjpJbnRQb2ludChmcm9tKSwgV2ViQ29yZTo6SW50UG9pbnQodG8pLCBzdGF0aWNfY2Fz
dDx1aW50MzJfdD4odG9HZXN0dXJlVHlwZShnZXN0dXJlVHlwZSkpLCBzdGF0aWNfY2FzdDx1aW50
MzJfdD4odG9HZXN0dXJlUmVjb2duaXplclN0YXRlKGdlc3R1cmVTdGF0ZSkpLCBHZXN0dXJlQ2Fs
bGJhY2s6OmNyZWF0ZShbc2VsZiwgZ2VzdHVyZVN0YXRlXShjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYgcG9pbnQsIHVpbnQzMl90IGdlc3R1cmVUeXBlLCB1aW50MzJfdCBnZXN0dXJlU3RhdGUsIHVp
bnQzMl90IGZsYWdzLCBDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9yKSB7CisgICAgX3BhZ2UtPnNl
bGVjdFdpdGhUd29Ub3VjaGVzKFdlYkNvcmU6OkludFBvaW50KGZyb20pLCBXZWJDb3JlOjpJbnRQ
b2ludCh0byksIHN0YXRpY19jYXN0PHVpbnQzMl90Pih0b0dlc3R1cmVUeXBlKGdlc3R1cmVUeXBl
KSksIHN0YXRpY19jYXN0PHVpbnQzMl90Pih0b0dlc3R1cmVSZWNvZ25pemVyU3RhdGUoZ2VzdHVy
ZVN0YXRlKSksIFtzZWxmLCBnZXN0dXJlU3RhdGVdKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBw
b2ludCwgdWludDMyX3QgZ2VzdHVyZVR5cGUsIHVpbnQzMl90IGdlc3R1cmVTdGF0ZSwgdWludDMy
X3QgZmxhZ3MsIENhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKICAgICAgICAgc2VsZWN0aW9u
Q2hhbmdlZFdpdGhHZXN0dXJlKHNlbGYsIHBvaW50LCBnZXN0dXJlVHlwZSwgZ2VzdHVyZVN0YXRl
LCBmbGFncywgZXJyb3IpOwogICAgICAgICBpZiAoZ2VzdHVyZVN0YXRlID09IFVJR2VzdHVyZVJl
Y29nbml6ZXJTdGF0ZUVuZGVkIHx8IGdlc3R1cmVTdGF0ZSA9PSBVSUdlc3R1cmVSZWNvZ25pemVy
U3RhdGVDYW5jZWxsZWQpCiAgICAgICAgICAgICBfdXNpbmdHZXN0dXJlRm9yU2VsZWN0aW9uID0g
Tk87Ci0gICAgfSkpOworICAgIH0pOwogfQogCiAtICh2b2lkKWNoYW5nZUJsb2NrU2VsZWN0aW9u
V2l0aFRvdWNoQXQ6KENHUG9pbnQpcG9pbnQgd2l0aFNlbGVjdGlvblRvdWNoOihVSVdLU2VsZWN0
aW9uVG91Y2gpdG91Y2ggZm9ySGFuZGxlOihVSVdLSGFuZGxlUG9zaXRpb24paGFuZGxlCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQko
cmV2aXNpb24gMTY5OTkxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XZWJQYWdl
UHJveHlJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTMwMyw4ICszMDMsMTAgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OmRpZENvbW1pdExheWVyVHJlZShjbwogICAgIG1fcGFnZUNsaWVudC5kaWRDb21t
aXRMYXllclRyZWUobGF5ZXJUcmVlVHJhbnNhY3Rpb24pOwogfQogCi12b2lkIFdlYlBhZ2VQcm94
eTo6c2VsZWN0V2l0aEdlc3R1cmUoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQsIFdlYkNv
cmU6OlRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgdWludDMyX3QgZ2VzdHVyZVR5cGUsIHVp
bnQzMl90IGdlc3R1cmVTdGF0ZSwgUGFzc1JlZlB0cjxHZXN0dXJlQ2FsbGJhY2s+IGNhbGxiYWNr
KQordm9pZCBXZWJQYWdlUHJveHk6OnNlbGVjdFdpdGhHZXN0dXJlKGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50IHBvaW50LCBXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIHVpbnQz
Ml90IGdlc3R1cmVUeXBlLCB1aW50MzJfdCBnZXN0dXJlU3RhdGUsIHN0ZDo6ZnVuY3Rpb248dm9p
ZCAoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCB1aW50MzJfdCwgdWludDMyX3QsIHVpbnQzMl90
LCBDYWxsYmFja0Jhc2U6OkVycm9yKT4gY2FsbGJhY2tGdW5jdGlvbikKIHsKKyAgICBSZWZQdHI8
R2VzdHVyZUNhbGxiYWNrPiBjYWxsYmFjayA9IEdlc3R1cmVDYWxsYmFjazo6Y3JlYXRlKGNhbGxi
YWNrRnVuY3Rpb24pOworCiAgICAgaWYgKCFpc1ZhbGlkKCkpIHsKICAgICAgICAgY2FsbGJhY2st
PmludmFsaWRhdGUoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzk3LDggKzM5OSwxMCBAQCB2b2lk
IFdlYlBhZ2VQcm94eTo6Z2V0QXV0b2NvcnJlY3Rpb25Db250CiAgICAgbV9wcm9jZXNzLT5zZW5k
U3luYyhNZXNzYWdlczo6V2ViUGFnZTo6R2V0QXV0b2NvcnJlY3Rpb25Db250ZXh0KCksIE1lc3Nh
Z2VzOjpXZWJQYWdlOjpHZXRBdXRvY29ycmVjdGlvbkNvbnRleHQ6OlJlcGx5KGJlZm9yZUNvbnRl
eHQsIG1hcmtlZFRleHQsIHNlbGVjdGVkVGV4dCwgYWZ0ZXJDb250ZXh0LCBsb2NhdGlvbiwgbGVu
Z3RoKSwgbV9wYWdlSUQpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6c2VsZWN0V2l0aFR3b1Rv
dWNoZXMoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQgZnJvbSwgY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQgdG8sIHVpbnQzMl90IGdlc3R1cmVUeXBlLCB1aW50MzJfdCBnZXN0dXJlU3RhdGUsIFBhc3NS
ZWZQdHI8R2VzdHVyZUNhbGxiYWNrPiBjYWxsYmFjaykKK3ZvaWQgV2ViUGFnZVByb3h5OjpzZWxl
Y3RXaXRoVHdvVG91Y2hlcyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCBmcm9tLCBjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCB0bywgdWludDMyX3QgZ2VzdHVyZVR5cGUsIHVpbnQzMl90IGdlc3R1cmVT
dGF0ZSwgc3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIHVpbnQz
Ml90LCB1aW50MzJfdCwgdWludDMyX3QsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiBjYWxsYmFja0Z1
bmN0aW9uKQogeworICAgIFJlZlB0cjxHZXN0dXJlQ2FsbGJhY2s+IGNhbGxiYWNrID0gR2VzdHVy
ZUNhbGxiYWNrOjpjcmVhdGUoY2FsbGJhY2tGdW5jdGlvbik7CisKICAgICBpZiAoIWlzVmFsaWQo
KSkgewogICAgICAgICBjYWxsYmFjay0+aW52YWxpZGF0ZSgpOwogICAgICAgICByZXR1cm47Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5t
bQkocmV2aXNpb24gMTY5OTkxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJQ
YWdlUHJveHlNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMyNSw4ICszMjUsMTAgQEAgdm9pZCBX
ZWJQYWdlUHJveHk6Omluc2VydERpY3RhdGVkVGV4dEFzeQogI2VuZGlmCiB9CiAKLXZvaWQgV2Vi
UGFnZVByb3h5OjphdHRyaWJ1dGVkU3Vic3RyaW5nRm9yQ2hhcmFjdGVyUmFuZ2VBc3luYyhjb25z
dCBFZGl0aW5nUmFuZ2UmIHJhbmdlLCBQYXNzUmVmUHRyPEF0dHJpYnV0ZWRTdHJpbmdGb3JDaGFy
YWN0ZXJSYW5nZUNhbGxiYWNrPiBjYWxsYmFjaykKK3ZvaWQgV2ViUGFnZVByb3h5OjphdHRyaWJ1
dGVkU3Vic3RyaW5nRm9yQ2hhcmFjdGVyUmFuZ2VBc3luYyhjb25zdCBFZGl0aW5nUmFuZ2UmIHJh
bmdlLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IEF0dHJpYnV0ZWRTdHJpbmcmLCBjb25zdCBF
ZGl0aW5nUmFuZ2UmLCBDYWxsYmFja0Jhc2U6OkVycm9yKT4gY2FsbGJhY2tGdW5jdGlvbikKIHsK
KyAgICBSZWZQdHI8QXR0cmlidXRlZFN0cmluZ0ZvckNoYXJhY3RlclJhbmdlQ2FsbGJhY2s+IGNh
bGxiYWNrID0gQXR0cmlidXRlZFN0cmluZ0ZvckNoYXJhY3RlclJhbmdlQ2FsbGJhY2s6OmNyZWF0
ZShjYWxsYmFja0Z1bmN0aW9uKTsKKwogICAgIGlmICghaXNWYWxpZCgpKSB7CiAgICAgICAgIGNh
bGxiYWNrLT5pbnZhbGlkYXRlKCk7CiAgICAgICAgIHJldHVybjsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233147</attachid>
            <date>2014-06-15 13:55:38 -0700</date>
            <delta_ts>2014-06-15 20:23:44 -0700</delta_ts>
            <desc>Part 1, with std::move()ing the functions</desc>
            <filename>bug-133927-20140615135515.patch</filename>
            <type>text/plain</type>
            <size>49922</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2OTk5NCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg5IEBACisyMDE0LTA2LTE1ICBEYW4gQmVy
bnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CisKKyAgICAgICAgUGFydCAxIG9mIENoYW5nZSBHZW5l
cmljQ2FsbGJhY2s8PiBmdW5jdGlvbiBwYXJhbWV0ZXJzIGludG8gc3RkOjpmdW5jdGlvbjw+Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzM5MjcKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQy9XS0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdLQXBwbGlj
YXRpb25DYWNoZU1hbmFnZXJHZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2lucyk6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHA6CisgICAgICAgIChXS0NvbnRleHRHZXRTdGF0
aXN0aWNzKToKKyAgICAgICAgKFdLQ29udGV4dEdldFN0YXRpc3RpY3NXaXRoT3B0aW9ucyk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQ29va2llTWFuYWdlci5jcHA6CisgICAgICAgIChX
S0Nvb2tpZU1hbmFnZXJHZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAgIChXS0Nvb2tp
ZU1hbmFnZXJHZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0MvV0tEYXRhYmFzZU1hbmFnZXIuY3BwOgorICAgICAgICAoV0tEYXRhYmFzZU1hbmFnZXJH
ZXREYXRhYmFzZXNCeU9yaWdpbik6CisgICAgICAgIChXS0RhdGFiYXNlTWFuYWdlckdldERhdGFi
YXNlT3JpZ2lucyk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLRnJhbWUuY3BwOgorICAg
ICAgICAoV0tGcmFtZUdldE1haW5SZXNvdXJjZURhdGEpOgorICAgICAgICAoV0tGcmFtZUdldFJl
c291cmNlRGF0YSk6CisgICAgICAgIChXS0ZyYW1lR2V0V2ViQXJjaGl2ZSk6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9DL1dLS2V5VmFsdWVTdG9yYWdlTWFuYWdlci5jcHA6CisgICAgICAgIChX
S0tleVZhbHVlU3RvcmFnZU1hbmFnZXJHZXRLZXlWYWx1ZVN0b3JhZ2VPcmlnaW5zKToKKyAgICAg
ICAgKFdLS2V5VmFsdWVTdG9yYWdlTWFuYWdlckdldFN0b3JhZ2VEZXRhaWxzQnlPcmlnaW4pOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS01lZGlhQ2FjaGVNYW5hZ2VyLmNwcDoKKyAgICAg
ICAgKFdLTWVkaWFDYWNoZU1hbmFnZXJHZXRIb3N0bmFtZXNXaXRoTWVkaWFDYWNoZSk6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9DL1dLT3JpZ2luRGF0YU1hbmFnZXIuY3BwOgorICAgICAgICAo
V0tPcmlnaW5EYXRhTWFuYWdlckdldE9yaWdpbnMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Qy9XS1BsdWdpblNpdGVEYXRhTWFuYWdlci5jcHA6CisgICAgICAgIChXS1BsdWdpblNpdGVEYXRh
TWFuYWdlckdldFNpdGVzV2l0aERhdGEpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1Jl
c291cmNlQ2FjaGVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdLUmVzb3VyY2VDYWNoZU1hbmFnZXJH
ZXRDYWNoZU9yaWdpbnMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3
Lm1tOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2dldFdlYkFyY2hpdmVEYXRhV2l0aENvbXBsZXRp
b25IYW5kbGVyOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbToKKyAg
ICAgICAgKC1bV0tWaWV3IGF0dHJpYnV0ZWRTdWJzdHJpbmdGb3JQcm9wb3NlZFJhbmdlOmNvbXBs
ZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9QbHVnaW5zL1dlYlBsdWdpblNp
dGVEYXRhTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBsdWdpblNpdGVEYXRhTWFu
YWdlcjo6Z2V0U2l0ZXNXaXRoRGF0YSk6CisgICAgICAgICogVUlQcm9jZXNzL1BsdWdpbnMvV2Vi
UGx1Z2luU2l0ZURhdGFNYW5hZ2VyLmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkFwcGxpY2F0
aW9uQ2FjaGVNYW5hZ2VyUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJBcHBsaWNhdGlv
bkNhY2hlTWFuYWdlclByb3h5OjpnZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2lucyk6CisgICAgICAg
ICogVUlQcm9jZXNzL1dlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHkuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHQ6
OmdldFN0YXRpc3RpY3MpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb250ZXh0Lmg6CisgICAg
ICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhUVFBDb29raWVBY2NlcHRQ
b2xpY3kpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHkuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJEYXRhYmFzZU1hbmFnZXJQcm94eTo6Z2V0RGF0YWJhc2VzQnlPcmlnaW4pOgor
ICAgICAgICAoV2ViS2l0OjpXZWJEYXRhYmFzZU1hbmFnZXJQcm94eTo6Z2V0RGF0YWJhc2VPcmln
aW5zKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHkuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViRnJhbWVQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YkZyYW1lUHJveHk6OmdldFdlYkFyY2hpdmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZVBy
b3h5OjpnZXRNYWluUmVzb3VyY2VEYXRhKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVQcm94
eTo6Z2V0UmVzb3VyY2VEYXRhKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViRnJhbWVQcm94eS5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViS2V5VmFsdWVTdG9yYWdlTWFuYWdlcjo6Z2V0S2V5VmFsdWVTdG9y
YWdlT3JpZ2lucyk6CisgICAgICAgIChXZWJLaXQ6OldlYktleVZhbHVlU3RvcmFnZU1hbmFnZXI6
OmdldFN0b3JhZ2VEZXRhaWxzQnlPcmlnaW4pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJLZXlW
YWx1ZVN0b3JhZ2VNYW5hZ2VyLmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYk1lZGlhQ2FjaGVN
YW5hZ2VyUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYUNhY2hlTWFuYWdlclBy
b3h5OjpnZXRIb3N0bmFtZXNXaXRoTWVkaWFDYWNoZSk6CisgICAgICAgICogVUlQcm9jZXNzL1dl
Yk1lZGlhQ2FjaGVNYW5hZ2VyUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViT3JpZ2lu
RGF0YU1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYk9yaWdpbkRhdGFNYW5h
Z2VyUHJveHk6OmdldE9yaWdpbnMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJPcmlnaW5EYXRh
TWFuYWdlclByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z2V0TWFpblJlc291cmNlRGF0YU9mRnJhbWUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmdldFJlc291cmNlRGF0YUZyb21GcmFt
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z2V0V2ViQXJjaGl2ZU9mRnJhbWUp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvV2ViUmVzb3VyY2VDYWNoZU1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlJlc291cmNlQ2FjaGVNYW5hZ2VyUHJveHk6OmdldENhY2hlT3JpZ2lucyk6CisgICAgICAgICog
VUlQcm9jZXNzL1dlYlJlc291cmNlQ2FjaGVNYW5hZ2VyUHJveHkuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbToKKyAgICAgICAgKC1bV0tDb250
ZW50VmlldyBjaGFuZ2VTZWxlY3Rpb25XaXRoR2VzdHVyZUF0OndpdGhHZXN0dXJlOndpdGhTdGF0
ZTpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBjaGFuZ2VTZWxlY3Rpb25XaXRoVG91Y2hl
c0Zyb206dG86d2l0aEdlc3R1cmU6d2l0aFN0YXRlOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9p
b3MvV2ViUGFnZVByb3h5SU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNl
bGVjdFdpdGhHZXN0dXJlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZWxlY3RX
aXRoVHdvVG91Y2hlcyk6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMu
bW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6YXR0cmlidXRlZFN1YnN0cmluZ0Zv
ckNoYXJhY3RlclJhbmdlQXN5bmMpOgorCiAyMDE0LTA2LTE1ICBEYW4gQmVybnN0ZWluICA8bWl0
ekBhcHBsZS5jb20+CiAKICAgICAgICAgR2V0IHJpZCBvZiBWb2lkQVBJQ2FsbGJhY2sKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJBcHBsaWNhdGlvbkNhY2hlTWFuYWdlclByb3h5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQXBwbGljYXRp
b25DYWNoZU1hbmFnZXJQcm94eS5jcHAJKHJldmlzaW9uIDE2OTk5MykKKysrIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJBcHBsaWNhdGlvbkNhY2hlTWFuYWdlclByb3h5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODAsMTMgKzgwLDE1IEBAIHZvaWQgV2ViQXBwbGljYXRpb25DYWNoZU1hbmFn
ZXJQcm94eTo6ZGUKICAgICBBUEk6Ok9iamVjdDo6ZGVyZWYoKTsKIH0KIAotdm9pZCBXZWJBcHBs
aWNhdGlvbkNhY2hlTWFuYWdlclByb3h5OjpnZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2lucyhQYXNz
UmVmUHRyPEFycmF5Q2FsbGJhY2s+IHBycENhbGxiYWNrKQordm9pZCBXZWJBcHBsaWNhdGlvbkNh
Y2hlTWFuYWdlclByb3h5OjpnZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2lucyhzdGQ6OmZ1bmN0aW9u
PHZvaWQgKEFQSTo6QXJyYXkqLCBDYWxsYmFja0Jhc2U6OkVycm9yKT4gY2FsbGJhY2tGdW5jdGlv
bikKIHsKLSAgICBpZiAoIWNvbnRleHQoKSkKKyAgICBSZWZQdHI8QXJyYXlDYWxsYmFjaz4gY2Fs
bGJhY2sgPSBBcnJheUNhbGxiYWNrOjpjcmVhdGUoc3RkOjptb3ZlKGNhbGxiYWNrRnVuY3Rpb24p
KTsKKworICAgIGlmICghY29udGV4dCgpKSB7CisgICAgICAgIGNhbGxiYWNrLT5pbnZhbGlkYXRl
KCk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBSZWZQdHI8QXJyYXlDYWxsYmFjaz4g
Y2FsbGJhY2sgPSBwcnBDYWxsYmFjazsKLSAgICAKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0g
Y2FsbGJhY2stPmNhbGxiYWNrSUQoKTsKICAgICBtX2FycmF5Q2FsbGJhY2tzLnNldChjYWxsYmFj
a0lELCBjYWxsYmFjay5yZWxlYXNlKCkpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXJQcm94eS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJBcHBsaWNhdGlvbkNhY2hlTWFuYWdlclByb3h5LmgJKHJl
dmlzaW9uIDE2OTk5MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJBcHBsaWNhdGlv
bkNhY2hlTWFuYWdlclByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHJv
eHk+IGNyZWF0ZShXZWJDb250ZXh0Kik7CiAgICAgdmlydHVhbCB+V2ViQXBwbGljYXRpb25DYWNo
ZU1hbmFnZXJQcm94eSgpOwogCi0gICAgdm9pZCBnZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2lucyhQ
YXNzUmVmUHRyPEFycmF5Q2FsbGJhY2s+KTsKKyAgICB2b2lkIGdldEFwcGxpY2F0aW9uQ2FjaGVP
cmlnaW5zKHN0ZDo6ZnVuY3Rpb248dm9pZCAoQVBJOjpBcnJheSosIENhbGxiYWNrQmFzZTo6RXJy
b3IpPik7CiAgICAgdm9pZCBkZWxldGVFbnRyaWVzRm9yT3JpZ2luKFdlYlNlY3VyaXR5T3JpZ2lu
Kik7CiAgICAgdm9pZCBkZWxldGVBbGxFbnRyaWVzKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViQ29udGV4dC5jcHAJKHJldmlzaW9uIDE2OTk5MykKKysrIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxNiwxNCAr
MTIxNiwxNCBAQCBib29sIFdlYkNvbnRleHQ6Omh0dHBQaXBlbGluaW5nRW5hYmxlZCgpCiAjZW5k
aWYKIH0KIAotdm9pZCBXZWJDb250ZXh0OjpnZXRTdGF0aXN0aWNzKHVpbnQzMl90IHN0YXRpc3Rp
Y3NNYXNrLCBQYXNzUmVmUHRyPERpY3Rpb25hcnlDYWxsYmFjaz4gY2FsbGJhY2spCit2b2lkIFdl
YkNvbnRleHQ6OmdldFN0YXRpc3RpY3ModWludDMyX3Qgc3RhdGlzdGljc01hc2ssIHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoSW1tdXRhYmxlRGljdGlvbmFyeSosIENhbGxiYWNrQmFzZTo6RXJyb3IpPiBj
YWxsYmFja0Z1bmN0aW9uKQogewogICAgIGlmICghc3RhdGlzdGljc01hc2spIHsKLSAgICAgICAg
Y2FsbGJhY2stPmludmFsaWRhdGUoKTsKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlvbihudWxscHRy
LCBDYWxsYmFja0Jhc2U6OkVycm9yOjpVbmtub3duKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIFJlZlB0cjxTdGF0aXN0aWNzUmVxdWVzdD4gcmVxdWVzdCA9IFN0YXRpc3RpY3NSZXF1
ZXN0OjpjcmVhdGUoY2FsbGJhY2spOworICAgIFJlZlB0cjxTdGF0aXN0aWNzUmVxdWVzdD4gcmVx
dWVzdCA9IFN0YXRpc3RpY3NSZXF1ZXN0OjpjcmVhdGUoRGljdGlvbmFyeUNhbGxiYWNrOjpjcmVh
dGUoc3RkOjptb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKSk7CiAKICAgICBpZiAoc3RhdGlzdGljc01h
c2sgJiBTdGF0aXN0aWNzUmVxdWVzdFR5cGVXZWJDb250ZW50KQogICAgICAgICByZXF1ZXN0V2Vi
Q29udGVudFN0YXRpc3RpY3MocmVxdWVzdC5nZXQoKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJDb250ZXh0LmgJKHJldmlzaW9uIDE2OTk5MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2Nyw3ICsyNjcsNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRIVFRQUGlwZWxpbmluZ0VuYWJsZWQoYm9vbCk7CiAgICAgYm9v
bCBodHRwUGlwZWxpbmluZ0VuYWJsZWQoKSBjb25zdDsKIAotICAgIHZvaWQgZ2V0U3RhdGlzdGlj
cyh1aW50MzJfdCBzdGF0aXN0aWNzTWFzaywgUGFzc1JlZlB0cjxEaWN0aW9uYXJ5Q2FsbGJhY2s+
KTsKKyAgICB2b2lkIGdldFN0YXRpc3RpY3ModWludDMyX3Qgc3RhdGlzdGljc01hc2ssIHN0ZDo6
ZnVuY3Rpb248dm9pZCAoSW1tdXRhYmxlRGljdGlvbmFyeSosIENhbGxiYWNrQmFzZTo6RXJyb3Ip
Pik7CiAgICAgCiAgICAgdm9pZCBnYXJiYWdlQ29sbGVjdEphdmFTY3JpcHRPYmplY3RzKCk7CiAg
ICAgdm9pZCBzZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxlY3RvclRpbWVyRW5hYmxlZChib29sIGZs
YWcpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvb2tpZU1h
bmFnZXJQcm94eS5jcHAJKHJldmlzaW9uIDE2OTk5MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OSw5ICs5
OSw5IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkZXJlZldlYkNvbnQKICAgICBBUEk6
Ok9iamVjdDo6ZGVyZWYoKTsKIH0KIAotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhv
c3RuYW1lc1dpdGhDb29raWVzKFBhc3NSZWZQdHI8QXJyYXlDYWxsYmFjaz4gcHJwQ2FsbGJhY2sp
Cit2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoc3Rk
OjpmdW5jdGlvbjx2b2lkIChBUEk6OkFycmF5KiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+IGNhbGxi
YWNrRnVuY3Rpb24pCiB7Ci0gICAgUmVmUHRyPEFycmF5Q2FsbGJhY2s+IGNhbGxiYWNrID0gcHJw
Q2FsbGJhY2s7CisgICAgUmVmUHRyPEFycmF5Q2FsbGJhY2s+IGNhbGxiYWNrID0gQXJyYXlDYWxs
YmFjazo6Y3JlYXRlKHN0ZDo6bW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CiAgICAgdWludDY0X3Qg
Y2FsbGJhY2tJRCA9IGNhbGxiYWNrLT5jYWxsYmFja0lEKCk7CiAgICAgbV9hcnJheUNhbGxiYWNr
cy5zZXQoY2FsbGJhY2tJRCwgY2FsbGJhY2sucmVsZWFzZSgpKTsKIApAQCAtMTYxLDkgKzE2MSw5
IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRIVFRQQ29va2kKICAgICBjb250ZXh0
KCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdl
czo6V2ViQ29va2llTWFuYWdlcjo6U2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpKTsK
IH0KIAotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhUVFBDb29raWVBY2NlcHRQb2xp
Y3koUGFzc1JlZlB0cjxIVFRQQ29va2llQWNjZXB0UG9saWN5Q2FsbGJhY2s+IHBycENhbGxiYWNr
KQordm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3ko
c3RkOjpmdW5jdGlvbjx2b2lkIChIVFRQQ29va2llQWNjZXB0UG9saWN5LCBDYWxsYmFja0Jhc2U6
OkVycm9yKT4gY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBSZWZQdHI8SFRUUENvb2tpZUFjY2Vw
dFBvbGljeUNhbGxiYWNrPiBjYWxsYmFjayA9IHBycENhbGxiYWNrOworICAgIFJlZlB0cjxIVFRQ
Q29va2llQWNjZXB0UG9saWN5Q2FsbGJhY2s+IGNhbGxiYWNrID0gSFRUUENvb2tpZUFjY2VwdFBv
bGljeUNhbGxiYWNrOjpjcmVhdGUoc3RkOjptb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKIAogICAg
IHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBjYWxsYmFjay0+Y2FsbGJhY2tJRCgpOwogICAgIG1faHR0
cENvb2tpZUFjY2VwdFBvbGljeUNhbGxiYWNrcy5zZXQoY2FsbGJhY2tJRCwgY2FsbGJhY2sucmVs
ZWFzZSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2Vy
UHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29va2ll
TWFuYWdlclByb3h5LmgJKHJldmlzaW9uIDE2OTk5MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTMgKzYw
LDEzIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgaW5pdGlhbGl6ZUNsaWVudChjb25zdCBXS0Nvb2tp
ZU1hbmFnZXJDbGllbnRCYXNlKik7CiAgICAgCi0gICAgdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29v
a2llcyhQYXNzUmVmUHRyPEFycmF5Q2FsbGJhY2s+KTsKKyAgICB2b2lkIGdldEhvc3RuYW1lc1dp
dGhDb29raWVzKHN0ZDo6ZnVuY3Rpb248dm9pZCAoQVBJOjpBcnJheSosIENhbGxiYWNrQmFzZTo6
RXJyb3IpPik7CiAgICAgdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5n
JiBob3N0bmFtZSk7CiAgICAgdm9pZCBkZWxldGVBbGxDb29raWVzKCk7CiAgICAgdm9pZCBkZWxl
dGVBbGxDb29raWVzTW9kaWZpZWRBZnRlckRhdGUoZG91YmxlKTsKIAogICAgIHZvaWQgc2V0SFRU
UENvb2tpZUFjY2VwdFBvbGljeShIVFRQQ29va2llQWNjZXB0UG9saWN5KTsKLSAgICB2b2lkIGdl
dEhUVFBDb29raWVBY2NlcHRQb2xpY3koUGFzc1JlZlB0cjxIVFRQQ29va2llQWNjZXB0UG9saWN5
Q2FsbGJhY2s+KTsKKyAgICB2b2lkIGdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koc3RkOjpmdW5j
dGlvbjx2b2lkIChIVFRQQ29va2llQWNjZXB0UG9saWN5LCBDYWxsYmFja0Jhc2U6OkVycm9yKT4p
OwogCiAgICAgdm9pZCBzdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoKTsKICAgICB2b2lkIHN0
b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJEYXRhYmFzZU1hbmFnZXJQcm94eS5jcHAJKHJldmlzaW9uIDE2OTk5
MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJEYXRhYmFzZU1hbmFnZXJQcm94eS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Miw5ICsxNTIsOSBAQCB2b2lkIFdlYkRhdGFiYXNlTWFu
YWdlclByb3h5OjpkZXJlZldlYkNvCiAgICAgQVBJOjpPYmplY3Q6OmRlcmVmKCk7CiB9CiAKLXZv
aWQgV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHk6OmdldERhdGFiYXNlc0J5T3JpZ2luKFBhc3NSZWZQ
dHI8QXJyYXlDYWxsYmFjaz4gcHJwQ2FsbGJhY2spCit2b2lkIFdlYkRhdGFiYXNlTWFuYWdlclBy
b3h5OjpnZXREYXRhYmFzZXNCeU9yaWdpbihzdGQ6OmZ1bmN0aW9uPHZvaWQgKEFQSTo6QXJyYXkq
LCBDYWxsYmFja0Jhc2U6OkVycm9yKT4gY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBSZWZQdHI8
QXJyYXlDYWxsYmFjaz4gY2FsbGJhY2sgPSBwcnBDYWxsYmFjazsKKyAgICBSZWZQdHI8QXJyYXlD
YWxsYmFjaz4gY2FsbGJhY2sgPSBBcnJheUNhbGxiYWNrOjpjcmVhdGUoc3RkOjptb3ZlKGNhbGxi
YWNrRnVuY3Rpb24pKTsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gY2FsbGJhY2stPmNhbGxi
YWNrSUQoKTsKICAgICBtX2FycmF5Q2FsbGJhY2tzLnNldChjYWxsYmFja0lELCBjYWxsYmFjay5y
ZWxlYXNlKCkpOwogCkBAIC0yMDUsOSArMjA1LDkgQEAgdm9pZCBXZWJEYXRhYmFzZU1hbmFnZXJQ
cm94eTo6ZGlkR2V0RGF0YQogICAgIGNhbGxiYWNrLT5wZXJmb3JtQ2FsbGJhY2tXaXRoUmV0dXJu
VmFsdWUoQVBJOjpBcnJheTo6Y3JlYXRlKHN0ZDo6bW92ZShyZXN1bHQpKS5nZXQoKSk7CiB9CiAK
LXZvaWQgV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHk6OmdldERhdGFiYXNlT3JpZ2lucyhQYXNzUmVm
UHRyPEFycmF5Q2FsbGJhY2s+IHBycENhbGxiYWNrKQordm9pZCBXZWJEYXRhYmFzZU1hbmFnZXJQ
cm94eTo6Z2V0RGF0YWJhc2VPcmlnaW5zKHN0ZDo6ZnVuY3Rpb248dm9pZCAoQVBJOjpBcnJheSos
IENhbGxiYWNrQmFzZTo6RXJyb3IpPiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIFJlZlB0cjxB
cnJheUNhbGxiYWNrPiBjYWxsYmFjayA9IHBycENhbGxiYWNrOworICAgIFJlZlB0cjxBcnJheUNh
bGxiYWNrPiBjYWxsYmFjayA9IEFycmF5Q2FsbGJhY2s6OmNyZWF0ZShzdGQ6Om1vdmUoY2FsbGJh
Y2tGdW5jdGlvbikpOwogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBjYWxsYmFjay0+Y2FsbGJh
Y2tJRCgpOwogICAgIG1fYXJyYXlDYWxsYmFja3Muc2V0KGNhbGxiYWNrSUQsIGNhbGxiYWNrLnJl
bGVhc2UoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJEYXRhYmFzZU1h
bmFnZXJQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJE
YXRhYmFzZU1hbmFnZXJQcm94eS5oCShyZXZpc2lvbiAxNjk5OTMpCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAt
NTUsOCArNTUsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGluaXRpYWxpemVDbGllbnQoY29uc3Qg
V0tEYXRhYmFzZU1hbmFnZXJDbGllbnRCYXNlKik7CiAKLSAgICB2b2lkIGdldERhdGFiYXNlc0J5
T3JpZ2luKFBhc3NSZWZQdHI8QXJyYXlDYWxsYmFjaz4pOwotICAgIHZvaWQgZ2V0RGF0YWJhc2VP
cmlnaW5zKFBhc3NSZWZQdHI8QXJyYXlDYWxsYmFjaz4pOworICAgIHZvaWQgZ2V0RGF0YWJhc2Vz
QnlPcmlnaW4oc3RkOjpmdW5jdGlvbjx2b2lkIChBUEk6OkFycmF5KiwgQ2FsbGJhY2tCYXNlOjpF
cnJvcik+KTsKKyAgICB2b2lkIGdldERhdGFiYXNlT3JpZ2lucyhzdGQ6OmZ1bmN0aW9uPHZvaWQg
KEFQSTo6QXJyYXkqLCBDYWxsYmFja0Jhc2U6OkVycm9yKT4pOwogICAgIHZvaWQgZGVsZXRlRGF0
YWJhc2VXaXRoTmFtZUZvck9yaWdpbihjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWRlbnRpZmllciwg
V2ViU2VjdXJpdHlPcmlnaW4qKTsKICAgICB2b2lkIGRlbGV0ZURhdGFiYXNlc0Zvck9yaWdpbihX
ZWJTZWN1cml0eU9yaWdpbiopOwogICAgIHZvaWQgZGVsZXRlQWxsRGF0YWJhc2VzKCk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViRnJhbWVQcm94eS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkZyYW1lUHJveHkuY3BwCShyZXZpc2lvbiAx
Njk5OTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViRnJhbWVQcm94eS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE5NSwzNCArMTk1LDM0IEBAIFdlYkZvcm1TdWJtaXNzaW9uTGlzdGVu
ZXJQcm94eSogV2ViRnJhbWUKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViRm9ybVN1Ym1pc3Np
b25MaXN0ZW5lclByb3h5Kj4obV9hY3RpdmVMaXN0ZW5lci5nZXQoKSk7CiB9CiAKLXZvaWQgV2Vi
RnJhbWVQcm94eTo6Z2V0V2ViQXJjaGl2ZShQYXNzUmVmUHRyPERhdGFDYWxsYmFjaz4gY2FsbGJh
Y2spCit2b2lkIFdlYkZyYW1lUHJveHk6OmdldFdlYkFyY2hpdmUoc3RkOjpmdW5jdGlvbjx2b2lk
IChBUEk6OkRhdGEqLCBDYWxsYmFja0Jhc2U6OkVycm9yKT4gY2FsbGJhY2tGdW5jdGlvbikKIHsK
ICAgICBpZiAoIW1fcGFnZSkgewotICAgICAgICBjYWxsYmFjay0+aW52YWxpZGF0ZSgpOworICAg
ICAgICBjYWxsYmFja0Z1bmN0aW9uKG51bGxwdHIsIENhbGxiYWNrQmFzZTo6RXJyb3I6OlVua25v
d24pOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9wYWdlLT5nZXRXZWJBcmNoaXZl
T2ZGcmFtZSh0aGlzLCBjYWxsYmFjayk7CisgICAgbV9wYWdlLT5nZXRXZWJBcmNoaXZlT2ZGcmFt
ZSh0aGlzLCBjYWxsYmFja0Z1bmN0aW9uKTsKIH0KIAotdm9pZCBXZWJGcmFtZVByb3h5OjpnZXRN
YWluUmVzb3VyY2VEYXRhKFBhc3NSZWZQdHI8RGF0YUNhbGxiYWNrPiBjYWxsYmFjaykKK3ZvaWQg
V2ViRnJhbWVQcm94eTo6Z2V0TWFpblJlc291cmNlRGF0YShzdGQ6OmZ1bmN0aW9uPHZvaWQgKEFQ
STo6RGF0YSosIENhbGxiYWNrQmFzZTo6RXJyb3IpPiBjYWxsYmFja0Z1bmN0aW9uKQogewogICAg
IGlmICghbV9wYWdlKSB7Ci0gICAgICAgIGNhbGxiYWNrLT5pbnZhbGlkYXRlKCk7CisgICAgICAg
IGNhbGxiYWNrRnVuY3Rpb24obnVsbHB0ciwgQ2FsbGJhY2tCYXNlOjpFcnJvcjo6VW5rbm93bik7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX3BhZ2UtPmdldE1haW5SZXNvdXJjZURh
dGFPZkZyYW1lKHRoaXMsIGNhbGxiYWNrKTsKKyAgICBtX3BhZ2UtPmdldE1haW5SZXNvdXJjZURh
dGFPZkZyYW1lKHRoaXMsIGNhbGxiYWNrRnVuY3Rpb24pOwogfQogCi12b2lkIFdlYkZyYW1lUHJv
eHk6OmdldFJlc291cmNlRGF0YShBUEk6OlVSTCogcmVzb3VyY2VVUkwsIFBhc3NSZWZQdHI8RGF0
YUNhbGxiYWNrPiBjYWxsYmFjaykKK3ZvaWQgV2ViRnJhbWVQcm94eTo6Z2V0UmVzb3VyY2VEYXRh
KEFQSTo6VVJMKiByZXNvdXJjZVVSTCwgc3RkOjpmdW5jdGlvbjx2b2lkIChBUEk6OkRhdGEqLCBD
YWxsYmFja0Jhc2U6OkVycm9yKT4gY2FsbGJhY2tGdW5jdGlvbikKIHsKICAgICBpZiAoIW1fcGFn
ZSkgewotICAgICAgICBjYWxsYmFjay0+aW52YWxpZGF0ZSgpOworICAgICAgICBjYWxsYmFja0Z1
bmN0aW9uKG51bGxwdHIsIENhbGxiYWNrQmFzZTo6RXJyb3I6OlVua25vd24pOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgbV9wYWdlLT5nZXRSZXNvdXJjZURhdGFGcm9tRnJhbWUodGhp
cywgcmVzb3VyY2VVUkwsIGNhbGxiYWNrKTsKKyAgICBtX3BhZ2UtPmdldFJlc291cmNlRGF0YUZy
b21GcmFtZSh0aGlzLCByZXNvdXJjZVVSTCwgY2FsbGJhY2tGdW5jdGlvbik7CiB9CiAKIHZvaWQg
V2ViRnJhbWVQcm94eTo6c2V0VW5yZWFjaGFibGVVUkwoY29uc3QgU3RyaW5nJiB1bnJlYWNoYWJs
ZVVSTCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJGcmFtZVByb3h5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkZyYW1lUHJveHkuaAkocmV2
aXNpb24gMTY5OTkzKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkZyYW1lUHJveHku
aAkod29ya2luZyBjb3B5KQpAQCAtOTUsOSArOTUsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0Rp
c3BsYXlpbmdNYXJrdXBEb2N1bWVudCgpIGNvbnN0OwogICAgIGJvb2wgaXNEaXNwbGF5aW5nUERG
RG9jdW1lbnQoKSBjb25zdDsKIAotICAgIHZvaWQgZ2V0V2ViQXJjaGl2ZShQYXNzUmVmUHRyPERh
dGFDYWxsYmFjaz4pOwotICAgIHZvaWQgZ2V0TWFpblJlc291cmNlRGF0YShQYXNzUmVmUHRyPERh
dGFDYWxsYmFjaz4pOwotICAgIHZvaWQgZ2V0UmVzb3VyY2VEYXRhKEFQSTo6VVJMKiwgUGFzc1Jl
ZlB0cjxEYXRhQ2FsbGJhY2s+KTsKKyAgICB2b2lkIGdldFdlYkFyY2hpdmUoc3RkOjpmdW5jdGlv
bjx2b2lkIChBUEk6OkRhdGEqLCBDYWxsYmFja0Jhc2U6OkVycm9yKT4pOworICAgIHZvaWQgZ2V0
TWFpblJlc291cmNlRGF0YShzdGQ6OmZ1bmN0aW9uPHZvaWQgKEFQSTo6RGF0YSosIENhbGxiYWNr
QmFzZTo6RXJyb3IpPik7CisgICAgdm9pZCBnZXRSZXNvdXJjZURhdGEoQVBJOjpVUkwqLCBzdGQ6
OmZ1bmN0aW9uPHZvaWQgKEFQSTo6RGF0YSosIENhbGxiYWNrQmFzZTo6RXJyb3IpPik7CiAKICAg
ICB2b2lkIGRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkKGNvbnN0IFN0cmluZyYgdXJsKTsKICAgICB2
b2lkIGRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZChjb25zdCBTdHJp
bmcmIHVybCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViS2V5VmFsdWVTdG9y
YWdlTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YktleVZhbHVlU3RvcmFnZU1hbmFnZXIuY3BwCShyZXZpc2lvbiAxNjk5OTMpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViS2V5VmFsdWVTdG9yYWdlTWFuYWdlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTk5LDkgKzk5LDkgQEAgc3RhdGljIHZvaWQgZGlkR2V0S2V5VmFsdWVTdG9yYWdl
T3JpZ2lucwogICAgIGNhbGxiYWNrLT5wZXJmb3JtQ2FsbGJhY2tXaXRoUmV0dXJuVmFsdWUoQVBJ
OjpBcnJheTo6Y3JlYXRlKHN0ZDo6bW92ZSh3ZWJTZWN1cml0eU9yaWdpbnMpKS5nZXQoKSk7CiB9
CiAKLXZvaWQgV2ViS2V5VmFsdWVTdG9yYWdlTWFuYWdlcjo6Z2V0S2V5VmFsdWVTdG9yYWdlT3Jp
Z2lucyhQYXNzUmVmUHRyPEFycmF5Q2FsbGJhY2s+IHBycENhbGxiYWNrKQordm9pZCBXZWJLZXlW
YWx1ZVN0b3JhZ2VNYW5hZ2VyOjpnZXRLZXlWYWx1ZVN0b3JhZ2VPcmlnaW5zKHN0ZDo6ZnVuY3Rp
b248dm9pZCAoQVBJOjpBcnJheSosIENhbGxiYWNrQmFzZTo6RXJyb3IpPiBjYWxsYmFja0Z1bmN0
aW9uKQogewotICAgIGNvbnRleHQoKS0+c3RvcmFnZU1hbmFnZXIoKS5nZXRPcmlnaW5zKFJ1bkxv
b3A6Om1haW4oKSwgcHJwQ2FsbGJhY2subGVha1JlZigpLCBkaWRHZXRLZXlWYWx1ZVN0b3JhZ2VP
cmlnaW5zKTsKKyAgICBjb250ZXh0KCktPnN0b3JhZ2VNYW5hZ2VyKCkuZ2V0T3JpZ2lucyhSdW5M
b29wOjptYWluKCksIEFycmF5Q2FsbGJhY2s6OmNyZWF0ZShzdGQ6Om1vdmUoY2FsbGJhY2tGdW5j
dGlvbikpLmxlYWtSZWYoKSwgZGlkR2V0S2V5VmFsdWVTdG9yYWdlT3JpZ2lucyk7CiB9CiAKIHN0
YXRpYyB2b2lkIGRpZEdldFN0b3JhZ2VEZXRhaWxzQnlPcmlnaW4oY29uc3QgVmVjdG9yPExvY2Fs
U3RvcmFnZURldGFpbHM+JiBzdG9yYWdlRGV0YWlscywgdm9pZCogY29udGV4dCkKQEAgLTEyOCw5
ICsxMjgsOSBAQCBzdGF0aWMgdm9pZCBkaWRHZXRTdG9yYWdlRGV0YWlsc0J5T3JpZ2luCiAgICAg
Y2FsbGJhY2stPnBlcmZvcm1DYWxsYmFja1dpdGhSZXR1cm5WYWx1ZShBUEk6OkFycmF5OjpjcmVh
dGUoc3RkOjptb3ZlKHJlc3VsdCkpLmdldCgpKTsKIH0KIAotdm9pZCBXZWJLZXlWYWx1ZVN0b3Jh
Z2VNYW5hZ2VyOjpnZXRTdG9yYWdlRGV0YWlsc0J5T3JpZ2luKFBhc3NSZWZQdHI8QXJyYXlDYWxs
YmFjaz4gcHJwQ2FsbGJhY2spCit2b2lkIFdlYktleVZhbHVlU3RvcmFnZU1hbmFnZXI6OmdldFN0
b3JhZ2VEZXRhaWxzQnlPcmlnaW4oc3RkOjpmdW5jdGlvbjx2b2lkIChBUEk6OkFycmF5KiwgQ2Fs
bGJhY2tCYXNlOjpFcnJvcik+IGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgY29udGV4dCgpLT5z
dG9yYWdlTWFuYWdlcigpLmdldFN0b3JhZ2VEZXRhaWxzQnlPcmlnaW4oUnVuTG9vcDo6bWFpbigp
LCBwcnBDYWxsYmFjay5sZWFrUmVmKCksIGRpZEdldFN0b3JhZ2VEZXRhaWxzQnlPcmlnaW4pOwor
ICAgIGNvbnRleHQoKS0+c3RvcmFnZU1hbmFnZXIoKS5nZXRTdG9yYWdlRGV0YWlsc0J5T3JpZ2lu
KFJ1bkxvb3A6Om1haW4oKSwgQXJyYXlDYWxsYmFjazo6Y3JlYXRlKHN0ZDo6bW92ZShjYWxsYmFj
a0Z1bmN0aW9uKSkubGVha1JlZigpLCBkaWRHZXRTdG9yYWdlRGV0YWlsc0J5T3JpZ2luKTsKIH0K
IAogdm9pZCBXZWJLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyOjpkZWxldGVFbnRyaWVzRm9yT3JpZ2lu
KFdlYlNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViS2V5VmFsdWVTdG9yYWdlTWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyLmgJKHJldmlzaW9uIDE2OTk5
MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2Vy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDggKzQ1LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFdlYktleVZhbHVlU3RvcmFnZU1hbmFnZXI+IGNyZWF0ZShXZWJDb250ZXh0Kik7
CiAgICAgdmlydHVhbCB+V2ViS2V5VmFsdWVTdG9yYWdlTWFuYWdlcigpOwogCi0gICAgdm9pZCBn
ZXRLZXlWYWx1ZVN0b3JhZ2VPcmlnaW5zKFBhc3NSZWZQdHI8QXJyYXlDYWxsYmFjaz4pOwotICAg
IHZvaWQgZ2V0U3RvcmFnZURldGFpbHNCeU9yaWdpbihQYXNzUmVmUHRyPEFycmF5Q2FsbGJhY2s+
KTsKKyAgICB2b2lkIGdldEtleVZhbHVlU3RvcmFnZU9yaWdpbnMoc3RkOjpmdW5jdGlvbjx2b2lk
IChBUEk6OkFycmF5KiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+KTsKKyAgICB2b2lkIGdldFN0b3Jh
Z2VEZXRhaWxzQnlPcmlnaW4oc3RkOjpmdW5jdGlvbjx2b2lkIChBUEk6OkFycmF5KiwgQ2FsbGJh
Y2tCYXNlOjpFcnJvcik+KTsKICAgICB2b2lkIGRlbGV0ZUVudHJpZXNGb3JPcmlnaW4oV2ViU2Vj
dXJpdHlPcmlnaW4qKTsKICAgICB2b2lkIGRlbGV0ZUFsbEVudHJpZXMoKTsKIApJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYk1lZGlhQ2FjaGVNYW5hZ2VyUHJveHkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJNZWRpYUNhY2hlTWFuYWdlclBy
b3h5LmNwcAkocmV2aXNpb24gMTY5OTkzKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
Yk1lZGlhQ2FjaGVNYW5hZ2VyUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw5ICs4MSw5
IEBAIHZvaWQgV2ViTWVkaWFDYWNoZU1hbmFnZXJQcm94eTo6ZGVyZWZXZWIKICAgICBBUEk6Ok9i
amVjdDo6ZGVyZWYoKTsKIH0KIAotdm9pZCBXZWJNZWRpYUNhY2hlTWFuYWdlclByb3h5OjpnZXRI
b3N0bmFtZXNXaXRoTWVkaWFDYWNoZShQYXNzUmVmUHRyPEFycmF5Q2FsbGJhY2s+IHBycENhbGxi
YWNrKQordm9pZCBXZWJNZWRpYUNhY2hlTWFuYWdlclByb3h5OjpnZXRIb3N0bmFtZXNXaXRoTWVk
aWFDYWNoZShzdGQ6OmZ1bmN0aW9uPHZvaWQgKEFQSTo6QXJyYXkqLCBDYWxsYmFja0Jhc2U6OkVy
cm9yKT4gY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBSZWZQdHI8QXJyYXlDYWxsYmFjaz4gY2Fs
bGJhY2sgPSBwcnBDYWxsYmFjazsKKyAgICBSZWZQdHI8QXJyYXlDYWxsYmFjaz4gY2FsbGJhY2sg
PSBBcnJheUNhbGxiYWNrOjpjcmVhdGUoc3RkOjptb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKICAg
ICB1aW50NjRfdCBjYWxsYmFja0lEID0gY2FsbGJhY2stPmNhbGxiYWNrSUQoKTsKICAgICBtX2Fy
cmF5Q2FsbGJhY2tzLnNldChjYWxsYmFja0lELCBjYWxsYmFjay5yZWxlYXNlKCkpOwogCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTWVkaWFDYWNoZU1hbmFnZXJQcm94eS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJNZWRpYUNhY2hlTWFuYWdl
clByb3h5LmgJKHJldmlzaW9uIDE2OTk5MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJNZWRpYUNhY2hlTWFuYWdlclByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcg
QEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYk1lZGlhQ2FjaGVNYW5hZ2VyUHJv
eHk+IGNyZWF0ZShXZWJDb250ZXh0Kik7CiAgICAgdmlydHVhbCB+V2ViTWVkaWFDYWNoZU1hbmFn
ZXJQcm94eSgpOwogICAgIAotICAgIHZvaWQgZ2V0SG9zdG5hbWVzV2l0aE1lZGlhQ2FjaGUoUGFz
c1JlZlB0cjxBcnJheUNhbGxiYWNrPik7CisgICAgdm9pZCBnZXRIb3N0bmFtZXNXaXRoTWVkaWFD
YWNoZShzdGQ6OmZ1bmN0aW9uPHZvaWQgKEFQSTo6QXJyYXkqLCBDYWxsYmFja0Jhc2U6OkVycm9y
KT4pOwogICAgIHZvaWQgY2xlYXJDYWNoZUZvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYpOwogICAg
IHZvaWQgY2xlYXJDYWNoZUZvckFsbEhvc3RuYW1lcygpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViT3JpZ2luRGF0YU1hbmFnZXJQcm94eS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYk9yaWdpbkRhdGFNYW5hZ2VyUHJveHkuY3BwCShy
ZXZpc2lvbiAxNjk5OTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViT3JpZ2luRGF0
YU1hbmFnZXJQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDEyICs4MCwxNCBAQCB2b2lk
IFdlYk9yaWdpbkRhdGFNYW5hZ2VyUHJveHk6OmRlcmVmV2ViCiAgICAgQVBJOjpPYmplY3Q6OmRl
cmVmKCk7CiB9CiAKLXZvaWQgV2ViT3JpZ2luRGF0YU1hbmFnZXJQcm94eTo6Z2V0T3JpZ2lucyhX
S09yaWdpbkRhdGFUeXBlcyB0eXBlcywgUGFzc1JlZlB0cjxBcnJheUNhbGxiYWNrPiBwcnBDYWxs
YmFjaykKK3ZvaWQgV2ViT3JpZ2luRGF0YU1hbmFnZXJQcm94eTo6Z2V0T3JpZ2lucyhXS09yaWdp
bkRhdGFUeXBlcyB0eXBlcywgc3RkOjpmdW5jdGlvbjx2b2lkIChBUEk6OkFycmF5KiwgQ2FsbGJh
Y2tCYXNlOjpFcnJvcik+IGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgaWYgKCFjb250ZXh0KCkp
Ci0gICAgICAgIHJldHVybjsKKyAgICBSZWZQdHI8QXJyYXlDYWxsYmFjaz4gY2FsbGJhY2sgPSBB
cnJheUNhbGxiYWNrOjpjcmVhdGUoc3RkOjptb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKIAotICAg
IFJlZlB0cjxBcnJheUNhbGxiYWNrPiBjYWxsYmFjayA9IHBycENhbGxiYWNrOworICAgIGlmICgh
Y29udGV4dCgpKSB7CisgICAgICAgIGNhbGxiYWNrLT5pbnZhbGlkYXRlKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CiAKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gY2FsbGJhY2stPmNhbGxi
YWNrSUQoKTsKICAgICBtX2FycmF5Q2FsbGJhY2tzLnNldChjYWxsYmFja0lELCBjYWxsYmFjay5y
ZWxlYXNlKCkpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYk9yaWdpbkRhdGFN
YW5hZ2VyUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
T3JpZ2luRGF0YU1hbmFnZXJQcm94eS5oCShyZXZpc2lvbiAxNjk5OTMpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViT3JpZ2luRGF0YU1hbmFnZXJQcm94eS5oCSh3b3JraW5nIGNvcHkp
CkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJPcmln
aW5EYXRhTWFuYWdlclByb3h5PiBjcmVhdGUoV2ViQ29udGV4dCopOwogICAgIHZpcnR1YWwgfldl
Yk9yaWdpbkRhdGFNYW5hZ2VyUHJveHkoKTsKIAotICAgIHZvaWQgZ2V0T3JpZ2lucyhXS09yaWdp
bkRhdGFUeXBlcywgUGFzc1JlZlB0cjxBcnJheUNhbGxiYWNrPik7CisgICAgdm9pZCBnZXRPcmln
aW5zKFdLT3JpZ2luRGF0YVR5cGVzLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKEFQSTo6QXJyYXkqLCBD
YWxsYmFja0Jhc2U6OkVycm9yKT4pOwogICAgIHZvaWQgZGVsZXRlRW50cmllc0Zvck9yaWdpbihX
S09yaWdpbkRhdGFUeXBlcywgV2ViU2VjdXJpdHlPcmlnaW4qKTsKICAgICB2b2lkIGRlbGV0ZUFs
bEVudHJpZXMoV0tPcmlnaW5EYXRhVHlwZXMpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkocmV2aXNpb24gMTY5OTkzKQorKysgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyOTIsOSAr
MjI5Miw5IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpnZXRTZWxlY3Rpb25Bc1dlYkFyY2gKICAgICBt
X3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkdldFNlbGVjdGlvbkFzV2ViQXJjaGl2
ZURhdGEoY2FsbGJhY2tJRCksIG1fcGFnZUlEKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6Omdl
dE1haW5SZXNvdXJjZURhdGFPZkZyYW1lKFdlYkZyYW1lUHJveHkqIGZyYW1lLCBQYXNzUmVmUHRy
PERhdGFDYWxsYmFjaz4gcHJwQ2FsbGJhY2spCit2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0TWFpblJl
c291cmNlRGF0YU9mRnJhbWUoV2ViRnJhbWVQcm94eSogZnJhbWUsIHN0ZDo6ZnVuY3Rpb248dm9p
ZCAoQVBJOjpEYXRhKiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+IGNhbGxiYWNrRnVuY3Rpb24pCiB7
Ci0gICAgUmVmUHRyPERhdGFDYWxsYmFjaz4gY2FsbGJhY2sgPSBwcnBDYWxsYmFjazsKKyAgICBS
ZWZQdHI8RGF0YUNhbGxiYWNrPiBjYWxsYmFjayA9IERhdGFDYWxsYmFjazo6Y3JlYXRlKHN0ZDo6
bW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CiAgICAgaWYgKCFpc1ZhbGlkKCkpIHsKICAgICAgICAg
Y2FsbGJhY2stPmludmFsaWRhdGUoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjMwNSw5ICsyMzA1
LDkgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmdldE1haW5SZXNvdXJjZURhdGFPZgogICAgIG1fcHJv
Y2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6R2V0TWFpblJlc291cmNlRGF0YU9mRnJhbWUo
ZnJhbWUtPmZyYW1lSUQoKSwgY2FsbGJhY2tJRCksIG1fcGFnZUlEKTsKIH0KIAotdm9pZCBXZWJQ
YWdlUHJveHk6OmdldFJlc291cmNlRGF0YUZyb21GcmFtZShXZWJGcmFtZVByb3h5KiBmcmFtZSwg
QVBJOjpVUkwqIHJlc291cmNlVVJMLCBQYXNzUmVmUHRyPERhdGFDYWxsYmFjaz4gcHJwQ2FsbGJh
Y2spCit2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0UmVzb3VyY2VEYXRhRnJvbUZyYW1lKFdlYkZyYW1l
UHJveHkqIGZyYW1lLCBBUEk6OlVSTCogcmVzb3VyY2VVUkwsIHN0ZDo6ZnVuY3Rpb248dm9pZCAo
QVBJOjpEYXRhKiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+IGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0g
ICAgUmVmUHRyPERhdGFDYWxsYmFjaz4gY2FsbGJhY2sgPSBwcnBDYWxsYmFjazsKKyAgICBSZWZQ
dHI8RGF0YUNhbGxiYWNrPiBjYWxsYmFjayA9IERhdGFDYWxsYmFjazo6Y3JlYXRlKHN0ZDo6bW92
ZShjYWxsYmFja0Z1bmN0aW9uKSk7CiAgICAgaWYgKCFpc1ZhbGlkKCkpIHsKICAgICAgICAgY2Fs
bGJhY2stPmludmFsaWRhdGUoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjMxOCw5ICsyMzE4LDkg
QEAgdm9pZCBXZWJQYWdlUHJveHk6OmdldFJlc291cmNlRGF0YUZyb21GcgogICAgIG1fcHJvY2Vz
cy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6R2V0UmVzb3VyY2VEYXRhRnJvbUZyYW1lKGZyYW1l
LT5mcmFtZUlEKCksIHJlc291cmNlVVJMLT5zdHJpbmcoKSwgY2FsbGJhY2tJRCksIG1fcGFnZUlE
KTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmdldFdlYkFyY2hpdmVPZkZyYW1lKFdlYkZyYW1l
UHJveHkqIGZyYW1lLCBQYXNzUmVmUHRyPERhdGFDYWxsYmFjaz4gcHJwQ2FsbGJhY2spCit2b2lk
IFdlYlBhZ2VQcm94eTo6Z2V0V2ViQXJjaGl2ZU9mRnJhbWUoV2ViRnJhbWVQcm94eSogZnJhbWUs
IHN0ZDo6ZnVuY3Rpb248dm9pZCAoQVBJOjpEYXRhKiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+IGNh
bGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgUmVmUHRyPERhdGFDYWxsYmFjaz4gY2FsbGJhY2sgPSBw
cnBDYWxsYmFjazsKKyAgICBSZWZQdHI8RGF0YUNhbGxiYWNrPiBjYWxsYmFjayA9IERhdGFDYWxs
YmFjazo6Y3JlYXRlKHN0ZDo6bW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CiAgICAgaWYgKCFpc1Zh
bGlkKCkpIHsKICAgICAgICAgY2FsbGJhY2stPmludmFsaWRhdGUoKTsKICAgICAgICAgcmV0dXJu
OwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNpb24g
MTY5OTkzKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOTcsOSArMzk3LDkgQEAgcHVibGljOgogICAgIGludDMyX3QgZGV2aWNl
T3JpZW50YXRpb24oKSBjb25zdCB7IHJldHVybiBtX2RldmljZU9yaWVudGF0aW9uOyB9CiAgICAg
dm9pZCBkaWRDb21taXRMYXllclRyZWUoY29uc3QgV2ViS2l0OjpSZW1vdGVMYXllclRyZWVUcmFu
c2FjdGlvbiYpOwogCi0gICAgdm9pZCBzZWxlY3RXaXRoR2VzdHVyZShjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCwgV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5LCB1aW50MzJfdCBnZXN0dXJlVHlwZSwg
dWludDMyX3QgZ2VzdHVyZVN0YXRlLCBQYXNzUmVmUHRyPEdlc3R1cmVDYWxsYmFjaz4pOworICAg
IHZvaWQgc2VsZWN0V2l0aEdlc3R1cmUoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQsIFdlYkNvcmU6
OlRleHRHcmFudWxhcml0eSwgdWludDMyX3QgZ2VzdHVyZVR5cGUsIHVpbnQzMl90IGdlc3R1cmVT
dGF0ZSwgc3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIHVpbnQz
Ml90LCB1aW50MzJfdCwgdWludDMyX3QsIENhbGxiYWNrQmFzZTo6RXJyb3IpPik7CiAgICAgdm9p
ZCB1cGRhdGVTZWxlY3Rpb25XaXRoVG91Y2hlcyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCwgdWlu
dDMyX3QgdG91Y2hlcywgYm9vbCBiYXNlSXNTdGFydCwgUGFzc1JlZlB0cjxUb3VjaGVzQ2FsbGJh
Y2s+KTsKLSAgICB2b2lkIHNlbGVjdFdpdGhUd29Ub3VjaGVzKGNvbnN0IFdlYkNvcmU6OkludFBv
aW50IGZyb20sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50IHRvLCB1aW50MzJfdCBnZXN0dXJlVHlw
ZSwgdWludDMyX3QgZ2VzdHVyZVN0YXRlLCBQYXNzUmVmUHRyPEdlc3R1cmVDYWxsYmFjaz4pOwor
ICAgIHZvaWQgc2VsZWN0V2l0aFR3b1RvdWNoZXMoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQgZnJv
bSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQgdG8sIHVpbnQzMl90IGdlc3R1cmVUeXBlLCB1aW50
MzJfdCBnZXN0dXJlU3RhdGUsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQmLCB1aW50MzJfdCwgdWludDMyX3QsIHVpbnQzMl90LCBDYWxsYmFja0Jhc2U6OkVycm9y
KT4pOwogICAgIHZvaWQgdXBkYXRlQmxvY2tTZWxlY3Rpb25XaXRoVG91Y2goY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQsIHVpbnQzMl90IHRvdWNoLCB1aW50MzJfdCBoYW5kbGVQb3NpdGlvbik7CiAg
ICAgdm9pZCBleHRlbmRTZWxlY3Rpb24oV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5KTsKICAgICB2
b2lkIHNlbGVjdFdvcmRCYWNrd2FyZCgpOwpAQCAtNDgwLDcgKzQ4MCw3IEBAIHB1YmxpYzoKIAog
I2lmIFBMQVRGT1JNKE1BQykKICAgICB2b2lkIGluc2VydERpY3RhdGVkVGV4dEFzeW5jKGNvbnN0
IFN0cmluZyYgdGV4dCwgY29uc3QgRWRpdGluZ1JhbmdlJiByZXBsYWNlbWVudFJhbmdlLCBjb25z
dCBWZWN0b3I8V2ViQ29yZTo6VGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlPiYgZGljdGF0aW9uQWx0
ZXJuYXRpdmVzKTsKLSAgICB2b2lkIGF0dHJpYnV0ZWRTdWJzdHJpbmdGb3JDaGFyYWN0ZXJSYW5n
ZUFzeW5jKGNvbnN0IEVkaXRpbmdSYW5nZSYsIFBhc3NSZWZQdHI8QXR0cmlidXRlZFN0cmluZ0Zv
ckNoYXJhY3RlclJhbmdlQ2FsbGJhY2s+KTsKKyAgICB2b2lkIGF0dHJpYnV0ZWRTdWJzdHJpbmdG
b3JDaGFyYWN0ZXJSYW5nZUFzeW5jKGNvbnN0IEVkaXRpbmdSYW5nZSYsIHN0ZDo6ZnVuY3Rpb248
dm9pZCAoY29uc3QgQXR0cmlidXRlZFN0cmluZyYsIGNvbnN0IEVkaXRpbmdSYW5nZSYsIENhbGxi
YWNrQmFzZTo6RXJyb3IpPik7CiAKICNpZiAhVVNFKEFTWU5DX05TVEVYVElOUFVUQ0xJRU5UKQog
ICAgIGJvb2wgaW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IEVkaXRpbmdSYW5n
ZSYgcmVwbGFjZW1lbnRSYW5nZSk7CkBAIC02NTcsMTMgKzY1NywxMyBAQCBwdWJsaWM6CiAjaWYg
RU5BQkxFKE1IVE1MKQogICAgIHZvaWQgZ2V0Q29udGVudHNBc01IVE1MRGF0YShQYXNzUmVmUHRy
PERhdGFDYWxsYmFjaz4sIGJvb2wgdXNlQmluYXJ5RW5jb2RpbmcpOwogI2VuZGlmCi0gICAgdm9p
ZCBnZXRNYWluUmVzb3VyY2VEYXRhT2ZGcmFtZShXZWJGcmFtZVByb3h5KiwgUGFzc1JlZlB0cjxE
YXRhQ2FsbGJhY2s+KTsKLSAgICB2b2lkIGdldFJlc291cmNlRGF0YUZyb21GcmFtZShXZWJGcmFt
ZVByb3h5KiwgQVBJOjpVUkwqLCBQYXNzUmVmUHRyPERhdGFDYWxsYmFjaz4pOworICAgIHZvaWQg
Z2V0TWFpblJlc291cmNlRGF0YU9mRnJhbWUoV2ViRnJhbWVQcm94eSosIHN0ZDo6ZnVuY3Rpb248
dm9pZCAoQVBJOjpEYXRhKiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+KTsKKyAgICB2b2lkIGdldFJl
c291cmNlRGF0YUZyb21GcmFtZShXZWJGcmFtZVByb3h5KiwgQVBJOjpVUkwqLCBzdGQ6OmZ1bmN0
aW9uPHZvaWQgKEFQSTo6RGF0YSosIENhbGxiYWNrQmFzZTo6RXJyb3IpPik7CiAgICAgdm9pZCBn
ZXRSZW5kZXJUcmVlRXh0ZXJuYWxSZXByZXNlbnRhdGlvbihQYXNzUmVmUHRyPFN0cmluZ0NhbGxi
YWNrPik7CiAgICAgdm9pZCBnZXRTZWxlY3Rpb25PckNvbnRlbnRzQXNTdHJpbmcoUGFzc1JlZlB0
cjxTdHJpbmdDYWxsYmFjaz4pOwogICAgIHZvaWQgZ2V0U2VsZWN0aW9uQXNXZWJBcmNoaXZlRGF0
YShQYXNzUmVmUHRyPERhdGFDYWxsYmFjaz4pOwogICAgIHZvaWQgZ2V0U291cmNlRm9yRnJhbWUo
V2ViRnJhbWVQcm94eSosIFBhc3NSZWZQdHI8U3RyaW5nQ2FsbGJhY2s+KTsKLSAgICB2b2lkIGdl
dFdlYkFyY2hpdmVPZkZyYW1lKFdlYkZyYW1lUHJveHkqLCBQYXNzUmVmUHRyPERhdGFDYWxsYmFj
az4pOworICAgIHZvaWQgZ2V0V2ViQXJjaGl2ZU9mRnJhbWUoV2ViRnJhbWVQcm94eSosIHN0ZDo6
ZnVuY3Rpb248dm9pZCAoQVBJOjpEYXRhKiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+KTsKICAgICB2
b2lkIHJ1bkphdmFTY3JpcHRJbk1haW5GcmFtZShjb25zdCBTdHJpbmcmLCBQYXNzUmVmUHRyPFNj
cmlwdFZhbHVlQ2FsbGJhY2s+KTsKICAgICB2b2lkIGZvcmNlUmVwYWludChQYXNzUmVmUHRyPFZv
aWRDYWxsYmFjaz4pOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3Vy
Y2VDYWNoZU1hbmFnZXJQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlJlc291cmNlQ2FjaGVNYW5hZ2VyUHJveHkuY3BwCShyZXZpc2lvbiAxNjk5OTMp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VDYWNoZU1hbmFnZXJQcm94
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDkgKzg4LDkgQEAgdm9pZCBXZWJSZXNvdXJjZUNh
Y2hlTWFuYWdlclByb3h5OjpkZXJlZgogICAgIEFQSTo6T2JqZWN0OjpkZXJlZigpOwogfQogCi12
b2lkIFdlYlJlc291cmNlQ2FjaGVNYW5hZ2VyUHJveHk6OmdldENhY2hlT3JpZ2lucyhQYXNzUmVm
UHRyPEFycmF5Q2FsbGJhY2s+IHBycENhbGxiYWNrKQordm9pZCBXZWJSZXNvdXJjZUNhY2hlTWFu
YWdlclByb3h5OjpnZXRDYWNoZU9yaWdpbnMoc3RkOjpmdW5jdGlvbjx2b2lkIChBUEk6OkFycmF5
KiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+IGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgUmVmUHRy
PEFycmF5Q2FsbGJhY2s+IGNhbGxiYWNrID0gcHJwQ2FsbGJhY2s7CisgICAgUmVmUHRyPEFycmF5
Q2FsbGJhY2s+IGNhbGxiYWNrID0gQXJyYXlDYWxsYmFjazo6Y3JlYXRlKHN0ZDo6bW92ZShjYWxs
YmFja0Z1bmN0aW9uKSk7CiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IGNhbGxiYWNrLT5jYWxs
YmFja0lEKCk7CiAgICAgbV9hcnJheUNhbGxiYWNrcy5zZXQoY2FsbGJhY2tJRCwgY2FsbGJhY2su
cmVsZWFzZSgpKTsKIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNl
Q2FjaGVNYW5hZ2VyUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUmVzb3VyY2VDYWNoZU1hbmFnZXJQcm94eS5oCShyZXZpc2lvbiAxNjk5OTMpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VDYWNoZU1hbmFnZXJQcm94eS5oCSh3
b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxXZWJSZXNvdXJjZUNhY2hlTWFuYWdlclByb3h5PiBjcmVhdGUoV2ViQ29udGV4dCopOwog
ICAgIHZpcnR1YWwgfldlYlJlc291cmNlQ2FjaGVNYW5hZ2VyUHJveHkoKTsKIAotICAgIHZvaWQg
Z2V0Q2FjaGVPcmlnaW5zKFBhc3NSZWZQdHI8QXJyYXlDYWxsYmFjaz4pOworICAgIHZvaWQgZ2V0
Q2FjaGVPcmlnaW5zKHN0ZDo6ZnVuY3Rpb248dm9pZCAoQVBJOjpBcnJheSosIENhbGxiYWNrQmFz
ZTo6RXJyb3IpPik7CiAgICAgdm9pZCBjbGVhckNhY2hlRm9yT3JpZ2luKFdlYlNlY3VyaXR5T3Jp
Z2luKiwgUmVzb3VyY2VDYWNoZXNUb0NsZWFyKTsKICAgICB2b2lkIGNsZWFyQ2FjaGVGb3JBbGxP
cmlnaW5zKFJlc291cmNlQ2FjaGVzVG9DbGVhcik7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQy9XS0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tBcHBsaWNhdGlvbkNhY2hlTWFuYWdl
ci5jcHAJKHJldmlzaW9uIDE2OTk5MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Qy9XS0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyAr
MzgsNyBAQCBXS1R5cGVJRCBXS0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyR2V0VHlwCiAKIHZvaWQg
V0tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlckdldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5zKFdLQXBw
bGljYXRpb25DYWNoZU1hbmFnZXJSZWYgYXBwbGljYXRpb25DYWNoZU1hbmFnZXJSZWYsIHZvaWQq
IGNvbnRleHQsIFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXJHZXRBcHBsaWNhdGlvbkNhY2hlT3Jp
Z2luc0Z1bmN0aW9uIGNhbGxiYWNrKQogewotICAgIHRvSW1wbChhcHBsaWNhdGlvbkNhY2hlTWFu
YWdlclJlZiktPmdldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5zKEFycmF5Q2FsbGJhY2s6OmNyZWF0
ZSh0b0dlbmVyaWNDYWxsYmFja0Z1bmN0aW9uKGNvbnRleHQsIGNhbGxiYWNrKSkpOworICAgIHRv
SW1wbChhcHBsaWNhdGlvbkNhY2hlTWFuYWdlclJlZiktPmdldEFwcGxpY2F0aW9uQ2FjaGVPcmln
aW5zKHRvR2VuZXJpY0NhbGxiYWNrRnVuY3Rpb24oY29udGV4dCwgY2FsbGJhY2spKTsKIH0KIAog
dm9pZCBXS0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyRGVsZXRlRW50cmllc0Zvck9yaWdpbihXS0Fw
cGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUmVmIGFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUmVmLCBXS1Nl
Y3VyaXR5T3JpZ2luUmVmIG9yaWdpblJlZikKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy9XS0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCShyZXZpc2lvbiAxNjk5OTMpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTE3
LDEyICs1MTcsMTIgQEAgdm9pZCBXS0NvbnRleHRXYXJtSW5pdGlhbFByb2Nlc3MoV0tDb250ZQog
CiB2b2lkIFdLQ29udGV4dEdldFN0YXRpc3RpY3MoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIHZv
aWQqIGNvbnRleHQsIFdLQ29udGV4dEdldFN0YXRpc3RpY3NGdW5jdGlvbiBjYWxsYmFjaykKIHsK
LSAgICB0b0ltcGwoY29udGV4dFJlZiktPmdldFN0YXRpc3RpY3MoMHhGRkZGRkZGRiwgRGljdGlv
bmFyeUNhbGxiYWNrOjpjcmVhdGUodG9HZW5lcmljQ2FsbGJhY2tGdW5jdGlvbihjb250ZXh0LCBj
YWxsYmFjaykpKTsKKyAgICB0b0ltcGwoY29udGV4dFJlZiktPmdldFN0YXRpc3RpY3MoMHhGRkZG
RkZGRiwgdG9HZW5lcmljQ2FsbGJhY2tGdW5jdGlvbihjb250ZXh0LCBjYWxsYmFjaykpOwogfQog
CiB2b2lkIFdLQ29udGV4dEdldFN0YXRpc3RpY3NXaXRoT3B0aW9ucyhXS0NvbnRleHRSZWYgY29u
dGV4dFJlZiwgV0tTdGF0aXN0aWNzT3B0aW9ucyBvcHRpb25zTWFzaywgdm9pZCogY29udGV4dCwg
V0tDb250ZXh0R2V0U3RhdGlzdGljc0Z1bmN0aW9uIGNhbGxiYWNrKQogewotICAgIHRvSW1wbChj
b250ZXh0UmVmKS0+Z2V0U3RhdGlzdGljcyhvcHRpb25zTWFzaywgRGljdGlvbmFyeUNhbGxiYWNr
OjpjcmVhdGUodG9HZW5lcmljQ2FsbGJhY2tGdW5jdGlvbihjb250ZXh0LCBjYWxsYmFjaykpKTsK
KyAgICB0b0ltcGwoY29udGV4dFJlZiktPmdldFN0YXRpc3RpY3Mob3B0aW9uc01hc2ssIHRvR2Vu
ZXJpY0NhbGxiYWNrRnVuY3Rpb24oY29udGV4dCwgY2FsbGJhY2spKTsKIH0KIAogdm9pZCBXS0Nv
bnRleHRHYXJiYWdlQ29sbGVjdEphdmFTY3JpcHRPYmplY3RzKFdLQ29udGV4dFJlZiBjb250ZXh0
UmVmKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29va2llTWFuYWdl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29v
a2llTWFuYWdlci5jcHAJKHJldmlzaW9uIDE2OTk5MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQy9XS0Nvb2tpZU1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0
Myw3IEBAIHZvaWQgV0tDb29raWVNYW5hZ2VyU2V0Q2xpZW50KFdLQ29va2llTWEKIAogdm9pZCBX
S0Nvb2tpZU1hbmFnZXJHZXRIb3N0bmFtZXNXaXRoQ29va2llcyhXS0Nvb2tpZU1hbmFnZXJSZWYg
Y29va2llTWFuYWdlclJlZiwgdm9pZCogY29udGV4dCwgV0tDb29raWVNYW5hZ2VyR2V0Q29va2ll
SG9zdG5hbWVzRnVuY3Rpb24gY2FsbGJhY2spCiB7Ci0gICAgdG9JbXBsKGNvb2tpZU1hbmFnZXJS
ZWYpLT5nZXRIb3N0bmFtZXNXaXRoQ29va2llcyhBcnJheUNhbGxiYWNrOjpjcmVhdGUodG9HZW5l
cmljQ2FsbGJhY2tGdW5jdGlvbihjb250ZXh0LCBjYWxsYmFjaykpKTsKKyAgICB0b0ltcGwoY29v
a2llTWFuYWdlclJlZiktPmdldEhvc3RuYW1lc1dpdGhDb29raWVzKHRvR2VuZXJpY0NhbGxiYWNr
RnVuY3Rpb24oY29udGV4dCwgY2FsbGJhY2spKTsKIH0KIAogdm9pZCBXS0Nvb2tpZU1hbmFnZXJE
ZWxldGVDb29raWVzRm9ySG9zdG5hbWUoV0tDb29raWVNYW5hZ2VyUmVmIGNvb2tpZU1hbmFnZXJS
ZWYsIFdLU3RyaW5nUmVmIGhvc3RuYW1lKQpAQCAtNjgsNyArNjgsNyBAQCB2b2lkIFdLQ29va2ll
TWFuYWdlclNldEhUVFBDb29raWVBY2NlcHRQCiAKIHZvaWQgV0tDb29raWVNYW5hZ2VyR2V0SFRU
UENvb2tpZUFjY2VwdFBvbGljeShXS0Nvb2tpZU1hbmFnZXJSZWYgY29va2llTWFuYWdlciwgdm9p
ZCogY29udGV4dCwgV0tDb29raWVNYW5hZ2VyR2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeUZ1bmN0
aW9uIGNhbGxiYWNrKQogewotICAgIHRvSW1wbChjb29raWVNYW5hZ2VyKS0+Z2V0SFRUUENvb2tp
ZUFjY2VwdFBvbGljeShIVFRQQ29va2llQWNjZXB0UG9saWN5Q2FsbGJhY2s6OmNyZWF0ZSh0b0dl
bmVyaWNDYWxsYmFja0Z1bmN0aW9uPFdLSFRUUENvb2tpZUFjY2VwdFBvbGljeSwgSFRUUENvb2tp
ZUFjY2VwdFBvbGljeT4oY29udGV4dCwgY2FsbGJhY2spKSk7CisgICAgdG9JbXBsKGNvb2tpZU1h
bmFnZXIpLT5nZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KHRvR2VuZXJpY0NhbGxiYWNrRnVuY3Rp
b248V0tIVFRQQ29va2llQWNjZXB0UG9saWN5LCBIVFRQQ29va2llQWNjZXB0UG9saWN5Pihjb250
ZXh0LCBjYWxsYmFjaykpOwogfQogCiB2b2lkIFdLQ29va2llTWFuYWdlclN0YXJ0T2JzZXJ2aW5n
Q29va2llQ2hhbmdlcyhXS0Nvb2tpZU1hbmFnZXJSZWYgY29va2llTWFuYWdlcikKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0RhdGFiYXNlTWFuYWdlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLRGF0YWJhc2VNYW5hZ2Vy
LmNwcAkocmV2aXNpb24gMTY5OTkzKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
L1dLRGF0YWJhc2VNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU1LDcgKzE1NSw3IEBA
IHZvaWQgV0tEYXRhYmFzZU1hbmFnZXJTZXRDbGllbnQoV0tEYXRhYmEKIHZvaWQgV0tEYXRhYmFz
ZU1hbmFnZXJHZXREYXRhYmFzZXNCeU9yaWdpbihXS0RhdGFiYXNlTWFuYWdlclJlZiBkYXRhYmFz
ZU1hbmFnZXJSZWYsIHZvaWQqIGNvbnRleHQsIFdLRGF0YWJhc2VNYW5hZ2VyR2V0RGF0YWJhc2Vz
QnlPcmlnaW5GdW5jdGlvbiBjYWxsYmFjaykKIHsKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQot
ICAgIHRvSW1wbChkYXRhYmFzZU1hbmFnZXJSZWYpLT5nZXREYXRhYmFzZXNCeU9yaWdpbihBcnJh
eUNhbGxiYWNrOjpjcmVhdGUodG9HZW5lcmljQ2FsbGJhY2tGdW5jdGlvbihjb250ZXh0LCBjYWxs
YmFjaykpKTsKKyAgICB0b0ltcGwoZGF0YWJhc2VNYW5hZ2VyUmVmKS0+Z2V0RGF0YWJhc2VzQnlP
cmlnaW4odG9HZW5lcmljQ2FsbGJhY2tGdW5jdGlvbihjb250ZXh0LCBjYWxsYmFjaykpOwogI2Vs
c2UKICAgICBVTlVTRURfUEFSQU0oZGF0YWJhc2VNYW5hZ2VyUmVmKTsKICAgICBVTlVTRURfUEFS
QU0oY29udGV4dCk7CkBAIC0xNjYsNyArMTY2LDcgQEAgdm9pZCBXS0RhdGFiYXNlTWFuYWdlckdl
dERhdGFiYXNlc0J5T3JpZwogdm9pZCBXS0RhdGFiYXNlTWFuYWdlckdldERhdGFiYXNlT3JpZ2lu
cyhXS0RhdGFiYXNlTWFuYWdlclJlZiBkYXRhYmFzZU1hbmFnZXJSZWYsIHZvaWQqIGNvbnRleHQs
IFdLRGF0YWJhc2VNYW5hZ2VyR2V0RGF0YWJhc2VPcmlnaW5zRnVuY3Rpb24gY2FsbGJhY2spCiB7
CiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKLSAgICB0b0ltcGwoZGF0YWJhc2VNYW5hZ2VyUmVm
KS0+Z2V0RGF0YWJhc2VPcmlnaW5zKEFycmF5Q2FsbGJhY2s6OmNyZWF0ZSh0b0dlbmVyaWNDYWxs
YmFja0Z1bmN0aW9uKGNvbnRleHQsIGNhbGxiYWNrKSkpOworICAgIHRvSW1wbChkYXRhYmFzZU1h
bmFnZXJSZWYpLT5nZXREYXRhYmFzZU9yaWdpbnModG9HZW5lcmljQ2FsbGJhY2tGdW5jdGlvbihj
b250ZXh0LCBjYWxsYmFjaykpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oZGF0YWJhc2VNYW5h
Z2VyUmVmKTsKICAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0MvV0tGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9DL1dLRnJhbWUuY3BwCShyZXZpc2lvbiAxNjk5OTMpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEyNCwxNyArMTI0LDE3IEBAIGJvb2wgV0tGcmFtZUlzRnJhbWVTZXQoV0tGcmFtZVJlZiBmcmFt
ZVIKIAogdm9pZCBXS0ZyYW1lR2V0TWFpblJlc291cmNlRGF0YShXS0ZyYW1lUmVmIGZyYW1lUmVm
LCBXS0ZyYW1lR2V0UmVzb3VyY2VEYXRhRnVuY3Rpb24gY2FsbGJhY2ssIHZvaWQqIGNvbnRleHQp
CiB7Ci0gICAgdG9JbXBsKGZyYW1lUmVmKS0+Z2V0TWFpblJlc291cmNlRGF0YShEYXRhQ2FsbGJh
Y2s6OmNyZWF0ZSh0b0dlbmVyaWNDYWxsYmFja0Z1bmN0aW9uKGNvbnRleHQsIGNhbGxiYWNrKSkp
OworICAgIHRvSW1wbChmcmFtZVJlZiktPmdldE1haW5SZXNvdXJjZURhdGEodG9HZW5lcmljQ2Fs
bGJhY2tGdW5jdGlvbihjb250ZXh0LCBjYWxsYmFjaykpOwogfQogCiB2b2lkIFdLRnJhbWVHZXRS
ZXNvdXJjZURhdGEoV0tGcmFtZVJlZiBmcmFtZVJlZiwgV0tVUkxSZWYgcmVzb3VyY2VVUkwsIFdL
RnJhbWVHZXRSZXNvdXJjZURhdGFGdW5jdGlvbiBjYWxsYmFjaywgdm9pZCogY29udGV4dCkKIHsK
LSAgICB0b0ltcGwoZnJhbWVSZWYpLT5nZXRSZXNvdXJjZURhdGEodG9JbXBsKHJlc291cmNlVVJM
KSwgRGF0YUNhbGxiYWNrOjpjcmVhdGUodG9HZW5lcmljQ2FsbGJhY2tGdW5jdGlvbihjb250ZXh0
LCBjYWxsYmFjaykpKTsKKyAgICB0b0ltcGwoZnJhbWVSZWYpLT5nZXRSZXNvdXJjZURhdGEodG9J
bXBsKHJlc291cmNlVVJMKSwgdG9HZW5lcmljQ2FsbGJhY2tGdW5jdGlvbihjb250ZXh0LCBjYWxs
YmFjaykpOwogfQogCiB2b2lkIFdLRnJhbWVHZXRXZWJBcmNoaXZlKFdLRnJhbWVSZWYgZnJhbWVS
ZWYsIFdLRnJhbWVHZXRXZWJBcmNoaXZlRnVuY3Rpb24gY2FsbGJhY2ssIHZvaWQqIGNvbnRleHQp
CiB7Ci0gICAgdG9JbXBsKGZyYW1lUmVmKS0+Z2V0V2ViQXJjaGl2ZShEYXRhQ2FsbGJhY2s6OmNy
ZWF0ZSh0b0dlbmVyaWNDYWxsYmFja0Z1bmN0aW9uKGNvbnRleHQsIGNhbGxiYWNrKSkpOworICAg
IHRvSW1wbChmcmFtZVJlZiktPmdldFdlYkFyY2hpdmUodG9HZW5lcmljQ2FsbGJhY2tGdW5jdGlv
bihjb250ZXh0LCBjYWxsYmFjaykpOwogfQogCiAvLyBOT1RFOiBUaGVzZSBhcmUgZGVwcmVjYXRl
ZCBhbmQgc2hvdWxkIGJlIHJlbW92ZWQuIFRoZXkgY3VycmVudGx5IGRvIG5vdGhpbmcuCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tLZXlW
YWx1ZVN0b3JhZ2VNYW5hZ2VyLmNwcAkocmV2aXNpb24gMTY5OTkzKQorKysgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9DL1dLS2V5VmFsdWVTdG9yYWdlTWFuYWdlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU2LDEyICs1NiwxMiBAQCBXS1N0cmluZ1JlZiBXS0tleVZhbHVlU3RvcmFnZU1h
bmFnZXJHZXRNCiAKIHZvaWQgV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyR2V0S2V5VmFsdWVTdG9y
YWdlT3JpZ2lucyhXS0tleVZhbHVlU3RvcmFnZU1hbmFnZXJSZWYga2V5VmFsdWVTdG9yYWdlTWFu
YWdlclJlZiwgdm9pZCogY29udGV4dCwgV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyR2V0S2V5VmFs
dWVTdG9yYWdlT3JpZ2luc0Z1bmN0aW9uIGNhbGxiYWNrKQogewotICAgIHRvSW1wbChrZXlWYWx1
ZVN0b3JhZ2VNYW5hZ2VyUmVmKS0+Z2V0S2V5VmFsdWVTdG9yYWdlT3JpZ2lucyhBcnJheUNhbGxi
YWNrOjpjcmVhdGUodG9HZW5lcmljQ2FsbGJhY2tGdW5jdGlvbihjb250ZXh0LCBjYWxsYmFjaykp
KTsKKyAgICB0b0ltcGwoa2V5VmFsdWVTdG9yYWdlTWFuYWdlclJlZiktPmdldEtleVZhbHVlU3Rv
cmFnZU9yaWdpbnModG9HZW5lcmljQ2FsbGJhY2tGdW5jdGlvbihjb250ZXh0LCBjYWxsYmFjaykp
OwogfQogCiB2b2lkIFdLS2V5VmFsdWVTdG9yYWdlTWFuYWdlckdldFN0b3JhZ2VEZXRhaWxzQnlP
cmlnaW4oV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyUmVmIGtleVZhbHVlU3RvcmFnZU1hbmFnZXJS
ZWYsIHZvaWQqIGNvbnRleHQsIFdLS2V5VmFsdWVTdG9yYWdlTWFuYWdlckdldFN0b3JhZ2VEZXRh
aWxzQnlPcmlnaW5GdW5jdGlvbiBjYWxsYmFjaykKIHsKLSAgICB0b0ltcGwoa2V5VmFsdWVTdG9y
YWdlTWFuYWdlclJlZiktPmdldFN0b3JhZ2VEZXRhaWxzQnlPcmlnaW4oQXJyYXlDYWxsYmFjazo6
Y3JlYXRlKHRvR2VuZXJpY0NhbGxiYWNrRnVuY3Rpb24oY29udGV4dCwgY2FsbGJhY2spKSk7Cisg
ICAgdG9JbXBsKGtleVZhbHVlU3RvcmFnZU1hbmFnZXJSZWYpLT5nZXRTdG9yYWdlRGV0YWlsc0J5
T3JpZ2luKHRvR2VuZXJpY0NhbGxiYWNrRnVuY3Rpb24oY29udGV4dCwgY2FsbGJhY2spKTsKIH0K
IAogdm9pZCBXS0tleVZhbHVlU3RvcmFnZU1hbmFnZXJEZWxldGVFbnRyaWVzRm9yT3JpZ2luKFdL
S2V5VmFsdWVTdG9yYWdlTWFuYWdlclJlZiBrZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyUmVmLCBXS1Nl
Y3VyaXR5T3JpZ2luUmVmIG9yaWdpblJlZikKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy9XS01lZGlhQ2FjaGVNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tNZWRpYUNhY2hlTWFuYWdlci5jcHAJKHJldmlzaW9uIDE2
OTk5MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS01lZGlhQ2FjaGVNYW5h
Z2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBXS1R5cGVJRCBXS01lZGlh
Q2FjaGVNYW5hZ2VyR2V0VHlwZUlEKCkKIAogdm9pZCBXS01lZGlhQ2FjaGVNYW5hZ2VyR2V0SG9z
dG5hbWVzV2l0aE1lZGlhQ2FjaGUoV0tNZWRpYUNhY2hlTWFuYWdlclJlZiBtZWRpYUNhY2hlTWFu
YWdlclJlZiwgdm9pZCogY29udGV4dCwgV0tNZWRpYUNhY2hlTWFuYWdlckdldEhvc3RuYW1lc1dp
dGhNZWRpYUNhY2hlRnVuY3Rpb24gY2FsbGJhY2spCiB7Ci0gICAgdG9JbXBsKG1lZGlhQ2FjaGVN
YW5hZ2VyUmVmKS0+Z2V0SG9zdG5hbWVzV2l0aE1lZGlhQ2FjaGUoQXJyYXlDYWxsYmFjazo6Y3Jl
YXRlKHRvR2VuZXJpY0NhbGxiYWNrRnVuY3Rpb24oY29udGV4dCwgY2FsbGJhY2spKSk7CisgICAg
dG9JbXBsKG1lZGlhQ2FjaGVNYW5hZ2VyUmVmKS0+Z2V0SG9zdG5hbWVzV2l0aE1lZGlhQ2FjaGUo
dG9HZW5lcmljQ2FsbGJhY2tGdW5jdGlvbihjb250ZXh0LCBjYWxsYmFjaykpOwogfQogCiB2b2lk
IFdLTWVkaWFDYWNoZU1hbmFnZXJDbGVhckNhY2hlRm9ySG9zdG5hbWUoV0tNZWRpYUNhY2hlTWFu
YWdlclJlZiBtZWRpYUNhY2hlTWFuYWdlclJlZiwgV0tTdHJpbmdSZWYgaG9zdG5hbWUpCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tPcmlnaW5EYXRhTWFuYWdlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLT3JpZ2luRGF0
YU1hbmFnZXIuY3BwCShyZXZpc2lvbiAxNjk5OTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0MvV0tPcmlnaW5EYXRhTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcg
KzM4LDcgQEAgV0tUeXBlSUQgV0tPcmlnaW5EYXRhTWFuYWdlckdldFR5cGVJRCgpCiAKIHZvaWQg
V0tPcmlnaW5EYXRhTWFuYWdlckdldE9yaWdpbnMoV0tPcmlnaW5EYXRhTWFuYWdlclJlZiBvcmln
aW5EYXRhTWFuYWdlclJlZiwgV0tPcmlnaW5EYXRhVHlwZXMgdHlwZXMsIHZvaWQqIGNvbnRleHQs
IFdLT3JpZ2luRGF0YU1hbmFnZXJHZXRPcmlnaW5zRnVuY3Rpb24gY2FsbGJhY2spCiB7Ci0gICAg
dG9JbXBsKG9yaWdpbkRhdGFNYW5hZ2VyUmVmKS0+Z2V0T3JpZ2lucyh0eXBlcywgQXJyYXlDYWxs
YmFjazo6Y3JlYXRlKHRvR2VuZXJpY0NhbGxiYWNrRnVuY3Rpb24oY29udGV4dCwgY2FsbGJhY2sp
KSk7CisgICAgdG9JbXBsKG9yaWdpbkRhdGFNYW5hZ2VyUmVmKS0+Z2V0T3JpZ2lucyh0eXBlcywg
dG9HZW5lcmljQ2FsbGJhY2tGdW5jdGlvbihjb250ZXh0LCBjYWxsYmFjaykpOwogfQogCiB2b2lk
IFdLT3JpZ2luRGF0YU1hbmFnZXJEZWxldGVFbnRyaWVzRm9yT3JpZ2luKFdLT3JpZ2luRGF0YU1h
bmFnZXJSZWYgb3JpZ2luRGF0YU1hbmFnZXJSZWYsIFdLT3JpZ2luRGF0YVR5cGVzIHR5cGVzLCBX
S1NlY3VyaXR5T3JpZ2luUmVmIG9yaWdpblJlZikKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQy9XS1BsdWdpblNpdGVEYXRhTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUGx1Z2luU2l0ZURhdGFNYW5hZ2VyLmNwcAko
cmV2aXNpb24gMTY5OTk0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUGx1
Z2luU2l0ZURhdGFNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBX
S1R5cGVJRCBXS1BsdWdpblNpdGVEYXRhTWFuYWdlckdldFR5cGVJCiB2b2lkIFdLUGx1Z2luU2l0
ZURhdGFNYW5hZ2VyR2V0U2l0ZXNXaXRoRGF0YShXS1BsdWdpblNpdGVEYXRhTWFuYWdlclJlZiBt
YW5hZ2VyUmVmLCB2b2lkKiBjb250ZXh0LCBXS1BsdWdpblNpdGVEYXRhTWFuYWdlckdldFNpdGVz
V2l0aERhdGFGdW5jdGlvbiBjYWxsYmFjaykKIHsKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X0FQSSkKLSAgICB0b0ltcGwobWFuYWdlclJlZiktPmdldFNpdGVzV2l0aERhdGEoQXJyYXlDYWxs
YmFjazo6Y3JlYXRlKHRvR2VuZXJpY0NhbGxiYWNrRnVuY3Rpb24oY29udGV4dCwgY2FsbGJhY2sp
KSk7CisgICAgdG9JbXBsKG1hbmFnZXJSZWYpLT5nZXRTaXRlc1dpdGhEYXRhKHRvR2VuZXJpY0Nh
bGxiYWNrRnVuY3Rpb24oY29udGV4dCwgY2FsbGJhY2spKTsKICNlbHNlCiAgICAgVU5VU0VEX1BB
UkFNKG1hbmFnZXJSZWYpOwogICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlQ2FjaGVNYW5hZ2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tSZXNvdXJjZUNhY2hl
TWFuYWdlci5jcHAJKHJldmlzaW9uIDE2OTk5MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy9XS1Jlc291cmNlQ2FjaGVNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgs
NyArMzgsNyBAQCBXS1R5cGVJRCBXS1Jlc291cmNlQ2FjaGVNYW5hZ2VyR2V0VHlwZUlECiAKIHZv
aWQgV0tSZXNvdXJjZUNhY2hlTWFuYWdlckdldENhY2hlT3JpZ2lucyhXS1Jlc291cmNlQ2FjaGVN
YW5hZ2VyUmVmIGNhY2hlTWFuYWdlclJlZiwgdm9pZCogY29udGV4dCwgV0tSZXNvdXJjZUNhY2hl
TWFuYWdlckdldENhY2hlT3JpZ2luc0Z1bmN0aW9uIGNhbGxiYWNrKQogewotICAgIHRvSW1wbChj
YWNoZU1hbmFnZXJSZWYpLT5nZXRDYWNoZU9yaWdpbnMoQXJyYXlDYWxsYmFjazo6Y3JlYXRlKHRv
R2VuZXJpY0NhbGxiYWNrRnVuY3Rpb24oY29udGV4dCwgY2FsbGJhY2spKSk7CisgICAgdG9JbXBs
KGNhY2hlTWFuYWdlclJlZiktPmdldENhY2hlT3JpZ2lucyh0b0dlbmVyaWNDYWxsYmFja0Z1bmN0
aW9uKGNvbnRleHQsIGNhbGxiYWNrKSk7CiB9CiAKIHZvaWQgV0tSZXNvdXJjZUNhY2hlTWFuYWdl
ckNsZWFyQ2FjaGVGb3JPcmlnaW4oV0tSZXNvdXJjZUNhY2hlTWFuYWdlclJlZiBjYWNoZU1hbmFn
ZXJSZWYsIFdLU2VjdXJpdHlPcmlnaW5SZWYgb3JpZ2luUmVmLCBXS1Jlc291cmNlQ2FjaGVzVG9D
bGVhciBjYWNoZXNUb0NsZWFyKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1dlYlZpZXcubW0JKHJldmlzaW9uIDE2OTk5MykKKysrIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTIwLDcgKzE1MjAsNyBAQCAtICh2b2lkKV9nZXRXZWJBcmNoaXZlRGF0YVdpdGhDb21wbGV0aW9u
CiB7CiAgICAgYXV0byBoYW5kbGVyID0gYWRvcHROUyhbY29tcGxldGlvbkhhbmRsZXIgY29weV0p
OwogCi0gICAgX3BhZ2UtPmdldFdlYkFyY2hpdmVPZkZyYW1lKF9wYWdlLT5tYWluRnJhbWUoKSwg
V2ViS2l0OjpEYXRhQ2FsbGJhY2s6OmNyZWF0ZShbaGFuZGxlcl0oQVBJOjpEYXRhKiBkYXRhLCBX
ZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKKyAgICBfcGFnZS0+Z2V0V2ViQXJj
aGl2ZU9mRnJhbWUoX3BhZ2UtPm1haW5GcmFtZSgpLCBbaGFuZGxlcl0oQVBJOjpEYXRhKiBkYXRh
LCBXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKICAgICAgICAgdm9pZCAoXmNv
bXBsZXRpb25IYW5kbGVyQmxvY2spKE5TRGF0YSAqLCBOU0Vycm9yICopID0gKHZvaWQgKF4pKE5T
RGF0YSAqLCBOU0Vycm9yICopKWhhbmRsZXIuZ2V0KCk7CiAgICAgICAgIGlmIChlcnJvciAhPSBX
ZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3I6Ok5vbmUpIHsKICAgICAgICAgICAgIC8vIEZJWE1F
OiBQaXBlIGEgcHJvcGVyIGVycm9yIGluIGZyb20gdGhlIFdlYlBhZ2VQcm94eS4KQEAgLTE1Mjgs
NyArMTUyOCw3IEBAIC0gKHZvaWQpX2dldFdlYkFyY2hpdmVEYXRhV2l0aENvbXBsZXRpb24KICAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyQmxvY2sobmlsLCBlcnJvci5nZXQoKSk7CiAgICAg
ICAgIH0gZWxzZQogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXJCbG9jayh3cmFwcGVyKCpk
YXRhKSwgbmlsKTsKLSAgICB9KSk7CisgICAgfSk7CiB9CiAKIC0gKF9XS1BhZ2luYXRpb25Nb2Rl
KV9wYWdpbmF0aW9uTW9kZQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMv
V0tWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFj
L1dLVmlldy5tbQkocmV2aXNpb24gMTY5OTkzKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9tYWMvV0tWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNTI0LDcgKzE1MjQsNyBAQCAt
ICh2b2lkKWF0dHJpYnV0ZWRTdWJzdHJpbmdGb3JQcm9wb3NlZFJhCiAgICAgUmV0YWluUHRyPGlk
PiBjb21wbGV0aW9uSGFuZGxlciA9IGFkb3B0TlMoW2NvbXBsZXRpb25IYW5kbGVyUHRyIGNvcHld
KTsKIAogICAgIExPRyhUZXh0SW5wdXQsICJhdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlOigl
dSwgJXUpIiwgbnNSYW5nZS5sb2NhdGlvbiwgbnNSYW5nZS5sZW5ndGgpOwotICAgIF9kYXRhLT5f
cGFnZS0+YXR0cmlidXRlZFN1YnN0cmluZ0ZvckNoYXJhY3RlclJhbmdlQXN5bmMobnNSYW5nZSwg
QXR0cmlidXRlZFN0cmluZ0ZvckNoYXJhY3RlclJhbmdlQ2FsbGJhY2s6OmNyZWF0ZShbY29tcGxl
dGlvbkhhbmRsZXJdKGNvbnN0IEF0dHJpYnV0ZWRTdHJpbmcmIHN0cmluZywgY29uc3QgRWRpdGlu
Z1JhbmdlJiBhY3R1YWxSYW5nZSwgQ2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvcikgeworICAgIF9k
YXRhLT5fcGFnZS0+YXR0cmlidXRlZFN1YnN0cmluZ0ZvckNoYXJhY3RlclJhbmdlQXN5bmMobnNS
YW5nZSwgW2NvbXBsZXRpb25IYW5kbGVyXShjb25zdCBBdHRyaWJ1dGVkU3RyaW5nJiBzdHJpbmcs
IGNvbnN0IEVkaXRpbmdSYW5nZSYgYWN0dWFsUmFuZ2UsIENhbGxiYWNrQmFzZTo6RXJyb3IgZXJy
b3IpIHsKICAgICAgICAgdm9pZCAoXmNvbXBsZXRpb25IYW5kbGVyQmxvY2spKE5TQXR0cmlidXRl
ZFN0cmluZyAqLCBOU1JhbmdlKSA9ICh2b2lkICheKShOU0F0dHJpYnV0ZWRTdHJpbmcgKiwgTlNS
YW5nZSkpY29tcGxldGlvbkhhbmRsZXIuZ2V0KCk7CiAgICAgICAgIGlmIChlcnJvciAhPSBDYWxs
YmFja0Jhc2U6OkVycm9yOjpOb25lKSB7CiAgICAgICAgICAgICBMT0coVGV4dElucHV0LCAiICAg
IC4uLmF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2UgZmFpbGVkLiIpOwpAQCAtMTUzMyw3ICsx
NTMzLDcgQEAgLSAodm9pZClhdHRyaWJ1dGVkU3Vic3RyaW5nRm9yUHJvcG9zZWRSYQogICAgICAg
ICB9CiAgICAgICAgIExPRyhUZXh0SW5wdXQsICIgICAgLT4gYXR0cmlidXRlZFN1YnN0cmluZ0Zy
b21SYW5nZSByZXR1cm5lZCAlQCIsIFtzdHJpbmcuc3RyaW5nLmdldCgpIHN0cmluZ10pOwogICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlckJsb2NrKFtbc3RyaW5nLnN0cmluZy5nZXQoKSByZXRhaW5d
IGF1dG9yZWxlYXNlXSwgYWN0dWFsUmFuZ2UpOwotICAgIH0pKTsKKyAgICB9KTsKIH0KIAogLSAo
dm9pZClmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZTooTlNSYW5nZSl0aGVSYW5nZSBjb21wbGV0
aW9uSGFuZGxlcjoodm9pZCheKShOU1JlY3QgZmlyc3RSZWN0LCBOU1JhbmdlIGFjdHVhbFJhbmdl
KSljb21wbGV0aW9uSGFuZGxlclB0cgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Bs
dWdpbnMvV2ViUGx1Z2luU2l0ZURhdGFNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9XZWJQbHVnaW5TaXRlRGF0YU1hbmFnZXIuY3BwCShy
ZXZpc2lvbiAxNjk5OTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9XZWJQ
bHVnaW5TaXRlRGF0YU1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsOSArMTM4LDkg
QEAgdm9pZCBXZWJQbHVnaW5TaXRlRGF0YU1hbmFnZXI6OmludmFsaWRhdAogICAgIG1fcGVuZGlu
Z0NsZWFyU2l0ZURhdGEuY2xlYXIoKTsKIH0KIAotdm9pZCBXZWJQbHVnaW5TaXRlRGF0YU1hbmFn
ZXI6OmdldFNpdGVzV2l0aERhdGEoUGFzc1JlZlB0cjxBcnJheUNhbGxiYWNrPiBwcnBDYWxsYmFj
aykKK3ZvaWQgV2ViUGx1Z2luU2l0ZURhdGFNYW5hZ2VyOjpnZXRTaXRlc1dpdGhEYXRhKHN0ZDo6
ZnVuY3Rpb248dm9pZCAoQVBJOjpBcnJheSosIENhbGxiYWNrQmFzZTo6RXJyb3IpPiBjYWxsYmFj
a0Z1bmN0aW9uKQogewotICAgIFJlZlB0cjxBcnJheUNhbGxiYWNrPiBjYWxsYmFjayA9IHBycENh
bGxiYWNrOworICAgIFJlZlB0cjxBcnJheUNhbGxiYWNrPiBjYWxsYmFjayA9IEFycmF5Q2FsbGJh
Y2s6OmNyZWF0ZShzdGQ6Om1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOwogCiAgICAgaWYgKCFtX3dl
YkNvbnRleHQpIHsKICAgICAgICAgY2FsbGJhY2stPmludmFsaWRhdGUoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1dlYlBsdWdpblNpdGVEYXRhTWFuYWdlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1dlYlBsdWdpblNp
dGVEYXRhTWFuYWdlci5oCShyZXZpc2lvbiAxNjk5OTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvUGx1Z2lucy9XZWJQbHVnaW5TaXRlRGF0YU1hbmFnZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnZhbGlkYXRlKCk7CiAgICAgdm9p
ZCBjbGVhckNvbnRleHQoKSB7IG1fd2ViQ29udGV4dCA9IDA7IH0KIAotICAgIHZvaWQgZ2V0U2l0
ZXNXaXRoRGF0YShQYXNzUmVmUHRyPEFycmF5Q2FsbGJhY2s+KTsKKyAgICB2b2lkIGdldFNpdGVz
V2l0aERhdGEoc3RkOjpmdW5jdGlvbjx2b2lkIChBUEk6OkFycmF5KiwgQ2FsbGJhY2tCYXNlOjpF
cnJvcik+KTsKICAgICB2b2lkIGRpZEdldFNpdGVzV2l0aERhdGEoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHNpdGVzLCB1aW50NjRfdCBjYWxsYmFja0lEKTsKIAogICAgIHZvaWQgY2xlYXJTaXRlRGF0
YShBUEk6OkFycmF5KiBzaXRlcywgdWludDY0X3QgZmxhZ3MsIHVpbnQ2NF90IG1heEFnZUluU2Vj
b25kcywgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCShy
ZXZpc2lvbiAxNjk5OTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVu
dFZpZXdJbnRlcmFjdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtMTQyOSwxMSArMTQyOSwxMSBA
QCAtICh2b2lkKV9kaWRVcGRhdGVCbG9ja1NlbGVjdGlvbldpdGhUb3VjCiAtICh2b2lkKWNoYW5n
ZVNlbGVjdGlvbldpdGhHZXN0dXJlQXQ6KENHUG9pbnQpcG9pbnQgd2l0aEdlc3R1cmU6KFVJV0tH
ZXN0dXJlVHlwZSlnZXN0dXJlVHlwZSB3aXRoU3RhdGU6KFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0
ZSlzdGF0ZQogewogICAgIF91c2luZ0dlc3R1cmVGb3JTZWxlY3Rpb24gPSBZRVM7Ci0gICAgX3Bh
Z2UtPnNlbGVjdFdpdGhHZXN0dXJlKFdlYkNvcmU6OkludFBvaW50KHBvaW50KSwgQ2hhcmFjdGVy
R3JhbnVsYXJpdHksIHN0YXRpY19jYXN0PHVpbnQzMl90Pih0b0dlc3R1cmVUeXBlKGdlc3R1cmVU
eXBlKSksIHN0YXRpY19jYXN0PHVpbnQzMl90Pih0b0dlc3R1cmVSZWNvZ25pemVyU3RhdGUoc3Rh
dGUpKSwgR2VzdHVyZUNhbGxiYWNrOjpjcmVhdGUoW3NlbGYsIHN0YXRlXShjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYgcG9pbnQsIHVpbnQzMl90IGdlc3R1cmVUeXBlLCB1aW50MzJfdCBnZXN0dXJl
U3RhdGUsIHVpbnQzMl90IGZsYWdzLCBDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9yKSB7CisgICAg
X3BhZ2UtPnNlbGVjdFdpdGhHZXN0dXJlKFdlYkNvcmU6OkludFBvaW50KHBvaW50KSwgQ2hhcmFj
dGVyR3JhbnVsYXJpdHksIHN0YXRpY19jYXN0PHVpbnQzMl90Pih0b0dlc3R1cmVUeXBlKGdlc3R1
cmVUeXBlKSksIHN0YXRpY19jYXN0PHVpbnQzMl90Pih0b0dlc3R1cmVSZWNvZ25pemVyU3RhdGUo
c3RhdGUpKSwgW3NlbGYsIHN0YXRlXShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIHVp
bnQzMl90IGdlc3R1cmVUeXBlLCB1aW50MzJfdCBnZXN0dXJlU3RhdGUsIHVpbnQzMl90IGZsYWdz
LCBDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9yKSB7CiAgICAgICAgIHNlbGVjdGlvbkNoYW5nZWRX
aXRoR2VzdHVyZShzZWxmLCBwb2ludCwgZ2VzdHVyZVR5cGUsIGdlc3R1cmVTdGF0ZSwgZmxhZ3Ms
IGVycm9yKTsKICAgICAgICAgaWYgKHN0YXRlID09IFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZUVu
ZGVkIHx8IHN0YXRlID09IFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZUNhbmNlbGxlZCkKICAgICAg
ICAgICAgIF91c2luZ0dlc3R1cmVGb3JTZWxlY3Rpb24gPSBOTzsKLSAgICB9KSk7CisgICAgfSk7
CiB9CiAKIC0gKHZvaWQpY2hhbmdlU2VsZWN0aW9uV2l0aFRvdWNoQXQ6KENHUG9pbnQpcG9pbnQg
d2l0aFNlbGVjdGlvblRvdWNoOihVSVdLU2VsZWN0aW9uVG91Y2gpdG91Y2ggYmFzZUlzU3RhcnQ6
KEJPT0wpYmFzZUlzU3RhcnQKQEAgLTE0NDksMTEgKzE0NDksMTEgQEAgLSAodm9pZCljaGFuZ2VT
ZWxlY3Rpb25XaXRoVG91Y2hBdDooQ0dQbwogLSAodm9pZCljaGFuZ2VTZWxlY3Rpb25XaXRoVG91
Y2hlc0Zyb206KENHUG9pbnQpZnJvbSB0bzooQ0dQb2ludCl0byB3aXRoR2VzdHVyZTooVUlXS0dl
c3R1cmVUeXBlKWdlc3R1cmVUeXBlIHdpdGhTdGF0ZTooVUlHZXN0dXJlUmVjb2duaXplclN0YXRl
KWdlc3R1cmVTdGF0ZQogewogICAgIF91c2luZ0dlc3R1cmVGb3JTZWxlY3Rpb24gPSBZRVM7Ci0g
ICAgX3BhZ2UtPnNlbGVjdFdpdGhUd29Ub3VjaGVzKFdlYkNvcmU6OkludFBvaW50KGZyb20pLCBX
ZWJDb3JlOjpJbnRQb2ludCh0byksIHN0YXRpY19jYXN0PHVpbnQzMl90Pih0b0dlc3R1cmVUeXBl
KGdlc3R1cmVUeXBlKSksIHN0YXRpY19jYXN0PHVpbnQzMl90Pih0b0dlc3R1cmVSZWNvZ25pemVy
U3RhdGUoZ2VzdHVyZVN0YXRlKSksIEdlc3R1cmVDYWxsYmFjazo6Y3JlYXRlKFtzZWxmLCBnZXN0
dXJlU3RhdGVdKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgdWludDMyX3QgZ2VzdHVy
ZVR5cGUsIHVpbnQzMl90IGdlc3R1cmVTdGF0ZSwgdWludDMyX3QgZmxhZ3MsIENhbGxiYWNrQmFz
ZTo6RXJyb3IgZXJyb3IpIHsKKyAgICBfcGFnZS0+c2VsZWN0V2l0aFR3b1RvdWNoZXMoV2ViQ29y
ZTo6SW50UG9pbnQoZnJvbSksIFdlYkNvcmU6OkludFBvaW50KHRvKSwgc3RhdGljX2Nhc3Q8dWlu
dDMyX3Q+KHRvR2VzdHVyZVR5cGUoZ2VzdHVyZVR5cGUpKSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KHRvR2VzdHVyZVJlY29nbml6ZXJTdGF0ZShnZXN0dXJlU3RhdGUpKSwgW3NlbGYsIGdlc3R1cmVT
dGF0ZV0oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCB1aW50MzJfdCBnZXN0dXJlVHlw
ZSwgdWludDMyX3QgZ2VzdHVyZVN0YXRlLCB1aW50MzJfdCBmbGFncywgQ2FsbGJhY2tCYXNlOjpF
cnJvciBlcnJvcikgewogICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkV2l0aEdlc3R1cmUoc2VsZiwg
cG9pbnQsIGdlc3R1cmVUeXBlLCBnZXN0dXJlU3RhdGUsIGZsYWdzLCBlcnJvcik7CiAgICAgICAg
IGlmIChnZXN0dXJlU3RhdGUgPT0gVUlHZXN0dXJlUmVjb2duaXplclN0YXRlRW5kZWQgfHwgZ2Vz
dHVyZVN0YXRlID09IFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZUNhbmNlbGxlZCkKICAgICAgICAg
ICAgIF91c2luZ0dlc3R1cmVGb3JTZWxlY3Rpb24gPSBOTzsKLSAgICB9KSk7CisgICAgfSk7CiB9
CiAKIC0gKHZvaWQpY2hhbmdlQmxvY2tTZWxlY3Rpb25XaXRoVG91Y2hBdDooQ0dQb2ludClwb2lu
dCB3aXRoU2VsZWN0aW9uVG91Y2g6KFVJV0tTZWxlY3Rpb25Ub3VjaCl0b3VjaCBmb3JIYW5kbGU6
KFVJV0tIYW5kbGVQb3NpdGlvbiloYW5kbGUKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCShyZXZpc2lvbiAxNjk5OTMpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMzAzLDggKzMwMywxMCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ29tbWl0TGF5ZXJU
cmVlKGNvCiAgICAgbV9wYWdlQ2xpZW50LmRpZENvbW1pdExheWVyVHJlZShsYXllclRyZWVUcmFu
c2FjdGlvbik7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpzZWxlY3RXaXRoR2VzdHVyZShjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCBwb2ludCwgV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5IGdyYW51
bGFyaXR5LCB1aW50MzJfdCBnZXN0dXJlVHlwZSwgdWludDMyX3QgZ2VzdHVyZVN0YXRlLCBQYXNz
UmVmUHRyPEdlc3R1cmVDYWxsYmFjaz4gY2FsbGJhY2spCit2b2lkIFdlYlBhZ2VQcm94eTo6c2Vs
ZWN0V2l0aEdlc3R1cmUoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQsIFdlYkNvcmU6OlRl
eHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgdWludDMyX3QgZ2VzdHVyZVR5cGUsIHVpbnQzMl90
IGdlc3R1cmVTdGF0ZSwgc3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYsIHVpbnQzMl90LCB1aW50MzJfdCwgdWludDMyX3QsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiBj
YWxsYmFja0Z1bmN0aW9uKQogeworICAgIFJlZlB0cjxHZXN0dXJlQ2FsbGJhY2s+IGNhbGxiYWNr
ID0gR2VzdHVyZUNhbGxiYWNrOjpjcmVhdGUoc3RkOjptb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsK
KwogICAgIGlmICghaXNWYWxpZCgpKSB7CiAgICAgICAgIGNhbGxiYWNrLT5pbnZhbGlkYXRlKCk7
CiAgICAgICAgIHJldHVybjsKQEAgLTM5Nyw4ICszOTksMTAgQEAgdm9pZCBXZWJQYWdlUHJveHk6
OmdldEF1dG9jb3JyZWN0aW9uQ29udAogICAgIG1fcHJvY2Vzcy0+c2VuZFN5bmMoTWVzc2FnZXM6
OldlYlBhZ2U6OkdldEF1dG9jb3JyZWN0aW9uQ29udGV4dCgpLCBNZXNzYWdlczo6V2ViUGFnZTo6
R2V0QXV0b2NvcnJlY3Rpb25Db250ZXh0OjpSZXBseShiZWZvcmVDb250ZXh0LCBtYXJrZWRUZXh0
LCBzZWxlY3RlZFRleHQsIGFmdGVyQ29udGV4dCwgbG9jYXRpb24sIGxlbmd0aCksIG1fcGFnZUlE
KTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnNlbGVjdFdpdGhUd29Ub3VjaGVzKGNvbnN0IFdl
YkNvcmU6OkludFBvaW50IGZyb20sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50IHRvLCB1aW50MzJf
dCBnZXN0dXJlVHlwZSwgdWludDMyX3QgZ2VzdHVyZVN0YXRlLCBQYXNzUmVmUHRyPEdlc3R1cmVD
YWxsYmFjaz4gY2FsbGJhY2spCit2b2lkIFdlYlBhZ2VQcm94eTo6c2VsZWN0V2l0aFR3b1RvdWNo
ZXMoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQgZnJvbSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQg
dG8sIHVpbnQzMl90IGdlc3R1cmVUeXBlLCB1aW50MzJfdCBnZXN0dXJlU3RhdGUsIHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCB1aW50MzJfdCwgdWludDMyX3Qs
IHVpbnQzMl90LCBDYWxsYmFja0Jhc2U6OkVycm9yKT4gY2FsbGJhY2tGdW5jdGlvbikKIHsKKyAg
ICBSZWZQdHI8R2VzdHVyZUNhbGxiYWNrPiBjYWxsYmFjayA9IEdlc3R1cmVDYWxsYmFjazo6Y3Jl
YXRlKHN0ZDo6bW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CisKICAgICBpZiAoIWlzVmFsaWQoKSkg
ewogICAgICAgICBjYWxsYmFjay0+aW52YWxpZGF0ZSgpOwogICAgICAgICByZXR1cm47CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQko
cmV2aXNpb24gMTY5OTkzKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJQYWdl
UHJveHlNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMyNSw4ICszMjUsMTAgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6Omluc2VydERpY3RhdGVkVGV4dEFzeQogI2VuZGlmCiB9CiAKLXZvaWQgV2ViUGFn
ZVByb3h5OjphdHRyaWJ1dGVkU3Vic3RyaW5nRm9yQ2hhcmFjdGVyUmFuZ2VBc3luYyhjb25zdCBF
ZGl0aW5nUmFuZ2UmIHJhbmdlLCBQYXNzUmVmUHRyPEF0dHJpYnV0ZWRTdHJpbmdGb3JDaGFyYWN0
ZXJSYW5nZUNhbGxiYWNrPiBjYWxsYmFjaykKK3ZvaWQgV2ViUGFnZVByb3h5OjphdHRyaWJ1dGVk
U3Vic3RyaW5nRm9yQ2hhcmFjdGVyUmFuZ2VBc3luYyhjb25zdCBFZGl0aW5nUmFuZ2UmIHJhbmdl
LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IEF0dHJpYnV0ZWRTdHJpbmcmLCBjb25zdCBFZGl0
aW5nUmFuZ2UmLCBDYWxsYmFja0Jhc2U6OkVycm9yKT4gY2FsbGJhY2tGdW5jdGlvbikKIHsKKyAg
ICBSZWZQdHI8QXR0cmlidXRlZFN0cmluZ0ZvckNoYXJhY3RlclJhbmdlQ2FsbGJhY2s+IGNhbGxi
YWNrID0gQXR0cmlidXRlZFN0cmluZ0ZvckNoYXJhY3RlclJhbmdlQ2FsbGJhY2s6OmNyZWF0ZShz
dGQ6Om1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworCiAgICAgaWYgKCFpc1ZhbGlkKCkpIHsKICAg
ICAgICAgY2FsbGJhY2stPmludmFsaWRhdGUoKTsKICAgICAgICAgcmV0dXJuOwo=
</data>
<flag name="review"
          id="257639"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233181</attachid>
            <date>2014-06-16 14:36:11 -0700</date>
            <delta_ts>2014-06-16 17:06:45 -0700</delta_ts>
            <desc>Part 2</desc>
            <filename>bug-133927-20140616143548.patch</filename>
            <type>text/plain</type>
            <size>44505</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MDAyNykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY0IEBACisyMDE0LTA2LTE2ICBEYW4gQmVy
bnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CisKKyAgICAgICAgUGFydCAyIG9mOiBDaGFuZ2UgR2Vu
ZXJpY0NhbGxiYWNrPD4gZnVuY3Rpb24gcGFyYW1ldGVycyBpbnRvIHN0ZDo6ZnVuY3Rpb248Pgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzOTI3CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0MvV0tQYWdlLmNwcDoKKyAgICAgICAgKFdLUGFnZVJ1bkphdmFTY3JpcHRJbk1haW5G
cmFtZSk6CisgICAgICAgIChXS1BhZ2VSZW5kZXJUcmVlRXh0ZXJuYWxSZXByZXNlbnRhdGlvbik6
CisgICAgICAgIChXS1BhZ2VHZXRTb3VyY2VGb3JGcmFtZSk6CisgICAgICAgIChXS1BhZ2VHZXRD
b250ZW50c0FzU3RyaW5nKToKKyAgICAgICAgKFdLUGFnZUdldEJ5dGVjb2RlUHJvZmlsZSk6Cisg
ICAgICAgIChXS1BhZ2VHZXRTZWxlY3Rpb25Bc1dlYkFyY2hpdmVEYXRhKToKKyAgICAgICAgKFdL
UGFnZVZhbGlkYXRlQ29tbWFuZCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUGx1Z2lu
U2l0ZURhdGFNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdLUGx1Z2luU2l0ZURhdGFNYW5hZ2VyQ2xl
YXJTaXRlRGF0YSk6CisgICAgICAgIChXS1BsdWdpblNpdGVEYXRhTWFuYWdlckNsZWFyQWxsU2l0
ZURhdGEpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tOgorICAg
ICAgICAoLVtXS1dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OmNvbXBsZXRpb25IYW5kbGVyOl0p
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbToKKyAgICAgICAgKC1bV0tW
aWV3IHZhbGlkYXRlVXNlckludGVyZmFjZUl0ZW06XSk6CisgICAgICAgICgtW1dLVmlldyBzdGFy
dFNwZWFraW5nOl0pOgorICAgICAgICAoLVtXS1ZpZXcgc2VsZWN0ZWRSYW5nZVdpdGhDb21wbGV0
aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tWaWV3IG1hcmtlZFJhbmdlV2l0aENvbXBsZXRp
b25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS1ZpZXcgaGFzTWFya2VkVGV4dFdpdGhDb21wbGV0
aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tWaWV3IGZpcnN0UmVjdEZvckNoYXJhY3RlclJh
bmdlOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS1ZpZXcgY2hhcmFjdGVySW5k
ZXhGb3JQb2ludDpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvUGx1
Z2lucy9XZWJQbHVnaW5TaXRlRGF0YU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
bHVnaW5TaXRlRGF0YU1hbmFnZXI6OmNsZWFyU2l0ZURhdGEpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9QbHVnaW5zL1dlYlBsdWdpblNpdGVEYXRhTWFuYWdlci5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnZhbGlk
YXRlQ29tbWFuZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cnVuSmF2YVNjcmlw
dEluTWFpbkZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpnZXRSZW5kZXJU
cmVlRXh0ZXJuYWxSZXByZXNlbnRhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6Z2V0U291cmNlRm9yRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6Omdl
dENvbnRlbnRzQXNTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmdldEJ5
dGVjb2RlUHJvZmlsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z2V0Q29udGVu
dHNBc01IVE1MRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z2V0U2VsZWN0
aW9uT3JDb250ZW50c0FzU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpn
ZXRTZWxlY3Rpb25Bc1dlYkFyY2hpdmVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5OjpnZXRNYXJrZWRSYW5nZUFzeW5jKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpnZXRTZWxlY3RlZFJhbmdlQXN5bmMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OmNoYXJhY3RlckluZGV4Rm9yUG9pbnRBc3luYyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6Zmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2VBc3luYyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VQcm94eTo6dGFrZVNuYXBzaG90KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFn
ZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rp
b24ubW06CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX2RlZmluZTpdKToKKyAgICAgICAgKC1b
V0tDb250ZW50VmlldyBjaGFuZ2VTZWxlY3Rpb25XaXRoVG91Y2hBdDp3aXRoU2VsZWN0aW9uVG91
Y2g6YmFzZUlzU3RhcnQ6XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgcmVxdWVzdEF1dG9j
b3JyZWN0aW9uUmVjdHNGb3JTdHJpbmc6d2l0aENvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAg
ICAoLVtXS0NvbnRlbnRWaWV3IHJlcXVlc3REaWN0YXRpb25Db250ZXh0Ol0pOgorICAgICAgICAo
LVtXS0NvbnRlbnRWaWV3IGFwcGx5QXV0b2NvcnJlY3Rpb246dG9TdHJpbmc6d2l0aENvbXBsZXRp
b25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHJlcXVlc3RBdXRvY29ycmVj
dGlvbkNvbnRleHRXaXRoQ29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICogVUlQcm9jZXNz
L2lvcy9XZWJQYWdlUHJveHlJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
dXBkYXRlU2VsZWN0aW9uV2l0aFRvdWNoZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJv
eHk6OnJlcXVlc3RBdXRvY29ycmVjdGlvbkRhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OmFwcGx5QXV0b2NvcnJlY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJv
eHk6OnJlcXVlc3REaWN0YXRpb25Db250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5OjpyZXF1ZXN0QXV0b2NvcnJlY3Rpb25Db250ZXh0KToKKwogMjAxNC0wNi0xNSAgQW5kZXJz
IENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIENoYW5nZSBSZXNvdXJj
ZVJlcXVlc3RCYXNlOjphZGRIVFRQSGVhZGVyRmllbGRzIHRvIHNldEhUVFBIZWFkZXJGaWVsZHMg
aW5zdGVhZApAQCAtNzEsNyArMTMyLDcgQEAKIAogMjAxNC0wNi0xNSAgRGFuIEJlcm5zdGVpbiAg
PG1pdHpAYXBwbGUuY29tPgogCi0gICAgICAgIFBhcnQgMSBvZiBDaGFuZ2UgR2VuZXJpY0NhbGxi
YWNrPD4gZnVuY3Rpb24gcGFyYW1ldGVycyBpbnRvIHN0ZDo6ZnVuY3Rpb248PgorICAgICAgICBQ
YXJ0IDEgb2Y6IENoYW5nZSBHZW5lcmljQ2FsbGJhY2s8PiBmdW5jdGlvbiBwYXJhbWV0ZXJzIGlu
dG8gc3RkOjpmdW5jdGlvbjw+CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMzM5MjcKIAogICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgpJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDE3
MDAwOCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjM5LDggKzEyMzksMTAgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNsZWFy
U2VsZWN0aW9uKCkKICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNsZWFy
U2VsZWN0aW9uKCksIG1fcGFnZUlEKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnZhbGlkYXRl
Q29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBQYXNzUmVmUHRyPFZhbGlkYXRlQ29t
bWFuZENhbGxiYWNrPiBjYWxsYmFjaykKK3ZvaWQgV2ViUGFnZVByb3h5Ojp2YWxpZGF0ZUNvbW1h
bmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBT
dHJpbmcmLCBib29sLCBpbnQzMl90LCBDYWxsYmFja0Jhc2U6OkVycm9yKT4gY2FsbGJhY2tGdW5j
dGlvbikKIHsKKyAgICBSZWZQdHI8VmFsaWRhdGVDb21tYW5kQ2FsbGJhY2s+IGNhbGxiYWNrID0g
VmFsaWRhdGVDb21tYW5kQ2FsbGJhY2s6OmNyZWF0ZShzdGQ6Om1vdmUoY2FsbGJhY2tGdW5jdGlv
bikpOworCiAgICAgaWYgKCFpc1ZhbGlkKCkpIHsKICAgICAgICAgY2FsbGJhY2stPmludmFsaWRh
dGUoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjE4Myw5ICsyMTg1LDkgQEAgdm9pZCBXZWJQYWdl
UHJveHk6OmNvdW50U3RyaW5nTWF0Y2hlcyhjbwogICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdl
czo6V2ViUGFnZTo6Q291bnRTdHJpbmdNYXRjaGVzKHN0cmluZywgb3B0aW9ucywgbWF4TWF0Y2hD
b3VudCksIG1fcGFnZUlEKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnJ1bkphdmFTY3JpcHRJ
bk1haW5GcmFtZShjb25zdCBTdHJpbmcmIHNjcmlwdCwgUGFzc1JlZlB0cjxTY3JpcHRWYWx1ZUNh
bGxiYWNrPiBwcnBDYWxsYmFjaykKK3ZvaWQgV2ViUGFnZVByb3h5OjpydW5KYXZhU2NyaXB0SW5N
YWluRnJhbWUoY29uc3QgU3RyaW5nJiBzY3JpcHQsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoV2ViU2Vy
aWFsaXplZFNjcmlwdFZhbHVlKiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+IGNhbGxiYWNrRnVuY3Rp
b24pCiB7Ci0gICAgUmVmUHRyPFNjcmlwdFZhbHVlQ2FsbGJhY2s+IGNhbGxiYWNrID0gcHJwQ2Fs
bGJhY2s7CisgICAgUmVmUHRyPFNjcmlwdFZhbHVlQ2FsbGJhY2s+IGNhbGxiYWNrID0gU2NyaXB0
VmFsdWVDYWxsYmFjazo6Y3JlYXRlKHN0ZDo6bW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CiAgICAg
aWYgKCFpc1ZhbGlkKCkpIHsKICAgICAgICAgY2FsbGJhY2stPmludmFsaWRhdGUoKTsKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjE5Niw5ICsyMTk4LDkgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJ1bkph
dmFTY3JpcHRJbk1haW5GcgogICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6
UnVuSmF2YVNjcmlwdEluTWFpbkZyYW1lKHNjcmlwdCwgY2FsbGJhY2tJRCksIG1fcGFnZUlEKTsK
IH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmdldFJlbmRlclRyZWVFeHRlcm5hbFJlcHJlc2VudGF0
aW9uKFBhc3NSZWZQdHI8U3RyaW5nQ2FsbGJhY2s+IHBycENhbGxiYWNrKQordm9pZCBXZWJQYWdl
UHJveHk6OmdldFJlbmRlclRyZWVFeHRlcm5hbFJlcHJlc2VudGF0aW9uKHN0ZDo6ZnVuY3Rpb248
dm9pZCAoY29uc3QgU3RyaW5nJiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+IGNhbGxiYWNrRnVuY3Rp
b24pCiB7Ci0gICAgUmVmUHRyPFN0cmluZ0NhbGxiYWNrPiBjYWxsYmFjayA9IHBycENhbGxiYWNr
OworICAgIFJlZlB0cjxTdHJpbmdDYWxsYmFjaz4gY2FsbGJhY2sgPSBTdHJpbmdDYWxsYmFjazo6
Y3JlYXRlKHN0ZDo6bW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CiAgICAgaWYgKCFpc1ZhbGlkKCkp
IHsKICAgICAgICAgY2FsbGJhY2stPmludmFsaWRhdGUoKTsKICAgICAgICAgcmV0dXJuOwpAQCAt
MjIwOSw5ICsyMjExLDkgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmdldFJlbmRlclRyZWVFeHRlcm5h
bAogICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6R2V0UmVuZGVyVHJlZUV4
dGVybmFsUmVwcmVzZW50YXRpb24oY2FsbGJhY2tJRCksIG1fcGFnZUlEKTsKIH0KIAotdm9pZCBX
ZWJQYWdlUHJveHk6OmdldFNvdXJjZUZvckZyYW1lKFdlYkZyYW1lUHJveHkqIGZyYW1lLCBQYXNz
UmVmUHRyPFN0cmluZ0NhbGxiYWNrPiBwcnBDYWxsYmFjaykKK3ZvaWQgV2ViUGFnZVByb3h5Ojpn
ZXRTb3VyY2VGb3JGcmFtZShXZWJGcmFtZVByb3h5KiBmcmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lk
IChjb25zdCBTdHJpbmcmLCBDYWxsYmFja0Jhc2U6OkVycm9yKT4gY2FsbGJhY2tGdW5jdGlvbikK
IHsKLSAgICBSZWZQdHI8U3RyaW5nQ2FsbGJhY2s+IGNhbGxiYWNrID0gcHJwQ2FsbGJhY2s7Cisg
ICAgUmVmUHRyPFN0cmluZ0NhbGxiYWNrPiBjYWxsYmFjayA9IFN0cmluZ0NhbGxiYWNrOjpjcmVh
dGUoc3RkOjptb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKICAgICBpZiAoIWlzVmFsaWQoKSkgewog
ICAgICAgICBjYWxsYmFjay0+aW52YWxpZGF0ZSgpOwogICAgICAgICByZXR1cm47CkBAIC0yMjIz
LDkgKzIyMjUsOSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0U291cmNlRm9yRnJhbWUoV2ViCiAg
ICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXRTb3VyY2VGb3JGcmFtZShm
cmFtZS0+ZnJhbWVJRCgpLCBjYWxsYmFja0lEKSwgbV9wYWdlSUQpOwogfQogCi12b2lkIFdlYlBh
Z2VQcm94eTo6Z2V0Q29udGVudHNBc1N0cmluZyhQYXNzUmVmUHRyPFN0cmluZ0NhbGxiYWNrPiBw
cnBDYWxsYmFjaykKK3ZvaWQgV2ViUGFnZVByb3h5OjpnZXRDb250ZW50c0FzU3RyaW5nKHN0ZDo6
ZnVuY3Rpb248dm9pZCAoY29uc3QgU3RyaW5nJiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+IGNhbGxi
YWNrRnVuY3Rpb24pCiB7Ci0gICAgUmVmUHRyPFN0cmluZ0NhbGxiYWNrPiBjYWxsYmFjayA9IHBy
cENhbGxiYWNrOworICAgIFJlZlB0cjxTdHJpbmdDYWxsYmFjaz4gY2FsbGJhY2sgPSBTdHJpbmdD
YWxsYmFjazo6Y3JlYXRlKHN0ZDo6bW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CiAgICAgaWYgKCFp
c1ZhbGlkKCkpIHsKICAgICAgICAgY2FsbGJhY2stPmludmFsaWRhdGUoKTsKICAgICAgICAgcmV0
dXJuOwpAQCAtMjIzNyw5ICsyMjM5LDkgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmdldENvbnRlbnRz
QXNTdHJpbmcoUAogICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6R2V0Q29u
dGVudHNBc1N0cmluZyhjYWxsYmFja0lEKSwgbV9wYWdlSUQpOwogfQogCi12b2lkIFdlYlBhZ2VQ
cm94eTo6Z2V0Qnl0ZWNvZGVQcm9maWxlKFBhc3NSZWZQdHI8U3RyaW5nQ2FsbGJhY2s+IHBycENh
bGxiYWNrKQordm9pZCBXZWJQYWdlUHJveHk6OmdldEJ5dGVjb2RlUHJvZmlsZShzdGQ6OmZ1bmN0
aW9uPHZvaWQgKGNvbnN0IFN0cmluZyYsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiBjYWxsYmFja0Z1
bmN0aW9uKQogewotICAgIFJlZlB0cjxTdHJpbmdDYWxsYmFjaz4gY2FsbGJhY2sgPSBwcnBDYWxs
YmFjazsKKyAgICBSZWZQdHI8U3RyaW5nQ2FsbGJhY2s+IGNhbGxiYWNrID0gU3RyaW5nQ2FsbGJh
Y2s6OmNyZWF0ZShzdGQ6Om1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOwogICAgIGlmICghaXNWYWxp
ZCgpKSB7CiAgICAgICAgIGNhbGxiYWNrLT5pbnZhbGlkYXRlKCk7CiAgICAgICAgIHJldHVybjsK
QEAgLTIyNTIsOSArMjI1NCw5IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpnZXRCeXRlY29kZVByb2Zp
bGUoUGEKIH0KICAgICAKICNpZiBFTkFCTEUoTUhUTUwpCi12b2lkIFdlYlBhZ2VQcm94eTo6Z2V0
Q29udGVudHNBc01IVE1MRGF0YShQYXNzUmVmUHRyPERhdGFDYWxsYmFjaz4gcHJwQ2FsbGJhY2ss
IGJvb2wgdXNlQmluYXJ5RW5jb2RpbmcpCit2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0Q29udGVudHNB
c01IVE1MRGF0YShzdGQ6OmZ1bmN0aW9uPHZvaWQgKEFQSTo6RGF0YSosIENhbGxiYWNrQmFzZTo6
RXJyb3IpPiBjYWxsYmFja0Z1bmN0aW9uLCBib29sIHVzZUJpbmFyeUVuY29kaW5nKQogewotICAg
IFJlZlB0cjxEYXRhQ2FsbGJhY2s+IGNhbGxiYWNrID0gcHJwQ2FsbGJhY2s7CisgICAgUmVmUHRy
PERhdGFDYWxsYmFjaz4gY2FsbGJhY2sgPSBEYXRhQ2FsbGJhY2s6OmNyZWF0ZShzdGQ6Om1vdmUo
Y2FsbGJhY2tGdW5jdGlvbikpOwogICAgIGlmICghaXNWYWxpZCgpKSB7CiAgICAgICAgIGNhbGxi
YWNrLT5pbnZhbGlkYXRlKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTIyNjYsOSArMjI2OCw5IEBA
IHZvaWQgV2ViUGFnZVByb3h5OjpnZXRDb250ZW50c0FzTUhUTUxEYXQKIH0KICNlbmRpZgogCi12
b2lkIFdlYlBhZ2VQcm94eTo6Z2V0U2VsZWN0aW9uT3JDb250ZW50c0FzU3RyaW5nKFBhc3NSZWZQ
dHI8U3RyaW5nQ2FsbGJhY2s+IHBycENhbGxiYWNrKQordm9pZCBXZWJQYWdlUHJveHk6OmdldFNl
bGVjdGlvbk9yQ29udGVudHNBc1N0cmluZyhzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmlu
ZyYsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIFJlZlB0
cjxTdHJpbmdDYWxsYmFjaz4gY2FsbGJhY2sgPSBwcnBDYWxsYmFjazsKKyAgICBSZWZQdHI8U3Ry
aW5nQ2FsbGJhY2s+IGNhbGxiYWNrID0gU3RyaW5nQ2FsbGJhY2s6OmNyZWF0ZShzdGQ6Om1vdmUo
Y2FsbGJhY2tGdW5jdGlvbikpOwogICAgIGlmICghaXNWYWxpZCgpKSB7CiAgICAgICAgIGNhbGxi
YWNrLT5pbnZhbGlkYXRlKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTIyNzksOSArMjI4MSw5IEBA
IHZvaWQgV2ViUGFnZVByb3h5OjpnZXRTZWxlY3Rpb25PckNvbnRlbnQKICAgICBtX3Byb2Nlc3Mt
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkdldFNlbGVjdGlvbk9yQ29udGVudHNBc1N0cmluZyhj
YWxsYmFja0lEKSwgbV9wYWdlSUQpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6Z2V0U2VsZWN0
aW9uQXNXZWJBcmNoaXZlRGF0YShQYXNzUmVmUHRyPERhdGFDYWxsYmFjaz4gcHJwQ2FsbGJhY2sp
Cit2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0U2VsZWN0aW9uQXNXZWJBcmNoaXZlRGF0YShzdGQ6OmZ1
bmN0aW9uPHZvaWQgKEFQSTo6RGF0YSosIENhbGxiYWNrQmFzZTo6RXJyb3IpPiBjYWxsYmFja0Z1
bmN0aW9uKQogewotICAgIFJlZlB0cjxEYXRhQ2FsbGJhY2s+IGNhbGxiYWNrID0gcHJwQ2FsbGJh
Y2s7CisgICAgUmVmUHRyPERhdGFDYWxsYmFjaz4gY2FsbGJhY2sgPSBEYXRhQ2FsbGJhY2s6OmNy
ZWF0ZShzdGQ6Om1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOwogICAgIGlmICghaXNWYWxpZCgpKSB7
CiAgICAgICAgIGNhbGxiYWNrLT5pbnZhbGlkYXRlKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTQ5
ODYsOCArNDk4OCwxMCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6aW5zZXJ0VGV4dEFzeW5jKGNvbnN0
CiAgICAgcHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6Okluc2VydFRleHRBc3luYyh0
ZXh0LCByZXBsYWNlbWVudFJhbmdlKSwgbV9wYWdlSUQpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94
eTo6Z2V0TWFya2VkUmFuZ2VBc3luYyhQYXNzUmVmUHRyPEVkaXRpbmdSYW5nZUNhbGxiYWNrPiBj
YWxsYmFjaykKK3ZvaWQgV2ViUGFnZVByb3h5OjpnZXRNYXJrZWRSYW5nZUFzeW5jKHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoRWRpdGluZ1JhbmdlLCBDYWxsYmFja0Jhc2U6OkVycm9yKT4gY2FsbGJhY2tG
dW5jdGlvbikKIHsKKyAgICBSZWZQdHI8RWRpdGluZ1JhbmdlQ2FsbGJhY2s+IGNhbGxiYWNrID0g
RWRpdGluZ1JhbmdlQ2FsbGJhY2s6OmNyZWF0ZShzdGQ6Om1vdmUoY2FsbGJhY2tGdW5jdGlvbikp
OworCiAgICAgaWYgKCFpc1ZhbGlkKCkpIHsKICAgICAgICAgY2FsbGJhY2stPmludmFsaWRhdGUo
KTsKICAgICAgICAgcmV0dXJuOwpAQCAtNDk5OSw4ICs1MDAzLDEwIEBAIHZvaWQgV2ViUGFnZVBy
b3h5OjpnZXRNYXJrZWRSYW5nZUFzeW5jKFAKICAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6R2V0TWFya2VkUmFuZ2VBc3luYyhjYWxsYmFja0lEKSwgbV9wYWdlSUQpOwogfQog
Ci12b2lkIFdlYlBhZ2VQcm94eTo6Z2V0U2VsZWN0ZWRSYW5nZUFzeW5jKFBhc3NSZWZQdHI8RWRp
dGluZ1JhbmdlQ2FsbGJhY2s+IGNhbGxiYWNrKQordm9pZCBXZWJQYWdlUHJveHk6OmdldFNlbGVj
dGVkUmFuZ2VBc3luYyhzdGQ6OmZ1bmN0aW9uPHZvaWQgKEVkaXRpbmdSYW5nZSwgQ2FsbGJhY2tC
YXNlOjpFcnJvcik+IGNhbGxiYWNrRnVuY3Rpb24pCiB7CisgICAgUmVmUHRyPEVkaXRpbmdSYW5n
ZUNhbGxiYWNrPiBjYWxsYmFjayA9IEVkaXRpbmdSYW5nZUNhbGxiYWNrOjpjcmVhdGUoc3RkOjpt
b3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKwogICAgIGlmICghaXNWYWxpZCgpKSB7CiAgICAgICAg
IGNhbGxiYWNrLT5pbnZhbGlkYXRlKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTUwMTIsOCArNTAx
OCwxMCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0U2VsZWN0ZWRSYW5nZUFzeW5jCiAgICAgcHJv
Y2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkdldFNlbGVjdGVkUmFuZ2VBc3luYyhjYWxs
YmFja0lEKSwgbV9wYWdlSUQpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6Y2hhcmFjdGVySW5k
ZXhGb3JQb2ludEFzeW5jKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgUGFzc1JlZlB0
cjxVbnNpZ25lZENhbGxiYWNrPiBjYWxsYmFjaykKK3ZvaWQgV2ViUGFnZVByb3h5OjpjaGFyYWN0
ZXJJbmRleEZvclBvaW50QXN5bmMoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCBzdGQ6
OmZ1bmN0aW9uPHZvaWQgKHVpbnQ2NF90LCBDYWxsYmFja0Jhc2U6OkVycm9yKT4gY2FsbGJhY2tG
dW5jdGlvbikKIHsKKyAgICBSZWZQdHI8VW5zaWduZWRDYWxsYmFjaz4gY2FsbGJhY2sgPSBVbnNp
Z25lZENhbGxiYWNrOjpjcmVhdGUoc3RkOjptb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKwogICAg
IGlmICghaXNWYWxpZCgpKSB7CiAgICAgICAgIGNhbGxiYWNrLT5pbnZhbGlkYXRlKCk7CiAgICAg
ICAgIHJldHVybjsKQEAgLTUwMjUsOCArNTAzMywxMCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Y2hh
cmFjdGVySW5kZXhGb3JQb2luCiAgICAgcHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6
OkNoYXJhY3RlckluZGV4Rm9yUG9pbnRBc3luYyhwb2ludCwgY2FsbGJhY2tJRCksIG1fcGFnZUlE
KTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlQXN5
bmMoY29uc3QgRWRpdGluZ1JhbmdlJiByYW5nZSwgUGFzc1JlZlB0cjxSZWN0Rm9yQ2hhcmFjdGVy
UmFuZ2VDYWxsYmFjaz4gY2FsbGJhY2spCit2b2lkIFdlYlBhZ2VQcm94eTo6Zmlyc3RSZWN0Rm9y
Q2hhcmFjdGVyUmFuZ2VBc3luYyhjb25zdCBFZGl0aW5nUmFuZ2UmIHJhbmdlLCBzdGQ6OmZ1bmN0
aW9uPHZvaWQgKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBFZGl0aW5nUmFuZ2UmLCBD
YWxsYmFja0Jhc2U6OkVycm9yKT4gY2FsbGJhY2tGdW5jdGlvbikKIHsKKyAgICBSZWZQdHI8UmVj
dEZvckNoYXJhY3RlclJhbmdlQ2FsbGJhY2s+IGNhbGxiYWNrID0gUmVjdEZvckNoYXJhY3RlclJh
bmdlQ2FsbGJhY2s6OmNyZWF0ZShzdGQ6Om1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworCiAgICAg
aWYgKCFpc1ZhbGlkKCkpIHsKICAgICAgICAgY2FsbGJhY2stPmludmFsaWRhdGUoKTsKICAgICAg
ICAgcmV0dXJuOwpAQCAtNTA1OSw5ICs1MDY5LDkgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNvbmZp
cm1Db21wb3NpdGlvbkFzeQogCiAjZW5kaWYKIAotdm9pZCBXZWJQYWdlUHJveHk6OnRha2VTbmFw
c2hvdChJbnRSZWN0IHJlY3QsIEludFNpemUgYml0bWFwU2l6ZSwgU25hcHNob3RPcHRpb25zIG9w
dGlvbnMsIEltYWdlQ2FsbGJhY2s6OkNhbGxiYWNrRnVuY3Rpb24gY2FsbGJhY2tGdW5jdGlvbikK
K3ZvaWQgV2ViUGFnZVByb3h5Ojp0YWtlU25hcHNob3QoSW50UmVjdCByZWN0LCBJbnRTaXplIGJp
dG1hcFNpemUsIFNuYXBzaG90T3B0aW9ucyBvcHRpb25zLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNv
bnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+IGNhbGxi
YWNrRnVuY3Rpb24pCiB7Ci0gICAgUmVmUHRyPEltYWdlQ2FsbGJhY2s+IGNhbGxiYWNrID0gSW1h
Z2VDYWxsYmFjazo6Y3JlYXRlKGNhbGxiYWNrRnVuY3Rpb24pOworICAgIFJlZlB0cjxJbWFnZUNh
bGxiYWNrPiBjYWxsYmFjayA9IEltYWdlQ2FsbGJhY2s6OmNyZWF0ZShzdGQ6Om1vdmUoY2FsbGJh
Y2tGdW5jdGlvbikpOwogCiAgICAgaWYgKCFpc1ZhbGlkKCkpIHsKICAgICAgICAgY2FsbGJhY2st
PmludmFsaWRhdGUoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmgJKHJldmlzaW9uIDE3MDAwOCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMzc1LDcgKzM3NSw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIGFkZE1JTUVUeXBlV2l0aEN1c3RvbUNvbnRlbnRQcm92aWRlcihjb25zdCBTdHJpbmcmIG1p
bWVUeXBlKTsKIAogICAgIHZvaWQgZXhlY3V0ZUVkaXRDb21tYW5kKGNvbnN0IFN0cmluZyYgY29t
bWFuZE5hbWUpOwotICAgIHZvaWQgdmFsaWRhdGVDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFu
ZE5hbWUsIFBhc3NSZWZQdHI8VmFsaWRhdGVDb21tYW5kQ2FsbGJhY2s+KTsKKyAgICB2b2lkIHZh
bGlkYXRlQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBzdGQ6OmZ1bmN0aW9uPHZv
aWQgKGNvbnN0IFN0cmluZyYsIGJvb2wsIGludDMyX3QsIENhbGxiYWNrQmFzZTo6RXJyb3IpPik7
CiAjaWYgUExBVEZPUk0oSU9TKQogICAgIGRvdWJsZSBkaXNwbGF5ZWRDb250ZW50U2NhbGUoKSBj
b25zdCB7IHJldHVybiBtX2xhc3RWaXNpYmxlQ29udGVudFJlY3RVcGRhdGUuc2NhbGUoKTsgfQog
ICAgIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZXhwb3NlZENvbnRlbnRSZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9sYXN0VmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlLmV4cG9zZWRSZWN0KCk7IH0K
QEAgLTM5OCwxNyArMzk4LDE3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZENvbW1pdExheWVyVHJl
ZShjb25zdCBXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uJik7CiAKICAgICB2b2lk
IHNlbGVjdFdpdGhHZXN0dXJlKGNvbnN0IFdlYkNvcmU6OkludFBvaW50LCBXZWJDb3JlOjpUZXh0
R3JhbnVsYXJpdHksIHVpbnQzMl90IGdlc3R1cmVUeXBlLCB1aW50MzJfdCBnZXN0dXJlU3RhdGUs
IHN0ZDo6ZnVuY3Rpb248dm9pZCAoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCB1aW50MzJfdCwg
dWludDMyX3QsIHVpbnQzMl90LCBDYWxsYmFja0Jhc2U6OkVycm9yKT4pOwotICAgIHZvaWQgdXBk
YXRlU2VsZWN0aW9uV2l0aFRvdWNoZXMoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQsIHVpbnQzMl90
IHRvdWNoZXMsIGJvb2wgYmFzZUlzU3RhcnQsIFBhc3NSZWZQdHI8VG91Y2hlc0NhbGxiYWNrPik7
CisgICAgdm9pZCB1cGRhdGVTZWxlY3Rpb25XaXRoVG91Y2hlcyhjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCwgdWludDMyX3QgdG91Y2hlcywgYm9vbCBiYXNlSXNTdGFydCwgc3RkOjpmdW5jdGlvbjx2
b2lkIChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIHVpbnQzMl90LCBDYWxsYmFja0Jhc2U6OkVy
cm9yKT4pOwogICAgIHZvaWQgc2VsZWN0V2l0aFR3b1RvdWNoZXMoY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQgZnJvbSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQgdG8sIHVpbnQzMl90IGdlc3R1cmVU
eXBlLCB1aW50MzJfdCBnZXN0dXJlU3RhdGUsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmLCB1aW50MzJfdCwgdWludDMyX3QsIHVpbnQzMl90LCBDYWxsYmFja0Jh
c2U6OkVycm9yKT4pOwogICAgIHZvaWQgdXBkYXRlQmxvY2tTZWxlY3Rpb25XaXRoVG91Y2goY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQsIHVpbnQzMl90IHRvdWNoLCB1aW50MzJfdCBoYW5kbGVQb3Np
dGlvbik7CiAgICAgdm9pZCBleHRlbmRTZWxlY3Rpb24oV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5
KTsKICAgICB2b2lkIHNlbGVjdFdvcmRCYWNrd2FyZCgpOwotICAgIHZvaWQgcmVxdWVzdEF1dG9j
b3JyZWN0aW9uRGF0YShjb25zdCBTdHJpbmcmIHRleHRGb3JBdXRvY29ycmVjdGlvbiwgUGFzc1Jl
ZlB0cjxBdXRvY29ycmVjdGlvbkRhdGFDYWxsYmFjaz4pOwotICAgIHZvaWQgYXBwbHlBdXRvY29y
cmVjdGlvbihjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24sIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxU
ZXh0LCBQYXNzUmVmUHRyPFN0cmluZ0NhbGxiYWNrPik7CisgICAgdm9pZCByZXF1ZXN0QXV0b2Nv
cnJlY3Rpb25EYXRhKGNvbnN0IFN0cmluZyYgdGV4dEZvckF1dG9jb3JyZWN0aW9uLCBzdGQ6OmZ1
bmN0aW9uPHZvaWQgKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiwgY29uc3QgU3Ry
aW5nJiwgZG91YmxlLCB1aW50NjRfdCwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+KTsKKyAgICB2b2lk
IGFwcGx5QXV0b2NvcnJlY3Rpb24oY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uLCBjb25zdCBTdHJp
bmcmIG9yaWdpbmFsVGV4dCwgc3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBTdHJpbmcmLCBDYWxs
YmFja0Jhc2U6OkVycm9yKT4pOwogICAgIGJvb2wgYXBwbHlBdXRvY29ycmVjdGlvbihjb25zdCBT
dHJpbmcmIGNvcnJlY3Rpb24sIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxUZXh0KTsKLSAgICB2b2lk
IHJlcXVlc3RBdXRvY29ycmVjdGlvbkNvbnRleHQoUGFzc1JlZlB0cjxBdXRvY29ycmVjdGlvbkNv
bnRleHRDYWxsYmFjaz4pOworICAgIHZvaWQgcmVxdWVzdEF1dG9jb3JyZWN0aW9uQ29udGV4dChz
dGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0
cmluZyYsIGNvbnN0IFN0cmluZyYsIHVpbnQ2NF90LCB1aW50NjRfdCwgQ2FsbGJhY2tCYXNlOjpF
cnJvcik+KTsKICAgICB2b2lkIGdldEF1dG9jb3JyZWN0aW9uQ29udGV4dChTdHJpbmcmIGNvbnRl
eHRCZWZvcmUsIFN0cmluZyYgbWFya2VkVGV4dCwgU3RyaW5nJiBzZWxlY3RlZFRleHQsIFN0cmlu
ZyYgY29udGV4dEFmdGVyLCB1aW50NjRfdCYgbG9jYXRpb24sIHVpbnQ2NF90JiBsZW5ndGgpOwot
ICAgIHZvaWQgcmVxdWVzdERpY3RhdGlvbkNvbnRleHQoUGFzc1JlZlB0cjxEaWN0YXRpb25Db250
ZXh0Q2FsbGJhY2s+KTsKKyAgICB2b2lkIHJlcXVlc3REaWN0YXRpb25Db250ZXh0KHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwg
Q2FsbGJhY2tCYXNlOjpFcnJvcik+KTsKICAgICB2b2lkIHJlcGxhY2VEaWN0YXRlZFRleHQoY29u
c3QgU3RyaW5nJiBvbGRUZXh0LCBjb25zdCBTdHJpbmcmIG5ld1RleHQpOwogICAgIHZvaWQgcmVw
bGFjZVNlbGVjdGVkVGV4dChjb25zdCBTdHJpbmcmIG9sZFRleHQsIGNvbnN0IFN0cmluZyYgbmV3
VGV4dCk7CiAgICAgdm9pZCBkaWRSZWNlaXZlUG9zaXRpb25JbmZvcm1hdGlvbihjb25zdCBJbnRl
cmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbiYpOwpAQCAtNDcxLDEwICs0NzEsMTAgQEAgcHVi
bGljOgogICAgIExheWVyT3JWaWV3KiBhY2NlbGVyYXRlZENvbXBvc2l0aW5nUm9vdExheWVyKCkg
Y29uc3Q7CiAKICAgICB2b2lkIGluc2VydFRleHRBc3luYyhjb25zdCBTdHJpbmcmIHRleHQsIGNv
bnN0IEVkaXRpbmdSYW5nZSYgcmVwbGFjZW1lbnRSYW5nZSk7Ci0gICAgdm9pZCBnZXRNYXJrZWRS
YW5nZUFzeW5jKFBhc3NSZWZQdHI8RWRpdGluZ1JhbmdlQ2FsbGJhY2s+KTsKLSAgICB2b2lkIGdl
dFNlbGVjdGVkUmFuZ2VBc3luYyhQYXNzUmVmUHRyPEVkaXRpbmdSYW5nZUNhbGxiYWNrPik7Ci0g
ICAgdm9pZCBjaGFyYWN0ZXJJbmRleEZvclBvaW50QXN5bmMoY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQmLCBQYXNzUmVmUHRyPFVuc2lnbmVkQ2FsbGJhY2s+KTsKLSAgICB2b2lkIGZpcnN0UmVjdEZv
ckNoYXJhY3RlclJhbmdlQXN5bmMoY29uc3QgRWRpdGluZ1JhbmdlJiwgUGFzc1JlZlB0cjxSZWN0
Rm9yQ2hhcmFjdGVyUmFuZ2VDYWxsYmFjaz4pOworICAgIHZvaWQgZ2V0TWFya2VkUmFuZ2VBc3lu
YyhzdGQ6OmZ1bmN0aW9uPHZvaWQgKEVkaXRpbmdSYW5nZSwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+
KTsKKyAgICB2b2lkIGdldFNlbGVjdGVkUmFuZ2VBc3luYyhzdGQ6OmZ1bmN0aW9uPHZvaWQgKEVk
aXRpbmdSYW5nZSwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+KTsKKyAgICB2b2lkIGNoYXJhY3Rlcklu
ZGV4Rm9yUG9pbnRBc3luYyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIHN0ZDo6ZnVuY3Rpb248
dm9pZCAodWludDY0X3QsIENhbGxiYWNrQmFzZTo6RXJyb3IpPik7CisgICAgdm9pZCBmaXJzdFJl
Y3RGb3JDaGFyYWN0ZXJSYW5nZUFzeW5jKGNvbnN0IEVkaXRpbmdSYW5nZSYsIHN0ZDo6ZnVuY3Rp
b248dm9pZCAoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IEVkaXRpbmdSYW5nZSYsIENh
bGxiYWNrQmFzZTo6RXJyb3IpPik7CiAgICAgdm9pZCBzZXRDb21wb3NpdGlvbkFzeW5jKGNvbnN0
IFN0cmluZyYgdGV4dCwgVmVjdG9yPFdlYkNvcmU6OkNvbXBvc2l0aW9uVW5kZXJsaW5lPiB1bmRl
cmxpbmVzLCBjb25zdCBFZGl0aW5nUmFuZ2UmIHNlbGVjdGlvblJhbmdlLCBjb25zdCBFZGl0aW5n
UmFuZ2UmIHJlcGxhY2VtZW50UmFuZ2UpOwogICAgIHZvaWQgY29uZmlybUNvbXBvc2l0aW9uQXN5
bmMoKTsKIApAQCAtNjUxLDIwICs2NTEsMjAgQEAgcHVibGljOgogICAgIHZvaWQgZGlkRmFpbFRv
RmluZFN0cmluZyhjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIGRpZEZpbmRTdHJpbmdNYXRjaGVz
KGNvbnN0IFN0cmluZyYsIGNvbnN0IFZlY3RvcjxWZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4+JiBt
YXRjaFJlY3RzLCBpbnQzMl90IGZpcnN0SW5kZXhBZnRlclNlbGVjdGlvbik7CiAKLSAgICB2b2lk
IGdldENvbnRlbnRzQXNTdHJpbmcoUGFzc1JlZlB0cjxTdHJpbmdDYWxsYmFjaz4pOwotICAgIHZv
aWQgZ2V0Qnl0ZWNvZGVQcm9maWxlKFBhc3NSZWZQdHI8U3RyaW5nQ2FsbGJhY2s+KTsKKyAgICB2
b2lkIGdldENvbnRlbnRzQXNTdHJpbmcoc3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBTdHJpbmcm
LCBDYWxsYmFja0Jhc2U6OkVycm9yKT4pOworICAgIHZvaWQgZ2V0Qnl0ZWNvZGVQcm9maWxlKHN0
ZDo6ZnVuY3Rpb248dm9pZCAoY29uc3QgU3RyaW5nJiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+KTsK
IAogI2lmIEVOQUJMRShNSFRNTCkKLSAgICB2b2lkIGdldENvbnRlbnRzQXNNSFRNTERhdGEoUGFz
c1JlZlB0cjxEYXRhQ2FsbGJhY2s+LCBib29sIHVzZUJpbmFyeUVuY29kaW5nKTsKKyAgICB2b2lk
IGdldENvbnRlbnRzQXNNSFRNTERhdGEoc3RkOjpmdW5jdGlvbjx2b2lkIChBUEk6OkRhdGEqLCBD
YWxsYmFja0Jhc2U6OkVycm9yKT4sIGJvb2wgdXNlQmluYXJ5RW5jb2RpbmcpOwogI2VuZGlmCiAg
ICAgdm9pZCBnZXRNYWluUmVzb3VyY2VEYXRhT2ZGcmFtZShXZWJGcmFtZVByb3h5Kiwgc3RkOjpm
dW5jdGlvbjx2b2lkIChBUEk6OkRhdGEqLCBDYWxsYmFja0Jhc2U6OkVycm9yKT4pOwogICAgIHZv
aWQgZ2V0UmVzb3VyY2VEYXRhRnJvbUZyYW1lKFdlYkZyYW1lUHJveHkqLCBBUEk6OlVSTCosIHN0
ZDo6ZnVuY3Rpb248dm9pZCAoQVBJOjpEYXRhKiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+KTsKLSAg
ICB2b2lkIGdldFJlbmRlclRyZWVFeHRlcm5hbFJlcHJlc2VudGF0aW9uKFBhc3NSZWZQdHI8U3Ry
aW5nQ2FsbGJhY2s+KTsKLSAgICB2b2lkIGdldFNlbGVjdGlvbk9yQ29udGVudHNBc1N0cmluZyhQ
YXNzUmVmUHRyPFN0cmluZ0NhbGxiYWNrPik7Ci0gICAgdm9pZCBnZXRTZWxlY3Rpb25Bc1dlYkFy
Y2hpdmVEYXRhKFBhc3NSZWZQdHI8RGF0YUNhbGxiYWNrPik7Ci0gICAgdm9pZCBnZXRTb3VyY2VG
b3JGcmFtZShXZWJGcmFtZVByb3h5KiwgUGFzc1JlZlB0cjxTdHJpbmdDYWxsYmFjaz4pOworICAg
IHZvaWQgZ2V0UmVuZGVyVHJlZUV4dGVybmFsUmVwcmVzZW50YXRpb24oc3RkOjpmdW5jdGlvbjx2
b2lkIChjb25zdCBTdHJpbmcmLCBDYWxsYmFja0Jhc2U6OkVycm9yKT4pOworICAgIHZvaWQgZ2V0
U2VsZWN0aW9uT3JDb250ZW50c0FzU3RyaW5nKHN0ZDo6ZnVuY3Rpb248dm9pZCAoY29uc3QgU3Ry
aW5nJiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+KTsKKyAgICB2b2lkIGdldFNlbGVjdGlvbkFzV2Vi
QXJjaGl2ZURhdGEoc3RkOjpmdW5jdGlvbjx2b2lkIChBUEk6OkRhdGEqLCBDYWxsYmFja0Jhc2U6
OkVycm9yKT4pOworICAgIHZvaWQgZ2V0U291cmNlRm9yRnJhbWUoV2ViRnJhbWVQcm94eSosIHN0
ZDo6ZnVuY3Rpb248dm9pZCAoY29uc3QgU3RyaW5nJiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+KTsK
ICAgICB2b2lkIGdldFdlYkFyY2hpdmVPZkZyYW1lKFdlYkZyYW1lUHJveHkqLCBzdGQ6OmZ1bmN0
aW9uPHZvaWQgKEFQSTo6RGF0YSosIENhbGxiYWNrQmFzZTo6RXJyb3IpPik7Ci0gICAgdm9pZCBy
dW5KYXZhU2NyaXB0SW5NYWluRnJhbWUoY29uc3QgU3RyaW5nJiwgUGFzc1JlZlB0cjxTY3JpcHRW
YWx1ZUNhbGxiYWNrPik7CisgICAgdm9pZCBydW5KYXZhU2NyaXB0SW5NYWluRnJhbWUoY29uc3Qg
U3RyaW5nJiwgc3RkOjpmdW5jdGlvbjx2b2lkIChXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUqLCBD
YWxsYmFja0Jhc2U6OkVycm9yKT4gY2FsbGJhY2tGdW5jdGlvbik7CiAgICAgdm9pZCBmb3JjZVJl
cGFpbnQoUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+KTsKIAogICAgIGZsb2F0IGhlYWRlckhlaWdo
dChXZWJGcmFtZVByb3h5Kik7CkBAIC04OTIsNyArODkyLDcgQEAgcHVibGljOgogCiAgICAgdm9p
ZCBzZXRUaHVtYm5haWxTY2FsZShkb3VibGUpOwogCi0gICAgdm9pZCB0YWtlU25hcHNob3QoV2Vi
Q29yZTo6SW50UmVjdCwgV2ViQ29yZTo6SW50U2l6ZSBiaXRtYXBTaXplLCBTbmFwc2hvdE9wdGlv
bnMsIEltYWdlQ2FsbGJhY2s6OkNhbGxiYWNrRnVuY3Rpb24pOworICAgIHZvaWQgdGFrZVNuYXBz
aG90KFdlYkNvcmU6OkludFJlY3QsIFdlYkNvcmU6OkludFNpemUgYml0bWFwU2l6ZSwgU25hcHNo
b3RPcHRpb25zLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFu
ZGxlJiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+KTsKIAogcHJpdmF0ZToKICAgICBXZWJQYWdlUHJv
eHkoUGFnZUNsaWVudCYsIFdlYlByb2Nlc3NQcm94eSYsIHVpbnQ2NF90IHBhZ2VJRCwgY29uc3Qg
V2ViUGFnZUNvbmZpZ3VyYXRpb24mKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQy9XS1BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQy9XS1BhZ2UuY3BwCShyZXZpc2lvbiAxNzAwMDgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2Miw3ICsxNTYyLDcg
QEAgdm9pZCBXS1BhZ2VTZXRTZXNzaW9uKFdLUGFnZVJlZiBwYWdlUmVmLAogCiB2b2lkIFdLUGFn
ZVJ1bkphdmFTY3JpcHRJbk1haW5GcmFtZShXS1BhZ2VSZWYgcGFnZVJlZiwgV0tTdHJpbmdSZWYg
c2NyaXB0UmVmLCB2b2lkKiBjb250ZXh0LCBXS1BhZ2VSdW5KYXZhU2NyaXB0RnVuY3Rpb24gY2Fs
bGJhY2spCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5ydW5KYXZhU2NyaXB0SW5NYWluRnJhbWUo
dG9JbXBsKHNjcmlwdFJlZiktPnN0cmluZygpLCBTY3JpcHRWYWx1ZUNhbGxiYWNrOjpjcmVhdGUo
dG9HZW5lcmljQ2FsbGJhY2tGdW5jdGlvbihjb250ZXh0LCBjYWxsYmFjaykpKTsKKyAgICB0b0lt
cGwocGFnZVJlZiktPnJ1bkphdmFTY3JpcHRJbk1haW5GcmFtZSh0b0ltcGwoc2NyaXB0UmVmKS0+
c3RyaW5nKCksIHRvR2VuZXJpY0NhbGxiYWNrRnVuY3Rpb24oY29udGV4dCwgY2FsbGJhY2spKTsK
IH0KIAogc3RhdGljIHN0ZDo6ZnVuY3Rpb248dm9pZCAoY29uc3QgU3RyaW5nJiwgQ2FsbGJhY2tC
YXNlOjpFcnJvcik+IHRvR2VuZXJpY0NhbGxiYWNrRnVuY3Rpb24odm9pZCogY29udGV4dCwgdm9p
ZCAoKmNhbGxiYWNrKShXS1N0cmluZ1JlZiwgV0tFcnJvclJlZiwgdm9pZCopKQpAQCAtMTU3NCwy
NyArMTU3NCwyNyBAQCBzdGF0aWMgc3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBTdHJpbmcmCiAK
IHZvaWQgV0tQYWdlUmVuZGVyVHJlZUV4dGVybmFsUmVwcmVzZW50YXRpb24oV0tQYWdlUmVmIHBh
Z2VSZWYsIHZvaWQqIGNvbnRleHQsIFdLUGFnZVJlbmRlclRyZWVFeHRlcm5hbFJlcHJlc2VudGF0
aW9uRnVuY3Rpb24gY2FsbGJhY2spCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5nZXRSZW5kZXJU
cmVlRXh0ZXJuYWxSZXByZXNlbnRhdGlvbihTdHJpbmdDYWxsYmFjazo6Y3JlYXRlKHRvR2VuZXJp
Y0NhbGxiYWNrRnVuY3Rpb24oY29udGV4dCwgY2FsbGJhY2spKSk7CisgICAgdG9JbXBsKHBhZ2VS
ZWYpLT5nZXRSZW5kZXJUcmVlRXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0b0dlbmVyaWNDYWxsYmFj
a0Z1bmN0aW9uKGNvbnRleHQsIGNhbGxiYWNrKSk7CiB9CiAKIHZvaWQgV0tQYWdlR2V0U291cmNl
Rm9yRnJhbWUoV0tQYWdlUmVmIHBhZ2VSZWYsIFdLRnJhbWVSZWYgZnJhbWVSZWYsIHZvaWQqIGNv
bnRleHQsIFdLUGFnZUdldFNvdXJjZUZvckZyYW1lRnVuY3Rpb24gY2FsbGJhY2spCiB7Ci0gICAg
dG9JbXBsKHBhZ2VSZWYpLT5nZXRTb3VyY2VGb3JGcmFtZSh0b0ltcGwoZnJhbWVSZWYpLCBTdHJp
bmdDYWxsYmFjazo6Y3JlYXRlKHRvR2VuZXJpY0NhbGxiYWNrRnVuY3Rpb24oY29udGV4dCwgY2Fs
bGJhY2spKSk7CisgICAgdG9JbXBsKHBhZ2VSZWYpLT5nZXRTb3VyY2VGb3JGcmFtZSh0b0ltcGwo
ZnJhbWVSZWYpLCB0b0dlbmVyaWNDYWxsYmFja0Z1bmN0aW9uKGNvbnRleHQsIGNhbGxiYWNrKSk7
CiB9CiAKIHZvaWQgV0tQYWdlR2V0Q29udGVudHNBc1N0cmluZyhXS1BhZ2VSZWYgcGFnZVJlZiwg
dm9pZCogY29udGV4dCwgV0tQYWdlR2V0Q29udGVudHNBc1N0cmluZ0Z1bmN0aW9uIGNhbGxiYWNr
KQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+Z2V0Q29udGVudHNBc1N0cmluZyhTdHJpbmdDYWxs
YmFjazo6Y3JlYXRlKHRvR2VuZXJpY0NhbGxiYWNrRnVuY3Rpb24oY29udGV4dCwgY2FsbGJhY2sp
KSk7CisgICAgdG9JbXBsKHBhZ2VSZWYpLT5nZXRDb250ZW50c0FzU3RyaW5nKHRvR2VuZXJpY0Nh
bGxiYWNrRnVuY3Rpb24oY29udGV4dCwgY2FsbGJhY2spKTsKIH0KIAogdm9pZCBXS1BhZ2VHZXRC
eXRlY29kZVByb2ZpbGUoV0tQYWdlUmVmIHBhZ2VSZWYsIHZvaWQqIGNvbnRleHQsIFdLUGFnZUdl
dEJ5dGVjb2RlUHJvZmlsZUZ1bmN0aW9uIGNhbGxiYWNrKQogewotICAgIHRvSW1wbChwYWdlUmVm
KS0+Z2V0Qnl0ZWNvZGVQcm9maWxlKFN0cmluZ0NhbGxiYWNrOjpjcmVhdGUodG9HZW5lcmljQ2Fs
bGJhY2tGdW5jdGlvbihjb250ZXh0LCBjYWxsYmFjaykpKTsKKyAgICB0b0ltcGwocGFnZVJlZikt
PmdldEJ5dGVjb2RlUHJvZmlsZSh0b0dlbmVyaWNDYWxsYmFja0Z1bmN0aW9uKGNvbnRleHQsIGNh
bGxiYWNrKSk7CiB9CiAKIHZvaWQgV0tQYWdlR2V0U2VsZWN0aW9uQXNXZWJBcmNoaXZlRGF0YShX
S1BhZ2VSZWYgcGFnZVJlZiwgdm9pZCogY29udGV4dCwgV0tQYWdlR2V0U2VsZWN0aW9uQXNXZWJB
cmNoaXZlRGF0YUZ1bmN0aW9uIGNhbGxiYWNrKQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+Z2V0
U2VsZWN0aW9uQXNXZWJBcmNoaXZlRGF0YShEYXRhQ2FsbGJhY2s6OmNyZWF0ZSh0b0dlbmVyaWND
YWxsYmFja0Z1bmN0aW9uKGNvbnRleHQsIGNhbGxiYWNrKSkpOworICAgIHRvSW1wbChwYWdlUmVm
KS0+Z2V0U2VsZWN0aW9uQXNXZWJBcmNoaXZlRGF0YSh0b0dlbmVyaWNDYWxsYmFja0Z1bmN0aW9u
KGNvbnRleHQsIGNhbGxiYWNrKSk7CiB9CiAKIHZvaWQgV0tQYWdlR2V0Q29udGVudHNBc01IVE1M
RGF0YShXS1BhZ2VSZWYgcGFnZVJlZiwgYm9vbCB1c2VCaW5hcnlFbmNvZGluZywgdm9pZCogY29u
dGV4dCwgV0tQYWdlR2V0Q29udGVudHNBc01IVE1MRGF0YUZ1bmN0aW9uIGNhbGxiYWNrKQpAQCAt
MTY0OCw5ICsxNjQ4LDkgQEAgV0tTdHJpbmdSZWYgV0tQYWdlQ29weVN0YW5kYXJkVXNlckFnZW50
VwogCiB2b2lkIFdLUGFnZVZhbGlkYXRlQ29tbWFuZChXS1BhZ2VSZWYgcGFnZVJlZiwgV0tTdHJp
bmdSZWYgY29tbWFuZCwgdm9pZCogY29udGV4dCwgV0tQYWdlVmFsaWRhdGVDb21tYW5kQ2FsbGJh
Y2sgY2FsbGJhY2spCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT52YWxpZGF0ZUNvbW1hbmQodG9J
bXBsKGNvbW1hbmQpLT5zdHJpbmcoKSwgVmFsaWRhdGVDb21tYW5kQ2FsbGJhY2s6OmNyZWF0ZShb
Y29udGV4dCwgY2FsbGJhY2tdKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGJvb2wgaXNFbmFi
bGVkLCBpbnQzMl90IHN0YXRlLCBDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9yKSB7CisgICAgdG9J
bXBsKHBhZ2VSZWYpLT52YWxpZGF0ZUNvbW1hbmQodG9JbXBsKGNvbW1hbmQpLT5zdHJpbmcoKSwg
W2NvbnRleHQsIGNhbGxiYWNrXShjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBib29sIGlzRW5h
YmxlZCwgaW50MzJfdCBzdGF0ZSwgQ2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvcikgewogICAgICAg
ICBjYWxsYmFjayh0b0FQSShBUEk6OlN0cmluZzo6Y3JlYXRlKGNvbW1hbmROYW1lKS5nZXQoKSks
IGlzRW5hYmxlZCwgc3RhdGUsIGVycm9yICE9IENhbGxiYWNrQmFzZTo6RXJyb3I6Ok5vbmUgPyB0
b0FQSShBUEk6OkVycm9yOjpjcmVhdGUoKS5nZXQoKSkgOiAwLCBjb250ZXh0KTsKLSAgICB9KSk7
CisgICAgfSk7CiB9CiAKIHZvaWQgV0tQYWdlRXhlY3V0ZUNvbW1hbmQoV0tQYWdlUmVmIHBhZ2VS
ZWYsIFdLU3RyaW5nUmVmIGNvbW1hbmQpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0MvV0tQbHVnaW5TaXRlRGF0YU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1BsdWdpblNpdGVEYXRhTWFuYWdlci5jcHAJKHJldmlz
aW9uIDE3MDAwOCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1BsdWdpblNp
dGVEYXRhTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDkgKzc1LDkgQEAgc3RhdGlj
IHVpbnQ2NF90IHRvTlBDbGVhclNpdGVEYXRhRmxhZ3MoVwogdm9pZCBXS1BsdWdpblNpdGVEYXRh
TWFuYWdlckNsZWFyU2l0ZURhdGEoV0tQbHVnaW5TaXRlRGF0YU1hbmFnZXJSZWYgbWFuYWdlclJl
ZiwgV0tBcnJheVJlZiBzaXRlc1JlZiwgV0tDbGVhclNpdGVEYXRhRmxhZ3MgZmxhZ3MsIHVpbnQ2
NF90IG1heEFnZUluU2Vjb25kcywgdm9pZCogY29udGV4dCwgV0tQbHVnaW5TaXRlRGF0YU1hbmFn
ZXJDbGVhclNpdGVEYXRhRnVuY3Rpb24gZnVuY3Rpb24pCiB7CiAjaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCi0gICAgdG9JbXBsKG1hbmFnZXJSZWYpLT5jbGVhclNpdGVEYXRhKHRvSW1w
bChzaXRlc1JlZiksIHRvTlBDbGVhclNpdGVEYXRhRmxhZ3MoZmxhZ3MpLCBtYXhBZ2VJblNlY29u
ZHMsIFZvaWRDYWxsYmFjazo6Y3JlYXRlKFtjb250ZXh0LCBmdW5jdGlvbl0oQ2FsbGJhY2tCYXNl
OjpFcnJvciBlcnJvcikgeworICAgIHRvSW1wbChtYW5hZ2VyUmVmKS0+Y2xlYXJTaXRlRGF0YSh0
b0ltcGwoc2l0ZXNSZWYpLCB0b05QQ2xlYXJTaXRlRGF0YUZsYWdzKGZsYWdzKSwgbWF4QWdlSW5T
ZWNvbmRzLCBbY29udGV4dCwgZnVuY3Rpb25dKENhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsK
ICAgICAgICAgZnVuY3Rpb24oZXJyb3IgPT0gQ2FsbGJhY2tCYXNlOjpFcnJvcjo6Tm9uZSA/IG51
bGxwdHIgOiB0b0FQSShBUEk6OkVycm9yOjpjcmVhdGUoKS5nZXQoKSksIGNvbnRleHQpOwotICAg
IH0pKTsKKyAgICB9KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKG1hbmFnZXJSZWYpOwogICAg
IFVOVVNFRF9QQVJBTShzaXRlc1JlZik7CkBAIC05MSw5ICs5MSw5IEBAIHZvaWQgV0tQbHVnaW5T
aXRlRGF0YU1hbmFnZXJDbGVhclNpdGVEYXQKIHZvaWQgV0tQbHVnaW5TaXRlRGF0YU1hbmFnZXJD
bGVhckFsbFNpdGVEYXRhKFdLUGx1Z2luU2l0ZURhdGFNYW5hZ2VyUmVmIG1hbmFnZXJSZWYsIHZv
aWQqIGNvbnRleHQsIFdLUGx1Z2luU2l0ZURhdGFNYW5hZ2VyQ2xlYXJTaXRlRGF0YUZ1bmN0aW9u
IGZ1bmN0aW9uKQogewogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIHRvSW1w
bChtYW5hZ2VyUmVmKS0+Y2xlYXJTaXRlRGF0YSgwLCBOUF9DTEVBUl9BTEwsIHN0ZDo6bnVtZXJp
Y19saW1pdHM8dWludDY0X3Q+OjptYXgoKSwgVm9pZENhbGxiYWNrOjpjcmVhdGUoW2NvbnRleHQs
IGZ1bmN0aW9uXShDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9yKSB7CisgICAgdG9JbXBsKG1hbmFn
ZXJSZWYpLT5jbGVhclNpdGVEYXRhKDAsIE5QX0NMRUFSX0FMTCwgc3RkOjpudW1lcmljX2xpbWl0
czx1aW50NjRfdD46Om1heCgpLCBbY29udGV4dCwgZnVuY3Rpb25dKENhbGxiYWNrQmFzZTo6RXJy
b3IgZXJyb3IpIHsKICAgICAgICAgZnVuY3Rpb24oZXJyb3IgPT0gQ2FsbGJhY2tCYXNlOjpFcnJv
cjo6Tm9uZSA/IG51bGxwdHIgOiB0b0FQSShBUEk6OkVycm9yOjpjcmVhdGUoKS5nZXQoKSksIGNv
bnRleHQpOwotICAgIH0pKTsKKyAgICB9KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKG1hbmFn
ZXJSZWYpOwogICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCShyZXZpc2lvbiAxNzAwMDgp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQkod29y
a2luZyBjb3B5KQpAQCAtNDkyLDcgKzQ5Miw3IEBAIC0gKHZvaWQpZXZhbHVhdGVKYXZhU2NyaXB0
OihOU1N0cmluZyAqKWoKIHsKICAgICBhdXRvIGhhbmRsZXIgPSBhZG9wdE5TKFtjb21wbGV0aW9u
SGFuZGxlciBjb3B5XSk7CiAKLSAgICBfcGFnZS0+cnVuSmF2YVNjcmlwdEluTWFpbkZyYW1lKGph
dmFTY3JpcHRTdHJpbmcsIFdlYktpdDo6U2NyaXB0VmFsdWVDYWxsYmFjazo6Y3JlYXRlKFtoYW5k
bGVyXShXZWJLaXQ6OldlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogc2VyaWFsaXplZFNjcmlwdFZh
bHVlLCBXZWJLaXQ6OlNjcmlwdFZhbHVlQ2FsbGJhY2s6OkVycm9yIGVycm9yQ29kZSkgeworICAg
IF9wYWdlLT5ydW5KYXZhU2NyaXB0SW5NYWluRnJhbWUoamF2YVNjcmlwdFN0cmluZywgW2hhbmRs
ZXJdKFdlYktpdDo6V2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBzZXJpYWxpemVkU2NyaXB0VmFs
dWUsIFdlYktpdDo6U2NyaXB0VmFsdWVDYWxsYmFjazo6RXJyb3IgZXJyb3JDb2RlKSB7CiAgICAg
ICAgIGlmICghaGFuZGxlcikKICAgICAgICAgICAgIHJldHVybjsKIApAQCAtNTI0LDcgKzUyNCw3
IEBAIC0gKHZvaWQpZXZhbHVhdGVKYXZhU2NyaXB0OihOU1N0cmluZyAqKWoKICAgICAgICAgSlNW
YWx1ZSAqdmFsdWUgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhKU1ZhbHVlUmVmOnZhbHVlUmVmIGluQ29u
dGV4dDpjb250ZXh0LmdldCgpXTsKIAogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihbdmFsdWUg
dG9PYmplY3RdLCBuaWwpOwotICAgIH0pKTsKKyAgICB9KTsKIH0KIAogI3ByYWdtYSBtYXJrIGlP
Uy1zcGVjaWZpYyBtZXRob2RzCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21h
Yy9XS1ZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9t
YWMvV0tWaWV3Lm1tCShyZXZpc2lvbiAxNzAwMDgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL21hYy9XS1ZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTgzNSwxMyArODM1LDEzIEBA
IC0gKEJPT0wpdmFsaWRhdGVVc2VySW50ZXJmYWNlSXRlbTooaWQgPE4KICAgICAgICAgLy8gSWYg
d2UgYXJlIG5vdCBhbHJlYWR5IGF3YWl0aW5nIHZhbGlkYXRpb24gZm9yIHRoaXMgY29tbWFuZCwg
c3RhcnQgdGhlIGFzeW5jaHJvbm91cyB2YWxpZGF0aW9uIHByb2Nlc3MuCiAgICAgICAgIC8vIEZJ
WE1FOiBUaGVvcmV0aWNhbGx5LCB0aGVyZSBpcyBhIHJhY2UgaGVyZTsgd2hlbiB3ZSBnZXQgdGhl
IGFuc3dlciBpdCBtaWdodCBiZSBvbGQsIGZyb20gYSBwcmV2aW91cyB0aW1lCiAgICAgICAgIC8v
IHdlIGFza2VkIGZvciB0aGUgc2FtZSBjb21tYW5kOyB0aGVyZSBpcyBubyBndWFyYW50ZWUgdGhl
IGFuc3dlciBpcyBzdGlsbCB2YWxpZC4KLSAgICAgICAgX2RhdGEtPl9wYWdlLT52YWxpZGF0ZUNv
bW1hbmQoY29tbWFuZE5hbWUsIFZhbGlkYXRlQ29tbWFuZENhbGxiYWNrOjpjcmVhdGUoW3NlbGZd
KGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGJvb2wgaXNFbmFibGVkLCBpbnQzMl90IHN0YXRl
LCBDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9yKSB7CisgICAgICAgIF9kYXRhLT5fcGFnZS0+dmFs
aWRhdGVDb21tYW5kKGNvbW1hbmROYW1lLCBbc2VsZl0oY29uc3QgU3RyaW5nJiBjb21tYW5kTmFt
ZSwgYm9vbCBpc0VuYWJsZWQsIGludDMyX3Qgc3RhdGUsIENhbGxiYWNrQmFzZTo6RXJyb3IgZXJy
b3IpIHsKICAgICAgICAgICAgIC8vIElmIHRoZSBwcm9jZXNzIGV4aXRzIGJlZm9yZSB0aGUgY29t
bWFuZCBjYW4gYmUgdmFsaWRhdGVkLCB3ZSdsbCBiZSBjYWxsZWQgYmFjayB3aXRoIGFuIGVycm9y
LgogICAgICAgICAgICAgaWYgKGVycm9yICE9IENhbGxiYWNrQmFzZTo6RXJyb3I6Ok5vbmUpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBbc2VsZiBf
c2V0VXNlckludGVyZmFjZUl0ZW1TdGF0ZTpjb21tYW5kTmFtZSBlbmFibGVkOmlzRW5hYmxlZCBz
dGF0ZTpzdGF0ZV07Ci0gICAgICAgIH0pKTsKKyAgICAgICAgfSk7CiAgICAgfQogCiAgICAgLy8g
VHJlYXQgYXMgZW5hYmxlZCB1bnRpbCB3ZSBnZXQgdGhlIHJlc3VsdCBiYWNrIGZyb20gdGhlIHdl
YiBwcm9jZXNzIGFuZCBfc2V0VXNlckludGVyZmFjZUl0ZW1TdGF0ZSBpcyBjYWxsZWQuCkBAIC04
NTIsMTQgKzg1MiwxNCBAQCAtIChCT09MKXZhbGlkYXRlVXNlckludGVyZmFjZUl0ZW06KGlkIDxO
CiAKIC0gKElCQWN0aW9uKXN0YXJ0U3BlYWtpbmc6KGlkKXNlbmRlcgogewotICAgIF9kYXRhLT5f
cGFnZS0+Z2V0U2VsZWN0aW9uT3JDb250ZW50c0FzU3RyaW5nKFN0cmluZ0NhbGxiYWNrOjpjcmVh
dGUoW3NlbGZdKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9y
KSB7CisgICAgX2RhdGEtPl9wYWdlLT5nZXRTZWxlY3Rpb25PckNvbnRlbnRzQXNTdHJpbmcoW3Nl
bGZdKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9yKSB7CiAg
ICAgICAgIGlmIChlcnJvciAhPSBDYWxsYmFja0Jhc2U6OkVycm9yOjpOb25lKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICBpZiAoIXN0cmluZykKICAgICAgICAgICAgIHJldHVybjsKIAog
ICAgICAgICBbTlNBcHAgc3BlYWtTdHJpbmc6c3RyaW5nXTsKLSAgICB9KSk7CisgICAgfSk7CiB9
CiAKIC0gKElCQWN0aW9uKXN0b3BTcGVha2luZzooaWQpc2VuZGVyCkBAIC0xNDY0LDcgKzE0NjQs
NyBAQCAtICh2b2lkKXNlbGVjdGVkUmFuZ2VXaXRoQ29tcGxldGlvbkhhbmRsCiAgICAgUmV0YWlu
UHRyPGlkPiBjb21wbGV0aW9uSGFuZGxlciA9IGFkb3B0TlMoW2NvbXBsZXRpb25IYW5kbGVyUHRy
IGNvcHldKTsKIAogICAgIExPRyhUZXh0SW5wdXQsICJzZWxlY3RlZFJhbmdlIik7Ci0gICAgX2Rh
dGEtPl9wYWdlLT5nZXRTZWxlY3RlZFJhbmdlQXN5bmMoRWRpdGluZ1JhbmdlQ2FsbGJhY2s6OmNy
ZWF0ZShbY29tcGxldGlvbkhhbmRsZXJdKGNvbnN0IEVkaXRpbmdSYW5nZSYgZWRpdGluZ1Jhbmdl
UmVzdWx0LCBDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9yKSB7CisgICAgX2RhdGEtPl9wYWdlLT5n
ZXRTZWxlY3RlZFJhbmdlQXN5bmMoW2NvbXBsZXRpb25IYW5kbGVyXShjb25zdCBFZGl0aW5nUmFu
Z2UmIGVkaXRpbmdSYW5nZVJlc3VsdCwgQ2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvcikgewogICAg
ICAgICB2b2lkICheY29tcGxldGlvbkhhbmRsZXJCbG9jaykoTlNSYW5nZSkgPSAodm9pZCAoXiko
TlNSYW5nZSkpY29tcGxldGlvbkhhbmRsZXIuZ2V0KCk7CiAgICAgICAgIGlmIChlcnJvciAhPSBD
YWxsYmFja0Jhc2U6OkVycm9yOjpOb25lKSB7CiAgICAgICAgICAgICBMT0coVGV4dElucHV0LCAi
ICAgIC4uLnNlbGVjdGVkUmFuZ2UgZmFpbGVkLiIpOwpAQCAtMTQ3Nyw3ICsxNDc3LDcgQEAgLSAo
dm9pZClzZWxlY3RlZFJhbmdlV2l0aENvbXBsZXRpb25IYW5kbAogICAgICAgICBlbHNlCiAgICAg
ICAgICAgICBMT0coVGV4dElucHV0LCAiICAgIC0+IHNlbGVjdGVkUmFuZ2UgcmV0dXJuZWQgKCVs
bHUsICVsbHUpIiwgcmVzdWx0LmxvY2F0aW9uLCByZXN1bHQubGVuZ3RoKTsKICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXJCbG9jayhyZXN1bHQpOwotICAgIH0pKTsKKyAgICB9KTsKIH0KIAogLSAo
dm9pZCltYXJrZWRSYW5nZVdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShOU1JhbmdlIG1h
cmtlZFJhbmdlKSljb21wbGV0aW9uSGFuZGxlclB0cgpAQCAtMTQ4NSw3ICsxNDg1LDcgQEAgLSAo
dm9pZCltYXJrZWRSYW5nZVdpdGhDb21wbGV0aW9uSGFuZGxlcgogICAgIFJldGFpblB0cjxpZD4g
Y29tcGxldGlvbkhhbmRsZXIgPSBhZG9wdE5TKFtjb21wbGV0aW9uSGFuZGxlclB0ciBjb3B5XSk7
CiAKICAgICBMT0coVGV4dElucHV0LCAibWFya2VkUmFuZ2UiKTsKLSAgICBfZGF0YS0+X3BhZ2Ut
PmdldE1hcmtlZFJhbmdlQXN5bmMoRWRpdGluZ1JhbmdlQ2FsbGJhY2s6OmNyZWF0ZShbY29tcGxl
dGlvbkhhbmRsZXJdKGNvbnN0IEVkaXRpbmdSYW5nZSYgZWRpdGluZ1JhbmdlUmVzdWx0LCBDYWxs
YmFja0Jhc2U6OkVycm9yIGVycm9yKSB7CisgICAgX2RhdGEtPl9wYWdlLT5nZXRNYXJrZWRSYW5n
ZUFzeW5jKFtjb21wbGV0aW9uSGFuZGxlcl0oY29uc3QgRWRpdGluZ1JhbmdlJiBlZGl0aW5nUmFu
Z2VSZXN1bHQsIENhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKICAgICAgICAgdm9pZCAoXmNv
bXBsZXRpb25IYW5kbGVyQmxvY2spKE5TUmFuZ2UpID0gKHZvaWQgKF4pKE5TUmFuZ2UpKWNvbXBs
ZXRpb25IYW5kbGVyLmdldCgpOwogICAgICAgICBpZiAoZXJyb3IgIT0gQ2FsbGJhY2tCYXNlOjpF
cnJvcjo6Tm9uZSkgewogICAgICAgICAgICAgTE9HKFRleHRJbnB1dCwgIiAgICAuLi5tYXJrZWRS
YW5nZSBmYWlsZWQuIik7CkBAIC0xNDk4LDcgKzE0OTgsNyBAQCAtICh2b2lkKW1hcmtlZFJhbmdl
V2l0aENvbXBsZXRpb25IYW5kbGVyCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIExPRyhUZXh0
SW5wdXQsICIgICAgLT4gbWFya2VkUmFuZ2UgcmV0dXJuZWQgKCVsbHUsICVsbHUpIiwgcmVzdWx0
LmxvY2F0aW9uLCByZXN1bHQubGVuZ3RoKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXJCbG9j
ayhyZXN1bHQpOwotICAgIH0pKTsKKyAgICB9KTsKIH0KIAogLSAodm9pZCloYXNNYXJrZWRUZXh0
V2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKEJPT0wgaGFzTWFya2VkVGV4dCkpY29tcGxl
dGlvbkhhbmRsZXJQdHIKQEAgLTE1MDYsNyArMTUwNiw3IEBAIC0gKHZvaWQpaGFzTWFya2VkVGV4
dFdpdGhDb21wbGV0aW9uSGFuZGwKICAgICBSZXRhaW5QdHI8aWQ+IGNvbXBsZXRpb25IYW5kbGVy
ID0gYWRvcHROUyhbY29tcGxldGlvbkhhbmRsZXJQdHIgY29weV0pOwogCiAgICAgTE9HKFRleHRJ
bnB1dCwgImhhc01hcmtlZFRleHQiKTsKLSAgICBfZGF0YS0+X3BhZ2UtPmdldE1hcmtlZFJhbmdl
QXN5bmMoRWRpdGluZ1JhbmdlQ2FsbGJhY2s6OmNyZWF0ZShbY29tcGxldGlvbkhhbmRsZXJdKGNv
bnN0IEVkaXRpbmdSYW5nZSYgZWRpdGluZ1JhbmdlUmVzdWx0LCBDYWxsYmFja0Jhc2U6OkVycm9y
IGVycm9yKSB7CisgICAgX2RhdGEtPl9wYWdlLT5nZXRNYXJrZWRSYW5nZUFzeW5jKFtjb21wbGV0
aW9uSGFuZGxlcl0oY29uc3QgRWRpdGluZ1JhbmdlJiBlZGl0aW5nUmFuZ2VSZXN1bHQsIENhbGxi
YWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKICAgICAgICAgdm9pZCAoXmNvbXBsZXRpb25IYW5kbGVy
QmxvY2spKEJPT0wpID0gKHZvaWQgKF4pKEJPT0wpKWNvbXBsZXRpb25IYW5kbGVyLmdldCgpOwog
ICAgICAgICBpZiAoZXJyb3IgIT0gQ2FsbGJhY2tCYXNlOjpFcnJvcjo6Tm9uZSkgewogICAgICAg
ICAgICAgTE9HKFRleHRJbnB1dCwgIiAgICAuLi5oYXNNYXJrZWRUZXh0IGZhaWxlZC4iKTsKQEAg
LTE1MTYsNyArMTUxNiw3IEBAIC0gKHZvaWQpaGFzTWFya2VkVGV4dFdpdGhDb21wbGV0aW9uSGFu
ZGwKICAgICAgICAgQk9PTCBoYXNNYXJrZWRUZXh0ID0gZWRpdGluZ1JhbmdlUmVzdWx0LmxvY2F0
aW9uICE9IG5vdEZvdW5kOwogICAgICAgICBMT0coVGV4dElucHV0LCAiICAgIC0+IGhhc01hcmtl
ZFRleHQgcmV0dXJuZWQgJXUiLCBoYXNNYXJrZWRUZXh0KTsKICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXJCbG9jayhoYXNNYXJrZWRUZXh0KTsKLSAgICB9KSk7CisgICAgfSk7CiB9CiAKIC0gKHZv
aWQpYXR0cmlidXRlZFN1YnN0cmluZ0ZvclByb3Bvc2VkUmFuZ2U6KE5TUmFuZ2UpbnNSYW5nZSBj
b21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJTdHJpbmcs
IE5TUmFuZ2UgYWN0dWFsUmFuZ2UpKWNvbXBsZXRpb25IYW5kbGVyUHRyCkBAIC0xNTU0LDcgKzE1
NTQsNyBAQCAtICh2b2lkKWZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlOihOU1JhCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBfZGF0YS0+X3BhZ2UtPmZpcnN0UmVjdEZvckNoYXJhY3Rl
clJhbmdlQXN5bmModGhlUmFuZ2UsIFJlY3RGb3JDaGFyYWN0ZXJSYW5nZUNhbGxiYWNrOjpjcmVh
dGUoW3NlbGYsIGNvbXBsZXRpb25IYW5kbGVyXShjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBF
ZGl0aW5nUmFuZ2UmIGFjdHVhbFJhbmdlLCBDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9yKSB7Cisg
ICAgX2RhdGEtPl9wYWdlLT5maXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZUFzeW5jKHRoZVJhbmdl
LCBbc2VsZiwgY29tcGxldGlvbkhhbmRsZXJdKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEVk
aXRpbmdSYW5nZSYgYWN0dWFsUmFuZ2UsIENhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKICAg
ICAgICAgdm9pZCAoXmNvbXBsZXRpb25IYW5kbGVyQmxvY2spKE5TUmVjdCwgTlNSYW5nZSkgPSAo
dm9pZCAoXikoTlNSZWN0LCBOU1JhbmdlKSljb21wbGV0aW9uSGFuZGxlci5nZXQoKTsKICAgICAg
ICAgaWYgKGVycm9yICE9IENhbGxiYWNrQmFzZTo6RXJyb3I6Ok5vbmUpIHsKICAgICAgICAgICAg
IExPRyhUZXh0SW5wdXQsICIgICAgLi4uZmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UgZmFpbGVk
LiIpOwpAQCAtMTU2Nyw3ICsxNTY3LDcgQEAgLSAodm9pZClmaXJzdFJlY3RGb3JDaGFyYWN0ZXJS
YW5nZTooTlNSYQogCiAgICAgICAgIExPRyhUZXh0SW5wdXQsICIgICAgLT4gZmlyc3RSZWN0Rm9y
Q2hhcmFjdGVyUmFuZ2UgcmV0dXJuZWQgKCVmLCAlZiwgJWYsICVmKSIsIHJlc3VsdFJlY3Qub3Jp
Z2luLngsIHJlc3VsdFJlY3Qub3JpZ2luLnksIHJlc3VsdFJlY3Quc2l6ZS53aWR0aCwgcmVzdWx0
UmVjdC5zaXplLmhlaWdodCk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyQmxvY2socmVzdWx0
UmVjdCwgYWN0dWFsUmFuZ2UpOwotICAgIH0pKTsKKyAgICB9KTsKIH0KIAogLSAodm9pZCljaGFy
YWN0ZXJJbmRleEZvclBvaW50OihOU1BvaW50KXRoZVBvaW50IGNvbXBsZXRpb25IYW5kbGVyOih2
b2lkKF4pKE5TVUludGVnZXIpKWNvbXBsZXRpb25IYW5kbGVyUHRyCkBAIC0xNTg1LDcgKzE1ODUs
NyBAQCAtICh2b2lkKWNoYXJhY3RlckluZGV4Rm9yUG9pbnQ6KE5TUG9pbnQpCiAjcHJhZ21hIGNs
YW5nIGRpYWdub3N0aWMgcG9wCiAgICAgdGhlUG9pbnQgPSBbc2VsZiBjb252ZXJ0UG9pbnQ6dGhl
UG9pbnQgZnJvbVZpZXc6bmlsXTsgIC8vIHRoZSBwb2ludCBpcyByZWxhdGl2ZSB0byB0aGUgbWFp
biBmcmFtZQogCi0gICAgX2RhdGEtPl9wYWdlLT5jaGFyYWN0ZXJJbmRleEZvclBvaW50QXN5bmMo
SW50UG9pbnQodGhlUG9pbnQpLCBVbnNpZ25lZENhbGxiYWNrOjpjcmVhdGUoW2NvbXBsZXRpb25I
YW5kbGVyXSh1aW50NjRfdCByZXN1bHQsIENhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKKyAg
ICBfZGF0YS0+X3BhZ2UtPmNoYXJhY3RlckluZGV4Rm9yUG9pbnRBc3luYyhJbnRQb2ludCh0aGVQ
b2ludCksIFtjb21wbGV0aW9uSGFuZGxlcl0odWludDY0X3QgcmVzdWx0LCBDYWxsYmFja0Jhc2U6
OkVycm9yIGVycm9yKSB7CiAgICAgICAgIHZvaWQgKF5jb21wbGV0aW9uSGFuZGxlckJsb2NrKShO
U1VJbnRlZ2VyKSA9ICh2b2lkICheKShOU1VJbnRlZ2VyKSljb21wbGV0aW9uSGFuZGxlci5nZXQo
KTsKICAgICAgICAgaWYgKGVycm9yICE9IENhbGxiYWNrQmFzZTo6RXJyb3I6Ok5vbmUpIHsKICAg
ICAgICAgICAgIExPRyhUZXh0SW5wdXQsICIgICAgLi4uY2hhcmFjdGVySW5kZXhGb3JQb2ludCBm
YWlsZWQuIik7CkBAIC0xNTk2LDcgKzE1OTYsNyBAQCAtICh2b2lkKWNoYXJhY3RlckluZGV4Rm9y
UG9pbnQ6KE5TUG9pbnQpCiAgICAgICAgICAgICByZXN1bHQgPSBOU05vdEZvdW5kOwogICAgICAg
ICBMT0coVGV4dElucHV0LCAiICAgIC0+IGNoYXJhY3RlckluZGV4Rm9yUG9pbnQgcmV0dXJuZWQg
JWx1IiwgcmVzdWx0KTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXJCbG9jayhyZXN1bHQpOwot
ICAgIH0pKTsKKyAgICB9KTsKIH0KIAogLSAoTlNUZXh0SW5wdXRDb250ZXh0ICopaW5wdXRDb250
ZXh0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9XZWJQbHVnaW5TaXRl
RGF0YU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Q
bHVnaW5zL1dlYlBsdWdpblNpdGVEYXRhTWFuYWdlci5jcHAJKHJldmlzaW9uIDE3MDAwOCkKKysr
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1dlYlBsdWdpblNpdGVEYXRhTWFuYWdl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OCw5ICsxNjgsOSBAQCB2b2lkIFdlYlBsdWdpblNp
dGVEYXRhTWFuYWdlcjo6ZGlkR2V0U2l0CiAgICAgY2FsbGJhY2stPnBlcmZvcm1DYWxsYmFja1dp
dGhSZXR1cm5WYWx1ZShBUEk6OkFycmF5OjpjcmVhdGVTdHJpbmdBcnJheShzaXRlcykuZ2V0KCkp
OwogfQogCi12b2lkIFdlYlBsdWdpblNpdGVEYXRhTWFuYWdlcjo6Y2xlYXJTaXRlRGF0YShBUEk6
OkFycmF5KiBzaXRlcywgdWludDY0X3QgZmxhZ3MsIHVpbnQ2NF90IG1heEFnZUluU2Vjb25kcywg
UGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHBycENhbGxiYWNrKQordm9pZCBXZWJQbHVnaW5TaXRl
RGF0YU1hbmFnZXI6OmNsZWFyU2l0ZURhdGEoQVBJOjpBcnJheSogc2l0ZXMsIHVpbnQ2NF90IGZs
YWdzLCB1aW50NjRfdCBtYXhBZ2VJblNlY29uZHMsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoQ2FsbGJh
Y2tCYXNlOjpFcnJvcik+IGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgUmVmUHRyPFZvaWRDYWxs
YmFjaz4gY2FsbGJhY2sgPSBwcnBDYWxsYmFjazsKKyAgICBSZWZQdHI8Vm9pZENhbGxiYWNrPiBj
YWxsYmFjayA9IFZvaWRDYWxsYmFjazo6Y3JlYXRlKHN0ZDo6bW92ZShjYWxsYmFja0Z1bmN0aW9u
KSk7CiAgICAgaWYgKCFtX3dlYkNvbnRleHQpIHsKICAgICAgICAgLy8gRklYTUU6IElmIHRoZSBj
b250ZXh0IGlzIGludmFsaWQgd2Ugc2hvdWxkIG5vdCBjYWxsIHRoZSBjYWxsYmFjay4gSXQnZCBi
ZSBiZXR0ZXIgdG8ganVzdCByZXR1cm4gZmFsc2UgZnJvbSBjbGVhclNpdGVEYXRhLgogICAgICAg
ICBjYWxsYmFjay0+aW52YWxpZGF0ZShDYWxsYmFja0Jhc2U6OkVycm9yOjpPd25lcldhc0ludmFs
aWRhdGVkKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1dlYlBsdWdp
blNpdGVEYXRhTWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9QbHVnaW5zL1dlYlBsdWdpblNpdGVEYXRhTWFuYWdlci5oCShyZXZpc2lvbiAxNzAwMDgpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9XZWJQbHVnaW5TaXRlRGF0YU1hbmFn
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBn
ZXRTaXRlc1dpdGhEYXRhKHN0ZDo6ZnVuY3Rpb248dm9pZCAoQVBJOjpBcnJheSosIENhbGxiYWNr
QmFzZTo6RXJyb3IpPik7CiAgICAgdm9pZCBkaWRHZXRTaXRlc1dpdGhEYXRhKGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBzaXRlcywgdWludDY0X3QgY2FsbGJhY2tJRCk7CiAKLSAgICB2b2lkIGNsZWFy
U2l0ZURhdGEoQVBJOjpBcnJheSogc2l0ZXMsIHVpbnQ2NF90IGZsYWdzLCB1aW50NjRfdCBtYXhB
Z2VJblNlY29uZHMsIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPik7CisgICAgdm9pZCBjbGVhclNp
dGVEYXRhKEFQSTo6QXJyYXkqIHNpdGVzLCB1aW50NjRfdCBmbGFncywgdWludDY0X3QgbWF4QWdl
SW5TZWNvbmRzLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKENhbGxiYWNrQmFzZTo6RXJyb3IpPik7CiAg
ICAgdm9pZCBkaWRDbGVhclNpdGVEYXRhKHVpbnQ2NF90IGNhbGxiYWNrSUQpOwogCiAgICAgdm9p
ZCBkaWRHZXRTaXRlc1dpdGhEYXRhRm9yU2luZ2xlUGx1Z2luKGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBzaXRlcywgdWludDY0X3QgY2FsbGJhY2tJRCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQkocmV2
aXNpb24gMTcwMDA4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRW
aWV3SW50ZXJhY3Rpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTEyMTAsMTQgKzEyMTAsMTQgQEAg
LSAodm9pZClfc2hvd0RpY3Rpb25hcnk6KE5TU3RyaW5nICopdGV4dAogCiAtICh2b2lkKV9kZWZp
bmU6KGlkKXNlbmRlcgogewotICAgIF9wYWdlLT5nZXRTZWxlY3Rpb25PckNvbnRlbnRzQXNTdHJp
bmcoU3RyaW5nQ2FsbGJhY2s6OmNyZWF0ZShbc2VsZl0oY29uc3QgU3RyaW5nJiBzdHJpbmcsIENh
bGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKKyAgICBfcGFnZS0+Z2V0U2VsZWN0aW9uT3JDb250
ZW50c0FzU3RyaW5nKFtzZWxmXShjb25zdCBTdHJpbmcmIHN0cmluZywgQ2FsbGJhY2tCYXNlOjpF
cnJvciBlcnJvcikgewogICAgICAgICBpZiAoZXJyb3IgIT0gQ2FsbGJhY2tCYXNlOjpFcnJvcjo6
Tm9uZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKCFzdHJpbmcpCiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgW3NlbGYgX3Nob3dEaWN0aW9uYXJ5OnN0cmluZ107Ci0g
ICAgfSkpOworICAgIH0pOwogfQogCiAvLyBVSVdLSW50ZXJhY3Rpb25WaWV3UHJvdG9jb2wKQEAg
LTE0MzksMTEgKzE0MzksMTEgQEAgLSAodm9pZCljaGFuZ2VTZWxlY3Rpb25XaXRoR2VzdHVyZUF0
OihDRwogLSAodm9pZCljaGFuZ2VTZWxlY3Rpb25XaXRoVG91Y2hBdDooQ0dQb2ludClwb2ludCB3
aXRoU2VsZWN0aW9uVG91Y2g6KFVJV0tTZWxlY3Rpb25Ub3VjaCl0b3VjaCBiYXNlSXNTdGFydDoo
Qk9PTCliYXNlSXNTdGFydAogewogICAgIF91c2luZ0dlc3R1cmVGb3JTZWxlY3Rpb24gPSBZRVM7
Ci0gICAgX3BhZ2UtPnVwZGF0ZVNlbGVjdGlvbldpdGhUb3VjaGVzKFdlYkNvcmU6OkludFBvaW50
KHBvaW50KSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHRvU2VsZWN0aW9uVG91Y2godG91Y2gpKSwg
YmFzZUlzU3RhcnQsIFRvdWNoZXNDYWxsYmFjazo6Y3JlYXRlKFtzZWxmLCB0b3VjaF0oY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCB1aW50MzJfdCB0b3VjaCwgQ2FsbGJhY2tCYXNlOjpF
cnJvciBlcnJvcikgeworICAgIF9wYWdlLT51cGRhdGVTZWxlY3Rpb25XaXRoVG91Y2hlcyhXZWJD
b3JlOjpJbnRQb2ludChwb2ludCksIHN0YXRpY19jYXN0PHVpbnQzMl90Pih0b1NlbGVjdGlvblRv
dWNoKHRvdWNoKSksIGJhc2VJc1N0YXJ0LCBbc2VsZiwgdG91Y2hdKGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50JiBwb2ludCwgdWludDMyX3QgdG91Y2gsIENhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3Ip
IHsKICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZFdpdGhUb3VjaChzZWxmLCBwb2ludCwgdG91Y2gs
IGVycm9yKTsKICAgICAgICAgaWYgKHRvdWNoICE9IFVJV0tTZWxlY3Rpb25Ub3VjaFN0YXJ0ZWQg
JiYgdG91Y2ggIT0gVUlXS1NlbGVjdGlvblRvdWNoTW92ZWQpCiAgICAgICAgICAgICBfdXNpbmdH
ZXN0dXJlRm9yU2VsZWN0aW9uID0gTk87Ci0gICAgfSkpOworICAgIH0pOwogfQogCiAtICh2b2lk
KWNoYW5nZVNlbGVjdGlvbldpdGhUb3VjaGVzRnJvbTooQ0dQb2ludClmcm9tIHRvOihDR1BvaW50
KXRvIHdpdGhHZXN0dXJlOihVSVdLR2VzdHVyZVR5cGUpZ2VzdHVyZVR5cGUgd2l0aFN0YXRlOihV
SUdlc3R1cmVSZWNvZ25pemVyU3RhdGUpZ2VzdHVyZVN0YXRlCkBAIC0xNDc2LDcgKzE0NzYsNyBA
QCAtICh2b2lkKXJlcXVlc3RBdXRvY29ycmVjdGlvblJlY3RzRm9yU3RyCiAgICAgfQogCiAgICAg
X2F1dG9jb3JyZWN0aW9uRGF0YS5hdXRvY29ycmVjdGlvbkhhbmRsZXIgPSBbY29tcGxldGlvbkhh
bmRsZXIgY29weV07Ci0gICAgX3BhZ2UtPnJlcXVlc3RBdXRvY29ycmVjdGlvbkRhdGEoaW5wdXQs
IEF1dG9jb3JyZWN0aW9uRGF0YUNhbGxiYWNrOjpjcmVhdGUoW3NlbGZdKGNvbnN0IFZlY3RvcjxG
bG9hdFJlY3Q+JiByZWN0cywgY29uc3QgU3RyaW5nJiBmb250TmFtZSwgZG91YmxlIGZvbnRTaXpl
LCB1aW50NjRfdCB0cmFpdHMsIENhbGxiYWNrQmFzZTo6RXJyb3IpIHsKKyAgICBfcGFnZS0+cmVx
dWVzdEF1dG9jb3JyZWN0aW9uRGF0YShpbnB1dCwgW3NlbGZdKGNvbnN0IFZlY3RvcjxGbG9hdFJl
Y3Q+JiByZWN0cywgY29uc3QgU3RyaW5nJiBmb250TmFtZSwgZG91YmxlIGZvbnRTaXplLCB1aW50
NjRfdCB0cmFpdHMsIENhbGxiYWNrQmFzZTo6RXJyb3IpIHsKICAgICAgICAgQ0dSZWN0IGZpcnN0
UmVjdCA9IENHUmVjdFplcm87CiAgICAgICAgIENHUmVjdCBsYXN0UmVjdCA9IENHUmVjdFplcm87
CiAgICAgICAgIGlmIChyZWN0cy5zaXplKCkpIHsKQEAgLTE0OTMsNyArMTQ5Myw3IEBAIC0gKHZv
aWQpcmVxdWVzdEF1dG9jb3JyZWN0aW9uUmVjdHNGb3JTdHIKICAgICAgICAgX2F1dG9jb3JyZWN0
aW9uRGF0YS5hdXRvY29ycmVjdGlvbkhhbmRsZXIocmVjdHMuc2l6ZSgpID8gW1dLQXV0b2NvcnJl
Y3Rpb25SZWN0cyBhdXRvY29ycmVjdGlvblJlY3RzV2l0aFJlY3RzOmZpcnN0UmVjdCBsYXN0UmVj
dDpsYXN0UmVjdF0gOiBuaWwpOwogICAgICAgICBbX2F1dG9jb3JyZWN0aW9uRGF0YS5hdXRvY29y
cmVjdGlvbkhhbmRsZXIgcmVsZWFzZV07CiAgICAgICAgIF9hdXRvY29ycmVjdGlvbkRhdGEuYXV0
b2NvcnJlY3Rpb25IYW5kbGVyID0gbmlsOwotICAgIH0pKTsKKyAgICB9KTsKIH0KIAogLSAoVVRG
MzJDaGFyKV9jaGFyYWN0ZXJCZWZvcmVDYXJldFNlbGVjdGlvbgpAQCAtMTUzOSwxMCArMTUzOSwx
MCBAQCAtICh2b2lkKXJlcXVlc3REaWN0YXRpb25Db250ZXh0Oih2b2lkICheCiB7CiAgICAgVUlX
S0RpY3RhdGlvbkNvbnRleHRIYW5kbGVyIGRpY3RhdGlvbkhhbmRsZXIgPSBbY29tcGxldGlvbkhh
bmRsZXIgY29weV07CiAKLSAgICBfcGFnZS0+cmVxdWVzdERpY3RhdGlvbkNvbnRleHQoRGljdGF0
aW9uQ29udGV4dENhbGxiYWNrOjpjcmVhdGUoW2RpY3RhdGlvbkhhbmRsZXJdKGNvbnN0IFN0cmlu
ZyYgc2VsZWN0ZWRUZXh0LCBjb25zdCBTdHJpbmcmIGJlZm9yZVRleHQsIGNvbnN0IFN0cmluZyYg
YWZ0ZXJUZXh0LCBDYWxsYmFja0Jhc2U6OkVycm9yKSB7CisgICAgX3BhZ2UtPnJlcXVlc3REaWN0
YXRpb25Db250ZXh0KFtkaWN0YXRpb25IYW5kbGVyXShjb25zdCBTdHJpbmcmIHNlbGVjdGVkVGV4
dCwgY29uc3QgU3RyaW5nJiBiZWZvcmVUZXh0LCBjb25zdCBTdHJpbmcmIGFmdGVyVGV4dCwgQ2Fs
bGJhY2tCYXNlOjpFcnJvcikgewogICAgICAgICBkaWN0YXRpb25IYW5kbGVyKHNlbGVjdGVkVGV4
dCwgYmVmb3JlVGV4dCwgYWZ0ZXJUZXh0KTsKICAgICAgICAgW2RpY3RhdGlvbkhhbmRsZXIgcmVs
ZWFzZV07Ci0gICAgfSkpOworICAgIH0pOwogfQogCiAvLyBUaGUgY29tcGxldGlvbiBoYW5kbGVy
IHNob3VsZCBwYXNzIHRoZSByZWN0IG9mIHRoZSBjb3JyZWN0aW9uIHRleHQgYWZ0ZXIgcmVwbGFj
aW5nIHRoZSBpbnB1dCB0ZXh0LCBvciBuaWwgaWYgdGhlIHJlcGxhY2VtZW50IGNvdWxkIG5vdCBi
ZSBwZXJmb3JtZWQuCkBAIC0xNTU2LDExICsxNTU2LDExIEBAIC0gKHZvaWQpYXBwbHlBdXRvY29y
cmVjdGlvbjooTlNTdHJpbmcgKikKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBfYXV0b2Nv
cnJlY3Rpb25EYXRhLmF1dG9jb3JyZWN0aW9uSGFuZGxlciA9IFtjb21wbGV0aW9uSGFuZGxlciBj
b3B5XTsKLSAgICBfcGFnZS0+YXBwbHlBdXRvY29ycmVjdGlvbihjb3JyZWN0aW9uLCBpbnB1dCwg
U3RyaW5nQ2FsbGJhY2s6OmNyZWF0ZShbc2VsZl0oY29uc3QgU3RyaW5nJiBzdHJpbmcsIENhbGxi
YWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKKyAgICBfcGFnZS0+YXBwbHlBdXRvY29ycmVjdGlvbihj
b3JyZWN0aW9uLCBpbnB1dCwgW3NlbGZdKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBDYWxsYmFja0Jh
c2U6OkVycm9yIGVycm9yKSB7CiAgICAgICAgIF9hdXRvY29ycmVjdGlvbkRhdGEuYXV0b2NvcnJl
Y3Rpb25IYW5kbGVyKCFzdHJpbmcuaXNOdWxsKCkgPyBbV0tBdXRvY29ycmVjdGlvblJlY3RzIGF1
dG9jb3JyZWN0aW9uUmVjdHNXaXRoUmVjdHM6X2F1dG9jb3JyZWN0aW9uRGF0YS50ZXh0Rmlyc3RS
ZWN0IGxhc3RSZWN0Ol9hdXRvY29ycmVjdGlvbkRhdGEudGV4dExhc3RSZWN0XSA6IG5pbCk7CiAg
ICAgICAgIFtfYXV0b2NvcnJlY3Rpb25EYXRhLmF1dG9jb3JyZWN0aW9uSGFuZGxlciByZWxlYXNl
XTsKICAgICAgICAgX2F1dG9jb3JyZWN0aW9uRGF0YS5hdXRvY29ycmVjdGlvbkhhbmRsZXIgPSBu
aWw7Ci0gICAgfSkpOworICAgIH0pOwogfQogCiAtICh2b2lkKXJlcXVlc3RBdXRvY29ycmVjdGlv
bkNvbnRleHRXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKFVJV0tBdXRvY29ycmVjdGlv
bkNvbnRleHQgKmF1dG9jb3JyZWN0aW9uQ29udGV4dCkpY29tcGxldGlvbkhhbmRsZXIKQEAgLTE1
NzksOSArMTU3OSw5IEBAIC0gKHZvaWQpcmVxdWVzdEF1dG9jb3JyZWN0aW9uQ29udGV4dFdpdGgK
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoW1dLQXV0b2NvcnJlY3Rpb25Db250ZXh0IGF1dG9j
b3JyZWN0aW9uQ29udGV4dFdpdGhEYXRhOmJlZm9yZVRleHQgbWFya2VkVGV4dDptYXJrZWRUZXh0
IHNlbGVjdGVkVGV4dDpzZWxlY3RlZFRleHQgYWZ0ZXJUZXh0OmFmdGVyVGV4dCBzZWxlY3RlZFJh
bmdlSW5NYXJrZWRUZXh0Ok5TTWFrZVJhbmdlKGxvY2F0aW9uLCBsZW5ndGgpXSk7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgX2F1dG9jb3JyZWN0aW9uRGF0YS5hdXRvY29ycmVjdGlvbkNvbnRleHRI
YW5kbGVyID0gW2NvbXBsZXRpb25IYW5kbGVyIGNvcHldOwotICAgICAgICBfcGFnZS0+cmVxdWVz
dEF1dG9jb3JyZWN0aW9uQ29udGV4dChBdXRvY29ycmVjdGlvbkNvbnRleHRDYWxsYmFjazo6Y3Jl
YXRlKFtzZWxmXShjb25zdCBTdHJpbmcmIGJlZm9yZVRleHQsIGNvbnN0IFN0cmluZyYgbWFya2Vk
VGV4dCwgY29uc3QgU3RyaW5nJiBzZWxlY3RlZFRleHQsIGNvbnN0IFN0cmluZyYgYWZ0ZXJUZXh0
LCB1aW50NjRfdCBsb2NhdGlvbiwgdWludDY0X3QgbGVuZ3RoLCBDYWxsYmFja0Jhc2U6OkVycm9y
KSB7CisgICAgICAgIF9wYWdlLT5yZXF1ZXN0QXV0b2NvcnJlY3Rpb25Db250ZXh0KFtzZWxmXShj
b25zdCBTdHJpbmcmIGJlZm9yZVRleHQsIGNvbnN0IFN0cmluZyYgbWFya2VkVGV4dCwgY29uc3Qg
U3RyaW5nJiBzZWxlY3RlZFRleHQsIGNvbnN0IFN0cmluZyYgYWZ0ZXJUZXh0LCB1aW50NjRfdCBs
b2NhdGlvbiwgdWludDY0X3QgbGVuZ3RoLCBDYWxsYmFja0Jhc2U6OkVycm9yKSB7CiAgICAgICAg
ICAgICBfYXV0b2NvcnJlY3Rpb25EYXRhLmF1dG9jb3JyZWN0aW9uQ29udGV4dEhhbmRsZXIoW1dL
QXV0b2NvcnJlY3Rpb25Db250ZXh0IGF1dG9jb3JyZWN0aW9uQ29udGV4dFdpdGhEYXRhOmJlZm9y
ZVRleHQgbWFya2VkVGV4dDptYXJrZWRUZXh0IHNlbGVjdGVkVGV4dDpzZWxlY3RlZFRleHQgYWZ0
ZXJUZXh0OmFmdGVyVGV4dCBzZWxlY3RlZFJhbmdlSW5NYXJrZWRUZXh0Ok5TTWFrZVJhbmdlKGxv
Y2F0aW9uLCBsZW5ndGgpXSk7Ci0gICAgICAgIH0pKTsKKyAgICAgICAgfSk7CiAgICAgfQogfQog
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlP
Uy5tbQkocmV2aXNpb24gMTcwMDA4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9X
ZWJQYWdlUHJveHlJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTMxNyw4ICszMTcsMTAgQEAgdm9p
ZCBXZWJQYWdlUHJveHk6OnNlbGVjdFdpdGhHZXN0dXJlKGNvbgogICAgIG1fcHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6U2VsZWN0V2l0aEdlc3R1cmUocG9pbnQsICh1aW50MzJfdCln
cmFudWxhcml0eSwgZ2VzdHVyZVR5cGUsIGdlc3R1cmVTdGF0ZSwgY2FsbGJhY2tJRCksIG1fcGFn
ZUlEKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnVwZGF0ZVNlbGVjdGlvbldpdGhUb3VjaGVz
KGNvbnN0IFdlYkNvcmU6OkludFBvaW50IHBvaW50LCB1aW50MzJfdCB0b3VjaGVzLCBib29sIGJh
c2VJc1N0YXJ0LCBQYXNzUmVmUHRyPFRvdWNoZXNDYWxsYmFjaz4gY2FsbGJhY2spCit2b2lkIFdl
YlBhZ2VQcm94eTo6dXBkYXRlU2VsZWN0aW9uV2l0aFRvdWNoZXMoY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQgcG9pbnQsIHVpbnQzMl90IHRvdWNoZXMsIGJvb2wgYmFzZUlzU3RhcnQsIHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCB1aW50MzJfdCwgQ2FsbGJhY2tC
YXNlOjpFcnJvcik+IGNhbGxiYWNrRnVuY3Rpb24pCiB7CisgICAgUmVmUHRyPFRvdWNoZXNDYWxs
YmFjaz4gY2FsbGJhY2sgPSBUb3VjaGVzQ2FsbGJhY2s6OmNyZWF0ZShzdGQ6Om1vdmUoY2FsbGJh
Y2tGdW5jdGlvbikpOworCiAgICAgaWYgKCFpc1ZhbGlkKCkpIHsKICAgICAgICAgY2FsbGJhY2st
PmludmFsaWRhdGUoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzM5LDggKzM0MSwxMCBAQCB2b2lk
IFdlYlBhZ2VQcm94eTo6cmVwbGFjZVNlbGVjdGVkVGV4dChjCiAgICAgbV9wcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpSZXBsYWNlU2VsZWN0ZWRUZXh0KG9sZFRleHQsIG5ld1RleHQp
LCBtX3BhZ2VJRCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpyZXF1ZXN0QXV0b2NvcnJlY3Rp
b25EYXRhKGNvbnN0IFN0cmluZyYgdGV4dEZvckF1dG9jb3JyZWN0aW9uLCBQYXNzUmVmUHRyPEF1
dG9jb3JyZWN0aW9uRGF0YUNhbGxiYWNrPiBjYWxsYmFjaykKK3ZvaWQgV2ViUGFnZVByb3h5Ojpy
ZXF1ZXN0QXV0b2NvcnJlY3Rpb25EYXRhKGNvbnN0IFN0cmluZyYgdGV4dEZvckF1dG9jb3JyZWN0
aW9uLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+
JiwgY29uc3QgU3RyaW5nJiwgZG91YmxlLCB1aW50NjRfdCwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+
IGNhbGxiYWNrRnVuY3Rpb24pCiB7CisgICAgUmVmUHRyPEF1dG9jb3JyZWN0aW9uRGF0YUNhbGxi
YWNrPiBjYWxsYmFjayA9IEF1dG9jb3JyZWN0aW9uRGF0YUNhbGxiYWNrOjpjcmVhdGUoc3RkOjpt
b3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKwogICAgIGlmICghaXNWYWxpZCgpKSB7CiAgICAgICAg
IGNhbGxiYWNrLT5pbnZhbGlkYXRlKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTM1MSw4ICszNTUs
MTAgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJlcXVlc3RBdXRvY29ycmVjdGlvbgogICAgIG1fcHJv
Y2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UmVxdWVzdEF1dG9jb3JyZWN0aW9uRGF0YSh0
ZXh0Rm9yQXV0b2NvcnJlY3Rpb24sIGNhbGxiYWNrSUQpLCBtX3BhZ2VJRCk7CiB9CiAKLXZvaWQg
V2ViUGFnZVByb3h5OjphcHBseUF1dG9jb3JyZWN0aW9uKGNvbnN0IFN0cmluZyYgY29ycmVjdGlv
biwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFRleHQsIFBhc3NSZWZQdHI8U3RyaW5nQ2FsbGJhY2s+
IGNhbGxiYWNrKQordm9pZCBXZWJQYWdlUHJveHk6OmFwcGx5QXV0b2NvcnJlY3Rpb24oY29uc3Qg
U3RyaW5nJiBjb3JyZWN0aW9uLCBjb25zdCBTdHJpbmcmIG9yaWdpbmFsVGV4dCwgc3RkOjpmdW5j
dGlvbjx2b2lkIChjb25zdCBTdHJpbmcmLCBDYWxsYmFja0Jhc2U6OkVycm9yKT4gY2FsbGJhY2tG
dW5jdGlvbikKIHsKKyAgICBSZWZQdHI8U3RyaW5nQ2FsbGJhY2s+IGNhbGxiYWNrID0gU3RyaW5n
Q2FsbGJhY2s6OmNyZWF0ZShzdGQ6Om1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOworCiAgICAgaWYg
KCFpc1ZhbGlkKCkpIHsKICAgICAgICAgY2FsbGJhY2stPmludmFsaWRhdGUoKTsKICAgICAgICAg
cmV0dXJuOwpAQCAtMzcwLDggKzM3NiwxMCBAQCBib29sIFdlYlBhZ2VQcm94eTo6YXBwbHlBdXRv
Y29ycmVjdGlvbihjCiAgICAgcmV0dXJuIGF1dG9jb3JyZWN0aW9uQXBwbGllZDsKIH0KIAotdm9p
ZCBXZWJQYWdlUHJveHk6OnJlcXVlc3REaWN0YXRpb25Db250ZXh0KFBhc3NSZWZQdHI8RGljdGF0
aW9uQ29udGV4dENhbGxiYWNrPiBjYWxsYmFjaykKK3ZvaWQgV2ViUGFnZVByb3h5OjpyZXF1ZXN0
RGljdGF0aW9uQ29udGV4dChzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmluZyYsIGNvbnN0
IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiBjYWxsYmFja0Z1
bmN0aW9uKQogeworICAgIFJlZlB0cjxEaWN0YXRpb25Db250ZXh0Q2FsbGJhY2s+IGNhbGxiYWNr
ID0gRGljdGF0aW9uQ29udGV4dENhbGxiYWNrOjpjcmVhdGUoc3RkOjptb3ZlKGNhbGxiYWNrRnVu
Y3Rpb24pKTsKKwogICAgIGlmICghaXNWYWxpZCgpKSB7CiAgICAgICAgIGNhbGxiYWNrLT5pbnZh
bGlkYXRlKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTM4Miw4ICszOTAsMTAgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OnJlcXVlc3REaWN0YXRpb25Db250ZQogICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNz
YWdlczo6V2ViUGFnZTo6UmVxdWVzdERpY3RhdGlvbkNvbnRleHQoY2FsbGJhY2tJRCksIG1fcGFn
ZUlEKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnJlcXVlc3RBdXRvY29ycmVjdGlvbkNvbnRl
eHQoUGFzc1JlZlB0cjxBdXRvY29ycmVjdGlvbkNvbnRleHRDYWxsYmFjaz4gY2FsbGJhY2spCit2
b2lkIFdlYlBhZ2VQcm94eTo6cmVxdWVzdEF1dG9jb3JyZWN0aW9uQ29udGV4dChzdGQ6OmZ1bmN0
aW9uPHZvaWQgKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNv
bnN0IFN0cmluZyYsIHVpbnQ2NF90LCB1aW50NjRfdCwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+IGNh
bGxiYWNrRnVuY3Rpb24pCiB7CisgICAgUmVmUHRyPEF1dG9jb3JyZWN0aW9uQ29udGV4dENhbGxi
YWNrPiBjYWxsYmFjayA9IEF1dG9jb3JyZWN0aW9uQ29udGV4dENhbGxiYWNrOjpjcmVhdGUoc3Rk
Ojptb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKKwogICAgIGlmICghaXNWYWxpZCgpKSB7CiAgICAg
ICAgIGNhbGxiYWNrLT5pbnZhbGlkYXRlKCk7CiAgICAgICAgIHJldHVybjsK
</data>
<flag name="review"
          id="257671"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>