<?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>128387</bug_id>
          
          <creation_ts>2014-02-07 11:56:47 -0800</creation_ts>
          <short_desc>Rename ViewGestureController.mm to ViewGestureControllerMac.mm</short_desc>
          <delta_ts>2014-02-07 13:17:45 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tim Horton">thorton</reporter>
          <assigned_to name="Tim Horton">thorton</assigned_to>
          <cc>andersca</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>977973</commentid>
    <comment_count>0</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-02-07 11:56:47 -0800</bug_when>
    <thetext>Part of https://bugs.webkit.org/show_bug.cgi?id=128363</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>977975</commentid>
    <comment_count>1</comment_count>
      <attachid>223481</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-02-07 11:57:38 -0800</bug_when>
    <thetext>Created attachment 223481
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>977983</commentid>
    <comment_count>2</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-02-07 12:09:59 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/163640</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>223481</attachid>
            <date>2014-02-07 11:57:38 -0800</date>
            <delta_ts>2014-02-07 11:58:04 -0800</delta_ts>
            <desc>patch</desc>
            <filename>rename.diff</filename>
            <type>text/plain</type>
            <size>52808</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAyOWQyY2FmLi4zMWE0NjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEg
QEAKKzIwMTQtMDItMDcgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisK
KyAgICAgICAgUmVuYW1lIFZpZXdHZXN0dXJlQ29udHJvbGxlci5tbSB0byBWaWV3R2VzdHVyZUNv
bnRyb2xsZXJNYWMubW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEyODM4NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFzIGEgcHJlY3Vyc29yIHRvIGhhdmluZyBhIHNlY29uZCBuZWFybHkgY29tcGxldGVs
eSBkaXZlcmdlbnQKKyAgICAgICAgVmlld0dlc3R1cmVDb250cm9sbGVyIGltcGxlbWVudGF0aW9u
IGZvciBpT1MuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1ZpZXdHZXN0dXJlQ29udHJvbGxl
ck1hYy5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld0dl
c3R1cmVDb250cm9sbGVyLm1tLgorICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgUmVuYW1lIFZpZXdHZXN0dXJlQ29udHJvbGxlci5tbSB0byBWaWV3
R2VzdHVyZUNvbnRyb2xsZXJNYWMubW0uCisgICAgICAgIFVuZm9ydHVuYXRlbHksIHNpbmNlIHdl
J3JlIG5vdCByZW5hbWluZyB0aGUgY2xhc3MsIHRoZSBoZWFkZXIKKyAgICAgICAgaGFzIHRvIGtl
ZXAgaXRzIG5hbWUgKGFuZCB3aWxsIGJlIHRoZSByZWNpcGllbnQgb2YgYSBnaWFudCAjaWYgaW4g
YSBsYXRlcgorICAgICAgICBwYXRjaCksIGJlY2F1c2UgdGhlIG1lc3NhZ2UgcmVjZWl2ZXIgZ2Vu
ZXJhdGVkIGNvZGUgd2lsbCB0cnkgdG8gaW1wb3J0CisgICAgICAgIFZpZXdHZXN0dXJlQ29udHJv
bGxlci5oICh3aXRob3V0IHRoZSBNYWMgc3VmZml4KS4KKwogMjAxNC0wMi0wMyAgVGltIEhvcnRv
biAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBbd2syXSBpT1Mgc2hvdWxk
IHVzZSBhY2NlbGVyYXRlZCBkcmF3aW5nIGJ5IGRlZmF1bHQsIGV4Y2VwdCBpbiB0aGUgc2ltdWxh
dG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1ZpZXdHZXN0dXJl
Q29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld0dlc3R1cmVD
b250cm9sbGVyLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzE2YTVlLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld0dlc3R1cmVDb250cm9s
bGVyLm1tCisrKyAvZGV2L251bGwKQEAgLTEsNTYwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlZpZXdHZXN0dXJlQ29udHJvbGxlci5oIgot
Ci0jaWYgIVBMQVRGT1JNKElPUykKLQotI2ltcG9ydCAiTmF0aXZlV2ViV2hlZWxFdmVudC5oIgot
I2ltcG9ydCAiV2ViUGFnZUdyb3VwLmgiCi0jaW1wb3J0ICJWaWV3R2VzdHVyZUNvbnRyb2xsZXJN
ZXNzYWdlcy5oIgotI2ltcG9ydCAiVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvck1lc3NhZ2Vz
LmgiCi0jaW1wb3J0ICJWaWV3U25hcHNob3RTdG9yZS5oIgotI2ltcG9ydCAiV2ViQmFja0Zvcndh
cmRMaXN0LmgiCi0jaW1wb3J0ICJXZWJQYWdlTWVzc2FnZXMuaCIKLSNpbXBvcnQgIldlYlBhZ2VQ
cm94eS5oIgotI2ltcG9ydCAiV2ViUHJlZmVyZW5jZXMuaCIKLSNpbXBvcnQgIldlYlByb2Nlc3NQ
cm94eS5oIgotI2ltcG9ydCA8Q29jb2EvQ29jb2EuaD4KLSNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVh
cnR6Q29yZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlQ0FMYXllckV4dHJhcy5oPgotCi0j
aWYgZGVmaW5lZChfX2hhc19pbmNsdWRlKSAmJiBfX2hhc19pbmNsdWRlKDxJT1N1cmZhY2UvSU9T
dXJmYWNlUHJpdmF0ZS5oPikKLSNpbXBvcnQgPElPU3VyZmFjZS9JT1N1cmZhY2VQcml2YXRlLmg+
Ci0jZWxzZQotZW51bSB7Ci0gICAga0lPU3VyZmFjZVB1cmdlYWJsZU5vblZvbGF0aWxlID0gMCwK
LSAgICBrSU9TdXJmYWNlUHVyZ2VhYmxlVm9sYXRpbGUgPSAxLAotICAgIGtJT1N1cmZhY2VQdXJn
ZWFibGVFbXB0eSA9IDIsCi19OwotI2VuZGlmCi0KLSNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlO
X1JFUVVJUkVEID49IDEwOTAKLWV4dGVybiAiQyIgSU9SZXR1cm4gSU9TdXJmYWNlU2V0UHVyZ2Vh
YmxlKElPU3VyZmFjZVJlZiBidWZmZXIsIHVpbnQzMl90IG5ld1N0YXRlLCB1aW50MzJfdCAqb2xk
U3RhdGUpOwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9faGFzX2luY2x1ZGUpICYmIF9faGFzX2lu
Y2x1ZGUoPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZVByaXZhdGUuaD4pCi0jaW1wb3J0IDxRdWFydHpD
b3JlL1F1YXJ0ekNvcmVQcml2YXRlLmg+Ci0jZWxzZQotQGludGVyZmFjZSBDQUZpbHRlciA6IE5T
T2JqZWN0IDxOU0NvcHlpbmcsIE5TTXV0YWJsZUNvcHlpbmcsIE5TQ29kaW5nPgotQGVuZAotI2Vu
ZGlmCi0KLUBpbnRlcmZhY2UgQ0FGaWx0ZXIgKERldGFpbHMpCi0rIChDQUZpbHRlciAqKWZpbHRl
cldpdGhUeXBlOihOU1N0cmluZyAqKXR5cGU7Ci1AZW5kCi0KLWV4dGVybiBOU1N0cmluZyAqIGNv
bnN0IGtDQUZpbHRlckdhdXNzaWFuQmx1cjsKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0K
LXN0YXRpYyBjb25zdCBkb3VibGUgbWluTWFnbmlmaWNhdGlvbiA9IDE7Ci1zdGF0aWMgY29uc3Qg
ZG91YmxlIG1heE1hZ25pZmljYXRpb24gPSAzOwotCi1zdGF0aWMgY29uc3QgZG91YmxlIG1pbkVs
YXN0aWNNYWduaWZpY2F0aW9uID0gMC43NTsKLXN0YXRpYyBjb25zdCBkb3VibGUgbWF4RWxhc3Rp
Y01hZ25pZmljYXRpb24gPSA0OwotCi1zdGF0aWMgY29uc3QgZG91YmxlIHpvb21PdXRCb29zdCA9
IDEuNjsKLXN0YXRpYyBjb25zdCBkb3VibGUgem9vbU91dFJlc2lzdGFuY2UgPSAwLjEwOwotCi1z
dGF0aWMgY29uc3QgZmxvYXQgc21hcnRNYWduaWZpY2F0aW9uRWxlbWVudFBhZGRpbmcgPSAwLjA1
Owotc3RhdGljIGNvbnN0IGZsb2F0IHNtYXJ0TWFnbmlmaWNhdGlvblBhblNjcm9sbFRocmVzaG9s
ZCA9IDEwMDsKLQotc3RhdGljIGNvbnN0IGRvdWJsZSBzd2lwZU92ZXJsYXlTaGFkb3dPcGFjaXR5
ID0gMC42NjsKLXN0YXRpYyBjb25zdCBkb3VibGUgc3dpcGVPdmVybGF5U2hhZG93UmFkaXVzID0g
MzsKLQotc3RhdGljIGNvbnN0IGZsb2F0IHN3aXBlU25hcHNob3RSZW1vdmFsUmVuZGVyVHJlZVNp
emVUYXJnZXRGcmFjdGlvbiA9IDAuNTsKLXN0YXRpYyBjb25zdCBzdGQ6OmNocm9ubzo6c2Vjb25k
cyBzd2lwZVNuYXBzaG90UmVtb3ZhbFdhdGNoZG9nRHVyYXRpb24gPSAzX3M7Ci0KLW5hbWVzcGFj
ZSBXZWJLaXQgewotCi1WaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlZpZXdHZXN0dXJlQ29udHJvbGxl
cihXZWJQYWdlUHJveHkmIHdlYlBhZ2VQcm94eSkKLSAgICA6IG1fd2ViUGFnZVByb3h5KHdlYlBh
Z2VQcm94eSkKLSAgICAsIG1fbGFzdE1hZ25pZmljYXRpb25HZXN0dXJlV2FzU21hcnRNYWduaWZp
Y2F0aW9uKGZhbHNlKQotICAgICwgbV9hY3RpdmVHZXN0dXJlVHlwZShWaWV3R2VzdHVyZVR5cGU6
Ok5vbmUpCi0gICAgLCBtX3Zpc2libGVDb250ZW50UmVjdElzVmFsaWQoZmFsc2UpCi0gICAgLCBt
X2ZyYW1lSGFuZGxlc01hZ25pZmljYXRpb25HZXN0dXJlKGZhbHNlKQotICAgICwgbV9zd2lwZVRy
YW5zaXRpb25TdHlsZShTd2lwZVRyYW5zaXRpb25TdHlsZTo6T3ZlcmxhcCkKLSAgICAsIG1fc3dp
cGVXYXRjaGRvZ1RpbWVyKHRoaXMsICZWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OnN3aXBlU25hcHNo
b3RXYXRjaGRvZ1RpbWVyRmlyZWQpCi0gICAgLCBtX2hhc1BlbmRpbmdTd2lwZShmYWxzZSkKLXsK
LSAgICBtX3dlYlBhZ2VQcm94eS5wcm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2Vz
OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV93ZWJQYWdl
UHJveHkucGFnZUlEKCksICp0aGlzKTsKLX0KLQotVmlld0dlc3R1cmVDb250cm9sbGVyOjp+Vmll
d0dlc3R1cmVDb250cm9sbGVyKCkKLXsKLSAgICBtX3dlYlBhZ2VQcm94eS5wcm9jZXNzKCkucmVt
b3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6Om1lc3Nh
Z2VSZWNlaXZlck5hbWUoKSwgbV93ZWJQYWdlUHJveHkucGFnZUlEKCkpOwotfQotCi1zdGF0aWMg
ZG91YmxlIHJlc2lzdGFuY2VGb3JEZWx0YShkb3VibGUgZGVsdGFTY2FsZSwgZG91YmxlIGN1cnJl
bnRTY2FsZSkKLXsKLSAgICAvLyBab29tIG91dCB3aXRoIHNsaWdodCBhY2NlbGVyYXRpb24sIHVu
dGlsIHdlIHJlYWNoIG1pbmltdW0gc2NhbGUuCi0gICAgaWYgKGRlbHRhU2NhbGUgPCAwICYmIGN1
cnJlbnRTY2FsZSA+IG1pbk1hZ25pZmljYXRpb24pCi0gICAgICAgIHJldHVybiB6b29tT3V0Qm9v
c3Q7Ci0KLSAgICAvLyBab29tIGluIHdpdGggbm8gYWNjZWxlcmF0aW9uLCB1bnRpbCB3ZSByZWFj
aCBtYXhpbXVtIHNjYWxlLgotICAgIGlmIChkZWx0YVNjYWxlID4gMCAmJiBjdXJyZW50U2NhbGUg
PCBtYXhNYWduaWZpY2F0aW9uKQotICAgICAgICByZXR1cm4gMTsKLQotICAgIC8vIE91dHNpZGUg
b2YgdGhlIGV4dHJlbWVzLCByZXNpc3QgZnVydGhlciBzY2FsaW5nLgotICAgIGRvdWJsZSBsaW1p
dCA9IGN1cnJlbnRTY2FsZSA8IG1pbk1hZ25pZmljYXRpb24gPyBtaW5NYWduaWZpY2F0aW9uIDog
bWF4TWFnbmlmaWNhdGlvbjsKLSAgICBkb3VibGUgc2NhbGVEaXN0YW5jZSA9IGFicyhsaW1pdCAt
IGN1cnJlbnRTY2FsZSk7Ci0gICAgZG91YmxlIHNjYWxlUGVyY2VudCA9IHN0ZDo6bWluKHN0ZDo6
bWF4KHNjYWxlRGlzdGFuY2UgLyBsaW1pdCwgMC4pLCAxLik7Ci0gICAgZG91YmxlIHJlc2lzdGFu
Y2UgPSB6b29tT3V0UmVzaXN0YW5jZSArIHNjYWxlUGVyY2VudCAqICgwLjAxIC0gem9vbU91dFJl
c2lzdGFuY2UpOwotCi0gICAgcmV0dXJuIHJlc2lzdGFuY2U7Ci19Ci0KLUZsb2F0UG9pbnQgVmll
d0dlc3R1cmVDb250cm9sbGVyOjpzY2FsZWRNYWduaWZpY2F0aW9uT3JpZ2luKEZsb2F0UG9pbnQg
b3JpZ2luLCBkb3VibGUgc2NhbGUpCi17Ci0gICAgRmxvYXRQb2ludCBzY2FsZWRNYWduaWZpY2F0
aW9uT3JpZ2luKG9yaWdpbik7Ci0gICAgc2NhbGVkTWFnbmlmaWNhdGlvbk9yaWdpbi5tb3ZlQnko
bV92aXNpYmxlQ29udGVudFJlY3QubG9jYXRpb24oKSk7Ci0gICAgZmxvYXQgbWFnbmlmaWNhdGlv
bk9yaWdpblNjYWxlID0gMSAtIChzY2FsZSAvIG1fd2ViUGFnZVByb3h5LnBhZ2VTY2FsZUZhY3Rv
cigpKTsKLSAgICBzY2FsZWRNYWduaWZpY2F0aW9uT3JpZ2luLnNjYWxlKG1hZ25pZmljYXRpb25P
cmlnaW5TY2FsZSwgbWFnbmlmaWNhdGlvbk9yaWdpblNjYWxlKTsKLSAgICByZXR1cm4gc2NhbGVk
TWFnbmlmaWNhdGlvbk9yaWdpbjsKLX0KLQotdm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmRp
ZENvbGxlY3RHZW9tZXRyeUZvck1hZ25pZmljYXRpb25HZXN0dXJlKEZsb2F0UmVjdCB2aXNpYmxl
Q29udGVudFJlY3QsIGJvb2wgZnJhbWVIYW5kbGVzTWFnbmlmaWNhdGlvbkdlc3R1cmUpCi17Ci0g
ICAgbV9hY3RpdmVHZXN0dXJlVHlwZSA9IFZpZXdHZXN0dXJlVHlwZTo6TWFnbmlmaWNhdGlvbjsK
LSAgICBtX3Zpc2libGVDb250ZW50UmVjdCA9IHZpc2libGVDb250ZW50UmVjdDsKLSAgICBtX3Zp
c2libGVDb250ZW50UmVjdElzVmFsaWQgPSB0cnVlOwotICAgIG1fZnJhbWVIYW5kbGVzTWFnbmlm
aWNhdGlvbkdlc3R1cmUgPSBmcmFtZUhhbmRsZXNNYWduaWZpY2F0aW9uR2VzdHVyZTsKLX0KLQot
dm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmhhbmRsZU1hZ25pZmljYXRpb25HZXN0dXJlKGRv
dWJsZSBzY2FsZSwgRmxvYXRQb2ludCBvcmlnaW4pCi17Ci0gICAgQVNTRVJUKG1fYWN0aXZlR2Vz
dHVyZVR5cGUgPT0gVmlld0dlc3R1cmVUeXBlOjpOb25lIHx8IG1fYWN0aXZlR2VzdHVyZVR5cGUg
PT0gVmlld0dlc3R1cmVUeXBlOjpNYWduaWZpY2F0aW9uKTsKLQotICAgIGlmIChtX2FjdGl2ZUdl
c3R1cmVUeXBlID09IFZpZXdHZXN0dXJlVHlwZTo6Tm9uZSkgewotICAgICAgICAvLyBGSVhNRTog
V2UgZHJvcCB0aGUgZmlyc3QgZnJhbWUgb2YgdGhlIGdlc3R1cmUgb24gdGhlIGZsb29yLCBiZWNh
dXNlIHdlIGRvbid0IGhhdmUgdGhlIHZpc2libGUgY29udGVudCBib3VuZHMgeWV0LgotICAgICAg
ICBtX21hZ25pZmljYXRpb24gPSBtX3dlYlBhZ2VQcm94eS5wYWdlU2NhbGVGYWN0b3IoKTsKLSAg
ICAgICAgbV93ZWJQYWdlUHJveHkucHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OlZpZXdHZXN0dXJl
R2VvbWV0cnlDb2xsZWN0b3I6OkNvbGxlY3RHZW9tZXRyeUZvck1hZ25pZmljYXRpb25HZXN0dXJl
KCksIG1fd2ViUGFnZVByb3h5LnBhZ2VJRCgpKTsKLSAgICAgICAgbV9sYXN0TWFnbmlmaWNhdGlv
bkdlc3R1cmVXYXNTbWFydE1hZ25pZmljYXRpb24gPSBmYWxzZTsKLQotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgLy8gV2UncmUgc3RpbGwgd2FpdGluZyBmb3IgdGhlIERpZENvbGxlY3RH
ZW9tZXRyeSBjYWxsYmFjay4KLSAgICBpZiAoIW1fdmlzaWJsZUNvbnRlbnRSZWN0SXNWYWxpZCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9hY3RpdmVHZXN0dXJlVHlwZSA9IFZpZXdHZXN0dXJl
VHlwZTo6TWFnbmlmaWNhdGlvbjsKLQotICAgIGRvdWJsZSBzY2FsZVdpdGhSZXNpc3RhbmNlID0g
cmVzaXN0YW5jZUZvckRlbHRhKHNjYWxlLCBtX21hZ25pZmljYXRpb24pICogc2NhbGU7Ci0KLSAg
ICBtX21hZ25pZmljYXRpb24gKz0gbV9tYWduaWZpY2F0aW9uICogc2NhbGVXaXRoUmVzaXN0YW5j
ZTsKLSAgICBtX21hZ25pZmljYXRpb24gPSBzdGQ6Om1pbihzdGQ6Om1heChtX21hZ25pZmljYXRp
b24sIG1pbkVsYXN0aWNNYWduaWZpY2F0aW9uKSwgbWF4RWxhc3RpY01hZ25pZmljYXRpb24pOwot
Ci0gICAgbV9tYWduaWZpY2F0aW9uT3JpZ2luID0gb3JpZ2luOwotCi0gICAgaWYgKG1fZnJhbWVI
YW5kbGVzTWFnbmlmaWNhdGlvbkdlc3R1cmUpCi0gICAgICAgIG1fd2ViUGFnZVByb3h5LnNjYWxl
UGFnZShtX21hZ25pZmljYXRpb24sIHJvdW5kZWRJbnRQb2ludChvcmlnaW4pKTsKLSAgICBlbHNl
Ci0gICAgICAgIG1fd2ViUGFnZVByb3h5LmRyYXdpbmdBcmVhKCktPmFkanVzdFRyYW5zaWVudFpv
b20obV9tYWduaWZpY2F0aW9uLCBzY2FsZWRNYWduaWZpY2F0aW9uT3JpZ2luKG9yaWdpbiwgbV9t
YWduaWZpY2F0aW9uKSk7Ci19Ci0KLXZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjplbmRNYWdu
aWZpY2F0aW9uR2VzdHVyZSgpCi17Ci0gICAgQVNTRVJUKG1fYWN0aXZlR2VzdHVyZVR5cGUgPT0g
Vmlld0dlc3R1cmVUeXBlOjpNYWduaWZpY2F0aW9uKTsKLQotICAgIGRvdWJsZSBuZXdNYWduaWZp
Y2F0aW9uID0gc3RkOjptaW4oc3RkOjptYXgobV9tYWduaWZpY2F0aW9uLCBtaW5NYWduaWZpY2F0
aW9uKSwgbWF4TWFnbmlmaWNhdGlvbik7Ci0KLSAgICBpZiAobV9mcmFtZUhhbmRsZXNNYWduaWZp
Y2F0aW9uR2VzdHVyZSkKLSAgICAgICAgbV93ZWJQYWdlUHJveHkuc2NhbGVQYWdlKG5ld01hZ25p
ZmljYXRpb24sIHJvdW5kZWRJbnRQb2ludChtX21hZ25pZmljYXRpb25PcmlnaW4pKTsKLSAgICBl
bHNlCi0gICAgICAgIG1fd2ViUGFnZVByb3h5LmRyYXdpbmdBcmVhKCktPmNvbW1pdFRyYW5zaWVu
dFpvb20obmV3TWFnbmlmaWNhdGlvbiwgc2NhbGVkTWFnbmlmaWNhdGlvbk9yaWdpbihtX21hZ25p
ZmljYXRpb25PcmlnaW4sIG5ld01hZ25pZmljYXRpb24pKTsKLQotICAgIG1fYWN0aXZlR2VzdHVy
ZVR5cGUgPSBWaWV3R2VzdHVyZVR5cGU6Ok5vbmU7Ci19Ci0KLXZvaWQgVmlld0dlc3R1cmVDb250
cm9sbGVyOjpoYW5kbGVTbWFydE1hZ25pZmljYXRpb25HZXN0dXJlKEZsb2F0UG9pbnQgb3JpZ2lu
KQotewotICAgIGlmIChtX2FjdGl2ZUdlc3R1cmVUeXBlICE9IFZpZXdHZXN0dXJlVHlwZTo6Tm9u
ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV93ZWJQYWdlUHJveHkucHJvY2VzcygpLnNlbmQo
TWVzc2FnZXM6OlZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3I6OkNvbGxlY3RHZW9tZXRyeUZv
clNtYXJ0TWFnbmlmaWNhdGlvbkdlc3R1cmUob3JpZ2luKSwgbV93ZWJQYWdlUHJveHkucGFnZUlE
KCkpOwotfQotCi1zdGF0aWMgZmxvYXQgbWF4aW11bVJlY3RhbmdsZUNvbXBvbmVudERlbHRhKEZs
b2F0UmVjdCBhLCBGbG9hdFJlY3QgYikKLXsKLSAgICByZXR1cm4gc3RkOjptYXgoZmFicyhhLngo
KSAtIGIueCgpKSwgc3RkOjptYXgoZmFicyhhLnkoKSAtIGIueSgpKSwgc3RkOjptYXgoZmFicyhh
LndpZHRoKCkgLSBiLndpZHRoKCkpLCBmYWJzKGEuaGVpZ2h0KCkgLSBiLmhlaWdodCgpKSkpKTsK
LX0KLQotdm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmRpZENvbGxlY3RHZW9tZXRyeUZvclNt
YXJ0TWFnbmlmaWNhdGlvbkdlc3R1cmUoRmxvYXRQb2ludCBvcmlnaW4sIEZsb2F0UmVjdCByZW5k
ZXJSZWN0LCBGbG9hdFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0LCBib29sIGlzUmVwbGFjZWRFbGVt
ZW50LCBib29sIGZyYW1lSGFuZGxlc01hZ25pZmljYXRpb25HZXN0dXJlKQotewotICAgIGlmIChm
cmFtZUhhbmRsZXNNYWduaWZpY2F0aW9uR2VzdHVyZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
ZG91YmxlIGN1cnJlbnRTY2FsZUZhY3RvciA9IG1fd2ViUGFnZVByb3h5LnBhZ2VTY2FsZUZhY3Rv
cigpOwotCi0gICAgRmxvYXRSZWN0IHVuc2NhbGVkVGFyZ2V0UmVjdCA9IHJlbmRlclJlY3Q7Ci0g
ICAgdW5zY2FsZWRUYXJnZXRSZWN0LnNjYWxlKDEgLyBjdXJyZW50U2NhbGVGYWN0b3IpOwotICAg
IHVuc2NhbGVkVGFyZ2V0UmVjdC5pbmZsYXRlWCh1bnNjYWxlZFRhcmdldFJlY3Qud2lkdGgoKSAq
IHNtYXJ0TWFnbmlmaWNhdGlvbkVsZW1lbnRQYWRkaW5nKTsKLSAgICB1bnNjYWxlZFRhcmdldFJl
Y3QuaW5mbGF0ZVkodW5zY2FsZWRUYXJnZXRSZWN0LmhlaWdodCgpICogc21hcnRNYWduaWZpY2F0
aW9uRWxlbWVudFBhZGRpbmcpOwotCi0gICAgZG91YmxlIHRhcmdldE1hZ25pZmljYXRpb24gPSB2
aXNpYmxlQ29udGVudFJlY3Qud2lkdGgoKSAvIHVuc2NhbGVkVGFyZ2V0UmVjdC53aWR0aCgpOwot
Ci0gICAgLy8gRm9yIHJlcGxhY2VkIGVsZW1lbnRzIGxpa2UgaW1hZ2VzLCB3ZSB3YW50IHRvIGZp
dCB0aGUgd2hvbGUgZWxlbWVudAotICAgIC8vIGluIHRoZSB2aWV3LCBzbyBzY2FsZSBpdCBkb3du
IGVub3VnaCB0byBtYWtlIGJvdGggZGltZW5zaW9ucyBmaXQgaWYgcG9zc2libGUuCi0gICAgaWYg
KGlzUmVwbGFjZWRFbGVtZW50KQotICAgICAgICB0YXJnZXRNYWduaWZpY2F0aW9uID0gc3RkOjpt
aW4odGFyZ2V0TWFnbmlmaWNhdGlvbiwgc3RhdGljX2Nhc3Q8ZG91YmxlPih2aXNpYmxlQ29udGVu
dFJlY3QuaGVpZ2h0KCkgLyB1bnNjYWxlZFRhcmdldFJlY3QuaGVpZ2h0KCkpKTsKLQotICAgIHRh
cmdldE1hZ25pZmljYXRpb24gPSBzdGQ6Om1pbihzdGQ6Om1heCh0YXJnZXRNYWduaWZpY2F0aW9u
LCBtaW5NYWduaWZpY2F0aW9uKSwgbWF4TWFnbmlmaWNhdGlvbik7Ci0KLSAgICAvLyBBbGxvdyBw
YW5uaW5nIGJldHdlZW4gZWxlbWVudHMgdmlhIGRvdWJsZS10YXAgd2hpbGUgbWFnbmlmaWVkLCB1
bmxlc3MgdGhlIHRhcmdldCByZWN0IGlzCi0gICAgLy8gc2ltaWxhciB0byB0aGUgbGFzdCBvbmUg
b3IgdGhlIG1vdXNlIGhhcyBub3QgbW92ZWQsIGluIHdoaWNoIGNhc2Ugd2UnbGwgem9vbSBhbGwg
dGhlIHdheSBvdXQuCi0gICAgaWYgKGN1cnJlbnRTY2FsZUZhY3RvciA+IDEgJiYgbV9sYXN0TWFn
bmlmaWNhdGlvbkdlc3R1cmVXYXNTbWFydE1hZ25pZmljYXRpb24pIHsKLSAgICAgICAgaWYgKG1h
eGltdW1SZWN0YW5nbGVDb21wb25lbnREZWx0YShtX2xhc3RTbWFydE1hZ25pZmljYXRpb25VbnNj
YWxlZFRhcmdldFJlY3QsIHVuc2NhbGVkVGFyZ2V0UmVjdCkgPCBzbWFydE1hZ25pZmljYXRpb25Q
YW5TY3JvbGxUaHJlc2hvbGQpCi0gICAgICAgICAgICB0YXJnZXRNYWduaWZpY2F0aW9uID0gMTsK
LQotICAgICAgICBpZiAobV9sYXN0U21hcnRNYWduaWZpY2F0aW9uT3JpZ2luID09IG9yaWdpbikK
LSAgICAgICAgICAgIHRhcmdldE1hZ25pZmljYXRpb24gPSAxOwotICAgIH0KLQotICAgIEZsb2F0
UmVjdCB0YXJnZXRSZWN0KHVuc2NhbGVkVGFyZ2V0UmVjdCk7Ci0gICAgdGFyZ2V0UmVjdC5zY2Fs
ZSh0YXJnZXRNYWduaWZpY2F0aW9uKTsKLSAgICBGbG9hdFBvaW50IHRhcmdldE9yaWdpbih2aXNp
YmxlQ29udGVudFJlY3QuY2VudGVyKCkpOwotICAgIHRhcmdldE9yaWdpbi5tb3ZlQnkoLXRhcmdl
dFJlY3QuY2VudGVyKCkpOwotCi0gICAgbV93ZWJQYWdlUHJveHkuZHJhd2luZ0FyZWEoKS0+YWRq
dXN0VHJhbnNpZW50Wm9vbShtX3dlYlBhZ2VQcm94eS5wYWdlU2NhbGVGYWN0b3IoKSwgc2NhbGVk
TWFnbmlmaWNhdGlvbk9yaWdpbihGbG9hdFBvaW50KCksIG1fd2ViUGFnZVByb3h5LnBhZ2VTY2Fs
ZUZhY3RvcigpKSk7Ci0gICAgbV93ZWJQYWdlUHJveHkuZHJhd2luZ0FyZWEoKS0+Y29tbWl0VHJh
bnNpZW50Wm9vbSh0YXJnZXRNYWduaWZpY2F0aW9uLCB0YXJnZXRPcmlnaW4pOwotCi0gICAgbV9s
YXN0U21hcnRNYWduaWZpY2F0aW9uVW5zY2FsZWRUYXJnZXRSZWN0ID0gdW5zY2FsZWRUYXJnZXRS
ZWN0OwotICAgIG1fbGFzdFNtYXJ0TWFnbmlmaWNhdGlvbk9yaWdpbiA9IG9yaWdpbjsKLQotICAg
IG1fbGFzdE1hZ25pZmljYXRpb25HZXN0dXJlV2FzU21hcnRNYWduaWZpY2F0aW9uID0gdHJ1ZTsK
LX0KLQotYm9vbCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmhhbmRsZVNjcm9sbFdoZWVsRXZlbnQo
TlNFdmVudCAqZXZlbnQpCi17Ci0gICAgaWYgKG1fYWN0aXZlR2VzdHVyZVR5cGUgIT0gVmlld0dl
c3R1cmVUeXBlOjpOb25lKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoZXZlbnQu
cGhhc2UgIT0gTlNFdmVudFBoYXNlQmVnYW4pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IG1faGFzUGVuZGluZ1N3aXBlID0gZmFsc2U7Ci0KLSAgICBpZiAoZmFicyhldmVudC5zY3JvbGxp
bmdEZWx0YVgpIDwgZmFicyhldmVudC5zY3JvbGxpbmdEZWx0YVkpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBib29sIHdpbGxTd2lwZUxlZnQgPSBldmVudC5zY3JvbGxpbmdEZWx0YVgg
PiAwICYmIG1fd2ViUGFnZVByb3h5LmlzUGlubmVkVG9MZWZ0U2lkZSgpICYmIG1fd2ViUGFnZVBy
b3h5LmJhY2tGb3J3YXJkTGlzdCgpLmJhY2tJdGVtKCk7Ci0gICAgYm9vbCB3aWxsU3dpcGVSaWdo
dCA9IGV2ZW50LnNjcm9sbGluZ0RlbHRhWCA8IDAgJiYgbV93ZWJQYWdlUHJveHkuaXNQaW5uZWRU
b1JpZ2h0U2lkZSgpICYmIG1fd2ViUGFnZVByb3h5LmJhY2tGb3J3YXJkTGlzdCgpLmZvcndhcmRJ
dGVtKCk7Ci0gICAgaWYgKCF3aWxsU3dpcGVMZWZ0ICYmICF3aWxsU3dpcGVSaWdodCkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU3dpcGVEaXJlY3Rpb24gZGlyZWN0aW9uID0gd2lsbFN3
aXBlTGVmdCA/IFN3aXBlRGlyZWN0aW9uOjpMZWZ0IDogU3dpcGVEaXJlY3Rpb246OlJpZ2h0Owot
Ci0gICAgaWYgKCFldmVudC5oYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBpZiAoIVtOU0V2ZW50IGlzU3dpcGVUcmFja2luZ0Zyb21TY3JvbGxF
dmVudHNFbmFibGVkXSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG1fd2ViUGFn
ZVByb3h5LndpbGxIYW5kbGVIb3Jpem9udGFsU2Nyb2xsRXZlbnRzKCkpIHsKLSAgICAgICAgbV9o
YXNQZW5kaW5nU3dpcGUgPSB0cnVlOwotICAgICAgICBtX3BlbmRpbmdTd2lwZURpcmVjdGlvbiA9
IGRpcmVjdGlvbjsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHRyYWNrU3dp
cGVHZXN0dXJlKGV2ZW50LCBkaXJlY3Rpb24pOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZv
aWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjp3aGVlbEV2ZW50V2FzTm90SGFuZGxlZEJ5V2ViQ29y
ZShOU0V2ZW50ICpldmVudCkKLXsKLSAgICBpZiAoIW1faGFzUGVuZGluZ1N3aXBlKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX2hhc1BlbmRpbmdTd2lwZSA9IGZhbHNlOwotCi0gICAgaWYgKGV2
ZW50LnBoYXNlICE9IE5TRXZlbnRQaGFzZUJlZ2FuKQotICAgICAgICByZXR1cm47Ci0KLSAgICB0
cmFja1N3aXBlR2VzdHVyZShldmVudCwgbV9wZW5kaW5nU3dpcGVEaXJlY3Rpb24pOwotfQotCi12
b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6dHJhY2tTd2lwZUdlc3R1cmUoTlNFdmVudCAqZXZl
bnQsIFN3aXBlRGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLSAgICBWaWV3U25hcHNob3RTdG9yZTo6
c2hhcmVkKCkucmVjb3JkU25hcHNob3QobV93ZWJQYWdlUHJveHkpOwotCi0gICAgQ0dGbG9hdCBt
YXhQcm9ncmVzcyA9IChkaXJlY3Rpb24gPT0gU3dpcGVEaXJlY3Rpb246OkxlZnQpID8gMSA6IDA7
Ci0gICAgQ0dGbG9hdCBtaW5Qcm9ncmVzcyA9IChkaXJlY3Rpb24gPT0gU3dpcGVEaXJlY3Rpb246
OlJpZ2h0KSA/IC0xIDogMDsKLSAgICBSZWZQdHI8V2ViQmFja0ZvcndhcmRMaXN0SXRlbT4gdGFy
Z2V0SXRlbSA9IChkaXJlY3Rpb24gPT0gU3dpcGVEaXJlY3Rpb246OkxlZnQpID8gbV93ZWJQYWdl
UHJveHkuYmFja0ZvcndhcmRMaXN0KCkuYmFja0l0ZW0oKSA6IG1fd2ViUGFnZVByb3h5LmJhY2tG
b3J3YXJkTGlzdCgpLmZvcndhcmRJdGVtKCk7Ci0gICAgX19ibG9jayBib29sIHN3aXBlQ2FuY2Vs
bGVkID0gZmFsc2U7Ci0KLSAgICBbZXZlbnQgdHJhY2tTd2lwZUV2ZW50V2l0aE9wdGlvbnM6MCBk
YW1wZW5BbW91bnRUaHJlc2hvbGRNaW46bWluUHJvZ3Jlc3MgbWF4Om1heFByb2dyZXNzIHVzaW5n
SGFuZGxlcjpeKENHRmxvYXQgcHJvZ3Jlc3MsIE5TRXZlbnRQaGFzZSBwaGFzZSwgQk9PTCBpc0Nv
bXBsZXRlLCBCT09MICpzdG9wKSB7Ci0gICAgICAgIGlmIChwaGFzZSA9PSBOU0V2ZW50UGhhc2VC
ZWdhbikKLSAgICAgICAgICAgIHRoaXMtPmJlZ2luU3dpcGVHZXN0dXJlKHRhcmdldEl0ZW0uZ2V0
KCksIGRpcmVjdGlvbik7Ci0gICAgICAgIENHRmxvYXQgY2xhbXBlZFByb2dyZXNzID0gc3RkOjpt
aW4oc3RkOjptYXgocHJvZ3Jlc3MsIG1pblByb2dyZXNzKSwgbWF4UHJvZ3Jlc3MpOwotICAgICAg
ICB0aGlzLT5oYW5kbGVTd2lwZUdlc3R1cmUodGFyZ2V0SXRlbS5nZXQoKSwgY2xhbXBlZFByb2dy
ZXNzLCBkaXJlY3Rpb24pOwotICAgICAgICBpZiAocGhhc2UgPT0gTlNFdmVudFBoYXNlQ2FuY2Vs
bGVkKQotICAgICAgICAgICAgc3dpcGVDYW5jZWxsZWQgPSB0cnVlOwotICAgICAgICBpZiAoaXND
b21wbGV0ZSkKLSAgICAgICAgICAgIHRoaXMtPmVuZFN3aXBlR2VzdHVyZSh0YXJnZXRJdGVtLmdl
dCgpLCBzd2lwZUNhbmNlbGxlZCk7Ci0gICAgfV07Ci19Ci0KLUZsb2F0UmVjdCBWaWV3R2VzdHVy
ZUNvbnRyb2xsZXI6OndpbmRvd1JlbGF0aXZlQm91bmRzRm9yQ3VzdG9tU3dpcGVWaWV3cygpIGNv
bnN0Ci17Ci0gICAgRmxvYXRSZWN0IHN3aXBlQXJlYTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHZp
ZXcgOiBtX2N1c3RvbVN3aXBlVmlld3MpCi0gICAgICAgIHN3aXBlQXJlYS51bml0ZShbdmlldyBj
b252ZXJ0UmVjdDpbdmlldyBib3VuZHNdIHRvVmlldzpuaWxdKTsKLSAgICByZXR1cm4gc3dpcGVB
cmVhOwotfQotCi1zdGF0aWMgQ0FMYXllciAqbGVhc3RDb21tb25BbmNlc3RvckxheWVyKFZlY3Rv
cjxSZXRhaW5QdHI8Q0FMYXllcj4+JiBsYXllcnMpCi17Ci0gICAgVmVjdG9yPFZlY3RvcjxDQUxh
eWVyICo+PiBsaXZlTGF5ZXJQYXRoc0Zyb21Sb290KGxheWVycy5zaXplKCkpOwotCi0gICAgc2l6
ZV90IHNob3J0ZXN0UGF0aExlbmd0aCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4
KCk7Ci0KLSAgICBmb3IgKHNpemVfdCBsYXllckluZGV4ID0gMDsgbGF5ZXJJbmRleCA8IGxheWVy
cy5zaXplKCk7IGxheWVySW5kZXgrKykgewotICAgICAgICBDQUxheWVyICpwYXJlbnQgPSBbbGF5
ZXJzW2xheWVySW5kZXhdIHN1cGVybGF5ZXJdOwotICAgICAgICB3aGlsZSAocGFyZW50KSB7Ci0g
ICAgICAgICAgICBsaXZlTGF5ZXJQYXRoc0Zyb21Sb290W2xheWVySW5kZXhdLmluc2VydCgwLCBw
YXJlbnQpOwotICAgICAgICAgICAgc2hvcnRlc3RQYXRoTGVuZ3RoID0gc3RkOjptaW4oc2hvcnRl
c3RQYXRoTGVuZ3RoLCBsaXZlTGF5ZXJQYXRoc0Zyb21Sb290W2xheWVySW5kZXhdLnNpemUoKSk7
Ci0gICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQuc3VwZXJsYXllcjsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIGZvciAoc2l6ZV90IHBhdGhJbmRleCA9IDA7IHBhdGhJbmRleCA8IHNob3J0ZXN0
UGF0aExlbmd0aDsgcGF0aEluZGV4KyspIHsKLSAgICAgICAgQ0FMYXllciAqZmlyc3RQYXRoTGF5
ZXIgPSBsaXZlTGF5ZXJQYXRoc0Zyb21Sb290WzBdW3BhdGhJbmRleF07Ci0gICAgICAgIGZvciAo
c2l6ZV90IGxheWVySW5kZXggPSAxOyBsYXllckluZGV4IDwgbGF5ZXJzLnNpemUoKTsgbGF5ZXJJ
bmRleCsrKSB7Ci0gICAgICAgICAgICBpZiAobGl2ZUxheWVyUGF0aHNGcm9tUm9vdFtsYXllcklu
ZGV4XVtwYXRoSW5kZXhdICE9IGZpcnN0UGF0aExheWVyKQotICAgICAgICAgICAgICAgIHJldHVy
biBmaXJzdFBhdGhMYXllcjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBsaXZlTGF5
ZXJQYXRoc0Zyb21Sb290WzBdW3Nob3J0ZXN0UGF0aExlbmd0aF07Ci19Ci0KLXZvaWQgVmlld0dl
c3R1cmVDb250cm9sbGVyOjpiZWdpblN3aXBlR2VzdHVyZShXZWJCYWNrRm9yd2FyZExpc3RJdGVt
KiB0YXJnZXRJdGVtLCBTd2lwZURpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0gICAgQVNTRVJUKG1f
Y3VycmVudFN3aXBlTGl2ZUxheWVycy5pc0VtcHR5KCkpOwotCi0gICAgbV9hY3RpdmVHZXN0dXJl
VHlwZSA9IFZpZXdHZXN0dXJlVHlwZTo6U3dpcGU7Ci0KLSAgICBDQUxheWVyICpyb290Q29udGVu
dExheWVyID0gbV93ZWJQYWdlUHJveHkuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jvb3RMYXllcigp
OwotCi0gICAgbV9zd2lwZVNuYXBzaG90TGF5ZXIgPSBhZG9wdE5TKFtbQ0FMYXllciBhbGxvY10g
aW5pdF0pOwotICAgIFttX3N3aXBlU25hcHNob3RMYXllciBzZXRCYWNrZ3JvdW5kQ29sb3I6Q0dD
b2xvckdldENvbnN0YW50Q29sb3Ioa0NHQ29sb3JXaGl0ZSldOwotCi0gICAgUmV0YWluUHRyPElP
U3VyZmFjZVJlZj4gc25hcHNob3QgPSBWaWV3U25hcHNob3RTdG9yZTo6c2hhcmVkKCkuc25hcHNo
b3RBbmRSZW5kZXJUcmVlU2l6ZSh0YXJnZXRJdGVtKS5maXJzdDsKLQotICAgIGlmIChzbmFwc2hv
dCkgewotI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAotICAgICAg
ICB1aW50MzJfdCBwdXJnZWFiaWxpdHlTdGF0ZSA9IGtJT1N1cmZhY2VQdXJnZWFibGVOb25Wb2xh
dGlsZTsKLSAgICAgICAgSU9TdXJmYWNlU2V0UHVyZ2VhYmxlKHNuYXBzaG90LmdldCgpLCBrSU9T
dXJmYWNlUHVyZ2VhYmxlTm9uVm9sYXRpbGUsICZwdXJnZWFiaWxpdHlTdGF0ZSk7Ci0KLSAgICAg
ICAgaWYgKHB1cmdlYWJpbGl0eVN0YXRlICE9IGtJT1N1cmZhY2VQdXJnZWFibGVFbXB0eSkKLSAg
ICAgICAgICAgIFttX3N3aXBlU25hcHNob3RMYXllciBzZXRDb250ZW50czooaWQpc25hcHNob3Qu
Z2V0KCldOwotI2Vsc2UKLSAgICAgICAgW21fc3dpcGVTbmFwc2hvdExheWVyIHNldENvbnRlbnRz
OihpZClzbmFwc2hvdC5nZXQoKV07Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBtX2N1cnJlbnRTd2lw
ZUN1c3RvbVZpZXdCb3VuZHMgPSB3aW5kb3dSZWxhdGl2ZUJvdW5kc0ZvckN1c3RvbVN3aXBlVmll
d3MoKTsKLQotICAgIEZsb2F0UmVjdCBzd2lwZUFyZWE7Ci0gICAgaWYgKCFtX2N1c3RvbVN3aXBl
Vmlld3MuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHN3aXBlQXJlYSA9IG1fY3VycmVudFN3aXBlQ3Vz
dG9tVmlld0JvdW5kczsKLQotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHZpZXcgOiBtX2N1c3Rv
bVN3aXBlVmlld3MpIHsKLSAgICAgICAgICAgIENBTGF5ZXIgKmxheWVyID0gW3ZpZXcgbGF5ZXJd
OwotICAgICAgICAgICAgQVNTRVJUKGxheWVyKTsKLSAgICAgICAgICAgIG1fY3VycmVudFN3aXBl
TGl2ZUxheWVycy5hcHBlbmQobGF5ZXIpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgc3dpcGVBcmVhID0gcm9vdENvbnRlbnRMYXllci5mcmFtZTsKLSAgICAgICAgbV9jdXJyZW50
U3dpcGVMaXZlTGF5ZXJzLmFwcGVuZChyb290Q29udGVudExheWVyKTsKLSAgICB9Ci0KLSAgICBb
bV9zd2lwZVNuYXBzaG90TGF5ZXIgc2V0Q29udGVudHNHcmF2aXR5OmtDQUdyYXZpdHlUb3BMZWZ0
XTsKLSAgICBbbV9zd2lwZVNuYXBzaG90TGF5ZXIgc2V0Q29udGVudHNTY2FsZTptX3dlYlBhZ2VQ
cm94eS5kZXZpY2VTY2FsZUZhY3RvcigpXTsKLSAgICBbbV9zd2lwZVNuYXBzaG90TGF5ZXIgc2V0
QW5jaG9yUG9pbnQ6Q0dQb2ludFplcm9dOwotICAgIFttX3N3aXBlU25hcHNob3RMYXllciBzZXRG
cmFtZTpzd2lwZUFyZWFdOwotICAgIFttX3N3aXBlU25hcHNob3RMYXllciBzZXROYW1lOkAiR2Vz
dHVyZSBTd2lwZSBTbmFwc2hvdCBMYXllciJdOwotICAgIFttX3N3aXBlU25hcHNob3RMYXllciB3
ZWJfZGlzYWJsZUFsbEFjdGlvbnNdOwotCi0gICAgaWYgKG1fd2ViUGFnZVByb3h5LnByZWZlcmVu
Y2VzKCkudmlld0dlc3R1cmVEZWJ1Z2dpbmdFbmFibGVkKCkpIHsKLSAgICAgICAgQ0FGaWx0ZXIq
IGZpbHRlciA9IFtDQUZpbHRlciBmaWx0ZXJXaXRoVHlwZTprQ0FGaWx0ZXJHYXVzc2lhbkJsdXJd
OwotICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6M10g
Zm9yS2V5OkAiaW5wdXRSYWRpdXMiXTsKLSAgICAgICAgW21fc3dpcGVTbmFwc2hvdExheWVyIHNl
dEZpbHRlcnM6QFtmaWx0ZXJdXTsKLSAgICB9Ci0KLSAgICAvLyBXZSBkb24ndCBrbm93IGVub3Vn
aCBhYm91dCB0aGUgY3VzdG9tIHZpZXdzJyBoaWVyYXJjaHkgdG8gYXBwbHkgYSBzaGFkb3cuCi0g
ICAgaWYgKG1fc3dpcGVUcmFuc2l0aW9uU3R5bGUgPT0gU3dpcGVUcmFuc2l0aW9uU3R5bGU6Ok92
ZXJsYXAgJiYgbV9jdXN0b21Td2lwZVZpZXdzLmlzRW1wdHkoKSkgewotICAgICAgICBSZXRhaW5Q
dHI8Q0dQYXRoUmVmPiBzaGFkb3dQYXRoID0gYWRvcHRDRihDR1BhdGhDcmVhdGVXaXRoUmVjdChb
bV9zd2lwZVNuYXBzaG90TGF5ZXIgYm91bmRzXSwgMCkpOwotCi0gICAgICAgIGlmIChkaXJlY3Rp
b24gPT0gU3dpcGVEaXJlY3Rpb246OkxlZnQpIHsKLSAgICAgICAgICAgIFtyb290Q29udGVudExh
eWVyIHNldFNoYWRvd0NvbG9yOkNHQ29sb3JHZXRDb25zdGFudENvbG9yKGtDR0NvbG9yQmxhY2sp
XTsKLSAgICAgICAgICAgIFtyb290Q29udGVudExheWVyIHNldFNoYWRvd09wYWNpdHk6c3dpcGVP
dmVybGF5U2hhZG93T3BhY2l0eV07Ci0gICAgICAgICAgICBbcm9vdENvbnRlbnRMYXllciBzZXRT
aGFkb3dSYWRpdXM6c3dpcGVPdmVybGF5U2hhZG93UmFkaXVzXTsKLSAgICAgICAgICAgIFtyb290
Q29udGVudExheWVyIHNldFNoYWRvd1BhdGg6c2hhZG93UGF0aC5nZXQoKV07Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBbbV9zd2lwZVNuYXBzaG90TGF5ZXIgc2V0U2hhZG93Q29sb3I6
Q0dDb2xvckdldENvbnN0YW50Q29sb3Ioa0NHQ29sb3JCbGFjayldOwotICAgICAgICAgICAgW21f
c3dpcGVTbmFwc2hvdExheWVyIHNldFNoYWRvd09wYWNpdHk6c3dpcGVPdmVybGF5U2hhZG93T3Bh
Y2l0eV07Ci0gICAgICAgICAgICBbbV9zd2lwZVNuYXBzaG90TGF5ZXIgc2V0U2hhZG93UmFkaXVz
OnN3aXBlT3ZlcmxheVNoYWRvd1JhZGl1c107Ci0gICAgICAgICAgICBbbV9zd2lwZVNuYXBzaG90
TGF5ZXIgc2V0U2hhZG93UGF0aDpzaGFkb3dQYXRoLmdldCgpXTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIC8vIElmIHdlIGhhdmUgY3VzdG9tIHN3aXBpbmcgdmlld3MsIHdlIGFzc3VtZSB0aGF0
IHRoZSB2aWV3cyB3ZXJlIHBhc3NlZCB0byB1cyBpbiBiYWNrLXRvLWZyb250IHotb3JkZXIuCi0g
ICAgQ0FMYXllciAqbGF5ZXJBZGphY2VudFRvU25hcHNob3QgPSBkaXJlY3Rpb24gPT0gU3dpcGVE
aXJlY3Rpb246OkxlZnQgPyBtX2N1cnJlbnRTd2lwZUxpdmVMYXllcnMuZmlyc3QoKS5nZXQoKSA6
IG1fY3VycmVudFN3aXBlTGl2ZUxheWVycy5sYXN0KCkuZ2V0KCk7Ci0gICAgQ0FMYXllciAqc25h
cHNob3RMYXllclBhcmVudDsKLQotICAgIGlmIChtX2N1cnJlbnRTd2lwZUxpdmVMYXllcnMuc2l6
ZSgpID09IDEpCi0gICAgICAgIHNuYXBzaG90TGF5ZXJQYXJlbnQgPSBbbV9jdXJyZW50U3dpcGVM
aXZlTGF5ZXJzWzBdIHN1cGVybGF5ZXJdOwotICAgIGVsc2UgewotICAgICAgICAvLyBXZSBpbnNl
cnQgb3VyIHNuYXBzaG90IGludG8gdGhlIGZpcnN0IHNoYXJlZCBzdXBlcmxheWVyIG9mIHRoZSBj
dXN0b20gdmlld3MnIGxheWVyLCBhYm92ZSB0aGUgZnJvbnRtb3N0IG9yIGJlbG93IHRoZSBib3R0
b21tb3N0IGxheWVyLgotICAgICAgICBzbmFwc2hvdExheWVyUGFyZW50ID0gbGVhc3RDb21tb25B
bmNlc3RvckxheWVyKG1fY3VycmVudFN3aXBlTGl2ZUxheWVycyk7Ci0KLSAgICAgICAgLy8gSWYg
dGhlIGxheWVycyBhcmUgbm90IGFsbCBzaWJsaW5ncywgZmluZCB0aGUgY2hpbGQgb2YgdGhlIGxh
eWVyIHdlJ3JlIGdvaW5nIHRvIGluc2VydCB0aGUgc25hcHNob3QgaW50byB3aGljaCBoYXMgdGhl
IGZyb250bW9zdC9ib3R0b21tb3N0IGxheWVyIGFzIGEgY2hpbGQuCi0gICAgICAgIHdoaWxlIChz
bmFwc2hvdExheWVyUGFyZW50ICE9IGxheWVyQWRqYWNlbnRUb1NuYXBzaG90LnN1cGVybGF5ZXIp
Ci0gICAgICAgICAgICBsYXllckFkamFjZW50VG9TbmFwc2hvdCA9IGxheWVyQWRqYWNlbnRUb1Nu
YXBzaG90LnN1cGVybGF5ZXI7Ci0gICAgfQotCi0gICAgaWYgKGRpcmVjdGlvbiA9PSBTd2lwZURp
cmVjdGlvbjo6TGVmdCkKLSAgICAgICAgW3NuYXBzaG90TGF5ZXJQYXJlbnQgaW5zZXJ0U3VibGF5
ZXI6bV9zd2lwZVNuYXBzaG90TGF5ZXIuZ2V0KCkgYmVsb3c6bGF5ZXJBZGphY2VudFRvU25hcHNo
b3RdOwotICAgIGVsc2UKLSAgICAgICAgW3NuYXBzaG90TGF5ZXJQYXJlbnQgaW5zZXJ0U3VibGF5
ZXI6bV9zd2lwZVNuYXBzaG90TGF5ZXIuZ2V0KCkgYWJvdmU6bGF5ZXJBZGphY2VudFRvU25hcHNo
b3RdOwotfQotCi12b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6aGFuZGxlU3dpcGVHZXN0dXJl
KFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qIHRhcmdldEl0ZW0sIGRvdWJsZSBwcm9ncmVzcywgU3dp
cGVEaXJlY3Rpb24gZGlyZWN0aW9uKQotewotICAgIEFTU0VSVChtX2FjdGl2ZUdlc3R1cmVUeXBl
ID09IFZpZXdHZXN0dXJlVHlwZTo6U3dpcGUpOwotCi0gICAgZG91YmxlIHdpZHRoOwotICAgIGlm
ICghbV9jdXN0b21Td2lwZVZpZXdzLmlzRW1wdHkoKSkKLSAgICAgICAgd2lkdGggPSBtX2N1cnJl
bnRTd2lwZUN1c3RvbVZpZXdCb3VuZHMud2lkdGgoKTsKLSAgICBlbHNlCi0gICAgICAgIHdpZHRo
ID0gbV93ZWJQYWdlUHJveHkuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jvb3RMYXllcigpLmZyYW1l
LnNpemUud2lkdGg7Ci0KLSAgICBkb3VibGUgc3dpcGluZ0xheWVyT2Zmc2V0ID0gZmxvb3Iod2lk
dGggKiBwcm9ncmVzcyk7Ci0KLSAgICBpZiAobV9zd2lwZVRyYW5zaXRpb25TdHlsZSA9PSBTd2lw
ZVRyYW5zaXRpb25TdHlsZTo6T3ZlcmxhcCkgewotICAgICAgICBpZiAoZGlyZWN0aW9uID09IFN3
aXBlRGlyZWN0aW9uOjpSaWdodCkKLSAgICAgICAgICAgIFttX3N3aXBlU25hcHNob3RMYXllciBz
ZXRUcmFuc2Zvcm06Q0FUcmFuc2Zvcm0zRE1ha2VUcmFuc2xhdGlvbih3aWR0aCArIHN3aXBpbmdM
YXllck9mZnNldCwgMCwgMCldOwotICAgIH0gZWxzZSBpZiAobV9zd2lwZVRyYW5zaXRpb25TdHls
ZSA9PSBTd2lwZVRyYW5zaXRpb25TdHlsZTo6UHVzaCkKLSAgICAgICAgW21fc3dpcGVTbmFwc2hv
dExheWVyIHNldFRyYW5zZm9ybTpDQVRyYW5zZm9ybTNETWFrZVRyYW5zbGF0aW9uKChkaXJlY3Rp
b24gPT0gU3dpcGVEaXJlY3Rpb246OkxlZnQgPyAtd2lkdGggOiB3aWR0aCkgKyBzd2lwaW5nTGF5
ZXJPZmZzZXQsIDAsIDApXTsKLQotICAgIGZvciAoY29uc3QgYXV0byYgbGF5ZXIgOiBtX2N1cnJl
bnRTd2lwZUxpdmVMYXllcnMpIHsKLSAgICAgICAgaWYgKG1fc3dpcGVUcmFuc2l0aW9uU3R5bGUg
PT0gU3dpcGVUcmFuc2l0aW9uU3R5bGU6Ok92ZXJsYXApIHsKLSAgICAgICAgICAgIGlmIChkaXJl
Y3Rpb24gPT0gU3dpcGVEaXJlY3Rpb246OkxlZnQpCi0gICAgICAgICAgICAgICAgW2xheWVyIHNl
dFRyYW5zZm9ybTpDQVRyYW5zZm9ybTNETWFrZVRyYW5zbGF0aW9uKHN3aXBpbmdMYXllck9mZnNl
dCwgMCwgMCldOwotICAgICAgICB9IGVsc2UgaWYgKG1fc3dpcGVUcmFuc2l0aW9uU3R5bGUgPT0g
U3dpcGVUcmFuc2l0aW9uU3R5bGU6OlB1c2gpCi0gICAgICAgICAgICBbbGF5ZXIgc2V0VHJhbnNm
b3JtOkNBVHJhbnNmb3JtM0RNYWtlVHJhbnNsYXRpb24oc3dpcGluZ0xheWVyT2Zmc2V0LCAwLCAw
KV07Ci0gICAgfQotfQotCi12b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6ZW5kU3dpcGVHZXN0
dXJlKFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qIHRhcmdldEl0ZW0sIGJvb2wgY2FuY2VsbGVkKQot
ewotICAgIEFTU0VSVChtX2FjdGl2ZUdlc3R1cmVUeXBlID09IFZpZXdHZXN0dXJlVHlwZTo6U3dp
cGUpOwotCi0gICAgQ0FMYXllciAqcm9vdExheWVyID0gbV93ZWJQYWdlUHJveHkuYWNjZWxlcmF0
ZWRDb21wb3NpdGluZ1Jvb3RMYXllcigpOwotCi0gICAgW3Jvb3RMYXllciBzZXRTaGFkb3dPcGFj
aXR5OjBdOwotICAgIFtyb290TGF5ZXIgc2V0U2hhZG93UmFkaXVzOjBdOwotCi0gICAgaWYgKGNh
bmNlbGxlZCkgewotICAgICAgICByZW1vdmVTd2lwZVNuYXBzaG90KCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICB1aW50NjRfdCByZW5kZXJUcmVlU2l6ZSA9IFZpZXdTbmFwc2hvdFN0
b3JlOjpzaGFyZWQoKS5zbmFwc2hvdEFuZFJlbmRlclRyZWVTaXplKHRhcmdldEl0ZW0pLnNlY29u
ZDsKLSAgICBtX3dlYlBhZ2VQcm94eS5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6Vmlld0dlc3R1
cmVHZW9tZXRyeUNvbGxlY3Rvcjo6U2V0UmVuZGVyVHJlZVNpemVOb3RpZmljYXRpb25UaHJlc2hv
bGQocmVuZGVyVHJlZVNpemUgKiBzd2lwZVNuYXBzaG90UmVtb3ZhbFJlbmRlclRyZWVTaXplVGFy
Z2V0RnJhY3Rpb24pLCBtX3dlYlBhZ2VQcm94eS5wYWdlSUQoKSk7Ci0KLSAgICAvLyBXZSBkb24n
dCB3YW50IHRvIHJlcGxhY2UgdGhlIGN1cnJlbnQgYmFjay1mb3J3YXJkIGl0ZW0ncyBzbmFwc2hv
dAotICAgIC8vIGxpa2Ugd2Ugbm9ybWFsbHkgd291bGQgd2hlbiBnb2luZyBiYWNrIG9yIGZvcndh
cmQsIGJlY2F1c2Ugd2UgYXJlCi0gICAgLy8gZGlzcGxheWluZyB0aGUgZGVzdGluYXRpb24gaXRl
bSdzIHNuYXBzaG90LgotICAgIFZpZXdTbmFwc2hvdFN0b3JlOjpzaGFyZWQoKS5kaXNhYmxlU25h
cHNob3R0aW5nKCk7Ci0gICAgbV93ZWJQYWdlUHJveHkuZ29Ub0JhY2tGb3J3YXJkSXRlbSh0YXJn
ZXRJdGVtKTsKLSAgICBWaWV3U25hcHNob3RTdG9yZTo6c2hhcmVkKCkuZW5hYmxlU25hcHNob3R0
aW5nKCk7Ci0KLSAgICBpZiAoIXJlbmRlclRyZWVTaXplKSB7Ci0gICAgICAgIHJlbW92ZVN3aXBl
U25hcHNob3QoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fc3dpcGVXYXRjaGRv
Z1RpbWVyLnN0YXJ0T25lU2hvdChzd2lwZVNuYXBzaG90UmVtb3ZhbFdhdGNoZG9nRHVyYXRpb24u
Y291bnQoKSk7Ci19Ci0KLXZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpkaWRIaXRSZW5kZXJU
cmVlU2l6ZVRocmVzaG9sZCgpCi17Ci0gICAgcmVtb3ZlU3dpcGVTbmFwc2hvdCgpOwotfQotCi12
b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6c3dpcGVTbmFwc2hvdFdhdGNoZG9nVGltZXJGaXJl
ZChXZWJDb3JlOjpUaW1lcjxWaWV3R2VzdHVyZUNvbnRyb2xsZXI+KikKLXsKLSAgICByZW1vdmVT
d2lwZVNuYXBzaG90KCk7Ci19Ci0KLXZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpyZW1vdmVT
d2lwZVNuYXBzaG90KCkKLXsKLSAgICBtX3N3aXBlV2F0Y2hkb2dUaW1lci5zdG9wKCk7Ci0KLSAg
ICBpZiAobV9hY3RpdmVHZXN0dXJlVHlwZSAhPSBWaWV3R2VzdHVyZVR5cGU6OlN3aXBlKQotICAg
ICAgICByZXR1cm47Ci0KLSNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEw
OTAKLSAgICBJT1N1cmZhY2VSZWYgc25hcHNob3RTdXJmYWNlID0gKElPU3VyZmFjZVJlZilbbV9z
d2lwZVNuYXBzaG90TGF5ZXIgY29udGVudHNdOwotICAgIGlmIChzbmFwc2hvdFN1cmZhY2UpCi0g
ICAgICAgIElPU3VyZmFjZVNldFB1cmdlYWJsZShzbmFwc2hvdFN1cmZhY2UsIGtJT1N1cmZhY2VQ
dXJnZWFibGVWb2xhdGlsZSwgbnVsbHB0cik7Ci0jZW5kaWYKLQotICAgIGZvciAoY29uc3QgYXV0
byYgbGF5ZXIgOiBtX2N1cnJlbnRTd2lwZUxpdmVMYXllcnMpCi0gICAgICAgIFtsYXllciBzZXRU
cmFuc2Zvcm06Q0FUcmFuc2Zvcm0zRElkZW50aXR5XTsKLQotICAgIFttX3N3aXBlU25hcHNob3RM
YXllciByZW1vdmVGcm9tU3VwZXJsYXllcl07Ci0gICAgbV9zd2lwZVNuYXBzaG90TGF5ZXIgPSBu
dWxscHRyOwotCi0gICAgbV9jdXJyZW50U3dpcGVMaXZlTGF5ZXJzLmNsZWFyKCk7Ci0KLSAgICBt
X2FjdGl2ZUdlc3R1cmVUeXBlID0gVmlld0dlc3R1cmVUeXBlOjpOb25lOwotfQotCi12b2lkIFZp
ZXdHZXN0dXJlQ29udHJvbGxlcjo6ZW5kQWN0aXZlR2VzdHVyZSgpCi17Ci0gICAgaWYgKG1fYWN0
aXZlR2VzdHVyZVR5cGUgPT0gVmlld0dlc3R1cmVUeXBlOjpNYWduaWZpY2F0aW9uKSB7Ci0gICAg
ICAgIGVuZE1hZ25pZmljYXRpb25HZXN0dXJlKCk7Ci0gICAgICAgIG1fdmlzaWJsZUNvbnRlbnRS
ZWN0SXNWYWxpZCA9IGZhbHNlOwotICAgIH0KLX0KLQotZG91YmxlIFZpZXdHZXN0dXJlQ29udHJv
bGxlcjo6bWFnbmlmaWNhdGlvbigpIGNvbnN0Ci17Ci0gICAgaWYgKG1fYWN0aXZlR2VzdHVyZVR5
cGUgPT0gVmlld0dlc3R1cmVUeXBlOjpNYWduaWZpY2F0aW9uKQotICAgICAgICByZXR1cm4gbV9t
YWduaWZpY2F0aW9uOwotCi0gICAgcmV0dXJuIG1fd2ViUGFnZVByb3h5LnBhZ2VTY2FsZUZhY3Rv
cigpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vICFQTEFURk9STShJ
T1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1ZpZXdHZXN0dXJl
Q29udHJvbGxlck1hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld0dlc3R1
cmVDb250cm9sbGVyTWFjLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3
MTZhNWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1Zp
ZXdHZXN0dXJlQ29udHJvbGxlck1hYy5tbQpAQCAtMCwwICsxLDU2MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVmlld0dlc3R1cmVDb250cm9sbGVy
LmgiCisKKyNpZiAhUExBVEZPUk0oSU9TKQorCisjaW1wb3J0ICJOYXRpdmVXZWJXaGVlbEV2ZW50
LmgiCisjaW1wb3J0ICJXZWJQYWdlR3JvdXAuaCIKKyNpbXBvcnQgIlZpZXdHZXN0dXJlQ29udHJv
bGxlck1lc3NhZ2VzLmgiCisjaW1wb3J0ICJWaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yTWVz
c2FnZXMuaCIKKyNpbXBvcnQgIlZpZXdTbmFwc2hvdFN0b3JlLmgiCisjaW1wb3J0ICJXZWJCYWNr
Rm9yd2FyZExpc3QuaCIKKyNpbXBvcnQgIldlYlBhZ2VNZXNzYWdlcy5oIgorI2ltcG9ydCAiV2Vi
UGFnZVByb3h5LmgiCisjaW1wb3J0ICJXZWJQcmVmZXJlbmNlcy5oIgorI2ltcG9ydCAiV2ViUHJv
Y2Vzc1Byb3h5LmgiCisjaW1wb3J0IDxDb2NvYS9Db2NvYS5oPgorI2ltcG9ydCA8UXVhcnR6Q29y
ZS9RdWFydHpDb3JlLmg+CisjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVDQUxheWVyRXh0cmFzLmg+
CisKKyNpZiBkZWZpbmVkKF9faGFzX2luY2x1ZGUpICYmIF9faGFzX2luY2x1ZGUoPElPU3VyZmFj
ZS9JT1N1cmZhY2VQcml2YXRlLmg+KQorI2ltcG9ydCA8SU9TdXJmYWNlL0lPU3VyZmFjZVByaXZh
dGUuaD4KKyNlbHNlCitlbnVtIHsKKyAgICBrSU9TdXJmYWNlUHVyZ2VhYmxlTm9uVm9sYXRpbGUg
PSAwLAorICAgIGtJT1N1cmZhY2VQdXJnZWFibGVWb2xhdGlsZSA9IDEsCisgICAga0lPU3VyZmFj
ZVB1cmdlYWJsZUVtcHR5ID0gMiwKK307CisjZW5kaWYKKworI2lmIF9fTUFDX09TX1hfVkVSU0lP
Tl9NSU5fUkVRVUlSRUQgPj0gMTA5MAorZXh0ZXJuICJDIiBJT1JldHVybiBJT1N1cmZhY2VTZXRQ
dXJnZWFibGUoSU9TdXJmYWNlUmVmIGJ1ZmZlciwgdWludDMyX3QgbmV3U3RhdGUsIHVpbnQzMl90
ICpvbGRTdGF0ZSk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19oYXNfaW5jbHVkZSkgJiYgX19o
YXNfaW5jbHVkZSg8UXVhcnR6Q29yZS9RdWFydHpDb3JlUHJpdmF0ZS5oPikKKyNpbXBvcnQgPFF1
YXJ0ekNvcmUvUXVhcnR6Q29yZVByaXZhdGUuaD4KKyNlbHNlCitAaW50ZXJmYWNlIENBRmlsdGVy
IDogTlNPYmplY3QgPE5TQ29weWluZywgTlNNdXRhYmxlQ29weWluZywgTlNDb2Rpbmc+CitAZW5k
CisjZW5kaWYKKworQGludGVyZmFjZSBDQUZpbHRlciAoRGV0YWlscykKKysgKENBRmlsdGVyICop
ZmlsdGVyV2l0aFR5cGU6KE5TU3RyaW5nICopdHlwZTsKK0BlbmQKKworZXh0ZXJuIE5TU3RyaW5n
ICogY29uc3Qga0NBRmlsdGVyR2F1c3NpYW5CbHVyOworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKworc3RhdGljIGNvbnN0IGRvdWJsZSBtaW5NYWduaWZpY2F0aW9uID0gMTsKK3N0YXRpYyBj
b25zdCBkb3VibGUgbWF4TWFnbmlmaWNhdGlvbiA9IDM7CisKK3N0YXRpYyBjb25zdCBkb3VibGUg
bWluRWxhc3RpY01hZ25pZmljYXRpb24gPSAwLjc1Oworc3RhdGljIGNvbnN0IGRvdWJsZSBtYXhF
bGFzdGljTWFnbmlmaWNhdGlvbiA9IDQ7CisKK3N0YXRpYyBjb25zdCBkb3VibGUgem9vbU91dEJv
b3N0ID0gMS42Oworc3RhdGljIGNvbnN0IGRvdWJsZSB6b29tT3V0UmVzaXN0YW5jZSA9IDAuMTA7
CisKK3N0YXRpYyBjb25zdCBmbG9hdCBzbWFydE1hZ25pZmljYXRpb25FbGVtZW50UGFkZGluZyA9
IDAuMDU7CitzdGF0aWMgY29uc3QgZmxvYXQgc21hcnRNYWduaWZpY2F0aW9uUGFuU2Nyb2xsVGhy
ZXNob2xkID0gMTAwOworCitzdGF0aWMgY29uc3QgZG91YmxlIHN3aXBlT3ZlcmxheVNoYWRvd09w
YWNpdHkgPSAwLjY2Oworc3RhdGljIGNvbnN0IGRvdWJsZSBzd2lwZU92ZXJsYXlTaGFkb3dSYWRp
dXMgPSAzOworCitzdGF0aWMgY29uc3QgZmxvYXQgc3dpcGVTbmFwc2hvdFJlbW92YWxSZW5kZXJU
cmVlU2l6ZVRhcmdldEZyYWN0aW9uID0gMC41Oworc3RhdGljIGNvbnN0IHN0ZDo6Y2hyb25vOjpz
ZWNvbmRzIHN3aXBlU25hcHNob3RSZW1vdmFsV2F0Y2hkb2dEdXJhdGlvbiA9IDNfczsKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK1ZpZXdHZXN0dXJlQ29udHJvbGxlcjo6Vmlld0dlc3R1cmVDb250
cm9sbGVyKFdlYlBhZ2VQcm94eSYgd2ViUGFnZVByb3h5KQorICAgIDogbV93ZWJQYWdlUHJveHko
d2ViUGFnZVByb3h5KQorICAgICwgbV9sYXN0TWFnbmlmaWNhdGlvbkdlc3R1cmVXYXNTbWFydE1h
Z25pZmljYXRpb24oZmFsc2UpCisgICAgLCBtX2FjdGl2ZUdlc3R1cmVUeXBlKFZpZXdHZXN0dXJl
VHlwZTo6Tm9uZSkKKyAgICAsIG1fdmlzaWJsZUNvbnRlbnRSZWN0SXNWYWxpZChmYWxzZSkKKyAg
ICAsIG1fZnJhbWVIYW5kbGVzTWFnbmlmaWNhdGlvbkdlc3R1cmUoZmFsc2UpCisgICAgLCBtX3N3
aXBlVHJhbnNpdGlvblN0eWxlKFN3aXBlVHJhbnNpdGlvblN0eWxlOjpPdmVybGFwKQorICAgICwg
bV9zd2lwZVdhdGNoZG9nVGltZXIodGhpcywgJlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6c3dpcGVT
bmFwc2hvdFdhdGNoZG9nVGltZXJGaXJlZCkKKyAgICAsIG1faGFzUGVuZGluZ1N3aXBlKGZhbHNl
KQoreworICAgIG1fd2ViUGFnZVByb3h5LnByb2Nlc3MoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVz
c2FnZXM6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3dl
YlBhZ2VQcm94eS5wYWdlSUQoKSwgKnRoaXMpOworfQorCitWaWV3R2VzdHVyZUNvbnRyb2xsZXI6
On5WaWV3R2VzdHVyZUNvbnRyb2xsZXIoKQoreworICAgIG1fd2ViUGFnZVByb3h5LnByb2Nlc3Mo
KS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6
bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3dlYlBhZ2VQcm94eS5wYWdlSUQoKSk7Cit9CisKK3N0
YXRpYyBkb3VibGUgcmVzaXN0YW5jZUZvckRlbHRhKGRvdWJsZSBkZWx0YVNjYWxlLCBkb3VibGUg
Y3VycmVudFNjYWxlKQoreworICAgIC8vIFpvb20gb3V0IHdpdGggc2xpZ2h0IGFjY2VsZXJhdGlv
biwgdW50aWwgd2UgcmVhY2ggbWluaW11bSBzY2FsZS4KKyAgICBpZiAoZGVsdGFTY2FsZSA8IDAg
JiYgY3VycmVudFNjYWxlID4gbWluTWFnbmlmaWNhdGlvbikKKyAgICAgICAgcmV0dXJuIHpvb21P
dXRCb29zdDsKKworICAgIC8vIFpvb20gaW4gd2l0aCBubyBhY2NlbGVyYXRpb24sIHVudGlsIHdl
IHJlYWNoIG1heGltdW0gc2NhbGUuCisgICAgaWYgKGRlbHRhU2NhbGUgPiAwICYmIGN1cnJlbnRT
Y2FsZSA8IG1heE1hZ25pZmljYXRpb24pCisgICAgICAgIHJldHVybiAxOworCisgICAgLy8gT3V0
c2lkZSBvZiB0aGUgZXh0cmVtZXMsIHJlc2lzdCBmdXJ0aGVyIHNjYWxpbmcuCisgICAgZG91Ymxl
IGxpbWl0ID0gY3VycmVudFNjYWxlIDwgbWluTWFnbmlmaWNhdGlvbiA/IG1pbk1hZ25pZmljYXRp
b24gOiBtYXhNYWduaWZpY2F0aW9uOworICAgIGRvdWJsZSBzY2FsZURpc3RhbmNlID0gYWJzKGxp
bWl0IC0gY3VycmVudFNjYWxlKTsKKyAgICBkb3VibGUgc2NhbGVQZXJjZW50ID0gc3RkOjptaW4o
c3RkOjptYXgoc2NhbGVEaXN0YW5jZSAvIGxpbWl0LCAwLiksIDEuKTsKKyAgICBkb3VibGUgcmVz
aXN0YW5jZSA9IHpvb21PdXRSZXNpc3RhbmNlICsgc2NhbGVQZXJjZW50ICogKDAuMDEgLSB6b29t
T3V0UmVzaXN0YW5jZSk7CisKKyAgICByZXR1cm4gcmVzaXN0YW5jZTsKK30KKworRmxvYXRQb2lu
dCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OnNjYWxlZE1hZ25pZmljYXRpb25PcmlnaW4oRmxvYXRQ
b2ludCBvcmlnaW4sIGRvdWJsZSBzY2FsZSkKK3sKKyAgICBGbG9hdFBvaW50IHNjYWxlZE1hZ25p
ZmljYXRpb25PcmlnaW4ob3JpZ2luKTsKKyAgICBzY2FsZWRNYWduaWZpY2F0aW9uT3JpZ2luLm1v
dmVCeShtX3Zpc2libGVDb250ZW50UmVjdC5sb2NhdGlvbigpKTsKKyAgICBmbG9hdCBtYWduaWZp
Y2F0aW9uT3JpZ2luU2NhbGUgPSAxIC0gKHNjYWxlIC8gbV93ZWJQYWdlUHJveHkucGFnZVNjYWxl
RmFjdG9yKCkpOworICAgIHNjYWxlZE1hZ25pZmljYXRpb25PcmlnaW4uc2NhbGUobWFnbmlmaWNh
dGlvbk9yaWdpblNjYWxlLCBtYWduaWZpY2F0aW9uT3JpZ2luU2NhbGUpOworICAgIHJldHVybiBz
Y2FsZWRNYWduaWZpY2F0aW9uT3JpZ2luOworfQorCit2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxl
cjo6ZGlkQ29sbGVjdEdlb21ldHJ5Rm9yTWFnbmlmaWNhdGlvbkdlc3R1cmUoRmxvYXRSZWN0IHZp
c2libGVDb250ZW50UmVjdCwgYm9vbCBmcmFtZUhhbmRsZXNNYWduaWZpY2F0aW9uR2VzdHVyZSkK
K3sKKyAgICBtX2FjdGl2ZUdlc3R1cmVUeXBlID0gVmlld0dlc3R1cmVUeXBlOjpNYWduaWZpY2F0
aW9uOworICAgIG1fdmlzaWJsZUNvbnRlbnRSZWN0ID0gdmlzaWJsZUNvbnRlbnRSZWN0OworICAg
IG1fdmlzaWJsZUNvbnRlbnRSZWN0SXNWYWxpZCA9IHRydWU7CisgICAgbV9mcmFtZUhhbmRsZXNN
YWduaWZpY2F0aW9uR2VzdHVyZSA9IGZyYW1lSGFuZGxlc01hZ25pZmljYXRpb25HZXN0dXJlOwor
fQorCit2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6aGFuZGxlTWFnbmlmaWNhdGlvbkdlc3R1
cmUoZG91YmxlIHNjYWxlLCBGbG9hdFBvaW50IG9yaWdpbikKK3sKKyAgICBBU1NFUlQobV9hY3Rp
dmVHZXN0dXJlVHlwZSA9PSBWaWV3R2VzdHVyZVR5cGU6Ok5vbmUgfHwgbV9hY3RpdmVHZXN0dXJl
VHlwZSA9PSBWaWV3R2VzdHVyZVR5cGU6Ok1hZ25pZmljYXRpb24pOworCisgICAgaWYgKG1fYWN0
aXZlR2VzdHVyZVR5cGUgPT0gVmlld0dlc3R1cmVUeXBlOjpOb25lKSB7CisgICAgICAgIC8vIEZJ
WE1FOiBXZSBkcm9wIHRoZSBmaXJzdCBmcmFtZSBvZiB0aGUgZ2VzdHVyZSBvbiB0aGUgZmxvb3Is
IGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSB0aGUgdmlzaWJsZSBjb250ZW50IGJvdW5kcyB5ZXQuCisg
ICAgICAgIG1fbWFnbmlmaWNhdGlvbiA9IG1fd2ViUGFnZVByb3h5LnBhZ2VTY2FsZUZhY3Rvcigp
OworICAgICAgICBtX3dlYlBhZ2VQcm94eS5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6Vmlld0dl
c3R1cmVHZW9tZXRyeUNvbGxlY3Rvcjo6Q29sbGVjdEdlb21ldHJ5Rm9yTWFnbmlmaWNhdGlvbkdl
c3R1cmUoKSwgbV93ZWJQYWdlUHJveHkucGFnZUlEKCkpOworICAgICAgICBtX2xhc3RNYWduaWZp
Y2F0aW9uR2VzdHVyZVdhc1NtYXJ0TWFnbmlmaWNhdGlvbiA9IGZhbHNlOworCisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICAvLyBXZSdyZSBzdGlsbCB3YWl0aW5nIGZvciB0aGUgRGlkQ29s
bGVjdEdlb21ldHJ5IGNhbGxiYWNrLgorICAgIGlmICghbV92aXNpYmxlQ29udGVudFJlY3RJc1Zh
bGlkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2FjdGl2ZUdlc3R1cmVUeXBlID0gVmlld0dl
c3R1cmVUeXBlOjpNYWduaWZpY2F0aW9uOworCisgICAgZG91YmxlIHNjYWxlV2l0aFJlc2lzdGFu
Y2UgPSByZXNpc3RhbmNlRm9yRGVsdGEoc2NhbGUsIG1fbWFnbmlmaWNhdGlvbikgKiBzY2FsZTsK
KworICAgIG1fbWFnbmlmaWNhdGlvbiArPSBtX21hZ25pZmljYXRpb24gKiBzY2FsZVdpdGhSZXNp
c3RhbmNlOworICAgIG1fbWFnbmlmaWNhdGlvbiA9IHN0ZDo6bWluKHN0ZDo6bWF4KG1fbWFnbmlm
aWNhdGlvbiwgbWluRWxhc3RpY01hZ25pZmljYXRpb24pLCBtYXhFbGFzdGljTWFnbmlmaWNhdGlv
bik7CisKKyAgICBtX21hZ25pZmljYXRpb25PcmlnaW4gPSBvcmlnaW47CisKKyAgICBpZiAobV9m
cmFtZUhhbmRsZXNNYWduaWZpY2F0aW9uR2VzdHVyZSkKKyAgICAgICAgbV93ZWJQYWdlUHJveHku
c2NhbGVQYWdlKG1fbWFnbmlmaWNhdGlvbiwgcm91bmRlZEludFBvaW50KG9yaWdpbikpOworICAg
IGVsc2UKKyAgICAgICAgbV93ZWJQYWdlUHJveHkuZHJhd2luZ0FyZWEoKS0+YWRqdXN0VHJhbnNp
ZW50Wm9vbShtX21hZ25pZmljYXRpb24sIHNjYWxlZE1hZ25pZmljYXRpb25PcmlnaW4ob3JpZ2lu
LCBtX21hZ25pZmljYXRpb24pKTsKK30KKwordm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmVu
ZE1hZ25pZmljYXRpb25HZXN0dXJlKCkKK3sKKyAgICBBU1NFUlQobV9hY3RpdmVHZXN0dXJlVHlw
ZSA9PSBWaWV3R2VzdHVyZVR5cGU6Ok1hZ25pZmljYXRpb24pOworCisgICAgZG91YmxlIG5ld01h
Z25pZmljYXRpb24gPSBzdGQ6Om1pbihzdGQ6Om1heChtX21hZ25pZmljYXRpb24sIG1pbk1hZ25p
ZmljYXRpb24pLCBtYXhNYWduaWZpY2F0aW9uKTsKKworICAgIGlmIChtX2ZyYW1lSGFuZGxlc01h
Z25pZmljYXRpb25HZXN0dXJlKQorICAgICAgICBtX3dlYlBhZ2VQcm94eS5zY2FsZVBhZ2UobmV3
TWFnbmlmaWNhdGlvbiwgcm91bmRlZEludFBvaW50KG1fbWFnbmlmaWNhdGlvbk9yaWdpbikpOwor
ICAgIGVsc2UKKyAgICAgICAgbV93ZWJQYWdlUHJveHkuZHJhd2luZ0FyZWEoKS0+Y29tbWl0VHJh
bnNpZW50Wm9vbShuZXdNYWduaWZpY2F0aW9uLCBzY2FsZWRNYWduaWZpY2F0aW9uT3JpZ2luKG1f
bWFnbmlmaWNhdGlvbk9yaWdpbiwgbmV3TWFnbmlmaWNhdGlvbikpOworCisgICAgbV9hY3RpdmVH
ZXN0dXJlVHlwZSA9IFZpZXdHZXN0dXJlVHlwZTo6Tm9uZTsKK30KKwordm9pZCBWaWV3R2VzdHVy
ZUNvbnRyb2xsZXI6OmhhbmRsZVNtYXJ0TWFnbmlmaWNhdGlvbkdlc3R1cmUoRmxvYXRQb2ludCBv
cmlnaW4pCit7CisgICAgaWYgKG1fYWN0aXZlR2VzdHVyZVR5cGUgIT0gVmlld0dlc3R1cmVUeXBl
OjpOb25lKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3dlYlBhZ2VQcm94eS5wcm9jZXNzKCku
c2VuZChNZXNzYWdlczo6Vmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvcjo6Q29sbGVjdEdlb21l
dHJ5Rm9yU21hcnRNYWduaWZpY2F0aW9uR2VzdHVyZShvcmlnaW4pLCBtX3dlYlBhZ2VQcm94eS5w
YWdlSUQoKSk7Cit9CisKK3N0YXRpYyBmbG9hdCBtYXhpbXVtUmVjdGFuZ2xlQ29tcG9uZW50RGVs
dGEoRmxvYXRSZWN0IGEsIEZsb2F0UmVjdCBiKQoreworICAgIHJldHVybiBzdGQ6Om1heChmYWJz
KGEueCgpIC0gYi54KCkpLCBzdGQ6Om1heChmYWJzKGEueSgpIC0gYi55KCkpLCBzdGQ6Om1heChm
YWJzKGEud2lkdGgoKSAtIGIud2lkdGgoKSksIGZhYnMoYS5oZWlnaHQoKSAtIGIuaGVpZ2h0KCkp
KSkpOworfQorCit2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6ZGlkQ29sbGVjdEdlb21ldHJ5
Rm9yU21hcnRNYWduaWZpY2F0aW9uR2VzdHVyZShGbG9hdFBvaW50IG9yaWdpbiwgRmxvYXRSZWN0
IHJlbmRlclJlY3QsIEZsb2F0UmVjdCB2aXNpYmxlQ29udGVudFJlY3QsIGJvb2wgaXNSZXBsYWNl
ZEVsZW1lbnQsIGJvb2wgZnJhbWVIYW5kbGVzTWFnbmlmaWNhdGlvbkdlc3R1cmUpCit7CisgICAg
aWYgKGZyYW1lSGFuZGxlc01hZ25pZmljYXRpb25HZXN0dXJlKQorICAgICAgICByZXR1cm47CisK
KyAgICBkb3VibGUgY3VycmVudFNjYWxlRmFjdG9yID0gbV93ZWJQYWdlUHJveHkucGFnZVNjYWxl
RmFjdG9yKCk7CisKKyAgICBGbG9hdFJlY3QgdW5zY2FsZWRUYXJnZXRSZWN0ID0gcmVuZGVyUmVj
dDsKKyAgICB1bnNjYWxlZFRhcmdldFJlY3Quc2NhbGUoMSAvIGN1cnJlbnRTY2FsZUZhY3Rvcik7
CisgICAgdW5zY2FsZWRUYXJnZXRSZWN0LmluZmxhdGVYKHVuc2NhbGVkVGFyZ2V0UmVjdC53aWR0
aCgpICogc21hcnRNYWduaWZpY2F0aW9uRWxlbWVudFBhZGRpbmcpOworICAgIHVuc2NhbGVkVGFy
Z2V0UmVjdC5pbmZsYXRlWSh1bnNjYWxlZFRhcmdldFJlY3QuaGVpZ2h0KCkgKiBzbWFydE1hZ25p
ZmljYXRpb25FbGVtZW50UGFkZGluZyk7CisKKyAgICBkb3VibGUgdGFyZ2V0TWFnbmlmaWNhdGlv
biA9IHZpc2libGVDb250ZW50UmVjdC53aWR0aCgpIC8gdW5zY2FsZWRUYXJnZXRSZWN0LndpZHRo
KCk7CisKKyAgICAvLyBGb3IgcmVwbGFjZWQgZWxlbWVudHMgbGlrZSBpbWFnZXMsIHdlIHdhbnQg
dG8gZml0IHRoZSB3aG9sZSBlbGVtZW50CisgICAgLy8gaW4gdGhlIHZpZXcsIHNvIHNjYWxlIGl0
IGRvd24gZW5vdWdoIHRvIG1ha2UgYm90aCBkaW1lbnNpb25zIGZpdCBpZiBwb3NzaWJsZS4KKyAg
ICBpZiAoaXNSZXBsYWNlZEVsZW1lbnQpCisgICAgICAgIHRhcmdldE1hZ25pZmljYXRpb24gPSBz
dGQ6Om1pbih0YXJnZXRNYWduaWZpY2F0aW9uLCBzdGF0aWNfY2FzdDxkb3VibGU+KHZpc2libGVD
b250ZW50UmVjdC5oZWlnaHQoKSAvIHVuc2NhbGVkVGFyZ2V0UmVjdC5oZWlnaHQoKSkpOworCisg
ICAgdGFyZ2V0TWFnbmlmaWNhdGlvbiA9IHN0ZDo6bWluKHN0ZDo6bWF4KHRhcmdldE1hZ25pZmlj
YXRpb24sIG1pbk1hZ25pZmljYXRpb24pLCBtYXhNYWduaWZpY2F0aW9uKTsKKworICAgIC8vIEFs
bG93IHBhbm5pbmcgYmV0d2VlbiBlbGVtZW50cyB2aWEgZG91YmxlLXRhcCB3aGlsZSBtYWduaWZp
ZWQsIHVubGVzcyB0aGUgdGFyZ2V0IHJlY3QgaXMKKyAgICAvLyBzaW1pbGFyIHRvIHRoZSBsYXN0
IG9uZSBvciB0aGUgbW91c2UgaGFzIG5vdCBtb3ZlZCwgaW4gd2hpY2ggY2FzZSB3ZSdsbCB6b29t
IGFsbCB0aGUgd2F5IG91dC4KKyAgICBpZiAoY3VycmVudFNjYWxlRmFjdG9yID4gMSAmJiBtX2xh
c3RNYWduaWZpY2F0aW9uR2VzdHVyZVdhc1NtYXJ0TWFnbmlmaWNhdGlvbikgeworICAgICAgICBp
ZiAobWF4aW11bVJlY3RhbmdsZUNvbXBvbmVudERlbHRhKG1fbGFzdFNtYXJ0TWFnbmlmaWNhdGlv
blVuc2NhbGVkVGFyZ2V0UmVjdCwgdW5zY2FsZWRUYXJnZXRSZWN0KSA8IHNtYXJ0TWFnbmlmaWNh
dGlvblBhblNjcm9sbFRocmVzaG9sZCkKKyAgICAgICAgICAgIHRhcmdldE1hZ25pZmljYXRpb24g
PSAxOworCisgICAgICAgIGlmIChtX2xhc3RTbWFydE1hZ25pZmljYXRpb25PcmlnaW4gPT0gb3Jp
Z2luKQorICAgICAgICAgICAgdGFyZ2V0TWFnbmlmaWNhdGlvbiA9IDE7CisgICAgfQorCisgICAg
RmxvYXRSZWN0IHRhcmdldFJlY3QodW5zY2FsZWRUYXJnZXRSZWN0KTsKKyAgICB0YXJnZXRSZWN0
LnNjYWxlKHRhcmdldE1hZ25pZmljYXRpb24pOworICAgIEZsb2F0UG9pbnQgdGFyZ2V0T3JpZ2lu
KHZpc2libGVDb250ZW50UmVjdC5jZW50ZXIoKSk7CisgICAgdGFyZ2V0T3JpZ2luLm1vdmVCeSgt
dGFyZ2V0UmVjdC5jZW50ZXIoKSk7CisKKyAgICBtX3dlYlBhZ2VQcm94eS5kcmF3aW5nQXJlYSgp
LT5hZGp1c3RUcmFuc2llbnRab29tKG1fd2ViUGFnZVByb3h5LnBhZ2VTY2FsZUZhY3RvcigpLCBz
Y2FsZWRNYWduaWZpY2F0aW9uT3JpZ2luKEZsb2F0UG9pbnQoKSwgbV93ZWJQYWdlUHJveHkucGFn
ZVNjYWxlRmFjdG9yKCkpKTsKKyAgICBtX3dlYlBhZ2VQcm94eS5kcmF3aW5nQXJlYSgpLT5jb21t
aXRUcmFuc2llbnRab29tKHRhcmdldE1hZ25pZmljYXRpb24sIHRhcmdldE9yaWdpbik7CisKKyAg
ICBtX2xhc3RTbWFydE1hZ25pZmljYXRpb25VbnNjYWxlZFRhcmdldFJlY3QgPSB1bnNjYWxlZFRh
cmdldFJlY3Q7CisgICAgbV9sYXN0U21hcnRNYWduaWZpY2F0aW9uT3JpZ2luID0gb3JpZ2luOwor
CisgICAgbV9sYXN0TWFnbmlmaWNhdGlvbkdlc3R1cmVXYXNTbWFydE1hZ25pZmljYXRpb24gPSB0
cnVlOworfQorCitib29sIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6aGFuZGxlU2Nyb2xsV2hlZWxF
dmVudChOU0V2ZW50ICpldmVudCkKK3sKKyAgICBpZiAobV9hY3RpdmVHZXN0dXJlVHlwZSAhPSBW
aWV3R2VzdHVyZVR5cGU6Ok5vbmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChl
dmVudC5waGFzZSAhPSBOU0V2ZW50UGhhc2VCZWdhbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgbV9oYXNQZW5kaW5nU3dpcGUgPSBmYWxzZTsKKworICAgIGlmIChmYWJzKGV2ZW50LnNj
cm9sbGluZ0RlbHRhWCkgPCBmYWJzKGV2ZW50LnNjcm9sbGluZ0RlbHRhWSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGJvb2wgd2lsbFN3aXBlTGVmdCA9IGV2ZW50LnNjcm9sbGluZ0Rl
bHRhWCA+IDAgJiYgbV93ZWJQYWdlUHJveHkuaXNQaW5uZWRUb0xlZnRTaWRlKCkgJiYgbV93ZWJQ
YWdlUHJveHkuYmFja0ZvcndhcmRMaXN0KCkuYmFja0l0ZW0oKTsKKyAgICBib29sIHdpbGxTd2lw
ZVJpZ2h0ID0gZXZlbnQuc2Nyb2xsaW5nRGVsdGFYIDwgMCAmJiBtX3dlYlBhZ2VQcm94eS5pc1Bp
bm5lZFRvUmlnaHRTaWRlKCkgJiYgbV93ZWJQYWdlUHJveHkuYmFja0ZvcndhcmRMaXN0KCkuZm9y
d2FyZEl0ZW0oKTsKKyAgICBpZiAoIXdpbGxTd2lwZUxlZnQgJiYgIXdpbGxTd2lwZVJpZ2h0KQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTd2lwZURpcmVjdGlvbiBkaXJlY3Rpb24gPSB3
aWxsU3dpcGVMZWZ0ID8gU3dpcGVEaXJlY3Rpb246OkxlZnQgOiBTd2lwZURpcmVjdGlvbjo6Umln
aHQ7CisKKyAgICBpZiAoIWV2ZW50Lmhhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmICghW05TRXZlbnQgaXNTd2lwZVRyYWNraW5nRnJvbVNj
cm9sbEV2ZW50c0VuYWJsZWRdKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV93
ZWJQYWdlUHJveHkud2lsbEhhbmRsZUhvcml6b250YWxTY3JvbGxFdmVudHMoKSkgeworICAgICAg
ICBtX2hhc1BlbmRpbmdTd2lwZSA9IHRydWU7CisgICAgICAgIG1fcGVuZGluZ1N3aXBlRGlyZWN0
aW9uID0gZGlyZWN0aW9uOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdHJh
Y2tTd2lwZUdlc3R1cmUoZXZlbnQsIGRpcmVjdGlvbik7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwordm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OndoZWVsRXZlbnRXYXNOb3RIYW5kbGVkQnlX
ZWJDb3JlKE5TRXZlbnQgKmV2ZW50KQoreworICAgIGlmICghbV9oYXNQZW5kaW5nU3dpcGUpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1faGFzUGVuZGluZ1N3aXBlID0gZmFsc2U7CisKKyAgICBp
ZiAoZXZlbnQucGhhc2UgIT0gTlNFdmVudFBoYXNlQmVnYW4pCisgICAgICAgIHJldHVybjsKKwor
ICAgIHRyYWNrU3dpcGVHZXN0dXJlKGV2ZW50LCBtX3BlbmRpbmdTd2lwZURpcmVjdGlvbik7Cit9
CisKK3ZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjp0cmFja1N3aXBlR2VzdHVyZShOU0V2ZW50
ICpldmVudCwgU3dpcGVEaXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAgIFZpZXdTbmFwc2hvdFN0
b3JlOjpzaGFyZWQoKS5yZWNvcmRTbmFwc2hvdChtX3dlYlBhZ2VQcm94eSk7CisKKyAgICBDR0Zs
b2F0IG1heFByb2dyZXNzID0gKGRpcmVjdGlvbiA9PSBTd2lwZURpcmVjdGlvbjo6TGVmdCkgPyAx
IDogMDsKKyAgICBDR0Zsb2F0IG1pblByb2dyZXNzID0gKGRpcmVjdGlvbiA9PSBTd2lwZURpcmVj
dGlvbjo6UmlnaHQpID8gLTEgOiAwOworICAgIFJlZlB0cjxXZWJCYWNrRm9yd2FyZExpc3RJdGVt
PiB0YXJnZXRJdGVtID0gKGRpcmVjdGlvbiA9PSBTd2lwZURpcmVjdGlvbjo6TGVmdCkgPyBtX3dl
YlBhZ2VQcm94eS5iYWNrRm9yd2FyZExpc3QoKS5iYWNrSXRlbSgpIDogbV93ZWJQYWdlUHJveHku
YmFja0ZvcndhcmRMaXN0KCkuZm9yd2FyZEl0ZW0oKTsKKyAgICBfX2Jsb2NrIGJvb2wgc3dpcGVD
YW5jZWxsZWQgPSBmYWxzZTsKKworICAgIFtldmVudCB0cmFja1N3aXBlRXZlbnRXaXRoT3B0aW9u
czowIGRhbXBlbkFtb3VudFRocmVzaG9sZE1pbjptaW5Qcm9ncmVzcyBtYXg6bWF4UHJvZ3Jlc3Mg
dXNpbmdIYW5kbGVyOl4oQ0dGbG9hdCBwcm9ncmVzcywgTlNFdmVudFBoYXNlIHBoYXNlLCBCT09M
IGlzQ29tcGxldGUsIEJPT0wgKnN0b3ApIHsKKyAgICAgICAgaWYgKHBoYXNlID09IE5TRXZlbnRQ
aGFzZUJlZ2FuKQorICAgICAgICAgICAgdGhpcy0+YmVnaW5Td2lwZUdlc3R1cmUodGFyZ2V0SXRl
bS5nZXQoKSwgZGlyZWN0aW9uKTsKKyAgICAgICAgQ0dGbG9hdCBjbGFtcGVkUHJvZ3Jlc3MgPSBz
dGQ6Om1pbihzdGQ6Om1heChwcm9ncmVzcywgbWluUHJvZ3Jlc3MpLCBtYXhQcm9ncmVzcyk7Cisg
ICAgICAgIHRoaXMtPmhhbmRsZVN3aXBlR2VzdHVyZSh0YXJnZXRJdGVtLmdldCgpLCBjbGFtcGVk
UHJvZ3Jlc3MsIGRpcmVjdGlvbik7CisgICAgICAgIGlmIChwaGFzZSA9PSBOU0V2ZW50UGhhc2VD
YW5jZWxsZWQpCisgICAgICAgICAgICBzd2lwZUNhbmNlbGxlZCA9IHRydWU7CisgICAgICAgIGlm
IChpc0NvbXBsZXRlKQorICAgICAgICAgICAgdGhpcy0+ZW5kU3dpcGVHZXN0dXJlKHRhcmdldEl0
ZW0uZ2V0KCksIHN3aXBlQ2FuY2VsbGVkKTsKKyAgICB9XTsKK30KKworRmxvYXRSZWN0IFZpZXdH
ZXN0dXJlQ29udHJvbGxlcjo6d2luZG93UmVsYXRpdmVCb3VuZHNGb3JDdXN0b21Td2lwZVZpZXdz
KCkgY29uc3QKK3sKKyAgICBGbG9hdFJlY3Qgc3dpcGVBcmVhOworICAgIGZvciAoY29uc3QgYXV0
byYgdmlldyA6IG1fY3VzdG9tU3dpcGVWaWV3cykKKyAgICAgICAgc3dpcGVBcmVhLnVuaXRlKFt2
aWV3IGNvbnZlcnRSZWN0Olt2aWV3IGJvdW5kc10gdG9WaWV3Om5pbF0pOworICAgIHJldHVybiBz
d2lwZUFyZWE7Cit9CisKK3N0YXRpYyBDQUxheWVyICpsZWFzdENvbW1vbkFuY2VzdG9yTGF5ZXIo
VmVjdG9yPFJldGFpblB0cjxDQUxheWVyPj4mIGxheWVycykKK3sKKyAgICBWZWN0b3I8VmVjdG9y
PENBTGF5ZXIgKj4+IGxpdmVMYXllclBhdGhzRnJvbVJvb3QobGF5ZXJzLnNpemUoKSk7CisKKyAg
ICBzaXplX3Qgc2hvcnRlc3RQYXRoTGVuZ3RoID0gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+
OjptYXgoKTsKKworICAgIGZvciAoc2l6ZV90IGxheWVySW5kZXggPSAwOyBsYXllckluZGV4IDwg
bGF5ZXJzLnNpemUoKTsgbGF5ZXJJbmRleCsrKSB7CisgICAgICAgIENBTGF5ZXIgKnBhcmVudCA9
IFtsYXllcnNbbGF5ZXJJbmRleF0gc3VwZXJsYXllcl07CisgICAgICAgIHdoaWxlIChwYXJlbnQp
IHsKKyAgICAgICAgICAgIGxpdmVMYXllclBhdGhzRnJvbVJvb3RbbGF5ZXJJbmRleF0uaW5zZXJ0
KDAsIHBhcmVudCk7CisgICAgICAgICAgICBzaG9ydGVzdFBhdGhMZW5ndGggPSBzdGQ6Om1pbihz
aG9ydGVzdFBhdGhMZW5ndGgsIGxpdmVMYXllclBhdGhzRnJvbVJvb3RbbGF5ZXJJbmRleF0uc2l6
ZSgpKTsKKyAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudC5zdXBlcmxheWVyOworICAgICAgICB9
CisgICAgfQorCisgICAgZm9yIChzaXplX3QgcGF0aEluZGV4ID0gMDsgcGF0aEluZGV4IDwgc2hv
cnRlc3RQYXRoTGVuZ3RoOyBwYXRoSW5kZXgrKykgeworICAgICAgICBDQUxheWVyICpmaXJzdFBh
dGhMYXllciA9IGxpdmVMYXllclBhdGhzRnJvbVJvb3RbMF1bcGF0aEluZGV4XTsKKyAgICAgICAg
Zm9yIChzaXplX3QgbGF5ZXJJbmRleCA9IDE7IGxheWVySW5kZXggPCBsYXllcnMuc2l6ZSgpOyBs
YXllckluZGV4KyspIHsKKyAgICAgICAgICAgIGlmIChsaXZlTGF5ZXJQYXRoc0Zyb21Sb290W2xh
eWVySW5kZXhdW3BhdGhJbmRleF0gIT0gZmlyc3RQYXRoTGF5ZXIpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZpcnN0UGF0aExheWVyOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGxp
dmVMYXllclBhdGhzRnJvbVJvb3RbMF1bc2hvcnRlc3RQYXRoTGVuZ3RoXTsKK30KKwordm9pZCBW
aWV3R2VzdHVyZUNvbnRyb2xsZXI6OmJlZ2luU3dpcGVHZXN0dXJlKFdlYkJhY2tGb3J3YXJkTGlz
dEl0ZW0qIHRhcmdldEl0ZW0sIFN3aXBlRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKyAgICBBU1NF
UlQobV9jdXJyZW50U3dpcGVMaXZlTGF5ZXJzLmlzRW1wdHkoKSk7CisKKyAgICBtX2FjdGl2ZUdl
c3R1cmVUeXBlID0gVmlld0dlc3R1cmVUeXBlOjpTd2lwZTsKKworICAgIENBTGF5ZXIgKnJvb3RD
b250ZW50TGF5ZXIgPSBtX3dlYlBhZ2VQcm94eS5hY2NlbGVyYXRlZENvbXBvc2l0aW5nUm9vdExh
eWVyKCk7CisKKyAgICBtX3N3aXBlU25hcHNob3RMYXllciA9IGFkb3B0TlMoW1tDQUxheWVyIGFs
bG9jXSBpbml0XSk7CisgICAgW21fc3dpcGVTbmFwc2hvdExheWVyIHNldEJhY2tncm91bmRDb2xv
cjpDR0NvbG9yR2V0Q29uc3RhbnRDb2xvcihrQ0dDb2xvcldoaXRlKV07CisKKyAgICBSZXRhaW5Q
dHI8SU9TdXJmYWNlUmVmPiBzbmFwc2hvdCA9IFZpZXdTbmFwc2hvdFN0b3JlOjpzaGFyZWQoKS5z
bmFwc2hvdEFuZFJlbmRlclRyZWVTaXplKHRhcmdldEl0ZW0pLmZpcnN0OworCisgICAgaWYgKHNu
YXBzaG90KSB7CisjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCisg
ICAgICAgIHVpbnQzMl90IHB1cmdlYWJpbGl0eVN0YXRlID0ga0lPU3VyZmFjZVB1cmdlYWJsZU5v
blZvbGF0aWxlOworICAgICAgICBJT1N1cmZhY2VTZXRQdXJnZWFibGUoc25hcHNob3QuZ2V0KCks
IGtJT1N1cmZhY2VQdXJnZWFibGVOb25Wb2xhdGlsZSwgJnB1cmdlYWJpbGl0eVN0YXRlKTsKKwor
ICAgICAgICBpZiAocHVyZ2VhYmlsaXR5U3RhdGUgIT0ga0lPU3VyZmFjZVB1cmdlYWJsZUVtcHR5
KQorICAgICAgICAgICAgW21fc3dpcGVTbmFwc2hvdExheWVyIHNldENvbnRlbnRzOihpZClzbmFw
c2hvdC5nZXQoKV07CisjZWxzZQorICAgICAgICBbbV9zd2lwZVNuYXBzaG90TGF5ZXIgc2V0Q29u
dGVudHM6KGlkKXNuYXBzaG90LmdldCgpXTsKKyNlbmRpZgorICAgIH0KKworICAgIG1fY3VycmVu
dFN3aXBlQ3VzdG9tVmlld0JvdW5kcyA9IHdpbmRvd1JlbGF0aXZlQm91bmRzRm9yQ3VzdG9tU3dp
cGVWaWV3cygpOworCisgICAgRmxvYXRSZWN0IHN3aXBlQXJlYTsKKyAgICBpZiAoIW1fY3VzdG9t
U3dpcGVWaWV3cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgc3dpcGVBcmVhID0gbV9jdXJyZW50U3dp
cGVDdXN0b21WaWV3Qm91bmRzOworCisgICAgICAgIGZvciAoY29uc3QgYXV0byYgdmlldyA6IG1f
Y3VzdG9tU3dpcGVWaWV3cykgeworICAgICAgICAgICAgQ0FMYXllciAqbGF5ZXIgPSBbdmlldyBs
YXllcl07CisgICAgICAgICAgICBBU1NFUlQobGF5ZXIpOworICAgICAgICAgICAgbV9jdXJyZW50
U3dpcGVMaXZlTGF5ZXJzLmFwcGVuZChsYXllcik7CisgICAgICAgIH0KKyAgICB9IGVsc2Ugewor
ICAgICAgICBzd2lwZUFyZWEgPSByb290Q29udGVudExheWVyLmZyYW1lOworICAgICAgICBtX2N1
cnJlbnRTd2lwZUxpdmVMYXllcnMuYXBwZW5kKHJvb3RDb250ZW50TGF5ZXIpOworICAgIH0KKwor
ICAgIFttX3N3aXBlU25hcHNob3RMYXllciBzZXRDb250ZW50c0dyYXZpdHk6a0NBR3Jhdml0eVRv
cExlZnRdOworICAgIFttX3N3aXBlU25hcHNob3RMYXllciBzZXRDb250ZW50c1NjYWxlOm1fd2Vi
UGFnZVByb3h5LmRldmljZVNjYWxlRmFjdG9yKCldOworICAgIFttX3N3aXBlU25hcHNob3RMYXll
ciBzZXRBbmNob3JQb2ludDpDR1BvaW50WmVyb107CisgICAgW21fc3dpcGVTbmFwc2hvdExheWVy
IHNldEZyYW1lOnN3aXBlQXJlYV07CisgICAgW21fc3dpcGVTbmFwc2hvdExheWVyIHNldE5hbWU6
QCJHZXN0dXJlIFN3aXBlIFNuYXBzaG90IExheWVyIl07CisgICAgW21fc3dpcGVTbmFwc2hvdExh
eWVyIHdlYl9kaXNhYmxlQWxsQWN0aW9uc107CisKKyAgICBpZiAobV93ZWJQYWdlUHJveHkucHJl
ZmVyZW5jZXMoKS52aWV3R2VzdHVyZURlYnVnZ2luZ0VuYWJsZWQoKSkgeworICAgICAgICBDQUZp
bHRlciogZmlsdGVyID0gW0NBRmlsdGVyIGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlckdhdXNzaWFu
Qmx1cl07CisgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9h
dDozXSBmb3JLZXk6QCJpbnB1dFJhZGl1cyJdOworICAgICAgICBbbV9zd2lwZVNuYXBzaG90TGF5
ZXIgc2V0RmlsdGVyczpAW2ZpbHRlcl1dOworICAgIH0KKworICAgIC8vIFdlIGRvbid0IGtub3cg
ZW5vdWdoIGFib3V0IHRoZSBjdXN0b20gdmlld3MnIGhpZXJhcmNoeSB0byBhcHBseSBhIHNoYWRv
dy4KKyAgICBpZiAobV9zd2lwZVRyYW5zaXRpb25TdHlsZSA9PSBTd2lwZVRyYW5zaXRpb25TdHls
ZTo6T3ZlcmxhcCAmJiBtX2N1c3RvbVN3aXBlVmlld3MuaXNFbXB0eSgpKSB7CisgICAgICAgIFJl
dGFpblB0cjxDR1BhdGhSZWY+IHNoYWRvd1BhdGggPSBhZG9wdENGKENHUGF0aENyZWF0ZVdpdGhS
ZWN0KFttX3N3aXBlU25hcHNob3RMYXllciBib3VuZHNdLCAwKSk7CisKKyAgICAgICAgaWYgKGRp
cmVjdGlvbiA9PSBTd2lwZURpcmVjdGlvbjo6TGVmdCkgeworICAgICAgICAgICAgW3Jvb3RDb250
ZW50TGF5ZXIgc2V0U2hhZG93Q29sb3I6Q0dDb2xvckdldENvbnN0YW50Q29sb3Ioa0NHQ29sb3JC
bGFjayldOworICAgICAgICAgICAgW3Jvb3RDb250ZW50TGF5ZXIgc2V0U2hhZG93T3BhY2l0eTpz
d2lwZU92ZXJsYXlTaGFkb3dPcGFjaXR5XTsKKyAgICAgICAgICAgIFtyb290Q29udGVudExheWVy
IHNldFNoYWRvd1JhZGl1czpzd2lwZU92ZXJsYXlTaGFkb3dSYWRpdXNdOworICAgICAgICAgICAg
W3Jvb3RDb250ZW50TGF5ZXIgc2V0U2hhZG93UGF0aDpzaGFkb3dQYXRoLmdldCgpXTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFttX3N3aXBlU25hcHNob3RMYXllciBzZXRTaGFkb3dD
b2xvcjpDR0NvbG9yR2V0Q29uc3RhbnRDb2xvcihrQ0dDb2xvckJsYWNrKV07CisgICAgICAgICAg
ICBbbV9zd2lwZVNuYXBzaG90TGF5ZXIgc2V0U2hhZG93T3BhY2l0eTpzd2lwZU92ZXJsYXlTaGFk
b3dPcGFjaXR5XTsKKyAgICAgICAgICAgIFttX3N3aXBlU25hcHNob3RMYXllciBzZXRTaGFkb3dS
YWRpdXM6c3dpcGVPdmVybGF5U2hhZG93UmFkaXVzXTsKKyAgICAgICAgICAgIFttX3N3aXBlU25h
cHNob3RMYXllciBzZXRTaGFkb3dQYXRoOnNoYWRvd1BhdGguZ2V0KCldOworICAgICAgICB9Cisg
ICAgfQorCisgICAgLy8gSWYgd2UgaGF2ZSBjdXN0b20gc3dpcGluZyB2aWV3cywgd2UgYXNzdW1l
IHRoYXQgdGhlIHZpZXdzIHdlcmUgcGFzc2VkIHRvIHVzIGluIGJhY2stdG8tZnJvbnQgei1vcmRl
ci4KKyAgICBDQUxheWVyICpsYXllckFkamFjZW50VG9TbmFwc2hvdCA9IGRpcmVjdGlvbiA9PSBT
d2lwZURpcmVjdGlvbjo6TGVmdCA/IG1fY3VycmVudFN3aXBlTGl2ZUxheWVycy5maXJzdCgpLmdl
dCgpIDogbV9jdXJyZW50U3dpcGVMaXZlTGF5ZXJzLmxhc3QoKS5nZXQoKTsKKyAgICBDQUxheWVy
ICpzbmFwc2hvdExheWVyUGFyZW50OworCisgICAgaWYgKG1fY3VycmVudFN3aXBlTGl2ZUxheWVy
cy5zaXplKCkgPT0gMSkKKyAgICAgICAgc25hcHNob3RMYXllclBhcmVudCA9IFttX2N1cnJlbnRT
d2lwZUxpdmVMYXllcnNbMF0gc3VwZXJsYXllcl07CisgICAgZWxzZSB7CisgICAgICAgIC8vIFdl
IGluc2VydCBvdXIgc25hcHNob3QgaW50byB0aGUgZmlyc3Qgc2hhcmVkIHN1cGVybGF5ZXIgb2Yg
dGhlIGN1c3RvbSB2aWV3cycgbGF5ZXIsIGFib3ZlIHRoZSBmcm9udG1vc3Qgb3IgYmVsb3cgdGhl
IGJvdHRvbW1vc3QgbGF5ZXIuCisgICAgICAgIHNuYXBzaG90TGF5ZXJQYXJlbnQgPSBsZWFzdENv
bW1vbkFuY2VzdG9yTGF5ZXIobV9jdXJyZW50U3dpcGVMaXZlTGF5ZXJzKTsKKworICAgICAgICAv
LyBJZiB0aGUgbGF5ZXJzIGFyZSBub3QgYWxsIHNpYmxpbmdzLCBmaW5kIHRoZSBjaGlsZCBvZiB0
aGUgbGF5ZXIgd2UncmUgZ29pbmcgdG8gaW5zZXJ0IHRoZSBzbmFwc2hvdCBpbnRvIHdoaWNoIGhh
cyB0aGUgZnJvbnRtb3N0L2JvdHRvbW1vc3QgbGF5ZXIgYXMgYSBjaGlsZC4KKyAgICAgICAgd2hp
bGUgKHNuYXBzaG90TGF5ZXJQYXJlbnQgIT0gbGF5ZXJBZGphY2VudFRvU25hcHNob3Quc3VwZXJs
YXllcikKKyAgICAgICAgICAgIGxheWVyQWRqYWNlbnRUb1NuYXBzaG90ID0gbGF5ZXJBZGphY2Vu
dFRvU25hcHNob3Quc3VwZXJsYXllcjsKKyAgICB9CisKKyAgICBpZiAoZGlyZWN0aW9uID09IFN3
aXBlRGlyZWN0aW9uOjpMZWZ0KQorICAgICAgICBbc25hcHNob3RMYXllclBhcmVudCBpbnNlcnRT
dWJsYXllcjptX3N3aXBlU25hcHNob3RMYXllci5nZXQoKSBiZWxvdzpsYXllckFkamFjZW50VG9T
bmFwc2hvdF07CisgICAgZWxzZQorICAgICAgICBbc25hcHNob3RMYXllclBhcmVudCBpbnNlcnRT
dWJsYXllcjptX3N3aXBlU25hcHNob3RMYXllci5nZXQoKSBhYm92ZTpsYXllckFkamFjZW50VG9T
bmFwc2hvdF07Cit9CisKK3ZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpoYW5kbGVTd2lwZUdl
c3R1cmUoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogdGFyZ2V0SXRlbSwgZG91YmxlIHByb2dyZXNz
LCBTd2lwZURpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAgQVNTRVJUKG1fYWN0aXZlR2VzdHVy
ZVR5cGUgPT0gVmlld0dlc3R1cmVUeXBlOjpTd2lwZSk7CisKKyAgICBkb3VibGUgd2lkdGg7Cisg
ICAgaWYgKCFtX2N1c3RvbVN3aXBlVmlld3MuaXNFbXB0eSgpKQorICAgICAgICB3aWR0aCA9IG1f
Y3VycmVudFN3aXBlQ3VzdG9tVmlld0JvdW5kcy53aWR0aCgpOworICAgIGVsc2UKKyAgICAgICAg
d2lkdGggPSBtX3dlYlBhZ2VQcm94eS5hY2NlbGVyYXRlZENvbXBvc2l0aW5nUm9vdExheWVyKCku
ZnJhbWUuc2l6ZS53aWR0aDsKKworICAgIGRvdWJsZSBzd2lwaW5nTGF5ZXJPZmZzZXQgPSBmbG9v
cih3aWR0aCAqIHByb2dyZXNzKTsKKworICAgIGlmIChtX3N3aXBlVHJhbnNpdGlvblN0eWxlID09
IFN3aXBlVHJhbnNpdGlvblN0eWxlOjpPdmVybGFwKSB7CisgICAgICAgIGlmIChkaXJlY3Rpb24g
PT0gU3dpcGVEaXJlY3Rpb246OlJpZ2h0KQorICAgICAgICAgICAgW21fc3dpcGVTbmFwc2hvdExh
eWVyIHNldFRyYW5zZm9ybTpDQVRyYW5zZm9ybTNETWFrZVRyYW5zbGF0aW9uKHdpZHRoICsgc3dp
cGluZ0xheWVyT2Zmc2V0LCAwLCAwKV07CisgICAgfSBlbHNlIGlmIChtX3N3aXBlVHJhbnNpdGlv
blN0eWxlID09IFN3aXBlVHJhbnNpdGlvblN0eWxlOjpQdXNoKQorICAgICAgICBbbV9zd2lwZVNu
YXBzaG90TGF5ZXIgc2V0VHJhbnNmb3JtOkNBVHJhbnNmb3JtM0RNYWtlVHJhbnNsYXRpb24oKGRp
cmVjdGlvbiA9PSBTd2lwZURpcmVjdGlvbjo6TGVmdCA/IC13aWR0aCA6IHdpZHRoKSArIHN3aXBp
bmdMYXllck9mZnNldCwgMCwgMCldOworCisgICAgZm9yIChjb25zdCBhdXRvJiBsYXllciA6IG1f
Y3VycmVudFN3aXBlTGl2ZUxheWVycykgeworICAgICAgICBpZiAobV9zd2lwZVRyYW5zaXRpb25T
dHlsZSA9PSBTd2lwZVRyYW5zaXRpb25TdHlsZTo6T3ZlcmxhcCkgeworICAgICAgICAgICAgaWYg
KGRpcmVjdGlvbiA9PSBTd2lwZURpcmVjdGlvbjo6TGVmdCkKKyAgICAgICAgICAgICAgICBbbGF5
ZXIgc2V0VHJhbnNmb3JtOkNBVHJhbnNmb3JtM0RNYWtlVHJhbnNsYXRpb24oc3dpcGluZ0xheWVy
T2Zmc2V0LCAwLCAwKV07CisgICAgICAgIH0gZWxzZSBpZiAobV9zd2lwZVRyYW5zaXRpb25TdHls
ZSA9PSBTd2lwZVRyYW5zaXRpb25TdHlsZTo6UHVzaCkKKyAgICAgICAgICAgIFtsYXllciBzZXRU
cmFuc2Zvcm06Q0FUcmFuc2Zvcm0zRE1ha2VUcmFuc2xhdGlvbihzd2lwaW5nTGF5ZXJPZmZzZXQs
IDAsIDApXTsKKyAgICB9Cit9CisKK3ZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjplbmRTd2lw
ZUdlc3R1cmUoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogdGFyZ2V0SXRlbSwgYm9vbCBjYW5jZWxs
ZWQpCit7CisgICAgQVNTRVJUKG1fYWN0aXZlR2VzdHVyZVR5cGUgPT0gVmlld0dlc3R1cmVUeXBl
OjpTd2lwZSk7CisKKyAgICBDQUxheWVyICpyb290TGF5ZXIgPSBtX3dlYlBhZ2VQcm94eS5hY2Nl
bGVyYXRlZENvbXBvc2l0aW5nUm9vdExheWVyKCk7CisKKyAgICBbcm9vdExheWVyIHNldFNoYWRv
d09wYWNpdHk6MF07CisgICAgW3Jvb3RMYXllciBzZXRTaGFkb3dSYWRpdXM6MF07CisKKyAgICBp
ZiAoY2FuY2VsbGVkKSB7CisgICAgICAgIHJlbW92ZVN3aXBlU25hcHNob3QoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIHVpbnQ2NF90IHJlbmRlclRyZWVTaXplID0gVmlld1NuYXBz
aG90U3RvcmU6OnNoYXJlZCgpLnNuYXBzaG90QW5kUmVuZGVyVHJlZVNpemUodGFyZ2V0SXRlbSku
c2Vjb25kOworICAgIG1fd2ViUGFnZVByb3h5LnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpWaWV3
R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yOjpTZXRSZW5kZXJUcmVlU2l6ZU5vdGlmaWNhdGlvblRo
cmVzaG9sZChyZW5kZXJUcmVlU2l6ZSAqIHN3aXBlU25hcHNob3RSZW1vdmFsUmVuZGVyVHJlZVNp
emVUYXJnZXRGcmFjdGlvbiksIG1fd2ViUGFnZVByb3h5LnBhZ2VJRCgpKTsKKworICAgIC8vIFdl
IGRvbid0IHdhbnQgdG8gcmVwbGFjZSB0aGUgY3VycmVudCBiYWNrLWZvcndhcmQgaXRlbSdzIHNu
YXBzaG90CisgICAgLy8gbGlrZSB3ZSBub3JtYWxseSB3b3VsZCB3aGVuIGdvaW5nIGJhY2sgb3Ig
Zm9yd2FyZCwgYmVjYXVzZSB3ZSBhcmUKKyAgICAvLyBkaXNwbGF5aW5nIHRoZSBkZXN0aW5hdGlv
biBpdGVtJ3Mgc25hcHNob3QuCisgICAgVmlld1NuYXBzaG90U3RvcmU6OnNoYXJlZCgpLmRpc2Fi
bGVTbmFwc2hvdHRpbmcoKTsKKyAgICBtX3dlYlBhZ2VQcm94eS5nb1RvQmFja0ZvcndhcmRJdGVt
KHRhcmdldEl0ZW0pOworICAgIFZpZXdTbmFwc2hvdFN0b3JlOjpzaGFyZWQoKS5lbmFibGVTbmFw
c2hvdHRpbmcoKTsKKworICAgIGlmICghcmVuZGVyVHJlZVNpemUpIHsKKyAgICAgICAgcmVtb3Zl
U3dpcGVTbmFwc2hvdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9zd2lwZVdh
dGNoZG9nVGltZXIuc3RhcnRPbmVTaG90KHN3aXBlU25hcHNob3RSZW1vdmFsV2F0Y2hkb2dEdXJh
dGlvbi5jb3VudCgpKTsKK30KKwordm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmRpZEhpdFJl
bmRlclRyZWVTaXplVGhyZXNob2xkKCkKK3sKKyAgICByZW1vdmVTd2lwZVNuYXBzaG90KCk7Cit9
CisKK3ZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpzd2lwZVNuYXBzaG90V2F0Y2hkb2dUaW1l
ckZpcmVkKFdlYkNvcmU6OlRpbWVyPFZpZXdHZXN0dXJlQ29udHJvbGxlcj4qKQoreworICAgIHJl
bW92ZVN3aXBlU25hcHNob3QoKTsKK30KKwordm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OnJl
bW92ZVN3aXBlU25hcHNob3QoKQoreworICAgIG1fc3dpcGVXYXRjaGRvZ1RpbWVyLnN0b3AoKTsK
KworICAgIGlmIChtX2FjdGl2ZUdlc3R1cmVUeXBlICE9IFZpZXdHZXN0dXJlVHlwZTo6U3dpcGUp
CisgICAgICAgIHJldHVybjsKKworI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQg
Pj0gMTA5MAorICAgIElPU3VyZmFjZVJlZiBzbmFwc2hvdFN1cmZhY2UgPSAoSU9TdXJmYWNlUmVm
KVttX3N3aXBlU25hcHNob3RMYXllciBjb250ZW50c107CisgICAgaWYgKHNuYXBzaG90U3VyZmFj
ZSkKKyAgICAgICAgSU9TdXJmYWNlU2V0UHVyZ2VhYmxlKHNuYXBzaG90U3VyZmFjZSwga0lPU3Vy
ZmFjZVB1cmdlYWJsZVZvbGF0aWxlLCBudWxscHRyKTsKKyNlbmRpZgorCisgICAgZm9yIChjb25z
dCBhdXRvJiBsYXllciA6IG1fY3VycmVudFN3aXBlTGl2ZUxheWVycykKKyAgICAgICAgW2xheWVy
IHNldFRyYW5zZm9ybTpDQVRyYW5zZm9ybTNESWRlbnRpdHldOworCisgICAgW21fc3dpcGVTbmFw
c2hvdExheWVyIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKKyAgICBtX3N3aXBlU25hcHNob3RMYXll
ciA9IG51bGxwdHI7CisKKyAgICBtX2N1cnJlbnRTd2lwZUxpdmVMYXllcnMuY2xlYXIoKTsKKwor
ICAgIG1fYWN0aXZlR2VzdHVyZVR5cGUgPSBWaWV3R2VzdHVyZVR5cGU6Ok5vbmU7Cit9CisKK3Zv
aWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjplbmRBY3RpdmVHZXN0dXJlKCkKK3sKKyAgICBpZiAo
bV9hY3RpdmVHZXN0dXJlVHlwZSA9PSBWaWV3R2VzdHVyZVR5cGU6Ok1hZ25pZmljYXRpb24pIHsK
KyAgICAgICAgZW5kTWFnbmlmaWNhdGlvbkdlc3R1cmUoKTsKKyAgICAgICAgbV92aXNpYmxlQ29u
dGVudFJlY3RJc1ZhbGlkID0gZmFsc2U7CisgICAgfQorfQorCitkb3VibGUgVmlld0dlc3R1cmVD
b250cm9sbGVyOjptYWduaWZpY2F0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAobV9hY3RpdmVHZXN0
dXJlVHlwZSA9PSBWaWV3R2VzdHVyZVR5cGU6Ok1hZ25pZmljYXRpb24pCisgICAgICAgIHJldHVy
biBtX21hZ25pZmljYXRpb247CisKKyAgICByZXR1cm4gbV93ZWJQYWdlUHJveHkucGFnZVNjYWxl
RmFjdG9yKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gIVBMQVRG
T1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagppbmRleCAzNGE4MGExLi5kYWRmN2MyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00MjMsNyArNDIzLDcgQEAKIAkJ
MjlENTVERjExNjFCRjlGMTAwMzFBMkUzIC8qIFdlYlBhZ2VHcm91cFByb3h5TWVzc2FnZVJlY2Vp
dmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5
RDU1REVGMTYxQkY5RjEwMDMxQTJFMyAvKiBXZWJQYWdlR3JvdXBQcm94eU1lc3NhZ2VSZWNlaXZl
ci5jcHAgKi87IH07CiAJCTI5RDU1REYyMTYxQkY5RjEwMDMxQTJFMyAvKiBXZWJQYWdlR3JvdXBQ
cm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyOUQ1NURGMDE2MUJGOUYxMDAzMUEyRTMgLyogV2ViUGFnZUdyb3VwUHJveHlNZXNzYWdl
cy5oICovOyB9OwogCQkyRDEyNUM1RTE4NTdFQTA1MDAzQkEzQ0IgLyogVmlld0dlc3R1cmVDb250
cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
RDEyNUM1QzE4NTdFQTA1MDAzQkEzQ0IgLyogVmlld0dlc3R1cmVDb250cm9sbGVyLmggKi87IH07
Ci0JCTJEMTI1QzVGMTg1N0VBMDUwMDNCQTNDQiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXIubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDEyNUM1RDE4
NTdFQTA1MDAzQkEzQ0IgLyogVmlld0dlc3R1cmVDb250cm9sbGVyLm1tICovOyB9OworCQkyRDEy
NUM1RjE4NTdFQTA1MDAzQkEzQ0IgLyogVmlld0dlc3R1cmVDb250cm9sbGVyTWFjLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQxMjVDNUQxODU3RUEw
NTAwM0JBM0NCIC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlck1hYy5tbSAqLzsgfTsKIAkJMkQxQjVE
NUQxODU4NjlDODAwNkM2NTk2IC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlck1lc3NhZ2VSZWNlaXZl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDFC
NUQ1QjE4NTg2OUM4MDA2QzY1OTYgLyogVmlld0dlc3R1cmVDb250cm9sbGVyTWVzc2FnZVJlY2Vp
dmVyLmNwcCAqLzsgfTsKIAkJMkQxQjVENUUxODU4NjlDODAwNkM2NTk2IC8qIFZpZXdHZXN0dXJl
Q29udHJvbGxlck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyRDFCNUQ1QzE4NTg2OUM4MDA2QzY1OTYgLyogVmlld0dlc3R1cmVDb250cm9s
bGVyTWVzc2FnZXMuaCAqLzsgfTsKIAkJMkQyOEYzRTQxODg1Q0NDMTAwNEI5RUFFIC8qIFdlYkNo
cm9tZUNsaWVudElPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDJEMjhGM0UwMTg4NUNDQzEwMDRCOUVBRSAvKiBXZWJDaHJvbWVDbGllbnRJT1MubW0g
Ki87IH07CkBAIC0yMTA3LDcgKzIxMDcsNyBAQAogCQkyOUQ1NURFRjE2MUJGOUYxMDAzMUEyRTMg
LyogV2ViUGFnZUdyb3VwUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUGFnZUdyb3VwUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyOUQ1NURGMDE2MUJGOUYxMDAzMUEyRTMg
LyogV2ViUGFnZUdyb3VwUHJveHlNZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJQYWdlR3JvdXBQcm94eU1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTJEMTI1QzVDMTg1N0VBMDUwMDNCQTNDQiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xs
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlld0dlc3R1cmVDb250cm9s
bGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJEMTI1QzVEMTg1N0VBMDUwMDNC
QTNDQiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBWaWV3R2VzdHVyZUNvbnRyb2xsZXIubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTJEMTI1QzVEMTg1N0VBMDUwMDNCQTNDQiAvKiBWaWV3R2VzdHVyZUNv
bnRyb2xsZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBW
aWV3R2VzdHVyZUNvbnRyb2xsZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTJEMUI1RDVBMTg1ODY1OTkwMDZDNjU5NiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXIubWVzc2Fn
ZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gVmlld0dlc3R1cmVDb250cm9sbGVyLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkyRDFCNUQ1QjE4NTg2OUM4MDA2QzY1OTYgLyogVmlld0dlc3R1
cmVDb250cm9sbGVyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFZpZXdHZXN0dXJlQ29udHJvbGxlck1lc3NhZ2VSZWNlaXZlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEMUI1RDVDMTg1ODY5QzgwMDZDNjU5NiAvKiBW
aWV3R2VzdHVyZUNvbnRyb2xsZXJNZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBWaWV3R2VzdHVyZUNvbnRyb2xsZXJNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtNTgxMSw3ICs1ODExLDcgQEAKIAkJCQkxQUYwNUQ4NTE0Njg4MzQ4MDA4
QjFFODEgLyogVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFQcm94eS5oICovLAogCQkJCTFB
RjA1RDg0MTQ2ODgzNDgwMDhCMUU4MSAvKiBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYVBy
b3h5Lm1tICovLAogCQkJCTJEMTI1QzVDMTg1N0VBMDUwMDNCQTNDQiAvKiBWaWV3R2VzdHVyZUNv
bnRyb2xsZXIuaCAqLywKLQkJCQkyRDEyNUM1RDE4NTdFQTA1MDAzQkEzQ0IgLyogVmlld0dlc3R1
cmVDb250cm9sbGVyLm1tICovLAorCQkJCTJEMTI1QzVEMTg1N0VBMDUwMDNCQTNDQiAvKiBWaWV3
R2VzdHVyZUNvbnRyb2xsZXJNYWMubW0gKi8sCiAJCQkJMkQxQjVENUExODU4NjU5OTAwNkM2NTk2
IC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlci5tZXNzYWdlcy5pbiAqLywKIAkJCQkyRDZDRDExNzE4
OTA1OEE1MDBFNUE0QTAgLyogVmlld1NuYXBzaG90U3RvcmUuaCAqLywKIAkJCQkyRDZDRDExODE4
OTA1OEE1MDBFNUE0QTAgLyogVmlld1NuYXBzaG90U3RvcmUubW0gKi8sCkBAIC03OTEzLDcgKzc5
MTMsNyBAQAogCQkJCUJDRDM2NzVDMTQ4QzI2QzAwMDQ0N0U4NyAvKiBXZWJDb25uZWN0aW9uVG9V
SVByb2Nlc3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM0QTYyQTcxNDc0NEVDNzAwNkM2ODFB
IC8qIFdlYkNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM4
MjgzNjUxNkIzNTRGNjAwQTI3OEZFIC8qIFdlYkNvbnRlbnRQcm9jZXNzTWFpbi5tbSBpbiBTb3Vy
Y2VzICovLAotCQkJCTJEMTI1QzVGMTg1N0VBMDUwMDNCQTNDQiAvKiBWaWV3R2VzdHVyZUNvbnRy
b2xsZXIubW0gaW4gU291cmNlcyAqLywKKwkJCQkyRDEyNUM1RjE4NTdFQTA1MDAzQkEzQ0IgLyog
Vmlld0dlc3R1cmVDb250cm9sbGVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM4MjgzOTkx
NkI0OERDMDAwQTI3OEZFIC8qIFdlYkNvbnRlbnRTZXJ2aWNlRW50cnlQb2ludC5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCUJDQjlFMjQ0MTEyMERBQ0EwMEExMzdFMCAvKiBXZWJDb250ZXh0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTMxQTUwNUY5MTY4MDAyNTUwMEE5MzBFQiAvKiBXZWJDb250ZXh0
Q2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAo=
</data>
<flag name="review"
          id="247515"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>