submission 8915
KernelBot user 292 · 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.
test_K64.py
curl "https://kernelindex.com/api/v1/implementations/kernelbot-amd-fp8-mm-8915?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, 7168] · n=576 · seed=12346
AMD Instinct MI300X
235.9µs
#77 of 98
2025-04-25
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 7168] · n=512 · seed=6563
AMD Instinct MI300X
236.9µs
#77 of 98
2025-04-25
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 7168] · n=1536 · seed=8135
AMD Instinct MI300X
247.9µs
#70 of 98
2025-04-25
Show all 18 measurements ›Showing all 18 measurements ⌄
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=576 · seed=9863
AMD Instinct MI300X
377.1µs
#66 of 98
2025-04-25
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=512 · seed=12341
AMD Instinct MI300X
383.6µs
#73 of 98
2025-04-25
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 7168] · n=4608 · seed=7531
AMD Instinct MI300X
528.6µs
#81 of 98
2025-04-25
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=1536 · seed=6543
AMD Instinct MI300X
1.05ms
#82 of 98
2025-04-25
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=4608 · seed=65436
AMD Instinct MI300X
3.72ms
#83 of 98
2025-04-25
Reported · How evidence levels are derived →
Source and license
sourceavailable
revision digestsha256:82e486351170e131333d00554faf8c69846e6388818298c45fa80270c2d48756
license declaredunknown
license concludedunknown
imported2026-08-15
Kernel source
test_K64.py1 lines
IyBUaGlzIHNjcmlwdCBwcm92aWRlcyBhIHRlbXBsYXRlIGZvciB1c2luZyBsb2FkX2lubGluZSB0byBydW4gYSBISVAga2VybmVsIGZvcg0KZnJvbSB0b3JjaC51dGlscy5jcHBfZXh0ZW5zaW9uIGltcG9ydCBsb2FkX2lubGluZQ0KZnJvbSB0YXNrIGltcG9ydCBpbnB1dF90LCBvdXRwdXRfdA0KQ1BQX1dSQVBQRVIgPSAiIiINCnZvaWQgZnA4X21tKHRvcmNoOjpUZW5zb3IgYSwgdG9yY2g6OlRlbnNvciBiLCB0b3JjaDo6VGVuc29yIGFzLCB0b3JjaDo6VGVuc29yIGJzLCB0b3JjaDo6VGVuc29yIGMpOw0KIiIiDQoNCkNVREFfU1JDID0gIiIiDQojaW5jbHVkZSA8aGlwL2FtZF9kZXRhaWwvYW1kX2hpcF9mcDguaD4NCiNpbmNsdWRlIDxoaXAvYW1kX2RldGFpbC9hbWRfaGlwX2JmMTYuaD4NCiNpbmNsdWRlIDxyb2N3bW1hL3JvY3dtbWEuaHBwPg0KI2luY2x1ZGUgPGNvb3BlcmF0aXZlX2dyb3Vwcy5oPg0KbmFtZXNwYWNlIGNnID0gY29vcGVyYXRpdmVfZ3JvdXBzOw0KDQp1c2luZyBmbG9hdHgxNiA9IF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXygxNiAqIHNpemVvZihmbG9hdCkpKSkgZmxvYXQ7DQoNCiNkZWZpbmUgS19KVU1QIDEyOA0KI2RlZmluZSBXTU1BX00gMzINCiNkZWZpbmUgV01NQV9OIDMyDQojZGVmaW5lIFdNTUFfSyAxNg0KI2RlZmluZSBXQVJQX1NJWkUgNjQNCiNkZWZpbmUgV01NQV9QTEFDRUhPTERFUiA0DQoNCl9fZ2xvYmFsX18gdm9pZCBjdXN0b21fa2VybmVsKGNvbnN0IF9faGlwX2ZwOF9lNG0zX2ZudXoqIEFfcHRyLCBjb25zdCBfX2hpcF9mcDhfZTRtM19mbnV6KiBCX3B0ciwgY29uc3QgZmxvYXQqIEFzX3B0ciwgY29uc3QgZmxvYXQqIEJzX3B0ciwgcm9jd21tYTo6YmZsb2F0MTZfdCogQ19wdHIsIGludCBNLCBpbnQgTiwgaW50IEspIHsNCiAgICAvKg0KICAgIGEgYmxvY2sgY292ZXJzIDMyeDMyeDQgZWxlbQ0KICAgIG51bV93YXJwX3ggPSA0DQogICAgbnVtX3dhcnBfeSA9IDENCiAgICBibG9jayBzaXplID0gKCg2NCAqIG51bV93YXJwX3gpLCBudW1fd2FycF95KSA9IDI1NiB0aHJlYWRzDQogICAgZ3JpZCBzaXplID0gKE4gLyAobnVtX3dhcnBfeCAqIFdNTUFfTiksIE0gLyAobnVtX3dhcnBfeSAqIFdNTUFfTSkpDQoNCiAgICBBOiBNIHggSyBjb2wtbWFqICAtLS0gQXMgKDF4MTI4IHNjYWxpbmcpOiBNIHggSy8xMjggY29sLW1hag0KICAgIEI6IEsgeCBOIHJvdy1tYWogIC0tLSBCcyAoMTI4eDEyOCBzY2FsaW5nKTogSy8xMjggeCBOLzEyOCByb3ctbWFqDQogICAgQzogTSB4IE4gcm93LW1hag0KICAgIE0sIE4gaXMgZGl2aXNpYmxlIGJ5IDY0DQogICAgSyBpcyBkaXZpc2libGUgYnkgMTI4DQogICAgKi8gICAgICANCiAgICBpbnQgd2FycF9pZHggPSB0aHJlYWRJZHgueCAvIFdBUlBfU0laRTsNCiAgICAvLyBpbnQgdGhyZWFkX2lkeCA9IHRocmVhZElkeC54ICUgV0FSUF9TSVpFOw0KICAgIA0KICAgIGludCBsZGEgPSBNOw0KICAgIGludCBsZGIgPSBOOw0KICAgIGludCBsZGMgPSBOOw0KICAgIA0KICAgIGludCBzbiA9IChOICsgMTI4IC0gMSkgLyAxMjg7DQoNCiAgICBpbnQgcm93X2Jhc2VfQyA9IGJsb2NrSWR4LnkgKiBXTU1BX007IC8vIHJvdyBiYXNlIG9mIHdhcnBzIGluIGEgYmxvY2sgaW4gQy4gRGl2aXNpYmxlIGJ5IFdNTV9NDQogICAgLy8gaW50IHdhcnBfY29sID0gKGJsb2NrSWR4LnggKiBibG9ja0RpbS54IC8gV0FSUF9TSVpFICsgd2FycF9pZHgpICogV01NQV9OOw0KICAgIGludCBjb2xfYmFzZV9DID0gYmxvY2tJZHgueCAqICgoYmxvY2tEaW0ueCAvIFdBUlBfU0laRSkgKiBXTU1BX04pICsgd2FycF9pZHggKiBXTU1BX047IC8vIENvbCBiYXNlIG9mIHdhcnBzIGluIGEgYmxvY2sgaW4gQy4gRGl2aXNpYmxlIGJ5IFdNTUFfTg0KDQogICAgaWYgKGNvbF9iYXNlX0MgPiBOKSByZXR1cm47DQogICAgDQogICAgYXV0byBmcmFnX2FjY19tYXN0ZXIgPSByb2N3bW1hOjpmcmFnbWVudDxyb2N3bW1hOjphY2N1bXVsYXRvciwgV01NQV9NLCBXTU1BX04sIFdNTUFfSywgZmxvYXQ+KCk7DQogICAgcm9jd21tYTo6ZmlsbF9mcmFnbWVudChmcmFnX2FjY19tYXN0ZXIsIDAuZik7DQoNCiAgICBmb3IgKGludCBrYmFzZSA9IDA7IGtiYXNlIDwgSzsga2Jhc2UgKz0gS19KVU1QKSB7DQogICAgICAgIGF1dG8gZnJhZ19hY2NfYmxvY2sgPSByb2N3bW1hOjpmcmFnbWVudDxyb2N3bW1hOjphY2N1bXVsYXRvciwgV01NQV9NLCBXTU1BX04sIFdNTUFfSywgZmxvYXQ+KCkgOw0KICAgICAgICByb2N3bW1hOjpmaWxsX2ZyYWdtZW50KGZyYWdfYWNjX2Jsb2NrLCAwLmYpOw0KDQogICAgICAgIGF1dG8gZnJhZ19hID0gcm9jd21tYTo6ZnJhZ21lbnQ8cm9jd21tYTo6bWF0cml4X2EsIFdNTUFfTSwgV01NQV9OLCBXTU1BX0ssIF9faGlwX2ZwOF9lNG0zX2ZudXosIHJvY3dtbWE6OmNvbF9tYWpvcj4oKTsNCiAgICAgICAgYXV0byBmcmFnX2IgPSByb2N3bW1hOjpmcmFnbWVudDxyb2N3bW1hOjptYXRyaXhfYiwgV01NQV9NLCBXTU1BX04sIFdNTUFfSywgX19oaXBfZnA4X2U0bTNfZm51eiwgcm9jd21tYTo6cm93X21ham9yPigpOyAgDQoNCiAgICAgICAgZm9yIChpbnQga21pbmkgPSAwOyBrbWluaSA8IEtfSlVNUDsga21pbmkgKz0gV01NQV9LKSB7DQogICAgICAgICAgICBpbnQga19vZmZzZXQgPSBrYmFzZSArIGttaW5pOyAgICAgICAgICAgIA0KICAgICAgICAgICAgcm9jd21tYTo6bG9hZF9tYXRyaXhfc3luYyhmcmFnX2EsIEFfcHRyICsgcm93X2Jhc2VfQyArIGtfb2Zmc2V0ICogbGRhLCBsZGEpOyAgICAgICAgICAgIA0KICAgICAgICAgICAgcm9jd21tYTo6bG9hZF9tYXRyaXhfc3luYyhmcmFnX2IsIEJfcHRyICsga19vZmZzZXQgKiBsZGIgKyBjb2xfYmFzZV9DLCBsZGIpOyAgICAgICAgDQogICAgICAgICAgICByb2N3bW1hOjptbWFfc3luYyhmcmFnX2FjY19ibG9jaywgZnJhZ19hLCBmcmFnX2IsIGZyYWdfYWNjX2Jsb2NrKTsNCiAgICAgICAgfSAvLyBlbmQgZm9yIGttaW5pDQoNCiAgICAgICAgLy8gTG9hZCBzY2FsZXINCg0KICAgICAgICBfX3NoYXJlZF9fIGZsb2F0IHRpbGVTY2FsZUFbV01NQV9NXVtXTU1BX04gKyAxXTsgLy8gY29sLW1ham9yIHRpbGVTY2FsZUFbY29sXVtyb3ddDQogICAgICAgIGZsb2F0IHNjYWxlQiA9IEJzX3B0clsoa2Jhc2UgLyAxMjgpICogc24gKyAoYmxvY2tJZHgueCAqICgoYmxvY2tEaW0ueCAvIFdBUlBfU0laRSkgKiBXTU1BX04pIC8gMTI4KV07IA0KDQogICAgICAgIGlmICh0aHJlYWRJZHgueCA8IFdNTUFfTSkgeyAgICAgICAgICAgDQogICAgICAgICAgICBmbG9hdCB2YWwgPSBBc19wdHJbcm93X2Jhc2VfQyArIHRocmVhZElkeC54ICsgTSAqIChrYmFzZSAvIDEyOCldICogc2NhbGVCOw0KICAgICAgICAgICAgLy8gUmVwbGljYXRlIHRoaXMgdmFsdWUgYWNyb3NzIGFsbCBjb2x1bW5zDQogICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IFdNTUFfTjsgKytqKSB7DQogICAgICAgICAgICAgICAgdGlsZVNjYWxlQVtqXVt0aHJlYWRJZHgueF0gPSB2YWw7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICAvLyBjZzo6dGhyZWFkX2Jsb2NrIHRoaXNfdGIgPSBjZzo6dGhpc190aHJlYWRfYmxvY2soKTsNCiAgICAgICAgLy8gYXV0byB0aWxlMTYgPSBjZzo6dGlsZWRfcGFydGl0aW9uPDE2Pih0aGlzX3RiKTsgLy8gMTI4IHRocmVhZHMgLT4gMTYgeCA4DQogICAgICAgIC8vIGludCB0MTZ4ID0gdGlsZTE2LnRocmVhZF9yYW5rKCk7DQogICAgICAgIC8vIGludCB0MTZ5ID0gdGlsZTE2Lm1ldGFfZ3JvdXBfcmFuaygpOw0KDQogICAgICAgIC8vIGZsb2F0IHZhbCA9IEFzX3B0cltyb3dfYmFzZV9DICsgdDE2eCArIE0gKiAoa2Jhc2UgLyAxMjgpXSAqIHNjYWxlQjsNCiAgICAgICAgLy8gdGlsZVNjYWxlQVt0MTZ5XVt0MTZ4XSA9IHZhbDsNCiAgICAgICAgLy8gdGlsZVNjYWxlQVt0MTZ5ICsgOF1bdDE2eF0gPSB2YWw7DQoNCiAgICAgICAgDQogICAgICAgIC8vIGlmICh0MTZ5ID09IDApew0KICAgICAgICAvLyAgICAgZmxvYXQgdmFsID0gQXNfcHRyW3Jvd19iYXNlX0MgKyB0MTZ4ICsgTSAqIChrYmFzZSAvIDEyOCldICogc2NhbGVCOw0KICAgICAgICAvLyAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBXTU1BX047ICsraikgew0KICAgICAgICAvLyAgICAgICAgIHRpbGVTY2FsZUFbal1bdDE2eF0gPSB2YWw7DQogICAgICAgIC8vICAgICB9ICAgICAgICAgICAgDQogICAgICAgIC8vIH0NCg0KICAgICAgICBfX3N5bmN0aHJlYWRzKCk7DQogICAgICAgIA0KICAgICAgICBhdXRvIGZyYWdfc2NhbGVBID0gcm9jd21tYTo6ZnJhZ21lbnQ8cm9jd21tYTo6YWNjdW11bGF0b3IsIFdNTUFfTSwgV01NQV9OLCBXTU1BX0ssIGZsb2F0PigpOw0KICAgICAgICByb2N3bW1hOjpsb2FkX21hdHJpeF9zeW5jKGZyYWdfc2NhbGVBLCAmdGlsZVNjYWxlQVswXVswXSwgV01NQV9OICsgMSwgcm9jd21tYTo6bWVtX2NvbF9tYWpvcik7DQoNCiAgICAgICAgLy8gVE9ETzogVHJ5IHRvIHVzZSBmcmFnX2FjY19tYXN0ZXIgYXMgYmZsb2F0MTYsIHNlZSBpZiBpdCdzIHdpdGhpbiBlcnJvci4NCiAgICAgICAgLy8gQXBwbHkgc2NhbGVyDQogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnJhZ19hY2NfbWFzdGVyLm51bV9lbGVtZW50czsgKytpKSB7DQogICAgICAgICAgICBmcmFnX2FjY19tYXN0ZXIueFtpXSArPSBmcmFnX3NjYWxlQS54W2ldICogZnJhZ19hY2NfYmxvY2sueFtpXTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICB9IC8vIGVuZCBmb3Iga2Jhc2UNCiAgIA0KICAgIC8vIENvbnZlcnQgZnAzMiB0byBiZjE2IGFuZCBzdG9yZQ0KICAgIGF1dG8gZnJhZ19yZXN1bHQgPSByb2N3bW1hOjpmcmFnbWVudDxyb2N3bW1hOjphY2N1bXVsYXRvciwgV01NQV9NLCBXTU1BX04sIFdNTUFfUExBQ0VIT0xERVIsIHJvY3dtbWE6OmJmbG9hdDE2X3Q+KCk7IC8vUGxhY2Vob2xkZXIgZnJhZw0KICAgIA0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnJhZ19hY2NfbWFzdGVyLm51bV9lbGVtZW50czsgKytpKSB7DQogICAgICAgIGZyYWdfcmVzdWx0LnhbaV0gPSAocm9jd21tYTo6YmZsb2F0MTZfdClmcmFnX2FjY19tYXN0ZXIueFtpXTsNCiAgICB9DQogICANCiAgICByb2N3bW1hOjpzdG9yZV9tYXRyaXhfc3luYyhDX3B0ciArIHJvd19iYXNlX0MgKiBsZGMgKyBjb2xfYmFzZV9DLCBmcmFnX3Jlc3VsdCwgbGRjLCByb2N3bW1hOjptZW1fcm93X21ham9yKTsNCn0NCg0Kdm9pZCBmcDhfbW0odG9yY2g6OlRlbnNvciBhLCB0b3JjaDo6VGVuc29yIGIsIHRvcmNoOjpUZW5zb3IgYXMsIHRvcmNoOjpUZW5zb3IgYnMsIHRvcmNoOjpUZW5zb3IgYykgew0KICAgIGludCBNID0gYS5zaXplKDApOw0KICAgIGludCBOID0gYi5zaXplKDApOw0KICAgIGludCBLID0gYS5zaXplKDEpOw0KDQogICAgaW50IG51bV93YXJwX3ggPSAyOw0KICAgIGludCBudW1fd2FycF95ID0gMTsNCiAgICBkaW0zIGJsb2NrX3NpemUoKFdBUlBfU0laRSAqIG51bV93YXJwX3gpLCBudW1fd2FycF95KTsNCiAgICBkaW0zIGdyaWRfc2l6ZSgoTiArIG51bV93YXJwX3ggKiBXTU1BX04gLSAxKSAvIChudW1fd2FycF94ICogV01NQV9OKSwgDQogICAgICAgICAgICAgICAgICAgKE0gKyBudW1fd2FycF95ICogV01NQV9NIC0gMSkgLyAobnVtX3dhcnBfeSAqIFdNTUFfTSkpOw0KDQogICAgY3VzdG9tX2tlcm5lbDw8PGdyaWRfc2l6ZSwgYmxvY2tfc2l6ZSwgMCwgMD4+PiAoKF9faGlwX2ZwOF9lNG0zX2ZudXoqKWEuZGF0YV9wdHIoKSwgKF9faGlwX2ZwOF9lNG0zX2ZudXoqKWIuZGF0YV9wdHIoKSwgDQogICAgYXMuZGF0YV9wdHI8ZmxvYXQ+KCksIGJzLmRhdGFfcHRyPGZsb2F0PigpLCAocm9jd21tYTo6YmZsb2F0MTZfdCopYy5kYXRhX3B0cigpLCBNLCBOLCBLKTsNCiAgICAvL0MxMF9DVURBX0NIRUNLKGN1ZGFHZXRMYXN0RXJyb3IoKSk7DQp9DQoiIiINCg0KaW1wb3J0IG9zDQpvcy5lbnZpcm9uWyJDWFgiXSA9ICJjbGFuZysrIg0KaW1wb3J0IHRvcmNoDQpibG9ja19zaGFwZSA9IDEyOA0KDQptb2R1bGUgPSBsb2FkX2lubGluZSgNCiAgICBuYW1lPSdmcDhfbW0nLA0KICAgIGNwcF9zb3VyY2VzPVtDUFBfV1JBUFBFUl0sDQogICAgY3VkYV9zb3VyY2VzPVtDVURBX1NSQ10sDQogICAgZnVuY3Rpb25zPVsnZnA4X21tJ10sDQogICAgdmVyYm9zZT1UcnVlLA0KICAgIGV4dHJhX2N1ZGFfY2ZsYWdzPVsiLS1vZmZsb2FkLWFyY2g9Z2Z4OTQyIiwgIi1zdGQ9YysrMjAiLCAiLU8yIl0sDQopDQojIE8xIGlzIHNsb3csIC1PMiBpcyBlcXVhbCB0byBub3RoaW5nLCAgLU8zIGlzIHNsaWdodGx5IHNsb3dlciB0aGFuIE8yIChtYXliZSBzYW1lKQ0KDQpkZWYgY3VzdG9tX2tlcm5lbChkYXRhOiBpbnB1dF90KSAtPiBvdXRwdXRfdDoNCiAgICBhLCBiLCBhX3NjYWxlLCBiX3NjYWxlLCBjID0gZGF0YQ0KICAgIG1vZHVsZS5mcDhfbW0oYSwgYiwgYV9zY2FsZSwgYl9zY2FsZSwgYykNCiAgICByZXR1cm4gYw0KSource 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 7722.
- IyBUaGlzIHNjcmlwdCBwcm92aWRlcyBhIHRlbXBsYXRlIGZvciB1c2luZyBsb2FkX2lubGluZSB0byBydW4gYSBISVAga2VybmVsIGZvcg0KZnJvbSB0b3JjaC51dGlscy5jcHBfZXh0ZW5zaW9uIGltcG9ydCBsb2FkX2lubGluZQ0KZnJvbSB0YXNrIGltcG9ydCBpbnB1dF90LCBvdXRwdXRfdA0KQ1BQX1dSQVBQRVIgPSAiIiINCnZvaWQgZnA4X21tKHRvcmNoOjpUZW5zb3IgYSwgdG9yY2g6OlRlbnNvciBiLCB0b3JjaDo6VGVuc29yIGFzLCB0b3JjaDo6VGVuc29yIGJzLCB0b3JjaDo6VGVuc29yIGMpOw0KIiIiDQoNCkNVREFfU1JDID0gIiIiDQojaW5jbHVkZSA8aGlwL2FtZF9kZXRhaWwvYW1kX2hpcF9mcDguaD4NCiNpbmNsdWRlIDxoaXAvYW1kX2RldGFpbC9hbWRfaGlwX2JmMTYuaD4NCnVzaW5nIGZsb2F0eDE2ID0gX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDE2ICogc2l6ZW9mKGZsb2F0KSkpKSBmbG9hdDsNCg0KX19nbG9iYWxfXyB2b2lkIGN1c3RvbV9rZXJuZWwoY29uc3QgX19oaXBfZnA4X2U0bTNfZm51eiogQV9wdHIsIGNvbnN0IF9faGlwX2ZwOF9lNG0zX2ZudXoqIEJfcHRyLCBjb25zdCBmbG9hdCogQXNfcHRyLCBjb25zdCBmbG9hdCogQnNfcHRyLCBfX2hpcF9iZmxvYXQxNiogQ19wdHIsIGludCBNLCBpbnQgTiwgaW50IEspIHsNCiAgICAvKg0KICAgIGEgYmxvY2sgY292ZXJzIDY0eDY0IGVsZW0NCiAgICBkaW0zIGJsb2NrX3NpemUoNjQsIDE2KSAtPiAxIHRocmVhZCBjYWxjdWxhdGVzIDQgZWxlbQ0KDQogICAgQTogTSB4IEsgY29sLW1haiAtLS0gQXMgKDF4MTI4IHNjYWxpbmcpOiBNIHggSy8xMjggY29sLW1hag0KICAgIEI6IEsgeCBOIHJvdy1tYWogLS0tIEJzICgxMjh4MTI4IHNjYWxpbmcpOiBLLzEyOCB4IE4vMTI4IHJvdy1tYWoNCiAgICBDOiBNIHggTiByb3ctbWFqDQogICAgTSwgTiwgSyBhcmUgZGl2aXNpYmxlIGJ5IDEyOA0KICAgICovICAgIA0KICAgIC8vdXNpbmcgZnA4eDggPSBfX2F0dHJpYnV0ZV9fKChfX3ZlY3Rvcl9zaXplX18oOCAqIHNpemVvZihfX2hpcF9mcDhfZTRtM19mbnV6KSkpKSBfX2hpcF9mcDhfZTRtM19mbnV6OyAgICANCiAgICANCiAgICANCiAgICB1c2luZyBmbG9hdHgxNiA9IF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXygxNiAqIHNpemVvZihmbG9hdCkpKSkgZmxvYXQ7DQogICAgICAgIA0KICAgIGludCB0eCA9IHRocmVhZElkeC54Ow0KICAgIGludCB0eSA9IHRocmVhZElkeC55Ow0KICAgIGludCBNYmFzZSA9IDMyICogYmxvY2tJZHgueTsNCiAgICBpbnQgTmJhc2UgPSAzMiAqIGJsb2NrSWR4Lng7DQoNCiAgICBpbnQgc24gPSAoTiArIDEyOCAtIDEpIC8gMTI4Ow0KDQogICAgLy8gX19zaGFyZWRfXyBfX2hpcF9mcDhfZTRtM19mbnV6IHRpbGVBWzEyOF1bMzJdOyAvLyBjb2wtbWFqID0gcm93LW1haiAoNjQsMTI4KSB0cmFuc3Bvc2VkDQogICAgLy8gX19zaGFyZWRfXyBfX2hpcF9mcDhfZTRtM19mbnV6IHRpbGVCWzEyOF1bMzJdOyAvLyByb3ctbWFqb3INCiAgICBfX3NoYXJlZF9fIGZsb2F0IHRpbGVBc1szMl07DQoNCiAgICBmbG9hdHgxNiBhY2N1bSA9IHswLmZ9OyAvLyBFYWNoIHRocmVhZCBjb21wdXRlcyAxNiBlbGVtZW50cw0KICAgICAgICANCg0KDQogICAgZm9yIChpbnQga2Jhc2UgPSAwOyBrYmFzZSA8IEs7IGtiYXNlICs9IDEyOCkgew0KICAgICAgICAvLyBMb2FkIHRpbGVzDQogICAgICAgIC8vIGZvciAoaW50IGttaW5pID0gMDsga21pbmkgPCAxMjg7IGttaW5pICs9Mil7IC8vIDIgPSBibG9ja19zaXplLnkNCiAgICAgICAgLy8gICAgIHRpbGVBW2ttaW5pICsgdHldW3R4XSA9IEFfcHRyW01iYXNlICsgdHggKyBNICogKGtiYXNlICsga21pbmkgKyB0eSldOw0KICAgICAgICAvLyAgICAgdGlsZUJba21pbmkgKyB0eV1bdHhdID0gQl9wdHJbKGtiYXNlICsga21pbmkgKyB0eSkgKiBOICsgTmJhc2UgKyB0eF07DQogICAgICAgIC8vIH0NCg0KICAgICAgICBpZiAodHkgPT0gMCl7DQogICAgICAgICAgICB0aWxlQXNbdHhdID0gQXNfcHRyW01iYXNlICsgdHggKyBNICogKGtiYXNlIC8gMTI4KV0gKiBCc19wdHJbKGtiYXNlIC8gMTI4KSAqIHNuICsgKE5iYXNlIC8gMTI4KV07DQogICAgICAgICAgICAvL19fc3luY3RocmVhZHMoKTsNCiAgICAgICAgfQ0KDQogICAgICAgIA0KICAgICAgICAvLyBNRk1BDQoNCiAgICAgICAgX19oaXBfZnA4X2U0bTNfZm51eiBhX2ZyYWdbOF07DQogICAgICAgIF9faGlwX2ZwOF9lNG0zX2ZudXogYl9mcmFnWzhdOw0KDQogICAgICAgIGZsb2F0eDE2IHRlbXBfYWNjdW0gPSB7MC5mfTsNCg0KICAgICAgICBmb3IgKGludCBrbWluaSA9IDA7IGttaW5pIDwgMTI4OyBrbWluaSArPSAxNikgew0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIGZvciAoaW50IHJlZ19pZHggPSAwOyByZWdfaWR4IDwgODsgKytyZWdfaWR4KXsNCiAgICAgICAgICAgICAgICAgICAgYV9mcmFnW3JlZ19pZHhdID0gQV9wdHJbKGtiYXNlICsga21pbmkgKyB0eSAqIDggKyByZWdfaWR4KSAqIE0gKyBNYmFzZSArIHR4XTsNCiAgICAgICAgICAgICAgICAgICAgYl9mcmFnW3JlZ19pZHhdID0gQl9wdHJbKGtiYXNlICsga21pbmkgKyB0eSAqIDggKyByZWdfaWR4KSAqIE4gKyBOYmFzZSArIHR4XTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICBsb25nIGFfZnJhZ19sb25nID0gKnJlaW50ZXJwcmV0X2Nhc3Q8bG9uZyo+KGFfZnJhZyk7DQogICAgICAgICAgICBsb25nIGJfZnJhZ19sb25nID0gKnJlaW50ZXJwcmV0X2Nhc3Q8bG9uZyo+KGJfZnJhZyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAvLyBNRk1BIGluc3RyaW5zaWMNCiAgICAgICAgICAgICAgICB0ZW1wX2FjY3VtID0gX19idWlsdGluX2FtZGdjbl9tZm1hX2YzMl8zMngzMngxNl9mcDhfZnA4KGFfZnJhZ19sb25nLCBiX2ZyYWdfbG9uZywgdGVtcF9hY2N1bSwgMCwgMCwgMCk7ICAgICAgICAgICANCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8gTXVsdCBzY2FsZXJzDQoNCiAgICAgICAgI3ByYWdtYSB1bnJvbGwNCiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyArK2kpew0KICAgICAgICAgICAgI3ByYWdtYSB1bnJvbGwNCiAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgNDsgKytqKXsNCiAgICAgICAgICAgICAgICBhY2N1bVtpICogNCArIGpdICs9IHRpbGVBc1s4ICogaSArIDQgKiB0eSArIGpdICogdGVtcF9hY2N1bVtpICogNCArIGpdOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9ICAgICAgICAgICANCg0KICAgICAgICAvL19fc3luY3RocmVhZHMoKTsNCg0KICAgIH0vLyBlbmQgZm9yIChpbnQga2Jhc2UgPSAwOyBrYmFzZSA8IEs7IGtiYXNlICs9IDEyOCkgDQogICAgDQogICAgLy8gU3RvcmUgYWNjdW0gdG8gR01FTQ0KICAgICNwcmFnbWEgdW5yb2xsDQogICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyArK2kpew0KICAgICAgICAjcHJhZ21hIHVucm9sbA0KICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDQ7ICsrail7DQogICAgICAgICAgICBDX3B0clsoTWJhc2UgKyA4ICogaSArIDQgKiB0eSArIGopICogTiArIE5iYXNlICsgdHhdID0gYWNjdW1baSAqIDQgKyBqXTsNCiAgICAgICAgfQ0KICAgIH0NCn0NCg0Kdm9pZCBmcDhfbW0odG9yY2g6OlRlbnNvciBhLCB0b3JjaDo6VGVuc29yIGIsIHRvcmNoOjpUZW5zb3IgYXMsIHRvcmNoOjpUZW5zb3IgYnMsIHRvcmNoOjpUZW5zb3IgYykgew0KICAgIGludCBNID0gYS5zaXplKDApOw0KICAgIGludCBOID0gYi5zaXplKDApOw0KICAgIGludCBLID0gYS5zaXplKDEpOw0KDQogICAgZGltMyBibG9ja1NpemUoMzIsIDIpOw0KICAgIGRpbTMgZ3JpZFNpemUoTi8zMiwgTS8zMik7DQoNCiAgICBjdXN0b21fa2VybmVsPDw8Z3JpZFNpemUsIGJsb2NrU2l6ZSwgMCwgMD4+PiAoKF9faGlwX2ZwOF9lNG0zX2ZudXoqKWEuZGF0YV9wdHIoKSwgKF9faGlwX2ZwOF9lNG0zX2ZudXoqKWIuZGF0YV9wdHIoKSwgDQogICAgYXMuZGF0YV9wdHI8ZmxvYXQ+KCksIGJzLmRhdGFfcHRyPGZsb2F0PigpLCAoX19oaXBfYmZsb2F0MTYqKWMuZGF0YV9wdHIoKSwgTSwgTiwgSyk7DQogICAgLy9DMTBfQ1VEQV9DSEVDSyhjdWRhR2V0TGFzdEVycm9yKCkpOw0KfQ0KIiIiDQoNCmltcG9ydCBvcw0Kb3MuZW52aXJvblsiQ1hYIl0gPSAiY2xhbmcrKyINCmltcG9ydCB0b3JjaA0KYmxvY2tfc2hhcGUgPSAxMjgNCg0KbW9kdWxlID0gbG9hZF9pbmxpbmUoDQogICAgbmFtZT0nZnA4X21tJywNCiAgICBjcHBfc291cmNlcz1bQ1BQX1dSQVBQRVJdLA0KICAgIGN1ZGFfc291cmNlcz1bQ1VEQV9TUkNdLA0KICAgIGZ1bmN0aW9ucz1bJ2ZwOF9tbSddLA0KICAgIHZlcmJvc2U9VHJ1ZSwNCiAgICBleHRyYV9jdWRhX2NmbGFncz1bIi0tb2ZmbG9hZC1hcmNoPWdmeDk0MiIsICItc3RkPWMrKzIwIiwgIi1ScGFzcy1hbmFseXNpcz1rZXJuZWwtcmVzb3VyY2UtdXNhZ2UiXSwNCikNCg0KDQpkZWYgY3VzdG9tX2tlcm5lbChkYXRhOiBpbnB1dF90KSAtPiBvdXRwdXRfdDoNCiAgICBhLCBiLCBhX3NjYWxlLCBiX3NjYWxlLCBjID0gZGF0YQ0KICAgIG1vZHVsZS5mcDhfbW0oYSwgYiwgYV9zY2FsZSwgYl9zY2FsZSwgYykNCiAgICByZXR1cm4gYw0KNo newline at end of file+ IyBUaGlzIHNjcmlwdCBwcm92aWRlcyBhIHRlbXBsYXRlIGZvciB1c2luZyBsb2FkX2lubGluZSB0byBydW4gYSBISVAga2VybmVsIGZvcg0KZnJvbSB0b3JjaC51dGlscy5jcHBfZXh0ZW5zaW9uIGltcG9ydCBsb2FkX2lubGluZQ0KZnJvbSB0YXNrIGltcG9ydCBpbnB1dF90LCBvdXRwdXRfdA0KQ1BQX1dSQVBQRVIgPSAiIiINCnZvaWQgZnA4X21tKHRvcmNoOjpUZW5zb3IgYSwgdG9yY2g6OlRlbnNvciBiLCB0b3JjaDo6VGVuc29yIGFzLCB0b3JjaDo6VGVuc29yIGJzLCB0b3JjaDo6VGVuc29yIGMpOw0KIiIiDQoNCkNVREFfU1JDID0gIiIiDQojaW5jbHVkZSA8aGlwL2FtZF9kZXRhaWwvYW1kX2hpcF9mcDguaD4NCiNpbmNsdWRlIDxoaXAvYW1kX2RldGFpbC9hbWRfaGlwX2JmMTYuaD4NCiNpbmNsdWRlIDxyb2N3bW1hL3JvY3dtbWEuaHBwPg0KI2luY2x1ZGUgPGNvb3BlcmF0aXZlX2dyb3Vwcy5oPg0KbmFtZXNwYWNlIGNnID0gY29vcGVyYXRpdmVfZ3JvdXBzOw0KDQp1c2luZyBmbG9hdHgxNiA9IF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXygxNiAqIHNpemVvZihmbG9hdCkpKSkgZmxvYXQ7DQoNCiNkZWZpbmUgS19KVU1QIDEyOA0KI2RlZmluZSBXTU1BX00gMzINCiNkZWZpbmUgV01NQV9OIDMyDQojZGVmaW5lIFdNTUFfSyAxNg0KI2RlZmluZSBXQVJQX1NJWkUgNjQNCiNkZWZpbmUgV01NQV9QTEFDRUhPTERFUiA0DQoNCl9fZ2xvYmFsX18gdm9pZCBjdXN0b21fa2VybmVsKGNvbnN0IF9faGlwX2ZwOF9lNG0zX2ZudXoqIEFfcHRyLCBjb25zdCBfX2hpcF9mcDhfZTRtM19mbnV6KiBCX3B0ciwgY29uc3QgZmxvYXQqIEFzX3B0ciwgY29uc3QgZmxvYXQqIEJzX3B0ciwgcm9jd21tYTo6YmZsb2F0MTZfdCogQ19wdHIsIGludCBNLCBpbnQgTiwgaW50IEspIHsNCiAgICAvKg0KICAgIGEgYmxvY2sgY292ZXJzIDMyeDMyeDQgZWxlbQ0KICAgIG51bV93YXJwX3ggPSA0DQogICAgbnVtX3dhcnBfeSA9IDENCiAgICBibG9jayBzaXplID0gKCg2NCAqIG51bV93YXJwX3gpLCBudW1fd2FycF95KSA9IDI1NiB0aHJlYWRzDQogICAgZ3JpZCBzaXplID0gKE4gLyAobnVtX3dhcnBfeCAqIFdNTUFfTiksIE0gLyAobnVtX3dhcnBfeSAqIFdNTUFfTSkpDQoNCiAgICBBOiBNIHggSyBjb2wtbWFqICAtLS0gQXMgKDF4MTI4IHNjYWxpbmcpOiBNIHggSy8xMjggY29sLW1hag0KICAgIEI6IEsgeCBOIHJvdy1tYWogIC0tLSBCcyAoMTI4eDEyOCBzY2FsaW5nKTogSy8xMjggeCBOLzEyOCByb3ctbWFqDQogICAgQzogTSB4IE4gcm93LW1hag0KICAgIE0sIE4gaXMgZGl2aXNpYmxlIGJ5IDY0DQogICAgSyBpcyBkaXZpc2libGUgYnkgMTI4DQogICAgKi8gICAgICANCiAgICBpbnQgd2FycF9pZHggPSB0aHJlYWRJZHgueCAvIFdBUlBfU0laRTsNCiAgICAvLyBpbnQgdGhyZWFkX2lkeCA9IHRocmVhZElkeC54ICUgV0FSUF9TSVpFOw0KICAgIA0KICAgIGludCBsZGEgPSBNOw0KICAgIGludCBsZGIgPSBOOw0KICAgIGludCBsZGMgPSBOOw0KICAgIA0KICAgIGludCBzbiA9IChOICsgMTI4IC0gMSkgLyAxMjg7DQoNCiAgICBpbnQgcm93X2Jhc2VfQyA9IGJsb2NrSWR4LnkgKiBXTU1BX007IC8vIHJvdyBiYXNlIG9mIHdhcnBzIGluIGEgYmxvY2sgaW4gQy4gRGl2aXNpYmxlIGJ5IFdNTV9NDQogICAgLy8gaW50IHdhcnBfY29sID0gKGJsb2NrSWR4LnggKiBibG9ja0RpbS54IC8gV0FSUF9TSVpFICsgd2FycF9pZHgpICogV01NQV9OOw0KICAgIGludCBjb2xfYmFzZV9DID0gYmxvY2tJZHgueCAqICgoYmxvY2tEaW0ueCAvIFdBUlBfU0laRSkgKiBXTU1BX04pICsgd2FycF9pZHggKiBXTU1BX047IC8vIENvbCBiYXNlIG9mIHdhcnBzIGluIGEgYmxvY2sgaW4gQy4gRGl2aXNpYmxlIGJ5IFdNTUFfTg0KDQogICAgaWYgKGNvbF9iYXNlX0MgPiBOKSByZXR1cm47DQogICAgDQogICAgYXV0byBmcmFnX2FjY19tYXN0ZXIgPSByb2N3bW1hOjpmcmFnbWVudDxyb2N3bW1hOjphY2N1bXVsYXRvciwgV01NQV9NLCBXTU1BX04sIFdNTUFfSywgZmxvYXQ+KCk7DQogICAgcm9jd21tYTo6ZmlsbF9mcmFnbWVudChmcmFnX2FjY19tYXN0ZXIsIDAuZik7DQoNCiAgICBmb3IgKGludCBrYmFzZSA9IDA7IGtiYXNlIDwgSzsga2Jhc2UgKz0gS19KVU1QKSB7DQogICAgICAgIGF1dG8gZnJhZ19hY2NfYmxvY2sgPSByb2N3bW1hOjpmcmFnbWVudDxyb2N3bW1hOjphY2N1bXVsYXRvciwgV01NQV9NLCBXTU1BX04sIFdNTUFfSywgZmxvYXQ+KCkgOw0KICAgICAgICByb2N3bW1hOjpmaWxsX2ZyYWdtZW50KGZyYWdfYWNjX2Jsb2NrLCAwLmYpOw0KDQogICAgICAgIGF1dG8gZnJhZ19hID0gcm9jd21tYTo6ZnJhZ21lbnQ8cm9jd21tYTo6bWF0cml4X2EsIFdNTUFfTSwgV01NQV9OLCBXTU1BX0ssIF9faGlwX2ZwOF9lNG0zX2ZudXosIHJvY3dtbWE6OmNvbF9tYWpvcj4oKTsNCiAgICAgICAgYXV0byBmcmFnX2IgPSByb2N3bW1hOjpmcmFnbWVudDxyb2N3bW1hOjptYXRyaXhfYiwgV01NQV9NLCBXTU1BX04sIFdNTUFfSywgX19oaXBfZnA4X2U0bTNfZm51eiwgcm9jd21tYTo6cm93X21ham9yPigpOyAgDQoNCiAgICAgICAgZm9yIChpbnQga21pbmkgPSAwOyBrbWluaSA8IEtfSlVNUDsga21pbmkgKz0gV01NQV9LKSB7DQogICAgICAgICAgICBpbnQga19vZmZzZXQgPSBrYmFzZSArIGttaW5pOyAgICAgICAgICAgIA0KICAgICAgICAgICAgcm9jd21tYTo6bG9hZF9tYXRyaXhfc3luYyhmcmFnX2EsIEFfcHRyICsgcm93X2Jhc2VfQyArIGtfb2Zmc2V0ICogbGRhLCBsZGEpOyAgICAgICAgICAgIA0KICAgICAgICAgICAgcm9jd21tYTo6bG9hZF9tYXRyaXhfc3luYyhmcmFnX2IsIEJfcHRyICsga19vZmZzZXQgKiBsZGIgKyBjb2xfYmFzZV9DLCBsZGIpOyAgICAgICAgDQogICAgICAgICAgICByb2N3bW1hOjptbWFfc3luYyhmcmFnX2FjY19ibG9jaywgZnJhZ19hLCBmcmFnX2IsIGZyYWdfYWNjX2Jsb2NrKTsNCiAgICAgICAgfSAvLyBlbmQgZm9yIGttaW5pDQoNCiAgICAgICAgLy8gTG9hZCBzY2FsZXINCg0KICAgICAgICBfX3NoYXJlZF9fIGZsb2F0IHRpbGVTY2FsZUFbV01NQV9NXVtXTU1BX04gKyAxXTsgLy8gY29sLW1ham9yIHRpbGVTY2FsZUFbY29sXVtyb3ddDQogICAgICAgIGZsb2F0IHNjYWxlQiA9IEJzX3B0clsoa2Jhc2UgLyAxMjgpICogc24gKyAoYmxvY2tJZHgueCAqICgoYmxvY2tEaW0ueCAvIFdBUlBfU0laRSkgKiBXTU1BX04pIC8gMTI4KV07IA0KDQogICAgICAgIGlmICh0aHJlYWRJZHgueCA8IFdNTUFfTSkgeyAgICAgICAgICAgDQogICAgICAgICAgICBmbG9hdCB2YWwgPSBBc19wdHJbcm93X2Jhc2VfQyArIHRocmVhZElkeC54ICsgTSAqIChrYmFzZSAvIDEyOCldICogc2NhbGVCOw0KICAgICAgICAgICAgLy8gUmVwbGljYXRlIHRoaXMgdmFsdWUgYWNyb3NzIGFsbCBjb2x1bW5zDQogICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IFdNTUFfTjsgKytqKSB7DQogICAgICAgICAgICAgICAgdGlsZVNjYWxlQVtqXVt0aHJlYWRJZHgueF0gPSB2YWw7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICAvLyBjZzo6dGhyZWFkX2Jsb2NrIHRoaXNfdGIgPSBjZzo6dGhpc190aHJlYWRfYmxvY2soKTsNCiAgICAgICAgLy8gYXV0byB0aWxlMTYgPSBjZzo6dGlsZWRfcGFydGl0aW9uPDE2Pih0aGlzX3RiKTsgLy8gMTI4IHRocmVhZHMgLT4gMTYgeCA4DQogICAgICAgIC8vIGludCB0MTZ4ID0gdGlsZTE2LnRocmVhZF9yYW5rKCk7DQogICAgICAgIC8vIGludCB0MTZ5ID0gdGlsZTE2Lm1ldGFfZ3JvdXBfcmFuaygpOw0KDQogICAgICAgIC8vIGZsb2F0IHZhbCA9IEFzX3B0cltyb3dfYmFzZV9DICsgdDE2eCArIE0gKiAoa2Jhc2UgLyAxMjgpXSAqIHNjYWxlQjsNCiAgICAgICAgLy8gdGlsZVNjYWxlQVt0MTZ5XVt0MTZ4XSA9IHZhbDsNCiAgICAgICAgLy8gdGlsZVNjYWxlQVt0MTZ5ICsgOF1bdDE2eF0gPSB2YWw7DQoNCiAgICAgICAgDQogICAgICAgIC8vIGlmICh0MTZ5ID09IDApew0KICAgICAgICAvLyAgICAgZmxvYXQgdmFsID0gQXNfcHRyW3Jvd19iYXNlX0MgKyB0MTZ4ICsgTSAqIChrYmFzZSAvIDEyOCldICogc2NhbGVCOw0KICAgICAgICAvLyAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBXTU1BX047ICsraikgew0KICAgICAgICAvLyAgICAgICAgIHRpbGVTY2FsZUFbal1bdDE2eF0gPSB2YWw7DQogICAgICAgIC8vICAgICB9ICAgICAgICAgICAgDQogICAgICAgIC8vIH0NCg0KICAgICAgICBfX3N5bmN0aHJlYWRzKCk7DQogICAgICAgIA0KICAgICAgICBhdXRvIGZyYWdfc2NhbGVBID0gcm9jd21tYTo6ZnJhZ21lbnQ8cm9jd21tYTo6YWNjdW11bGF0b3IsIFdNTUFfTSwgV01NQV9OLCBXTU1BX0ssIGZsb2F0PigpOw0KICAgICAgICByb2N3bW1hOjpsb2FkX21hdHJpeF9zeW5jKGZyYWdfc2NhbGVBLCAmdGlsZVNjYWxlQVswXVswXSwgV01NQV9OICsgMSwgcm9jd21tYTo6bWVtX2NvbF9tYWpvcik7DQoNCiAgICAgICAgLy8gVE9ETzogVHJ5IHRvIHVzZSBmcmFnX2FjY19tYXN0ZXIgYXMgYmZsb2F0MTYsIHNlZSBpZiBpdCdzIHdpdGhpbiBlcnJvci4NCiAgICAgICAgLy8gQXBwbHkgc2NhbGVyDQogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnJhZ19hY2NfbWFzdGVyLm51bV9lbGVtZW50czsgKytpKSB7DQogICAgICAgICAgICBmcmFnX2FjY19tYXN0ZXIueFtpXSArPSBmcmFnX3NjYWxlQS54W2ldICogZnJhZ19hY2NfYmxvY2sueFtpXTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICB9IC8vIGVuZCBmb3Iga2Jhc2UNCiAgIA0KICAgIC8vIENvbnZlcnQgZnAzMiB0byBiZjE2IGFuZCBzdG9yZQ0KICAgIGF1dG8gZnJhZ19yZXN1bHQgPSByb2N3bW1hOjpmcmFnbWVudDxyb2N3bW1hOjphY2N1bXVsYXRvciwgV01NQV9NLCBXTU1BX04sIFdNTUFfUExBQ0VIT0xERVIsIHJvY3dtbWE6OmJmbG9hdDE2X3Q+KCk7IC8vUGxhY2Vob2xkZXIgZnJhZw0KICAgIA0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnJhZ19hY2NfbWFzdGVyLm51bV9lbGVtZW50czsgKytpKSB7DQogICAgICAgIGZyYWdfcmVzdWx0LnhbaV0gPSAocm9jd21tYTo6YmZsb2F0MTZfdClmcmFnX2FjY19tYXN0ZXIueFtpXTsNCiAgICB9DQogICANCiAgICByb2N3bW1hOjpzdG9yZV9tYXRyaXhfc3luYyhDX3B0ciArIHJvd19iYXNlX0MgKiBsZGMgKyBjb2xfYmFzZV9DLCBmcmFnX3Jlc3VsdCwgbGRjLCByb2N3bW1hOjptZW1fcm93X21ham9yKTsNCn0NCg0Kdm9pZCBmcDhfbW0odG9yY2g6OlRlbnNvciBhLCB0b3JjaDo6VGVuc29yIGIsIHRvcmNoOjpUZW5zb3IgYXMsIHRvcmNoOjpUZW5zb3IgYnMsIHRvcmNoOjpUZW5zb3IgYykgew0KICAgIGludCBNID0gYS5zaXplKDApOw0KICAgIGludCBOID0gYi5zaXplKDApOw0KICAgIGludCBLID0gYS5zaXplKDEpOw0KDQogICAgaW50IG51bV93YXJwX3ggPSAyOw0KICAgIGludCBudW1fd2FycF95ID0gMTsNCiAgICBkaW0zIGJsb2NrX3NpemUoKFdBUlBfU0laRSAqIG51bV93YXJwX3gpLCBudW1fd2FycF95KTsNCiAgICBkaW0zIGdyaWRfc2l6ZSgoTiArIG51bV93YXJwX3ggKiBXTU1BX04gLSAxKSAvIChudW1fd2FycF94ICogV01NQV9OKSwgDQogICAgICAgICAgICAgICAgICAgKE0gKyBudW1fd2FycF95ICogV01NQV9NIC0gMSkgLyAobnVtX3dhcnBfeSAqIFdNTUFfTSkpOw0KDQogICAgY3VzdG9tX2tlcm5lbDw8PGdyaWRfc2l6ZSwgYmxvY2tfc2l6ZSwgMCwgMD4+PiAoKF9faGlwX2ZwOF9lNG0zX2ZudXoqKWEuZGF0YV9wdHIoKSwgKF9faGlwX2ZwOF9lNG0zX2ZudXoqKWIuZGF0YV9wdHIoKSwgDQogICAgYXMuZGF0YV9wdHI8ZmxvYXQ+KCksIGJzLmRhdGFfcHRyPGZsb2F0PigpLCAocm9jd21tYTo6YmZsb2F0MTZfdCopYy5kYXRhX3B0cigpLCBNLCBOLCBLKTsNCiAgICAvL0MxMF9DVURBX0NIRUNLKGN1ZGFHZXRMYXN0RXJyb3IoKSk7DQp9DQoiIiINCg0KaW1wb3J0IG9zDQpvcy5lbnZpcm9uWyJDWFgiXSA9ICJjbGFuZysrIg0KaW1wb3J0IHRvcmNoDQpibG9ja19zaGFwZSA9IDEyOA0KDQptb2R1bGUgPSBsb2FkX2lubGluZSgNCiAgICBuYW1lPSdmcDhfbW0nLA0KICAgIGNwcF9zb3VyY2VzPVtDUFBfV1JBUFBFUl0sDQogICAgY3VkYV9zb3VyY2VzPVtDVURBX1NSQ10sDQogICAgZnVuY3Rpb25zPVsnZnA4X21tJ10sDQogICAgdmVyYm9zZT1UcnVlLA0KICAgIGV4dHJhX2N1ZGFfY2ZsYWdzPVsiLS1vZmZsb2FkLWFyY2g9Z2Z4OTQyIiwgIi1zdGQ9YysrMjAiLCAiLU8yIl0sDQopDQojIE8xIGlzIHNsb3csIC1PMiBpcyBlcXVhbCB0byBub3RoaW5nLCAgLU8zIGlzIHNsaWdodGx5IHNsb3dlciB0aGFuIE8yIChtYXliZSBzYW1lKQ0KDQpkZWYgY3VzdG9tX2tlcm5lbChkYXRhOiBpbnB1dF90KSAtPiBvdXRwdXRfdDoNCiAgICBhLCBiLCBhX3NjYWxlLCBiX3NjYWxlLCBjID0gZGF0YQ0KICAgIG1vZHVsZS5mcDhfbW0oYSwgYiwgYV9zY2FsZSwgYl9zY2FsZSwgYykNCiAgICByZXR1cm4gYw0KNo newline at end of file
Best evidence level for this revision: reported
JSON