Skip to content
KernelIndex
Search⌘K

submission 8734

KernelBot user 160 · 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-fp8-mm-8734?include=source"
interfacepython
Compatibility
measured onAMD Instinct MI300X
declared hardwareAMD Instinct MI300X
architecturesgfx942
dtypesfp32, fp8_e4m3fnuz

Benchmark evidence

18 measurements across 1 GPU, fastest first.

Operation / workload
Hardware
Latency
Rank
Observed
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 512]
AMD Instinct MI300X
48.9µs
#56 of 98
2025-04-25
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 256]
AMD Instinct MI300X
50.5µs
#60 of 98
2025-04-25
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 1536]
AMD Instinct MI300X
89.8µs
#68 of 98
2025-04-25
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 256]
AMD Instinct MI300X
152.6µs
#76 of 98
2025-04-25
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 512]
AMD Instinct MI300X
174.2µs
#78 of 98
2025-04-25
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 2048]
AMD Instinct MI300X
210.0µs
#79 of 98
2025-04-25
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 2304]
AMD Instinct MI300X
233.4µs
#78 of 98
2025-04-25
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 1536]
AMD Instinct MI300X
313.3µs
#78 of 98
2025-04-25
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 7168] · n=512 · seed=6563
AMD Instinct MI300X
322.6µs
#84 of 98
2025-04-25
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 7168] · n=576 · seed=12346
AMD Instinct MI300X
324.8µs
#84 of 98
2025-04-25
Show all 18 measurements ›
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 7168] · n=1536 · seed=8135
AMD Instinct MI300X
326.5µs
#77 of 98
2025-04-25
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=512 · seed=12341
AMD Instinct MI300X
337.0µs
#69 of 98
2025-04-25
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=576 · seed=9863
AMD Instinct MI300X
342.0µs
#63 of 98
2025-04-25
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 7168] · n=4608 · seed=7531
AMD Instinct MI300X
360.6µs
#70 of 98
2025-04-25
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=1536 · seed=6543
AMD Instinct MI300X
750.3µs
#76 of 98
2025-04-25
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 2048]
AMD Instinct MI300X
948.9µs
#78 of 98
2025-04-25
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 2304]
AMD Instinct MI300X
1.06ms
#78 of 98
2025-04-25
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=4608 · seed=65436
AMD Instinct MI300X
2.12ms
#77 of 98
2025-04-25

Reported · How evidence levels are derived →

Source and license

sourceavailable
revision digestsha256:94de689418e5ab91aea933458eac6c171b39a3cdddb12c706ffce66c829dbbcc
license declaredunknown
license concludedunknown
imported2026-08-15

Kernel source

submission.py1 lines
IyFQT1BDT1JOIGxlYWRlcmJvYXJkIGFtZC1mcDgtbW0KIyFQT1BDT1JOIGdwdXMgTUkzMDAKCmltcG9ydCBvcwppbXBvcnQgc3lzCmZyb20gdGFzayBpbXBvcnQgaW5wdXRfdCwgb3V0cHV0X3QKZnJvbSB0b3JjaC51dGlscy5jcHBfZXh0ZW5zaW9uIGltcG9ydCBsb2FkX2lubGluZQoKb3MuZW52aXJvblsiQ1hYIl0gPSAiY2xhbmcrKyIKCmN1ZGFfc3JjID0gciIiIgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxoaXAvaGlwX3J1bnRpbWUuaD4KI2luY2x1ZGUgPGhpcC9hbWRfZGV0YWlsL2FtZF9oaXBfYmYxNi5oPgojaW5jbHVkZSA8aGlwL2FtZF9kZXRhaWwvYW1kX2hpcF9mcDguaD4KCl9faG9zdF9fIF9fZGV2aWNlX18gX19mb3JjZWlubGluZV9fIHNpemVfdCBjZGl2KHNpemVfdCBhLCBzaXplX3QgYikgewogIHJldHVybiAoYSArIGIgLSAxKSAvIGI7Cn0KCiNkZWZpbmUgQkxPQ0tfRElNIDEyOAoKdGVtcGxhdGUgPGNvbnN0IHNpemVfdCBCTiwgY29uc3Qgc2l6ZV90IEJLLCBjb25zdCBzaXplX3QgQk0sCiAgICAgICAgICBjb25zdCBzaXplX3QgV0lURVJOLCBjb25zdCBzaXplX3QgV0lURVJNPgpfX2dsb2JhbF9fIHZvaWQgZnA4X21tX2tlcm5lbChjb25zdCBfX2hpcF9mcDhfZTRtM19mbnV6ICpBLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2hpcF9mcDhfZTRtM19mbnV6ICpCLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCAqQV9zY2FsZSwgY29uc3QgZmxvYXQgKkJfc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faGlwX2JmbG9hdDE2ICpDLCBzaXplX3QgTiwgc2l6ZV90IEssIHNpemVfdCBNKSB7CiAgdXNpbmcgZmxvYXR4MTYgPSBfX2F0dHJpYnV0ZV9fKChfX3ZlY3Rvcl9zaXplX18oMTYgKiBzaXplb2YoZmxvYXQpKSkpIGZsb2F0OwoKICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBWRUNUT1JfU0laRSA9IDQ7CiAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgV0FSUFNJWkUgPSA2NDsKICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBXTiA9IDMyICogV0lURVJOOwogIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IFdNID0gMzIgKiBXSVRFUk07CiAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtVGhyZWFkcyA9IChCTiAqIEJNKSAvICgxNiAqIFdJVEVSTiAqIFdJVEVSTSk7CiAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgU1VCQk4gPSBCTiAvIFZFQ1RPUl9TSVpFOwogIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IFNVQkJNID0gQk0gLyBWRUNUT1JfU0laRTsKICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBzdHJpZGVBID0gbnVtVGhyZWFkcyAvIFNVQkJOOwogIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IHN0cmlkZUIgPSBudW1UaHJlYWRzIC8gU1VCQk07CgogIHNpemVfdCByb3dPZmZzZXRDID0gYmxvY2tJZHgueSAqIEJOOwogIHNpemVfdCBjb2xPZmZzZXRDID0gYmxvY2tJZHgueCAqIEJNOwogIHNpemVfdCBjb2xPZmZzZXRBID0gcm93T2Zmc2V0QzsKICBzaXplX3QgY29sT2Zmc2V0QiA9IGNvbE9mZnNldEM7CiAgc2l6ZV90IE1fc2NhbGUgPSBjZGl2KE0sIEJMT0NLX0RJTSk7CgogIHN0YXRpY19hc3NlcnQobnVtVGhyZWFkcyAlIEJOID09IDAsICJCTiBzaG91bGQgYmUgYSBtdWx0aXBsZSBvZiBudW1UaHJlYWRzIik7CiAgc3RhdGljX2Fzc2VydChudW1UaHJlYWRzICUgQk0gPT0gMCwgIkJNIHNob3VsZCBiZSBhIG11bHRpcGxlIG9mIG51bVRocmVhZHMiKTsKICBzdGF0aWNfYXNzZXJ0KEJLIDw9IDEyOCAmJiBCTSA8PSAxMjgsICJSYW5nZSBhYm92ZSAxMjggaXMgbm90IHN1cHBvcnRlZCIpOwoKICBzaXplX3QgaW5uZXJDb2xBID0gdGhyZWFkSWR4LnggJSBTVUJCTjsKICBzaXplX3QgaW5uZXJSb3dBID0gdGhyZWFkSWR4LnggLyBTVUJCTjsKICBzaXplX3QgaW5uZXJDb2xCID0gdGhyZWFkSWR4LnggJSBTVUJCTTsKICBzaXplX3QgaW5uZXJSb3dCID0gdGhyZWFkSWR4LnggLyBTVUJCTTsKCiAgc2l6ZV90IGxhbmVJZHggPSB0aHJlYWRJZHgueCAlIFdBUlBTSVpFOwogIHNpemVfdCB3YXJwSWR4ID0gdGhyZWFkSWR4LnggLyBXQVJQU0laRTsKICBzaXplX3Qgd2FycENvbE9mZnNldCA9ICh3YXJwSWR4ICUgKEJNIC8gV00pKSAqIFdNOwogIHNpemVfdCB3YXJwUm93T2Zmc2V0ID0gKHdhcnBJZHggLyAoQk0gLyBXTSkpICogV047CiAgc2l6ZV90IHdhcnBYID0gbGFuZUlkeCAlIDMyOwogIHNpemVfdCB3YXJwWSA9IGxhbmVJZHggLyAzMjsKCiAgX19zaGFyZWRfXyBfX2hpcF9mcDhfZTRtM19mbnV6IEFzW0JLXVtCTl0sIEJzW0JLXVtCTV07CiAgX19zaGFyZWRfXyBmbG9hdCBXc1tCTiArIDFdOwoKICBfX2hpcF9mcDhfZTRtM19mbnV6IGFbV0lURVJOXVs4XSwgYltXSVRFUk1dWzhdOwogIGZsb2F0eDE2IGRbV0lURVJOXVtXSVRFUk1dID0gezB9OwogIGZsb2F0IGJfc2NhbGU7CgogIGZvciAoc2l6ZV90IHRpbGVPZmZzZXQgPSAwOyB0aWxlT2Zmc2V0IDwgSzsgdGlsZU9mZnNldCArPSBCSykgewogICAgLy8gbG9hZCBmcm9tIGdsb2JhbCB0byBzaGFyZWQgbWVtb3J5IGluIGNvYWxlc2NlZCBtYW5uZXIKICAgIGZvciAoc2l6ZV90IGlubmVyUm93T2Zmc2V0QSA9IDA7IGlubmVyUm93T2Zmc2V0QSA8IEJLOwogICAgICAgICBpbm5lclJvd09mZnNldEEgKz0gc3RyaWRlQSkgewogICAgICBpZiAoKHRpbGVPZmZzZXQgKyBpbm5lclJvd09mZnNldEEgKyBpbm5lclJvd0EpIDwgSyAmJgogICAgICAgICAgKGNvbE9mZnNldEEgKyBpbm5lckNvbEEgKiBWRUNUT1JfU0laRSkgPCBOICYmCiAgICAgICAgICAoaW5uZXJSb3dPZmZzZXRBICsgaW5uZXJSb3dBKSA8IEJLKSB7CiAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQgKj4oCiAgICAgICAgICAgICZBc1tpbm5lclJvd09mZnNldEEgKyBpbm5lclJvd0FdW2lubmVyQ29sQSAqIFZFQ1RPUl9TSVpFXSkgPQogICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCAqPigKICAgICAgICAgICAgICAgICZBWyh0aWxlT2Zmc2V0ICsgaW5uZXJSb3dPZmZzZXRBICsgaW5uZXJSb3dBKSAqIE4gKwogICAgICAgICAgICAgICAgICAgKGNvbE9mZnNldEEgKyBpbm5lckNvbEEgKiBWRUNUT1JfU0laRSldKTsKICAgICAgfSBlbHNlIGlmICgoaW5uZXJSb3dPZmZzZXRBICsgaW5uZXJSb3dBKSA8IEJLKSB7CiAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQgKj4oCiAgICAgICAgICAgICZBc1tpbm5lclJvd09mZnNldEEgKyBpbm5lclJvd0FdW2lubmVyQ29sQSAqIFZFQ1RPUl9TSVpFXSkgPSAwLjBmOwogICAgICB9CiAgICB9CiAgICBpZiAodGhyZWFkSWR4LnggPCBCTikgewogICAgICAqcmVpbnRlcnByZXRfY2FzdDxmbG9hdDQgKj4oJldzW3RocmVhZElkeC54ICogVkVDVE9SX1NJWkVdKSA9CiAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdDQgKj4oCiAgICAgICAgICAgICAgJkFfc2NhbGVbKHRpbGVPZmZzZXQgLyBCTE9DS19ESU0pICogTiArCiAgICAgICAgICAgICAgICAgICAgICAgKGNvbE9mZnNldEEgKyB0aHJlYWRJZHgueCAqIFZFQ1RPUl9TSVpFKV0pOwogICAgfQogICAgZm9yIChzaXplX3QgaW5uZXJSb3dPZmZzZXRCID0gMDsgaW5uZXJSb3dPZmZzZXRCIDwgQks7CiAgICAgICAgIGlubmVyUm93T2Zmc2V0QiArPSBzdHJpZGVCKSB7CiAgICAgIGlmICgodGlsZU9mZnNldCArIGlubmVyUm93T2Zmc2V0QiArIGlubmVyUm93QikgPCBLICYmCiAgICAgICAgICAoY29sT2Zmc2V0QiArIGlubmVyQ29sQiAqIFZFQ1RPUl9TSVpFKSA8IE0gJiYKICAgICAgICAgIChpbm5lclJvd09mZnNldEIgKyBpbm5lclJvd0IpIDwgQkspIHsKICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxmbG9hdCAqPigKICAgICAgICAgICAgJkJzW2lubmVyUm93T2Zmc2V0QiArIGlubmVyUm93Ql1baW5uZXJDb2xCICogVkVDVE9SX1NJWkVdKSA9CiAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0ICo+KAogICAgICAgICAgICAgICAgJkJbKHRpbGVPZmZzZXQgKyBpbm5lclJvd09mZnNldEIgKyBpbm5lclJvd0IpICogTSArCiAgICAgICAgICAgICAgICAgICAoY29sT2Zmc2V0QiArIGlubmVyQ29sQiAqIFZFQ1RPUl9TSVpFKV0pOwogICAgICB9IGVsc2UgaWYgKChpbm5lclJvd09mZnNldEIgKyBpbm5lclJvd0IpIDwgQksgJiYKICAgICAgICAgICAgICAgICAoaW5uZXJDb2xCICogVkVDVE9SX1NJWkUpIDwgQk0pIHsKICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxmbG9hdCAqPigKICAgICAgICAgICAgJkJzW2lubmVyUm93T2Zmc2V0QiArIGlubmVyUm93Ql1baW5uZXJDb2xCICogVkVDVE9SX1NJWkVdKSA9IDAuMGY7CiAgICAgIH0KICAgIH0KICAgIGlmICh0aHJlYWRJZHgueCA9PSBudW1UaHJlYWRzIC0gMSkgeyAvLyBsb2FkIHVzaW5nIGRpZmZlcmVudCB3YXJwCiAgICAgIFdzW0JOXSA9IEJfc2NhbGVbKHRpbGVPZmZzZXQgLyBCTE9DS19ESU0pICogTV9zY2FsZSArCiAgICAgICAgICAgICAgICAgICAgICAgKGNvbE9mZnNldEIgLyBCTE9DS19ESU0pXTsKICAgIH0KCiAgICBfX3N5bmN0aHJlYWRzKCk7CgogICAgZmxvYXQgYl9zY2FsZSA9IFdzW0JOXTsKICAgIGZsb2F0eDE2IGMgPSB7MH07CiAgICBmb3IgKHNpemVfdCBCS09mZnNldCA9IDA7IEJLT2Zmc2V0IDwgQks7IEJLT2Zmc2V0ICs9IDE2KSB7CiAgICAgIGZvciAoc2l6ZV90IHduID0gMDsgd24gPCBXSVRFUk47ICsrd24pIHsKICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDg7ICsraSkgewogICAgICAgICAgYVt3bl1baV0gPQogICAgICAgICAgICAgIEFzW0JLT2Zmc2V0ICsgd2FycFkgKiA4ICsgaV1bd2FycFJvd09mZnNldCArIHduICogMzIgKyB3YXJwWF07CiAgICAgICAgfQogICAgICB9CiAgICAgIGZvciAoc2l6ZV90IHdtID0gMDsgd20gPCBXSVRFUk07ICsrd20pIHsKICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDg7ICsraSkgewogICAgICAgICAgYlt3bV1baV0gPQogICAgICAgICAgICAgIEJzW0JLT2Zmc2V0ICsgd2FycFkgKiA4ICsgaV1bd2FycENvbE9mZnNldCArIHdtICogMzIgKyB3YXJwWF07CiAgICAgICAgfQogICAgICB9CiAgICAgIGZvciAoc2l6ZV90IHduID0gMDsgd24gPCBXSVRFUk47ICsrd24pIHsKICAgICAgICBmb3IgKHNpemVfdCB3bSA9IDA7IHdtIDwgV0lURVJNOyArK3dtKSB7CiAgICAgICAgICBjID0gX19idWlsdGluX2FtZGdjbl9tZm1hX2YzMl8zMngzMngxNl9mcDhfZnA4KAogICAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PGxvbmcgKj4oYVt3bl0pLAogICAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PGxvbmcgKj4oYlt3bV0pLCBjLCAwLCAwLCAwKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGZvciAoc2l6ZV90IHduID0gMDsgd24gPCBXSVRFUk47ICsrd24pIHsKICAgICAgZm9yIChzaXplX3Qgd20gPSAwOyB3bSA8IFdJVEVSTTsgKyt3bSkgewogICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgNDsgKytqKSB7CiAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkgewogICAgICAgICAgICBkW3duXVt3bV1baSArIGogKiA0XSArPQogICAgICAgICAgICAgICAgY1tpICsgaiAqIDRdICoKICAgICAgICAgICAgICAgIFdzW3dhcnBSb3dPZmZzZXQgKyB3biAqIDMyICsgaiAqIDggKyB3YXJwWSAqIDQgKyBpXSAqIGJfc2NhbGU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgX19zeW5jdGhyZWFkcygpOwogIH0KCiAgZm9yIChzaXplX3Qgd24gPSAwOyB3biA8IFdJVEVSTjsgKyt3bikgewogICAgZm9yIChzaXplX3Qgd20gPSAwOyB3bSA8IFdJVEVSTTsgKyt3bSkgewogICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IDQ7ICsraikgewogICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKSB7CiAgICAgICAgICBpZiAoKHJvd09mZnNldEMgKyB3YXJwUm93T2Zmc2V0ICsgd24gKiAzMiArIGogKiA4ICsgd2FycFkgKiA0ICsgaSkgPAogICAgICAgICAgICAgICAgICBOICYmCiAgICAgICAgICAgICAgKGNvbE9mZnNldEMgKyB3YXJwQ29sT2Zmc2V0ICsgd20gKiAzMiArIHdhcnBYKSA8IE0pCiAgICAgICAgICAgIENbKHJvd09mZnNldEMgKyB3YXJwUm93T2Zmc2V0ICsgd24gKiAzMiArIGogKiA4ICsgd2FycFkgKiA0ICsgaSkgKgogICAgICAgICAgICAgICAgICBNICsKICAgICAgICAgICAgICAoY29sT2Zmc2V0QyArIHdhcnBDb2xPZmZzZXQgKyB3bSAqIDMyICsgd2FycFgpXSA9CiAgICAgICAgICAgICAgICAoX19oaXBfYmZsb2F0MTYpZFt3bl1bd21dW2kgKyBqICogNF07CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQp9CgphdDo6VGVuc29yIGZwOF9tbShhdDo6VGVuc29yIEEsIGF0OjpUZW5zb3IgQiwgYXQ6OlRlbnNvciBBX3NjYWxlLAogICAgICAgICAgICAgICAgICBhdDo6VGVuc29yIEJfc2NhbGUsIGF0OjpUZW5zb3IgQykgewogIHNpemVfdCBOID0gQS5zaXplKDApLCBLID0gQS5zaXplKDEpLCBNID0gQi5zaXplKDApOwoKICBjb25zdCBzaXplX3QgQksgPSAxMjg7CiAgY29uc3Qgc2l6ZV90IEJOID0gMTI4OwogIGNvbnN0IHNpemVfdCBCTSA9IDEyODsKICBjb25zdCBzaXplX3QgV0lURVJOID0gMTsKICBjb25zdCBzaXplX3QgV0lURVJNID0gMTsKICBkaW0zIG51bVRocmVhZHMoKEJOICogQk0pIC8gKDE2ICogV0lURVJOICogV0lURVJNKSk7CiAgZGltMyBudW1CbG9ja3MoY2RpdihNLCBCTSksIGNkaXYoTiwgQk4pKTsKICBmcDhfbW1fa2VybmVsPEJOLCBCSywgQk0sIFdJVEVSTiwgV0lURVJNPjw8PG51bUJsb2NrcywgbnVtVGhyZWFkcz4+PigKICAgICAgKF9faGlwX2ZwOF9lNG0zX2ZudXogKilBLmRhdGFfcHRyKCksIChfX2hpcF9mcDhfZTRtM19mbnV6ICopQi5kYXRhX3B0cigpLAogICAgICBBX3NjYWxlLmRhdGFfcHRyPGZsb2F0PigpLCBCX3NjYWxlLmRhdGFfcHRyPGZsb2F0PigpLAogICAgICAoX19oaXBfYmZsb2F0MTYgKilDLmRhdGFfcHRyKCksIE4sIEssIE0pOwogIHJldHVybiBDOwp9CiIiIgoKY3BwX3NyYyA9IHIiIiIKYXQ6OlRlbnNvciBmcDhfbW0oYXQ6OlRlbnNvciBBLCBhdDo6VGVuc29yIEIsIGF0OjpUZW5zb3IgQV9zY2FsZSwKICAgICAgICAgICAgICAgICAgYXQ6OlRlbnNvciBCX3NjYWxlLCBhdDo6VGVuc29yIEMpOwoiIiIKCmlmIHN5cy5zdGRvdXQgaXMgTm9uZToKICAgIHN5cy5zdGRvdXQgPSBvcGVuKCIvZGV2L3N0ZG91dCIsICJ3IikKaWYgc3lzLnN0ZGVyciBpcyBOb25lOgogICAgc3lzLnN0ZGVyciA9IG9wZW4oIi9kZXYvc3RkZXJyIiwgInciKQoKbW9kdWxlID0gbG9hZF9pbmxpbmUoCiAgICBuYW1lPSJmcDhfbW0iLAogICAgY3BwX3NvdXJjZXM9W2NwcF9zcmNdLAogICAgY3VkYV9zb3VyY2VzPVtjdWRhX3NyY10sCiAgICBmdW5jdGlvbnM9WyJmcDhfbW0iXSwKICAgIHZlcmJvc2U9VHJ1ZSwKICAgIGV4dHJhX2N1ZGFfY2ZsYWdzPVsiLU8zIiwgIi0tb2ZmbG9hZC1hcmNoPWdmeDk0MiIsICItc3RkPWMrKzIwIl0sCikKCgpkZWYgY3VzdG9tX2tlcm5lbChkYXRhOiBpbnB1dF90KSAtPiBvdXRwdXRfdDoKICAgIGEsIGIsIGFfc2NhbGUsIGJfc2NhbGUsIGMgPSBkYXRhCiAgICByZXR1cm4gbW9kdWxlLmZwOF9tbShhLCBiLCBhX3NjYWxlLCBiX3NjYWxlLCBjKQo=

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 8178.

- IyFQT1BDT1JOIGxlYWRlcmJvYXJkIGFtZC1mcDgtbW0KIyFQT1BDT1JOIGdwdXMgTUkzMDAKCmltcG9ydCBvcwpmcm9tIHRhc2sgaW1wb3J0IGlucHV0X3QsIG91dHB1dF90CmZyb20gdG9yY2gudXRpbHMuY3BwX2V4dGVuc2lvbiBpbXBvcnQgbG9hZF9pbmxpbmUKCm9zLmVudmlyb25bIkNYWCJdID0gImNsYW5nKysiCgpjdWRhX3NyYyA9IHIiIiIKI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aGlwL2hpcF9ydW50aW1lLmg+CiNpbmNsdWRlIDxoaXAvYW1kX2RldGFpbC9hbWRfaGlwX2JmMTYuaD4KI2luY2x1ZGUgPGhpcC9hbWRfZGV0YWlsL2FtZF9oaXBfZnA4Lmg+CgpfX2hvc3RfXyBfX2RldmljZV9fIF9fZm9yY2VpbmxpbmVfXyBzaXplX3QgY2RpdihzaXplX3QgYSwgc2l6ZV90IGIpIHsKICByZXR1cm4gKGEgKyBiIC0gMSkgLyBiOwp9CgojZGVmaW5lIEJMT0NLX0RJTSAxMjgKCnRlbXBsYXRlIDxjb25zdCBzaXplX3QgQk4sIGNvbnN0IHNpemVfdCBCSywgY29uc3Qgc2l6ZV90IEJNLAogICAgICAgICAgY29uc3Qgc2l6ZV90IFdJVEVSTiwgY29uc3Qgc2l6ZV90IFdJVEVSTT4KX19nbG9iYWxfXyB2b2lkIGZwOF9tbV9rZXJuZWwoY29uc3QgX19oaXBfZnA4X2U0bTNfZm51eiAqQSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19oaXBfZnA4X2U0bTNfZm51eiAqQiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQgKkFfc2NhbGUsIGNvbnN0IGZsb2F0ICpCX3NjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2hpcF9iZmxvYXQxNiAqQywgc2l6ZV90IE4sIHNpemVfdCBLLCBzaXplX3QgTSkgewogIHVzaW5nIGZsb2F0eDE2ID0gX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDE2ICogc2l6ZW9mKGZsb2F0KSkpKSBmbG9hdDsKCiAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgVkVDVE9SX1NJWkUgPSA0OwogIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IFdBUlBTSVpFID0gNjQ7CiAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgV04gPSAzMiAqIFdJVEVSTjsKICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBXTSA9IDMyICogV0lURVJNOwogIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bVRocmVhZHMgPSAoQk4gKiBCTSkgLyAoMTYgKiBXSVRFUk4gKiBXSVRFUk0pOwogIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IFNVQkJOID0gQk4gLyBWRUNUT1JfU0laRTsKICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBTVUJCTSA9IEJNIC8gVkVDVE9SX1NJWkU7CiAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qgc3RyaWRlQSA9IG51bVRocmVhZHMgLyBTVUJCTjsKICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBzdHJpZGVCID0gbnVtVGhyZWFkcyAvIFNVQkJNOwoKICBzaXplX3Qgcm93T2Zmc2V0QyA9IGJsb2NrSWR4LnkgKiBCTjsKICBzaXplX3QgY29sT2Zmc2V0QyA9IGJsb2NrSWR4LnggKiBCTTsKICBzaXplX3QgY29sT2Zmc2V0QSA9IHJvd09mZnNldEM7CiAgc2l6ZV90IGNvbE9mZnNldEIgPSBjb2xPZmZzZXRDOwogIHNpemVfdCBNX3NjYWxlID0gY2RpdihNLCBCTE9DS19ESU0pOwoKICBzdGF0aWNfYXNzZXJ0KG51bVRocmVhZHMgJSBCTiA9PSAwLCAiQk4gc2hvdWxkIGJlIGEgbXVsdGlwbGUgb2YgbnVtVGhyZWFkcyIpOwogIHN0YXRpY19hc3NlcnQobnVtVGhyZWFkcyAlIEJNID09IDAsICJCTSBzaG91bGQgYmUgYSBtdWx0aXBsZSBvZiBudW1UaHJlYWRzIik7CiAgc3RhdGljX2Fzc2VydChCSyA8PSAxMjggJiYgQk0gPD0gMTI4LCAiUmFuZ2UgYWJvdmUgMTI4IGlzIG5vdCBzdXBwb3J0ZWQiKTsKCiAgc2l6ZV90IGlubmVyQ29sQSA9IHRocmVhZElkeC54ICUgU1VCQk47CiAgc2l6ZV90IGlubmVyUm93QSA9IHRocmVhZElkeC54IC8gU1VCQk47CiAgc2l6ZV90IGlubmVyQ29sQiA9IHRocmVhZElkeC54ICUgU1VCQk07CiAgc2l6ZV90IGlubmVyUm93QiA9IHRocmVhZElkeC54IC8gU1VCQk07CgogIHNpemVfdCBsYW5lSWR4ID0gdGhyZWFkSWR4LnggJSBXQVJQU0laRTsKICBzaXplX3Qgd2FycElkeCA9IHRocmVhZElkeC54IC8gV0FSUFNJWkU7CiAgc2l6ZV90IHdhcnBDb2xPZmZzZXQgPSAod2FycElkeCAlIChCTSAvIFdNKSkgKiBXTTsKICBzaXplX3Qgd2FycFJvd09mZnNldCA9ICh3YXJwSWR4IC8gKEJNIC8gV00pKSAqIFdOOwogIHNpemVfdCB3YXJwWCA9IGxhbmVJZHggJSAzMjsKICBzaXplX3Qgd2FycFkgPSBsYW5lSWR4IC8gMzI7CgogIF9fc2hhcmVkX18gX19oaXBfZnA4X2U0bTNfZm51eiBBc1tCS11bQk5dLCBCc1tCS11bQk1dOwogIF9fc2hhcmVkX18gZmxvYXQgV3NbQk4gKyAxXTsKCiAgX19oaXBfZnA4X2U0bTNfZm51eiBhW1dJVEVSTl1bOF0sIGJbV0lURVJNXVs4XTsKICBmbG9hdHgxNiBkW1dJVEVSTl1bV0lURVJNXSA9IHswfTsKICBmbG9hdCBiX3NjYWxlOwoKICBmb3IgKHNpemVfdCB0aWxlT2Zmc2V0ID0gMDsgdGlsZU9mZnNldCA8IEs7IHRpbGVPZmZzZXQgKz0gQkspIHsKICAgIC8vIGxvYWQgZnJvbSBnbG9iYWwgdG8gc2hhcmVkIG1lbW9yeSBpbiBjb2FsZXNjZWQgbWFubmVyCiAgICBmb3IgKHNpemVfdCBpbm5lclJvd09mZnNldEEgPSAwOyBpbm5lclJvd09mZnNldEEgPCBCSzsKICAgICAgICAgaW5uZXJSb3dPZmZzZXRBICs9IHN0cmlkZUEpIHsKICAgICAgaWYgKCh0aWxlT2Zmc2V0ICsgaW5uZXJSb3dPZmZzZXRBICsgaW5uZXJSb3dBKSA8IEsgJiYKICAgICAgICAgIChjb2xPZmZzZXRBICsgaW5uZXJDb2xBICogVkVDVE9SX1NJWkUpIDwgTiAmJgogICAgICAgICAgKGlubmVyUm93T2Zmc2V0QSArIGlubmVyUm93QSkgPCBCSykgewogICAgICAgICpyZWludGVycHJldF9jYXN0PGZsb2F0ICo+KAogICAgICAgICAgICAmQXNbaW5uZXJSb3dPZmZzZXRBICsgaW5uZXJSb3dBXVtpbm5lckNvbEEgKiBWRUNUT1JfU0laRV0pID0KICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQgKj4oCiAgICAgICAgICAgICAgICAmQVsodGlsZU9mZnNldCArIGlubmVyUm93T2Zmc2V0QSArIGlubmVyUm93QSkgKiBOICsKICAgICAgICAgICAgICAgICAgIChjb2xPZmZzZXRBICsgaW5uZXJDb2xBICogVkVDVE9SX1NJWkUpXSk7CiAgICAgICAgaWYgKHRocmVhZElkeC54IDwgU1VCQk4pIHsKICAgICAgICAgICpyZWludGVycHJldF9jYXN0PGZsb2F0NCAqPigmV3NbdGhyZWFkSWR4LnggKiBWRUNUT1JfU0laRV0pID0KICAgICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdDQgKj4oCiAgICAgICAgICAgICAgICAgICZBX3NjYWxlWygodGlsZU9mZnNldCArIGlubmVyUm93T2Zmc2V0QSArIGlubmVyUm93QSkgLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgQkxPQ0tfRElNKSAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbE9mZnNldEEgKyBpbm5lckNvbEEgKiBWRUNUT1JfU0laRSldKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoKGlubmVyUm93T2Zmc2V0QSArIGlubmVyUm93QSkgPCBCSykgewogICAgICAgICpyZWludGVycHJldF9jYXN0PGZsb2F0ICo+KAogICAgICAgICAgICAmQXNbaW5uZXJSb3dPZmZzZXRBICsgaW5uZXJSb3dBXVtpbm5lckNvbEEgKiBWRUNUT1JfU0laRV0pID0gMC4wZjsKICAgICAgfQogICAgfQogICAgZm9yIChzaXplX3QgaW5uZXJSb3dPZmZzZXRCID0gMDsgaW5uZXJSb3dPZmZzZXRCIDwgQks7CiAgICAgICAgIGlubmVyUm93T2Zmc2V0QiArPSBzdHJpZGVCKSB7CiAgICAgIGlmICgodGlsZU9mZnNldCArIGlubmVyUm93T2Zmc2V0QiArIGlubmVyUm93QikgPCBLICYmCiAgICAgICAgICAoY29sT2Zmc2V0QiArIGlubmVyQ29sQiAqIFZFQ1RPUl9TSVpFKSA8IE0gJiYKICAgICAgICAgIChpbm5lclJvd09mZnNldEIgKyBpbm5lclJvd0IpIDwgQksgJiYKICAgICAgICAgIChpbm5lckNvbEIgKiBWRUNUT1JfU0laRSkgPCBCTSkgewogICAgICAgICpyZWludGVycHJldF9jYXN0PGZsb2F0ICo+KAogICAgICAgICAgICAmQnNbaW5uZXJSb3dPZmZzZXRCICsgaW5uZXJSb3dCXVtpbm5lckNvbEIgKiBWRUNUT1JfU0laRV0pID0KICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQgKj4oCiAgICAgICAgICAgICAgICAmQlsodGlsZU9mZnNldCArIGlubmVyUm93T2Zmc2V0QiArIGlubmVyUm93QikgKiBNICsKICAgICAgICAgICAgICAgICAgIChjb2xPZmZzZXRCICsgaW5uZXJDb2xCICogVkVDVE9SX1NJWkUpXSk7CiAgICAgICAgaWYgKHRocmVhZElkeC54ID09IFdBUlBTSVpFKSB7IC8vIGxvYWQgdXNpbmcgc2Vjb25kIHdhcnAKICAgICAgICAgIFdzW0JOXSA9CiAgICAgICAgICAgICAgQl9zY2FsZVsoKHRpbGVPZmZzZXQgKyBpbm5lclJvd09mZnNldEIgKyBpbm5lclJvd0IpIC8gQkxPQ0tfRElNKSAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgTV9zY2FsZSArCiAgICAgICAgICAgICAgICAgICAgICAoKGNvbE9mZnNldEIgKyBpbm5lckNvbEIgKiBWRUNUT1JfU0laRSkgLyBCTE9DS19ESU0pXTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoKGlubmVyUm93T2Zmc2V0QiArIGlubmVyUm93QikgPCBCSyAmJgogICAgICAgICAgICAgICAgIChpbm5lckNvbEIgKiBWRUNUT1JfU0laRSkgPCBCTSkgewogICAgICAgICpyZWludGVycHJldF9jYXN0PGZsb2F0ICo+KAogICAgICAgICAgICAmQnNbaW5uZXJSb3dPZmZzZXRCICsgaW5uZXJSb3dCXVtpbm5lckNvbEIgKiBWRUNUT1JfU0laRV0pID0gMC4wZjsKICAgICAgfQogICAgfQoKICAgIF9fc3luY3RocmVhZHMoKTsKCiAgICBmb3IgKHNpemVfdCBCS09mZnNldCA9IDA7IEJLT2Zmc2V0IDwgQks7IEJLT2Zmc2V0ICs9IDE2KSB7CiAgICAgIGZvciAoc2l6ZV90IHduID0gMDsgd24gPCBXSVRFUk47ICsrd24pIHsKICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDg7ICsraSkgewogICAgICAgICAgYVt3bl1baV0gPQogICAgICAgICAgICAgIEFzW0JLT2Zmc2V0ICsgd2FycFkgKiA4ICsgaV1bd2FycFJvd09mZnNldCArIHduICogMzIgKyB3YXJwWF07CiAgICAgICAgfQogICAgICB9CiAgICAgIGZvciAoc2l6ZV90IHdtID0gMDsgd20gPCBXSVRFUk07ICsrd20pIHsKICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDg7ICsraSkgewogICAgICAgICAgYlt3bV1baV0gPQogICAgICAgICAgICAgIEJzW0JLT2Zmc2V0ICsgd2FycFkgKiA4ICsgaV1bd2FycENvbE9mZnNldCArIHdtICogMzIgKyB3YXJwWF07CiAgICAgICAgfQogICAgICB9CiAgICAgIGZsb2F0IGJfc2NhbGUgPSBXc1tCTl07CiAgICAgIGZvciAoc2l6ZV90IHduID0gMDsgd24gPCBXSVRFUk47ICsrd24pIHsKICAgICAgICBmb3IgKHNpemVfdCB3bSA9IDA7IHdtIDwgV0lURVJNOyArK3dtKSB7CiAgICAgICAgICBmbG9hdHgxNiBjID0gezB9OwogICAgICAgICAgYyA9IF9fYnVpbHRpbl9hbWRnY25fbWZtYV9mMzJfMzJ4MzJ4MTZfZnA4X2ZwOCgKICAgICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxsb25nICo+KGFbd25dKSwKICAgICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxsb25nICo+KGJbd21dKSwgYywgMCwgMCwgMCk7CiAgICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IDQ7ICsraikgewogICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkgewogICAgICAgICAgICAgIGRbd25dW3dtXVtpICsgaiAqIDRdICs9CiAgICAgICAgICAgICAgICAgIGNbaSArIGogKiA0XSAqCiAgICAgICAgICAgICAgICAgIFdzW3dhcnBSb3dPZmZzZXQgKyB3biAqIDMyICsgaiAqIDggKyB3YXJwWSAqIDQgKyBpXSAqIGJfc2NhbGU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBfX3N5bmN0aHJlYWRzKCk7CiAgfQoKICBmb3IgKHNpemVfdCB3biA9IDA7IHduIDwgV0lURVJOOyArK3duKSB7CiAgICBmb3IgKHNpemVfdCB3bSA9IDA7IHdtIDwgV0lURVJNOyArK3dtKSB7CiAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgNDsgKytqKSB7CiAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpIHsKICAgICAgICAgIGlmICgocm93T2Zmc2V0QyArIHdhcnBSb3dPZmZzZXQgKyB3biAqIDMyICsgaiAqIDggKyB3YXJwWSAqIDQgKyBpKSA8CiAgICAgICAgICAgICAgICAgIE4gJiYKICAgICAgICAgICAgICAoY29sT2Zmc2V0QyArIHdhcnBDb2xPZmZzZXQgKyB3bSAqIDMyICsgd2FycFgpIDwgTSkKICAgICAgICAgICAgQ1socm93T2Zmc2V0QyArIHdhcnBSb3dPZmZzZXQgKyB3biAqIDMyICsgaiAqIDggKyB3YXJwWSAqIDQgKyBpKSAqCiAgICAgICAgICAgICAgICAgIE0gKwogICAgICAgICAgICAgIChjb2xPZmZzZXRDICsgd2FycENvbE9mZnNldCArIHdtICogMzIgKyB3YXJwWCldID0KICAgICAgICAgICAgICAgIChfX2hpcF9iZmxvYXQxNilkW3duXVt3bV1baSArIGogKiA0XTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9Cn0KCmF0OjpUZW5zb3IgZnA4X21tKGF0OjpUZW5zb3IgQSwgYXQ6OlRlbnNvciBCLCBhdDo6VGVuc29yIEFfc2NhbGUsCiAgICAgICAgICAgICAgICAgIGF0OjpUZW5zb3IgQl9zY2FsZSwgYXQ6OlRlbnNvciBDKSB7CiAgc2l6ZV90IE4gPSBBLnNpemUoMCksIEsgPSBBLnNpemUoMSksIE0gPSBCLnNpemUoMCk7CgogIGNvbnN0IHNpemVfdCBCSyA9IDEyODsKICBjb25zdCBzaXplX3QgQk4gPSAxMjg7CiAgY29uc3Qgc2l6ZV90IEJNID0gMTI4OwogIGNvbnN0IHNpemVfdCBXSVRFUk4gPSAxOwogIGNvbnN0IHNpemVfdCBXSVRFUk0gPSAxOwogIGRpbTMgbnVtVGhyZWFkcygoQk4gKiBCTSkgLyAoMTYgKiBXSVRFUk4gKiBXSVRFUk0pKTsKICBkaW0zIG51bUJsb2NrcyhjZGl2KE0sIEJNKSwgY2RpdihOLCBCTikpOwogIGZwOF9tbV9rZXJuZWw8Qk4sIEJLLCBCTSwgV0lURVJOLCBXSVRFUk0+PDw8bnVtQmxvY2tzLCBudW1UaHJlYWRzPj4+KAogICAgICAoX19oaXBfZnA4X2U0bTNfZm51eiAqKUEuZGF0YV9wdHIoKSwgKF9faGlwX2ZwOF9lNG0zX2ZudXogKilCLmRhdGFfcHRyKCksCiAgICAgIEFfc2NhbGUuZGF0YV9wdHI8ZmxvYXQ+KCksIEJfc2NhbGUuZGF0YV9wdHI8ZmxvYXQ+KCksCiAgICAgIChfX2hpcF9iZmxvYXQxNiAqKUMuZGF0YV9wdHIoKSwgTiwgSywgTSk7CiAgcmV0dXJuIEM7Cn0KIiIiCgpjcHBfc3JjID0gciIiIgphdDo6VGVuc29yIGZwOF9tbShhdDo6VGVuc29yIEEsIGF0OjpUZW5zb3IgQiwgYXQ6OlRlbnNvciBBX3NjYWxlLAogICAgICAgICAgICAgICAgICBhdDo6VGVuc29yIEJfc2NhbGUsIGF0OjpUZW5zb3IgQyk7CiIiIgoKaW1wb3J0IHN5cwoKaWYgc3lzLnN0ZG91dCBpcyBOb25lOgogICAgc3lzLnN0ZG91dCA9IG9wZW4oIi9kZXYvc3Rkb3V0IiwgInciKQppZiBzeXMuc3RkZXJyIGlzIE5vbmU6CiAgICBzeXMuc3RkZXJyID0gb3BlbigiL2Rldi9zdGRlcnIiLCAidyIpCgptb2R1bGUgPSBsb2FkX2lubGluZSgKICAgIG5hbWU9ImZwOF9tbSIsCiAgICBjcHBfc291cmNlcz1bY3BwX3NyY10sCiAgICBjdWRhX3NvdXJjZXM9W2N1ZGFfc3JjXSwKICAgIGZ1bmN0aW9ucz1bImZwOF9tbSJdLAogICAgdmVyYm9zZT1UcnVlLAogICAgZXh0cmFfY3VkYV9jZmxhZ3M9WyItTzMiLCAiLS1vZmZsb2FkLWFyY2g9Z2Z4OTQyIiwgIi1zdGQ9YysrMjAiXSwKKQoKCmRlZiBjdXN0b21fa2VybmVsKGRhdGE6IGlucHV0X3QpIC0+IG91dHB1dF90OgogICAgYSwgYiwgYV9zY2FsZSwgYl9zY2FsZSwgYyA9IGRhdGEKICAgIHJldHVybiBtb2R1bGUuZnA4X21tKGEsIGIsIGFfc2NhbGUsIGJfc2NhbGUsIGMpCg==
No newline at end of file
+ IyFQT1BDT1JOIGxlYWRlcmJvYXJkIGFtZC1mcDgtbW0KIyFQT1BDT1JOIGdwdXMgTUkzMDAKCmltcG9ydCBvcwppbXBvcnQgc3lzCmZyb20gdGFzayBpbXBvcnQgaW5wdXRfdCwgb3V0cHV0X3QKZnJvbSB0b3JjaC51dGlscy5jcHBfZXh0ZW5zaW9uIGltcG9ydCBsb2FkX2lubGluZQoKb3MuZW52aXJvblsiQ1hYIl0gPSAiY2xhbmcrKyIKCmN1ZGFfc3JjID0gciIiIgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxoaXAvaGlwX3J1bnRpbWUuaD4KI2luY2x1ZGUgPGhpcC9hbWRfZGV0YWlsL2FtZF9oaXBfYmYxNi5oPgojaW5jbHVkZSA8aGlwL2FtZF9kZXRhaWwvYW1kX2hpcF9mcDguaD4KCl9faG9zdF9fIF9fZGV2aWNlX18gX19mb3JjZWlubGluZV9fIHNpemVfdCBjZGl2KHNpemVfdCBhLCBzaXplX3QgYikgewogIHJldHVybiAoYSArIGIgLSAxKSAvIGI7Cn0KCiNkZWZpbmUgQkxPQ0tfRElNIDEyOAoKdGVtcGxhdGUgPGNvbnN0IHNpemVfdCBCTiwgY29uc3Qgc2l6ZV90IEJLLCBjb25zdCBzaXplX3QgQk0sCiAgICAgICAgICBjb25zdCBzaXplX3QgV0lURVJOLCBjb25zdCBzaXplX3QgV0lURVJNPgpfX2dsb2JhbF9fIHZvaWQgZnA4X21tX2tlcm5lbChjb25zdCBfX2hpcF9mcDhfZTRtM19mbnV6ICpBLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2hpcF9mcDhfZTRtM19mbnV6ICpCLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCAqQV9zY2FsZSwgY29uc3QgZmxvYXQgKkJfc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faGlwX2JmbG9hdDE2ICpDLCBzaXplX3QgTiwgc2l6ZV90IEssIHNpemVfdCBNKSB7CiAgdXNpbmcgZmxvYXR4MTYgPSBfX2F0dHJpYnV0ZV9fKChfX3ZlY3Rvcl9zaXplX18oMTYgKiBzaXplb2YoZmxvYXQpKSkpIGZsb2F0OwoKICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBWRUNUT1JfU0laRSA9IDQ7CiAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgV0FSUFNJWkUgPSA2NDsKICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBXTiA9IDMyICogV0lURVJOOwogIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IFdNID0gMzIgKiBXSVRFUk07CiAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtVGhyZWFkcyA9IChCTiAqIEJNKSAvICgxNiAqIFdJVEVSTiAqIFdJVEVSTSk7CiAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgU1VCQk4gPSBCTiAvIFZFQ1RPUl9TSVpFOwogIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IFNVQkJNID0gQk0gLyBWRUNUT1JfU0laRTsKICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBzdHJpZGVBID0gbnVtVGhyZWFkcyAvIFNVQkJOOwogIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IHN0cmlkZUIgPSBudW1UaHJlYWRzIC8gU1VCQk07CgogIHNpemVfdCByb3dPZmZzZXRDID0gYmxvY2tJZHgueSAqIEJOOwogIHNpemVfdCBjb2xPZmZzZXRDID0gYmxvY2tJZHgueCAqIEJNOwogIHNpemVfdCBjb2xPZmZzZXRBID0gcm93T2Zmc2V0QzsKICBzaXplX3QgY29sT2Zmc2V0QiA9IGNvbE9mZnNldEM7CiAgc2l6ZV90IE1fc2NhbGUgPSBjZGl2KE0sIEJMT0NLX0RJTSk7CgogIHN0YXRpY19hc3NlcnQobnVtVGhyZWFkcyAlIEJOID09IDAsICJCTiBzaG91bGQgYmUgYSBtdWx0aXBsZSBvZiBudW1UaHJlYWRzIik7CiAgc3RhdGljX2Fzc2VydChudW1UaHJlYWRzICUgQk0gPT0gMCwgIkJNIHNob3VsZCBiZSBhIG11bHRpcGxlIG9mIG51bVRocmVhZHMiKTsKICBzdGF0aWNfYXNzZXJ0KEJLIDw9IDEyOCAmJiBCTSA8PSAxMjgsICJSYW5nZSBhYm92ZSAxMjggaXMgbm90IHN1cHBvcnRlZCIpOwoKICBzaXplX3QgaW5uZXJDb2xBID0gdGhyZWFkSWR4LnggJSBTVUJCTjsKICBzaXplX3QgaW5uZXJSb3dBID0gdGhyZWFkSWR4LnggLyBTVUJCTjsKICBzaXplX3QgaW5uZXJDb2xCID0gdGhyZWFkSWR4LnggJSBTVUJCTTsKICBzaXplX3QgaW5uZXJSb3dCID0gdGhyZWFkSWR4LnggLyBTVUJCTTsKCiAgc2l6ZV90IGxhbmVJZHggPSB0aHJlYWRJZHgueCAlIFdBUlBTSVpFOwogIHNpemVfdCB3YXJwSWR4ID0gdGhyZWFkSWR4LnggLyBXQVJQU0laRTsKICBzaXplX3Qgd2FycENvbE9mZnNldCA9ICh3YXJwSWR4ICUgKEJNIC8gV00pKSAqIFdNOwogIHNpemVfdCB3YXJwUm93T2Zmc2V0ID0gKHdhcnBJZHggLyAoQk0gLyBXTSkpICogV047CiAgc2l6ZV90IHdhcnBYID0gbGFuZUlkeCAlIDMyOwogIHNpemVfdCB3YXJwWSA9IGxhbmVJZHggLyAzMjsKCiAgX19zaGFyZWRfXyBfX2hpcF9mcDhfZTRtM19mbnV6IEFzW0JLXVtCTl0sIEJzW0JLXVtCTV07CiAgX19zaGFyZWRfXyBmbG9hdCBXc1tCTiArIDFdOwoKICBfX2hpcF9mcDhfZTRtM19mbnV6IGFbV0lURVJOXVs4XSwgYltXSVRFUk1dWzhdOwogIGZsb2F0eDE2IGRbV0lURVJOXVtXSVRFUk1dID0gezB9OwogIGZsb2F0IGJfc2NhbGU7CgogIGZvciAoc2l6ZV90IHRpbGVPZmZzZXQgPSAwOyB0aWxlT2Zmc2V0IDwgSzsgdGlsZU9mZnNldCArPSBCSykgewogICAgLy8gbG9hZCBmcm9tIGdsb2JhbCB0byBzaGFyZWQgbWVtb3J5IGluIGNvYWxlc2NlZCBtYW5uZXIKICAgIGZvciAoc2l6ZV90IGlubmVyUm93T2Zmc2V0QSA9IDA7IGlubmVyUm93T2Zmc2V0QSA8IEJLOwogICAgICAgICBpbm5lclJvd09mZnNldEEgKz0gc3RyaWRlQSkgewogICAgICBpZiAoKHRpbGVPZmZzZXQgKyBpbm5lclJvd09mZnNldEEgKyBpbm5lclJvd0EpIDwgSyAmJgogICAgICAgICAgKGNvbE9mZnNldEEgKyBpbm5lckNvbEEgKiBWRUNUT1JfU0laRSkgPCBOICYmCiAgICAgICAgICAoaW5uZXJSb3dPZmZzZXRBICsgaW5uZXJSb3dBKSA8IEJLKSB7CiAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQgKj4oCiAgICAgICAgICAgICZBc1tpbm5lclJvd09mZnNldEEgKyBpbm5lclJvd0FdW2lubmVyQ29sQSAqIFZFQ1RPUl9TSVpFXSkgPQogICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCAqPigKICAgICAgICAgICAgICAgICZBWyh0aWxlT2Zmc2V0ICsgaW5uZXJSb3dPZmZzZXRBICsgaW5uZXJSb3dBKSAqIE4gKwogICAgICAgICAgICAgICAgICAgKGNvbE9mZnNldEEgKyBpbm5lckNvbEEgKiBWRUNUT1JfU0laRSldKTsKICAgICAgfSBlbHNlIGlmICgoaW5uZXJSb3dPZmZzZXRBICsgaW5uZXJSb3dBKSA8IEJLKSB7CiAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQgKj4oCiAgICAgICAgICAgICZBc1tpbm5lclJvd09mZnNldEEgKyBpbm5lclJvd0FdW2lubmVyQ29sQSAqIFZFQ1RPUl9TSVpFXSkgPSAwLjBmOwogICAgICB9CiAgICB9CiAgICBpZiAodGhyZWFkSWR4LnggPCBCTikgewogICAgICAqcmVpbnRlcnByZXRfY2FzdDxmbG9hdDQgKj4oJldzW3RocmVhZElkeC54ICogVkVDVE9SX1NJWkVdKSA9CiAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdDQgKj4oCiAgICAgICAgICAgICAgJkFfc2NhbGVbKHRpbGVPZmZzZXQgLyBCTE9DS19ESU0pICogTiArCiAgICAgICAgICAgICAgICAgICAgICAgKGNvbE9mZnNldEEgKyB0aHJlYWRJZHgueCAqIFZFQ1RPUl9TSVpFKV0pOwogICAgfQogICAgZm9yIChzaXplX3QgaW5uZXJSb3dPZmZzZXRCID0gMDsgaW5uZXJSb3dPZmZzZXRCIDwgQks7CiAgICAgICAgIGlubmVyUm93T2Zmc2V0QiArPSBzdHJpZGVCKSB7CiAgICAgIGlmICgodGlsZU9mZnNldCArIGlubmVyUm93T2Zmc2V0QiArIGlubmVyUm93QikgPCBLICYmCiAgICAgICAgICAoY29sT2Zmc2V0QiArIGlubmVyQ29sQiAqIFZFQ1RPUl9TSVpFKSA8IE0gJiYKICAgICAgICAgIChpbm5lclJvd09mZnNldEIgKyBpbm5lclJvd0IpIDwgQkspIHsKICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxmbG9hdCAqPigKICAgICAgICAgICAgJkJzW2lubmVyUm93T2Zmc2V0QiArIGlubmVyUm93Ql1baW5uZXJDb2xCICogVkVDVE9SX1NJWkVdKSA9CiAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0ICo+KAogICAgICAgICAgICAgICAgJkJbKHRpbGVPZmZzZXQgKyBpbm5lclJvd09mZnNldEIgKyBpbm5lclJvd0IpICogTSArCiAgICAgICAgICAgICAgICAgICAoY29sT2Zmc2V0QiArIGlubmVyQ29sQiAqIFZFQ1RPUl9TSVpFKV0pOwogICAgICB9IGVsc2UgaWYgKChpbm5lclJvd09mZnNldEIgKyBpbm5lclJvd0IpIDwgQksgJiYKICAgICAgICAgICAgICAgICAoaW5uZXJDb2xCICogVkVDVE9SX1NJWkUpIDwgQk0pIHsKICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxmbG9hdCAqPigKICAgICAgICAgICAgJkJzW2lubmVyUm93T2Zmc2V0QiArIGlubmVyUm93Ql1baW5uZXJDb2xCICogVkVDVE9SX1NJWkVdKSA9IDAuMGY7CiAgICAgIH0KICAgIH0KICAgIGlmICh0aHJlYWRJZHgueCA9PSBudW1UaHJlYWRzIC0gMSkgeyAvLyBsb2FkIHVzaW5nIGRpZmZlcmVudCB3YXJwCiAgICAgIFdzW0JOXSA9IEJfc2NhbGVbKHRpbGVPZmZzZXQgLyBCTE9DS19ESU0pICogTV9zY2FsZSArCiAgICAgICAgICAgICAgICAgICAgICAgKGNvbE9mZnNldEIgLyBCTE9DS19ESU0pXTsKICAgIH0KCiAgICBfX3N5bmN0aHJlYWRzKCk7CgogICAgZmxvYXQgYl9zY2FsZSA9IFdzW0JOXTsKICAgIGZsb2F0eDE2IGMgPSB7MH07CiAgICBmb3IgKHNpemVfdCBCS09mZnNldCA9IDA7IEJLT2Zmc2V0IDwgQks7IEJLT2Zmc2V0ICs9IDE2KSB7CiAgICAgIGZvciAoc2l6ZV90IHduID0gMDsgd24gPCBXSVRFUk47ICsrd24pIHsKICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDg7ICsraSkgewogICAgICAgICAgYVt3bl1baV0gPQogICAgICAgICAgICAgIEFzW0JLT2Zmc2V0ICsgd2FycFkgKiA4ICsgaV1bd2FycFJvd09mZnNldCArIHduICogMzIgKyB3YXJwWF07CiAgICAgICAgfQogICAgICB9CiAgICAgIGZvciAoc2l6ZV90IHdtID0gMDsgd20gPCBXSVRFUk07ICsrd20pIHsKICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDg7ICsraSkgewogICAgICAgICAgYlt3bV1baV0gPQogICAgICAgICAgICAgIEJzW0JLT2Zmc2V0ICsgd2FycFkgKiA4ICsgaV1bd2FycENvbE9mZnNldCArIHdtICogMzIgKyB3YXJwWF07CiAgICAgICAgfQogICAgICB9CiAgICAgIGZvciAoc2l6ZV90IHduID0gMDsgd24gPCBXSVRFUk47ICsrd24pIHsKICAgICAgICBmb3IgKHNpemVfdCB3bSA9IDA7IHdtIDwgV0lURVJNOyArK3dtKSB7CiAgICAgICAgICBjID0gX19idWlsdGluX2FtZGdjbl9tZm1hX2YzMl8zMngzMngxNl9mcDhfZnA4KAogICAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PGxvbmcgKj4oYVt3bl0pLAogICAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PGxvbmcgKj4oYlt3bV0pLCBjLCAwLCAwLCAwKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGZvciAoc2l6ZV90IHduID0gMDsgd24gPCBXSVRFUk47ICsrd24pIHsKICAgICAgZm9yIChzaXplX3Qgd20gPSAwOyB3bSA8IFdJVEVSTTsgKyt3bSkgewogICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgNDsgKytqKSB7CiAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkgewogICAgICAgICAgICBkW3duXVt3bV1baSArIGogKiA0XSArPQogICAgICAgICAgICAgICAgY1tpICsgaiAqIDRdICoKICAgICAgICAgICAgICAgIFdzW3dhcnBSb3dPZmZzZXQgKyB3biAqIDMyICsgaiAqIDggKyB3YXJwWSAqIDQgKyBpXSAqIGJfc2NhbGU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgX19zeW5jdGhyZWFkcygpOwogIH0KCiAgZm9yIChzaXplX3Qgd24gPSAwOyB3biA8IFdJVEVSTjsgKyt3bikgewogICAgZm9yIChzaXplX3Qgd20gPSAwOyB3bSA8IFdJVEVSTTsgKyt3bSkgewogICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IDQ7ICsraikgewogICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKSB7CiAgICAgICAgICBpZiAoKHJvd09mZnNldEMgKyB3YXJwUm93T2Zmc2V0ICsgd24gKiAzMiArIGogKiA4ICsgd2FycFkgKiA0ICsgaSkgPAogICAgICAgICAgICAgICAgICBOICYmCiAgICAgICAgICAgICAgKGNvbE9mZnNldEMgKyB3YXJwQ29sT2Zmc2V0ICsgd20gKiAzMiArIHdhcnBYKSA8IE0pCiAgICAgICAgICAgIENbKHJvd09mZnNldEMgKyB3YXJwUm93T2Zmc2V0ICsgd24gKiAzMiArIGogKiA4ICsgd2FycFkgKiA0ICsgaSkgKgogICAgICAgICAgICAgICAgICBNICsKICAgICAgICAgICAgICAoY29sT2Zmc2V0QyArIHdhcnBDb2xPZmZzZXQgKyB3bSAqIDMyICsgd2FycFgpXSA9CiAgICAgICAgICAgICAgICAoX19oaXBfYmZsb2F0MTYpZFt3bl1bd21dW2kgKyBqICogNF07CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQp9CgphdDo6VGVuc29yIGZwOF9tbShhdDo6VGVuc29yIEEsIGF0OjpUZW5zb3IgQiwgYXQ6OlRlbnNvciBBX3NjYWxlLAogICAgICAgICAgICAgICAgICBhdDo6VGVuc29yIEJfc2NhbGUsIGF0OjpUZW5zb3IgQykgewogIHNpemVfdCBOID0gQS5zaXplKDApLCBLID0gQS5zaXplKDEpLCBNID0gQi5zaXplKDApOwoKICBjb25zdCBzaXplX3QgQksgPSAxMjg7CiAgY29uc3Qgc2l6ZV90IEJOID0gMTI4OwogIGNvbnN0IHNpemVfdCBCTSA9IDEyODsKICBjb25zdCBzaXplX3QgV0lURVJOID0gMTsKICBjb25zdCBzaXplX3QgV0lURVJNID0gMTsKICBkaW0zIG51bVRocmVhZHMoKEJOICogQk0pIC8gKDE2ICogV0lURVJOICogV0lURVJNKSk7CiAgZGltMyBudW1CbG9ja3MoY2RpdihNLCBCTSksIGNkaXYoTiwgQk4pKTsKICBmcDhfbW1fa2VybmVsPEJOLCBCSywgQk0sIFdJVEVSTiwgV0lURVJNPjw8PG51bUJsb2NrcywgbnVtVGhyZWFkcz4+PigKICAgICAgKF9faGlwX2ZwOF9lNG0zX2ZudXogKilBLmRhdGFfcHRyKCksIChfX2hpcF9mcDhfZTRtM19mbnV6ICopQi5kYXRhX3B0cigpLAogICAgICBBX3NjYWxlLmRhdGFfcHRyPGZsb2F0PigpLCBCX3NjYWxlLmRhdGFfcHRyPGZsb2F0PigpLAogICAgICAoX19oaXBfYmZsb2F0MTYgKilDLmRhdGFfcHRyKCksIE4sIEssIE0pOwogIHJldHVybiBDOwp9CiIiIgoKY3BwX3NyYyA9IHIiIiIKYXQ6OlRlbnNvciBmcDhfbW0oYXQ6OlRlbnNvciBBLCBhdDo6VGVuc29yIEIsIGF0OjpUZW5zb3IgQV9zY2FsZSwKICAgICAgICAgICAgICAgICAgYXQ6OlRlbnNvciBCX3NjYWxlLCBhdDo6VGVuc29yIEMpOwoiIiIKCmlmIHN5cy5zdGRvdXQgaXMgTm9uZToKICAgIHN5cy5zdGRvdXQgPSBvcGVuKCIvZGV2L3N0ZG91dCIsICJ3IikKaWYgc3lzLnN0ZGVyciBpcyBOb25lOgogICAgc3lzLnN0ZGVyciA9IG9wZW4oIi9kZXYvc3RkZXJyIiwgInciKQoKbW9kdWxlID0gbG9hZF9pbmxpbmUoCiAgICBuYW1lPSJmcDhfbW0iLAogICAgY3BwX3NvdXJjZXM9W2NwcF9zcmNdLAogICAgY3VkYV9zb3VyY2VzPVtjdWRhX3NyY10sCiAgICBmdW5jdGlvbnM9WyJmcDhfbW0iXSwKICAgIHZlcmJvc2U9VHJ1ZSwKICAgIGV4dHJhX2N1ZGFfY2ZsYWdzPVsiLU8zIiwgIi0tb2ZmbG9hZC1hcmNoPWdmeDk0MiIsICItc3RkPWMrKzIwIl0sCikKCgpkZWYgY3VzdG9tX2tlcm5lbChkYXRhOiBpbnB1dF90KSAtPiBvdXRwdXRfdDoKICAgIGEsIGIsIGFfc2NhbGUsIGJfc2NhbGUsIGMgPSBkYXRhCiAgICByZXR1cm4gbW9kdWxlLmZwOF9tbShhLCBiLCBhX3NjYWxlLCBiX3NjYWxlLCBjKQo=
No newline at end of file

Best evidence level for this revision: reported

JSON