submission 29702
KernelBot user 126 · python · License unknown
Use it
Vendorable · source mirrored · license unknownView source →
No package. Vendor the mirrored source: 1 lines, June 9 Researcher Reciprocity License v1.0.
submission_mla_version_4.py
curl "https://kernelindex.com/api/v1/implementations/kernelbot-amd-mla-decode-29702?include=source"interfacepython
Compatibility
measured onAMD Instinct MI300X
declared hardwareAMD Instinct MI300X
architecturesgfx942
dtypesbf16
Benchmark evidence
1 measurement across 1 GPU, fastest first.
Operation / workload
Hardware
Latency
Rank
Observed
Reported · How evidence levels are derived →
Source and license
sourceavailable
revision digestsha256:444f0c049500bd88b02428afd4e17a5c5d5b31033ebfcd0a5bad7bd6e16910bd
license declaredunknown
license concludedunknown
imported2026-08-15
Kernel source
submission_mla_version_4.py1 lines
aW1wb3J0IG1hdGgKaW1wb3J0IHRpbWUKaW1wb3J0IHJhbmRvbQoKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCB0b3JjaAppbXBvcnQgdG9yY2gubm4uZnVuY3Rpb25hbCBhcyBGCmltcG9ydCB0cml0b24KaW1wb3J0IHRyaXRvbi5sYW5ndWFnZSBhcyB0bAoKZnJvbSB0YXNrIGltcG9ydCBpbnB1dF90LCBvdXRwdXRfdApmcm9tIHJlZmVyZW5jZSBpbXBvcnQgS1ZDYWNoZSwgQ29uZmlnCmZyb20gdXRpbHMgaW1wb3J0IHZlcmJvc2VfYWxsY2xvc2UKCgojIGRlZiBzZXRfc2VlZChzZWVkPTApOgojICAgICByYW5kb20uc2VlZChzZWVkKQojICAgICBucC5yYW5kb20uc2VlZChzZWVkKQojICAgICB0b3JjaC5tYW51YWxfc2VlZChzZWVkKQoKCnFrX3JvcGVfaGVhZF9kaW0gPSA2NAoKIyBzdGFydCA9IHRpbWUucGVyZl9jb3VudGVyX25zKCkKCnRoZXRhID0gMTAwMDAgKiogKC10b3JjaC5hcmFuZ2UoMCwgcWtfcm9wZV9oZWFkX2RpbSAvLyAyLCBkdHlwZT10b3JjaC5iZmxvYXQxNiwgZGV2aWNlPSJjdWRhIikgLyAocWtfcm9wZV9oZWFkX2RpbSAvLyAyKSkKc2VxX2lkeCA9IHRvcmNoLmFyYW5nZSgwLCA4MTkyLCBkZXZpY2U9ImN1ZGEiKQppZHhfdGhldGEgPSB0b3JjaC5laW5zdW0oJ3MsZC0+c2QnLCBzZXFfaWR4LCB0aGV0YSkKaWR4X3RoZXRhMiA9IHRvcmNoLmNhdChbaWR4X3RoZXRhLCBpZHhfdGhldGFdLCBkaW09LTEpCnByZV9jb3MgPSBpZHhfdGhldGEyLmNvcygpLnRvKHRvcmNoLmJmbG9hdDE2KS51bnNxdWVlemUoMSkKcHJlX3NpbiA9IGlkeF90aGV0YTIuc2luKCkudG8odG9yY2guYmZsb2F0MTYpLnVuc3F1ZWV6ZSgxKQoKIyBlbmQgPSB0aW1lLnBlcmZfY291bnRlcl9ucygpCiMgcHJpbnQoZW5kIC0gc3RhcnQpCgoKZGVmIHJvdGF0ZV9oYWxmKHg6IHRvcmNoLlRlbnNvcikgLT4gdG9yY2guVGVuc29yOgogICAgeDEsIHgyID0geC5jaHVuaygyLCBkaW09LTEpCiAgICByZXR1cm4gdG9yY2guY2F0KCgteDIsIHgxKSwgZGltPS0xKQoKCmRlZiByb3BlKHg6IHRvcmNoLlRlbnNvciwgdGhldGE6IHRvcmNoLlRlbnNvciwgc3RhcnRfcG9zOiBpbnQgPSAwKSAtPiB0b3JjaC5UZW5zb3I6CiAgICBzZXFfbGVuID0geC5zaXplKC0yKQogICAgc2VxX2lkeCA9IHRvcmNoLmFyYW5nZShzdGFydF9wb3MsIHN0YXJ0X3BvcyArIHNlcV9sZW4sIGRldmljZT14LmRldmljZSkKICAgIGlkeF90aGV0YSA9IHRvcmNoLmVpbnN1bSgncyxkLT5zZCcsIHNlcV9pZHgsIHRoZXRhKQogICAgaWR4X3RoZXRhMiA9IHRvcmNoLmNhdChbaWR4X3RoZXRhLCBpZHhfdGhldGFdLCBkaW09LTEpCiAgICBjb3MgPSBpZHhfdGhldGEyLmNvcygpLnRvKHRvcmNoLmJmbG9hdDE2KQogICAgc2luID0gaWR4X3RoZXRhMi5zaW4oKS50byh0b3JjaC5iZmxvYXQxNikKICAgIHJldHVybiB4ICogY29zICsgcm90YXRlX2hhbGYoeCkgKiBzaW4KCgpkZWYgYXBwbHlfcm90YXJ5X2VtYih4OiB0b3JjaC5UZW5zb3IsIHRoZXRhOiB0b3JjaC5UZW5zb3IsIHN0YXJ0X3BvczogaW50ID0gMCkgLT4gdG9yY2guVGVuc29yOgogICAgc2VxX2xlbiA9IHguc2l6ZSgtMykKICAgIHNlcV9pZHggPSB0b3JjaC5hcmFuZ2Uoc3RhcnRfcG9zLCBzdGFydF9wb3MgKyBzZXFfbGVuLCBkZXZpY2U9eC5kZXZpY2UpCiAgICBpZHhfdGhldGEgPSB0b3JjaC5laW5zdW0oJ3MsZC0+c2QnLCBzZXFfaWR4LCB0aGV0YSkKICAgIGlkeF90aGV0YTIgPSB0b3JjaC5jYXQoW2lkeF90aGV0YSwgaWR4X3RoZXRhXSwgZGltPS0xKQogICAgY29zID0gaWR4X3RoZXRhMi5jb3MoKS50byh0b3JjaC5iZmxvYXQxNikudW5zcXVlZXplKDEpCiAgICBzaW4gPSBpZHhfdGhldGEyLnNpbigpLnRvKHRvcmNoLmJmbG9hdDE2KS51bnNxdWVlemUoMSkKICAgIHJldHVybiB4ICogY29zICsgcm90YXRlX2hhbGYoeCkgKiBzaW4KCgpkZWYgYXBwbHlfcm90YXJ5X2VtYl9wcmUoeDogdG9yY2guVGVuc29yLCB0aGV0YTogdG9yY2guVGVuc29yLCBzdGFydF9wb3M6IGludCA9IDApIC0+IHRvcmNoLlRlbnNvcjoKICAgIHNlcV9sZW4gPSB4LnNpemUoLTMpCiAgICBjb3MgPSBwcmVfY29zW3N0YXJ0X3BvczpzdGFydF9wb3MgKyBzZXFfbGVuXQogICAgc2luID0gcHJlX3NpbltzdGFydF9wb3M6c3RhcnRfcG9zICsgc2VxX2xlbl0KICAgIHJldHVybiB4ICogY29zICsgcm90YXRlX2hhbGYoeCkgKiBzaW4KCgpAdHJpdG9uLmppdApkZWYgc29mdG1heF9rZXJuZWwob3V0cHV0X3B0ciwgaW5wdXRfcHRyLCBpbnB1dF9yb3dfc3RyaWRlLCBvdXRwdXRfcm93X3N0cmlkZSwgbl9yb3dzLCBuX2NvbHMsIEJMT0NLX1NJWkU6IHRsLmNvbnN0ZXhwciwKICAgICAgICAgICAgICAgICAgIG51bV9zdGFnZXM6IHRsLmNvbnN0ZXhwcik6CiAgICAjIHN0YXJ0aW5nIHJvdyBvZiB0aGUgcHJvZ3JhbQogICAgcm93X3N0YXJ0ID0gdGwucHJvZ3JhbV9pZCgwKQogICAgcm93X3N0ZXAgPSB0bC5udW1fcHJvZ3JhbXMoMCkKICAgIGZvciByb3dfaWR4IGluIHRsLnJhbmdlKHJvd19zdGFydCwgbl9yb3dzLCByb3dfc3RlcCwgbnVtX3N0YWdlcz1udW1fc3RhZ2VzKToKICAgICAgICAjIFRoZSBzdHJpZGUgcmVwcmVzZW50cyBob3cgbXVjaCB3ZSBuZWVkIHRvIGluY3JlYXNlIHRoZSBwb2ludGVyIHRvIGFkdmFuY2UgMSByb3cKICAgICAgICByb3dfc3RhcnRfcHRyID0gaW5wdXRfcHRyICsgcm93X2lkeCAqIGlucHV0X3Jvd19zdHJpZGUKICAgICAgICAjIFRoZSBibG9jayBzaXplIGlzIHRoZSBuZXh0IHBvd2VyIG9mIHR3byBncmVhdGVyIHRoYW4gbl9jb2xzLCBzbyB3ZSBjYW4gZml0IGVhY2gKICAgICAgICAjIHJvdyBpbiBhIHNpbmdsZSBibG9jawogICAgICAgIGNvbF9vZmZzZXRzID0gdGwuYXJhbmdlKDAsIEJMT0NLX1NJWkUpCiAgICAgICAgaW5wdXRfcHRycyA9IHJvd19zdGFydF9wdHIgKyBjb2xfb2Zmc2V0cwogICAgICAgICMgTG9hZCB0aGUgcm93IGludG8gU1JBTSwgdXNpbmcgYSBtYXNrIHNpbmNlIEJMT0NLX1NJWkUgbWF5IGJlID4gdGhhbiBuX2NvbHMKICAgICAgICBtYXNrID0gY29sX29mZnNldHMgPCBuX2NvbHMKICAgICAgICByb3cgPSB0bC5sb2FkKGlucHV0X3B0cnMsIG1hc2s9bWFzaywgb3RoZXI9LWZsb2F0KCdpbmYnKSkKICAgICAgICAjIFN1YnRyYWN0IG1heGltdW0gZm9yIG51bWVyaWNhbCBzdGFiaWxpdHkKICAgICAgICByb3dfbWludXNfbWF4ID0gcm93IC0gdGwubWF4KHJvdywgYXhpcz0wKQogICAgICAgICMgTm90ZSB0aGF0IGV4cG9uZW50aWF0aW9uIGluIFRyaXRvbiBpcyBmYXN0IGJ1dCBhcHByb3hpbWF0ZSAoaS5lLiwgdGhpbmsgX19leHBmIGluIENVREEpCiAgICAgICAgbnVtZXJhdG9yID0gdGwuZXhwKHJvd19taW51c19tYXgpCiAgICAgICAgZGVub21pbmF0b3IgPSB0bC5zdW0obnVtZXJhdG9yLCBheGlzPTApCiAgICAgICAgc29mdG1heF9vdXRwdXQgPSBudW1lcmF0b3IgLyBkZW5vbWluYXRvcgogICAgICAgICMgV3JpdGUgYmFjayBvdXRwdXQgdG8gRFJBTQogICAgICAgIG91dHB1dF9yb3dfc3RhcnRfcHRyID0gb3V0cHV0X3B0ciArIHJvd19pZHggKiBvdXRwdXRfcm93X3N0cmlkZQogICAgICAgIG91dHB1dF9wdHJzID0gb3V0cHV0X3Jvd19zdGFydF9wdHIgKyBjb2xfb2Zmc2V0cwogICAgICAgIHRsLnN0b3JlKG91dHB1dF9wdHJzLCBzb2Z0bWF4X291dHB1dCwgbWFzaz1tYXNrKQoKCmRlZiBzb2Z0bWF4KHgpOgogICAgbl9jb2xzID0geC5zaGFwZVstMV0KICAgIG5fcm93cyA9IHgubnVtZWwoKSAvLyBuX2NvbHMKCiAgICBCTE9DS19TSVpFID0gdHJpdG9uLm5leHRfcG93ZXJfb2ZfMihuX2NvbHMpCgogICAgbnVtX3N0YWdlcyA9IDIKCiAgICB5ID0gdG9yY2guZW1wdHlfbGlrZSh4KQoKICAgIHNvZnRtYXhfa2VybmVsWyhuX3Jvd3MsKV0oCiAgICAgICAgeSwKICAgICAgICB4LAogICAgICAgIHguc3RyaWRlKC0yKSwKICAgICAgICB5LnN0cmlkZSgtMiksCiAgICAgICAgbl9yb3dzLAogICAgICAgIG5fY29scywKICAgICAgICBCTE9DS19TSVpFLAogICAgICAgIG51bV9zdGFnZXMpCiAgICByZXR1cm4geQoKCmRlZiBtbGFfYWJzb3JiKHg6IHRvcmNoLlRlbnNvciwga3ZfY2FjaGU6IEtWQ2FjaGUsIGNvbmZpZzogQ29uZmlnKSAtPiB0b3JjaC5UZW5zb3I6CiAgICBic3osIHNlcWxlbiwgXyA9IHguc2l6ZSgpCgogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICAjIGdldCBxX25vcGUsIHFfcm9wZQogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICAjIHEgPSBzZWxmLndxX2Ioc2VsZi5xX25vcm0oc2VsZi53cV9hKHgpKSkKICAgIHEgPSBGLmxpbmVhcihGLmxpbmVhcih4LCBjb25maWcuUV9wcm9qX2Rvd25fd2VpZ2h0KSwgY29uZmlnLlFfcHJval91cF93ZWlnaHQpCiAgICBxID0gcS52aWV3KGJzeiwgc2VxbGVuLCBjb25maWcubl9oZWFkcywgY29uZmlnLnFrX25vcGVfaGVhZF9kaW0gKyBjb25maWcucWtfcm9wZV9oZWFkX2RpbSkKICAgIHFfbm9wZSwgcV9yb3BlID0gdG9yY2guc3BsaXQocSwgW2NvbmZpZy5xa19ub3BlX2hlYWRfZGltLCBjb25maWcucWtfcm9wZV9oZWFkX2RpbV0sIGRpbT0tMSkKCiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgICMgZ2V0IGt2LCBrX3JvcGUKICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgIyBrdiA9IHNlbGYud2t2X2EoeCkKICAgIGt2ID0gRi5saW5lYXIoeCwgY29uZmlnLktWX3Byb2pfZG93bl93ZWlnaHQpCiAgICBrdiwga3ZfbGVuID0ga3ZfY2FjaGUoa3YpCiAgICBrdiwga19yb3BlID0gdG9yY2guc3BsaXQoa3YsIFtjb25maWcua3ZfbG9yYV9yYW5rLCBjb25maWcucWtfcm9wZV9oZWFkX2RpbV0sIGRpbT0tMSkKCiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgICMgYXBwbHkgcm9wZQogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICBxX3JvcGUgPSBhcHBseV9yb3RhcnlfZW1iKHFfcm9wZSwgdGhldGEsIHN0YXJ0X3Bvcz1rdl9sZW4gLSAxKQogICAga19yb3BlID0gYXBwbHlfcm90YXJ5X2VtYihrX3JvcGUudW5zcXVlZXplKDIpLCB0aGV0YSkKCiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgICMgbXVsdGlwbHkgcV9ub3BlIHdpdGggd191awogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICB3a3ZfYiA9IGNvbmZpZy5LVl9wcm9qX3VwX3dlaWdodC52aWV3KGNvbmZpZy5uX2hlYWRzLCAtMSwgY29uZmlnLmt2X2xvcmFfcmFuaykKICAgICMgcV9ub3BlIHNoYXBlIFsxMjgsIDEsIDEyOCwgMTI4XSwgd2t2X2Igc2hhcGUgWzEyOCwgMTI4LCA1MTJdLCByZXMgc2hhcGUgWzEyOCwgMSwgMTI4LCA1MTJdLCBmbG9wcyAxLjA3IEcKICAgIHFfbm9wZSA9IHRvcmNoLmVpbnN1bSgiYnNoZCxoZGMtPmJzaGMiLCBxX25vcGUsIHdrdl9iWzosIDpjb25maWcucWtfbm9wZV9oZWFkX2RpbV0pCgogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICAjIGF0dGVudGlvbgogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICAjIHFfbm9wZSBzaGFwZSBbMTI4LCAxLCAxMjgsIDUxMl0sIGt2IHNoYXBlIFsxMjgsIDUxMywgNTEyXSwgcmVzIHNoYXBlIFsxMjgsIDEsIDEyOCwgNTEzXSwgZmxvcHMgNC4zIEcKICAgICMgcV9ub3BlIHNoYXBlIFsxMjgsIDEsIDEyOCwgNjRdLCBrdiBzaGFwZSBbMTI4LCA1MTMsIDY0XSwgcmVzIHNoYXBlIFsxMjgsIDEsIDEyOCwgNTEzXSwgZmxvcHMgMC41NCBHCiAgICBzY29yZXMgPSAodG9yY2guZWluc3VtKCJic2hjLGJ0Yy0+YnNodCIsIHFfbm9wZSwga3YpICsKICAgICAgICAgICAgICB0b3JjaC5laW5zdW0oImJzaHIsYnRyLT5ic2h0IiwgcV9yb3BlLCBrX3JvcGUuc3F1ZWV6ZSgyKSkpIC8gbWF0aC5zcXJ0KGNvbmZpZy5xa19yb3BlX2hlYWRfZGltICsgY29uZmlnLnFrX25vcGVfaGVhZF9kaW0pCiAgICBzY29yZXMgPSBzb2Z0bWF4KHNjb3JlcykKICAgICMgc2NvcmVzIHNoYXBlIFsxMjgsIDEsIDEyOCwgNTEzXSwga3Ygc2hhcGUgWzEyOCwgNTEzLCA1MTJdLCByZXMgc2hhcGUgWzEyOCwgMSwgMTI4LCA1MTJdLCBmbG9wcyA0LjMgRwogICAgeCA9IHRvcmNoLmVpbnN1bSgiYnNodCxidGMtPmJzaGMiLCBzY29yZXMsIGt2KQoKICAgICMgeCBzaGFwZSBbMTI4LCAxLCAxMjgsIDUxMl0sIHdrdl9iIHNoYXBlIFsxMjgsIDEyOCwgNTEyXSwgcmVzIHNoYXBlIFsxMjgsIDEsIDEyOCwgNTEyXSwgZmxvcHMgMS4wNyBHCiAgICB4ID0gdG9yY2guZWluc3VtKCJic2hjLGhkYy0+YnNoZCIsIHgsIHdrdl9iWzosIC1jb25maWcudl9oZWFkX2RpbTpdKQoKICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgIyBvdXRwdXQgcHJvamVjdGlvbgogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICB4ID0gRi5saW5lYXIoeC5mbGF0dGVuKDIpLCBjb25maWcud29fd2VpZ2h0KQoKICAgIHJldHVybiB4LCBrdl9jYWNoZS5nZXRfZGF0YSgpCgoKZGVmIGN1c3RvbV9rZXJuZWwoZGF0YTogaW5wdXRfdCkgLT4gb3V0cHV0X3Q6CiAgICBjb25maWcsIHgsIGt2X2NhY2hlID0gZGF0YQogICAgcmV0dXJuIG1sYV9hYnNvcmIoeCwga3ZfY2FjaGUsIGNvbmZpZykKCgojIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiMgICAgIHNldF9zZWVkKCkKCiMgICAgIGZyb20gcmVmZXJlbmNlIGltcG9ydCBnZW5lcmF0ZV9pbnB1dCwgcmVmX2tlcm5lbAojICAgICBmcm9tIGV2YWwgaW1wb3J0IGNvcHlfa3ZfY2FjaGUKCiMgICAgIGJhdGNoc2l6ZSA9IDEyOAojICAgICBkaW0gPSA3MTY4IAojICAgICBkcSA9IDE1MzYKIyAgICAgcHJlZmlsbCA9IDUxMgojICAgICBzZWVkID0gOTcKCiMgICAgIGNvbmZpZywgeCwga3ZfY2FjaGUgPSBnZW5lcmF0ZV9pbnB1dChiYXRjaHNpemUsIGRpbSwgZHEsIHByZWZpbGwsIHNlZWQpCiMgICAgIHJlZl9rdl9jYWNoZSA9IGNvcHlfa3ZfY2FjaGUoa3ZfY2FjaGUsIGNvbmZpZy5rdl9jYWNoZV9zaGFwZSkKCiMgICAgIHN0YXJ0ID0gdGltZS5wZXJmX2NvdW50ZXJfbnMoKQojICAgICBvdXRwdXQsIGt2ID0gbWxhX2Fic29yYih4LCBrdl9jYWNoZSwgY29uZmlnKQojICAgICBlbmQgPSB0aW1lLnBlcmZfY291bnRlcl9ucygpCiMgICAgIHByaW50KGVuZCAtIHN0YXJ0KQojICAgICAjIHByaW50KG91dHB1dC5zaGFwZSkKIyAgICAgIyBwcmludChrdi5zaGFwZSkKCiMgICAgIHN0YXJ0ID0gdGltZS5wZXJmX2NvdW50ZXJfbnMoKQojICAgICByZWZfb3V0cHV0LCByZWZfa3YgPSByZWZfa2VybmVsKChjb25maWcsIHgsIHJlZl9rdl9jYWNoZSkpCiMgICAgIGVuZCA9IHRpbWUucGVyZl9jb3VudGVyX25zKCkKIyAgICAgcHJpbnQoZW5kIC0gc3RhcnQpCiMgICAgICMgcHJpbnQocmVmX291dHB1dC5zaGFwZSkKIyAgICAgIyBwcmludChyZWZfa3Yuc2hhcGUpCgojICAgICAjIHN0YXJ0ID0gdGltZS5wZXJmX2NvdW50ZXJfbnMoKQojICAgICAjIHJlZl9vdXRwdXQsIHJlZl9rdiA9IG1sYV9uYXZpZSh4LCByZWZfa3ZfY2FjaGUsIGNvbmZpZykKIyAgICAgIyBlbmQgPSB0aW1lLnBlcmZfY291bnRlcl9ucygpCiMgICAgICMgcHJpbnQoZW5kIC0gc3RhcnQpCiMgICAgICMgcHJpbnQocmVmX291dHB1dC5zaGFwZSkKIyAgICAgIyBwcmludChyZWZfa3Yuc2hhcGUpCgojICAgICBwcmludCh2ZXJib3NlX2FsbGNsb3NlKG91dHB1dCwgcmVmX291dHB1dCwgcnRvbD0yZS0wMiwgYXRvbD04ZS0wMykpCiMgICAgIHByaW50KHZlcmJvc2VfYWxsY2xvc2Uoa3YsIHJlZl9rdiwgcnRvbD0yZS0wMiwgYXRvbD04ZS0wMykpCg==Source code from GPU Mode and the KernelBot dataset · June 9 Researcher Reciprocity License v1.0
Changes from previous submission
Against this author's previous submission submission 28260.
- aW1wb3J0IG1hdGgKaW1wb3J0IHRpbWUKaW1wb3J0IHJhbmRvbQoKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCB0b3JjaAppbXBvcnQgdG9yY2gubm4uZnVuY3Rpb25hbCBhcyBGCgpmcm9tIHRhc2sgaW1wb3J0IGlucHV0X3QsIG91dHB1dF90CmZyb20gcmVmZXJlbmNlIGltcG9ydCBLVkNhY2hlLCBDb25maWcKZnJvbSB1dGlscyBpbXBvcnQgdmVyYm9zZV9hbGxjbG9zZQoKCmRlZiBzZXRfc2VlZChzZWVkPTApOgogICAgcmFuZG9tLnNlZWQoc2VlZCkKICAgIG5wLnJhbmRvbS5zZWVkKHNlZWQpCiAgICB0b3JjaC5tYW51YWxfc2VlZChzZWVkKQoKCnFrX3JvcGVfaGVhZF9kaW0gPSA2NAoKIyBzdGFydCA9IHRpbWUucGVyZl9jb3VudGVyX25zKCkKCnRoZXRhID0gMTAwMDAgKiogKC10b3JjaC5hcmFuZ2UoMCwgcWtfcm9wZV9oZWFkX2RpbSAvLyAyLCBkdHlwZT10b3JjaC5iZmxvYXQxNiwgZGV2aWNlPSJjdWRhIikgLyAocWtfcm9wZV9oZWFkX2RpbSAvLyAyKSkKc2VxX2lkeCA9IHRvcmNoLmFyYW5nZSgwLCA4MTkyLCBkZXZpY2U9ImN1ZGEiKQppZHhfdGhldGEgPSB0b3JjaC5laW5zdW0oJ3MsZC0+c2QnLCBzZXFfaWR4LCB0aGV0YSkKaWR4X3RoZXRhMiA9IHRvcmNoLmNhdChbaWR4X3RoZXRhLCBpZHhfdGhldGFdLCBkaW09LTEpCnByZV9jb3MgPSBpZHhfdGhldGEyLmNvcygpLnRvKHRvcmNoLmJmbG9hdDE2KS51bnNxdWVlemUoMSkKcHJlX3NpbiA9IGlkeF90aGV0YTIuc2luKCkudG8odG9yY2guYmZsb2F0MTYpLnVuc3F1ZWV6ZSgxKQoKIyBlbmQgPSB0aW1lLnBlcmZfY291bnRlcl9ucygpCiMgcHJpbnQoZW5kIC0gc3RhcnQpCgoKZGVmIHJvdGF0ZV9oYWxmKHg6IHRvcmNoLlRlbnNvcikgLT4gdG9yY2guVGVuc29yOgogICAgeDEsIHgyID0geC5jaHVuaygyLCBkaW09LTEpCiAgICByZXR1cm4gdG9yY2guY2F0KCgteDIsIHgxKSwgZGltPS0xKQoKCmRlZiByb3BlKHg6IHRvcmNoLlRlbnNvciwgdGhldGE6IHRvcmNoLlRlbnNvciwgc3RhcnRfcG9zOiBpbnQgPSAwKSAtPiB0b3JjaC5UZW5zb3I6CiAgICBzZXFfbGVuID0geC5zaXplKC0yKQogICAgc2VxX2lkeCA9IHRvcmNoLmFyYW5nZShzdGFydF9wb3MsIHN0YXJ0X3BvcyArIHNlcV9sZW4sIGRldmljZT14LmRldmljZSkKICAgIGlkeF90aGV0YSA9IHRvcmNoLmVpbnN1bSgncyxkLT5zZCcsIHNlcV9pZHgsIHRoZXRhKQogICAgaWR4X3RoZXRhMiA9IHRvcmNoLmNhdChbaWR4X3RoZXRhLCBpZHhfdGhldGFdLCBkaW09LTEpCiAgICBjb3MgPSBpZHhfdGhldGEyLmNvcygpLnRvKHRvcmNoLmJmbG9hdDE2KQogICAgc2luID0gaWR4X3RoZXRhMi5zaW4oKS50byh0b3JjaC5iZmxvYXQxNikKICAgIHJldHVybiB4ICogY29zICsgcm90YXRlX2hhbGYoeCkgKiBzaW4KCgpkZWYgYXBwbHlfcm90YXJ5X2VtYih4OiB0b3JjaC5UZW5zb3IsIHRoZXRhOiB0b3JjaC5UZW5zb3IsIHN0YXJ0X3BvczogaW50ID0gMCkgLT4gdG9yY2guVGVuc29yOgogICAgc2VxX2xlbiA9IHguc2l6ZSgtMykKICAgIHNlcV9pZHggPSB0b3JjaC5hcmFuZ2Uoc3RhcnRfcG9zLCBzdGFydF9wb3MgKyBzZXFfbGVuLCBkZXZpY2U9eC5kZXZpY2UpCiAgICBpZHhfdGhldGEgPSB0b3JjaC5laW5zdW0oJ3MsZC0+c2QnLCBzZXFfaWR4LCB0aGV0YSkKICAgIGlkeF90aGV0YTIgPSB0b3JjaC5jYXQoW2lkeF90aGV0YSwgaWR4X3RoZXRhXSwgZGltPS0xKQogICAgY29zID0gaWR4X3RoZXRhMi5jb3MoKS50byh0b3JjaC5iZmxvYXQxNikudW5zcXVlZXplKDEpCiAgICBzaW4gPSBpZHhfdGhldGEyLnNpbigpLnRvKHRvcmNoLmJmbG9hdDE2KS51bnNxdWVlemUoMSkKICAgIHJldHVybiB4ICogY29zICsgcm90YXRlX2hhbGYoeCkgKiBzaW4KCgpkZWYgYXBwbHlfcm90YXJ5X2VtYl9wcmUoeDogdG9yY2guVGVuc29yLCB0aGV0YTogdG9yY2guVGVuc29yLCBzdGFydF9wb3M6IGludCA9IDApIC0+IHRvcmNoLlRlbnNvcjoKICAgIHNlcV9sZW4gPSB4LnNpemUoLTMpCiAgICBjb3MgPSBwcmVfY29zW3N0YXJ0X3BvczpzdGFydF9wb3MgKyBzZXFfbGVuXQogICAgc2luID0gcHJlX3NpbltzdGFydF9wb3M6c3RhcnRfcG9zICsgc2VxX2xlbl0KICAgIHJldHVybiB4ICogY29zICsgcm90YXRlX2hhbGYoeCkgKiBzaW4KCgpkZWYgdGVzdF9hcHBseV9yb3RhcnlfZW1iKCk6CiAgICAjIHNoYXBlIFticywgaGVhZCwgc2VxX2xlbiwgZGltXQogICAgeCA9IHRvcmNoLnJhbmRuKDEsIDIsIDQsIGRpbSwgZHR5cGU9dG9yY2guYmZsb2F0MTYpCiAgICB5ID0gcm9wZSh4LCB0aGV0YSkKICAgIHByaW50KHkpCgogICAgeCA9IHgucGVybXV0ZSgwLCAyLCAxLCAzKQogICAgeSA9IGFwcGx5X3JvdGFyeV9lbWIoeCwgdGhldGEpCiAgICB5ID0geS5wZXJtdXRlKDAsIDIsIDEsIDMpCiAgICBwcmludCh5KQoKCmRlZiBtbGFfbmF2aWUoeDogdG9yY2guVGVuc29yLCBrdl9jYWNoZTogS1ZDYWNoZSwgY29uZmlnOiBDb25maWcpIC0+IHRvcmNoLlRlbnNvcjoKICAgIGJzeiwgc2VxbGVuLCBfID0geC5zaXplKCkKCiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgICMgZ2V0IHFfbm9wZSwgcV9yb3BlCiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgICMgcSA9IHNlbGYud3FfYihGLmxpbmVhcih4LCBzZWxmLndxX2EoeCkpCiAgICBxID0gRi5saW5lYXIoRi5saW5lYXIoeCwgY29uZmlnLlFfcHJval9kb3duX3dlaWdodCksIGNvbmZpZy5RX3Byb2pfdXBfd2VpZ2h0KQogICAgcSA9IHEudmlldyhic3osIHNlcWxlbiwgY29uZmlnLm5faGVhZHMsIGNvbmZpZy5xa19ub3BlX2hlYWRfZGltICsgY29uZmlnLnFrX3JvcGVfaGVhZF9kaW0pCiAgICBxX25vcGUsIHFfcm9wZSA9IHRvcmNoLnNwbGl0KHEsIFtjb25maWcucWtfbm9wZV9oZWFkX2RpbSwgY29uZmlnLnFrX3JvcGVfaGVhZF9kaW1dLCBkaW09LTEpCgogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICAjIGdldCBrdiwga19yb3BlCiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgICMga3YgPSBzZWxmLndrdl9hKHgpCiAgICBrdiA9IEYubGluZWFyKHgsIGNvbmZpZy5LVl9wcm9qX2Rvd25fd2VpZ2h0KQogICAga3YsIGt2X2xlbiA9IGt2X2NhY2hlKGt2KQogICAga3YsIGtfcm9wZSA9IHRvcmNoLnNwbGl0KGt2LCBbY29uZmlnLmt2X2xvcmFfcmFuaywgY29uZmlnLnFrX3JvcGVfaGVhZF9kaW1dLCBkaW09LTEpCgogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICAjIGFwcGxlIHJvcGUKICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgcV9yb3BlID0gYXBwbHlfcm90YXJ5X2VtYihxX3JvcGUsIHRoZXRhLCBzdGFydF9wb3M9a3ZfbGVuIC0gMSkKICAgIGtfcm9wZSA9IGFwcGx5X3JvdGFyeV9lbWIoa19yb3BlLnVuc3F1ZWV6ZSgyKSwgdGhldGEpCiAgICAKICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgIyBnZXQgcQogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICBxID0gdG9yY2guY2F0KFtxX25vcGUsIHFfcm9wZV0sIGRpbT0tMSkKCiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgICMgZ2V0IGssIHYKICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgIyBrdiA9IHNlbGYud2t2X2Ioa3YpCiAgICBrdiA9IEYubGluZWFyKGt2LCBjb25maWcuS1ZfcHJval91cF93ZWlnaHQpCiAgICBrdiA9IGt2LnZpZXcoYnN6LCBrdl9sZW4sIGNvbmZpZy5uX2hlYWRzLCBjb25maWcucWtfbm9wZV9oZWFkX2RpbSArIGNvbmZpZy52X2hlYWRfZGltKQogICAga19ub3BlLCB2ID0gdG9yY2guc3BsaXQoa3YsIFtjb25maWcucWtfbm9wZV9oZWFkX2RpbSwgY29uZmlnLnZfaGVhZF9kaW1dLCBkaW09LTEpCiAgICBrID0gdG9yY2guY2F0KFtrX25vcGUsIGtfcm9wZS5leHBhbmQoLTEsIC0xLCBjb25maWcubl9oZWFkcywgLTEpXSwgZGltPS0xKQoKICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgIyBhdHRlbnRpb24KICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgc2NvcmVzID0gdG9yY2guZWluc3VtKCJic2hkLGJ0aGQtPmJzaHQiLCBxLCBrKSAvIG1hdGguc3FydChjb25maWcucWtfcm9wZV9oZWFkX2RpbSArIGNvbmZpZy5xa19ub3BlX2hlYWRfZGltKQogICAgc2NvcmVzID0gc2NvcmVzLnNvZnRtYXgoZGltPS0xLCBkdHlwZT10b3JjaC5mbG9hdDMyKS50eXBlX2FzKHgpCiAgICB4ID0gdG9yY2guZWluc3VtKCJic2h0LGJ0aGQtPmJzaGQiLCBzY29yZXMsIHYpCgogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICAjIG91dHB1dCBwcm9qZWN0aW9uCiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgIHggPSBGLmxpbmVhcih4LmZsYXR0ZW4oMiksIGNvbmZpZy53b193ZWlnaHQpCgogICAgcmV0dXJuIHgsIGt2X2NhY2hlLmdldF9kYXRhKCkKCgpkZWYgbWxhX2Fic29yYih4OiB0b3JjaC5UZW5zb3IsIGt2X2NhY2hlOiBLVkNhY2hlLCBjb25maWc6IENvbmZpZykgLT4gdG9yY2guVGVuc29yOgogICAgYnN6LCBzZXFsZW4sIF8gPSB4LnNpemUoKQoKICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgIyBnZXQgcV9ub3BlLCBxX3JvcGUKICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgIyBxID0gc2VsZi53cV9iKHNlbGYucV9ub3JtKHNlbGYud3FfYSh4KSkpCiAgICBxID0gRi5saW5lYXIoRi5saW5lYXIoeCwgY29uZmlnLlFfcHJval9kb3duX3dlaWdodCksIGNvbmZpZy5RX3Byb2pfdXBfd2VpZ2h0KQogICAgcSA9IHEudmlldyhic3osIHNlcWxlbiwgY29uZmlnLm5faGVhZHMsIGNvbmZpZy5xa19ub3BlX2hlYWRfZGltICsgY29uZmlnLnFrX3JvcGVfaGVhZF9kaW0pCiAgICBxX25vcGUsIHFfcm9wZSA9IHRvcmNoLnNwbGl0KHEsIFtjb25maWcucWtfbm9wZV9oZWFkX2RpbSwgY29uZmlnLnFrX3JvcGVfaGVhZF9kaW1dLCBkaW09LTEpCgogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICAjIGdldCBrdiwga19yb3BlCiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgICMga3YgPSBzZWxmLndrdl9hKHgpCiAgICBrdiA9IEYubGluZWFyKHgsIGNvbmZpZy5LVl9wcm9qX2Rvd25fd2VpZ2h0KQogICAga3YsIGt2X2xlbiA9IGt2X2NhY2hlKGt2KQogICAga3YsIGtfcm9wZSA9IHRvcmNoLnNwbGl0KGt2LCBbY29uZmlnLmt2X2xvcmFfcmFuaywgY29uZmlnLnFrX3JvcGVfaGVhZF9kaW1dLCBkaW09LTEpCgogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICAjIGFwcGx5IHJvcGUKICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgcV9yb3BlID0gYXBwbHlfcm90YXJ5X2VtYihxX3JvcGUsIHRoZXRhLCBzdGFydF9wb3M9a3ZfbGVuIC0gMSkKICAgIGtfcm9wZSA9IGFwcGx5X3JvdGFyeV9lbWIoa19yb3BlLnVuc3F1ZWV6ZSgyKSwgdGhldGEpCgogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICAjIG11bHRpcGx5IHFfbm9wZSB3aXRoIHdfdWsKICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgd2t2X2IgPSBjb25maWcuS1ZfcHJval91cF93ZWlnaHQudmlldyhjb25maWcubl9oZWFkcywgLTEsIGNvbmZpZy5rdl9sb3JhX3JhbmspCiAgICAjIHFfbm9wZSBzaGFwZSBbMTI4LCAxLCAxMjgsIDEyOF0sIHdrdl9iIHNoYXBlIFsxMjgsIDEyOCwgNTEyXSwgcmVzIHNoYXBlIFsxMjgsIDEsIDEyOCwgNTEyXSwgZmxvcHMgMS4wNyBHCiAgICBxX25vcGUgPSB0b3JjaC5laW5zdW0oImJzaGQsaGRjLT5ic2hjIiwgcV9ub3BlLCB3a3ZfYls6LCA6Y29uZmlnLnFrX25vcGVfaGVhZF9kaW1dKQoKICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgIyBhdHRlbnRpb24KICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgIyBxX25vcGUgc2hhcGUgWzEyOCwgMSwgMTI4LCA1MTJdLCBrdiBzaGFwZSBbMTI4LCA1MTMsIDUxMl0sIHJlcyBzaGFwZSBbMTI4LCAxLCAxMjgsIDUxM10sIGZsb3BzIDQuMyBHCiAgICAjIHFfbm9wZSBzaGFwZSBbMTI4LCAxLCAxMjgsIDY0XSwga3Ygc2hhcGUgWzEyOCwgNTEzLCA2NF0sIHJlcyBzaGFwZSBbMTI4LCAxLCAxMjgsIDUxM10sIGZsb3BzIDAuNTQgRwogICAgc2NvcmVzID0gKHRvcmNoLmVpbnN1bSgiYnNoYyxidGMtPmJzaHQiLCBxX25vcGUsIGt2KSArCiAgICAgICAgICAgICAgdG9yY2guZWluc3VtKCJic2hyLGJ0ci0+YnNodCIsIHFfcm9wZSwga19yb3BlLnNxdWVlemUoMikpKSAvIG1hdGguc3FydChjb25maWcucWtfcm9wZV9oZWFkX2RpbSArIGNvbmZpZy5xa19ub3BlX2hlYWRfZGltKQogICAgc2NvcmVzID0gc2NvcmVzLnNvZnRtYXgoZGltPS0xLCBkdHlwZT10b3JjaC5mbG9hdDMyKS50eXBlX2FzKHgpCiAgICAjIHNjb3JlcyBzaGFwZSBbMTI4LCAxLCAxMjgsIDUxM10sIGt2IHNoYXBlIFsxMjgsIDUxMywgNTEyXSwgcmVzIHNoYXBlIFsxMjgsIDEsIDEyOCwgNTEyXSwgZmxvcHMgNC4zIEcKICAgIHggPSB0b3JjaC5laW5zdW0oImJzaHQsYnRjLT5ic2hjIiwgc2NvcmVzLCBrdikKICAgICMgeCBzaGFwZSBbMTI4LCAxLCAxMjgsIDUxMl0sIHdrdl9iIHNoYXBlIFsxMjgsIDEyOCwgNTEyXSwgcmVzIHNoYXBlIFsxMjgsIDEyOCwgNTEyXSwgZmxvcHMgMS4wNyBHCiAgICB4ID0gdG9yY2guZWluc3VtKCJic2hjLGhkYy0+YnNoZCIsIHgsIHdrdl9iWzosIC1jb25maWcudl9oZWFkX2RpbTpdKQoKICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgIyBvdXRwdXQgcHJvamVjdGlvbgogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICB4ID0gRi5saW5lYXIoeC5mbGF0dGVuKDIpLCBjb25maWcud29fd2VpZ2h0KQoKICAgIHJldHVybiB4LCBrdl9jYWNoZS5nZXRfZGF0YSgpCgoKZGVmIGN1c3RvbV9rZXJuZWwoZGF0YTogaW5wdXRfdCkgLT4gb3V0cHV0X3Q6CiAgICBjb25maWcsIHgsIGt2X2NhY2hlID0gZGF0YQogICAgcmV0dXJuIG1sYV9hYnNvcmIoeCwga3ZfY2FjaGUsIGNvbmZpZykKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgc2V0X3NlZWQoKQoKICAgIGZyb20gcmVmZXJlbmNlIGltcG9ydCBnZW5lcmF0ZV9pbnB1dCwgcmVmX2tlcm5lbAogICAgZnJvbSBldmFsIGltcG9ydCBjb3B5X2t2X2NhY2hlCgogICAgYmF0Y2hzaXplID0gMTI4CiAgICBkaW0gPSA3MTY4IAogICAgZHEgPSAxNTM2CiAgICBwcmVmaWxsID0gNTEyCiAgICBzZWVkID0gOTcKCiAgICBjb25maWcsIHgsIGt2X2NhY2hlID0gZ2VuZXJhdGVfaW5wdXQoYmF0Y2hzaXplLCBkaW0sIGRxLCBwcmVmaWxsLCBzZWVkKQogICAgcmVmX2t2X2NhY2hlID0gY29weV9rdl9jYWNoZShrdl9jYWNoZSwgY29uZmlnLmt2X2NhY2hlX3NoYXBlKQoKICAgIHN0YXJ0ID0gdGltZS5wZXJmX2NvdW50ZXJfbnMoKQogICAgb3V0cHV0LCBrdiA9IG1sYV9hYnNvcmIoeCwga3ZfY2FjaGUsIGNvbmZpZykKICAgIGVuZCA9IHRpbWUucGVyZl9jb3VudGVyX25zKCkKICAgIHByaW50KGVuZCAtIHN0YXJ0KQogICAgIyBwcmludChvdXRwdXQuc2hhcGUpCiAgICAjIHByaW50KGt2LnNoYXBlKQoKICAgIHN0YXJ0ID0gdGltZS5wZXJmX2NvdW50ZXJfbnMoKQogICAgcmVmX291dHB1dCwgcmVmX2t2ID0gcmVmX2tlcm5lbCgoY29uZmlnLCB4LCByZWZfa3ZfY2FjaGUpKQogICAgZW5kID0gdGltZS5wZXJmX2NvdW50ZXJfbnMoKQogICAgcHJpbnQoZW5kIC0gc3RhcnQpCiAgICAjIHByaW50KHJlZl9vdXRwdXQuc2hhcGUpCiAgICAjIHByaW50KHJlZl9rdi5zaGFwZSkKCiAgICAjIHN0YXJ0ID0gdGltZS5wZXJmX2NvdW50ZXJfbnMoKQogICAgIyByZWZfb3V0cHV0LCByZWZfa3YgPSBtbGFfbmF2aWUoeCwgcmVmX2t2X2NhY2hlLCBjb25maWcpCiAgICAjIGVuZCA9IHRpbWUucGVyZl9jb3VudGVyX25zKCkKICAgICMgcHJpbnQoZW5kIC0gc3RhcnQpCiAgICAjIHByaW50KHJlZl9vdXRwdXQuc2hhcGUpCiAgICAjIHByaW50KHJlZl9rdi5zaGFwZSkKCiAgICBwcmludCh2ZXJib3NlX2FsbGNsb3NlKG91dHB1dCwgcmVmX291dHB1dCwgcnRvbD0yZS0wMiwgYXRvbD04ZS0wMykpCiAgICBwcmludCh2ZXJib3NlX2FsbGNsb3NlKGt2LCByZWZfa3YsIHJ0b2w9MmUtMDIsIGF0b2w9OGUtMDMpKQo=No newline at end of file+ aW1wb3J0IG1hdGgKaW1wb3J0IHRpbWUKaW1wb3J0IHJhbmRvbQoKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCB0b3JjaAppbXBvcnQgdG9yY2gubm4uZnVuY3Rpb25hbCBhcyBGCmltcG9ydCB0cml0b24KaW1wb3J0IHRyaXRvbi5sYW5ndWFnZSBhcyB0bAoKZnJvbSB0YXNrIGltcG9ydCBpbnB1dF90LCBvdXRwdXRfdApmcm9tIHJlZmVyZW5jZSBpbXBvcnQgS1ZDYWNoZSwgQ29uZmlnCmZyb20gdXRpbHMgaW1wb3J0IHZlcmJvc2VfYWxsY2xvc2UKCgojIGRlZiBzZXRfc2VlZChzZWVkPTApOgojICAgICByYW5kb20uc2VlZChzZWVkKQojICAgICBucC5yYW5kb20uc2VlZChzZWVkKQojICAgICB0b3JjaC5tYW51YWxfc2VlZChzZWVkKQoKCnFrX3JvcGVfaGVhZF9kaW0gPSA2NAoKIyBzdGFydCA9IHRpbWUucGVyZl9jb3VudGVyX25zKCkKCnRoZXRhID0gMTAwMDAgKiogKC10b3JjaC5hcmFuZ2UoMCwgcWtfcm9wZV9oZWFkX2RpbSAvLyAyLCBkdHlwZT10b3JjaC5iZmxvYXQxNiwgZGV2aWNlPSJjdWRhIikgLyAocWtfcm9wZV9oZWFkX2RpbSAvLyAyKSkKc2VxX2lkeCA9IHRvcmNoLmFyYW5nZSgwLCA4MTkyLCBkZXZpY2U9ImN1ZGEiKQppZHhfdGhldGEgPSB0b3JjaC5laW5zdW0oJ3MsZC0+c2QnLCBzZXFfaWR4LCB0aGV0YSkKaWR4X3RoZXRhMiA9IHRvcmNoLmNhdChbaWR4X3RoZXRhLCBpZHhfdGhldGFdLCBkaW09LTEpCnByZV9jb3MgPSBpZHhfdGhldGEyLmNvcygpLnRvKHRvcmNoLmJmbG9hdDE2KS51bnNxdWVlemUoMSkKcHJlX3NpbiA9IGlkeF90aGV0YTIuc2luKCkudG8odG9yY2guYmZsb2F0MTYpLnVuc3F1ZWV6ZSgxKQoKIyBlbmQgPSB0aW1lLnBlcmZfY291bnRlcl9ucygpCiMgcHJpbnQoZW5kIC0gc3RhcnQpCgoKZGVmIHJvdGF0ZV9oYWxmKHg6IHRvcmNoLlRlbnNvcikgLT4gdG9yY2guVGVuc29yOgogICAgeDEsIHgyID0geC5jaHVuaygyLCBkaW09LTEpCiAgICByZXR1cm4gdG9yY2guY2F0KCgteDIsIHgxKSwgZGltPS0xKQoKCmRlZiByb3BlKHg6IHRvcmNoLlRlbnNvciwgdGhldGE6IHRvcmNoLlRlbnNvciwgc3RhcnRfcG9zOiBpbnQgPSAwKSAtPiB0b3JjaC5UZW5zb3I6CiAgICBzZXFfbGVuID0geC5zaXplKC0yKQogICAgc2VxX2lkeCA9IHRvcmNoLmFyYW5nZShzdGFydF9wb3MsIHN0YXJ0X3BvcyArIHNlcV9sZW4sIGRldmljZT14LmRldmljZSkKICAgIGlkeF90aGV0YSA9IHRvcmNoLmVpbnN1bSgncyxkLT5zZCcsIHNlcV9pZHgsIHRoZXRhKQogICAgaWR4X3RoZXRhMiA9IHRvcmNoLmNhdChbaWR4X3RoZXRhLCBpZHhfdGhldGFdLCBkaW09LTEpCiAgICBjb3MgPSBpZHhfdGhldGEyLmNvcygpLnRvKHRvcmNoLmJmbG9hdDE2KQogICAgc2luID0gaWR4X3RoZXRhMi5zaW4oKS50byh0b3JjaC5iZmxvYXQxNikKICAgIHJldHVybiB4ICogY29zICsgcm90YXRlX2hhbGYoeCkgKiBzaW4KCgpkZWYgYXBwbHlfcm90YXJ5X2VtYih4OiB0b3JjaC5UZW5zb3IsIHRoZXRhOiB0b3JjaC5UZW5zb3IsIHN0YXJ0X3BvczogaW50ID0gMCkgLT4gdG9yY2guVGVuc29yOgogICAgc2VxX2xlbiA9IHguc2l6ZSgtMykKICAgIHNlcV9pZHggPSB0b3JjaC5hcmFuZ2Uoc3RhcnRfcG9zLCBzdGFydF9wb3MgKyBzZXFfbGVuLCBkZXZpY2U9eC5kZXZpY2UpCiAgICBpZHhfdGhldGEgPSB0b3JjaC5laW5zdW0oJ3MsZC0+c2QnLCBzZXFfaWR4LCB0aGV0YSkKICAgIGlkeF90aGV0YTIgPSB0b3JjaC5jYXQoW2lkeF90aGV0YSwgaWR4X3RoZXRhXSwgZGltPS0xKQogICAgY29zID0gaWR4X3RoZXRhMi5jb3MoKS50byh0b3JjaC5iZmxvYXQxNikudW5zcXVlZXplKDEpCiAgICBzaW4gPSBpZHhfdGhldGEyLnNpbigpLnRvKHRvcmNoLmJmbG9hdDE2KS51bnNxdWVlemUoMSkKICAgIHJldHVybiB4ICogY29zICsgcm90YXRlX2hhbGYoeCkgKiBzaW4KCgpkZWYgYXBwbHlfcm90YXJ5X2VtYl9wcmUoeDogdG9yY2guVGVuc29yLCB0aGV0YTogdG9yY2guVGVuc29yLCBzdGFydF9wb3M6IGludCA9IDApIC0+IHRvcmNoLlRlbnNvcjoKICAgIHNlcV9sZW4gPSB4LnNpemUoLTMpCiAgICBjb3MgPSBwcmVfY29zW3N0YXJ0X3BvczpzdGFydF9wb3MgKyBzZXFfbGVuXQogICAgc2luID0gcHJlX3NpbltzdGFydF9wb3M6c3RhcnRfcG9zICsgc2VxX2xlbl0KICAgIHJldHVybiB4ICogY29zICsgcm90YXRlX2hhbGYoeCkgKiBzaW4KCgpAdHJpdG9uLmppdApkZWYgc29mdG1heF9rZXJuZWwob3V0cHV0X3B0ciwgaW5wdXRfcHRyLCBpbnB1dF9yb3dfc3RyaWRlLCBvdXRwdXRfcm93X3N0cmlkZSwgbl9yb3dzLCBuX2NvbHMsIEJMT0NLX1NJWkU6IHRsLmNvbnN0ZXhwciwKICAgICAgICAgICAgICAgICAgIG51bV9zdGFnZXM6IHRsLmNvbnN0ZXhwcik6CiAgICAjIHN0YXJ0aW5nIHJvdyBvZiB0aGUgcHJvZ3JhbQogICAgcm93X3N0YXJ0ID0gdGwucHJvZ3JhbV9pZCgwKQogICAgcm93X3N0ZXAgPSB0bC5udW1fcHJvZ3JhbXMoMCkKICAgIGZvciByb3dfaWR4IGluIHRsLnJhbmdlKHJvd19zdGFydCwgbl9yb3dzLCByb3dfc3RlcCwgbnVtX3N0YWdlcz1udW1fc3RhZ2VzKToKICAgICAgICAjIFRoZSBzdHJpZGUgcmVwcmVzZW50cyBob3cgbXVjaCB3ZSBuZWVkIHRvIGluY3JlYXNlIHRoZSBwb2ludGVyIHRvIGFkdmFuY2UgMSByb3cKICAgICAgICByb3dfc3RhcnRfcHRyID0gaW5wdXRfcHRyICsgcm93X2lkeCAqIGlucHV0X3Jvd19zdHJpZGUKICAgICAgICAjIFRoZSBibG9jayBzaXplIGlzIHRoZSBuZXh0IHBvd2VyIG9mIHR3byBncmVhdGVyIHRoYW4gbl9jb2xzLCBzbyB3ZSBjYW4gZml0IGVhY2gKICAgICAgICAjIHJvdyBpbiBhIHNpbmdsZSBibG9jawogICAgICAgIGNvbF9vZmZzZXRzID0gdGwuYXJhbmdlKDAsIEJMT0NLX1NJWkUpCiAgICAgICAgaW5wdXRfcHRycyA9IHJvd19zdGFydF9wdHIgKyBjb2xfb2Zmc2V0cwogICAgICAgICMgTG9hZCB0aGUgcm93IGludG8gU1JBTSwgdXNpbmcgYSBtYXNrIHNpbmNlIEJMT0NLX1NJWkUgbWF5IGJlID4gdGhhbiBuX2NvbHMKICAgICAgICBtYXNrID0gY29sX29mZnNldHMgPCBuX2NvbHMKICAgICAgICByb3cgPSB0bC5sb2FkKGlucHV0X3B0cnMsIG1hc2s9bWFzaywgb3RoZXI9LWZsb2F0KCdpbmYnKSkKICAgICAgICAjIFN1YnRyYWN0IG1heGltdW0gZm9yIG51bWVyaWNhbCBzdGFiaWxpdHkKICAgICAgICByb3dfbWludXNfbWF4ID0gcm93IC0gdGwubWF4KHJvdywgYXhpcz0wKQogICAgICAgICMgTm90ZSB0aGF0IGV4cG9uZW50aWF0aW9uIGluIFRyaXRvbiBpcyBmYXN0IGJ1dCBhcHByb3hpbWF0ZSAoaS5lLiwgdGhpbmsgX19leHBmIGluIENVREEpCiAgICAgICAgbnVtZXJhdG9yID0gdGwuZXhwKHJvd19taW51c19tYXgpCiAgICAgICAgZGVub21pbmF0b3IgPSB0bC5zdW0obnVtZXJhdG9yLCBheGlzPTApCiAgICAgICAgc29mdG1heF9vdXRwdXQgPSBudW1lcmF0b3IgLyBkZW5vbWluYXRvcgogICAgICAgICMgV3JpdGUgYmFjayBvdXRwdXQgdG8gRFJBTQogICAgICAgIG91dHB1dF9yb3dfc3RhcnRfcHRyID0gb3V0cHV0X3B0ciArIHJvd19pZHggKiBvdXRwdXRfcm93X3N0cmlkZQogICAgICAgIG91dHB1dF9wdHJzID0gb3V0cHV0X3Jvd19zdGFydF9wdHIgKyBjb2xfb2Zmc2V0cwogICAgICAgIHRsLnN0b3JlKG91dHB1dF9wdHJzLCBzb2Z0bWF4X291dHB1dCwgbWFzaz1tYXNrKQoKCmRlZiBzb2Z0bWF4KHgpOgogICAgbl9jb2xzID0geC5zaGFwZVstMV0KICAgIG5fcm93cyA9IHgubnVtZWwoKSAvLyBuX2NvbHMKCiAgICBCTE9DS19TSVpFID0gdHJpdG9uLm5leHRfcG93ZXJfb2ZfMihuX2NvbHMpCgogICAgbnVtX3N0YWdlcyA9IDIKCiAgICB5ID0gdG9yY2guZW1wdHlfbGlrZSh4KQoKICAgIHNvZnRtYXhfa2VybmVsWyhuX3Jvd3MsKV0oCiAgICAgICAgeSwKICAgICAgICB4LAogICAgICAgIHguc3RyaWRlKC0yKSwKICAgICAgICB5LnN0cmlkZSgtMiksCiAgICAgICAgbl9yb3dzLAogICAgICAgIG5fY29scywKICAgICAgICBCTE9DS19TSVpFLAogICAgICAgIG51bV9zdGFnZXMpCiAgICByZXR1cm4geQoKCmRlZiBtbGFfYWJzb3JiKHg6IHRvcmNoLlRlbnNvciwga3ZfY2FjaGU6IEtWQ2FjaGUsIGNvbmZpZzogQ29uZmlnKSAtPiB0b3JjaC5UZW5zb3I6CiAgICBic3osIHNlcWxlbiwgXyA9IHguc2l6ZSgpCgogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICAjIGdldCBxX25vcGUsIHFfcm9wZQogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICAjIHEgPSBzZWxmLndxX2Ioc2VsZi5xX25vcm0oc2VsZi53cV9hKHgpKSkKICAgIHEgPSBGLmxpbmVhcihGLmxpbmVhcih4LCBjb25maWcuUV9wcm9qX2Rvd25fd2VpZ2h0KSwgY29uZmlnLlFfcHJval91cF93ZWlnaHQpCiAgICBxID0gcS52aWV3KGJzeiwgc2VxbGVuLCBjb25maWcubl9oZWFkcywgY29uZmlnLnFrX25vcGVfaGVhZF9kaW0gKyBjb25maWcucWtfcm9wZV9oZWFkX2RpbSkKICAgIHFfbm9wZSwgcV9yb3BlID0gdG9yY2guc3BsaXQocSwgW2NvbmZpZy5xa19ub3BlX2hlYWRfZGltLCBjb25maWcucWtfcm9wZV9oZWFkX2RpbV0sIGRpbT0tMSkKCiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgICMgZ2V0IGt2LCBrX3JvcGUKICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgIyBrdiA9IHNlbGYud2t2X2EoeCkKICAgIGt2ID0gRi5saW5lYXIoeCwgY29uZmlnLktWX3Byb2pfZG93bl93ZWlnaHQpCiAgICBrdiwga3ZfbGVuID0ga3ZfY2FjaGUoa3YpCiAgICBrdiwga19yb3BlID0gdG9yY2guc3BsaXQoa3YsIFtjb25maWcua3ZfbG9yYV9yYW5rLCBjb25maWcucWtfcm9wZV9oZWFkX2RpbV0sIGRpbT0tMSkKCiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgICMgYXBwbHkgcm9wZQogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICBxX3JvcGUgPSBhcHBseV9yb3RhcnlfZW1iKHFfcm9wZSwgdGhldGEsIHN0YXJ0X3Bvcz1rdl9sZW4gLSAxKQogICAga19yb3BlID0gYXBwbHlfcm90YXJ5X2VtYihrX3JvcGUudW5zcXVlZXplKDIpLCB0aGV0YSkKCiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgICMgbXVsdGlwbHkgcV9ub3BlIHdpdGggd191awogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICB3a3ZfYiA9IGNvbmZpZy5LVl9wcm9qX3VwX3dlaWdodC52aWV3KGNvbmZpZy5uX2hlYWRzLCAtMSwgY29uZmlnLmt2X2xvcmFfcmFuaykKICAgICMgcV9ub3BlIHNoYXBlIFsxMjgsIDEsIDEyOCwgMTI4XSwgd2t2X2Igc2hhcGUgWzEyOCwgMTI4LCA1MTJdLCByZXMgc2hhcGUgWzEyOCwgMSwgMTI4LCA1MTJdLCBmbG9wcyAxLjA3IEcKICAgIHFfbm9wZSA9IHRvcmNoLmVpbnN1bSgiYnNoZCxoZGMtPmJzaGMiLCBxX25vcGUsIHdrdl9iWzosIDpjb25maWcucWtfbm9wZV9oZWFkX2RpbV0pCgogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICAjIGF0dGVudGlvbgogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICAjIHFfbm9wZSBzaGFwZSBbMTI4LCAxLCAxMjgsIDUxMl0sIGt2IHNoYXBlIFsxMjgsIDUxMywgNTEyXSwgcmVzIHNoYXBlIFsxMjgsIDEsIDEyOCwgNTEzXSwgZmxvcHMgNC4zIEcKICAgICMgcV9ub3BlIHNoYXBlIFsxMjgsIDEsIDEyOCwgNjRdLCBrdiBzaGFwZSBbMTI4LCA1MTMsIDY0XSwgcmVzIHNoYXBlIFsxMjgsIDEsIDEyOCwgNTEzXSwgZmxvcHMgMC41NCBHCiAgICBzY29yZXMgPSAodG9yY2guZWluc3VtKCJic2hjLGJ0Yy0+YnNodCIsIHFfbm9wZSwga3YpICsKICAgICAgICAgICAgICB0b3JjaC5laW5zdW0oImJzaHIsYnRyLT5ic2h0IiwgcV9yb3BlLCBrX3JvcGUuc3F1ZWV6ZSgyKSkpIC8gbWF0aC5zcXJ0KGNvbmZpZy5xa19yb3BlX2hlYWRfZGltICsgY29uZmlnLnFrX25vcGVfaGVhZF9kaW0pCiAgICBzY29yZXMgPSBzb2Z0bWF4KHNjb3JlcykKICAgICMgc2NvcmVzIHNoYXBlIFsxMjgsIDEsIDEyOCwgNTEzXSwga3Ygc2hhcGUgWzEyOCwgNTEzLCA1MTJdLCByZXMgc2hhcGUgWzEyOCwgMSwgMTI4LCA1MTJdLCBmbG9wcyA0LjMgRwogICAgeCA9IHRvcmNoLmVpbnN1bSgiYnNodCxidGMtPmJzaGMiLCBzY29yZXMsIGt2KQoKICAgICMgeCBzaGFwZSBbMTI4LCAxLCAxMjgsIDUxMl0sIHdrdl9iIHNoYXBlIFsxMjgsIDEyOCwgNTEyXSwgcmVzIHNoYXBlIFsxMjgsIDEsIDEyOCwgNTEyXSwgZmxvcHMgMS4wNyBHCiAgICB4ID0gdG9yY2guZWluc3VtKCJic2hjLGhkYy0+YnNoZCIsIHgsIHdrdl9iWzosIC1jb25maWcudl9oZWFkX2RpbTpdKQoKICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgIyBvdXRwdXQgcHJvamVjdGlvbgogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICB4ID0gRi5saW5lYXIoeC5mbGF0dGVuKDIpLCBjb25maWcud29fd2VpZ2h0KQoKICAgIHJldHVybiB4LCBrdl9jYWNoZS5nZXRfZGF0YSgpCgoKZGVmIGN1c3RvbV9rZXJuZWwoZGF0YTogaW5wdXRfdCkgLT4gb3V0cHV0X3Q6CiAgICBjb25maWcsIHgsIGt2X2NhY2hlID0gZGF0YQogICAgcmV0dXJuIG1sYV9hYnNvcmIoeCwga3ZfY2FjaGUsIGNvbmZpZykKCgojIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiMgICAgIHNldF9zZWVkKCkKCiMgICAgIGZyb20gcmVmZXJlbmNlIGltcG9ydCBnZW5lcmF0ZV9pbnB1dCwgcmVmX2tlcm5lbAojICAgICBmcm9tIGV2YWwgaW1wb3J0IGNvcHlfa3ZfY2FjaGUKCiMgICAgIGJhdGNoc2l6ZSA9IDEyOAojICAgICBkaW0gPSA3MTY4IAojICAgICBkcSA9IDE1MzYKIyAgICAgcHJlZmlsbCA9IDUxMgojICAgICBzZWVkID0gOTcKCiMgICAgIGNvbmZpZywgeCwga3ZfY2FjaGUgPSBnZW5lcmF0ZV9pbnB1dChiYXRjaHNpemUsIGRpbSwgZHEsIHByZWZpbGwsIHNlZWQpCiMgICAgIHJlZl9rdl9jYWNoZSA9IGNvcHlfa3ZfY2FjaGUoa3ZfY2FjaGUsIGNvbmZpZy5rdl9jYWNoZV9zaGFwZSkKCiMgICAgIHN0YXJ0ID0gdGltZS5wZXJmX2NvdW50ZXJfbnMoKQojICAgICBvdXRwdXQsIGt2ID0gbWxhX2Fic29yYih4LCBrdl9jYWNoZSwgY29uZmlnKQojICAgICBlbmQgPSB0aW1lLnBlcmZfY291bnRlcl9ucygpCiMgICAgIHByaW50KGVuZCAtIHN0YXJ0KQojICAgICAjIHByaW50KG91dHB1dC5zaGFwZSkKIyAgICAgIyBwcmludChrdi5zaGFwZSkKCiMgICAgIHN0YXJ0ID0gdGltZS5wZXJmX2NvdW50ZXJfbnMoKQojICAgICByZWZfb3V0cHV0LCByZWZfa3YgPSByZWZfa2VybmVsKChjb25maWcsIHgsIHJlZl9rdl9jYWNoZSkpCiMgICAgIGVuZCA9IHRpbWUucGVyZl9jb3VudGVyX25zKCkKIyAgICAgcHJpbnQoZW5kIC0gc3RhcnQpCiMgICAgICMgcHJpbnQocmVmX291dHB1dC5zaGFwZSkKIyAgICAgIyBwcmludChyZWZfa3Yuc2hhcGUpCgojICAgICAjIHN0YXJ0ID0gdGltZS5wZXJmX2NvdW50ZXJfbnMoKQojICAgICAjIHJlZl9vdXRwdXQsIHJlZl9rdiA9IG1sYV9uYXZpZSh4LCByZWZfa3ZfY2FjaGUsIGNvbmZpZykKIyAgICAgIyBlbmQgPSB0aW1lLnBlcmZfY291bnRlcl9ucygpCiMgICAgICMgcHJpbnQoZW5kIC0gc3RhcnQpCiMgICAgICMgcHJpbnQocmVmX291dHB1dC5zaGFwZSkKIyAgICAgIyBwcmludChyZWZfa3Yuc2hhcGUpCgojICAgICBwcmludCh2ZXJib3NlX2FsbGNsb3NlKG91dHB1dCwgcmVmX291dHB1dCwgcnRvbD0yZS0wMiwgYXRvbD04ZS0wMykpCiMgICAgIHByaW50KHZlcmJvc2VfYWxsY2xvc2Uoa3YsIHJlZl9rdiwgcnRvbD0yZS0wMiwgYXRvbD04ZS0wMykpCg==No newline at end of file
Best evidence level for this revision: reported
JSON