Skip to content
KernelIndex
Search⌘K

amd-mixture-of-experts · submission 31210

KernelBot user 255 · 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_moe_1449.py
curl "https://kernelindex.com/api/v1/implementations/kernelbot-amd-mixture-of-experts-31210?include=source"
interfacepython
Compatibility
measured onAMD Instinct MI300X
declared hardwareAMD Instinct MI300X
architecturesgfx942
dtypesfp16

Benchmark evidence

2 measurements across 1 GPU, fastest first.

Operation / workload
Hardware
Latency
Rank
Observed
AMD DeepSeek-style MoE layerfp16 · [1, 2048, 7168]
AMD Instinct MI300X
30.5ms
#71 of 118
2025-06-03
AMD DeepSeek-style MoE layerfp16 · [1, 8192, 7168]
AMD Instinct MI300X
43.9ms
#68 of 118
2025-06-03

Reported · How evidence levels are derived →

Source and license

sourceavailable
revision digestsha256:7441cef4ee58d8bf1378568d94a8f1d02188f7e66ba373aba272e515cfbab1de
license declaredunknown
license concludedunknown
imported2026-08-15

Kernel source

submission_moe_1449.py1 lines
ZnJvbSBwaXAuX2ludGVybmFsIGltcG9ydCBtYWluIGFzIHBpcF9tYWluCnBpcF9tYWluKFsnaW5zdGFsbCcsICd0aWxlbGFuZy1yb2NtJ10pCgppbXBvcnQgbWF0aAppbXBvcnQgdG9yY2gKaW1wb3J0IHRvcmNoLm5uIGFzIG5uCmltcG9ydCB0b3JjaC5ubi5mdW5jdGlvbmFsIGFzIEYKZnJvbSB0b3JjaC5wcm9maWxlciBpbXBvcnQgcHJvZmlsZSwgUHJvZmlsZXJBY3Rpdml0eQpmcm9tIHR5cGluZyBpbXBvcnQgRGljdCwgVHVwbGUsIE9wdGlvbmFsCmZyb20gdGFzayBpbXBvcnQgaW5wdXRfdCwgb3V0cHV0X3QKaW1wb3J0IHRpbGVsYW5nCmltcG9ydCB0aWxlbGFuZy5sYW5ndWFnZSBhcyBUCmZyb20gdGlsZWxhbmcuYXV0b3R1bmVyIGltcG9ydCAqCgppbXBvcnQgdGltZQoKIyB0aWxlbGFuZy5kaXNhYmxlX2NhY2hlKCkKCgpAdGlsZWxhbmcuaml0CmRlZiBtb2VfZm9yd2FyZF90aWxlbGFuZ19zaGFyZWQoZF9oaWRkZW4sIGRfZXhwZXJ0LCBuX3NoYXJlZF9leHBlcnRzLCBkdHlwZSwgbnVtX3Rva2VucywgYmxvY2tfdG9rZW49MTI4LCBibG9ja19kaGlkZGVuPTEyOCwgYmxvY2tfZGV4cGVydD0xMjgsIHRocmVhZHM9MjU2LCBudW1fc3RhZ2VzPTEpOgoKICAgIHNjYWxlID0gMS40NDI2OTUwNCAgIyBsb2cyKGUpCgogICAgIyBQYXJhbWV0ZXJzCiAgICBkaGlkZGVuID0gZF9oaWRkZW4KICAgIGRleHBlcnQgPSBkX2V4cGVydCAqIG5fc2hhcmVkX2V4cGVydHMKCiAgICAjIFRlbnNvcnM6IE5vdGUgdGhhdCBpbnB1dCBzaGFwZSBpcyByZXNoYXBlIHRvIChudW1fdG9rZW5zLCBkaGlkZGVuKQogICAgaW5wdXRfc2hhcGUgPSAobnVtX3Rva2VucywgZGhpZGRlbikKICAgIHNoYXJlZF9XX2dhdGVfc2hhcGUgPSAoZGV4cGVydCwgZGhpZGRlbikKICAgIHNoYXJlZF9XX3VwX3NoYXBlID0gKGRleHBlcnQsIGRoaWRkZW4pCiAgICBzaGFyZWRfV19kb3duX3NoYXBlID0gKGRoaWRkZW4sIGRleHBlcnQpCgogICAgYWNjdW1fdHlwZSA9ICJmbG9hdDMyIiAKCiAgICBAVC5wcmltX2Z1bmMKICAgIGRlZiBrZXJuZWxfc2hhcmVkKAogICAgICAgIGlucHV0OiBULlRlbnNvcihpbnB1dF9zaGFwZSwgZHR5cGUpLCAjIHR5cGU6IGlnbm9yZQogICAgICAgIHNoYXJlZF9XX2dhdGU6IFQuVGVuc29yKHNoYXJlZF9XX2dhdGVfc2hhcGUsIGR0eXBlKSwgIyB0eXBlOiBpZ25vcmUKICAgICAgICBzaGFyZWRfV191cDogVC5UZW5zb3Ioc2hhcmVkX1dfdXBfc2hhcGUsIGR0eXBlKSwgIyB0eXBlOiBpZ25vcmUKICAgICAgICBzaGFyZWRfV19kb3duOiBULlRlbnNvcihzaGFyZWRfV19kb3duX3NoYXBlLCBkdHlwZSksICMgdHlwZTogaWdub3JlCiAgICAgICAgdXBfbG9naXRzOiBULlRlbnNvcigobnVtX3Rva2VucywgZGV4cGVydCksIGR0eXBlKSwgIyB0eXBlOiBpZ25vcmUKICAgICAgICBvdXRwdXQ6IFQuVGVuc29yKGlucHV0X3NoYXBlLCBkdHlwZSksICMgdHlwZTogaWdub3JlCiAgICApOgogICAgICAgICMgU3RlcCAxOiBDb21wdXRlIGdhdGUgYW5kIHVwIGxvZ2l0cwogICAgICAgIHdpdGggVC5LZXJuZWwoVC5jZWlsZGl2KG51bV90b2tlbnMsIGJsb2NrX3Rva2VuKSwgVC5jZWlsZGl2KGRleHBlcnQsIGJsb2NrX2RleHBlcnQpLCB0aHJlYWRzPXRocmVhZHMpIGFzIChieCwgYnkpOgogICAgICAgICAgICAjIFNwbGl0IHRoZSBibG9jayB0byBzaGFyZWQgZXhwZXJ0cyBhbmQgcm91dGVkIGV4cGVydHMKICAgICAgICAgICAgaW5wdXRfc2hhcmVkID0gVC5hbGxvY19mcmFnbWVudCgoYmxvY2tfdG9rZW4sIGJsb2NrX2RoaWRkZW4pLCBkdHlwZT1kdHlwZSkKICAgICAgICAgICAgV19nYXRlX3NoYXJlZCA9IFQuYWxsb2Nfc2hhcmVkKChibG9ja19kZXhwZXJ0LCBibG9ja19kaGlkZGVuKSwgZHR5cGU9ZHR5cGUpCiAgICAgICAgICAgIFdfdXBfc2hhcmVkID0gVC5hbGxvY19zaGFyZWQoKGJsb2NrX2RleHBlcnQsIGJsb2NrX2RoaWRkZW4pLCBkdHlwZT1kdHlwZSkKICAgICAgICAgICAgIyBXX2Rvd25fc2hhcmVkID0gVC5hbGxvY19zaGFyZWQoKGJsb2NrX2RleHBlcnQsIGJsb2NrX2RpbSksIGR0eXBlPWR0eXBlKSAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIyBTaGFyZWQgZXhwZXJ0czogbm8gbmVlZCB0byBjaGVjayBleHBlcnRfaW5kaWNlcwoKICAgICAgICAgICAgZ2F0ZV9sb2dpdHNfbG9jYWwgPSBULmFsbG9jX2ZyYWdtZW50KChibG9ja190b2tlbiwgYmxvY2tfZGV4cGVydCksIGR0eXBlPWFjY3VtX3R5cGUpCiAgICAgICAgICAgIHVwX2xvZ2l0c19sb2NhbCA9IFQuYWxsb2NfZnJhZ21lbnQoKGJsb2NrX3Rva2VuLCBibG9ja19kZXhwZXJ0KSwgZHR5cGU9YWNjdW1fdHlwZSkKICAgICAgICAgICAgIyBkb3duX2xvZ2l0c19sb2NhbCA9IFQuYWxsb2NfZnJhZ21lbnQoKGJsb2NrX3Rva2VuLCBibG9ja19kaW0pLCBkdHlwZT1kdHlwZSkKCiAgICAgICAgICAgIFQudXNlX3N3aXp6bGUoMTApCiAgICAgICAgICAgIFQuY2xlYXIoZ2F0ZV9sb2dpdHNfbG9jYWwpCiAgICAgICAgICAgIFQuY2xlYXIodXBfbG9naXRzX2xvY2FsKQogICAgICAgICAgICAjIFQuY2xlYXIoZG93bl9sb2dpdHNfbG9jYWwpCiAgICAgICAgICAgIAogICAgICAgICAgICAjIFBhcmFsbGVsIGZvciBnYXRlIGFuZCB1cCBtYXRtdWwKICAgICAgICAgICAgZm9yIGsgaW4gVC5QaXBlbGluZWQoVC5jZWlsZGl2KGRoaWRkZW4sIGJsb2NrX2RoaWRkZW4pLCBudW1fc3RhZ2VzPW51bV9zdGFnZXMpOgogICAgICAgICAgICAgICAgVC5jb3B5KGlucHV0W2J4ICogYmxvY2tfdG9rZW4sIGsgKiBibG9ja19kaGlkZGVuXSwgaW5wdXRfc2hhcmVkKQogICAgICAgICAgICAgICAgIyBmb3IgaSwgaiBpbiBULlBhcmFsbGVsKGJsb2NrX3Rva2VuLCBibG9ja19kaGlkZGVuKToKICAgICAgICAgICAgICAgICMgICAgIGlucHV0X3NoYXJlZFtpLCBqXSA9IGlucHV0W2J4ICogYmxvY2tfdG9rZW4gKyBpLCBrICogYmxvY2tfZGhpZGRlbiArIGpdCiAgICAgICAgICAgICAgICBULmNvcHkoc2hhcmVkX1dfZ2F0ZVtieSAqIGJsb2NrX2RleHBlcnQsIGsgKiBibG9ja19kaGlkZGVuXSwgV19nYXRlX3NoYXJlZCkKICAgICAgICAgICAgICAgIFQuY29weShzaGFyZWRfV191cFtieSAqIGJsb2NrX2RleHBlcnQsIGsgKiBibG9ja19kaGlkZGVuXSwgV191cF9zaGFyZWQpCiAgICAgICAgICAgICAgICAjIGZvciBpLCBqIGluIFQuUGFyYWxsZWwoYmxvY2tfZGhpZGRlbiwgYmxvY2tfZGV4cGVydCk6CiAgICAgICAgICAgICAgICAjICAgICBXX2dhdGVfc2hhcmVkW2ksIGpdID0gc2hhcmVkc19XX2dhdGVbYnosIGsgKiBibG9ja19kaW0gKyBpLCBieSAqIGJsb2NrX2RleHBlcnQgKyBqXQogICAgICAgICAgICAgICAgIyAgICAgV191cF9zaGFyZWRbaSwgal0gPSBzaGFyZWRzX1dfdXBbYnosIGsgKiBibG9ja19kaW0gKyBpLCBieSAqIGJsb2NrX2RleHBlcnQgKyBqXQogICAgICAgICAgICAgICAgVC5nZW1tKGlucHV0X3NoYXJlZCwgV19nYXRlX3NoYXJlZCwgZ2F0ZV9sb2dpdHNfbG9jYWwsIHRyYW5zcG9zZV9CPVRydWUpCiAgICAgICAgICAgICAgICBULmdlbW0oaW5wdXRfc2hhcmVkLCBXX3VwX3NoYXJlZCwgdXBfbG9naXRzX2xvY2FsLCB0cmFuc3Bvc2VfQj1UcnVlKQoKICAgICAgICAgICAgIyBGdXNlIHdpdGggU2lMVSBhbmQgZWxlbWVudC13aXNlIHByb2R1Y3QKICAgICAgICAgICAgZm9yIGksIGogaW4gVC5QYXJhbGxlbChibG9ja190b2tlbiwgYmxvY2tfZGV4cGVydCk6CiAgICAgICAgICAgICAgICBnYXRlX2xvZ2l0c19sb2NhbFtpLCBqXSA9IGdhdGVfbG9naXRzX2xvY2FsW2ksIGpdICogKDEuMCAvICgxLjAgKyBULmV4cDIoLWdhdGVfbG9naXRzX2xvY2FsW2ksIGpdICogc2NhbGUpKSkKICAgICAgICAgICAgICAgIHVwX2xvZ2l0c19sb2NhbFtpLCBqXSA9IHVwX2xvZ2l0c19sb2NhbFtpLCBqXSAqIGdhdGVfbG9naXRzX2xvY2FsW2ksIGpdCgogICAgICAgICAgICBULmNvcHkodXBfbG9naXRzX2xvY2FsLCB1cF9sb2dpdHNbYnggKiBibG9ja190b2tlbiwgYnkgKiBibG9ja19kZXhwZXJ0XSkKICAgICAgICAKICAgICAgICAjIFN0ZXAgMjogQ29tcHV0ZSBkb3duIGxvZ2l0cwogICAgICAgIHdpdGggVC5LZXJuZWwoVC5jZWlsZGl2KG51bV90b2tlbnMsIGJsb2NrX3Rva2VuKSwgVC5jZWlsZGl2KGRoaWRkZW4sIGJsb2NrX2RoaWRkZW4pLCB0aHJlYWRzPXRocmVhZHMpIGFzIChieCwgYnkpOgogICAgICAgICAgICB1cF9sb2dpdHNfc2hhcmVkID0gVC5hbGxvY19mcmFnbWVudCgoYmxvY2tfdG9rZW4sIGJsb2NrX2RleHBlcnQpLCBkdHlwZT1kdHlwZSkKICAgICAgICAgICAgV19kb3duX3NoYXJlZCA9IFQuYWxsb2Nfc2hhcmVkKChibG9ja19kaGlkZGVuLCBibG9ja19kZXhwZXJ0KSwgZHR5cGU9ZHR5cGUpCiAgICAgICAgICAgIG91dHB1dF9sb2NhbCA9IFQuYWxsb2NfZnJhZ21lbnQoKGJsb2NrX3Rva2VuLCBibG9ja19kaGlkZGVuKSwgZHR5cGU9YWNjdW1fdHlwZSkKICAgICAgICAgICAgCiAgICAgICAgICAgIFQudXNlX3N3aXp6bGUoMTApCiAgICAgICAgICAgIFQuY2xlYXIob3V0cHV0X2xvY2FsKQoKICAgICAgICAgICAgZm9yIGsgaW4gVC5QaXBlbGluZWQoVC5jZWlsZGl2KGRleHBlcnQsIGJsb2NrX2RleHBlcnQpLCBudW1fc3RhZ2VzPW51bV9zdGFnZXMpOgogICAgICAgICAgICAgICAgVC5jb3B5KHVwX2xvZ2l0c1tieCAqIGJsb2NrX3Rva2VuLCBrICogYmxvY2tfZGV4cGVydF0sIHVwX2xvZ2l0c19zaGFyZWQpCiAgICAgICAgICAgICAgICBULmNvcHkoc2hhcmVkX1dfZG93bltieSAqIGJsb2NrX2RoaWRkZW4sIGsgKiBibG9ja19kZXhwZXJ0XSwgV19kb3duX3NoYXJlZCkKICAgICAgICAgICAgICAgIFQuZ2VtbSh1cF9sb2dpdHNfc2hhcmVkLCBXX2Rvd25fc2hhcmVkLCBvdXRwdXRfbG9jYWwsIHRyYW5zcG9zZV9CPVRydWUpCgogICAgICAgICAgICBULmNvcHkob3V0cHV0X2xvY2FsLCBvdXRwdXRbYnggKiBibG9ja190b2tlbiwgYnkgKiBibG9ja19kaGlkZGVuXSkKICAgIAogICAgcmV0dXJuIGtlcm5lbF9zaGFyZWQKCgpAdGlsZWxhbmcuaml0CmRlZiBtb2VfZm9yd2FyZF90aWxlbGFuZ19yb3V0ZWQoZF9oaWRkZW4sIGRfZXhwZXJ0LCBuX3JvdXRlZF9leHBlcnRzLCBkdHlwZSwgZ3JvdXBfc3VtLCBncm91cF9jb3VudCwgYmxvY2tfdG9rZW49MTI4LCBibG9ja19kaGlkZGVuPTEyOCwgYmxvY2tfZGV4cGVydD0xMjgsIHRocmVhZHM9MjU2LCBudW1fc3RhZ2VzPTEsIGtfcGFjaz0xLCBjb2FsZXNjZWRfd2lkdGg9Tm9uZSk6CiAgICAKICAgIHNjYWxlID0gMS40NDI2OTUwNCAgIyBsb2cyKGUpCgogICAgIyBQYXJhbWV0ZXJzCiAgICBkaGlkZGVuID0gZF9oaWRkZW4KICAgIGRleHBlcnQgPSBkX2V4cGVydAogICAgbl9yb3V0ZWRfZXhwZXJ0cyA9IG5fcm91dGVkX2V4cGVydHMKCiAgICAjIEdyb3VwIGluZm8KICAgICMgZ3JvdXBfc3VtID0gc3VtKGdyb3VwX3NpemVzX2xpc3QpCiAgICAjIGdyb3VwX2NvdW50ID0gbGVuKGdyb3VwX3NpemVzX2xpc3QpCiAgICAjIE0gPSBzdW0oWyhncm91cF9zaXplICsgYmxvY2tfdG9rZW4gLSAxKSAvLyBibG9ja190b2tlbiBmb3IgZ3JvdXBfc2l6ZSBpbiBncm91cF9zaXplc19saXN0XSkKICAgIE0gPSBtYXRoLmNlaWwoZ3JvdXBfc3VtIC8gYmxvY2tfdG9rZW4pICsgZ3JvdXBfY291bnQKICAgIGFjY3VtX2R0eXBlID0gImZsb2F0MzIiCgogICAgIyBUZW5zb3JzOiBOb3RlIHRoYXQgaW5wdXQgc2hhcGUgaXMgcmVzaGFwZSB0byAoYnMgKiBzZXFfbGVuICogbl9leHBlcnRzX3Blcl90b2tlbiwgZGhpZGRlbikgZm9yIGdyb3VwZWQgZ2VtbQogICAgaW5wdXRfc2hhcGUgPSAoZ3JvdXBfc3VtLCBkaGlkZGVuKQogICAgaW50ZXJtZWRpYXRlX3NoYXBlID0gKGdyb3VwX3N1bSwgZGV4cGVydCkKICAgIHJvdXRlZF9leHBlcnRfZ2F0ZV9zaGFwZSA9IChuX3JvdXRlZF9leHBlcnRzLCBkZXhwZXJ0LCBkaGlkZGVuKQogICAgcm91dGVkX2V4cGVydF91cF9zaGFwZSA9IChuX3JvdXRlZF9leHBlcnRzLCBkZXhwZXJ0LCBkaGlkZGVuKQogICAgcm91dGVkX2V4cGVydF9kb3duX3NoYXBlID0gKG5fcm91dGVkX2V4cGVydHMsIGRoaWRkZW4sIGRleHBlcnQpCiAgICByb3V0ZWRfZXhwZXJ0X3dlaWdodHNfc2hhcGUgPSAoZ3JvdXBfc3VtKQogICAgZ3JvdXBfc2l6ZXNfc2hhcGUgPSAobl9yb3V0ZWRfZXhwZXJ0cykKCiAgICBAVC5wcmltX2Z1bmMKICAgIGRlZiBrZXJuZWwoCiAgICAgICAgaW5wdXQ6IFQuVGVuc29yKGlucHV0X3NoYXBlLCBkdHlwZSksICMgdHlwZTogaWdub3JlCiAgICAgICAgcm91dGVkX2V4cGVydF9nYXRlOiBULlRlbnNvcihyb3V0ZWRfZXhwZXJ0X2dhdGVfc2hhcGUsIGR0eXBlKSwgIyB0eXBlOiBpZ25vcmUKICAgICAgICByb3V0ZWRfZXhwZXJ0X3VwOiBULlRlbnNvcihyb3V0ZWRfZXhwZXJ0X3VwX3NoYXBlLCBkdHlwZSksICMgdHlwZTogaWdub3JlCiAgICAgICAgcm91dGVkX2V4cGVydF9kb3duOiBULlRlbnNvcihyb3V0ZWRfZXhwZXJ0X2Rvd25fc2hhcGUsIGR0eXBlKSwgIyB0eXBlOiBpZ25vcmUKICAgICAgICByb3V0ZWRfZXhwZXJ0X3dlaWdodHM6IFQuVGVuc29yKHJvdXRlZF9leHBlcnRfd2VpZ2h0c19zaGFwZSwgZHR5cGUpLCAjIHR5cGU6IGlnbm9yZQogICAgICAgIGdyb3VwX3NpemVzOiBULlRlbnNvcihncm91cF9zaXplc19zaGFwZSwgImludDMyIiksICMgdHlwZTogaWdub3JlCiAgICAgICAgZ3JvdXBfb2Zmc2V0czogVC5UZW5zb3IoZ3JvdXBfc2l6ZXNfc2hhcGUsICJpbnQzMiIpLCAjIHR5cGU6IGlnbm9yZQogICAgICAgIGdyb3VwX3BhZGRlZF9vZmZzZXRzOiBULlRlbnNvcihncm91cF9zaXplc19zaGFwZSwgImludDMyIiksICMgdHlwZTogaWdub3JlCiAgICAgICAgZ3JvdXBfaWR4X2Zvcl9ieDogVC5UZW5zb3IoKE0sKSwgImludDMyIiksICMgdHlwZTogaWdub3JlCiAgICAgICAgdXBfbG9naXRzOiBULlRlbnNvcihpbnRlcm1lZGlhdGVfc2hhcGUsIGR0eXBlKSwgIyB0eXBlOiBpZ25vcmUKICAgICAgICBvdXRwdXQ6IFQuVGVuc29yKGlucHV0X3NoYXBlLCBkdHlwZSksICMgdHlwZTogaWdub3JlCiAgICApOgogICAgICAgICMgU3RlcCAxOiBDb21wdXRlIGdhdGUgYW5kIHVwIGxvZ2l0cwogICAgICAgIHdpdGggVC5LZXJuZWwoTSwgVC5jZWlsZGl2KGRleHBlcnQsIGJsb2NrX2RleHBlcnQpLCB0aHJlYWRzPXRocmVhZHMpIGFzIChieCwgYnkpOgogICAgICAgICAgICBpbnB1dF9zaGFyZWQgPSBULmFsbG9jX2ZyYWdtZW50KChibG9ja190b2tlbiwgYmxvY2tfZGhpZGRlbiksIGR0eXBlPWR0eXBlKQogICAgICAgICAgICByb3V0ZWRfZXhwZXJ0X2dhdGVfc2hhcmVkID0gVC5hbGxvY19zaGFyZWQoKGJsb2NrX2RleHBlcnQsIGJsb2NrX2RoaWRkZW4pLCBkdHlwZT1kdHlwZSkKICAgICAgICAgICAgcm91dGVkX2V4cGVydF91cF9zaGFyZWQgPSBULmFsbG9jX3NoYXJlZCgoYmxvY2tfZGV4cGVydCwgYmxvY2tfZGhpZGRlbiksIGR0eXBlPWR0eXBlKQogICAgICAgICAgICAKICAgICAgICAgICAgZ2F0ZV9sb2dpdHNfbG9jYWwgPSBULmFsbG9jX2ZyYWdtZW50KChibG9ja190b2tlbiwgYmxvY2tfZGV4cGVydCksIGR0eXBlPWFjY3VtX2R0eXBlKQogICAgICAgICAgICB1cF9sb2dpdHNfbG9jYWwgPSBULmFsbG9jX2ZyYWdtZW50KChibG9ja190b2tlbiwgYmxvY2tfZGV4cGVydCksIGR0eXBlPWFjY3VtX2R0eXBlKQoKICAgICAgICAgICAgY3VyX2dyb3VwX2lkeCA9IFQuYWxsb2NfbG9jYWwoWzFdLCAiaW50MzIiKQogICAgICAgICAgICBjdXJfZ3JvdXBfc2l6ZSA9IFQuYWxsb2NfbG9jYWwoWzFdLCAiaW50MzIiKQogCiAgICAgICAgICAgIFQudXNlX3N3aXp6bGUoMTAsIGVuYWJsZT1UcnVlKQoKICAgICAgICAgICAgIyBULmFubm90YXRlX2xheW91dCh7aW5wdXRfc2hhcmVkOiB0aWxlbGFuZy5sYXlvdXQubWFrZV9zd2l6emxlZF9sYXlvdXQoaW5wdXRfc2hhcmVkKX0pCiAgICAgICAgICAgICMgVC5hbm5vdGF0ZV9sYXlvdXQoe3JvdXRlZF9leHBlcnRfZ2F0ZV9zaGFyZWQ6IHRpbGVsYW5nLmxheW91dC5tYWtlX3N3aXp6bGVkX2xheW91dChyb3V0ZWRfZXhwZXJ0X2dhdGVfc2hhcmVkKX0pCiAgICAgICAgICAgICMgVC5hbm5vdGF0ZV9sYXlvdXQoe3JvdXRlZF9leHBlcnRfdXBfc2hhcmVkOiB0aWxlbGFuZy5sYXlvdXQubWFrZV9zd2l6emxlZF9sYXlvdXQocm91dGVkX2V4cGVydF91cF9zaGFyZWQpfSkKCiAgICAgICAgICAgIG1fc3RhcnRfcGFkZGVkID0gYnggKiBibG9ja190b2tlbgoKICAgICAgICAgICAgIyBmb3IgaSBpbiByYW5nZShncm91cF9jb3VudCk6CiAgICAgICAgICAgICMgICAgIGluX2N1cl9ncm91cF9pZHggPSAobV9zdGFydF9wYWRkZWQgPj0gZ3JvdXBfcGFkZGVkX29mZnNldHNbaV0pCiAgICAgICAgICAgICMgICAgIGN1cl9ncm91cF9pZHhbMF0gPSBULmlmX3RoZW5fZWxzZShpbl9jdXJfZ3JvdXBfaWR4LCBpLCBjdXJfZ3JvdXBfaWR4WzBdKQogICAgICAgICAgICBjdXJfZ3JvdXBfaWR4WzBdID0gZ3JvdXBfaWR4X2Zvcl9ieFtieF0KCiAgICAgICAgICAgIGN1cl9ncm91cF9zaXplWzBdID0gZ3JvdXBfc2l6ZXNbY3VyX2dyb3VwX2lkeFswXV0KICAgICAgICAgICAgbV9zdGFydCA9IG1fc3RhcnRfcGFkZGVkIC0gZ3JvdXBfcGFkZGVkX29mZnNldHNbY3VyX2dyb3VwX2lkeFswXV0gKyBncm91cF9vZmZzZXRzW2N1cl9ncm91cF9pZHhbMF1dCiAgICAgICAgICAgIGFjdHVhbF9yb3dzID0gVC5tYXgoMCwgVC5taW4oYmxvY2tfdG9rZW4sIGN1cl9ncm91cF9zaXplWzBdIC0gKG1fc3RhcnRfcGFkZGVkIC0gZ3JvdXBfcGFkZGVkX29mZnNldHNbY3VyX2dyb3VwX2lkeFswXV0pKSkKICAgICAgICAgICAgCiAgICAgICAgICAgIFQuY2xlYXIoZ2F0ZV9sb2dpdHNfbG9jYWwpCiAgICAgICAgICAgIFQuY2xlYXIodXBfbG9naXRzX2xvY2FsKQoKICAgICAgICAgICAgZm9yIGsgaW4gVC5QaXBlbGluZWQoVC5jZWlsZGl2KGRoaWRkZW4sIGJsb2NrX2RoaWRkZW4pLCBudW1fc3RhZ2VzPW51bV9zdGFnZXMpOgogICAgICAgICAgICAgICAgVC5jb3B5KGlucHV0W21fc3RhcnQ6bV9zdGFydCArIGJsb2NrX3Rva2VuLCBrICogYmxvY2tfZGhpZGRlbjooayArIDEpICogYmxvY2tfZGhpZGRlbl0sIGlucHV0X3NoYXJlZCwgY29hbGVzY2VkX3dpZHRoPWNvYWxlc2NlZF93aWR0aCkKICAgICAgICAgICAgICAgIFQuY29weShyb3V0ZWRfZXhwZXJ0X2dhdGVbY3VyX2dyb3VwX2lkeFswXSwgYnkgKiBibG9ja19kZXhwZXJ0OihieSArIDEpICogYmxvY2tfZGV4cGVydCwgayAqIGJsb2NrX2RoaWRkZW46KGsgKyAxKSAqIGJsb2NrX2RoaWRkZW5dLCByb3V0ZWRfZXhwZXJ0X2dhdGVfc2hhcmVkLCBjb2FsZXNjZWRfd2lkdGg9Y29hbGVzY2VkX3dpZHRoKQogICAgICAgICAgICAgICAgVC5nZW1tKGlucHV0X3NoYXJlZCwgcm91dGVkX2V4cGVydF9nYXRlX3NoYXJlZCwgZ2F0ZV9sb2dpdHNfbG9jYWwsIGtfcGFjaz1rX3BhY2ssIHRyYW5zcG9zZV9CPVRydWUpCiAgICAgICAgICAgICAgICBULmNvcHkocm91dGVkX2V4cGVydF91cFtjdXJfZ3JvdXBfaWR4WzBdLCBieSAqIGJsb2NrX2RleHBlcnQ6KGJ5ICsgMSkgKiBibG9ja19kZXhwZXJ0LCBrICogYmxvY2tfZGhpZGRlbjooayArIDEpICogYmxvY2tfZGhpZGRlbl0sIHJvdXRlZF9leHBlcnRfdXBfc2hhcmVkLCBjb2FsZXNjZWRfd2lkdGg9Y29hbGVzY2VkX3dpZHRoKQogICAgICAgICAgICAgICAgVC5nZW1tKGlucHV0X3NoYXJlZCwgcm91dGVkX2V4cGVydF91cF9zaGFyZWQsIHVwX2xvZ2l0c19sb2NhbCwga19wYWNrPWtfcGFjaywgdHJhbnNwb3NlX0I9VHJ1ZSkKCiAgICAgICAgICAgIGZvciBpLCBqIGluIFQuUGFyYWxsZWwoYmxvY2tfdG9rZW4sIGJsb2NrX2RleHBlcnQpOgogICAgICAgICAgICAgICAgZ2F0ZV9sb2dpdHNfbG9jYWxbaSwgal0gPSBnYXRlX2xvZ2l0c19sb2NhbFtpLCBqXSAqICgxLjAgLyAoMS4wICsgVC5leHAyKC1nYXRlX2xvZ2l0c19sb2NhbFtpLCBqXSAqIHNjYWxlKSkpCiAgICAgICAgICAgICAgICB1cF9sb2dpdHNfbG9jYWxbaSwgal0gPSB1cF9sb2dpdHNfbG9jYWxbaSwgal0gKiBnYXRlX2xvZ2l0c19sb2NhbFtpLCBqXQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIGZvciBpLCBqIGluIFQuUGFyYWxsZWwoYmxvY2tfdG9rZW4sIGJsb2NrX2RleHBlcnQpOgogICAgICAgICAgICAgICAgd2l0aCBULklmKGkgPCBhY3R1YWxfcm93cyksIFQuVGhlbigpOgogICAgICAgICAgICAgICAgICAgIHVwX2xvZ2l0c1ttX3N0YXJ0ICsgaSwgYnkgKiBibG9ja19kZXhwZXJ0ICsgal0gPSB1cF9sb2dpdHNfbG9jYWxbaSwgal0KICAgICAgICAKICAgICAgICAjIFN0ZXAgMjogQ29tcHV0ZSBkb3duIGxvZ2l0cwogICAgICAgIHdpdGggVC5LZXJuZWwoTSwgVC5jZWlsZGl2KGRoaWRkZW4sIGJsb2NrX2RoaWRkZW4pLCB0aHJlYWRzPXRocmVhZHMpIGFzIChieCwgYnkpOgogICAgICAgICAgICB1cF9sb2dpdHNfc2hhcmVkID0gVC5hbGxvY19mcmFnbWVudCgoYmxvY2tfdG9rZW4sIGJsb2NrX2RleHBlcnQpLCBkdHlwZT1kdHlwZSkKICAgICAgICAgICAgcm91dGVkX2V4cGVydF9kb3duX3NoYXJlZCA9IFQuYWxsb2Nfc2hhcmVkKChibG9ja19kZXhwZXJ0LCBibG9ja19kaGlkZGVuKSwgZHR5cGU9ZHR5cGUpCiAgICAgICAgICAgIG91dHB1dF9sb2NhbCA9IFQuYWxsb2NfZnJhZ21lbnQoKGJsb2NrX3Rva2VuLCBibG9ja19kaGlkZGVuKSwgZHR5cGU9YWNjdW1fZHR5cGUpCgogICAgICAgICAgICBjdXJfZ3JvdXBfaWR4ID0gVC5hbGxvY19sb2NhbChbMV0sICJpbnQzMiIpCiAgICAgICAgICAgIGN1cl9ncm91cF9zaXplID0gVC5hbGxvY19sb2NhbChbMV0sICJpbnQzMiIpCgogICAgICAgICAgICBULnVzZV9zd2l6emxlKDEwLCBlbmFibGU9VHJ1ZSkKCiAgICAgICAgICAgICMgVC5hbm5vdGF0ZV9sYXlvdXQoe3VwX2xvZ2l0c19zaGFyZWQ6IHRpbGVsYW5nLmxheW91dC5tYWtlX3N3aXp6bGVkX2xheW91dCh1cF9sb2dpdHNfc2hhcmVkKX0pCiAgICAgICAgICAgICMgVC5hbm5vdGF0ZV9sYXlvdXQoe3JvdXRlZF9leHBlcnRfZG93bl9zaGFyZWQ6IHRpbGVsYW5nLmxheW91dC5tYWtlX3N3aXp6bGVkX2xheW91dChyb3V0ZWRfZXhwZXJ0X2Rvd25fc2hhcmVkKX0pCgogICAgICAgICAgICBtX3N0YXJ0X3BhZGRlZCA9IGJ4ICogYmxvY2tfdG9rZW4KCiAgICAgICAgICAgICMgZm9yIGkgaW4gcmFuZ2UoZ3JvdXBfY291bnQpOgogICAgICAgICAgICAjICAgICBpbl9jdXJfZ3JvdXBfaWR4ID0gKG1fc3RhcnRfcGFkZGVkID49IGdyb3VwX3BhZGRlZF9vZmZzZXRzW2ldKQogICAgICAgICAgICAjICAgICBjdXJfZ3JvdXBfaWR4WzBdID0gVC5pZl90aGVuX2Vsc2UoaW5fY3VyX2dyb3VwX2lkeCwgaSwgY3VyX2dyb3VwX2lkeFswXSkKICAgICAgICAgICAgY3VyX2dyb3VwX2lkeFswXSA9IGdyb3VwX2lkeF9mb3JfYnhbYnhdCgogICAgICAgICAgICBjdXJfZ3JvdXBfc2l6ZVswXSA9IGdyb3VwX3NpemVzW2N1cl9ncm91cF9pZHhbMF1dCiAgICAgICAgICAgIG1fc3RhcnQgPSBtX3N0YXJ0X3BhZGRlZCAtIGdyb3VwX3BhZGRlZF9vZmZzZXRzW2N1cl9ncm91cF9pZHhbMF1dICsgZ3JvdXBfb2Zmc2V0c1tjdXJfZ3JvdXBfaWR4WzBdXQogICAgICAgICAgICBhY3R1YWxfcm93cyA9IFQubWF4KDAsIFQubWluKGJsb2NrX3Rva2VuLCBjdXJfZ3JvdXBfc2l6ZVswXSAtIChtX3N0YXJ0X3BhZGRlZCAtIGdyb3VwX3BhZGRlZF9vZmZzZXRzW2N1cl9ncm91cF9pZHhbMF1dKSkpCgogICAgICAgICAgICBULmNsZWFyKG91dHB1dF9sb2NhbCkKCiAgICAgICAgICAgIGZvciBrIGluIFQuUGlwZWxpbmVkKFQuY2VpbGRpdihkZXhwZXJ0LCBibG9ja19kZXhwZXJ0KSwgbnVtX3N0YWdlcz1udW1fc3RhZ2VzKToKICAgICAgICAgICAgICAgIFQuY29weSh1cF9sb2dpdHNbbV9zdGFydDptX3N0YXJ0ICsgYmxvY2tfdG9rZW4sIGsgKiBibG9ja19kZXhwZXJ0OihrICsgMSkgKiBibG9ja19kZXhwZXJ0XSwgdXBfbG9naXRzX3NoYXJlZCwgY29hbGVzY2VkX3dpZHRoPWNvYWxlc2NlZF93aWR0aCkKICAgICAgICAgICAgICAgIFQuY29weShyb3V0ZWRfZXhwZXJ0X2Rvd25bY3VyX2dyb3VwX2lkeFswXSwgYnkgKiBibG9ja19kaGlkZGVuOihieSArIDEpICogYmxvY2tfZGhpZGRlbiwgayAqIGJsb2NrX2RleHBlcnQ6KGsgKyAxKSAqIGJsb2NrX2RleHBlcnRdLCByb3V0ZWRfZXhwZXJ0X2Rvd25fc2hhcmVkLCBjb2FsZXNjZWRfd2lkdGg9Y29hbGVzY2VkX3dpZHRoKSAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIFQuZ2VtbSh1cF9sb2dpdHNfc2hhcmVkLCByb3V0ZWRfZXhwZXJ0X2Rvd25fc2hhcmVkLCBvdXRwdXRfbG9jYWwsIGtfcGFjaz1rX3BhY2ssIHRyYW5zcG9zZV9CPVRydWUpCgogICAgICAgICAgICBmb3IgaSwgaiBpbiBULlBhcmFsbGVsKGJsb2NrX3Rva2VuLCBibG9ja19kaGlkZGVuKToKICAgICAgICAgICAgICAgIHdpdGggVC5JZihpIDwgYWN0dWFsX3Jvd3MpLCBULlRoZW4oKToKICAgICAgICAgICAgICAgICAgICBvdXRwdXRbbV9zdGFydCArIGksIGJ5ICogYmxvY2tfZGhpZGRlbiArIGpdID0gb3V0cHV0X2xvY2FsW2ksIGpdICogcm91dGVkX2V4cGVydF93ZWlnaHRzW21fc3RhcnQgKyBpXQoKICAgIHJldHVybiBrZXJuZWwKCgoKY2xhc3MgRXhwZXJ0KG5uLk1vZHVsZSk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgY29uZmlnOiBEaWN0LCBnYXRlOiB0b3JjaC5UZW5zb3IsIHVwOiB0b3JjaC5UZW5zb3IsIGRvd246IHRvcmNoLlRlbnNvciwgZF9leHBlcnQ6IE9wdGlvbmFsW2ludF0gPSBOb25lKToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKICAgICAgICBzZWxmLmNvbmZpZyA9IGNvbmZpZwogICAgICAgIHNlbGYuYWN0X2ZuID0gbm4uU2lMVSgpCiAgICAgICAgc2VsZi5kX2hpZGRlbjogaW50ID0gY29uZmlnWyJkX2hpZGRlbiJdCiAgICAgICAgc2VsZi5kX2V4cGVydDogaW50ID0gY29uZmlnWyJkX2V4cGVydCJdIGlmIGRfZXhwZXJ0IGlzIE5vbmUgZWxzZSBkX2V4cGVydAogICAgICAgIHNlbGYuZGV2aWNlID0gdG9yY2guZGV2aWNlKCJjdWRhIikKCiAgICAgICAgIyBzZWxmLldfZ2F0ZSA9IG5uLkxpbmVhcihzZWxmLmRfaGlkZGVuLCBzZWxmLmRfZXhwZXJ0LCBiaWFzPUZhbHNlKQogICAgICAgIHNlbGYuV19nYXRlX3dlaWdodCA9IGdhdGUudCgpLmNvbnRpZ3VvdXMoKS50byhzZWxmLmRldmljZSkKICAgICAgICAjIHNlbGYuV191cCA9IG5uLkxpbmVhcihzZWxmLmRfaGlkZGVuLCBzZWxmLmRfZXhwZXJ0LCBiaWFzPUZhbHNlKQogICAgICAgIHNlbGYuV191cF93ZWlnaHQgPSB1cC50KCkuY29udGlndW91cygpLnRvKHNlbGYuZGV2aWNlKQogICAgICAgICMgc2VsZi5XX2Rvd24gPSBubi5MaW5lYXIoc2VsZi5kX2V4cGVydCwgc2VsZi5kX2hpZGRlbiwgYmlhcz1GYWxzZSkKICAgICAgICBzZWxmLldfZG93bl93ZWlnaHQgPSBkb3duLnQoKS5jb250aWd1b3VzKCkudG8oc2VsZi5kZXZpY2UpCgogICAgZGVmIGZvcndhcmQoc2VsZiwgeDogdG9yY2guVGVuc29yKSAtPiB0b3JjaC5UZW5zb3I6CiAgICAgICAgZ2F0ZSA9IHNlbGYuYWN0X2ZuKHggQCBzZWxmLldfZ2F0ZV93ZWlnaHQpCiAgICAgICAgb3V0ID0gKGdhdGUgKiAoeCBAIHNlbGYuV191cF93ZWlnaHQpKSBAIHNlbGYuV19kb3duX3dlaWdodAogICAgICAgIHJldHVybiBvdXQKCgpjbGFzcyBNb0VHYXRlKG5uLk1vZHVsZSk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgY29uZmlnOiBEaWN0LCB3ZWlnaHRzOiBEaWN0KToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKICAgICAgICBzZWxmLnRvcF9rOiBpbnQgPSBjb25maWdbIm5fZXhwZXJ0c19wZXJfdG9rZW4iXQogICAgICAgIHNlbGYubnVtX2V4cGVydHM6IGludCA9IGNvbmZpZ1sibl9yb3V0ZWRfZXhwZXJ0cyJdCiAgICAgICAgc2VsZi5kX2hpZGRlbjogaW50ID0gY29uZmlnWyJkX2hpZGRlbiJdCgogICAgICAgIHNlbGYuV19nX3dlaWdodCA9IHdlaWdodHNbJ3JvdXRlci53ZWlnaHQnXS50KCkKCiAgICBkZWYgZm9yd2FyZChzZWxmLCB4OiB0b3JjaC5UZW5zb3IpIC0+IFR1cGxlW3RvcmNoLlRlbnNvciwgdG9yY2guVGVuc29yXToKICAgICAgICBsb2dpdHMgPSB4IEAgc2VsZi5XX2dfd2VpZ2h0CiAgICAgICAgc2NvcmVzID0gbG9naXRzLnNvZnRtYXgoZGltPS0xKQogICAgICAgIHRvcGtfc2NvcmVzLCB0b3BrX2luZGljZXMgPSB0b3JjaC50b3BrKHNjb3Jlcywgaz1zZWxmLnRvcF9rLCBkaW09LTEsIHNvcnRlZD1GYWxzZSkKCiAgICAgICAgcmV0dXJuIHRvcGtfaW5kaWNlcywgdG9wa19zY29yZXMKCgpjbGFzcyBNb0Uobm4uTW9kdWxlKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25maWc6IERpY3QsIHNoYXJlZF9rZXJuZWw6IHRpbGVsYW5nLkpJVEtlcm5lbCwgcm91dGVkX2tlcm5lbDogdGlsZWxhbmcuSklUS2VybmVsLCB3ZWlnaHRzOiBEaWN0LCBwYWRkaW5nX006IGludCA9IDEyOCk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5jb25maWcgPSBjb25maWcKICAgICAgICBzZWxmLnNoYXJlZF9rZXJuZWwgPSBzaGFyZWRfa2VybmVsCiAgICAgICAgc2VsZi5yb3V0ZWRfa2VybmVsID0gcm91dGVkX2tlcm5lbAogICAgICAgIHNlbGYucGFkZGluZ19NID0gcGFkZGluZ19NCiAgICAgICAgc2VsZi5leHBlcnRzID0gbm4uTW9kdWxlTGlzdChbCiAgICAgICAgICAgIEV4cGVydChjb25maWcsIGdhdGU9d2VpZ2h0c1tmJ2V4cGVydHMue2l9LjAud2VpZ2h0J10sIHVwPXdlaWdodHNbZidleHBlcnRzLntpfS4xLndlaWdodCddLCBkb3duPXdlaWdodHNbZidleHBlcnRzLntpfS4yLndlaWdodCddKQogICAgICAgICAgICBmb3IgaSBpbiByYW5nZShjb25maWdbIm5fcm91dGVkX2V4cGVydHMiXSkKICAgICAgICBdKQogICAgICAgIHNlbGYuZGV2aWNlID0gdG9yY2guZGV2aWNlKCJjdWRhIikKICAgICAgICBzZWxmLmdhdGluZ19uZXR3b3JrID0gTW9FR2F0ZShjb25maWcsIHdlaWdodHMpLnRvKHNlbGYuZGV2aWNlKQogICAgICAgIHNoYXJlZF9leHBlcnRfZGltID0gY29uZmlnWyJkX2V4cGVydCJdICogY29uZmlnWyJuX3NoYXJlZF9leHBlcnRzIl0KICAgICAgICBzZWxmLnNoYXJlZF9leHBlcnQgPSBFeHBlcnQoY29uZmlnPWNvbmZpZywgZ2F0ZT13ZWlnaHRzWydzaGFyZWRfZXhwZXJ0cy4wLndlaWdodCddLCB1cD13ZWlnaHRzWydzaGFyZWRfZXhwZXJ0cy4xLndlaWdodCddLCBkb3duPXdlaWdodHNbJ3NoYXJlZF9leHBlcnRzLjIud2VpZ2h0J10sIGRfZXhwZXJ0PXNoYXJlZF9leHBlcnRfZGltKS50byhzZWxmLmRldmljZSkKICAgICAgICBzZWxmLmV4cGVydF9jYWNoZSA9IHRvcmNoLnplcm9zKChjb25maWdbImJhdGNoX3NpemUiXSAqIGNvbmZpZ1sic2VxX2xlbiJdLCBjb25maWdbImRfaGlkZGVuIl0pLCBkdHlwZT10b3JjaC5mbG9hdDE2LCBkZXZpY2U9c2VsZi5kZXZpY2UpCiAgICAgICAgc2VsZi5zdGFja2VkX2V4cGVydF93X2dhdGUgPSB0b3JjaC5zdGFjayhbZXhwZXJ0LldfZ2F0ZV93ZWlnaHQgZm9yIGV4cGVydCBpbiBzZWxmLmV4cGVydHNdLCBkaW09MCkKICAgICAgICBzZWxmLnN0YWNrZWRfZXhwZXJ0X3dfdXAgPSB0b3JjaC5zdGFjayhbZXhwZXJ0LldfdXBfd2VpZ2h0IGZvciBleHBlcnQgaW4gc2VsZi5leHBlcnRzXSwgZGltPTApCiAgICAgICAgIyBzZWxmLnN0YWNrZWRfZXhwZXJ0X3dfZ2F0ZV91cF9jYXQgPSB0b3JjaC5jYXQoW3NlbGYuc3RhY2tlZF9leHBlcnRfd19nYXRlLCBzZWxmLnN0YWNrZWRfZXhwZXJ0X3dfdXBdLCBkaW09LTEpCiAgICAgICAgc2VsZi5zdGFja2VkX2V4cGVydF93X2Rvd24gPSB0b3JjaC5zdGFjayhbZXhwZXJ0LldfZG93bl93ZWlnaHQgZm9yIGV4cGVydCBpbiBzZWxmLmV4cGVydHNdLCBkaW09MCkKICAgICAgICBzZWxmLnN0YWNrZWRfZXhwZXJ0X3Rva2VucyA9IHRvcmNoLmVtcHR5KChjb25maWdbImJhdGNoX3NpemUiXSAqIGNvbmZpZ1sic2VxX2xlbiJdICogY29uZmlnWyJuX2V4cGVydHNfcGVyX3Rva2VuIl0sIHNlbGYuY29uZmlnWyJkX2hpZGRlbiJdKSwgZHR5cGU9dG9yY2guZmxvYXQxNiwgZGV2aWNlPXNlbGYuZGV2aWNlKQogICAgICAgIHNlbGYuc3RhY2tlZF9leHBlcnRfd2VpZ2h0cyA9IHRvcmNoLmVtcHR5KChjb25maWdbImJhdGNoX3NpemUiXSAqIGNvbmZpZ1sic2VxX2xlbiJdICogY29uZmlnWyJuX2V4cGVydHNfcGVyX3Rva2VuIl0sIDEpLCBkdHlwZT10b3JjaC5mbG9hdDE2LCBkZXZpY2U9c2VsZi5kZXZpY2UpCiAgICAgICAgc2VsZi5zdGFja2VkX2V4cGVydF90b2tlbnNfaWR4cyA9IHRvcmNoLmVtcHR5KChjb25maWdbImJhdGNoX3NpemUiXSAqIGNvbmZpZ1sic2VxX2xlbiJdICogY29uZmlnWyJuX2V4cGVydHNfcGVyX3Rva2VuIl0sIDEpLCBkdHlwZT10b3JjaC5pbnQ2NCwgZGV2aWNlPXNlbGYuZGV2aWNlKQoKICAgICAgICBzZWxmLnVwX2xvZ2l0c19zaGFyZWQgPSB0b3JjaC5lbXB0eSgoY29uZmlnWyJiYXRjaF9zaXplIl0gKiBjb25maWdbInNlcV9sZW4iXSwgc2VsZi5jb25maWdbImRfZXhwZXJ0Il0pLCBkdHlwZT10b3JjaC5mbG9hdDE2LCBkZXZpY2U9c2VsZi5kZXZpY2UpCiAgICAgICAgc2VsZi5leHBlcnRfb3V0cHV0X3NoYXJlZCA9IHRvcmNoLmVtcHR5KChjb25maWdbImJhdGNoX3NpemUiXSAqIGNvbmZpZ1sic2VxX2xlbiJdLCBzZWxmLmNvbmZpZ1siZF9oaWRkZW4iXSksIGR0eXBlPXRvcmNoLmZsb2F0MTYsIGRldmljZT1zZWxmLmRldmljZSkKCiAgICAgICAgIyBzZWxmLmdhdGVfdXBfY2F0X2xvZ2l0c19yb3V0ZWQgPSB0b3JjaC5lbXB0eSgoY29uZmlnWyJiYXRjaF9zaXplIl0gKiBjb25maWdbInNlcV9sZW4iXSAqIGNvbmZpZ1sibl9leHBlcnRzX3Blcl90b2tlbiJdLCBzZWxmLmNvbmZpZ1siZF9leHBlcnQiXSAqIDIpLCBkdHlwZT10b3JjaC5mbG9hdDE2LCBkZXZpY2U9c2VsZi5kZXZpY2UpCiAgICAgICAgc2VsZi51cF9sb2dpdHNfcm91dGVkID0gdG9yY2guZW1wdHkoKGNvbmZpZ1siYmF0Y2hfc2l6ZSJdICogY29uZmlnWyJzZXFfbGVuIl0gKiBjb25maWdbIm5fZXhwZXJ0c19wZXJfdG9rZW4iXSwgc2VsZi5jb25maWdbImRfZXhwZXJ0Il0pLCBkdHlwZT10b3JjaC5mbG9hdDE2LCBkZXZpY2U9c2VsZi5kZXZpY2UpCiAgICAgICAgc2VsZi5leHBlcnRfb3V0cHV0X3JvdXRlZCA9IHRvcmNoLmVtcHR5KChjb25maWdbImJhdGNoX3NpemUiXSAqIGNvbmZpZ1sic2VxX2xlbiJdICogY29uZmlnWyJuX2V4cGVydHNfcGVyX3Rva2VuIl0sIHNlbGYuY29uZmlnWyJkX2hpZGRlbiJdKSwgZHR5cGU9dG9yY2guZmxvYXQxNiwgZGV2aWNlPXNlbGYuZGV2aWNlKQoKICAgIEB0b3JjaC5ub19ncmFkKCkKICAgIGRlZiBmb3J3YXJkKHNlbGYsIHg6IHRvcmNoLlRlbnNvcikgLT4gdG9yY2guVGVuc29yOgogICAgICAgIG9yaWdfc2hhcGUgPSB4LnNoYXBlCiAgICAgICAgYmF0Y2hfc2l6ZSwgc2VxX2xlbiwgaGlkZGVuX2RpbSA9IHguc2hhcGUKICAgICAgICBleHBlcnRfaW5kaWNlcywgZXhwZXJ0X3Njb3JlcyA9IHNlbGYuZ2F0aW5nX25ldHdvcmsoeCkKICAgICAgICBmbGF0X2V4cGVydF9pbmRpY2VzID0gZXhwZXJ0X2luZGljZXMudmlldygtMSkKICAgICAgICBmbGF0X2V4cGVydF93ZWlnaHRzID0gZXhwZXJ0X3Njb3Jlcy52aWV3KC0xLCAxKQogICAgICAgIHhfZmxhdCA9IHgudmlldygtMSwgaGlkZGVuX2RpbSkKCiAgICAgICAgIyBzaGFyZWRfb3V0cHV0ID0gdG9yY2guZW1wdHlfbGlrZSh4X2ZsYXQsIGRldmljZT1zZWxmLmRldmljZSkKICAgICAgICAjIHVwX2xvZ2l0c19zaGFyZWQgPSB0b3JjaC5lbXB0eSgoYmF0Y2hfc2l6ZSAqIHNlcV9sZW4sIHNlbGYuY29uZmlnWyJkX2V4cGVydCJdKSwgZHR5cGU9eC5kdHlwZSwgZGV2aWNlPXNlbGYuZGV2aWNlKQoKICAgICAgICAjIFByZXBhcmUgZm9yIGdyb3VwZWQgR0VNTQogICAgICAgIGlkeHMgPSBmbGF0X2V4cGVydF9pbmRpY2VzLmFyZ3NvcnQoKQogICAgICAgIGNvdW50cyA9IGZsYXRfZXhwZXJ0X2luZGljZXMuYmluY291bnQoKS5jcHUoKS5udW1weSgpCiAgICAgICAgIyBjb3VudHMgPSBmbGF0X2V4cGVydF9pbmRpY2VzLmJpbmNvdW50KCkKICAgICAgICB0b2tlbnNfcGVyX2V4cGVydCA9IGNvdW50cy5jdW1zdW0oKQogICAgICAgICMgdG9rZW5zX3Blcl9leHBlcnQgPSB0b3JjaC5jdW1zdW0oY291bnRzLCBkaW09MCkKICAgICAgICBudW1fcGVyX3RvayA9IHNlbGYuY29uZmlnWyJuX2V4cGVydHNfcGVyX3Rva2VuIl0KICAgICAgICB0b2tlbl9pZHhzID0gaWR4cyAvLyBudW1fcGVyX3RvawoKICAgICAgICAjIEdldCBzdGFja2VkIGV4cGVydCB0b2tlbnMgYW5kIGV4cGVydCB3ZWlnaHRzCiAgICAgICAgIyBzdGFja2VkX2V4cGVydF90b2tlbnMgPSBbXQogICAgICAgICMgc3RhY2tlZF9leHBlcnRfdG9rZW5zX2lkeHMgPSBbXQogICAgICAgICMgc3RhY2tlZF9leHBlcnRfd2VpZ2h0cyA9IFtdCgogICAgICAgIGZvciBleHBlcnRfaWQsIGVuZF9pZHggaW4gZW51bWVyYXRlKHRva2Vuc19wZXJfZXhwZXJ0KToKICAgICAgICAgICAgc3RhcnRfaWR4ID0gMCBpZiBleHBlcnRfaWQgPT0gMCBlbHNlIHRva2Vuc19wZXJfZXhwZXJ0W2V4cGVydF9pZCAtIDFdCiAgICAgICAgICAgIGlmIHN0YXJ0X2lkeCA9PSBlbmRfaWR4OgogICAgICAgICAgICAgICAgY29udGludWUKCiAgICAgICAgICAgIGV4cF90b2tlbl9pZHhzID0gdG9rZW5faWR4c1tzdGFydF9pZHg6ZW5kX2lkeF0KICAgICAgICAgICAgZXhwZXJ0X3Rva2VucyA9IHhfZmxhdFtleHBfdG9rZW5faWR4c10KCiAgICAgICAgICAgIHNlbGYuc3RhY2tlZF9leHBlcnRfdG9rZW5zW3N0YXJ0X2lkeDplbmRfaWR4XSA9IGV4cGVydF90b2tlbnMKICAgICAgICAgICAgc2VsZi5zdGFja2VkX2V4cGVydF90b2tlbnNfaWR4c1tzdGFydF9pZHg6ZW5kX2lkeCwgMF0gPSBleHBfdG9rZW5faWR4cwogICAgICAgICAgICBzZWxmLnN0YWNrZWRfZXhwZXJ0X3dlaWdodHNbc3RhcnRfaWR4OmVuZF9pZHhdID0gZmxhdF9leHBlcnRfd2VpZ2h0c1tpZHhzW3N0YXJ0X2lkeDplbmRfaWR4XV0KICAgICAgICAgICAgIyBzdGFja2VkX2V4cGVydF90b2tlbnNfaWR4cy5hcHBlbmQoZXhwX3Rva2VuX2lkeHMpICMgW2JzICogc2VxX2xlbiAqIG5fZXhwZXJ0c19wZXJfdG9rZW5dCiAgICAgICAgICAgICMgc3RhY2tlZF9leHBlcnRfdG9rZW5zLmFwcGVuZChleHBlcnRfdG9rZW5zKQogICAgICAgICAgICAjIHN0YWNrZWRfZXhwZXJ0X3dlaWdodHMuYXBwZW5kKGZsYXRfZXhwZXJ0X3dlaWdodHNbaWR4c1tzdGFydF9pZHg6ZW5kX2lkeF1dKQogICAgICAgIAogICAgICAgICMgc3RhY2tlZF9leHBlcnRfdG9rZW5zID0gdG9yY2guY2F0KHN0YWNrZWRfZXhwZXJ0X3Rva2VucywgZGltPTApLnRvKHNlbGYuZGV2aWNlKQogICAgICAgICMgc3RhY2tlZF9leHBlcnRfdG9rZW5zX2lkeHMgPSB0b3JjaC5jYXQoc3RhY2tlZF9leHBlcnRfdG9rZW5zX2lkeHMsIGRpbT0wKS50byhzZWxmLmRldmljZSkKICAgICAgICAjIHN0YWNrZWRfZXhwZXJ0X3dlaWdodHMgPSB0b3JjaC5jYXQoc3RhY2tlZF9leHBlcnRfd2VpZ2h0cywgZGltPTApLnRvKHNlbGYuZGV2aWNlKQoKICAgICAgICBncm91cF9zaXplcyA9IHRvcmNoLnRlbnNvcihjb3VudHMsIGR0eXBlPXRvcmNoLmludDMyLCBkZXZpY2U9c2VsZi5kZXZpY2UpCiAgICAgICAgZ3JvdXBfb2Zmc2V0ID0gdG9yY2gudGVuc29yKHRva2Vuc19wZXJfZXhwZXJ0IC0gY291bnRzLCBkdHlwZT10b3JjaC5pbnQzMiwgZGV2aWNlPXNlbGYuZGV2aWNlKQoKICAgICAgICAjIGdyb3VwX3BhZGRlZF9vZmZzZXRzID0gdG9yY2guZW1wdHkobGVuKGdyb3VwX3NpemVzKSwgZHR5cGU9dG9yY2guaW50MzIsIGRldmljZT1zZWxmLmRldmljZSkKICAgICAgICBncm91cF9wYWRkZWRfb2Zmc2V0cyA9IFswIGZvciBfIGluIHJhbmdlKGxlbihncm91cF9zaXplcykpXQogICAgICAgIGZvciBpIGluIHJhbmdlKDEsIGxlbihncm91cF9zaXplcykpOgogICAgICAgICAgICBncm91cF9wYWRkZWRfb2Zmc2V0c1tpXSA9IGdyb3VwX3BhZGRlZF9vZmZzZXRzW2kgLSAxXSArIG1hdGguY2VpbCgoY291bnRzW2kgLSAxXSArIDEpIC8gc2VsZi5wYWRkaW5nX00pICogc2VsZi5wYWRkaW5nX00KCiAgICAgICAgYmxvY2tfdG9rZW4gPSAxMjgKICAgICAgICBNID0gbWF0aC5jZWlsKHNlbGYuY29uZmlnWyJiYXRjaF9zaXplIl0gKiBzZWxmLmNvbmZpZ1sic2VxX2xlbiJdICogc2VsZi5jb25maWdbIm5fZXhwZXJ0c19wZXJfdG9rZW4iXSAvIGJsb2NrX3Rva2VuKSArIHNlbGYuY29uZmlnWyJuX3JvdXRlZF9leHBlcnRzIl0KICAgICAgICBncm91cF9pZHhfZm9yX2J4ID0gWzAgZm9yIF8gaW4gcmFuZ2UoTSldCiAgICAgICAgCiAgICAgICAgZm9yIGJ4IGluIHJhbmdlKE0pOgogICAgICAgICAgICBtX3N0YXJ0X3BhZGRlZCA9IGJ4ICogYmxvY2tfdG9rZW4KICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uoc2VsZi5jb25maWdbIm5fcm91dGVkX2V4cGVydHMiXSk6CiAgICAgICAgICAgICAgICBpZiBtX3N0YXJ0X3BhZGRlZCA+PSBncm91cF9wYWRkZWRfb2Zmc2V0c1tpXToKICAgICAgICAgICAgICAgICAgICBncm91cF9pZHhfZm9yX2J4W2J4XSA9IGkKCiAgICAgICAgZ3JvdXBfcGFkZGVkX29mZnNldHMgPSB0b3JjaC50ZW5zb3IoZ3JvdXBfcGFkZGVkX29mZnNldHMsIGR0eXBlPXRvcmNoLmludDMyLCBkZXZpY2U9c2VsZi5kZXZpY2UpCiAgICAgICAgZ3JvdXBfaWR4X2Zvcl9ieCA9IHRvcmNoLnRlbnNvcihncm91cF9pZHhfZm9yX2J4LCBkdHlwZT10b3JjaC5pbnQzMiwgZGV2aWNlPXNlbGYuZGV2aWNlKQogICAgICAgICMgdXBfbG9naXRzX3JvdXRlZCA9IHRvcmNoLmVtcHR5KCh4X2ZsYXQuc2hhcGVbMF0gKiBudW1fcGVyX3Rvaywgc2VsZi5jb25maWdbImRfZXhwZXJ0Il0pLCBkdHlwZT14LmR0eXBlLCBkZXZpY2U9c2VsZi5kZXZpY2UpCiAgICAgICAgIyBleHBlcnRfb3V0cHV0X3JvdXRlZCA9IHRvcmNoLmVtcHR5KCh4X2ZsYXQuc2hhcGVbMF0gKiBudW1fcGVyX3Rvaywgc2VsZi5jb25maWdbImRfaGlkZGVuIl0pLCBkdHlwZT14LmR0eXBlLCBkZXZpY2U9c2VsZi5kZXZpY2UpCgogICAgICAgIHNoYXJlZF9zdHJlYW0gPSB0b3JjaC5jdWRhLlN0cmVhbSgpCiAgICAgICAgcm91dGVkX3N0cmVhbSA9IHRvcmNoLmN1ZGEuZGVmYXVsdF9zdHJlYW0oKQogICAgICAgIHRvcmNoLmN1ZGEuc3luY2hyb25pemUoKQoKICAgICAgICB3aXRoIHRvcmNoLmN1ZGEuc3RyZWFtKHJvdXRlZF9zdHJlYW0pOgogICAgICAgICAgICAjIFRpbGVsYW5nIHZlcnNpb246IEdyb3VwZWQgR0VNTQogICAgICAgICAgICBzZWxmLnJvdXRlZF9rZXJuZWwoc2VsZi5zdGFja2VkX2V4cGVydF90b2tlbnMsIHNlbGYuc3RhY2tlZF9leHBlcnRfd19nYXRlLCBzZWxmLnN0YWNrZWRfZXhwZXJ0X3dfdXAsIHNlbGYuc3RhY2tlZF9leHBlcnRfd19kb3duLCBzZWxmLnN0YWNrZWRfZXhwZXJ0X3dlaWdodHMsIGdyb3VwX3NpemVzLCBncm91cF9vZmZzZXQsIGdyb3VwX3BhZGRlZF9vZmZzZXRzLCBncm91cF9pZHhfZm9yX2J4LCBzZWxmLnVwX2xvZ2l0c19yb3V0ZWQsIHNlbGYuZXhwZXJ0X291dHB1dF9yb3V0ZWQpCiAgICAgICAgICAgICMgc2VsZi5yb3V0ZWRfa2VybmVsKHN0YWNrZWRfZXhwZXJ0X3Rva2Vucywgc2VsZi5zdGFja2VkX2V4cGVydF93X2dhdGVfdXBfY2F0LCBzZWxmLnN0YWNrZWRfZXhwZXJ0X3dfZG93biwgc3RhY2tlZF9leHBlcnRfd2VpZ2h0cywgZ3JvdXBfc2l6ZXMsIGdyb3VwX29mZnNldCwgZ3JvdXBfcGFkZGVkX29mZnNldHMsIHNlbGYuZ2F0ZV91cF9jYXRfbG9naXRzX3JvdXRlZCwgc2VsZi51cF9sb2dpdHNfcm91dGVkLCBzZWxmLmV4cGVydF9vdXRwdXRfcm91dGVkKQoKICAgICAgICAgICAgIyBTY2F0dGVyIHJlZHVjZQogICAgICAgICAgICBzZWxmLmV4cGVydF9jYWNoZSA9IHRvcmNoLnNjYXR0ZXJfcmVkdWNlKAogICAgICAgICAgICAgICAgc2VsZi5leHBlcnRfY2FjaGUsCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgc2VsZi5zdGFja2VkX2V4cGVydF90b2tlbnNfaWR4cy52aWV3KC0xLCAxKS5yZXBlYXQoMSwgeF9mbGF0LnNoYXBlWy0xXSksCiAgICAgICAgICAgICAgICBzZWxmLmV4cGVydF9vdXRwdXRfcm91dGVkLAogICAgICAgICAgICAgICAgcmVkdWNlPSdzdW0nCiAgICAgICAgICAgICkKICAgICAgICAgICAgcm91dGVkX291dHB1dCA9IHNlbGYuZXhwZXJ0X2NhY2hlLnZpZXcoKm9yaWdfc2hhcGUpCgogICAgICAgIHdpdGggdG9yY2guY3VkYS5zdHJlYW0oc2hhcmVkX3N0cmVhbSk6CiAgICAgICAgICAgICMgVXNlIHRpbGVsYW5nIHRvIGltcGxlbWVudCB0aGUgbW9lIGluZmVyZW5jZSBvZiBzaGFyZWQgZXhwZXJ0cwogICAgICAgICAgICBzZWxmLnNoYXJlZF9rZXJuZWwoeF9mbGF0LCBzZWxmLnNoYXJlZF9leHBlcnQuV19nYXRlX3dlaWdodCwgc2VsZi5zaGFyZWRfZXhwZXJ0LldfdXBfd2VpZ2h0LCBzZWxmLnNoYXJlZF9leHBlcnQuV19kb3duX3dlaWdodCwgc2VsZi51cF9sb2dpdHNfc2hhcmVkLCBzZWxmLmV4cGVydF9vdXRwdXRfc2hhcmVkKQogICAgICAgICAgICBzaGFyZWRfb3V0cHV0ID0gc2VsZi5leHBlcnRfb3V0cHV0X3NoYXJlZC52aWV3KCpvcmlnX3NoYXBlKQoKICAgICAgICAgICAgIyBzaGFyZWRfb3V0cHV0ID0gc2VsZi5zaGFyZWRfZXhwZXJ0KHgpCgogICAgICAgIHRvcmNoLmN1ZGEuc3luY2hyb25pemUoKQoKICAgICAgICByZXR1cm4gcm91dGVkX291dHB1dCArIHNoYXJlZF9vdXRwdXQKCiAgICAjIEB0b3JjaC5ub19ncmFkKCkKICAgICMgZGVmIG1vZV9pbmZlcihzZWxmLAogICAgIyAgICAgICAgICAgICAgIHg6IHRvcmNoLlRlbnNvciwKICAgICMgICAgICAgICAgICAgICBmbGF0X2V4cGVydF9pbmRpY2VzOiB0b3JjaC5UZW5zb3IsCiAgICAjICAgICAgICAgICAgICAgZmxhdF9leHBlcnRfd2VpZ2h0czogdG9yY2guVGVuc29yCiAgICAjICAgICAgICAgICAgICApIC0+IHRvcmNoLlRlbnNvcjoKCiAgICAjICAgICByZXR1cm4gc2VsZi5leHBlcnRfY2FjaGUKCgpkZWYgY3VzdG9tX2tlcm5lbChkYXRhOiBpbnB1dF90KSAtPiBvdXRwdXRfdDoKICAgICIiIgogICAgU3VibWlzc2lvbiB0ZW1wbGF0ZSBmb3IgRGVlcFNlZWstc3R5bGUgTWl4dHVyZSBvZiBFeHBlcnRzIHVzaW5nIFB5VG9yY2guCiAgICAKICAgIEFyZ3M6CiAgICAgICAgZGF0YTogVHVwbGUgb2YgKGlucHV0OiB0b3JjaC5UZW5zb3IsIHdlaWdodHM6IERpY3Rbc3RyLCB0b3JjaC5UZW5zb3JdLCBjb25maWc6IERpY3QpCiAgICAgICAgICAgIC0gaW5wdXQ6IElucHV0IHRlbnNvciBvZiBzaGFwZSBbYmF0Y2hfc2l6ZSwgc2VxX2xlbiwgaGlkZGVuX3NpemVdCiAgICAgICAgICAgIC0gd2VpZ2h0czogRGljdGlvbmFyeSBjb250YWluaW5nIG1vZGVsIHdlaWdodHMKICAgICAgICAgICAgLSBjb25maWc6IERpY3Rpb25hcnkgY29udGFpbmluZyBtb2RlbCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMKICAgICAgICAgICAgCiAgICBSZXR1cm5zOgogICAgICAgIFR1cGxlIGNvbnRhaW5pbmc6CiAgICAgICAgICAgIC0gb3V0cHV0OiBQcm9jZXNzZWQgdGVuc29yIFtiYXRjaF9zaXplLCBzZXFfbGVuLCBkX21vZGVsXQogICAgICAgICAgICAtIGF1eF9kYXRhOiBEaWN0aW9uYXJ5IHdpdGggYXV4aWxpYXJ5IGRhdGEKICAgICIiIgogICAgaW5wdXRfdGVuc29yLCB3ZWlnaHRzLCBjb25maWcgPSBkYXRhCgogICAgZHR5cGVfc3RyID0gImZsb2F0MTYiCgogICAgIyBzdGFydF90aW1lID0gdGltZS5wZXJmX2NvdW50ZXJfbnMoKQogICAgIyBkZWYgZ2V0X2NvbmZpZ3MoKToKICAgICMgICAgIGltcG9ydCBpdGVydG9vbHMKICAgICMgICAgIEJMT0NLX00gPSBbMzIsIDY0LCAxMjhdCiAgICAjICAgICBCTE9DS19OID0gWzMyLCA2NCwgMTI4XQogICAgIyAgICAgQkxPQ0tfSyA9IFszMiwgNjQsIDEyOF0KICAgICMgICAgIG51bV9zdGFnZXMgPSBbMCwgMSwgMl0KICAgICMgICAgIHRocmVhZHMgPSBbMTI4LCAyNTZdCiAgICAjICAgICBrX3BhY2sgPSBbMSwgMiwgNCwgOF0KICAgICMgICAgIGNvYWxlc2NlZF93aWR0aCA9IFsxLCAyLCA0XQogICAgIyAgICAgIyBudW1fc3RhZ2VzID0gWzFdCiAgICAjICAgICAjIHRocmVhZHMgPSBbMTI4XQogICAgIyAgICAgIyBrX3BhY2sgPSBbMV0KICAgICMgICAgICMgY29hbGVzY2VkX3dpZHRoID0gWzRdCiAgICAjICAgICBfY29uZmlncyA9IGxpc3QoaXRlcnRvb2xzLnByb2R1Y3QoQkxPQ0tfTSwgQkxPQ0tfTiwgQkxPQ0tfSywgbnVtX3N0YWdlcywgdGhyZWFkcywga19wYWNrLCBjb2FsZXNjZWRfd2lkdGgpKQogICAgICAgIAogICAgIyAgICAgcmV0dXJuIFt7CiAgICAjICAgICAgICAgImJsb2NrX00iOiBjWzBdLAogICAgIyAgICAgICAgICJibG9ja19OIjogY1sxXSwKICAgICMgICAgICAgICAiYmxvY2tfSyI6IGNbMl0sCiAgICAjICAgICAgICAgIm51bV9zdGFnZXMiOiBjWzNdLAogICAgIyAgICAgICAgICJ0aHJlYWRzIjogY1s0XSwKICAgICMgICAgICAgICAia19wYWNrIjogY1s1XSwKICAgICMgICAgICAgICAiY29hbGVzY2VkX3dpZHRoIjogY1s2XSwKICAgICMgICAgIH0gZm9yIGMgaW4gX2NvbmZpZ3NdCiAgICAKICAgICMgZGVmIHdyYXBwZWRfa2VybmVsKGJsb2NrX009Tm9uZSwgYmxvY2tfTj1Ob25lLCBibG9ja19LPU5vbmUsIG51bV9zdGFnZXM9Tm9uZSwgdGhyZWFkcz1Ob25lLCBrX3BhY2s9Tm9uZSwgY29hbGVzY2VkX3dpZHRoPU5vbmUpOgogICAgIyAgICAgcmV0dXJuIG1vZV9mb3J3YXJkX3RpbGVsYW5nX3JvdXRlZChjb25maWdbImRfaGlkZGVuIl0sIGNvbmZpZ1siZF9leHBlcnQiXSwgY29uZmlnWyJuX3JvdXRlZF9leHBlcnRzIl0sIGR0eXBlPWR0eXBlX3N0ciwgZ3JvdXBfc3VtPWNvbmZpZ1siYmF0Y2hfc2l6ZSJdICogY29uZmlnWyJzZXFfbGVuIl0gKiBjb25maWdbIm5fZXhwZXJ0c19wZXJfdG9rZW4iXSwgZ3JvdXBfY291bnQ9Y29uZmlnWyJuX3JvdXRlZF9leHBlcnRzIl0sIGJsb2NrX3Rva2VuPWJsb2NrX00sIGJsb2NrX2RoaWRkZW49YmxvY2tfTiwgYmxvY2tfZGV4cGVydD1ibG9ja19LLCB0aHJlYWRzPXRocmVhZHMsIG51bV9zdGFnZXM9bnVtX3N0YWdlcywga19wYWNrPWtfcGFjaywgY29hbGVzY2VkX3dpZHRoPWNvYWxlc2NlZF93aWR0aCkKICAgIAogICAgIyBhdXRvdHVuZXIgPSBBdXRvVHVuZXIuZnJvbV9rZXJuZWwoCiAgICAjICAgICBrZXJuZWw9d3JhcHBlZF9rZXJuZWwsCiAgICAjICAgICBjb25maWdzPWdldF9jb25maWdzKCkKICAgICMgKS5zZXRfY29tcGlsZV9hcmdzKAogICAgIyAgICAgb3V0X2lkeD1bLTFdLAogICAgIyAgICAgdGFyZ2V0PSJoaXAiLAogICAgIyApCiAgICAjIHR1bmVfcmVzdWx0ID0gYXV0b3R1bmVyLnJ1bih3YXJtdXA9MywgcmVwPTEwKQogICAgIyBiZXN0X2xhdGVuY3kgPSB0dW5lX3Jlc3VsdC5sYXRlbmN5CiAgICAjIGJlc3RfY29uZmlnID0gdHVuZV9yZXN1bHQuY29uZmlnCiAgICAjIHByaW50KGYiQmVzdCBsYXRlbmN5OiB7YmVzdF9sYXRlbmN5fSIpCiAgICAjIHByaW50KGYiQmVzdCBjb25maWc6IHtiZXN0X2NvbmZpZ30iKQogICAgCiAgICBzaGFyZWRfa2VybmVsID0gbW9lX2ZvcndhcmRfdGlsZWxhbmdfc2hhcmVkKGNvbmZpZ1siZF9oaWRkZW4iXSwgY29uZmlnWyJkX2V4cGVydCJdLCBjb25maWdbIm5fc2hhcmVkX2V4cGVydHMiXSwgZHR5cGU9ZHR5cGVfc3RyLCBudW1fdG9rZW5zPWNvbmZpZ1siYmF0Y2hfc2l6ZSJdICogY29uZmlnWyJzZXFfbGVuIl0pCiAgICAjIHNoYXJlZF9rZXJuZWwgPSB0aWxlbGFuZy5jb21waWxlKHNoYXJlZF9wcm9ncmFtLCBvdXRfaWR4PVstMV0sIHBhc3NfY29uZmlncz17InRsLmRpc2FibGVfdG1hX2xvd2VyIjogVHJ1ZSwgInRsLmRpc2FibGVfd2FycF9zcGVjaWFsaXplZCI6IFRydWV9KQogICAgcm91dGVkX2tlcm5lbCA9IG1vZV9mb3J3YXJkX3RpbGVsYW5nX3JvdXRlZChjb25maWdbImRfaGlkZGVuIl0sIGNvbmZpZ1siZF9leHBlcnQiXSwgY29uZmlnWyJuX3JvdXRlZF9leHBlcnRzIl0sIGR0eXBlPWR0eXBlX3N0ciwgZ3JvdXBfc3VtPWNvbmZpZ1siYmF0Y2hfc2l6ZSJdICogY29uZmlnWyJzZXFfbGVuIl0gKiBjb25maWdbIm5fZXhwZXJ0c19wZXJfdG9rZW4iXSwgZ3JvdXBfY291bnQ9Y29uZmlnWyJuX3JvdXRlZF9leHBlcnRzIl0sIGJsb2NrX3Rva2VuPTEyOCwgYmxvY2tfZGhpZGRlbj0xMjgsIGJsb2NrX2RleHBlcnQ9MTI4LCB0aHJlYWRzPTI1NiwgbnVtX3N0YWdlcz0xLCBrX3BhY2s9MSwgY29hbGVzY2VkX3dpZHRoPTIpCiAgICAjIHJvdXRlZF9rZXJuZWwgPSB0aWxlbGFuZy5jb21waWxlKHJvdXRlZF9wcm9ncmFtLCBvdXRfaWR4PVstMV0sIHBhc3NfY29uZmlncz17InRsLmRpc2FibGVfdG1hX2xvd2VyIjogVHJ1ZSwgInRsLmRpc2FibGVfd2FycF9zcGVjaWFsaXplZCI6IFRydWV9KQoKICAgICMgZW5kX3RpbWUgPSB0aW1lLnBlcmZfY291bnRlcl9ucygpCiAgICAjIGNvbXBpbGVfdGltZSA9IGVuZF90aW1lIC0gc3RhcnRfdGltZQogICAgIyBwcmludChmIlRpbWUgdGFrZW4gdG8gY29tcGlsZSBrZXJuZWxzOiB7Y29tcGlsZV90aW1lfSBucyIpCgogICAgIyBzdGFydF90aW1lID0gdGltZS5wZXJmX2NvdW50ZXJfbnMoKQogICAgbW9lID0gTW9FKGNvbmZpZywgc2hhcmVkX2tlcm5lbCwgcm91dGVkX2tlcm5lbCwgd2VpZ2h0cywgcGFkZGluZ19NPTEyOCkKICAgICMgZW5kX3RpbWUgPSB0aW1lLnBlcmZfY291bnRlcl9ucygpCiAgICAjIGluaXRfdGltZSA9IGVuZF90aW1lIC0gc3RhcnRfdGltZQogICAgIyBwcmludChmIlRpbWUgdGFrZW4gdG8gaW5pdGlhbGl6ZSBtb2RlbDoge2luaXRfdGltZX0gbnMiKQoKICAgICMgc3RhcnRfdGltZSA9IHRpbWUucGVyZl9jb3VudGVyX25zKCkKICAgICMgUnVuIHRoZSBtb2RlbAogICAgIyB3aXRoIHByb2ZpbGUoYWN0aXZpdGllcz1bUHJvZmlsZXJBY3Rpdml0eS5DUFUsIFByb2ZpbGVyQWN0aXZpdHkuQ1VEQV0sIHJlY29yZF9zaGFwZXM9VHJ1ZSkgYXMgcHJvZjoKICAgIG91dHB1dCA9IG1vZShpbnB1dF90ZW5zb3IpCiAgICAjIGVuZF90aW1lID0gdGltZS5wZXJmX2NvdW50ZXJfbnMoKQogICAgIyBpbmZlcmVuY2VfdGltZSA9IGVuZF90aW1lIC0gc3RhcnRfdGltZQogICAgIyBwcmludChmIlRpbWUgdGFrZW4gdG8gcnVuIG1vZGVsOiB7aW5mZXJlbmNlX3RpbWV9IG5zIikKCiAgICAjIHByaW50KHByb2Yua2V5X2F2ZXJhZ2VzKCkudGFibGUoc29ydF9ieT0iY3B1X3RpbWVfdG90YWwiKSkKICAgICMgcHJvZi5leHBvcnRfY2hyb21lX3RyYWNlKCJtb2VfbXVsdGlzdHJlYW0uanNvbiIpCgoKICAgIHJldHVybiBvdXRwdXQ=

Source code from GPU Mode and the KernelBot dataset · June 9 Researcher Reciprocity License v1.0

Best evidence level for this revision: reported

JSON