Skip to content
KernelIndex
Search⌘K

submission 12401

KernelBot user 7 · 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.

amd-fp8-mm-hip-v4.py
curl "https://kernelindex.com/api/v1/implementations/kernelbot-amd-fp8-mm-12401?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
113.6µs
#89 of 98
2025-04-29
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 256]
AMD Instinct MI300X
124.7µs
#89 of 98
2025-04-29
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 7168] · n=512 · seed=6563
AMD Instinct MI300X
198.4µs
#74 of 98
2025-04-29
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 1536]
AMD Instinct MI300X
199.4µs
#88 of 98
2025-04-29
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 7168] · n=576 · seed=12346
AMD Instinct MI300X
212.1µs
#73 of 98
2025-04-29
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 256]
AMD Instinct MI300X
395.4µs
#87 of 98
2025-04-29
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 512]
AMD Instinct MI300X
421.4µs
#88 of 98
2025-04-29
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 7168] · n=1536 · seed=8135
AMD Instinct MI300X
446.5µs
#86 of 98
2025-04-29
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 2048]
AMD Instinct MI300X
525.8µs
#88 of 98
2025-04-29
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 2304]
AMD Instinct MI300X
590.1µs
#90 of 98
2025-04-29
Show all 18 measurements ›
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 1536]
AMD Instinct MI300X
928.1µs
#87 of 98
2025-04-29
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=512 · seed=12341
AMD Instinct MI300X
1.09ms
#89 of 98
2025-04-29
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=576 · seed=9863
AMD Instinct MI300X
1.19ms
#89 of 98
2025-04-29
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 7168] · n=4608 · seed=7531
AMD Instinct MI300X
1.35ms
#91 of 98
2025-04-29
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=1536 · seed=6543
AMD Instinct MI300X
2.62ms
#94 of 98
2025-04-29
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 2048]
AMD Instinct MI300X
2.78ms
#92 of 98
2025-04-29
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 2304]
AMD Instinct MI300X
3.08ms
#93 of 98
2025-04-29
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=4608 · seed=65436
AMD Instinct MI300X
6.27ms
#92 of 98
2025-04-29

Reported · How evidence levels are derived →

Source and license

sourceavailable
revision digestsha256:03ad200086e8f25758a51e0ff6f3226bee134d75f1603094242b61be02277a00
license declaredunknown
license concludedunknown
imported2026-08-15

Kernel source

amd-fp8-mm-hip-v4.py1 lines
IyBUaGlzIHNjcmlwdCBwcm92aWRlcyBhIHRlbXBsYXRlIGZvciB1c2luZyBsb2FkX2lubGluZSB0byBydW4gYSBISVAga2VybmVsIGZvcg0KZnJvbSB0b3JjaC51dGlscy5jcHBfZXh0ZW5zaW9uIGltcG9ydCBsb2FkX2lubGluZQ0KZnJvbSB0YXNrIGltcG9ydCBpbnB1dF90LCBvdXRwdXRfdA0KQ1BQX1dSQVBQRVIgPSAiIiINCnZvaWQgZnA4X21tKHRvcmNoOjpUZW5zb3IgYSwgdG9yY2g6OlRlbnNvciBiLCB0b3JjaDo6VGVuc29yIGFzLCB0b3JjaDo6VGVuc29yIGJzLCB0b3JjaDo6VGVuc29yIGMpOw0KIiIiDQoNCkNVREFfU1JDID0gIiIiDQojaW5jbHVkZSA8aGlwL2FtZF9kZXRhaWwvYW1kX2hpcF9mcDguaD4NCiNpbmNsdWRlIDxoaXAvYW1kX2RldGFpbC9hbWRfaGlwX2JmMTYuaD4NCg0KY29uc3RleHByIGNvbnN0IGludCBCTE9DSyA9IDEyODsNCg0KX19nbG9iYWxfXyB2b2lkIGN1c3RvbV9rZXJuZWwoY29uc3QgX19oaXBfZnA4X2U0bTNfZm51eiogYSwgY29uc3QgX19oaXBfZnA4X2U0bTNfZm51eiogYiwgY29uc3QgZmxvYXQqIGFzLCBjb25zdCBmbG9hdCogYnMsDQogICAgICAgICAgICAgICAgICAgX19oaXBfYmZsb2F0MTYqIGMsIGludCBtLCBpbnQgbiwgaW50IGspIHsNCg0KICAgIC8vIFlvdXIgaW1wbGVtZW50YXRpb24gaGVyZQ0KICAgIC8vIGludCBjeCA9IHRocmVhZElkeC54ICsgYmxvY2tEaW0ueCAqIGJsb2NrSWR4Lng7DQogICAgLy8gaW50IGN5ID0gdGhyZWFkSWR4LnkgKyBibG9ja0RpbS55ICogYmxvY2tJZHgueTsNCiAgICAvLyBpZihjeCA+PSBtIHx8IGN5ID49IG4pIHJldHVybjsNCg0KICAgIGludCB0aHJlYWRfYmxvY2tfbSA9IGJsb2NrSWR4LnggKiAxNjsNCiAgICBpbnQgdGhyZWFkX2Jsb2NrX24gPSBibG9ja0lkeC55ICogMTY7DQoNCiAgICBpbnQgdGhyZWFkX21uX2FiID0gdGhyZWFkSWR4LnggJSAxNjsNCiAgICBpbnQgdGhyZWFkX2tfYWIgID0gdGhyZWFkSWR4LnggLyAxNjsgLy8gYnkgZmxvYXQyDQoNCiAgICBpbnQgdGhyZWFkX21fYyA9ICh0aHJlYWRJZHgueCAvIDE2KSAqIDQ7DQogICAgaW50IHRocmVhZF9uX2MgPSAgdGhyZWFkSWR4LnggJSAxNjsgLy8gYnkgZmxvYXQNCg0KICAgIHVzaW5nIGZsb2F0NCA9IGZsb2F0IF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSg0KSkpOw0KICAgIGZsb2F0NCB0aWxlX2QgPSB7MH07DQoNCiAgICBjb25zdCBsb25nICphX3B0ciA9IChjb25zdCBsb25nKilhOw0KICAgIGNvbnN0IGxvbmcgKmJfcHRyID0gKGNvbnN0IGxvbmcqKWI7DQoNCiAgICBpbnQgYV9tID0gdGhyZWFkX2Jsb2NrX20gKyB0aHJlYWRfbW5fYWI7DQogICAgaW50IGFfayA9IHRocmVhZF9rX2FiOw0KICAgIGxvbmcgKnRpbGVfYV9wdHIgPSAobG9uZyopJmFfcHRyW2FfbSAqIGsvOCArIGFfa107DQogICAgaW50IGJfbiA9IHRocmVhZF9ibG9ja19uICsgdGhyZWFkX21uX2FiOw0KICAgIGludCBiX2sgPSB0aHJlYWRfa19hYjsNCiAgICBsb25nICp0aWxlX2JfcHRyID0gKGxvbmcqKSZiX3B0cltiX24gKiBrLzggKyBiX2tdOw0KDQogICAgaW50IGFzX20gPSB0aHJlYWRfYmxvY2tfbSArIHRocmVhZF9tX2M7DQogICAgaW50IGJzX24gPSAodGhyZWFkX2Jsb2NrX24gKyB0aHJlYWRfbl9jKSAvIEJMT0NLOw0KICAgIGZsb2F0ICphc19wdHIgPSAoZmxvYXQqKSZhc1thc19tICogay9CTE9DS107DQogICAgZmxvYXQgKmJzX3B0ciA9IChmbG9hdCopJmJzW2JzX24gKiBrL0JMT0NLXTsNCg0KICAgIGxvbmcgdGlsZV9hWzRdLCB0aWxlX2JbNF07DQoNCiAgICAvLyBsb29wIG92ZXIgayBieSBxdWFudCBibG9jayAoMTI4KQ0KICAgIGZvciAoaW50IGliID0gMDsgaWIgPCBrOyBpYiArPSBCTE9DSykgew0KICAgICAgICB0aWxlX2FbMF0gPSB0aWxlX2FfcHRyWzBdOw0KICAgICAgICB0aWxlX2FbMV0gPSB0aWxlX2FfcHRyWzRdOw0KICAgICAgICB0aWxlX2FbMl0gPSB0aWxlX2FfcHRyWzhdOw0KICAgICAgICB0aWxlX2FbM10gPSB0aWxlX2FfcHRyWzEyXTsNCiAgICAgICAgdGlsZV9iWzBdID0gdGlsZV9iX3B0clswXTsNCiAgICAgICAgdGlsZV9iWzFdID0gdGlsZV9iX3B0cls0XTsNCiAgICAgICAgdGlsZV9iWzJdID0gdGlsZV9iX3B0cls4XTsNCiAgICAgICAgdGlsZV9iWzNdID0gdGlsZV9iX3B0clsxMl07DQogICAgICAgIHRpbGVfYV9wdHIgKz0gMTY7DQogICAgICAgIHRpbGVfYl9wdHIgKz0gMTY7DQoNCiAgICAgICAgZmxvYXQ0IGJsb2NrX3RpbGVfZCA9IHswfTsNCiAgICAgICAgYmxvY2tfdGlsZV9kID0gX19idWlsdGluX2FtZGdjbl9tZm1hX2YzMl8xNngxNngzMl9mcDhfZnA4KHRpbGVfYVswXSwgdGlsZV9iWzBdLCBibG9ja190aWxlX2QsIDAsIDAsIDApOw0KICAgICAgICBibG9ja190aWxlX2QgPSBfX2J1aWx0aW5fYW1kZ2NuX21mbWFfZjMyXzE2eDE2eDMyX2ZwOF9mcDgodGlsZV9hWzFdLCB0aWxlX2JbMV0sIGJsb2NrX3RpbGVfZCwgMCwgMCwgMCk7DQogICAgICAgIGJsb2NrX3RpbGVfZCA9IF9fYnVpbHRpbl9hbWRnY25fbWZtYV9mMzJfMTZ4MTZ4MzJfZnA4X2ZwOCh0aWxlX2FbMl0sIHRpbGVfYlsyXSwgYmxvY2tfdGlsZV9kLCAwLCAwLCAwKTsNCiAgICAgICAgYmxvY2tfdGlsZV9kID0gX19idWlsdGluX2FtZGdjbl9tZm1hX2YzMl8xNngxNngzMl9mcDhfZnA4KHRpbGVfYVszXSwgdGlsZV9iWzNdLCBibG9ja190aWxlX2QsIDAsIDAsIDApOw0KDQogICAgICAgIHRpbGVfZFswXSArPSBibG9ja190aWxlX2RbMF0gKiBhc19wdHJbMCAqIGsvQkxPQ0tdICogYnNfcHRyWzBdOw0KICAgICAgICB0aWxlX2RbMV0gKz0gYmxvY2tfdGlsZV9kWzFdICogYXNfcHRyWzEgKiBrL0JMT0NLXSAqIGJzX3B0clswXTsNCiAgICAgICAgdGlsZV9kWzJdICs9IGJsb2NrX3RpbGVfZFsyXSAqIGFzX3B0clsyICogay9CTE9DS10gKiBic19wdHJbMF07DQogICAgICAgIHRpbGVfZFszXSArPSBibG9ja190aWxlX2RbM10gKiBhc19wdHJbMyAqIGsvQkxPQ0tdICogYnNfcHRyWzBdOw0KICAgICAgICBhc19wdHIgKz0gMTsNCiAgICAgICAgYnNfcHRyICs9IDE7DQogICAgfQ0KDQogICAgLy8gZmluYWxseSwgd3JpdGUgdGhlIHJlc3VsdCBhcyBiZjE2DQogICAgaW50IGNfbSA9IHRocmVhZF9ibG9ja19tICsgdGhyZWFkX21fYzsNCiAgICBpbnQgY19uID0gdGhyZWFkX2Jsb2NrX24gKyB0aHJlYWRfbl9jOw0KICAgIGNbKGNfbSArIDApICogbiArIGNfbl0gPSAoX19oaXBfYmZsb2F0MTYpKHRpbGVfZFswXSk7DQogICAgY1soY19tICsgMSkgKiBuICsgY19uXSA9IChfX2hpcF9iZmxvYXQxNikodGlsZV9kWzFdKTsNCiAgICBjWyhjX20gKyAyKSAqIG4gKyBjX25dID0gKF9faGlwX2JmbG9hdDE2KSh0aWxlX2RbMl0pOw0KICAgIGNbKGNfbSArIDMpICogbiArIGNfbl0gPSAoX19oaXBfYmZsb2F0MTYpKHRpbGVfZFszXSk7DQp9DQoNCnZvaWQgZnA4X21tKHRvcmNoOjpUZW5zb3IgYSwgdG9yY2g6OlRlbnNvciBiLCB0b3JjaDo6VGVuc29yIGFzLCB0b3JjaDo6VGVuc29yIGJzLCB0b3JjaDo6VGVuc29yIGMpIHsNCiAgICBpbnQgbSA9IGEuc2l6ZSgwKTsNCiAgICBpbnQgbiA9IGIuc2l6ZSgwKTsNCiAgICBpbnQgayA9IGEuc2l6ZSgxKTsNCiAgICBjdXN0b21fa2VybmVsPDw8ZGltMygobSsxNSkvMTYsIChuKzE1KS8xNiksIGRpbTMoNjQpLCAwLCAwPj4+ICgoX19oaXBfZnA4X2U0bTNfZm51eiopYS5kYXRhX3B0cigpLCAoX19oaXBfZnA4X2U0bTNfZm51eiopYi5kYXRhX3B0cigpLA0KICAgIGFzLmRhdGFfcHRyPGZsb2F0PigpLCBicy5kYXRhX3B0cjxmbG9hdD4oKSwgKF9faGlwX2JmbG9hdDE2KiljLmRhdGFfcHRyKCksIG0sIG4sIGspOw0KICAgIC8vQzEwX0NVREFfQ0hFQ0soY3VkYUdldExhc3RFcnJvcigpKTsNCn0NCiIiIg0KDQppbXBvcnQgb3MNCm9zLmVudmlyb25bIkNYWCJdID0gImNsYW5nKysiDQoNCm1vZHVsZSA9IGxvYWRfaW5saW5lKA0KICAgIG5hbWU9J2ZwOF9tbScsDQogICAgY3BwX3NvdXJjZXM9W0NQUF9XUkFQUEVSXSwNCiAgICBjdWRhX3NvdXJjZXM9W0NVREFfU1JDXSwNCiAgICBmdW5jdGlvbnM9WydmcDhfbW0nXSwNCiAgICB2ZXJib3NlPVRydWUsDQogICAgZXh0cmFfY3VkYV9jZmxhZ3M9WyItLW9mZmxvYWQtYXJjaD1nZng5NDIiLCAiLXN0ZD1jKysyMCIsICItTzMiXSwNCikNCg0KDQpkZWYgY3VzdG9tX2tlcm5lbChkYXRhOiBpbnB1dF90KSAtPiBvdXRwdXRfdDoNCiAgICBhLCBiLCBhX3NjYWxlLCBiX3NjYWxlLCBjID0gZGF0YQ0KICAgIGEgPSBhLmNvbnRpZ3VvdXMoKQ0KICAgIGIgPSBiLmNvbnRpZ3VvdXMoKQ0KICAgIGFfc2NhbGUgPSBhX3NjYWxlLmNvbnRpZ3VvdXMoKQ0KICAgIGJfc2NhbGUgPSBiX3NjYWxlLmNvbnRpZ3VvdXMoKQ0KICAgIG1vZHVsZS5mcDhfbW0oYSwgYiwgYV9zY2FsZSwgYl9zY2FsZSwgYykNCiAgICByZXR1cm4gYw0KDQo=

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

- IyBUaGlzIHNjcmlwdCBwcm92aWRlcyBhIHRlbXBsYXRlIGZvciB1c2luZyBsb2FkX2lubGluZSB0byBydW4gYSBISVAga2VybmVsIGZvcg0KZnJvbSB0b3JjaC51dGlscy5jcHBfZXh0ZW5zaW9uIGltcG9ydCBsb2FkX2lubGluZQ0KZnJvbSB0YXNrIGltcG9ydCBpbnB1dF90LCBvdXRwdXRfdA0KQ1BQX1dSQVBQRVIgPSAiIiINCnZvaWQgZnA4X21tKHRvcmNoOjpUZW5zb3IgYSwgdG9yY2g6OlRlbnNvciBiLCB0b3JjaDo6VGVuc29yIGFzLCB0b3JjaDo6VGVuc29yIGJzLCB0b3JjaDo6VGVuc29yIGMpOw0KIiIiDQoNCkNVREFfU1JDID0gIiIiDQojaW5jbHVkZSA8aGlwL2FtZF9kZXRhaWwvYW1kX2hpcF9mcDguaD4NCiNpbmNsdWRlIDxoaXAvYW1kX2RldGFpbC9hbWRfaGlwX2JmMTYuaD4NCg0KY29uc3RleHByIGNvbnN0IGludCBCTE9DSyA9IDEyODsNCg0KX19nbG9iYWxfXyB2b2lkIGN1c3RvbV9rZXJuZWwoY29uc3QgX19oaXBfZnA4X2U0bTNfZm51eiogYSwgY29uc3QgX19oaXBfZnA4X2U0bTNfZm51eiogYiwgY29uc3QgZmxvYXQqIGFzLCBjb25zdCBmbG9hdCogYnMsDQogICAgICAgICAgICAgICAgICAgX19oaXBfYmZsb2F0MTYqIGMsIGludCBtLCBpbnQgbiwgaW50IGspIHsNCg0KICAgIC8vIFlvdXIgaW1wbGVtZW50YXRpb24gaGVyZQ0KICAgIC8vIGludCBjeCA9IHRocmVhZElkeC54ICsgYmxvY2tEaW0ueCAqIGJsb2NrSWR4Lng7DQogICAgLy8gaW50IGN5ID0gdGhyZWFkSWR4LnkgKyBibG9ja0RpbS55ICogYmxvY2tJZHgueTsNCiAgICAvLyBpZihjeCA+PSBtIHx8IGN5ID49IG4pIHJldHVybjsNCg0KICAgIGludCB0aHJlYWRfYmxvY2tfbSA9IGJsb2NrSWR4LnggKiAxNjsNCiAgICBpbnQgdGhyZWFkX2Jsb2NrX24gPSBibG9ja0lkeC55ICogMTY7DQoNCiAgICBpbnQgdGhyZWFkX21uX2FiID0gdGhyZWFkSWR4LnggJSAxNjsNCiAgICBpbnQgdGhyZWFkX2tfYWIgID0gdGhyZWFkSWR4LnggLyAxNjsgLy8gYnkgZmxvYXQyDQoNCiAgICBpbnQgdGhyZWFkX21fYyA9ICh0aHJlYWRJZHgueCAvIDE2KSAqIDQ7DQogICAgaW50IHRocmVhZF9uX2MgPSAgdGhyZWFkSWR4LnggJSAxNjsgLy8gYnkgZmxvYXQNCg0KICAgIHVzaW5nIGZsb2F0NCA9IGZsb2F0IF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSg0KSkpOw0KICAgIGZsb2F0NCB0aWxlX2QgPSB7MH07DQoNCiAgICBjb25zdCBsb25nICphX3B0ciA9IChjb25zdCBsb25nKilhOw0KICAgIGNvbnN0IGxvbmcgKmJfcHRyID0gKGNvbnN0IGxvbmcqKWI7DQoNCiAgICAvLyBsb29wIG92ZXIgayBieSBxdWFudCBibG9jayAoMTI4KQ0KICAgIGZvciAoaW50IGliID0gMDsgaWIgPCBrOyBpYiArPSBCTE9DSykgew0KICAgICAgICBmbG9hdDQgYmxvY2tfdGlsZV9kID0gezB9Ow0KICAgICAgICAvLyBsb29wIG92ZXIgcXVhbnQgYmxvY2sgYnkgbWZtYSBpbnN0cnVjdGlvbiBrICgzMikNCiAgICAgICAgZm9yIChpbnQgaWkgPSBpYjsgaWkgPCBpYiArIEJMT0NLOyBpaSArPSAzMikgew0KICAgICAgICAgICAgaW50IGFfbSA9IHRocmVhZF9ibG9ja19tICsgdGhyZWFkX21uX2FiOw0KICAgICAgICAgICAgaW50IGFfayA9IHRocmVhZF9rX2FiICsgaWkvODsNCiAgICAgICAgICAgIGxvbmcgdGlsZV9hID0gYV9wdHJbYV9tICogay84ICsgYV9rXTsNCiAgICAgICAgICAgIGludCBiX24gPSB0aHJlYWRfYmxvY2tfbiArIHRocmVhZF9tbl9hYjsNCiAgICAgICAgICAgIGludCBiX2sgPSB0aHJlYWRfa19hYiArIGlpLzg7DQogICAgICAgICAgICBsb25nIHRpbGVfYiA9IGJfcHRyW2JfbiAqIGsvOCArIGJfa107DQogICAgICAgICAgICBibG9ja190aWxlX2QgPSBfX2J1aWx0aW5fYW1kZ2NuX21mbWFfZjMyXzE2eDE2eDMyX2ZwOF9mcDgodGlsZV9hLCB0aWxlX2IsIGJsb2NrX3RpbGVfZCwgMCwgMCwgMCk7DQogICAgICAgIH0NCiAgICAgICAgaW50IGFzX20gPSB0aHJlYWRfYmxvY2tfbSArIHRocmVhZF9tX2M7DQogICAgICAgIGludCBhc19rID0gaWIgLyBCTE9DSzsNCiAgICAgICAgaW50IGJzX24gPSAodGhyZWFkX2Jsb2NrX24gKyB0aHJlYWRfbl9jKSAvIEJMT0NLOw0KICAgICAgICBpbnQgYnNfayA9IGliIC8gQkxPQ0s7DQogICAgICAgIHRpbGVfZFswXSArPSBibG9ja190aWxlX2RbMF0gKiBhc1soYXNfbSArIDApICogay9CTE9DSyArIGFzX2tdICogYnNbYnNfbiAqIGsvQkxPQ0sgKyBic19rXTsNCiAgICAgICAgdGlsZV9kWzFdICs9IGJsb2NrX3RpbGVfZFsxXSAqIGFzWyhhc19tICsgMSkgKiBrL0JMT0NLICsgYXNfa10gKiBic1tic19uICogay9CTE9DSyArIGJzX2tdOw0KICAgICAgICB0aWxlX2RbMl0gKz0gYmxvY2tfdGlsZV9kWzJdICogYXNbKGFzX20gKyAyKSAqIGsvQkxPQ0sgKyBhc19rXSAqIGJzW2JzX24gKiBrL0JMT0NLICsgYnNfa107DQogICAgICAgIHRpbGVfZFszXSArPSBibG9ja190aWxlX2RbM10gKiBhc1soYXNfbSArIDMpICogay9CTE9DSyArIGFzX2tdICogYnNbYnNfbiAqIGsvQkxPQ0sgKyBic19rXTsNCiAgICB9DQoNCiAgICAvLyBmaW5hbGx5LCB3cml0ZSB0aGUgcmVzdWx0IGFzIGJmMTYNCiAgICBpbnQgY19tID0gdGhyZWFkX2Jsb2NrX20gKyB0aHJlYWRfbV9jOw0KICAgIGludCBjX24gPSB0aHJlYWRfYmxvY2tfbiArIHRocmVhZF9uX2M7DQogICAgY1soY19tICsgMCkgKiBuICsgY19uXSA9IChfX2hpcF9iZmxvYXQxNikodGlsZV9kWzBdKTsNCiAgICBjWyhjX20gKyAxKSAqIG4gKyBjX25dID0gKF9faGlwX2JmbG9hdDE2KSh0aWxlX2RbMV0pOw0KICAgIGNbKGNfbSArIDIpICogbiArIGNfbl0gPSAoX19oaXBfYmZsb2F0MTYpKHRpbGVfZFsyXSk7DQogICAgY1soY19tICsgMykgKiBuICsgY19uXSA9IChfX2hpcF9iZmxvYXQxNikodGlsZV9kWzNdKTsNCn0NCg0Kdm9pZCBmcDhfbW0odG9yY2g6OlRlbnNvciBhLCB0b3JjaDo6VGVuc29yIGIsIHRvcmNoOjpUZW5zb3IgYXMsIHRvcmNoOjpUZW5zb3IgYnMsIHRvcmNoOjpUZW5zb3IgYykgew0KICAgIGludCBtID0gYS5zaXplKDApOw0KICAgIGludCBuID0gYi5zaXplKDApOw0KICAgIGludCBrID0gYS5zaXplKDEpOw0KICAgIGN1c3RvbV9rZXJuZWw8PDxkaW0zKChtKzE1KS8xNiwgKG4rMTUpLzE2KSwgZGltMyg2NCksIDAsIDA+Pj4gKChfX2hpcF9mcDhfZTRtM19mbnV6KilhLmRhdGFfcHRyKCksIChfX2hpcF9mcDhfZTRtM19mbnV6KiliLmRhdGFfcHRyKCksDQogICAgYXMuZGF0YV9wdHI8ZmxvYXQ+KCksIGJzLmRhdGFfcHRyPGZsb2F0PigpLCAoX19oaXBfYmZsb2F0MTYqKWMuZGF0YV9wdHIoKSwgbSwgbiwgayk7DQogICAgLy9DMTBfQ1VEQV9DSEVDSyhjdWRhR2V0TGFzdEVycm9yKCkpOw0KfQ0KIiIiDQoNCmltcG9ydCBvcw0Kb3MuZW52aXJvblsiQ1hYIl0gPSAiY2xhbmcrKyINCg0KbW9kdWxlID0gbG9hZF9pbmxpbmUoDQogICAgbmFtZT0nZnA4X21tJywNCiAgICBjcHBfc291cmNlcz1bQ1BQX1dSQVBQRVJdLA0KICAgIGN1ZGFfc291cmNlcz1bQ1VEQV9TUkNdLA0KICAgIGZ1bmN0aW9ucz1bJ2ZwOF9tbSddLA0KICAgIHZlcmJvc2U9VHJ1ZSwNCiAgICBleHRyYV9jdWRhX2NmbGFncz1bIi0tb2ZmbG9hZC1hcmNoPWdmeDk0MiIsICItc3RkPWMrKzIwIiwgIi1PMyJdLA0KKQ0KDQoNCmRlZiBjdXN0b21fa2VybmVsKGRhdGE6IGlucHV0X3QpIC0+IG91dHB1dF90Og0KICAgIGEsIGIsIGFfc2NhbGUsIGJfc2NhbGUsIGMgPSBkYXRhDQogICAgYSA9IGEuY29udGlndW91cygpDQogICAgYiA9IGIuY29udGlndW91cygpDQogICAgYV9zY2FsZSA9IGFfc2NhbGUuY29udGlndW91cygpDQogICAgYl9zY2FsZSA9IGJfc2NhbGUuY29udGlndW91cygpDQogICAgbW9kdWxlLmZwOF9tbShhLCBiLCBhX3NjYWxlLCBiX3NjYWxlLCBjKQ0KICAgIHJldHVybiBjDQoNCg==
No newline at end of file
+ IyBUaGlzIHNjcmlwdCBwcm92aWRlcyBhIHRlbXBsYXRlIGZvciB1c2luZyBsb2FkX2lubGluZSB0byBydW4gYSBISVAga2VybmVsIGZvcg0KZnJvbSB0b3JjaC51dGlscy5jcHBfZXh0ZW5zaW9uIGltcG9ydCBsb2FkX2lubGluZQ0KZnJvbSB0YXNrIGltcG9ydCBpbnB1dF90LCBvdXRwdXRfdA0KQ1BQX1dSQVBQRVIgPSAiIiINCnZvaWQgZnA4X21tKHRvcmNoOjpUZW5zb3IgYSwgdG9yY2g6OlRlbnNvciBiLCB0b3JjaDo6VGVuc29yIGFzLCB0b3JjaDo6VGVuc29yIGJzLCB0b3JjaDo6VGVuc29yIGMpOw0KIiIiDQoNCkNVREFfU1JDID0gIiIiDQojaW5jbHVkZSA8aGlwL2FtZF9kZXRhaWwvYW1kX2hpcF9mcDguaD4NCiNpbmNsdWRlIDxoaXAvYW1kX2RldGFpbC9hbWRfaGlwX2JmMTYuaD4NCg0KY29uc3RleHByIGNvbnN0IGludCBCTE9DSyA9IDEyODsNCg0KX19nbG9iYWxfXyB2b2lkIGN1c3RvbV9rZXJuZWwoY29uc3QgX19oaXBfZnA4X2U0bTNfZm51eiogYSwgY29uc3QgX19oaXBfZnA4X2U0bTNfZm51eiogYiwgY29uc3QgZmxvYXQqIGFzLCBjb25zdCBmbG9hdCogYnMsDQogICAgICAgICAgICAgICAgICAgX19oaXBfYmZsb2F0MTYqIGMsIGludCBtLCBpbnQgbiwgaW50IGspIHsNCg0KICAgIC8vIFlvdXIgaW1wbGVtZW50YXRpb24gaGVyZQ0KICAgIC8vIGludCBjeCA9IHRocmVhZElkeC54ICsgYmxvY2tEaW0ueCAqIGJsb2NrSWR4Lng7DQogICAgLy8gaW50IGN5ID0gdGhyZWFkSWR4LnkgKyBibG9ja0RpbS55ICogYmxvY2tJZHgueTsNCiAgICAvLyBpZihjeCA+PSBtIHx8IGN5ID49IG4pIHJldHVybjsNCg0KICAgIGludCB0aHJlYWRfYmxvY2tfbSA9IGJsb2NrSWR4LnggKiAxNjsNCiAgICBpbnQgdGhyZWFkX2Jsb2NrX24gPSBibG9ja0lkeC55ICogMTY7DQoNCiAgICBpbnQgdGhyZWFkX21uX2FiID0gdGhyZWFkSWR4LnggJSAxNjsNCiAgICBpbnQgdGhyZWFkX2tfYWIgID0gdGhyZWFkSWR4LnggLyAxNjsgLy8gYnkgZmxvYXQyDQoNCiAgICBpbnQgdGhyZWFkX21fYyA9ICh0aHJlYWRJZHgueCAvIDE2KSAqIDQ7DQogICAgaW50IHRocmVhZF9uX2MgPSAgdGhyZWFkSWR4LnggJSAxNjsgLy8gYnkgZmxvYXQNCg0KICAgIHVzaW5nIGZsb2F0NCA9IGZsb2F0IF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSg0KSkpOw0KICAgIGZsb2F0NCB0aWxlX2QgPSB7MH07DQoNCiAgICBjb25zdCBsb25nICphX3B0ciA9IChjb25zdCBsb25nKilhOw0KICAgIGNvbnN0IGxvbmcgKmJfcHRyID0gKGNvbnN0IGxvbmcqKWI7DQoNCiAgICBpbnQgYV9tID0gdGhyZWFkX2Jsb2NrX20gKyB0aHJlYWRfbW5fYWI7DQogICAgaW50IGFfayA9IHRocmVhZF9rX2FiOw0KICAgIGxvbmcgKnRpbGVfYV9wdHIgPSAobG9uZyopJmFfcHRyW2FfbSAqIGsvOCArIGFfa107DQogICAgaW50IGJfbiA9IHRocmVhZF9ibG9ja19uICsgdGhyZWFkX21uX2FiOw0KICAgIGludCBiX2sgPSB0aHJlYWRfa19hYjsNCiAgICBsb25nICp0aWxlX2JfcHRyID0gKGxvbmcqKSZiX3B0cltiX24gKiBrLzggKyBiX2tdOw0KDQogICAgaW50IGFzX20gPSB0aHJlYWRfYmxvY2tfbSArIHRocmVhZF9tX2M7DQogICAgaW50IGJzX24gPSAodGhyZWFkX2Jsb2NrX24gKyB0aHJlYWRfbl9jKSAvIEJMT0NLOw0KICAgIGZsb2F0ICphc19wdHIgPSAoZmxvYXQqKSZhc1thc19tICogay9CTE9DS107DQogICAgZmxvYXQgKmJzX3B0ciA9IChmbG9hdCopJmJzW2JzX24gKiBrL0JMT0NLXTsNCg0KICAgIGxvbmcgdGlsZV9hWzRdLCB0aWxlX2JbNF07DQoNCiAgICAvLyBsb29wIG92ZXIgayBieSBxdWFudCBibG9jayAoMTI4KQ0KICAgIGZvciAoaW50IGliID0gMDsgaWIgPCBrOyBpYiArPSBCTE9DSykgew0KICAgICAgICB0aWxlX2FbMF0gPSB0aWxlX2FfcHRyWzBdOw0KICAgICAgICB0aWxlX2FbMV0gPSB0aWxlX2FfcHRyWzRdOw0KICAgICAgICB0aWxlX2FbMl0gPSB0aWxlX2FfcHRyWzhdOw0KICAgICAgICB0aWxlX2FbM10gPSB0aWxlX2FfcHRyWzEyXTsNCiAgICAgICAgdGlsZV9iWzBdID0gdGlsZV9iX3B0clswXTsNCiAgICAgICAgdGlsZV9iWzFdID0gdGlsZV9iX3B0cls0XTsNCiAgICAgICAgdGlsZV9iWzJdID0gdGlsZV9iX3B0cls4XTsNCiAgICAgICAgdGlsZV9iWzNdID0gdGlsZV9iX3B0clsxMl07DQogICAgICAgIHRpbGVfYV9wdHIgKz0gMTY7DQogICAgICAgIHRpbGVfYl9wdHIgKz0gMTY7DQoNCiAgICAgICAgZmxvYXQ0IGJsb2NrX3RpbGVfZCA9IHswfTsNCiAgICAgICAgYmxvY2tfdGlsZV9kID0gX19idWlsdGluX2FtZGdjbl9tZm1hX2YzMl8xNngxNngzMl9mcDhfZnA4KHRpbGVfYVswXSwgdGlsZV9iWzBdLCBibG9ja190aWxlX2QsIDAsIDAsIDApOw0KICAgICAgICBibG9ja190aWxlX2QgPSBfX2J1aWx0aW5fYW1kZ2NuX21mbWFfZjMyXzE2eDE2eDMyX2ZwOF9mcDgodGlsZV9hWzFdLCB0aWxlX2JbMV0sIGJsb2NrX3RpbGVfZCwgMCwgMCwgMCk7DQogICAgICAgIGJsb2NrX3RpbGVfZCA9IF9fYnVpbHRpbl9hbWRnY25fbWZtYV9mMzJfMTZ4MTZ4MzJfZnA4X2ZwOCh0aWxlX2FbMl0sIHRpbGVfYlsyXSwgYmxvY2tfdGlsZV9kLCAwLCAwLCAwKTsNCiAgICAgICAgYmxvY2tfdGlsZV9kID0gX19idWlsdGluX2FtZGdjbl9tZm1hX2YzMl8xNngxNngzMl9mcDhfZnA4KHRpbGVfYVszXSwgdGlsZV9iWzNdLCBibG9ja190aWxlX2QsIDAsIDAsIDApOw0KDQogICAgICAgIHRpbGVfZFswXSArPSBibG9ja190aWxlX2RbMF0gKiBhc19wdHJbMCAqIGsvQkxPQ0tdICogYnNfcHRyWzBdOw0KICAgICAgICB0aWxlX2RbMV0gKz0gYmxvY2tfdGlsZV9kWzFdICogYXNfcHRyWzEgKiBrL0JMT0NLXSAqIGJzX3B0clswXTsNCiAgICAgICAgdGlsZV9kWzJdICs9IGJsb2NrX3RpbGVfZFsyXSAqIGFzX3B0clsyICogay9CTE9DS10gKiBic19wdHJbMF07DQogICAgICAgIHRpbGVfZFszXSArPSBibG9ja190aWxlX2RbM10gKiBhc19wdHJbMyAqIGsvQkxPQ0tdICogYnNfcHRyWzBdOw0KICAgICAgICBhc19wdHIgKz0gMTsNCiAgICAgICAgYnNfcHRyICs9IDE7DQogICAgfQ0KDQogICAgLy8gZmluYWxseSwgd3JpdGUgdGhlIHJlc3VsdCBhcyBiZjE2DQogICAgaW50IGNfbSA9IHRocmVhZF9ibG9ja19tICsgdGhyZWFkX21fYzsNCiAgICBpbnQgY19uID0gdGhyZWFkX2Jsb2NrX24gKyB0aHJlYWRfbl9jOw0KICAgIGNbKGNfbSArIDApICogbiArIGNfbl0gPSAoX19oaXBfYmZsb2F0MTYpKHRpbGVfZFswXSk7DQogICAgY1soY19tICsgMSkgKiBuICsgY19uXSA9IChfX2hpcF9iZmxvYXQxNikodGlsZV9kWzFdKTsNCiAgICBjWyhjX20gKyAyKSAqIG4gKyBjX25dID0gKF9faGlwX2JmbG9hdDE2KSh0aWxlX2RbMl0pOw0KICAgIGNbKGNfbSArIDMpICogbiArIGNfbl0gPSAoX19oaXBfYmZsb2F0MTYpKHRpbGVfZFszXSk7DQp9DQoNCnZvaWQgZnA4X21tKHRvcmNoOjpUZW5zb3IgYSwgdG9yY2g6OlRlbnNvciBiLCB0b3JjaDo6VGVuc29yIGFzLCB0b3JjaDo6VGVuc29yIGJzLCB0b3JjaDo6VGVuc29yIGMpIHsNCiAgICBpbnQgbSA9IGEuc2l6ZSgwKTsNCiAgICBpbnQgbiA9IGIuc2l6ZSgwKTsNCiAgICBpbnQgayA9IGEuc2l6ZSgxKTsNCiAgICBjdXN0b21fa2VybmVsPDw8ZGltMygobSsxNSkvMTYsIChuKzE1KS8xNiksIGRpbTMoNjQpLCAwLCAwPj4+ICgoX19oaXBfZnA4X2U0bTNfZm51eiopYS5kYXRhX3B0cigpLCAoX19oaXBfZnA4X2U0bTNfZm51eiopYi5kYXRhX3B0cigpLA0KICAgIGFzLmRhdGFfcHRyPGZsb2F0PigpLCBicy5kYXRhX3B0cjxmbG9hdD4oKSwgKF9faGlwX2JmbG9hdDE2KiljLmRhdGFfcHRyKCksIG0sIG4sIGspOw0KICAgIC8vQzEwX0NVREFfQ0hFQ0soY3VkYUdldExhc3RFcnJvcigpKTsNCn0NCiIiIg0KDQppbXBvcnQgb3MNCm9zLmVudmlyb25bIkNYWCJdID0gImNsYW5nKysiDQoNCm1vZHVsZSA9IGxvYWRfaW5saW5lKA0KICAgIG5hbWU9J2ZwOF9tbScsDQogICAgY3BwX3NvdXJjZXM9W0NQUF9XUkFQUEVSXSwNCiAgICBjdWRhX3NvdXJjZXM9W0NVREFfU1JDXSwNCiAgICBmdW5jdGlvbnM9WydmcDhfbW0nXSwNCiAgICB2ZXJib3NlPVRydWUsDQogICAgZXh0cmFfY3VkYV9jZmxhZ3M9WyItLW9mZmxvYWQtYXJjaD1nZng5NDIiLCAiLXN0ZD1jKysyMCIsICItTzMiXSwNCikNCg0KDQpkZWYgY3VzdG9tX2tlcm5lbChkYXRhOiBpbnB1dF90KSAtPiBvdXRwdXRfdDoNCiAgICBhLCBiLCBhX3NjYWxlLCBiX3NjYWxlLCBjID0gZGF0YQ0KICAgIGEgPSBhLmNvbnRpZ3VvdXMoKQ0KICAgIGIgPSBiLmNvbnRpZ3VvdXMoKQ0KICAgIGFfc2NhbGUgPSBhX3NjYWxlLmNvbnRpZ3VvdXMoKQ0KICAgIGJfc2NhbGUgPSBiX3NjYWxlLmNvbnRpZ3VvdXMoKQ0KICAgIG1vZHVsZS5mcDhfbW0oYSwgYiwgYV9zY2FsZSwgYl9zY2FsZSwgYykNCiAgICByZXR1cm4gYw0KDQo=
No newline at end of file

Best evidence level for this revision: reported

JSON