submission 31233
KernelBot user 44 · 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.py
curl "https://kernelindex.com/api/v1/implementations/kernelbot-amd-mla-decode-31233?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:fc2a93a89c43c66b02006eab127f5e32901212dc628de486202e76ca7d3f81ab
license declaredunknown
license concludedunknown
imported2026-08-15
Kernel source
submission.py1 lines
aW1wb3J0IG1hdGgKZnJvbSBkYXRhY2xhc3NlcyBpbXBvcnQgZGF0YWNsYXNzCmltcG9ydCB0b3JjaApmcm9tIHRvcmNoIGltcG9ydCBubgppbXBvcnQgdG9yY2gubm4uZnVuY3Rpb25hbCBhcyBGCmZyb20gdGFzayBpbXBvcnQgaW5wdXRfdCwgb3V0cHV0X3QKaW1wb3J0IHRpbWUKCiMgaW1wb3J0IG1sYQoKZGVmIHJvdGF0ZV9oYWxmKHgpOgogICAgeDEgPSB4Wy4uLiwgOiB4LnNoYXBlWy0xXSAvLyAyXQogICAgeDIgPSB4Wy4uLiwgeC5zaGFwZVstMV0gLy8gMiA6XQogICAgcmV0dXJuIHRvcmNoLmNhdCgoLXgyLCB4MSksIGRpbT0tMSkKCkB0b3JjaC5jb21waWxlCmRlZiBhcHBseV9yb3RhcnlfcG9zX2VtYihxLCBrLCBjb3MsIHNpbiwgc2VxX2xlbik6CiAgICBxX2VtYmVkID0gKHEgKiBjb3Nbc2VxX2xlbiAtIDFdKSArIChyb3RhdGVfaGFsZihxKSAqIHNpbltzZXFfbGVuIC0gMV0pCiAgICBrX2VtYmVkID0gKGsgKiBjb3NbOnNlcV9sZW5dKSArIChyb3RhdGVfaGFsZihrKSAqIHNpbls6c2VxX2xlbl0pCiAgICByZXR1cm4gcV9lbWJlZCwga19lbWJlZAoKQHRvcmNoLmNvbXBpbGUKZGVmIGFwcGx5X3JvdGFyeV9wb3NfZW1iX3EocSwgY29zLCBzaW4sIHNlcV9sZW4pOgogICAgcV9lbWJlZCA9IChxICogY29zW3NlcV9sZW4gLSAxXSkgKyAocm90YXRlX2hhbGYocSkgKiBzaW5bc2VxX2xlbiAtIDFdKQogICAgcmV0dXJuIHFfZW1iZWQKCkB0b3JjaC5jb21waWxlCmRlZiBhcHBseV9yb3RhcnlfcG9zX2VtYl9rKGssIGNvcywgc2luLCBzZXFfbGVuKToKICAgIGtfZW1iZWQgPSAoayAqIGNvc1s6c2VxX2xlbl0pICsgKHJvdGF0ZV9oYWxmKGspICogc2luWzpzZXFfbGVuXSkKICAgIHJldHVybiBrX2VtYmVkCgpkZWYgcHJlY29tcHV0ZV9yb3BlX2NhY2hlKHNlcV9sZW4sIGRpbSwgZGV2aWNlPSdjdWRhJywgYmFzZT0xMDAwMC4wKToKICAgIGFzc2VydCBkaW0gJSAyID09IDAsICJFbWJlZGRpbmcgZGltZW5zaW9uIG11c3QgYmUgZXZlbiBmb3IgUm9QRS4iCiAgICBwb3NpdGlvbiA9IHRvcmNoLmFyYW5nZShzZXFfbGVuLCBkZXZpY2U9ZGV2aWNlLCBkdHlwZT10b3JjaC5iZmxvYXQxNikKICAgIHRoZXRhID0gYmFzZSAqKiAoLXRvcmNoLmFyYW5nZSgwLCBkaW0gLy8gMiwgZGV2aWNlPWRldmljZSwgZHR5cGU9dG9yY2guYmZsb2F0MTYpIC8gKGRpbSAvLyAyKSkKICAgIGFuZ2xlcyA9IHRvcmNoLm91dGVyKHBvc2l0aW9uLCB0aGV0YSkKICAgIG91dCA9IHRvcmNoLmNhdChbYW5nbGVzLCBhbmdsZXNdLCBkaW09LTEpCiAgICByZXR1cm4gb3V0LmNvcygpLCBvdXQuc2luKCkKCnJvcGVfY2FjaGUgPSBwcmVjb21wdXRlX3JvcGVfY2FjaGUoNjE0NSwgNjQpCgpAdG9yY2guY29tcGlsZQpkZWYgYXBwbHlfc29mdG1heChxa19ub3BlLCBxa19yb3BlLCBub3BlX2RpbSwgcm9wZV9kaW0pOgogICAgc2NvcmVzID0gKHFrX25vcGUgKyBxa19yb3BlKSAvIG1hdGguc3FydChyb3BlX2RpbSArIG5vcGVfZGltKQogICAgcmV0dXJuIEYuc29mdG1heChzY29yZXMsIGRpbT0tMSkKCiMgaW1wb3J0IG9zCiMgb3MucHV0ZW52KCdQWVRPUkNIX1RVTkFCTEVPUF9FTkFCTEVEJywgJzEnKQojIG9zLnB1dGVudignUFlUT1JDSF9UVU5BQkxFT1BfVFVOSU5HJywgJzAnKQojIG9zLnB1dGVudignUFlUT1JDSF9UVU5BQkxFT1BfUkVDT1JEX1VOVFVORUQnLCAnMScpCgojIHRvcmNoLmN1ZGEudHVuYWJsZS5lbmFibGUoKQoKc3RhcnQgPSB0b3JjaC5jdWRhLkV2ZW50KGVuYWJsZV90aW1pbmc9VHJ1ZSkKZW5kID0gdG9yY2guY3VkYS5FdmVudChlbmFibGVfdGltaW5nPVRydWUpCnN0YXJ0X2NwdSA9IDAKCmRlZiB0c3RhcnQoKToKICAgIGdsb2JhbCBzdGFydF9jcHUKICAgIHN0YXJ0LnJlY29yZCgpCiAgICBzdGFydF9jcHUgPSB0aW1lLnBlcmZfY291bnRlcl9ucygpCgpkZWYgdGVuZCgpOgogICAgZW5kLnJlY29yZCgpCiAgICB0b3JjaC5jdWRhLnN5bmNocm9uaXplKCkKICAgIGVuZF9jcHUgPSB0aW1lLnBlcmZfY291bnRlcl9ucygpCiAgICBwcmludChmImV4ZWN1dGlvbiB0aW1lOiB7c3RhcnQuZWxhcHNlZF90aW1lKGVuZCl9IG1zLCBjcHU6IHsoZW5kX2NwdSAtIHN0YXJ0X2NwdSkgLyAxZTZ9IG1zIikKCmJhdGNoX3NpemUgPSAxMjgKc2VxX2xlbiA9IDEKbl9oZWFkcyA9IDEyOApyb3BlX2RpbSA9IDY0Cm5vcGVfZGltID0gMTI4CnFfbG9yYV9kaW0gPSAxNTM2Cmt2X2xvcmFfZGltID0gNTEyCnZfZGltID0gMTI4CmhpZGRlbl9kaW0gPSA3MTY4CiAgICAgICAgCmcgPSB0b3JjaC5jdWRhLkNVREFHcmFwaCgpCmlucHV0X3N0YXRpYzogaW5wdXRfdCA9IE5vbmUKb3V0cHV0X3N0YXRpYzogb3V0cHV0X3QgPSBOb25lCgpkZWYgY29weV9pbnB1dChpbnB1dF9keW46IGlucHV0X3QpOgogICAgZ2xvYmFsIGlucHV0X3N0YXRpYwogICAgY29uZmlnX3N0YXRpYywgeF9zdGF0aWMsIGt2X2NhY2hlX3dyYXBwZXJfc3RhdGljID0gaW5wdXRfc3RhdGljCiAgICBjb25maWcsIHgsIGt2X2NhY2hlX3dyYXBwZXIgPSBpbnB1dF9keW4KICAgIHByZWZpbGwgPSBrdl9jYWNoZV93cmFwcGVyLnNlcV9sZW4KICAgIGt2X2NhY2hlX3N0YXRpYyA9IGt2X2NhY2hlX3dyYXBwZXJfc3RhdGljLmdldF9kYXRhKCkKICAgIGt2X2NhY2hlID0ga3ZfY2FjaGVfd3JhcHBlci5nZXRfZGF0YSgpCiAgICAjIGNvcHkgaW5wdXQKICAgICMga3ZfY2FjaGVfc3RhdGljWzosIDpwcmVmaWxsXSA9IGt2X2NhY2hlWzosIDpwcmVmaWxsXQogICAgeF9zdGF0aWMuY29weV8oeCkKICAgICMgY29weSB3ZWlnaHQKICAgIGNvbmZpZ19zdGF0aWMuUV9wcm9qX2Rvd25fd2VpZ2h0LmNvcHlfKGNvbmZpZy5RX3Byb2pfZG93bl93ZWlnaHQpCiAgICBjb25maWdfc3RhdGljLlFfcHJval91cF93ZWlnaHQuY29weV8oY29uZmlnLlFfcHJval91cF93ZWlnaHQpCiAgICBjb25maWdfc3RhdGljLktWX3Byb2pfZG93bl93ZWlnaHQuY29weV8oY29uZmlnLktWX3Byb2pfZG93bl93ZWlnaHQpCiAgICBjb25maWdfc3RhdGljLktWX3Byb2pfdXBfd2VpZ2h0LmNvcHlfKGNvbmZpZy5LVl9wcm9qX3VwX3dlaWdodCkKICAgICMgY29uZmlnX3N0YXRpYy53b193ZWlnaHQuY29weV8oY29uZmlnLndvX3dlaWdodCkKCmRlZiBjb3B5X291dHB1dChvdXRwdXRfZHluOiBvdXRwdXRfdCk6CiAgICBnbG9iYWwgb3V0cHV0X3N0YXRpYwogICAgb19zdGF0aWMsIGt2X2NhY2hlX3N0YXRpYyA9IG91dHB1dF9zdGF0aWMKICAgIG8sIGt2X2NhY2hlID0gb3V0cHV0X2R5bgogICAgb19zdGF0aWMuY29weV8obykKCgpkZWYgY3VzdG9tX2tlcm5lbChkYXRhOiBpbnB1dF90KSAtPiBvdXRwdXRfdDoKICAgIGdsb2JhbCBvdXRwdXRfc3RhdGljLCBpbnB1dF9zdGF0aWMKICAgIF8sIF8sIGt2X2NhY2hlX3dyYXBwZXIgPSBkYXRhCiAgICBwcmVmaWxsID0ga3ZfY2FjaGVfd3JhcHBlci5zZXFfbGVuCiAgICBpZiBwcmVmaWxsIDwgNjE0NDoKICAgICAgICByZXR1cm4gY3VzdG9tX2tlcm5lbF9pbXBsKGRhdGEpCiAgICBpZiBub3QgaW5wdXRfc3RhdGljOgogICAgICAgIGN1c3RvbV9rZXJuZWxfc3RlcF8xKGRhdGEpCiAgICAgICAgd2l0aCB0b3JjaC5jdWRhLmdyYXBoKGcpOgogICAgICAgICAgICBvdXRwdXRfc3RhdGljID0gY3VzdG9tX2tlcm5lbF9zdGVwXzEoZGF0YSkKICAgICAgICBpbnB1dF9zdGF0aWMgPSBkYXRhCiAgICAjIHRzdGFydCgpCiAgICBjb3B5X2lucHV0KGRhdGEpCiAgICAjIHRlbmQoKQogICAgIyB0c3RhcnQoKQogICAgZy5yZXBsYXkoKQogICAgIyB0ZW5kKCkKICAgIHJldHVybiBjdXN0b21fa2VybmVsX3N0ZXBfMihkYXRhLCAqb3V0cHV0X3N0YXRpYykKCkB0b3JjaC5jb21waWxlCmRlZiBjdXN0b21fa2VybmVsX3N0ZXBfMShkYXRhOiBpbnB1dF90KSAtPiBvdXRwdXRfdDoKICAgIGNvbmZpZywgeCwga3ZfY2FjaGVfd3JhcHBlciA9IGRhdGEKICAgIHByZWZpbGwgPSBrdl9jYWNoZV93cmFwcGVyLnNlcV9sZW4KICAgIGt2X2NhY2hlLCBxZG93biwgcXVwLCBrdmRvd24sIGt2dXAsIHdvID0ga3ZfY2FjaGVfd3JhcHBlci5nZXRfZGF0YSgpLCBjb25maWcuUV9wcm9qX2Rvd25fd2VpZ2h0LCBjb25maWcuUV9wcm9qX3VwX3dlaWdodCwgY29uZmlnLktWX3Byb2pfZG93bl93ZWlnaHQsIGNvbmZpZy5LVl9wcm9qX3VwX3dlaWdodCwgY29uZmlnLndvX3dlaWdodAogICAgYmF0Y2hfc2l6ZSwgc2VxX2xlbiwgbl9oZWFkcyA9IGNvbmZpZy5iYXRjaF9zaXplLCBjb25maWcuc2VxX2xlbiwgY29uZmlnLm5faGVhZHMKICAgIGFzc2VydCBzZXFfbGVuID09IDEKICAgIG5vcGVfZGltLCByb3BlX2RpbSA9IGNvbmZpZy5xa19ub3BlX2hlYWRfZGltLCBjb25maWcucWtfcm9wZV9oZWFkX2RpbQogICAgcV9sb3JhX2RpbSwga3ZfbG9yYV9kaW0gPSBjb25maWcucV9sb3JhX3JhbmssIGNvbmZpZy5rdl9sb3JhX3JhbmsKICAgIHZfZGltID0gY29uZmlnLnZfaGVhZF9kaW0KICAgIGhpZGRlbl9kaW0gPSBjb25maWcuZGltCiAgICAjIHN0ZXAgMQogICAgIyBoaWRkZW4gLT4ga3ZfbG9yYVstMV0gKGt2ZG93bl9ub3BlKQogICAgIyBoaWRkZW4gLT4ga19yb3BlWy0xXSAoa3Zkb3duX3JvcGUpCiAgICAjIGt2X2NhY2hlIC0+IGt2X2xvcmEsIGtfcm9wZQogICAgIyBoaWRkZW4gLT4gcV9sb3JhIChxZG93bikKICAgIGt2X2NhY2hlOiB0b3JjaC5UZW5zb3IgPSBrdl9jYWNoZVs6LCA6cHJlZmlsbCArIHNlcV9sZW5dCiAgICBrdl9jYWNoZV9sYXN0LCBxX2xvcmEgPSB0b3JjaC5laW5zdW0oImIgcyBkLCBsIGQgLT4gYiBzIGwiLCB4LCB0b3JjaC5jb25jYXQoKGt2ZG93biwgcWRvd24pLCBkaW09MCkpLnNwbGl0KFtrdl9sb3JhX2RpbSArIHJvcGVfZGltLCBxX2xvcmFfZGltXSwgZGltPS0xKQogICAgIyBzdGVwIDIKICAgICMgcV9sb3JhIC0+IHFfcm9wZSAocXVwX3JvcGUpCiAgICAjIHFfbG9yYSAtPiBxX25vcGUgQCBxdXBfbm9wZSBAIGt1cF9ub3BlCiAgICBxdXAgPSBxdXAudmlldyhuX2hlYWRzLCBub3BlX2RpbSArIHJvcGVfZGltLCBxX2xvcmFfZGltKQogICAga3VwX25vcGUsIHZ1cCA9IGt2dXAudmlldyhuX2hlYWRzLCBub3BlX2RpbSArIHZfZGltLCBrdl9sb3JhX2RpbSkuc3BsaXQoW25vcGVfZGltLCB2X2RpbV0sIGRpbT0tMikKICAgIHFfbm9wZSwgcV9yb3BlID0gdG9yY2guZWluc3VtKCJiIHMgbCwgaCBkIGwgLT4gYiBzIGggZCIsIHFfbG9yYSwgcXVwKS5zcGxpdChbbm9wZV9kaW0sIHJvcGVfZGltXSwgZGltPS0xKQogICAgcV9hYnNvcmIgPSB0b3JjaC5laW5zdW0oImIgcyBoIGQsIGggZCBsLT4gYiBzIGggbCIsIHFfbm9wZSwga3VwX25vcGUpCiAgICBxX3JvcGUgPSBxX3JvcGUucGVybXV0ZSgwLCAyLCAxLCAzKQogICAgcV9hYnNvcmIgPSBxX2Fic29yYi5wZXJtdXRlKDAsIDIsIDEsIDMpCiAgICAjIHN0ZXAgMi41IGFwcGx5IHJvcGUKICAgIGNvcywgc2luID0gcm9wZV9jYWNoZQogICAgIyAwLjEyIG1zCiAgICBxX3JvcGUgPSBhcHBseV9yb3RhcnlfcG9zX2VtYl9xKHFfcm9wZSwgY29zLCBzaW4sIHByZWZpbGwgKyBzZXFfbGVuKQogICAgcmV0dXJuIHFfYWJzb3JiLCBrdl9jYWNoZV9sYXN0LCBxX3JvcGUKCkB0b3JjaC5jb21waWxlCmRlZiBjdXN0b21fa2VybmVsX3N0ZXBfMihkYXRhOiBpbnB1dF90LCBxX2Fic29yYiwga3ZfY2FjaGVfbGFzdCwgcV9yb3BlKSAtPiBvdXRwdXRfdDoKICAgIGNvbmZpZywgeCwga3ZfY2FjaGVfd3JhcHBlciA9IGRhdGEKICAgIHByZWZpbGwgPSBrdl9jYWNoZV93cmFwcGVyLnNlcV9sZW4KICAgIGt2X2NhY2hlLCBxZG93biwgcXVwLCBrdmRvd24sIGt2dXAsIHdvID0ga3ZfY2FjaGVfd3JhcHBlci5nZXRfZGF0YSgpLCBjb25maWcuUV9wcm9qX2Rvd25fd2VpZ2h0LCBjb25maWcuUV9wcm9qX3VwX3dlaWdodCwgY29uZmlnLktWX3Byb2pfZG93bl93ZWlnaHQsIGNvbmZpZy5LVl9wcm9qX3VwX3dlaWdodCwgY29uZmlnLndvX3dlaWdodAogICAga3ZfY2FjaGU6IHRvcmNoLlRlbnNvciA9IGt2X2NhY2hlWzosIDpwcmVmaWxsICsgc2VxX2xlbl0KCiAgICBrdl9jYWNoZVs6LCAtMTosIDpdID0ga3ZfY2FjaGVfbGFzdAogICAga3ZfbG9yYSwga19yb3BlID0ga3ZfY2FjaGUuc3BsaXQoW2t2X2xvcmFfZGltLCByb3BlX2RpbV0sIGRpbT0tMSkKCiAgICBjb3MsIHNpbiA9IHJvcGVfY2FjaGUKICAgIGtfcm9wZSA9IGFwcGx5X3JvdGFyeV9wb3NfZW1iX2soa19yb3BlLCBjb3MsIHNpbiwgcHJlZmlsbCArIHNlcV9sZW4pCgogICAgIyBzdGVwIDMKICAgICMgcV9ub3BlIEAga3ZfbG9yYSAtPiBhdHRuX25vcGUKICAgICMgcV9yb3BlIEAga3Zfcm9wZSAtPiBhdHRuX3JvcGUKICAgICMgc29mdG1heChhdHRuX25vcGUgKyBhdHRuX3JvcGUpIC0+IGF0dG4KICAgIGF0dG5fbm9wZSA9IHRvcmNoLmVpbnN1bSgiYiBoIHMgbCwgYiBwIGwgLT4gYiBoIHMgcCIsIHFfYWJzb3JiLCBrdl9sb3JhKQogICAgYXR0bl9yb3BlID0gdG9yY2guZWluc3VtKCJiIGggcyBkLCBiIHAgZCAtPiBiIGggcyBwIiwgcV9yb3BlLCBrX3JvcGUpCiAgICAjIDAuMyBtcwogICAgYXR0ZW50aW9uID0gYXBwbHlfc29mdG1heChhdHRuX25vcGUsIGF0dG5fcm9wZSwgbm9wZV9kaW0sIHJvcGVfZGltKQogICAgIyBzdGVwIDQKICAgICMgYXR0biBAIGt2X2xvcmEgQCB2dXAgQCB3by0+IG91dHB1dAogICAgbyA9IHRvcmNoLmVpbnN1bSgiYiBoIHMgcCwgYiBwIGwgLT4gYiBoIHMgbCIsIGF0dGVudGlvbiwga3ZfbG9yYSkKICAgIHF1cCA9IHF1cC52aWV3KG5faGVhZHMsIG5vcGVfZGltICsgcm9wZV9kaW0sIHFfbG9yYV9kaW0pCiAgICBrdXBfbm9wZSwgdnVwID0ga3Z1cC52aWV3KG5faGVhZHMsIG5vcGVfZGltICsgdl9kaW0sIGt2X2xvcmFfZGltKS5zcGxpdChbbm9wZV9kaW0sIHZfZGltXSwgZGltPS0yKQogICAgbyA9IHRvcmNoLmVpbnN1bSgiYiBoIHMgbCwgaCB2IGwgLT4gYiBoIHMgdiIsIG8sIHZ1cCkKICAgIHdvID0gd28udmlldyhoaWRkZW5fZGltLCBuX2hlYWRzLCB2X2RpbSkKICAgIG91dHB1dCA9IHRvcmNoLmVpbnN1bSgiYiBoIHMgdiwgZCBoIHYgLT4gYiBzIGQiLCBvLCB3bykKICAgICMgbWxhLm1sYV9kZWNvZGUoeCwga3ZfY2FjaGUuZ2V0X2RhdGEoKSwgY29uZmlnLlFfcHJval9kb3duX3dlaWdodCwgY29uZmlnLlFfcHJval91cF93ZWlnaHQsIGNvbmZpZy5LVl9wcm9qX2Rvd25fd2VpZ2h0LCBjb25maWcuS1ZfcHJval91cF93ZWlnaHQsIGNvbmZpZy53b193ZWlnaHQsIG91dHB1dCkKICAgIHJldHVybiBvdXRwdXQsIGt2X2NhY2hlX3dyYXBwZXIuZ2V0X2RhdGEoKQoKIyBAdG9yY2guY29tcGlsZQpkZWYgY3VzdG9tX2tlcm5lbF9pbXBsKGRhdGE6IGlucHV0X3QpIC0+IG91dHB1dF90OgogICAgY29uZmlnLCB4LCBrdl9jYWNoZV93cmFwcGVyID0gZGF0YQogICAgcHJlZmlsbCA9IGt2X2NhY2hlX3dyYXBwZXIuc2VxX2xlbgogICAga3ZfY2FjaGUsIHFkb3duLCBxdXAsIGt2ZG93biwga3Z1cCwgd28gPSBrdl9jYWNoZV93cmFwcGVyLmdldF9kYXRhKCksIGNvbmZpZy5RX3Byb2pfZG93bl93ZWlnaHQsIGNvbmZpZy5RX3Byb2pfdXBfd2VpZ2h0LCBjb25maWcuS1ZfcHJval9kb3duX3dlaWdodCwgY29uZmlnLktWX3Byb2pfdXBfd2VpZ2h0LCBjb25maWcud29fd2VpZ2h0CiAgICBiYXRjaF9zaXplLCBzZXFfbGVuLCBuX2hlYWRzID0gY29uZmlnLmJhdGNoX3NpemUsIGNvbmZpZy5zZXFfbGVuLCBjb25maWcubl9oZWFkcwogICAgYXNzZXJ0IHNlcV9sZW4gPT0gMQogICAgbm9wZV9kaW0sIHJvcGVfZGltID0gY29uZmlnLnFrX25vcGVfaGVhZF9kaW0sIGNvbmZpZy5xa19yb3BlX2hlYWRfZGltCiAgICBxX2xvcmFfZGltLCBrdl9sb3JhX2RpbSA9IGNvbmZpZy5xX2xvcmFfcmFuaywgY29uZmlnLmt2X2xvcmFfcmFuawogICAgdl9kaW0gPSBjb25maWcudl9oZWFkX2RpbQogICAgaGlkZGVuX2RpbSA9IGNvbmZpZy5kaW0KICAgICMgc3RlcCAxCiAgICAjIGhpZGRlbiAtPiBrdl9sb3JhWy0xXSAoa3Zkb3duX25vcGUpCiAgICAjIGhpZGRlbiAtPiBrX3JvcGVbLTFdIChrdmRvd25fcm9wZSkKICAgICMga3ZfY2FjaGUgLT4ga3ZfbG9yYSwga19yb3BlCiAgICAjIGhpZGRlbiAtPiBxX2xvcmEgKHFkb3duKQogICAga3ZfY2FjaGU6IHRvcmNoLlRlbnNvciA9IGt2X2NhY2hlWzosIDpwcmVmaWxsICsgc2VxX2xlbl0KICAgIGt2X2NhY2hlWzosIC0xOiwgOl0sIHFfbG9yYSA9IHRvcmNoLmVpbnN1bSgiYiBzIGQsIGwgZCAtPiBiIHMgbCIsIHgsIHRvcmNoLmNvbmNhdCgoa3Zkb3duLCBxZG93biksIGRpbT0wKSkuc3BsaXQoW2t2X2xvcmFfZGltICsgcm9wZV9kaW0sIHFfbG9yYV9kaW1dLCBkaW09LTEpCiAgICBrdl9sb3JhLCBrX3JvcGUgPSBrdl9jYWNoZS5zcGxpdChba3ZfbG9yYV9kaW0sIHJvcGVfZGltXSwgZGltPS0xKQogICAgIyBzdGVwIDIKICAgICMgcV9sb3JhIC0+IHFfcm9wZSAocXVwX3JvcGUpCiAgICAjIHFfbG9yYSAtPiBxX25vcGUgQCBxdXBfbm9wZSBAIGt1cF9ub3BlCiAgICBxdXAgPSBxdXAudmlldyhuX2hlYWRzLCBub3BlX2RpbSArIHJvcGVfZGltLCBxX2xvcmFfZGltKQogICAga3VwX25vcGUsIHZ1cCA9IGt2dXAudmlldyhuX2hlYWRzLCBub3BlX2RpbSArIHZfZGltLCBrdl9sb3JhX2RpbSkuc3BsaXQoW25vcGVfZGltLCB2X2RpbV0sIGRpbT0tMikKICAgIHFfbm9wZSwgcV9yb3BlID0gdG9yY2guZWluc3VtKCJiIHMgbCwgaCBkIGwgLT4gYiBzIGggZCIsIHFfbG9yYSwgcXVwKS5zcGxpdChbbm9wZV9kaW0sIHJvcGVfZGltXSwgZGltPS0xKQogICAgcV9hYnNvcmIgPSB0b3JjaC5laW5zdW0oImIgcyBoIGQsIGggZCBsLT4gYiBzIGggbCIsIHFfbm9wZSwga3VwX25vcGUpCiAgICBxX3JvcGUgPSBxX3JvcGUucGVybXV0ZSgwLCAyLCAxLCAzKQogICAgcV9hYnNvcmIgPSBxX2Fic29yYi5wZXJtdXRlKDAsIDIsIDEsIDMpCiAgICAjIHN0ZXAgMi41IGFwcGx5IHJvcGUKICAgIGNvcywgc2luID0gcm9wZV9jYWNoZQogICAgIyAwLjEyIG1zCiAgICBxX3JvcGUsIGtfcm9wZSA9IGFwcGx5X3JvdGFyeV9wb3NfZW1iKHFfcm9wZSwga19yb3BlLCBjb3MsIHNpbiwgcHJlZmlsbCArIHNlcV9sZW4pCiAgICAjIHByaW50KGYie3Ffcm9wZVswLCAwLCAwLCAtMV09fSIpCiAgICAjIHByaW50KGYie3Ffbm9wZVswLCAwLCAwLCAtMV09fSIpCiAgICAjIHByaW50KGYie2tfcm9wZVswLCAxLCAwLCAtMV09fSIpCiAgICAjIHByaW50KGYie2tfbm9wZVswLCAwLCAxLCAtMV09fSIpCgogICAgIyBzdGVwIDMKICAgICMgcV9ub3BlIEAga3ZfbG9yYSAtPiBhdHRuX25vcGUKICAgICMgcV9yb3BlIEAga3Zfcm9wZSAtPiBhdHRuX3JvcGUKICAgICMgc29mdG1heChhdHRuX25vcGUgKyBhdHRuX3JvcGUpIC0+IGF0dG4KICAgIGF0dG5fbm9wZSA9IHRvcmNoLmVpbnN1bSgiYiBoIHMgbCwgYiBwIGwgLT4gYiBoIHMgcCIsIHFfYWJzb3JiLCBrdl9sb3JhKQogICAgYXR0bl9yb3BlID0gdG9yY2guZWluc3VtKCJiIGggcyBkLCBiIHAgZCAtPiBiIGggcyBwIiwgcV9yb3BlLCBrX3JvcGUpCiAgICAjIDAuMyBtcwogICAgYXR0ZW50aW9uID0gYXBwbHlfc29mdG1heChhdHRuX25vcGUsIGF0dG5fcm9wZSwgbm9wZV9kaW0sIHJvcGVfZGltKQogICAgIyBzdGVwIDQKICAgICMgYXR0biBAIGt2X2xvcmEgQCB2dXAgQCB3by0+IG91dHB1dAogICAgbyA9IHRvcmNoLmVpbnN1bSgiYiBoIHMgcCwgYiBwIGwgLT4gYiBoIHMgbCIsIGF0dGVudGlvbiwga3ZfbG9yYSkKICAgIG8gPSB0b3JjaC5laW5zdW0oImIgaCBzIGwsIGggdiBsIC0+IGIgaCBzIHYiLCBvLCB2dXApCiAgICB3byA9IHdvLnZpZXcoaGlkZGVuX2RpbSwgbl9oZWFkcywgdl9kaW0pCiAgICBvdXRwdXQgPSB0b3JjaC5laW5zdW0oImIgaCBzIHYsIGQgaCB2IC0+IGIgcyBkIiwgbywgd28pCiAgICAjIG1sYS5tbGFfZGVjb2RlKHgsIGt2X2NhY2hlLmdldF9kYXRhKCksIGNvbmZpZy5RX3Byb2pfZG93bl93ZWlnaHQsIGNvbmZpZy5RX3Byb2pfdXBfd2VpZ2h0LCBjb25maWcuS1ZfcHJval9kb3duX3dlaWdodCwgY29uZmlnLktWX3Byb2pfdXBfd2VpZ2h0LCBjb25maWcud29fd2VpZ2h0LCBvdXRwdXQpCiAgICByZXR1cm4gb3V0cHV0LCBrdl9jYWNoZV93cmFwcGVyLmdldF9kYXRhKCkKSource 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 30410.
- aW1wb3J0IG1hdGgKZnJvbSBkYXRhY2xhc3NlcyBpbXBvcnQgZGF0YWNsYXNzCmltcG9ydCB0b3JjaApmcm9tIHRvcmNoIGltcG9ydCBubgppbXBvcnQgdG9yY2gubm4uZnVuY3Rpb25hbCBhcyBGCmZyb20gdGFzayBpbXBvcnQgaW5wdXRfdCwgb3V0cHV0X3QKCiMgaW1wb3J0IG1sYQoKZGVmIHJvdGF0ZV9oYWxmKHgpOgogICAgeDEgPSB4Wy4uLiwgOiB4LnNoYXBlWy0xXSAvLyAyXQogICAgeDIgPSB4Wy4uLiwgeC5zaGFwZVstMV0gLy8gMiA6XQogICAgcmV0dXJuIHRvcmNoLmNhdCgoLXgyLCB4MSksIGRpbT0tMSkKCkB0b3JjaC5jb21waWxlCmRlZiBhcHBseV9yb3RhcnlfcG9zX2VtYihxLCBrLCBjb3MsIHNpbiwgc2VxX2xlbik6CiAgICBxX2VtYmVkID0gKHEgKiBjb3Nbc2VxX2xlbiAtIDFdKSArIChyb3RhdGVfaGFsZihxKSAqIHNpbltzZXFfbGVuIC0gMV0pCiAgICBrX2VtYmVkID0gKGsgKiBjb3NbOnNlcV9sZW5dKSArIChyb3RhdGVfaGFsZihrKSAqIHNpbls6c2VxX2xlbl0pCiAgICByZXR1cm4gcV9lbWJlZCwga19lbWJlZAoKZGVmIHByZWNvbXB1dGVfcm9wZV9jYWNoZShzZXFfbGVuLCBkaW0sIGRldmljZT0nY3VkYScsIGJhc2U9MTAwMDAuMCk6CiAgICBhc3NlcnQgZGltICUgMiA9PSAwLCAiRW1iZWRkaW5nIGRpbWVuc2lvbiBtdXN0IGJlIGV2ZW4gZm9yIFJvUEUuIgogICAgcG9zaXRpb24gPSB0b3JjaC5hcmFuZ2Uoc2VxX2xlbiwgZGV2aWNlPWRldmljZSwgZHR5cGU9dG9yY2guYmZsb2F0MTYpCiAgICB0aGV0YSA9IGJhc2UgKiogKC10b3JjaC5hcmFuZ2UoMCwgZGltIC8vIDIsIGRldmljZT1kZXZpY2UsIGR0eXBlPXRvcmNoLmJmbG9hdDE2KSAvIChkaW0gLy8gMikpCiAgICBhbmdsZXMgPSB0b3JjaC5vdXRlcihwb3NpdGlvbiwgdGhldGEpCiAgICBvdXQgPSB0b3JjaC5jYXQoW2FuZ2xlcywgYW5nbGVzXSwgZGltPS0xKQogICAgcmV0dXJuIG91dC5jb3MoKSwgb3V0LnNpbigpCgpyb3BlX2NhY2hlID0gcHJlY29tcHV0ZV9yb3BlX2NhY2hlKDYxNDUsIDY0KQoKQHRvcmNoLmNvbXBpbGUKZGVmIGFwcGx5X3NvZnRtYXgocWtfbm9wZSwgcWtfcm9wZSwgbm9wZV9kaW0sIHJvcGVfZGltKToKICAgIHNjb3JlcyA9IChxa19ub3BlICsgcWtfcm9wZSkgLyBtYXRoLnNxcnQocm9wZV9kaW0gKyBub3BlX2RpbSkKICAgIHJldHVybiBGLnNvZnRtYXgoc2NvcmVzLCBkaW09LTEpCgojIGltcG9ydCBvcwojIG9zLnB1dGVudignUFlUT1JDSF9UVU5BQkxFT1BfRU5BQkxFRCcsICcxJykKIyBvcy5wdXRlbnYoJ1BZVE9SQ0hfVFVOQUJMRU9QX1RVTklORycsICcwJykKIyBvcy5wdXRlbnYoJ1BZVE9SQ0hfVFVOQUJMRU9QX1JFQ09SRF9VTlRVTkVEJywgJzEnKQoKIyB0b3JjaC5jdWRhLnR1bmFibGUuZW5hYmxlKCkKCkB0b3JjaC5jb21waWxlCmRlZiBjdXN0b21fa2VybmVsKGRhdGE6IGlucHV0X3QpIC0+IG91dHB1dF90OgogICAgY29uZmlnLCB4LCBrdl9jYWNoZV93cmFwcGVyID0gZGF0YQogICAgcHJlZmlsbCA9IGt2X2NhY2hlX3dyYXBwZXIuc2VxX2xlbgogICAga3ZfY2FjaGUsIHFkb3duLCBxdXAsIGt2ZG93biwga3Z1cCwgd28gPSBrdl9jYWNoZV93cmFwcGVyLmdldF9kYXRhKCksIGNvbmZpZy5RX3Byb2pfZG93bl93ZWlnaHQsIGNvbmZpZy5RX3Byb2pfdXBfd2VpZ2h0LCBjb25maWcuS1ZfcHJval9kb3duX3dlaWdodCwgY29uZmlnLktWX3Byb2pfdXBfd2VpZ2h0LCBjb25maWcud29fd2VpZ2h0CiAgICBvdXRwdXQgPSB0b3JjaC5lbXB0eV9saWtlKHgpCiAgICBiYXRjaF9zaXplLCBzZXFfbGVuLCBuX2hlYWRzID0gY29uZmlnLmJhdGNoX3NpemUsIGNvbmZpZy5zZXFfbGVuLCBjb25maWcubl9oZWFkcwogICAgYXNzZXJ0IHNlcV9sZW4gPT0gMQogICAgbm9wZV9kaW0sIHJvcGVfZGltID0gY29uZmlnLnFrX25vcGVfaGVhZF9kaW0sIGNvbmZpZy5xa19yb3BlX2hlYWRfZGltCiAgICBxX2xvcmFfZGltLCBrdl9sb3JhX2RpbSA9IGNvbmZpZy5xX2xvcmFfcmFuaywgY29uZmlnLmt2X2xvcmFfcmFuawogICAgdl9kaW0gPSBjb25maWcudl9oZWFkX2RpbQogICAgaGlkZGVuX2RpbSA9IGNvbmZpZy5kaW0KICAgICMgc3RlcCAxCiAgICAjIGhpZGRlbiAtPiBrdl9sb3JhWy0xXSAoa3Zkb3duX25vcGUpCiAgICAjIGhpZGRlbiAtPiBrX3JvcGVbLTFdIChrdmRvd25fcm9wZSkKICAgICMga3ZfY2FjaGUgLT4ga3ZfbG9yYSwga19yb3BlCiAgICAjIGhpZGRlbiAtPiBxX2xvcmEgKHFkb3duKQogICAga3ZfY2FjaGU6IHRvcmNoLlRlbnNvciA9IGt2X2NhY2hlWzosIDpwcmVmaWxsICsgc2VxX2xlbl0KICAgIGt2X2NhY2hlWzosIC0xOiwgOl0sIHFfbG9yYSA9IHRvcmNoLmVpbnN1bSgiYiBzIGQsIGwgZCAtPiBiIHMgbCIsIHgsIHRvcmNoLmNvbmNhdCgoa3Zkb3duLCBxZG93biksIGRpbT0wKSkuc3BsaXQoW2t2X2xvcmFfZGltICsgcm9wZV9kaW0sIHFfbG9yYV9kaW1dLCBkaW09LTEpCiAgICBrdl9sb3JhLCBrX3JvcGUgPSBrdl9jYWNoZS5zcGxpdChba3ZfbG9yYV9kaW0sIHJvcGVfZGltXSwgZGltPS0xKQogICAgIyBzdGVwIDIKICAgICMgcV9sb3JhIC0+IHFfcm9wZSAocXVwX3JvcGUpCiAgICAjIHFfbG9yYSAtPiBxX25vcGUgQCBxdXBfbm9wZSBAIGt1cF9ub3BlCiAgICBxdXAgPSBxdXAudmlldyhuX2hlYWRzLCBub3BlX2RpbSArIHJvcGVfZGltLCBxX2xvcmFfZGltKQogICAga3VwX25vcGUsIHZ1cCA9IGt2dXAudmlldyhuX2hlYWRzLCBub3BlX2RpbSArIHZfZGltLCBrdl9sb3JhX2RpbSkuc3BsaXQoW25vcGVfZGltLCB2X2RpbV0sIGRpbT0tMikKICAgIHFfbm9wZSwgcV9yb3BlID0gdG9yY2guZWluc3VtKCJiIHMgbCwgaCBkIGwgLT4gYiBzIGggZCIsIHFfbG9yYSwgcXVwKS5zcGxpdChbbm9wZV9kaW0sIHJvcGVfZGltXSwgZGltPS0xKQogICAgcV9hYnNvcmIgPSB0b3JjaC5laW5zdW0oImIgcyBoIGQsIGggZCBsLT4gYiBzIGggbCIsIHFfbm9wZSwga3VwX25vcGUpCiAgICBxX3JvcGUgPSBxX3JvcGUucGVybXV0ZSgwLCAyLCAxLCAzKQogICAgcV9hYnNvcmIgPSBxX2Fic29yYi5wZXJtdXRlKDAsIDIsIDEsIDMpCiAgICAjIHN0ZXAgMi41IGFwcGx5IHJvcGUKICAgIGNvcywgc2luID0gcm9wZV9jYWNoZQogICAgcV9yb3BlLCBrX3JvcGUgPSBhcHBseV9yb3RhcnlfcG9zX2VtYihxX3JvcGUsIGtfcm9wZSwgY29zLCBzaW4sIHByZWZpbGwgKyBzZXFfbGVuKQogICAgIyBwcmludChmIntxX3JvcGVbMCwgMCwgMCwgLTFdPX0iKQogICAgIyBwcmludChmIntxX25vcGVbMCwgMCwgMCwgLTFdPX0iKQogICAgIyBwcmludChmIntrX3JvcGVbMCwgMSwgMCwgLTFdPX0iKQogICAgIyBwcmludChmIntrX25vcGVbMCwgMCwgMSwgLTFdPX0iKQoKICAgICMgc3RlcCAzCiAgICAjIHFfbm9wZSBAIGt2X2xvcmEgLT4gYXR0bl9ub3BlCiAgICAjIHFfcm9wZSBAIGt2X3JvcGUgLT4gYXR0bl9yb3BlCiAgICAjIHNvZnRtYXgoYXR0bl9ub3BlICsgYXR0bl9yb3BlKSAtPiBhdHRuCiAgICBhdHRuX25vcGUgPSB0b3JjaC5laW5zdW0oImIgaCBzIGwsIGIgcCBsIC0+IGIgaCBzIHAiLCBxX2Fic29yYiwga3ZfbG9yYSkKICAgIGF0dG5fcm9wZSA9IHRvcmNoLmVpbnN1bSgiYiBoIHMgZCwgYiBwIGQgLT4gYiBoIHMgcCIsIHFfcm9wZSwga19yb3BlKQogICAgYXR0ZW50aW9uID0gYXBwbHlfc29mdG1heChhdHRuX25vcGUsIGF0dG5fcm9wZSwgbm9wZV9kaW0sIHJvcGVfZGltKQogICAgIyBzdGVwIDQKICAgICMgYXR0biBAIGt2X2xvcmEgQCB2dXAgQCB3by0+IG91dHB1dAogICAgbyA9IHRvcmNoLmVpbnN1bSgiYiBoIHMgcCwgYiBwIGwgLT4gYiBoIHMgbCIsIGF0dGVudGlvbiwga3ZfbG9yYSkKICAgIG8gPSB0b3JjaC5laW5zdW0oImIgaCBzIGwsIGggdiBsIC0+IGIgaCBzIHYiLCBvLCB2dXApCiAgICB3byA9IHdvLnZpZXcoaGlkZGVuX2RpbSwgbl9oZWFkcywgdl9kaW0pCiAgICBvdXRwdXQgPSB0b3JjaC5laW5zdW0oImIgaCBzIHYsIGQgaCB2IC0+IGIgcyBkIiwgbywgd28pCiAgICAjIG1sYS5tbGFfZGVjb2RlKHgsIGt2X2NhY2hlLmdldF9kYXRhKCksIGNvbmZpZy5RX3Byb2pfZG93bl93ZWlnaHQsIGNvbmZpZy5RX3Byb2pfdXBfd2VpZ2h0LCBjb25maWcuS1ZfcHJval9kb3duX3dlaWdodCwgY29uZmlnLktWX3Byb2pfdXBfd2VpZ2h0LCBjb25maWcud29fd2VpZ2h0LCBvdXRwdXQpCiAgICByZXR1cm4gb3V0cHV0LCBrdl9jYWNoZV93cmFwcGVyLmdldF9kYXRhKCkKNo newline at end of file+ aW1wb3J0IG1hdGgKZnJvbSBkYXRhY2xhc3NlcyBpbXBvcnQgZGF0YWNsYXNzCmltcG9ydCB0b3JjaApmcm9tIHRvcmNoIGltcG9ydCBubgppbXBvcnQgdG9yY2gubm4uZnVuY3Rpb25hbCBhcyBGCmZyb20gdGFzayBpbXBvcnQgaW5wdXRfdCwgb3V0cHV0X3QKaW1wb3J0IHRpbWUKCiMgaW1wb3J0IG1sYQoKZGVmIHJvdGF0ZV9oYWxmKHgpOgogICAgeDEgPSB4Wy4uLiwgOiB4LnNoYXBlWy0xXSAvLyAyXQogICAgeDIgPSB4Wy4uLiwgeC5zaGFwZVstMV0gLy8gMiA6XQogICAgcmV0dXJuIHRvcmNoLmNhdCgoLXgyLCB4MSksIGRpbT0tMSkKCkB0b3JjaC5jb21waWxlCmRlZiBhcHBseV9yb3RhcnlfcG9zX2VtYihxLCBrLCBjb3MsIHNpbiwgc2VxX2xlbik6CiAgICBxX2VtYmVkID0gKHEgKiBjb3Nbc2VxX2xlbiAtIDFdKSArIChyb3RhdGVfaGFsZihxKSAqIHNpbltzZXFfbGVuIC0gMV0pCiAgICBrX2VtYmVkID0gKGsgKiBjb3NbOnNlcV9sZW5dKSArIChyb3RhdGVfaGFsZihrKSAqIHNpbls6c2VxX2xlbl0pCiAgICByZXR1cm4gcV9lbWJlZCwga19lbWJlZAoKQHRvcmNoLmNvbXBpbGUKZGVmIGFwcGx5X3JvdGFyeV9wb3NfZW1iX3EocSwgY29zLCBzaW4sIHNlcV9sZW4pOgogICAgcV9lbWJlZCA9IChxICogY29zW3NlcV9sZW4gLSAxXSkgKyAocm90YXRlX2hhbGYocSkgKiBzaW5bc2VxX2xlbiAtIDFdKQogICAgcmV0dXJuIHFfZW1iZWQKCkB0b3JjaC5jb21waWxlCmRlZiBhcHBseV9yb3RhcnlfcG9zX2VtYl9rKGssIGNvcywgc2luLCBzZXFfbGVuKToKICAgIGtfZW1iZWQgPSAoayAqIGNvc1s6c2VxX2xlbl0pICsgKHJvdGF0ZV9oYWxmKGspICogc2luWzpzZXFfbGVuXSkKICAgIHJldHVybiBrX2VtYmVkCgpkZWYgcHJlY29tcHV0ZV9yb3BlX2NhY2hlKHNlcV9sZW4sIGRpbSwgZGV2aWNlPSdjdWRhJywgYmFzZT0xMDAwMC4wKToKICAgIGFzc2VydCBkaW0gJSAyID09IDAsICJFbWJlZGRpbmcgZGltZW5zaW9uIG11c3QgYmUgZXZlbiBmb3IgUm9QRS4iCiAgICBwb3NpdGlvbiA9IHRvcmNoLmFyYW5nZShzZXFfbGVuLCBkZXZpY2U9ZGV2aWNlLCBkdHlwZT10b3JjaC5iZmxvYXQxNikKICAgIHRoZXRhID0gYmFzZSAqKiAoLXRvcmNoLmFyYW5nZSgwLCBkaW0gLy8gMiwgZGV2aWNlPWRldmljZSwgZHR5cGU9dG9yY2guYmZsb2F0MTYpIC8gKGRpbSAvLyAyKSkKICAgIGFuZ2xlcyA9IHRvcmNoLm91dGVyKHBvc2l0aW9uLCB0aGV0YSkKICAgIG91dCA9IHRvcmNoLmNhdChbYW5nbGVzLCBhbmdsZXNdLCBkaW09LTEpCiAgICByZXR1cm4gb3V0LmNvcygpLCBvdXQuc2luKCkKCnJvcGVfY2FjaGUgPSBwcmVjb21wdXRlX3JvcGVfY2FjaGUoNjE0NSwgNjQpCgpAdG9yY2guY29tcGlsZQpkZWYgYXBwbHlfc29mdG1heChxa19ub3BlLCBxa19yb3BlLCBub3BlX2RpbSwgcm9wZV9kaW0pOgogICAgc2NvcmVzID0gKHFrX25vcGUgKyBxa19yb3BlKSAvIG1hdGguc3FydChyb3BlX2RpbSArIG5vcGVfZGltKQogICAgcmV0dXJuIEYuc29mdG1heChzY29yZXMsIGRpbT0tMSkKCiMgaW1wb3J0IG9zCiMgb3MucHV0ZW52KCdQWVRPUkNIX1RVTkFCTEVPUF9FTkFCTEVEJywgJzEnKQojIG9zLnB1dGVudignUFlUT1JDSF9UVU5BQkxFT1BfVFVOSU5HJywgJzAnKQojIG9zLnB1dGVudignUFlUT1JDSF9UVU5BQkxFT1BfUkVDT1JEX1VOVFVORUQnLCAnMScpCgojIHRvcmNoLmN1ZGEudHVuYWJsZS5lbmFibGUoKQoKc3RhcnQgPSB0b3JjaC5jdWRhLkV2ZW50KGVuYWJsZV90aW1pbmc9VHJ1ZSkKZW5kID0gdG9yY2guY3VkYS5FdmVudChlbmFibGVfdGltaW5nPVRydWUpCnN0YXJ0X2NwdSA9IDAKCmRlZiB0c3RhcnQoKToKICAgIGdsb2JhbCBzdGFydF9jcHUKICAgIHN0YXJ0LnJlY29yZCgpCiAgICBzdGFydF9jcHUgPSB0aW1lLnBlcmZfY291bnRlcl9ucygpCgpkZWYgdGVuZCgpOgogICAgZW5kLnJlY29yZCgpCiAgICB0b3JjaC5jdWRhLnN5bmNocm9uaXplKCkKICAgIGVuZF9jcHUgPSB0aW1lLnBlcmZfY291bnRlcl9ucygpCiAgICBwcmludChmImV4ZWN1dGlvbiB0aW1lOiB7c3RhcnQuZWxhcHNlZF90aW1lKGVuZCl9IG1zLCBjcHU6IHsoZW5kX2NwdSAtIHN0YXJ0X2NwdSkgLyAxZTZ9IG1zIikKCmJhdGNoX3NpemUgPSAxMjgKc2VxX2xlbiA9IDEKbl9oZWFkcyA9IDEyOApyb3BlX2RpbSA9IDY0Cm5vcGVfZGltID0gMTI4CnFfbG9yYV9kaW0gPSAxNTM2Cmt2X2xvcmFfZGltID0gNTEyCnZfZGltID0gMTI4CmhpZGRlbl9kaW0gPSA3MTY4CiAgICAgICAgCmcgPSB0b3JjaC5jdWRhLkNVREFHcmFwaCgpCmlucHV0X3N0YXRpYzogaW5wdXRfdCA9IE5vbmUKb3V0cHV0X3N0YXRpYzogb3V0cHV0X3QgPSBOb25lCgpkZWYgY29weV9pbnB1dChpbnB1dF9keW46IGlucHV0X3QpOgogICAgZ2xvYmFsIGlucHV0X3N0YXRpYwogICAgY29uZmlnX3N0YXRpYywgeF9zdGF0aWMsIGt2X2NhY2hlX3dyYXBwZXJfc3RhdGljID0gaW5wdXRfc3RhdGljCiAgICBjb25maWcsIHgsIGt2X2NhY2hlX3dyYXBwZXIgPSBpbnB1dF9keW4KICAgIHByZWZpbGwgPSBrdl9jYWNoZV93cmFwcGVyLnNlcV9sZW4KICAgIGt2X2NhY2hlX3N0YXRpYyA9IGt2X2NhY2hlX3dyYXBwZXJfc3RhdGljLmdldF9kYXRhKCkKICAgIGt2X2NhY2hlID0ga3ZfY2FjaGVfd3JhcHBlci5nZXRfZGF0YSgpCiAgICAjIGNvcHkgaW5wdXQKICAgICMga3ZfY2FjaGVfc3RhdGljWzosIDpwcmVmaWxsXSA9IGt2X2NhY2hlWzosIDpwcmVmaWxsXQogICAgeF9zdGF0aWMuY29weV8oeCkKICAgICMgY29weSB3ZWlnaHQKICAgIGNvbmZpZ19zdGF0aWMuUV9wcm9qX2Rvd25fd2VpZ2h0LmNvcHlfKGNvbmZpZy5RX3Byb2pfZG93bl93ZWlnaHQpCiAgICBjb25maWdfc3RhdGljLlFfcHJval91cF93ZWlnaHQuY29weV8oY29uZmlnLlFfcHJval91cF93ZWlnaHQpCiAgICBjb25maWdfc3RhdGljLktWX3Byb2pfZG93bl93ZWlnaHQuY29weV8oY29uZmlnLktWX3Byb2pfZG93bl93ZWlnaHQpCiAgICBjb25maWdfc3RhdGljLktWX3Byb2pfdXBfd2VpZ2h0LmNvcHlfKGNvbmZpZy5LVl9wcm9qX3VwX3dlaWdodCkKICAgICMgY29uZmlnX3N0YXRpYy53b193ZWlnaHQuY29weV8oY29uZmlnLndvX3dlaWdodCkKCmRlZiBjb3B5X291dHB1dChvdXRwdXRfZHluOiBvdXRwdXRfdCk6CiAgICBnbG9iYWwgb3V0cHV0X3N0YXRpYwogICAgb19zdGF0aWMsIGt2X2NhY2hlX3N0YXRpYyA9IG91dHB1dF9zdGF0aWMKICAgIG8sIGt2X2NhY2hlID0gb3V0cHV0X2R5bgogICAgb19zdGF0aWMuY29weV8obykKCgpkZWYgY3VzdG9tX2tlcm5lbChkYXRhOiBpbnB1dF90KSAtPiBvdXRwdXRfdDoKICAgIGdsb2JhbCBvdXRwdXRfc3RhdGljLCBpbnB1dF9zdGF0aWMKICAgIF8sIF8sIGt2X2NhY2hlX3dyYXBwZXIgPSBkYXRhCiAgICBwcmVmaWxsID0ga3ZfY2FjaGVfd3JhcHBlci5zZXFfbGVuCiAgICBpZiBwcmVmaWxsIDwgNjE0NDoKICAgICAgICByZXR1cm4gY3VzdG9tX2tlcm5lbF9pbXBsKGRhdGEpCiAgICBpZiBub3QgaW5wdXRfc3RhdGljOgogICAgICAgIGN1c3RvbV9rZXJuZWxfc3RlcF8xKGRhdGEpCiAgICAgICAgd2l0aCB0b3JjaC5jdWRhLmdyYXBoKGcpOgogICAgICAgICAgICBvdXRwdXRfc3RhdGljID0gY3VzdG9tX2tlcm5lbF9zdGVwXzEoZGF0YSkKICAgICAgICBpbnB1dF9zdGF0aWMgPSBkYXRhCiAgICAjIHRzdGFydCgpCiAgICBjb3B5X2lucHV0KGRhdGEpCiAgICAjIHRlbmQoKQogICAgIyB0c3RhcnQoKQogICAgZy5yZXBsYXkoKQogICAgIyB0ZW5kKCkKICAgIHJldHVybiBjdXN0b21fa2VybmVsX3N0ZXBfMihkYXRhLCAqb3V0cHV0X3N0YXRpYykKCkB0b3JjaC5jb21waWxlCmRlZiBjdXN0b21fa2VybmVsX3N0ZXBfMShkYXRhOiBpbnB1dF90KSAtPiBvdXRwdXRfdDoKICAgIGNvbmZpZywgeCwga3ZfY2FjaGVfd3JhcHBlciA9IGRhdGEKICAgIHByZWZpbGwgPSBrdl9jYWNoZV93cmFwcGVyLnNlcV9sZW4KICAgIGt2X2NhY2hlLCBxZG93biwgcXVwLCBrdmRvd24sIGt2dXAsIHdvID0ga3ZfY2FjaGVfd3JhcHBlci5nZXRfZGF0YSgpLCBjb25maWcuUV9wcm9qX2Rvd25fd2VpZ2h0LCBjb25maWcuUV9wcm9qX3VwX3dlaWdodCwgY29uZmlnLktWX3Byb2pfZG93bl93ZWlnaHQsIGNvbmZpZy5LVl9wcm9qX3VwX3dlaWdodCwgY29uZmlnLndvX3dlaWdodAogICAgYmF0Y2hfc2l6ZSwgc2VxX2xlbiwgbl9oZWFkcyA9IGNvbmZpZy5iYXRjaF9zaXplLCBjb25maWcuc2VxX2xlbiwgY29uZmlnLm5faGVhZHMKICAgIGFzc2VydCBzZXFfbGVuID09IDEKICAgIG5vcGVfZGltLCByb3BlX2RpbSA9IGNvbmZpZy5xa19ub3BlX2hlYWRfZGltLCBjb25maWcucWtfcm9wZV9oZWFkX2RpbQogICAgcV9sb3JhX2RpbSwga3ZfbG9yYV9kaW0gPSBjb25maWcucV9sb3JhX3JhbmssIGNvbmZpZy5rdl9sb3JhX3JhbmsKICAgIHZfZGltID0gY29uZmlnLnZfaGVhZF9kaW0KICAgIGhpZGRlbl9kaW0gPSBjb25maWcuZGltCiAgICAjIHN0ZXAgMQogICAgIyBoaWRkZW4gLT4ga3ZfbG9yYVstMV0gKGt2ZG93bl9ub3BlKQogICAgIyBoaWRkZW4gLT4ga19yb3BlWy0xXSAoa3Zkb3duX3JvcGUpCiAgICAjIGt2X2NhY2hlIC0+IGt2X2xvcmEsIGtfcm9wZQogICAgIyBoaWRkZW4gLT4gcV9sb3JhIChxZG93bikKICAgIGt2X2NhY2hlOiB0b3JjaC5UZW5zb3IgPSBrdl9jYWNoZVs6LCA6cHJlZmlsbCArIHNlcV9sZW5dCiAgICBrdl9jYWNoZV9sYXN0LCBxX2xvcmEgPSB0b3JjaC5laW5zdW0oImIgcyBkLCBsIGQgLT4gYiBzIGwiLCB4LCB0b3JjaC5jb25jYXQoKGt2ZG93biwgcWRvd24pLCBkaW09MCkpLnNwbGl0KFtrdl9sb3JhX2RpbSArIHJvcGVfZGltLCBxX2xvcmFfZGltXSwgZGltPS0xKQogICAgIyBzdGVwIDIKICAgICMgcV9sb3JhIC0+IHFfcm9wZSAocXVwX3JvcGUpCiAgICAjIHFfbG9yYSAtPiBxX25vcGUgQCBxdXBfbm9wZSBAIGt1cF9ub3BlCiAgICBxdXAgPSBxdXAudmlldyhuX2hlYWRzLCBub3BlX2RpbSArIHJvcGVfZGltLCBxX2xvcmFfZGltKQogICAga3VwX25vcGUsIHZ1cCA9IGt2dXAudmlldyhuX2hlYWRzLCBub3BlX2RpbSArIHZfZGltLCBrdl9sb3JhX2RpbSkuc3BsaXQoW25vcGVfZGltLCB2X2RpbV0sIGRpbT0tMikKICAgIHFfbm9wZSwgcV9yb3BlID0gdG9yY2guZWluc3VtKCJiIHMgbCwgaCBkIGwgLT4gYiBzIGggZCIsIHFfbG9yYSwgcXVwKS5zcGxpdChbbm9wZV9kaW0sIHJvcGVfZGltXSwgZGltPS0xKQogICAgcV9hYnNvcmIgPSB0b3JjaC5laW5zdW0oImIgcyBoIGQsIGggZCBsLT4gYiBzIGggbCIsIHFfbm9wZSwga3VwX25vcGUpCiAgICBxX3JvcGUgPSBxX3JvcGUucGVybXV0ZSgwLCAyLCAxLCAzKQogICAgcV9hYnNvcmIgPSBxX2Fic29yYi5wZXJtdXRlKDAsIDIsIDEsIDMpCiAgICAjIHN0ZXAgMi41IGFwcGx5IHJvcGUKICAgIGNvcywgc2luID0gcm9wZV9jYWNoZQogICAgIyAwLjEyIG1zCiAgICBxX3JvcGUgPSBhcHBseV9yb3RhcnlfcG9zX2VtYl9xKHFfcm9wZSwgY29zLCBzaW4sIHByZWZpbGwgKyBzZXFfbGVuKQogICAgcmV0dXJuIHFfYWJzb3JiLCBrdl9jYWNoZV9sYXN0LCBxX3JvcGUKCkB0b3JjaC5jb21waWxlCmRlZiBjdXN0b21fa2VybmVsX3N0ZXBfMihkYXRhOiBpbnB1dF90LCBxX2Fic29yYiwga3ZfY2FjaGVfbGFzdCwgcV9yb3BlKSAtPiBvdXRwdXRfdDoKICAgIGNvbmZpZywgeCwga3ZfY2FjaGVfd3JhcHBlciA9IGRhdGEKICAgIHByZWZpbGwgPSBrdl9jYWNoZV93cmFwcGVyLnNlcV9sZW4KICAgIGt2X2NhY2hlLCBxZG93biwgcXVwLCBrdmRvd24sIGt2dXAsIHdvID0ga3ZfY2FjaGVfd3JhcHBlci5nZXRfZGF0YSgpLCBjb25maWcuUV9wcm9qX2Rvd25fd2VpZ2h0LCBjb25maWcuUV9wcm9qX3VwX3dlaWdodCwgY29uZmlnLktWX3Byb2pfZG93bl93ZWlnaHQsIGNvbmZpZy5LVl9wcm9qX3VwX3dlaWdodCwgY29uZmlnLndvX3dlaWdodAogICAga3ZfY2FjaGU6IHRvcmNoLlRlbnNvciA9IGt2X2NhY2hlWzosIDpwcmVmaWxsICsgc2VxX2xlbl0KCiAgICBrdl9jYWNoZVs6LCAtMTosIDpdID0ga3ZfY2FjaGVfbGFzdAogICAga3ZfbG9yYSwga19yb3BlID0ga3ZfY2FjaGUuc3BsaXQoW2t2X2xvcmFfZGltLCByb3BlX2RpbV0sIGRpbT0tMSkKCiAgICBjb3MsIHNpbiA9IHJvcGVfY2FjaGUKICAgIGtfcm9wZSA9IGFwcGx5X3JvdGFyeV9wb3NfZW1iX2soa19yb3BlLCBjb3MsIHNpbiwgcHJlZmlsbCArIHNlcV9sZW4pCgogICAgIyBzdGVwIDMKICAgICMgcV9ub3BlIEAga3ZfbG9yYSAtPiBhdHRuX25vcGUKICAgICMgcV9yb3BlIEAga3Zfcm9wZSAtPiBhdHRuX3JvcGUKICAgICMgc29mdG1heChhdHRuX25vcGUgKyBhdHRuX3JvcGUpIC0+IGF0dG4KICAgIGF0dG5fbm9wZSA9IHRvcmNoLmVpbnN1bSgiYiBoIHMgbCwgYiBwIGwgLT4gYiBoIHMgcCIsIHFfYWJzb3JiLCBrdl9sb3JhKQogICAgYXR0bl9yb3BlID0gdG9yY2guZWluc3VtKCJiIGggcyBkLCBiIHAgZCAtPiBiIGggcyBwIiwgcV9yb3BlLCBrX3JvcGUpCiAgICAjIDAuMyBtcwogICAgYXR0ZW50aW9uID0gYXBwbHlfc29mdG1heChhdHRuX25vcGUsIGF0dG5fcm9wZSwgbm9wZV9kaW0sIHJvcGVfZGltKQogICAgIyBzdGVwIDQKICAgICMgYXR0biBAIGt2X2xvcmEgQCB2dXAgQCB3by0+IG91dHB1dAogICAgbyA9IHRvcmNoLmVpbnN1bSgiYiBoIHMgcCwgYiBwIGwgLT4gYiBoIHMgbCIsIGF0dGVudGlvbiwga3ZfbG9yYSkKICAgIHF1cCA9IHF1cC52aWV3KG5faGVhZHMsIG5vcGVfZGltICsgcm9wZV9kaW0sIHFfbG9yYV9kaW0pCiAgICBrdXBfbm9wZSwgdnVwID0ga3Z1cC52aWV3KG5faGVhZHMsIG5vcGVfZGltICsgdl9kaW0sIGt2X2xvcmFfZGltKS5zcGxpdChbbm9wZV9kaW0sIHZfZGltXSwgZGltPS0yKQogICAgbyA9IHRvcmNoLmVpbnN1bSgiYiBoIHMgbCwgaCB2IGwgLT4gYiBoIHMgdiIsIG8sIHZ1cCkKICAgIHdvID0gd28udmlldyhoaWRkZW5fZGltLCBuX2hlYWRzLCB2X2RpbSkKICAgIG91dHB1dCA9IHRvcmNoLmVpbnN1bSgiYiBoIHMgdiwgZCBoIHYgLT4gYiBzIGQiLCBvLCB3bykKICAgICMgbWxhLm1sYV9kZWNvZGUoeCwga3ZfY2FjaGUuZ2V0X2RhdGEoKSwgY29uZmlnLlFfcHJval9kb3duX3dlaWdodCwgY29uZmlnLlFfcHJval91cF93ZWlnaHQsIGNvbmZpZy5LVl9wcm9qX2Rvd25fd2VpZ2h0LCBjb25maWcuS1ZfcHJval91cF93ZWlnaHQsIGNvbmZpZy53b193ZWlnaHQsIG91dHB1dCkKICAgIHJldHVybiBvdXRwdXQsIGt2X2NhY2hlX3dyYXBwZXIuZ2V0X2RhdGEoKQoKIyBAdG9yY2guY29tcGlsZQpkZWYgY3VzdG9tX2tlcm5lbF9pbXBsKGRhdGE6IGlucHV0X3QpIC0+IG91dHB1dF90OgogICAgY29uZmlnLCB4LCBrdl9jYWNoZV93cmFwcGVyID0gZGF0YQogICAgcHJlZmlsbCA9IGt2X2NhY2hlX3dyYXBwZXIuc2VxX2xlbgogICAga3ZfY2FjaGUsIHFkb3duLCBxdXAsIGt2ZG93biwga3Z1cCwgd28gPSBrdl9jYWNoZV93cmFwcGVyLmdldF9kYXRhKCksIGNvbmZpZy5RX3Byb2pfZG93bl93ZWlnaHQsIGNvbmZpZy5RX3Byb2pfdXBfd2VpZ2h0LCBjb25maWcuS1ZfcHJval9kb3duX3dlaWdodCwgY29uZmlnLktWX3Byb2pfdXBfd2VpZ2h0LCBjb25maWcud29fd2VpZ2h0CiAgICBiYXRjaF9zaXplLCBzZXFfbGVuLCBuX2hlYWRzID0gY29uZmlnLmJhdGNoX3NpemUsIGNvbmZpZy5zZXFfbGVuLCBjb25maWcubl9oZWFkcwogICAgYXNzZXJ0IHNlcV9sZW4gPT0gMQogICAgbm9wZV9kaW0sIHJvcGVfZGltID0gY29uZmlnLnFrX25vcGVfaGVhZF9kaW0sIGNvbmZpZy5xa19yb3BlX2hlYWRfZGltCiAgICBxX2xvcmFfZGltLCBrdl9sb3JhX2RpbSA9IGNvbmZpZy5xX2xvcmFfcmFuaywgY29uZmlnLmt2X2xvcmFfcmFuawogICAgdl9kaW0gPSBjb25maWcudl9oZWFkX2RpbQogICAgaGlkZGVuX2RpbSA9IGNvbmZpZy5kaW0KICAgICMgc3RlcCAxCiAgICAjIGhpZGRlbiAtPiBrdl9sb3JhWy0xXSAoa3Zkb3duX25vcGUpCiAgICAjIGhpZGRlbiAtPiBrX3JvcGVbLTFdIChrdmRvd25fcm9wZSkKICAgICMga3ZfY2FjaGUgLT4ga3ZfbG9yYSwga19yb3BlCiAgICAjIGhpZGRlbiAtPiBxX2xvcmEgKHFkb3duKQogICAga3ZfY2FjaGU6IHRvcmNoLlRlbnNvciA9IGt2X2NhY2hlWzosIDpwcmVmaWxsICsgc2VxX2xlbl0KICAgIGt2X2NhY2hlWzosIC0xOiwgOl0sIHFfbG9yYSA9IHRvcmNoLmVpbnN1bSgiYiBzIGQsIGwgZCAtPiBiIHMgbCIsIHgsIHRvcmNoLmNvbmNhdCgoa3Zkb3duLCBxZG93biksIGRpbT0wKSkuc3BsaXQoW2t2X2xvcmFfZGltICsgcm9wZV9kaW0sIHFfbG9yYV9kaW1dLCBkaW09LTEpCiAgICBrdl9sb3JhLCBrX3JvcGUgPSBrdl9jYWNoZS5zcGxpdChba3ZfbG9yYV9kaW0sIHJvcGVfZGltXSwgZGltPS0xKQogICAgIyBzdGVwIDIKICAgICMgcV9sb3JhIC0+IHFfcm9wZSAocXVwX3JvcGUpCiAgICAjIHFfbG9yYSAtPiBxX25vcGUgQCBxdXBfbm9wZSBAIGt1cF9ub3BlCiAgICBxdXAgPSBxdXAudmlldyhuX2hlYWRzLCBub3BlX2RpbSArIHJvcGVfZGltLCBxX2xvcmFfZGltKQogICAga3VwX25vcGUsIHZ1cCA9IGt2dXAudmlldyhuX2hlYWRzLCBub3BlX2RpbSArIHZfZGltLCBrdl9sb3JhX2RpbSkuc3BsaXQoW25vcGVfZGltLCB2X2RpbV0sIGRpbT0tMikKICAgIHFfbm9wZSwgcV9yb3BlID0gdG9yY2guZWluc3VtKCJiIHMgbCwgaCBkIGwgLT4gYiBzIGggZCIsIHFfbG9yYSwgcXVwKS5zcGxpdChbbm9wZV9kaW0sIHJvcGVfZGltXSwgZGltPS0xKQogICAgcV9hYnNvcmIgPSB0b3JjaC5laW5zdW0oImIgcyBoIGQsIGggZCBsLT4gYiBzIGggbCIsIHFfbm9wZSwga3VwX25vcGUpCiAgICBxX3JvcGUgPSBxX3JvcGUucGVybXV0ZSgwLCAyLCAxLCAzKQogICAgcV9hYnNvcmIgPSBxX2Fic29yYi5wZXJtdXRlKDAsIDIsIDEsIDMpCiAgICAjIHN0ZXAgMi41IGFwcGx5IHJvcGUKICAgIGNvcywgc2luID0gcm9wZV9jYWNoZQogICAgIyAwLjEyIG1zCiAgICBxX3JvcGUsIGtfcm9wZSA9IGFwcGx5X3JvdGFyeV9wb3NfZW1iKHFfcm9wZSwga19yb3BlLCBjb3MsIHNpbiwgcHJlZmlsbCArIHNlcV9sZW4pCiAgICAjIHByaW50KGYie3Ffcm9wZVswLCAwLCAwLCAtMV09fSIpCiAgICAjIHByaW50KGYie3Ffbm9wZVswLCAwLCAwLCAtMV09fSIpCiAgICAjIHByaW50KGYie2tfcm9wZVswLCAxLCAwLCAtMV09fSIpCiAgICAjIHByaW50KGYie2tfbm9wZVswLCAwLCAxLCAtMV09fSIpCgogICAgIyBzdGVwIDMKICAgICMgcV9ub3BlIEAga3ZfbG9yYSAtPiBhdHRuX25vcGUKICAgICMgcV9yb3BlIEAga3Zfcm9wZSAtPiBhdHRuX3JvcGUKICAgICMgc29mdG1heChhdHRuX25vcGUgKyBhdHRuX3JvcGUpIC0+IGF0dG4KICAgIGF0dG5fbm9wZSA9IHRvcmNoLmVpbnN1bSgiYiBoIHMgbCwgYiBwIGwgLT4gYiBoIHMgcCIsIHFfYWJzb3JiLCBrdl9sb3JhKQogICAgYXR0bl9yb3BlID0gdG9yY2guZWluc3VtKCJiIGggcyBkLCBiIHAgZCAtPiBiIGggcyBwIiwgcV9yb3BlLCBrX3JvcGUpCiAgICAjIDAuMyBtcwogICAgYXR0ZW50aW9uID0gYXBwbHlfc29mdG1heChhdHRuX25vcGUsIGF0dG5fcm9wZSwgbm9wZV9kaW0sIHJvcGVfZGltKQogICAgIyBzdGVwIDQKICAgICMgYXR0biBAIGt2X2xvcmEgQCB2dXAgQCB3by0+IG91dHB1dAogICAgbyA9IHRvcmNoLmVpbnN1bSgiYiBoIHMgcCwgYiBwIGwgLT4gYiBoIHMgbCIsIGF0dGVudGlvbiwga3ZfbG9yYSkKICAgIG8gPSB0b3JjaC5laW5zdW0oImIgaCBzIGwsIGggdiBsIC0+IGIgaCBzIHYiLCBvLCB2dXApCiAgICB3byA9IHdvLnZpZXcoaGlkZGVuX2RpbSwgbl9oZWFkcywgdl9kaW0pCiAgICBvdXRwdXQgPSB0b3JjaC5laW5zdW0oImIgaCBzIHYsIGQgaCB2IC0+IGIgcyBkIiwgbywgd28pCiAgICAjIG1sYS5tbGFfZGVjb2RlKHgsIGt2X2NhY2hlLmdldF9kYXRhKCksIGNvbmZpZy5RX3Byb2pfZG93bl93ZWlnaHQsIGNvbmZpZy5RX3Byb2pfdXBfd2VpZ2h0LCBjb25maWcuS1ZfcHJval9kb3duX3dlaWdodCwgY29uZmlnLktWX3Byb2pfdXBfd2VpZ2h0LCBjb25maWcud29fd2VpZ2h0LCBvdXRwdXQpCiAgICByZXR1cm4gb3V0cHV0LCBrdl9jYWNoZV93cmFwcGVyLmdldF9kYXRhKCkKNo newline at end of file
Best evidence level for this revision: reported
JSON