<?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>163626</bug_id>
          
          <creation_ts>2016-10-18 15:26:31 -0700</creation_ts>
          <short_desc>Replace std::experimental::variant with WTF::Variant (or similar)</short_desc>
          <delta_ts>2016-10-18 19:46:30 -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>Web Template Framework</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1241644</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-10-18 15:26:31 -0700</bug_when>
    <thetext>std::experimental::variant looks ugly. Maybe we should have a WTF alias until it is in std namespace?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241735</commentid>
    <comment_count>1</comment_count>
      <attachid>292013</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-10-18 17:57:03 -0700</bug_when>
    <thetext>Created attachment 292013
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241737</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-18 17:59:12 -0700</bug_when>
    <thetext>Attachment 292013 did not pass style-queue:


ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:42:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:42:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:51:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:58:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:59:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:66:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Source/WTF/wtf/Variant.h:207:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:207:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:226:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:229:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:246:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:381:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:706:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1440:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1442:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1444:  __copy_construct_op_table is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1445:  __copy_assign_op_table is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1446:  __move_construct_op_table is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1447:  __move_assign_op_table is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1448:  __destroy_op_table is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1473:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1473:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1473:  __move_construct is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1473:  __other is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1477:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1482:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1482:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1482:  __copy_construct is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1482:  __other is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1486:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1539:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1544:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1546:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1551:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1553:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1558:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1561:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1571:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1579:  __x is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1592:  __x is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1601:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1601:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1630:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1655:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1672:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WTF/wtf/Variant.h:1672:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Variant.h:1678:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1714:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1717:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WTF/wtf/Variant.h:1717:  __temp is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1725:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1736:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1736:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1751:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1751:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1754:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1754:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1757:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1757:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1760:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1760:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1766:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1766:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1771:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1771:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1776:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1776:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1781:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1781:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1787:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1787:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1787:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1790:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1796:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1796:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1796:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1799:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1805:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1805:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1805:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1807:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WTF/wtf/Variant.h:1807:  Missing spaces around !=  [whitespace/operators] [3]
ERROR: Source/WTF/wtf/Variant.h:1812:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1812:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1812:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1814:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WTF/wtf/Variant.h:1814:  Missing spaces around !=  [whitespace/operators] [3]
ERROR: Source/WTF/wtf/Variant.h:1819:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1824:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1829:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1829:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1836:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1842:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1880:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1880:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1880:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1882:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1946:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1954:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1991:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1991:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1991:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1994:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Variant.h:1999:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1999:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1999:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:2004:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:2004:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:2004:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:2008:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Variant.h:2013:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:2013:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:2013:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:2018:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:2018:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:2018:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:2023:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:2023:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:2023:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:2027:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:2027:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:2029:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:2029:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:2030:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:2030:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:2031:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:2031:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:2032:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:2032:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:2033:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:2033:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:2034:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:2034:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:2048:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:2049:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:2055:  Missing space before {  [whitespace/braces] [5]
Total errors found: 136 in 20 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>1241749</commentid>
    <comment_count>3</comment_count>
      <attachid>292017</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-10-18 18:13:51 -0700</bug_when>
    <thetext>Created attachment 292017
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241752</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-18 18:14:58 -0700</bug_when>
    <thetext>Attachment 292017 did not pass style-queue:


ERROR: Source/WTF/wtf/Variant.h:207:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:207:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:226:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:229:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:246:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:381:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:706:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1440:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1442:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1444:  __copy_construct_op_table is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1445:  __copy_assign_op_table is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1446:  __move_construct_op_table is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1447:  __move_assign_op_table is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1448:  __destroy_op_table is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1473:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1473:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1473:  __move_construct is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1473:  __other is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1477:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1482:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1482:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1482:  __copy_construct is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1482:  __other is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1486:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1539:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1544:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1546:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1551:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1553:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1558:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1561:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1571:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1579:  __x is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1592:  __x is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1601:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1601:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1630:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1655:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1672:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WTF/wtf/Variant.h:1672:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Variant.h:1678:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1714:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1717:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WTF/wtf/Variant.h:1717:  __temp is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Variant.h:1725:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1736:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1736:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1751:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1751:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1754:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1754:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1757:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1757:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1760:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1760:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1766:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1766:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1771:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1771:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1776:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1776:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1781:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1781:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1787:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1787:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1787:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1790:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1796:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1796:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1796:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1799:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1805:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1805:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1805:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1807:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WTF/wtf/Variant.h:1807:  Missing spaces around !=  [whitespace/operators] [3]
ERROR: Source/WTF/wtf/Variant.h:1812:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1812:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1812:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1814:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WTF/wtf/Variant.h:1814:  Missing spaces around !=  [whitespace/operators] [3]
ERROR: Source/WTF/wtf/Variant.h:1819:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1824:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1829:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1829:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1836:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1842:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1880:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1880:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1880:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1882:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1946:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1954:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1991:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1991:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1991:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:1994:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Variant.h:1999:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:1999:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1999:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:2004:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:2004:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:2004:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:2008:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/Variant.h:2013:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:2013:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:2013:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:2018:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:2018:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:2018:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:2023:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Variant.h:2023:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:2023:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:2027:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:2027:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:2029:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:2029:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:2030:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:2030:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:2031:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:2031:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:2032:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:2032:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:2033:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:2033:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:2034:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:2034:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:2048:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:2049:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WTF/wtf/Variant.h:2055:  Missing space before {  [whitespace/braces] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:42:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:42:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:51:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:58:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:59:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:66:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
Total errors found: 136 in 22 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>1241784</commentid>
    <comment_count>5</comment_count>
      <attachid>292017</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-18 19:46:28 -0700</bug_when>
    <thetext>Comment on attachment 292017
Patch

Clearing flags on attachment: 292017

Committed r207517: &lt;http://trac.webkit.org/changeset/207517&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241785</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-18 19:46:30 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292013</attachid>
            <date>2016-10-18 17:57:03 -0700</date>
            <delta_ts>2016-10-18 18:13:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-163626-20161018175328.patch</filename>
            <type>text/plain</type>
            <size>51546</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA3NTA0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBA
CisyMDE2LTEwLTE4ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVw
bGFjZSBzdGQ6OmV4cGVyaW1lbnRhbDo6dmFyaWFudCB3aXRoIFdURjo6VmFyaWFudCAob3Igc2lt
aWxhcikKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
MzYyNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJl
bmFtZSBzdGQ6OmV4cGVyaW1lbnRhbDo6dmFyaWFudCwgVmFyaWFudC4gTW92ZSBoZWxwZXJzIGdl
dC9ob2xkc19hbHRlcm5hdGl2ZS9ldGMuCisgICAgICAgIGludG8gdGhlIFdURiBuYW1lc3BhY2Uu
CisKKyAgICAgICAgKiBkb21qaXQvRE9NSklUUmVnLmg6CisgICAgICAgIChKU0M6OkRPTUpJVDo6
UmVnOjpncHIpOgorICAgICAgICAoSlNDOjpET01KSVQ6OlJlZzo6ZnByKToKKyAgICAgICAgKEpT
Qzo6RE9NSklUOjpSZWc6OmpzVmFsdWVSZWdzKToKKwogMjAxNi0xMC0xOCAgS2VpdGggTWlsbGVy
ICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBHZXRCeVZhbCB0byBHZXRCeUlk
IGNvbnZlcnNpb24gaW4gdGhlIERGRyBpcyBpbmNvcnJlY3QgZm9yIGdldHRlcnMgd2l0aCBjb250
cm9sIGZsb3cKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kb21qaXQvRE9NSklUUmVnLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RvbWppdC9ET01KSVRSZWcuaAko
cmV2aXNpb24gMjA3NTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RvbWppdC9ET01KSVRS
ZWcuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsMjEgKzcxLDIxIEBAIHB1YmxpYzoKICAgICBHUFJS
ZWcgZ3ByKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0dQUigpKTsKLSAgICAgICAg
cmV0dXJuIHN0ZDo6ZXhwZXJpbWVudGFsOjpnZXQ8R1BSUmVnPihtX3ZhcmlhbnQpOworICAgICAg
ICByZXR1cm4gV1RGOjpnZXQ8R1BSUmVnPihtX3ZhcmlhbnQpOwogICAgIH0KICAgICBGUFJSZWcg
ZnByKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0ZQUigpKTsKLSAgICAgICAgcmV0
dXJuIHN0ZDo6ZXhwZXJpbWVudGFsOjpnZXQ8RlBSUmVnPihtX3ZhcmlhbnQpOworICAgICAgICBy
ZXR1cm4gV1RGOjpnZXQ8RlBSUmVnPihtX3ZhcmlhbnQpOwogICAgIH0KICAgICBKU1ZhbHVlUmVn
cyBqc1ZhbHVlUmVncygpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaXNKU1ZhbHVlUmVn
cygpKTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6ZXhwZXJpbWVudGFsOjpnZXQ8SlNWYWx1ZVJlZ3M+
KG1fdmFyaWFudCk7CisgICAgICAgIHJldHVybiBXVEY6OmdldDxKU1ZhbHVlUmVncz4obV92YXJp
YW50KTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgc3RkOjpleHBlcmltZW50YWw6OnZhcmlhbnQ8
R1BSUmVnLCBGUFJSZWcsIEpTVmFsdWVSZWdzPiBtX3ZhcmlhbnQ7CisgICAgVmFyaWFudDxHUFJS
ZWcsIEZQUlJlZywgSlNWYWx1ZVJlZ3M+IG1fdmFyaWFudDsKIH07CiAKIH0gfQpJbmRleDogU291
cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIwNzUwNCkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMTYtMTAtMTggIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXBsYWNlIHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50IHdpdGggV1RGOjpW
YXJpYW50IChvciBzaW1pbGFyKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTYzNjI2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgUmVuYW1lIHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50LCBWYXJpYW50LiBN
b3ZlIGhlbHBlcnMgZ2V0L2hvbGRzX2FsdGVybmF0aXZlL2V0Yy4KKyAgICAgICAgaW50byB0aGUg
V1RGIG5hbWVzcGFjZS4KKworICAgICAgICAqIHd0Zi9Gb3J3YXJkLmg6CisgICAgICAgICogd3Rm
L1ZhcmlhbnQuaDoKKwogMjAxNi0xMC0xOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29t
PgogCiAgICAgICAgIFdURiBzaG91bGQgbWFrZSBpdCBlYXNpZXIgdG8gY3JlYXRlIHRocmVhZHMg
dGhhdCBkaWUgYXV0b21hdGljYWxseSBhZnRlciBpbmFjdGl2aXR5CkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9Gb3J3YXJkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRm9yd2FyZC5oCShy
ZXZpc2lvbiAyMDc1MDQpCisrKyBTb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDYgKzM0LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgUmVmOwogdGVt
cGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgUmVmUHRyOwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xh
c3MgU3RyaW5nQnVmZmVyOwogCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBjbGFzcyBWYXJpYW50
OwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBP
dmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4gY2xhc3MgVmVjdG9yOwogCiBjbGFz
cyBBdG9taWNTdHJpbmc7CkBAIC01MSwxOCArNTIsNiBAQCBjbGFzcyBUZXh0UG9zaXRpb247CiAK
IH0KIAotbmFtZXNwYWNlIHN0ZCB7Ci1uYW1lc3BhY2UgZXhwZXJpbWVudGFsIHsKLQotdGVtcGxh
dGU8dHlwZW5hbWUuLi4gVD4gY2xhc3MgdmFyaWFudDsKLQotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZS4uLiBUeXBlcz4KLXVzaW5nIHZhcmlhbnQgPSBzdGQ6OmV4cGVyaW1lbnRhbDo6dmFyaWFudDxU
eXBlcy4uLj47Ci0KLX0KLQogdXNpbmcgV1RGOjpBdG9taWNTdHJpbmc7CiB1c2luZyBXVEY6OkF0
b21pY1N0cmluZ0ltcGw7CiB1c2luZyBXVEY6OkJpbmFyeVNlbWFwaG9yZTsKQEAgLTg0LDQgKzcz
LDUgQEAgdXNpbmcgV1RGOjpTdHJpbmdCdWlsZGVyOwogdXNpbmcgV1RGOjpTdHJpbmdJbXBsOwog
dXNpbmcgV1RGOjpTdHJpbmdWaWV3OwogdXNpbmcgV1RGOjpUZXh0UG9zaXRpb247Cit1c2luZyBX
VEY6OlZhcmlhbnQ7CiB1c2luZyBXVEY6OlZlY3RvcjsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1Zh
cmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9WYXJpYW50LmgJKHJldmlzaW9u
IDIwNzUwNCkKKysrIFNvdXJjZS9XVEYvd3RmL1ZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NTksOCArNTksNyBAQAogCiAjaWYgIUNPTVBJTEVSKENMQU5HKSB8fCBXVEZfQ1BQX1NURF9WRVIg
Pj0gMTQKIAotbmFtZXNwYWNlIHN0ZCB7Ci1uYW1lc3BhY2UgZXhwZXJpbWVudGFsIHsKK25hbWVz
cGFjZSBXVEYgewogCiAjaWYgQ09NUElMRVJfU1VQUE9SVFMoRVhDRVBUSU9OUykKICNkZWZpbmUg
X19USFJPV19FWENFUFRJT04oX19leGNlcHRpb24pIHRocm93IF9fZXhjZXB0aW9uOwpAQCAtMTY1
LDcgKzE2NCw3IEBAIHN0cnVjdCBfX25leHRfaW5kZXh7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSAuLi4gX1R5cGVzPgotY2xhc3MgdmFyaWFudDsKK2NsYXNzIFZhcmlhbnQ7CiAKIHRlbXBsYXRl
PHR5cGVuYW1lPgogc3RydWN0IHZhcmlhbnRfc2l6ZTsKQEAgLTE4MCw3ICsxNzksNyBAQCB0ZW1w
bGF0ZSA8dHlwZW5hbWUgX1R5cGU+CiBzdHJ1Y3QgdmFyaWFudF9zaXplPGNvbnN0IHZvbGF0aWxl
IF9UeXBlPiA6IHZhcmlhbnRfc2l6ZTxfVHlwZT4ge307CiAKIHRlbXBsYXRlIDx0eXBlbmFtZS4u
LiBfVHlwZXM+Ci1zdHJ1Y3QgdmFyaWFudF9zaXplPHZhcmlhbnQ8X1R5cGVzLi4uPj4KK3N0cnVj
dCB2YXJpYW50X3NpemU8VmFyaWFudDxfVHlwZXMuLi4+PgogICAgIDogc3RkOjppbnRlZ3JhbF9j
b25zdGFudDxzaXplX3QsIHNpemVvZi4uLihfVHlwZXMpPiB7fTsKIAogdGVtcGxhdGU8c2l6ZV90
IF9JbmRleCx0eXBlbmFtZSBfVHlwZT4KQEAgLTIwNSw1MCArMjA0LDUwIEBAIHN0cnVjdCB2YXJp
YW50X2FsdGVybmF0aXZlPF9JbmRleCwgdm9sYXQKIH07CiAKIHRlbXBsYXRlPHNpemVfdCBfSW5k
ZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCB2YXJpYW50X2FsdGVybmF0aXZlPF9JbmRl
eCx2YXJpYW50PF9UeXBlcy4uLj4+eworc3RydWN0IHZhcmlhbnRfYWx0ZXJuYXRpdmU8X0luZGV4
LFZhcmlhbnQ8X1R5cGVzLi4uPj57CiAgICAgdXNpbmcgdHlwZT10eXBlbmFtZSBfX2luZGV4ZWRf
dHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlOwogfTsKIAogY29uc3RleHByIHNpemVfdCB2
YXJpYW50X25wb3M9LTE7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBf
VHlwZXM+Ci1jb25zdGV4cHIgX1R5cGUmIGdldCh2YXJpYW50PF9UeXBlcy4uLj4mKTsKK2NvbnN0
ZXhwciBfVHlwZSYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYpOwogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIF9UeXBlIGNvbnN0JiBnZXQo
dmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0Jik7Citjb25zdGV4cHIgX1R5cGUgY29uc3QmIGdldChW
YXJpYW50PF9UeXBlcy4uLj4gY29uc3QmKTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlw
ZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBfVHlwZSYmIGdldCh2YXJpYW50PF9UeXBlcy4u
Lj4mJik7Citjb25zdGV4cHIgX1R5cGUmJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+JiYpOwogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIGNv
bnN0IF9UeXBlJiYgZ2V0KHZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYmKTsKK2NvbnN0ZXhwciBj
b25zdCBfVHlwZSYmIGdldChWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmJik7CiAKIHRlbXBsYXRl
PHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciB0eXBlbmFt
ZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlJiBnZXQodmFyaWFudDxf
VHlwZXMuLi4+Jik7Citjb25zdGV4cHIgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9U
eXBlcy4uLj46Ol9fdHlwZSYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYpOwogCiB0ZW1wbGF0ZTxw
dHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgdHlwZW5hbWUg
X19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSYmIGdldCh2YXJpYW50PF9U
eXBlcy4uLj4mJik7Citjb25zdGV4cHIgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9U
eXBlcy4uLj46Ol9fdHlwZSYmIGdldChWYXJpYW50PF9UeXBlcy4uLj4mJik7CiAKIHRlbXBsYXRl
PHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KIGNvbnN0ZXhwciB0eXBlbmFt
ZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlIGNvbnN0JiBnZXQoCi0g
ICAgdmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0Jik7CisgICAgVmFyaWFudDxfVHlwZXMuLi4+IGNv
bnN0Jik7CiAKIHRlbXBsYXRlIDxwdHJkaWZmX3QgX0luZGV4LCB0eXBlbmFtZS4uLiBfVHlwZXM+
CiBjb25zdGV4cHIgY29uc3QgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LCBfVHlwZXMu
Li4+OjpfX3R5cGUgJiYKLWdldCh2YXJpYW50PF9UeXBlcy4uLj4gY29uc3QgJiYpOworZ2V0KFZh
cmlhbnQ8X1R5cGVzLi4uPiBjb25zdCAmJik7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5
cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90PF9UeXBlPiBn
ZXRfaWYodmFyaWFudDxfVHlwZXMuLi4+Jik7Citjb25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90
PF9UeXBlPiBnZXRfaWYoVmFyaWFudDxfVHlwZXMuLi4+Jik7CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90
PF9UeXBlIGNvbnN0PiBnZXRfaWYodmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0Jik7Citjb25zdGV4
cHIgc3RkOjphZGRfcG9pbnRlcl90PF9UeXBlIGNvbnN0PiBnZXRfaWYoVmFyaWFudDxfVHlwZXMu
Li4+IGNvbnN0Jik7CiAKIHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9U
eXBlcz4KLWNvbnN0ZXhwciBzdGQ6OmFkZF9wb2ludGVyX3Q8dHlwZW5hbWUgX19pbmRleGVkX3R5
cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZT4gZ2V0X2lmKHZhcmlhbnQ8X1R5cGVzLi4uPiYp
OworY29uc3RleHByIHN0ZDo6YWRkX3BvaW50ZXJfdDx0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxf
SW5kZXgsX1R5cGVzLi4uPjo6X190eXBlPiBnZXRfaWYoVmFyaWFudDxfVHlwZXMuLi4+Jik7CiAK
IHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KIGNvbnN0ZXhw
ciBzdGQ6OmFkZF9wb2ludGVyX3Q8dHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBl
cy4uLj46Ol9fdHlwZSBjb25zdD4gZ2V0X2lmKAotICAgIHZhcmlhbnQ8X1R5cGVzLi4uPiBjb25z
dCYpOworICAgIFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYpOwogCiB0ZW1wbGF0ZTxwdHJkaWZm
X3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+CiBzdHJ1Y3QgX192YXJpYW50X2FjY2Vzc29y
OwpAQCAtMzc5LDcgKzM3OCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50Pgogc3RydWN0
IF9fYW55X2JhY2t1cF9zdG9yYWdlX3JlcXVpcmVkOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSAuLi4g
X1R5cGVzPgotc3RydWN0IF9fYW55X2JhY2t1cF9zdG9yYWdlX3JlcXVpcmVkPHZhcmlhbnQ8X1R5
cGVzLi4uPiA+eworc3RydWN0IF9fYW55X2JhY2t1cF9zdG9yYWdlX3JlcXVpcmVkPFZhcmlhbnQ8
X1R5cGVzLi4uPiA+ewogICAgIHN0YXRpYyBjb25zdCBib29sIF9fdmFsdWU9CiAgICAgICAgIF9f
YW55X2JhY2t1cF9zdG9yYWdlX3JlcXVpcmVkX2ltcGw8MCxzaXplb2YuLi4oX1R5cGVzKSxfVHlw
ZXMuLi4+OjpfX3ZhbHVlOwogfTsKQEAgLTcwNCw3ICs3MDMsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVmFyaWFudD4KIHN0cnVjdCBfX3ZhcmlhbnRfaW5kaWNlczsKIAogdGVtcGxhdGU8dHlwZW5h
bWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX3ZhcmlhbnRfaW5kaWNlczx2YXJpYW50PF9UeXBlcy4u
Lj4+eworc3RydWN0IF9fdmFyaWFudF9pbmRpY2VzPFZhcmlhbnQ8X1R5cGVzLi4uPj57CiAgICAg
dHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfaW5kaWNlczxfVHlwZXMuLi4+OjpfX3R5cGUgX190eXBl
OwogfTsKIApAQCAtMTQzNiwxNyArMTQzNSwxNyBAQCBfX25vZXhjZXB0X3ZhcmlhbnRfc3dhcF9p
bXBsPF9fYWxsX3N3YXBwCiB7fTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNs
YXNzIHZhcmlhbnQ6CitjbGFzcyBWYXJpYW50OgogICAgICAgICBwcml2YXRlIF9fdmFyaWFudF9i
YXNlPAotICAgIHZhcmlhbnQ8X1R5cGVzLi4uPixfX2FsbF90cml2aWFsbHlfZGVzdHJ1Y3RpYmxl
PF9UeXBlcy4uLj46Ol9fdmFsdWU+CisgICAgVmFyaWFudDxfVHlwZXMuLi4+LF9fYWxsX3RyaXZp
YWxseV9kZXN0cnVjdGlibGU8X1R5cGVzLi4uPjo6X192YWx1ZT4KIHsKLSAgICB0eXBlZGVmIF9f
dmFyaWFudF9iYXNlPHZhcmlhbnQ8X1R5cGVzLi4uPixfX2FsbF90cml2aWFsbHlfZGVzdHJ1Y3Rp
YmxlPF9UeXBlcy4uLj46Ol9fdmFsdWU+IF9fYmFzZV90eXBlOworICAgIHR5cGVkZWYgX192YXJp
YW50X2Jhc2U8VmFyaWFudDxfVHlwZXMuLi4+LF9fYWxsX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8
X1R5cGVzLi4uPjo6X192YWx1ZT4gX19iYXNlX3R5cGU7CiAgICAgZnJpZW5kIF9fYmFzZV90eXBl
OwotICAgIGZyaWVuZCBzdHJ1Y3QgX19jb3B5X2NvbnN0cnVjdF9vcF90YWJsZTx2YXJpYW50PjsK
LSAgICBmcmllbmQgc3RydWN0IF9fY29weV9hc3NpZ25fb3BfdGFibGU8dmFyaWFudD47Ci0gICAg
ZnJpZW5kIHN0cnVjdCBfX21vdmVfY29uc3RydWN0X29wX3RhYmxlPHZhcmlhbnQ+OwotICAgIGZy
aWVuZCBzdHJ1Y3QgX19tb3ZlX2Fzc2lnbl9vcF90YWJsZTx2YXJpYW50PjsKLSAgICBmcmllbmQg
c3RydWN0IF9fZGVzdHJveV9vcF90YWJsZTx2YXJpYW50PjsKKyAgICBmcmllbmQgc3RydWN0IF9f
Y29weV9jb25zdHJ1Y3Rfb3BfdGFibGU8VmFyaWFudD47CisgICAgZnJpZW5kIHN0cnVjdCBfX2Nv
cHlfYXNzaWduX29wX3RhYmxlPFZhcmlhbnQ+OworICAgIGZyaWVuZCBzdHJ1Y3QgX19tb3ZlX2Nv
bnN0cnVjdF9vcF90YWJsZTxWYXJpYW50PjsKKyAgICBmcmllbmQgc3RydWN0IF9fbW92ZV9hc3Np
Z25fb3BfdGFibGU8VmFyaWFudD47CisgICAgZnJpZW5kIHN0cnVjdCBfX2Rlc3Ryb3lfb3BfdGFi
bGU8VmFyaWFudD47CiAgICAgCiAgICAgdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFt
ZSAuLi4gX1R5cGVzMj4KICAgICBmcmllbmQgc3RydWN0IF9fdmFyaWFudF9hY2Nlc3NvcjsKQEAg
LTE0NjcsMjQgKzE0NjYsMjQgQEAgY2xhc3MgdmFyaWFudDoKICAgICB2b2lkIF9fZGVzdHJveV9z
ZWxmKCl7CiAgICAgICAgIGlmKHZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkKICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgX19kZXN0cm95X29wX3RhYmxlPHZhcmlhbnQ+OjpfX2FwcGx5W2lu
ZGV4KCldKHRoaXMpOworICAgICAgICBfX2Rlc3Ryb3lfb3BfdGFibGU8VmFyaWFudD46Ol9fYXBw
bHlbaW5kZXgoKV0odGhpcyk7CiAgICAgICAgIF9faW5kZXg9LTE7CiAgICAgfQogICAgIAotICAg
IHB0cmRpZmZfdCBfX21vdmVfY29uc3RydWN0KHZhcmlhbnQmIF9fb3RoZXIpeworICAgIHB0cmRp
ZmZfdCBfX21vdmVfY29uc3RydWN0KFZhcmlhbnQmIF9fb3RoZXIpewogICAgICAgICBwdHJkaWZm
X3QgY29uc3QgX19vdGhlcl9pbmRleD1fX290aGVyLmluZGV4KCk7CiAgICAgICAgIGlmKF9fb3Ro
ZXJfaW5kZXg9PS0xKQogICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBfX21vdmVfY29u
c3RydWN0X29wX3RhYmxlPHZhcmlhbnQ+OjpfX2FwcGx5W19fb3RoZXJfaW5kZXhdKHRoaXMsX19v
dGhlcik7CisgICAgICAgIF9fbW92ZV9jb25zdHJ1Y3Rfb3BfdGFibGU8VmFyaWFudD46Ol9fYXBw
bHlbX19vdGhlcl9pbmRleF0odGhpcyxfX290aGVyKTsKICAgICAgICAgX19vdGhlci5fX2Rlc3Ry
b3lfc2VsZigpOwogICAgICAgICByZXR1cm4gX19vdGhlcl9pbmRleDsKICAgICB9CiAKLSAgICBw
dHJkaWZmX3QgX19jb3B5X2NvbnN0cnVjdCh2YXJpYW50IGNvbnN0JiBfX290aGVyKXsKKyAgICBw
dHJkaWZmX3QgX19jb3B5X2NvbnN0cnVjdChWYXJpYW50IGNvbnN0JiBfX290aGVyKXsKICAgICAg
ICAgcHRyZGlmZl90IGNvbnN0IF9fb3RoZXJfaW5kZXg9X19vdGhlci5pbmRleCgpOwogICAgICAg
ICBpZihfX290aGVyX2luZGV4PT0tMSkKICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAg
X19jb3B5X2NvbnN0cnVjdF9vcF90YWJsZTx2YXJpYW50Pjo6X19hcHBseVtfX290aGVyX2luZGV4
XSh0aGlzLF9fb3RoZXIpOworICAgICAgICBfX2NvcHlfY29uc3RydWN0X29wX3RhYmxlPFZhcmlh
bnQ+OjpfX2FwcGx5W19fb3RoZXJfaW5kZXhdKHRoaXMsX19vdGhlcik7CiAgICAgICAgIHJldHVy
biBfX290aGVyX2luZGV4OwogICAgIH0KIApAQCAtMTUzMSwzNSArMTUzMCwzNSBAQCBjbGFzcyB2
YXJpYW50OgogICAgIHN0cnVjdCBfX3ByaXZhdGVfdHlwZXt9OwogCiBwdWJsaWM6Ci0gICAgY29u
c3RleHByIHZhcmlhbnQoKQorICAgIGNvbnN0ZXhwciBWYXJpYW50KCkKICAgICAgICAgX19OT0VY
Q0VQVF8obm9leGNlcHQodHlwZW5hbWUgX19pbmRleGVkX3R5cGU8MCxfVHlwZXMuLi4+OjpfX3R5
cGUoKSkpOgogICAgICAgICBfX3N0b3JhZ2UoaW5fcGxhY2U8MD4pLAogICAgICAgICBfX2luZGV4
KDApCiAgICAge30KIAotICAgIGNvbnN0ZXhwciB2YXJpYW50KHR5cGVuYW1lIHN0ZDo6Y29uZGl0
aW9uYWw8X19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlLHZhcmlhbnQs
X19wcml2YXRlX3R5cGU+Ojp0eXBlJiYgX19vdGhlcikKKyAgICBjb25zdGV4cHIgVmFyaWFudCh0
eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPF9fYWxsX21vdmVfY29uc3RydWN0aWJsZTxfVHlwZXMu
Li4+Ojp2YWx1ZSxWYXJpYW50LF9fcHJpdmF0ZV90eXBlPjo6dHlwZSYmIF9fb3RoZXIpCiAgICAg
X19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92YXJpYW50X21vdmVfY29uc3RydWN0PF9UeXBlcy4uLj46
OnZhbHVlKToKICAgICAgICAgX19pbmRleChfX21vdmVfY29uc3RydWN0KF9fb3RoZXIpKQogICAg
IHt9CiAKLSAgICBjb25zdGV4cHIgdmFyaWFudCh0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPCFf
X2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsdmFyaWFudCxfX3ByaXZh
dGVfdHlwZT46OnR5cGUmJiBfX290aGVyKT1kZWxldGU7CisgICAgY29uc3RleHByIFZhcmlhbnQo
dHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDwhX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBl
cy4uLj46OnZhbHVlLFZhcmlhbnQsX19wcml2YXRlX3R5cGU+Ojp0eXBlJiYgX19vdGhlcik9ZGVs
ZXRlOwogICAgIAotICAgIGNvbnN0ZXhwciB2YXJpYW50KHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9u
YWw8X19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlLHZhcmlhbnQsX19w
cml2YXRlX3R5cGU+Ojp0eXBlJiBfX290aGVyKQorICAgIGNvbnN0ZXhwciBWYXJpYW50KHR5cGVu
YW1lIHN0ZDo6Y29uZGl0aW9uYWw8X19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46
OnZhbHVlLFZhcmlhbnQsX19wcml2YXRlX3R5cGU+Ojp0eXBlJiBfX290aGVyKQogICAgIF9fTk9F
WENFUFRfKF9fbm9leGNlcHRfdmFyaWFudF9ub25fY29uc3RfY29weV9jb25zdHJ1Y3Q8X1R5cGVz
Li4uPjo6dmFsdWUpOgogICAgICAgICBfX2luZGV4KF9fY29weV9jb25zdHJ1Y3QoX19vdGhlcikp
CiAgICAge30KIAotICAgIGNvbnN0ZXhwciB2YXJpYW50KHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9u
YWw8IV9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSx2YXJpYW50LF9f
cHJpdmF0ZV90eXBlPjo6dHlwZSYgX19vdGhlcik9ZGVsZXRlOworICAgIGNvbnN0ZXhwciBWYXJp
YW50KHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8IV9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxf
VHlwZXMuLi4+Ojp2YWx1ZSxWYXJpYW50LF9fcHJpdmF0ZV90eXBlPjo6dHlwZSYgX19vdGhlcik9
ZGVsZXRlOwogCi0gICAgY29uc3RleHByIHZhcmlhbnQodHlwZW5hbWUgc3RkOjpjb25kaXRpb25h
bDxfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsdmFyaWFudCxfX3By
aXZhdGVfdHlwZT46OnR5cGUgY29uc3QmIF9fb3RoZXIpCisgICAgY29uc3RleHByIFZhcmlhbnQo
dHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDxfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8X1R5cGVz
Li4uPjo6dmFsdWUsVmFyaWFudCxfX3ByaXZhdGVfdHlwZT46OnR5cGUgY29uc3QmIF9fb3RoZXIp
CiAgICAgX19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92YXJpYW50X2NvbnN0X2NvcHlfY29uc3RydWN0
PF9UeXBlcy4uLj46OnZhbHVlKToKICAgICAgICAgX19pbmRleChfX2NvcHlfY29uc3RydWN0KF9f
b3RoZXIpKQogICAgIHt9CiAKLSAgICBjb25zdGV4cHIgdmFyaWFudCh0eXBlbmFtZSBzdGQ6OmNv
bmRpdGlvbmFsPCFfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsdmFy
aWFudCxfX3ByaXZhdGVfdHlwZT46OnR5cGUgY29uc3QmIF9fb3RoZXIpPWRlbGV0ZTsKKyAgICBj
b25zdGV4cHIgVmFyaWFudCh0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPCFfX2FsbF9jb3B5X2Nv
bnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsVmFyaWFudCxfX3ByaXZhdGVfdHlwZT46OnR5
cGUgY29uc3QmIF9fb3RoZXIpPWRlbGV0ZTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHlwZSx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgZXhwbGljaXQgY29uc3RleHByIHZhcmlhbnQo
aW5fcGxhY2VfdHlwZV90PF9UeXBlPixfQXJncyYmIC4uLiBfX2FyZ3MpOgorICAgIGV4cGxpY2l0
IGNvbnN0ZXhwciBWYXJpYW50KGluX3BsYWNlX3R5cGVfdDxfVHlwZT4sX0FyZ3MmJiAuLi4gX19h
cmdzKToKICAgICAgICAgX19zdG9yYWdlKAogICAgICAgICAgICAgaW5fcGxhY2U8X190eXBlX2lu
ZGV4PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWU+LAogICAgICAgICAgICAgc3RkOjpmb3J3YXJk
PF9BcmdzPihfX2FyZ3MpLi4uKSwKQEAgLTE1NjksNyArMTU2OCw3IEBAIHB1YmxpYzoKICAgICB9
CiAKICAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICBl
eHBsaWNpdCBjb25zdGV4cHIgdmFyaWFudChpbl9wbGFjZV9pbmRleF90PF9JbmRleD4sX0FyZ3Mm
JiAuLi4gX19hcmdzKToKKyAgICBleHBsaWNpdCBjb25zdGV4cHIgVmFyaWFudChpbl9wbGFjZV9p
bmRleF90PF9JbmRleD4sX0FyZ3MmJiAuLi4gX19hcmdzKToKICAgICAgICAgX19zdG9yYWdlKGlu
X3BsYWNlPF9JbmRleD4sc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKSwKICAgICAgICAg
X19pbmRleChfSW5kZXgpCiAgICAgewpAQCAtMTU3Nyw3ICsxNTc2LDcgQEAgcHVibGljOgogICAg
IH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLSAgICBjb25zdGV4cHIgdmFy
aWFudChfVHlwZSYmIF9feCk6CisgICAgY29uc3RleHByIFZhcmlhbnQoX1R5cGUmJiBfX3gpOgog
ICAgICAgICBfX3N0b3JhZ2UoCiAgICAgICAgICAgICBpbl9wbGFjZTwKICAgICAgICAgICAgIF9f
dHlwZV9pbmRleF90b19jb25zdHJ1Y3Q8X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZT4sCkBAIC0x
NTkwLDcgKzE1ODksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8CiAgICAgICAgICAgICAgICAgIChfX2NvbnN0cnVjdGlibGVfbWF0Y2hlczxzdGQ6Omlu
aXRpYWxpemVyX2xpc3Q8X1R5cGU+LF9UeXBlcy4uLj46Ol9fdHlwZTo6X19sZW5ndGg+MCkKICAg
ICAgICAgICAgICA+Ojp0eXBlPgotICAgIGNvbnN0ZXhwciB2YXJpYW50KHN0ZDo6aW5pdGlhbGl6
ZXJfbGlzdDxfVHlwZT4gX194KToKKyAgICBjb25zdGV4cHIgVmFyaWFudChzdGQ6OmluaXRpYWxp
emVyX2xpc3Q8X1R5cGU+IF9feCk6CiAgICAgICAgIF9fc3RvcmFnZSgKICAgICAgICAgICAgIGlu
X3BsYWNlPAogICAgICAgICAgICAgX190eXBlX2luZGV4X3RvX2NvbnN0cnVjdDxzdGQ6OmluaXRp
YWxpemVyX2xpc3Q8X1R5cGU+LF9UeXBlcy4uLj46Ol9fdmFsdWU+LApAQCAtMTU5OSw3ICsxNTk4
LDcgQEAgcHVibGljOgogICAgIHt9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+
Ci0gICAgdmFyaWFudCYgb3BlcmF0b3I9KF9UeXBlJiYgX194KXsKKyAgICBWYXJpYW50JiBvcGVy
YXRvcj0oX1R5cGUmJiBfX3gpewogICAgICAgICBjb25zdGV4cHIgc2l6ZV90IF9JbmRleD0KICAg
ICAgICAgICAgIF9fdHlwZV9pbmRleF90b19jb25zdHJ1Y3Q8X1R5cGUsX1R5cGVzLi4uPjo6X192
YWx1ZTsKICAgICAgICAgaWYoX0luZGV4PT1fX2luZGV4KXsKQEAgLTE2MTEsNzYgKzE2MTAsNzYg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCi0gICAgdmFyaWFudCAm
b3BlcmF0b3I9KAorICAgIFZhcmlhbnQgJm9wZXJhdG9yPSgKICAgICAgICAgdHlwZW5hbWUgc3Rk
Ojpjb25kaXRpb25hbDwKICAgICAgICAgICAgICEoX19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9U
eXBlcy4uLj46OnZhbHVlICYmCiAgICAgICAgICAgICAgIF9fYWxsX21vdmVfY29uc3RydWN0aWJs
ZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgogICAgICAgICAgICAgICBfX2FsbF9jb3B5X2Fzc2lnbmFi
bGU8X1R5cGVzLi4uPjo6dmFsdWUpLAotICAgICAgICAgICAgdmFyaWFudCwgX19wcml2YXRlX3R5
cGU+Ojp0eXBlIGNvbnN0ICZfX290aGVyKSA9IGRlbGV0ZTsKKyAgICAgICAgICAgIFZhcmlhbnQs
IF9fcHJpdmF0ZV90eXBlPjo6dHlwZSBjb25zdCAmX19vdGhlcikgPSBkZWxldGU7CiAKLSAgICB2
YXJpYW50ICZvcGVyYXRvcj0oCisgICAgVmFyaWFudCAmb3BlcmF0b3I9KAogICAgICAgICB0eXBl
bmFtZSBzdGQ6OmNvbmRpdGlvbmFsPAogICAgICAgICAgICAgX19hbGxfY29weV9jb25zdHJ1Y3Rp
YmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCiAgICAgICAgICAgICAgICAgX19hbGxfbW92ZV9jb25z
dHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCiAgICAgICAgICAgICAgICAgX19hbGxfY29w
eV9hc3NpZ25hYmxlPF9UeXBlcy4uLj46OnZhbHVlLAotICAgICAgICAgICAgdmFyaWFudCwgX19w
cml2YXRlX3R5cGU+Ojp0eXBlIGNvbnN0ICZfX290aGVyKSB7CisgICAgICAgICAgICBWYXJpYW50
LCBfX3ByaXZhdGVfdHlwZT46OnR5cGUgY29uc3QgJl9fb3RoZXIpIHsKICAgICAgICAgaWYgKF9f
b3RoZXIudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKSB7CiAgICAgICAgICAgICBfX2Rlc3Ryb3lf
c2VsZigpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYoX19vdGhlci5pbmRleCgpPT1pbmRl
eCgpKXsKLSAgICAgICAgICAgIF9fY29weV9hc3NpZ25fb3BfdGFibGU8dmFyaWFudD46Ol9fYXBw
bHlbaW5kZXgoKV0odGhpcyxfX290aGVyKTsKKyAgICAgICAgICAgIF9fY29weV9hc3NpZ25fb3Bf
dGFibGU8VmFyaWFudD46Ol9fYXBwbHlbaW5kZXgoKV0odGhpcyxfX290aGVyKTsKICAgICAgICAg
fQogICAgICAgICBlbHNlewotICAgICAgICAgICAgX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6
Ol9fb3BfdGFibGU8dmFyaWFudD46Ol9fY29weV9hc3NpZ25bCisgICAgICAgICAgICBfX3JlcGxh
Y2VfY29uc3RydWN0X2hlbHBlcjo6X19vcF90YWJsZTxWYXJpYW50Pjo6X19jb3B5X2Fzc2lnblsK
ICAgICAgICAgICAgICAgICBfX290aGVyLmluZGV4KCldKHRoaXMsX19vdGhlcik7CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KLSAgICB2YXJpYW50ICZvcGVyYXRvcj0o
CisgICAgVmFyaWFudCAmb3BlcmF0b3I9KAogICAgICAgICB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlv
bmFsPAogICAgICAgICAgICAgIShfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6
dmFsdWUgJiYKICAgICAgICAgICAgICAgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4u
Lj46OnZhbHVlICYmCiAgICAgICAgICAgICAgIF9fYWxsX2NvcHlfYXNzaWduYWJsZTxfVHlwZXMu
Li4+Ojp2YWx1ZSksCi0gICAgICAgICAgICB2YXJpYW50LCBfX3ByaXZhdGVfdHlwZT46OnR5cGUg
Jl9fb3RoZXIpID0gZGVsZXRlOworICAgICAgICAgICAgVmFyaWFudCwgX19wcml2YXRlX3R5cGU+
Ojp0eXBlICZfX290aGVyKSA9IGRlbGV0ZTsKIAotICAgIHZhcmlhbnQgJm9wZXJhdG9yPSgKKyAg
ICBWYXJpYW50ICZvcGVyYXRvcj0oCiAgICAgICAgIHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8
CiAgICAgICAgICAgICBfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUg
JiYKICAgICAgICAgICAgICAgICBfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6
dmFsdWUgJiYKICAgICAgICAgICAgICAgICBfX2FsbF9jb3B5X2Fzc2lnbmFibGU8X1R5cGVzLi4u
Pjo6dmFsdWUsCi0gICAgICAgICAgICB2YXJpYW50LCBfX3ByaXZhdGVfdHlwZT46OnR5cGUgJl9f
b3RoZXIpIHsKKyAgICAgICAgICAgIFZhcmlhbnQsIF9fcHJpdmF0ZV90eXBlPjo6dHlwZSAmX19v
dGhlcikgewogICAgICAgICBpZihfX290aGVyLnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSl7CiAg
ICAgICAgICAgICBfX2Rlc3Ryb3lfc2VsZigpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYo
X19vdGhlci5pbmRleCgpPT1pbmRleCgpKXsKLSAgICAgICAgICAgIF9fY29weV9hc3NpZ25fb3Bf
dGFibGU8dmFyaWFudD46Ol9fYXBwbHlbaW5kZXgoKV0odGhpcyxfX290aGVyKTsKKyAgICAgICAg
ICAgIF9fY29weV9hc3NpZ25fb3BfdGFibGU8VmFyaWFudD46Ol9fYXBwbHlbaW5kZXgoKV0odGhp
cyxfX290aGVyKTsKICAgICAgICAgfQogICAgICAgICBlbHNlewotICAgICAgICAgICAgX19yZXBs
YWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9fb3BfdGFibGU8dmFyaWFudD46Ol9fY29weV9hc3NpZ25b
CisgICAgICAgICAgICBfX3JlcGxhY2VfY29uc3RydWN0X2hlbHBlcjo6X19vcF90YWJsZTxWYXJp
YW50Pjo6X19jb3B5X2Fzc2lnblsKICAgICAgICAgICAgICAgICBfX290aGVyLmluZGV4KCldKHRo
aXMsX19vdGhlcik7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KLSAg
ICB2YXJpYW50ICZvcGVyYXRvcj0oCisgICAgVmFyaWFudCAmb3BlcmF0b3I9KAogICAgICAgICB0
eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPAogICAgICAgICAgICAgIShfX2FsbF9tb3ZlX2NvbnN0
cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKICAgICAgICAgICAgICAgX19hbGxfbW92ZV9h
c3NpZ25hYmxlPF9UeXBlcy4uLj46OnZhbHVlKSwKLSAgICAgICAgICAgIHZhcmlhbnQsIF9fcHJp
dmF0ZV90eXBlPjo6dHlwZSAmJl9fb3RoZXIpID0gZGVsZXRlOworICAgICAgICAgICAgVmFyaWFu
dCwgX19wcml2YXRlX3R5cGU+Ojp0eXBlICYmX19vdGhlcikgPSBkZWxldGU7CiAKLSAgICB2YXJp
YW50ICZvcGVyYXRvcj0oCisgICAgVmFyaWFudCAmb3BlcmF0b3I9KAogICAgICAgICB0eXBlbmFt
ZSBzdGQ6OmNvbmRpdGlvbmFsPF9fYWxsX21vdmVfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2
YWx1ZSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2FsbF9tb3Zl
X2Fzc2lnbmFibGU8X1R5cGVzLi4uPjo6dmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyaWFudCwgX19wcml2YXRlX3R5cGU+Ojp0eXBlICYmCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVmFyaWFudCwgX19wcml2YXRlX3R5cGU+Ojp0eXBlICYmCiAg
ICAgICAgICAgICBfX290aGVyKSBfX05PRVhDRVBUXyhfX25vZXhjZXB0X3ZhcmlhbnRfbW92ZV9h
c3NpZ248X1R5cGVzLi4uPjo6dmFsdWUpIHsKICAgICAgICAgaWYgKF9fb3RoZXIudmFsdWVsZXNz
X2J5X2V4Y2VwdGlvbigpKSB7CiAgICAgICAgICAgICBfX2Rlc3Ryb3lfc2VsZigpOwogICAgICAg
ICB9CiAgICAgICAgIGVsc2UgaWYoX19vdGhlci5pbmRleCgpPT1pbmRleCgpKXsKLSAgICAgICAg
ICAgIF9fbW92ZV9hc3NpZ25fb3BfdGFibGU8dmFyaWFudD46Ol9fYXBwbHlbaW5kZXgoKV0odGhp
cyxfX290aGVyKTsKKyAgICAgICAgICAgIF9fbW92ZV9hc3NpZ25fb3BfdGFibGU8VmFyaWFudD46
Ol9fYXBwbHlbaW5kZXgoKV0odGhpcyxfX290aGVyKTsKICAgICAgICAgICAgIF9fb3RoZXIuX19k
ZXN0cm95X3NlbGYoKTsKICAgICAgICAgfQogICAgICAgICBlbHNlewotICAgICAgICAgICAgX19y
ZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9fb3BfdGFibGU8dmFyaWFudD46Ol9fbW92ZV9hc3Np
Z25bCisgICAgICAgICAgICBfX3JlcGxhY2VfY29uc3RydWN0X2hlbHBlcjo6X19vcF90YWJsZTxW
YXJpYW50Pjo6X19tb3ZlX2Fzc2lnblsKICAgICAgICAgICAgICAgICBfX290aGVyLmluZGV4KCld
KHRoaXMsX19vdGhlcik7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuICp0aGlzOwpAQCAtMTcw
OCwxNCArMTcwNywxNCBAQCBwdWJsaWM6CiAgICAgICAgIHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9u
YWw8CiAgICAgICAgICAgICBfX2FsbF9zd2FwcGFibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKICAg
ICAgICAgICAgICAgICBfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUs
Ci0gICAgICAgICAgICB2YXJpYW50LCBfX3ByaXZhdGVfdHlwZT46OnR5cGUKKyAgICAgICAgICAg
IFZhcmlhbnQsIF9fcHJpdmF0ZV90eXBlPjo6dHlwZQogICAgICAgICAgICAgJl9fb3RoZXIpIF9f
Tk9FWENFUFRfKF9fbm9leGNlcHRfdmFyaWFudF9zd2FwPF9UeXBlcy4uLj46OnZhbHVlKSB7CiAg
ICAgICAgIGlmIChfX290aGVyLmluZGV4KCkgPT0gaW5kZXgoKSkgewogICAgICAgICAgICAgaWYo
IXZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkKLSAgICAgICAgICAgICAgICBfX3N3YXBfb3BfdGFi
bGU8dmFyaWFudD46Ol9fYXBwbHlbaW5kZXgoKV0oKnRoaXMsX19vdGhlcik7CisgICAgICAgICAg
ICAgICAgX19zd2FwX29wX3RhYmxlPFZhcmlhbnQ+OjpfX2FwcGx5W2luZGV4KCldKCp0aGlzLF9f
b3RoZXIpOwogICAgICAgICB9CiAgICAgICAgIGVsc2V7Ci0gICAgICAgICAgICB2YXJpYW50IF9f
dGVtcChzdGQ6Om1vdmUoX19vdGhlcikpOworICAgICAgICAgICAgVmFyaWFudCBfX3RlbXAoc3Rk
Ojptb3ZlKF9fb3RoZXIpKTsKICAgICAgICAgICAgIF9fb3RoZXIuX19pbmRleD1fX290aGVyLl9f
bW92ZV9jb25zdHJ1Y3QoKnRoaXMpOwogICAgICAgICAgICAgX19pbmRleD1fX21vdmVfY29uc3Ry
dWN0KF9fdGVtcCk7CiAgICAgICAgIH0KQEAgLTE3MjMsOSArMTcyMiw5IEBAIHB1YmxpYzoKIH07
CiAKIHRlbXBsYXRlPD4KLWNsYXNzIHZhcmlhbnQ8PnsKK2NsYXNzIFZhcmlhbnQ8PnsKIHB1Ymxp
YzoKLSAgICB2YXJpYW50KCk9ZGVsZXRlOworICAgIFZhcmlhbnQoKT1kZWxldGU7CiAgICAgCiAg
ICAgY29uc3RleHByIGJvb2wgdmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpIGNvbnN0IF9fTk9FWENF
UFR7CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTczNCwxNCArMTczMywxNCBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKLSAgICB2b2lkIHN3YXAodmFyaWFudCYpe30K
KyAgICB2b2lkIHN3YXAoVmFyaWFudCYpe30KIH07CiAKIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBf
VHlwZXM+CiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxfX2FsbF9zd2FwcGFibGU8X1R5cGVzLi4u
Pjo6dmFsdWUgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2FsbF9tb3ZlX2NvbnN0
cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk
Pjo6dHlwZQotc3dhcCh2YXJpYW50PF9UeXBlcy4uLj4gJl9fbGhzLCB2YXJpYW50PF9UeXBlcy4u
Lj4gJl9fcmhzKSBfX05PRVhDRVBUXygKK3N3YXAoVmFyaWFudDxfVHlwZXMuLi4+ICZfX2xocywg
VmFyaWFudDxfVHlwZXMuLi4+ICZfX3JocykgX19OT0VYQ0VQVF8oCiAgICAgX19ub2V4Y2VwdF92
YXJpYW50X3N3YXA8X1R5cGVzLi4uPjo6dmFsdWUpIHsKICAgICBfX2xocy5zd2FwKF9fcmhzKTsK
IH0KQEAgLTE3NDksOTggKzE3NDgsOTggQEAgc3dhcCh2YXJpYW50PF9UeXBlcy4uLj4gJl9fbGhz
LCB2YXJpYW50PAogdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVz
Pgogc3RydWN0IF9fdmFyaWFudF9hY2Nlc3NvcnsKICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faW5k
ZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUgX190eXBlOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgX190eXBlJiBnZXQodmFyaWFudDxfVHlwZXMuLi4+JiBfX3YpeworICAgIHN0YXRp
YyBjb25zdGV4cHIgX190eXBlJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+JiBfX3YpewogICAgICAg
ICByZXR1cm4gX192Ll9fc3RvcmFnZS5fX2dldChpbl9wbGFjZTxfSW5kZXg+KTsKICAgICB9Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBfX3R5cGUgY29uc3QmIGdldCh2YXJpYW50PF9UeXBlcy4uLj4g
Y29uc3QmIF9fdil7CisgICAgc3RhdGljIGNvbnN0ZXhwciBfX3R5cGUgY29uc3QmIGdldChWYXJp
YW50PF9UeXBlcy4uLj4gY29uc3QmIF9fdil7CiAgICAgICAgIHJldHVybiBfX3YuX19zdG9yYWdl
Ll9fZ2V0KGluX3BsYWNlPF9JbmRleD4pOwogICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHByIF9f
dHlwZSYmIGdldCh2YXJpYW50PF9UeXBlcy4uLj4mJiBfX3YpeworICAgIHN0YXRpYyBjb25zdGV4
cHIgX190eXBlJiYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYmIF9fdil7CiAgICAgICAgIHJldHVy
biBfX3YuX19zdG9yYWdlLl9fZ2V0X3JyZWYoaW5fcGxhY2U8X0luZGV4Pik7CiAgICAgfQotICAg
IHN0YXRpYyBjb25zdGV4cHIgY29uc3QgX190eXBlJiYgZ2V0KHZhcmlhbnQ8X1R5cGVzLi4uPiBj
b25zdCYmIF9fdil7CisgICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBfX3R5cGUmJiBnZXQoVmFy
aWFudDxfVHlwZXMuLi4+IGNvbnN0JiYgX192KXsKICAgICAgICAgcmV0dXJuIF9fdi5fX3N0b3Jh
Z2UuX19nZXRfcnJlZihpbl9wbGFjZTxfSW5kZXg+KTsKICAgICB9CiB9OwogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIF9UeXBlJiBnZXQo
dmFyaWFudDxfVHlwZXMuLi4+JiBfX3YpeworY29uc3RleHByIF9UeXBlJiBnZXQoVmFyaWFudDxf
VHlwZXMuLi4+JiBfX3YpewogICAgIHJldHVybiBnZXQ8X190eXBlX2luZGV4PF9UeXBlLF9UeXBl
cy4uLj46Ol9fdmFsdWU+KF9fdik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVu
YW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgX1R5cGUmJiBnZXQodmFyaWFudDxfVHlwZXMuLi4+
JiYgX192KXsKK2NvbnN0ZXhwciBfVHlwZSYmIGdldChWYXJpYW50PF9UeXBlcy4uLj4mJiBfX3Yp
ewogICAgIHJldHVybiBnZXQ8X190eXBlX2luZGV4PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWU+
KHN0ZDo6bW92ZShfX3YpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUg
Li4uIF9UeXBlcz4KLWNvbnN0ZXhwciBfVHlwZSBjb25zdCYgZ2V0KHZhcmlhbnQ8X1R5cGVzLi4u
PiBjb25zdCYgX192KXsKK2NvbnN0ZXhwciBfVHlwZSBjb25zdCYgZ2V0KFZhcmlhbnQ8X1R5cGVz
Li4uPiBjb25zdCYgX192KXsKICAgICByZXR1cm4gZ2V0PF9fdHlwZV9pbmRleDxfVHlwZSxfVHlw
ZXMuLi4+OjpfX3ZhbHVlPihfX3YpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBl
bmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIGNvbnN0IF9UeXBlJiYgZ2V0KHZhcmlhbnQ8X1R5
cGVzLi4uPiBjb25zdCYmIF9fdil7Citjb25zdGV4cHIgY29uc3QgX1R5cGUmJiBnZXQoVmFyaWFu
dDxfVHlwZXMuLi4+IGNvbnN0JiYgX192KXsKICAgICByZXR1cm4gZ2V0PF9fdHlwZV9pbmRleDxf
VHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlPihzdGQ6Om1vdmUoX192KSk7CiB9CiAKIAogdGVtcGxh
dGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIHR5cGVu
YW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUgY29uc3QmIGdldCh2
YXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fdil7Citjb25zdGV4cHIgdHlwZW5hbWUgX19pbmRl
eGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSBjb25zdCYgZ2V0KFZhcmlhbnQ8X1R5
cGVzLi4uPiBjb25zdCYgX192KXsKICAgICByZXR1cm4gKigKICAgICAgICAgKF9JbmRleCE9X192
LmluZGV4KCkpCi0gICAgICAgICAgICA/ICZfX3Rocm93X2JhZF92YXJpYW50X2FjY2Vzczx0eXBl
bmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlIGNvbnN0Jj4oIkJh
ZCB2YXJpYW50IGluZGV4IGluIGdldCIpCisgICAgICAgICAgICA/ICZfX3Rocm93X2JhZF92YXJp
YW50X2FjY2Vzczx0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190
eXBlIGNvbnN0Jj4oIkJhZCBWYXJpYW50IGluZGV4IGluIGdldCIpCiAgICAgICAgICAgICA6ICZf
X3ZhcmlhbnRfYWNjZXNzb3I8X0luZGV4LF9UeXBlcy4uLj46OmdldChfX3YpCiAgICAgKTsKIH0K
IAogdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3Rl
eHByIHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUmIGdl
dCh2YXJpYW50PF9UeXBlcy4uLj4mIF9fdil7Citjb25zdGV4cHIgdHlwZW5hbWUgX19pbmRleGVk
X3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYg
X192KXsKICAgICByZXR1cm4gKigKICAgICAgICAgKF9JbmRleCE9X192LmluZGV4KCkpCi0gICAg
ICAgICAgICA/ICZfX3Rocm93X2JhZF92YXJpYW50X2FjY2Vzczx0eXBlbmFtZSBfX2luZGV4ZWRf
dHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlJj4oIkJhZCB2YXJpYW50IGluZGV4IGluIGdl
dCIpCisgICAgICAgICAgICA/ICZfX3Rocm93X2JhZF92YXJpYW50X2FjY2Vzczx0eXBlbmFtZSBf
X2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlJj4oIkJhZCBWYXJpYW50IGlu
ZGV4IGluIGdldCIpCiAgICAgICAgICAgICA6ICZfX3ZhcmlhbnRfYWNjZXNzb3I8X0luZGV4LF9U
eXBlcy4uLj46OmdldChfX3YpCiAgICAgKTsKIH0KIAogdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRl
eCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIHR5cGVuYW1lIF9faW5kZXhlZF90eXBl
PF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUmJiBnZXQodmFyaWFudDxfVHlwZXMuLi4+JiYgX192
KXsKK2NvbnN0ZXhwciB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6
X190eXBlJiYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYmIF9fdil7CiAgICAgcmV0dXJuIF9fdmFy
aWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4uPjo6Z2V0KAotICAgICAgICAoKChfSW5kZXgh
PV9fdi5pbmRleCgpKSA/IF9fdGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzPGludD4oIkJhZCB2YXJp
YW50IGluZGV4IGluIGdldCIpIDogMCksIHN0ZDo6bW92ZShfX3YpKQorICAgICAgICAoKChfSW5k
ZXghPV9fdi5pbmRleCgpKSA/IF9fdGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzPGludD4oIkJhZCBW
YXJpYW50IGluZGV4IGluIGdldCIpIDogMCksIHN0ZDo6bW92ZShfX3YpKQogICAgICk7CiB9CiAK
IHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhw
ciBjb25zdCB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBl
JiYgZ2V0KHZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYmIF9fdil7Citjb25zdGV4cHIgY29uc3Qg
dHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSYmIGdldChW
YXJpYW50PF9UeXBlcy4uLj4gY29uc3QmJiBfX3YpewogICAgIHJldHVybiBfX3ZhcmlhbnRfYWNj
ZXNzb3I8X0luZGV4LF9UeXBlcy4uLj46OmdldCgKLSAgICAgICAgKCgoX0luZGV4IT1fX3YuaW5k
ZXgoKSkgPyBfX3Rocm93X2JhZF92YXJpYW50X2FjY2VzczxpbnQ+KCJCYWQgdmFyaWFudCBpbmRl
eCBpbiBnZXQiKSA6IDApLCBzdGQ6Om1vdmUoX192KSkKKyAgICAgICAgKCgoX0luZGV4IT1fX3Yu
aW5kZXgoKSkgPyBfX3Rocm93X2JhZF92YXJpYW50X2FjY2VzczxpbnQ+KCJCYWQgVmFyaWFudCBp
bmRleCBpbiBnZXQiKSA6IDApLCBzdGQ6Om1vdmUoX192KSkKICAgICApOwogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIHN0ZDo6YWRk
X3BvaW50ZXJfdDxfVHlwZT4gZ2V0X2lmKHZhcmlhbnQ8X1R5cGVzLi4uPiYgX192KXsKK2NvbnN0
ZXhwciBzdGQ6OmFkZF9wb2ludGVyX3Q8X1R5cGU+IGdldF9pZihWYXJpYW50PF9UeXBlcy4uLj4m
IF9fdil7CiAgICAgcmV0dXJuIChfX3R5cGVfaW5kZXg8X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1
ZSE9X192LmluZGV4KCkpP251bGxwdHI6JmdldDxfVHlwZT4oX192KTsKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBzdGQ6OmFkZF9w
b2ludGVyX3Q8X1R5cGUgY29uc3Q+IGdldF9pZih2YXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9f
dil7Citjb25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90PF9UeXBlIGNvbnN0PiBnZXRfaWYoVmFy
aWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3YpewogICAgIHJldHVybiAoX190eXBlX2luZGV4PF9U
eXBlLF9UeXBlcy4uLj46Ol9fdmFsdWUhPV9fdi5pbmRleCgpKT9udWxscHRyOiZnZXQ8X1R5cGU+
KF9fdik7CiB9CiAKIHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBl
cz4KLWNvbnN0ZXhwciBzdGQ6OmFkZF9wb2ludGVyX3Q8dHlwZW5hbWUgX19pbmRleGVkX3R5cGU8
X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZT4gZ2V0X2lmKHZhcmlhbnQ8X1R5cGVzLi4uPiYgX192
KXsKK2NvbnN0ZXhwciBzdGQ6OmFkZF9wb2ludGVyX3Q8dHlwZW5hbWUgX19pbmRleGVkX3R5cGU8
X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZT4gZ2V0X2lmKFZhcmlhbnQ8X1R5cGVzLi4uPiYgX192
KXsKICAgICByZXR1cm4gKChfSW5kZXghPV9fdi5pbmRleCgpKT9udWxscHRyOgogICAgICAgICAm
X192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxfVHlwZXMuLi4+OjpnZXQoX192KSk7CiB9CiAKIHRl
bXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KIGNvbnN0ZXhwciBz
dGQ6OmFkZF9wb2ludGVyX3Q8dHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4u
Lj46Ol9fdHlwZSBjb25zdD4gZ2V0X2lmKAotICAgIHZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYg
X192KXsKKyAgICBWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fdil7CiAgICAgcmV0dXJuICgo
X0luZGV4IT1fX3YuaW5kZXgoKSk/bnVsbHB0cjoKICAgICAgICAgJl9fdmFyaWFudF9hY2Nlc3Nv
cjxfSW5kZXgsX1R5cGVzLi4uPjo6Z2V0KF9fdikpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIGJvb2wgaG9sZHNfYWx0ZXJuYXRp
dmUodmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3YpIF9fTk9FWENFUFR7Citjb25zdGV4cHIg
Ym9vbCBob2xkc19hbHRlcm5hdGl2ZShWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fdikgX19O
T0VYQ0VQVHsKICAgICByZXR1cm4gX192LmluZGV4KCk9PV9fdHlwZV9pbmRleDxfVHlwZSxfVHlw
ZXMuLi4+OjpfX3ZhbHVlOwogfQogCkBAIC0xODU5LDcgKzE4NTgsNyBAQCBzdHJ1Y3QgX192aXNp
dG9yX3JldHVybl90eXBlPF9WaXNpdG9yLF9ICiAKIHRlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9y
LHR5cGVuYW1lIC4uLiBfVHlwZXM+CiBzdHJ1Y3QgX192aXNpdG9yX3RhYmxlewotICAgIHR5cGVk
ZWYgdmFyaWFudDxfVHlwZXMuLi4+IF9fdmFyaWFudF90eXBlOworICAgIHR5cGVkZWYgVmFyaWFu
dDxfVHlwZXMuLi4+IF9fdmFyaWFudF90eXBlOwogICAgIHR5cGVkZWYgdHlwZW5hbWUgX192aXNp
dG9yX3JldHVybl90eXBlPF9WaXNpdG9yLF9UeXBlcy4uLj46Ol9fdHlwZSBfX3JldHVybl90eXBl
OwogICAgIHR5cGVkZWYgX19yZXR1cm5fdHlwZSAoKl9fZnVuY190eXBlKShfVmlzaXRvciYsX192
YXJpYW50X3R5cGUmKTsKIApAQCAtMTg3OCw5ICsxODc3LDkgQEAgY29uc3QgdHlwZW5hbWUgX192
aXNpdG9yX3RhYmxlPF9WaXNpdG9yLAogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBl
bmFtZSAuLi4gX1R5cGVzPgogY29uc3RleHByIHR5cGVuYW1lIF9fdmlzaXRvcl9yZXR1cm5fdHlw
ZTxfVmlzaXRvcixfVHlwZXMuLi4+OjpfX3R5cGUKLXZpc2l0KF9WaXNpdG9yJiYgX192aXNpdG9y
LHZhcmlhbnQ8X1R5cGVzLi4uPiYgX192KXsKK3Zpc2l0KF9WaXNpdG9yJiYgX192aXNpdG9yLFZh
cmlhbnQ8X1R5cGVzLi4uPiYgX192KXsKICAgICByZXR1cm4gKF9fdi52YWx1ZWxlc3NfYnlfZXhj
ZXB0aW9uKCkpCi0gICAgICAgID8gX190aHJvd19iYWRfdmFyaWFudF9hY2Nlc3M8dHlwZW5hbWUg
X192aXNpdG9yX3JldHVybl90eXBlPF9WaXNpdG9yLF9UeXBlcy4uLj46Ol9fdHlwZT4oIlZpc2l0
aW5nIG9mIGVtcHR5IHZhcmlhbnQiKQorICAgICAgICA/IF9fdGhyb3dfYmFkX3ZhcmlhbnRfYWNj
ZXNzPHR5cGVuYW1lIF9fdmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcixfVHlwZXMuLi4+Ojpf
X3R5cGU+KCJWaXNpdGluZyBvZiBlbXB0eSBWYXJpYW50IikKICAgICAgICAgOiBfX3Zpc2l0b3Jf
dGFibGU8X1Zpc2l0b3IsX1R5cGVzLi4uPjo6X190cmFtcG9saW5lW19fdi5pbmRleCgpXShfX3Zp
c2l0b3IsX192KTsKIH0KIApAQCAtMTk0NCw3ICsxOTQzLDcgQEAgc3RydWN0IF9fdmlzaXRfaGVs
cGVyMjwtMSxfVmFyaWFudEluZGV4LAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5
cGVuYW1lIC4uLiBfVmFyaWFudHM+CiAgICAgc3RhdGljIGNvbnN0ZXhwciB0eXBlbmFtZSBfX211
bHRpX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1ZhcmlhbnRzLi4uPjo6X190eXBlCiAg
ICAgX192aXNpdChfVmlzaXRvciYsX1ZhcmlhbnRzJiYgLi4uKXsKLSAgICAgICAgcmV0dXJuIF9f
dGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzPHR5cGVuYW1lIF9fbXVsdGlfdmlzaXRvcl9yZXR1cm5f
dHlwZTxfVmlzaXRvcixfVmFyaWFudHMuLi4+OjpfX3R5cGU+KCJWaXNpdGluZyBvZiBlbXB0eSB2
YXJpYW50Iik7CisgICAgICAgIHJldHVybiBfX3Rocm93X2JhZF92YXJpYW50X2FjY2Vzczx0eXBl
bmFtZSBfX211bHRpX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1ZhcmlhbnRzLi4uPjo6
X190eXBlPigiVmlzaXRpbmcgb2YgZW1wdHkgVmFyaWFudCIpOwogICAgIH0KIH07CiAKQEAgLTE5
NTIsNyArMTk1MSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50Pgogc3RydWN0IF9fdmFy
aWFudF90eXBlX2NvdW50OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0
IF9fdmFyaWFudF90eXBlX2NvdW50PHZhcmlhbnQ8X1R5cGVzLi4uPj57CitzdHJ1Y3QgX192YXJp
YW50X3R5cGVfY291bnQ8VmFyaWFudDxfVHlwZXMuLi4+PnsKICAgICBzdGF0aWMgY29uc3RleHBy
IHNpemVfdCBfX3ZhbHVlPXNpemVvZi4uLihfVHlwZXMpOwogfTsKIApAQCAtMTk4OSw1MCArMTk4
OCw1MCBAQCB2aXNpdChfVmlzaXRvciYmIF9fdmlzaXRvcixfVmFyaWFudHMmJiAuCiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KHZh
cmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19saHMsdmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBf
X3Jocyl7Citjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25z
dCYgX19saHMsVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3Jocyl7CiAgICAgcmV0dXJuIChf
X2xocy5pbmRleCgpPT1fX3Jocy5pbmRleCgpKSAmJgogICAgICAgICAoKF9fbGhzLmluZGV4KCk9
PS0xKSB8fAotICAgICAgICAgX19lcXVhbGl0eV9vcF90YWJsZTx2YXJpYW50PF9UeXBlcy4uLj4+
OjpfX2VxdWFsaXR5X2NvbXBhcmVbX19saHMuaW5kZXgoKV0oCisgICAgICAgICBfX2VxdWFsaXR5
X29wX3RhYmxlPFZhcmlhbnQ8X1R5cGVzLi4uPj46Ol9fZXF1YWxpdHlfY29tcGFyZVtfX2xocy5p
bmRleCgpXSgKICAgICAgICAgICAgICBfX2xocyxfX3JocykpOwogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIGJvb2wgb3BlcmF0b3IhPSh2YXJpYW50PF9UeXBl
cy4uLj4gY29uc3QmIF9fbGhzLHZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19yaHMpeworY29u
c3RleHByIGJvb2wgb3BlcmF0b3IhPShWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fbGhzLFZh
cmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19yaHMpewogICAgIHJldHVybiAhKF9fbGhzPT1fX3Jo
cyk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgYm9vbCBv
cGVyYXRvcjwodmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX2xocyx2YXJpYW50PF9UeXBlcy4u
Lj4gY29uc3QmIF9fcmhzKXsKK2NvbnN0ZXhwciBib29sIG9wZXJhdG9yPChWYXJpYW50PF9UeXBl
cy4uLj4gY29uc3QmIF9fbGhzLFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19yaHMpewogICAg
IHJldHVybiAoX19saHMuaW5kZXgoKTxfX3Jocy5pbmRleCgpKSB8fAogICAgICAgICAoKF9fbGhz
LmluZGV4KCk9PV9fcmhzLmluZGV4KCkpICYmCiAgICAgICAgICAoKF9fbGhzLmluZGV4KCkhPS0x
KSAmJgotICAgICAgICAgIF9fbGVzc190aGFuX29wX3RhYmxlPHZhcmlhbnQ8X1R5cGVzLi4uPj46
OgorICAgICAgICAgIF9fbGVzc190aGFuX29wX3RhYmxlPFZhcmlhbnQ8X1R5cGVzLi4uPj46Ogog
ICAgICAgICAgIF9fbGVzc190aGFuX2NvbXBhcmVbX19saHMuaW5kZXgoKV0oX19saHMsX19yaHMp
KSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgYm9vbCBv
cGVyYXRvcj4odmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX2xocyx2YXJpYW50PF9UeXBlcy4u
Lj4gY29uc3QmIF9fcmhzKXsKK2NvbnN0ZXhwciBib29sIG9wZXJhdG9yPihWYXJpYW50PF9UeXBl
cy4uLj4gY29uc3QmIF9fbGhzLFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19yaHMpewogICAg
IHJldHVybiBfX3JoczxfX2xoczsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4K
LWNvbnN0ZXhwciBib29sIG9wZXJhdG9yPj0odmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX2xo
cyx2YXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fcmhzKXsKK2NvbnN0ZXhwciBib29sIG9wZXJh
dG9yPj0oVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX2xocyxWYXJpYW50PF9UeXBlcy4uLj4g
Y29uc3QmIF9fcmhzKXsKICAgICByZXR1cm4gIShfX2xoczxfX3Jocyk7CiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KHZhcmlhbnQ8
X1R5cGVzLi4uPiBjb25zdCYgX19saHMsdmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3Jocyl7
Citjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19s
aHMsVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3Jocyl7CiAgICAgcmV0dXJuICEoX19saHM+
X19yaHMpOwogfQogCi1zdHJ1Y3QgbW9ub3N0YXRle307CitzdHJ1Y3QgTW9ub3N0YXRle307CiAK
LWNvbnN0ZXhwciBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KG1vbm9zdGF0ZSBjb25zdCYsbW9ub3N0
YXRlIGNvbnN0Jil7IHJldHVybiB0cnVlO30KLWNvbnN0ZXhwciBpbmxpbmUgYm9vbCBvcGVyYXRv
ciE9KG1vbm9zdGF0ZSBjb25zdCYsbW9ub3N0YXRlIGNvbnN0Jil7IHJldHVybiBmYWxzZTt9Ci1j
b25zdGV4cHIgaW5saW5lIGJvb2wgb3BlcmF0b3I+PShtb25vc3RhdGUgY29uc3QmLG1vbm9zdGF0
ZSBjb25zdCYpeyByZXR1cm4gdHJ1ZTt9Ci1jb25zdGV4cHIgaW5saW5lIGJvb2wgb3BlcmF0b3I8
PShtb25vc3RhdGUgY29uc3QmLG1vbm9zdGF0ZSBjb25zdCYpeyByZXR1cm4gdHJ1ZTt9Ci1jb25z
dGV4cHIgaW5saW5lIGJvb2wgb3BlcmF0b3I+KG1vbm9zdGF0ZSBjb25zdCYsbW9ub3N0YXRlIGNv
bnN0Jil7IHJldHVybiBmYWxzZTt9Ci1jb25zdGV4cHIgaW5saW5lIGJvb2wgb3BlcmF0b3I8KG1v
bm9zdGF0ZSBjb25zdCYsbW9ub3N0YXRlIGNvbnN0Jil7IHJldHVybiBmYWxzZTt9Citjb25zdGV4
cHIgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShNb25vc3RhdGUgY29uc3QmLE1vbm9zdGF0ZSBjb25z
dCYpeyByZXR1cm4gdHJ1ZTt9Citjb25zdGV4cHIgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShNb25v
c3RhdGUgY29uc3QmLE1vbm9zdGF0ZSBjb25zdCYpeyByZXR1cm4gZmFsc2U7fQorY29uc3RleHBy
IGlubGluZSBib29sIG9wZXJhdG9yPj0oTW9ub3N0YXRlIGNvbnN0JixNb25vc3RhdGUgY29uc3Qm
KXsgcmV0dXJuIHRydWU7fQorY29uc3RleHByIGlubGluZSBib29sIG9wZXJhdG9yPD0oTW9ub3N0
YXRlIGNvbnN0JixNb25vc3RhdGUgY29uc3QmKXsgcmV0dXJuIHRydWU7fQorY29uc3RleHByIGlu
bGluZSBib29sIG9wZXJhdG9yPihNb25vc3RhdGUgY29uc3QmLE1vbm9zdGF0ZSBjb25zdCYpeyBy
ZXR1cm4gZmFsc2U7fQorY29uc3RleHByIGlubGluZSBib29sIG9wZXJhdG9yPChNb25vc3RhdGUg
Y29uc3QmLE1vbm9zdGF0ZSBjb25zdCYpeyByZXR1cm4gZmFsc2U7fQogCiBzdHJ1Y3QgX19oYXNo
X3Zpc2l0b3J7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+CkBAIC0yMDQxLDI1ICsyMDQw
LDI5IEBAIHN0cnVjdCBfX2hhc2hfdmlzaXRvcnsKICAgICB9CiB9OwogCi19IC8vIG5hbWVzcGFj
ZSBleHBlcmltZW50YWwKK30gLy8gbmFtZXNwYWNlIFdURgorCituYW1lc3BhY2Ugc3RkIHsKIAog
dGVtcGxhdGU8Pgotc3RydWN0IGhhc2g8ZXhwZXJpbWVudGFsOjptb25vc3RhdGU+ewotICAgIHNp
emVfdCBvcGVyYXRvcigpKGV4cGVyaW1lbnRhbDo6bW9ub3N0YXRlKSBfX05PRVhDRVBUeworc3Ry
dWN0IGhhc2g8V1RGOjpNb25vc3RhdGU+eworICAgIHNpemVfdCBvcGVyYXRvcigpKFdURjo6TW9u
b3N0YXRlKSBfX05PRVhDRVBUewogICAgICAgICByZXR1cm4gNDI7CiAgICAgfQogfTsKIAogdGVt
cGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBoYXNoPGV4cGVyaW1lbnRhbDo6dmFy
aWFudDxfVHlwZXMuLi4+PnsKLSAgICBzaXplX3Qgb3BlcmF0b3IoKShleHBlcmltZW50YWw6OnZh
cmlhbnQ8X1R5cGVzLi4uPiBjb25zdCAmdikgX19OT0VYQ0VQVCB7Ci0gICAgICAgIHJldHVybiBz
dGQ6Omhhc2g8cHRyZGlmZl90PigpKHYuaW5kZXgoKSkgXgotICAgICAgICAgICAgICAgZXhwZXJp
bWVudGFsOjp2aXNpdChleHBlcmltZW50YWw6Ol9faGFzaF92aXNpdG9yKCksIHYpOworc3RydWN0
IGhhc2g8V1RGOjpWYXJpYW50PF9UeXBlcy4uLj4+eworICAgIHNpemVfdCBvcGVyYXRvcigpKFdU
Rjo6VmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0ICZ2KSBfX05PRVhDRVBUIHsKKyAgICAgICAgcmV0
dXJuIHN0ZDo6aGFzaDxwdHJkaWZmX3Q+KCkodi5pbmRleCgpKSBeIFdURjo6dmlzaXQoV1RGOjpf
X2hhc2hfdmlzaXRvcigpLCB2KTsKICAgICB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBzdGQKIAor
dXNpbmcgV1RGOjpNb25vc3RhdGU7Cit1c2luZyBXVEY6OlZhcmlhbnQ7CisKICNlbmRpZiAvLyAh
Q09NUElMRVIoQ0xBTkcpIHx8IFdURl9DUFBfU1REX1ZFUiA+PSAxNAogCiAjaWYgQ09NUElMRVIo
TVNWQykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNzUwNSkKKysrIFNvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2IEBACisyMDE2LTEwLTE4ICBT
YW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVwbGFjZSBzdGQ6OmV4cGVy
aW1lbnRhbDo6dmFyaWFudCB3aXRoIFdURjo6VmFyaWFudCAob3Igc2ltaWxhcikKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzYyNgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbmFtZSBzdGQ6OmV4cGVy
aW1lbnRhbDo6dmFyaWFudCwgVmFyaWFudC4gTW92ZSBoZWxwZXJzIGdldC9ob2xkc19hbHRlcm5h
dGl2ZS9ldGMuCisgICAgICAgIGludG8gdGhlIFdURiBuYW1lc3BhY2UuCisKKyAgICAgICAgKiBN
b2R1bGVzL2ZldGNoL0ZldGNoQm9keS5oOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5Ojpp
c0Jsb2IpOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5Ojppc0Zvcm1EYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZldGNoQm9keTo6aXNBcnJheUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpGZXRjaEJvZHk6OmlzQXJyYXlCdWZmZXJWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OkZldGNo
Qm9keTo6aXNVUkxTZWFyY2hQYXJhbXMpOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5Ojpp
c1RleHQpOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5OjpibG9iQm9keSk6CisgICAgICAg
IChXZWJDb3JlOjpGZXRjaEJvZHk6OmZvcm1EYXRhQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpG
ZXRjaEJvZHk6OmFycmF5QnVmZmVyQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6
OmFycmF5QnVmZmVyVmlld0JvZHkpOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5Ojp0ZXh0
Qm9keSk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OnVybFNlYXJjaFBhcmFtc0JvZHkp
OgorICAgICAgICAqIGJpbmRpbmdzL2dlbmVyaWMvSURMVHlwZXMuaDoKKyAgICAgICAgKiBkb20v
RXhjZXB0aW9uT3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkV4Y2VwdGlvbk9yPFJldHVyblR5cGU+
OjpoYXNFeGNlcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RXhjZXB0aW9uT3I8UmV0dXJuVHlw
ZT46OnJlbGVhc2VFeGNlcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RXhjZXB0aW9uT3I8UmV0
dXJuVHlwZT46OnJlbGVhc2VSZXR1cm5WYWx1ZSk6CisgICAgICAgICogZG9tL01lc3NhZ2VFdmVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlRXZlbnQ6OnNvdXJjZSk6CisgICAgICAg
ICogZG9tL01lc3NhZ2VFdmVudC5oOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Om5vZGVTZXRQcmVUcmFuc2Zvcm1lZEZyb21Ob2RlT3JTdHJpbmdWZWN0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y29udmVydE5vZGVzT3JTdHJpbmdzSW50b05vZGUpOgor
ICAgICAgICAqIGRvbS9Ob2RlLmg6CisgICAgICAgICogaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rp
b24uaDoKKyAgICAgICAgKiBodG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjphZGQpOgorICAgICAgICAqIGh0bWwvSFRNTFNlbGVj
dEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL3RyYWNrL1RyYWNrRXZlbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VHJhY2tFdmVudDo6VHJhY2tFdmVudCk6CisgICAgICAgICogaHRtbC90cmFj
ay9UcmFja0V2ZW50Lmg6CisKIDIwMTYtMTAtMTggIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9y
Zz4KIAogICAgICAgICBTaW1wbGlmeSBTZXJpYWxpemVkU2NyaXB0VmFsdWUsIE1lc3NhZ2VQb3J0
QXJyYXkgYW5kIEFycmF5QnVmZmVyQXJyYXkgdG8gZWFzZSBnZW5lcmF0aW9uCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5LmgJKHJldmlzaW9uIDIwNzUwNCkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTY1LDEyICs2NSwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb25zdW1lQXNTdHJlYW0oRmV0
Y2hCb2R5T3duZXImLCBGZXRjaFJlc3BvbnNlU291cmNlJik7CiAjZW5kaWYKIAotICAgIGJvb2wg
aXNCbG9iKCkgY29uc3QgeyByZXR1cm4gc3RkOjpleHBlcmltZW50YWw6OmhvbGRzX2FsdGVybmF0
aXZlPFJlZjxjb25zdCBCbG9iPj4obV9kYXRhKTsgfQotICAgIGJvb2wgaXNGb3JtRGF0YSgpIGNv
bnN0IHsgcmV0dXJuIHN0ZDo6ZXhwZXJpbWVudGFsOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8Rm9y
bURhdGE+PihtX2RhdGEpOyB9Ci0gICAgYm9vbCBpc0FycmF5QnVmZmVyKCkgY29uc3QgeyByZXR1
cm4gc3RkOjpleHBlcmltZW50YWw6OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxjb25zdCBBcnJheUJ1
ZmZlcj4+KG1fZGF0YSk7IH0KLSAgICBib29sIGlzQXJyYXlCdWZmZXJWaWV3KCkgY29uc3QgeyBy
ZXR1cm4gc3RkOjpleHBlcmltZW50YWw6OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxjb25zdCBBcnJh
eUJ1ZmZlclZpZXc+PihtX2RhdGEpOyB9Ci0gICAgYm9vbCBpc1VSTFNlYXJjaFBhcmFtcygpIGNv
bnN0IHsgcmV0dXJuIHN0ZDo6ZXhwZXJpbWVudGFsOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8Y29u
c3QgVVJMU2VhcmNoUGFyYW1zPj4obV9kYXRhKTsgfQotICAgIGJvb2wgaXNUZXh0KCkgY29uc3Qg
eyByZXR1cm4gc3RkOjpleHBlcmltZW50YWw6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4obV9k
YXRhKTsgfQorICAgIGJvb2wgaXNCbG9iKCkgY29uc3QgeyByZXR1cm4gV1RGOjpob2xkc19hbHRl
cm5hdGl2ZTxSZWY8Y29uc3QgQmxvYj4+KG1fZGF0YSk7IH0KKyAgICBib29sIGlzRm9ybURhdGEo
KSBjb25zdCB7IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxGb3JtRGF0YT4+KG1f
ZGF0YSk7IH0KKyAgICBib29sIGlzQXJyYXlCdWZmZXIoKSBjb25zdCB7IHJldHVybiBXVEY6Omhv
bGRzX2FsdGVybmF0aXZlPFJlZjxjb25zdCBBcnJheUJ1ZmZlcj4+KG1fZGF0YSk7IH0KKyAgICBi
b29sIGlzQXJyYXlCdWZmZXJWaWV3KCkgY29uc3QgeyByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5h
dGl2ZTxSZWY8Y29uc3QgQXJyYXlCdWZmZXJWaWV3Pj4obV9kYXRhKTsgfQorICAgIGJvb2wgaXNV
UkxTZWFyY2hQYXJhbXMoKSBjb25zdCB7IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJl
Zjxjb25zdCBVUkxTZWFyY2hQYXJhbXM+PihtX2RhdGEpOyB9CisgICAgYm9vbCBpc1RleHQoKSBj
b25zdCB7IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4obV9kYXRhKTsgfQog
CiAgICAgc3RhdGljIE9wdGlvbmFsPEZldGNoQm9keT4gZXh0cmFjdChTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiwgSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIFN0cmluZyYpOwogICAgIHN0
YXRpYyBGZXRjaEJvZHkgbG9hZGluZ0JvZHkoKSB7IHJldHVybiB7IH07IH0KQEAgLTEwNCwxNiAr
MTA0LDE2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb25zdW1lVGV4dChSZWY8RGVmZXJyZWRQcm9t
aXNlPiYmLCBjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIGNvbnN1bWVCbG9iKEZldGNoQm9keU93
bmVyJiwgUmVmPERlZmVycmVkUHJvbWlzZT4mJik7CiAKLSAgICBjb25zdCBCbG9iJiBibG9iQm9k
eSgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6ZXhwZXJpbWVudGFsOjpnZXQ8UmVmPGNvbnN0IEJsb2I+
PihtX2RhdGEpLmdldCgpOyB9Ci0gICAgRm9ybURhdGEmIGZvcm1EYXRhQm9keSgpIHsgcmV0dXJu
IHN0ZDo6ZXhwZXJpbWVudGFsOjpnZXQ8UmVmPEZvcm1EYXRhPj4obV9kYXRhKS5nZXQoKTsgfQot
ICAgIGNvbnN0IEZvcm1EYXRhJiBmb3JtRGF0YUJvZHkoKSBjb25zdCB7IHJldHVybiBzdGQ6OmV4
cGVyaW1lbnRhbDo6Z2V0PFJlZjxGb3JtRGF0YT4+KG1fZGF0YSkuZ2V0KCk7IH0KLSAgICBjb25z
dCBBcnJheUJ1ZmZlciYgYXJyYXlCdWZmZXJCb2R5KCkgY29uc3QgeyByZXR1cm4gc3RkOjpleHBl
cmltZW50YWw6OmdldDxSZWY8Y29uc3QgQXJyYXlCdWZmZXI+PihtX2RhdGEpLmdldCgpOyB9Ci0g
ICAgY29uc3QgQXJyYXlCdWZmZXJWaWV3JiBhcnJheUJ1ZmZlclZpZXdCb2R5KCkgY29uc3QgeyBy
ZXR1cm4gc3RkOjpleHBlcmltZW50YWw6OmdldDxSZWY8Y29uc3QgQXJyYXlCdWZmZXJWaWV3Pj4o
bV9kYXRhKS5nZXQoKTsgfQotICAgIFN0cmluZyYgdGV4dEJvZHkoKSB7IHJldHVybiBzdGQ6OmV4
cGVyaW1lbnRhbDo6Z2V0PFN0cmluZz4obV9kYXRhKTsgfQotICAgIGNvbnN0IFN0cmluZyYgdGV4
dEJvZHkoKSBjb25zdCB7IHJldHVybiBzdGQ6OmV4cGVyaW1lbnRhbDo6Z2V0PFN0cmluZz4obV9k
YXRhKTsgfQotICAgIGNvbnN0IFVSTFNlYXJjaFBhcmFtcyYgdXJsU2VhcmNoUGFyYW1zQm9keSgp
IGNvbnN0IHsgcmV0dXJuIHN0ZDo6ZXhwZXJpbWVudGFsOjpnZXQ8UmVmPGNvbnN0IFVSTFNlYXJj
aFBhcmFtcz4+KG1fZGF0YSkuZ2V0KCk7IH0KKyAgICBjb25zdCBCbG9iJiBibG9iQm9keSgpIGNv
bnN0IHsgcmV0dXJuIFdURjo6Z2V0PFJlZjxjb25zdCBCbG9iPj4obV9kYXRhKS5nZXQoKTsgfQor
ICAgIEZvcm1EYXRhJiBmb3JtRGF0YUJvZHkoKSB7IHJldHVybiBXVEY6OmdldDxSZWY8Rm9ybURh
dGE+PihtX2RhdGEpLmdldCgpOyB9CisgICAgY29uc3QgRm9ybURhdGEmIGZvcm1EYXRhQm9keSgp
IGNvbnN0IHsgcmV0dXJuIFdURjo6Z2V0PFJlZjxGb3JtRGF0YT4+KG1fZGF0YSkuZ2V0KCk7IH0K
KyAgICBjb25zdCBBcnJheUJ1ZmZlciYgYXJyYXlCdWZmZXJCb2R5KCkgY29uc3QgeyByZXR1cm4g
V1RGOjpnZXQ8UmVmPGNvbnN0IEFycmF5QnVmZmVyPj4obV9kYXRhKS5nZXQoKTsgfQorICAgIGNv
bnN0IEFycmF5QnVmZmVyVmlldyYgYXJyYXlCdWZmZXJWaWV3Qm9keSgpIGNvbnN0IHsgcmV0dXJu
IFdURjo6Z2V0PFJlZjxjb25zdCBBcnJheUJ1ZmZlclZpZXc+PihtX2RhdGEpLmdldCgpOyB9Cisg
ICAgU3RyaW5nJiB0ZXh0Qm9keSgpIHsgcmV0dXJuIFdURjo6Z2V0PFN0cmluZz4obV9kYXRhKTsg
fQorICAgIGNvbnN0IFN0cmluZyYgdGV4dEJvZHkoKSBjb25zdCB7IHJldHVybiBXVEY6OmdldDxT
dHJpbmc+KG1fZGF0YSk7IH0KKyAgICBjb25zdCBVUkxTZWFyY2hQYXJhbXMmIHVybFNlYXJjaFBh
cmFtc0JvZHkoKSBjb25zdCB7IHJldHVybiBXVEY6OmdldDxSZWY8Y29uc3QgVVJMU2VhcmNoUGFy
YW1zPj4obV9kYXRhKS5nZXQoKTsgfQogCi0gICAgc3RkOjpleHBlcmltZW50YWw6OnZhcmlhbnQ8
c3RkOjpudWxscHRyX3QsIFJlZjxjb25zdCBCbG9iPiwgUmVmPEZvcm1EYXRhPiwgUmVmPGNvbnN0
IEFycmF5QnVmZmVyPiwgUmVmPGNvbnN0IEFycmF5QnVmZmVyVmlldz4sIFJlZjxjb25zdCBVUkxT
ZWFyY2hQYXJhbXM+LCBTdHJpbmc+IG1fZGF0YSB7IG51bGxwdHIgfTsKKyAgICBWYXJpYW50PHN0
ZDo6bnVsbHB0cl90LCBSZWY8Y29uc3QgQmxvYj4sIFJlZjxGb3JtRGF0YT4sIFJlZjxjb25zdCBB
cnJheUJ1ZmZlcj4sIFJlZjxjb25zdCBBcnJheUJ1ZmZlclZpZXc+LCBSZWY8Y29uc3QgVVJMU2Vh
cmNoUGFyYW1zPiwgU3RyaW5nPiBtX2RhdGEgeyBudWxscHRyIH07CiAKICAgICBGZXRjaEJvZHlD
b25zdW1lciBtX2NvbnN1bWVyIHsgRmV0Y2hCb2R5Q29uc3VtZXI6OlR5cGU6Ok5vbmUgfTsKICAg
ICBSZWZQdHI8RGVmZXJyZWRQcm9taXNlPiBtX2NvbnN1bWVQcm9taXNlOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9JRExUeXBlcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvSURMVHlwZXMuaAkocmV2aXNpb24gMjA3NTA0KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9JRExUeXBlcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTUsNyArMTE1LDcgQEAgc3RydWN0IElETEVycm9yIDogSURMVW5zdXBwb3J0ZWRU
eXBlIHsgfQogc3RydWN0IElETERPTUV4Y2VwdGlvbiA6IElETFVuc3VwcG9ydGVkVHlwZSB7IH07
CiAKIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFRzPgotc3RydWN0IElETFVuaW9uIDogSURMVHlwZTxz
dGQ6OmV4cGVyaW1lbnRhbDo6dmFyaWFudDx0eXBlbmFtZSBUczo6SW1wbGVtZW50YXRpb25UeXBl
Li4uPj4geworc3RydWN0IElETFVuaW9uIDogSURMVHlwZTxWYXJpYW50PHR5cGVuYW1lIFRzOjpJ
bXBsZW1lbnRhdGlvblR5cGUuLi4+PiB7CiAgICAgdXNpbmcgVHlwZUxpc3QgPSBicmlnYW5kOjps
aXN0PFRzLi4uPjsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FeGNlcHRpb25Pci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FeGNlcHRpb25Pci5oCShyZXZpc2lv
biAyMDc1MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRXhjZXB0aW9uT3IuaAkod29ya2luZyBj
b3B5KQpAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgUmV0dXJuVHlwZSYmIHJlbGVhc2VS
ZXR1cm5WYWx1ZSgpOwogCiBwcml2YXRlOgotICAgIHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50
PEV4Y2VwdGlvbiwgUmV0dXJuVHlwZT4gbV92YWx1ZTsKKyAgICBWYXJpYW50PEV4Y2VwdGlvbiwg
UmV0dXJuVHlwZT4gbV92YWx1ZTsKIH07CiAKIHRlbXBsYXRlPD4gY2xhc3MgRXhjZXB0aW9uT3I8
dm9pZD4gewpAQCAtNzUsMTcgKzc1LDE3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGU+
IHRlbXBsYXRlPHQKIAogdGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZT4gaW5saW5lIGJvb2wg
RXhjZXB0aW9uT3I8UmV0dXJuVHlwZT46Omhhc0V4Y2VwdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIHN0ZDo6ZXhwZXJpbWVudGFsOjpob2xkc19hbHRlcm5hdGl2ZTxFeGNlcHRpb24+KG1fdmFs
dWUpOworICAgIHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEV4Y2VwdGlvbj4obV92YWx1
ZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGU+IGlubGluZSBFeGNlcHRpb24m
JiBFeGNlcHRpb25PcjxSZXR1cm5UeXBlPjo6cmVsZWFzZUV4Y2VwdGlvbigpCiB7Ci0gICAgcmV0
dXJuIHN0ZDo6ZXhwZXJpbWVudGFsOjpnZXQ8RXhjZXB0aW9uPihXVEZNb3ZlKG1fdmFsdWUpKTsK
KyAgICByZXR1cm4gV1RGOjpnZXQ8RXhjZXB0aW9uPihXVEZNb3ZlKG1fdmFsdWUpKTsKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZT4gaW5saW5lIFJldHVyblR5cGUmJiBFeGNlcHRp
b25PcjxSZXR1cm5UeXBlPjo6cmVsZWFzZVJldHVyblZhbHVlKCkKIHsKLSAgICByZXR1cm4gc3Rk
OjpleHBlcmltZW50YWw6OmdldDxSZXR1cm5UeXBlPihXVEZNb3ZlKG1fdmFsdWUpKTsKKyAgICBy
ZXR1cm4gV1RGOjpnZXQ8UmV0dXJuVHlwZT4oV1RGTW92ZShtX3ZhbHVlKSk7CiB9CiAKIGlubGlu
ZSBFeGNlcHRpb25Pcjx2b2lkPjo6RXhjZXB0aW9uT3IoRXhjZXB0aW9uJiYgZXhjZXB0aW9uKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5jcHAJKHJldmlzaW9uIDIwNzUwNSkKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzcsNyArMTc3LDcgQEAgRXZlbnRUYXJnZXQqIE1lc3NhZ2VFdmVudDo6c291cmNlKCkgY29ucwog
ICAgICAgICBbXShjb25zdCBSZWZQdHI8TWVzc2FnZVBvcnQ+JiBtZXNzYWdlUG9ydCkgLT4gRXZl
bnRUYXJnZXQqIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8RXZlbnRUYXJnZXQqPihzdGF0aWNfY2FzdDxj
b25zdCBFdmVudFRhcmdldCo+KG1lc3NhZ2VQb3J0LmdldCgpKSk7IH0KICAgICApOwogCi0gICAg
cmV0dXJuIHN0ZDo6ZXhwZXJpbWVudGFsOjp2aXNpdCh2aXNpdG9yLCBtX3NvdXJjZS52YWx1ZSgp
KTsKKyAgICByZXR1cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBtX3NvdXJjZS52YWx1ZSgpKTsKIH0K
IAogUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gTWVzc2FnZUV2ZW50Ojp0cnlTZXJpYWxp
emVEYXRhKEV4ZWNTdGF0ZSogZXhlYykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdl
RXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZUV2ZW50LmgJ
KHJldmlzaW9uIDIwNzUwNSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIEJsb2I7CiAKLXVzaW5nIE1lc3NhZ2VFdmVudFNvdXJjZSA9IHN0ZDo6ZXhwZXJpbWVudGFs
Ojp2YXJpYW50PFJlZlB0cjxET01XaW5kb3c+LCBSZWZQdHI8TWVzc2FnZVBvcnQ+PjsKK3VzaW5n
IE1lc3NhZ2VFdmVudFNvdXJjZSA9IFZhcmlhbnQ8UmVmUHRyPERPTVdpbmRvdz4sIFJlZlB0cjxN
ZXNzYWdlUG9ydD4+OwogCiBjbGFzcyBNZXNzYWdlRXZlbnQgZmluYWwgOiBwdWJsaWMgRXZlbnQg
ewogcHVibGljOgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMjA3NTA0KQorKysgU291
cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDUsNyArNDQ1LDcg
QEAgc3RhdGljIEhhc2hTZXQ8UmVmUHRyPE5vZGU+PiBub2RlU2V0UHJlVAogICAgICk7CiAKICAg
ICBmb3IgKGNvbnN0IGF1dG8mIHZhcmlhbnQgOiB2ZWN0b3IpCi0gICAgICAgIHN0ZDo6ZXhwZXJp
bWVudGFsOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKKyAgICAgICAgV1RGOjp2aXNpdCh2aXNp
dG9yLCB2YXJpYW50KTsKIAogICAgIHJldHVybiBub2RlU2V0OwogfQpAQCAtNDgyLDcgKzQ4Miw3
IEBAIFJlZlB0cjxOb2RlPiBOb2RlOjpjb252ZXJ0Tm9kZXNPclN0cmluZ3MKICAgICApOwogCiAg
ICAgZm9yIChhdXRvJiB2YXJpYW50IDogbm9kZU9yU3RyaW5nVmVjdG9yKQotICAgICAgICBzdGQ6
OmV4cGVyaW1lbnRhbDo6dmlzaXQodmlzaXRvciwgdmFyaWFudCk7CisgICAgICAgIFdURjo6dmlz
aXQodmlzaXRvciwgdmFyaWFudCk7CiAKICAgICBpZiAobm9kZXMuc2l6ZSgpID09IDEpCiAgICAg
ICAgIHJldHVybiBXVEZNb3ZlKG5vZGVzLmZpcnN0KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCShyZXZp
c2lvbiAyMDc1MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC02Miw3ICs2Miw3IEBAIGNsYXNzIFNoYWRvd1Jvb3Q7CiBjbGFzcyBUb3VjaEV2ZW50Owog
Y2xhc3MgVUlSZXF1ZXN0RXZlbnQ7CiAKLXVzaW5nIE5vZGVPclN0cmluZyA9IHN0ZDo6ZXhwZXJp
bWVudGFsOjp2YXJpYW50PFJlZlB0cjxOb2RlPiwgU3RyaW5nPjsKK3VzaW5nIE5vZGVPclN0cmlu
ZyA9IFZhcmlhbnQ8UmVmUHRyPE5vZGU+LCBTdHJpbmc+OwogCiBjbGFzcyBOb2RlUmFyZURhdGFC
YXNlIHsKIHB1YmxpYzoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbnNDb2xs
ZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uc0Nv
bGxlY3Rpb24uaAkocmV2aXNpb24gMjA3NTA0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
T3B0aW9uc0NvbGxlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDEsOCArNDEsOCBAQCBwdWJs
aWM6CiAgICAgSFRNTE9wdGlvbkVsZW1lbnQqIGl0ZW0odW5zaWduZWQgb2Zmc2V0KSBjb25zdCBm
aW5hbDsKICAgICBIVE1MT3B0aW9uRWxlbWVudCogbmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmFtZSkgY29uc3QgZmluYWw7CiAKLSAgICB1c2luZyBPcHRpb25Pck9wdEdyb3VwRWxlbWVu
dCA9IHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50PFJlZlB0cjxIVE1MT3B0aW9uRWxlbWVudD4s
IFJlZlB0cjxIVE1MT3B0R3JvdXBFbGVtZW50Pj47Ci0gICAgdXNpbmcgSFRNTEVsZW1lbnRPcklu
dCA9IHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50PFJlZlB0cjxIVE1MRWxlbWVudD4sIGludD47
CisgICAgdXNpbmcgT3B0aW9uT3JPcHRHcm91cEVsZW1lbnQgPSBWYXJpYW50PFJlZlB0cjxIVE1M
T3B0aW9uRWxlbWVudD4sIFJlZlB0cjxIVE1MT3B0R3JvdXBFbGVtZW50Pj47CisgICAgdXNpbmcg
SFRNTEVsZW1lbnRPckludCA9IFZhcmlhbnQ8UmVmUHRyPEhUTUxFbGVtZW50PiwgaW50PjsKICAg
ICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBhZGQoY29uc3QgT3B0aW9uT3JPcHRH
cm91cEVsZW1lbnQmLCBPcHRpb25hbDxIVE1MRWxlbWVudE9ySW50PiBiZWZvcmUpOwogICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlKGludCBpbmRleCk7CiAgICAgdm9pZCByZW1vdmUoSFRN
TE9wdGlvbkVsZW1lbnQmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAyMDc1MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxT
ZWxlY3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMwLDkgKzIzMCw5IEBAIEV4Y2Vw
dGlvbk9yPHZvaWQ+IEhUTUxTZWxlY3RFbGVtZW50OjphZGQKICAgICAgICAgICAgIFt0aGlzXShp
bnQgaW5kZXgpIC0+IEhUTUxFbGVtZW50KiB7IHJldHVybiBpdGVtKGluZGV4KTsgfQogICAgICAg
ICApOwogCi0gICAgICAgIGJlZm9yZUVsZW1lbnQgPSBzdGQ6OmV4cGVyaW1lbnRhbDo6dmlzaXQo
dmlzaXRvciwgYmVmb3JlLnZhbHVlKCkpOworICAgICAgICBiZWZvcmVFbGVtZW50ID0gV1RGOjp2
aXNpdCh2aXNpdG9yLCBiZWZvcmUudmFsdWUoKSk7CiAgICAgfQotICAgIEhUTUxFbGVtZW50JiB0
b0luc2VydCA9IHN0ZDo6ZXhwZXJpbWVudGFsOjp2aXNpdChbXShjb25zdCBhdXRvJiBodG1sRWxl
bWVudCkgLT4gSFRNTEVsZW1lbnQmIHsKKyAgICBIVE1MRWxlbWVudCYgdG9JbnNlcnQgPSBXVEY6
OnZpc2l0KFtdKGNvbnN0IGF1dG8mIGh0bWxFbGVtZW50KSAtPiBIVE1MRWxlbWVudCYgewogICAg
ICAgICByZXR1cm4gKmh0bWxFbGVtZW50OwogICAgIH0sIGVsZW1lbnQpOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oCShyZXZpc2lvbiAyMDc1MDQpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTUxLDggKzUxLDggQEAgcHVibGljOgogCiAgICAgYm9vbCB1c2VzTWVudUxpc3QoKSBjb25zdDsK
IAotICAgIHVzaW5nIE9wdGlvbk9yT3B0R3JvdXBFbGVtZW50ID0gc3RkOjpleHBlcmltZW50YWw6
OnZhcmlhbnQ8UmVmUHRyPEhUTUxPcHRpb25FbGVtZW50PiwgUmVmUHRyPEhUTUxPcHRHcm91cEVs
ZW1lbnQ+PjsKLSAgICB1c2luZyBIVE1MRWxlbWVudE9ySW50ID0gc3RkOjpleHBlcmltZW50YWw6
OnZhcmlhbnQ8UmVmUHRyPEhUTUxFbGVtZW50PiwgaW50PjsKKyAgICB1c2luZyBPcHRpb25Pck9w
dEdyb3VwRWxlbWVudCA9IFZhcmlhbnQ8UmVmUHRyPEhUTUxPcHRpb25FbGVtZW50PiwgUmVmUHRy
PEhUTUxPcHRHcm91cEVsZW1lbnQ+PjsKKyAgICB1c2luZyBIVE1MRWxlbWVudE9ySW50ID0gVmFy
aWFudDxSZWZQdHI8SFRNTEVsZW1lbnQ+LCBpbnQ+OwogICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2Vw
dGlvbk9yPHZvaWQ+IGFkZChjb25zdCBPcHRpb25Pck9wdEdyb3VwRWxlbWVudCYsIE9wdGlvbmFs
PEhUTUxFbGVtZW50T3JJbnQ+IGJlZm9yZSk7CiAKICAgICB1c2luZyBOb2RlOjpyZW1vdmU7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RyYWNrRXZlbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJhY2tFdmVudC5jcHAJKHJldmlzaW9uIDIw
NzUwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJhY2tFdmVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgVHJhY2tFdmVudDo6VHJhY2tFdmVudChjb25zdCBB
dG9taWNTdHJpbgogICAgIDogRXZlbnQodHlwZSwgaW5pdGlhbGl6ZXIsIGlzVHJ1c3RlZCkKIHsK
ICAgICBpZiAoaW5pdGlhbGl6ZXIudHJhY2spIHsKLSAgICAgICAgbV90cmFjayA9IHN0ZDo6ZXhw
ZXJpbWVudGFsOjp2aXNpdChbXShjb25zdCBhdXRvJiB0cmFja2Jhc2UpIC0+IFRyYWNrQmFzZSog
eworICAgICAgICBtX3RyYWNrID0gV1RGOjp2aXNpdChbXShjb25zdCBhdXRvJiB0cmFja2Jhc2Up
IC0+IFRyYWNrQmFzZSogewogICAgICAgICAgICAgcmV0dXJuIHRyYWNrYmFzZS5nZXQoKTsKICAg
ICAgICAgfSwgKmluaXRpYWxpemVyLnRyYWNrKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL3RyYWNrL1RyYWNrRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL3RyYWNrL1RyYWNrRXZlbnQuaAkocmV2aXNpb24gMjA3NTA0KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC90cmFjay9UcmFja0V2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUcmFja0V2ZW50KHR5cGUs
IGNhbkJ1YmJsZSwgY2FuY2VsYWJsZSwgV1RGTW92ZSh0cmFjaykpKTsKICAgICB9CiAKLSAgICB1
c2luZyBUcmFja0V2ZW50VHJhY2sgPSBzdGQ6OmV4cGVyaW1lbnRhbDo6dmFyaWFudDxSZWZQdHI8
VmlkZW9UcmFjaz4sIFJlZlB0cjxBdWRpb1RyYWNrPiwgUmVmUHRyPFRleHRUcmFjaz4+OworICAg
IHVzaW5nIFRyYWNrRXZlbnRUcmFjayA9IFZhcmlhbnQ8UmVmUHRyPFZpZGVvVHJhY2s+LCBSZWZQ
dHI8QXVkaW9UcmFjaz4sIFJlZlB0cjxUZXh0VHJhY2s+PjsKIAogICAgIHN0cnVjdCBJbml0IDog
cHVibGljIEV2ZW50SW5pdCB7CiAgICAgICAgIE9wdGlvbmFsPFRyYWNrRXZlbnRUcmFjaz4gdHJh
Y2s7CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDc1MTApCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNiBAQAorMjAxNi0xMC0xOCAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgor
CisgICAgICAgIFJlcGxhY2Ugc3RkOjpleHBlcmltZW50YWw6OnZhcmlhbnQgd2l0aCBXVEY6OlZh
cmlhbnQgKG9yIHNpbWlsYXIpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjM2MjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBSZW5hbWUgc3RkOjpleHBlcmltZW50YWw6OnZhcmlhbnQsIFZhcmlhbnQuIE1v
dmUgaGVscGVycyBnZXQvaG9sZHNfYWx0ZXJuYXRpdmUvZXRjLgorICAgICAgICBpbnRvIHRoZSBX
VEYgbmFtZXNwYWNlLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmFyaWFu
dC5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAxNi0xMC0xOCAgQW5k
ZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBhbiBiZWZv
cmV1bmxvYWQgYWxlcnQgdG8gdGhlIFdlYktpdExlZ2FjeSBNaW5pQnJvd3NlcgpJbmRleDogVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmFyaWFudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmFyaWFudC5jcHAJKHJldmlzaW9uIDIwNzUwNCkK
KysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZhcmlhbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNywzNyArMzcsMzcgQEAgbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogCiBURVNU
KFdURl9WYXJpYW50LCBJbml0aWFsKQogewotICAgIHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50
PGludCwgZG91YmxlPiB2MTsKKyAgICBWYXJpYW50PGludCwgZG91YmxlPiB2MTsKICAgICBFWFBF
Q1RfVFJVRSh2MS5pbmRleCgpID09IDApOwotICAgIEVYUEVDVF9UUlVFKHN0ZDo6ZXhwZXJpbWVu
dGFsOjpnZXQ8aW50Pih2MSkgPT0gMCk7CisgICAgRVhQRUNUX1RSVUUoV1RGOjpnZXQ8aW50Pih2
MSkgPT0gMCk7CiAKICAgICBzdHJ1Y3QgVCB7CiAgICAgICAgIFQoKSA6IHZhbHVlKDE1KSB7IH0K
ICAgICAgICAgaW50IHZhbHVlOwogICAgIH07CiAKLSAgICBzdGQ6OmV4cGVyaW1lbnRhbDo6dmFy
aWFudDxULCBpbnQ+IHYyOworICAgIFZhcmlhbnQ8VCwgaW50PiB2MjsKICAgICBFWFBFQ1RfVFJV
RSh2Mi5pbmRleCgpID09IDApOwotICAgIEVYUEVDVF9UUlVFKHN0ZDo6ZXhwZXJpbWVudGFsOjpn
ZXQ8VD4odjIpLnZhbHVlID09IDE1KTsKKyAgICBFWFBFQ1RfVFJVRShXVEY6OmdldDxUPih2Miku
dmFsdWUgPT0gMTUpOwogfQogCiBURVNUKFdURl9WYXJpYW50LCBCYXNpYykKIHsKLSAgICBzdGQ6
OmV4cGVyaW1lbnRhbDo6dmFyaWFudDxpbnQsIGRvdWJsZT4gdmFyaWFudCA9IDE7CisgICAgVmFy
aWFudDxpbnQsIGRvdWJsZT4gdmFyaWFudCA9IDE7CiAgICAgRVhQRUNUX1RSVUUodmFyaWFudC5p
bmRleCgpID09IDApOwotICAgIEVYUEVDVF9UUlVFKHN0ZDo6ZXhwZXJpbWVudGFsOjpnZXQ8aW50
Pih2YXJpYW50KSA9PSAxKTsKLSAgICBFWFBFQ1RfVFJVRSgqc3RkOjpleHBlcmltZW50YWw6Omdl
dF9pZjxpbnQ+KHZhcmlhbnQpID09IDEpOwotICAgIEVYUEVDVF9UUlVFKHN0ZDo6ZXhwZXJpbWVu
dGFsOjpnZXRfaWY8ZG91YmxlPih2YXJpYW50KSA9PSBudWxscHRyKTsKLSAgICBFWFBFQ1RfVFJV
RShzdGQ6OmV4cGVyaW1lbnRhbDo6aG9sZHNfYWx0ZXJuYXRpdmU8aW50Pih2YXJpYW50KSk7Ci0g
ICAgRVhQRUNUX0ZBTFNFKHN0ZDo6ZXhwZXJpbWVudGFsOjpob2xkc19hbHRlcm5hdGl2ZTxkb3Vi
bGU+KHZhcmlhbnQpKTsKKyAgICBFWFBFQ1RfVFJVRShXVEY6OmdldDxpbnQ+KHZhcmlhbnQpID09
IDEpOworICAgIEVYUEVDVF9UUlVFKCpXVEY6OmdldF9pZjxpbnQ+KHZhcmlhbnQpID09IDEpOwor
ICAgIEVYUEVDVF9UUlVFKFdURjo6Z2V0X2lmPGRvdWJsZT4odmFyaWFudCkgPT0gbnVsbHB0cik7
CisgICAgRVhQRUNUX1RSVUUoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxpbnQ+KHZhcmlhbnQpKTsK
KyAgICBFWFBFQ1RfRkFMU0UoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxkb3VibGU+KHZhcmlhbnQp
KTsKIAogICAgIHZhcmlhbnQgPSAxLjA7CiAgICAgRVhQRUNUX1RSVUUodmFyaWFudC5pbmRleCgp
ID09IDEpOwotICAgIEVYUEVDVF9UUlVFKHN0ZDo6ZXhwZXJpbWVudGFsOjpnZXQ8ZG91YmxlPih2
YXJpYW50KSA9PSAxKTsKLSAgICBFWFBFQ1RfVFJVRSgqc3RkOjpleHBlcmltZW50YWw6OmdldF9p
Zjxkb3VibGU+KHZhcmlhbnQpID09IDEuMCk7Ci0gICAgRVhQRUNUX1RSVUUoc3RkOjpleHBlcmlt
ZW50YWw6OmdldF9pZjxpbnQ+KHZhcmlhbnQpID09IG51bGxwdHIpOwotICAgIEVYUEVDVF9UUlVF
KHN0ZDo6ZXhwZXJpbWVudGFsOjpob2xkc19hbHRlcm5hdGl2ZTxkb3VibGU+KHZhcmlhbnQpKTsK
LSAgICBFWFBFQ1RfRkFMU0Uoc3RkOjpleHBlcmltZW50YWw6OmhvbGRzX2FsdGVybmF0aXZlPGlu
dD4odmFyaWFudCkpOworICAgIEVYUEVDVF9UUlVFKFdURjo6Z2V0PGRvdWJsZT4odmFyaWFudCkg
PT0gMSk7CisgICAgRVhQRUNUX1RSVUUoKldURjo6Z2V0X2lmPGRvdWJsZT4odmFyaWFudCkgPT0g
MS4wKTsKKyAgICBFWFBFQ1RfVFJVRShXVEY6OmdldF9pZjxpbnQ+KHZhcmlhbnQpID09IG51bGxw
dHIpOworICAgIEVYUEVDVF9UUlVFKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8ZG91YmxlPih2YXJp
YW50KSk7CisgICAgRVhQRUNUX0ZBTFNFKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8aW50Pih2YXJp
YW50KSk7CiB9CiAKIFRFU1QoV1RGX1ZhcmlhbnQsIEJhc2ljVmlzaXRvcikKQEAgLTk0LDE4ICs5
NCwxOCBAQCBURVNUKFdURl9WYXJpYW50LCBCYXNpY1Zpc2l0b3IpCiAKICAgICBUeXBlIHR5cGUg
PSBUeXBlOjpOb25lOwogCi0gICAgc3RkOjpleHBlcmltZW50YWw6OnZhcmlhbnQ8aW50LCBmbG9h
dCwgU3RyaW5nPiB2YXJpYW50ID0gODsKLSAgICBzdGQ6OmV4cGVyaW1lbnRhbDo6dmlzaXQoVmlz
aXRvcih0eXBlKSwgdmFyaWFudCk7CisgICAgVmFyaWFudDxpbnQsIGZsb2F0LCBTdHJpbmc+IHZh
cmlhbnQgPSA4OworICAgIFdURjo6dmlzaXQoVmlzaXRvcih0eXBlKSwgdmFyaWFudCk7CiAgICAg
RVhQRUNUX1RSVUUoVHlwZTo6SW50ID09IHR5cGUpOwogCiAKICAgICB2YXJpYW50ID0gMS4wZjsK
LSAgICBzdGQ6OmV4cGVyaW1lbnRhbDo6dmlzaXQoVmlzaXRvcih0eXBlKSwgdmFyaWFudCk7Cisg
ICAgV1RGOjp2aXNpdChWaXNpdG9yKHR5cGUpLCB2YXJpYW50KTsKICAgICBFWFBFQ1RfVFJVRShU
eXBlOjpGbG9hdCA9PSB0eXBlKTsKIAogCiAgICAgdmFyaWFudCA9ICJoZWxsbyI7Ci0gICAgc3Rk
OjpleHBlcmltZW50YWw6OnZpc2l0KFZpc2l0b3IodHlwZSksIHZhcmlhbnQpOworICAgIFdURjo6
dmlzaXQoVmlzaXRvcih0eXBlKSwgdmFyaWFudCk7CiAgICAgRVhQRUNUX1RSVUUoVHlwZTo6U3Ry
aW5nID09IHR5cGUpOwogfQogCkBAIC0xMjYsMTggKzEyNiwxOCBAQCBURVNUKFdURl9WYXJpYW50
LCBWaXNpdG9yVXNpbmdNYWtlVmlzaXRvCiAgICAgICAgIFsmXShTdHJpbmcpIHsgdHlwZSA9IFR5
cGU6OlN0cmluZzsgfQogICAgICk7CiAKLSAgICBzdGQ6OmV4cGVyaW1lbnRhbDo6dmFyaWFudDxp
bnQsIGZsb2F0LCBTdHJpbmc+IHZhcmlhbnQgPSA4OwotICAgIHN0ZDo6ZXhwZXJpbWVudGFsOjp2
aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKKyAgICBWYXJpYW50PGludCwgZmxvYXQsIFN0cmluZz4g
dmFyaWFudCA9IDg7CisgICAgV1RGOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKICAgICBFWFBF
Q1RfVFJVRShUeXBlOjpJbnQgPT0gdHlwZSk7CiAKIAogICAgIHZhcmlhbnQgPSAxLjBmOwotICAg
IHN0ZDo6ZXhwZXJpbWVudGFsOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKKyAgICBXVEY6OnZp
c2l0KHZpc2l0b3IsIHZhcmlhbnQpOwogICAgIEVYUEVDVF9UUlVFKFR5cGU6OkZsb2F0ID09IHR5
cGUpOwogCiAKICAgICB2YXJpYW50ID0gImhlbGxvIjsKLSAgICBzdGQ6OmV4cGVyaW1lbnRhbDo6
dmlzaXQodmlzaXRvciwgdmFyaWFudCk7CisgICAgV1RGOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50
KTsKICAgICBFWFBFQ1RfVFJVRShUeXBlOjpTdHJpbmcgPT0gdHlwZSk7CiB9CiAKQEAgLTE0Nyw3
ICsxNDcsNyBAQCBURVNUKFdURl9WYXJpYW50LCBDb25zdHJ1Y3RvckRlc3RydWN0b3IpCiAKICAg
ICB7CiAgICAgICAgIGF1dG8gdW5pcXVlUHRyID0gc3RkOjptYWtlX3VuaXF1ZTxDb25zdHJ1Y3Rv
ckRlc3RydWN0b3JDb3VudGVyPigpOwotICAgICAgICBzdGQ6OmV4cGVyaW1lbnRhbDo6dmFyaWFu
dDxzdGQ6OnVuaXF1ZV9wdHI8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4sIGludD4gdiA9
IFdURk1vdmUodW5pcXVlUHRyKTsKKyAgICAgICAgVmFyaWFudDxzdGQ6OnVuaXF1ZV9wdHI8Q29u
c3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4sIGludD4gdiA9IFdURk1vdmUodW5pcXVlUHRyKTsK
IAogICAgICAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmNv
bnN0cnVjdGlvbkNvdW50KTsKICAgICAgICAgRVhQRUNUX0VRKDB1LCBDb25zdHJ1Y3RvckRlc3Ry
dWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNvdW50KTsKQEAgLTE2Miw3ICsxNjIsNyBAQCBURVNU
KFdURl9WYXJpYW50LCBSZWZQdHIpCiAgICAgewogICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOwog
ICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiByZWYoJmEpOwotICAgICAgICBzdGQ6OmV4cGVyaW1l
bnRhbDo6dmFyaWFudDxSZWZQdHI8UmVmTG9nZ2VyPiwgaW50PiB2ID0gcmVmOworICAgICAgICBW
YXJpYW50PFJlZlB0cjxSZWZMb2dnZXI+LCBpbnQ+IHYgPSByZWY7CiAgICAgfQogCiAgICAgQVNT
RVJUX1NUUkVRKCJyZWYoYSkgcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIo
KS5jX3N0cigpKTsKQEAgLTE3MCw3ICsxNzAsNyBAQCBURVNUKFdURl9WYXJpYW50LCBSZWZQdHIp
CiAgICAgewogICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOwogICAgICAgICBSZWZQdHI8UmVmTG9n
Z2VyPiByZWYoJmEpOwotICAgICAgICBzdGQ6OmV4cGVyaW1lbnRhbDo6dmFyaWFudDxSZWZQdHI8
UmVmTG9nZ2VyPiwgaW50PiB2ID0gV1RGTW92ZShyZWYpOworICAgICAgICBWYXJpYW50PFJlZlB0
cjxSZWZMb2dnZXI+LCBpbnQ+IHYgPSBXVEZNb3ZlKHJlZik7CiAgICAgfQogCiAgICAgQVNTRVJU
X1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOwpAQCAtMTgx
LDcgKzE4MSw3IEBAIFRFU1QoV1RGX1ZhcmlhbnQsIFJlZikKICAgICB7CiAgICAgICAgIFJlZkxv
Z2dlciBhKCJhIik7CiAgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZihhKTsKLSAgICAgICAgc3Rk
OjpleHBlcmltZW50YWw6OnZhcmlhbnQ8UmVmPFJlZkxvZ2dlcj4sIGludD4gdiA9IFdURk1vdmUo
cmVmKTsKKyAgICAgICAgVmFyaWFudDxSZWY8UmVmTG9nZ2VyPiwgaW50PiB2ID0gV1RGTW92ZShy
ZWYpOwogICAgIH0KIAogICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VM
b2dTdHIoKS5jX3N0cigpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292017</attachid>
            <date>2016-10-18 18:13:51 -0700</date>
            <delta_ts>2016-10-18 19:46:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-163626-20161018181016.patch</filename>
            <type>text/plain</type>
            <size>53135</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA3NTA0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBA
CisyMDE2LTEwLTE4ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVw
bGFjZSBzdGQ6OmV4cGVyaW1lbnRhbDo6dmFyaWFudCB3aXRoIFdURjo6VmFyaWFudCAob3Igc2lt
aWxhcikKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
MzYyNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJl
bmFtZSBzdGQ6OmV4cGVyaW1lbnRhbDo6dmFyaWFudCwgVmFyaWFudC4gTW92ZSBoZWxwZXJzIGdl
dC9ob2xkc19hbHRlcm5hdGl2ZS9ldGMuCisgICAgICAgIGludG8gdGhlIFdURiBuYW1lc3BhY2Uu
CisKKyAgICAgICAgKiBkb21qaXQvRE9NSklUUmVnLmg6CisgICAgICAgIChKU0M6OkRPTUpJVDo6
UmVnOjpncHIpOgorICAgICAgICAoSlNDOjpET01KSVQ6OlJlZzo6ZnByKToKKyAgICAgICAgKEpT
Qzo6RE9NSklUOjpSZWc6OmpzVmFsdWVSZWdzKToKKwogMjAxNi0xMC0xOCAgS2VpdGggTWlsbGVy
ICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBHZXRCeVZhbCB0byBHZXRCeUlk
IGNvbnZlcnNpb24gaW4gdGhlIERGRyBpcyBpbmNvcnJlY3QgZm9yIGdldHRlcnMgd2l0aCBjb250
cm9sIGZsb3cKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kb21qaXQvRE9NSklUUmVnLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RvbWppdC9ET01KSVRSZWcuaAko
cmV2aXNpb24gMjA3NTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RvbWppdC9ET01KSVRS
ZWcuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsMjEgKzcxLDIxIEBAIHB1YmxpYzoKICAgICBHUFJS
ZWcgZ3ByKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0dQUigpKTsKLSAgICAgICAg
cmV0dXJuIHN0ZDo6ZXhwZXJpbWVudGFsOjpnZXQ8R1BSUmVnPihtX3ZhcmlhbnQpOworICAgICAg
ICByZXR1cm4gV1RGOjpnZXQ8R1BSUmVnPihtX3ZhcmlhbnQpOwogICAgIH0KICAgICBGUFJSZWcg
ZnByKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0ZQUigpKTsKLSAgICAgICAgcmV0
dXJuIHN0ZDo6ZXhwZXJpbWVudGFsOjpnZXQ8RlBSUmVnPihtX3ZhcmlhbnQpOworICAgICAgICBy
ZXR1cm4gV1RGOjpnZXQ8RlBSUmVnPihtX3ZhcmlhbnQpOwogICAgIH0KICAgICBKU1ZhbHVlUmVn
cyBqc1ZhbHVlUmVncygpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaXNKU1ZhbHVlUmVn
cygpKTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6ZXhwZXJpbWVudGFsOjpnZXQ8SlNWYWx1ZVJlZ3M+
KG1fdmFyaWFudCk7CisgICAgICAgIHJldHVybiBXVEY6OmdldDxKU1ZhbHVlUmVncz4obV92YXJp
YW50KTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgc3RkOjpleHBlcmltZW50YWw6OnZhcmlhbnQ8
R1BSUmVnLCBGUFJSZWcsIEpTVmFsdWVSZWdzPiBtX3ZhcmlhbnQ7CisgICAgVmFyaWFudDxHUFJS
ZWcsIEZQUlJlZywgSlNWYWx1ZVJlZ3M+IG1fdmFyaWFudDsKIH07CiAKIH0gfQpJbmRleDogU291
cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIwNzUwNCkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMTYtMTAtMTggIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXBsYWNlIHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50IHdpdGggV1RGOjpW
YXJpYW50IChvciBzaW1pbGFyKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTYzNjI2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgUmVuYW1lIHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50LCBWYXJpYW50LiBN
b3ZlIGhlbHBlcnMgZ2V0L2hvbGRzX2FsdGVybmF0aXZlL2V0Yy4KKyAgICAgICAgaW50byB0aGUg
V1RGIG5hbWVzcGFjZS4KKworICAgICAgICAqIHd0Zi9Gb3J3YXJkLmg6CisgICAgICAgICogd3Rm
L1ZhcmlhbnQuaDoKKwogMjAxNi0xMC0xOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29t
PgogCiAgICAgICAgIFdURiBzaG91bGQgbWFrZSBpdCBlYXNpZXIgdG8gY3JlYXRlIHRocmVhZHMg
dGhhdCBkaWUgYXV0b21hdGljYWxseSBhZnRlciBpbmFjdGl2aXR5CkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9Gb3J3YXJkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRm9yd2FyZC5oCShy
ZXZpc2lvbiAyMDc1MDQpCisrKyBTb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDYgKzM0LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgUmVmOwogdGVt
cGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgUmVmUHRyOwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xh
c3MgU3RyaW5nQnVmZmVyOwogCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBjbGFzcyBWYXJpYW50
OwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBP
dmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4gY2xhc3MgVmVjdG9yOwogCiBjbGFz
cyBBdG9taWNTdHJpbmc7CkBAIC01MSwxOCArNTIsNiBAQCBjbGFzcyBUZXh0UG9zaXRpb247CiAK
IH0KIAotbmFtZXNwYWNlIHN0ZCB7Ci1uYW1lc3BhY2UgZXhwZXJpbWVudGFsIHsKLQotdGVtcGxh
dGU8dHlwZW5hbWUuLi4gVD4gY2xhc3MgdmFyaWFudDsKLQotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZS4uLiBUeXBlcz4KLXVzaW5nIHZhcmlhbnQgPSBzdGQ6OmV4cGVyaW1lbnRhbDo6dmFyaWFudDxU
eXBlcy4uLj47Ci0KLX0KLQogdXNpbmcgV1RGOjpBdG9taWNTdHJpbmc7CiB1c2luZyBXVEY6OkF0
b21pY1N0cmluZ0ltcGw7CiB1c2luZyBXVEY6OkJpbmFyeVNlbWFwaG9yZTsKQEAgLTg0LDQgKzcz
LDUgQEAgdXNpbmcgV1RGOjpTdHJpbmdCdWlsZGVyOwogdXNpbmcgV1RGOjpTdHJpbmdJbXBsOwog
dXNpbmcgV1RGOjpTdHJpbmdWaWV3OwogdXNpbmcgV1RGOjpUZXh0UG9zaXRpb247Cit1c2luZyBX
VEY6OlZhcmlhbnQ7CiB1c2luZyBXVEY6OlZlY3RvcjsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1Zh
cmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9WYXJpYW50LmgJKHJldmlzaW9u
IDIwNzUwNCkKKysrIFNvdXJjZS9XVEYvd3RmL1ZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NTksOCArNTksNyBAQAogCiAjaWYgIUNPTVBJTEVSKENMQU5HKSB8fCBXVEZfQ1BQX1NURF9WRVIg
Pj0gMTQKIAotbmFtZXNwYWNlIHN0ZCB7Ci1uYW1lc3BhY2UgZXhwZXJpbWVudGFsIHsKK25hbWVz
cGFjZSBXVEYgewogCiAjaWYgQ09NUElMRVJfU1VQUE9SVFMoRVhDRVBUSU9OUykKICNkZWZpbmUg
X19USFJPV19FWENFUFRJT04oX19leGNlcHRpb24pIHRocm93IF9fZXhjZXB0aW9uOwpAQCAtMTY1
LDcgKzE2NCw3IEBAIHN0cnVjdCBfX25leHRfaW5kZXh7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSAuLi4gX1R5cGVzPgotY2xhc3MgdmFyaWFudDsKK2NsYXNzIFZhcmlhbnQ7CiAKIHRlbXBsYXRl
PHR5cGVuYW1lPgogc3RydWN0IHZhcmlhbnRfc2l6ZTsKQEAgLTE4MCw3ICsxNzksNyBAQCB0ZW1w
bGF0ZSA8dHlwZW5hbWUgX1R5cGU+CiBzdHJ1Y3QgdmFyaWFudF9zaXplPGNvbnN0IHZvbGF0aWxl
IF9UeXBlPiA6IHZhcmlhbnRfc2l6ZTxfVHlwZT4ge307CiAKIHRlbXBsYXRlIDx0eXBlbmFtZS4u
LiBfVHlwZXM+Ci1zdHJ1Y3QgdmFyaWFudF9zaXplPHZhcmlhbnQ8X1R5cGVzLi4uPj4KK3N0cnVj
dCB2YXJpYW50X3NpemU8VmFyaWFudDxfVHlwZXMuLi4+PgogICAgIDogc3RkOjppbnRlZ3JhbF9j
b25zdGFudDxzaXplX3QsIHNpemVvZi4uLihfVHlwZXMpPiB7fTsKIAogdGVtcGxhdGU8c2l6ZV90
IF9JbmRleCx0eXBlbmFtZSBfVHlwZT4KQEAgLTIwNSw1MCArMjA0LDUwIEBAIHN0cnVjdCB2YXJp
YW50X2FsdGVybmF0aXZlPF9JbmRleCwgdm9sYXQKIH07CiAKIHRlbXBsYXRlPHNpemVfdCBfSW5k
ZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCB2YXJpYW50X2FsdGVybmF0aXZlPF9JbmRl
eCx2YXJpYW50PF9UeXBlcy4uLj4+eworc3RydWN0IHZhcmlhbnRfYWx0ZXJuYXRpdmU8X0luZGV4
LFZhcmlhbnQ8X1R5cGVzLi4uPj57CiAgICAgdXNpbmcgdHlwZT10eXBlbmFtZSBfX2luZGV4ZWRf
dHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlOwogfTsKIAogY29uc3RleHByIHNpemVfdCB2
YXJpYW50X25wb3M9LTE7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBf
VHlwZXM+Ci1jb25zdGV4cHIgX1R5cGUmIGdldCh2YXJpYW50PF9UeXBlcy4uLj4mKTsKK2NvbnN0
ZXhwciBfVHlwZSYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYpOwogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIF9UeXBlIGNvbnN0JiBnZXQo
dmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0Jik7Citjb25zdGV4cHIgX1R5cGUgY29uc3QmIGdldChW
YXJpYW50PF9UeXBlcy4uLj4gY29uc3QmKTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlw
ZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBfVHlwZSYmIGdldCh2YXJpYW50PF9UeXBlcy4u
Lj4mJik7Citjb25zdGV4cHIgX1R5cGUmJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+JiYpOwogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIGNv
bnN0IF9UeXBlJiYgZ2V0KHZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYmKTsKK2NvbnN0ZXhwciBj
b25zdCBfVHlwZSYmIGdldChWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmJik7CiAKIHRlbXBsYXRl
PHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciB0eXBlbmFt
ZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlJiBnZXQodmFyaWFudDxf
VHlwZXMuLi4+Jik7Citjb25zdGV4cHIgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9U
eXBlcy4uLj46Ol9fdHlwZSYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYpOwogCiB0ZW1wbGF0ZTxw
dHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgdHlwZW5hbWUg
X19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSYmIGdldCh2YXJpYW50PF9U
eXBlcy4uLj4mJik7Citjb25zdGV4cHIgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9U
eXBlcy4uLj46Ol9fdHlwZSYmIGdldChWYXJpYW50PF9UeXBlcy4uLj4mJik7CiAKIHRlbXBsYXRl
PHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KIGNvbnN0ZXhwciB0eXBlbmFt
ZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlIGNvbnN0JiBnZXQoCi0g
ICAgdmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0Jik7CisgICAgVmFyaWFudDxfVHlwZXMuLi4+IGNv
bnN0Jik7CiAKIHRlbXBsYXRlIDxwdHJkaWZmX3QgX0luZGV4LCB0eXBlbmFtZS4uLiBfVHlwZXM+
CiBjb25zdGV4cHIgY29uc3QgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LCBfVHlwZXMu
Li4+OjpfX3R5cGUgJiYKLWdldCh2YXJpYW50PF9UeXBlcy4uLj4gY29uc3QgJiYpOworZ2V0KFZh
cmlhbnQ8X1R5cGVzLi4uPiBjb25zdCAmJik7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5
cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90PF9UeXBlPiBn
ZXRfaWYodmFyaWFudDxfVHlwZXMuLi4+Jik7Citjb25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90
PF9UeXBlPiBnZXRfaWYoVmFyaWFudDxfVHlwZXMuLi4+Jik7CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90
PF9UeXBlIGNvbnN0PiBnZXRfaWYodmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0Jik7Citjb25zdGV4
cHIgc3RkOjphZGRfcG9pbnRlcl90PF9UeXBlIGNvbnN0PiBnZXRfaWYoVmFyaWFudDxfVHlwZXMu
Li4+IGNvbnN0Jik7CiAKIHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9U
eXBlcz4KLWNvbnN0ZXhwciBzdGQ6OmFkZF9wb2ludGVyX3Q8dHlwZW5hbWUgX19pbmRleGVkX3R5
cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZT4gZ2V0X2lmKHZhcmlhbnQ8X1R5cGVzLi4uPiYp
OworY29uc3RleHByIHN0ZDo6YWRkX3BvaW50ZXJfdDx0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxf
SW5kZXgsX1R5cGVzLi4uPjo6X190eXBlPiBnZXRfaWYoVmFyaWFudDxfVHlwZXMuLi4+Jik7CiAK
IHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KIGNvbnN0ZXhw
ciBzdGQ6OmFkZF9wb2ludGVyX3Q8dHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBl
cy4uLj46Ol9fdHlwZSBjb25zdD4gZ2V0X2lmKAotICAgIHZhcmlhbnQ8X1R5cGVzLi4uPiBjb25z
dCYpOworICAgIFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYpOwogCiB0ZW1wbGF0ZTxwdHJkaWZm
X3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+CiBzdHJ1Y3QgX192YXJpYW50X2FjY2Vzc29y
OwpAQCAtMzc5LDcgKzM3OCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50Pgogc3RydWN0
IF9fYW55X2JhY2t1cF9zdG9yYWdlX3JlcXVpcmVkOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSAuLi4g
X1R5cGVzPgotc3RydWN0IF9fYW55X2JhY2t1cF9zdG9yYWdlX3JlcXVpcmVkPHZhcmlhbnQ8X1R5
cGVzLi4uPiA+eworc3RydWN0IF9fYW55X2JhY2t1cF9zdG9yYWdlX3JlcXVpcmVkPFZhcmlhbnQ8
X1R5cGVzLi4uPiA+ewogICAgIHN0YXRpYyBjb25zdCBib29sIF9fdmFsdWU9CiAgICAgICAgIF9f
YW55X2JhY2t1cF9zdG9yYWdlX3JlcXVpcmVkX2ltcGw8MCxzaXplb2YuLi4oX1R5cGVzKSxfVHlw
ZXMuLi4+OjpfX3ZhbHVlOwogfTsKQEAgLTcwNCw3ICs3MDMsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVmFyaWFudD4KIHN0cnVjdCBfX3ZhcmlhbnRfaW5kaWNlczsKIAogdGVtcGxhdGU8dHlwZW5h
bWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX3ZhcmlhbnRfaW5kaWNlczx2YXJpYW50PF9UeXBlcy4u
Lj4+eworc3RydWN0IF9fdmFyaWFudF9pbmRpY2VzPFZhcmlhbnQ8X1R5cGVzLi4uPj57CiAgICAg
dHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfaW5kaWNlczxfVHlwZXMuLi4+OjpfX3R5cGUgX190eXBl
OwogfTsKIApAQCAtMTQzNiwxNyArMTQzNSwxNyBAQCBfX25vZXhjZXB0X3ZhcmlhbnRfc3dhcF9p
bXBsPF9fYWxsX3N3YXBwCiB7fTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNs
YXNzIHZhcmlhbnQ6CitjbGFzcyBWYXJpYW50OgogICAgICAgICBwcml2YXRlIF9fdmFyaWFudF9i
YXNlPAotICAgIHZhcmlhbnQ8X1R5cGVzLi4uPixfX2FsbF90cml2aWFsbHlfZGVzdHJ1Y3RpYmxl
PF9UeXBlcy4uLj46Ol9fdmFsdWU+CisgICAgVmFyaWFudDxfVHlwZXMuLi4+LF9fYWxsX3RyaXZp
YWxseV9kZXN0cnVjdGlibGU8X1R5cGVzLi4uPjo6X192YWx1ZT4KIHsKLSAgICB0eXBlZGVmIF9f
dmFyaWFudF9iYXNlPHZhcmlhbnQ8X1R5cGVzLi4uPixfX2FsbF90cml2aWFsbHlfZGVzdHJ1Y3Rp
YmxlPF9UeXBlcy4uLj46Ol9fdmFsdWU+IF9fYmFzZV90eXBlOworICAgIHR5cGVkZWYgX192YXJp
YW50X2Jhc2U8VmFyaWFudDxfVHlwZXMuLi4+LF9fYWxsX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8
X1R5cGVzLi4uPjo6X192YWx1ZT4gX19iYXNlX3R5cGU7CiAgICAgZnJpZW5kIF9fYmFzZV90eXBl
OwotICAgIGZyaWVuZCBzdHJ1Y3QgX19jb3B5X2NvbnN0cnVjdF9vcF90YWJsZTx2YXJpYW50PjsK
LSAgICBmcmllbmQgc3RydWN0IF9fY29weV9hc3NpZ25fb3BfdGFibGU8dmFyaWFudD47Ci0gICAg
ZnJpZW5kIHN0cnVjdCBfX21vdmVfY29uc3RydWN0X29wX3RhYmxlPHZhcmlhbnQ+OwotICAgIGZy
aWVuZCBzdHJ1Y3QgX19tb3ZlX2Fzc2lnbl9vcF90YWJsZTx2YXJpYW50PjsKLSAgICBmcmllbmQg
c3RydWN0IF9fZGVzdHJveV9vcF90YWJsZTx2YXJpYW50PjsKKyAgICBmcmllbmQgc3RydWN0IF9f
Y29weV9jb25zdHJ1Y3Rfb3BfdGFibGU8VmFyaWFudD47CisgICAgZnJpZW5kIHN0cnVjdCBfX2Nv
cHlfYXNzaWduX29wX3RhYmxlPFZhcmlhbnQ+OworICAgIGZyaWVuZCBzdHJ1Y3QgX19tb3ZlX2Nv
bnN0cnVjdF9vcF90YWJsZTxWYXJpYW50PjsKKyAgICBmcmllbmQgc3RydWN0IF9fbW92ZV9hc3Np
Z25fb3BfdGFibGU8VmFyaWFudD47CisgICAgZnJpZW5kIHN0cnVjdCBfX2Rlc3Ryb3lfb3BfdGFi
bGU8VmFyaWFudD47CiAgICAgCiAgICAgdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFt
ZSAuLi4gX1R5cGVzMj4KICAgICBmcmllbmQgc3RydWN0IF9fdmFyaWFudF9hY2Nlc3NvcjsKQEAg
LTE0NjcsMjQgKzE0NjYsMjQgQEAgY2xhc3MgdmFyaWFudDoKICAgICB2b2lkIF9fZGVzdHJveV9z
ZWxmKCl7CiAgICAgICAgIGlmKHZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkKICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgX19kZXN0cm95X29wX3RhYmxlPHZhcmlhbnQ+OjpfX2FwcGx5W2lu
ZGV4KCldKHRoaXMpOworICAgICAgICBfX2Rlc3Ryb3lfb3BfdGFibGU8VmFyaWFudD46Ol9fYXBw
bHlbaW5kZXgoKV0odGhpcyk7CiAgICAgICAgIF9faW5kZXg9LTE7CiAgICAgfQogICAgIAotICAg
IHB0cmRpZmZfdCBfX21vdmVfY29uc3RydWN0KHZhcmlhbnQmIF9fb3RoZXIpeworICAgIHB0cmRp
ZmZfdCBfX21vdmVfY29uc3RydWN0KFZhcmlhbnQmIF9fb3RoZXIpewogICAgICAgICBwdHJkaWZm
X3QgY29uc3QgX19vdGhlcl9pbmRleD1fX290aGVyLmluZGV4KCk7CiAgICAgICAgIGlmKF9fb3Ro
ZXJfaW5kZXg9PS0xKQogICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBfX21vdmVfY29u
c3RydWN0X29wX3RhYmxlPHZhcmlhbnQ+OjpfX2FwcGx5W19fb3RoZXJfaW5kZXhdKHRoaXMsX19v
dGhlcik7CisgICAgICAgIF9fbW92ZV9jb25zdHJ1Y3Rfb3BfdGFibGU8VmFyaWFudD46Ol9fYXBw
bHlbX19vdGhlcl9pbmRleF0odGhpcyxfX290aGVyKTsKICAgICAgICAgX19vdGhlci5fX2Rlc3Ry
b3lfc2VsZigpOwogICAgICAgICByZXR1cm4gX19vdGhlcl9pbmRleDsKICAgICB9CiAKLSAgICBw
dHJkaWZmX3QgX19jb3B5X2NvbnN0cnVjdCh2YXJpYW50IGNvbnN0JiBfX290aGVyKXsKKyAgICBw
dHJkaWZmX3QgX19jb3B5X2NvbnN0cnVjdChWYXJpYW50IGNvbnN0JiBfX290aGVyKXsKICAgICAg
ICAgcHRyZGlmZl90IGNvbnN0IF9fb3RoZXJfaW5kZXg9X19vdGhlci5pbmRleCgpOwogICAgICAg
ICBpZihfX290aGVyX2luZGV4PT0tMSkKICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAg
X19jb3B5X2NvbnN0cnVjdF9vcF90YWJsZTx2YXJpYW50Pjo6X19hcHBseVtfX290aGVyX2luZGV4
XSh0aGlzLF9fb3RoZXIpOworICAgICAgICBfX2NvcHlfY29uc3RydWN0X29wX3RhYmxlPFZhcmlh
bnQ+OjpfX2FwcGx5W19fb3RoZXJfaW5kZXhdKHRoaXMsX19vdGhlcik7CiAgICAgICAgIHJldHVy
biBfX290aGVyX2luZGV4OwogICAgIH0KIApAQCAtMTUzMSwzNSArMTUzMCwzNSBAQCBjbGFzcyB2
YXJpYW50OgogICAgIHN0cnVjdCBfX3ByaXZhdGVfdHlwZXt9OwogCiBwdWJsaWM6Ci0gICAgY29u
c3RleHByIHZhcmlhbnQoKQorICAgIGNvbnN0ZXhwciBWYXJpYW50KCkKICAgICAgICAgX19OT0VY
Q0VQVF8obm9leGNlcHQodHlwZW5hbWUgX19pbmRleGVkX3R5cGU8MCxfVHlwZXMuLi4+OjpfX3R5
cGUoKSkpOgogICAgICAgICBfX3N0b3JhZ2UoaW5fcGxhY2U8MD4pLAogICAgICAgICBfX2luZGV4
KDApCiAgICAge30KIAotICAgIGNvbnN0ZXhwciB2YXJpYW50KHR5cGVuYW1lIHN0ZDo6Y29uZGl0
aW9uYWw8X19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlLHZhcmlhbnQs
X19wcml2YXRlX3R5cGU+Ojp0eXBlJiYgX19vdGhlcikKKyAgICBjb25zdGV4cHIgVmFyaWFudCh0
eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPF9fYWxsX21vdmVfY29uc3RydWN0aWJsZTxfVHlwZXMu
Li4+Ojp2YWx1ZSxWYXJpYW50LF9fcHJpdmF0ZV90eXBlPjo6dHlwZSYmIF9fb3RoZXIpCiAgICAg
X19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92YXJpYW50X21vdmVfY29uc3RydWN0PF9UeXBlcy4uLj46
OnZhbHVlKToKICAgICAgICAgX19pbmRleChfX21vdmVfY29uc3RydWN0KF9fb3RoZXIpKQogICAg
IHt9CiAKLSAgICBjb25zdGV4cHIgdmFyaWFudCh0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPCFf
X2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsdmFyaWFudCxfX3ByaXZh
dGVfdHlwZT46OnR5cGUmJiBfX290aGVyKT1kZWxldGU7CisgICAgY29uc3RleHByIFZhcmlhbnQo
dHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDwhX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBl
cy4uLj46OnZhbHVlLFZhcmlhbnQsX19wcml2YXRlX3R5cGU+Ojp0eXBlJiYgX19vdGhlcik9ZGVs
ZXRlOwogICAgIAotICAgIGNvbnN0ZXhwciB2YXJpYW50KHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9u
YWw8X19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlLHZhcmlhbnQsX19w
cml2YXRlX3R5cGU+Ojp0eXBlJiBfX290aGVyKQorICAgIGNvbnN0ZXhwciBWYXJpYW50KHR5cGVu
YW1lIHN0ZDo6Y29uZGl0aW9uYWw8X19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46
OnZhbHVlLFZhcmlhbnQsX19wcml2YXRlX3R5cGU+Ojp0eXBlJiBfX290aGVyKQogICAgIF9fTk9F
WENFUFRfKF9fbm9leGNlcHRfdmFyaWFudF9ub25fY29uc3RfY29weV9jb25zdHJ1Y3Q8X1R5cGVz
Li4uPjo6dmFsdWUpOgogICAgICAgICBfX2luZGV4KF9fY29weV9jb25zdHJ1Y3QoX19vdGhlcikp
CiAgICAge30KIAotICAgIGNvbnN0ZXhwciB2YXJpYW50KHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9u
YWw8IV9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSx2YXJpYW50LF9f
cHJpdmF0ZV90eXBlPjo6dHlwZSYgX19vdGhlcik9ZGVsZXRlOworICAgIGNvbnN0ZXhwciBWYXJp
YW50KHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8IV9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxf
VHlwZXMuLi4+Ojp2YWx1ZSxWYXJpYW50LF9fcHJpdmF0ZV90eXBlPjo6dHlwZSYgX19vdGhlcik9
ZGVsZXRlOwogCi0gICAgY29uc3RleHByIHZhcmlhbnQodHlwZW5hbWUgc3RkOjpjb25kaXRpb25h
bDxfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsdmFyaWFudCxfX3By
aXZhdGVfdHlwZT46OnR5cGUgY29uc3QmIF9fb3RoZXIpCisgICAgY29uc3RleHByIFZhcmlhbnQo
dHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDxfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8X1R5cGVz
Li4uPjo6dmFsdWUsVmFyaWFudCxfX3ByaXZhdGVfdHlwZT46OnR5cGUgY29uc3QmIF9fb3RoZXIp
CiAgICAgX19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92YXJpYW50X2NvbnN0X2NvcHlfY29uc3RydWN0
PF9UeXBlcy4uLj46OnZhbHVlKToKICAgICAgICAgX19pbmRleChfX2NvcHlfY29uc3RydWN0KF9f
b3RoZXIpKQogICAgIHt9CiAKLSAgICBjb25zdGV4cHIgdmFyaWFudCh0eXBlbmFtZSBzdGQ6OmNv
bmRpdGlvbmFsPCFfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsdmFy
aWFudCxfX3ByaXZhdGVfdHlwZT46OnR5cGUgY29uc3QmIF9fb3RoZXIpPWRlbGV0ZTsKKyAgICBj
b25zdGV4cHIgVmFyaWFudCh0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPCFfX2FsbF9jb3B5X2Nv
bnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsVmFyaWFudCxfX3ByaXZhdGVfdHlwZT46OnR5
cGUgY29uc3QmIF9fb3RoZXIpPWRlbGV0ZTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHlwZSx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgZXhwbGljaXQgY29uc3RleHByIHZhcmlhbnQo
aW5fcGxhY2VfdHlwZV90PF9UeXBlPixfQXJncyYmIC4uLiBfX2FyZ3MpOgorICAgIGV4cGxpY2l0
IGNvbnN0ZXhwciBWYXJpYW50KGluX3BsYWNlX3R5cGVfdDxfVHlwZT4sX0FyZ3MmJiAuLi4gX19h
cmdzKToKICAgICAgICAgX19zdG9yYWdlKAogICAgICAgICAgICAgaW5fcGxhY2U8X190eXBlX2lu
ZGV4PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWU+LAogICAgICAgICAgICAgc3RkOjpmb3J3YXJk
PF9BcmdzPihfX2FyZ3MpLi4uKSwKQEAgLTE1NjksNyArMTU2OCw3IEBAIHB1YmxpYzoKICAgICB9
CiAKICAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICBl
eHBsaWNpdCBjb25zdGV4cHIgdmFyaWFudChpbl9wbGFjZV9pbmRleF90PF9JbmRleD4sX0FyZ3Mm
JiAuLi4gX19hcmdzKToKKyAgICBleHBsaWNpdCBjb25zdGV4cHIgVmFyaWFudChpbl9wbGFjZV9p
bmRleF90PF9JbmRleD4sX0FyZ3MmJiAuLi4gX19hcmdzKToKICAgICAgICAgX19zdG9yYWdlKGlu
X3BsYWNlPF9JbmRleD4sc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKSwKICAgICAgICAg
X19pbmRleChfSW5kZXgpCiAgICAgewpAQCAtMTU3Nyw3ICsxNTc2LDcgQEAgcHVibGljOgogICAg
IH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLSAgICBjb25zdGV4cHIgdmFy
aWFudChfVHlwZSYmIF9feCk6CisgICAgY29uc3RleHByIFZhcmlhbnQoX1R5cGUmJiBfX3gpOgog
ICAgICAgICBfX3N0b3JhZ2UoCiAgICAgICAgICAgICBpbl9wbGFjZTwKICAgICAgICAgICAgIF9f
dHlwZV9pbmRleF90b19jb25zdHJ1Y3Q8X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZT4sCkBAIC0x
NTkwLDcgKzE1ODksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8CiAgICAgICAgICAgICAgICAgIChfX2NvbnN0cnVjdGlibGVfbWF0Y2hlczxzdGQ6Omlu
aXRpYWxpemVyX2xpc3Q8X1R5cGU+LF9UeXBlcy4uLj46Ol9fdHlwZTo6X19sZW5ndGg+MCkKICAg
ICAgICAgICAgICA+Ojp0eXBlPgotICAgIGNvbnN0ZXhwciB2YXJpYW50KHN0ZDo6aW5pdGlhbGl6
ZXJfbGlzdDxfVHlwZT4gX194KToKKyAgICBjb25zdGV4cHIgVmFyaWFudChzdGQ6OmluaXRpYWxp
emVyX2xpc3Q8X1R5cGU+IF9feCk6CiAgICAgICAgIF9fc3RvcmFnZSgKICAgICAgICAgICAgIGlu
X3BsYWNlPAogICAgICAgICAgICAgX190eXBlX2luZGV4X3RvX2NvbnN0cnVjdDxzdGQ6OmluaXRp
YWxpemVyX2xpc3Q8X1R5cGU+LF9UeXBlcy4uLj46Ol9fdmFsdWU+LApAQCAtMTU5OSw3ICsxNTk4
LDcgQEAgcHVibGljOgogICAgIHt9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+
Ci0gICAgdmFyaWFudCYgb3BlcmF0b3I9KF9UeXBlJiYgX194KXsKKyAgICBWYXJpYW50JiBvcGVy
YXRvcj0oX1R5cGUmJiBfX3gpewogICAgICAgICBjb25zdGV4cHIgc2l6ZV90IF9JbmRleD0KICAg
ICAgICAgICAgIF9fdHlwZV9pbmRleF90b19jb25zdHJ1Y3Q8X1R5cGUsX1R5cGVzLi4uPjo6X192
YWx1ZTsKICAgICAgICAgaWYoX0luZGV4PT1fX2luZGV4KXsKQEAgLTE2MTEsNzYgKzE2MTAsNzYg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCi0gICAgdmFyaWFudCAm
b3BlcmF0b3I9KAorICAgIFZhcmlhbnQgJm9wZXJhdG9yPSgKICAgICAgICAgdHlwZW5hbWUgc3Rk
Ojpjb25kaXRpb25hbDwKICAgICAgICAgICAgICEoX19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9U
eXBlcy4uLj46OnZhbHVlICYmCiAgICAgICAgICAgICAgIF9fYWxsX21vdmVfY29uc3RydWN0aWJs
ZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgogICAgICAgICAgICAgICBfX2FsbF9jb3B5X2Fzc2lnbmFi
bGU8X1R5cGVzLi4uPjo6dmFsdWUpLAotICAgICAgICAgICAgdmFyaWFudCwgX19wcml2YXRlX3R5
cGU+Ojp0eXBlIGNvbnN0ICZfX290aGVyKSA9IGRlbGV0ZTsKKyAgICAgICAgICAgIFZhcmlhbnQs
IF9fcHJpdmF0ZV90eXBlPjo6dHlwZSBjb25zdCAmX19vdGhlcikgPSBkZWxldGU7CiAKLSAgICB2
YXJpYW50ICZvcGVyYXRvcj0oCisgICAgVmFyaWFudCAmb3BlcmF0b3I9KAogICAgICAgICB0eXBl
bmFtZSBzdGQ6OmNvbmRpdGlvbmFsPAogICAgICAgICAgICAgX19hbGxfY29weV9jb25zdHJ1Y3Rp
YmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCiAgICAgICAgICAgICAgICAgX19hbGxfbW92ZV9jb25z
dHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCiAgICAgICAgICAgICAgICAgX19hbGxfY29w
eV9hc3NpZ25hYmxlPF9UeXBlcy4uLj46OnZhbHVlLAotICAgICAgICAgICAgdmFyaWFudCwgX19w
cml2YXRlX3R5cGU+Ojp0eXBlIGNvbnN0ICZfX290aGVyKSB7CisgICAgICAgICAgICBWYXJpYW50
LCBfX3ByaXZhdGVfdHlwZT46OnR5cGUgY29uc3QgJl9fb3RoZXIpIHsKICAgICAgICAgaWYgKF9f
b3RoZXIudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKSB7CiAgICAgICAgICAgICBfX2Rlc3Ryb3lf
c2VsZigpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYoX19vdGhlci5pbmRleCgpPT1pbmRl
eCgpKXsKLSAgICAgICAgICAgIF9fY29weV9hc3NpZ25fb3BfdGFibGU8dmFyaWFudD46Ol9fYXBw
bHlbaW5kZXgoKV0odGhpcyxfX290aGVyKTsKKyAgICAgICAgICAgIF9fY29weV9hc3NpZ25fb3Bf
dGFibGU8VmFyaWFudD46Ol9fYXBwbHlbaW5kZXgoKV0odGhpcyxfX290aGVyKTsKICAgICAgICAg
fQogICAgICAgICBlbHNlewotICAgICAgICAgICAgX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6
Ol9fb3BfdGFibGU8dmFyaWFudD46Ol9fY29weV9hc3NpZ25bCisgICAgICAgICAgICBfX3JlcGxh
Y2VfY29uc3RydWN0X2hlbHBlcjo6X19vcF90YWJsZTxWYXJpYW50Pjo6X19jb3B5X2Fzc2lnblsK
ICAgICAgICAgICAgICAgICBfX290aGVyLmluZGV4KCldKHRoaXMsX19vdGhlcik7CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KLSAgICB2YXJpYW50ICZvcGVyYXRvcj0o
CisgICAgVmFyaWFudCAmb3BlcmF0b3I9KAogICAgICAgICB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlv
bmFsPAogICAgICAgICAgICAgIShfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6
dmFsdWUgJiYKICAgICAgICAgICAgICAgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4u
Lj46OnZhbHVlICYmCiAgICAgICAgICAgICAgIF9fYWxsX2NvcHlfYXNzaWduYWJsZTxfVHlwZXMu
Li4+Ojp2YWx1ZSksCi0gICAgICAgICAgICB2YXJpYW50LCBfX3ByaXZhdGVfdHlwZT46OnR5cGUg
Jl9fb3RoZXIpID0gZGVsZXRlOworICAgICAgICAgICAgVmFyaWFudCwgX19wcml2YXRlX3R5cGU+
Ojp0eXBlICZfX290aGVyKSA9IGRlbGV0ZTsKIAotICAgIHZhcmlhbnQgJm9wZXJhdG9yPSgKKyAg
ICBWYXJpYW50ICZvcGVyYXRvcj0oCiAgICAgICAgIHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8
CiAgICAgICAgICAgICBfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUg
JiYKICAgICAgICAgICAgICAgICBfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6
dmFsdWUgJiYKICAgICAgICAgICAgICAgICBfX2FsbF9jb3B5X2Fzc2lnbmFibGU8X1R5cGVzLi4u
Pjo6dmFsdWUsCi0gICAgICAgICAgICB2YXJpYW50LCBfX3ByaXZhdGVfdHlwZT46OnR5cGUgJl9f
b3RoZXIpIHsKKyAgICAgICAgICAgIFZhcmlhbnQsIF9fcHJpdmF0ZV90eXBlPjo6dHlwZSAmX19v
dGhlcikgewogICAgICAgICBpZihfX290aGVyLnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSl7CiAg
ICAgICAgICAgICBfX2Rlc3Ryb3lfc2VsZigpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYo
X19vdGhlci5pbmRleCgpPT1pbmRleCgpKXsKLSAgICAgICAgICAgIF9fY29weV9hc3NpZ25fb3Bf
dGFibGU8dmFyaWFudD46Ol9fYXBwbHlbaW5kZXgoKV0odGhpcyxfX290aGVyKTsKKyAgICAgICAg
ICAgIF9fY29weV9hc3NpZ25fb3BfdGFibGU8VmFyaWFudD46Ol9fYXBwbHlbaW5kZXgoKV0odGhp
cyxfX290aGVyKTsKICAgICAgICAgfQogICAgICAgICBlbHNlewotICAgICAgICAgICAgX19yZXBs
YWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9fb3BfdGFibGU8dmFyaWFudD46Ol9fY29weV9hc3NpZ25b
CisgICAgICAgICAgICBfX3JlcGxhY2VfY29uc3RydWN0X2hlbHBlcjo6X19vcF90YWJsZTxWYXJp
YW50Pjo6X19jb3B5X2Fzc2lnblsKICAgICAgICAgICAgICAgICBfX290aGVyLmluZGV4KCldKHRo
aXMsX19vdGhlcik7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KLSAg
ICB2YXJpYW50ICZvcGVyYXRvcj0oCisgICAgVmFyaWFudCAmb3BlcmF0b3I9KAogICAgICAgICB0
eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPAogICAgICAgICAgICAgIShfX2FsbF9tb3ZlX2NvbnN0
cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKICAgICAgICAgICAgICAgX19hbGxfbW92ZV9h
c3NpZ25hYmxlPF9UeXBlcy4uLj46OnZhbHVlKSwKLSAgICAgICAgICAgIHZhcmlhbnQsIF9fcHJp
dmF0ZV90eXBlPjo6dHlwZSAmJl9fb3RoZXIpID0gZGVsZXRlOworICAgICAgICAgICAgVmFyaWFu
dCwgX19wcml2YXRlX3R5cGU+Ojp0eXBlICYmX19vdGhlcikgPSBkZWxldGU7CiAKLSAgICB2YXJp
YW50ICZvcGVyYXRvcj0oCisgICAgVmFyaWFudCAmb3BlcmF0b3I9KAogICAgICAgICB0eXBlbmFt
ZSBzdGQ6OmNvbmRpdGlvbmFsPF9fYWxsX21vdmVfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2
YWx1ZSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2FsbF9tb3Zl
X2Fzc2lnbmFibGU8X1R5cGVzLi4uPjo6dmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyaWFudCwgX19wcml2YXRlX3R5cGU+Ojp0eXBlICYmCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVmFyaWFudCwgX19wcml2YXRlX3R5cGU+Ojp0eXBlICYmCiAg
ICAgICAgICAgICBfX290aGVyKSBfX05PRVhDRVBUXyhfX25vZXhjZXB0X3ZhcmlhbnRfbW92ZV9h
c3NpZ248X1R5cGVzLi4uPjo6dmFsdWUpIHsKICAgICAgICAgaWYgKF9fb3RoZXIudmFsdWVsZXNz
X2J5X2V4Y2VwdGlvbigpKSB7CiAgICAgICAgICAgICBfX2Rlc3Ryb3lfc2VsZigpOwogICAgICAg
ICB9CiAgICAgICAgIGVsc2UgaWYoX19vdGhlci5pbmRleCgpPT1pbmRleCgpKXsKLSAgICAgICAg
ICAgIF9fbW92ZV9hc3NpZ25fb3BfdGFibGU8dmFyaWFudD46Ol9fYXBwbHlbaW5kZXgoKV0odGhp
cyxfX290aGVyKTsKKyAgICAgICAgICAgIF9fbW92ZV9hc3NpZ25fb3BfdGFibGU8VmFyaWFudD46
Ol9fYXBwbHlbaW5kZXgoKV0odGhpcyxfX290aGVyKTsKICAgICAgICAgICAgIF9fb3RoZXIuX19k
ZXN0cm95X3NlbGYoKTsKICAgICAgICAgfQogICAgICAgICBlbHNlewotICAgICAgICAgICAgX19y
ZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9fb3BfdGFibGU8dmFyaWFudD46Ol9fbW92ZV9hc3Np
Z25bCisgICAgICAgICAgICBfX3JlcGxhY2VfY29uc3RydWN0X2hlbHBlcjo6X19vcF90YWJsZTxW
YXJpYW50Pjo6X19tb3ZlX2Fzc2lnblsKICAgICAgICAgICAgICAgICBfX290aGVyLmluZGV4KCld
KHRoaXMsX19vdGhlcik7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuICp0aGlzOwpAQCAtMTcw
OCwxNCArMTcwNywxNCBAQCBwdWJsaWM6CiAgICAgICAgIHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9u
YWw8CiAgICAgICAgICAgICBfX2FsbF9zd2FwcGFibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKICAg
ICAgICAgICAgICAgICBfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUs
Ci0gICAgICAgICAgICB2YXJpYW50LCBfX3ByaXZhdGVfdHlwZT46OnR5cGUKKyAgICAgICAgICAg
IFZhcmlhbnQsIF9fcHJpdmF0ZV90eXBlPjo6dHlwZQogICAgICAgICAgICAgJl9fb3RoZXIpIF9f
Tk9FWENFUFRfKF9fbm9leGNlcHRfdmFyaWFudF9zd2FwPF9UeXBlcy4uLj46OnZhbHVlKSB7CiAg
ICAgICAgIGlmIChfX290aGVyLmluZGV4KCkgPT0gaW5kZXgoKSkgewogICAgICAgICAgICAgaWYo
IXZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkKLSAgICAgICAgICAgICAgICBfX3N3YXBfb3BfdGFi
bGU8dmFyaWFudD46Ol9fYXBwbHlbaW5kZXgoKV0oKnRoaXMsX19vdGhlcik7CisgICAgICAgICAg
ICAgICAgX19zd2FwX29wX3RhYmxlPFZhcmlhbnQ+OjpfX2FwcGx5W2luZGV4KCldKCp0aGlzLF9f
b3RoZXIpOwogICAgICAgICB9CiAgICAgICAgIGVsc2V7Ci0gICAgICAgICAgICB2YXJpYW50IF9f
dGVtcChzdGQ6Om1vdmUoX19vdGhlcikpOworICAgICAgICAgICAgVmFyaWFudCBfX3RlbXAoc3Rk
Ojptb3ZlKF9fb3RoZXIpKTsKICAgICAgICAgICAgIF9fb3RoZXIuX19pbmRleD1fX290aGVyLl9f
bW92ZV9jb25zdHJ1Y3QoKnRoaXMpOwogICAgICAgICAgICAgX19pbmRleD1fX21vdmVfY29uc3Ry
dWN0KF9fdGVtcCk7CiAgICAgICAgIH0KQEAgLTE3MjMsOSArMTcyMiw5IEBAIHB1YmxpYzoKIH07
CiAKIHRlbXBsYXRlPD4KLWNsYXNzIHZhcmlhbnQ8PnsKK2NsYXNzIFZhcmlhbnQ8PnsKIHB1Ymxp
YzoKLSAgICB2YXJpYW50KCk9ZGVsZXRlOworICAgIFZhcmlhbnQoKT1kZWxldGU7CiAgICAgCiAg
ICAgY29uc3RleHByIGJvb2wgdmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpIGNvbnN0IF9fTk9FWENF
UFR7CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTczNCwxNCArMTczMywxNCBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKLSAgICB2b2lkIHN3YXAodmFyaWFudCYpe30K
KyAgICB2b2lkIHN3YXAoVmFyaWFudCYpe30KIH07CiAKIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBf
VHlwZXM+CiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxfX2FsbF9zd2FwcGFibGU8X1R5cGVzLi4u
Pjo6dmFsdWUgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2FsbF9tb3ZlX2NvbnN0
cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk
Pjo6dHlwZQotc3dhcCh2YXJpYW50PF9UeXBlcy4uLj4gJl9fbGhzLCB2YXJpYW50PF9UeXBlcy4u
Lj4gJl9fcmhzKSBfX05PRVhDRVBUXygKK3N3YXAoVmFyaWFudDxfVHlwZXMuLi4+ICZfX2xocywg
VmFyaWFudDxfVHlwZXMuLi4+ICZfX3JocykgX19OT0VYQ0VQVF8oCiAgICAgX19ub2V4Y2VwdF92
YXJpYW50X3N3YXA8X1R5cGVzLi4uPjo6dmFsdWUpIHsKICAgICBfX2xocy5zd2FwKF9fcmhzKTsK
IH0KQEAgLTE3NDksOTggKzE3NDgsOTggQEAgc3dhcCh2YXJpYW50PF9UeXBlcy4uLj4gJl9fbGhz
LCB2YXJpYW50PAogdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVz
Pgogc3RydWN0IF9fdmFyaWFudF9hY2Nlc3NvcnsKICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faW5k
ZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUgX190eXBlOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgX190eXBlJiBnZXQodmFyaWFudDxfVHlwZXMuLi4+JiBfX3YpeworICAgIHN0YXRp
YyBjb25zdGV4cHIgX190eXBlJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+JiBfX3YpewogICAgICAg
ICByZXR1cm4gX192Ll9fc3RvcmFnZS5fX2dldChpbl9wbGFjZTxfSW5kZXg+KTsKICAgICB9Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBfX3R5cGUgY29uc3QmIGdldCh2YXJpYW50PF9UeXBlcy4uLj4g
Y29uc3QmIF9fdil7CisgICAgc3RhdGljIGNvbnN0ZXhwciBfX3R5cGUgY29uc3QmIGdldChWYXJp
YW50PF9UeXBlcy4uLj4gY29uc3QmIF9fdil7CiAgICAgICAgIHJldHVybiBfX3YuX19zdG9yYWdl
Ll9fZ2V0KGluX3BsYWNlPF9JbmRleD4pOwogICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHByIF9f
dHlwZSYmIGdldCh2YXJpYW50PF9UeXBlcy4uLj4mJiBfX3YpeworICAgIHN0YXRpYyBjb25zdGV4
cHIgX190eXBlJiYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYmIF9fdil7CiAgICAgICAgIHJldHVy
biBfX3YuX19zdG9yYWdlLl9fZ2V0X3JyZWYoaW5fcGxhY2U8X0luZGV4Pik7CiAgICAgfQotICAg
IHN0YXRpYyBjb25zdGV4cHIgY29uc3QgX190eXBlJiYgZ2V0KHZhcmlhbnQ8X1R5cGVzLi4uPiBj
b25zdCYmIF9fdil7CisgICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBfX3R5cGUmJiBnZXQoVmFy
aWFudDxfVHlwZXMuLi4+IGNvbnN0JiYgX192KXsKICAgICAgICAgcmV0dXJuIF9fdi5fX3N0b3Jh
Z2UuX19nZXRfcnJlZihpbl9wbGFjZTxfSW5kZXg+KTsKICAgICB9CiB9OwogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIF9UeXBlJiBnZXQo
dmFyaWFudDxfVHlwZXMuLi4+JiBfX3YpeworY29uc3RleHByIF9UeXBlJiBnZXQoVmFyaWFudDxf
VHlwZXMuLi4+JiBfX3YpewogICAgIHJldHVybiBnZXQ8X190eXBlX2luZGV4PF9UeXBlLF9UeXBl
cy4uLj46Ol9fdmFsdWU+KF9fdik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVu
YW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgX1R5cGUmJiBnZXQodmFyaWFudDxfVHlwZXMuLi4+
JiYgX192KXsKK2NvbnN0ZXhwciBfVHlwZSYmIGdldChWYXJpYW50PF9UeXBlcy4uLj4mJiBfX3Yp
ewogICAgIHJldHVybiBnZXQ8X190eXBlX2luZGV4PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWU+
KHN0ZDo6bW92ZShfX3YpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUg
Li4uIF9UeXBlcz4KLWNvbnN0ZXhwciBfVHlwZSBjb25zdCYgZ2V0KHZhcmlhbnQ8X1R5cGVzLi4u
PiBjb25zdCYgX192KXsKK2NvbnN0ZXhwciBfVHlwZSBjb25zdCYgZ2V0KFZhcmlhbnQ8X1R5cGVz
Li4uPiBjb25zdCYgX192KXsKICAgICByZXR1cm4gZ2V0PF9fdHlwZV9pbmRleDxfVHlwZSxfVHlw
ZXMuLi4+OjpfX3ZhbHVlPihfX3YpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBl
bmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIGNvbnN0IF9UeXBlJiYgZ2V0KHZhcmlhbnQ8X1R5
cGVzLi4uPiBjb25zdCYmIF9fdil7Citjb25zdGV4cHIgY29uc3QgX1R5cGUmJiBnZXQoVmFyaWFu
dDxfVHlwZXMuLi4+IGNvbnN0JiYgX192KXsKICAgICByZXR1cm4gZ2V0PF9fdHlwZV9pbmRleDxf
VHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlPihzdGQ6Om1vdmUoX192KSk7CiB9CiAKIAogdGVtcGxh
dGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIHR5cGVu
YW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUgY29uc3QmIGdldCh2
YXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fdil7Citjb25zdGV4cHIgdHlwZW5hbWUgX19pbmRl
eGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSBjb25zdCYgZ2V0KFZhcmlhbnQ8X1R5
cGVzLi4uPiBjb25zdCYgX192KXsKICAgICByZXR1cm4gKigKICAgICAgICAgKF9JbmRleCE9X192
LmluZGV4KCkpCi0gICAgICAgICAgICA/ICZfX3Rocm93X2JhZF92YXJpYW50X2FjY2Vzczx0eXBl
bmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlIGNvbnN0Jj4oIkJh
ZCB2YXJpYW50IGluZGV4IGluIGdldCIpCisgICAgICAgICAgICA/ICZfX3Rocm93X2JhZF92YXJp
YW50X2FjY2Vzczx0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190
eXBlIGNvbnN0Jj4oIkJhZCBWYXJpYW50IGluZGV4IGluIGdldCIpCiAgICAgICAgICAgICA6ICZf
X3ZhcmlhbnRfYWNjZXNzb3I8X0luZGV4LF9UeXBlcy4uLj46OmdldChfX3YpCiAgICAgKTsKIH0K
IAogdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3Rl
eHByIHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUmIGdl
dCh2YXJpYW50PF9UeXBlcy4uLj4mIF9fdil7Citjb25zdGV4cHIgdHlwZW5hbWUgX19pbmRleGVk
X3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYg
X192KXsKICAgICByZXR1cm4gKigKICAgICAgICAgKF9JbmRleCE9X192LmluZGV4KCkpCi0gICAg
ICAgICAgICA/ICZfX3Rocm93X2JhZF92YXJpYW50X2FjY2Vzczx0eXBlbmFtZSBfX2luZGV4ZWRf
dHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlJj4oIkJhZCB2YXJpYW50IGluZGV4IGluIGdl
dCIpCisgICAgICAgICAgICA/ICZfX3Rocm93X2JhZF92YXJpYW50X2FjY2Vzczx0eXBlbmFtZSBf
X2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlJj4oIkJhZCBWYXJpYW50IGlu
ZGV4IGluIGdldCIpCiAgICAgICAgICAgICA6ICZfX3ZhcmlhbnRfYWNjZXNzb3I8X0luZGV4LF9U
eXBlcy4uLj46OmdldChfX3YpCiAgICAgKTsKIH0KIAogdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRl
eCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIHR5cGVuYW1lIF9faW5kZXhlZF90eXBl
PF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUmJiBnZXQodmFyaWFudDxfVHlwZXMuLi4+JiYgX192
KXsKK2NvbnN0ZXhwciB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6
X190eXBlJiYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYmIF9fdil7CiAgICAgcmV0dXJuIF9fdmFy
aWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4uPjo6Z2V0KAotICAgICAgICAoKChfSW5kZXgh
PV9fdi5pbmRleCgpKSA/IF9fdGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzPGludD4oIkJhZCB2YXJp
YW50IGluZGV4IGluIGdldCIpIDogMCksIHN0ZDo6bW92ZShfX3YpKQorICAgICAgICAoKChfSW5k
ZXghPV9fdi5pbmRleCgpKSA/IF9fdGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzPGludD4oIkJhZCBW
YXJpYW50IGluZGV4IGluIGdldCIpIDogMCksIHN0ZDo6bW92ZShfX3YpKQogICAgICk7CiB9CiAK
IHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhw
ciBjb25zdCB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBl
JiYgZ2V0KHZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYmIF9fdil7Citjb25zdGV4cHIgY29uc3Qg
dHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSYmIGdldChW
YXJpYW50PF9UeXBlcy4uLj4gY29uc3QmJiBfX3YpewogICAgIHJldHVybiBfX3ZhcmlhbnRfYWNj
ZXNzb3I8X0luZGV4LF9UeXBlcy4uLj46OmdldCgKLSAgICAgICAgKCgoX0luZGV4IT1fX3YuaW5k
ZXgoKSkgPyBfX3Rocm93X2JhZF92YXJpYW50X2FjY2VzczxpbnQ+KCJCYWQgdmFyaWFudCBpbmRl
eCBpbiBnZXQiKSA6IDApLCBzdGQ6Om1vdmUoX192KSkKKyAgICAgICAgKCgoX0luZGV4IT1fX3Yu
aW5kZXgoKSkgPyBfX3Rocm93X2JhZF92YXJpYW50X2FjY2VzczxpbnQ+KCJCYWQgVmFyaWFudCBp
bmRleCBpbiBnZXQiKSA6IDApLCBzdGQ6Om1vdmUoX192KSkKICAgICApOwogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIHN0ZDo6YWRk
X3BvaW50ZXJfdDxfVHlwZT4gZ2V0X2lmKHZhcmlhbnQ8X1R5cGVzLi4uPiYgX192KXsKK2NvbnN0
ZXhwciBzdGQ6OmFkZF9wb2ludGVyX3Q8X1R5cGU+IGdldF9pZihWYXJpYW50PF9UeXBlcy4uLj4m
IF9fdil7CiAgICAgcmV0dXJuIChfX3R5cGVfaW5kZXg8X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1
ZSE9X192LmluZGV4KCkpP251bGxwdHI6JmdldDxfVHlwZT4oX192KTsKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBzdGQ6OmFkZF9w
b2ludGVyX3Q8X1R5cGUgY29uc3Q+IGdldF9pZih2YXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9f
dil7Citjb25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90PF9UeXBlIGNvbnN0PiBnZXRfaWYoVmFy
aWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3YpewogICAgIHJldHVybiAoX190eXBlX2luZGV4PF9U
eXBlLF9UeXBlcy4uLj46Ol9fdmFsdWUhPV9fdi5pbmRleCgpKT9udWxscHRyOiZnZXQ8X1R5cGU+
KF9fdik7CiB9CiAKIHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBl
cz4KLWNvbnN0ZXhwciBzdGQ6OmFkZF9wb2ludGVyX3Q8dHlwZW5hbWUgX19pbmRleGVkX3R5cGU8
X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZT4gZ2V0X2lmKHZhcmlhbnQ8X1R5cGVzLi4uPiYgX192
KXsKK2NvbnN0ZXhwciBzdGQ6OmFkZF9wb2ludGVyX3Q8dHlwZW5hbWUgX19pbmRleGVkX3R5cGU8
X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZT4gZ2V0X2lmKFZhcmlhbnQ8X1R5cGVzLi4uPiYgX192
KXsKICAgICByZXR1cm4gKChfSW5kZXghPV9fdi5pbmRleCgpKT9udWxscHRyOgogICAgICAgICAm
X192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxfVHlwZXMuLi4+OjpnZXQoX192KSk7CiB9CiAKIHRl
bXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KIGNvbnN0ZXhwciBz
dGQ6OmFkZF9wb2ludGVyX3Q8dHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4u
Lj46Ol9fdHlwZSBjb25zdD4gZ2V0X2lmKAotICAgIHZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYg
X192KXsKKyAgICBWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fdil7CiAgICAgcmV0dXJuICgo
X0luZGV4IT1fX3YuaW5kZXgoKSk/bnVsbHB0cjoKICAgICAgICAgJl9fdmFyaWFudF9hY2Nlc3Nv
cjxfSW5kZXgsX1R5cGVzLi4uPjo6Z2V0KF9fdikpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIGJvb2wgaG9sZHNfYWx0ZXJuYXRp
dmUodmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3YpIF9fTk9FWENFUFR7Citjb25zdGV4cHIg
Ym9vbCBob2xkc19hbHRlcm5hdGl2ZShWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fdikgX19O
T0VYQ0VQVHsKICAgICByZXR1cm4gX192LmluZGV4KCk9PV9fdHlwZV9pbmRleDxfVHlwZSxfVHlw
ZXMuLi4+OjpfX3ZhbHVlOwogfQogCkBAIC0xODU5LDcgKzE4NTgsNyBAQCBzdHJ1Y3QgX192aXNp
dG9yX3JldHVybl90eXBlPF9WaXNpdG9yLF9ICiAKIHRlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9y
LHR5cGVuYW1lIC4uLiBfVHlwZXM+CiBzdHJ1Y3QgX192aXNpdG9yX3RhYmxlewotICAgIHR5cGVk
ZWYgdmFyaWFudDxfVHlwZXMuLi4+IF9fdmFyaWFudF90eXBlOworICAgIHR5cGVkZWYgVmFyaWFu
dDxfVHlwZXMuLi4+IF9fdmFyaWFudF90eXBlOwogICAgIHR5cGVkZWYgdHlwZW5hbWUgX192aXNp
dG9yX3JldHVybl90eXBlPF9WaXNpdG9yLF9UeXBlcy4uLj46Ol9fdHlwZSBfX3JldHVybl90eXBl
OwogICAgIHR5cGVkZWYgX19yZXR1cm5fdHlwZSAoKl9fZnVuY190eXBlKShfVmlzaXRvciYsX192
YXJpYW50X3R5cGUmKTsKIApAQCAtMTg3OCw5ICsxODc3LDkgQEAgY29uc3QgdHlwZW5hbWUgX192
aXNpdG9yX3RhYmxlPF9WaXNpdG9yLAogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBl
bmFtZSAuLi4gX1R5cGVzPgogY29uc3RleHByIHR5cGVuYW1lIF9fdmlzaXRvcl9yZXR1cm5fdHlw
ZTxfVmlzaXRvcixfVHlwZXMuLi4+OjpfX3R5cGUKLXZpc2l0KF9WaXNpdG9yJiYgX192aXNpdG9y
LHZhcmlhbnQ8X1R5cGVzLi4uPiYgX192KXsKK3Zpc2l0KF9WaXNpdG9yJiYgX192aXNpdG9yLFZh
cmlhbnQ8X1R5cGVzLi4uPiYgX192KXsKICAgICByZXR1cm4gKF9fdi52YWx1ZWxlc3NfYnlfZXhj
ZXB0aW9uKCkpCi0gICAgICAgID8gX190aHJvd19iYWRfdmFyaWFudF9hY2Nlc3M8dHlwZW5hbWUg
X192aXNpdG9yX3JldHVybl90eXBlPF9WaXNpdG9yLF9UeXBlcy4uLj46Ol9fdHlwZT4oIlZpc2l0
aW5nIG9mIGVtcHR5IHZhcmlhbnQiKQorICAgICAgICA/IF9fdGhyb3dfYmFkX3ZhcmlhbnRfYWNj
ZXNzPHR5cGVuYW1lIF9fdmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcixfVHlwZXMuLi4+Ojpf
X3R5cGU+KCJWaXNpdGluZyBvZiBlbXB0eSBWYXJpYW50IikKICAgICAgICAgOiBfX3Zpc2l0b3Jf
dGFibGU8X1Zpc2l0b3IsX1R5cGVzLi4uPjo6X190cmFtcG9saW5lW19fdi5pbmRleCgpXShfX3Zp
c2l0b3IsX192KTsKIH0KIApAQCAtMTk0NCw3ICsxOTQzLDcgQEAgc3RydWN0IF9fdmlzaXRfaGVs
cGVyMjwtMSxfVmFyaWFudEluZGV4LAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5
cGVuYW1lIC4uLiBfVmFyaWFudHM+CiAgICAgc3RhdGljIGNvbnN0ZXhwciB0eXBlbmFtZSBfX211
bHRpX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1ZhcmlhbnRzLi4uPjo6X190eXBlCiAg
ICAgX192aXNpdChfVmlzaXRvciYsX1ZhcmlhbnRzJiYgLi4uKXsKLSAgICAgICAgcmV0dXJuIF9f
dGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzPHR5cGVuYW1lIF9fbXVsdGlfdmlzaXRvcl9yZXR1cm5f
dHlwZTxfVmlzaXRvcixfVmFyaWFudHMuLi4+OjpfX3R5cGU+KCJWaXNpdGluZyBvZiBlbXB0eSB2
YXJpYW50Iik7CisgICAgICAgIHJldHVybiBfX3Rocm93X2JhZF92YXJpYW50X2FjY2Vzczx0eXBl
bmFtZSBfX211bHRpX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1ZhcmlhbnRzLi4uPjo6
X190eXBlPigiVmlzaXRpbmcgb2YgZW1wdHkgVmFyaWFudCIpOwogICAgIH0KIH07CiAKQEAgLTE5
NTIsNyArMTk1MSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50Pgogc3RydWN0IF9fdmFy
aWFudF90eXBlX2NvdW50OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0
IF9fdmFyaWFudF90eXBlX2NvdW50PHZhcmlhbnQ8X1R5cGVzLi4uPj57CitzdHJ1Y3QgX192YXJp
YW50X3R5cGVfY291bnQ8VmFyaWFudDxfVHlwZXMuLi4+PnsKICAgICBzdGF0aWMgY29uc3RleHBy
IHNpemVfdCBfX3ZhbHVlPXNpemVvZi4uLihfVHlwZXMpOwogfTsKIApAQCAtMTk4OSw1MCArMTk4
OCw1MCBAQCB2aXNpdChfVmlzaXRvciYmIF9fdmlzaXRvcixfVmFyaWFudHMmJiAuCiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KHZh
cmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19saHMsdmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBf
X3Jocyl7Citjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25z
dCYgX19saHMsVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3Jocyl7CiAgICAgcmV0dXJuIChf
X2xocy5pbmRleCgpPT1fX3Jocy5pbmRleCgpKSAmJgogICAgICAgICAoKF9fbGhzLmluZGV4KCk9
PS0xKSB8fAotICAgICAgICAgX19lcXVhbGl0eV9vcF90YWJsZTx2YXJpYW50PF9UeXBlcy4uLj4+
OjpfX2VxdWFsaXR5X2NvbXBhcmVbX19saHMuaW5kZXgoKV0oCisgICAgICAgICBfX2VxdWFsaXR5
X29wX3RhYmxlPFZhcmlhbnQ8X1R5cGVzLi4uPj46Ol9fZXF1YWxpdHlfY29tcGFyZVtfX2xocy5p
bmRleCgpXSgKICAgICAgICAgICAgICBfX2xocyxfX3JocykpOwogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIGJvb2wgb3BlcmF0b3IhPSh2YXJpYW50PF9UeXBl
cy4uLj4gY29uc3QmIF9fbGhzLHZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19yaHMpeworY29u
c3RleHByIGJvb2wgb3BlcmF0b3IhPShWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fbGhzLFZh
cmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19yaHMpewogICAgIHJldHVybiAhKF9fbGhzPT1fX3Jo
cyk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgYm9vbCBv
cGVyYXRvcjwodmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX2xocyx2YXJpYW50PF9UeXBlcy4u
Lj4gY29uc3QmIF9fcmhzKXsKK2NvbnN0ZXhwciBib29sIG9wZXJhdG9yPChWYXJpYW50PF9UeXBl
cy4uLj4gY29uc3QmIF9fbGhzLFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19yaHMpewogICAg
IHJldHVybiAoX19saHMuaW5kZXgoKTxfX3Jocy5pbmRleCgpKSB8fAogICAgICAgICAoKF9fbGhz
LmluZGV4KCk9PV9fcmhzLmluZGV4KCkpICYmCiAgICAgICAgICAoKF9fbGhzLmluZGV4KCkhPS0x
KSAmJgotICAgICAgICAgIF9fbGVzc190aGFuX29wX3RhYmxlPHZhcmlhbnQ8X1R5cGVzLi4uPj46
OgorICAgICAgICAgIF9fbGVzc190aGFuX29wX3RhYmxlPFZhcmlhbnQ8X1R5cGVzLi4uPj46Ogog
ICAgICAgICAgIF9fbGVzc190aGFuX2NvbXBhcmVbX19saHMuaW5kZXgoKV0oX19saHMsX19yaHMp
KSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgYm9vbCBv
cGVyYXRvcj4odmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX2xocyx2YXJpYW50PF9UeXBlcy4u
Lj4gY29uc3QmIF9fcmhzKXsKK2NvbnN0ZXhwciBib29sIG9wZXJhdG9yPihWYXJpYW50PF9UeXBl
cy4uLj4gY29uc3QmIF9fbGhzLFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19yaHMpewogICAg
IHJldHVybiBfX3JoczxfX2xoczsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4K
LWNvbnN0ZXhwciBib29sIG9wZXJhdG9yPj0odmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX2xo
cyx2YXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fcmhzKXsKK2NvbnN0ZXhwciBib29sIG9wZXJh
dG9yPj0oVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX2xocyxWYXJpYW50PF9UeXBlcy4uLj4g
Y29uc3QmIF9fcmhzKXsKICAgICByZXR1cm4gIShfX2xoczxfX3Jocyk7CiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KHZhcmlhbnQ8
X1R5cGVzLi4uPiBjb25zdCYgX19saHMsdmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3Jocyl7
Citjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19s
aHMsVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3Jocyl7CiAgICAgcmV0dXJuICEoX19saHM+
X19yaHMpOwogfQogCi1zdHJ1Y3QgbW9ub3N0YXRle307CitzdHJ1Y3QgTW9ub3N0YXRle307CiAK
LWNvbnN0ZXhwciBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KG1vbm9zdGF0ZSBjb25zdCYsbW9ub3N0
YXRlIGNvbnN0Jil7IHJldHVybiB0cnVlO30KLWNvbnN0ZXhwciBpbmxpbmUgYm9vbCBvcGVyYXRv
ciE9KG1vbm9zdGF0ZSBjb25zdCYsbW9ub3N0YXRlIGNvbnN0Jil7IHJldHVybiBmYWxzZTt9Ci1j
b25zdGV4cHIgaW5saW5lIGJvb2wgb3BlcmF0b3I+PShtb25vc3RhdGUgY29uc3QmLG1vbm9zdGF0
ZSBjb25zdCYpeyByZXR1cm4gdHJ1ZTt9Ci1jb25zdGV4cHIgaW5saW5lIGJvb2wgb3BlcmF0b3I8
PShtb25vc3RhdGUgY29uc3QmLG1vbm9zdGF0ZSBjb25zdCYpeyByZXR1cm4gdHJ1ZTt9Ci1jb25z
dGV4cHIgaW5saW5lIGJvb2wgb3BlcmF0b3I+KG1vbm9zdGF0ZSBjb25zdCYsbW9ub3N0YXRlIGNv
bnN0Jil7IHJldHVybiBmYWxzZTt9Ci1jb25zdGV4cHIgaW5saW5lIGJvb2wgb3BlcmF0b3I8KG1v
bm9zdGF0ZSBjb25zdCYsbW9ub3N0YXRlIGNvbnN0Jil7IHJldHVybiBmYWxzZTt9Citjb25zdGV4
cHIgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShNb25vc3RhdGUgY29uc3QmLE1vbm9zdGF0ZSBjb25z
dCYpeyByZXR1cm4gdHJ1ZTt9Citjb25zdGV4cHIgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShNb25v
c3RhdGUgY29uc3QmLE1vbm9zdGF0ZSBjb25zdCYpeyByZXR1cm4gZmFsc2U7fQorY29uc3RleHBy
IGlubGluZSBib29sIG9wZXJhdG9yPj0oTW9ub3N0YXRlIGNvbnN0JixNb25vc3RhdGUgY29uc3Qm
KXsgcmV0dXJuIHRydWU7fQorY29uc3RleHByIGlubGluZSBib29sIG9wZXJhdG9yPD0oTW9ub3N0
YXRlIGNvbnN0JixNb25vc3RhdGUgY29uc3QmKXsgcmV0dXJuIHRydWU7fQorY29uc3RleHByIGlu
bGluZSBib29sIG9wZXJhdG9yPihNb25vc3RhdGUgY29uc3QmLE1vbm9zdGF0ZSBjb25zdCYpeyBy
ZXR1cm4gZmFsc2U7fQorY29uc3RleHByIGlubGluZSBib29sIG9wZXJhdG9yPChNb25vc3RhdGUg
Y29uc3QmLE1vbm9zdGF0ZSBjb25zdCYpeyByZXR1cm4gZmFsc2U7fQogCiBzdHJ1Y3QgX19oYXNo
X3Zpc2l0b3J7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+CkBAIC0yMDQxLDI1ICsyMDQw
LDI5IEBAIHN0cnVjdCBfX2hhc2hfdmlzaXRvcnsKICAgICB9CiB9OwogCi19IC8vIG5hbWVzcGFj
ZSBleHBlcmltZW50YWwKK30gLy8gbmFtZXNwYWNlIFdURgorCituYW1lc3BhY2Ugc3RkIHsKIAog
dGVtcGxhdGU8Pgotc3RydWN0IGhhc2g8ZXhwZXJpbWVudGFsOjptb25vc3RhdGU+ewotICAgIHNp
emVfdCBvcGVyYXRvcigpKGV4cGVyaW1lbnRhbDo6bW9ub3N0YXRlKSBfX05PRVhDRVBUeworc3Ry
dWN0IGhhc2g8V1RGOjpNb25vc3RhdGU+eworICAgIHNpemVfdCBvcGVyYXRvcigpKFdURjo6TW9u
b3N0YXRlKSBfX05PRVhDRVBUewogICAgICAgICByZXR1cm4gNDI7CiAgICAgfQogfTsKIAogdGVt
cGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBoYXNoPGV4cGVyaW1lbnRhbDo6dmFy
aWFudDxfVHlwZXMuLi4+PnsKLSAgICBzaXplX3Qgb3BlcmF0b3IoKShleHBlcmltZW50YWw6OnZh
cmlhbnQ8X1R5cGVzLi4uPiBjb25zdCAmdikgX19OT0VYQ0VQVCB7Ci0gICAgICAgIHJldHVybiBz
dGQ6Omhhc2g8cHRyZGlmZl90PigpKHYuaW5kZXgoKSkgXgotICAgICAgICAgICAgICAgZXhwZXJp
bWVudGFsOjp2aXNpdChleHBlcmltZW50YWw6Ol9faGFzaF92aXNpdG9yKCksIHYpOworc3RydWN0
IGhhc2g8V1RGOjpWYXJpYW50PF9UeXBlcy4uLj4+eworICAgIHNpemVfdCBvcGVyYXRvcigpKFdU
Rjo6VmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0ICZ2KSBfX05PRVhDRVBUIHsKKyAgICAgICAgcmV0
dXJuIHN0ZDo6aGFzaDxwdHJkaWZmX3Q+KCkodi5pbmRleCgpKSBeIFdURjo6dmlzaXQoV1RGOjpf
X2hhc2hfdmlzaXRvcigpLCB2KTsKICAgICB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBzdGQKIAor
dXNpbmcgV1RGOjpNb25vc3RhdGU7Cit1c2luZyBXVEY6OlZhcmlhbnQ7CisKICNlbmRpZiAvLyAh
Q09NUElMRVIoQ0xBTkcpIHx8IFdURl9DUFBfU1REX1ZFUiA+PSAxNAogCiAjaWYgQ09NUElMRVIo
TVNWQykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNzUwNSkKKysrIFNvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2IEBACisyMDE2LTEwLTE4ICBT
YW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVwbGFjZSBzdGQ6OmV4cGVy
aW1lbnRhbDo6dmFyaWFudCB3aXRoIFdURjo6VmFyaWFudCAob3Igc2ltaWxhcikKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzYyNgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbmFtZSBzdGQ6OmV4cGVy
aW1lbnRhbDo6dmFyaWFudCwgVmFyaWFudC4gTW92ZSBoZWxwZXJzIGdldC9ob2xkc19hbHRlcm5h
dGl2ZS9ldGMuCisgICAgICAgIGludG8gdGhlIFdURiBuYW1lc3BhY2UuCisKKyAgICAgICAgKiBN
b2R1bGVzL2ZldGNoL0ZldGNoQm9keS5oOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5Ojpp
c0Jsb2IpOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5Ojppc0Zvcm1EYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZldGNoQm9keTo6aXNBcnJheUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpGZXRjaEJvZHk6OmlzQXJyYXlCdWZmZXJWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OkZldGNo
Qm9keTo6aXNVUkxTZWFyY2hQYXJhbXMpOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5Ojpp
c1RleHQpOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5OjpibG9iQm9keSk6CisgICAgICAg
IChXZWJDb3JlOjpGZXRjaEJvZHk6OmZvcm1EYXRhQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpG
ZXRjaEJvZHk6OmFycmF5QnVmZmVyQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6
OmFycmF5QnVmZmVyVmlld0JvZHkpOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5Ojp0ZXh0
Qm9keSk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OnVybFNlYXJjaFBhcmFtc0JvZHkp
OgorICAgICAgICAqIGJpbmRpbmdzL2dlbmVyaWMvSURMVHlwZXMuaDoKKyAgICAgICAgKiBkb20v
RXhjZXB0aW9uT3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkV4Y2VwdGlvbk9yPFJldHVyblR5cGU+
OjpoYXNFeGNlcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RXhjZXB0aW9uT3I8UmV0dXJuVHlw
ZT46OnJlbGVhc2VFeGNlcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RXhjZXB0aW9uT3I8UmV0
dXJuVHlwZT46OnJlbGVhc2VSZXR1cm5WYWx1ZSk6CisgICAgICAgICogZG9tL01lc3NhZ2VFdmVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlRXZlbnQ6OnNvdXJjZSk6CisgICAgICAg
ICogZG9tL01lc3NhZ2VFdmVudC5oOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Om5vZGVTZXRQcmVUcmFuc2Zvcm1lZEZyb21Ob2RlT3JTdHJpbmdWZWN0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y29udmVydE5vZGVzT3JTdHJpbmdzSW50b05vZGUpOgor
ICAgICAgICAqIGRvbS9Ob2RlLmg6CisgICAgICAgICogaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rp
b24uaDoKKyAgICAgICAgKiBodG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjphZGQpOgorICAgICAgICAqIGh0bWwvSFRNTFNlbGVj
dEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL3RyYWNrL1RyYWNrRXZlbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VHJhY2tFdmVudDo6VHJhY2tFdmVudCk6CisgICAgICAgICogaHRtbC90cmFj
ay9UcmFja0V2ZW50Lmg6CisKIDIwMTYtMTAtMTggIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9y
Zz4KIAogICAgICAgICBTaW1wbGlmeSBTZXJpYWxpemVkU2NyaXB0VmFsdWUsIE1lc3NhZ2VQb3J0
QXJyYXkgYW5kIEFycmF5QnVmZmVyQXJyYXkgdG8gZWFzZSBnZW5lcmF0aW9uCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5LmgJKHJldmlzaW9uIDIwNzUwNCkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTY1LDEyICs2NSwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb25zdW1lQXNTdHJlYW0oRmV0
Y2hCb2R5T3duZXImLCBGZXRjaFJlc3BvbnNlU291cmNlJik7CiAjZW5kaWYKIAotICAgIGJvb2wg
aXNCbG9iKCkgY29uc3QgeyByZXR1cm4gc3RkOjpleHBlcmltZW50YWw6OmhvbGRzX2FsdGVybmF0
aXZlPFJlZjxjb25zdCBCbG9iPj4obV9kYXRhKTsgfQotICAgIGJvb2wgaXNGb3JtRGF0YSgpIGNv
bnN0IHsgcmV0dXJuIHN0ZDo6ZXhwZXJpbWVudGFsOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8Rm9y
bURhdGE+PihtX2RhdGEpOyB9Ci0gICAgYm9vbCBpc0FycmF5QnVmZmVyKCkgY29uc3QgeyByZXR1
cm4gc3RkOjpleHBlcmltZW50YWw6OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxjb25zdCBBcnJheUJ1
ZmZlcj4+KG1fZGF0YSk7IH0KLSAgICBib29sIGlzQXJyYXlCdWZmZXJWaWV3KCkgY29uc3QgeyBy
ZXR1cm4gc3RkOjpleHBlcmltZW50YWw6OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxjb25zdCBBcnJh
eUJ1ZmZlclZpZXc+PihtX2RhdGEpOyB9Ci0gICAgYm9vbCBpc1VSTFNlYXJjaFBhcmFtcygpIGNv
bnN0IHsgcmV0dXJuIHN0ZDo6ZXhwZXJpbWVudGFsOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8Y29u
c3QgVVJMU2VhcmNoUGFyYW1zPj4obV9kYXRhKTsgfQotICAgIGJvb2wgaXNUZXh0KCkgY29uc3Qg
eyByZXR1cm4gc3RkOjpleHBlcmltZW50YWw6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4obV9k
YXRhKTsgfQorICAgIGJvb2wgaXNCbG9iKCkgY29uc3QgeyByZXR1cm4gV1RGOjpob2xkc19hbHRl
cm5hdGl2ZTxSZWY8Y29uc3QgQmxvYj4+KG1fZGF0YSk7IH0KKyAgICBib29sIGlzRm9ybURhdGEo
KSBjb25zdCB7IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxGb3JtRGF0YT4+KG1f
ZGF0YSk7IH0KKyAgICBib29sIGlzQXJyYXlCdWZmZXIoKSBjb25zdCB7IHJldHVybiBXVEY6Omhv
bGRzX2FsdGVybmF0aXZlPFJlZjxjb25zdCBBcnJheUJ1ZmZlcj4+KG1fZGF0YSk7IH0KKyAgICBi
b29sIGlzQXJyYXlCdWZmZXJWaWV3KCkgY29uc3QgeyByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5h
dGl2ZTxSZWY8Y29uc3QgQXJyYXlCdWZmZXJWaWV3Pj4obV9kYXRhKTsgfQorICAgIGJvb2wgaXNV
UkxTZWFyY2hQYXJhbXMoKSBjb25zdCB7IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJl
Zjxjb25zdCBVUkxTZWFyY2hQYXJhbXM+PihtX2RhdGEpOyB9CisgICAgYm9vbCBpc1RleHQoKSBj
b25zdCB7IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4obV9kYXRhKTsgfQog
CiAgICAgc3RhdGljIE9wdGlvbmFsPEZldGNoQm9keT4gZXh0cmFjdChTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiwgSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIFN0cmluZyYpOwogICAgIHN0
YXRpYyBGZXRjaEJvZHkgbG9hZGluZ0JvZHkoKSB7IHJldHVybiB7IH07IH0KQEAgLTEwNCwxNiAr
MTA0LDE2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb25zdW1lVGV4dChSZWY8RGVmZXJyZWRQcm9t
aXNlPiYmLCBjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIGNvbnN1bWVCbG9iKEZldGNoQm9keU93
bmVyJiwgUmVmPERlZmVycmVkUHJvbWlzZT4mJik7CiAKLSAgICBjb25zdCBCbG9iJiBibG9iQm9k
eSgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6ZXhwZXJpbWVudGFsOjpnZXQ8UmVmPGNvbnN0IEJsb2I+
PihtX2RhdGEpLmdldCgpOyB9Ci0gICAgRm9ybURhdGEmIGZvcm1EYXRhQm9keSgpIHsgcmV0dXJu
IHN0ZDo6ZXhwZXJpbWVudGFsOjpnZXQ8UmVmPEZvcm1EYXRhPj4obV9kYXRhKS5nZXQoKTsgfQot
ICAgIGNvbnN0IEZvcm1EYXRhJiBmb3JtRGF0YUJvZHkoKSBjb25zdCB7IHJldHVybiBzdGQ6OmV4
cGVyaW1lbnRhbDo6Z2V0PFJlZjxGb3JtRGF0YT4+KG1fZGF0YSkuZ2V0KCk7IH0KLSAgICBjb25z
dCBBcnJheUJ1ZmZlciYgYXJyYXlCdWZmZXJCb2R5KCkgY29uc3QgeyByZXR1cm4gc3RkOjpleHBl
cmltZW50YWw6OmdldDxSZWY8Y29uc3QgQXJyYXlCdWZmZXI+PihtX2RhdGEpLmdldCgpOyB9Ci0g
ICAgY29uc3QgQXJyYXlCdWZmZXJWaWV3JiBhcnJheUJ1ZmZlclZpZXdCb2R5KCkgY29uc3QgeyBy
ZXR1cm4gc3RkOjpleHBlcmltZW50YWw6OmdldDxSZWY8Y29uc3QgQXJyYXlCdWZmZXJWaWV3Pj4o
bV9kYXRhKS5nZXQoKTsgfQotICAgIFN0cmluZyYgdGV4dEJvZHkoKSB7IHJldHVybiBzdGQ6OmV4
cGVyaW1lbnRhbDo6Z2V0PFN0cmluZz4obV9kYXRhKTsgfQotICAgIGNvbnN0IFN0cmluZyYgdGV4
dEJvZHkoKSBjb25zdCB7IHJldHVybiBzdGQ6OmV4cGVyaW1lbnRhbDo6Z2V0PFN0cmluZz4obV9k
YXRhKTsgfQotICAgIGNvbnN0IFVSTFNlYXJjaFBhcmFtcyYgdXJsU2VhcmNoUGFyYW1zQm9keSgp
IGNvbnN0IHsgcmV0dXJuIHN0ZDo6ZXhwZXJpbWVudGFsOjpnZXQ8UmVmPGNvbnN0IFVSTFNlYXJj
aFBhcmFtcz4+KG1fZGF0YSkuZ2V0KCk7IH0KKyAgICBjb25zdCBCbG9iJiBibG9iQm9keSgpIGNv
bnN0IHsgcmV0dXJuIFdURjo6Z2V0PFJlZjxjb25zdCBCbG9iPj4obV9kYXRhKS5nZXQoKTsgfQor
ICAgIEZvcm1EYXRhJiBmb3JtRGF0YUJvZHkoKSB7IHJldHVybiBXVEY6OmdldDxSZWY8Rm9ybURh
dGE+PihtX2RhdGEpLmdldCgpOyB9CisgICAgY29uc3QgRm9ybURhdGEmIGZvcm1EYXRhQm9keSgp
IGNvbnN0IHsgcmV0dXJuIFdURjo6Z2V0PFJlZjxGb3JtRGF0YT4+KG1fZGF0YSkuZ2V0KCk7IH0K
KyAgICBjb25zdCBBcnJheUJ1ZmZlciYgYXJyYXlCdWZmZXJCb2R5KCkgY29uc3QgeyByZXR1cm4g
V1RGOjpnZXQ8UmVmPGNvbnN0IEFycmF5QnVmZmVyPj4obV9kYXRhKS5nZXQoKTsgfQorICAgIGNv
bnN0IEFycmF5QnVmZmVyVmlldyYgYXJyYXlCdWZmZXJWaWV3Qm9keSgpIGNvbnN0IHsgcmV0dXJu
IFdURjo6Z2V0PFJlZjxjb25zdCBBcnJheUJ1ZmZlclZpZXc+PihtX2RhdGEpLmdldCgpOyB9Cisg
ICAgU3RyaW5nJiB0ZXh0Qm9keSgpIHsgcmV0dXJuIFdURjo6Z2V0PFN0cmluZz4obV9kYXRhKTsg
fQorICAgIGNvbnN0IFN0cmluZyYgdGV4dEJvZHkoKSBjb25zdCB7IHJldHVybiBXVEY6OmdldDxT
dHJpbmc+KG1fZGF0YSk7IH0KKyAgICBjb25zdCBVUkxTZWFyY2hQYXJhbXMmIHVybFNlYXJjaFBh
cmFtc0JvZHkoKSBjb25zdCB7IHJldHVybiBXVEY6OmdldDxSZWY8Y29uc3QgVVJMU2VhcmNoUGFy
YW1zPj4obV9kYXRhKS5nZXQoKTsgfQogCi0gICAgc3RkOjpleHBlcmltZW50YWw6OnZhcmlhbnQ8
c3RkOjpudWxscHRyX3QsIFJlZjxjb25zdCBCbG9iPiwgUmVmPEZvcm1EYXRhPiwgUmVmPGNvbnN0
IEFycmF5QnVmZmVyPiwgUmVmPGNvbnN0IEFycmF5QnVmZmVyVmlldz4sIFJlZjxjb25zdCBVUkxT
ZWFyY2hQYXJhbXM+LCBTdHJpbmc+IG1fZGF0YSB7IG51bGxwdHIgfTsKKyAgICBWYXJpYW50PHN0
ZDo6bnVsbHB0cl90LCBSZWY8Y29uc3QgQmxvYj4sIFJlZjxGb3JtRGF0YT4sIFJlZjxjb25zdCBB
cnJheUJ1ZmZlcj4sIFJlZjxjb25zdCBBcnJheUJ1ZmZlclZpZXc+LCBSZWY8Y29uc3QgVVJMU2Vh
cmNoUGFyYW1zPiwgU3RyaW5nPiBtX2RhdGEgeyBudWxscHRyIH07CiAKICAgICBGZXRjaEJvZHlD
b25zdW1lciBtX2NvbnN1bWVyIHsgRmV0Y2hCb2R5Q29uc3VtZXI6OlR5cGU6Ok5vbmUgfTsKICAg
ICBSZWZQdHI8RGVmZXJyZWRQcm9taXNlPiBtX2NvbnN1bWVQcm9taXNlOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9JRExUeXBlcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvSURMVHlwZXMuaAkocmV2aXNpb24gMjA3NTA0KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9JRExUeXBlcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTUsNyArMTE1LDcgQEAgc3RydWN0IElETEVycm9yIDogSURMVW5zdXBwb3J0ZWRU
eXBlIHsgfQogc3RydWN0IElETERPTUV4Y2VwdGlvbiA6IElETFVuc3VwcG9ydGVkVHlwZSB7IH07
CiAKIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFRzPgotc3RydWN0IElETFVuaW9uIDogSURMVHlwZTxz
dGQ6OmV4cGVyaW1lbnRhbDo6dmFyaWFudDx0eXBlbmFtZSBUczo6SW1wbGVtZW50YXRpb25UeXBl
Li4uPj4geworc3RydWN0IElETFVuaW9uIDogSURMVHlwZTxWYXJpYW50PHR5cGVuYW1lIFRzOjpJ
bXBsZW1lbnRhdGlvblR5cGUuLi4+PiB7CiAgICAgdXNpbmcgVHlwZUxpc3QgPSBicmlnYW5kOjps
aXN0PFRzLi4uPjsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FeGNlcHRpb25Pci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FeGNlcHRpb25Pci5oCShyZXZpc2lv
biAyMDc1MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRXhjZXB0aW9uT3IuaAkod29ya2luZyBj
b3B5KQpAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgUmV0dXJuVHlwZSYmIHJlbGVhc2VS
ZXR1cm5WYWx1ZSgpOwogCiBwcml2YXRlOgotICAgIHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50
PEV4Y2VwdGlvbiwgUmV0dXJuVHlwZT4gbV92YWx1ZTsKKyAgICBWYXJpYW50PEV4Y2VwdGlvbiwg
UmV0dXJuVHlwZT4gbV92YWx1ZTsKIH07CiAKIHRlbXBsYXRlPD4gY2xhc3MgRXhjZXB0aW9uT3I8
dm9pZD4gewpAQCAtNzUsMTcgKzc1LDE3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGU+
IHRlbXBsYXRlPHQKIAogdGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZT4gaW5saW5lIGJvb2wg
RXhjZXB0aW9uT3I8UmV0dXJuVHlwZT46Omhhc0V4Y2VwdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIHN0ZDo6ZXhwZXJpbWVudGFsOjpob2xkc19hbHRlcm5hdGl2ZTxFeGNlcHRpb24+KG1fdmFs
dWUpOworICAgIHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEV4Y2VwdGlvbj4obV92YWx1
ZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGU+IGlubGluZSBFeGNlcHRpb24m
JiBFeGNlcHRpb25PcjxSZXR1cm5UeXBlPjo6cmVsZWFzZUV4Y2VwdGlvbigpCiB7Ci0gICAgcmV0
dXJuIHN0ZDo6ZXhwZXJpbWVudGFsOjpnZXQ8RXhjZXB0aW9uPihXVEZNb3ZlKG1fdmFsdWUpKTsK
KyAgICByZXR1cm4gV1RGOjpnZXQ8RXhjZXB0aW9uPihXVEZNb3ZlKG1fdmFsdWUpKTsKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZT4gaW5saW5lIFJldHVyblR5cGUmJiBFeGNlcHRp
b25PcjxSZXR1cm5UeXBlPjo6cmVsZWFzZVJldHVyblZhbHVlKCkKIHsKLSAgICByZXR1cm4gc3Rk
OjpleHBlcmltZW50YWw6OmdldDxSZXR1cm5UeXBlPihXVEZNb3ZlKG1fdmFsdWUpKTsKKyAgICBy
ZXR1cm4gV1RGOjpnZXQ8UmV0dXJuVHlwZT4oV1RGTW92ZShtX3ZhbHVlKSk7CiB9CiAKIGlubGlu
ZSBFeGNlcHRpb25Pcjx2b2lkPjo6RXhjZXB0aW9uT3IoRXhjZXB0aW9uJiYgZXhjZXB0aW9uKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5jcHAJKHJldmlzaW9uIDIwNzUwNSkKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzcsNyArMTc3LDcgQEAgRXZlbnRUYXJnZXQqIE1lc3NhZ2VFdmVudDo6c291cmNlKCkgY29ucwog
ICAgICAgICBbXShjb25zdCBSZWZQdHI8TWVzc2FnZVBvcnQ+JiBtZXNzYWdlUG9ydCkgLT4gRXZl
bnRUYXJnZXQqIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8RXZlbnRUYXJnZXQqPihzdGF0aWNfY2FzdDxj
b25zdCBFdmVudFRhcmdldCo+KG1lc3NhZ2VQb3J0LmdldCgpKSk7IH0KICAgICApOwogCi0gICAg
cmV0dXJuIHN0ZDo6ZXhwZXJpbWVudGFsOjp2aXNpdCh2aXNpdG9yLCBtX3NvdXJjZS52YWx1ZSgp
KTsKKyAgICByZXR1cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBtX3NvdXJjZS52YWx1ZSgpKTsKIH0K
IAogUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gTWVzc2FnZUV2ZW50Ojp0cnlTZXJpYWxp
emVEYXRhKEV4ZWNTdGF0ZSogZXhlYykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdl
RXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZUV2ZW50LmgJ
KHJldmlzaW9uIDIwNzUwNSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIEJsb2I7CiAKLXVzaW5nIE1lc3NhZ2VFdmVudFNvdXJjZSA9IHN0ZDo6ZXhwZXJpbWVudGFs
Ojp2YXJpYW50PFJlZlB0cjxET01XaW5kb3c+LCBSZWZQdHI8TWVzc2FnZVBvcnQ+PjsKK3VzaW5n
IE1lc3NhZ2VFdmVudFNvdXJjZSA9IFZhcmlhbnQ8UmVmUHRyPERPTVdpbmRvdz4sIFJlZlB0cjxN
ZXNzYWdlUG9ydD4+OwogCiBjbGFzcyBNZXNzYWdlRXZlbnQgZmluYWwgOiBwdWJsaWMgRXZlbnQg
ewogcHVibGljOgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMjA3NTA0KQorKysgU291
cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDUsNyArNDQ1LDcg
QEAgc3RhdGljIEhhc2hTZXQ8UmVmUHRyPE5vZGU+PiBub2RlU2V0UHJlVAogICAgICk7CiAKICAg
ICBmb3IgKGNvbnN0IGF1dG8mIHZhcmlhbnQgOiB2ZWN0b3IpCi0gICAgICAgIHN0ZDo6ZXhwZXJp
bWVudGFsOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKKyAgICAgICAgV1RGOjp2aXNpdCh2aXNp
dG9yLCB2YXJpYW50KTsKIAogICAgIHJldHVybiBub2RlU2V0OwogfQpAQCAtNDgyLDcgKzQ4Miw3
IEBAIFJlZlB0cjxOb2RlPiBOb2RlOjpjb252ZXJ0Tm9kZXNPclN0cmluZ3MKICAgICApOwogCiAg
ICAgZm9yIChhdXRvJiB2YXJpYW50IDogbm9kZU9yU3RyaW5nVmVjdG9yKQotICAgICAgICBzdGQ6
OmV4cGVyaW1lbnRhbDo6dmlzaXQodmlzaXRvciwgdmFyaWFudCk7CisgICAgICAgIFdURjo6dmlz
aXQodmlzaXRvciwgdmFyaWFudCk7CiAKICAgICBpZiAobm9kZXMuc2l6ZSgpID09IDEpCiAgICAg
ICAgIHJldHVybiBXVEZNb3ZlKG5vZGVzLmZpcnN0KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCShyZXZp
c2lvbiAyMDc1MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC02Miw3ICs2Miw3IEBAIGNsYXNzIFNoYWRvd1Jvb3Q7CiBjbGFzcyBUb3VjaEV2ZW50Owog
Y2xhc3MgVUlSZXF1ZXN0RXZlbnQ7CiAKLXVzaW5nIE5vZGVPclN0cmluZyA9IHN0ZDo6ZXhwZXJp
bWVudGFsOjp2YXJpYW50PFJlZlB0cjxOb2RlPiwgU3RyaW5nPjsKK3VzaW5nIE5vZGVPclN0cmlu
ZyA9IFZhcmlhbnQ8UmVmUHRyPE5vZGU+LCBTdHJpbmc+OwogCiBjbGFzcyBOb2RlUmFyZURhdGFC
YXNlIHsKIHB1YmxpYzoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbnNDb2xs
ZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uc0Nv
bGxlY3Rpb24uaAkocmV2aXNpb24gMjA3NTA0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
T3B0aW9uc0NvbGxlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDEsOCArNDEsOCBAQCBwdWJs
aWM6CiAgICAgSFRNTE9wdGlvbkVsZW1lbnQqIGl0ZW0odW5zaWduZWQgb2Zmc2V0KSBjb25zdCBm
aW5hbDsKICAgICBIVE1MT3B0aW9uRWxlbWVudCogbmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmFtZSkgY29uc3QgZmluYWw7CiAKLSAgICB1c2luZyBPcHRpb25Pck9wdEdyb3VwRWxlbWVu
dCA9IHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50PFJlZlB0cjxIVE1MT3B0aW9uRWxlbWVudD4s
IFJlZlB0cjxIVE1MT3B0R3JvdXBFbGVtZW50Pj47Ci0gICAgdXNpbmcgSFRNTEVsZW1lbnRPcklu
dCA9IHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50PFJlZlB0cjxIVE1MRWxlbWVudD4sIGludD47
CisgICAgdXNpbmcgT3B0aW9uT3JPcHRHcm91cEVsZW1lbnQgPSBWYXJpYW50PFJlZlB0cjxIVE1M
T3B0aW9uRWxlbWVudD4sIFJlZlB0cjxIVE1MT3B0R3JvdXBFbGVtZW50Pj47CisgICAgdXNpbmcg
SFRNTEVsZW1lbnRPckludCA9IFZhcmlhbnQ8UmVmUHRyPEhUTUxFbGVtZW50PiwgaW50PjsKICAg
ICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBhZGQoY29uc3QgT3B0aW9uT3JPcHRH
cm91cEVsZW1lbnQmLCBPcHRpb25hbDxIVE1MRWxlbWVudE9ySW50PiBiZWZvcmUpOwogICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlKGludCBpbmRleCk7CiAgICAgdm9pZCByZW1vdmUoSFRN
TE9wdGlvbkVsZW1lbnQmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAyMDc1MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxT
ZWxlY3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMwLDkgKzIzMCw5IEBAIEV4Y2Vw
dGlvbk9yPHZvaWQ+IEhUTUxTZWxlY3RFbGVtZW50OjphZGQKICAgICAgICAgICAgIFt0aGlzXShp
bnQgaW5kZXgpIC0+IEhUTUxFbGVtZW50KiB7IHJldHVybiBpdGVtKGluZGV4KTsgfQogICAgICAg
ICApOwogCi0gICAgICAgIGJlZm9yZUVsZW1lbnQgPSBzdGQ6OmV4cGVyaW1lbnRhbDo6dmlzaXQo
dmlzaXRvciwgYmVmb3JlLnZhbHVlKCkpOworICAgICAgICBiZWZvcmVFbGVtZW50ID0gV1RGOjp2
aXNpdCh2aXNpdG9yLCBiZWZvcmUudmFsdWUoKSk7CiAgICAgfQotICAgIEhUTUxFbGVtZW50JiB0
b0luc2VydCA9IHN0ZDo6ZXhwZXJpbWVudGFsOjp2aXNpdChbXShjb25zdCBhdXRvJiBodG1sRWxl
bWVudCkgLT4gSFRNTEVsZW1lbnQmIHsKKyAgICBIVE1MRWxlbWVudCYgdG9JbnNlcnQgPSBXVEY6
OnZpc2l0KFtdKGNvbnN0IGF1dG8mIGh0bWxFbGVtZW50KSAtPiBIVE1MRWxlbWVudCYgewogICAg
ICAgICByZXR1cm4gKmh0bWxFbGVtZW50OwogICAgIH0sIGVsZW1lbnQpOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oCShyZXZpc2lvbiAyMDc1MDQpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTUxLDggKzUxLDggQEAgcHVibGljOgogCiAgICAgYm9vbCB1c2VzTWVudUxpc3QoKSBjb25zdDsK
IAotICAgIHVzaW5nIE9wdGlvbk9yT3B0R3JvdXBFbGVtZW50ID0gc3RkOjpleHBlcmltZW50YWw6
OnZhcmlhbnQ8UmVmUHRyPEhUTUxPcHRpb25FbGVtZW50PiwgUmVmUHRyPEhUTUxPcHRHcm91cEVs
ZW1lbnQ+PjsKLSAgICB1c2luZyBIVE1MRWxlbWVudE9ySW50ID0gc3RkOjpleHBlcmltZW50YWw6
OnZhcmlhbnQ8UmVmUHRyPEhUTUxFbGVtZW50PiwgaW50PjsKKyAgICB1c2luZyBPcHRpb25Pck9w
dEdyb3VwRWxlbWVudCA9IFZhcmlhbnQ8UmVmUHRyPEhUTUxPcHRpb25FbGVtZW50PiwgUmVmUHRy
PEhUTUxPcHRHcm91cEVsZW1lbnQ+PjsKKyAgICB1c2luZyBIVE1MRWxlbWVudE9ySW50ID0gVmFy
aWFudDxSZWZQdHI8SFRNTEVsZW1lbnQ+LCBpbnQ+OwogICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2Vw
dGlvbk9yPHZvaWQ+IGFkZChjb25zdCBPcHRpb25Pck9wdEdyb3VwRWxlbWVudCYsIE9wdGlvbmFs
PEhUTUxFbGVtZW50T3JJbnQ+IGJlZm9yZSk7CiAKICAgICB1c2luZyBOb2RlOjpyZW1vdmU7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RyYWNrRXZlbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJhY2tFdmVudC5jcHAJKHJldmlzaW9uIDIw
NzUwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJhY2tFdmVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgVHJhY2tFdmVudDo6VHJhY2tFdmVudChjb25zdCBB
dG9taWNTdHJpbgogICAgIDogRXZlbnQodHlwZSwgaW5pdGlhbGl6ZXIsIGlzVHJ1c3RlZCkKIHsK
ICAgICBpZiAoaW5pdGlhbGl6ZXIudHJhY2spIHsKLSAgICAgICAgbV90cmFjayA9IHN0ZDo6ZXhw
ZXJpbWVudGFsOjp2aXNpdChbXShjb25zdCBhdXRvJiB0cmFja2Jhc2UpIC0+IFRyYWNrQmFzZSog
eworICAgICAgICBtX3RyYWNrID0gV1RGOjp2aXNpdChbXShjb25zdCBhdXRvJiB0cmFja2Jhc2Up
IC0+IFRyYWNrQmFzZSogewogICAgICAgICAgICAgcmV0dXJuIHRyYWNrYmFzZS5nZXQoKTsKICAg
ICAgICAgfSwgKmluaXRpYWxpemVyLnRyYWNrKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL3RyYWNrL1RyYWNrRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL3RyYWNrL1RyYWNrRXZlbnQuaAkocmV2aXNpb24gMjA3NTA0KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC90cmFjay9UcmFja0V2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUcmFja0V2ZW50KHR5cGUs
IGNhbkJ1YmJsZSwgY2FuY2VsYWJsZSwgV1RGTW92ZSh0cmFjaykpKTsKICAgICB9CiAKLSAgICB1
c2luZyBUcmFja0V2ZW50VHJhY2sgPSBzdGQ6OmV4cGVyaW1lbnRhbDo6dmFyaWFudDxSZWZQdHI8
VmlkZW9UcmFjaz4sIFJlZlB0cjxBdWRpb1RyYWNrPiwgUmVmUHRyPFRleHRUcmFjaz4+OworICAg
IHVzaW5nIFRyYWNrRXZlbnRUcmFjayA9IFZhcmlhbnQ8UmVmUHRyPFZpZGVvVHJhY2s+LCBSZWZQ
dHI8QXVkaW9UcmFjaz4sIFJlZlB0cjxUZXh0VHJhY2s+PjsKIAogICAgIHN0cnVjdCBJbml0IDog
cHVibGljIEV2ZW50SW5pdCB7CiAgICAgICAgIE9wdGlvbmFsPFRyYWNrRXZlbnRUcmFjaz4gdHJh
Y2s7CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDc1MTIpCisrKyBTb3VyY2UvV2Vi
S2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxNi0x
MC0xOCAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFJlcGxhY2Ugc3Rk
OjpleHBlcmltZW50YWw6OnZhcmlhbnQgd2l0aCBXVEY6OlZhcmlhbnQgKG9yIHNpbWlsYXIpCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM2MjYKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW5hbWUgc3Rk
OjpleHBlcmltZW50YWw6OnZhcmlhbnQsIFZhcmlhbnQuIE1vdmUgaGVscGVycyBnZXQvaG9sZHNf
YWx0ZXJuYXRpdmUvZXRjLgorICAgICAgICBpbnRvIHRoZSBXVEYgbmFtZXNwYWNlLgorCisgICAg
ICAgICogRE9NL0RPTUhUTUxTZWxlY3RFbGVtZW50Lm1tOgorICAgICAgICAoLVtET01IVE1MU2Vs
ZWN0RWxlbWVudCBhZGQ6YmVmb3JlOl0pOgorCiAyMDE2LTEwLTE4ICBTaW1vbiBGcmFzZXIgIDxz
aW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBhIE1pbmlCcm93c2VyIG1lbnUg
aXRlbSB0byBhcHBseSBwYWdlIHNjYWxlIGluIFdLMSBhbmQgV0syCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L21hYy9ET00vRE9NSFRNTFNlbGVjdEVsZW1lbnQubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9tYWMvRE9NL0RPTUhUTUxTZWxlY3RFbGVtZW50Lm1tCShyZXZpc2lvbiAyMDc1MDQp
CisrKyBTb3VyY2UvV2ViS2l0L21hYy9ET00vRE9NSFRNTFNlbGVjdEVsZW1lbnQubW0JKHdvcmtp
bmcgY29weSkKQEAgLTE4NSw3ICsxODUsNyBAQCAtICh2b2lkKWFkZDooRE9NSFRNTEVsZW1lbnQg
KillbGVtZW50IGJlCiAgICAgICAgIHJhaXNlVHlwZUVycm9yRXhjZXB0aW9uKCk7CiAKICAgICBh
dXRvJiBjb3JlRWxlbWVudCA9ICpjb3JlKGVsZW1lbnQpOwotICAgIHN0ZDo6ZXhwZXJpbWVudGFs
Ojp2YXJpYW50PFJlZlB0cjxXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudD4sIFJlZlB0cjxXZWJD
b3JlOjpIVE1MT3B0R3JvdXBFbGVtZW50Pj4gdmFyaWFudEVsZW1lbnQ7CisgICAgVmFyaWFudDxS
ZWZQdHI8V2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ+LCBSZWZQdHI8V2ViQ29yZTo6SFRNTE9w
dEdyb3VwRWxlbWVudD4+IHZhcmlhbnRFbGVtZW50OwogICAgIGlmIChpczxXZWJDb3JlOjpIVE1M
T3B0aW9uRWxlbWVudD4oY29yZUVsZW1lbnQpKQogICAgICAgICB2YXJpYW50RWxlbWVudCA9ICZk
b3duY2FzdDxXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudD4oY29yZUVsZW1lbnQpOwogICAgIGVs
c2UgaWYgKGlzPFdlYkNvcmU6OkhUTUxPcHRHcm91cEVsZW1lbnQ+KGNvcmVFbGVtZW50KSkKSW5k
ZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDIwNzUxMCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE2IEBACisyMDE2LTEwLTE4ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgUmVwbGFjZSBzdGQ6OmV4cGVyaW1lbnRhbDo6dmFyaWFudCB3aXRoIFdURjo6VmFyaWFudCAo
b3Igc2ltaWxhcikKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2MzYyNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFJlbmFtZSBzdGQ6OmV4cGVyaW1lbnRhbDo6dmFyaWFudCwgVmFyaWFudC4gTW92ZSBoZWxw
ZXJzIGdldC9ob2xkc19hbHRlcm5hdGl2ZS9ldGMuCisgICAgICAgIGludG8gdGhlIFdURiBuYW1l
c3BhY2UuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9WYXJpYW50LmNwcDoK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDE2LTEwLTE4ICBBbmRlcnMgQ2Fy
bHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGFuIGJlZm9yZXVubG9h
ZCBhbGVydCB0byB0aGUgV2ViS2l0TGVnYWN5IE1pbmlCcm93c2VyCkluZGV4OiBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9WYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9WYXJpYW50LmNwcAkocmV2aXNpb24gMjA3NTA0KQorKysgVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDM3ICszNywzNyBAQCBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CiAKIFRFU1QoV1RGX1Zh
cmlhbnQsIEluaXRpYWwpCiB7Ci0gICAgc3RkOjpleHBlcmltZW50YWw6OnZhcmlhbnQ8aW50LCBk
b3VibGU+IHYxOworICAgIFZhcmlhbnQ8aW50LCBkb3VibGU+IHYxOwogICAgIEVYUEVDVF9UUlVF
KHYxLmluZGV4KCkgPT0gMCk7Ci0gICAgRVhQRUNUX1RSVUUoc3RkOjpleHBlcmltZW50YWw6Omdl
dDxpbnQ+KHYxKSA9PSAwKTsKKyAgICBFWFBFQ1RfVFJVRShXVEY6OmdldDxpbnQ+KHYxKSA9PSAw
KTsKIAogICAgIHN0cnVjdCBUIHsKICAgICAgICAgVCgpIDogdmFsdWUoMTUpIHsgfQogICAgICAg
ICBpbnQgdmFsdWU7CiAgICAgfTsKIAotICAgIHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50PFQs
IGludD4gdjI7CisgICAgVmFyaWFudDxULCBpbnQ+IHYyOwogICAgIEVYUEVDVF9UUlVFKHYyLmlu
ZGV4KCkgPT0gMCk7Ci0gICAgRVhQRUNUX1RSVUUoc3RkOjpleHBlcmltZW50YWw6OmdldDxUPih2
MikudmFsdWUgPT0gMTUpOworICAgIEVYUEVDVF9UUlVFKFdURjo6Z2V0PFQ+KHYyKS52YWx1ZSA9
PSAxNSk7CiB9CiAKIFRFU1QoV1RGX1ZhcmlhbnQsIEJhc2ljKQogewotICAgIHN0ZDo6ZXhwZXJp
bWVudGFsOjp2YXJpYW50PGludCwgZG91YmxlPiB2YXJpYW50ID0gMTsKKyAgICBWYXJpYW50PGlu
dCwgZG91YmxlPiB2YXJpYW50ID0gMTsKICAgICBFWFBFQ1RfVFJVRSh2YXJpYW50LmluZGV4KCkg
PT0gMCk7Ci0gICAgRVhQRUNUX1RSVUUoc3RkOjpleHBlcmltZW50YWw6OmdldDxpbnQ+KHZhcmlh
bnQpID09IDEpOwotICAgIEVYUEVDVF9UUlVFKCpzdGQ6OmV4cGVyaW1lbnRhbDo6Z2V0X2lmPGlu
dD4odmFyaWFudCkgPT0gMSk7Ci0gICAgRVhQRUNUX1RSVUUoc3RkOjpleHBlcmltZW50YWw6Omdl
dF9pZjxkb3VibGU+KHZhcmlhbnQpID09IG51bGxwdHIpOwotICAgIEVYUEVDVF9UUlVFKHN0ZDo6
ZXhwZXJpbWVudGFsOjpob2xkc19hbHRlcm5hdGl2ZTxpbnQ+KHZhcmlhbnQpKTsKLSAgICBFWFBF
Q1RfRkFMU0Uoc3RkOjpleHBlcmltZW50YWw6OmhvbGRzX2FsdGVybmF0aXZlPGRvdWJsZT4odmFy
aWFudCkpOworICAgIEVYUEVDVF9UUlVFKFdURjo6Z2V0PGludD4odmFyaWFudCkgPT0gMSk7Cisg
ICAgRVhQRUNUX1RSVUUoKldURjo6Z2V0X2lmPGludD4odmFyaWFudCkgPT0gMSk7CisgICAgRVhQ
RUNUX1RSVUUoV1RGOjpnZXRfaWY8ZG91YmxlPih2YXJpYW50KSA9PSBudWxscHRyKTsKKyAgICBF
WFBFQ1RfVFJVRShXVEY6OmhvbGRzX2FsdGVybmF0aXZlPGludD4odmFyaWFudCkpOworICAgIEVY
UEVDVF9GQUxTRShXVEY6OmhvbGRzX2FsdGVybmF0aXZlPGRvdWJsZT4odmFyaWFudCkpOwogCiAg
ICAgdmFyaWFudCA9IDEuMDsKICAgICBFWFBFQ1RfVFJVRSh2YXJpYW50LmluZGV4KCkgPT0gMSk7
Ci0gICAgRVhQRUNUX1RSVUUoc3RkOjpleHBlcmltZW50YWw6OmdldDxkb3VibGU+KHZhcmlhbnQp
ID09IDEpOwotICAgIEVYUEVDVF9UUlVFKCpzdGQ6OmV4cGVyaW1lbnRhbDo6Z2V0X2lmPGRvdWJs
ZT4odmFyaWFudCkgPT0gMS4wKTsKLSAgICBFWFBFQ1RfVFJVRShzdGQ6OmV4cGVyaW1lbnRhbDo6
Z2V0X2lmPGludD4odmFyaWFudCkgPT0gbnVsbHB0cik7Ci0gICAgRVhQRUNUX1RSVUUoc3RkOjpl
eHBlcmltZW50YWw6OmhvbGRzX2FsdGVybmF0aXZlPGRvdWJsZT4odmFyaWFudCkpOwotICAgIEVY
UEVDVF9GQUxTRShzdGQ6OmV4cGVyaW1lbnRhbDo6aG9sZHNfYWx0ZXJuYXRpdmU8aW50Pih2YXJp
YW50KSk7CisgICAgRVhQRUNUX1RSVUUoV1RGOjpnZXQ8ZG91YmxlPih2YXJpYW50KSA9PSAxKTsK
KyAgICBFWFBFQ1RfVFJVRSgqV1RGOjpnZXRfaWY8ZG91YmxlPih2YXJpYW50KSA9PSAxLjApOwor
ICAgIEVYUEVDVF9UUlVFKFdURjo6Z2V0X2lmPGludD4odmFyaWFudCkgPT0gbnVsbHB0cik7Cisg
ICAgRVhQRUNUX1RSVUUoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxkb3VibGU+KHZhcmlhbnQpKTsK
KyAgICBFWFBFQ1RfRkFMU0UoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxpbnQ+KHZhcmlhbnQpKTsK
IH0KIAogVEVTVChXVEZfVmFyaWFudCwgQmFzaWNWaXNpdG9yKQpAQCAtOTQsMTggKzk0LDE4IEBA
IFRFU1QoV1RGX1ZhcmlhbnQsIEJhc2ljVmlzaXRvcikKIAogICAgIFR5cGUgdHlwZSA9IFR5cGU6
Ok5vbmU7CiAKLSAgICBzdGQ6OmV4cGVyaW1lbnRhbDo6dmFyaWFudDxpbnQsIGZsb2F0LCBTdHJp
bmc+IHZhcmlhbnQgPSA4OwotICAgIHN0ZDo6ZXhwZXJpbWVudGFsOjp2aXNpdChWaXNpdG9yKHR5
cGUpLCB2YXJpYW50KTsKKyAgICBWYXJpYW50PGludCwgZmxvYXQsIFN0cmluZz4gdmFyaWFudCA9
IDg7CisgICAgV1RGOjp2aXNpdChWaXNpdG9yKHR5cGUpLCB2YXJpYW50KTsKICAgICBFWFBFQ1Rf
VFJVRShUeXBlOjpJbnQgPT0gdHlwZSk7CiAKIAogICAgIHZhcmlhbnQgPSAxLjBmOwotICAgIHN0
ZDo6ZXhwZXJpbWVudGFsOjp2aXNpdChWaXNpdG9yKHR5cGUpLCB2YXJpYW50KTsKKyAgICBXVEY6
OnZpc2l0KFZpc2l0b3IodHlwZSksIHZhcmlhbnQpOwogICAgIEVYUEVDVF9UUlVFKFR5cGU6OkZs
b2F0ID09IHR5cGUpOwogCiAKICAgICB2YXJpYW50ID0gImhlbGxvIjsKLSAgICBzdGQ6OmV4cGVy
aW1lbnRhbDo6dmlzaXQoVmlzaXRvcih0eXBlKSwgdmFyaWFudCk7CisgICAgV1RGOjp2aXNpdChW
aXNpdG9yKHR5cGUpLCB2YXJpYW50KTsKICAgICBFWFBFQ1RfVFJVRShUeXBlOjpTdHJpbmcgPT0g
dHlwZSk7CiB9CiAKQEAgLTEyNiwxOCArMTI2LDE4IEBAIFRFU1QoV1RGX1ZhcmlhbnQsIFZpc2l0
b3JVc2luZ01ha2VWaXNpdG8KICAgICAgICAgWyZdKFN0cmluZykgeyB0eXBlID0gVHlwZTo6U3Ry
aW5nOyB9CiAgICAgKTsKIAotICAgIHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50PGludCwgZmxv
YXQsIFN0cmluZz4gdmFyaWFudCA9IDg7Ci0gICAgc3RkOjpleHBlcmltZW50YWw6OnZpc2l0KHZp
c2l0b3IsIHZhcmlhbnQpOworICAgIFZhcmlhbnQ8aW50LCBmbG9hdCwgU3RyaW5nPiB2YXJpYW50
ID0gODsKKyAgICBXVEY6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOwogICAgIEVYUEVDVF9UUlVF
KFR5cGU6OkludCA9PSB0eXBlKTsKIAogCiAgICAgdmFyaWFudCA9IDEuMGY7Ci0gICAgc3RkOjpl
eHBlcmltZW50YWw6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOworICAgIFdURjo6dmlzaXQodmlz
aXRvciwgdmFyaWFudCk7CiAgICAgRVhQRUNUX1RSVUUoVHlwZTo6RmxvYXQgPT0gdHlwZSk7CiAK
IAogICAgIHZhcmlhbnQgPSAiaGVsbG8iOwotICAgIHN0ZDo6ZXhwZXJpbWVudGFsOjp2aXNpdCh2
aXNpdG9yLCB2YXJpYW50KTsKKyAgICBXVEY6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOwogICAg
IEVYUEVDVF9UUlVFKFR5cGU6OlN0cmluZyA9PSB0eXBlKTsKIH0KIApAQCAtMTQ3LDcgKzE0Nyw3
IEBAIFRFU1QoV1RGX1ZhcmlhbnQsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvcikKIAogICAgIHsKICAg
ICAgICAgYXV0byB1bmlxdWVQdHIgPSBzdGQ6Om1ha2VfdW5pcXVlPENvbnN0cnVjdG9yRGVzdHJ1
Y3RvckNvdW50ZXI+KCk7Ci0gICAgICAgIHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50PHN0ZDo6
dW5pcXVlX3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPiwgaW50PiB2ID0gV1RGTW92
ZSh1bmlxdWVQdHIpOworICAgICAgICBWYXJpYW50PHN0ZDo6dW5pcXVlX3B0cjxDb25zdHJ1Y3Rv
ckRlc3RydWN0b3JDb3VudGVyPiwgaW50PiB2ID0gV1RGTW92ZSh1bmlxdWVQdHIpOwogCiAgICAg
ICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0
aW9uQ291bnQpOwogICAgICAgICBFWFBFQ1RfRVEoMHUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNv
dW50ZXI6OmRlc3RydWN0aW9uQ291bnQpOwpAQCAtMTYyLDcgKzE2Miw3IEBAIFRFU1QoV1RGX1Zh
cmlhbnQsIFJlZlB0cikKICAgICB7CiAgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CiAgICAgICAg
IFJlZlB0cjxSZWZMb2dnZXI+IHJlZigmYSk7Ci0gICAgICAgIHN0ZDo6ZXhwZXJpbWVudGFsOjp2
YXJpYW50PFJlZlB0cjxSZWZMb2dnZXI+LCBpbnQ+IHYgPSByZWY7CisgICAgICAgIFZhcmlhbnQ8
UmVmUHRyPFJlZkxvZ2dlcj4sIGludD4gdiA9IHJlZjsKICAgICB9CiAKICAgICBBU1NFUlRfU1RS
RVEoInJlZihhKSByZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3Ry
KCkpOwpAQCAtMTcwLDcgKzE3MCw3IEBAIFRFU1QoV1RGX1ZhcmlhbnQsIFJlZlB0cikKICAgICB7
CiAgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CiAgICAgICAgIFJlZlB0cjxSZWZMb2dnZXI+IHJl
ZigmYSk7Ci0gICAgICAgIHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50PFJlZlB0cjxSZWZMb2dn
ZXI+LCBpbnQ+IHYgPSBXVEZNb3ZlKHJlZik7CisgICAgICAgIFZhcmlhbnQ8UmVmUHRyPFJlZkxv
Z2dlcj4sIGludD4gdiA9IFdURk1vdmUocmVmKTsKICAgICB9CiAKICAgICBBU1NFUlRfU1RSRVEo
InJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CkBAIC0xODEsNyArMTgx
LDcgQEAgVEVTVChXVEZfVmFyaWFudCwgUmVmKQogICAgIHsKICAgICAgICAgUmVmTG9nZ2VyIGEo
ImEiKTsKICAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmKGEpOwotICAgICAgICBzdGQ6OmV4cGVy
aW1lbnRhbDo6dmFyaWFudDxSZWY8UmVmTG9nZ2VyPiwgaW50PiB2ID0gV1RGTW92ZShyZWYpOwor
ICAgICAgICBWYXJpYW50PFJlZjxSZWZMb2dnZXI+LCBpbnQ+IHYgPSBXVEZNb3ZlKHJlZik7CiAg
ICAgfQogCiAgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigp
LmNfc3RyKCkpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>