<?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>11461</bug_id>
          
          <creation_ts>2006-10-30 13:06:36 -0800</creation_ts>
          <short_desc>HitTestResult should be split into HitTestRequest and HitTestResult</short_desc>
          <delta_ts>2006-10-31 13:57:35 -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>Layout and Rendering</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Beth Dakin">bdakin</reporter>
          <assigned_to name="Beth Dakin">bdakin</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>48576</commentid>
    <comment_count>0</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2006-10-30 13:06:36 -0800</bug_when>
    <thetext>The boolean member variables of HitTestResult (readonly, active, and mouseMove) are not a part of the RESULT of the hit test. Rather, they are more like conditions for conducting the hit test. So it does not really make sense that they are part of the HitTestResult class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>48577</commentid>
    <comment_count>1</comment_count>
      <attachid>11289</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2006-10-30 13:10:34 -0800</bug_when>
    <thetext>Created attachment 11289
Creates a struct for the request

The thing that I dislike about this patch is that it adds a new boolean parameter to all of the nodeAtPoint()s. The only nodeAtPoint() implementation to use any of the fields of HitTestRequst is RenderFrameSet::nodeAtPoint() which asks about readonly. So instead of sending the entire HitTestRequest into all of the nodeAtPoint()s, I just sent the readonly value. I wish I didn&apos;t have to do that since no one else needs it, but it doesn&apos;t seem like there is another way. Or is there??</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>48241</commentid>
    <comment_count>2</comment_count>
      <attachid>11289</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2006-10-31 11:27:16 -0800</bug_when>
    <thetext>Comment on attachment 11289
Creates a struct for the request

 I&apos;d suggest passing the whole HitTestRequest to the nodeAtPoint methods even though they only need the one bool, just for consistency

r=me either way</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>48255</commentid>
    <comment_count>3</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2006-10-31 13:57:35 -0800</bug_when>
    <thetext>Committed with r17494.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11289</attachid>
            <date>2006-10-30 13:10:34 -0800</date>
            <delta_ts>2006-10-31 11:27:16 -0800</delta_ts>
            <desc>Creates a struct for the request</desc>
            <filename>hitTestREQUEST.txt</filename>
            <type>text/plain</type>
            <size>58066</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9XZWJWaWV3L1dlYkhUTUxWaWV3Lm0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L1dlYlZpZXcvV2ViSFRNTFZpZXcubQkocmV2aXNpb24gMTc0MzYpCisrKyBXZWJLaXQvV2ViVmll
dy9XZWJIVE1MVmlldy5tCSh3b3JraW5nIGNvcHkpCkBAIC02MDQ0LDcgKzYwNDQsNyBAQAogLSAo
TlNEaWN0aW9uYXJ5ICopZWxlbWVudEF0UG9pbnQ6KE5TUG9pbnQpcG9pbnQgYWxsb3dTaGFkb3dD
b250ZW50OihCT09MKWFsbG93OwogewogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW3NlbGYgX2Zy
YW1lXSk7Ci0gICAgSGl0VGVzdFJlc3VsdCByZXN1bHQoSW50UG9pbnQocG9pbnQpLCB0cnVlLCBm
YWxzZSk7CisgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBIaXRUZXN0UmVzdWx0KEludFBvaW50
KHBvaW50KSk7CiAgICAgaWYgKGZyYW1lLT5yZW5kZXJlcigpKQogICAgICAgICByZXN1bHQgPSBm
cmFtZS0+aGl0VGVzdFJlc3VsdEF0UG9pbnQoSW50UG9pbnQocG9pbnQpLCBhbGxvdyk7CiAgICAg
cmV0dXJuIFtbW1dlYkVsZW1lbnREaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aEhpdFRlc3RSZXN1
bHQ6cmVzdWx0XSBhdXRvcmVsZWFzZV07CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVU
ZXh0Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5o
CShyZXZpc2lvbiAxNzQzNikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAko
d29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQAogICAgIHZvaWQgc2VsZWN0aW9uU3RhcnRF
bmQoaW50JiBzUG9zLCBpbnQmIGVQb3MpOwogICAgIAogICAgIHZpcnR1YWwgdm9pZCBwYWludChS
ZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgaW50IHR4LCBpbnQgdHkpOwotICAgIHZpcnR1YWwg
Ym9vbCBub2RlQXRQb2ludChIaXRUZXN0UmVzdWx0JiwgaW50LCBpbnQsIGludCwgaW50KTsKKyAg
ICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoSGl0VGVzdFJlc3VsdCYsIGludCwgaW50LCBpbnQs
IGludCwgYm9vbCk7CiAKICAgICBSZW5kZXJUZXh0KiB0ZXh0T2JqZWN0KCkgY29uc3Q7CiAKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gMTc0MzYpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0
Miw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTE9MaXN0RWxlbWVu
dC5oIgogI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgogI2lu
Y2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJQb3NpdGlvbi5oIgogI2luY2x1ZGUg
IlJlbmRlckFyZW5hLmgiCkBAIC0yNTM0LDI1ICsyNTM1LDI1IEBACiAgICAgICAgIGNvbnRpbnVh
dGlvbigpLT51cGRhdGVEcmFnU3RhdGUoZHJhZ09uKTsKIH0KIAotYm9vbCBSZW5kZXJPYmplY3Q6
OmhpdFRlc3QoSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50
IHR5LCBIaXRUZXN0RmlsdGVyIGhpdFRlc3RGaWx0ZXIpCitib29sIFJlbmRlck9iamVjdDo6aGl0
VGVzdChIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHks
IGJvb2wgcmVhZG9ubHksIEhpdFRlc3RGaWx0ZXIgaGl0VGVzdEZpbHRlcikKIHsKICAgICBib29s
IGluc2lkZSA9IGZhbHNlOwogICAgIGlmIChoaXRUZXN0RmlsdGVyICE9IEhpdFRlc3RTZWxmKSB7
CiAgICAgICAgIC8vIEZpcnN0IHRlc3QgdGhlIGZvcmVncm91bmQgbGF5ZXIgKGxpbmVzIGFuZCBp
bmxpbmVzKS4KLSAgICAgICAgaW5zaWRlID0gbm9kZUF0UG9pbnQocmVzdWx0LCB4LCB5LCB0eCwg
dHksIEhpdFRlc3RGb3JlZ3JvdW5kKTsKKyAgICAgICAgaW5zaWRlID0gbm9kZUF0UG9pbnQocmVz
dWx0LCB4LCB5LCB0eCwgdHksIEhpdFRlc3RGb3JlZ3JvdW5kLCByZWFkb25seSk7CiAgICAgICAg
IAogICAgICAgICAvLyBUZXN0IGZsb2F0cyBuZXh0LgogICAgICAgICBpZiAoIWluc2lkZSkKLSAg
ICAgICAgICAgIGluc2lkZSA9IG5vZGVBdFBvaW50KHJlc3VsdCwgeCwgeSwgdHgsIHR5LCBIaXRU
ZXN0RmxvYXQpOworICAgICAgICAgICAgaW5zaWRlID0gbm9kZUF0UG9pbnQocmVzdWx0LCB4LCB5
LCB0eCwgdHksIEhpdFRlc3RGbG9hdCwgcmVhZG9ubHkpOwogCiAgICAgICAgIC8vIEZpbmFsbHkg
dGVzdCB0byBzZWUgaWYgdGhlIG1vdXNlIGlzIGluIHRoZSBiYWNrZ3JvdW5kICh3aXRoaW4gYSBj
aGlsZCBibG9jaydzIGJhY2tncm91bmQpLgogICAgICAgICBpZiAoIWluc2lkZSkKLSAgICAgICAg
ICAgIGluc2lkZSA9IG5vZGVBdFBvaW50KHJlc3VsdCwgeCwgeSwgdHgsIHR5LCBIaXRUZXN0Q2hp
bGRCbG9ja0JhY2tncm91bmRzKTsKKyAgICAgICAgICAgIGluc2lkZSA9IG5vZGVBdFBvaW50KHJl
c3VsdCwgeCwgeSwgdHgsIHR5LCBIaXRUZXN0Q2hpbGRCbG9ja0JhY2tncm91bmRzLCByZWFkb25s
eSk7CiAgICAgfQogICAgIAogICAgIC8vIFNlZSBpZiB0aGUgbW91c2UgaXMgaW5zaWRlIHVzIGJ1
dCBub3QgYW55IG9mIG91ciBkZXNjZW5kYW50cwogICAgIGlmIChoaXRUZXN0RmlsdGVyICE9IEhp
dFRlc3REZXNjZW5kYW50cyAmJiAhaW5zaWRlKQotICAgICAgICBpbnNpZGUgPSBub2RlQXRQb2lu
dChyZXN1bHQsIHgsIHksIHR4LCB0eSwgSGl0VGVzdEJsb2NrQmFja2dyb3VuZCk7CisgICAgICAg
IGluc2lkZSA9IG5vZGVBdFBvaW50KHJlc3VsdCwgeCwgeSwgdHgsIHR5LCBIaXRUZXN0QmxvY2tC
YWNrZ3JvdW5kLCByZWFkb25seSk7CiAgICAgICAgIAogICAgIHJldHVybiBpbnNpZGU7CiB9CkBA
IC0yNTc5LDcgKzI1ODAsNyBAQAogfQogCiBib29sIFJlbmRlck9iamVjdDo6bm9kZUF0UG9pbnQo
SGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQgX3gsIGludCBfeSwgaW50IF90eCwgaW50IF90eSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rp
b24pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGl0VGVzdEFjdGlvbiBoaXRUZXN0
QWN0aW9uLCBib29sIHJlYWRvbmx5KQogewogICAgIHJldHVybiBmYWxzZTsKIH0KSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGbG93LmgJKHJldmlzaW9uIDE3NDM2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRmxvdy5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3IEBACiAgICAgdmlydHVh
bCB2b2lkIGRpcnR5TGluZUJveGVzKGJvb2wgZnVsbExheW91dCwgYm9vbCBpc1Jvb3RMaW5lQm94
ID0gZmFsc2UpOwogICAgIAogICAgIHZvaWQgcGFpbnRMaW5lcyhQYWludEluZm8mLCBpbnQgX3R4
LCBpbnQgX3R5KTsKLSAgICBib29sIGhpdFRlc3RMaW5lcyhIaXRUZXN0UmVzdWx0JiwgaW50IHgs
IGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CisgICAgYm9vbCBoaXRUZXN0
TGluZXMoSGl0VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRl
c3RBY3Rpb24sIGJvb2wpOwogCiAgICAgdmlydHVhbCBJbnRSZWN0IGdldEFic29sdXRlUmVwYWlu
dFJlY3QoKTsKICAgICAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcAkocmV2aXNpb24gMTc0
MzYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNDksMTIgKzE0OSwxMiBAQAogICAgIH0KIH0KIAotYm9vbCBJbmxpbmVCb3g6Om5vZGVBdFBv
aW50KEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSkK
K2Jvb2wgSW5saW5lQm94Ojpub2RlQXRQb2ludChIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCB4
LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIGJvb2wgcmVhZG9ubHkpCiB7CiAgICAgLy8gSGl0IHRl
c3QgYWxsIHBoYXNlcyBvZiByZXBsYWNlZCBlbGVtZW50cyBhdG9taWNhbGx5LCBhcyB0aG91Z2gg
dGhlIHJlcGxhY2VkIGVsZW1lbnQgZXN0YWJsaXNoZWQgaXRzCiAgICAgLy8gb3duIHN0YWNraW5n
IGNvbnRleHQuICAoU2VlIEFwcGVuZGl4IEUuMiwgc2VjdGlvbiA2LjQgb24gaW5saW5lIGJsb2Nr
L3RhYmxlIGVsZW1lbnRzIGluIHRoZSBDU1MyLjEKICAgICAvLyBzcGVjaWZpY2F0aW9uLikKLSAg
ICByZXR1cm4gb2JqZWN0KCktPmhpdFRlc3QocmVzdWx0LCB4LCB5LCB0eCwgdHkpOworICAgIHJl
dHVybiBvYmplY3QoKS0+aGl0VGVzdChyZXN1bHQsIHgsIHksIHR4LCB0eSwgcmVhZG9ubHkpOwog
fQogCiBib29sIElubGluZUJveDo6aXNDaGlsZE9mUGFyZW50KCkKSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveC5oCShyZXZpc2lvbiAxNzQzNikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBACiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0
U3R5bGUoUmVuZGVyU3R5bGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwg
aW50IF90eCwgaW50IF90eSk7Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KEhpdFRlc3RS
ZXN1bHQmLCBpbnQgX3gsIGludCBfeSwgaW50IF90eCwgaW50IF90eSwgSGl0VGVzdEFjdGlvbik7
CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KEhpdFRlc3RSZXN1bHQmLCBpbnQgX3gsIGlu
dCBfeSwgaW50IF90eCwgaW50IF90eSwgSGl0VGVzdEFjdGlvbiwgYm9vbCk7CiAKICAgICB2aXJ0
dWFsIHZvaWQgZGVzdHJveSgpOwogICAgIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RnJhbWVTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1l
U2V0LmNwcAkocmV2aXNpb24gMTc0MzYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFt
ZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDE0ICs3NiwxNCBAQAogfQogCiBib29sIFJl
bmRlckZyYW1lU2V0Ojpub2RlQXRQb2ludChIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCBfeCwg
aW50IF95LCBpbnQgX3R4LCBpbnQgX3R5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uLCBib29sIHJlYWRvbmx5KQogewog
ICAgIGlmIChoaXRUZXN0QWN0aW9uICE9IEhpdFRlc3RGb3JlZ3JvdW5kKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBib29sIGluc2lkZSA9IFJlbmRlckNvbnRhaW5lcjo6bm9kZUF0UG9p
bnQocmVzdWx0LCBfeCwgX3ksIF90eCwgX3R5LCBoaXRUZXN0QWN0aW9uKSB8fCAKKyAgICBib29s
IGluc2lkZSA9IFJlbmRlckNvbnRhaW5lcjo6bm9kZUF0UG9pbnQocmVzdWx0LCBfeCwgX3ksIF90
eCwgX3R5LCBoaXRUZXN0QWN0aW9uLCByZWFkb25seSkgfHwgCiAgICAgICAgICAgICAgICAgICBt
X3Jlc2l6aW5nIHx8IGNhblJlc2l6ZShfeCwgX3kpOwotICAgIGlmIChpbnNpZGUgJiYgZWxlbWVu
dCgpICYmICFlbGVtZW50KCktPm5vUmVzaXplKCkgJiYgIXJlc3VsdC5yZWFkb25seSgpICYmICFy
ZXN1bHQuaW5uZXJOb2RlKCkpIHsKKyAgICBpZiAoaW5zaWRlICYmIGVsZW1lbnQoKSAmJiAhZWxl
bWVudCgpLT5ub1Jlc2l6ZSgpICYmICFyZWFkb25seSAmJiAhcmVzdWx0LmlubmVyTm9kZSgpKSB7
CiAgICAgICAgIHJlc3VsdC5zZXRJbm5lck5vZGUoZWxlbWVudCgpKTsKICAgICAgICAgcmVzdWx0
LnNldElubmVyTm9uU2hhcmVkTm9kZShlbGVtZW50KCkpOwogICAgIH0KSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZsb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZsb3cuY3BwCShyZXZpc2lvbiAxNzQzNikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckZsb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTYsNyArNDE2LDcgQEAKICAgICB9CiB9
CiAKLWJvb2wgUmVuZGVyRmxvdzo6aGl0VGVzdExpbmVzKEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwg
aW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9u
KQorYm9vbCBSZW5kZXJGbG93OjpoaXRUZXN0TGluZXMoSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBp
bnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24s
IGJvb2wgcmVhZG9ubHkpCiB7CiAgICAgaWYgKGhpdFRlc3RBY3Rpb24gIT0gSGl0VGVzdEZvcmVn
cm91bmQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTQ0MSw3ICs0NDEsNyBAQAogICAgIC8v
IGJhc2VkIG9mZiBwb3NpdGlvbnMgb2Ygb3VyIGZpcnN0IGxpbmUgYm94IG9yIG91ciBsYXN0IGxp
bmUgYm94LgogICAgIGZvciAoSW5saW5lRmxvd0JveCogY3VyciA9IGxhc3RMaW5lQm94KCk7IGN1
cnI7IGN1cnIgPSBjdXJyLT5wcmV2Rmxvd0JveCgpKSB7CiAgICAgICAgIGlmICh5ID49IHR5ICsg
Y3Vyci0+cm9vdCgpLT50b3BPdmVyZmxvdygpICYmIHkgPCB0eSArIGN1cnItPnJvb3QoKS0+Ym90
dG9tT3ZlcmZsb3coKSkgewotICAgICAgICAgICAgYm9vbCBpbnNpZGUgPSBjdXJyLT5ub2RlQXRQ
b2ludChyZXN1bHQsIHgsIHksIHR4LCB0eSk7CisgICAgICAgICAgICBib29sIGluc2lkZSA9IGN1
cnItPm5vZGVBdFBvaW50KHJlc3VsdCwgeCwgeSwgdHgsIHR5LCByZWFkb25seSk7CiAgICAgICAg
ICAgICBpZiAoaW5zaWRlKSB7CiAgICAgICAgICAgICAgICAgc2V0SW5uZXJOb2RlKHJlc3VsdCk7
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuaAkocmV2aXNpb24gMTc0MzYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsNyBAQAogY2xhc3MgSFRNTEFyZWFFbGVtZW50
OwogY2xhc3MgSW5saW5lQm94OwogY2xhc3MgSW5saW5lRmxvd0JveDsKK2NsYXNzIEhpdFRlc3RS
ZXF1ZXN0OwogY2xhc3MgSGl0VGVzdFJlc3VsdDsKIGNsYXNzIFBsYXRmb3JtU2Nyb2xsYmFyOwog
Y2xhc3MgUG9zaXRpb247CkBAIC01MDAsOCArNTAxLDggQEAKICAgICAgICAgUmVwYWludEluZm8o
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBJbnRSZWN0JiByKSA6bV9vYmplY3QobyksIG1fcmVwYWlu
dFJlY3Qocikge30KICAgICB9OwogICAgIAotICAgIGJvb2wgaGl0VGVzdChIaXRUZXN0UmVzdWx0
JiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEZpbHRlciBoaXRUZXN0Rmls
dGVyID0gSGl0VGVzdEFsbCk7Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KEhpdFRlc3RS
ZXN1bHQmLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKKyAg
ICBib29sIGhpdFRlc3QoSGl0VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQg
dHksIGJvb2wgcmVhZG9ubHksIEhpdFRlc3RGaWx0ZXIgaGl0VGVzdEZpbHRlciA9IEhpdFRlc3RB
bGwpOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChIaXRUZXN0UmVzdWx0JiwgaW50IHgs
IGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiwgYm9vbCk7CiAgICAgdm9pZCBz
ZXRJbm5lck5vZGUoSGl0VGVzdFJlc3VsdCYpOwogCiAgICAgdmlydHVhbCBWaXNpYmxlUG9zaXRp
b24gcG9zaXRpb25Gb3JDb29yZGluYXRlcyhpbnQgeCwgaW50IHkpOwpJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gMTc0MzYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDcgQEAKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJIVE1MTWFycXVlZUVsZW1lbnQuaCIKICNp
bmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgogI2luY2x1
ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJPdmVyZmxvd0V2ZW50LmgiCiAjaW5jbHVk
ZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCkBAIC04NjUsOCArODY2LDkgQEAKICAgICBJbnRQb2lu
dCBjdXJyZW50UG9zID0gY3VycmVudEZyYW1lLT52aWV3KCktPndpbmRvd1RvQ29udGVudHMoY3Vy
cmVudEZyYW1lLT52aWV3KCktPmN1cnJlbnRNb3VzZVBvc2l0aW9uKCkpOwogICAgIAogICAgIGlm
IChjdXJyZW50RnJhbWUtPm1vdXNlRG93bk1heVN0YXJ0U2VsZWN0KCkpIHsKLSAgICAgICAgSGl0
VGVzdFJlc3VsdCByZXN1bHQoY3VycmVudFBvcywgdHJ1ZSwgZmFsc2UsIHRydWUpOwotICAgICAg
ICBpZiAoaGl0VGVzdChyZXN1bHQpKSB7CisgICAgICAgIEhpdFRlc3RSZXF1ZXN0IHJlcXVlc3Qo
dHJ1ZSwgZmFsc2UsIHRydWUpOworICAgICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdChjdXJyZW50
UG9zKTsKKyAgICAgICAgaWYgKGhpdFRlc3QocmVxdWVzdCwgcmVzdWx0KSkgewogICAgICAgICAg
ICAgVmlzaWJsZVBvc2l0aW9uIHBvcyhyZXN1bHQuaW5uZXJOb2RlKCktPnJlbmRlcmVyKCktPnBv
c2l0aW9uRm9yUG9pbnQoY3VycmVudFBvcykpOwogICAgICAgICAgICAgY3VycmVudEZyYW1lLT51
cGRhdGVTZWxlY3Rpb25Gb3JNb3VzZURyYWdPdmVyUG9zaXRpb24ocG9zKTsKICAgICAgICAgfQpA
QCAtMTQ3MSwxNCArMTQ3MywxNCBAQAogICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHJlbmRl
cmVyLT5kb2N1bWVudCgpLT5mcmFtZSgpLT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdCgpKTsK
IH0KIAotYm9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdChIaXRUZXN0UmVzdWx0JiByZXN1bHQpCiti
b29sIFJlbmRlckxheWVyOjpoaXRUZXN0KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBI
aXRUZXN0UmVzdWx0JiByZXN1bHQpCiB7CiAgICAgcmVuZGVyZXIoKS0+ZG9jdW1lbnQoKS0+dXBk
YXRlTGF5b3V0KCk7CiAgICAgCiAgICAgSW50UmVjdCBib3VuZHNSZWN0KG1feCwgbV95LCB3aWR0
aCgpLCBoZWlnaHQoKSk7CiAgICAgYm91bmRzUmVjdC5pbnRlcnNlY3QoZnJhbWVWaXNpYmxlUmVj
dChyZW5kZXJlcigpKSk7CiAKLSAgICBSZW5kZXJMYXllciogaW5zaWRlTGF5ZXIgPSBoaXRUZXN0
TGF5ZXIodGhpcywgcmVzdWx0LCBib3VuZHNSZWN0KTsKKyAgICBSZW5kZXJMYXllciogaW5zaWRl
TGF5ZXIgPSBoaXRUZXN0TGF5ZXIodGhpcywgcmVxdWVzdCwgcmVzdWx0LCBib3VuZHNSZWN0KTsK
IAogICAgIC8vIE5vdyBkZXRlcm1pbmUgaWYgdGhlIHJlc3VsdCBpcyBpbnNpZGUgYW4gYW5jaG9y
OyBtYWtlIHN1cmUgYW4gaW1hZ2UgbWFwIHdpbnMgaWYKICAgICAvLyBpdCBhbHJlYWR5IHNldCBV
UkxFbGVtZW50IGFuZCBvbmx5IHVzZSB0aGUgaW5uZXJtb3N0LgpAQCAtMTQ5MCwxNCArMTQ5Miwx
NSBAQAogICAgIH0KIAogICAgIC8vIE5leHQgc2V0IHVwIHRoZSBjb3JyZWN0IDpob3Zlci86YWN0
aXZlIHN0YXRlIGFsb25nIHRoZSBuZXcgY2hhaW4uCi0gICAgdXBkYXRlSG92ZXJBY3RpdmVTdGF0
ZShyZXN1bHQpOworICAgIHVwZGF0ZUhvdmVyQWN0aXZlU3RhdGUocmVxdWVzdCwgcmVzdWx0KTsK
ICAgICAKICAgICAvLyBOb3cgcmV0dXJuIHdoZXRoZXIgd2Ugd2VyZSBpbnNpZGUgdGhpcyBsYXll
ciAodGhpcyB3aWxsIGFsd2F5cyBiZSB0cnVlIGZvciB0aGUgcm9vdAogICAgIC8vIGxheWVyKS4K
ICAgICByZXR1cm4gaW5zaWRlTGF5ZXI7CiB9CiAKLVJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6
aGl0VGVzdExheWVyKFJlbmRlckxheWVyKiByb290TGF5ZXIsIEhpdFRlc3RSZXN1bHQmIHJlc3Vs
dCwgY29uc3QgSW50UmVjdCYgaGl0VGVzdFJlY3QpCitSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6
OmhpdFRlc3RMYXllcihSZW5kZXJMYXllciogcm9vdExheWVyLCBjb25zdCBIaXRUZXN0UmVxdWVz
dCYgcmVxdWVzdCwKKyAgICBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFJlY3QmIGhp
dFRlc3RSZWN0KQogewogICAgIC8vIENhbGN1bGF0ZSB0aGUgY2xpcCByZWN0cyB3ZSBzaG91bGQg
dXNlLgogICAgIEludFJlY3QgbGF5ZXJCb3VuZHM7CkBAIC0xNTE4LDcgKzE1MjEsNyBAQAogICAg
IC8vIHotaW5kZXguCiAgICAgaWYgKG1fcG9zWk9yZGVyTGlzdCkgewogICAgICAgICBmb3IgKGlu
dCBpID0gbV9wb3NaT3JkZXJMaXN0LT5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewotICAgICAg
ICAgICAgaW5zaWRlTGF5ZXIgPSBtX3Bvc1pPcmRlckxpc3QtPmF0KGkpLT5oaXRUZXN0TGF5ZXIo
cm9vdExheWVyLCByZXN1bHQsIGhpdFRlc3RSZWN0KTsKKyAgICAgICAgICAgIGluc2lkZUxheWVy
ID0gbV9wb3NaT3JkZXJMaXN0LT5hdChpKS0+aGl0VGVzdExheWVyKHJvb3RMYXllciwgcmVxdWVz
dCwgcmVzdWx0LCBoaXRUZXN0UmVjdCk7CiAgICAgICAgICAgICBpZiAoaW5zaWRlTGF5ZXIpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGluc2lkZUxheWVyOwogICAgICAgICB9CkBAIC0xNTI3LDcg
KzE1MzAsNyBAQAogICAgIC8vIE5vdyBjaGVjayBvdXIgb3ZlcmZsb3cgb2JqZWN0cy4KICAgICBp
ZiAobV9vdmVyZmxvd0xpc3QpIHsKICAgICAgICAgZm9yIChpbnQgaSA9IG1fb3ZlcmZsb3dMaXN0
LT5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICAgICAgaW5zaWRlTGF5ZXIgPSBt
X292ZXJmbG93TGlzdC0+YXQoaSktPmhpdFRlc3RMYXllcihyb290TGF5ZXIsIHJlc3VsdCwgaGl0
VGVzdFJlY3QpOworICAgICAgICAgICAgaW5zaWRlTGF5ZXIgPSBtX292ZXJmbG93TGlzdC0+YXQo
aSktPmhpdFRlc3RMYXllcihyb290TGF5ZXIsIHJlcXVlc3QsIHJlc3VsdCwgaGl0VGVzdFJlY3Qp
OwogICAgICAgICAgICAgaWYgKGluc2lkZUxheWVyKQogICAgICAgICAgICAgICAgIHJldHVybiBp
bnNpZGVMYXllcjsKICAgICAgICAgfQpAQCAtMTUzNyw3ICsxNTQwLDggQEAKICAgICBpZiAoZmdS
ZWN0LmNvbnRhaW5zKHJlc3VsdC5wb2ludCgpKSAmJiAKICAgICAgICAgcmVuZGVyZXIoKS0+aGl0
VGVzdChyZXN1bHQsIHJlc3VsdC5wb2ludCgpLngoKSwgcmVzdWx0LnBvaW50KCkueSgpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyQm91bmRzLngoKSAtIHJlbmRlcmVyKCktPnhQ
b3MoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllckJvdW5kcy55KCkgLSByZW5k
ZXJlcigpLT55UG9zKCkgKyBtX29iamVjdC0+Ym9yZGVyVG9wRXh0cmEoKSwgSGl0VGVzdERlc2Nl
bmRhbnRzKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyQm91bmRzLnkoKSAt
IHJlbmRlcmVyKCktPnlQb3MoKSArIG1fb2JqZWN0LT5ib3JkZXJUb3BFeHRyYSgpLCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LnJlYWRvbmx5LCBIaXRUZXN0RGVzY2VuZGFu
dHMpKSB7CiAgICAgICAgIC8vIGZvciBwb3NpdGlvbmVkIGdlbmVyYXRlZCBjb250ZW50LCB3ZSBt
aWdodCBzdGlsbCBub3QgaGF2ZSBhCiAgICAgICAgIC8vIG5vZGUgYnkgdGhlIHRpbWUgd2UgZ2V0
IHRvIHRoZSBsYXllciBsZXZlbCwgc2luY2Ugbm9uZSBvZgogICAgICAgICAvLyB0aGUgY29udGVu
dCBpbiB0aGUgbGF5ZXIgaGFzIGFuIGVsZW1lbnQuIFNvIGp1c3Qgd2FsayB1cApAQCAtMTU2NSw3
ICsxNTY5LDcgQEAKICAgICAvLyBOb3cgY2hlY2sgb3VyIG5lZ2F0aXZlIHotaW5kZXggY2hpbGRy
ZW4uCiAgICAgaWYgKG1fbmVnWk9yZGVyTGlzdCkgewogICAgICAgICBmb3IgKGludCBpID0gbV9u
ZWdaT3JkZXJMaXN0LT5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICAgICAgaW5z
aWRlTGF5ZXIgPSBtX25lZ1pPcmRlckxpc3QtPmF0KGkpLT5oaXRUZXN0TGF5ZXIocm9vdExheWVy
LCByZXN1bHQsIGhpdFRlc3RSZWN0KTsKKyAgICAgICAgICAgIGluc2lkZUxheWVyID0gbV9uZWda
T3JkZXJMaXN0LT5hdChpKS0+aGl0VGVzdExheWVyKHJvb3RMYXllciwgcmVxdWVzdCwgcmVzdWx0
LCBoaXRUZXN0UmVjdCk7CiAgICAgICAgICAgICBpZiAoaW5zaWRlTGF5ZXIpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGluc2lkZUxheWVyOwogICAgICAgICB9CkBAIC0xNTc5LDEyICsxNTgzLDEy
IEBACiAgICAgICAgIHJlbmRlcmVyKCktPmhpdFRlc3QocmVzdWx0LCByZXN1bHQucG9pbnQoKS54
KCksIHJlc3VsdC5wb2ludCgpLnkoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXll
ckJvdW5kcy54KCkgLSByZW5kZXJlcigpLT54UG9zKCksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGF5ZXJCb3VuZHMueSgpIC0gcmVuZGVyZXIoKS0+eVBvcygpICsgbV9vYmplY3QtPmJv
cmRlclRvcEV4dHJhKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSGl0VGVzdFNlbGYp
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QucmVhZG9ubHksIEhpdFRlc3RT
ZWxmKSkKICAgICAgICAgcmV0dXJuIHRoaXM7CiAKICAgICAvLyBXZSBkaWRuJ3QgaGl0IGFueSBs
YXllci4gIEhvd2V2ZXIgaWYgdGhlIG1vdXNlIGlzIGRvd24sIHdlIG11c3QgYWx3YXlzIGF0IGxl
YXN0IGJlIGluc2lkZQogICAgIC8vIHRoZSByZW5kZXIgdmlldy4KLSAgICBpZiAocmVzdWx0LmFj
dGl2ZSgpICYmIHJlbmRlcmVyKCktPmlzUmVuZGVyVmlldygpKSB7CisgICAgaWYgKHJlcXVlc3Qu
YWN0aXZlICYmIHJlbmRlcmVyKCktPmlzUmVuZGVyVmlldygpKSB7CiAgICAgICAgIHJlbmRlcmVy
KCktPnNldElubmVyTm9kZShyZXN1bHQpOwogICAgICAgICByZXR1cm4gdGhpczsKICAgICB9CkBA
IC0xODI5LDE3ICsxODMzLDE3IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgUmVuZGVyTGF5
ZXI6OnVwZGF0ZUhvdmVyQWN0aXZlU3RhdGUoSGl0VGVzdFJlc3VsdCYgcmVzdWx0KQordm9pZCBS
ZW5kZXJMYXllcjo6dXBkYXRlSG92ZXJBY3RpdmVTdGF0ZShjb25zdCBIaXRUZXN0UmVxdWVzdCYg
cmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0KQogewogICAgIC8vIFdlIGRvbid0IHVwZGF0
ZSA6aG92ZXIvOmFjdGl2ZSBzdGF0ZSB3aGVuIHRoZSByZXN1bHQgaXMgbWFya2VkIGFzIHJlYWRv
bmx5LgotICAgIGlmIChyZXN1bHQucmVhZG9ubHkoKSkKKyAgICBpZiAocmVxdWVzdC5yZWFkb25s
eSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRG9jdW1lbnQqIGRvYyA9IHJlbmRlcmVyKCktPmRv
Y3VtZW50KCk7CiAgICAgaWYgKCFkb2MpIHJldHVybjsKIAogICAgIE5vZGUqIGFjdGl2ZU5vZGUg
PSBkb2MtPmFjdGl2ZU5vZGUoKTsKLSAgICBpZiAoYWN0aXZlTm9kZSAmJiAhcmVzdWx0LmFjdGl2
ZSgpKSB7CisgICAgaWYgKGFjdGl2ZU5vZGUgJiYgIXJlcXVlc3QuYWN0aXZlKSB7CiAgICAgICAg
IC8vIFdlIGFyZSBjbGVhcmluZyB0aGUgOmFjdGl2ZSBjaGFpbiBiZWNhdXNlIHRoZSBtb3VzZSBo
YXMgYmVlbiByZWxlYXNlZC4KICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBhY3Rp
dmVOb2RlLT5yZW5kZXJlcigpOyBjdXJyOyBjdXJyID0gY3Vyci0+cGFyZW50KCkpIHsKICAgICAg
ICAgICAgIGlmIChjdXJyLT5lbGVtZW50KCkgJiYgIWN1cnItPmlzVGV4dCgpKQpAQCAtMTg0OCw3
ICsxODUyLDcgQEAKICAgICAgICAgZG9jLT5zZXRBY3RpdmVOb2RlKDApOwogICAgIH0gZWxzZSB7
CiAgICAgICAgIE5vZGUqIG5ld0FjdGl2ZU5vZGUgPSByZXN1bHQuaW5uZXJOb2RlKCk7Ci0gICAg
ICAgIGlmICghYWN0aXZlTm9kZSAmJiBuZXdBY3RpdmVOb2RlICYmIHJlc3VsdC5hY3RpdmUoKSkg
eworICAgICAgICBpZiAoIWFjdGl2ZU5vZGUgJiYgbmV3QWN0aXZlTm9kZSAmJiByZXF1ZXN0LmFj
dGl2ZSkgewogICAgICAgICAgICAgLy8gV2UgYXJlIHNldHRpbmcgdGhlIDphY3RpdmUgY2hhaW4g
YW5kIGZyZWV6aW5nIGl0LiBJZiBmdXR1cmUgbW92ZXMgaGFwcGVuLCB0aGV5CiAgICAgICAgICAg
ICAvLyB3aWxsIG5lZWQgdG8gcmVmZXJlbmNlIHRoaXMgY2hhaW4uCiAgICAgICAgICAgICBmb3Ig
KFJlbmRlck9iamVjdCogY3VyciA9IG5ld0FjdGl2ZU5vZGUtPnJlbmRlcmVyKCk7IGN1cnI7IGN1
cnIgPSBjdXJyLT5wYXJlbnQoKSkgewpAQCAtMTg2Myw3ICsxODY3LDcgQEAKICAgICAvLyBJZiB0
aGUgbW91c2UgaXMgZG93biBhbmQgaWYgdGhpcyBpcyBhIG1vdXNlIG1vdmUgZXZlbnQsIHdlIHdh
bnQgdG8gcmVzdHJpY3QgY2hhbmdlcyBpbiAKICAgICAvLyA6aG92ZXIvOmFjdGl2ZSB0byBvbmx5
IGFwcGx5IHRvIGVsZW1lbnRzIHRoYXQgYXJlIGluIHRoZSA6YWN0aXZlIGNoYWluIHRoYXQgd2Ug
ZnJvemUKICAgICAvLyBhdCB0aGUgdGltZSB0aGUgbW91c2Ugd2VudCBkb3duLgotICAgIGJvb2wg
bXVzdEJlSW5BY3RpdmVDaGFpbiA9IHJlc3VsdC5hY3RpdmUoKSAmJiByZXN1bHQubW91c2VNb3Zl
KCk7CisgICAgYm9vbCBtdXN0QmVJbkFjdGl2ZUNoYWluID0gcmVxdWVzdC5hY3RpdmUgJiYgcmVx
dWVzdC5tb3VzZU1vdmU7CiAKICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIGhvdmVyZWQgbm9k
ZSBoYXMgY2hhbmdlZC4gIElmIG5vdCwgdGhlbiB3ZSBkb24ndCBuZWVkIHRvCiAgICAgLy8gZG8g
YW55dGhpbmcuICAKQEAgLTE4OTMsNyArMTg5Nyw3IEBACiAgICAgLy8gTm93IHNldCB0aGUgaG92
ZXIgc3RhdGUgZm9yIG91ciBuZXcgb2JqZWN0IHVwIHRvIHRoZSByb290LgogICAgIGZvciAoUmVu
ZGVyT2JqZWN0KiBjdXJyID0gbmV3SG92ZXJPYmo7IGN1cnI7IGN1cnIgPSBjdXJyLT5ob3ZlckFu
Y2VzdG9yKCkpIHsKICAgICAgICAgaWYgKGN1cnItPmVsZW1lbnQoKSAmJiAhY3Vyci0+aXNUZXh0
KCkgJiYgKCFtdXN0QmVJbkFjdGl2ZUNoYWluIHx8IGN1cnItPmVsZW1lbnQoKS0+aW5BY3RpdmVD
aGFpbigpKSkgewotICAgICAgICAgICAgY3Vyci0+ZWxlbWVudCgpLT5zZXRBY3RpdmUocmVzdWx0
LmFjdGl2ZSgpKTsKKyAgICAgICAgICAgIGN1cnItPmVsZW1lbnQoKS0+c2V0QWN0aXZlKHJlcXVl
c3QuYWN0aXZlKTsKICAgICAgICAgICAgIGN1cnItPmVsZW1lbnQoKS0+c2V0SG92ZXJlZCh0cnVl
KTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZvcmVp
Z25PYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZvcmVp
Z25PYmplY3QuY3BwCShyZXZpc2lvbiAxNzQzNikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckZvcmVpZ25PYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsMTMgKzExOCwxMyBAQAog
ICAgIHNldE5lZWRzTGF5b3V0KGZhbHNlKTsKIH0KIAotYm9vbCBSZW5kZXJGb3JlaWduT2JqZWN0
Ojpub2RlQXRQb2ludChIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCB4LCBpbnQgeSwgaW50IHR4
LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKK2Jvb2wgUmVuZGVyRm9yZWln
bk9iamVjdDo6bm9kZUF0UG9pbnQoSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQgeCwgaW50IHks
IGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24sIGJvb2wgcmVhZG9u
bHkpCiB7CiAgICAgQWZmaW5lVHJhbnNmb3JtIHRvdGFsVHJhbnNmb3JtID0gYWJzb2x1dGVUcmFu
c2Zvcm0oKTsKICAgICB0b3RhbFRyYW5zZm9ybSAqPSB0cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMo
KTsKICAgICBkb3VibGUgbG9jYWxYLCBsb2NhbFk7CiAgICAgdG90YWxUcmFuc2Zvcm0uaW52ZXJ0
KCkubWFwKHgsIHksICZsb2NhbFgsICZsb2NhbFkpOwotICAgIHJldHVybiBSZW5kZXJCbG9jazo6
bm9kZUF0UG9pbnQocmVzdWx0LCAoaW50KWxvY2FsWCwgKGludClsb2NhbFksIHR4LCB0eSwgaGl0
VGVzdEFjdGlvbik7CisgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChyZXN1bHQs
IChpbnQpbG9jYWxYLCAoaW50KWxvY2FsWSwgdHgsIHR5LCBoaXRUZXN0QWN0aW9uLCByZWFkb25s
eSk7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCShy
ZXZpc2lvbiAxNzQzNikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNyArMTExLDcgQEAKIAogICAgIHZpcnR1YWwgUmVuZGVy
T2JqZWN0KiByZW1vdmVDaGlsZE5vZGUoUmVuZGVyT2JqZWN0KiBjaGlsZCk7CiAKLSAgICB2aXJ0
dWFsIGJvb2wgbm9kZUF0UG9pbnQoSGl0VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50IHR4
LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChI
aXRUZXN0UmVzdWx0JiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlv
biwgYm9vbCk7CiAKICAgICAvLyB0aGlzIGdldHMgYSBjZWxsIGdyaWQgZGF0YSBzdHJ1Y3R1cmUu
IGNoYW5naW5nIHRoZSBudW1iZXIgb2YKICAgICAvLyBjb2x1bW5zIGlzIGRvbmUgYnkgdGhlIHRh
YmxlCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmgJKHJldmlzaW9uIDE3NDM2KQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaAkod29ya2luZyBjb3B5KQpAQCAt
NDUsNyArNDUsNyBAQAogICAgIHZpcnR1YWwgdm9pZCBwb3NpdGlvbihJbmxpbmVCb3gqKSB7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCBJbnRSZWN0IGdldEFic29s
dXRlUmVwYWludFJlY3QoKTsKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoSGl0VGVzdFJl
c3VsdCYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOworICAg
IHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChIaXRUZXN0UmVzdWx0JiwgaW50IHgsIGludCB5LCBp
bnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiwgYm9vbCk7CiAKICAgICAvLyBUaGUgb25seSB0
aW1lIHJvd3MgZ2V0IGEgbGF5ZXIgaXMgd2hlbiB0aGV5IGhhdmUgdHJhbnNwYXJlbmN5LgogICAg
IHZpcnR1YWwgYm9vbCByZXF1aXJlc0xheWVyKCkgeyByZXR1cm4gaXNUcmFuc3BhcmVudCgpIHx8
IGhhc092ZXJmbG93Q2xpcCgpOyB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93
Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCShy
ZXZpc2lvbiAxNzQzNikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guaAkod29y
a2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBteSwgaW50IG1oLCBpbnQgX3R4LCBpbnQgX3R5LCBpbnQgdywgaW50IGgpOwogICAgIHZpcnR1
YWwgdm9pZCBwYWludERlY29yYXRpb25zKFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBpbnQg
X3R4LCBpbnQgX3R5LCBib29sIHBhaW50ZWRDaGlsZHJlbiA9IGZhbHNlKTsKICAgICB2aXJ0dWFs
IHZvaWQgcGFpbnQoUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGludCBfdHgsIGludCBfdHkp
OwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChIaXRUZXN0UmVzdWx0JiwgaW50LCBpbnQs
IGludCwgaW50KTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoSGl0VGVzdFJlc3VsdCYs
IGludCwgaW50LCBpbnQsIGludCwgYm9vbCk7CiAKICAgICBpbnQgbWFyZ2luQm9yZGVyUGFkZGlu
Z0xlZnQoKTsKICAgICBpbnQgbWFyZ2luQm9yZGVyUGFkZGluZ1JpZ2h0KCk7CkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJQYXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJQYXRoLmNwcAkocmV2aXNpb24gMTc0MzYpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJQYXRoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgzLDcgKzI4Myw3IEBACiAgICAg
cmV0dXJuIGhpdFJ1bGVzOwogfQogCi1ib29sIFJlbmRlclBhdGg6Om5vZGVBdFBvaW50KEhpdFRl
c3RSZXN1bHQmIHJlc3VsdCwgaW50IF94LCBpbnQgX3ksIGludCBfdHgsIGludCBfdHksIEhpdFRl
c3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKK2Jvb2wgUmVuZGVyUGF0aDo6bm9kZUF0UG9pbnQoSGl0
VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQgX3gsIGludCBfeSwgaW50IF90eCwgaW50IF90eSwgSGl0
VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uLCBib29sIHJlYWRvbmx5KQogewogICAgIC8vIFdlIG9u
bHkgZHJhdyBpbiB0aGUgZm9yZ3JvdW5kIHBoYXNlLCBzbyB3ZSBvbmx5IGhpdC10ZXN0IHRoZW4u
CiAgICAgaWYgKGhpdFRlc3RBY3Rpb24gIT0gSGl0VGVzdEZvcmVncm91bmQpCkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckZyYW1lU2V0LmgJKHJldmlzaW9uIDE3NDM2KQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRnJhbWVTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQAog
ICAgIGJvb2wgY2FuUmVzaXplKGludCB4LCBpbnQgeSk7CiAgICAgdm9pZCBzZXRSZXNpemluZyhi
b29sKTsKIAotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChIaXRUZXN0UmVzdWx0JiwgaW50
IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBi
b29sIG5vZGVBdFBvaW50KEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50
IHR5LCBIaXRUZXN0QWN0aW9uLCBib29sKTsKIAogICAgIEhUTUxGcmFtZVNldEVsZW1lbnQqIGVs
ZW1lbnQoKSBjb25zdAogICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRnJhbWVTZXRF
bGVtZW50Kj4oUmVuZGVyQ29udGFpbmVyOjplbGVtZW50KCkpOyB9CkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGVSb3cuY3BwCShyZXZpc2lvbiAxNzQzNikKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlUm93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDcgKzEzOCw3IEBA
CiB9CiAKIC8vIEhpdCBUZXN0aW5nCi1ib29sIFJlbmRlclRhYmxlUm93Ojpub2RlQXRQb2ludChI
aXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRl
c3RBY3Rpb24gYWN0aW9uKQorYm9vbCBSZW5kZXJUYWJsZVJvdzo6bm9kZUF0UG9pbnQoSGl0VGVz
dFJlc3VsdCYgcmVzdWx0LCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0
aW9uIGFjdGlvbiwgYm9vbCByZWFkb25seSkKIHsKICAgICAvLyBUYWJsZSByb3dzIGNhbm5vdCBl
dmVyIGJlIGhpdCB0ZXN0ZWQuICBFZmZlY3RpdmVseSB0aGV5IGRvIG5vdCBleGlzdC4KICAgICAv
LyBKdXN0IGZvcndhcmQgdG8gb3VyIGNoaWxkcmVuIGFsd2F5cy4KQEAgLTE0Nyw3ICsxNDcsNyBA
QAogICAgICAgICAvLyBhdCB0aGUgbW9tZW50IChhIGRlbW90ZWQgaW5saW5lIDxmb3JtPiBmb3Ig
ZXhhbXBsZSkuIElmIHdlIGV2ZXIgaW1wbGVtZW50IGEKICAgICAgICAgLy8gdGFibGUtc3BlY2lm
aWMgaGl0LXRlc3QgbWV0aG9kICh3aGljaCB3ZSBzaG91bGQgZG8gZm9yIHBlcmZvcm1hbmNlIHJl
YXNvbnMgYW55d2F5KSwKICAgICAgICAgLy8gdGhlbiB3ZSBjYW4gcmVtb3ZlIHRoaXMgY2hlY2su
Ci0gICAgICAgIGlmICghY2hpbGQtPmxheWVyKCkgJiYgIWNoaWxkLT5pc0lubGluZUZsb3coKSAm
JiBjaGlsZC0+bm9kZUF0UG9pbnQocmVzdWx0LCB4LCB5LCB0eCwgdHksIGFjdGlvbikpIHsKKyAg
ICAgICAgaWYgKCFjaGlsZC0+bGF5ZXIoKSAmJiAhY2hpbGQtPmlzSW5saW5lRmxvdygpICYmIGNo
aWxkLT5ub2RlQXRQb2ludChyZXN1bHQsIHgsIHksIHR4LCB0eSwgYWN0aW9uLCByZWFkb25seSkp
IHsKICAgICAgICAgICAgIHNldElubmVyTm9kZShyZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3gu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCShy
ZXZpc2lvbiAxNzQzNikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01MjMsMTEgKzUyMywxMSBAQAogICAgIH0KIH0KIAotYm9vbCBJbmxp
bmVGbG93Qm94Ojpub2RlQXRQb2ludChIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCB4LCBpbnQg
eSwgaW50IHR4LCBpbnQgdHkpCitib29sIElubGluZUZsb3dCb3g6Om5vZGVBdFBvaW50KEhpdFRl
c3RSZXN1bHQmIHJlc3VsdCwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgYm9vbCByZWFk
b25seSkKIHsKICAgICAvLyBDaGVjayBjaGlsZHJlbiBmaXJzdC4KICAgICBmb3IgKElubGluZUJv
eCogY3VyciA9IGxhc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+cHJldk9uTGluZSgpKSB7
Ci0gICAgICAgIGlmICghY3Vyci0+b2JqZWN0KCktPmxheWVyKCkgJiYgY3Vyci0+bm9kZUF0UG9p
bnQocmVzdWx0LCB4LCB5LCB0eCwgdHkpKSB7CisgICAgICAgIGlmICghY3Vyci0+b2JqZWN0KCkt
PmxheWVyKCkgJiYgY3Vyci0+bm9kZUF0UG9pbnQocmVzdWx0LCB4LCB5LCB0eCwgdHksIHJlYWRv
bmx5KSkgewogICAgICAgICAgICAgb2JqZWN0KCktPnNldElubmVyTm9kZShyZXN1bHQpOwogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJ
bWFnZS5jcHAJKHJldmlzaW9uIDE3NDM2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1h
Z2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTEsOSArMzExLDkgQEAKICAgICByZXR1cm4gaSA/
IGktPmRvY3VtZW50KCktPmdldEltYWdlTWFwKGktPmltYWdlTWFwKCkpIDogMDsKIH0KIAotYm9v
bCBSZW5kZXJJbWFnZTo6bm9kZUF0UG9pbnQoSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQgX3gs
IGludCBfeSwgaW50IF90eCwgaW50IF90eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQor
Ym9vbCBSZW5kZXJJbWFnZTo6bm9kZUF0UG9pbnQoSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQg
X3gsIGludCBfeSwgaW50IF90eCwgaW50IF90eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9u
LCBib29sIHJlYWRvbmx5KQogewotICAgIGJvb2wgaW5zaWRlID0gUmVuZGVyUmVwbGFjZWQ6Om5v
ZGVBdFBvaW50KHJlc3VsdCwgX3gsIF95LCBfdHgsIF90eSwgaGl0VGVzdEFjdGlvbik7CisgICAg
Ym9vbCBpbnNpZGUgPSBSZW5kZXJSZXBsYWNlZDo6bm9kZUF0UG9pbnQocmVzdWx0LCBfeCwgX3ks
IF90eCwgX3R5LCBoaXRUZXN0QWN0aW9uLCByZWFkb25seSk7CiAKICAgICBpZiAoaW5zaWRlICYm
IGVsZW1lbnQoKSkgewogICAgICAgICBpbnQgdHggPSBfdHggKyBtX3g7CkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9JbmxpbmVUZXh0Qm94LmNwcAkocmV2aXNpb24gMTc0MzYpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9JbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIwLDcgKzIyMCw3IEBA
CiAgICAgcmV0dXJuIG9iamVjdCgpLT5pc0JSKCkgfHwgKG9iamVjdCgpLT5zdHlsZSgpLT5wcmVz
ZXJ2ZU5ld2xpbmUoKSAmJiBsZW4oKSA9PSAxICYmICgqdGV4dE9iamVjdCgpLT5zdHJpbmcoKSlb
c3RhcnQoKV0gPT0gJ1xuJyk7CiB9CiAKLWJvb2wgSW5saW5lVGV4dEJveDo6bm9kZUF0UG9pbnQo
SGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5KQorYm9v
bCBJbmxpbmVUZXh0Qm94Ojpub2RlQXRQb2ludChIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCB4
LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIGJvb2wgcmVhZG9ubHkpCiB7CiAgICAgaWYgKGlzTGlu
ZUJyZWFrKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5n
L0VsbGlwc2lzQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNp
c0JveC5jcHAJKHJldmlzaW9uIDE3NDM2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNC
b3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBACiAgICAgfQogfQogCi1ib29s
IEVsbGlwc2lzQm94Ojpub2RlQXRQb2ludChIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCB4LCBp
bnQgeSwgaW50IHR4LCBpbnQgdHkpCitib29sIEVsbGlwc2lzQm94Ojpub2RlQXRQb2ludChIaXRU
ZXN0UmVzdWx0JiByZXN1bHQsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIGJvb2wgcmVh
ZG9ubHkpCiB7CiAgICAgdHggKz0gbV94OwogICAgIHR5ICs9IG1feTsKQEAgLTcwLDcgKzcwLDcg
QEAKICAgICBpZiAobV9tYXJrdXBCb3gpIHsKICAgICAgICAgaW50IG10eCA9IHR4ICsgbV93aWR0
aCAtIG1fbWFya3VwQm94LT54UG9zKCk7CiAgICAgICAgIGludCBtdHkgPSB0eSArIG1fYmFzZWxp
bmUgLSAobV9tYXJrdXBCb3gtPnlQb3MoKSArIG1fbWFya3VwQm94LT5iYXNlbGluZSgpKTsKLSAg
ICAgICAgaWYgKG1fbWFya3VwQm94LT5ub2RlQXRQb2ludChyZXN1bHQsIHgsIHksIG10eCwgbXR5
KSkgeworICAgICAgICBpZiAobV9tYXJrdXBCb3gtPm5vZGVBdFBvaW50KHJlc3VsdCwgeCwgeSwg
bXR4LCBtdHksIHJlYWRvbmx5KSkgewogICAgICAgICAgICAgb2JqZWN0KCktPnNldElubmVyTm9k
ZShyZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTVkdUZXh0LmgJKHJldmlzaW9uIDE3NDM2KQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU1ZHVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBACiAg
ICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gbG9jYWxUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVy
biBtX3RyYW5zZm9ybTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRMb2NhbFRyYW5zZm9ybShjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkgeyBtX3RyYW5zZm9ybSA9IHRyYW5zZm9ybTsg
fQogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mIGksIGludCBfdHgsIGludCBfdHkp
OwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChIaXRUZXN0UmVzdWx0JiwgaW50IHgsIGlu
dCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBib29sIG5v
ZGVBdFBvaW50KEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBI
aXRUZXN0QWN0aW9uLCBib29sKTsKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0
b3I8SW50UmVjdD4mLCBpbnQgdHgsIGludCB0eSk7CiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVB
YnNvbHV0ZVJlcGFpbnRSZWN0KEludFJlY3QmIHIsIGJvb2wgZik7CiAgICAgdmlydHVhbCBib29s
IHJlcXVpcmVzTGF5ZXIoKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkocmV2
aXNpb24gMTc0MzYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMzYsOSArMzM2LDkgQEAKIH0KIAogYm9vbCBSZW5kZXJJbmxpbmU6Om5v
ZGVBdFBvaW50KEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IF94LCBpbnQgX3ksIGludCBfdHgs
IGludCBfdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGl0VGVzdEFjdGlvbiBo
aXRUZXN0QWN0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhpdFRlc3RBY3Rp
b24gaGl0VGVzdEFjdGlvbiwgYm9vbCByZWFkb25seSkKIHsKLSAgICByZXR1cm4gaGl0VGVzdExp
bmVzKHJlc3VsdCwgX3gsIF95LCBfdHgsIF90eSwgaGl0VGVzdEFjdGlvbik7CisgICAgcmV0dXJu
IGhpdFRlc3RMaW5lcyhyZXN1bHQsIF94LCBfeSwgX3R4LCBfdHksIGhpdFRlc3RBY3Rpb24sIHJl
YWRvbmx5KTsKIH0KIAogVmlzaWJsZVBvc2l0aW9uIFJlbmRlcklubGluZTo6cG9zaXRpb25Gb3JD
b29yZGluYXRlcyhpbnQgeCwgaW50IHkpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJ
bWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmgJKHJl
dmlzaW9uIDE3NDM2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjgsNyArNjgsNyBAQAogICAgIAogICAgIEltYWdlKiBpbWFnZSgpIHsgcmV0
dXJuIG1fY2FjaGVkSW1hZ2UgPyBtX2NhY2hlZEltYWdlLT5pbWFnZSgpIDogbnVsbEltYWdlKCk7
IH0KIAotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChIaXRUZXN0UmVzdWx0JiwgaW50IHgs
IGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBib29s
IG5vZGVBdFBvaW50KEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5
LCBIaXRUZXN0QWN0aW9uLCBib29sKTsKICAgICAKICAgICB2aXJ0dWFsIGludCBjYWxjUmVwbGFj
ZWRXaWR0aCgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGNhbGNSZXBsYWNlZEhlaWdodCgpIGNv
bnN0OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCShyZXZpc2lvbiAxNzQzNikKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1NCw3ICsy
NTQsNyBAQAogfQogCiAvLyBIaXQgVGVzdGluZwotYm9vbCBSZW5kZXJCb3g6Om5vZGVBdFBvaW50
KEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0
VGVzdEFjdGlvbiBhY3Rpb24pCitib29sIFJlbmRlckJveDo6bm9kZUF0UG9pbnQoSGl0VGVzdFJl
c3VsdCYgcmVzdWx0LCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9u
IGFjdGlvbiwgYm9vbCByZWFkb25seSkKIHsKICAgICB0eCArPSBtX3g7CiAgICAgdHkgKz0gbV95
OwpAQCAtMjY1LDcgKzI2NSw3IEBACiAgICAgICAgIC8vIGF0IHRoZSBtb21lbnQgKGEgZGVtb3Rl
ZCBpbmxpbmUgPGZvcm0+IGZvciBleGFtcGxlKS4gSWYgd2UgZXZlciBpbXBsZW1lbnQgYQogICAg
ICAgICAvLyB0YWJsZS1zcGVjaWZpYyBoaXQtdGVzdCBtZXRob2QgKHdoaWNoIHdlIHNob3VsZCBk
byBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucyBhbnl3YXkpLAogICAgICAgICAvLyB0aGVuIHdlIGNh
biByZW1vdmUgdGhpcyBjaGVjay4KLSAgICAgICAgaWYgKCFjaGlsZC0+bGF5ZXIoKSAmJiAhY2hp
bGQtPmlzSW5saW5lRmxvdygpICYmIGNoaWxkLT5ub2RlQXRQb2ludChyZXN1bHQsIHgsIHksIHR4
LCB0eSwgYWN0aW9uKSkgeworICAgICAgICBpZiAoIWNoaWxkLT5sYXllcigpICYmICFjaGlsZC0+
aXNJbmxpbmVGbG93KCkgJiYgY2hpbGQtPm5vZGVBdFBvaW50KHJlc3VsdCwgeCwgeSwgdHgsIHR5
LCBhY3Rpb24sIHJlYWRvbmx5KSkgewogICAgICAgICAgICAgc2V0SW5uZXJOb2RlKHJlc3VsdCk7
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmNwcAkocmV2aXNpb24gMTc0MzYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MjksNyArMjUyOSw3IEBACiAgICAgcmV0
dXJuIGZhbHNlOyAgICAKIH0KIAotYm9vbCBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQoSGl0VGVz
dFJlc3VsdCYgcmVzdWx0LCBpbnQgX3gsIGludCBfeSwgaW50IF90eCwgaW50IF90eSwgSGl0VGVz
dEFjdGlvbiBoaXRUZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQoSGl0
VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQgX3gsIGludCBfeSwgaW50IF90eCwgaW50IF90eSwgSGl0
VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uLCBib29sIHJlYWRvbmx5KQogewogICAgIGJvb2wgaW5s
aW5lRmxvdyA9IGlzSW5saW5lRmxvdygpOwogCkBAIC0yNTY3LDcgKzI1NjcsNyBAQAogICAgICAg
ICBtX2xheWVyLT5zdWJ0cmFjdFNjcm9sbE9mZnNldChzY3JvbGxlZFgsIHNjcm9sbGVkWSk7CiAg
ICAgaWYgKGNoaWxkcmVuSW5saW5lKCkgJiYgIWlzVGFibGUoKSkgewogICAgICAgICAvLyBXZSBo
YXZlIHRvIGhpdC10ZXN0IG91ciBsaW5lIGJveGVzLgotICAgICAgICBpZiAoaGl0VGVzdExpbmVz
KHJlc3VsdCwgX3gsIF95LCBzY3JvbGxlZFgsIHNjcm9sbGVkWSwgaGl0VGVzdEFjdGlvbikpIHsK
KyAgICAgICAgaWYgKGhpdFRlc3RMaW5lcyhyZXN1bHQsIF94LCBfeSwgc2Nyb2xsZWRYLCBzY3Jv
bGxlZFksIGhpdFRlc3RBY3Rpb24sIHJlYWRvbmx5KSkgewogICAgICAgICAgICAgc2V0SW5uZXJO
b2RlKHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMjU4
MCw3ICsyNTgwLDcgQEAKICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gbGFzdENo
aWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSkKICAgICAgICAg
ICAgIC8vIEZJWE1FOiBXZSBoYXZlIHRvIHNraXAgb3ZlciBpbmxpbmUgZmxvd3MsIHNpbmNlIHRo
ZXkgY2FuIHNob3cgdXAgaW5zaWRlIFJlbmRlclRhYmxlcyBhdCB0aGUgbW9tZW50IChhIGRlbW90
ZWQgaW5saW5lIDxmb3JtPiBmb3IgZXhhbXBsZSkuICBJZiB3ZSBldmVyIGltcGxlbWVudCBhCiAg
ICAgICAgICAgICAvLyB0YWJsZS1zcGVjaWZpYyBoaXQtdGVzdCBtZXRob2QgKHdoaWNoIHdlIHNo
b3VsZCBkbyBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucyBhbnl3YXkpLCB0aGVuIHdlIGNhbiByZW1v
dmUgdGhpcyBjaGVjay4KLSAgICAgICAgICAgIGlmICghY2hpbGQtPmxheWVyKCkgJiYgIWNoaWxk
LT5pc0Zsb2F0aW5nKCkgJiYgIWNoaWxkLT5pc0lubGluZUZsb3coKSAmJiBjaGlsZC0+bm9kZUF0
UG9pbnQocmVzdWx0LCBfeCwgX3ksIHNjcm9sbGVkWCwgc2Nyb2xsZWRZLCBjaGlsZEhpdFRlc3Qp
KSB7CisgICAgICAgICAgICBpZiAoIWNoaWxkLT5sYXllcigpICYmICFjaGlsZC0+aXNGbG9hdGlu
ZygpICYmICFjaGlsZC0+aXNJbmxpbmVGbG93KCkgJiYgY2hpbGQtPm5vZGVBdFBvaW50KHJlc3Vs
dCwgX3gsIF95LCBzY3JvbGxlZFgsIHNjcm9sbGVkWSwgY2hpbGRIaXRUZXN0LCByZWFkb25seSkp
IHsKICAgICAgICAgICAgICAgICBzZXRJbm5lck5vZGUocmVzdWx0KTsKICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KQEAgLTI1OTgsNyArMjU5OCw3IEBACiAgICAg
ICAgIGZvciAoaXQudG9MYXN0KCk7IChvID0gaXQuY3VycmVudCgpKTsgLS1pdCkKICAgICAgICAg
ICAgIGlmICghby0+bm9QYWludCAmJiAhby0+bm9kZS0+bGF5ZXIoKSAmJiBvLT5ub2RlLT5oaXRU
ZXN0KHJlc3VsdCwgX3gsIF95LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNjcm9sbGVkWCArIG8tPmxlZnQgKyBvLT5ub2RlLT5tYXJnaW5MZWZ0KCkgLSBvLT5ub2RlLT54
UG9zKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsZWRZICsg
by0+c3RhcnRZICsgby0+bm9kZS0+bWFyZ2luVG9wKCkgLSBvLT5ub2RlLT55UG9zKCkpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsZWRZICsgby0+c3RhcnRZ
ICsgby0+bm9kZS0+bWFyZ2luVG9wKCkgLSBvLT5ub2RlLT55UG9zKCksIHJlYWRvbmx5KSkgewog
ICAgICAgICAgICAgICAgIHNldElubmVyTm9kZShyZXN1bHQpOwogICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICAgICAgfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElu
bGluZUJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3gu
aAkocmV2aXNpb24gMTc0MzYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAKICNlbmRpZgogCiAgICAgdmlydHVhbCB2
b2lkIHBhaW50KFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBpbnQgX3R4LCBpbnQgX3R5KTsK
LSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoSGl0VGVzdFJlc3VsdCYsIGludCwgaW50LCBp
bnQsIGludCk7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KEhpdFRlc3RSZXN1bHQmLCBp
bnQsIGludCwgaW50LCBpbnQsIGJvb2wpOwogCiAgICAgYm9vbCBoYXNTZWxlY3RlZENoaWxkcmVu
KCkgY29uc3QgeyByZXR1cm4gbV9oYXNTZWxlY3RlZENoaWxkcmVuOyB9CiAgICAgdm9pZCBzZXRI
YXNTZWxlY3RlZENoaWxkcmVuKGJvb2wgYik7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZVNlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlU2VjdGlvbi5jcHAJKHJldmlzaW9uIDE3NDM2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGVTZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTg2LDcgKzk4Niw3IEBA
CiB9CiAKIC8vIEhpdCBUZXN0aW5nCi1ib29sIFJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9p
bnQoSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBI
aXRUZXN0QWN0aW9uIGFjdGlvbikKK2Jvb2wgUmVuZGVyVGFibGVTZWN0aW9uOjpub2RlQXRQb2lu
dChIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhp
dFRlc3RBY3Rpb24gYWN0aW9uLCBib29sIHJlYWRvbmx5KQogewogICAgIC8vIFRhYmxlIHNlY3Rp
b25zIGNhbm5vdCBldmVyIGJlIGhpdCB0ZXN0ZWQuICBFZmZlY3RpdmVseSB0aGV5IGRvIG5vdCBl
eGlzdC4KICAgICAvLyBKdXN0IGZvcndhcmQgdG8gb3VyIGNoaWxkcmVuIGFsd2F5cy4KQEAgLTk5
OCw3ICs5OTgsNyBAQAogICAgICAgICAvLyBhdCB0aGUgbW9tZW50IChhIGRlbW90ZWQgaW5saW5l
IDxmb3JtPiBmb3IgZXhhbXBsZSkuIElmIHdlIGV2ZXIgaW1wbGVtZW50IGEKICAgICAgICAgLy8g
dGFibGUtc3BlY2lmaWMgaGl0LXRlc3QgbWV0aG9kICh3aGljaCB3ZSBzaG91bGQgZG8gZm9yIHBl
cmZvcm1hbmNlIHJlYXNvbnMgYW55d2F5KSwKICAgICAgICAgLy8gdGhlbiB3ZSBjYW4gcmVtb3Zl
IHRoaXMgY2hlY2suCi0gICAgICAgIGlmICghY2hpbGQtPmxheWVyKCkgJiYgIWNoaWxkLT5pc0lu
bGluZUZsb3coKSAmJiBjaGlsZC0+bm9kZUF0UG9pbnQocmVzdWx0LCB4LCB5LCB0eCwgdHksIGFj
dGlvbikpIHsKKyAgICAgICAgaWYgKCFjaGlsZC0+bGF5ZXIoKSAmJiAhY2hpbGQtPmlzSW5saW5l
RmxvdygpICYmIGNoaWxkLT5ub2RlQXRQb2ludChyZXN1bHQsIHgsIHksIHR4LCB0eSwgYWN0aW9u
LCByZWFkb25seSkpIHsKICAgICAgICAgICAgIHNldElubmVyTm9kZShyZXN1bHQpOwogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlcklubGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGlu
ZS5oCShyZXZpc2lvbiAxNzQzNikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBACiAgICAgCiAgICAgdmlydHVhbCB2b2lk
IHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKIAotICAgIHZpcnR1YWwgYm9vbCBu
b2RlQXRQb2ludChIaXRUZXN0UmVzdWx0JiwgaW50IF94LCBpbnQgX3ksIGludCBfdHgsIGludCBf
dHksIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChIaXRUZXN0
UmVzdWx0JiwgaW50IF94LCBpbnQgX3ksIGludCBfdHgsIGludCBfdHksIEhpdFRlc3RBY3Rpb24s
IGJvb2wpOwogICAgIAogICAgIHZpcnR1YWwgdm9pZCBjYWxjTWluTWF4V2lkdGgoKTsKIApJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAkocmV2aXNpb24gMTc0MzYp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM0NSwxMSArMzQ1LDExIEBACiAgICAgcmV0dXJuIFJlbmRlckZsZXhpYmxlQm94Ojpi
YXNlbGluZVBvc2l0aW9uKGIsIGlzUm9vdExpbmVCb3gpOwogfQogCi1ib29sIFJlbmRlclRleHRD
b250cm9sOjpub2RlQXRQb2ludChIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCB4LCBpbnQgeSwg
aW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKK2Jvb2wgUmVuZGVy
VGV4dENvbnRyb2w6Om5vZGVBdFBvaW50KEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IHgsIGlu
dCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uLCBib29sIHJl
YWRvbmx5KQogewogICAgIC8vIElmIHdlJ3JlIHdpdGhpbiB0aGUgdGV4dCBjb250cm9sLCB3ZSB3
YW50IHRvIGFjdCBhcyBpZiB3ZSd2ZSBoaXQgdGhlIGlubmVyIGRpdiwgaW5jYXNlIHRoZSBwb2lu
dCAKICAgICAvLyB3YXMgb24gdGhlIGNvbnRyb2wgYnV0IG5vdCBvbiB0aGUgZGl2IChzZWUgUmFk
YXIgNDYxNzg0MSkuCi0gICAgaWYgKFJlbmRlckZsZXhpYmxlQm94Ojpub2RlQXRQb2ludChyZXN1
bHQsIHgsIHksIHR4LCB0eSwgaGl0VGVzdEFjdGlvbikpIHsKKyAgICBpZiAoUmVuZGVyRmxleGli
bGVCb3g6Om5vZGVBdFBvaW50KHJlc3VsdCwgeCwgeSwgdHgsIHR5LCBoaXRUZXN0QWN0aW9uLCBy
ZWFkb25seSkpIHsKICAgICAgICAgcmVzdWx0LnNldElubmVyTm9kZShtX2Rpdi5nZXQoKSk7CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0gIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUm9v
dElubGluZUJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGlu
ZUJveC5jcHAJKHJldmlzaW9uIDE3NDM2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGlu
ZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MiwxNSArMTQyLDE1IEBACiAjZW5kaWYKIH0K
IAotYm9vbCBSb290SW5saW5lQm94Ojpub2RlQXRQb2ludChIaXRUZXN0UmVzdWx0JiByZXN1bHQs
IGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHkpCitib29sIFJvb3RJbmxpbmVCb3g6Om5vZGVB
dFBvaW50KEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0
eSwgYm9vbCByZWFkb25seSkKIHsKICAgICBpZiAobV9lbGxpcHNpc0JveCAmJiBvYmplY3QoKS0+
c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpIHsKLSAgICAgICAgaWYgKG1fZWxsaXBz
aXNCb3gtPm5vZGVBdFBvaW50KHJlc3VsdCwgeCwgeSwgdHgsIHR5KSkgeworICAgICAgICBpZiAo
bV9lbGxpcHNpc0JveC0+bm9kZUF0UG9pbnQocmVzdWx0LCB4LCB5LCB0eCwgdHksIHJlYWRvbmx5
KSkgewogICAgICAgICAgICAgb2JqZWN0KCktPnNldElubmVyTm9kZShyZXN1bHQpOwogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIElubGluZUZs
b3dCb3g6Om5vZGVBdFBvaW50KHJlc3VsdCwgeCwgeSwgdHgsIHR5KTsKKyAgICByZXR1cm4gSW5s
aW5lRmxvd0JveDo6bm9kZUF0UG9pbnQocmVzdWx0LCB4LCB5LCB0eCwgdHksIHJlYWRvbmx5KTsK
IH0KIAogdm9pZCBSb290SW5saW5lQm94OjphZGp1c3RQb3NpdGlvbihpbnQgZHgsIGludCBkeSkK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkocmV2aXNpb24gMTc0MzYpCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTgsNyArMTk4LDcg
QEAKICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmhlaWdodFJlbWFpbmluZyA9IDApIGNvbnN0
OwogICAgIGludCBsZWZ0T2Zmc2V0KGludCB5KSBjb25zdCB7IHJldHVybiBsZWZ0UmVsT2Zmc2V0
KHksIGxlZnRPZmZzZXQoKSwgdHJ1ZSk7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2lu
dChIaXRUZXN0UmVzdWx0JiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFj
dGlvbiBoaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoSGl0VGVz
dFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24sIGJv
b2wpOwogCiAgICAgdmlydHVhbCBib29sIGlzUG9pbnRJblNjcm9sbGJhcihIaXRUZXN0UmVzdWx0
JiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSk7CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL0hpdFRlc3RSZXN1bHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9IaXRU
ZXN0UmVzdWx0LmgJKHJldmlzaW9uIDE3NDM2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVz
dFJlc3VsdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxNyArMzYsMTEgQEAKIAogY2xhc3MgSGl0
VGVzdFJlc3VsdCB7CiBwdWJsaWM6Ci0gICAgSGl0VGVzdFJlc3VsdChjb25zdCBJbnRQb2ludCYs
IGJvb2wgcmVhZG9ubHksIGJvb2wgYWN0aXZlLCBib29sIG1vdXNlTW92ZSA9IGZhbHNlKTsKKyAg
ICBIaXRUZXN0UmVzdWx0KGNvbnN0IEludFBvaW50Jik7CiAgICAgSGl0VGVzdFJlc3VsdChjb25z
dCBIaXRUZXN0UmVzdWx0Jik7CiAgICAgfkhpdFRlc3RSZXN1bHQoKTsKICAgICBIaXRUZXN0UmVz
dWx0JiBvcGVyYXRvcj0oY29uc3QgSGl0VGVzdFJlc3VsdCYpOwogCi0gICAgLy8gVGhlc2UgYXJl
IG5vdCByZWFsbHkgcGFydCBvZiB0aGUgcmVzdWx0LiBUaGV5IGFyZSB0aGUgcGFyYW1ldGVycyBv
ZiB0aGUgSGl0VGVzdC4KLSAgICAvLyBUaGV5IHNob3VsZCBwcm9iYWJseSBiZSBpbiBhIGRpZmZl
cmVudCBzdHJ1Y3R1cmUuCi0gICAgYm9vbCByZWFkb25seSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVh
ZG9ubHk7IH0KLSAgICBib29sIGFjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlOyB9Ci0g
ICAgYm9vbCBtb3VzZU1vdmUoKSBjb25zdCB7IHJldHVybiBtX21vdXNlTW92ZTsgfQotCiAgICAg
Tm9kZSogaW5uZXJOb2RlKCkgY29uc3QgeyByZXR1cm4gbV9pbm5lck5vZGUuZ2V0KCk7IH0KICAg
ICBOb2RlKiBpbm5lck5vblNoYXJlZE5vZGUoKSBjb25zdCB7IHJldHVybiBtX2lubmVyTm9uU2hh
cmVkTm9kZS5nZXQoKTsgfQogICAgIEludFBvaW50IHBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9w
b2ludDsgfQpAQCAtNTgsOSArNTIsNiBAQAogICAgIHZvaWQgc2V0UG9pbnQoY29uc3QgSW50UG9p
bnQmIHApIHsgbV9wb2ludCA9IHA7IH0KICAgICB2b2lkIHNldFVSTEVsZW1lbnQoRWxlbWVudCop
OwogICAgIHZvaWQgc2V0U2Nyb2xsYmFyKFBsYXRmb3JtU2Nyb2xsYmFyKik7Ci0gICAgdm9pZCBz
ZXRSZWFkb25seShib29sIHIpIHsgbV9yZWFkb25seSA9IHI7IH0KLSAgICB2b2lkIHNldEFjdGl2
ZShib29sIGEpIHsgbV9hY3RpdmUgPSBhOyB9Ci0gICAgdm9pZCBzZXRNb3VzZU1vdmUoYm9vbCBt
KSB7IG1fbW91c2VNb3ZlID0gbTsgfQogCiAgICAgRnJhbWUqIHRhcmdldEZyYW1lKCkgY29uc3Q7
CiAgICAgSW50UmVjdCBib3VuZGluZ0JveCgpIGNvbnN0OwpAQCAtNzMsOSArNjQsNiBAQAogICAg
IEludFBvaW50IG1fcG9pbnQ7CiAgICAgUmVmUHRyPEVsZW1lbnQ+IG1faW5uZXJVUkxFbGVtZW50
OwogICAgIFJlZlB0cjxQbGF0Zm9ybVNjcm9sbGJhcj4gbV9zY3JvbGxiYXI7Ci0gICAgYm9vbCBt
X3JlYWRvbmx5OwotICAgIGJvb2wgbV9hY3RpdmU7Ci0gICAgYm9vbCBtX21vdXNlTW92ZTsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNWR0ltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJ
bWFnZS5jcHAJKHJldmlzaW9uIDE3NDM2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZH
SW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDUsMTMgKzIwNSwxMyBAQAogICAgIFJlbmRl
ckltYWdlOjpjb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdChyLCBmKTsKIH0KIAotYm9vbCBSZW5k
ZXJTVkdJbWFnZTo6bm9kZUF0UG9pbnQoSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQgX3gsIGlu
dCBfeSwgaW50IF90eCwgaW50IF90eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQorYm9v
bCBSZW5kZXJTVkdJbWFnZTo6bm9kZUF0UG9pbnQoSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQg
X3gsIGludCBfeSwgaW50IF90eCwgaW50IF90eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9u
LCBib29sIHJlYWRvbmx5KQogewogICAgIEFmZmluZVRyYW5zZm9ybSB0b3RhbFRyYW5zZm9ybSA9
IGFic29sdXRlVHJhbnNmb3JtKCk7CiAgICAgdG90YWxUcmFuc2Zvcm0gKj0gdHJhbnNsYXRpb25G
b3JBdHRyaWJ1dGVzKCk7CiAgICAgZG91YmxlIGxvY2FsWCwgbG9jYWxZOwogICAgIHRvdGFsVHJh
bnNmb3JtLmludmVydCgpLm1hcChfeCArIF90eCwgX3kgKyBfdHksICZsb2NhbFgsICZsb2NhbFkp
OwotICAgIHJldHVybiBSZW5kZXJJbWFnZTo6bm9kZUF0UG9pbnQocmVzdWx0LCAoaW50KWxvY2Fs
WCwgKGludClsb2NhbFksIDAsIDAsIGhpdFRlc3RBY3Rpb24pOworICAgIHJldHVybiBSZW5kZXJJ
bWFnZTo6bm9kZUF0UG9pbnQocmVzdWx0LCAoaW50KWxvY2FsWCwgKGludClsb2NhbFksIDAsIDAs
IGhpdFRlc3RBY3Rpb24sIHJlYWRvbmx5KTsKIH0KIAogYm9vbCBSZW5kZXJTVkdJbWFnZTo6cmVx
dWlyZXNMYXllcigpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmgJKHJldmlzaW9uIDE3NDM2
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guaAkod29ya2luZyBjb3B5KQpAQCAt
MzksNyArMzksNyBAQAogICAgIH0KICAgICAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUmVuZGVy
T2JqZWN0OjpQYWludEluZm8mLCBpbnQgX3R4LCBpbnQgX3R5KTsKLSAgICB2aXJ0dWFsIGJvb2wg
bm9kZUF0UG9pbnQoSGl0VGVzdFJlc3VsdCYsIGludCBfeCwgaW50IF95LCBpbnQgX3R4LCBpbnQg
X3R5KTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoSGl0VGVzdFJlc3VsdCYsIGludCBf
eCwgaW50IF95LCBpbnQgX3R4LCBpbnQgX3R5LCBib29sKTsKIAogcHJpdmF0ZToKICAgICBBdG9t
aWNTdHJpbmcgbV9zdHI7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0LmNwcAkocmV2
aXNpb24gMTc0MzYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTUsMTIgKzk1LDEyIEBACiAgICAgcmV0dXJuIGZsb3dCb3g7CiB9CiAK
LWJvb2wgUmVuZGVyU1ZHVGV4dDo6bm9kZUF0UG9pbnQoSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBp
bnQgX3gsIGludCBfeSwgaW50IF90eCwgaW50IF90eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0
aW9uKQorYm9vbCBSZW5kZXJTVkdUZXh0Ojpub2RlQXRQb2ludChIaXRUZXN0UmVzdWx0JiByZXN1
bHQsIGludCBfeCwgaW50IF95LCBpbnQgX3R4LCBpbnQgX3R5LCBIaXRUZXN0QWN0aW9uIGhpdFRl
c3RBY3Rpb24sIGJvb2wgcmVhZG9ubHkpCiB7CiAgICAgQWZmaW5lVHJhbnNmb3JtIHRvdGFsVHJh
bnNmb3JtID0gYWJzb2x1dGVUcmFuc2Zvcm0oKTsKICAgICBkb3VibGUgbG9jYWxYLCBsb2NhbFk7
CiAgICAgdG90YWxUcmFuc2Zvcm0uaW52ZXJ0KCkubWFwKF94LCBfeSwgJmxvY2FsWCwgJmxvY2Fs
WSk7Ci0gICAgcmV0dXJuIFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChyZXN1bHQsIChpbnQpbG9j
YWxYLCAoaW50KWxvY2FsWSwgX3R4LCBfdHksIGhpdFRlc3RBY3Rpb24pOworICAgIHJldHVybiBS
ZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQocmVzdWx0LCAoaW50KWxvY2FsWCwgKGludClsb2NhbFks
IF90eCwgX3R5LCBoaXRUZXN0QWN0aW9uLCByZWFkb25seSk7CiB9CiAKIHZvaWQgUmVuZGVyU1ZH
VGV4dDo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgdHgsIGludCB0
eSkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkocmV2aXNpb24gMTc0MzYpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENhY2hlZFJlc291cmNlOworY2xhc3Mg
SGl0VGVzdFJlcXVlc3Q7CiBjbGFzcyBIaXRUZXN0UmVzdWx0OwogY2xhc3MgUmVuZGVyVmlldzsK
IGNsYXNzIFJlbmRlckZyYW1lU2V0OwpAQCAtMjkyLDcgKzI5Myw3IEBACiAgICAgLy8gZnJvbnQu
ICBUaGUgaGl0VGVzdCBtZXRob2QgbG9va3MgZm9yIG1vdXNlIGV2ZW50cyBieSB3YWxraW5nCiAg
ICAgLy8gbGF5ZXJzIHRoYXQgaW50ZXJzZWN0IHRoZSBwb2ludCBmcm9tIGZyb250IHRvIGJhY2su
CiAgICAgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VS
ZWN0LCBQYWludFJlc3RyaWN0aW9uID0gUGFpbnRSZXN0cmljdGlvbk5vbmUsIFJlbmRlck9iamVj
dCogcGFpbnRpbmdSb290ID0gMCk7Ci0gICAgYm9vbCBoaXRUZXN0KEhpdFRlc3RSZXN1bHQmKTsK
KyAgICBib29sIGhpdFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jik7
CiAKICAgICAvLyBUaGlzIG1ldGhvZCBmaWd1cmVzIG91dCBvdXIgbGF5ZXJCb3VuZHMgaW4gY29v
cmRpbmF0ZXMgcmVsYXRpdmUgdG8KICAgICAvLyB8cm9vdExheWVyfS4gIEl0IGFsc28gY29tcHV0
ZXMgb3VyIGJhY2tncm91bmQgYW5kIGZvcmVncm91bmQgY2xpcCByZWN0cwpAQCAtMzA5LDcgKzMx
MCw3IEBACiAgICAgLy8gUmV0dXJucyBhIGJvdW5kaW5nIGJveCBmb3IgdGhpcyBsYXllciBvbmx5
LgogICAgIEludFJlY3QgYWJzb2x1dGVCb3VuZGluZ0JveCgpIGNvbnN0OwogCi0gICAgdm9pZCB1
cGRhdGVIb3ZlckFjdGl2ZVN0YXRlKEhpdFRlc3RSZXN1bHQmKTsKKyAgICB2b2lkIHVwZGF0ZUhv
dmVyQWN0aXZlU3RhdGUoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jik7CiAg
ICAgCiAgICAgSW50UmVjdCByZXBhaW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwYWludFJl
Y3Q7IH0KIApAQCAtMzM3LDcgKzMzOCw4IEBACiAKICAgICB2b2lkIHBhaW50TGF5ZXIoUmVuZGVy
TGF5ZXIqIHJvb3RMYXllciwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYgcGFpbnRE
aXJ0eVJlY3QsCiAgICAgICAgIGJvb2wgaGF2ZVRyYW5zcGFyZW5jeSwgUGFpbnRSZXN0cmljdGlv
biwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3QpOwotICAgIFJlbmRlckxheWVyKiBoaXRUZXN0
TGF5ZXIoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFJl
Y3QmIGhpdFRlc3RSZWN0KTsKKyAgICBSZW5kZXJMYXllciogaGl0VGVzdExheWVyKFJlbmRlckxh
eWVyKiByb290TGF5ZXIsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsCisg
ICAgICAgIGNvbnN0IEludFJlY3QmIGhpdFRlc3RSZWN0KTsKICAgICB2b2lkIGNvbXB1dGVTY3Jv
bGxEaW1lbnNpb25zKGJvb2wqIG5lZWRIQmFyID0gMCwgYm9vbCogbmVlZFZCYXIgPSAwKTsKIAog
ICAgIGJvb2wgc2hvdWxkQmVPdmVyZmxvd09ubHkoKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L0hpdFRlc3RSZXN1bHQuY3BwCShyZXZpc2lvbiAxNzQzNikKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L0hpdFRlc3RSZXN1bHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMSArMzIsOCBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLUhpdFRlc3RSZXN1bHQ6OkhpdFRlc3RSZXN1bHQoY29uc3Qg
SW50UG9pbnQmIHBvaW50LCBib29sIHJlYWRvbmx5LCBib29sIGFjdGl2ZSwgYm9vbCBtb3VzZU1v
dmUpCitIaXRUZXN0UmVzdWx0OjpIaXRUZXN0UmVzdWx0KGNvbnN0IEludFBvaW50JiBwb2ludCkK
ICAgICA6IG1fcG9pbnQocG9pbnQpCi0gICAgLCBtX3JlYWRvbmx5KHJlYWRvbmx5KQotICAgICwg
bV9hY3RpdmUoYWN0aXZlKQotICAgICwgbV9tb3VzZU1vdmUobW91c2VNb3ZlKQogewogfQogCkBA
IC00Niw5ICs0Myw2IEBACiAgICAgLCBtX3BvaW50KG90aGVyLnBvaW50KCkpCiAgICAgLCBtX2lu
bmVyVVJMRWxlbWVudChvdGhlci5VUkxFbGVtZW50KCkpCiAgICAgLCBtX3Njcm9sbGJhcihvdGhl
ci5zY3JvbGxiYXIoKSkKLSAgICAsIG1fcmVhZG9ubHkob3RoZXIucmVhZG9ubHkoKSkKLSAgICAs
IG1fYWN0aXZlKG90aGVyLmFjdGl2ZSgpKQotICAgICwgbV9tb3VzZU1vdmUob3RoZXIubW91c2VN
b3ZlKCkpCiB7CiB9CiAKQEAgLTYzLDkgKzU3LDYgQEAKICAgICBtX3BvaW50ID0gb3RoZXIucG9p
bnQoKTsKICAgICBtX2lubmVyVVJMRWxlbWVudCA9IG90aGVyLlVSTEVsZW1lbnQoKTsKICAgICBt
X3Njcm9sbGJhciA9IG90aGVyLnNjcm9sbGJhcigpOwotICAgIG1fcmVhZG9ubHkgPSBvdGhlci5y
ZWFkb25seSgpOwotICAgIG1fYWN0aXZlID0gb3RoZXIuYWN0aXZlKCk7Ci0gICAgbV9tb3VzZU1v
dmUgPSBvdGhlci5tb3VzZU1vdmUoKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckZvcmVpZ25PYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGb3JlaWduT2JqZWN0LmgJKHJldmlzaW9uIDE3NDM2KQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRm9yZWlnbk9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Niw3ICs0Niw3IEBACiAgICAgdmlydHVhbCBib29sIHJlcXVpcmVzTGF5ZXIoKTsKICAgICB2
aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoSGl0
VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24p
OworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChIaXRUZXN0UmVzdWx0JiwgaW50IHgsIGlu
dCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiwgYm9vbCk7CiAKICBwcml2YXRlOgog
ICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMoKTsKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJQYXRoLmgJKHJldmlzaW9uIDE3NDM2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyUGF0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3IEBACiAgCiAgICAgdmly
dHVhbCB2b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgaW50IHR4LCBpbnQgdHkp
OwogCi0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwg
aW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wg
bm9kZUF0UG9pbnQoSGl0VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHks
IEhpdFRlc3RBY3Rpb24sIGJvb2wpOwogICAgIAogICAgIC8vIEZJWE1FOiBXaGVuIHRoZSBvdGhl
ciBTVkcgY2xhc3NlcyBnZXQgcG9pbnRlci1ldmVudHMgc3VwcG9ydCB0aGlzIHNob3VsZCBiZSBt
b3ZlZCBlbHNld2hlcmUKICAgICBzdHJ1Y3QgUG9pbnRlckV2ZW50c0hpdFJ1bGVzIHsKSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0ltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuaAkocmV2aXNpb24gMTc0MzYpCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTVkdJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3
IEBACiAKICAgICAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRSZWN0KElu
dFJlY3QmLCBib29sIGYpOwogCi0gICAgICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChIaXRU
ZXN0UmVzdWx0JiwgaW50IF94LCBpbnQgX3ksIGludCBfdHgsIGludCBfdHksIEhpdFRlc3RBY3Rp
b24pOworICAgICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoSGl0VGVzdFJlc3VsdCYsIGlu
dCBfeCwgaW50IF95LCBpbnQgX3R4LCBpbnQgX3R5LCBIaXRUZXN0QWN0aW9uLCBib29sKTsKIAog
ICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQgdHJhbnNsYXRlRm9yQXR0cmlidXRlcygpOwpJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHQuaAkocmV2aXNpb24gMTc0MzYpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDcgQEAKICAgICB2
aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiBpLCBpbnQgdHgsIGludCB0eSkgeyBhc3NlcnQo
ZmFsc2UpOyB9CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpIHsgYXNzZXJ0KGZhbHNlKTsgfQog
Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KEhpdFRlc3RSZXN1bHQmLCBpbnQsIGludCwg
aW50LCBpbnQsIEhpdFRlc3RBY3Rpb24pIHsgYXNzZXJ0KGZhbHNlKTsgcmV0dXJuIGZhbHNlOyB9
CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KEhpdFRlc3RSZXN1bHQmLCBpbnQsIGludCwg
aW50LCBpbnQsIEhpdFRlc3RBY3Rpb24sIGJvb2wpIHsgYXNzZXJ0KGZhbHNlKTsgcmV0dXJuIGZh
bHNlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4m
LCBpbnQgdHgsIGludCB0eSk7CiAgICAgdmlydHVhbCB2b2lkIGxpbmVCb3hSZWN0cyhWZWN0b3I8
SW50UmVjdD4mKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuaAkocmV2
aXNpb24gMTc0MzYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBACiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZy
b21FbGVtZW50KCk7CiAgICAgdmlydHVhbCBib29sIGNhbkhhdmVDaGlsZHJlbigpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBzaG9ydCBiYXNlbGluZVBvc2l0aW9uKCBib29s
LCBib29sICkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KEhpdFRlc3RSZXN1
bHQmLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2
aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoSGl0VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50
IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24sIGJvb2wpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKICAgICBSZW5kZXJTdHlsZSogY3JlYXRlRGl2U3R5bGUoUmVuZGVyU3R5bGUqIHN0
YXJ0U3R5bGUpOwogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaAkocmV2aXNpb24gMTc0MzYpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaAkod29ya2luZyBjb3B5KQpAQCAtODIsNyAr
ODIsNyBAQAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RQb3NpdGlvbihpbnQgZHgsIGludCBkeSk7
CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBpbnQg
dHgsIGludCB0eSk7Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KEhpdFRlc3RSZXN1bHQm
LCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5KTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0
UG9pbnQoSGl0VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIGJvb2wp
OwogCiAgICAgLy8gT3ZlcmxvYWRlZCBuZXcgb3BlcmF0b3IuCiAgICAgdm9pZCogb3BlcmF0b3Ig
bmV3KHNpemVfdCwgUmVuZGVyQXJlbmEqKSB0aHJvdygpOwpJbmRleDogV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNp
b24gMTc0MzYpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU2LDYgKzU2LDggQEAKICNpbmNsdWRlICJIVE1MTmFtZUNvbGxlY3Rpb24uaCIKICNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MU3R5bGVFbGVtZW50LmgiCisjaW5jbHVkZSAi
SGl0VGVzdFJlcXVlc3QuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAi
SlNFZGl0b3IuaCIKICNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiTG9nZ2lu
Zy5oIgpAQCAtNjQsNyArNjYsNiBAQAogI2luY2x1ZGUgIk11dGF0aW9uRXZlbnQuaCIKICNpbmNs
dWRlICJOYW1lTm9kZUxpc3QuaCIKICNpbmNsdWRlICJOb2RlRmlsdGVyLmgiCi0jaW5jbHVkZSAi
SGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIk5vZGVJdGVyYXRvci5oIgogI2luY2x1ZGUgIlBs
YXRmb3JtS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5o
IgpAQCAtNjc3LDggKzY3OCw5IEBACiAgICAgaWYgKCFyZW5kZXJlcigpKQogICAgICAgICByZXR1
cm4gMDsKIAotICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0KEludFBvaW50KHgsIHkpLCB0cnVlLCB0
cnVlKTsKLSAgICByZW5kZXJlcigpLT5sYXllcigpLT5oaXRUZXN0KHJlc3VsdCk7IAorICAgIEhp
dFRlc3RSZXF1ZXN0IHJlcXVlc3QodHJ1ZSwgdHJ1ZSk7CisgICAgSGl0VGVzdFJlc3VsdCByZXN1
bHQoSW50UG9pbnQoeCwgeSkpOworICAgIHJlbmRlcmVyKCktPmxheWVyKCktPmhpdFRlc3QocmVx
dWVzdCwgcmVzdWx0KTsgCiAKICAgICBOb2RlKiBuID0gcmVzdWx0LmlubmVyTm9kZSgpOwogICAg
IHdoaWxlIChuICYmICFuLT5pc0VsZW1lbnROb2RlKCkpCkBAIC0xNjczLDggKzE2NzUsOSBAQAog
ICAgICAgICByZXR1cm4gTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyhldmVudCwgMCwgMCwg
ZmFsc2UpOwogCiAgICAgYXNzZXJ0KHJlbmRlcmVyKCktPmlzUmVuZGVyVmlldygpKTsKLSAgICBI
aXRUZXN0UmVzdWx0IHJlc3VsdChwb2ludCwgcmVhZG9ubHksIGFjdGl2ZSwgbW91c2VNb3ZlKTsK
LSAgICByZW5kZXJlcigpLT5sYXllcigpLT5oaXRUZXN0KHJlc3VsdCk7CisgICAgSGl0VGVzdFJl
cXVlc3QgcmVxdWVzdChyZWFkb25seSwgYWN0aXZlLCBtb3VzZU1vdmUpOworICAgIEhpdFRlc3RS
ZXN1bHQgcmVzdWx0KHBvaW50KTsKKyAgICByZW5kZXJlcigpLT5sYXllcigpLT5oaXRUZXN0KHJl
cXVlc3QsIHJlc3VsdCk7CiAKICAgICBpZiAoIXJlYWRvbmx5KQogICAgICAgICB1cGRhdGVSZW5k
ZXJpbmcoKTsKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5leHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9XZWJDb3JlLmV4cAkocmV2aXNpb24gMTc0MzYpCisrKyBXZWJDb3JlL1dlYkNvcmUuZXhwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTcsNyArMTU3LDcgQEAKIF9fWk43V2ViQ29yZTExRnJhbWVMb2Fk
ZXI5c2V0Q2xpZW50RVBOU18xN0ZyYW1lTG9hZGVyQ2xpZW50RQogX19aTjdXZWJDb3JlMTFSZW5k
ZXJMYXllcjE4Z0FsaWduQ2VudGVyQWx3YXlzRQogX19aTjdXZWJDb3JlMTJBdG9taWNTdHJpbmcz
YWRkRVBOU18xMFN0cmluZ0ltcGxFCi1fX1pON1dlYkNvcmUxM0hpdFRlc3RSZXN1bHRDMUVSS05T
XzhJbnRQb2ludEViYmIKK19fWk43V2ViQ29yZTEzSGl0VGVzdFJlc3VsdEMxRVJLTlNfOEludFBv
aW50RQogX19aTjdXZWJDb3JlMTNIaXRUZXN0UmVzdWx0QzFFUktTMF8KIF9fWk43V2ViQ29yZTEz
SGl0VGVzdFJlc3VsdEQxRXYKIF9fWk43V2ViQ29yZTEzSGl0VGVzdFJlc3VsdGFTRVJLUzBfCklu
ZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MTc0MzYpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtMTMyMSw2ICsxMzIxLDcgQEAKIAkJOTMwN0YxMTMwQUYyQzhCRTAwREJB
MzFBIC8qIERPTU5vZGVJbnRlcm5hbC5oIGluIENvcHkgR2VuZXJhdGVkIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODVCNDk4RkEwQURCMzQwMjAwOTI1Q0JCIC8q
IERPTU5vZGVJbnRlcm5hbC5oICovOyB9OwogCQk5MzA3RjFENzBBRjJENTkwMDBEQkEzMUEgLyog
SGl0VGVzdFJlc3VsdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5MzA3RjFENTBBRjJENTkwMDBEQkEzMUEgLyogSGl0VGVzdFJlc3VsdC5jcHAgKi87
IH07CiAJCTkzMDdGMUQ4MEFGMkQ1OTAwMERCQTMxQSAvKiBIaXRUZXN0UmVzdWx0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzA3RjFENjBBRjJENTkw
MDBEQkEzMUEgLyogSGl0VGVzdFJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTkzMDkwMTBDMEFGNjc1NkQwMDgxREYwMSAvKiBIaXRUZXN0
UmVxdWVzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTMwOTAxMEIwQUY2NzU2RDAwODFERjAxIC8qIEhpdFRlc3RSZXF1ZXN0LmggKi87IH07CiAJCTkz
MTI2RjYxMDlEN0E3MzYwMDhEOTYyNiAvKiBTdHJpbmdIYXNoLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzEyNkY2MDA5RDdBNzM2MDA4RDk2MjYgLyog
U3RyaW5nSGFzaC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTkzMjZEQzBCMDlEQUQ1QkUwMEFGQzg0NyAvKiBDaGFyc2V0RGF0YS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyNkRDMEEwOURBRDVCRTAw
QUZDODQ3IC8qIENoYXJzZXREYXRhLmggKi87IH07CiAJCTkzMjZEQzBDMDlEQUQ1RDYwMEFGQzg0
NyAvKiBDaGFyc2V0RGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2NTY1ODFBQzA5RDE0RUU2MDAwRTYxRDcgLyogQ2hhcnNldERhdGEuY3BwICov
OyB9OwpAQCAtNDE5MSw2ICs0MTkyLDcgQEAKIAkJOTMwNzA2MTMwOUUwQ0E4MjAwQjE3RkU0IC8q
IERlcml2ZWRTb3VyY2VzLm1ha2UgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGlj
aXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUubWFrZTsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IERl
cml2ZWRTb3VyY2VzLm1ha2U7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHVzZXNUYWJzID0gMTsg
fTsKIAkJOTMwN0YxRDUwQUYyRDU5MDAwREJBMzFBIC8qIEhpdFRlc3RSZXN1bHQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhpdFRlc3RSZXN1bHQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzA3RjFENjBBRjJENTkwMDBEQkEzMUEgLyogSGl0
VGVzdFJlc3VsdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGl0VGVzdFJl
c3VsdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5MzA5MDEwQjBBRjY3NTZEMDA4
MURGMDEgLyogSGl0VGVzdFJlcXVlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEhpdFRlc3RSZXF1ZXN0Lmg7IHBhdGggPSByZW5kZXJpbmcvSGl0VGVzdFJlcXVlc3QuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMwQ0FBRDYwOUM0OTVCNjAwMjI5QzA0IC8q
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OTMwQ0FCODgwOUM0OUVGQTAwMjI5QzA0IC8qIENhbnZhc0dyYWRpZW50LmlkbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBDYW52YXNHcmFkaWVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTkzMENBQjhGMDlDNDlGMUIwMDIyOUMwNCAvKiBDYW52YXNQYXR0ZXJuLmlkbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBDYW52YXNQYXR0ZXJuLmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTU3OTIsNiArNTc5NCw3IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQk2NUM5
N0FGMjA4RUE5MDg4MDBBQ0QyNzMgLyogY29uZmlnLmggKi8sCiAJCQkJRURFQzk4MDIwQUVEN0Ux
NzAwNTkxMzdGIC8qIFdlYkNvcmVQcmVmaXguaCAqLywKKwkJCQk5MzA5MDEwQjBBRjY3NTZEMDA4
MURGMDEgLyogSGl0VGVzdFJlcXVlc3QuaCAqLywKIAkJCQk5MzA3MDYxMzA5RTBDQTgyMDBCMTdG
RTQgLyogRGVyaXZlZFNvdXJjZXMubWFrZSAqLywKIAkJCQk5M0YxOUIxOTA4MjQ1RTU5MDAxRTlB
QkMgLyogSW5mby5wbGlzdCAqLywKIAkJCQlGNThFRjU4RTAyREZERkI3MDE4NjM1Q0EgLyogV2Vi
Q29yZS5leHAgKi8sCkBAIC0xMDQ4NCw2ICsxMDQ4Nyw3IEBACiAJCQkJOTMwN0YxRDgwQUYyRDU5
MDAwREJBMzFBIC8qIEhpdFRlc3RSZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1ODgyMTY2
MEFGNENERjcwMEYwMUQxRiAvKiBSZXNvdXJjZVJlc3BvbnNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk2NTg4MjE2QjBBRjRDRTEyMDBGMDFEMUYgLyogUmVzb3VyY2VSZXNwb25zZU1hYy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJOTMwOTAxMEMwQUY2NzU2RDAwODFERjAxIC8qIEhpdFRlc3RSZXF1ZXN0
LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKIAkJfTsKQEAgLTExNzE2LDcgKzExNzIwLDcgQEAKIAkJCQk4NTNDQTlGMDBB
RUVDNjU3MDAyMzcyREMgLyogUmVuZGVyUGF0aC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NTRG
Njg4ODBBRjFCN0M1MDA2NUJERDYgLyogQ2FjaGVkUmVzb3VyY2VNYWMubW0gaW4gU291cmNlcyAq
LywKIAkJCQk5MzA3RjFENzBBRjJENTkwMDBEQkEzMUEgLyogSGl0VGVzdFJlc3VsdC5jcHAgaW4g
U291cmNlcyAqLywKLSAJCQkJNjU4ODIxNkMwQUY0Q0UxMjAwRjAxRDFGIC8qIFJlc291cmNlUmVz
cG9uc2VNYWMubW0gaW4gU291cmNlcyAqLywKKwkJCQk2NTg4MjE2QzBBRjRDRTEyMDBGMDFEMUYg
LyogUmVzb3VyY2VSZXNwb25zZU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzMkUxNjA5MEFG
NTc4MzQwMDI1RjQwOCAvKiBGcmFtZUxvYWRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0Uy
MjdFMDBBRjU4OUFEMDBENDgzMjQgLyogRG9jdW1lbnRMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJOTNFMjI3RTEwQUY1ODlBRDAwRDQ4MzI0IC8qIE1haW5SZXNvdXJjZUxvYWRlci5jcHAg
aW4gU291cmNlcyAqLywKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL21hYy9GcmFtZU1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9tYWMvRnJhbWVNYWMubW0JKHJldmlzaW9uIDE3NDM2
KQorKysgV2ViQ29yZS9icmlkZ2UvbWFjL0ZyYW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01
Niw2ICs1Niw3IEBACiAjaW1wb3J0ICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW1wb3J0ICJIVE1M
TmFtZXMuaCIKICNpbXBvcnQgIkhUTUxUYWJsZUNlbGxFbGVtZW50LmgiCisjaW1wb3J0ICJIaXRU
ZXN0UmVxdWVzdC5oIgogI2ltcG9ydCAiSGl0VGVzdFJlc3VsdC5oIgogI2ltcG9ydCAiTG9nZ2lu
Zy5oIgogI2ltcG9ydCAiTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5oIgpAQCAtMTQxOCw5
ICsxNDE5LDEwIEBACiAgICAgfQogCiAgICAgTlNQb2ludCBsb2MgPSBbZXZlbnQgbG9jYXRpb25J
bldpbmRvd107CisgICAgSGl0VGVzdFJlcXVlc3QgcmVxdWVzdCh0cnVlLCBmYWxzZSk7CiAgICAg
SW50UG9pbnQgbW91c2VEb3duUG9zID0gZC0+bV92aWV3LT53aW5kb3dUb0NvbnRlbnRzKEludFBv
aW50KGxvYykpOwotICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0KG1vdXNlRG93blBvcywgdHJ1ZSwg
ZmFsc2UpOwotICAgIHJlbmRlcmVyKCktPmxheWVyKCktPmhpdFRlc3QocmVzdWx0KTsKKyAgICBI
aXRUZXN0UmVzdWx0IHJlc3VsdChtb3VzZURvd25Qb3MpOworICAgIHJlbmRlcmVyKCktPmxheWVy
KCktPmhpdFRlc3QocmVxdWVzdCwgcmVzdWx0KTsKICAgICBib29sIHNyY0lzREhUTUw7CiAgICAg
cmV0dXJuIHJlc3VsdC5pbm5lck5vZGUoKS0+cmVuZGVyZXIoKS0+ZHJhZ2dhYmxlTm9kZShESFRN
TEZsYWcsIFVBRmxhZywgbW91c2VEb3duUG9zLngoKSwgbW91c2VEb3duUG9zLnkoKSwgc3JjSXNE
SFRNTCk7CiB9CkBAIC0xNDc5LDggKzE0ODEsOSBAQAogICAgICAgICAKICAgICAgICAgaWYgKG1v
dXNlRG93bk1heVN0YXJ0RHJhZygpICYmICFfZHJhZ1NyYykgewogICAgICAgICAgICAgLy8gdHJ5
IHRvIGZpbmQgYW4gZWxlbWVudCB0aGF0IHdhbnRzIHRvIGJlIGRyYWdnZWQKLSAgICAgICAgICAg
IEhpdFRlc3RSZXN1bHQgcmVzdWx0KG1fbW91c2VEb3duUG9zLCB0cnVlLCBmYWxzZSk7Ci0gICAg
ICAgICAgICByZW5kZXJlcigpLT5sYXllcigpLT5oaXRUZXN0KHJlc3VsdCk7CisgICAgICAgICAg
ICBIaXRUZXN0UmVxdWVzdCByZXF1ZXN0KHRydWUsIGZhbHNlKTsKKyAgICAgICAgICAgIEhpdFRl
c3RSZXN1bHQgcmVzdWx0KG1fbW91c2VEb3duUG9zKTsKKyAgICAgICAgICAgIHJlbmRlcmVyKCkt
PmxheWVyKCktPmhpdFRlc3QocmVxdWVzdCwgcmVzdWx0KTsKICAgICAgICAgICAgIE5vZGUgKm5v
ZGUgPSByZXN1bHQuaW5uZXJOb2RlKCk7CiAgICAgICAgICAgICBfZHJhZ1NyYyA9IChub2RlICYm
IG5vZGUtPnJlbmRlcmVyKCkpID8gbm9kZS0+cmVuZGVyZXIoKS0+ZHJhZ2dhYmxlTm9kZShfZHJh
Z1NyY01heUJlREhUTUwsIF9kcmFnU3JjTWF5QmVVQSwgbV9tb3VzZURvd25Qb3MueCgpLCBtX21v
dXNlRG93blBvcy55KCksIF9kcmFnU3JjSXNESFRNTCkgOiAwOwogICAgICAgICAgICAgaWYgKCFf
ZHJhZ1NyYykgewpJbmRleDogV2ViQ29yZS9icmlkZ2UvbWFjL1dlYkNvcmVBWE9iamVjdC5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9tYWMvV2ViQ29yZUFYT2JqZWN0Lm1tCShyZXZp
c2lvbiAxNzQzNikKKysrIFdlYkNvcmUvYnJpZGdlL21hYy9XZWJDb3JlQVhPYmplY3QubW0JKHdv
cmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAKICNpbXBvcnQgIkhUTUxNYXBFbGVtZW50Lmgi
CiAjaW1wb3J0ICJIVE1MTmFtZXMuaCIKICNpbXBvcnQgIkhUTUxTZWxlY3RFbGVtZW50LmgiCisj
aW1wb3J0ICJIaXRUZXN0UmVxdWVzdC5oIgogI2ltcG9ydCAiSGl0VGVzdFJlc3VsdC5oIgogI2lt
cG9ydCAiUmVuZGVySW1hZ2UuaCIKICNpbXBvcnQgIlJlbmRlckxpc3RNYXJrZXIuaCIKQEAgLTEy
NjMsOCArMTI2NCw5IEBACiAgICAgICAgIE5TUG9pbnQgd2luZG93Q29vcmQgPSBbW3ZpZXcgd2lu
ZG93XSBjb252ZXJ0U2NyZWVuVG9CYXNlOiBwb2ludF07CiAgICAgICAgIG91cnBvaW50ID0gW3Zp
ZXcgY29udmVydFBvaW50OndpbmRvd0Nvb3JkIGZyb21WaWV3Om5pbF07CiAgICAgICAgIAotICAg
ICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdChJbnRQb2ludChvdXJwb2ludCksIHRydWUsIHRydWUp
OwotICAgICAgICByZW5kZXJlci0+bGF5ZXIoKS0+aGl0VGVzdChyZXN1bHQpOworICAgICAgICBI
aXRUZXN0UmVxdWVzdCByZXF1ZXN0KHRydWUsIHRydWUpOworICAgICAgICBIaXRUZXN0UmVzdWx0
IHJlc3VsdCA9IEhpdFRlc3RSZXN1bHQoSW50UG9pbnQob3VycG9pbnQpKTsKKyAgICAgICAgcmVu
ZGVyZXItPmxheWVyKCktPmhpdFRlc3QocmVxdWVzdCwgcmVzdWx0KTsKICAgICAgICAgaW5uZXJO
b2RlID0gcmVzdWx0LmlubmVyTm9kZSgpOwogICAgICAgICBpZiAoIWlubmVyTm9kZSB8fCAhaW5u
ZXJOb2RlLT5yZW5kZXJlcigpKQogICAgICAgICAgICAgcmV0dXJuIG5pbDsKQEAgLTIzMDMsOCAr
MjMwNSw5IEBACiAgICAgaWYgKCFtX3JlbmRlcmVyKQogICAgICAgICByZXR1cm4gTlNBY2Nlc3Np
YmlsaXR5VW5pZ25vcmVkQW5jZXN0b3Ioc2VsZik7CiAgICAgCi0gICAgSGl0VGVzdFJlc3VsdCBy
ZXN1bHQoSW50UG9pbnQocG9pbnQpLCB0cnVlLCB0cnVlKTsKLSAgICBtX3JlbmRlcmVyLT5sYXll
cigpLT5oaXRUZXN0KHJlc3VsdCk7CisgICAgSGl0VGVzdFJlcXVlc3QgcmVxdWVzdCh0cnVlLCB0
cnVlKTsKKyAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IEhpdFRlc3RSZXN1bHQoSW50UG9pbnQo
cG9pbnQpKTsKKyAgICBtX3JlbmRlcmVyLT5sYXllcigpLT5oaXRUZXN0KHJlcXVlc3QsIHJlc3Vs
dCk7CiAgICAgaWYgKCFyZXN1bHQuaW5uZXJOb2RlKCkpCiAgICAgICAgIHJldHVybiBOU0FjY2Vz
c2liaWxpdHlVbmlnbm9yZWRBbmNlc3RvcihzZWxmKTsKICAgICBOb2RlKiBub2RlID0gcmVzdWx0
LmlubmVyTm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCShy
ZXZpc2lvbiAxNzQzNikKKysrIFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNywxMCArMzcsMTEgQEAKICNpbmNsdWRlICJIVE1MRnJhbWVTZXRFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgor
I2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCisjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgog
I2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIk1v
dXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuaCIKLSNpbmNsdWRlICJIaXRUZXN0UmVzdWx0Lmgi
CiAjaW5jbHVkZSAiT3ZlcmZsb3dFdmVudC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRF
dmVudC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU2Nyb2xsQmFyLmgiCkBAIC01Myw2ICs1NCw3IEBA
CiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJjc3NzdHlsZXNlbGVjdG9yLmgiCiAK
KwogI2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiWExpbmtOYW1lcy5oIgogI2luY2x1ZGUg
IlNWR05hbWVzLmgiCkBAIC0xMjM5LDggKzEyNDEsOSBAQAogICAgICAgICBpZiAoZG9jUmVuZGVy
ZXIpIHsKICAgICAgICAgICAgIEludFBvaW50IHZQb2ludCA9IHdpbmRvd1RvQ29udGVudHMoZS5w
b3MoKSk7CiAKLSAgICAgICAgICAgIEhpdFRlc3RSZXN1bHQgaGl0VGVzdFJlc3VsdCh2UG9pbnQs
IHRydWUsIGZhbHNlKTsKLSAgICAgICAgICAgIGRvYy0+cmVuZGVyZXIoKS0+bGF5ZXIoKS0+aGl0
VGVzdChoaXRUZXN0UmVzdWx0KTsgCisgICAgICAgICAgICBIaXRUZXN0UmVxdWVzdCBoaXRUZXN0
UmVxdWVzdCh0cnVlLCBmYWxzZSk7CisgICAgICAgICAgICBIaXRUZXN0UmVzdWx0IGhpdFRlc3RS
ZXN1bHQodlBvaW50KTsKKyAgICAgICAgICAgIGRvYy0+cmVuZGVyZXIoKS0+bGF5ZXIoKS0+aGl0
VGVzdChoaXRUZXN0UmVxdWVzdCwgaGl0VGVzdFJlc3VsdCk7IAogICAgICAgICAgICAgTm9kZSAq
bm9kZSA9IGhpdFRlc3RSZXN1bHQuaW5uZXJOb2RlKCk7CiAgICAgICAgICAgICBGcmFtZSogc3Vi
ZnJhbWUgPSBzdWJmcmFtZUZvclRhcmdldE5vZGUobm9kZSk7CiAgICAgICAgICAgICBpZiAoc3Vi
ZnJhbWUgJiYgcGFzc1doZWVsRXZlbnRUb1N1YmZyYW1lKGUsIHN1YmZyYW1lKSkgewpJbmRleDog
V2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRnJhbWUu
Y3BwCShyZXZpc2lvbiAxNzQzNikKKysrIFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU0LDEzICs1NCwxNCBAQAogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1
ZGUgIkhUTUxPYmplY3RFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFZpZXdTb3VyY2VEb2N1bWVu
dC5oIgorI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCisjaW5jbHVkZSAiSGl0VGVzdFJlc3Vs
dC5oIgogI2luY2x1ZGUgIkltYWdlRG9jdW1lbnQuaCIKICNpbmNsdWRlICJJbmRlbnRPdXRkZW50
Q29tbWFuZC5oIgogI2luY2x1ZGUgImxvYWRlci9pY29uL0ljb25EYXRhYmFzZS5oIgogI2luY2x1
ZGUgImxvYWRlci9pY29uL0ljb25Mb2FkZXIuaCIKICNpbmNsdWRlICJNZWRpYUZlYXR1cmVOYW1l
cy5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuaCIKLSNpbmNsdWRl
ICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKICNpbmNsdWRlICJQYWdl
LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TY3JvbGxCYXIuaCIKQEAgLTE3OTEsOCArMTc5Miw5IEBA
CiAgICAgaWYgKCFkb2N1bWVudCgpLT5yZW5kZXJlcigpKSAKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIAotICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0KHBvaW50LCB0cnVlLCB0cnVlKTsKLSAg
ICBkb2N1bWVudCgpLT5yZW5kZXJlcigpLT5sYXllcigpLT5oaXRUZXN0KHJlc3VsdCk7CisgICAg
SGl0VGVzdFJlcXVlc3QgcmVxdWVzdCh0cnVlLCB0cnVlKTsKKyAgICBIaXRUZXN0UmVzdWx0IHJl
c3VsdChwb2ludCk7CisgICAgZG9jdW1lbnQoKS0+cmVuZGVyZXIoKS0+bGF5ZXIoKS0+aGl0VGVz
dChyZXF1ZXN0LCByZXN1bHQpOwogICAgIE5vZGUgKmlubmVyTm9kZSA9IHJlc3VsdC5pbm5lck5v
ZGUoKTsKICAgICBpZiAoIWlubmVyTm9kZSB8fCAhaW5uZXJOb2RlLT5yZW5kZXJlcigpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC0yOTI2LDggKzI5MjgsOSBAQAogCiBIaXRUZXN0UmVzdWx0
IEZyYW1lOjpoaXRUZXN0UmVzdWx0QXRQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQsIGJvb2wg
YWxsb3dTaGFkb3dDb250ZW50KQogewotICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0KHBvaW50LCB0
cnVlLCB0cnVlKTsKLSAgICByZW5kZXJlcigpLT5sYXllcigpLT5oaXRUZXN0KHJlc3VsdCk7Cisg
ICAgSGl0VGVzdFJlcXVlc3QgcmVxdWVzdCh0cnVlLCB0cnVlKTsKKyAgICBIaXRUZXN0UmVzdWx0
IHJlc3VsdChwb2ludCk7CisgICAgcmVuZGVyZXIoKS0+bGF5ZXIoKS0+aGl0VGVzdChyZXF1ZXN0
LCByZXN1bHQpOwogCiAgICAgTm9kZSAqbjsKICAgICBXaWRnZXQgKndpZGdldCA9IDA7CkBAIC0y
OTQ5LDggKzI5NTIsOSBAQAogICAgICAgICB3aWRnZXRQb2ludC5zZXRYKHdpZGdldFBvaW50Lngo
KSAtIGFic1ggKyB2aWV3LT5jb250ZW50c1goKSk7CiAgICAgICAgIHdpZGdldFBvaW50LnNldFko
d2lkZ2V0UG9pbnQueSgpIC0gYWJzWSArIHZpZXctPmNvbnRlbnRzWSgpKTsKIAotICAgICAgICBI
aXRUZXN0UmVzdWx0IHdpZGdldEhpdFRlc3RSZXN1bHQod2lkZ2V0UG9pbnQsIHRydWUsIHRydWUp
OwotICAgICAgICBmcmFtZS0+cmVuZGVyZXIoKS0+bGF5ZXIoKS0+aGl0VGVzdCh3aWRnZXRIaXRU
ZXN0UmVzdWx0KTsKKyAgICAgICAgSGl0VGVzdFJlcXVlc3Qgd2lkZ2V0SGl0VGVzdFJlcXVlc3Qo
dHJ1ZSwgdHJ1ZSk7CisgICAgICAgIEhpdFRlc3RSZXN1bHQgd2lkZ2V0SGl0VGVzdFJlc3VsdCh3
aWRnZXRQb2ludCk7CisgICAgICAgIGZyYW1lLT5yZW5kZXJlcigpLT5sYXllcigpLT5oaXRUZXN0
KHdpZGdldEhpdFRlc3RSZXF1ZXN0LCB3aWRnZXRIaXRUZXN0UmVzdWx0KTsKICAgICAgICAgcmVz
dWx0ID0gd2lkZ2V0SGl0VGVzdFJlc3VsdDsKICAgICB9CiAgICAgCg==
</data>
<flag name="review"
          id="3903"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>