<?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>150748</bug_id>
          
          <creation_ts>2015-10-30 19:10:42 -0700</creation_ts>
          <short_desc>B3::reduceStrength&apos;s DCE should be more agro and less wrong</short_desc>
          <delta_ts>2015-11-01 15:38:31 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>
          
          <blocked>150507</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1138091</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-30 19:10:42 -0700</bug_when>
    <thetext>There&apos;s just no good reason not to do a more aggressive DCE, where we presume everything dead and fixpoint to find live things.  It&apos;s especially easy when we use the graph helpers I extracted into WTF.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138096</commentid>
    <comment_count>1</comment_count>
      <attachid>264460</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-30 19:16:05 -0700</bug_when>
    <thetext>Created attachment 264460
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138099</commentid>
    <comment_count>2</comment_count>
      <attachid>264461</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-30 19:20:41 -0700</bug_when>
    <thetext>Created attachment 264461
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138142</commentid>
    <comment_count>3</comment_count>
      <attachid>264461</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-10-31 01:45:08 -0700</bug_when>
    <thetext>Comment on attachment 264461
the patch

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

r=me
You&apos;re right, writing this kind of DCE is super easy with that data structure.

&gt; Source/JavaScriptCore/ChangeLog:3
&gt; +        B3::reduceStrength&apos;s DCE should be more agro

When I read agro I can&apos;t help but think of &quot;agriculture&quot;

&gt; Source/JavaScriptCore/ChangeLog:7
&gt; +

It&apos;s worth adding a description here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138178</commentid>
    <comment_count>4</comment_count>
      <attachid>264479</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-31 11:29:34 -0700</bug_when>
    <thetext>Created attachment 264479
the patch

Revised patch, with bug fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138180</commentid>
    <comment_count>5</comment_count>
      <attachid>264479</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-31 11:39:13 -0700</bug_when>
    <thetext>Comment on attachment 264479
the patch

Never mind, it&apos;s still broken.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138196</commentid>
    <comment_count>6</comment_count>
      <attachid>264487</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-31 13:24:05 -0700</bug_when>
    <thetext>Created attachment 264487
work in progress

To really get a feeling for the bug, I had to use my work-in-progress &quot;complex test&quot; that I&apos;m going to use to compare compile times to LLVM.  So, I think this changeset should just include that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138225</commentid>
    <comment_count>7</comment_count>
      <attachid>264490</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-31 15:50:52 -0700</bug_when>
    <thetext>Created attachment 264490
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138226</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-31 15:52:48 -0700</bug_when>
    <thetext>Attachment 264490 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/air/AirInstInlines.h:59:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/ReducedFTL/ComplexTest.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Tools/ReducedFTL/ComplexTest.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Tools/ReducedFTL/ComplexTest.cpp:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Tools/ReducedFTL/ComplexTest.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Tools/ReducedFTL/ComplexTest.cpp:36:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Tools/ReducedFTL/ComplexTest.cpp:38:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Tools/ReducedFTL/ComplexTest.cpp:43:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Tools/ReducedFTL/ComplexTest.cpp:45:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Tools/ReducedFTL/ComplexTest.cpp:46:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Tools/ReducedFTL/ComplexTest.cpp:48:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Tools/ReducedFTL/ComplexTest.cpp:50:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Tools/ReducedFTL/ComplexTest.cpp:52:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Tools/ReducedFTL/ComplexTest.cpp:63:  bitwise_cast is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Tools/ReducedFTL/ComplexTest.cpp:98:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Tools/ReducedFTL/ComplexTest.cpp:210:  Should have a space between // and comment  [whitespace/comments] [4]
Total errors found: 16 in 16 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>1138229</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-31 16:14:42 -0700</bug_when>
    <thetext>*** Bug 150751 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138236</commentid>
    <comment_count>10</comment_count>
      <attachid>264491</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-31 16:30:10 -0700</bug_when>
    <thetext>Created attachment 264491
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138237</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-31 16:32:33 -0700</bug_when>
    <thetext>Attachment 264491 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/air/AirInstInlines.h:59:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/ReducedFTL/ComplexTest.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Tools/ReducedFTL/ComplexTest.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Tools/ReducedFTL/ComplexTest.cpp:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Tools/ReducedFTL/ComplexTest.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Tools/ReducedFTL/ComplexTest.cpp:36:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Tools/ReducedFTL/ComplexTest.cpp:38:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Tools/ReducedFTL/ComplexTest.cpp:43:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Tools/ReducedFTL/ComplexTest.cpp:45:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Tools/ReducedFTL/ComplexTest.cpp:46:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Tools/ReducedFTL/ComplexTest.cpp:48:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Tools/ReducedFTL/ComplexTest.cpp:50:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Tools/ReducedFTL/ComplexTest.cpp:52:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Tools/ReducedFTL/ComplexTest.cpp:63:  bitwise_cast is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Tools/ReducedFTL/ComplexTest.cpp:98:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Tools/ReducedFTL/ComplexTest.cpp:210:  Should have a space between // and comment  [whitespace/comments] [4]
Total errors found: 16 in 28 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>1138355</commentid>
    <comment_count>12</comment_count>
      <attachid>264491</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-11-01 12:57:25 -0800</bug_when>
    <thetext>Comment on attachment 264491
the patch

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

r=me

&gt; Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:339
&gt; +            // Can only shift by ecx, so we do some swapping of we see anything else.

of =&gt; if

&gt; Source/JavaScriptCore/runtime/Options.h:340
&gt; +    v(bool, measurePhaseTimings, false, nullptr) \

How about &quot;logB3PhaseTimes&quot; or &quot;useB3TimeLogging&quot;?

&quot;Phase&quot; alone doesn&apos;t provide context.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138358</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-01 13:20:07 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Comment on attachment 264491 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=264491&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:339
&gt; &gt; +            // Can only shift by ecx, so we do some swapping of we see anything else.
&gt; 
&gt; of =&gt; if

Fixed!

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/Options.h:340
&gt; &gt; +    v(bool, measurePhaseTimings, false, nullptr) \
&gt; 
&gt; How about &quot;logB3PhaseTimes&quot; or &quot;useB3TimeLogging&quot;?
&gt; 
&gt; &quot;Phase&quot; alone doesn&apos;t provide context.

I used logB3PhaseTimes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138400</commentid>
    <comment_count>14</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-01 15:38:31 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/191865</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264460</attachid>
            <date>2015-10-30 19:16:05 -0700</date>
            <delta_ts>2015-10-30 19:20:41 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>6395</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkxODM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBA
CisyMDE1LTEwLTMwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QjM6OnJlZHVjZVN0cmVuZ3RoJ3MgRENFIHNob3VsZCBiZSBtb3JlIGFncm8KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDc0OAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYjMvQjNCYXNpY0Jsb2NrLmNw
cDoKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OnJlbW92ZU5vcHMpOiBEZWxldGVkLiBX
ZSBkb24ndCBuZWVkIHRoaXMgYW55bW9yZS4KKyAgICAgICAgKiBiMy9CM0Jhc2ljQmxvY2suaDoK
KyAgICAgICAgKiBiMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcDogUmVwbGFjZWQgdGhlIGNvbWJpbmF0
aW9uIG9mIHNpbXBsZSBEQ0UgYW5kIHJlbW92ZU5vcHMgd2l0aCBhIHNpbmxlIHByZXN1bWUtZGVh
ZC1hbmQtZmluZC1saXZlIGtpZG4gb2YgRENFLgorICAgICAgICAqIGIzL0IzVmFsaWRhdGUuY3Bw
OiBJIGFsbW9zdCBicm9rZSBldmVyeXRoaW5nIGJ5IGNyZWF0aW5nIGR1cGxpY2F0ZSB2YWx1ZXMg
aW4gYSBibG9jay4gSSBmaWd1cmVkIEknZCBhZGQgYSB2YWxpZGF0aW9uIHJ1bGUgZm9yIHRoYXQu
CisKIDIwMTUtMTAtMzAgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CiAKICAg
ICAgICAgV2luZG93cyBYODYtNjQgY2hhbmdlIGZvciBDcmFzaCBtYWtpbmcgYSB0YWlsIGNhbGwg
ZnJvbSBhIGdldHRlciB0byBhIGhvc3QgZnVuY3Rpb24KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0Jhc2ljQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0Jhc2ljQmxvY2suY3BwCShyZXZpc2lvbiAxOTE4MzQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsMjAg
KzY3LDYgQEAgYm9vbCBCYXNpY0Jsb2NrOjpyZXBsYWNlUHJlZGVjZXNzb3IoQmFzaQogICAgIHJl
dHVybiBCMzo6cmVwbGFjZVByZWRlY2Vzc29yKHRoaXMsIGZyb20sIHRvKTsKIH0KIAotdm9pZCBC
YXNpY0Jsb2NrOjpyZW1vdmVOb3BzKFByb2NlZHVyZSYgcHJvY2VkdXJlKQotewotICAgIHVuc2ln
bmVkIHNvdXJjZUluZGV4ID0gMDsKLSAgICB1bnNpZ25lZCB0YXJnZXRJbmRleCA9IDA7Ci0gICAg
d2hpbGUgKHNvdXJjZUluZGV4IDwgc2l6ZSgpKSB7Ci0gICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1f
dmFsdWVzW3NvdXJjZUluZGV4KytdOwotICAgICAgICBpZiAodmFsdWUtPm9wY29kZSgpID09IE5v
cCkKLSAgICAgICAgICAgIHByb2NlZHVyZS5kZWxldGVWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIG1fdmFsdWVzW3RhcmdldEluZGV4KytdID0gdmFsdWU7Ci0gICAgfQot
ICAgIG1fdmFsdWVzLnJlc2l6ZSh0YXJnZXRJbmRleCk7Ci19Ci0KIHZvaWQgQmFzaWNCbG9jazo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIG91dC5wcmludChkdW1wUHJlZml4
LCBtX2luZGV4KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmgJ
KHJldmlzaW9uIDE5MTgzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxv
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtOTUsOCArOTUsNiBAQCBwdWJsaWM6CiAKICAgICBkb3Vi
bGUgZnJlcXVlbmN5KCkgY29uc3QgeyByZXR1cm4gbV9mcmVxdWVuY3k7IH0KIAotICAgIHZvaWQg
cmVtb3ZlTm9wcyhQcm9jZWR1cmUmKTsKLQogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OwogICAgIHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAkocmV2aXNpb24g
MTkxODM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMiArMjksMTQgQEAKICNpZiBFTkFCTEUoQjNfSklUKQog
CiAjaW5jbHVkZSAiQjNDb250cm9sVmFsdWUuaCIKKyNpbmNsdWRlICJCM0luZGV4U2V0LmgiCiAj
aW5jbHVkZSAiQjNJbnNlcnRpb25TZXRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNNZW1vcnlWYWx1
ZS5oIgogI2luY2x1ZGUgIkIzUGhhc2VTY29wZS5oIgogI2luY2x1ZGUgIkIzUHJvY2VkdXJlSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkIzVXNlQ291bnRzLmgiCiAjaW5jbHVkZSAiQjNWYWx1ZUlubGlu
ZXMuaCIKKyNpbmNsdWRlIDx3dGYvR3JhcGhOb2RlV29ya2xpc3QuaD4KIAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CiAKQEAgLTYxLDggKzYzLDYgQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgIGZvciAobV9pbmRleCA9IDA7IG1faW5kZXggPCBibG9jay0+c2l6ZSgpOyArK21faW5k
ZXgpCiAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MoKTsKICAgICAgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5leGVjdXRlKG1fYmxvY2spOwotCi0gICAgICAgICAgICAgICAgYmxvY2stPnJl
bW92ZU5vcHMobV9wcm9jKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKG1fY2hh
bmdlZENGRykgewpAQCAtNzAsMTMgKzcwLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIG1f
Y2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIFVzZUNvdW50cyB1
c2VDb3VudHMobV9wcm9jKTsKLSAgICAgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogbV9wcm9j
LnZhbHVlcygpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCF1c2VDb3VudHNbdmFsdWVdICYmICF2
YWx1ZS0+ZWZmZWN0cygpLm11c3RFeGVjdXRlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFs
dWUtPnJlcGxhY2VXaXRoTm9wKCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAgICAgICAga2lsbERl
YWRDb2RlKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHJlc3VsdCB8PSBtX2NoYW5nZWQ7
CiAgICAgICAgIH0gd2hpbGUgKG1fY2hhbmdlZCk7CkBAIC0zMjIsNiArMzE2LDQxIEBAIHByaXZh
dGU6CiAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAgfQogCisgICAgdm9pZCBraWxsRGVh
ZENvZGUoKQorICAgIHsKKyAgICAgICAgR3JhcGhOb2RlV29ya2xpc3Q8VmFsdWUqLCBJbmRleFNl
dDxWYWx1ZT4+IHdvcmtsaXN0OworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9w
cm9jKSB7CisgICAgICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6ICpibG9jaykgeworICAgICAg
ICAgICAgICAgIGlmICh2YWx1ZS0+ZWZmZWN0cygpLm11c3RFeGVjdXRlKCkpCisgICAgICAgICAg
ICAgICAgICAgIHdvcmtsaXN0LnB1c2godmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIHdoaWxlIChWYWx1ZSogdmFsdWUgPSB3b3JrbGlzdC5wb3AoKSkgeworICAgICAg
ICAgICAgZm9yIChWYWx1ZSogY2hpbGQgOiB2YWx1ZS0+Y2hpbGRyZW4oKSkKKyAgICAgICAgICAg
ICAgICB3b3JrbGlzdC5wdXNoKGNoaWxkKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoQmFz
aWNCbG9jayogYmxvY2sgOiBtX3Byb2MpIHsKKyAgICAgICAgICAgIHNpemVfdCBzb3VyY2VJbmRl
eCA9IDA7CisgICAgICAgICAgICBzaXplX3QgdGFyZ2V0SW5kZXggPSAwOworICAgICAgICAgICAg
d2hpbGUgKHNvdXJjZUluZGV4IDwgYmxvY2stPnNpemUoKSkgeworICAgICAgICAgICAgICAgIFZh
bHVlKiB2YWx1ZSA9IGJsb2NrLT5hdChzb3VyY2VJbmRleCsrKTsKKyAgICAgICAgICAgICAgICBp
ZiAod29ya2xpc3Quc2F3KHZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAgYmxvY2stPmF0KHRh
cmdldEluZGV4KyspID0gdmFsdWU7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIG1fcHJvYy5kZWxldGVWYWx1ZSh2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIG5vdCBlbnRpcmVseSBjbGVhciBpZiB0aGlz
IGlzIG5lZWRlZC4gSSB0aGluayBpdCBtYWtlcyBzZW5zZSB0byBoYXZlCisgICAgICAgICAgICAg
ICAgICAgIC8vIHRoaXMgZm9yY2UgYSByZXJ1biBvZiB0aGUgZml4cG9pbnQgZm9yIG5vdywgc2lu
Y2UgdGhhdCB3aWxsIG1ha2UgaXQgZWFzaWVyCisgICAgICAgICAgICAgICAgICAgIC8vIHRvIGRv
IHBlZXBob2xlIG9wdGltaXphdGlvbnM6IHJlbW92aW5nIGRlYWQgY29kZSB3aWxsIG1ha2UgdGhl
IHBlZXBob2xlCisgICAgICAgICAgICAgICAgICAgIC8vIGVhc2llciB0byBzcG90LgorICAgICAg
ICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJsb2NrLT52YWx1ZXMoKS5yZXNpemUodGFyZ2V0SW5kZXgp
OworICAgICAgICB9CisgICAgfQorCiAgICAgUHJvY2VkdXJlJiBtX3Byb2M7CiAgICAgSW5zZXJ0
aW9uU2V0IG1faW5zZXJ0aW9uU2V0OwogICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAxOTE4MzQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYxLDEyICs2MSwxMiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBIYXNoU2V0PEJhc2lj
QmxvY2sqPiBibG9ja3M7CiAgICAgICAgIEhhc2hTZXQ8VmFsdWUqPiB2YWx1ZUluUHJvYzsKLSAg
ICAgICAgSGFzaFNldDxWYWx1ZSo+IHZhbHVlSW5CbG9jazsKKyAgICAgICAgSGFzaE1hcDxWYWx1
ZSosIHVuc2lnbmVkPiB2YWx1ZUluQmxvY2s7CiAKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6IG1fcHJvY2VkdXJlKSB7CiAgICAgICAgICAgICBibG9ja3MuYWRkKGJsb2NrKTsKICAg
ICAgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogKmJsb2NrKQotICAgICAgICAgICAgICAgIHZh
bHVlSW5CbG9jay5hZGQodmFsdWUpOworICAgICAgICAgICAgICAgIHZhbHVlSW5CbG9jay5hZGQo
dmFsdWUsIDApLml0ZXJhdG9yLT52YWx1ZSsrOwogICAgICAgICB9CiAKICAgICAgICAgZm9yIChW
YWx1ZSogdmFsdWUgOiBtX3Byb2NlZHVyZS52YWx1ZXMoKSkKQEAgLTc0LDggKzc0LDEwIEBAIHB1
YmxpYzoKIAogICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IHZhbHVlSW5Qcm9jKQogICAgICAg
ICAgICAgVkFMSURBVEUodmFsdWVJbkJsb2NrLmNvbnRhaW5zKHZhbHVlKSwgKCJBdCAiLCAqdmFs
dWUpKTsKLSAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiB2YWx1ZUluQmxvY2spCi0gICAgICAg
ICAgICBWQUxJREFURSh2YWx1ZUluUHJvYy5jb250YWlucyh2YWx1ZSksICgiQXQgIiwgKnZhbHVl
KSk7CisgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiB2YWx1ZUluQmxvY2spIHsKKyAgICAgICAg
ICAgIFZBTElEQVRFKHZhbHVlSW5Qcm9jLmNvbnRhaW5zKGVudHJ5LmtleSksICgiQXQgIiwgKmVu
dHJ5LmtleSkpOworICAgICAgICAgICAgVkFMSURBVEUoZW50cnkudmFsdWUgPT0gMSwgKCJBdCAi
LCAqZW50cnkua2V5KSk7CisgICAgICAgIH0KIAogICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6
IHZhbHVlSW5Qcm9jKSB7CiAgICAgICAgICAgICBmb3IgKFZhbHVlKiBjaGlsZCA6IHZhbHVlLT5j
aGlsZHJlbigpKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264461</attachid>
            <date>2015-10-30 19:20:41 -0700</date>
            <delta_ts>2015-10-31 11:29:34 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>7417</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkxODM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBA
CisyMDE1LTEwLTMwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QjM6OnJlZHVjZVN0cmVuZ3RoJ3MgRENFIHNob3VsZCBiZSBtb3JlIGFncm8KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDc0OAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYjMvQjNCYXNpY0Jsb2NrLmNw
cDoKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OnJlbW92ZU5vcHMpOiBEZWxldGVkLiBX
ZSBkb24ndCBuZWVkIHRoaXMgYW55bW9yZS4KKyAgICAgICAgKiBiMy9CM0Jhc2ljQmxvY2suaDoK
KyAgICAgICAgKiBiMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcDogUmVwbGFjZWQgdGhlIGNvbWJpbmF0
aW9uIG9mIHNpbXBsZSBEQ0UgYW5kIHJlbW92ZU5vcHMgd2l0aCBhIHNpbmxlIHByZXN1bWUtZGVh
ZC1hbmQtZmluZC1saXZlIGtpZG4gb2YgRENFLgorICAgICAgICAqIGIzL0IzVmFsaWRhdGUuY3Bw
OiBJIGFsbW9zdCBicm9rZSBldmVyeXRoaW5nIGJ5IGNyZWF0aW5nIGR1cGxpY2F0ZSB2YWx1ZXMg
aW4gYSBibG9jay4gSSBmaWd1cmVkIEknZCBhZGQgYSB2YWxpZGF0aW9uIHJ1bGUgZm9yIHRoYXQu
CisKIDIwMTUtMTAtMzAgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CiAKICAg
ICAgICAgV2luZG93cyBYODYtNjQgY2hhbmdlIGZvciBDcmFzaCBtYWtpbmcgYSB0YWlsIGNhbGwg
ZnJvbSBhIGdldHRlciB0byBhIGhvc3QgZnVuY3Rpb24KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0Jhc2ljQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0Jhc2ljQmxvY2suY3BwCShyZXZpc2lvbiAxOTE4MzQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsMjAg
KzY3LDYgQEAgYm9vbCBCYXNpY0Jsb2NrOjpyZXBsYWNlUHJlZGVjZXNzb3IoQmFzaQogICAgIHJl
dHVybiBCMzo6cmVwbGFjZVByZWRlY2Vzc29yKHRoaXMsIGZyb20sIHRvKTsKIH0KIAotdm9pZCBC
YXNpY0Jsb2NrOjpyZW1vdmVOb3BzKFByb2NlZHVyZSYgcHJvY2VkdXJlKQotewotICAgIHVuc2ln
bmVkIHNvdXJjZUluZGV4ID0gMDsKLSAgICB1bnNpZ25lZCB0YXJnZXRJbmRleCA9IDA7Ci0gICAg
d2hpbGUgKHNvdXJjZUluZGV4IDwgc2l6ZSgpKSB7Ci0gICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1f
dmFsdWVzW3NvdXJjZUluZGV4KytdOwotICAgICAgICBpZiAodmFsdWUtPm9wY29kZSgpID09IE5v
cCkKLSAgICAgICAgICAgIHByb2NlZHVyZS5kZWxldGVWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIG1fdmFsdWVzW3RhcmdldEluZGV4KytdID0gdmFsdWU7Ci0gICAgfQot
ICAgIG1fdmFsdWVzLnJlc2l6ZSh0YXJnZXRJbmRleCk7Ci19Ci0KIHZvaWQgQmFzaWNCbG9jazo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIG91dC5wcmludChkdW1wUHJlZml4
LCBtX2luZGV4KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmgJ
KHJldmlzaW9uIDE5MTgzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxv
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtOTUsOCArOTUsNiBAQCBwdWJsaWM6CiAKICAgICBkb3Vi
bGUgZnJlcXVlbmN5KCkgY29uc3QgeyByZXR1cm4gbV9mcmVxdWVuY3k7IH0KIAotICAgIHZvaWQg
cmVtb3ZlTm9wcyhQcm9jZWR1cmUmKTsKLQogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OwogICAgIHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAkocmV2aXNpb24g
MTkxODM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMiArMjksMTQgQEAKICNpZiBFTkFCTEUoQjNfSklUKQog
CiAjaW5jbHVkZSAiQjNDb250cm9sVmFsdWUuaCIKKyNpbmNsdWRlICJCM0luZGV4U2V0LmgiCiAj
aW5jbHVkZSAiQjNJbnNlcnRpb25TZXRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNNZW1vcnlWYWx1
ZS5oIgogI2luY2x1ZGUgIkIzUGhhc2VTY29wZS5oIgogI2luY2x1ZGUgIkIzUHJvY2VkdXJlSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkIzVXNlQ291bnRzLmgiCiAjaW5jbHVkZSAiQjNWYWx1ZUlubGlu
ZXMuaCIKKyNpbmNsdWRlIDx3dGYvR3JhcGhOb2RlV29ya2xpc3QuaD4KIAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CiAKQEAgLTYxLDggKzYzLDYgQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgIGZvciAobV9pbmRleCA9IDA7IG1faW5kZXggPCBibG9jay0+c2l6ZSgpOyArK21faW5k
ZXgpCiAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MoKTsKICAgICAgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5leGVjdXRlKG1fYmxvY2spOwotCi0gICAgICAgICAgICAgICAgYmxvY2stPnJl
bW92ZU5vcHMobV9wcm9jKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKG1fY2hh
bmdlZENGRykgewpAQCAtNzAsMTMgKzcwLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIG1f
Y2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIFVzZUNvdW50cyB1
c2VDb3VudHMobV9wcm9jKTsKLSAgICAgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogbV9wcm9j
LnZhbHVlcygpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCF1c2VDb3VudHNbdmFsdWVdICYmICF2
YWx1ZS0+ZWZmZWN0cygpLm11c3RFeGVjdXRlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFs
dWUtPnJlcGxhY2VXaXRoTm9wKCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAgICAgICAga2lsbERl
YWRDb2RlKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHJlc3VsdCB8PSBtX2NoYW5nZWQ7
CiAgICAgICAgIH0gd2hpbGUgKG1fY2hhbmdlZCk7CkBAIC0zMjIsNiArMzE2LDQxIEBAIHByaXZh
dGU6CiAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAgfQogCisgICAgdm9pZCBraWxsRGVh
ZENvZGUoKQorICAgIHsKKyAgICAgICAgR3JhcGhOb2RlV29ya2xpc3Q8VmFsdWUqLCBJbmRleFNl
dDxWYWx1ZT4+IHdvcmtsaXN0OworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9w
cm9jKSB7CisgICAgICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6ICpibG9jaykgeworICAgICAg
ICAgICAgICAgIGlmICh2YWx1ZS0+ZWZmZWN0cygpLm11c3RFeGVjdXRlKCkpCisgICAgICAgICAg
ICAgICAgICAgIHdvcmtsaXN0LnB1c2godmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIHdoaWxlIChWYWx1ZSogdmFsdWUgPSB3b3JrbGlzdC5wb3AoKSkgeworICAgICAg
ICAgICAgZm9yIChWYWx1ZSogY2hpbGQgOiB2YWx1ZS0+Y2hpbGRyZW4oKSkKKyAgICAgICAgICAg
ICAgICB3b3JrbGlzdC5wdXNoKGNoaWxkKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoQmFz
aWNCbG9jayogYmxvY2sgOiBtX3Byb2MpIHsKKyAgICAgICAgICAgIHNpemVfdCBzb3VyY2VJbmRl
eCA9IDA7CisgICAgICAgICAgICBzaXplX3QgdGFyZ2V0SW5kZXggPSAwOworICAgICAgICAgICAg
d2hpbGUgKHNvdXJjZUluZGV4IDwgYmxvY2stPnNpemUoKSkgeworICAgICAgICAgICAgICAgIFZh
bHVlKiB2YWx1ZSA9IGJsb2NrLT5hdChzb3VyY2VJbmRleCsrKTsKKyAgICAgICAgICAgICAgICBp
ZiAod29ya2xpc3Quc2F3KHZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAgYmxvY2stPmF0KHRh
cmdldEluZGV4KyspID0gdmFsdWU7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIG1fcHJvYy5kZWxldGVWYWx1ZSh2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIG5vdCBlbnRpcmVseSBjbGVhciBpZiB0aGlz
IGlzIG5lZWRlZC4gSSB0aGluayBpdCBtYWtlcyBzZW5zZSB0byBoYXZlCisgICAgICAgICAgICAg
ICAgICAgIC8vIHRoaXMgZm9yY2UgYSByZXJ1biBvZiB0aGUgZml4cG9pbnQgZm9yIG5vdywgc2lu
Y2UgdGhhdCB3aWxsIG1ha2UgaXQgZWFzaWVyCisgICAgICAgICAgICAgICAgICAgIC8vIHRvIGRv
IHBlZXBob2xlIG9wdGltaXphdGlvbnM6IHJlbW92aW5nIGRlYWQgY29kZSB3aWxsIG1ha2UgdGhl
IHBlZXBob2xlCisgICAgICAgICAgICAgICAgICAgIC8vIGVhc2llciB0byBzcG90LgorICAgICAg
ICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJsb2NrLT52YWx1ZXMoKS5yZXNpemUodGFyZ2V0SW5kZXgp
OworICAgICAgICB9CisgICAgfQorCiAgICAgUHJvY2VkdXJlJiBtX3Byb2M7CiAgICAgSW5zZXJ0
aW9uU2V0IG1faW5zZXJ0aW9uU2V0OwogICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAxOTE4MzQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYxLDEyICs2MSwxMiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBIYXNoU2V0PEJhc2lj
QmxvY2sqPiBibG9ja3M7CiAgICAgICAgIEhhc2hTZXQ8VmFsdWUqPiB2YWx1ZUluUHJvYzsKLSAg
ICAgICAgSGFzaFNldDxWYWx1ZSo+IHZhbHVlSW5CbG9jazsKKyAgICAgICAgSGFzaE1hcDxWYWx1
ZSosIHVuc2lnbmVkPiB2YWx1ZUluQmxvY2s7CiAKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6IG1fcHJvY2VkdXJlKSB7CiAgICAgICAgICAgICBibG9ja3MuYWRkKGJsb2NrKTsKICAg
ICAgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogKmJsb2NrKQotICAgICAgICAgICAgICAgIHZh
bHVlSW5CbG9jay5hZGQodmFsdWUpOworICAgICAgICAgICAgICAgIHZhbHVlSW5CbG9jay5hZGQo
dmFsdWUsIDApLml0ZXJhdG9yLT52YWx1ZSsrOwogICAgICAgICB9CiAKICAgICAgICAgZm9yIChW
YWx1ZSogdmFsdWUgOiBtX3Byb2NlZHVyZS52YWx1ZXMoKSkKQEAgLTc0LDggKzc0LDEwIEBAIHB1
YmxpYzoKIAogICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IHZhbHVlSW5Qcm9jKQogICAgICAg
ICAgICAgVkFMSURBVEUodmFsdWVJbkJsb2NrLmNvbnRhaW5zKHZhbHVlKSwgKCJBdCAiLCAqdmFs
dWUpKTsKLSAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiB2YWx1ZUluQmxvY2spCi0gICAgICAg
ICAgICBWQUxJREFURSh2YWx1ZUluUHJvYy5jb250YWlucyh2YWx1ZSksICgiQXQgIiwgKnZhbHVl
KSk7CisgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiB2YWx1ZUluQmxvY2spIHsKKyAgICAgICAg
ICAgIFZBTElEQVRFKHZhbHVlSW5Qcm9jLmNvbnRhaW5zKGVudHJ5LmtleSksICgiQXQgIiwgKmVu
dHJ5LmtleSkpOworICAgICAgICAgICAgVkFMSURBVEUoZW50cnkudmFsdWUgPT0gMSwgKCJBdCAi
LCAqZW50cnkua2V5KSk7CisgICAgICAgIH0KIAogICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6
IHZhbHVlSW5Qcm9jKSB7CiAgICAgICAgICAgICBmb3IgKFZhbHVlKiBjaGlsZCA6IHZhbHVlLT5j
aGlsZHJlbigpKQpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MTgzNSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTUtMTAtMzAgIEZpbGlwIFBp
emxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBCMzo6cmVkdWNlU3RyZW5ndGgncyBE
Q0Ugc2hvdWxkIGJlIG1vcmUgYWdybworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTUwNzQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiB3dGYvR3JhcGhOb2RlV29ya2xpc3QuaDoKKyAgICAgICAgKFdURjo6
R3JhcGhOb2RlV29ya2xpc3Q6OnNhdyk6IFRoaXMgaXMgZ29pbmcgdG8gYmUgdXNlZnVsLgorCiAy
MDE1LTEwLTMwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgUmVn
cmVzc2lvbihyMTkxNjczKTogQ3Jhc2ggaW4gUnVuTG9vcFRpbWVyOjpzY2hlZHVsZSgpCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9HcmFwaE5vZGVXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL0dyYXBoTm9kZVdvcmtsaXN0LmgJKHJldmlzaW9uIDE5MTgzNCkKKysrIFNvdXJj
ZS9XVEYvd3RmL0dyYXBoTm9kZVdvcmtsaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0
LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9zdGFjay50YWtlTGFzdCgpOwogICAgIH0K
IAorICAgIGJvb2wgc2F3KE5vZGUgbm9kZSkgeyByZXR1cm4gbV9zZWVuLmNvbnRhaW5zKG5vZGUp
OyB9CisKIHByaXZhdGU6CiAgICAgU2V0IG1fc2VlbjsKICAgICBWZWN0b3I8Tm9kZSwgMTY+IG1f
c3RhY2s7Cg==
</data>
<flag name="review"
          id="289588"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264479</attachid>
            <date>2015-10-31 11:29:34 -0700</date>
            <delta_ts>2015-10-31 13:24:05 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>8498</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkxODM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBA
CisyMDE1LTEwLTMwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QjM6OnJlZHVjZVN0cmVuZ3RoJ3MgRENFIHNob3VsZCBiZSBtb3JlIGFncm8KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDc0OAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZXJlJ3MganVzdCBubyBnb29k
IHJlYXNvbiBub3QgdG8gZG8gYSBtb3JlIGFnZ3Jlc3NpdmUgRENFLCB3aGVyZSB3ZSBwcmVzdW1l
IGV2ZXJ5dGhpbmcKKyAgICAgICAgZGVhZCBhbmQgZml4cG9pbnQgdG8gZmluZCBsaXZlIHRoaW5n
cy4gSXQncyBlc3BlY2lhbGx5IGVhc3kgd2hlbiB3ZSB1c2UgdGhlIGdyYXBoIGhlbHBlcnMgSQor
ICAgICAgICBleHRyYWN0ZWQgaW50byBXVEYuCisKKyAgICAgICAgVGhpcyBhbHNvIGZpeGVzIGEg
YnVnIHdoZXJlIHdlIHdlcmUgaW5jb3JyZWN0bHkga2lsbGluZyBVcHNpbG9ucy4KKworICAgICAg
ICAqIGIzL0IzQmFzaWNCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpy
ZW1vdmVOb3BzKTogRGVsZXRlZC4gV2UgZG9uJ3QgbmVlZCB0aGlzIGFueW1vcmUuCisgICAgICAg
ICogYjMvQjNCYXNpY0Jsb2NrLmg6CisgICAgICAgICogYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHA6
IFJlcGxhY2VkIHRoZSBjb21iaW5hdGlvbiBvZiBzaW1wbGUgRENFIGFuZCByZW1vdmVOb3BzIHdp
dGggYSBzaW5sZSBwcmVzdW1lLWRlYWQtYW5kLWZpbmQtbGl2ZSBraWRuIG9mIERDRS4KKyAgICAg
ICAgKiBiMy9CM1ZhbGlkYXRlLmNwcDogSSBhbG1vc3QgYnJva2UgZXZlcnl0aGluZyBieSBjcmVh
dGluZyBkdXBsaWNhdGUgdmFsdWVzIGluIGEgYmxvY2suIEkgZmlndXJlZCBJJ2QgYWRkIGEgdmFs
aWRhdGlvbiBydWxlIGZvciB0aGF0LgorCiAyMDE1LTEwLTMwICBNaWNoYWVsIFNhYm9mZiAgPG1z
YWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIFdpbmRvd3MgWDg2LTY0IGNoYW5nZSBmb3IgQ3Jh
c2ggbWFraW5nIGEgdGFpbCBjYWxsIGZyb20gYSBnZXR0ZXIgdG8gYSBob3N0IGZ1bmN0aW9uCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24g
MTkxODM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY3LDIwICs2Nyw2IEBAIGJvb2wgQmFzaWNCbG9jazo6cmVwbGFjZVBy
ZWRlY2Vzc29yKEJhc2kKICAgICByZXR1cm4gQjM6OnJlcGxhY2VQcmVkZWNlc3Nvcih0aGlzLCBm
cm9tLCB0byk7CiB9CiAKLXZvaWQgQmFzaWNCbG9jazo6cmVtb3ZlTm9wcyhQcm9jZWR1cmUmIHBy
b2NlZHVyZSkKLXsKLSAgICB1bnNpZ25lZCBzb3VyY2VJbmRleCA9IDA7Ci0gICAgdW5zaWduZWQg
dGFyZ2V0SW5kZXggPSAwOwotICAgIHdoaWxlIChzb3VyY2VJbmRleCA8IHNpemUoKSkgewotICAg
ICAgICBWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlc1tzb3VyY2VJbmRleCsrXTsKLSAgICAgICAgaWYg
KHZhbHVlLT5vcGNvZGUoKSA9PSBOb3ApCi0gICAgICAgICAgICBwcm9jZWR1cmUuZGVsZXRlVmFs
dWUodmFsdWUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3ZhbHVlc1t0YXJnZXRJbmRl
eCsrXSA9IHZhbHVlOwotICAgIH0KLSAgICBtX3ZhbHVlcy5yZXNpemUodGFyZ2V0SW5kZXgpOwot
fQotCiB2b2lkIEJhc2ljQmxvY2s6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAg
ICBvdXQucHJpbnQoZHVtcFByZWZpeCwgbV9pbmRleCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQmFzaWNCbG9jay5oCShyZXZpc2lvbiAxOTE4MzQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTk1LDggKzk1LDYg
QEAgcHVibGljOgogCiAgICAgZG91YmxlIGZyZXF1ZW5jeSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJl
cXVlbmN5OyB9CiAKLSAgICB2b2lkIHJlbW92ZU5vcHMoUHJvY2VkdXJlJik7Ci0KICAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVu
Z3RoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VT
dHJlbmd0aC5jcHAJKHJldmlzaW9uIDE5MTgzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1JlZHVjZVN0cmVuZ3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTIgKzI5LDE1IEBA
CiAjaWYgRU5BQkxFKEIzX0pJVCkKIAogI2luY2x1ZGUgIkIzQ29udHJvbFZhbHVlLmgiCisjaW5j
bHVkZSAiQjNJbmRleFNldC5oIgogI2luY2x1ZGUgIkIzSW5zZXJ0aW9uU2V0SW5saW5lcy5oIgog
I2luY2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKICNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIKICNp
bmNsdWRlICJCM1Byb2NlZHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJCM1Vwc2lsb25WYWx1ZS5o
IgogI2luY2x1ZGUgIkIzVXNlQ291bnRzLmgiCiAjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIK
KyNpbmNsdWRlIDx3dGYvR3JhcGhOb2RlV29ya2xpc3QuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CiAKQEAgLTYxLDggKzY0LDYgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
IGZvciAobV9pbmRleCA9IDA7IG1faW5kZXggPCBibG9jay0+c2l6ZSgpOyArK21faW5kZXgpCiAg
ICAgICAgICAgICAgICAgICAgIHByb2Nlc3MoKTsKICAgICAgICAgICAgICAgICBtX2luc2VydGlv
blNldC5leGVjdXRlKG1fYmxvY2spOwotCi0gICAgICAgICAgICAgICAgYmxvY2stPnJlbW92ZU5v
cHMobV9wcm9jKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKG1fY2hhbmdlZENG
RykgewpAQCAtNzAsMTMgKzcxLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIG1fY2hhbmdl
ZCA9IHRydWU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIFVzZUNvdW50cyB1c2VDb3Vu
dHMobV9wcm9jKTsKLSAgICAgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogbV9wcm9jLnZhbHVl
cygpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCF1c2VDb3VudHNbdmFsdWVdICYmICF2YWx1ZS0+
ZWZmZWN0cygpLm11c3RFeGVjdXRlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUtPnJl
cGxhY2VXaXRoTm9wKCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAgICAgICAga2lsbERlYWRDb2Rl
KCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHJlc3VsdCB8PSBtX2NoYW5nZWQ7CiAgICAg
ICAgIH0gd2hpbGUgKG1fY2hhbmdlZCk7CkBAIC0zMjIsNiArMzE3LDU5IEBAIHByaXZhdGU6CiAg
ICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAgfQogCisgICAgdm9pZCBraWxsRGVhZENvZGUo
KQorICAgIHsKKyAgICAgICAgR3JhcGhOb2RlV29ya2xpc3Q8VmFsdWUqLCBJbmRleFNldDxWYWx1
ZT4+IHdvcmtsaXN0OworICAgICAgICBWZWN0b3I8VXBzaWxvblZhbHVlKiwgNjQ+IHVwc2lsb25z
OworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7CisgICAgICAgICAg
ICBmb3IgKFZhbHVlKiB2YWx1ZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAgIGlmICh2YWx1
ZS0+ZWZmZWN0cygpLm11c3RFeGVjdXRlKCkpCisgICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0
LnB1c2godmFsdWUpOworICAgICAgICAgICAgICAgIGlmIChVcHNpbG9uVmFsdWUqIHVwc2lsb24g
PSB2YWx1ZS0+YXM8VXBzaWxvblZhbHVlPigpKQorICAgICAgICAgICAgICAgICAgICB1cHNpbG9u
cy5hcHBlbmQodXBzaWxvbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9y
ICg7OykgeworICAgICAgICAgICAgd2hpbGUgKFZhbHVlKiB2YWx1ZSA9IHdvcmtsaXN0LnBvcCgp
KSB7CisgICAgICAgICAgICAgICAgZm9yIChWYWx1ZSogY2hpbGQgOiB2YWx1ZS0+Y2hpbGRyZW4o
KSkKKyAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChjaGlsZCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJvb2wgZGlkUHVzaCA9IGZhbHNlOworICAg
ICAgICAgICAgZm9yIChzaXplX3QgdXBzaWxvbkluZGV4ID0gMDsgdXBzaWxvbkluZGV4IDwgdXBz
aWxvbnMuc2l6ZSgpOyArK3Vwc2lsb25JbmRleCkgeworICAgICAgICAgICAgICAgIFVwc2lsb25W
YWx1ZSogdXBzaWxvbiA9IHVwc2lsb25zW3Vwc2lsb25JbmRleF07CisgICAgICAgICAgICAgICAg
aWYgKHdvcmtsaXN0LnNhdyh1cHNpbG9uLT5waGkoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
d29ya2xpc3QucHVzaCh1cHNpbG9uKTsKKyAgICAgICAgICAgICAgICAgICAgdXBzaWxvbnNbdXBz
aWxvbkluZGV4LS1dID0gdXBzaWxvbnMubGFzdCgpOworICAgICAgICAgICAgICAgICAgICB1cHNp
bG9ucy50YWtlTGFzdCgpOworICAgICAgICAgICAgICAgICAgICBkaWRQdXNoID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWRpZFB1c2gp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKEJhc2lj
QmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7CisgICAgICAgICAgICBzaXplX3Qgc291cmNlSW5kZXgg
PSAwOworICAgICAgICAgICAgc2l6ZV90IHRhcmdldEluZGV4ID0gMDsKKyAgICAgICAgICAgIHdo
aWxlIChzb3VyY2VJbmRleCA8IGJsb2NrLT5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICBWYWx1
ZSogdmFsdWUgPSBibG9jay0+YXQoc291cmNlSW5kZXgrKyk7CisgICAgICAgICAgICAgICAgaWYg
KHdvcmtsaXN0LnNhdyh2YWx1ZSkpCisgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5hdCh0YXJn
ZXRJbmRleCsrKSA9IHZhbHVlOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICBtX3Byb2MuZGVsZXRlVmFsdWUodmFsdWUpOworICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgLy8gSXQncyBub3QgZW50aXJlbHkgY2xlYXIgaWYgdGhpcyBp
cyBuZWVkZWQuIEkgdGhpbmsgaXQgbWFrZXMgc2Vuc2UgdG8gaGF2ZQorICAgICAgICAgICAgICAg
ICAgICAvLyB0aGlzIGZvcmNlIGEgcmVydW4gb2YgdGhlIGZpeHBvaW50IGZvciBub3csIHNpbmNl
IHRoYXQgd2lsbCBtYWtlIGl0IGVhc2llcgorICAgICAgICAgICAgICAgICAgICAvLyB0byBkbyBw
ZWVwaG9sZSBvcHRpbWl6YXRpb25zOiByZW1vdmluZyBkZWFkIGNvZGUgd2lsbCBtYWtlIHRoZSBw
ZWVwaG9sZQorICAgICAgICAgICAgICAgICAgICAvLyBlYXNpZXIgdG8gc3BvdC4KKyAgICAgICAg
ICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBibG9jay0+dmFsdWVzKCkucmVzaXplKHRhcmdldEluZGV4KTsK
KyAgICAgICAgfQorICAgIH0KKwogICAgIFByb2NlZHVyZSYgbV9wcm9jOwogICAgIEluc2VydGlv
blNldCBtX2luc2VydGlvblNldDsKICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAkocmV2aXNpb24gMTkxODM0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02MSwxMiArNjEsMTIgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgSGFzaFNldDxCYXNpY0Js
b2NrKj4gYmxvY2tzOwogICAgICAgICBIYXNoU2V0PFZhbHVlKj4gdmFsdWVJblByb2M7Ci0gICAg
ICAgIEhhc2hTZXQ8VmFsdWUqPiB2YWx1ZUluQmxvY2s7CisgICAgICAgIEhhc2hNYXA8VmFsdWUq
LCB1bnNpZ25lZD4gdmFsdWVJbkJsb2NrOwogCiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxv
Y2sgOiBtX3Byb2NlZHVyZSkgewogICAgICAgICAgICAgYmxvY2tzLmFkZChibG9jayk7CiAgICAg
ICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6ICpibG9jaykKLSAgICAgICAgICAgICAgICB2YWx1
ZUluQmxvY2suYWRkKHZhbHVlKTsKKyAgICAgICAgICAgICAgICB2YWx1ZUluQmxvY2suYWRkKHZh
bHVlLCAwKS5pdGVyYXRvci0+dmFsdWUrKzsKICAgICAgICAgfQogCiAgICAgICAgIGZvciAoVmFs
dWUqIHZhbHVlIDogbV9wcm9jZWR1cmUudmFsdWVzKCkpCkBAIC03NCw4ICs3NCwxMCBAQCBwdWJs
aWM6CiAKICAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiB2YWx1ZUluUHJvYykKICAgICAgICAg
ICAgIFZBTElEQVRFKHZhbHVlSW5CbG9jay5jb250YWlucyh2YWx1ZSksICgiQXQgIiwgKnZhbHVl
KSk7Ci0gICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogdmFsdWVJbkJsb2NrKQotICAgICAgICAg
ICAgVkFMSURBVEUodmFsdWVJblByb2MuY29udGFpbnModmFsdWUpLCAoIkF0ICIsICp2YWx1ZSkp
OworICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogdmFsdWVJbkJsb2NrKSB7CisgICAgICAgICAg
ICBWQUxJREFURSh2YWx1ZUluUHJvYy5jb250YWlucyhlbnRyeS5rZXkpLCAoIkF0ICIsICplbnRy
eS5rZXkpKTsKKyAgICAgICAgICAgIFZBTElEQVRFKGVudHJ5LnZhbHVlID09IDEsICgiQXQgIiwg
KmVudHJ5LmtleSkpOworICAgICAgICB9CiAKICAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiB2
YWx1ZUluUHJvYykgewogICAgICAgICAgICAgZm9yIChWYWx1ZSogY2hpbGQgOiB2YWx1ZS0+Y2hp
bGRyZW4oKSkKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTE4MzUpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE1LTEwLTMwICBGaWxpcCBQaXps
byAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgQjM6OnJlZHVjZVN0cmVuZ3RoJ3MgRENF
IHNob3VsZCBiZSBtb3JlIGFncm8KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1MDc0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogd3RmL0dyYXBoTm9kZVdvcmtsaXN0Lmg6CisgICAgICAgIChXVEY6Okdy
YXBoTm9kZVdvcmtsaXN0OjpzYXcpOiBUaGlzIGlzIGdvaW5nIHRvIGJlIHVzZWZ1bC4KKwogMjAx
NS0xMC0zMCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFJlZ3Jl
c3Npb24ocjE5MTY3Myk6IENyYXNoIGluIFJ1bkxvb3BUaW1lcjo6c2NoZWR1bGUoKQpJbmRleDog
U291cmNlL1dURi93dGYvR3JhcGhOb2RlV29ya2xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9HcmFwaE5vZGVXb3JrbGlzdC5oCShyZXZpc2lvbiAxOTE4MzQpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9HcmFwaE5vZGVXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw4
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fc3RhY2sudGFrZUxhc3QoKTsKICAgICB9CiAK
KyAgICBib29sIHNhdyhOb2RlIG5vZGUpIHsgcmV0dXJuIG1fc2Vlbi5jb250YWlucyhub2RlKTsg
fQorCiBwcml2YXRlOgogICAgIFNldCBtX3NlZW47CiAgICAgVmVjdG9yPE5vZGUsIDE2PiBtX3N0
YWNrOwo=
</data>
<flag name="review"
          id="289612"
          type_id="1"
          status="-"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264487</attachid>
            <date>2015-10-31 13:24:05 -0700</date>
            <delta_ts>2015-10-31 15:50:52 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>33859</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkxODQ0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBA
CisyMDE1LTEwLTMxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QjM6OnJlZHVjZVN0cmVuZ3RoJ3MgRENFIHNob3VsZCBiZSBtb3JlIGFncm8KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDc0OAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYjMvQjNCYXNpY0Jsb2NrLmNw
cDoKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OnJlbW92ZU5vcHMpOiBEZWxldGVkLiBX
ZSBkb24ndCBuZWVkIHRoaXMgYW55bW9yZS4KKyAgICAgICAgKiBiMy9CM0Jhc2ljQmxvY2suaDoK
KyAgICAgICAgKiBiMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcDogUmVwbGFjZWQgdGhlIGNvbWJpbmF0
aW9uIG9mIHNpbXBsZSBEQ0UgYW5kIHJlbW92ZU5vcHMgd2l0aCBhIHNpbmxlIHByZXN1bWUtZGVh
ZC1hbmQtZmluZC1saXZlIGtpZG4gb2YgRENFLgorICAgICAgICAqIGIzL0IzVmFsaWRhdGUuY3Bw
OiBJIGFsbW9zdCBicm9rZSBldmVyeXRoaW5nIGJ5IGNyZWF0aW5nIGR1cGxpY2F0ZSB2YWx1ZXMg
aW4gYSBibG9jay4gSSBmaWd1cmVkIEknZCBhZGQgYSB2YWxpZGF0aW9uIHJ1bGUgZm9yIHRoYXQu
CisKIDIwMTUtMTAtMzEgIEJyaWFuIEJ1cmcgIDxiYnVyZ0BhcHBsZS5jb20+CiAKICAgICAgICAg
QnVpbHRpbnMgZ2VuZXJhdG9yIHNob3VsZCBwdXQgV2ViQ29yZS1vbmx5IHdyYXBwZXJzIGluIHRo
ZSBwZXItYnVpbHRpbiBoZWFkZXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHJldmlzaW9uIDE5MTg0NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzI5LDYgKzMyOSwyMCBAQCBwdWJsaWM6CiAgICAgICAgIG1f
YXNzZW1ibGVyLnNobHFfaThyKGltbS5tX3ZhbHVlLCBkZXN0KTsKICAgICB9CiAgICAgCisgICAg
dm9pZCBsc2hpZnQ2NChSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKHNyYyAhPSBkZXN0KTsKKyAgICAgICAgCisgICAgICAgIGlmIChzcmMgPT0g
WDg2UmVnaXN0ZXJzOjplY3gpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zaGxxX0NMcihkZXN0
KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBDYW4gb25seSBzaGlmdCBieSBlY3gs
IHNvIHdlIGRvIHNvbWUgc3dhcHBpbmcgb2Ygd2Ugc2VlIGFueXRoaW5nIGVsc2UuCisgICAgICAg
ICAgICBzd2FwKHNyYywgWDg2UmVnaXN0ZXJzOjplY3gpOworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuc2hscV9DTHIoZGVzdCk7CisgICAgICAgICAgICBzd2FwKHNyYywgWDg2UmVnaXN0ZXJzOjpl
Y3gpOworICAgICAgICB9CisgICAgfQorICAgIAogICAgIHZvaWQgcnNoaWZ0NjQoVHJ1c3RlZElt
bTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIuc2Fy
cV9pOHIoaW1tLm1fdmFsdWUsIGRlc3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9YODZBc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCShyZXZpc2lvbiAxOTE4NDQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC05MTAsNiArOTEwLDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVk
aWF0ZTgoaW1tKTsKICAgICAgICAgfQogICAgIH0KKworICAgIHZvaWQgc2hscV9DTHIoUmVnaXN0
ZXJJRCBkc3QpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9HUk9V
UDJfRXZDTCwgR1JPVVAyX09QX1NITCwgZHN0KTsKKyAgICB9CiAjZW5kaWYgLy8gQ1BVKFg4Nl82
NCkKIAogICAgIHZvaWQgaW11bGxfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5jcHAJKHJldmlzaW9u
IDE5MTg0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02NywyMCArNjcsNiBAQCBib29sIEJhc2ljQmxvY2s6OnJlcGxhY2VQ
cmVkZWNlc3NvcihCYXNpCiAgICAgcmV0dXJuIEIzOjpyZXBsYWNlUHJlZGVjZXNzb3IodGhpcywg
ZnJvbSwgdG8pOwogfQogCi12b2lkIEJhc2ljQmxvY2s6OnJlbW92ZU5vcHMoUHJvY2VkdXJlJiBw
cm9jZWR1cmUpCi17Ci0gICAgdW5zaWduZWQgc291cmNlSW5kZXggPSAwOwotICAgIHVuc2lnbmVk
IHRhcmdldEluZGV4ID0gMDsKLSAgICB3aGlsZSAoc291cmNlSW5kZXggPCBzaXplKCkpIHsKLSAg
ICAgICAgVmFsdWUqIHZhbHVlID0gbV92YWx1ZXNbc291cmNlSW5kZXgrK107Ci0gICAgICAgIGlm
ICh2YWx1ZS0+b3Bjb2RlKCkgPT0gTm9wKQotICAgICAgICAgICAgcHJvY2VkdXJlLmRlbGV0ZVZh
bHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV92YWx1ZXNbdGFyZ2V0SW5k
ZXgrK10gPSB2YWx1ZTsKLSAgICB9Ci0gICAgbV92YWx1ZXMucmVzaXplKHRhcmdldEluZGV4KTsK
LX0KLQogdm9pZCBCYXNpY0Jsb2NrOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAg
ICAgb3V0LnByaW50KGR1bXBQcmVmaXgsIG1faW5kZXgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0Jhc2ljQmxvY2suaAkocmV2aXNpb24gMTkxODQ0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC05NSw4ICs5NSw2
IEBAIHB1YmxpYzoKIAogICAgIGRvdWJsZSBmcmVxdWVuY3koKSBjb25zdCB7IHJldHVybiBtX2Zy
ZXF1ZW5jeTsgfQogCi0gICAgdm9pZCByZW1vdmVOb3BzKFByb2NlZHVyZSYpOwotCiAgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVh
bSYpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWly
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWly
LmNwcAkocmV2aXNpb24gMTkxODQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93
ZXJUb0Fpci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3Nyw2ICs1NzcsMjIgQEAgcHVibGljOgog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQorCisgICAgYm9vbCB0
cnlTaGwoVmFsdWUqIHZhbHVlLCBWYWx1ZSogYW1vdW50KQorICAgIHsKKyAgICAgICAgQWlyOjpP
cGNvZGUgb3Bjb2RlID0gdmFsdWUtPnR5cGUoKSA9PSBJbnQzMiA/IExzaGlmdDMyIDogTHNoaWZ0
NjQ7CisKKyAgICAgICAgaWYgKGltbShhbW91bnQpKSB7CisgICAgICAgICAgICBhcHBlbmQoTW92
ZSwgdG1wKHZhbHVlKSwgdG1wKGN1cnJlbnRWYWx1ZSkpOworICAgICAgICAgICAgYXBwZW5kKG9w
Y29kZSwgaW1tKGFtb3VudCksIHRtcChjdXJyZW50VmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgYXBwZW5kKE1vdmUsIHRtcCh2YWx1ZSksIHRt
cChjdXJyZW50VmFsdWUpKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIHRtcChhbW91bnQpLCBUbXAo
WDg2UmVnaXN0ZXJzOjplY3gpKTsKKyAgICAgICAgYXBwZW5kKG9wY29kZSwgVG1wKFg4NlJlZ2lz
dGVyczo6ZWN4KSwgdG1wKGN1cnJlbnRWYWx1ZSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CiAgICAgCiAgICAgYm9vbCB0cnlTdG9yZUFkZExvYWQoVmFsdWUqIGxlZnQsIFZhbHVlKiBy
aWdodCwgVmFsdWUqKQogICAgIHsKQEAgLTY0MCw2ICs2NTYsMTIgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAgICBib29sIHRyeVpFeHQzMihWYWx1ZSogdmFsdWUp
CisgICAgeworICAgICAgICBhcHBlbmQoTW92ZTMyLCB0bXAodmFsdWUpLCB0bXAoY3VycmVudFZh
bHVlKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAgIGJvb2wgdHJ5QXJndW1l
bnRSZWcoKQogICAgIHsKICAgICAgICAgcHJvbG9ndWUuYXBwZW5kKEluc3QoCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlcmluZ01hdGNoZXIucGF0dGVybnMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRlcm5z
CShyZXZpc2lvbiAxOTE4NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlcmlu
Z01hdGNoZXIucGF0dGVybnMJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDggQEAgQWRkID0g
QWRkKGxlZnQsIHJpZ2h0KQogU3ViID0gU3ViKGxlZnQsIHJpZ2h0KQogQW5kID0gQml0QW5kKGxl
ZnQsIHJpZ2h0KQogCitTaGwgPSBTaGwodmFsdWUsIGFtb3VudCkKKwogU3RvcmVBZGRMb2FkID0g
U3RvcmUoQWRkKGxlZnQsIHJpZ2h0KSwgYWRkcmVzcykKIFN0b3JlU3ViTG9hZCA9IFN0b3JlKEFk
ZChsZWZ0LCByaWdodCksIGFkZHJlc3MpCiBTdG9yZUFuZExvYWQgPSBTdG9yZShCaXRBbmQobGVm
dCwgcmlnaHQpLCBhZGRyZXNzKQpAQCAtNDIsNiArNDQsOCBAQCBTdG9yZSA9IFN0b3JlKHZhbHVl
LCBhZGRyZXNzKQogVHJ1bmNBcmd1bWVudFJlZyA9IFRydW5jKGFyZ3VtZW50UmVnID0gQXJndW1l
bnRSZWcoKSkKIFRydW5jID0gVHJ1bmModmFsdWUpCiAKK1pFeHQzMiA9IFpFeHQzMih2YWx1ZSkK
KwogQXJndW1lbnRSZWcgPSBBcmd1bWVudFJlZygpCiAKIENvbnN0MzIgPSBDb25zdDMyKCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHJl
dmlzaW9uIDE5MTg0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVu
Z3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTIgKzI5LDE1IEBACiAjaWYgRU5BQkxFKEIz
X0pJVCkKIAogI2luY2x1ZGUgIkIzQ29udHJvbFZhbHVlLmgiCisjaW5jbHVkZSAiQjNJbmRleFNl
dC5oIgogI2luY2x1ZGUgIkIzSW5zZXJ0aW9uU2V0SW5saW5lcy5oIgogI2luY2x1ZGUgIkIzTWVt
b3J5VmFsdWUuaCIKICNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIKICNpbmNsdWRlICJCM1Byb2Nl
ZHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJCM1Vwc2lsb25WYWx1ZS5oIgogI2luY2x1ZGUgIkIz
VXNlQ291bnRzLmgiCiAjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYv
R3JhcGhOb2RlV29ya2xpc3QuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAK
QEAgLTYxLDggKzY0LDYgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGZvciAobV9pbmRleCA9
IDA7IG1faW5kZXggPCBibG9jay0+c2l6ZSgpOyArK21faW5kZXgpCiAgICAgICAgICAgICAgICAg
ICAgIHByb2Nlc3MoKTsKICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKG1f
YmxvY2spOwotCi0gICAgICAgICAgICAgICAgYmxvY2stPnJlbW92ZU5vcHMobV9wcm9jKTsKICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKG1fY2hhbmdlZENGRykgewpAQCAtNzAsMTMg
KzcxLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIFVzZUNvdW50cyB1c2VDb3VudHMobV9wcm9jKTsKLSAg
ICAgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogbV9wcm9jLnZhbHVlcygpKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKCF1c2VDb3VudHNbdmFsdWVdICYmICF2YWx1ZS0+ZWZmZWN0cygpLm11c3RF
eGVjdXRlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUtPnJlcGxhY2VXaXRoTm9wKCk7
Ci0gICAgICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQorICAgICAgICAgICAga2lsbERlYWRDb2RlKCk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIHJlc3VsdCB8PSBtX2NoYW5nZWQ7CiAgICAgICAgIH0gd2hpbGUgKG1f
Y2hhbmdlZCk7CkBAIC0zMzcsNiArMzMyLDY0IEBAIHByaXZhdGU6CiAgICAgICAgIG1fY2hhbmdl
ZCA9IHRydWU7CiAgICAgfQogCisgICAgdm9pZCBraWxsRGVhZENvZGUoKQorICAgIHsKKyAgICAg
ICAgR3JhcGhOb2RlV29ya2xpc3Q8VmFsdWUqLCBJbmRleFNldDxWYWx1ZT4+IHdvcmtsaXN0Owor
ICAgICAgICBWZWN0b3I8VXBzaWxvblZhbHVlKiwgNjQ+IHVwc2lsb25zOworICAgICAgICBmb3Ig
KEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7CisgICAgICAgICAgICBmb3IgKFZhbHVlKiB2
YWx1ZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAgIEVmZmVjdHMgZWZmZWN0cyA9IHZhbHVl
LT5lZmZlY3RzKCk7CisgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgY2FyZSBhYm91dCBTU0Eg
RWZmZWN0cywgc2luY2Ugd2UgbW9kZWwgdGhlbSBtb3JlIGFjY3VyYXRlbHkgdGhhbiB0aGUKKyAg
ICAgICAgICAgICAgICAvLyBlZmZlY3RzKCkgbWV0aG9kIGRvZXMuCisgICAgICAgICAgICAgICAg
ZWZmZWN0cy53cml0ZXNTU0FTdGF0ZSA9IGZhbHNlOworICAgICAgICAgICAgICAgIGVmZmVjdHMu
cmVhZHNTU0FTdGF0ZSA9IGZhbHNlOworICAgICAgICAgICAgICAgIGlmIChlZmZlY3RzLm11c3RF
eGVjdXRlKCkpCisgICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LnB1c2godmFsdWUpOworICAg
ICAgICAgICAgICAgIGlmIChVcHNpbG9uVmFsdWUqIHVwc2lsb24gPSB2YWx1ZS0+YXM8VXBzaWxv
blZhbHVlPigpKQorICAgICAgICAgICAgICAgICAgICB1cHNpbG9ucy5hcHBlbmQodXBzaWxvbik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAg
ICAgd2hpbGUgKFZhbHVlKiB2YWx1ZSA9IHdvcmtsaXN0LnBvcCgpKSB7CisgICAgICAgICAgICAg
ICAgZm9yIChWYWx1ZSogY2hpbGQgOiB2YWx1ZS0+Y2hpbGRyZW4oKSkKKyAgICAgICAgICAgICAg
ICAgICAgd29ya2xpc3QucHVzaChjaGlsZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGJvb2wgZGlkUHVzaCA9IGZhbHNlOworICAgICAgICAgICAgZm9yIChzaXpl
X3QgdXBzaWxvbkluZGV4ID0gMDsgdXBzaWxvbkluZGV4IDwgdXBzaWxvbnMuc2l6ZSgpOyArK3Vw
c2lsb25JbmRleCkgeworICAgICAgICAgICAgICAgIFVwc2lsb25WYWx1ZSogdXBzaWxvbiA9IHVw
c2lsb25zW3Vwc2lsb25JbmRleF07CisgICAgICAgICAgICAgICAgaWYgKHdvcmtsaXN0LnNhdyh1
cHNpbG9uLT5waGkoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaCh1cHNp
bG9uKTsKKyAgICAgICAgICAgICAgICAgICAgdXBzaWxvbnNbdXBzaWxvbkluZGV4LS1dID0gdXBz
aWxvbnMubGFzdCgpOworICAgICAgICAgICAgICAgICAgICB1cHNpbG9ucy50YWtlTGFzdCgpOwor
ICAgICAgICAgICAgICAgICAgICBkaWRQdXNoID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWRpZFB1c2gpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9w
cm9jKSB7CisgICAgICAgICAgICBzaXplX3Qgc291cmNlSW5kZXggPSAwOworICAgICAgICAgICAg
c2l6ZV90IHRhcmdldEluZGV4ID0gMDsKKyAgICAgICAgICAgIHdoaWxlIChzb3VyY2VJbmRleCA8
IGJsb2NrLT5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICBWYWx1ZSogdmFsdWUgPSBibG9jay0+
YXQoc291cmNlSW5kZXgrKyk7CisgICAgICAgICAgICAgICAgaWYgKHdvcmtsaXN0LnNhdyh2YWx1
ZSkpCisgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5hdCh0YXJnZXRJbmRleCsrKSA9IHZhbHVl
OworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtX3Byb2MuZGVs
ZXRlVmFsdWUodmFsdWUpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgLy8gSXQncyBub3QgZW50aXJlbHkgY2xlYXIgaWYgdGhpcyBpcyBuZWVkZWQuIEkgdGhpbmsg
aXQgbWFrZXMgc2Vuc2UgdG8gaGF2ZQorICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGZvcmNl
IGEgcmVydW4gb2YgdGhlIGZpeHBvaW50IGZvciBub3csIHNpbmNlIHRoYXQgd2lsbCBtYWtlIGl0
IGVhc2llcgorICAgICAgICAgICAgICAgICAgICAvLyB0byBkbyBwZWVwaG9sZSBvcHRpbWl6YXRp
b25zOiByZW1vdmluZyBkZWFkIGNvZGUgd2lsbCBtYWtlIHRoZSBwZWVwaG9sZQorICAgICAgICAg
ICAgICAgICAgICAvLyBlYXNpZXIgdG8gc3BvdC4KKyAgICAgICAgICAgICAgICAgICAgbV9jaGFu
Z2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBibG9jay0+dmFsdWVzKCkucmVzaXplKHRhcmdldEluZGV4KTsKKyAgICAgICAgfQorICAgIH0K
KwogICAgIFByb2NlZHVyZSYgbV9wcm9jOwogICAgIEluc2VydGlvblNldCBtX2luc2VydGlvblNl
dDsKICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1ZhbGlkYXRlLmNwcAkocmV2aXNpb24gMTkxODQ0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSwxMiArNjEsMTIgQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgSGFzaFNldDxCYXNpY0Jsb2NrKj4gYmxvY2tzOwogICAg
ICAgICBIYXNoU2V0PFZhbHVlKj4gdmFsdWVJblByb2M7Ci0gICAgICAgIEhhc2hTZXQ8VmFsdWUq
PiB2YWx1ZUluQmxvY2s7CisgICAgICAgIEhhc2hNYXA8VmFsdWUqLCB1bnNpZ25lZD4gdmFsdWVJ
bkJsb2NrOwogCiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2NlZHVyZSkg
ewogICAgICAgICAgICAgYmxvY2tzLmFkZChibG9jayk7CiAgICAgICAgICAgICBmb3IgKFZhbHVl
KiB2YWx1ZSA6ICpibG9jaykKLSAgICAgICAgICAgICAgICB2YWx1ZUluQmxvY2suYWRkKHZhbHVl
KTsKKyAgICAgICAgICAgICAgICB2YWx1ZUluQmxvY2suYWRkKHZhbHVlLCAwKS5pdGVyYXRvci0+
dmFsdWUrKzsKICAgICAgICAgfQogCiAgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogbV9wcm9j
ZWR1cmUudmFsdWVzKCkpCkBAIC03NCw4ICs3NCwxMCBAQCBwdWJsaWM6CiAKICAgICAgICAgZm9y
IChWYWx1ZSogdmFsdWUgOiB2YWx1ZUluUHJvYykKICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVl
SW5CbG9jay5jb250YWlucyh2YWx1ZSksICgiQXQgIiwgKnZhbHVlKSk7Ci0gICAgICAgIGZvciAo
VmFsdWUqIHZhbHVlIDogdmFsdWVJbkJsb2NrKQotICAgICAgICAgICAgVkFMSURBVEUodmFsdWVJ
blByb2MuY29udGFpbnModmFsdWUpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICBmb3IgKGF1
dG8mIGVudHJ5IDogdmFsdWVJbkJsb2NrKSB7CisgICAgICAgICAgICBWQUxJREFURSh2YWx1ZUlu
UHJvYy5jb250YWlucyhlbnRyeS5rZXkpLCAoIkF0ICIsICplbnRyeS5rZXkpKTsKKyAgICAgICAg
ICAgIFZBTElEQVRFKGVudHJ5LnZhbHVlID09IDEsICgiQXQgIiwgKmVudHJ5LmtleSkpOworICAg
ICAgICB9CiAKICAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiB2YWx1ZUluUHJvYykgewogICAg
ICAgICAgICAgZm9yIChWYWx1ZSogY2hpbGQgOiB2YWx1ZS0+Y2hpbGRyZW4oKSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCShyZXZpc2lvbiAxOTE4NDQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2Niw2ICsx
MDY2LDE0MSBAQCB2b2lkIHRlc3RCcmFuY2hFcXVhbEZvbGRQdHIoaW50cHRyX3QgdmFsCiAgICAg
Q0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpID09ICF2YWx1ZSk7CiB9CiAKK3ZvaWQgdGVz
dENvbXBsZXgodW5zaWduZWQgbnVtVmFycywgdW5zaWduZWQgbnVtQ29uc3RydWN0cykKK3sKKyAg
ICBkb3VibGUgYmVmb3JlID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lTVMoKTsKKyAgICAK
KyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiBjdXJyZW50ID0gcHJvYy5hZGRC
bG9jaygpOworCisgICAgQ29uc3QzMlZhbHVlKiBvbmUgPSBjdXJyZW50LT5hcHBlbmROZXc8Q29u
c3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMSk7CisKKyAgICBWZWN0b3I8aW50MzJfdD4gdmFy
U2xvdHM7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtVmFyczsgaS0tOykKKyAgICAgICAgdmFy
U2xvdHMuYXBwZW5kKGkpOworCisgICAgVmVjdG9yPFZhbHVlKj4gdmFyczsKKyAgICBmb3IgKGlu
dDMyX3QmIHZhclNsb3QgOiB2YXJTbG90cykgeworICAgICAgICBWYWx1ZSogdmFyU2xvdFB0ciA9
IGN1cnJlbnQtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgJnZhclNs
b3QpOworICAgICAgICB2YXJzLmFwcGVuZChjdXJyZW50LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+
KHByb2MsIExvYWQsIEludDMyLCBPcmlnaW4oKSwgdmFyU2xvdFB0cikpOworICAgIH0KKworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1Db25zdHJ1Y3RzOyArK2kpIHsKKyAgICAgICAg
aWYgKGkgJiAxKSB7CisgICAgICAgICAgICAvLyBDb250cm9sIGZsb3cgZGlhbW9uZC4KKyAgICAg
ICAgICAgIHVuc2lnbmVkIHByZWRpY2F0ZVZhckluZGV4ID0gKGkgPj4gMSkgJSBudW1WYXJzOwor
ICAgICAgICAgICAgdW5zaWduZWQgdGhlbkluY1ZhckluZGV4ID0gKChpID4+IDEpICsgMSkgJSBu
dW1WYXJzOworICAgICAgICAgICAgdW5zaWduZWQgZWxzZUluY1ZhckluZGV4ID0gKChpID4+IDEp
ICsgMikgJSBudW1WYXJzOworCisgICAgICAgICAgICBCYXNpY0Jsb2NrKiB0aGVuQmxvY2sgPSBw
cm9jLmFkZEJsb2NrKCk7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBlbHNlQmxvY2sgPSBwcm9j
LmFkZEJsb2NrKCk7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBwcm9j
LmFkZEJsb2NrKCk7CisKKyAgICAgICAgICAgIGN1cnJlbnQtPmFwcGVuZE5ldzxDb250cm9sVmFs
dWU+KAorICAgICAgICAgICAgICAgIHByb2MsIEJyYW5jaCwgT3JpZ2luKCksIHZhcnNbcHJlZGlj
YXRlVmFySW5kZXhdLAorICAgICAgICAgICAgICAgIEZyZXF1ZW50ZWRCbG9jayh0aGVuQmxvY2sp
LCBGcmVxdWVudGVkQmxvY2soZWxzZUJsb2NrKSk7CisKKyAgICAgICAgICAgIFVwc2lsb25WYWx1
ZSogdGhlblRoZW5SZXN1bHQgPSB0aGVuQmxvY2stPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KAor
ICAgICAgICAgICAgICAgIHByb2MsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgIHRoZW5CbG9j
ay0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCB2YXJzW3RoZW5JbmNWYXJJ
bmRleF0sIG9uZSkpOworICAgICAgICAgICAgVXBzaWxvblZhbHVlKiB0aGVuRWxzZVJlc3VsdCA9
IHRoZW5CbG9jay0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJv
YywgT3JpZ2luKCksIHZhcnNbZWxzZUluY1ZhckluZGV4XSk7CisgICAgICAgICAgICB0aGVuQmxv
Y2stPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVu
dGVkQmxvY2soY29udGludWF0aW9uKSk7CisKKyAgICAgICAgICAgIFVwc2lsb25WYWx1ZSogZWxz
ZUVsc2VSZXN1bHQgPSBlbHNlQmxvY2stPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KAorICAgICAg
ICAgICAgICAgIHByb2MsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgIGVsc2VCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCB2YXJzW2Vsc2VJbmNWYXJJbmRleF0s
IG9uZSkpOworICAgICAgICAgICAgVXBzaWxvblZhbHVlKiBlbHNlVGhlblJlc3VsdCA9IGVsc2VC
bG9jay0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgT3Jp
Z2luKCksIHZhcnNbdGhlbkluY1ZhckluZGV4XSk7CisgICAgICAgICAgICBlbHNlQmxvY2stPmFw
cGVuZE5ldzxDb250cm9sVmFsdWU+KHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxv
Y2soY29udGludWF0aW9uKSk7CisKKyAgICAgICAgICAgIFZhbHVlKiB0aGVuUGhpID0gY29udGlu
dWF0aW9uLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFBoaSwgSW50MzIsIE9yaWdpbigpKTsKKyAg
ICAgICAgICAgIHRoZW5UaGVuUmVzdWx0LT5zZXRQaGkodGhlblBoaSk7CisgICAgICAgICAgICBl
bHNlVGhlblJlc3VsdC0+c2V0UGhpKHRoZW5QaGkpOworICAgICAgICAgICAgdmFyc1t0aGVuSW5j
VmFySW5kZXhdID0gdGhlblBoaTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgVmFsdWUqIGVs
c2VQaGkgPSBjb250aW51YXRpb24tPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUGhpLCBJbnQzMiwg
T3JpZ2luKCkpOworICAgICAgICAgICAgdGhlbkVsc2VSZXN1bHQtPnNldFBoaShlbHNlUGhpKTsK
KyAgICAgICAgICAgIGVsc2VFbHNlUmVzdWx0LT5zZXRQaGkoZWxzZVBoaSk7CisgICAgICAgICAg
ICB2YXJzW2Vsc2VJbmNWYXJJbmRleF0gPSB0aGVuUGhpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBjdXJyZW50ID0gY29udGludWF0aW9uOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgLy8gTG9vcC4KKworICAgICAgICAgICAgQmFzaWNCbG9jayogbG9vcEVudHJ5ID0gcHJvYy5h
ZGRCbG9jaygpOworICAgICAgICAgICAgQmFzaWNCbG9jayogbG9vcFJlZW50cnkgPSBwcm9jLmFk
ZEJsb2NrKCk7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBsb29wQm9keSA9IHByb2MuYWRkQmxv
Y2soKTsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGxvb3BFeGl0ID0gcHJvYy5hZGRCbG9jaygp
OworICAgICAgICAgICAgQmFzaWNCbG9jayogbG9vcFNraXAgPSBwcm9jLmFkZEJsb2NrKCk7Cisg
ICAgICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBwcm9jLmFkZEJsb2NrKCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIFZhbHVlKiBzdGFydEluZGV4ID0gdmFyc1soaSA+PiAx
KSAlIG51bVZhcnNdOworICAgICAgICAgICAgVmFsdWUqIHN0YXJ0U3VtID0gY3VycmVudC0+YXBw
ZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApOworICAgICAgICAgICAgY3Vy
cmVudC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgQnJh
bmNoLCBPcmlnaW4oKSwgc3RhcnRJbmRleCwKKyAgICAgICAgICAgICAgICBGcmVxdWVudGVkQmxv
Y2sobG9vcEVudHJ5KSwgRnJlcXVlbnRlZEJsb2NrKGxvb3BTa2lwKSk7CisKKyAgICAgICAgICAg
IFVwc2lsb25WYWx1ZSogc3RhcnRJbmRleEZvckJvZHkgPSBsb29wRW50cnktPmFwcGVuZE5ldzxV
cHNpbG9uVmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIE9yaWdpbigpLCBzdGFydEluZGV4
KTsKKyAgICAgICAgICAgIFVwc2lsb25WYWx1ZSogc3RhcnRTdW1Gb3JCb2R5ID0gbG9vcEVudHJ5
LT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBPcmlnaW4o
KSwgc3RhcnRTdW0pOworICAgICAgICAgICAgbG9vcEVudHJ5LT5hcHBlbmROZXc8Q29udHJvbFZh
bHVlPihwcm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3BCb2R5KSk7CisK
KyAgICAgICAgICAgIFZhbHVlKiBib2R5SW5kZXggPSBsb29wQm9keS0+YXBwZW5kTmV3PFZhbHVl
Pihwcm9jLCBQaGksIEludDMyLCBPcmlnaW4oKSk7CisgICAgICAgICAgICBzdGFydEluZGV4Rm9y
Qm9keS0+c2V0UGhpKGJvZHlJbmRleCk7CisgICAgICAgICAgICBWYWx1ZSogYm9keVN1bSA9IGxv
b3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFBoaSwgSW50MzIsIE9yaWdpbigpKTsKKyAg
ICAgICAgICAgIHN0YXJ0U3VtRm9yQm9keS0+c2V0UGhpKGJvZHlTdW0pOworICAgICAgICAgICAg
VmFsdWUqIG5ld0JvZHlJbmRleCA9IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFN1
YiwgT3JpZ2luKCksIGJvZHlJbmRleCwgb25lKTsKKyAgICAgICAgICAgIFZhbHVlKiBuZXdCb2R5
U3VtID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywg
QWRkLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICBib2R5U3VtLAorICAgICAgICAgICAgICAg
IGxvb3BCb2R5LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KAorICAgICAgICAgICAgICAgICAgICBw
cm9jLCBMb2FkLCBJbnQzMiwgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgICAgIGxvb3BCb2R5
LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgICAgICAgICAgcHJvYywgQWRkLCBP
cmlnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8Q29u
c3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIHZhclNsb3RzLmRhdGEoKSksCisgICAgICAgICAg
ICAgICAgICAgICAgICBsb29wQm9keS0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwcm9jLCBTaGwsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwcm9jLCBaRXh0MzIsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsb29wQm9keS0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHByb2MsIEJpdEFuZCwgT3JpZ2luKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuZXdCb2R5SW5kZXgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsb29wQm9keS0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4oCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvYywgT3JpZ2luKCksIG51bVZh
cnMgLSAxKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3BCb2R5LT5hcHBlbmRO
ZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMikpKSkpOworICAgICAgICAgICAgbG9v
cEJvZHktPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIEJy
YW5jaCwgT3JpZ2luKCksIG5ld0JvZHlJbmRleCwKKyAgICAgICAgICAgICAgICBGcmVxdWVudGVk
QmxvY2sobG9vcFJlZW50cnkpLCBGcmVxdWVudGVkQmxvY2sobG9vcEV4aXQpKTsKKworICAgICAg
ICAgICAgbG9vcFJlZW50cnktPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KHByb2MsIE9yaWdpbigp
LCBuZXdCb2R5SW5kZXgsIGJvZHlJbmRleCk7CisgICAgICAgICAgICBsb29wUmVlbnRyeS0+YXBw
ZW5kTmV3PFVwc2lsb25WYWx1ZT4ocHJvYywgT3JpZ2luKCksIG5ld0JvZHlTdW0sIGJvZHlTdW0p
OworICAgICAgICAgICAgbG9vcFJlZW50cnktPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KHByb2Ms
IEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9vcEJvZHkpKTsKKworICAgICAgICAg
ICAgVXBzaWxvblZhbHVlKiBleGl0U3VtID0gbG9vcEV4aXQtPmFwcGVuZE5ldzxVcHNpbG9uVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBuZXdCb2R5U3VtKTsKKyAgICAgICAgICAgIGxvb3BFeGl0LT5h
cHBlbmROZXc8Q29udHJvbFZhbHVlPihwcm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJs
b2NrKGNvbnRpbnVhdGlvbikpOworCisgICAgICAgICAgICBVcHNpbG9uVmFsdWUqIHNraXBTdW0g
PSBsb29wU2tpcC0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4ocHJvYywgT3JpZ2luKCksIHN0YXJ0
U3VtKTsKKyAgICAgICAgICAgIGxvb3BTa2lwLT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPihwcm9j
LCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJsb2NrKGNvbnRpbnVhdGlvbikpOworCisgICAg
ICAgICAgICBWYWx1ZSogZmluYWxTdW0gPSBjb250aW51YXRpb24tPmFwcGVuZE5ldzxWYWx1ZT4o
cHJvYywgUGhpLCBJbnQzMiwgT3JpZ2luKCkpOworICAgICAgICAgICAgZXhpdFN1bS0+c2V0UGhp
KGZpbmFsU3VtKTsKKyAgICAgICAgICAgIHNraXBTdW0tPnNldFBoaShmaW5hbFN1bSk7CisKKyAg
ICAgICAgICAgIGN1cnJlbnQgPSBjb250aW51YXRpb247CisgICAgICAgICAgICB2YXJzWygoaSA+
PiAxKSArIDEpICUgbnVtVmFyc10gPSBmaW5hbFN1bTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGN1cnJlbnQtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCks
IHZhcnNbMF0pOworCisgICAgY29tcGlsZShwcm9jKTsKKworICAgIGRvdWJsZSBhZnRlciA9IG1v
bm90b25pY2FsbHlJbmNyZWFzaW5nVGltZU1TKCk7CisgICAgZGF0YUxvZygiICAgIFRoYXQgdG9v
ayAiLCBhZnRlciAtIGJlZm9yZSwgIiBtcy4iKTsKK30KKwogI2RlZmluZSBSVU4odGVzdCkgZG8g
eyAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBpZiAoIXNob3VsZFJ1bigjdGVz
dCkpICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXApAQCAtMTE2OCw2ICsxMzAzLDggQEAgdm9pZCBydW4oY29uc3QgY2hh
ciogZmlsdGVyKQogICAgIFJVTih0ZXN0QnJhbmNoRXF1YWxGb2xkUHRyKDQyKSk7CiAgICAgUlVO
KHRlc3RCcmFuY2hFcXVhbEZvbGRQdHIoMCkpOwogCisgICAgUlVOKHRlc3RDb21wbGV4KDY0LCAx
MjgpKTsKKwogICAgIGlmICghZGlkUnVuKQogICAgICAgICB1c2FnZSgpOwogfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCShy
ZXZpc2lvbiAxOTE4NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9j
YXRlU3RhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMSArNDEsNiBAQCBuYW1lc3BhY2Ug
ewogCiBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIAotYm9vbCBhcmd1bWVudElzT25TdGFj
ayhjb25zdCBBcmcmIGFyZykKLXsKLSAgICByZXR1cm4gYXJnLmlzU3RhY2soKSAmJiBhcmcuc3Rh
Y2tTbG90KCktPmtpbmQoKSA9PSBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXM7Ci19Ci0KIGJvb2wg
YXR0ZW1wdEFzc2lnbm1lbnQoCiAgICAgU3RhY2tTbG90KiBzbG90LCBpbnRwdHJfdCBvZmZzZXRG
cm9tRlAsIGNvbnN0IFZlY3RvcjxTdGFja1Nsb3QqPiYgb3RoZXJTbG90cykKIHsKQEAgLTE0MSwz
MiArMTM2LDM1IEBAIHZvaWQgYWxsb2NhdGVTdGFjayhDb2RlJiBjb2RlKQogICAgIH0KIAogICAg
IC8vIE5vdyB3ZSBoYW5kbGUgdGhlIGFub255bW91cyBzbG90cy4KLSAgICBMaXZlbmVzczxBcmc+
IGxpdmVuZXNzKGNvZGUpOworICAgIExpdmVuZXNzPFN0YWNrU2xvdCo+IGxpdmVuZXNzKGNvZGUp
OwogICAgIEluZGV4TWFwPFN0YWNrU2xvdCwgSGFzaFNldDxTdGFja1Nsb3QqPj4gaW50ZXJmZXJl
bmNlKGNvZGUuc3RhY2tTbG90cygpLnNpemUoKSk7CiAgICAgVmVjdG9yPFN0YWNrU2xvdCo+IHNs
b3RzOwogCiAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKLSAgICAgICAgTGl2
ZW5lc3M8QXJnPjo6TG9jYWxDYWxjIGxvY2FsQ2FsYyhsaXZlbmVzcywgYmxvY2spOworICAgICAg
ICBMaXZlbmVzczxTdGFja1Nsb3QqPjo6TG9jYWxDYWxjIGxvY2FsQ2FsYyhsaXZlbmVzcywgYmxv
Y2spOwogCiAgICAgICAgIGF1dG8gaW50ZXJmZXJlID0gWyZdIChJbnN0JiBpbnN0KSB7CiAgICAg
ICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCJJbnRlcmZlcmlu
ZzogIiwgbGlzdER1bXAobG9jYWxDYWxjLmxpdmUoKSksICJcbiIpOworICAgICAgICAgICAgICAg
IGRhdGFMb2coIkludGVyZmVyaW5nOiAiLCBwb2ludGVyTGlzdER1bXAobG9jYWxDYWxjLmxpdmUo
KSksICJcbiIpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBGb3JtIGEgY2xpcXVlIG9m
IHN0YWNrIHNsb3RzIHRoYXQgaW50ZXJmZXJlLiBGaXJzdCBmaW5kIHRoZSBsaXN0IG9mIHN0YWNr
IHNsb3RzCiAgICAgICAgICAgICAvLyB0aGF0IGFyZSBsaXZlIHJpZ2h0IG5vdy4KICAgICAgICAg
ICAgIHNsb3RzLnJlc2l6ZSgwKTsKLSAgICAgICAgICAgIGZvciAoQXJnIGFyZyA6IGxvY2FsQ2Fs
Yy5saXZlKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRJc09uU3RhY2soYXJnKSkK
LSAgICAgICAgICAgICAgICAgICAgc2xvdHMuYXBwZW5kKGFyZy5zdGFja1Nsb3QoKSk7CisgICAg
ICAgICAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IGxvY2FsQ2FsYy5saXZlKCkpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoc2xvdC0+a2luZCgpID09IFN0YWNrU2xvdEtpbmQ6OkFub255bW91cykK
KyAgICAgICAgICAgICAgICAgICAgc2xvdHMuYXBwZW5kKHNsb3QpOwogICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICAvLyBXZSBtdXN0bid0IG1hbmRhdGUgdGhhdCB0aGUgaW5wdXQgY29kZSBp
cyBvcHRpbWFsLiBUaGVyZWZvcmUsIGl0IG1heSBoYXZlIGRlYWQgc3RvcmVzCiAgICAgICAgICAg
ICAvLyB0byB0aGUgc3RhY2suIFdlIG5lZWQgdG8gdHJlYXQgdGhlc2UgYXMgaW50ZXJmZXJpbmcu
CiAgICAgICAgICAgICBpbnN0LmZvckVhY2hBcmcoCiAgICAgICAgICAgICAgICAgWyZdIChBcmcm
IGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSkgewotICAgICAgICAgICAgICAgICAgICBp
ZiAoQXJnOjppc0RlZihyb2xlKSAmJiBhcmd1bWVudElzT25TdGFjayhhcmcpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAmJiAhbG9jYWxDYWxjLmxpdmUoKS5jb250YWlucyhhcmcpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgc2xvdHMuYXBwZW5kKGFyZy5zdGFja1Nsb3QoKSk7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChBcmc6OmlzRGVmKHJvbGUpICYmIGFyZy5pc1N0YWNrKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc2xvdCA9IGFyZy5zdGFja1Nsb3QoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzbG90LT5raW5kKCkgPT0gU3RhY2tTbG90S2lu
ZDo6QW5vbnltb3VzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIWxvY2FsQ2FsYy5s
aXZlKCkuY29udGFpbnMoc2xvdCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvdHMu
YXBwZW5kKHNsb3QpOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSk7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdElubGluZXMuaAkocmV2aXNpb24gMTkxODQ0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MSw2ICs1MSwyMCBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBGb3JFYWNoPEFy
Zz4gewogICAgICAgICBpbnN0LmZvckVhY2hBcmcoZnVuY3Rvcik7CiAgICAgfQogfTsKK3RlbXBs
YXRlPD4gc3RydWN0IEZvckVhY2g8U3RhY2tTbG90Kj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+CisgICAgc3RhdGljIHZvaWQgZm9yRWFjaChJbnN0JiBpbnN0LCBjb25zdCBGdW5j
dG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgaW5zdC5mb3JFYWNoQXJnKAorICAgICAgICAg
ICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSB0eXBlKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCFhcmcuaXNTdGFjaygpKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzdGFja1Nsb3QgPSBhcmcuc3RhY2tTbG90
KCk7CisgICAgICAgICAgICAgICAgZnVuY3RvcihzdGFja1Nsb3QsIHJvbGUsIHR5cGUpOworICAg
ICAgICAgICAgICAgIGFyZyA9IEFyZzo6c3RhY2soc3RhY2tTbG90KTsKKyAgICAgICAgICAgIH0p
OworICAgIH0KK307CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFRoaW5nLCB0eXBlbmFtZSBGdW5jdG9y
Pgogdm9pZCBJbnN0Ojpmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCkBAIC05MCw2ICsx
MDQsMTEgQEAgaW5saW5lIGJvb2wgaXNMc2hpZnQzMlZhbGlkKGNvbnN0IEluc3QmIAogICAgIHJl
dHVybiBpc1NoaWZ0VmFsaWQoaW5zdCk7CiB9CiAKK2lubGluZSBib29sIGlzTHNoaWZ0NjRWYWxp
ZChjb25zdCBJbnN0JiBpbnN0KQoreworICAgIHJldHVybiBpc1NoaWZ0VmFsaWQoaW5zdCk7Cit9
CisKIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKIAogI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5o
CShyZXZpc2lvbiAxOTE4NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxp
dmVuZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDExIEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UKIHRlbXBsYXRlPHR5cGVuYW1lIFRoaW5nPgogY2xh
c3MgTGl2ZW5lc3MgewogcHVibGljOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3Rh
dGljIGJvb2wgaXNBbGl2ZShjb25zdCBUJiB0aGluZykgeyByZXR1cm4gdGhpbmcuaXNBbGl2ZSgp
OyB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0FsaXZlKFN0YWNrU2xvdCogc2xvdCkgeyByZXR1cm4g
c2xvdC0+a2luZCgpID09IFN0YWNrU2xvdEtpbmQ6OkFub255bW91czsgfQorICAgIAogICAgIExp
dmVuZXNzKENvZGUmIGNvZGUpCiAgICAgewogICAgICAgICBtX2xpdmVBdEhlYWQucmVzaXplKGNv
ZGUuc2l6ZSgpKTsKQEAgLTk0LDI0ICs5OSwxNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAvLyBG
aXJzdCBoYW5kbGUgZGVmJ3MuCiAgICAgICAgICAgICBpbnN0LmZvckVhY2g8VGhpbmc+KAogICAg
ICAgICAgICAgICAgIFt0aGlzXSAoVGhpbmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlw
ZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZy5pc0FsaXZlKCkpCisgICAgICAgICAg
ICAgICAgICAgIGlmICghaXNBbGl2ZShhcmcpKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0RlZihyb2xlKSkKICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fbGl2ZS5yZW1vdmUoYXJnKTsKICAgICAgICAgICAgICAgICB9KTsK
IAotICAgICAgICAgICAgLy8gTmV4dCBoYW5kbGUgY2xvYmJlcmVkIHJlZ2lzdGVycy4KLSAgICAg
ICAgICAgIGlmIChpbnN0Lmhhc1NwZWNpYWwoKSkgewotICAgICAgICAgICAgICAgIGluc3QuZXh0
cmFDbG9iYmVyZWRSZWdzKCkuZm9yRWFjaCgKLSAgICAgICAgICAgICAgICAgICAgW3RoaXNdIChS
ZWcgcmVnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2xpdmUucmVtb3ZlKFRoaW5nKFRt
cChyZWcpKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgCiAgICAgICAgICAgICAvLyBGaW5hbGx5IGhhbmRsZSB1c2Uncy4KICAgICAgICAgICAg
IGluc3QuZm9yRWFjaDxUaGluZz4oCiAgICAgICAgICAgICAgICAgW3RoaXNdIChUaGluZyYgYXJn
LCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgh
YXJnLmlzQWxpdmUoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0FsaXZlKGFyZykpCiAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgIGlmIChB
cmc6OmlzVXNlKHJvbGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgbV9saXZlLmFkZChhcmcp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNv
ZGVzCShyZXZpc2lvbiAxOTE4NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ck9wY29kZS5vcGNvZGVzCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNiArMTA3LDEwIEBAIExzaGlm
dDMyIFU6RywgVUQ6RwogICAgIFRtcCosIFRtcAogICAgIEltbSwgVG1wCiAKK0xzaGlmdDY0IFU6
RywgVUQ6RworICAgIFRtcCosIFRtcAorICAgIEltbSwgVG1wCisKIE11bDMyIFU6RywgVUQ6Rwog
ICAgIFRtcCwgVG1wCiAgICAgQWRkciwgVG1wCkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMTkxODQ0KQorKysg
U291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAx
NS0xMC0zMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEIzOjpy
ZWR1Y2VTdHJlbmd0aCdzIERDRSBzaG91bGQgYmUgbW9yZSBhZ3JvCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA3NDgKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9HcmFwaE5vZGVXb3JrbGlzdC5o
OgorICAgICAgICAoV1RGOjpHcmFwaE5vZGVXb3JrbGlzdDo6c2F3KTogVGhpcyBpcyBnb2luZyB0
byBiZSB1c2VmdWwuCisKIDIwMTUtMTAtMzAgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNv
bT4KIAogICAgICAgICBSZWdyZXNzaW9uKHIxOTE2NzMpOiBDcmFzaCBpbiBSdW5Mb29wVGltZXI6
OnNjaGVkdWxlKCkKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0dyYXBoTm9kZVdvcmtsaXN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvR3JhcGhOb2RlV29ya2xpc3QuaAkocmV2aXNpb24g
MTkxODQ0KQorKysgU291cmNlL1dURi93dGYvR3JhcGhOb2RlV29ya2xpc3QuaAkod29ya2luZyBj
b3B5KQpAQCAtNTQsNiArNTQsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX3N0YWNrLnRh
a2VMYXN0KCk7CiAgICAgfQogCisgICAgYm9vbCBzYXcoTm9kZSBub2RlKSB7IHJldHVybiBtX3Nl
ZW4uY29udGFpbnMobm9kZSk7IH0KKwogcHJpdmF0ZToKICAgICBTZXQgbV9zZWVuOwogICAgIFZl
Y3RvcjxOb2RlLCAxNj4gbV9zdGFjazsKSW5kZXg6IFRvb2xzL1JlZHVjZWRGVEwvQ29tcGxleFRl
c3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1JlZHVjZWRGVEwvQ29tcGxleFRlc3QuY3BwCShy
ZXZpc2lvbiAwKQorKysgVG9vbHMvUmVkdWNlZEZUTC9Db21wbGV4VGVzdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwyMzkgQEAKKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSA8bWVt
b3J5PgorI2luY2x1ZGUgPGNocm9ubz4KKworI2luY2x1ZGUgPHN5cy90aW1lLmg+CisKKyNpbmNs
dWRlIDxsbHZtL0lSL0xMVk1Db250ZXh0Lmg+CisjaW5jbHVkZSA8bGx2bS9JUi9EYXRhTGF5b3V0
Lmg+CisjaW5jbHVkZSA8bGx2bS9JUi9JUkJ1aWxkZXIuaD4KKyNpbmNsdWRlIDxsbHZtL0lSL0Nv
bnN0YW50cy5oPgorI2luY2x1ZGUgPGxsdm0vSVIvRnVuY3Rpb24uaD4KKyNpbmNsdWRlIDxsbHZt
L0lSL0luc3RydWN0aW9ucy5oPgorI2luY2x1ZGUgPGxsdm0vSVIvTW9kdWxlLmg+CisjaW5jbHVk
ZSA8bGx2bS9JUi9WZXJpZmllci5oPgorI2luY2x1ZGUgPGxsdm0vRXhlY3V0aW9uRW5naW5lL0V4
ZWN1dGlvbkVuZ2luZS5oPgorI2luY2x1ZGUgPGxsdm0vVHJhbnNmb3Jtcy9VdGlscy9CYXNpY0Js
b2NrVXRpbHMuaD4KKyNpbmNsdWRlIDxsbHZtL1Bhc3MuaD4KKyNpbmNsdWRlIDxsbHZtL0lSL0xl
Z2FjeVBhc3NNYW5hZ2VyLmg+CisjaW5jbHVkZSA8bGx2bS9TdXBwb3J0L0hvc3QuaD4KKyNpbmNs
dWRlIDxsbHZtL0FuYWx5c2lzL1Bhc3Nlcy5oPgorI2luY2x1ZGUgPGxsdm0vVHJhbnNmb3Jtcy9T
Y2FsYXIuaD4KKyNpbmNsdWRlIDxsbHZtL1RyYW5zZm9ybXMvSVBPLmg+CisjaW5jbHVkZSA8bGx2
bS9UcmFuc2Zvcm1zL0lQTy9QYXNzTWFuYWdlckJ1aWxkZXIuaD4KKyNpbmNsdWRlIDxsbHZtL0V4
ZWN1dGlvbkVuZ2luZS9NQ0pJVC5oPgorCit1c2luZyBuYW1lc3BhY2UgbGx2bTsKK3VzaW5nIG5h
bWVzcGFjZSBzdGQ7CisKKyNpZiAwCituYW1lc3BhY2Ugc3RkIHsKK3RlbXBsYXRlPGNsYXNzIFQ+
IHN0cnVjdCBfVW5pcXVlX2lmIHsKKyAgICB0eXBlZGVmIHVuaXF1ZV9wdHI8VD4gX1NpbmdsZV9v
YmplY3Q7Cit9OworCit0ZW1wbGF0ZTxjbGFzcyBUPiBzdHJ1Y3QgX1VuaXF1ZV9pZjxUW10+IHsK
KyAgICB0eXBlZGVmIHVuaXF1ZV9wdHI8VFtdPiBfVW5rbm93bl9ib3VuZDsKK307CisKK3RlbXBs
YXRlPGNsYXNzIFQsIHNpemVfdCBOPiBzdHJ1Y3QgX1VuaXF1ZV9pZjxUW05dPiB7CisgICAgdHlw
ZWRlZiB2b2lkIF9Lbm93bl9ib3VuZDsKK307CisKK3RlbXBsYXRlPGNsYXNzIFQsIGNsYXNzLi4u
IEFyZ3M+IGlubGluZSB0eXBlbmFtZSBfVW5pcXVlX2lmPFQ+OjpfU2luZ2xlX29iamVjdAorbWFr
ZV91bmlxdWUoQXJncyYmLi4uIGFyZ3MpCit7CisgICAgcmV0dXJuIHVuaXF1ZV9wdHI8VD4obmV3
IFQoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKSk7Cit9CisKK3RlbXBsYXRlPGNsYXNzIFQ+
IGlubGluZSB0eXBlbmFtZSBfVW5pcXVlX2lmPFQ+OjpfVW5rbm93bl9ib3VuZAorbWFrZV91bmlx
dWUoc2l6ZV90IG4pCit7CisgICAgdHlwZWRlZiB0eXBlbmFtZSByZW1vdmVfZXh0ZW50PFQ+Ojp0
eXBlIFU7CisgICAgcmV0dXJuIHVuaXF1ZV9wdHI8VD4obmV3IFVbbl0oKSk7Cit9CisKK3RlbXBs
YXRlPGNsYXNzIFQsIGNsYXNzLi4uIEFyZ3M+IHR5cGVuYW1lIF9VbmlxdWVfaWY8VD46Ol9Lbm93
bl9ib3VuZAorbWFrZV91bmlxdWUoQXJncyYmLi4uKSA9IGRlbGV0ZTsKK30gLy8gbmFtZXNwYWNl
IHN0ZAorI2VuZGlmCisKK25hbWVzcGFjZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFRvVHlwZSwg
dHlwZW5hbWUgRnJvbVR5cGU+CitpbmxpbmUgVG9UeXBlIGJpdHdpc2VfY2FzdChGcm9tVHlwZSBm
cm9tKQoreworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEZyb21UeXBlKSA9PSBzaXplb2YoVG9U
eXBlKSwgImJpdHdpc2VfY2FzdCBzaXplIG9mIEZyb21UeXBlIGFuZCBUb1R5cGUgbXVzdCBiZSBl
cXVhbCEiKTsKKyAgICB1bmlvbiB7CisgICAgICAgIEZyb21UeXBlIGZyb207CisgICAgICAgIFRv
VHlwZSB0bzsKKyAgICB9IHU7CisgICAgdS5mcm9tID0gZnJvbTsKKyAgICByZXR1cm4gdS50bzsK
K30KKworZG91YmxlIG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZU1TKCkKK3sKKyAgICByZXR1
cm4gY2hyb25vOjpkdXJhdGlvbl9jYXN0PGNocm9ubzo6bWljcm9zZWNvbmRzPigKKyAgICAgICAg
Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpLnRpbWVfc2luY2VfZXBvY2goKSkuY291bnQoKSAv
IDEwMDAuOworfQorCit2b2lkIHJ1bih1bnNpZ25lZCBudW1WYXJzLCB1bnNpZ25lZCBudW1Db25z
dHJ1Y3RzKQoreworICAgIExMVk1Db250ZXh0IGNvbnRleHQ7CisgICAgVHlwZSogaW50MzJUeSA9
IFR5cGU6OmdldEludDMyVHkoY29udGV4dCk7CisgICAgTW9kdWxlKiBtb2R1bGUgPSBuZXcgTW9k
dWxlKCJjb21wbGV4TW9kdWxlIiwgY29udGV4dCk7CisgICAgRnVuY3Rpb24qIGZ1bmN0aW9uID0g
RnVuY3Rpb246OkNyZWF0ZSgKKyAgICAgICAgRnVuY3Rpb25UeXBlOjpnZXQoaW50MzJUeSwgZmFs
c2UpLCBHbG9iYWxWYWx1ZTo6RXh0ZXJuYWxMaW5rYWdlLCAiY29tcGxleEZ1bmN0aW9uIiwgbW9k
dWxlKTsKKworICAgIHZlY3RvcjxpbnQzMl90PiB2YXJTbG90czsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSBudW1WYXJzOyBpLS07KQorICAgICAgICB2YXJTbG90cy5wdXNoX2JhY2soaSk7CisKKyAg
ICBCYXNpY0Jsb2NrKiBjdXJyZW50ID0gQmFzaWNCbG9jazo6Q3JlYXRlKGNvbnRleHQsICIiLCBm
dW5jdGlvbik7CisgICAgdW5pcXVlX3B0cjxJUkJ1aWxkZXI8Pj4gYnVpbGRlciA9IG1ha2VfdW5p
cXVlPElSQnVpbGRlcjw+PihjdXJyZW50KTsKKworICAgIHZlY3RvcjxWYWx1ZSo+IHZhcnM7Cisg
ICAgZm9yIChpbnQzMl90JiB2YXJTbG90IDogdmFyU2xvdHMpIHsKKyAgICAgICAgVmFsdWUqIHB0
ciA9IGJ1aWxkZXItPkNyZWF0ZUludFRvUHRyKGJ1aWxkZXItPmdldEludDY0KGJpdHdpc2VfY2Fz
dDxpbnRwdHJfdD4oJnZhclNsb3QpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50MzJUeS0+Z2V0UG9pbnRlclRvKCkpOworICAgICAgICB2YXJzLnB1c2hf
YmFjayhidWlsZGVyLT5DcmVhdGVMb2FkKHB0cikpOworICAgIH0KKworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBudW1Db25zdHJ1Y3RzOyArK2kpIHsKKyAgICAgICAgaWYgKGZhbHNlICYm
IGkgJiAxKSB7CisgICAgICAgICAgICAvLyBDb250cm9sIGZsb3cgZGlhbW9uZC4KKyAgICAgICAg
ICAgIHVuc2lnbmVkIHByZWRpY2F0ZVZhckluZGV4ID0gKGkgPj4gMSkgJSBudW1WYXJzOworICAg
ICAgICAgICAgdW5zaWduZWQgdGhlbkluY1ZhckluZGV4ID0gKChpID4+IDEpICsgMSkgJSBudW1W
YXJzOworICAgICAgICAgICAgdW5zaWduZWQgZWxzZUluY1ZhckluZGV4ID0gKChpID4+IDEpICsg
MikgJSBudW1WYXJzOworCisgICAgICAgICAgICBCYXNpY0Jsb2NrKiB0aGVuQmxvY2sgPSBCYXNp
Y0Jsb2NrOjpDcmVhdGUoY29udGV4dCwgIiIsIGZ1bmN0aW9uKTsKKyAgICAgICAgICAgIEJhc2lj
QmxvY2sqIGVsc2VCbG9jayA9IEJhc2ljQmxvY2s6OkNyZWF0ZShjb250ZXh0LCAiIiwgZnVuY3Rp
b24pOworICAgICAgICAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gQmFzaWNCbG9jazo6
Q3JlYXRlKGNvbnRleHQsICIiLCBmdW5jdGlvbik7CisKKyAgICAgICAgICAgIGJ1aWxkZXItPkNy
ZWF0ZUNvbmRCcigKKyAgICAgICAgICAgICAgICBidWlsZGVyLT5DcmVhdGVJQ21wTkUodmFyc1tw
cmVkaWNhdGVWYXJJbmRleF0sIGJ1aWxkZXItPmdldEludDMyKDApKSwKKyAgICAgICAgICAgICAg
ICB0aGVuQmxvY2ssIGVsc2VCbG9jayk7CisKKyAgICAgICAgICAgIGJ1aWxkZXIgPSBtYWtlX3Vu
aXF1ZTxJUkJ1aWxkZXI8Pj4odGhlbkJsb2NrKTsKKyAgICAgICAgICAgIFZhbHVlKiB0aGVuVmFs
dWUgPSBidWlsZGVyLT5DcmVhdGVBZGQodmFyc1t0aGVuSW5jVmFySW5kZXhdLCBidWlsZGVyLT5n
ZXRJbnQzMigxKSk7CisgICAgICAgICAgICBidWlsZGVyLT5DcmVhdGVCcihjb250aW51YXRpb24p
OworCisgICAgICAgICAgICBidWlsZGVyID0gbWFrZV91bmlxdWU8SVJCdWlsZGVyPD4+KGVsc2VC
bG9jayk7CisgICAgICAgICAgICBWYWx1ZSogZWxzZVZhbHVlID0gYnVpbGRlci0+Q3JlYXRlQWRk
KHZhcnNbZWxzZUluY1ZhckluZGV4XSwgYnVpbGRlci0+Z2V0SW50MzIoMSkpOworICAgICAgICAg
ICAgYnVpbGRlci0+Q3JlYXRlQnIoY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgYnVpbGRl
ciA9IG1ha2VfdW5pcXVlPElSQnVpbGRlcjw+PihjdXJyZW50ID0gY29udGludWF0aW9uKTsKKyAg
ICAgICAgICAgIFBISU5vZGUqIHRoZW5QaGkgPSBidWlsZGVyLT5DcmVhdGVQSEkoaW50MzJUeSwg
Mik7CisgICAgICAgICAgICB0aGVuUGhpLT5hZGRJbmNvbWluZyh0aGVuVmFsdWUsIHRoZW5CbG9j
ayk7CisgICAgICAgICAgICB0aGVuUGhpLT5hZGRJbmNvbWluZyh2YXJzW3RoZW5JbmNWYXJJbmRl
eF0sIGVsc2VCbG9jayk7CisgICAgICAgICAgICBQSElOb2RlKiBlbHNlUGhpID0gYnVpbGRlci0+
Q3JlYXRlUEhJKGludDMyVHksIDIpOworICAgICAgICAgICAgZWxzZVBoaS0+YWRkSW5jb21pbmco
ZWxzZVZhbHVlLCBlbHNlQmxvY2spOworICAgICAgICAgICAgZWxzZVBoaS0+YWRkSW5jb21pbmco
dmFyc1tlbHNlSW5jVmFySW5kZXhdLCB0aGVuQmxvY2spOworICAgICAgICAgICAgCisgICAgICAg
ICAgICB2YXJzW3RoZW5JbmNWYXJJbmRleF0gPSB0aGVuUGhpOworICAgICAgICAgICAgdmFyc1tl
bHNlSW5jVmFySW5kZXhdID0gZWxzZVBoaTsKKyAgICAgICAgfSBlbHNlIGlmIChmYWxzZSkgewor
ICAgICAgICAgICAgLy8gTG9vcC4KKworICAgICAgICAgICAgQmFzaWNCbG9jayogbG9vcEJvZHkg
PSBCYXNpY0Jsb2NrOjpDcmVhdGUoY29udGV4dCwgIiIsIGZ1bmN0aW9uKTsKKyAgICAgICAgICAg
IEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IEJhc2ljQmxvY2s6OkNyZWF0ZShjb250ZXh0LCAi
IiwgZnVuY3Rpb24pOworCisgICAgICAgICAgICBWYWx1ZSogc3RhcnRJbmRleCA9IHZhcnNbKGkg
Pj4gMSkgJSBudW1WYXJzXTsKKyAgICAgICAgICAgIFZhbHVlKiBzdGFydFN1bSA9IGJ1aWxkZXIt
PmdldEludDMyKDApOworICAgICAgICAgICAgYnVpbGRlci0+Q3JlYXRlQ29uZEJyKAorICAgICAg
ICAgICAgICAgIGJ1aWxkZXItPkNyZWF0ZUlDbXBORShzdGFydEluZGV4LCBidWlsZGVyLT5nZXRJ
bnQzMigwKSksCisgICAgICAgICAgICAgICAgbG9vcEJvZHksIGNvbnRpbnVhdGlvbik7CisKKyAg
ICAgICAgICAgIGJ1aWxkZXIgPSBtYWtlX3VuaXF1ZTxJUkJ1aWxkZXI8Pj4obG9vcEJvZHkpOwor
ICAgICAgICAgICAgUEhJTm9kZSogYm9keUluZGV4ID0gYnVpbGRlci0+Q3JlYXRlUEhJKGludDMy
VHksIDIpOworICAgICAgICAgICAgUEhJTm9kZSogYm9keVN1bSA9IGJ1aWxkZXItPkNyZWF0ZVBI
SShpbnQzMlR5LCAyKTsKKyAgICAgICAgICAgIGJvZHlJbmRleC0+YWRkSW5jb21pbmcoc3RhcnRJ
bmRleCwgY3VycmVudCk7CisgICAgICAgICAgICBib2R5U3VtLT5hZGRJbmNvbWluZyhzdGFydFN1
bSwgY3VycmVudCk7CisKKyAgICAgICAgICAgIFZhbHVlKiBuZXdCb2R5SW5kZXggPSBidWlsZGVy
LT5DcmVhdGVTdWIoYm9keUluZGV4LCBidWlsZGVyLT5nZXRJbnQzMigxKSk7CisgICAgICAgICAg
ICBWYWx1ZSogbmV3Qm9keVN1bSA9IGJ1aWxkZXItPkNyZWF0ZUFkZCgKKyAgICAgICAgICAgICAg
ICBib2R5U3VtLAorICAgICAgICAgICAgICAgIGJ1aWxkZXItPkNyZWF0ZUxvYWQoCisgICAgICAg
ICAgICAgICAgICAgIGJ1aWxkZXItPkNyZWF0ZUludFRvUHRyKAorICAgICAgICAgICAgICAgICAg
ICAgICAgYnVpbGRlci0+Q3JlYXRlQWRkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1
aWxkZXItPmdldEludDY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnZhclNsb3RzWzBdKSksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRlci0+Q3JlYXRlU2hsKAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBidWlsZGVyLT5DcmVhdGVaRXh0KAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRlci0+Q3JlYXRlQW5kKAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0JvZHlJbmRleCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGVyLT5nZXRJbnQzMihudW1WYXJzIC0gMSkp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZTo6Z2V0SW50NjRUeShj
b250ZXh0KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXItPmdldElu
dDY0KDIpKSksCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMlR5LT5nZXRQb2ludGVyVG8o
KSkpKTsKKyAgICAgICAgICAgIGJvZHlJbmRleC0+YWRkSW5jb21pbmcobmV3Qm9keUluZGV4LCBs
b29wQm9keSk7CisgICAgICAgICAgICBib2R5U3VtLT5hZGRJbmNvbWluZyhuZXdCb2R5U3VtLCBs
b29wQm9keSk7CisgICAgICAgICAgICBidWlsZGVyLT5DcmVhdGVDb25kQnIoCisgICAgICAgICAg
ICAgICAgYnVpbGRlci0+Q3JlYXRlSUNtcE5FKG5ld0JvZHlJbmRleCwgYnVpbGRlci0+Z2V0SW50
MzIoMCkpLAorICAgICAgICAgICAgICAgIGxvb3BCb2R5LCBjb250aW51YXRpb24pOworCisgICAg
ICAgICAgICBidWlsZGVyID0gbWFrZV91bmlxdWU8SVJCdWlsZGVyPD4+KGNvbnRpbnVhdGlvbik7
CisgICAgICAgICAgICBQSElOb2RlKiBmaW5hbFN1bSA9IGJ1aWxkZXItPkNyZWF0ZVBISShpbnQz
MlR5LCAyKTsKKyAgICAgICAgICAgIGZpbmFsU3VtLT5hZGRJbmNvbWluZyhzdGFydFN1bSwgY3Vy
cmVudCk7CisgICAgICAgICAgICBmaW5hbFN1bS0+YWRkSW5jb21pbmcobmV3Qm9keVN1bSwgbG9v
cEJvZHkpOworICAgICAgICAgICAgY3VycmVudCA9IGNvbnRpbnVhdGlvbjsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGJ1aWxkZXItPkNyZWF0ZVJldCh2YXJzWzBdKTsKKworICAgIGVycnMoKSA8
PCAiTW9kdWxlOiAiIDw8ICptb2R1bGUgPDwgIlxuIjsKKworICAgIHByaW50ZigiSGVyZSFcbiIp
OworICAgIGJvb2wgcmVzdWx0ID0gdmVyaWZ5TW9kdWxlKCptb2R1bGUpOworICAgIHByaW50Zigi
VmVyaWZpZXIgcmVzdWx0ID0gJXNcbiIsIHJlc3VsdD8idHJ1ZSI6ImZhbHNlIik7CisKKyAgICB1
bmlxdWVfcHRyPEV4ZWN1dGlvbkVuZ2luZT4gRUU7CisgICAgeworICAgICAgICBzdGQ6OnN0cmlu
ZyBlcnJvck1lc3NhZ2U7CisgICAgICAgIEVuZ2luZUJ1aWxkZXIgYnVpbGRlcigoc3RkOjp1bmlx
dWVfcHRyPE1vZHVsZT4obW9kdWxlKSkpOworICAgICAgICBidWlsZGVyLnNldE1BcmNoKCIiKTsK
KyAgICAgICAgYnVpbGRlci5zZXRNQ1BVKHN5czo6Z2V0SG9zdENQVU5hbWUoKSk7CisgICAgICAg
IGJ1aWxkZXIuc2V0TUF0dHJzKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPigpKTsKKyAgICAgICAg
YnVpbGRlci5zZXRSZWxvY2F0aW9uTW9kZWwoUmVsb2M6OkRlZmF1bHQpOworICAgICAgICBidWls
ZGVyLnNldENvZGVNb2RlbChDb2RlTW9kZWw6OkpJVERlZmF1bHQpOworICAgICAgICBidWlsZGVy
LnNldEVycm9yU3RyKCZlcnJvck1lc3NhZ2UpOworICAgICAgICBidWlsZGVyLnNldEVuZ2luZUtp
bmQoRW5naW5lS2luZDo6SklUKTsKKworICAgICAgICBidWlsZGVyLnNldE9wdExldmVsKENvZGVH
ZW5PcHQ6OkRlZmF1bHQpOworICAgICAgICAKKyAgICAgICAgeworICAgICAgICAgICAgVGFyZ2V0
T3B0aW9ucyBPcHRpb25zOworICAgICAgICAgICAgT3B0aW9ucy5GbG9hdEFCSVR5cGUgPSBGbG9h
dEFCSTo6RGVmYXVsdDsKKworICAgICAgICAgICAgYnVpbGRlci5zZXRUYXJnZXRPcHRpb25zKE9w
dGlvbnMpOworICAgICAgICB9CisKKyAgICAgICAgRUUgPSB1bmlxdWVfcHRyPEV4ZWN1dGlvbkVu
Z2luZT4oYnVpbGRlci5jcmVhdGUoKSk7CisgICAgfQorICAgIAorICAgIGxlZ2FjeTo6UGFzc01h
bmFnZXIgcGFzc01hbmFnZXI7CisgICAgLy9wYXNzTWFuYWdlci5hZGQobmV3IERhdGFMYXlvdXQo
KkVFLT5nZXREYXRhTGF5b3V0KCkpKTsKKyAgICBwYXNzTWFuYWdlci5hZGQoY3JlYXRlUHJvbW90
ZU1lbW9yeVRvUmVnaXN0ZXJQYXNzKCkpOworICAgIHBhc3NNYW5hZ2VyLmFkZChjcmVhdGVDb25z
dGFudFByb3BhZ2F0aW9uUGFzcygpKTsKKyAgICBwYXNzTWFuYWdlci5hZGQoY3JlYXRlSW5zdHJ1
Y3Rpb25Db21iaW5pbmdQYXNzKCkpOworICAgIHBhc3NNYW5hZ2VyLmFkZChjcmVhdGVCYXNpY0Fs
aWFzQW5hbHlzaXNQYXNzKCkpOworICAgIHBhc3NNYW5hZ2VyLmFkZChjcmVhdGVUeXBlQmFzZWRB
bGlhc0FuYWx5c2lzUGFzcygpKTsKKyAgICBwYXNzTWFuYWdlci5hZGQoY3JlYXRlR1ZOUGFzcygp
KTsKKyAgICBwYXNzTWFuYWdlci5hZGQoY3JlYXRlQ0ZHU2ltcGxpZmljYXRpb25QYXNzKCkpOwor
ICAgIHBhc3NNYW5hZ2VyLnJ1bigqbW9kdWxlKTsKKworICAgIEVFLT5nZXRGdW5jdGlvbkFkZHJl
c3MoZnVuY3Rpb24tPmdldE5hbWUoKSk7Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQor
CitpbnQgbWFpbihpbnQgYywgY2hhcioqIHYpCit7CisgICAgZG91YmxlIGJlZm9yZSA9IG1vbm90
b25pY2FsbHlJbmNyZWFzaW5nVGltZU1TKCk7CisgICAgcnVuKDY0LCAxMjgpOworICAgIGRvdWJs
ZSBhZnRlciA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZU1TKCk7CisgICAgcHJpbnRmKCJU
aGF0IHRvb2sgJWxmIG1zLlxuIiwgYWZ0ZXIgLSBiZWZvcmUpOworICAgIHJldHVybiAwOworfQor
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264490</attachid>
            <date>2015-10-31 15:50:52 -0700</date>
            <delta_ts>2015-10-31 16:30:10 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>38349</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkxODQ0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY5IEBA
CisyMDE1LTEwLTMxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QjM6OnJlZHVjZVN0cmVuZ3RoJ3MgRENFIHNob3VsZCBiZSBtb3JlIGFncm8gYW5kIGxlc3Mgd3Jv
bmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDc0
OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpcnN0
IG9mIGFsbCwgb3VyIERDRSBoYWQgYSBidWcgd2hlcmUgaXQgd291bGQga2VlcCBVcHNpbG9ucyBh
ZnRlciBpdCBkZWxldGVkIHRoZSBQaGlzIHRoYXQKKyAgICAgICAgdGhleSByZWZlcmVuY2VkLiBC
dXQgb3VyIEIzIERDRSB3YXMgYWxzbyBub3QgYWdncmVzc2l2ZSBlbm91Z2guIEl0IHdvdWxkIG5v
dCBlbGltaW5hdGUKKyAgICAgICAgY3ljbGVzLiBJdCB3YXMgYWxzbyBwcm9iYWJseSBzbG93ZXIg
dGhhbiBpdCBuZWVkZWQgdG8gYmUsIHNpbmNlIGl0IHdvdWxkIGVsaW1pbmF0ZSBhbGwKKyAgICAg
ICAgbmV2ZXItcmVmZXJlbmNlZCB0aGluZ3Mgb24gZWFjaCBmaXhwb2ludC4KKworICAgICAgICBU
aGlzIGFkZHMgYSBwcmVzdW1lLWV2ZXJ5b25lLWlzLWRlYWQtYW5kLWZpbmQtbGl2ZS10aGluZ3Mg
c3R5bGUgRENFLiBUaGlzIGlzIHZlcnkgbmF0dXJhbCB0bworICAgICAgICB3cml0ZSwgZXhjZXB0
IGZvciBVcHNpbG9ucy4gRm9yIGV2ZXJ5dGhpbmcgYnV0IFVwc2lsb25zLCBpdCdzIGp1c3QgYSB3
b3JrbGlzdCBhbGdvcml0aG0uIEZvcgorICAgICAgICBVcHNpbG9ucywgaXQncyBhIGZpeHBvaW50
LiBJdCB3b3JrcyBmaW5lIGluIHRoZSBlbmQuCisKKyAgICAgICAgSSBrZXB0IGZpbmRpbmcgYnVn
cyBpbiB0aGlzIGFsZ29yaXRobSB3aGVuIEkgdGVzdGVkIGl0IGFnYWluc3QgbXkgIkNvbXBsZXgi
IHRlc3QgdGhhdCBJIHdhcworICAgICAgICB3cml0aW5nIGFzIGEgY29tcGlsZSB0aW1lIGJlbmNo
bWFyay4gU28sIEkgaW5jbHVkZSB0aGF0IHRlc3QgaW4gdGhpcyBjaGFuZ2UuIEkgYWxzbyBpbmNs
dWRlCisgICAgICAgIHRoZSBzbWFsbCBsb3dlcmluZyBleHRlbnNpb25zIHRoYXQgaXQgbmVlZGVk
IC0gc2hpZnRpbmcgYW5kIHplcm8gZXh0ZW5kaW5nLgorCisgICAgICAgIFRoaXMgY2hhbmdlIGFs
c28gYWRkcyBhbiBMTFZNIHZlcnNpb24gb2YgdGhlIENvbXBsZXggdGVzdC4gVGhvdWdoIHRoZSBM
TFZNIHZlcnNpb24gZmVlbHMKKyAgICAgICAgbW9yZSBuYXR1cmFsIHRvIHdyaXRlIGJlY2F1c2Ug
TExWTSBoYXMgdHJhZGl0aW9uYWwgUGhpJ3MgcmF0aGVyIHRoYW4gb3VyIHF1aXJreSBQaGkncywg
aW4KKyAgICAgICAgdGhlIGVuZCBMTFZNIGVuZHMgdXAgcGVyZm9ybWluZyB2ZXJ5IGJhZGx5IC0g
MTB4IHRvIDIweCB3b3JzZSB0aGFuIEIzLiBTb21lIG9mIHRoYXQgZ2FwIHdpbGwKKyAgICAgICAg
Y2xvc2Ugb25jZSB3ZSBnaXZlIEIzIGEgcmVnaXN0ZXIgYWxsb2NhdG9yLCBidXQgc3RpbGwsIHRo
YXQncyBwcmV0dHkgZ29vZCBuZXdzIGZvciBvdXIgQjMKKyAgICAgICAgc3RyYXRlZ3kuCisKKyAg
ICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaDoKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OmxzaGlmdDY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJYODZfNjQ6OnJzaGlmdDY0KToKKyAgICAgICAgKiBhc3NlbWJsZXIvWDg2QXNzZW1ibGVy
Lmg6CisgICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6c2hscV9pOHIpOgorICAgICAgICAoSlND
OjpYODZBc3NlbWJsZXI6OnNobHFfQ0xyKToKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpp
bXVsbF9ycik6CisgICAgICAgICogYjMvQjNCYXNpY0Jsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6
QjM6OkJhc2ljQmxvY2s6OnJlcGxhY2VQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpC
YXNpY0Jsb2NrOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OnJlbW92ZU5v
cHMpOiBEZWxldGVkLgorICAgICAgICAqIGIzL0IzQmFzaWNCbG9jay5oOgorICAgICAgICAoSlND
OjpCMzo6QmFzaWNCbG9jazo6ZnJlcXVlbmN5KToKKyAgICAgICAgKiBiMy9CM0xvd2VyVG9BaXIu
Y3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlBbmQpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlTaGwpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpMb3dlclRvQWlyOjp0cnlTdG9yZUFkZExvYWQpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjp0cnlUcnVuYyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9B
aXI6OnRyeVpFeHQzMik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRyeUFy
Z3VtZW50UmVnKToKKyAgICAgICAgKiBiMy9CM0xvd2VyaW5nTWF0Y2hlci5wYXR0ZXJuczoKKyAg
ICAgICAgKiBiMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcDoKKyAgICAgICAgKiBiMy9CM1ZhbGlkYXRl
LmNwcDoKKyAgICAgICAgKiBiMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHA6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OmFsbG9jYXRlU3RhY2spOgorICAgICAgICAqIGIzL2Fpci9BaXJJbnN0SW5s
aW5lcy5oOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpGb3JFYWNoPEFyZz46OmZvckVhY2gpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnN0Ojpmb3JFYWNoKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6aXNMc2hpZnQzMlZhbGlkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6aXNMc2hpZnQ2
NFZhbGlkKToKKyAgICAgICAgKiBiMy9haXIvQWlyTGl2ZW5lc3MuaDoKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6TGl2ZW5lc3M6OmlzQWxpdmUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMaXZl
bmVzczo6TGl2ZW5lc3MpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMaXZlbmVzczo6TG9jYWxD
YWxjOjpleGVjdXRlKToKKyAgICAgICAgKiBiMy9haXIvQWlyT3Bjb2RlLm9wY29kZXM6CisgICAg
ICAgICogYjMvdGVzdGIzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RCcmFuY2hFcXVhbEZv
bGRQdHIpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdENvbXBsZXgpOgorICAgICAgICAoSlNDOjpC
Mzo6cnVuKToKKwogMjAxNS0xMC0zMSAgQnJpYW4gQnVyZyAgPGJidXJnQGFwcGxlLmNvbT4KIAog
ICAgICAgICBCdWlsdGlucyBnZW5lcmF0b3Igc2hvdWxkIHB1dCBXZWJDb3JlLW9ubHkgd3JhcHBl
cnMgaW4gdGhlIHBlci1idWlsdGluIGhlYWRlcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkocmV2aXNpb24g
MTkxODQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
clg4Nl82NC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjksNiArMzI5LDIwIEBAIHB1YmxpYzoKICAg
ICAgICAgbV9hc3NlbWJsZXIuc2hscV9pOHIoaW1tLm1fdmFsdWUsIGRlc3QpOwogICAgIH0KICAg
ICAKKyAgICB2b2lkIGxzaGlmdDY0KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICBBU1NFUlQoc3JjICE9IGRlc3QpOworICAgICAgICAKKyAgICAgICAgaWYg
KHNyYyA9PSBYODZSZWdpc3RlcnM6OmVjeCkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNobHFf
Q0xyKGRlc3QpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIENhbiBvbmx5IHNoaWZ0
IGJ5IGVjeCwgc28gd2UgZG8gc29tZSBzd2FwcGluZyBvZiB3ZSBzZWUgYW55dGhpbmcgZWxzZS4K
KyAgICAgICAgICAgIHN3YXAoc3JjLCBYODZSZWdpc3RlcnM6OmVjeCk7CisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5zaGxxX0NMcihkZXN0KTsKKyAgICAgICAgICAgIHN3YXAoc3JjLCBYODZSZWdp
c3RlcnM6OmVjeCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCiAgICAgdm9pZCByc2hpZnQ2NChU
cnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2Vt
Ymxlci5zYXJxX2k4cihpbW0ubV92YWx1ZSwgZGVzdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHJldmlzaW9uIDE5MTg0NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTkxMCw2ICs5MTAsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgbV9mb3JtYXR0
ZXIuaW1tZWRpYXRlOChpbW0pOwogICAgICAgICB9CiAgICAgfQorCisgICAgdm9pZCBzaGxxX0NM
cihSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0
KE9QX0dST1VQMl9FdkNMLCBHUk9VUDJfT1BfU0hMLCBkc3QpOworICAgIH0KICNlbmRpZiAvLyBD
UFUoWDg2XzY0KQogCiAgICAgdm9pZCBpbXVsbF9ycihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJ
RCBkc3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmNwcAko
cmV2aXNpb24gMTkxODQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9j
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDIwICs2Nyw2IEBAIGJvb2wgQmFzaWNCbG9jazo6
cmVwbGFjZVByZWRlY2Vzc29yKEJhc2kKICAgICByZXR1cm4gQjM6OnJlcGxhY2VQcmVkZWNlc3Nv
cih0aGlzLCBmcm9tLCB0byk7CiB9CiAKLXZvaWQgQmFzaWNCbG9jazo6cmVtb3ZlTm9wcyhQcm9j
ZWR1cmUmIHByb2NlZHVyZSkKLXsKLSAgICB1bnNpZ25lZCBzb3VyY2VJbmRleCA9IDA7Ci0gICAg
dW5zaWduZWQgdGFyZ2V0SW5kZXggPSAwOwotICAgIHdoaWxlIChzb3VyY2VJbmRleCA8IHNpemUo
KSkgewotICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlc1tzb3VyY2VJbmRleCsrXTsKLSAg
ICAgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSA9PSBOb3ApCi0gICAgICAgICAgICBwcm9jZWR1cmUu
ZGVsZXRlVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3ZhbHVlc1t0
YXJnZXRJbmRleCsrXSA9IHZhbHVlOwotICAgIH0KLSAgICBtX3ZhbHVlcy5yZXNpemUodGFyZ2V0
SW5kZXgpOwotfQotCiB2b2lkIEJhc2ljQmxvY2s6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKIHsKICAgICBvdXQucHJpbnQoZHVtcFByZWZpeCwgbV9pbmRleCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCShyZXZpc2lvbiAxOTE4NDQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTk1
LDggKzk1LDYgQEAgcHVibGljOgogCiAgICAgZG91YmxlIGZyZXF1ZW5jeSgpIGNvbnN0IHsgcmV0
dXJuIG1fZnJlcXVlbmN5OyB9CiAKLSAgICB2b2lkIHJlbW92ZU5vcHMoUHJvY2VkdXJlJik7Ci0K
ICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICB2b2lkIGRlZXBEdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xv
d2VyVG9BaXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xv
d2VyVG9BaXIuY3BwCShyZXZpc2lvbiAxOTE4NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNMb3dlclRvQWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTc3LDYgKzU3NywyMiBAQCBw
dWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CisKKyAg
ICBib29sIHRyeVNobChWYWx1ZSogdmFsdWUsIFZhbHVlKiBhbW91bnQpCisgICAgeworICAgICAg
ICBBaXI6Ok9wY29kZSBvcGNvZGUgPSB2YWx1ZS0+dHlwZSgpID09IEludDMyID8gTHNoaWZ0MzIg
OiBMc2hpZnQ2NDsKKworICAgICAgICBpZiAoaW1tKGFtb3VudCkpIHsKKyAgICAgICAgICAgIGFw
cGVuZChNb3ZlLCB0bXAodmFsdWUpLCB0bXAoY3VycmVudFZhbHVlKSk7CisgICAgICAgICAgICBh
cHBlbmQob3Bjb2RlLCBpbW0oYW1vdW50KSwgdG1wKGN1cnJlbnRWYWx1ZSkpOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKHZh
bHVlKSwgdG1wKGN1cnJlbnRWYWx1ZSkpOworICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKGFtb3Vu
dCksIFRtcChYODZSZWdpc3RlcnM6OmVjeCkpOworICAgICAgICBhcHBlbmQob3Bjb2RlLCBUbXAo
WDg2UmVnaXN0ZXJzOjplY3gpLCB0bXAoY3VycmVudFZhbHVlKSk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KICAgICAKICAgICBib29sIHRyeVN0b3JlQWRkTG9hZChWYWx1ZSogbGVmdCwg
VmFsdWUqIHJpZ2h0LCBWYWx1ZSopCiAgICAgewpAQCAtNjQwLDYgKzY1NiwxMiBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAorICAgIGJvb2wgdHJ5WkV4dDMyKFZhbHVl
KiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGFwcGVuZChNb3ZlMzIsIHRtcCh2YWx1ZSksIHRtcChj
dXJyZW50VmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgYm9vbCB0
cnlBcmd1bWVudFJlZygpCiAgICAgewogICAgICAgICBwcm9sb2d1ZS5hcHBlbmQoSW5zdCgKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyaW5nTWF0Y2hlci5wYXR0ZXJucwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlcmluZ01hdGNoZXIu
cGF0dGVybnMJKHJldmlzaW9uIDE5MTg0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0xvd2VyaW5nTWF0Y2hlci5wYXR0ZXJucwkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsOCBA
QCBBZGQgPSBBZGQobGVmdCwgcmlnaHQpCiBTdWIgPSBTdWIobGVmdCwgcmlnaHQpCiBBbmQgPSBC
aXRBbmQobGVmdCwgcmlnaHQpCiAKK1NobCA9IFNobCh2YWx1ZSwgYW1vdW50KQorCiBTdG9yZUFk
ZExvYWQgPSBTdG9yZShBZGQobGVmdCwgcmlnaHQpLCBhZGRyZXNzKQogU3RvcmVTdWJMb2FkID0g
U3RvcmUoQWRkKGxlZnQsIHJpZ2h0KSwgYWRkcmVzcykKIFN0b3JlQW5kTG9hZCA9IFN0b3JlKEJp
dEFuZChsZWZ0LCByaWdodCksIGFkZHJlc3MpCkBAIC00Miw2ICs0NCw4IEBAIFN0b3JlID0gU3Rv
cmUodmFsdWUsIGFkZHJlc3MpCiBUcnVuY0FyZ3VtZW50UmVnID0gVHJ1bmMoYXJndW1lbnRSZWcg
PSBBcmd1bWVudFJlZygpKQogVHJ1bmMgPSBUcnVuYyh2YWx1ZSkKIAorWkV4dDMyID0gWkV4dDMy
KHZhbHVlKQorCiBBcmd1bWVudFJlZyA9IEFyZ3VtZW50UmVnKCkKIAogQ29uc3QzMiA9IENvbnN0
MzIoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3Ro
LmNwcAkocmV2aXNpb24gMTkxODQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVk
dWNlU3RyZW5ndGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMiArMjksMTUgQEAKICNpZiBF
TkFCTEUoQjNfSklUKQogCiAjaW5jbHVkZSAiQjNDb250cm9sVmFsdWUuaCIKKyNpbmNsdWRlICJC
M0luZGV4U2V0LmgiCiAjaW5jbHVkZSAiQjNJbnNlcnRpb25TZXRJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiQjNNZW1vcnlWYWx1ZS5oIgogI2luY2x1ZGUgIkIzUGhhc2VTY29wZS5oIgogI2luY2x1ZGUg
IkIzUHJvY2VkdXJlSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzVXBzaWxvblZhbHVlLmgiCiAjaW5j
bHVkZSAiQjNVc2VDb3VudHMuaCIKICNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorI2luY2x1
ZGUgPHd0Zi9HcmFwaE5vZGVXb3JrbGlzdC5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKIApAQCAtNjEsOCArNjQsNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgZm9yICht
X2luZGV4ID0gMDsgbV9pbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbV9pbmRleCkKICAgICAgICAg
ICAgICAgICAgICAgcHJvY2VzcygpOwogICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4
ZWN1dGUobV9ibG9jayk7Ci0KLSAgICAgICAgICAgICAgICBibG9jay0+cmVtb3ZlTm9wcyhtX3By
b2MpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAobV9jaGFuZ2VkQ0ZHKSB7CkBA
IC03MCwxMyArNzEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1
ZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgVXNlQ291bnRzIHVzZUNvdW50cyhtX3By
b2MpOwotICAgICAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiBtX3Byb2MudmFsdWVzKCkpIHsK
LSAgICAgICAgICAgICAgICBpZiAoIXVzZUNvdW50c1t2YWx1ZV0gJiYgIXZhbHVlLT5lZmZlY3Rz
KCkubXVzdEV4ZWN1dGUoKSkgewotICAgICAgICAgICAgICAgICAgICB2YWx1ZS0+cmVwbGFjZVdp
dGhOb3AoKTsKLSAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBraWxsRGVhZENvZGUoKTsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgcmVzdWx0IHw9IG1fY2hhbmdlZDsKICAgICAgICAgfSB3
aGlsZSAobV9jaGFuZ2VkKTsKQEAgLTMzNyw2ICszMzIsNjQgQEAgcHJpdmF0ZToKICAgICAgICAg
bV9jaGFuZ2VkID0gdHJ1ZTsKICAgICB9CiAKKyAgICB2b2lkIGtpbGxEZWFkQ29kZSgpCisgICAg
eworICAgICAgICBHcmFwaE5vZGVXb3JrbGlzdDxWYWx1ZSosIEluZGV4U2V0PFZhbHVlPj4gd29y
a2xpc3Q7CisgICAgICAgIFZlY3RvcjxVcHNpbG9uVmFsdWUqLCA2ND4gdXBzaWxvbnM7CisgICAg
ICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MpIHsKKyAgICAgICAgICAgIGZvciAo
VmFsdWUqIHZhbHVlIDogKmJsb2NrKSB7CisgICAgICAgICAgICAgICAgRWZmZWN0cyBlZmZlY3Rz
ID0gdmFsdWUtPmVmZmVjdHMoKTsKKyAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBjYXJlIGFi
b3V0IFNTQSBFZmZlY3RzLCBzaW5jZSB3ZSBtb2RlbCB0aGVtIG1vcmUgYWNjdXJhdGVseSB0aGFu
IHRoZQorICAgICAgICAgICAgICAgIC8vIGVmZmVjdHMoKSBtZXRob2QgZG9lcy4KKyAgICAgICAg
ICAgICAgICBlZmZlY3RzLndyaXRlc1NTQVN0YXRlID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
ZWZmZWN0cy5yZWFkc1NTQVN0YXRlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKGVmZmVj
dHMubXVzdEV4ZWN1dGUoKSkKKyAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaCh2YWx1
ZSk7CisgICAgICAgICAgICAgICAgaWYgKFVwc2lsb25WYWx1ZSogdXBzaWxvbiA9IHZhbHVlLT5h
czxVcHNpbG9uVmFsdWU+KCkpCisgICAgICAgICAgICAgICAgICAgIHVwc2lsb25zLmFwcGVuZCh1
cHNpbG9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmb3IgKDs7KSB7Cisg
ICAgICAgICAgICB3aGlsZSAoVmFsdWUqIHZhbHVlID0gd29ya2xpc3QucG9wKCkpIHsKKyAgICAg
ICAgICAgICAgICBmb3IgKFZhbHVlKiBjaGlsZCA6IHZhbHVlLT5jaGlsZHJlbigpKQorICAgICAg
ICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKGNoaWxkKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgYm9vbCBkaWRQdXNoID0gZmFsc2U7CisgICAgICAgICAgICBm
b3IgKHNpemVfdCB1cHNpbG9uSW5kZXggPSAwOyB1cHNpbG9uSW5kZXggPCB1cHNpbG9ucy5zaXpl
KCk7ICsrdXBzaWxvbkluZGV4KSB7CisgICAgICAgICAgICAgICAgVXBzaWxvblZhbHVlKiB1cHNp
bG9uID0gdXBzaWxvbnNbdXBzaWxvbkluZGV4XTsKKyAgICAgICAgICAgICAgICBpZiAod29ya2xp
c3Quc2F3KHVwc2lsb24tPnBoaSgpKSkgeworICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5w
dXNoKHVwc2lsb24pOworICAgICAgICAgICAgICAgICAgICB1cHNpbG9uc1t1cHNpbG9uSW5kZXgt
LV0gPSB1cHNpbG9ucy5sYXN0KCk7CisgICAgICAgICAgICAgICAgICAgIHVwc2lsb25zLnRha2VM
YXN0KCk7CisgICAgICAgICAgICAgICAgICAgIGRpZFB1c2ggPSB0cnVlOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghZGlkUHVzaCkKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxv
Y2sgOiBtX3Byb2MpIHsKKyAgICAgICAgICAgIHNpemVfdCBzb3VyY2VJbmRleCA9IDA7CisgICAg
ICAgICAgICBzaXplX3QgdGFyZ2V0SW5kZXggPSAwOworICAgICAgICAgICAgd2hpbGUgKHNvdXJj
ZUluZGV4IDwgYmxvY2stPnNpemUoKSkgeworICAgICAgICAgICAgICAgIFZhbHVlKiB2YWx1ZSA9
IGJsb2NrLT5hdChzb3VyY2VJbmRleCsrKTsKKyAgICAgICAgICAgICAgICBpZiAod29ya2xpc3Qu
c2F3KHZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAgYmxvY2stPmF0KHRhcmdldEluZGV4Kysp
ID0gdmFsdWU7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG1f
cHJvYy5kZWxldGVWYWx1ZSh2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICAvLyBJdCdzIG5vdCBlbnRpcmVseSBjbGVhciBpZiB0aGlzIGlzIG5lZWRlZC4g
SSB0aGluayBpdCBtYWtlcyBzZW5zZSB0byBoYXZlCisgICAgICAgICAgICAgICAgICAgIC8vIHRo
aXMgZm9yY2UgYSByZXJ1biBvZiB0aGUgZml4cG9pbnQgZm9yIG5vdywgc2luY2UgdGhhdCB3aWxs
IG1ha2UgaXQgZWFzaWVyCisgICAgICAgICAgICAgICAgICAgIC8vIHRvIGRvIHBlZXBob2xlIG9w
dGltaXphdGlvbnM6IHJlbW92aW5nIGRlYWQgY29kZSB3aWxsIG1ha2UgdGhlIHBlZXBob2xlCisg
ICAgICAgICAgICAgICAgICAgIC8vIGVhc2llciB0byBzcG90LgorICAgICAgICAgICAgICAgICAg
ICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGJsb2NrLT52YWx1ZXMoKS5yZXNpemUodGFyZ2V0SW5kZXgpOworICAgICAgICB9
CisgICAgfQorCiAgICAgUHJvY2VkdXJlJiBtX3Byb2M7CiAgICAgSW5zZXJ0aW9uU2V0IG1faW5z
ZXJ0aW9uU2V0OwogICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAxOTE4NDQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDEyICs2
MSwxMiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBIYXNoU2V0PEJhc2ljQmxvY2sqPiBibG9j
a3M7CiAgICAgICAgIEhhc2hTZXQ8VmFsdWUqPiB2YWx1ZUluUHJvYzsKLSAgICAgICAgSGFzaFNl
dDxWYWx1ZSo+IHZhbHVlSW5CbG9jazsKKyAgICAgICAgSGFzaE1hcDxWYWx1ZSosIHVuc2lnbmVk
PiB2YWx1ZUluQmxvY2s7CiAKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJv
Y2VkdXJlKSB7CiAgICAgICAgICAgICBibG9ja3MuYWRkKGJsb2NrKTsKICAgICAgICAgICAgIGZv
ciAoVmFsdWUqIHZhbHVlIDogKmJsb2NrKQotICAgICAgICAgICAgICAgIHZhbHVlSW5CbG9jay5h
ZGQodmFsdWUpOworICAgICAgICAgICAgICAgIHZhbHVlSW5CbG9jay5hZGQodmFsdWUsIDApLml0
ZXJhdG9yLT52YWx1ZSsrOwogICAgICAgICB9CiAKICAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUg
OiBtX3Byb2NlZHVyZS52YWx1ZXMoKSkKQEAgLTc0LDggKzc0LDEwIEBAIHB1YmxpYzoKIAogICAg
ICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IHZhbHVlSW5Qcm9jKQogICAgICAgICAgICAgVkFMSURB
VEUodmFsdWVJbkJsb2NrLmNvbnRhaW5zKHZhbHVlKSwgKCJBdCAiLCAqdmFsdWUpKTsKLSAgICAg
ICAgZm9yIChWYWx1ZSogdmFsdWUgOiB2YWx1ZUluQmxvY2spCi0gICAgICAgICAgICBWQUxJREFU
RSh2YWx1ZUluUHJvYy5jb250YWlucyh2YWx1ZSksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAg
IGZvciAoYXV0byYgZW50cnkgOiB2YWx1ZUluQmxvY2spIHsKKyAgICAgICAgICAgIFZBTElEQVRF
KHZhbHVlSW5Qcm9jLmNvbnRhaW5zKGVudHJ5LmtleSksICgiQXQgIiwgKmVudHJ5LmtleSkpOwor
ICAgICAgICAgICAgVkFMSURBVEUoZW50cnkudmFsdWUgPT0gMSwgKCJBdCAiLCAqZW50cnkua2V5
KSk7CisgICAgICAgIH0KIAogICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IHZhbHVlSW5Qcm9j
KSB7CiAgICAgICAgICAgICBmb3IgKFZhbHVlKiBjaGlsZCA6IHZhbHVlLT5jaGlsZHJlbigpKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHJldmlzaW9uIDE5MTg0NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDY2LDYgKzEwNjYsMTQxIEBAIHZvaWQgdGVzdEJyYW5jaEVxdWFsRm9sZFB0cihpbnRwdHJfdCB2
YWwKICAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4ocHJvYykgPT0gIXZhbHVlKTsKIH0KIAor
dm9pZCB0ZXN0Q29tcGxleCh1bnNpZ25lZCBudW1WYXJzLCB1bnNpZ25lZCBudW1Db25zdHJ1Y3Rz
KQoreworICAgIGRvdWJsZSBiZWZvcmUgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWVNUygp
OworICAgIAorICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIGN1cnJlbnQgPSBw
cm9jLmFkZEJsb2NrKCk7CisKKyAgICBDb25zdDMyVmFsdWUqIG9uZSA9IGN1cnJlbnQtPmFwcGVu
ZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAxKTsKKworICAgIFZlY3RvcjxpbnQz
Ml90PiB2YXJTbG90czsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1WYXJzOyBpLS07KQorICAg
ICAgICB2YXJTbG90cy5hcHBlbmQoaSk7CisKKyAgICBWZWN0b3I8VmFsdWUqPiB2YXJzOworICAg
IGZvciAoaW50MzJfdCYgdmFyU2xvdCA6IHZhclNsb3RzKSB7CisgICAgICAgIFZhbHVlKiB2YXJT
bG90UHRyID0gY3VycmVudC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigp
LCAmdmFyU2xvdCk7CisgICAgICAgIHZhcnMuYXBwZW5kKGN1cnJlbnQtPmFwcGVuZE5ldzxNZW1v
cnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50MzIsIE9yaWdpbigpLCB2YXJTbG90UHRyKSk7CisgICAg
fQorCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUNvbnN0cnVjdHM7ICsraSkgewor
ICAgICAgICBpZiAoaSAmIDEpIHsKKyAgICAgICAgICAgIC8vIENvbnRyb2wgZmxvdyBkaWFtb25k
LgorICAgICAgICAgICAgdW5zaWduZWQgcHJlZGljYXRlVmFySW5kZXggPSAoaSA+PiAxKSAlIG51
bVZhcnM7CisgICAgICAgICAgICB1bnNpZ25lZCB0aGVuSW5jVmFySW5kZXggPSAoKGkgPj4gMSkg
KyAxKSAlIG51bVZhcnM7CisgICAgICAgICAgICB1bnNpZ25lZCBlbHNlSW5jVmFySW5kZXggPSAo
KGkgPj4gMSkgKyAyKSAlIG51bVZhcnM7CisKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIHRoZW5C
bG9jayA9IHByb2MuYWRkQmxvY2soKTsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGVsc2VCbG9j
ayA9IHByb2MuYWRkQmxvY2soKTsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlv
biA9IHByb2MuYWRkQmxvY2soKTsKKworICAgICAgICAgICAgY3VycmVudC0+YXBwZW5kTmV3PENv
bnRyb2xWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgQnJhbmNoLCBPcmlnaW4oKSwgdmFy
c1twcmVkaWNhdGVWYXJJbmRleF0sCisgICAgICAgICAgICAgICAgRnJlcXVlbnRlZEJsb2NrKHRo
ZW5CbG9jayksIEZyZXF1ZW50ZWRCbG9jayhlbHNlQmxvY2spKTsKKworICAgICAgICAgICAgVXBz
aWxvblZhbHVlKiB0aGVuVGhlblJlc3VsdCA9IHRoZW5CbG9jay0+YXBwZW5kTmV3PFVwc2lsb25W
YWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgT3JpZ2luKCksCisgICAgICAgICAgICAgICAg
dGhlbkJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIHZhcnNbdGhl
bkluY1ZhckluZGV4XSwgb25lKSk7CisgICAgICAgICAgICBVcHNpbG9uVmFsdWUqIHRoZW5FbHNl
UmVzdWx0ID0gdGhlbkJsb2NrLT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPigKKyAgICAgICAgICAg
ICAgICBwcm9jLCBPcmlnaW4oKSwgdmFyc1tlbHNlSW5jVmFySW5kZXhdKTsKKyAgICAgICAgICAg
IHRoZW5CbG9jay0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4ocHJvYywgSnVtcCwgT3JpZ2luKCks
IEZyZXF1ZW50ZWRCbG9jayhjb250aW51YXRpb24pKTsKKworICAgICAgICAgICAgVXBzaWxvblZh
bHVlKiBlbHNlRWxzZVJlc3VsdCA9IGVsc2VCbG9jay0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4o
CisgICAgICAgICAgICAgICAgcHJvYywgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgZWxzZUJs
b2NrLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIHZhcnNbZWxzZUluY1Zh
ckluZGV4XSwgb25lKSk7CisgICAgICAgICAgICBVcHNpbG9uVmFsdWUqIGVsc2VUaGVuUmVzdWx0
ID0gZWxzZUJsb2NrLT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPigKKyAgICAgICAgICAgICAgICBw
cm9jLCBPcmlnaW4oKSwgdmFyc1t0aGVuSW5jVmFySW5kZXhdKTsKKyAgICAgICAgICAgIGVsc2VC
bG9jay0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4ocHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1
ZW50ZWRCbG9jayhjb250aW51YXRpb24pKTsKKworICAgICAgICAgICAgVmFsdWUqIHRoZW5QaGkg
PSBjb250aW51YXRpb24tPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUGhpLCBJbnQzMiwgT3JpZ2lu
KCkpOworICAgICAgICAgICAgdGhlblRoZW5SZXN1bHQtPnNldFBoaSh0aGVuUGhpKTsKKyAgICAg
ICAgICAgIGVsc2VUaGVuUmVzdWx0LT5zZXRQaGkodGhlblBoaSk7CisgICAgICAgICAgICB2YXJz
W3RoZW5JbmNWYXJJbmRleF0gPSB0aGVuUGhpOworICAgICAgICAgICAgCisgICAgICAgICAgICBW
YWx1ZSogZWxzZVBoaSA9IGNvbnRpbnVhdGlvbi0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBQaGks
IEludDMyLCBPcmlnaW4oKSk7CisgICAgICAgICAgICB0aGVuRWxzZVJlc3VsdC0+c2V0UGhpKGVs
c2VQaGkpOworICAgICAgICAgICAgZWxzZUVsc2VSZXN1bHQtPnNldFBoaShlbHNlUGhpKTsKKyAg
ICAgICAgICAgIHZhcnNbZWxzZUluY1ZhckluZGV4XSA9IHRoZW5QaGk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGN1cnJlbnQgPSBjb250aW51YXRpb247CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAvLyBMb29wLgorCisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBsb29wRW50cnkg
PSBwcm9jLmFkZEJsb2NrKCk7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBsb29wUmVlbnRyeSA9
IHByb2MuYWRkQmxvY2soKTsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGxvb3BCb2R5ID0gcHJv
Yy5hZGRCbG9jaygpOworICAgICAgICAgICAgQmFzaWNCbG9jayogbG9vcEV4aXQgPSBwcm9jLmFk
ZEJsb2NrKCk7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBsb29wU2tpcCA9IHByb2MuYWRkQmxv
Y2soKTsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IHByb2MuYWRkQmxv
Y2soKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgVmFsdWUqIHN0YXJ0SW5kZXggPSB2YXJz
WyhpID4+IDEpICUgbnVtVmFyc107CisgICAgICAgICAgICBWYWx1ZSogc3RhcnRTdW0gPSBjdXJy
ZW50LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCk7CisgICAgICAg
ICAgICBjdXJyZW50LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgICAgICAgICBw
cm9jLCBCcmFuY2gsIE9yaWdpbigpLCBzdGFydEluZGV4LAorICAgICAgICAgICAgICAgIEZyZXF1
ZW50ZWRCbG9jayhsb29wRW50cnkpLCBGcmVxdWVudGVkQmxvY2sobG9vcFNraXApKTsKKworICAg
ICAgICAgICAgVXBzaWxvblZhbHVlKiBzdGFydEluZGV4Rm9yQm9keSA9IGxvb3BFbnRyeS0+YXBw
ZW5kTmV3PFVwc2lsb25WYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgT3JpZ2luKCksIHN0
YXJ0SW5kZXgpOworICAgICAgICAgICAgVXBzaWxvblZhbHVlKiBzdGFydFN1bUZvckJvZHkgPSBs
b29wRW50cnktPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2Ms
IE9yaWdpbigpLCBzdGFydFN1bSk7CisgICAgICAgICAgICBsb29wRW50cnktPmFwcGVuZE5ldzxD
b250cm9sVmFsdWU+KHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9vcEJv
ZHkpKTsKKworICAgICAgICAgICAgVmFsdWUqIGJvZHlJbmRleCA9IGxvb3BCb2R5LT5hcHBlbmRO
ZXc8VmFsdWU+KHByb2MsIFBoaSwgSW50MzIsIE9yaWdpbigpKTsKKyAgICAgICAgICAgIHN0YXJ0
SW5kZXhGb3JCb2R5LT5zZXRQaGkoYm9keUluZGV4KTsKKyAgICAgICAgICAgIFZhbHVlKiBib2R5
U3VtID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUGhpLCBJbnQzMiwgT3JpZ2lu
KCkpOworICAgICAgICAgICAgc3RhcnRTdW1Gb3JCb2R5LT5zZXRQaGkoYm9keVN1bSk7CisgICAg
ICAgICAgICBWYWx1ZSogbmV3Qm9keUluZGV4ID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4o
cHJvYywgU3ViLCBPcmlnaW4oKSwgYm9keUluZGV4LCBvbmUpOworICAgICAgICAgICAgVmFsdWUq
IG5ld0JvZHlTdW0gPSBsb29wQm9keS0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAg
ICBwcm9jLCBBZGQsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgIGJvZHlTdW0sCisgICAgICAg
ICAgICAgICAgbG9vcEJvZHktPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4oCisgICAgICAgICAgICAg
ICAgICAgIHByb2MsIExvYWQsIEludDMyLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAg
bG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgICAgICBwcm9j
LCBBZGQsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgbG9vcEJvZHktPmFwcGVu
ZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgdmFyU2xvdHMuZGF0YSgpKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHByb2MsIFNobCwgT3JpZ2luKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHByb2MsIFpFeHQzMiwgT3JpZ2luKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvYywgQml0QW5kLCBPcmlnaW4oKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0JvZHlJbmRleCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3BCb2R5LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVl
PigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jLCBPcmlnaW4o
KSwgbnVtVmFycyAtIDEpKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcEJvZHkt
PmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAyKSkpKSk7CisgICAgICAg
ICAgICBsb29wQm9keS0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgICAgICAgICAg
cHJvYywgQnJhbmNoLCBPcmlnaW4oKSwgbmV3Qm9keUluZGV4LAorICAgICAgICAgICAgICAgIEZy
ZXF1ZW50ZWRCbG9jayhsb29wUmVlbnRyeSksIEZyZXF1ZW50ZWRCbG9jayhsb29wRXhpdCkpOwor
CisgICAgICAgICAgICBsb29wUmVlbnRyeS0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4ocHJvYywg
T3JpZ2luKCksIG5ld0JvZHlJbmRleCwgYm9keUluZGV4KTsKKyAgICAgICAgICAgIGxvb3BSZWVu
dHJ5LT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbmV3Qm9keVN1bSwg
Ym9keVN1bSk7CisgICAgICAgICAgICBsb29wUmVlbnRyeS0+YXBwZW5kTmV3PENvbnRyb2xWYWx1
ZT4ocHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayhsb29wQm9keSkpOworCisg
ICAgICAgICAgICBVcHNpbG9uVmFsdWUqIGV4aXRTdW0gPSBsb29wRXhpdC0+YXBwZW5kTmV3PFVw
c2lsb25WYWx1ZT4ocHJvYywgT3JpZ2luKCksIG5ld0JvZHlTdW0pOworICAgICAgICAgICAgbG9v
cEV4aXQtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVx
dWVudGVkQmxvY2soY29udGludWF0aW9uKSk7CisKKyAgICAgICAgICAgIFVwc2lsb25WYWx1ZSog
c2tpcFN1bSA9IGxvb3BTa2lwLT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgc3RhcnRTdW0pOworICAgICAgICAgICAgbG9vcFNraXAtPmFwcGVuZE5ldzxDb250cm9sVmFs
dWU+KHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2soY29udGludWF0aW9uKSk7
CisKKyAgICAgICAgICAgIFZhbHVlKiBmaW5hbFN1bSA9IGNvbnRpbnVhdGlvbi0+YXBwZW5kTmV3
PFZhbHVlPihwcm9jLCBQaGksIEludDMyLCBPcmlnaW4oKSk7CisgICAgICAgICAgICBleGl0U3Vt
LT5zZXRQaGkoZmluYWxTdW0pOworICAgICAgICAgICAgc2tpcFN1bS0+c2V0UGhpKGZpbmFsU3Vt
KTsKKworICAgICAgICAgICAgY3VycmVudCA9IGNvbnRpbnVhdGlvbjsKKyAgICAgICAgICAgIHZh
cnNbKChpID4+IDEpICsgMSkgJSBudW1WYXJzXSA9IGZpbmFsU3VtOworICAgICAgICB9CisgICAg
fQorCisgICAgY3VycmVudC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4ocHJvYywgUmV0dXJuLCBP
cmlnaW4oKSwgdmFyc1swXSk7CisKKyAgICBjb21waWxlKHByb2MpOworCisgICAgZG91YmxlIGFm
dGVyID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lTVMoKTsKKyAgICBkYXRhTG9nKCIgICAg
VGhhdCB0b29rICIsIGFmdGVyIC0gYmVmb3JlLCAiIG1zLlxuIik7Cit9CisKICNkZWZpbmUgUlVO
KHRlc3QpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgaWYgKCFzaG91
bGRSdW4oI3Rlc3QpKSAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIGJyZWFrOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTExNjgsNiArMTMwMywxMCBAQCB2b2lkIHJ1
bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgUlVOKHRlc3RCcmFuY2hFcXVhbEZvbGRQdHIoNDIp
KTsKICAgICBSVU4odGVzdEJyYW5jaEVxdWFsRm9sZFB0cigwKSk7CiAKKyAgICBSVU4odGVzdENv
bXBsZXgoNjQsIDEyOCkpOworICAgIFJVTih0ZXN0Q29tcGxleCg2NCwgMjU2KSk7CisgICAgUlVO
KHRlc3RDb21wbGV4KDY0LCAzODQpKTsKKwogICAgIGlmICghZGlkUnVuKQogICAgICAgICB1c2Fn
ZSgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0
YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFs
bG9jYXRlU3RhY2suY3BwCShyZXZpc2lvbiAxOTE4NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMSAr
NDEsNiBAQCBuYW1lc3BhY2UgewogCiBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIAotYm9v
bCBhcmd1bWVudElzT25TdGFjayhjb25zdCBBcmcmIGFyZykKLXsKLSAgICByZXR1cm4gYXJnLmlz
U3RhY2soKSAmJiBhcmcuc3RhY2tTbG90KCktPmtpbmQoKSA9PSBTdGFja1Nsb3RLaW5kOjpBbm9u
eW1vdXM7Ci19Ci0KIGJvb2wgYXR0ZW1wdEFzc2lnbm1lbnQoCiAgICAgU3RhY2tTbG90KiBzbG90
LCBpbnRwdHJfdCBvZmZzZXRGcm9tRlAsIGNvbnN0IFZlY3RvcjxTdGFja1Nsb3QqPiYgb3RoZXJT
bG90cykKIHsKQEAgLTE0MSwzMiArMTM2LDM1IEBAIHZvaWQgYWxsb2NhdGVTdGFjayhDb2RlJiBj
b2RlKQogICAgIH0KIAogICAgIC8vIE5vdyB3ZSBoYW5kbGUgdGhlIGFub255bW91cyBzbG90cy4K
LSAgICBMaXZlbmVzczxBcmc+IGxpdmVuZXNzKGNvZGUpOworICAgIExpdmVuZXNzPFN0YWNrU2xv
dCo+IGxpdmVuZXNzKGNvZGUpOwogICAgIEluZGV4TWFwPFN0YWNrU2xvdCwgSGFzaFNldDxTdGFj
a1Nsb3QqPj4gaW50ZXJmZXJlbmNlKGNvZGUuc3RhY2tTbG90cygpLnNpemUoKSk7CiAgICAgVmVj
dG9yPFN0YWNrU2xvdCo+IHNsb3RzOwogCiAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNv
ZGUpIHsKLSAgICAgICAgTGl2ZW5lc3M8QXJnPjo6TG9jYWxDYWxjIGxvY2FsQ2FsYyhsaXZlbmVz
cywgYmxvY2spOworICAgICAgICBMaXZlbmVzczxTdGFja1Nsb3QqPjo6TG9jYWxDYWxjIGxvY2Fs
Q2FsYyhsaXZlbmVzcywgYmxvY2spOwogCiAgICAgICAgIGF1dG8gaW50ZXJmZXJlID0gWyZdIChJ
bnN0JiBpbnN0KSB7CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICBk
YXRhTG9nKCJJbnRlcmZlcmluZzogIiwgbGlzdER1bXAobG9jYWxDYWxjLmxpdmUoKSksICJcbiIp
OworICAgICAgICAgICAgICAgIGRhdGFMb2coIkludGVyZmVyaW5nOiAiLCBwb2ludGVyTGlzdER1
bXAobG9jYWxDYWxjLmxpdmUoKSksICJcbiIpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAv
LyBGb3JtIGEgY2xpcXVlIG9mIHN0YWNrIHNsb3RzIHRoYXQgaW50ZXJmZXJlLiBGaXJzdCBmaW5k
IHRoZSBsaXN0IG9mIHN0YWNrIHNsb3RzCiAgICAgICAgICAgICAvLyB0aGF0IGFyZSBsaXZlIHJp
Z2h0IG5vdy4KICAgICAgICAgICAgIHNsb3RzLnJlc2l6ZSgwKTsKLSAgICAgICAgICAgIGZvciAo
QXJnIGFyZyA6IGxvY2FsQ2FsYy5saXZlKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXJndW1l
bnRJc09uU3RhY2soYXJnKSkKLSAgICAgICAgICAgICAgICAgICAgc2xvdHMuYXBwZW5kKGFyZy5z
dGFja1Nsb3QoKSk7CisgICAgICAgICAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IGxvY2FsQ2Fs
Yy5saXZlKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2xvdC0+a2luZCgpID09IFN0YWNrU2xv
dEtpbmQ6OkFub255bW91cykKKyAgICAgICAgICAgICAgICAgICAgc2xvdHMuYXBwZW5kKHNsb3Qp
OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBXZSBtdXN0bid0IG1hbmRhdGUgdGhh
dCB0aGUgaW5wdXQgY29kZSBpcyBvcHRpbWFsLiBUaGVyZWZvcmUsIGl0IG1heSBoYXZlIGRlYWQg
c3RvcmVzCiAgICAgICAgICAgICAvLyB0byB0aGUgc3RhY2suIFdlIG5lZWQgdG8gdHJlYXQgdGhl
c2UgYXMgaW50ZXJmZXJpbmcuCiAgICAgICAgICAgICBpbnN0LmZvckVhY2hBcmcoCiAgICAgICAg
ICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSkgewotICAg
ICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0RlZihyb2xlKSAmJiBhcmd1bWVudElzT25TdGFj
ayhhcmcpCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiAhbG9jYWxDYWxjLmxpdmUoKS5jb250
YWlucyhhcmcpKQotICAgICAgICAgICAgICAgICAgICAgICAgc2xvdHMuYXBwZW5kKGFyZy5zdGFj
a1Nsb3QoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzRGVmKHJvbGUpICYmIGFy
Zy5pc1N0YWNrKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc2xvdCA9
IGFyZy5zdGFja1Nsb3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzbG90LT5raW5k
KCkgPT0gU3RhY2tTbG90S2luZDo6QW5vbnltb3VzCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJiYgIWxvY2FsQ2FsYy5saXZlKCkuY29udGFpbnMoc2xvdCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2xvdHMuYXBwZW5kKHNsb3QpOworICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICh2ZXJib3Nl
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdElubGluZXMu
aAkocmV2aXNpb24gMTkxODQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJ
bnN0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSwyMCBAQCB0ZW1wbGF0ZTw+
IHN0cnVjdCBGb3JFYWNoPEFyZz4gewogICAgICAgICBpbnN0LmZvckVhY2hBcmcoZnVuY3Rvcik7
CiAgICAgfQogfTsKK3RlbXBsYXRlPD4gc3RydWN0IEZvckVhY2g8U3RhY2tTbG90Kj4geworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgc3RhdGljIHZvaWQgZm9yRWFjaChJbnN0
JiBpbnN0LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgaW5zdC5mb3JF
YWNoQXJnKAorICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6
VHlwZSB0eXBlKSB7CisgICAgICAgICAgICAgICAgaWYgKCFhcmcuaXNTdGFjaygpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzdGFja1Ns
b3QgPSBhcmcuc3RhY2tTbG90KCk7CisgICAgICAgICAgICAgICAgZnVuY3RvcihzdGFja1Nsb3Qs
IHJvbGUsIHR5cGUpOworICAgICAgICAgICAgICAgIGFyZyA9IEFyZzo6c3RhY2soc3RhY2tTbG90
KTsKKyAgICAgICAgICAgIH0pOworICAgIH0KK307CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFRoaW5n
LCB0eXBlbmFtZSBGdW5jdG9yPgogdm9pZCBJbnN0Ojpmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1
bmN0b3IpCkBAIC05MCw2ICsxMDQsMTEgQEAgaW5saW5lIGJvb2wgaXNMc2hpZnQzMlZhbGlkKGNv
bnN0IEluc3QmIAogICAgIHJldHVybiBpc1NoaWZ0VmFsaWQoaW5zdCk7CiB9CiAKK2lubGluZSBi
b29sIGlzTHNoaWZ0NjRWYWxpZChjb25zdCBJbnN0JiBpbnN0KQoreworICAgIHJldHVybiBpc1No
aWZ0VmFsaWQoaW5zdCk7Cit9CisKIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKIAog
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckxpdmVuZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJMaXZlbmVzcy5oCShyZXZpc2lvbiAxOTE4NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDEx
IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UKIHRlbXBsYXRlPHR5
cGVuYW1lIFRoaW5nPgogY2xhc3MgTGl2ZW5lc3MgewogcHVibGljOgorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CisgICAgc3RhdGljIGJvb2wgaXNBbGl2ZShjb25zdCBUJiB0aGluZykgeyByZXR1
cm4gdGhpbmcuaXNBbGl2ZSgpOyB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0FsaXZlKFN0YWNrU2xv
dCogc2xvdCkgeyByZXR1cm4gc2xvdC0+a2luZCgpID09IFN0YWNrU2xvdEtpbmQ6OkFub255bW91
czsgfQorICAgIAogICAgIExpdmVuZXNzKENvZGUmIGNvZGUpCiAgICAgewogICAgICAgICBtX2xp
dmVBdEhlYWQucmVzaXplKGNvZGUuc2l6ZSgpKTsKQEAgLTk0LDI0ICs5OSwxNiBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAvLyBGaXJzdCBoYW5kbGUgZGVmJ3MuCiAgICAgICAgICAgICBpbnN0LmZv
ckVhY2g8VGhpbmc+KAogICAgICAgICAgICAgICAgIFt0aGlzXSAoVGhpbmcmIGFyZywgQXJnOjpS
b2xlIHJvbGUsIEFyZzo6VHlwZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZy5pc0Fs
aXZlKCkpCisgICAgICAgICAgICAgICAgICAgIGlmICghaXNBbGl2ZShhcmcpKQogICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0Rl
Zihyb2xlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIG1fbGl2ZS5yZW1vdmUoYXJnKTsKICAg
ICAgICAgICAgICAgICB9KTsKIAotICAgICAgICAgICAgLy8gTmV4dCBoYW5kbGUgY2xvYmJlcmVk
IHJlZ2lzdGVycy4KLSAgICAgICAgICAgIGlmIChpbnN0Lmhhc1NwZWNpYWwoKSkgewotICAgICAg
ICAgICAgICAgIGluc3QuZXh0cmFDbG9iYmVyZWRSZWdzKCkuZm9yRWFjaCgKLSAgICAgICAgICAg
ICAgICAgICAgW3RoaXNdIChSZWcgcmVnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2xp
dmUucmVtb3ZlKFRoaW5nKFRtcChyZWcpKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBGaW5hbGx5IGhhbmRsZSB1
c2Uncy4KICAgICAgICAgICAgIGluc3QuZm9yRWFjaDxUaGluZz4oCiAgICAgICAgICAgICAgICAg
W3RoaXNdIChUaGluZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICghYXJnLmlzQWxpdmUoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFpc0FsaXZlKGFyZykpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChBcmc6OmlzVXNlKHJvbGUpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgbV9saXZlLmFkZChhcmcpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJPcGNvZGUub3Bjb2Rlcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpck9wY29kZS5vcGNvZGVzCShyZXZpc2lvbiAxOTE4NDQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcs
NiArMTA3LDEwIEBAIExzaGlmdDMyIFU6RywgVUQ6RwogICAgIFRtcCosIFRtcAogICAgIEltbSwg
VG1wCiAKK0xzaGlmdDY0IFU6RywgVUQ6RworICAgIFRtcCosIFRtcAorICAgIEltbSwgVG1wCisK
IE11bDMyIFU6RywgVUQ6RwogICAgIFRtcCwgVG1wCiAgICAgQWRkciwgVG1wCkluZGV4OiBTb3Vy
Y2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2
aXNpb24gMTkxODQ0KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwyMyBAQAorMjAxNS0xMC0zMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29t
PgorCisgICAgICAgIEIzOjpyZWR1Y2VTdHJlbmd0aCdzIERDRSBzaG91bGQgYmUgbW9yZSBhZ3Jv
IGFuZCBsZXNzIHdyb25nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTA3NDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIHd0Zi9HcmFwaE5vZGVXb3JrbGlzdC5oOgorICAgICAgICAoV1RGOjpHcmFwaE5v
ZGVXb3JrbGlzdDo6c2F3KTogVGhpcyBtZXRob2QgaXMgc3VwZXIgdXNlZnVsLgorCisyMDE1LTEw
LTMxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgQjM6OnJlZHVj
ZVN0cmVuZ3RoJ3MgRENFIHNob3VsZCBiZSBtb3JlIGFncm8KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDc0OAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL0dyYXBoTm9kZVdvcmtsaXN0Lmg6Cisg
ICAgICAgIChXVEY6OkdyYXBoTm9kZVdvcmtsaXN0OjpzYXcpOiBUaGlzIGlzIGdvaW5nIHRvIGJl
IHVzZWZ1bC4KKwogMjAxNS0xMC0zMCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgog
CiAgICAgICAgIFJlZ3Jlc3Npb24ocjE5MTY3Myk6IENyYXNoIGluIFJ1bkxvb3BUaW1lcjo6c2No
ZWR1bGUoKQpJbmRleDogU291cmNlL1dURi93dGYvR3JhcGhOb2RlV29ya2xpc3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9HcmFwaE5vZGVXb3JrbGlzdC5oCShyZXZpc2lvbiAxOTE4
NDQpCisrKyBTb3VyY2UvV1RGL3d0Zi9HcmFwaE5vZGVXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC01NCw2ICs1NCw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fc3RhY2sudGFrZUxh
c3QoKTsKICAgICB9CiAKKyAgICBib29sIHNhdyhOb2RlIG5vZGUpIHsgcmV0dXJuIG1fc2Vlbi5j
b250YWlucyhub2RlKTsgfQorCiBwcml2YXRlOgogICAgIFNldCBtX3NlZW47CiAgICAgVmVjdG9y
PE5vZGUsIDE2PiBtX3N0YWNrOwpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMTkxODQ0KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTUtMTAtMzEgIEZpbGlwIFBpemxvICA8
ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBCMzo6cmVkdWNlU3RyZW5ndGgncyBEQ0Ugc2hv
dWxkIGJlIG1vcmUgYWdybyBhbmQgbGVzcyB3cm9uZworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNzQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGFuIExMVk0gdmVyc2lvbiBvZiB0ZXN0YjMncyAi
dGVzdENvbXBsZXgiLiAgICAgICAgCisKKyAgICAgICAgKiBSZWR1Y2VkRlRML0NvbXBsZXhUZXN0
LmNwcDogQWRkZWQuCisKIDIwMTUtMTAtMzEgIEx1Y2FzIEZvcnNjaGxlciAgPGxmb3JzY2hsZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIFRlYWNoIHRoZSBDb21waWxlV2ViS2l0IHN0ZXAgdG8gbG9v
ayBmb3IgYWRkaXRpb25hbCBhcmd1bWVudHMuCkluZGV4OiBUb29scy9SZWR1Y2VkRlRML0NvbXBs
ZXhUZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9SZWR1Y2VkRlRML0NvbXBsZXhUZXN0LmNw
cAkocmV2aXNpb24gMCkKKysrIFRvb2xzL1JlZHVjZWRGVEwvQ29tcGxleFRlc3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMjQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKy8vIENvbXBpbGUgbGlrZSBzbzoKKy8vIGNsYW5nKysgLU8zIC1v
IENvbXBsZXhUZXN0IENvbXBsZXhUZXN0LmNwcCAtc3RkPWMrKzE0IGB+L0Rvd25sb2Fkcy9jbGFu
ZytsbHZtLTMuNy4wLXg4Nl82NC1hcHBsZS1kYXJ3aW4vYmluL2xsdm0tY29uZmlnIC0tY3BwZmxh
Z3MgLS1jeHhmbGFncyAtLWxkZmxhZ3MgLS1saWJzYCAtbGN1cnNlcyAtZyAtbHoKKworI2luY2x1
ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8Y2hyb25vPgorCisjaW5j
bHVkZSA8c3lzL3RpbWUuaD4KKworI2luY2x1ZGUgPGxsdm0vU3VwcG9ydC9yYXdfb3N0cmVhbS5o
PgorI2luY2x1ZGUgPGxsdm0vSVIvTExWTUNvbnRleHQuaD4KKyNpbmNsdWRlIDxsbHZtL0lSL0Rh
dGFMYXlvdXQuaD4KKyNpbmNsdWRlIDxsbHZtL0lSL0lSQnVpbGRlci5oPgorI2luY2x1ZGUgPGxs
dm0vSVIvQ29uc3RhbnRzLmg+CisjaW5jbHVkZSA8bGx2bS9JUi9GdW5jdGlvbi5oPgorI2luY2x1
ZGUgPGxsdm0vSVIvSW5zdHJ1Y3Rpb25zLmg+CisjaW5jbHVkZSA8bGx2bS9JUi9Nb2R1bGUuaD4K
KyNpbmNsdWRlIDxsbHZtL0lSL1ZlcmlmaWVyLmg+CisjaW5jbHVkZSA8bGx2bS9FeGVjdXRpb25F
bmdpbmUvRXhlY3V0aW9uRW5naW5lLmg+CisjaW5jbHVkZSA8bGx2bS9UcmFuc2Zvcm1zL1V0aWxz
L0Jhc2ljQmxvY2tVdGlscy5oPgorI2luY2x1ZGUgPGxsdm0vUGFzcy5oPgorI2luY2x1ZGUgPGxs
dm0vSVIvTGVnYWN5UGFzc01hbmFnZXIuaD4KKyNpbmNsdWRlIDxsbHZtL1N1cHBvcnQvSG9zdC5o
PgorI2luY2x1ZGUgPGxsdm0vQW5hbHlzaXMvUGFzc2VzLmg+CisjaW5jbHVkZSA8bGx2bS9UcmFu
c2Zvcm1zL1NjYWxhci5oPgorI2luY2x1ZGUgPGxsdm0vVHJhbnNmb3Jtcy9JUE8uaD4KKyNpbmNs
dWRlIDxsbHZtL1RyYW5zZm9ybXMvSVBPL1Bhc3NNYW5hZ2VyQnVpbGRlci5oPgorI2luY2x1ZGUg
PGxsdm0vRXhlY3V0aW9uRW5naW5lL01DSklULmg+CisjaW5jbHVkZSA8bGx2bS9TdXBwb3J0L0Vy
cm9ySGFuZGxpbmcuaD4KKyNpbmNsdWRlIDxsbHZtL1N1cHBvcnQvVGFyZ2V0U2VsZWN0Lmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBsbHZtOwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNl
IHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVG9UeXBlLCB0eXBlbmFtZSBGcm9tVHlwZT4KK2lubGlu
ZSBUb1R5cGUgYml0d2lzZV9jYXN0KEZyb21UeXBlIGZyb20pCit7CisgICAgc3RhdGljX2Fzc2Vy
dChzaXplb2YoRnJvbVR5cGUpID09IHNpemVvZihUb1R5cGUpLCAiYml0d2lzZV9jYXN0IHNpemUg
b2YgRnJvbVR5cGUgYW5kIFRvVHlwZSBtdXN0IGJlIGVxdWFsISIpOworICAgIHVuaW9uIHsKKyAg
ICAgICAgRnJvbVR5cGUgZnJvbTsKKyAgICAgICAgVG9UeXBlIHRvOworICAgIH0gdTsKKyAgICB1
LmZyb20gPSBmcm9tOworICAgIHJldHVybiB1LnRvOworfQorCitkb3VibGUgbW9ub3RvbmljYWxs
eUluY3JlYXNpbmdUaW1lTVMoKQoreworICAgIHJldHVybiBjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8
Y2hyb25vOjptaWNyb3NlY29uZHM+KAorICAgICAgICBjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93
KCkudGltZV9zaW5jZV9lcG9jaCgpKS5jb3VudCgpIC8gMTAwMC47Cit9CisKK3ZvaWQgcnVuKHVu
c2lnbmVkIG51bVZhcnMsIHVuc2lnbmVkIG51bUNvbnN0cnVjdHMpCit7CisgICAgTExWTUNvbnRl
eHQgY29udGV4dDsKKyAgICBUeXBlKiBpbnQzMlR5ID0gVHlwZTo6Z2V0SW50MzJUeShjb250ZXh0
KTsKKyAgICBNb2R1bGUqIG1vZHVsZSA9IG5ldyBNb2R1bGUoImNvbXBsZXhNb2R1bGUiLCBjb250
ZXh0KTsKKyAgICBGdW5jdGlvbiogZnVuY3Rpb24gPSBGdW5jdGlvbjo6Q3JlYXRlKAorICAgICAg
ICBGdW5jdGlvblR5cGU6OmdldChpbnQzMlR5LCBmYWxzZSksIEdsb2JhbFZhbHVlOjpFeHRlcm5h
bExpbmthZ2UsICJjb21wbGV4RnVuY3Rpb24iLCBtb2R1bGUpOworCisgICAgdmVjdG9yPGludDMy
X3Q+IHZhclNsb3RzOworICAgIGZvciAodW5zaWduZWQgaSA9IG51bVZhcnM7IGktLTspCisgICAg
ICAgIHZhclNsb3RzLnB1c2hfYmFjayhpKTsKKworICAgIEJhc2ljQmxvY2sqIGN1cnJlbnQgPSBC
YXNpY0Jsb2NrOjpDcmVhdGUoY29udGV4dCwgIiIsIGZ1bmN0aW9uKTsKKyAgICB1bmlxdWVfcHRy
PElSQnVpbGRlcjw+PiBidWlsZGVyID0gbWFrZV91bmlxdWU8SVJCdWlsZGVyPD4+KGN1cnJlbnQp
OworCisgICAgdmVjdG9yPFZhbHVlKj4gdmFyczsKKyAgICBmb3IgKGludDMyX3QmIHZhclNsb3Qg
OiB2YXJTbG90cykgeworICAgICAgICBWYWx1ZSogcHRyID0gYnVpbGRlci0+Q3JlYXRlSW50VG9Q
dHIoYnVpbGRlci0+Z2V0SW50NjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdmFyU2xvdCkpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMlR5LT5nZXRQ
b2ludGVyVG8oKSk7CisgICAgICAgIHZhcnMucHVzaF9iYWNrKGJ1aWxkZXItPkNyZWF0ZUxvYWQo
cHRyKSk7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUNvbnN0cnVj
dHM7ICsraSkgeworICAgICAgICBpZiAoaSAmIDEpIHsKKyAgICAgICAgICAgIC8vIENvbnRyb2wg
ZmxvdyBkaWFtb25kLgorICAgICAgICAgICAgdW5zaWduZWQgcHJlZGljYXRlVmFySW5kZXggPSAo
aSA+PiAxKSAlIG51bVZhcnM7CisgICAgICAgICAgICB1bnNpZ25lZCB0aGVuSW5jVmFySW5kZXgg
PSAoKGkgPj4gMSkgKyAxKSAlIG51bVZhcnM7CisgICAgICAgICAgICB1bnNpZ25lZCBlbHNlSW5j
VmFySW5kZXggPSAoKGkgPj4gMSkgKyAyKSAlIG51bVZhcnM7CisKKyAgICAgICAgICAgIEJhc2lj
QmxvY2sqIHRoZW5CbG9jayA9IEJhc2ljQmxvY2s6OkNyZWF0ZShjb250ZXh0LCAiIiwgZnVuY3Rp
b24pOworICAgICAgICAgICAgQmFzaWNCbG9jayogZWxzZUJsb2NrID0gQmFzaWNCbG9jazo6Q3Jl
YXRlKGNvbnRleHQsICIiLCBmdW5jdGlvbik7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBjb250
aW51YXRpb24gPSBCYXNpY0Jsb2NrOjpDcmVhdGUoY29udGV4dCwgIiIsIGZ1bmN0aW9uKTsKKwor
ICAgICAgICAgICAgYnVpbGRlci0+Q3JlYXRlQ29uZEJyKAorICAgICAgICAgICAgICAgIGJ1aWxk
ZXItPkNyZWF0ZUlDbXBORSh2YXJzW3ByZWRpY2F0ZVZhckluZGV4XSwgYnVpbGRlci0+Z2V0SW50
MzIoMCkpLAorICAgICAgICAgICAgICAgIHRoZW5CbG9jaywgZWxzZUJsb2NrKTsKKworICAgICAg
ICAgICAgYnVpbGRlciA9IG1ha2VfdW5pcXVlPElSQnVpbGRlcjw+Pih0aGVuQmxvY2spOworICAg
ICAgICAgICAgVmFsdWUqIHRoZW5WYWx1ZSA9IGJ1aWxkZXItPkNyZWF0ZUFkZCh2YXJzW3RoZW5J
bmNWYXJJbmRleF0sIGJ1aWxkZXItPmdldEludDMyKDEpKTsKKyAgICAgICAgICAgIGJ1aWxkZXIt
PkNyZWF0ZUJyKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIGJ1aWxkZXIgPSBtYWtlX3Vu
aXF1ZTxJUkJ1aWxkZXI8Pj4oZWxzZUJsb2NrKTsKKyAgICAgICAgICAgIFZhbHVlKiBlbHNlVmFs
dWUgPSBidWlsZGVyLT5DcmVhdGVBZGQodmFyc1tlbHNlSW5jVmFySW5kZXhdLCBidWlsZGVyLT5n
ZXRJbnQzMigxKSk7CisgICAgICAgICAgICBidWlsZGVyLT5DcmVhdGVCcihjb250aW51YXRpb24p
OworCisgICAgICAgICAgICBidWlsZGVyID0gbWFrZV91bmlxdWU8SVJCdWlsZGVyPD4+KGN1cnJl
bnQgPSBjb250aW51YXRpb24pOworICAgICAgICAgICAgUEhJTm9kZSogdGhlblBoaSA9IGJ1aWxk
ZXItPkNyZWF0ZVBISShpbnQzMlR5LCAyKTsKKyAgICAgICAgICAgIHRoZW5QaGktPmFkZEluY29t
aW5nKHRoZW5WYWx1ZSwgdGhlbkJsb2NrKTsKKyAgICAgICAgICAgIHRoZW5QaGktPmFkZEluY29t
aW5nKHZhcnNbdGhlbkluY1ZhckluZGV4XSwgZWxzZUJsb2NrKTsKKyAgICAgICAgICAgIFBISU5v
ZGUqIGVsc2VQaGkgPSBidWlsZGVyLT5DcmVhdGVQSEkoaW50MzJUeSwgMik7CisgICAgICAgICAg
ICBlbHNlUGhpLT5hZGRJbmNvbWluZyhlbHNlVmFsdWUsIGVsc2VCbG9jayk7CisgICAgICAgICAg
ICBlbHNlUGhpLT5hZGRJbmNvbWluZyh2YXJzW2Vsc2VJbmNWYXJJbmRleF0sIHRoZW5CbG9jayk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHZhcnNbdGhlbkluY1ZhckluZGV4XSA9IHRoZW5Q
aGk7CisgICAgICAgICAgICB2YXJzW2Vsc2VJbmNWYXJJbmRleF0gPSBlbHNlUGhpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgLy8gTG9vcC4KKworICAgICAgICAgICAgQmFzaWNCbG9j
ayogbG9vcEJvZHkgPSBCYXNpY0Jsb2NrOjpDcmVhdGUoY29udGV4dCwgIiIsIGZ1bmN0aW9uKTsK
KyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IEJhc2ljQmxvY2s6OkNyZWF0
ZShjb250ZXh0LCAiIiwgZnVuY3Rpb24pOworCisgICAgICAgICAgICBWYWx1ZSogc3RhcnRJbmRl
eCA9IHZhcnNbKGkgPj4gMSkgJSBudW1WYXJzXTsKKyAgICAgICAgICAgIFZhbHVlKiBzdGFydFN1
bSA9IGJ1aWxkZXItPmdldEludDMyKDApOworICAgICAgICAgICAgYnVpbGRlci0+Q3JlYXRlQ29u
ZEJyKAorICAgICAgICAgICAgICAgIGJ1aWxkZXItPkNyZWF0ZUlDbXBORShzdGFydEluZGV4LCBi
dWlsZGVyLT5nZXRJbnQzMigwKSksCisgICAgICAgICAgICAgICAgbG9vcEJvZHksIGNvbnRpbnVh
dGlvbik7CisKKyAgICAgICAgICAgIGJ1aWxkZXIgPSBtYWtlX3VuaXF1ZTxJUkJ1aWxkZXI8Pj4o
bG9vcEJvZHkpOworICAgICAgICAgICAgUEhJTm9kZSogYm9keUluZGV4ID0gYnVpbGRlci0+Q3Jl
YXRlUEhJKGludDMyVHksIDIpOworICAgICAgICAgICAgUEhJTm9kZSogYm9keVN1bSA9IGJ1aWxk
ZXItPkNyZWF0ZVBISShpbnQzMlR5LCAyKTsKKyAgICAgICAgICAgIGJvZHlJbmRleC0+YWRkSW5j
b21pbmcoc3RhcnRJbmRleCwgY3VycmVudCk7CisgICAgICAgICAgICBib2R5U3VtLT5hZGRJbmNv
bWluZyhzdGFydFN1bSwgY3VycmVudCk7CisKKyAgICAgICAgICAgIFZhbHVlKiBuZXdCb2R5SW5k
ZXggPSBidWlsZGVyLT5DcmVhdGVTdWIoYm9keUluZGV4LCBidWlsZGVyLT5nZXRJbnQzMigxKSk7
CisgICAgICAgICAgICBWYWx1ZSogbmV3Qm9keVN1bSA9IGJ1aWxkZXItPkNyZWF0ZUFkZCgKKyAg
ICAgICAgICAgICAgICBib2R5U3VtLAorICAgICAgICAgICAgICAgIGJ1aWxkZXItPkNyZWF0ZUxv
YWQoCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXItPkNyZWF0ZUludFRvUHRyKAorICAgICAg
ICAgICAgICAgICAgICAgICAgYnVpbGRlci0+Q3JlYXRlQWRkKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJ1aWxkZXItPmdldEludDY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnZhclNs
b3RzWzBdKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRlci0+Q3JlYXRlU2hs
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGVyLT5DcmVhdGVaRXh0KAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRlci0+Q3JlYXRlQW5kKAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0JvZHlJbmRleCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGVyLT5nZXRJbnQzMihu
dW1WYXJzIC0gMSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZTo6
Z2V0SW50NjRUeShjb250ZXh0KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1
aWxkZXItPmdldEludDY0KDIpKSksCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMlR5LT5n
ZXRQb2ludGVyVG8oKSkpKTsKKyAgICAgICAgICAgIGJvZHlJbmRleC0+YWRkSW5jb21pbmcobmV3
Qm9keUluZGV4LCBsb29wQm9keSk7CisgICAgICAgICAgICBib2R5U3VtLT5hZGRJbmNvbWluZyhu
ZXdCb2R5U3VtLCBsb29wQm9keSk7CisgICAgICAgICAgICBidWlsZGVyLT5DcmVhdGVDb25kQnIo
CisgICAgICAgICAgICAgICAgYnVpbGRlci0+Q3JlYXRlSUNtcE5FKG5ld0JvZHlJbmRleCwgYnVp
bGRlci0+Z2V0SW50MzIoMCkpLAorICAgICAgICAgICAgICAgIGxvb3BCb2R5LCBjb250aW51YXRp
b24pOworCisgICAgICAgICAgICBidWlsZGVyID0gbWFrZV91bmlxdWU8SVJCdWlsZGVyPD4+KGNv
bnRpbnVhdGlvbik7CisgICAgICAgICAgICBQSElOb2RlKiBmaW5hbFN1bSA9IGJ1aWxkZXItPkNy
ZWF0ZVBISShpbnQzMlR5LCAyKTsKKyAgICAgICAgICAgIGZpbmFsU3VtLT5hZGRJbmNvbWluZyhz
dGFydFN1bSwgY3VycmVudCk7CisgICAgICAgICAgICBmaW5hbFN1bS0+YWRkSW5jb21pbmcobmV3
Qm9keVN1bSwgbG9vcEJvZHkpOworICAgICAgICAgICAgY3VycmVudCA9IGNvbnRpbnVhdGlvbjsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGJ1aWxkZXItPkNyZWF0ZVJldCh2YXJzWzBdKTsKKyAg
ICBidWlsZGVyID0gbnVsbHB0cjsKKworICAgIHVuaXF1ZV9wdHI8RXhlY3V0aW9uRW5naW5lPiBF
RTsKKyAgICB7CisgICAgICAgIHN0ZDo6c3RyaW5nIGVycm9yTWVzc2FnZTsKKyAgICAgICAgRW5n
aW5lQnVpbGRlciBidWlsZGVyKChzdGQ6OnVuaXF1ZV9wdHI8TW9kdWxlPihtb2R1bGUpKSk7Cisg
ICAgICAgIGJ1aWxkZXIuc2V0TUFyY2goIiIpOworICAgICAgICBidWlsZGVyLnNldE1DUFUoc3lz
OjpnZXRIb3N0Q1BVTmFtZSgpKTsKKyAgICAgICAgYnVpbGRlci5zZXRNQXR0cnMoc3RkOjp2ZWN0
b3I8c3RkOjpzdHJpbmc+KCkpOworICAgICAgICBidWlsZGVyLnNldFJlbG9jYXRpb25Nb2RlbChS
ZWxvYzo6RGVmYXVsdCk7CisgICAgICAgIGJ1aWxkZXIuc2V0Q29kZU1vZGVsKENvZGVNb2RlbDo6
SklURGVmYXVsdCk7CisgICAgICAgIGJ1aWxkZXIuc2V0RXJyb3JTdHIoJmVycm9yTWVzc2FnZSk7
CisgICAgICAgIGJ1aWxkZXIuc2V0RW5naW5lS2luZChFbmdpbmVLaW5kOjpKSVQpOworCisgICAg
ICAgIGJ1aWxkZXIuc2V0T3B0TGV2ZWwoQ29kZUdlbk9wdDo6RGVmYXVsdCk7CisgICAgICAgIAor
ICAgICAgICB7CisgICAgICAgICAgICBUYXJnZXRPcHRpb25zIE9wdGlvbnM7CisgICAgICAgICAg
ICBPcHRpb25zLkZsb2F0QUJJVHlwZSA9IEZsb2F0QUJJOjpEZWZhdWx0OworCisgICAgICAgICAg
ICBidWlsZGVyLnNldFRhcmdldE9wdGlvbnMoT3B0aW9ucyk7CisgICAgICAgIH0KKworICAgICAg
ICBFRSA9IHVuaXF1ZV9wdHI8RXhlY3V0aW9uRW5naW5lPihidWlsZGVyLmNyZWF0ZSgpKTsKKyAg
ICB9CisgICAgCisgICAgbGVnYWN5OjpQYXNzTWFuYWdlciBwYXNzTWFuYWdlcjsKKyAgICAvL3Bh
c3NNYW5hZ2VyLmFkZChuZXcgRGF0YUxheW91dCgqRUUtPmdldERhdGFMYXlvdXQoKSkpOworICAg
IHBhc3NNYW5hZ2VyLmFkZChjcmVhdGVQcm9tb3RlTWVtb3J5VG9SZWdpc3RlclBhc3MoKSk7Cisg
ICAgcGFzc01hbmFnZXIuYWRkKGNyZWF0ZUNvbnN0YW50UHJvcGFnYXRpb25QYXNzKCkpOworICAg
IHBhc3NNYW5hZ2VyLmFkZChjcmVhdGVJbnN0cnVjdGlvbkNvbWJpbmluZ1Bhc3MoKSk7CisgICAg
cGFzc01hbmFnZXIuYWRkKGNyZWF0ZUJhc2ljQWxpYXNBbmFseXNpc1Bhc3MoKSk7CisgICAgcGFz
c01hbmFnZXIuYWRkKGNyZWF0ZVR5cGVCYXNlZEFsaWFzQW5hbHlzaXNQYXNzKCkpOworICAgIHBh
c3NNYW5hZ2VyLmFkZChjcmVhdGVHVk5QYXNzKCkpOworICAgIHBhc3NNYW5hZ2VyLmFkZChjcmVh
dGVDRkdTaW1wbGlmaWNhdGlvblBhc3MoKSk7CisgICAgcGFzc01hbmFnZXIucnVuKCptb2R1bGUp
OworCisgICAgRUUtPmdldEZ1bmN0aW9uQWRkcmVzcyhmdW5jdGlvbi0+Z2V0TmFtZSgpKTsKK30K
KworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK2ludCBtYWluKGludCBjLCBjaGFyKiogdikK
K3sKKyAgICBJbml0aWFsaXplQWxsVGFyZ2V0cygpOworICAgIEluaXRpYWxpemVBbGxUYXJnZXRN
Q3MoKTsKKyAgICBJbml0aWFsaXplQWxsQXNtUHJpbnRlcnMoKTsKKyAgICBJbml0aWFsaXplQWxs
QXNtUGFyc2VycygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPD0gMzsgKytpKSB7Cisg
ICAgICAgIHByaW50ZigiRG9pbmc6IHJ1big2NCwgJXUpXG4iLCBpICogMTI4KTsKKyAgICAgICAg
ZG91YmxlIGJlZm9yZSA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZU1TKCk7CisgICAgICAg
IHJ1big2NCwgMTI4ICogaSk7CisgICAgICAgIGRvdWJsZSBhZnRlciA9IG1vbm90b25pY2FsbHlJ
bmNyZWFzaW5nVGltZU1TKCk7CisgICAgICAgIHByaW50ZigiVGhhdCB0b29rICVsZiBtcy5cbiIs
IGFmdGVyIC0gYmVmb3JlKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264491</attachid>
            <date>2015-10-31 16:30:10 -0700</date>
            <delta_ts>2015-11-01 12:57:25 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>54114</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkxODQ3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkxIEBA
CisyMDE1LTEwLTMxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QjM6OnJlZHVjZVN0cmVuZ3RoJ3MgRENFIHNob3VsZCBiZSBtb3JlIGFncm8gYW5kIGxlc3Mgd3Jv
bmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDc0
OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpcnN0
IG9mIGFsbCwgb3VyIERDRSBoYWQgYSBidWcgd2hlcmUgaXQgd291bGQga2VlcCBVcHNpbG9ucyBh
ZnRlciBpdCBkZWxldGVkIHRoZSBQaGlzIHRoYXQKKyAgICAgICAgdGhleSByZWZlcmVuY2VkLiBC
dXQgb3VyIEIzIERDRSB3YXMgYWxzbyBub3QgYWdncmVzc2l2ZSBlbm91Z2guIEl0IHdvdWxkIG5v
dCBlbGltaW5hdGUKKyAgICAgICAgY3ljbGVzLiBJdCB3YXMgYWxzbyBwcm9iYWJseSBzbG93ZXIg
dGhhbiBpdCBuZWVkZWQgdG8gYmUsIHNpbmNlIGl0IHdvdWxkIGVsaW1pbmF0ZSBhbGwKKyAgICAg
ICAgbmV2ZXItcmVmZXJlbmNlZCB0aGluZ3Mgb24gZWFjaCBmaXhwb2ludC4KKworICAgICAgICBU
aGlzIGFkZHMgYSBwcmVzdW1lLWV2ZXJ5b25lLWlzLWRlYWQtYW5kLWZpbmQtbGl2ZS10aGluZ3Mg
c3R5bGUgRENFLiBUaGlzIGlzIHZlcnkgbmF0dXJhbCB0bworICAgICAgICB3cml0ZSwgZXhjZXB0
IGZvciBVcHNpbG9ucy4gRm9yIGV2ZXJ5dGhpbmcgYnV0IFVwc2lsb25zLCBpdCdzIGp1c3QgYSB3
b3JrbGlzdCBhbGdvcml0aG0uIEZvcgorICAgICAgICBVcHNpbG9ucywgaXQncyBhIGZpeHBvaW50
LiBJdCB3b3JrcyBmaW5lIGluIHRoZSBlbmQuCisKKyAgICAgICAgSSBrZXB0IGZpbmRpbmcgYnVn
cyBpbiB0aGlzIGFsZ29yaXRobSB3aGVuIEkgdGVzdGVkIGl0IGFnYWluc3QgbXkgIkNvbXBsZXgi
IHRlc3QgdGhhdCBJIHdhcworICAgICAgICB3cml0aW5nIGFzIGEgY29tcGlsZSB0aW1lIGJlbmNo
bWFyay4gU28sIEkgaW5jbHVkZSB0aGF0IHRlc3QgaW4gdGhpcyBjaGFuZ2UuIEkgYWxzbyBpbmNs
dWRlCisgICAgICAgIHRoZSBzbWFsbCBsb3dlcmluZyBleHRlbnNpb25zIHRoYXQgaXQgbmVlZGVk
IC0gc2hpZnRpbmcgYW5kIHplcm8gZXh0ZW5kaW5nLgorCisgICAgICAgIFRoaXMgY2hhbmdlIGFs
c28gYWRkcyBhbiBMTFZNIHZlcnNpb24gb2YgdGhlIENvbXBsZXggdGVzdC4gVGhvdWdoIHRoZSBM
TFZNIHZlcnNpb24gZmVlbHMKKyAgICAgICAgbW9yZSBuYXR1cmFsIHRvIHdyaXRlIGJlY2F1c2Ug
TExWTSBoYXMgdHJhZGl0aW9uYWwgUGhpJ3MgcmF0aGVyIHRoYW4gb3VyIHF1aXJreSBQaGkncywg
aW4KKyAgICAgICAgdGhlIGVuZCBMTFZNIGVuZHMgdXAgcGVyZm9ybWluZyB2ZXJ5IGJhZGx5IC0g
MTB4IHRvIDIweCB3b3JzZSB0aGFuIEIzLiBTb21lIG9mIHRoYXQgZ2FwIHdpbGwKKyAgICAgICAg
Y2xvc2Ugb25jZSB3ZSBnaXZlIEIzIGEgcmVnaXN0ZXIgYWxsb2NhdG9yLCBidXQgc3RpbGwsIHRo
YXQncyBwcmV0dHkgZ29vZCBuZXdzIGZvciBvdXIgQjMKKyAgICAgICAgc3RyYXRlZ3kuCisKKyAg
ICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlclg4Nl82NDo6bHNoaWZ0NjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
clg4Nl82NDo6cnNoaWZ0NjQpOgorICAgICAgICAqIGFzc2VtYmxlci9YODZBc3NlbWJsZXIuaDoK
KyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpzaGxxX2k4cik6CisgICAgICAgIChKU0M6Olg4
NkFzc2VtYmxlcjo6c2hscV9DTHIpOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OmltdWxs
X3JyKToKKyAgICAgICAgKiBiMy9CM0Jhc2ljQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpCMzo6
QmFzaWNCbG9jazo6cmVwbGFjZVByZWRlY2Vzc29yKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2lj
QmxvY2s6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6cmVtb3ZlTm9wcyk6
IERlbGV0ZWQuCisgICAgICAgICogYjMvQjNCYXNpY0Jsb2NrLmg6CisgICAgICAgIChKU0M6OkIz
OjpCYXNpY0Jsb2NrOjpmcmVxdWVuY3kpOgorICAgICAgICAqIGIzL0IzQ29tbW9uLmNwcDoKKyAg
ICAgICAgKEpTQzo6QjM6OnNob3VsZFNhdmVJUkJlZm9yZVBoYXNlKToKKyAgICAgICAgKEpTQzo6
QjM6OnNob3VsZE1lYXN1cmVQaGFzZVRpbWluZyk6CisgICAgICAgICogYjMvQjNDb21tb24uaDoK
KyAgICAgICAgKEpTQzo6QjM6OmlzUmVwcmVzZW50YWJsZUFzSW1wbCk6CisgICAgICAgICogYjMv
QjNHZW5lcmF0ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpnZW5lcmF0ZSk6CisgICAgICAgIChK
U0M6OkIzOjpnZW5lcmF0ZVRvQWlyKToKKyAgICAgICAgKiBiMy9CM0xvd2VyVG9BaXIuY3BwOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlBbmQpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlTaGwpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpM
b3dlclRvQWlyOjp0cnlTdG9yZUFkZExvYWQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dl
clRvQWlyOjp0cnlUcnVuYyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRy
eVpFeHQzMik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRyeUFyZ3VtZW50
UmVnKToKKyAgICAgICAgKiBiMy9CM0xvd2VyaW5nTWF0Y2hlci5wYXR0ZXJuczoKKyAgICAgICAg
KiBiMy9CM1BoYXNlU2NvcGUuY3BwOgorICAgICAgICAoSlNDOjpCMzo6UGhhc2VTY29wZTo6UGhh
c2VTY29wZSk6CisgICAgICAgICogYjMvQjNQaGFzZVNjb3BlLmg6CisgICAgICAgICogYjMvQjNS
ZWR1Y2VTdHJlbmd0aC5jcHA6CisgICAgICAgICogYjMvQjNUaW1pbmdTY29wZS5jcHA6IEFkZGVk
LgorICAgICAgICAoSlNDOjpCMzo6VGltaW5nU2NvcGU6OlRpbWluZ1Njb3BlKToKKyAgICAgICAg
KEpTQzo6QjM6OlRpbWluZ1Njb3BlOjp+VGltaW5nU2NvcGUpOgorICAgICAgICAqIGIzL0IzVGlt
aW5nU2NvcGUuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNWYWxpZGF0ZS5jcHA6CisgICAgICAg
ICogYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjph
bGxvY2F0ZVN0YWNrKToKKyAgICAgICAgKiBiMy9haXIvQWlyR2VuZXJhdGUuY3BwOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpnZW5lcmF0ZSk6CisgICAgICAgICogYjMvYWlyL0Fpckluc3RJbmxp
bmVzLmg6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkZvckVhY2g8QXJnPjo6Zm9yRWFjaCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6OmZvckVhY2gpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjppc0xzaGlmdDMyVmFsaWQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjppc0xzaGlmdDY0
VmFsaWQpOgorICAgICAgICAqIGIzL2Fpci9BaXJMaXZlbmVzcy5oOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpMaXZlbmVzczo6aXNBbGl2ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkxpdmVu
ZXNzOjpMaXZlbmVzcyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkxpdmVuZXNzOjpMb2NhbENh
bGM6OmV4ZWN1dGUpOgorICAgICAgICAqIGIzL2Fpci9BaXJPcGNvZGUub3Bjb2RlczoKKyAgICAg
ICAgKiBiMy9haXIvQWlyUGhhc2VTY29wZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlBo
YXNlU2NvcGU6OlBoYXNlU2NvcGUpOgorICAgICAgICAqIGIzL2Fpci9BaXJQaGFzZVNjb3BlLmg6
CisgICAgICAgICogYjMvdGVzdGIzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RCcmFuY2hF
cXVhbEZvbGRQdHIpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdENvbXBsZXgpOgorICAgICAgICAo
SlNDOjpCMzo6cnVuKToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKwogMjAxNS0xMC0z
MCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIEFpciBzaG91bGQg
ZWxpbWluYXRlIGRlYWQgY29kZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDE5MTg0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMTUsNiArMzE1LDgg
QEAKIAkJMEY0NTcwMzkxQkU0NEM5MTAwNjJBNjI5IC8qIEFpckVsaW1pbmF0ZURlYWRDb2RlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ1NzAzNzFC
RTQ0QzkxMDA2MkE2MjkgLyogQWlyRWxpbWluYXRlRGVhZENvZGUuaCAqLzsgfTsKIAkJMEY0NTcw
M0MxQkU0NUYwQTAwNjJBNjI5IC8qIEFpclJlcG9ydFVzZWRSZWdpc3RlcnMuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NTcwM0ExQkU0NUYwQTAw
NjJBNjI5IC8qIEFpclJlcG9ydFVzZWRSZWdpc3RlcnMuY3BwICovOyB9OwogCQkwRjQ1NzAzRDFC
RTQ1RjBBMDA2MkE2MjkgLyogQWlyUmVwb3J0VXNlZFJlZ2lzdGVycy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NTcwM0IxQkU0NUYwQTAwNjJBNjI5
IC8qIEFpclJlcG9ydFVzZWRSZWdpc3RlcnMuaCAqLzsgfTsKKwkJMEY0NTcwNDAxQkU1ODRDQTAw
NjJBNjI5IC8qIEIzVGltaW5nU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY0NTcwM0UxQkU1ODRDQTAwNjJBNjI5IC8qIEIzVGltaW5nU2Nv
cGUuY3BwICovOyB9OworCQkwRjQ1NzA0MTFCRTU4NENBMDA2MkE2MjkgLyogQjNUaW1pbmdTY29w
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NTcw
M0YxQkU1ODRDQTAwNjJBNjI5IC8qIEIzVGltaW5nU2NvcGUuaCAqLzsgfTsKIAkJMEY0NjgwODIx
NEJBNTcyRDAwQkZFMjcyIC8qIEpJVEV4Y2VwdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDY4MDgwMTRCQTU3MjcwMEJGRTI3MiAvKiBKSVRF
eGNlcHRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEY0NjgwODMxNEJBNTczMTAwQkZFMjcyIC8qIEpJVEV4Y2VwdGlvbnMuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NjgwN0YxNEJBNTcy
NzAwQkZFMjcyIC8qIEpJVEV4Y2VwdGlvbnMuY3BwICovOyB9OwogCQkwRjQ2ODBBMzE0QkE3RjhE
MDBCRkUyNzIgLyogTExJbnRFeGNlcHRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2ODA5RTE0QkE3RjgyMDBCRkUyNzIgLyogTExJbnRFeGNl
cHRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTIzMzMsNiArMjMzNSw4IEBACiAJCTBGNDU3MDM3MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJF
bGltaW5hdGVEZWFkQ29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJF
bGltaW5hdGVEZWFkQ29kZS5oOyBwYXRoID0gYjMvYWlyL0FpckVsaW1pbmF0ZURlYWRDb2RlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDU3MDNBMUJFNDVGMEEwMDYyQTYyOSAv
KiBBaXJSZXBvcnRVc2VkUmVnaXN0ZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEFpclJlcG9ydFVzZWRSZWdpc3RlcnMuY3BwOyBwYXRoID0gYjMvYWlyL0FpclJl
cG9ydFVzZWRSZWdpc3RlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ1
NzAzQjFCRTQ1RjBBMDA2MkE2MjkgLyogQWlyUmVwb3J0VXNlZFJlZ2lzdGVycy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJSZXBvcnRVc2VkUmVnaXN0ZXJzLmg7IHBhdGgg
PSBiMy9haXIvQWlyUmVwb3J0VXNlZFJlZ2lzdGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjQ1NzAzRTFCRTU4NENBMDA2MkE2MjkgLyogQjNUaW1pbmdTY29wZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1RpbWluZ1Njb3BlLmNwcDsgcGF0
aCA9IGIzL0IzVGltaW5nU2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjQ1NzAzRjFCRTU4NENBMDA2MkE2MjkgLyogQjNUaW1pbmdTY29wZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBCM1RpbWluZ1Njb3BlLmg7IHBhdGggPSBiMy9CM1RpbWluZ1Nj
b3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDY4MDdGMTRCQTU3MjcwMEJG
RTI3MiAvKiBKSVRFeGNlcHRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpJVEV4Y2VwdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjQ2ODA4MDE0QkE1NzI3MDBCRkUyNzIgLyogSklURXhjZXB0aW9ucy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKSVRFeGNlcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNDY4MDlEMTRCQTdGODIwMEJGRTI3MiAvKiBMTEludEV4Y2VwdGlvbnMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTExJbnRFeGNlcHRpb25zLmNw
cDsgcGF0aCA9IGxsaW50L0xMSW50RXhjZXB0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC00NDU1LDYgKzQ0NTksOCBAQAogCQkJCTBGRUM4NEVFMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1N3aXRjaENhc2UuaCAqLywKIAkJCQkwRkVDODRFRjFCREFDREFDMDA4MEZGNzQgLyog
QjNTd2l0Y2hWYWx1ZS5jcHAgKi8sCiAJCQkJMEZFQzg0RjAxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
U3dpdGNoVmFsdWUuaCAqLywKKwkJCQkwRjQ1NzAzRTFCRTU4NENBMDA2MkE2MjkgLyogQjNUaW1p
bmdTY29wZS5jcHAgKi8sCisJCQkJMEY0NTcwM0YxQkU1ODRDQTAwNjJBNjI5IC8qIEIzVGltaW5n
U2NvcGUuaCAqLywKIAkJCQkwRkVDODRGMTFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmNwcCAq
LywKIAkJCQkwRkVDODRGMjFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmggKi8sCiAJCQkJMEZF
Qzg0RjMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXBzaWxvblZhbHVlLmNwcCAqLywKQEAgLTY2MDgs
NiArNjYxNCw3IEBACiAJCQkJQTdFNUEzQTgxNzk3NDMyRDAwRTg5M0MwIC8qIENvbXBpbGF0aW9u
UmVzdWx0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNGNDBFMTZGNUNEMDBCMzQ0NjAgLyog
Q29tcGxldGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk2QjczMUQxQkRBMDhFRjAwMzMxQjg0
IC8qIEpTR2xvYmFsT2JqZWN0Lmx1dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0NTcwNDExQkU1
ODRDQTAwNjJBNjI5IC8qIEIzVGltaW5nU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NkI3
MzFGMUJEQTA4RUYwMDMzMUI4NCAvKiBKU1Byb21pc2VQcm90b3R5cGUubHV0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjZGQzc1MTE5NjExMEE4MDBFMUQwMkQgLyogQ29tcGxleEdldFN0YXR1cy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQjJDRUExNzQ4OTZDNzAwN0IzQzFCIC8qIENvbmN1cnJl
bnRKSVRMb2NrLmggaW4gSGVhZGVycyAqLywKQEAgLTg1NzUsNiArODU4Miw3IEBACiAJCQkJN0Mx
ODRFMUExN0JFREJEMzAwN0NCNjNBIC8qIEpTUHJvbWlzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk3QzE4NEUyMjE3QkVFMjQwMDA3Q0I2M0EgLyogSlNQcm9taXNlQ29uc3RydWN0b3IuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJN0MwMDhDREExODcxMjRCQjAwOTU1QzI0IC8qIEpTUHJvbWlzZURl
ZmVycmVkLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNDU3MDQwMUJFNTg0Q0EwMDYyQTYyOSAv
KiBCM1RpbWluZ1Njb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDMTg0RTFFMTdCRUUyMkUw
MDdDQjYzQSAvKiBKU1Byb21pc2VQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkEw
NUFCRDUxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlFM0VGODg3NDFCNjZERjIzMDAzRjI2Q0IgLyogSlNQcm9wZXJ0eU5h
bWVJdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHJldmlzaW9u
IDE5MTg0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJYODZfNjQuaAkod29ya2luZyBjb3B5KQpAQCAtMzI5LDYgKzMyOSwyMCBAQCBwdWJsaWM6CiAg
ICAgICAgIG1fYXNzZW1ibGVyLnNobHFfaThyKGltbS5tX3ZhbHVlLCBkZXN0KTsKICAgICB9CiAg
ICAgCisgICAgdm9pZCBsc2hpZnQ2NChSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKHNyYyAhPSBkZXN0KTsKKyAgICAgICAgCisgICAgICAgIGlm
IChzcmMgPT0gWDg2UmVnaXN0ZXJzOjplY3gpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zaGxx
X0NMcihkZXN0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBDYW4gb25seSBzaGlm
dCBieSBlY3gsIHNvIHdlIGRvIHNvbWUgc3dhcHBpbmcgb2Ygd2Ugc2VlIGFueXRoaW5nIGVsc2Uu
CisgICAgICAgICAgICBzd2FwKHNyYywgWDg2UmVnaXN0ZXJzOjplY3gpOworICAgICAgICAgICAg
bV9hc3NlbWJsZXIuc2hscV9DTHIoZGVzdCk7CisgICAgICAgICAgICBzd2FwKHNyYywgWDg2UmVn
aXN0ZXJzOjplY3gpOworICAgICAgICB9CisgICAgfQorICAgIAogICAgIHZvaWQgcnNoaWZ0NjQo
VHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3Nl
bWJsZXIuc2FycV9pOHIoaW1tLm1fdmFsdWUsIGRlc3QpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCShyZXZpc2lvbiAxOTE4NDYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC05MTAsNiArOTEwLDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fZm9ybWF0
dGVyLmltbWVkaWF0ZTgoaW1tKTsKICAgICAgICAgfQogICAgIH0KKworICAgIHZvaWQgc2hscV9D
THIoUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2
NChPUF9HUk9VUDJfRXZDTCwgR1JPVVAyX09QX1NITCwgZHN0KTsKKyAgICB9CiAjZW5kaWYgLy8g
Q1BVKFg4Nl82NCkKIAogICAgIHZvaWQgaW11bGxfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVy
SUQgZHN0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5jcHAJ
KHJldmlzaW9uIDE5MTg0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxv
Y2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NywyMCArNjcsNiBAQCBib29sIEJhc2ljQmxvY2s6
OnJlcGxhY2VQcmVkZWNlc3NvcihCYXNpCiAgICAgcmV0dXJuIEIzOjpyZXBsYWNlUHJlZGVjZXNz
b3IodGhpcywgZnJvbSwgdG8pOwogfQogCi12b2lkIEJhc2ljQmxvY2s6OnJlbW92ZU5vcHMoUHJv
Y2VkdXJlJiBwcm9jZWR1cmUpCi17Ci0gICAgdW5zaWduZWQgc291cmNlSW5kZXggPSAwOwotICAg
IHVuc2lnbmVkIHRhcmdldEluZGV4ID0gMDsKLSAgICB3aGlsZSAoc291cmNlSW5kZXggPCBzaXpl
KCkpIHsKLSAgICAgICAgVmFsdWUqIHZhbHVlID0gbV92YWx1ZXNbc291cmNlSW5kZXgrK107Ci0g
ICAgICAgIGlmICh2YWx1ZS0+b3Bjb2RlKCkgPT0gTm9wKQotICAgICAgICAgICAgcHJvY2VkdXJl
LmRlbGV0ZVZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV92YWx1ZXNb
dGFyZ2V0SW5kZXgrK10gPSB2YWx1ZTsKLSAgICB9Ci0gICAgbV92YWx1ZXMucmVzaXplKHRhcmdl
dEluZGV4KTsKLX0KLQogdm9pZCBCYXNpY0Jsb2NrOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0CiB7CiAgICAgb3V0LnByaW50KGR1bXBQcmVmaXgsIG1faW5kZXgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suaAkocmV2aXNpb24gMTkxODQ2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC05
NSw4ICs5NSw2IEBAIHB1YmxpYzoKIAogICAgIGRvdWJsZSBmcmVxdWVuY3koKSBjb25zdCB7IHJl
dHVybiBtX2ZyZXF1ZW5jeTsgfQogCi0gICAgdm9pZCByZW1vdmVOb3BzKFByb2NlZHVyZSYpOwot
CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBkZWVwRHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
b21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1v
bi5jcHAJKHJldmlzaW9uIDE5MTg0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nv
bW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDYgKzU5LDExIEBAIGJvb2wgc2hvdWxkU2F2
ZUlSQmVmb3JlUGhhc2UoKQogICAgIHJldHVybiBPcHRpb25zOjp2ZXJib3NlVmFsaWRhdGlvbkZh
aWx1cmUoKTsKIH0KIAorYm9vbCBzaG91bGRNZWFzdXJlUGhhc2VUaW1pbmcoKQoreworICAgIHJl
dHVybiBPcHRpb25zOjptZWFzdXJlUGhhc2VUaW1pbmdzKCk7Cit9CisKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMwogCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbW1vbi5oCShyZXZpc2lvbiAxOTE4NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQCBib29s
IHNob3VsZER1bXBJUkF0RWFjaFBoYXNlKCk7CiBib29sIHNob3VsZFZhbGlkYXRlSVIoKTsKIGJv
b2wgc2hvdWxkVmFsaWRhdGVJUkF0RWFjaFBoYXNlKCk7CiBib29sIHNob3VsZFNhdmVJUkJlZm9y
ZVBoYXNlKCk7Citib29sIHNob3VsZE1lYXN1cmVQaGFzZVRpbWluZygpOwogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBSZXN1bHRUeXBlLCB0eXBlbmFtZSBJbnB1dFR5cGUsIHR5cGVuYW1lIEJpdHNUeXBl
PgogaW5saW5lIGJvb2wgaXNSZXByZXNlbnRhYmxlQXNJbXBsKElucHV0VHlwZSBvcmlnaW5hbFZh
bHVlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkocmV2aXNp
b24gMTkxODQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSwxMiArMzUsMTUgQEAKICNpbmNsdWRlICJCM0xvd2VyVG9BaXIu
aCIKICNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgogI2luY2x1ZGUgIkIzUmVkdWNlU3RyZW5ndGgu
aCIKKyNpbmNsdWRlICJCM1RpbWluZ1Njb3BlLmgiCiAjaW5jbHVkZSAiQjNWYWxpZGF0ZS5oIgog
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAogdm9pZCBnZW5lcmF0ZShQcm9jZWR1
cmUmIHByb2NlZHVyZSwgQ0NhbGxIZWxwZXJzJiBqaXQpCiB7CisgICAgVGltaW5nU2NvcGUgdGlt
aW5nU2NvcGUoImdlbmVyYXRlIik7CisKICAgICBBaXI6OkNvZGUgY29kZTsKICAgICBnZW5lcmF0
ZVRvQWlyKHByb2NlZHVyZSwgY29kZSk7CiAgICAgQWlyOjpnZW5lcmF0ZShjb2RlLCBqaXQpOwpA
QCAtNDgsNiArNTEsOCBAQCB2b2lkIGdlbmVyYXRlKFByb2NlZHVyZSYgcHJvY2VkdXJlLCBDQ2Fs
CiAKIHZvaWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1cmUmIHByb2NlZHVyZSwgQWlyOjpDb2RlJiBj
b2RlKQogeworICAgIFRpbWluZ1Njb3BlIHRpbWluZ1Njb3BlKCJnZW5lcmF0ZVRvQWlyIik7Cisg
ICAgCiAgICAgLy8gV2UgZG9uJ3QgcmVxdWlyZSB0aGUgaW5jb21pbmcgSVIgdG8gaGF2ZSBwcmVk
ZWNlc3NvcnMgY29tcHV0ZWQuCiAgICAgcHJvY2VkdXJlLnJlc2V0UmVhY2hhYmlsaXR5KCk7CiAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2
aXNpb24gMTkxODQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU3Nyw2ICs1NzcsMjIgQEAgcHVibGljOgogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQorCisgICAgYm9vbCB0cnlTaGwoVmFs
dWUqIHZhbHVlLCBWYWx1ZSogYW1vdW50KQorICAgIHsKKyAgICAgICAgQWlyOjpPcGNvZGUgb3Bj
b2RlID0gdmFsdWUtPnR5cGUoKSA9PSBJbnQzMiA/IExzaGlmdDMyIDogTHNoaWZ0NjQ7CisKKyAg
ICAgICAgaWYgKGltbShhbW91bnQpKSB7CisgICAgICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKHZh
bHVlKSwgdG1wKGN1cnJlbnRWYWx1ZSkpOworICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgaW1t
KGFtb3VudCksIHRtcChjdXJyZW50VmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisKKyAgICAgICAgYXBwZW5kKE1vdmUsIHRtcCh2YWx1ZSksIHRtcChjdXJyZW50
VmFsdWUpKTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIHRtcChhbW91bnQpLCBUbXAoWDg2UmVnaXN0
ZXJzOjplY3gpKTsKKyAgICAgICAgYXBwZW5kKG9wY29kZSwgVG1wKFg4NlJlZ2lzdGVyczo6ZWN4
KSwgdG1wKGN1cnJlbnRWYWx1ZSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAgICAg
CiAgICAgYm9vbCB0cnlTdG9yZUFkZExvYWQoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgVmFs
dWUqKQogICAgIHsKQEAgLTY0MCw2ICs2NTYsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKKyAgICBib29sIHRyeVpFeHQzMihWYWx1ZSogdmFsdWUpCisgICAgewor
ICAgICAgICBhcHBlbmQoTW92ZTMyLCB0bXAodmFsdWUpLCB0bXAoY3VycmVudFZhbHVlKSk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAgIGJvb2wgdHJ5QXJndW1lbnRSZWcoKQog
ICAgIHsKICAgICAgICAgcHJvbG9ndWUuYXBwZW5kKEluc3QoCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNMb3dlcmluZ01hdGNoZXIucGF0dGVybnMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRlcm5zCShyZXZpc2lv
biAxOTE4NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlcmluZ01hdGNoZXIu
cGF0dGVybnMJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDggQEAgQWRkID0gQWRkKGxlZnQs
IHJpZ2h0KQogU3ViID0gU3ViKGxlZnQsIHJpZ2h0KQogQW5kID0gQml0QW5kKGxlZnQsIHJpZ2h0
KQogCitTaGwgPSBTaGwodmFsdWUsIGFtb3VudCkKKwogU3RvcmVBZGRMb2FkID0gU3RvcmUoQWRk
KGxlZnQsIHJpZ2h0KSwgYWRkcmVzcykKIFN0b3JlU3ViTG9hZCA9IFN0b3JlKEFkZChsZWZ0LCBy
aWdodCksIGFkZHJlc3MpCiBTdG9yZUFuZExvYWQgPSBTdG9yZShCaXRBbmQobGVmdCwgcmlnaHQp
LCBhZGRyZXNzKQpAQCAtNDIsNiArNDQsOCBAQCBTdG9yZSA9IFN0b3JlKHZhbHVlLCBhZGRyZXNz
KQogVHJ1bmNBcmd1bWVudFJlZyA9IFRydW5jKGFyZ3VtZW50UmVnID0gQXJndW1lbnRSZWcoKSkK
IFRydW5jID0gVHJ1bmModmFsdWUpCiAKK1pFeHQzMiA9IFpFeHQzMih2YWx1ZSkKKwogQXJndW1l
bnRSZWcgPSBBcmd1bWVudFJlZygpCiAKIENvbnN0MzIgPSBDb25zdDMyKCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNlU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNlU2NvcGUuY3BwCShyZXZpc2lvbiAxOTE4NDYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQaGFzZVNjb3BlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzksNiArMzksNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIFBoYXNl
U2NvcGU6OlBoYXNlU2NvcGUoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIGNvbnN0IGNoYXIqIG5hbWUp
CiAgICAgOiBtX3Byb2NlZHVyZShwcm9jZWR1cmUpCiAgICAgLCBtX25hbWUobmFtZSkKKyAgICAs
IG1fdGltaW5nU2NvcGUobmFtZSkKIHsKICAgICBpZiAoc2hvdWxkRHVtcElSQXRFYWNoUGhhc2Uo
KSkgewogICAgICAgICBkYXRhTG9nKCJCMyBhZnRlciAiLCBwcm9jZWR1cmUubGFzdFBoYXNlTmFt
ZSgpLCAiLCBiZWZvcmUgIiwgbmFtZSwgIjpcbiIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzUGhhc2VTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1BoYXNlU2NvcGUuaAkocmV2aXNpb24gMTkxODQ2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzUGhhc2VTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBA
CiAKICNpZiBFTkFCTEUoQjNfSklUKQogCisjaW5jbHVkZSAiQjNUaW1pbmdTY29wZS5oIgogI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
IApAQCAtNDQsNiArNDUsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFByb2NlZHVyZSYgbV9w
cm9jZWR1cmU7CiAgICAgY29uc3QgY2hhciogbV9uYW1lOworICAgIFRpbWluZ1Njb3BlIG1fdGlt
aW5nU2NvcGU7CiAgICAgQ1N0cmluZyBtX2R1bXBCZWZvcmU7CiB9OwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCShyZXZpc2lvbiAxOTE4
NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDEyICsyOSwxNSBAQAogI2lmIEVOQUJMRShCM19KSVQpCiAKICNp
bmNsdWRlICJCM0NvbnRyb2xWYWx1ZS5oIgorI2luY2x1ZGUgIkIzSW5kZXhTZXQuaCIKICNpbmNs
dWRlICJCM0luc2VydGlvblNldElubGluZXMuaCIKICNpbmNsdWRlICJCM01lbW9yeVZhbHVlLmgi
CiAjaW5jbHVkZSAiQjNQaGFzZVNjb3BlLmgiCiAjaW5jbHVkZSAiQjNQcm9jZWR1cmVJbmxpbmVz
LmgiCisjaW5jbHVkZSAiQjNVcHNpbG9uVmFsdWUuaCIKICNpbmNsdWRlICJCM1VzZUNvdW50cy5o
IgogI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0dyYXBoTm9kZVdv
cmtsaXN0Lmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCkBAIC02MSw4ICs2
NCw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBmb3IgKG1faW5kZXggPSAwOyBtX2luZGV4
IDwgYmxvY2stPnNpemUoKTsgKyttX2luZGV4KQogICAgICAgICAgICAgICAgICAgICBwcm9jZXNz
KCk7CiAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShtX2Jsb2NrKTsKLQot
ICAgICAgICAgICAgICAgIGJsb2NrLT5yZW1vdmVOb3BzKG1fcHJvYyk7CiAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIGlmIChtX2NoYW5nZWRDRkcpIHsKQEAgLTcwLDEzICs3MSw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBVc2VDb3VudHMgdXNlQ291bnRzKG1fcHJvYyk7Ci0gICAgICAgICAgICBm
b3IgKFZhbHVlKiB2YWx1ZSA6IG1fcHJvYy52YWx1ZXMoKSkgewotICAgICAgICAgICAgICAgIGlm
ICghdXNlQ291bnRzW3ZhbHVlXSAmJiAhdmFsdWUtPmVmZmVjdHMoKS5tdXN0RXhlY3V0ZSgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlLT5yZXBsYWNlV2l0aE5vcCgpOwotICAgICAgICAg
ICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGtpbGxEZWFkQ29kZSgpOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICByZXN1bHQgfD0gbV9jaGFuZ2VkOwogICAgICAgICB9IHdoaWxlIChtX2NoYW5nZWQpOwpA
QCAtMzM3LDYgKzMzMiw2NCBAQCBwcml2YXRlOgogICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwog
ICAgIH0KIAorICAgIHZvaWQga2lsbERlYWRDb2RlKCkKKyAgICB7CisgICAgICAgIEdyYXBoTm9k
ZVdvcmtsaXN0PFZhbHVlKiwgSW5kZXhTZXQ8VmFsdWU+PiB3b3JrbGlzdDsKKyAgICAgICAgVmVj
dG9yPFVwc2lsb25WYWx1ZSosIDY0PiB1cHNpbG9uczsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2Nr
KiBibG9jayA6IG1fcHJvYykgeworICAgICAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiAqYmxv
Y2spIHsKKyAgICAgICAgICAgICAgICBFZmZlY3RzIGVmZmVjdHMgPSB2YWx1ZS0+ZWZmZWN0cygp
OworICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IGNhcmUgYWJvdXQgU1NBIEVmZmVjdHMsIHNp
bmNlIHdlIG1vZGVsIHRoZW0gbW9yZSBhY2N1cmF0ZWx5IHRoYW4gdGhlCisgICAgICAgICAgICAg
ICAgLy8gZWZmZWN0cygpIG1ldGhvZCBkb2VzLgorICAgICAgICAgICAgICAgIGVmZmVjdHMud3Jp
dGVzU1NBU3RhdGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBlZmZlY3RzLnJlYWRzU1NBU3Rh
dGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAoZWZmZWN0cy5tdXN0RXhlY3V0ZSgpKQor
ICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKHZhbHVlKTsKKyAgICAgICAgICAgICAg
ICBpZiAoVXBzaWxvblZhbHVlKiB1cHNpbG9uID0gdmFsdWUtPmFzPFVwc2lsb25WYWx1ZT4oKSkK
KyAgICAgICAgICAgICAgICAgICAgdXBzaWxvbnMuYXBwZW5kKHVwc2lsb24pOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIHdoaWxlIChW
YWx1ZSogdmFsdWUgPSB3b3JrbGlzdC5wb3AoKSkgeworICAgICAgICAgICAgICAgIGZvciAoVmFs
dWUqIGNoaWxkIDogdmFsdWUtPmNoaWxkcmVuKCkpCisgICAgICAgICAgICAgICAgICAgIHdvcmts
aXN0LnB1c2goY2hpbGQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAg
ICBib29sIGRpZFB1c2ggPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IHVwc2lsb25J
bmRleCA9IDA7IHVwc2lsb25JbmRleCA8IHVwc2lsb25zLnNpemUoKTsgKyt1cHNpbG9uSW5kZXgp
IHsKKyAgICAgICAgICAgICAgICBVcHNpbG9uVmFsdWUqIHVwc2lsb24gPSB1cHNpbG9uc1t1cHNp
bG9uSW5kZXhdOworICAgICAgICAgICAgICAgIGlmICh3b3JrbGlzdC5zYXcodXBzaWxvbi0+cGhp
KCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LnB1c2godXBzaWxvbik7CisgICAg
ICAgICAgICAgICAgICAgIHVwc2lsb25zW3Vwc2lsb25JbmRleC0tXSA9IHVwc2lsb25zLmxhc3Qo
KTsKKyAgICAgICAgICAgICAgICAgICAgdXBzaWxvbnMudGFrZUxhc3QoKTsKKyAgICAgICAgICAg
ICAgICAgICAgZGlkUHVzaCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKCFkaWRQdXNoKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYykgeworICAg
ICAgICAgICAgc2l6ZV90IHNvdXJjZUluZGV4ID0gMDsKKyAgICAgICAgICAgIHNpemVfdCB0YXJn
ZXRJbmRleCA9IDA7CisgICAgICAgICAgICB3aGlsZSAoc291cmNlSW5kZXggPCBibG9jay0+c2l6
ZSgpKSB7CisgICAgICAgICAgICAgICAgVmFsdWUqIHZhbHVlID0gYmxvY2stPmF0KHNvdXJjZUlu
ZGV4KyspOworICAgICAgICAgICAgICAgIGlmICh3b3JrbGlzdC5zYXcodmFsdWUpKQorICAgICAg
ICAgICAgICAgICAgICBibG9jay0+YXQodGFyZ2V0SW5kZXgrKykgPSB2YWx1ZTsKKyAgICAgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbV9wcm9jLmRlbGV0ZVZhbHVlKHZh
bHVlKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8vIEl0J3Mg
bm90IGVudGlyZWx5IGNsZWFyIGlmIHRoaXMgaXMgbmVlZGVkLiBJIHRoaW5rIGl0IG1ha2VzIHNl
bnNlIHRvIGhhdmUKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBmb3JjZSBhIHJlcnVuIG9m
IHRoZSBmaXhwb2ludCBmb3Igbm93LCBzaW5jZSB0aGF0IHdpbGwgbWFrZSBpdCBlYXNpZXIKKyAg
ICAgICAgICAgICAgICAgICAgLy8gdG8gZG8gcGVlcGhvbGUgb3B0aW1pemF0aW9uczogcmVtb3Zp
bmcgZGVhZCBjb2RlIHdpbGwgbWFrZSB0aGUgcGVlcGhvbGUKKyAgICAgICAgICAgICAgICAgICAg
Ly8gZWFzaWVyIHRvIHNwb3QuCisgICAgICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYmxvY2stPnZh
bHVlcygpLnJlc2l6ZSh0YXJnZXRJbmRleCk7CisgICAgICAgIH0KKyAgICB9CisKICAgICBQcm9j
ZWR1cmUmIG1fcHJvYzsKICAgICBJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25TZXQ7CiAgICAgQmFz
aWNCbG9jayogbV9ibG9jazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1RpbWlu
Z1Njb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUaW1p
bmdTY29wZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNU
aW1pbmdTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQjNUaW1pbmdTY29wZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2lu
Y2x1ZGUgIkIzQ29tbW9uLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVk
ZSA8d3RmL0RhdGFMb2cuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1Rp
bWluZ1Njb3BlOjpUaW1pbmdTY29wZShjb25zdCBjaGFyKiBuYW1lKQorICAgIDogbV9uYW1lKG5h
bWUpCit7CisgICAgaWYgKHNob3VsZE1lYXN1cmVQaGFzZVRpbWluZygpKQorICAgICAgICBtX2Jl
Zm9yZSA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZU1TKCk7Cit9CisKK1RpbWluZ1Njb3Bl
Ojp+VGltaW5nU2NvcGUoKQoreworICAgIGlmIChzaG91bGRNZWFzdXJlUGhhc2VUaW1pbmcoKSkg
eworICAgICAgICBkb3VibGUgYWZ0ZXIgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWVNUygp
OworICAgICAgICBkYXRhTG9nKCJbQjNdICIsIG1fbmFtZSwgIiB0b29rOiAiLCBhZnRlciAtIG1f
YmVmb3JlLCAiIG1zLlxuIik7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1RpbWluZ1Njb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVGltaW5nU2NvcGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1RpbWluZ1Njb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzVGlt
aW5nU2NvcGVfaAorI2RlZmluZSBCM1RpbWluZ1Njb3BlX2gKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK2NsYXNzIFRpbWluZ1Njb3BlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShUaW1pbmdTY29wZSk7CitwdWJsaWM6CisgICAgVGltaW5nU2NvcGUoY29uc3QgY2hhciogbmFt
ZSk7CisgICAgflRpbWluZ1Njb3BlKCk7CisKK3ByaXZhdGU6CisgICAgY29uc3QgY2hhciogbV9u
YW1lOworICAgIGRvdWJsZSBtX2JlZm9yZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzVGltaW5nU2NvcGVf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCShyZXZpc2lv
biAxOTE4NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTYxLDEyICs2MSwxMiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBI
YXNoU2V0PEJhc2ljQmxvY2sqPiBibG9ja3M7CiAgICAgICAgIEhhc2hTZXQ8VmFsdWUqPiB2YWx1
ZUluUHJvYzsKLSAgICAgICAgSGFzaFNldDxWYWx1ZSo+IHZhbHVlSW5CbG9jazsKKyAgICAgICAg
SGFzaE1hcDxWYWx1ZSosIHVuc2lnbmVkPiB2YWx1ZUluQmxvY2s7CiAKICAgICAgICAgZm9yIChC
YXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvY2VkdXJlKSB7CiAgICAgICAgICAgICBibG9ja3MuYWRk
KGJsb2NrKTsKICAgICAgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogKmJsb2NrKQotICAgICAg
ICAgICAgICAgIHZhbHVlSW5CbG9jay5hZGQodmFsdWUpOworICAgICAgICAgICAgICAgIHZhbHVl
SW5CbG9jay5hZGQodmFsdWUsIDApLml0ZXJhdG9yLT52YWx1ZSsrOwogICAgICAgICB9CiAKICAg
ICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiBtX3Byb2NlZHVyZS52YWx1ZXMoKSkKQEAgLTc0LDgg
Kzc0LDEwIEBAIHB1YmxpYzoKIAogICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IHZhbHVlSW5Q
cm9jKQogICAgICAgICAgICAgVkFMSURBVEUodmFsdWVJbkJsb2NrLmNvbnRhaW5zKHZhbHVlKSwg
KCJBdCAiLCAqdmFsdWUpKTsKLSAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiB2YWx1ZUluQmxv
Y2spCi0gICAgICAgICAgICBWQUxJREFURSh2YWx1ZUluUHJvYy5jb250YWlucyh2YWx1ZSksICgi
QXQgIiwgKnZhbHVlKSk7CisgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiB2YWx1ZUluQmxvY2sp
IHsKKyAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlSW5Qcm9jLmNvbnRhaW5zKGVudHJ5LmtleSks
ICgiQXQgIiwgKmVudHJ5LmtleSkpOworICAgICAgICAgICAgVkFMSURBVEUoZW50cnkudmFsdWUg
PT0gMSwgKCJBdCAiLCAqZW50cnkua2V5KSk7CisgICAgICAgIH0KIAogICAgICAgICBmb3IgKFZh
bHVlKiB2YWx1ZSA6IHZhbHVlSW5Qcm9jKSB7CiAgICAgICAgICAgICBmb3IgKFZhbHVlKiBjaGls
ZCA6IHZhbHVlLT5jaGlsZHJlbigpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rl
c3RiMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5j
cHAJKHJldmlzaW9uIDE5MTg0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDY2LDYgKzEwNjYsMTQxIEBAIHZvaWQgdGVzdEJyYW5j
aEVxdWFsRm9sZFB0cihpbnRwdHJfdCB2YWwKICAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4o
cHJvYykgPT0gIXZhbHVlKTsKIH0KIAordm9pZCB0ZXN0Q29tcGxleCh1bnNpZ25lZCBudW1WYXJz
LCB1bnNpZ25lZCBudW1Db25zdHJ1Y3RzKQoreworICAgIGRvdWJsZSBiZWZvcmUgPSBtb25vdG9u
aWNhbGx5SW5jcmVhc2luZ1RpbWVNUygpOworICAgIAorICAgIFByb2NlZHVyZSBwcm9jOworICAg
IEJhc2ljQmxvY2sqIGN1cnJlbnQgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICBDb25zdDMyVmFs
dWUqIG9uZSA9IGN1cnJlbnQtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigp
LCAxKTsKKworICAgIFZlY3RvcjxpbnQzMl90PiB2YXJTbG90czsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSBudW1WYXJzOyBpLS07KQorICAgICAgICB2YXJTbG90cy5hcHBlbmQoaSk7CisKKyAgICBW
ZWN0b3I8VmFsdWUqPiB2YXJzOworICAgIGZvciAoaW50MzJfdCYgdmFyU2xvdCA6IHZhclNsb3Rz
KSB7CisgICAgICAgIFZhbHVlKiB2YXJTbG90UHRyID0gY3VycmVudC0+YXBwZW5kTmV3PENvbnN0
UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAmdmFyU2xvdCk7CisgICAgICAgIHZhcnMuYXBwZW5k
KGN1cnJlbnQtPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50MzIsIE9yaWdp
bigpLCB2YXJTbG90UHRyKSk7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG51bUNvbnN0cnVjdHM7ICsraSkgeworICAgICAgICBpZiAoaSAmIDEpIHsKKyAgICAgICAgICAg
IC8vIENvbnRyb2wgZmxvdyBkaWFtb25kLgorICAgICAgICAgICAgdW5zaWduZWQgcHJlZGljYXRl
VmFySW5kZXggPSAoaSA+PiAxKSAlIG51bVZhcnM7CisgICAgICAgICAgICB1bnNpZ25lZCB0aGVu
SW5jVmFySW5kZXggPSAoKGkgPj4gMSkgKyAxKSAlIG51bVZhcnM7CisgICAgICAgICAgICB1bnNp
Z25lZCBlbHNlSW5jVmFySW5kZXggPSAoKGkgPj4gMSkgKyAyKSAlIG51bVZhcnM7CisKKyAgICAg
ICAgICAgIEJhc2ljQmxvY2sqIHRoZW5CbG9jayA9IHByb2MuYWRkQmxvY2soKTsKKyAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIGVsc2VCbG9jayA9IHByb2MuYWRkQmxvY2soKTsKKyAgICAgICAgICAg
IEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IHByb2MuYWRkQmxvY2soKTsKKworICAgICAgICAg
ICAgY3VycmVudC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJv
YywgQnJhbmNoLCBPcmlnaW4oKSwgdmFyc1twcmVkaWNhdGVWYXJJbmRleF0sCisgICAgICAgICAg
ICAgICAgRnJlcXVlbnRlZEJsb2NrKHRoZW5CbG9jayksIEZyZXF1ZW50ZWRCbG9jayhlbHNlQmxv
Y2spKTsKKworICAgICAgICAgICAgVXBzaWxvblZhbHVlKiB0aGVuVGhlblJlc3VsdCA9IHRoZW5C
bG9jay0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgT3Jp
Z2luKCksCisgICAgICAgICAgICAgICAgdGhlbkJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KHByb2Ms
IEFkZCwgT3JpZ2luKCksIHZhcnNbdGhlbkluY1ZhckluZGV4XSwgb25lKSk7CisgICAgICAgICAg
ICBVcHNpbG9uVmFsdWUqIHRoZW5FbHNlUmVzdWx0ID0gdGhlbkJsb2NrLT5hcHBlbmROZXc8VXBz
aWxvblZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBPcmlnaW4oKSwgdmFyc1tlbHNlSW5j
VmFySW5kZXhdKTsKKyAgICAgICAgICAgIHRoZW5CbG9jay0+YXBwZW5kTmV3PENvbnRyb2xWYWx1
ZT4ocHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayhjb250aW51YXRpb24pKTsK
KworICAgICAgICAgICAgVXBzaWxvblZhbHVlKiBlbHNlRWxzZVJlc3VsdCA9IGVsc2VCbG9jay0+
YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgT3JpZ2luKCks
CisgICAgICAgICAgICAgICAgZWxzZUJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwg
T3JpZ2luKCksIHZhcnNbZWxzZUluY1ZhckluZGV4XSwgb25lKSk7CisgICAgICAgICAgICBVcHNp
bG9uVmFsdWUqIGVsc2VUaGVuUmVzdWx0ID0gZWxzZUJsb2NrLT5hcHBlbmROZXc8VXBzaWxvblZh
bHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBPcmlnaW4oKSwgdmFyc1t0aGVuSW5jVmFySW5k
ZXhdKTsKKyAgICAgICAgICAgIGVsc2VCbG9jay0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4ocHJv
YywgSnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50ZWRCbG9jayhjb250aW51YXRpb24pKTsKKworICAg
ICAgICAgICAgVmFsdWUqIHRoZW5QaGkgPSBjb250aW51YXRpb24tPmFwcGVuZE5ldzxWYWx1ZT4o
cHJvYywgUGhpLCBJbnQzMiwgT3JpZ2luKCkpOworICAgICAgICAgICAgdGhlblRoZW5SZXN1bHQt
PnNldFBoaSh0aGVuUGhpKTsKKyAgICAgICAgICAgIGVsc2VUaGVuUmVzdWx0LT5zZXRQaGkodGhl
blBoaSk7CisgICAgICAgICAgICB2YXJzW3RoZW5JbmNWYXJJbmRleF0gPSB0aGVuUGhpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBWYWx1ZSogZWxzZVBoaSA9IGNvbnRpbnVhdGlvbi0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBQaGksIEludDMyLCBPcmlnaW4oKSk7CisgICAgICAgICAgICB0
aGVuRWxzZVJlc3VsdC0+c2V0UGhpKGVsc2VQaGkpOworICAgICAgICAgICAgZWxzZUVsc2VSZXN1
bHQtPnNldFBoaShlbHNlUGhpKTsKKyAgICAgICAgICAgIHZhcnNbZWxzZUluY1ZhckluZGV4XSA9
IHRoZW5QaGk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGN1cnJlbnQgPSBjb250aW51YXRp
b247CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBMb29wLgorCisgICAgICAgICAg
ICBCYXNpY0Jsb2NrKiBsb29wRW50cnkgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgICAgICAgICBC
YXNpY0Jsb2NrKiBsb29wUmVlbnRyeSA9IHByb2MuYWRkQmxvY2soKTsKKyAgICAgICAgICAgIEJh
c2ljQmxvY2sqIGxvb3BCb2R5ID0gcHJvYy5hZGRCbG9jaygpOworICAgICAgICAgICAgQmFzaWNC
bG9jayogbG9vcEV4aXQgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBsb29wU2tpcCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGNv
bnRpbnVhdGlvbiA9IHByb2MuYWRkQmxvY2soKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
VmFsdWUqIHN0YXJ0SW5kZXggPSB2YXJzWyhpID4+IDEpICUgbnVtVmFyc107CisgICAgICAgICAg
ICBWYWx1ZSogc3RhcnRTdW0gPSBjdXJyZW50LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgMCk7CisgICAgICAgICAgICBjdXJyZW50LT5hcHBlbmROZXc8Q29udHJvbFZh
bHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBCcmFuY2gsIE9yaWdpbigpLCBzdGFydEluZGV4
LAorICAgICAgICAgICAgICAgIEZyZXF1ZW50ZWRCbG9jayhsb29wRW50cnkpLCBGcmVxdWVudGVk
QmxvY2sobG9vcFNraXApKTsKKworICAgICAgICAgICAgVXBzaWxvblZhbHVlKiBzdGFydEluZGV4
Rm9yQm9keSA9IGxvb3BFbnRyeS0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4oCisgICAgICAgICAg
ICAgICAgcHJvYywgT3JpZ2luKCksIHN0YXJ0SW5kZXgpOworICAgICAgICAgICAgVXBzaWxvblZh
bHVlKiBzdGFydFN1bUZvckJvZHkgPSBsb29wRW50cnktPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+
KAorICAgICAgICAgICAgICAgIHByb2MsIE9yaWdpbigpLCBzdGFydFN1bSk7CisgICAgICAgICAg
ICBsb29wRW50cnktPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KHByb2MsIEp1bXAsIE9yaWdpbigp
LCBGcmVxdWVudGVkQmxvY2sobG9vcEJvZHkpKTsKKworICAgICAgICAgICAgVmFsdWUqIGJvZHlJ
bmRleCA9IGxvb3BCb2R5LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFBoaSwgSW50MzIsIE9yaWdp
bigpKTsKKyAgICAgICAgICAgIHN0YXJ0SW5kZXhGb3JCb2R5LT5zZXRQaGkoYm9keUluZGV4KTsK
KyAgICAgICAgICAgIFZhbHVlKiBib2R5U3VtID0gbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4o
cHJvYywgUGhpLCBJbnQzMiwgT3JpZ2luKCkpOworICAgICAgICAgICAgc3RhcnRTdW1Gb3JCb2R5
LT5zZXRQaGkoYm9keVN1bSk7CisgICAgICAgICAgICBWYWx1ZSogbmV3Qm9keUluZGV4ID0gbG9v
cEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU3ViLCBPcmlnaW4oKSwgYm9keUluZGV4LCBv
bmUpOworICAgICAgICAgICAgVmFsdWUqIG5ld0JvZHlTdW0gPSBsb29wQm9keS0+YXBwZW5kTmV3
PFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBBZGQsIE9yaWdpbigpLAorICAgICAgICAg
ICAgICAgIGJvZHlTdW0sCisgICAgICAgICAgICAgICAgbG9vcEJvZHktPmFwcGVuZE5ldzxNZW1v
cnlWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIHByb2MsIExvYWQsIEludDMyLCBPcmlnaW4o
KSwKKyAgICAgICAgICAgICAgICAgICAgbG9vcEJvZHktPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAg
ICAgICAgICAgICAgICAgICAgICBwcm9jLCBBZGQsIE9yaWdpbigpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgbG9vcEJvZHktPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgdmFyU2xvdHMuZGF0YSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvb3BCb2R5LT5h
cHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2MsIFNobCwg
T3JpZ2luKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcEJvZHktPmFwcGVuZE5l
dzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2MsIFpFeHQzMiwg
T3JpZ2luKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3BCb2R5LT5hcHBl
bmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvYywg
Qml0QW5kLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5l
d0JvZHlJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3BCb2R5
LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwcm9jLCBPcmlnaW4oKSwgbnVtVmFycyAtIDEpKSksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbG9vcEJvZHktPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9y
aWdpbigpLCAyKSkpKSk7CisgICAgICAgICAgICBsb29wQm9keS0+YXBwZW5kTmV3PENvbnRyb2xW
YWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgQnJhbmNoLCBPcmlnaW4oKSwgbmV3Qm9keUlu
ZGV4LAorICAgICAgICAgICAgICAgIEZyZXF1ZW50ZWRCbG9jayhsb29wUmVlbnRyeSksIEZyZXF1
ZW50ZWRCbG9jayhsb29wRXhpdCkpOworCisgICAgICAgICAgICBsb29wUmVlbnRyeS0+YXBwZW5k
TmV3PFVwc2lsb25WYWx1ZT4ocHJvYywgT3JpZ2luKCksIG5ld0JvZHlJbmRleCwgYm9keUluZGV4
KTsKKyAgICAgICAgICAgIGxvb3BSZWVudHJ5LT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgbmV3Qm9keVN1bSwgYm9keVN1bSk7CisgICAgICAgICAgICBsb29wUmVlbnRy
eS0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4ocHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50
ZWRCbG9jayhsb29wQm9keSkpOworCisgICAgICAgICAgICBVcHNpbG9uVmFsdWUqIGV4aXRTdW0g
PSBsb29wRXhpdC0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4ocHJvYywgT3JpZ2luKCksIG5ld0Jv
ZHlTdW0pOworICAgICAgICAgICAgbG9vcEV4aXQtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KHBy
b2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2soY29udGludWF0aW9uKSk7CisKKyAg
ICAgICAgICAgIFVwc2lsb25WYWx1ZSogc2tpcFN1bSA9IGxvb3BTa2lwLT5hcHBlbmROZXc8VXBz
aWxvblZhbHVlPihwcm9jLCBPcmlnaW4oKSwgc3RhcnRTdW0pOworICAgICAgICAgICAgbG9vcFNr
aXAtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVu
dGVkQmxvY2soY29udGludWF0aW9uKSk7CisKKyAgICAgICAgICAgIFZhbHVlKiBmaW5hbFN1bSA9
IGNvbnRpbnVhdGlvbi0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBQaGksIEludDMyLCBPcmlnaW4o
KSk7CisgICAgICAgICAgICBleGl0U3VtLT5zZXRQaGkoZmluYWxTdW0pOworICAgICAgICAgICAg
c2tpcFN1bS0+c2V0UGhpKGZpbmFsU3VtKTsKKworICAgICAgICAgICAgY3VycmVudCA9IGNvbnRp
bnVhdGlvbjsKKyAgICAgICAgICAgIHZhcnNbKChpID4+IDEpICsgMSkgJSBudW1WYXJzXSA9IGZp
bmFsU3VtOworICAgICAgICB9CisgICAgfQorCisgICAgY3VycmVudC0+YXBwZW5kTmV3PENvbnRy
b2xWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgdmFyc1swXSk7CisKKyAgICBjb21waWxl
KHByb2MpOworCisgICAgZG91YmxlIGFmdGVyID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1l
TVMoKTsKKyAgICBkYXRhTG9nKCIgICAgVGhhdCB0b29rICIsIGFmdGVyIC0gYmVmb3JlLCAiIG1z
LlxuIik7Cit9CisKICNkZWZpbmUgUlVOKHRlc3QpIGRvIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKICAgICAgICAgaWYgKCFzaG91bGRSdW4oI3Rlc3QpKSAgICAgICAgICAgICAgICAgIFwK
ICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTEx
NjgsNiArMTMwMywxMCBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgUlVOKHRl
c3RCcmFuY2hFcXVhbEZvbGRQdHIoNDIpKTsKICAgICBSVU4odGVzdEJyYW5jaEVxdWFsRm9sZFB0
cigwKSk7CiAKKyAgICBSVU4odGVzdENvbXBsZXgoNjQsIDEyOCkpOworICAgIFJVTih0ZXN0Q29t
cGxleCg2NCwgMjU2KSk7CisgICAgUlVOKHRlc3RDb21wbGV4KDY0LCAzODQpKTsKKwogICAgIGlm
ICghZGlkUnVuKQogICAgICAgICB1c2FnZSgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCShyZXZpc2lvbiAxOTE4NDYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MSwxMSArNDEsNiBAQCBuYW1lc3BhY2UgewogCiBjb25zdCBib29s
IHZlcmJvc2UgPSBmYWxzZTsKIAotYm9vbCBhcmd1bWVudElzT25TdGFjayhjb25zdCBBcmcmIGFy
ZykKLXsKLSAgICByZXR1cm4gYXJnLmlzU3RhY2soKSAmJiBhcmcuc3RhY2tTbG90KCktPmtpbmQo
KSA9PSBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXM7Ci19Ci0KIGJvb2wgYXR0ZW1wdEFzc2lnbm1l
bnQoCiAgICAgU3RhY2tTbG90KiBzbG90LCBpbnRwdHJfdCBvZmZzZXRGcm9tRlAsIGNvbnN0IFZl
Y3RvcjxTdGFja1Nsb3QqPiYgb3RoZXJTbG90cykKIHsKQEAgLTE0MSwzNCArMTM2LDM1IEBAIHZv
aWQgYWxsb2NhdGVTdGFjayhDb2RlJiBjb2RlKQogICAgIH0KIAogICAgIC8vIE5vdyB3ZSBoYW5k
bGUgdGhlIGFub255bW91cyBzbG90cy4KLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHRlbGwgTGl2
ZW5lc3MgdG8gb25seSB0cmFjayBTdGFja1Nsb3RzLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA3NTEKLSAgICBMaXZlbmVzczxBcmc+IGxpdmVuZXNz
KGNvZGUpOworICAgIExpdmVuZXNzPFN0YWNrU2xvdCo+IGxpdmVuZXNzKGNvZGUpOwogICAgIElu
ZGV4TWFwPFN0YWNrU2xvdCwgSGFzaFNldDxTdGFja1Nsb3QqPj4gaW50ZXJmZXJlbmNlKGNvZGUu
c3RhY2tTbG90cygpLnNpemUoKSk7CiAgICAgVmVjdG9yPFN0YWNrU2xvdCo+IHNsb3RzOwogCiAg
ICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKLSAgICAgICAgTGl2ZW5lc3M8QXJn
Pjo6TG9jYWxDYWxjIGxvY2FsQ2FsYyhsaXZlbmVzcywgYmxvY2spOworICAgICAgICBMaXZlbmVz
czxTdGFja1Nsb3QqPjo6TG9jYWxDYWxjIGxvY2FsQ2FsYyhsaXZlbmVzcywgYmxvY2spOwogCiAg
ICAgICAgIGF1dG8gaW50ZXJmZXJlID0gWyZdIChJbnN0JiBpbnN0KSB7CiAgICAgICAgICAgICBp
ZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCJJbnRlcmZlcmluZzogIiwgbGlz
dER1bXAobG9jYWxDYWxjLmxpdmUoKSksICJcbiIpOworICAgICAgICAgICAgICAgIGRhdGFMb2co
IkludGVyZmVyaW5nOiAiLCBwb2ludGVyTGlzdER1bXAobG9jYWxDYWxjLmxpdmUoKSksICJcbiIp
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBGb3JtIGEgY2xpcXVlIG9mIHN0YWNrIHNs
b3RzIHRoYXQgaW50ZXJmZXJlLiBGaXJzdCBmaW5kIHRoZSBsaXN0IG9mIHN0YWNrIHNsb3RzCiAg
ICAgICAgICAgICAvLyB0aGF0IGFyZSBsaXZlIHJpZ2h0IG5vdy4KICAgICAgICAgICAgIHNsb3Rz
LnJlc2l6ZSgwKTsKLSAgICAgICAgICAgIGZvciAoQXJnIGFyZyA6IGxvY2FsQ2FsYy5saXZlKCkp
IHsKLSAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRJc09uU3RhY2soYXJnKSkKLSAgICAgICAg
ICAgICAgICAgICAgc2xvdHMuYXBwZW5kKGFyZy5zdGFja1Nsb3QoKSk7CisgICAgICAgICAgICBm
b3IgKFN0YWNrU2xvdCogc2xvdCA6IGxvY2FsQ2FsYy5saXZlKCkpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoc2xvdC0+a2luZCgpID09IFN0YWNrU2xvdEtpbmQ6OkFub255bW91cykKKyAgICAgICAg
ICAgICAgICAgICAgc2xvdHMuYXBwZW5kKHNsb3QpOwogICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICAvLyBXZSBtdXN0bid0IG1hbmRhdGUgdGhhdCB0aGUgaW5wdXQgY29kZSBpcyBvcHRpbWFs
LiBUaGVyZWZvcmUsIGl0IG1heSBoYXZlIGRlYWQgc3RvcmVzCiAgICAgICAgICAgICAvLyB0byB0
aGUgc3RhY2suIFdlIG5lZWQgdG8gdHJlYXQgdGhlc2UgYXMgaW50ZXJmZXJpbmcuCiAgICAgICAg
ICAgICBpbnN0LmZvckVhY2hBcmcoCiAgICAgICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJn
OjpSb2xlIHJvbGUsIEFyZzo6VHlwZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjpp
c0RlZihyb2xlKSAmJiBhcmd1bWVudElzT25TdGFjayhhcmcpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAmJiAhbG9jYWxDYWxjLmxpdmUoKS5jb250YWlucyhhcmcpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgc2xvdHMuYXBwZW5kKGFyZy5zdGFja1Nsb3QoKSk7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChBcmc6OmlzRGVmKHJvbGUpICYmIGFyZy5pc1N0YWNrKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFN0YWNrU2xvdCogc2xvdCA9IGFyZy5zdGFja1Nsb3QoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChzbG90LT5raW5kKCkgPT0gU3RhY2tTbG90S2luZDo6QW5vbnlt
b3VzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIWxvY2FsQ2FsYy5saXZlKCkuY29u
dGFpbnMoc2xvdCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvdHMuYXBwZW5kKHNs
b3QpOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDE5MTg0NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zOCwxMiArMzgsMTUgQEAKICNpbmNsdWRlICJBaXJWYWxpZGF0ZS5oIgogI2luY2x1ZGUgIkIz
Q29tbW9uLmgiCiAjaW5jbHVkZSAiQjNJbmRleE1hcC5oIgorI2luY2x1ZGUgIkIzVGltaW5nU2Nv
cGUuaCIKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewogCiB2b2lkIGdlbmVyYXRlKENvZGUmIGNvZGUsIEND
YWxsSGVscGVycyYgaml0KQogeworICAgIFRpbWluZ1Njb3BlIHRpbWluZ1Njb3BlKCJBaXI6Omdl
bmVyYXRlIik7CisgICAgCiAgICAgLy8gV2UgZG9uJ3QgZXhwZWN0IHRoZSBpbmNvbWluZyBjb2Rl
IHRvIGhhdmUgcHJlZGVjZXNzb3JzIGNvbXB1dGVkLgogICAgIGNvZGUucmVzZXRSZWFjaGFiaWxp
dHkoKTsKICAgICAKQEAgLTkxLDYgKzk0LDggQEAgdm9pZCBnZW5lcmF0ZShDb2RlJiBjb2RlLCBD
Q2FsbEhlbHBlcnMmIAogICAgICAgICBkYXRhTG9nKGNvZGUpOwogICAgIH0KIAorICAgIFRpbWlu
Z1Njb3BlIGNvZGVHZW5UaW1pbmdTY29wZSgiQWlyOjpnZW5lcmF0ZSBiYWNrZW5kIik7CisKICAg
ICAvLyBBbmQgbm93LCB3ZSBnZW5lcmF0ZSBjb2RlLgogICAgIGppdC5lbWl0RnVuY3Rpb25Qcm9s
b2d1ZSgpOwogICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLWNvZGUu
ZnJhbWVTaXplKCkpLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdElubGluZXMuaAkocmV2
aXNpb24gMTkxODQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSwyMCBAQCB0ZW1wbGF0ZTw+IHN0cnVj
dCBGb3JFYWNoPEFyZz4gewogICAgICAgICBpbnN0LmZvckVhY2hBcmcoZnVuY3Rvcik7CiAgICAg
fQogfTsKK3RlbXBsYXRlPD4gc3RydWN0IEZvckVhY2g8U3RhY2tTbG90Kj4geworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgc3RhdGljIHZvaWQgZm9yRWFjaChJbnN0JiBpbnN0
LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgaW5zdC5mb3JFYWNoQXJn
KAorICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSB0
eXBlKSB7CisgICAgICAgICAgICAgICAgaWYgKCFhcmcuaXNTdGFjaygpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzdGFja1Nsb3QgPSBh
cmcuc3RhY2tTbG90KCk7CisgICAgICAgICAgICAgICAgZnVuY3RvcihzdGFja1Nsb3QsIHJvbGUs
IHR5cGUpOworICAgICAgICAgICAgICAgIGFyZyA9IEFyZzo6c3RhY2soc3RhY2tTbG90KTsKKyAg
ICAgICAgICAgIH0pOworICAgIH0KK307CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFRoaW5nLCB0eXBl
bmFtZSBGdW5jdG9yPgogdm9pZCBJbnN0Ojpmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3Ip
CkBAIC05MCw2ICsxMDQsMTEgQEAgaW5saW5lIGJvb2wgaXNMc2hpZnQzMlZhbGlkKGNvbnN0IElu
c3QmIAogICAgIHJldHVybiBpc1NoaWZ0VmFsaWQoaW5zdCk7CiB9CiAKK2lubGluZSBib29sIGlz
THNoaWZ0NjRWYWxpZChjb25zdCBJbnN0JiBpbnN0KQoreworICAgIHJldHVybiBpc1NoaWZ0VmFs
aWQoaW5zdCk7Cit9CisKIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKIAogI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckxpdmVuZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJMaXZlbmVzcy5oCShyZXZpc2lvbiAxOTE4NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckxpdmVuZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDExIEBAIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UKIHRlbXBsYXRlPHR5cGVuYW1l
IFRoaW5nPgogY2xhc3MgTGl2ZW5lc3MgewogcHVibGljOgorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+CisgICAgc3RhdGljIGJvb2wgaXNBbGl2ZShjb25zdCBUJiB0aGluZykgeyByZXR1cm4gdGhp
bmcuaXNBbGl2ZSgpOyB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0FsaXZlKFN0YWNrU2xvdCogc2xv
dCkgeyByZXR1cm4gc2xvdC0+a2luZCgpID09IFN0YWNrU2xvdEtpbmQ6OkFub255bW91czsgfQor
ICAgIAogICAgIExpdmVuZXNzKENvZGUmIGNvZGUpCiAgICAgewogICAgICAgICBtX2xpdmVBdEhl
YWQucmVzaXplKGNvZGUuc2l6ZSgpKTsKQEAgLTk0LDI0ICs5OSwxNiBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAvLyBGaXJzdCBoYW5kbGUgZGVmJ3MuCiAgICAgICAgICAgICBpbnN0LmZvckVhY2g8
VGhpbmc+KAogICAgICAgICAgICAgICAgIFt0aGlzXSAoVGhpbmcmIGFyZywgQXJnOjpSb2xlIHJv
bGUsIEFyZzo6VHlwZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZy5pc0FsaXZlKCkp
CisgICAgICAgICAgICAgICAgICAgIGlmICghaXNBbGl2ZShhcmcpKQogICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0RlZihyb2xl
KSkKICAgICAgICAgICAgICAgICAgICAgICAgIG1fbGl2ZS5yZW1vdmUoYXJnKTsKICAgICAgICAg
ICAgICAgICB9KTsKIAotICAgICAgICAgICAgLy8gTmV4dCBoYW5kbGUgY2xvYmJlcmVkIHJlZ2lz
dGVycy4KLSAgICAgICAgICAgIGlmIChpbnN0Lmhhc1NwZWNpYWwoKSkgewotICAgICAgICAgICAg
ICAgIGluc3QuZXh0cmFDbG9iYmVyZWRSZWdzKCkuZm9yRWFjaCgKLSAgICAgICAgICAgICAgICAg
ICAgW3RoaXNdIChSZWcgcmVnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2xpdmUucmVt
b3ZlKFRoaW5nKFRtcChyZWcpKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBGaW5hbGx5IGhhbmRsZSB1c2Uncy4K
ICAgICAgICAgICAgIGluc3QuZm9yRWFjaDxUaGluZz4oCiAgICAgICAgICAgICAgICAgW3RoaXNd
IChUaGluZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICghYXJnLmlzQWxpdmUoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0Fs
aXZlKGFyZykpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAg
ICAgICAgIGlmIChBcmc6OmlzVXNlKHJvbGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgbV9s
aXZlLmFkZChhcmcpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNv
ZGUub3Bjb2Rlcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ck9wY29kZS5vcGNvZGVzCShyZXZpc2lvbiAxOTE4NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNiArMTA3
LDEwIEBAIExzaGlmdDMyIFU6RywgVUQ6RwogICAgIFRtcCosIFRtcAogICAgIEltbSwgVG1wCiAK
K0xzaGlmdDY0IFU6RywgVUQ6RworICAgIFRtcCosIFRtcAorICAgIEltbSwgVG1wCisKIE11bDMy
IFU6RywgVUQ6RwogICAgIFRtcCwgVG1wCiAgICAgQWRkciwgVG1wCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpclBoYXNlU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGhhc2VTY29wZS5jcHAJKHJldmlzaW9uIDE5MTg0
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGhhc2VTY29wZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7IG5hbWVzcGFjZQogUGhhc2VTY29wZTo6UGhhc2VTY29wZShDb2RlJiBjb2RlLCBjb25zdCBj
aGFyKiBuYW1lKQogICAgIDogbV9jb2RlKGNvZGUpCiAgICAgLCBtX25hbWUobmFtZSkKKyAgICAs
IG1fdGltaW5nU2NvcGUobmFtZSkKIHsKICAgICBpZiAoc2hvdWxkRHVtcElSQXRFYWNoUGhhc2Uo
KSkgewogICAgICAgICBkYXRhTG9nKCJBaXIgYWZ0ZXIgIiwgY29kZS5sYXN0UGhhc2VOYW1lKCks
ICIsIGJlZm9yZSAiLCBuYW1lLCAiOlxuIik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpclBoYXNlU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclBoYXNlU2NvcGUuaAkocmV2aXNpb24gMTkxODQ2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQaGFzZVNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShCM19KSVQpCiAKKyNpbmNsdWRlICJCM1RpbWluZ1Nj
b3BlLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgogCkBAIC00NCw2ICs0NSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgQ29k
ZSYgbV9jb2RlOwogICAgIGNvbnN0IGNoYXIqIG1fbmFtZTsKKyAgICBUaW1pbmdTY29wZSBtX3Rp
bWluZ1Njb3BlOwogICAgIENTdHJpbmcgbV9kdW1wQmVmb3JlOwogfTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMTkxODQ2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MzcsNiArMzM3LDggQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgdih1
bnNpZ25lZCwgZmlyZU9TUkV4aXRGdXp6QXQsIDAsIG51bGxwdHIpIFwKICAgICB2KHVuc2lnbmVk
LCBmaXJlT1NSRXhpdEZ1enpBdE9yQWZ0ZXIsIDAsIG51bGxwdHIpIFwKICAgICBcCisgICAgdihi
b29sLCBtZWFzdXJlUGhhc2VUaW1pbmdzLCBmYWxzZSwgbnVsbHB0cikgXAorICAgIFwKICAgICB2
KGJvb2wsIHVzZURvbGxhclZNLCBmYWxzZSwgImluc3RhbGxzIHRoZSAkdm0gZGVidWdnaW5nIHRv
b2wgaW4gZ2xvYmFsIG9iamVjdHMiKSBcCiAgICAgdihvcHRpb25TdHJpbmcsIGZ1bmN0aW9uT3Zl
cnJpZGVzLCBudWxscHRyLCAiZmlsZSB3aXRoIGRlYnVnZ2luZyBvdmVycmlkZXMgZm9yIGZ1bmN0
aW9uIGJvZGllcyIpIFwKICAgICBcCkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMTkxODQ2KQorKysgU291cmNl
L1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMyBAQAorMjAxNS0xMC0z
MSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEIzOjpyZWR1Y2VT
dHJlbmd0aCdzIERDRSBzaG91bGQgYmUgbW9yZSBhZ3JvIGFuZCBsZXNzIHdyb25nCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA3NDgKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9HcmFwaE5vZGVX
b3JrbGlzdC5oOgorICAgICAgICAoV1RGOjpHcmFwaE5vZGVXb3JrbGlzdDo6c2F3KTogVGhpcyBt
ZXRob2QgaXMgc3VwZXIgdXNlZnVsLgorCisyMDE1LTEwLTMxICBGaWxpcCBQaXpsbyAgPGZwaXps
b0BhcHBsZS5jb20+CisKKyAgICAgICAgQjM6OnJlZHVjZVN0cmVuZ3RoJ3MgRENFIHNob3VsZCBi
ZSBtb3JlIGFncm8KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1MDc0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogd3RmL0dyYXBoTm9kZVdvcmtsaXN0Lmg6CisgICAgICAgIChXVEY6OkdyYXBoTm9kZVdv
cmtsaXN0OjpzYXcpOiBUaGlzIGlzIGdvaW5nIHRvIGJlIHVzZWZ1bC4KKwogMjAxNS0xMC0zMCAg
Q2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFJlZ3Jlc3Npb24ocjE5
MTY3Myk6IENyYXNoIGluIFJ1bkxvb3BUaW1lcjo6c2NoZWR1bGUoKQpJbmRleDogU291cmNlL1dU
Ri93dGYvR3JhcGhOb2RlV29ya2xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9H
cmFwaE5vZGVXb3JrbGlzdC5oCShyZXZpc2lvbiAxOTE4NDYpCisrKyBTb3VyY2UvV1RGL3d0Zi9H
cmFwaE5vZGVXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw4IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIG1fc3RhY2sudGFrZUxhc3QoKTsKICAgICB9CiAKKyAgICBib29s
IHNhdyhOb2RlIG5vZGUpIHsgcmV0dXJuIG1fc2Vlbi5jb250YWlucyhub2RlKTsgfQorCiBwcml2
YXRlOgogICAgIFNldCBtX3NlZW47CiAgICAgVmVjdG9yPE5vZGUsIDE2PiBtX3N0YWNrOwpJbmRl
eDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNp
b24gMTkxODQ2KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTQgQEAKKzIwMTUtMTAtMzEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAg
ICAgICBCMzo6cmVkdWNlU3RyZW5ndGgncyBEQ0Ugc2hvdWxkIGJlIG1vcmUgYWdybyBhbmQgbGVz
cyB3cm9uZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTUwNzQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkIGFuIExMVk0gdmVyc2lvbiBvZiB0ZXN0YjMncyAidGVzdENvbXBsZXgiLiAgICAgICAgCisK
KyAgICAgICAgKiBSZWR1Y2VkRlRML0NvbXBsZXhUZXN0LmNwcDogQWRkZWQuCisKIDIwMTUtMTAt
MzEgIEx1Y2FzIEZvcnNjaGxlciAgPGxmb3JzY2hsZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFRl
YWNoIHRoZSBDb21waWxlV2ViS2l0IHN0ZXAgdG8gbG9vayBmb3IgYWRkaXRpb25hbCBhcmd1bWVu
dHMuCkluZGV4OiBUb29scy9SZWR1Y2VkRlRML0NvbXBsZXhUZXN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9SZWR1Y2VkRlRML0NvbXBsZXhUZXN0LmNwcAkocmV2aXNpb24gMCkKKysrIFRvb2xz
L1JlZHVjZWRGVEwvQ29tcGxleFRlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjQw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKy8vIENv
bXBpbGUgbGlrZSBzbzoKKy8vIGNsYW5nKysgLU8zIC1vIENvbXBsZXhUZXN0IENvbXBsZXhUZXN0
LmNwcCAtc3RkPWMrKzE0IGB+L0Rvd25sb2Fkcy9jbGFuZytsbHZtLTMuNy4wLXg4Nl82NC1hcHBs
ZS1kYXJ3aW4vYmluL2xsdm0tY29uZmlnIC0tY3BwZmxhZ3MgLS1jeHhmbGFncyAtLWxkZmxhZ3Mg
LS1saWJzYCAtbGN1cnNlcyAtZyAtbHoKKworI2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlIDxt
ZW1vcnk+CisjaW5jbHVkZSA8Y2hyb25vPgorCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKworI2lu
Y2x1ZGUgPGxsdm0vU3VwcG9ydC9yYXdfb3N0cmVhbS5oPgorI2luY2x1ZGUgPGxsdm0vSVIvTExW
TUNvbnRleHQuaD4KKyNpbmNsdWRlIDxsbHZtL0lSL0RhdGFMYXlvdXQuaD4KKyNpbmNsdWRlIDxs
bHZtL0lSL0lSQnVpbGRlci5oPgorI2luY2x1ZGUgPGxsdm0vSVIvQ29uc3RhbnRzLmg+CisjaW5j
bHVkZSA8bGx2bS9JUi9GdW5jdGlvbi5oPgorI2luY2x1ZGUgPGxsdm0vSVIvSW5zdHJ1Y3Rpb25z
Lmg+CisjaW5jbHVkZSA8bGx2bS9JUi9Nb2R1bGUuaD4KKyNpbmNsdWRlIDxsbHZtL0lSL1Zlcmlm
aWVyLmg+CisjaW5jbHVkZSA8bGx2bS9FeGVjdXRpb25FbmdpbmUvRXhlY3V0aW9uRW5naW5lLmg+
CisjaW5jbHVkZSA8bGx2bS9UcmFuc2Zvcm1zL1V0aWxzL0Jhc2ljQmxvY2tVdGlscy5oPgorI2lu
Y2x1ZGUgPGxsdm0vUGFzcy5oPgorI2luY2x1ZGUgPGxsdm0vSVIvTGVnYWN5UGFzc01hbmFnZXIu
aD4KKyNpbmNsdWRlIDxsbHZtL1N1cHBvcnQvSG9zdC5oPgorI2luY2x1ZGUgPGxsdm0vQW5hbHlz
aXMvUGFzc2VzLmg+CisjaW5jbHVkZSA8bGx2bS9UcmFuc2Zvcm1zL1NjYWxhci5oPgorI2luY2x1
ZGUgPGxsdm0vVHJhbnNmb3Jtcy9JUE8uaD4KKyNpbmNsdWRlIDxsbHZtL1RyYW5zZm9ybXMvSVBP
L1Bhc3NNYW5hZ2VyQnVpbGRlci5oPgorI2luY2x1ZGUgPGxsdm0vRXhlY3V0aW9uRW5naW5lL01D
SklULmg+CisjaW5jbHVkZSA8bGx2bS9TdXBwb3J0L0Vycm9ySGFuZGxpbmcuaD4KKyNpbmNsdWRl
IDxsbHZtL1N1cHBvcnQvVGFyZ2V0U2VsZWN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBsbHZtOwor
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIHsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VG9UeXBlLCB0eXBlbmFtZSBGcm9tVHlwZT4KK2lubGluZSBUb1R5cGUgYml0d2lzZV9jYXN0KEZy
b21UeXBlIGZyb20pCit7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoRnJvbVR5cGUpID09IHNp
emVvZihUb1R5cGUpLCAiYml0d2lzZV9jYXN0IHNpemUgb2YgRnJvbVR5cGUgYW5kIFRvVHlwZSBt
dXN0IGJlIGVxdWFsISIpOworICAgIHVuaW9uIHsKKyAgICAgICAgRnJvbVR5cGUgZnJvbTsKKyAg
ICAgICAgVG9UeXBlIHRvOworICAgIH0gdTsKKyAgICB1LmZyb20gPSBmcm9tOworICAgIHJldHVy
biB1LnRvOworfQorCitkb3VibGUgbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lTVMoKQorewor
ICAgIHJldHVybiBjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8Y2hyb25vOjptaWNyb3NlY29uZHM+KAor
ICAgICAgICBjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCkudGltZV9zaW5jZV9lcG9jaCgpKS5j
b3VudCgpIC8gMTAwMC47Cit9CisKK3ZvaWQgcnVuKHVuc2lnbmVkIG51bVZhcnMsIHVuc2lnbmVk
IG51bUNvbnN0cnVjdHMpCit7CisgICAgTExWTUNvbnRleHQgY29udGV4dDsKKyAgICBUeXBlKiBp
bnQzMlR5ID0gVHlwZTo6Z2V0SW50MzJUeShjb250ZXh0KTsKKyAgICBNb2R1bGUqIG1vZHVsZSA9
IG5ldyBNb2R1bGUoImNvbXBsZXhNb2R1bGUiLCBjb250ZXh0KTsKKyAgICBGdW5jdGlvbiogZnVu
Y3Rpb24gPSBGdW5jdGlvbjo6Q3JlYXRlKAorICAgICAgICBGdW5jdGlvblR5cGU6OmdldChpbnQz
MlR5LCBmYWxzZSksIEdsb2JhbFZhbHVlOjpFeHRlcm5hbExpbmthZ2UsICJjb21wbGV4RnVuY3Rp
b24iLCBtb2R1bGUpOworCisgICAgdmVjdG9yPGludDMyX3Q+IHZhclNsb3RzOworICAgIGZvciAo
dW5zaWduZWQgaSA9IG51bVZhcnM7IGktLTspCisgICAgICAgIHZhclNsb3RzLnB1c2hfYmFjayhp
KTsKKworICAgIEJhc2ljQmxvY2sqIGN1cnJlbnQgPSBCYXNpY0Jsb2NrOjpDcmVhdGUoY29udGV4
dCwgIiIsIGZ1bmN0aW9uKTsKKyAgICB1bmlxdWVfcHRyPElSQnVpbGRlcjw+PiBidWlsZGVyID0g
bWFrZV91bmlxdWU8SVJCdWlsZGVyPD4+KGN1cnJlbnQpOworCisgICAgdmVjdG9yPFZhbHVlKj4g
dmFyczsKKyAgICBmb3IgKGludDMyX3QmIHZhclNsb3QgOiB2YXJTbG90cykgeworICAgICAgICBW
YWx1ZSogcHRyID0gYnVpbGRlci0+Q3JlYXRlSW50VG9QdHIoYnVpbGRlci0+Z2V0SW50NjQoYml0
d2lzZV9jYXN0PGludHB0cl90PigmdmFyU2xvdCkpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQzMlR5LT5nZXRQb2ludGVyVG8oKSk7CisgICAgICAgIHZh
cnMucHVzaF9iYWNrKGJ1aWxkZXItPkNyZWF0ZUxvYWQocHRyKSk7CisgICAgfQorCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUNvbnN0cnVjdHM7ICsraSkgeworICAgICAgICBpZiAo
aSAmIDEpIHsKKyAgICAgICAgICAgIC8vIENvbnRyb2wgZmxvdyBkaWFtb25kLgorICAgICAgICAg
ICAgdW5zaWduZWQgcHJlZGljYXRlVmFySW5kZXggPSAoaSA+PiAxKSAlIG51bVZhcnM7CisgICAg
ICAgICAgICB1bnNpZ25lZCB0aGVuSW5jVmFySW5kZXggPSAoKGkgPj4gMSkgKyAxKSAlIG51bVZh
cnM7CisgICAgICAgICAgICB1bnNpZ25lZCBlbHNlSW5jVmFySW5kZXggPSAoKGkgPj4gMSkgKyAy
KSAlIG51bVZhcnM7CisKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIHRoZW5CbG9jayA9IEJhc2lj
QmxvY2s6OkNyZWF0ZShjb250ZXh0LCAiIiwgZnVuY3Rpb24pOworICAgICAgICAgICAgQmFzaWNC
bG9jayogZWxzZUJsb2NrID0gQmFzaWNCbG9jazo6Q3JlYXRlKGNvbnRleHQsICIiLCBmdW5jdGlv
bik7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBCYXNpY0Jsb2NrOjpD
cmVhdGUoY29udGV4dCwgIiIsIGZ1bmN0aW9uKTsKKworICAgICAgICAgICAgYnVpbGRlci0+Q3Jl
YXRlQ29uZEJyKAorICAgICAgICAgICAgICAgIGJ1aWxkZXItPkNyZWF0ZUlDbXBORSh2YXJzW3By
ZWRpY2F0ZVZhckluZGV4XSwgYnVpbGRlci0+Z2V0SW50MzIoMCkpLAorICAgICAgICAgICAgICAg
IHRoZW5CbG9jaywgZWxzZUJsb2NrKTsKKworICAgICAgICAgICAgYnVpbGRlciA9IG1ha2VfdW5p
cXVlPElSQnVpbGRlcjw+Pih0aGVuQmxvY2spOworICAgICAgICAgICAgVmFsdWUqIHRoZW5WYWx1
ZSA9IGJ1aWxkZXItPkNyZWF0ZUFkZCh2YXJzW3RoZW5JbmNWYXJJbmRleF0sIGJ1aWxkZXItPmdl
dEludDMyKDEpKTsKKyAgICAgICAgICAgIGJ1aWxkZXItPkNyZWF0ZUJyKGNvbnRpbnVhdGlvbik7
CisKKyAgICAgICAgICAgIGJ1aWxkZXIgPSBtYWtlX3VuaXF1ZTxJUkJ1aWxkZXI8Pj4oZWxzZUJs
b2NrKTsKKyAgICAgICAgICAgIFZhbHVlKiBlbHNlVmFsdWUgPSBidWlsZGVyLT5DcmVhdGVBZGQo
dmFyc1tlbHNlSW5jVmFySW5kZXhdLCBidWlsZGVyLT5nZXRJbnQzMigxKSk7CisgICAgICAgICAg
ICBidWlsZGVyLT5DcmVhdGVCcihjb250aW51YXRpb24pOworCisgICAgICAgICAgICBidWlsZGVy
ID0gbWFrZV91bmlxdWU8SVJCdWlsZGVyPD4+KGN1cnJlbnQgPSBjb250aW51YXRpb24pOworICAg
ICAgICAgICAgUEhJTm9kZSogdGhlblBoaSA9IGJ1aWxkZXItPkNyZWF0ZVBISShpbnQzMlR5LCAy
KTsKKyAgICAgICAgICAgIHRoZW5QaGktPmFkZEluY29taW5nKHRoZW5WYWx1ZSwgdGhlbkJsb2Nr
KTsKKyAgICAgICAgICAgIHRoZW5QaGktPmFkZEluY29taW5nKHZhcnNbdGhlbkluY1ZhckluZGV4
XSwgZWxzZUJsb2NrKTsKKyAgICAgICAgICAgIFBISU5vZGUqIGVsc2VQaGkgPSBidWlsZGVyLT5D
cmVhdGVQSEkoaW50MzJUeSwgMik7CisgICAgICAgICAgICBlbHNlUGhpLT5hZGRJbmNvbWluZyhl
bHNlVmFsdWUsIGVsc2VCbG9jayk7CisgICAgICAgICAgICBlbHNlUGhpLT5hZGRJbmNvbWluZyh2
YXJzW2Vsc2VJbmNWYXJJbmRleF0sIHRoZW5CbG9jayk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIHZhcnNbdGhlbkluY1ZhckluZGV4XSA9IHRoZW5QaGk7CisgICAgICAgICAgICB2YXJzW2Vs
c2VJbmNWYXJJbmRleF0gPSBlbHNlUGhpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
Ly8gTG9vcC4KKworICAgICAgICAgICAgQmFzaWNCbG9jayogbG9vcEJvZHkgPSBCYXNpY0Jsb2Nr
OjpDcmVhdGUoY29udGV4dCwgIiIsIGZ1bmN0aW9uKTsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sq
IGNvbnRpbnVhdGlvbiA9IEJhc2ljQmxvY2s6OkNyZWF0ZShjb250ZXh0LCAiIiwgZnVuY3Rpb24p
OworCisgICAgICAgICAgICBWYWx1ZSogc3RhcnRJbmRleCA9IHZhcnNbKGkgPj4gMSkgJSBudW1W
YXJzXTsKKyAgICAgICAgICAgIFZhbHVlKiBzdGFydFN1bSA9IGJ1aWxkZXItPmdldEludDMyKDAp
OworICAgICAgICAgICAgYnVpbGRlci0+Q3JlYXRlQ29uZEJyKAorICAgICAgICAgICAgICAgIGJ1
aWxkZXItPkNyZWF0ZUlDbXBORShzdGFydEluZGV4LCBidWlsZGVyLT5nZXRJbnQzMigwKSksCisg
ICAgICAgICAgICAgICAgbG9vcEJvZHksIGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIGJ1
aWxkZXIgPSBtYWtlX3VuaXF1ZTxJUkJ1aWxkZXI8Pj4obG9vcEJvZHkpOworICAgICAgICAgICAg
UEhJTm9kZSogYm9keUluZGV4ID0gYnVpbGRlci0+Q3JlYXRlUEhJKGludDMyVHksIDIpOworICAg
ICAgICAgICAgUEhJTm9kZSogYm9keVN1bSA9IGJ1aWxkZXItPkNyZWF0ZVBISShpbnQzMlR5LCAy
KTsKKyAgICAgICAgICAgIGJvZHlJbmRleC0+YWRkSW5jb21pbmcoc3RhcnRJbmRleCwgY3VycmVu
dCk7CisgICAgICAgICAgICBib2R5U3VtLT5hZGRJbmNvbWluZyhzdGFydFN1bSwgY3VycmVudCk7
CisKKyAgICAgICAgICAgIFZhbHVlKiBuZXdCb2R5SW5kZXggPSBidWlsZGVyLT5DcmVhdGVTdWIo
Ym9keUluZGV4LCBidWlsZGVyLT5nZXRJbnQzMigxKSk7CisgICAgICAgICAgICBWYWx1ZSogbmV3
Qm9keVN1bSA9IGJ1aWxkZXItPkNyZWF0ZUFkZCgKKyAgICAgICAgICAgICAgICBib2R5U3VtLAor
ICAgICAgICAgICAgICAgIGJ1aWxkZXItPkNyZWF0ZUxvYWQoCisgICAgICAgICAgICAgICAgICAg
IGJ1aWxkZXItPkNyZWF0ZUludFRvUHRyKAorICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRl
ci0+Q3JlYXRlQWRkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXItPmdldElu
dDY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnZhclNsb3RzWzBdKSksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnVpbGRlci0+Q3JlYXRlU2hsKAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBidWlsZGVyLT5DcmVhdGVaRXh0KAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnVpbGRlci0+Q3JlYXRlQW5kKAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5ld0JvZHlJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBidWlsZGVyLT5nZXRJbnQzMihudW1WYXJzIC0gMSkpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZTo6Z2V0SW50NjRUeShjb250ZXh0KSksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXItPmdldEludDY0KDIpKSksCisg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQzMlR5LT5nZXRQb2ludGVyVG8oKSkpKTsKKyAgICAg
ICAgICAgIGJvZHlJbmRleC0+YWRkSW5jb21pbmcobmV3Qm9keUluZGV4LCBsb29wQm9keSk7Cisg
ICAgICAgICAgICBib2R5U3VtLT5hZGRJbmNvbWluZyhuZXdCb2R5U3VtLCBsb29wQm9keSk7Cisg
ICAgICAgICAgICBidWlsZGVyLT5DcmVhdGVDb25kQnIoCisgICAgICAgICAgICAgICAgYnVpbGRl
ci0+Q3JlYXRlSUNtcE5FKG5ld0JvZHlJbmRleCwgYnVpbGRlci0+Z2V0SW50MzIoMCkpLAorICAg
ICAgICAgICAgICAgIGxvb3BCb2R5LCBjb250aW51YXRpb24pOworCisgICAgICAgICAgICBidWls
ZGVyID0gbWFrZV91bmlxdWU8SVJCdWlsZGVyPD4+KGNvbnRpbnVhdGlvbik7CisgICAgICAgICAg
ICBQSElOb2RlKiBmaW5hbFN1bSA9IGJ1aWxkZXItPkNyZWF0ZVBISShpbnQzMlR5LCAyKTsKKyAg
ICAgICAgICAgIGZpbmFsU3VtLT5hZGRJbmNvbWluZyhzdGFydFN1bSwgY3VycmVudCk7CisgICAg
ICAgICAgICBmaW5hbFN1bS0+YWRkSW5jb21pbmcobmV3Qm9keVN1bSwgbG9vcEJvZHkpOworICAg
ICAgICAgICAgY3VycmVudCA9IGNvbnRpbnVhdGlvbjsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGJ1aWxkZXItPkNyZWF0ZVJldCh2YXJzWzBdKTsKKyAgICBidWlsZGVyID0gbnVsbHB0cjsKKwor
ICAgIHVuaXF1ZV9wdHI8RXhlY3V0aW9uRW5naW5lPiBFRTsKKyAgICB7CisgICAgICAgIHN0ZDo6
c3RyaW5nIGVycm9yTWVzc2FnZTsKKyAgICAgICAgRW5naW5lQnVpbGRlciBidWlsZGVyKChzdGQ6
OnVuaXF1ZV9wdHI8TW9kdWxlPihtb2R1bGUpKSk7CisgICAgICAgIGJ1aWxkZXIuc2V0TUFyY2go
IiIpOworICAgICAgICBidWlsZGVyLnNldE1DUFUoc3lzOjpnZXRIb3N0Q1BVTmFtZSgpKTsKKyAg
ICAgICAgYnVpbGRlci5zZXRNQXR0cnMoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+KCkpOworICAg
ICAgICBidWlsZGVyLnNldFJlbG9jYXRpb25Nb2RlbChSZWxvYzo6RGVmYXVsdCk7CisgICAgICAg
IGJ1aWxkZXIuc2V0Q29kZU1vZGVsKENvZGVNb2RlbDo6SklURGVmYXVsdCk7CisgICAgICAgIGJ1
aWxkZXIuc2V0RXJyb3JTdHIoJmVycm9yTWVzc2FnZSk7CisgICAgICAgIGJ1aWxkZXIuc2V0RW5n
aW5lS2luZChFbmdpbmVLaW5kOjpKSVQpOworCisgICAgICAgIGJ1aWxkZXIuc2V0T3B0TGV2ZWwo
Q29kZUdlbk9wdDo6RGVmYXVsdCk7CisgICAgICAgIAorICAgICAgICB7CisgICAgICAgICAgICBU
YXJnZXRPcHRpb25zIE9wdGlvbnM7CisgICAgICAgICAgICBPcHRpb25zLkZsb2F0QUJJVHlwZSA9
IEZsb2F0QUJJOjpEZWZhdWx0OworCisgICAgICAgICAgICBidWlsZGVyLnNldFRhcmdldE9wdGlv
bnMoT3B0aW9ucyk7CisgICAgICAgIH0KKworICAgICAgICBFRSA9IHVuaXF1ZV9wdHI8RXhlY3V0
aW9uRW5naW5lPihidWlsZGVyLmNyZWF0ZSgpKTsKKyAgICB9CisgICAgCisgICAgbGVnYWN5OjpQ
YXNzTWFuYWdlciBwYXNzTWFuYWdlcjsKKyAgICAvL3Bhc3NNYW5hZ2VyLmFkZChuZXcgRGF0YUxh
eW91dCgqRUUtPmdldERhdGFMYXlvdXQoKSkpOworICAgIHBhc3NNYW5hZ2VyLmFkZChjcmVhdGVQ
cm9tb3RlTWVtb3J5VG9SZWdpc3RlclBhc3MoKSk7CisgICAgcGFzc01hbmFnZXIuYWRkKGNyZWF0
ZUNvbnN0YW50UHJvcGFnYXRpb25QYXNzKCkpOworICAgIHBhc3NNYW5hZ2VyLmFkZChjcmVhdGVJ
bnN0cnVjdGlvbkNvbWJpbmluZ1Bhc3MoKSk7CisgICAgcGFzc01hbmFnZXIuYWRkKGNyZWF0ZUJh
c2ljQWxpYXNBbmFseXNpc1Bhc3MoKSk7CisgICAgcGFzc01hbmFnZXIuYWRkKGNyZWF0ZVR5cGVC
YXNlZEFsaWFzQW5hbHlzaXNQYXNzKCkpOworICAgIHBhc3NNYW5hZ2VyLmFkZChjcmVhdGVHVk5Q
YXNzKCkpOworICAgIHBhc3NNYW5hZ2VyLmFkZChjcmVhdGVDRkdTaW1wbGlmaWNhdGlvblBhc3Mo
KSk7CisgICAgcGFzc01hbmFnZXIucnVuKCptb2R1bGUpOworCisgICAgRUUtPmdldEZ1bmN0aW9u
QWRkcmVzcyhmdW5jdGlvbi0+Z2V0TmFtZSgpKTsKK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNw
YWNlCisKK2ludCBtYWluKGludCBjLCBjaGFyKiogdikKK3sKKyAgICBJbml0aWFsaXplQWxsVGFy
Z2V0cygpOworICAgIEluaXRpYWxpemVBbGxUYXJnZXRNQ3MoKTsKKyAgICBJbml0aWFsaXplQWxs
QXNtUHJpbnRlcnMoKTsKKyAgICBJbml0aWFsaXplQWxsQXNtUGFyc2VycygpOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDE7IGkgPD0gMzsgKytpKSB7CisgICAgICAgIHByaW50ZigiRG9pbmc6IHJ1
big2NCwgJXUpXG4iLCBpICogMTI4KTsKKyAgICAgICAgZG91YmxlIGJlZm9yZSA9IG1vbm90b25p
Y2FsbHlJbmNyZWFzaW5nVGltZU1TKCk7CisgICAgICAgIHJ1big2NCwgMTI4ICogaSk7CisgICAg
ICAgIGRvdWJsZSBhZnRlciA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZU1TKCk7CisgICAg
ICAgIHByaW50ZigiVGhhdCB0b29rICVsZiBtcy5cbiIsIGFmdGVyIC0gYmVmb3JlKTsKKyAgICB9
CisgICAgcmV0dXJuIDA7Cit9CisK
</data>
<flag name="review"
          id="289618"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>